Repository: safety-orange/Imports-for-MPMB-s-Character-Sheet Branch: master Commit: 22c03d18558f Files: 142 Total size: 13.9 MB Directory structure: gitextract_021fw7i8/ ├── .github/ │ └── workflows/ │ └── main.yml ├── .gitignore ├── Homebrew/ │ └── reddit_20180203_Tome-of-Monstrous-Races.js ├── README.md ├── WotC 2024/ │ ├── not-reprinted_20140819_PHB.js │ ├── not-reprinted_20201117_TCoE.js │ ├── pub_20240917_PHB.js │ └── pub_20250218_MM.js ├── WotC material/ │ ├── all_WotC_pub+UA.js │ ├── all_WotC_published.js │ ├── all_WotC_unearthed_arcana.js │ ├── ps_20160427_Zendikar.js │ ├── ps_20160712_Innistrad.js │ ├── ps_20170216_Kaladesh.js │ ├── ps_20170705_Amonkhet.js │ ├── ps_20180109_Ixalan.js │ ├── ps_20180731_Dominaria.js │ ├── pub_20140715_LMoP.js │ ├── pub_20140818_PHB.js │ ├── pub_20140819_HotDQ+20141104_RoT.js │ ├── pub_20140930_MM.js │ ├── pub_20141209_DMG.js │ ├── pub_20150407_PotA.js │ ├── pub_20150415_AL-EE.js │ ├── pub_20150416_EE.js │ ├── pub_20150714_AL-RoD.js │ ├── pub_20150915_OotA.js │ ├── pub_20151103_SCAG.js │ ├── pub_20160315_CoS.js │ ├── pub_20160906_SKT.js │ ├── pub_20161115_VGtM.js │ ├── pub_20170404_TftYP.js │ ├── pub_20170915_Tortle.js │ ├── pub_20170919_ToA.js │ ├── pub_20171011_Grung.js │ ├── pub_20171121_XGtE.js │ ├── pub_20180529_MToF.js │ ├── pub_20180723_WGtE_dupl.js │ ├── pub_20180918_WDH.js │ ├── pub_20181107_LLoK.js │ ├── pub_20181120_GGtR.js │ ├── pub_20181120_WDotMM.js │ ├── pub_20190521_GoS.js │ ├── pub_20190618_AcqInc.js │ ├── pub_20190903_DnDEK_dupl.js │ ├── pub_20190917_DiA.js │ ├── pub_20190919_LR.js │ ├── pub_20191112_AWM.js │ ├── pub_20191119_ERftLW.js │ ├── pub_20200317_EGtW.js │ ├── pub_20200721_MOT.js │ ├── pub_20200915_RotF.js │ ├── pub_20201117-2_TCoE-sidekicks.js │ ├── pub_20201117_TCoE.js │ ├── pub_20210316_CM.js │ ├── pub_20210518_VRGtR.js │ ├── pub_20210921_WBtW.js │ ├── pub_20211019_FToD.js │ ├── pub_20211207_SCC.js │ ├── pub_20220125_MotM.js │ ├── pub_20220315_CotN.js │ ├── pub_20220816_Spelljammer.js │ ├── pub_20221206_Dragonlance.js │ ├── pub_20230221_KftGV.js │ ├── pub_20230815_GotG.js │ ├── pub_20230919_PaBTSO.js │ ├── pub_20231017_Planescape.js │ ├── pub_20231030_CoA.js │ ├── pub_20231114_BoMT.js │ ├── pub_20240521_VEoR.js │ ├── pub_20240716_QftIS.js │ ├── pub_al_20190917_ALPG-v9.1.js │ ├── ua_20150202_Eberron.js │ ├── ua_20150406_Modifying-Classes.js │ ├── ua_20150504_Waterborne-Adventures.js │ ├── ua_20150803_Modern-Magic.js │ ├── ua_20150909_Ranger.js │ ├── ua_20151005_Prestige Classes and Rune Magic.js │ ├── ua_20151102_Light,-Dark,-Underdark!.js │ ├── ua_20151217_That-Old-Black-Magic.js │ ├── ua_20160104_Kits-of-Old.js │ ├── ua_20160404_Gothic-Heroes.js │ ├── ua_20160606_Feats.js │ ├── ua_20160801_The-Faithful.js │ ├── ua_20160912_The-Ranger,-Revised.js │ ├── ua_20161107_Barbarian-Primal-Paths.js │ ├── ua_20161114_Bard-Colleges.js │ ├── ua_20161121_Cleric-Divine-Domains.js │ ├── ua_20161128_Druid-Circles.js │ ├── ua_20161205_Fighter-Martial-Archetypes.js │ ├── ua_20161212_Monk-Monastic-Traditions.js │ ├── ua_20161219_Paladin-Sacred-Oaths.js │ ├── ua_20170109_Artificer_dupl.js │ ├── ua_20170116_Ranger-and-Rogue.js │ ├── ua_20170206_Sorcerous-Origins.js │ ├── ua_20170213_Warlock-and-Wizard.js │ ├── ua_20170313_The-Mystic-Class.js │ ├── ua_20170320_Wizard-Revisited.js │ ├── ua_20170327_A-Trio-of-Subclasses.js │ ├── ua_20170403_Starter-Spells.js │ ├── ua_20170417_Feats-for-Skills.js │ ├── ua_20170424_Feats-for-Races.js │ ├── ua_20170501_Revised-Subclasses.js │ ├── ua_20170605_Revised-Class-Options.js │ ├── ua_20170911_Eladrin-and-Gith.js │ ├── ua_20171009_Fiendish-Options.js │ ├── ua_20171113_Elf-Subraces.js │ ├── ua_20180108_Three-Subclasses.js │ ├── ua_20180409_Order-Domain.js │ ├── ua_20180514_Centaur-and-Minotaur.js │ ├── ua_20180611_Giant-Soul-Sorcerer.js │ ├── ua_20180723_Races-of-Eberron.js │ ├── ua_20180810_Magic-Items-of-Eberron.js │ ├── ua_20180813_Races-of-Ravnica.js │ ├── ua_20180910_Dragonmarks.js │ ├── ua_20190228_Artificer_dupl.js │ ├── ua_20190514_Artificer_dupl.js │ ├── ua_20190815_Barbarian-and-Monk.js │ ├── ua_20190905_Sorcerer-and-Warlock.js │ ├── ua_20190918_Bard-and-Paladin.js │ ├── ua_20191003_Cleric-Druid-and-Wizard.js │ ├── ua_20191017_Fighter-Ranger-and-Rogue.js │ ├── ua_20191104_Class-Feature-Variants.js │ ├── ua_20191125_Fighter-Rogue-and-Wizard.js │ ├── ua_20200114_Subclasses-Part-1.js │ ├── ua_20200206_Subclasses-Part-2.js │ ├── ua_20200224_Subclasses-Part-3.js │ ├── ua_20200512_Subclasses-Revisited.js │ ├── ua_20200713_Feats-2020.js │ ├── ua_20200805_Subclasses-Part-4.js │ ├── ua_20201026_Subclasses-Part-5.js │ ├── ua_20210126_Gothic-Lineages.js │ ├── ua_20210311_Folk-of-the-Feywild.js │ ├── ua_20210414_Draconic-Options.js │ ├── ua_20211008_Travelers-of-the-Multiverse.js │ ├── ua_20220308_Heroes-of-Krynn.js │ ├── ua_20220425_Heroes-of-Krynn-Revisited.js │ ├── ua_20220523_Giant-Options.js │ ├── ua_20220718_Wonders-of-the-Multiverse.js │ └── wip_excluded-magic-items.js ├── gulpfile.js └── package.json ================================================ FILE CONTENTS ================================================ ================================================ FILE: .github/workflows/main.yml ================================================ name: Release Creation on: release: types: [published] jobs: build: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4.1.6 # Run minify # - uses: actions/setup-node@v4.0.2 # with: # node-version: '20' # - run: npm install # - run: npm run minify # Update the GitHub release with the manifest and module archive files. - name: Update Release with Files id: create_version_release uses: ncipollo/release-action@v1 with: allowUpdates: true name: ${{ github.event.release.name }} draft: ${{ github.event.release.unpublished }} prerelease: ${{ github.event.release.prerelease }} token: ${{ secrets.GITHUB_TOKEN }} artifacts: "./WotC material/all_WotC_*.js" tag: ${{ github.event.release.tag_name }} body: ${{ github.event.release.body }} ================================================ FILE: .gitignore ================================================ node_modules/ debug.log ================================================ FILE: Homebrew/reddit_20180203_Tome-of-Monstrous-Races.js ================================================ /* -WHAT IS THIS?- This file adds optional material to "MPMB's Character Record Sheet" found at https://flapkan.com/mpmb/charsheets Import this file using the "Add Extra Materials" bookmark. -KEEP IN MIND- It is recommended to enter the code in a fresh sheet before adding any other information (i.e. before making your character with it). */ /* -INFORMATION- Subject: Race: Gnoll Effect: This script adds the Gnoll race from the Tome of Monstrous Races by /u/revlid on /r/UnearthedArcana (https://redd.it/7uzdvb) This homebrew was created by revlid and is available here: http://homebrewery.naturalcrit.com/share/S1x4kCFv- Code by: /u/sea__ (edits by /u/safety-orange) Date: 2018-02-12 (sheet v12.999) */ var iFileName = "Tome of Monstrous Races: Gnoll [revlid's work, transcribed by /u/sea__].js"; RequiredSheetVersion(12.999); SourceList["ToMR"] = { name : "/u/revlid's Tome of Monstrous Races", abbreviation : "ToMR", group : "Reddit/r/UnearthedArcana", url : "http://homebrewery.naturalcrit.com/share/S1x4kCFv-", date : "2018/02/03" }; RaceList["gnoll-cult"] = { regExpSearch : /^(?=.*gnoll)(?=.*cult).*$/i, name : "Cult Gnoll", sortname : "Gnoll, Cult", source : ["ToMR", 8], plural : "Gnolls", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Abyssal"], weapons: ["gnoll bite"], vision : [["Darkvision", 60]], age : " rarely live longer than 30 years, but mature to adulthood in their first few years, and show no signs of age until a sudden collapse in their last year of life.", height : " normally stand between 7 and 8 feet tall, even in their characteristic hunched posture.", weight : " weigh around 300 pounds.", savetxt : { immune : ["disease"] }, skills : ["Intimidation"], improvements : "Cult Gnoll: +1 Strength, +2 Constitution;", scores : [1, 0, 2, 0, 0, 0], features : { "carrion eater" : { name : "Carrion Eater", minlevel : 1, usages : 1, recovery : "long rest", tooltip : "" }, "rampage" : { name : "Rampage", minlevel : 1, action : ["bonus action",""], tooltip : "" } }, trait : "Cult Gnoll (+1 Strength, +2 Constitution)\nBite: I can bite for 1d6 piercing damage instead of using unarmed strikes.\nCarrion Eater: Once per long rest, I can feed on a corpse during a short rest. At the end of the rest, I regain HP equal to the consumed creature's HD + my Constitution modifier.\nRampage: As a bonus action when I reduce a creature to 0 HP with a melee attack on my turn, I can move up to half my speed and make a bite attack." }; RaceList["gnoll-spotted"] = { regExpSearch : /^(?=.*gnoll)(?=.*spotted).*$/i, name : "Spotted Gnoll", sortname : "Gnoll, Spotted", source : ["ToMR", 8], plural : "Gnolls", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Abyssal", 1], weapons: ["gnoll bite"], vision : [["Darkvision", 60]], age : " rarely live longer than 30 years, but mature to adulthood in their first few years, and show no signs of age until a sudden collapse in their last year of life.", height : " normally stand between 7 and 8 feet tall, even in their characteristic hunched posture.", weight : " weigh around 300 pounds.", savetxt : { immune : ["disease"] }, skills : ["Intimidation", "Deception"], improvements : "Spotted Gnoll: +2 Constitution, +1 Charisma;", scores : [0, 0, 2, 0, 0, 1], spellcastingAbility : 6, features : { "carrion eater" : { name : "Carrion Eater", minlevel : 1, usages : 1, recovery : "long rest", tooltip : "" }, "butchers lure" : { name : "Butcher's Lure", minlevel : 1, action : ["action",""], tooltip : ", and can only be used to create illusory sounds", spellcastingBonus : { name : "Butcher's Lure", spells : ["minor illusion"], selection : ["minor illusion"] } } }, trait : "Spotted Gnoll (+2 Constitution, +1 Charisma)\nBite: I can bite for 1d6 piercing damage instead of using unarmed strikes.\nCarrion Eater: Once per long rest, I can feed on a corpse during a short rest. At the end of the rest, I regain HP equal to the consumed creature's HD + my Constitution modifier.\nButcher's Lure: I know the Minor Illusion cantrip and can cast it without components. I can only use it to create illusory sounds, but others have disadvantage on checks to determine they are illusions. Charisma is my spellcasting ability for this." }; RaceList["gnoll-tearer"] = { regExpSearch : /^(?=.*gnoll)(?=.*tearer).*$/i, name : "Tearer Gnoll", sortname : "Gnoll, Tearer", source : ["ToMR", 8], plural : "Gnolls", size : 3, speed : { walk : { spd : 35, enc : 25 } }, languageProfs : ["Common", "Abyssal"], weapons: ["gnoll tearer bite"], vision : [["Darkvision", 60]], age : " rarely live longer than 30 years, but mature to adulthood in their first few years, and show no signs of age until a sudden collapse in their last year of life.", height : " normally stand between 7 and 8 feet tall, even in their characteristic hunched posture.", weight : " weigh around 300 pounds.", savetxt : { immune : ["disease"] }, skills : ["Intimidation"], improvements : "Tearer Gnoll: +1 Dexterity, +2 Constitution;", scores : [0, 1, 2, 0, 0, 0], features : { "carrion eater" : { name : "Carrion Eater", minlevel : 1, usages : 1, recovery : "long rest", tooltip : "" } }, trait : "Tearer Gnoll (+1 Dexterity, +2 Constitution)\nBite: I can bite for 1d6 piercing damage instead of using unarmed strikes. This bite attack is treated as a finesse weapon and as a light weapon for the purpose of two-weapon fighting.\nCarrion Eater: Once per long rest, I can feed on a corpse during a short rest. At the end of the rest, I regain HP equal to the consumed creature's HD + my Constitution modifier." }; WeaponsList["gnoll bite"] = { regExpSearch : /^(?=.*gnoll)(?=.*bite).*$/i, name : "Bite (Gnoll)", source : ["ToMR", 9], list : "melee", ability : 1, type : "Natural", damage : [1, 6, "piercing"], range : "Melee", description : "", abilitytodamage : true }; WeaponsList["gnoll tearer bite"] = { regExpSearch : /^(?=.*gnoll)(?=.*bite)(?=.*tearer).*$/i, name : "Bite (Gnoll, Tearer)", source : ["ToMR", 9], list : "melee", ability : 2, type : "Natural", damage : [1, 6, "piercing"], range : "Melee", description : "Finesse, Light", abilitytodamage : true }; ================================================ FILE: README.md ================================================ # Imports for MPMB's Character Sheet This git repository holds different fan-created materials that can be used with **MorePurpleMoreBetter's D&D 5e Character Record Sheet**. The repository for the sheet is [found on MPMB's GitHub](https://github.com/morepurplemorebetter/MPMBs-Character-Record-Sheet). You can get the sheet for free on [MPMB's website](https://www.flapkan.com/#download).   ## Join the discussion Questions or remarks are best made on the MPMB [Discord server](https://discord.gg/P6drkuk9bt) or the [subreddit](https://www.reddit.com/r/mpmb/).   ## How to use To get all the non-duplicate WotC content, all you need is the **all_WotC** files from a [release](../../releases). Be aware that the files above might be for a version of MPMB's that is still under development. 1. Download the latest version of the PDF from [MPMB's website](https://www.flapkan.com/#download). 2. [Click here](https://github.com/safety-orange/Imports-for-MPMB-s-Character-Sheet/releases/latest/download/all_WotC_pub+UA.min.js) to download the latest all_WotC_pub+UA.min.js release, and save it somewhere on your machine. 3. Open the PDF and click on the bookmark **Functions** >> **Add Extra Materials**. 4. From the menu that appears, select the option **Import a file with additional material**. 5. In the dialog that opens, click **Add file**, and open the file you saved in step 1. 6. Click **Apply changes** in the Import Files dialog and the sheet will process the file you added. You will get a pop-up message if it was successful or not. MPMB has a more flashy explanation, along with a video, on how to do this in [this how-to guide on his website](https://www.flapkan.com/how-to/add-more-content).   ## Different Versions The code above is under development, [see releases](../../releases) for the latest stable build. It is updated along with the development of MPMB's Character Record Sheet and thus might be ahead of the latest stable version of MPMB's. In [releases](../../releases) you can find the files for the latest version of MPMB's Character Record Sheet as well as for older versions (v13.1.13 or later). If you are looking for versions before v13.1.13, see [tags](../../releases). Be aware that this content is for the 5th edition of Dungeon & Dragons (2014).   ## Concatenation and Minification ### Setup Ensure you have `node` and `npm` installed, then: ```sh npm install ``` ### Use To minify run one of these three commands: ```sh # For all (stable and beta) npm run minify # Just stable npm run minifyStable # Just beta npm run minifyBeta ``` ================================================ FILE: WotC 2024/not-reprinted_20140819_PHB.js ================================================ var iFileName = "not-reprinted_20140819_PHB.js"; RequiredSheetVersion("24.0.5-beta"); // This file adds options from the 2014 Player's Handbook to MPMB's Character Record Sheet that have not been replaced with new options in the 2024 Player's Handbook // Define the source SourceList["P"] = { name: "2014 Player's Handbook", abbreviation: "PHB'14", abbreviationSpellsheet: "P", group: "Legacy Sources", url: "https://dnd.wizards.com/products/rpg_playershandbook", date: "2014/08/19", defaultExcluded: true, }; // Races RaceList["half-elf"] = { regExpSearch: /^(?=.*half)(?=.*(elf|elv|drow|silvanesti|qualinesti|grugach|kagonesti)).*$/i, name: "Half-elf", source: [["SRD", 6], ["P", 39]], plural: "Half-elves", size: 3, speed: { walk: { spd: 30, enc: 20 }, }, languageProfs: ["Common", "Elvish", 1], vision: [["Darkvision", 60]], savetxt: { text: ["Magic can't put me to sleep"], adv_vs: ["charmed"], }, skillstxt: "Choose any two skills", age: " reach adulthood around age 20 and often live over 180 years", height: " range from 5 to 6 feet tall (4'9\" + 2d8\")", weight: " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric: " range from 1,5 to 1,8 metres tall (145 + 5d8 cm)", weightMetric: " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scorestxt: "+2 Charisma and +1 to two other ability scores of my choice", trait: "Half-Elf"+ "\n##\u25C6 Fey Ancestry##. I have Advantage on saving throws against being charmed, and magic can't put me to sleep."+ "\n##\u25C6 Skill Versatility##. I gain proficiency in two skills of my choice.", }; RaceList["half-orc"] = { regExpSearch: /^(?=.*half)(?=.*\bor(c|k)).*$/i, name: "Half-orc", source: [["SRD", 7], ["P", 41]], plural: "Half-orcs", size: 3, speed: { walk: { spd: 30, enc: 20 }, }, languageProfs: ["Common", "Orc"], vision: [["Darkvision", 60]], skills: ["Intimidation"], age: " reach adulthood around age 14 and rarely live longer than 75 years", height: " range from 5 to well over 6 feet tall (4'10\" + 2d10\")", weight: " weigh around 215 lb (140 + 2d10 \xD7 2d6 lb)", heightMetric: " range from 1,5 to well over 1,8 metres tall (150 + 5d10 cm)", weightMetric: " weigh around 100 kg (65 + 5d10 \xD7 4d6 / 10 kg)", features: { "relentless endurance": { name: "Relentless Endurance", minlevel: 1, usages: 1, recovery: "long rest", }, "savage attacks": { name: "Savage Attacks", minlevel: 1, calcChanges: { atkAdd: [ function (fields, v) { if (v.isMeleeWeapon && (/d\d+/).test(fields.Damage_Die)) { if (v.extraCritM) { v.extraCritM += 1; var extraCritRegex = /\d+(d\d+ extra on a crit(ical)?( hit)? in melee)/i; fields.Description = fields.Description.replace(extraCritRegex, v.extraCritM + '$1'); } else { v.extraCritM = 1; fields.Description += (fields.Description ? '; ' : '') + v.extraCritM + fields.Damage_Die.replace(/.*(d\d+).*/, '$1') + ' extra on a crit in melee'; }; }; }, "My melee weapon attacks roll 1 additional dice on a critical hit.", 900, ], }, }, }, trait: "Half-Orc"+ "\n##\u25C6 Relentless Endurance##. When I am reduced to 0 hit points but not killed outright, I can drop to 1 hit point instead. I can't use this feature again until I finish a Long Rest."+ "\n##\u25C6 Savage Attacks##. When I score a critical hit with a melee weapon attack, I can roll one of the weapon's damage dice one additional time and add it to the extra damage of the critical hit.", }; // Eldritch Invocations AddWarlockInvocation("Beast Speech", { name: "Beast Speech", source: [["SRD", 48], ["P", 110]], description: desc("I can cast Speak with Animals without using a spell slot."), spellcastingBonus: [{ name: "Beast Speech", spells: ["speak with animals"], selection: ["speak with animals"], firstCol: "atwill", }], }); AddWarlockInvocation("Beguiling Influence", { name: "Beguiling Influence", source: [["SRD", 48], ["P", 110]], description: desc("I gain proficiencies with the Deception and Persuasion skills."), skills: ["Deception", "Persuasion"], }); AddWarlockInvocation("Bewitching Whispers (req: lvl 7+)", { name: "Bewitching Whispers", source: [["SRD", 48], ["P", 110]], minlevel: 7, submenu: "[Warlock level 7+]", description: desc("Once per Long Rest, I can cast Compulsion using a Pact Magic spell slot."), spellcastingBonus : [{ name: "Bewitching Whispers", spells: ["compulsion"], selection: ["compulsion"], firstCol: "oncelr", }], }); AddWarlockInvocation("Book of Ancient Secrets (req: Pact of the Tome)", { name: "Book of Ancient Secrets", description: desc("My Book of Shadows is inscribed with two 1st-level Ritual spells of my choice. When I come across other Ritual spell, I can inscribe them as well. I can cast these inscribed spells as Rituals, they are not automatically prepared. (Select only these inscribed spells in the 'Spells' column.)"), source: [["SRD", 48], ["P", 110]], submenu: "[improves Pact of the Tome]", prereqeval: function(v) { return v.choiceActive.indexOf('pact of the tome') !== -1; }, eval: function() { var oSpells = CurrentSpells['warlock-book of shadows']; if (!oSpells) return; // Change into a "book" caster that has access to ritual spells from any level oSpells.known.spells = "book"; oSpells.typeSp = "book"; oSpells.typeList = 2; oSpells.list.level = [0, 9]; // Make it so that all cantrips are always displayed oSpells.known.cantripsPrepare = true; oSpells.preparedCantrips = true; // Add it so that all 1st-level ritual spells are always displayed oSpells.extra = CreateSpellList({ritual: true, level : [1, 1]}); oSpells.extraSpecial = true; SetStringifieds('spells'); CurrentUpdates.types.push('spells'); // cleanup old versions of this invocation if (CurrentSpells['warlock-book of ancient secrets'] || CurrentSpells['book of ancient secrets']) { var oSpellsOld = CurrentSpells['book of ancient secrets'] ? CurrentSpells['book of ancient secrets'] : CurrentSpells['warlock-book of ancient secrets']; if (oSpellsOld.selectSp) oSpells.selectSp = oSpellsOld.selectSp; if (oSpellsOld.offsetBo) oSpells.offsetBo = oSpellsOld.offsetBo; if (oSpellsOld.selectBo) oSpells.selectBo = oSpellsOld.selectBo; delete CurrentSpells['warlock-book of ancient secrets']; delete CurrentSpells['book of ancient secrets']; }; }, removeeval: function() { if (CurrentSpells['book of ancient secrets']) delete CurrentSpells['book of ancient secrets']; var oSpells = CurrentSpells['warlock-book of shadows']; if (!oSpells) return; oSpells.known.spells = "list"; oSpells.typeSp = "list"; oSpells.list.level = [0, 1]; delete oSpells.known.cantripsPrepare; delete oSpells.preparedCantrips; delete oSpells.extra; delete oSpells.extraSpecial; SetStringifieds('spells'); CurrentUpdates.types.push('spells'); }, calcChanges: { spellAdd: [ function (spellKey, spellObj, spName) { if (spName !== "warlock-book of shadows") return; var oSpells = CurrentSpells[spName]; if (oSpells.selectSp.indexOf(spellKey)) { spellObj.firstCol = SpellRitualTag; if (!(/.*(\d+ ?h\b|special|see b).*/i).test(spellObj.time)) { var numMinutes = Number(spellObj.time.replace(/(\d+) ?min.*/, "$1")); if (isNaN(numMinutes)) numMinutes = 0; spellObj.time = (numMinutes + 10) + " min"; }; return true; }; }, "By the Book of Ancient Secrets invocation, I can cast any Ritual spells I've added to my Book of Shadows, but only as a Ritual. Ritual spell always have a casting time of 10 minutes or more. The sheet assumes any Ritual spells above 1st-level are manual additions.", ], }, }); AddWarlockInvocation("Chains of Carceri (req: lvl 15+, Pact of the Chain)", { name : "Chains of Carceri", source : [["SRD", 49], ["P", 110]], minlevel: 15, submenu: ["[Warlock level 15+]", "[improves Pact of the Chain]"], prereqeval: function(v) { return v.choiceActive.indexOf('pact of the chain') !== -1; }, description: desc("I can cast Hold Monster without expending a spell slot or material components, but only on a Celestial, Fiend, or Elemental. I can only target a specific individual once per Long Rest."), spellcastingBonus: [{ name: "Chains of Carceri", spells: ["hold monster"], selection: ["hold monster"], firstCol: "atwill", }], spellChanges: { "hold monster": { components: "V,S", compMaterial: "", description: "1 Celestial, Fiend, or Elemental, save or paralyzed; extra save at end of each turn", changes: "With the Chains of Carceri invocation I can cast Hold Monster without a material component, but only on a Celestial, Fiend, or Elemental.", }, }, }); AddWarlockInvocation("Dreadful Word (req: lvl 7+)", { name: "Dreadful Word", source: [["SRD", 49], ["P", 110]], minlevel: 7, submenu: "[Warlock level 7+]", description: desc("Once per Long Rest, I can cast Confusion using a Pact Magic spell slot."), spellcastingBonus: [{ name: "Dreadful Word", spells: ["confusion"], selection: ["confusion"], firstCol: "oncelr", }], }); AddWarlockInvocation("Eldritch Sight", { name: "Eldritch Sight", source: [["SRD", 49], ["P", 110]], description: desc("I can cast Detect Magic without expending a spell slot."), spellcastingBonus: [{ name: "Eldritch Sight", spells: ["detect magic"], selection: ["detect magic"], firstCol: "atwill", }], }); AddWarlockInvocation("Eyes of the Rune Keeper", { name: "Eyes of the Rune Keeper", source: [["SRD", 49], ["P", 111]], description: " [I can read all writing]", }); AddWarlockInvocation("Minions of Chaos", { name: "Minions of Chaos", source: [["SRD", 49], ["P", 111]], minlevel: 9, submenu: "[Warlock level 9+]", description: desc("Once per Long Rest, I can cast Conjure Elemental using a Pact Magic spell slot."), spellcastingBonus: [{ name: "Minions of Chaos", spells: ["conjure elemental"], selection: ["conjure elemental"], firstCol: "oncelr", }], }); AddWarlockInvocation("Mire the Mind", { name: "Mire the Mind", source: [["SRD", 49], ["P", 111]], minlevel: 5, submenu: "[Warlock level 5+]", description: desc("Once per Long Rest, I can cast Slow using a Pact Magic spell slot."), spellcastingBonus: [{ name: "Mire the Mind", spells: ["slow"], selection: ["slow"], firstCol: "oncelr", }], }); AddWarlockInvocation("Sculptor of Flesh", { name: "Sculptor of Flesh", source: [["SRD", 50], ["P", 111]], minlevel: 7, submenu: "[Warlock level 7+]", description: desc("Once per Long Rest, I can cast Polymorph using a Pact Magic spell slot."), spellcastingBonus: [{ name: "Sculptor of Flesh", spells: ["polymorph"], selection: ["polymorph"], firstCol: "oncelr", }], }); AddWarlockInvocation("Sign of Ill Omen", { name: "Sign of Ill Omen", source: [["SRD", 50], ["P", 111]], minlevel: 5, submenu: "[Warlock level 5+]", description: desc("Once per Long Rest, I can cast Bestow Curse using a Pact Magic spell slot."), spellcastingBonus: [{ name: "Sign of Ill Omen", spells: ["bestow curse"], selection: ["bestow curse"], firstCol: "oncelr", }], }); AddWarlockInvocation("Thief of Five Fates", { name: "Thief of Five Fates", source: [["SRD", 50], ["P", 111]], description: desc("Once per Long Rest, I can cast Bane using a Pact Magic spell slot."), spellcastingBonus: [{ name: "Thief of Five Fates", spells: ["bane"], selection: ["bane"], firstCol: "oncelr", }], }); AddWarlockInvocation("Voice of the Chain Master", { name : "Voice of the Chain Master", source: [["SRD", 50], ["P", 111]], submenu: "[improves Pact of the Chain]", prereqeval: function(v) { return v.choiceActive.indexOf('pact of the chain') !== -1; }, description: desc("While on the same plane as my familiar, I can communicate telepathically with it and I can perceive through its senses. While doing the latter, I can speak through it with my voice."), }); // Subclasses AddSubClass("wizard", "necromancy", { regExpSearch: /necromancy|necromancer|necromantic/i, subname: "School of Necromancy", subnameShort: "Necromancy", fullname: "Necromancer", source: [["P", 118]], features: { "subclassfeature3" : { name: "Necromancy Savant", source: [["P", 118]], minlevel: 3, description: desc("I halve the gp and time needed to copy necromancy spells into my spellbook"), }, "subclassfeature3.1": { name: "Grim Harvest", source: [["P", 118]], minlevel: 3, description: desc([ "Once per turn, when I kill something with a 1st-level or higher spell, I regain hit points", "The number of hit points regained is 2\xD7 the spell's level (or 3\xD7 with necromancy spells)", "This doesn't occur for constructs/undead", ]), }, "subclassfeature6": { name: "Undead Thralls", source: [["P", 119]], minlevel: 6, description: desc([ "I add Animate Dead to my spellbook and can have an additional target when casting it", "Undead created by my necromancy spells have the following benefits:", "They add my proficiency bonus to damage and my wizard level to their HP maximums", ]), spellcastingBonus: [{ name: "Undead Thralls", spells: ["animate dead"], selection: ["animate dead"], }], spellChanges: { "animate dead": { description: "Turn corpses into 2+2/SL Skeletons or Zombies; control for 24h; Bns command within 60 ft", changes: "My Undead Thralls class feature allows me to animate one more corpse than normal with Animate Dead.", }, }, }, "subclassfeature10": { name: "Inured to Undead", source: [["P", 119]], minlevel: 10, description: desc("I have resistance to necrotic damage and my hit point maximum can't be reduced"), dmgres: ["Necrotic"], }, "subclassfeature14": { name: "Command Undead", source: [["P", 11]], minlevel: 14, description: desc([ "As an action, an undead within 60 ft that I can see must make a Charisma save", "If its Int is > 7, it has adv. on the save; If its Int is > 11, it repeats the save every hour", "If failed, it becomes friendly to me and obeys my commands until I use this on another", "On success, it becomes permanently immune to my further attempts", ]), action: [["action", ""]], }, }, }); CompanionList["undead_thrall"] = { name: "Undead Thralls", nameOrigin: "School of Necromancy 6", nameMenu : "Undead Thrall (School of Necromancy feature)", source: [["P", 119]], includeCheck: function(sCrea, objCrea, iCreaCR, bIsAL) { return /undead/i.test(objCrea.type); }, attributesChange: function(sCrea, objCrea) { objCrea.hp += classes.known.wizard ? classes.known.wizard.level : classes.totallevel; if (!objCrea.attacks) return; objCrea.attacks = objCrea.attacks.map(function(oAtk) { if (oAtk.abilitytodamage !== false && !oAtk.dc) { if (!oAtk.modifiers) { oAtk.modifiers = ["", "oProf"]; } else { oAtk.modifiers[1] += "+oProf"; } } return oAtk; }); }, calcChanges: { hp: function (totalHD, HDobj, prefix) { if (classes.known.wizard) { return [classes.known.wizard.level, "Undead Thralls (wizard level)"]; } else { return [classes.totallevel, "Undead Thralls (character level)"]; } }, }, notes: [{ name: "Undead I create with a necromancy spell", description: "add my wizard level to their hit point maximum and add my proficiency bonus to their weapon damage rolls.", joinString: " ", }], eval: function(prefix, lvl) { // Set HP to use average value, so that the level bonus is automatically included var sHPfld = prefix + "Comp.Use.HP.Max"; var aHPsets = How(sHPfld).split(","); aHPsets[3] = "average"; AddTooltip(sHPfld, undefined, aHPsets.toString()); }, }; // Background Features BackgroundFeatureList["shelter of the faithful"] = { // from Acolyte description: "I command the respect of those who share my faith. I can perform the religious ceremonies of my faith. My companions and I can expect free healing and care at an establishment of my faith, though I must provide any material components needed for spells. Those who share my religion will support me at a modest lifestyle.", source: [["SRD", 61], ["P", 127]], }; BackgroundFeatureList["false identity"] = { // from Charlatan description: "I have created a second identity that includes documentation, established acquaintances, and disguises that allow me to assume that persona. Additionally, I can forge documents, including official papers and personal letters, as long as I have seen an example of the kind of document or the handwriting I am trying to copy.", source: [["P", 128]], }; BackgroundFeatureList["criminal contact"] = { // from Criminal description: "I have a reliable and trustworthy contact who acts as my liaison to a network of other criminals. I know how to get messages to and from my contact, even over great distances; specifically, I know the local messengers, corrupt caravan masters, and seedy sailors who can deliver my messages.", source: [["P", 129]], }; BackgroundFeatureList["by popular demand"] = { // from Entertainer description: "I can always find a place to perform (inn/tavern/circus/etc.), where I receive free lodging and food of a modest or comfortable standard, as long as I perform each night. In addition, my performance makes me something of a local figure. When strangers recognize me in a town where I have performed, they typically take a liking to me.", source: [["P", 130]], }; BackgroundFeatureList["are you entertained?"] = { // from Gladiator description: "I can always find a place to perform (arena/pit fight), where I receive free lodging and food of a modest or comfortable standard, as long as I perform each night. In addition, my performance makes me something of a local figure. When strangers recognize me in a town where I have performed, they typically take a liking to me.", source: [["P", 131]], }; BackgroundFeatureList["rustic hospitality"] = { // from Folk Hero description: "Since I come from the ranks of the common folk, I fit in among them with ease. I can find a place to hide, rest, or recuperate among other commoners, unless I have shown myself to be a danger to them. They will shield me from the law or anyone else searching for me, though they will not risk their lives for me.", source: [["P", 131]], }; BackgroundFeatureList["guild membership"] = { // from Guild Artisan description: "5 gp membership fees per month: The guild offers lodging if possible. In case of being accused of a crime, the guild will support me if a good case can be made for my innocence or the crime is justifiable. I can also gain access to powerful political figures through the guild, as long as I'm in good standing and the guild is paid enough.", source: [["P", 133]], }; BackgroundFeatureList["discovery"] = { // from Hermit description: "The quiet seclusion of my extended hermitage gave me access to a unique and powerful discovery. The exact nature of this revelation depends on the nature of my seclusion. It might be a great truth, a hidden site, a long forgotten fact, or unearthed some relic of the past that could rewrite history.", source: [["P", 134]], }; BackgroundFeatureList["position of privilege"] = { // from Noble description: "I am welcome in high society, and people assume I have the right to be wherever I am. The common folk make every effort to accommodate me and avoid my displeasure, and other people of high birth treat me as a member of the same social sphere. I can secure an audience with a local noble if I need to.", source: [["P", 135]], }; BackgroundFeatureList["retainers"] = { // from Knight description: "I have the service of three retainers loyal to my family, one of whom is another noble and my squire. My other retainers are commoners who can perform mundane tasks for me, but they do not fight for me, will not follow me into obviously dangerous areas (such as dungeons), and will leave if they are frequently endangered or abused.", source: [["P", 136]], }; BackgroundFeatureList["wanderer"] = { // from Outlander description: "I have an excellent memory for maps and geography, and I can always recall the general layout of terrain, settlements, and other features around me. In addition, I can find food and fresh water for myself and up to five other people each day, provided that the land offers berries, small game, water, and so forth.", source: [["P", 136]], }; BackgroundFeatureList["researcher"] = { // from Researcher description: "When I attempt to learn or recall a piece of lore, if I do not know that information, I often know where and from whom I can obtain it. Usually, this information comes from a library, scriptorium, university, or a sage or other learned person or creature. Unearthing the deepest secrets of the multiverse can require an adventure or even a whole campaign.", source: [["P", 138]], }; BackgroundFeatureList["ship's passage"] = { // from Sailor description: "When I need to, I can secure free passage on a sailing ship for myself and my companions. I might sail on the ship I served on, or another ship I have good relations with. Because I'm calling in a favor, I can't be certain of a schedule or route that will meet my every need. My companions and I are expected to assist the crew during the voyage.", source: [["P", 139]], }; BackgroundFeatureList["bad reputation"] = { // from Pirate description: "No matter where I go, people are afraid of me due to my reputation. When I am in a civilized settlement, I can get away with minor criminal offenses, such as refusing to pay for food at a tavern or breaking down doors at a local shop, since most people will not report my activity to the authorities.", source: [["P", 139]], }; BackgroundFeatureList["military rank"] = { // from Soldier description: "I have a military rank from my career as a soldier. Soldiers loyal to my former military organization still recognize my authority and influence. I can invoke my rank to influence soldiers and temporarily requisition simple equipment or horses. I can usually gain access to friendly military encampments and fortresses where my rank is recognized.", source: [["P", 140]], }; BackgroundFeatureList["city secrets"] = { // from Urchin description: "I know the secret patterns and flow to cities and can find passages through the urban sprawl that others would miss. When I am not in combat, I (and companions I lead) can travel between any two locations in the city twice as fast as my speed would normally allow.", source: [["P", 141]], }; // Feats FeatsList["dungeon delver"] = { name: "Dungeon Delver", source: [["P", 166]], description: "I have adv. on Wis (Perception) and Int (Investigation) checks made to detect the presence of secret doors. I have resistance to damage dealt by traps and advantage on saves to avoid or resist traps. Travelling at a fast pace doesn't impose -5 on my passive Perception.", descriptionFull: [ "Alert to the hidden traps and secret doors found in many dungeons, you gain the following benefits:", " \u2022 You have advantage on Wisdom (Perception) and Intelligence (Investigation) checks made to detect the presence of secret doors.", " \u2022 You have advantage on saving throws made to avoid or resist traps.", " \u2022 You have resistance to the damage dealt by traps.", " \u2022 Traveling at a fast pace doesn't impose the normal -5 penalty on your passive Wisdom (Perception) score.", ], dmgres: ["Traps"], savetxt: { adv_vs: ["traps"] }, vision: [ ["Adv. on Perception and Investigation for secret doors", 0], ["No -5 for travelling at fast pace", 0], ], }; FeatsList["linguist"] = { name: "Linguist", source: [["P", 167]], description: "", calculate: "event.value = \"I can ably create written ciphers that others can't decipher unless I teach them, they succeed on an Intelligence check DC \" + (Number(What('Int')) + Number(How('Proficiency Bonus'))) + ' (Intelligence score + proficiency bonus), or they use magic to decipher it. I learn three languages of my choice. [+1 Intelligence]';", descriptionFull: [ "You have studied languages and codes, gaining the following benefits:", " \u2022 Increase your Intelligence score by 1, to a maximum of 20.", " \u2022 You learn three languages of your choice.", " \u2022 You can ably create written ciphers. Others can't decipher a code you create unless you teach them, they succeed on an Intelligence check (DC equal to your Intelligence score + your proficiency bonus), or they use magic to decipher it.", ], scores: [0, 0, 0, 1, 0, 0], languageProfs: [3], }; FeatsList["martial adept"] = { name: "Martial Adept", source: [["P", 168]], description: "", calculate: "event.value = 'I learn two maneuvers of my choice from those available to the Battle Master (2nd page \"Choose Feature\" button). The saving throw DC for this is ' + (8 + Number(How('Proficiency Bonus')) + Math.max(Number(What('Str Mod')), Number(What('Dex Mod')))) + ' (8 + proficiency bonus + Str/Dex mod). I gain one superiority die (d6), which I regain when I finish a short rest.';", descriptionFull: [ "You have martial training that allows you to perform special combat maneuvers. You gain the following benefits:", " \u2022 You learn two maneuvers of your choice from among those available to the Battle Master archetype in the fighter class. If a maneuver you use requires your target to make a saving throw to resist the maneuver's effects, the saving throw DC equals 8 + your proficiency bonus + your Strength or Dexterity modifier (your choice).", " \u2022 You gain one superiority die, which is a d6 (this die is added to any superiority dice you have from another source). This die is used to fuel your maneuvers. A superiority die is expended when you use it. You regain your expended superiority dice when you finish a short or long rest.", ], bonusClassExtrachoices: [{ "class": "fighter", subclass: "fighter-battle master", feature: "subclassfeature3.1", bonus: 2, }], extraLimitedFeatures: [{ name: "Superiority Dice", usages: 1, additional: 'd6', recovery: "short rest", addToExisting: true, }], }; ================================================ FILE: WotC 2024/not-reprinted_20201117_TCoE.js ================================================ var iFileName = "not-reprinted_20201117_TCoE.js"; RequiredSheetVersion("24.0.5-beta"); // This file adds options from Tasha's Cauldron of Everything to MPMB's Character Record Sheet that have not been replaced with new options published specifically for the 2024 (5.5e) rules // Define the source SourceList.T = { name: "Tasha's Cauldron of Everything", abbreviation: "TCoE", abbreviationSpellsheet: "T", group: "Legacy Sources", url: "https://dnd.wizards.com/products/tashas-cauldron-everything", date: "2020/11/17", defaultExcluded: true, }; AddSubClass("bard", "college of eloquence", { regExpSearch: /^(?=.*(college|bard|minstrel|troubadour|jongleur))(?=.*eloquence).*$/i, subname: "College of Eloquence", subnameShort: "Eloquence", source: [["T", 29], ["MOT", 28]], features: { "subclassfeature3": { name: "Silver Tongue", source: [["T", 30], ["MOT", 28]], minlevel: 3, description: desc("When I make a Persuasion or Deception check, I can treat a roll of 9 or lower as a 10."), }, "subclassfeature3.1": { name: "Unsettling Words", source: [["T", 30], ["MOT", 28]], minlevel: 3, description: desc("As a Bonus Action, I can expend and roll a Bardic Inspiration Die to have a creature I can see within 60 ft subtract the result from the next save it makes before my next turn starts."), action: [["bonus action", ""]], }, "subclassfeature6": { name: "Unfailing Inspiration", source: [["T", 30], ["MOT", 28]], minlevel: 6, description: desc("When a creature adds my Bardic Inspiration Die to a roll but fails, they can keep the die."), }, "subclassfeature6.1": { name: "Universal Speech", source: [["T", 30], ["MOT", 28]], minlevel: 6, description: desc([ "As an Action, I can choose a number of creatures equal to my Charisma modifier (min 1). They can magically understand me, regardless of the language I speak, for 1 hour.", "I can do this once per Long Rest, or by expending a 1st-level or higher spell slot (SS 1+).", ]), recovery: "Long Rest", usages: 1, altResource: "SS 1+", action: [["action", ""]], }, "subclassfeature14": { name: "Infectious Inspiration", source: [["T", 30], ["MOT", 28]], minlevel: 14, description: desc("As a Reaction when a creature uses my Bardic Inspiration Die and succeeds, I can give another creature within 60 ft that can hear me a " + (typePF ? "Bardic Inspiration Die" : "BID") + " without expending any."), action: [["reaction", ""]], usages: "Charisma modifier per ", usagescalc: "event.value = Math.max(1, What('Cha Mod'));", recovery: "Long Rest", }, }, }); ================================================ FILE: WotC 2024/pub_20240917_PHB.js ================================================ var iFileName = "pub_20240917_PHB.js"; RequiredSheetVersion("24.0.6-beta"); // This file adds material from the 2024 Player's Handbook that isn't in the SRD v5.2.1 to MPMB's Character Record Sheet // Define the source SourceList["P24"] = { name: "2024 Player's Handbook", abbreviation: "PHB'24", abbreviationSpellsheet: "P2", group: "Primary Sources", url: "https://marketplace.dndbeyond.com/core-rules/3709000", date: "2024/09/17", }; // Barbarian Subclasses AddSubClass("barbarian", "wild heart", { regExpSearch: /^(?=.*barbarian)(?=.*wild)(?=.*heart).*$/i, subname: "Path of the Wild Heart", subnameShort: "Wild Heart", source: [["P24", 55]], abilitySave: 5, features: { "subclassfeature3": { name: "Animal Speaker", source: [["P24", 55]], minlevel: 3, description: levels.map(function (n) { return n < 14 ? desc("I can cast *Beast Sense* and *Speak with Animals* using Wisdom, but only as Rituals.") : " [*Beast Sense* \x26 *Speak with Animals* as Ritual]"; }), spellcastingBonus: [{ name: "Animal Speaker", spells: ["beast sense", "speak with animals"], selection: ["beast sense", "speak with animals"], times: 2, firstCol: SpellRitualTag, spellcastingAbility: 5, }], }, "subclassfeature3.1": { name: "Rage of the Wilds", source: [["P24", 55]], minlevel: 3, description: desc([ "Whenever I enter Rage, I can gain one of the following benefits during that Rage.", " \u2022 ***Bear***. Resistance to all damage types except Force, Necrotic, Psychic, and Radiant.", " \u2022 ***Eagle***. Can Disengage or Dash when entering Rage. As Bonus Action, take both actions.", " \u2022 ***Wolf***. Allies have Advantage on attack rolls against any enemy within 5 ft of me.", ]), }, "subclassfeature6": { name: "Aspect of the Wilds", source: [["P24", 55]], minlevel: 6, description: ' #[Select option with "Choose Feature"]#' + desc('Use the "Choose Feature" button to select which aspect (Owl, Panther, or Salmon) is currently active and automated, or select to show all of them but have none of them added to the automation.'), choices: ["Owl", "Panther", "Salmon", "show all (bonuses not automated)"], "owl": { name: "Owl Aspect of the Wilds", description: desc([ "I have Darkvision 60 ft. If I already have Darkvision, its range increases with 60 ft instead.", "After I finish a Long Rest, I can switch to: ***Panther*** (Climb Speed) or ***Salmon*** (Swim Speed).", ]), vision: [["Darkvision", "fixed 60"], ["Darkvision", "+60"]], }, "panther": { name: "Panther Aspect of the Wilds", description: desc([ "I have a Climb Speed equal to my Speed.", "After I finish a Long Rest, I can switch to: ***Owl*** (+60ft Darkvision) or ***Salmon*** (Swim Speed).", ]), speed: { climb: { spd: "walk", enc: "walk" } }, }, "salmon": { name: "Salmon Aspect of the Wilds", description: desc([ "I have a Swim Speed equal to my Speed.", "After I finish a Long Rest, I can switch to: ***Owl*** (+60ft Darkvision) or ***Panther*** (Climb Speed).", ]), speed: { swim: { spd: "walk", enc: "walk" } }, }, "show all (bonuses not automated)": { name: "Aspect of the Wilds", description: desc("I gain one option, which I can change when I finish a Long Rest. ***Owl***. +60 ft Darkvision. ***Panther***. Climb Speed equal to my Speed. ***Salmon***. Swim Speed equal to my Speed."), }, }, "subclassfeature10": { name: "Nature Speaker", source: [["P24", 55]], minlevel: 10, description: levels.map(function (n) { return n < 10 ? "" : n < 14 ? desc("I can cast *Commune with Nature* using Wisdom, but only as a Ritual.") : " [*Commune with Nature* as Ritual]"; }), spellcastingBonus: [{ name: "Nature Speaker", spells: ["commune with nature"], selection: ["commune with nature"], firstCol: SpellRitualTag, }], }, "subclassfeature14": { name: "Power of the Wilds", source: [["P24", 55]], minlevel: 14, description: " [choose one benefit per Rage]" + desc([ " \u2022 ***Falcon***. I have a Fly Speed equal to my Speed if I'm not wearing any armor.", " \u2022 ***Lion***. Any enemy within 5 ft of me has Disadvantage on attacks against others than me.", " \u2022 ***Ram***. When I hit a Large or smaller creature with a melee attack, I can knock it Prone.", ]), }, }, }); AddSubClass("barbarian", "world tree", { regExpSearch: /^(?=.*barbarian)((?=.*world)(?=.*tree)|(?=.*yggdrasil)).*$/i, subname: "Path of the World Tree", subnameShort: "World Tree", source: [["P24", 56]], features: { "subclassfeature3": { name: "Vitality of the Tree", source: [["P24", 56]], minlevel: 3, description: levels.map(function (n) { var rageDamage = n < 9 ? 2 : n < 16 ? 3 : 4; return desc("When I enter Rage, I gain " + n + " Temp HP (level). At the start of my turn while in Rage, I can give another within 10 ft " + rageDamage + "d6 Temp HP (1d6 per Rage damage) until my Rage ends."); }), additional: levels.map(function (n) { return n < 3 ? "" : "me " + n + ", others " + (n < 9 ? 2 : n < 16 ? 3 : 4) + "d6 Temp HP"; }), }, "subclassfeature6": { name: "Branches of the Tree", source: [["P24", 56]], minlevel: 6, description: desc("As a Reaction while in Rage when a creature I can see starts its turn within 30 ft, I can have it make a Strength save or teleport it to the empty space of my choice nearest to me that I can see. After it teleports, I can reduce its Speed to 0 until the end of its turn."), action: [["reaction", " (in Rage)"]], additional: "DC 8 + Str mod + Prof Bonus", }, "subclassfeature10": { name: "Battering Roots", source: [["P24", 56]], minlevel: 10, description: desc("On my turn, I have +10 ft reach with Heavy and Versatile melee weapons. With those, I can use the Push or Topple mastery in addition to a different mastery I'm using with it."), calcChanges: { atkAdd: [ function (fields, v) { if (v.isMeleeWeapon && /heavy|versatile/i.test(fields.Description)) { var text = "+10 ft reach on my turn"; if (!/\b(topple|push)\b/i.test(fields.Description)) { text = "Push or Topple; " + text; } else if (!/\bpush\b/i.test(fields.Description)) { text = "Push; " + text; } else if (!/\btopple\b/i.test(fields.Description)) { text = "Topple; " + text; } fields.Description += (fields.Description ? '; ' : '') + text; } }, "Heavy and Versatile melee weapons get the Push and Topple masteries added to their description if they don't already have it. With those weapons, I have +10 ft reach on my turn.", ], }, }, "subclassfeature14": { name: "Travel along the Tree", source: [["P24", 56]], minlevel: 14, description: desc("When I enter Rage and as a Bonus Action during, I can teleport up to 60 ft to an empty space I can see. Once per Rage, I can teleport up to 150 ft and bring along up to 6 willing creatures within 10 ft, who each arrive in an empty space of my choice within 10 ft of " + (typePF ? "where I arrive." : "me.")), action: [["bonus action", " (in Rage)"]], usages: 1, recovery: "Rage", additional: "150 ft \x26 bring 6", }, }, }); AddSubClass("barbarian", "zealot", { regExpSearch: /zealot/i, subname: "Path of the Zealot", subnameShort: "Zealot", fullname: "Zealot", source: [["P24", 57]], features: { "subclassfeature3": { name: "Divine Fury", source: [["P24", 57]], minlevel: 3, description: levels.map(function (n) { return desc("While in Rage, the first creature I hit with a weapon or Unarmed Strike on my turn takes +1d6 + " + Math.floor(n / 2) + " (half level) Necrotic or Radiant damage; I choose the type each time."); }), additional: levels.map(function (n) { return n < 3 ? "" : "+1d6 + " + Math.floor(n / 2) + " damage"; }), calcChanges: { atkAdd: [ function (fields, v) { var lvl = classes.known.barbarian ? classes.known.barbarian.level : false; if (lvl && (v.isWeapon || v.baseWeaponName === "unarmed strike") && /\brage\b/i.test(v.WeaponTextName)) { fields.Description += (fields.Description ? '; ' : '') + "1/turn +1d6+" + Math.floor(lvl / 2) + " Necrotic/Radiant dmg"; } }, "", ], }, }, "subclassfeature3.1": { name: "Warrior of the Gods", source: [["P24", 57]], minlevel: 3, description: desc("As a Bonus Action, I can expend dice from my pool of d12s to regain HP equal to their roll."), usages: levels.map(function (n) { return n < 3 ? "" : (n < 6 ? 4 : n < 12 ? 5 : n < 17 ? 6 : 7) + "d12 per "; }), recovery: "Long Rest", action: [["bonus action", ""]], }, "subclassfeature6": { name: "Fanatical Focus", source: [["P24", 57]], minlevel: 6, description: levels.map(function (n) { var rageDamageBonus = n < 9 ? 2 : n < 16 ? 3 : 4; return n < 6 ? "" : desc("Once per Rage, I can reroll a failed save with a +" + rageDamageBonus + " (Rage damage), but must use the result."); }), additional: levels.map(function (n) { var rageDamageBonus = n < 9 ? 2 : n < 16 ? 3 : 4; return n < 6 ? "" : "reroll save with +" + rageDamageBonus; }), usages: "1\xD7 each ", recovery: "Rage", }, "subclassfeature10": { name: "Zealous Presence", source: [["P24", 57]], minlevel: 10, description: desc("As a Bonus Action, I can give up to 10 creatures of my choice within 60 ft Adv. on attacks and saves until my next turn starts. I can expend a use of Rage to regain use of this."), usages: 1, recovery: "Long Rest", altResource: "Rage", action: [["bonus action", ""]], }, "subclassfeature14": { name: "Rage of the Gods", source: [["P24", 57]], minlevel: 14, description: levels.map(function (n) { return n < 14 ? "" : desc("When I enter Rage, I can gain benefits for 1 minute or until I'm at 0 HP. ***Fly Speed*** equal to my Speed. ***Resistance*** to Necrotic, Psychic, and Radiant. ***Revivification***. As a Reaction when a creature within 30 ft drops to 0 HP, I can expend a Rage use to give it " + n + " HP (level)."); }), usages: 1, recovery: "Long Rest", action: [["reaction", " (Revivification)"]], }, }, }); // Bard Subclasses AddSubClass("bard", "dance", { regExpSearch: /^(?=.*(college|bard|minstrel|troubadour|jongleur))(?=.*dance).*$/i, subname: "College of Dance", subnameShort: "Dance", source: [["P24", 64]], features: { "subclassfeature3": { name: "Dazzling Footwork", source: [["P24", 64]], minlevel: 3, description: desc([ "While I'm not wearing armor or wielding a Shield, I gain the following benefits:", "***Dance Virtuoso***. I have Advantage on any Charisma (Performance) checks involving dancing.", "***Unarmored Defense***. My AC is 10 + Dexterity modifier + Charisma modifier.", "***Agile Strikes***. When I use Bardic Inspiration as part of an action, Bonus Action, or Reaction, I can make one Unarmed Strike as part of that action, Bonus Action, or Reaction.", "***Bardic Damage***. My Unarmed Strikes can use Dexterity and deal damage equal to my BID.", ]), calcChanges: { atkAdd: [ function (fields, v) { var n = classes.known.bard ? classes.known.bard.level : false; if (n && v.baseWeaponName.indexOf("unarmed strike") !== -1) { // Set the ability to the highest of Str and Dex, if currently one of those or lower than Str or Dex if (fields.Mod === 1 || fields.Mod === 2 || What(AbilityScores.abbreviations[fields.Mod - 1] + " Mod") < What(AbilityScores.abbreviations[v.StrDex - 1] + " Mod")) { fields.Mod = v.StrDex; } // Improve the damage die if there is one and the Bardic Inspiration Die is better var bardInspDie = n < 5 ? 6 : n < 10 ? 8 : n < 15 ? 10 : 12; var rxDice = /(\d+)d?(\d*)/; if (rxDice.test(fields.Damage_Die)) { var curDie = fields.Damage_Die.match(rxDice); var curDieSize = Math.max(Number(curDie[1]), 1) * Math.max(Number(curDie[2]), 1); if (curDieSize < bardInspDie) { fields.Damage_Die = fields.Damage_Die.replace(curDie[0], '1d' + bardInspDie); } } } }, "Unarmed Strikes can use Dexterity and deal Bardic Inspiration Die damage.", ], }, armorOptions: [{ regExpSearch: /justToAddToDropDownAndAffectWildShape/, name: "Unarmored Defense (Cha)", source: [["P24", 64]], ac: "10+Cha", affectsWildShape: true, selectNow: true, }], }, "subclassfeature6": { name: "Inspiring Movement", source: [["P24", 64]], minlevel: 6, description: desc("As a Reaction when an enemy I can see ends its turn within 5 ft, I can expend a use of Bardic Inspiration to move up to half my Speed without provoking Opportunity Attacks. Then one ally of my choice within 30 ft can do the same with their Reaction."), additional: "1 Bardic Inspiration", action: [["reaction", " (1 BID)"]], }, "subclassfeature6.1": { name: "Tandem Footwork", source: [["P24", 64]], minlevel: 6, description: desc("When I roll Initiative and I'm not Incapacitated, I can expend and roll one Bardic Inspiration Die and add it to the Initiative of every ally within 30 ft that can see or hear me."), additional: "1 Bardic Inspiration", }, "subclassfeature14": { name: "Leading Evasion", source: [["P24", 65]], minlevel: 14, description: " [if not Incapacitated]" + desc([ "When I make a Dex save to halve damage, I instead take none if I succeed and half if I fail.", "I can share this benefit with creatures within 5 ft making the same save.", ]), savetxt: { text: ["**Dex Save for Half**. *Failure:* half dmg, *Success:* no dmg"] }, }, }, }); AddSubClass("bard", "glamour", { regExpSearch: /^(?=.*(college|bard|minstrel|troubadour|jongleur))(?=.*glamour).*$/i, subname: "College of Glamour", subnameShort: "Glamour", source: [["P24", 65]], features: { "subclassfeature3": { name: "Beguiling Magic", source: [["P24", 65]], minlevel: 3, description: desc("Immediately after I use a spell slot to cast an Enchantment or Illusion spell, I can have a creature I can see within 60 ft make a Wisdom save or be either Charmed or Frightened for 1 minute, repeating the save as each of its turns end. I can expend a Bardic Inspiration Die to regain use of this. I always have *Charm Person* and *Mirror Image* prepared."), usages: 1, recovery: "Long Rest", altResource: "BID", spellcastingBonus: [{ name: "Beguiling Magic", spells: ["charm person", "mirror image"], selection: ["charm person", "mirror image"], times: 2, firstCol: "markedbox", }], }, "subclassfeature3.1": { name: "Mantle of Inspiration", source: [["P24", 65]], minlevel: 3, description: desc([ "As a Bonus Action, I can expend and roll a Bardic Inspiration Die to grant other creatures within 60 ft of me Temporary Hit Points equal to twice the number rolled, and then each can use its Reaction to move up to its Speed without provoking Opportunity Attacks.", "I can choose up to my Charisma modifier (minimum 1) number of creatures to affect.", ]), additional: levels.map(function (n) { var bardInspDie = n < 5 ? 6 : n < 10 ? 8 : n < 15 ? 10 : 12; return n < 3 ? "" : "1 BID; 1d" + bardInspDie + " \xD7 2 Temp HP"; }), action: [["bonus action", ""]], }, "subclassfeature6": { name: "Mantle of Majesty", source: [["P24", 65]], minlevel: 6, description: desc("As a Bonus Action, I can take on an unearthly appearance for 1 minute, requiring Concentration. When I do so and as a Bonus Action during, I can cast *Command* without using a spell slot. Creatures Charmed by me automatically fail their save against it. I can expend a level 3+ spell slot (SS 3+) to regain use of this. I always have *Command* prepared."), usages: 1, recovery: "Long Rest", altResource: "SS 3+", spellcastingBonus: [{ name: "Mantle of Majesty", spells: ["command"], selection: ["command"], firstCol: "markedbox", }], action: [["bonus action", ""]], }, "subclassfeature14": { name: "Unbreakable Majesty", source: [["P24", 66]], minlevel: 14, description: desc([ "As a Bonus Action, I can gain a majestic presence for 1 minute or until I'm Incapacitated.", "While active, whenever any creature hits me with an attack roll for the first time on a turn, it has to make a Charisma save or miss instead.", ]), usages: 1, recovery: "Short Rest", action: [["bonus action", ""]], }, }, }); AddSubClass("bard", "valor", { regExpSearch: /^(?=.*(college|bard|minstrel|troubadour|jongleur))(?=.*valor).*$/i, subname: "College of Valor", subnameShort: "Valor", source: [["P24", 67]], attacks: [1, 1, 1, 1, 2], features: { "subclassfeature3": { name: "Combat Inspiration", source: [["P24", 67]], minlevel: 3, description: desc([ "A creature that has a Bardic Inspiration Die (BID) from me can use it in one of these ways.", "***Defense***. As a Reaction when hit by an attack, it can add the BID to " + (typePF ? "its " : "") + "AC against that attack.", "***Offense***. After it hits with an attack roll, it can add the BID to that attack's damage.", ]), }, "subclassfeature3.1": { name: "Martial Training", source: [["P24", 67]], minlevel: 3, description: desc([ "I have proficiency with Martial weapons, Medium armor, and Shields.", "I can use a Simple or Martial weapon as a Spellcasting Focus for my Bard spells." ]), armorProfs: [false, true, false, true], weaponProfs: [false, true], }, "subclassfeature6": { name: "Extra Attack", source: [["P24", 67]], minlevel: 6, description: desc([ "I can attack twice instead of once when I take the Attack action on my turn.", "I can cast a cantrip with a casting time of one action in place of one of those attacks.", ]), action: [["action", "1 Attack and cast Cantrip"]] }, "subclassfeature14": { name: "Battle Magic", source: [["P24", 67]], minlevel: 14, description: desc("As a Bonus Action after I cast a spell that takes an action, I can make one weapon attack."), action: [["bonus action", "Weapon attack (after cast spell)"]], }, }, }); // Cleric subclasses // Druid subclasses // Druid Subclasses AddSubClass("druid", "moon", { regExpSearch: /^(?=.*druid)((?=.*\bmoon\b)|((?=.*\bmany\b)(?=.*\bforms?\b))).*$/i, subname: "Circle of the Moon", subnameShort: "Moon", source: [["P24", 86]], features: { "subclassfeature3": { name: "Circle Forms", source: [["P24", 86]], minlevel: 3, description: desc("The max CR for my Wild Shape forms is my Druid level divided by 3. While in WS, my AC can be 13 + my Wisdom modifier. I gain 3\xD7 my Druid level in temp HP when I shape-shift."), wildshapePageInfo: { duration: ClassList.druid.features["wild shape"].wildshapePageInfo.duration, knownForms: ClassList.druid.features["wild shape"].wildshapePageInfo.knownForms, tempHP: levels.map(function (n) { return n < 3 ? n : n*3; }), limitations: levels.map(function (n) { var CR = n < 3 ? "1/4" : Math.floor(n/3); return n < 8 ? "max CR " + CR + ", no Fly Speed" : "CR " + CR + " or lower"; }), }, "wild shape rules": { name: "Circle Forms Wild Shape Rules", source: [["P24", "80-86"]], extraname: "Moon 3", description: levels.map(function (n) { if (n < 3) return ""; var tempHP = n*3; var duration = Math.floor(n/2) + " hour" + (n > 3 ? "s" : ""); var knownForms = n < 4 ? 4 : n < 8 ? 6 : 8; var CR = Math.floor(n/3); var canFly = n < 8 ? "can't" : "can"; return desc([ "As a Bonus Action, I can expend a Wild Shape (WS) use to shape-shift into a known Beast form and gain **" + tempHP + " Temp HP** (3\xD7 Druid level). I stay in that form for **" + duration + "** (half Druid level), until I use Wild Shape again, end it as a Bonus Action, become Incapacitated, or die.", "I know **" + knownForms + " forms** of **max CR " + CR + "** (one-third Druid level) that **" + canFly + " have a Fly Speed**. " + (typePF ? "Whenever I finish" : "After") + " a Long Rest, I can change one known form for another eligible Beast form.", "In Wild Shape, I use the Beast's stats, but retain my type, HP, HD, Int, Wis, Cha, feats, class features, and ability to speak. I retain my skill and save proficiencies with my Prof Bonus and gain the beast's, using its bonus if higher. My AC is 13 + my Wisdom mod, unless the Beast's AC is higher. I can't cast spells except my Circle of the Moon Spells, but shape-shifting doesn't break concentration. I choose what equipment falls to the ground, merges, or stays worn.", "Use the Wild Shape page to track known forms and their stats.", ]); }), }, autoSelectExtrachoices: [{ extrachoice: "wild shape rules", }], eval: function() { // Remove the Wild Shape Rules set by the default Wild Shape feature so they can be replaced by the ones from this feature ClassFeatureOptions(["druid", "wild shape", "wild shape rules", true], "remove"); }, removeeval: function(lvlA) { // Return the Wild Shape Rules from the default Wild Shape feature as the ones from this feature are removed, but the new level is still 2 or higher if (lvlA[1] >= 2) ClassFeatureOptions(["druid", "wild shape", "wild shape rules", true], "add"); }, calcChanges: { wildshapeCallback: [ function(prefix, fieldNo, oWildshape, sCrea) { oWildshape.acOptions.push({ name: "Circle of the Moon: Circle Forms", ac: "13+Wis", }); }, "While in Wild Shape, my AC equals 13 plus my Wisdom modifier if that total is higher than the Beast's AC.", ], }, }, "subclassfeature3.1": { name: "Circle of the Moon Spells", source: [["P24", 86]], minlevel: 3, description: desc("I always have these spells prepared and can cast them even when I'm in a Wild Shape form."), spellcastingExtra: ["starry wisp", "cure wounds", "moonbeam", "conjure animals", "fount of moonlight", "mass cure wounds"], }, "subclassfeature6": { name: "Improved Circle Forms", source: [["P24", 87]], minlevel: 6, description: desc("While in Wild Shape form, I gain ***Lunar Radiance***: my attacks can deal Radiant damage, and ***Increased Toughness***: I add my Wisdom modifier to my Constitution saving throws."), calcChanges: { wildshapeCallback: [ function(prefix, fieldNo, oWildshape, sCrea) { oWildshape.save.Con.creature.bonus += "+Wis"; if (!classes.known.druid) return; var regularLunarRadiance = classes.known.druid.level < 14; oWildshape.wildshapeTraits.push({ name: "Lunar Radiance", description: regularLunarRadiance ? "(Moon 6). Attacks can deal Radiant." : "(Moon 14). Attacks can deal Radiant. Once per turn after a hit, deal +2d10 Radiant damage.", joinString: " ", }); }, "While in a Wild Shape form, I can have my attacks deal Radiant damage and I can add my Wisdom modifier to my Constitution saving throws. Once per turn from level 14 onwards, I can deal an extra 2d10 Radiant damage to a target I hit with a Wild Shape form's attack.", ], }, }, "subclassfeature10": { name: "Moonlight Step", source: [["P24", 87]], minlevel: 10, description: levels.map(function (n) { return n < 10 ? "" : n < 14 ? desc("As a Bonus Action, I can teleport up to 30 ft to an empty space I can see, and I gain Adv. on my next attack roll this turn. I can expend a level 2+ spell slot (SS 2+) to regain 1 use.") : desc("As a Bonus Action, I and a willing creature within 10 ft can teleport up to 30 ft to an empty space I can see, with the creature appearing within 10 ft of me. I then gain Adv. on my next attack roll this turn. I can expend a level 2+ spell slot (SS 2+) to regain 1 use."); }), usages: typePF ? "" : "Wisdom modifier per ", usagescalc: "event.value = Math.max(1, What('Wis Mod'));", altResource: "SS 2+", recovery: "Long Rest", action: [["bonus action", ""]], }, "subclassfeature14": { name: "Lunar Form", source: [["P24", 87]], minlevel: 14, description: desc("***Improved Lunar Radiance***. Once per turn, I can deal +2d10 Radiant damage on a hit with a WS attack. ***Shared Moonlight***. I can bring along an ally with Moonlight Step, see above."), }, }, }); AddSubClass("druid", "sea", { regExpSearch: /^(?=.*druid)(?=.*\b(sea|waves|tides)\b).*$/i, subname: "Circle of the Sea", subnameShort: "Sea", source: [["P24", 87]], features: { "subclassfeature3": { name: "Wrath of the Sea", source: [["P24", 87]], minlevel: 3, description: levels.map(function (n) { var part = { range: n < 6 ? 5 : 10, target: n < 14 ? "" : " or around an ally within 60 ft that I can see, or around both by expending 2 WS uses", turn: n < 14 ? "my turn" : "turns", bearer: n < 14 ? "I" : "the bearer", subject: n < 14 ? "I" : "they", } var text = [ "As a Bonus Action, I can expend 1 Wild Shape use to create a " + part.range + "-ft Emanation of ocean spray around me" + part.target + ". When manifested and as a Bonus Actions on " + part.turn + " thereafter, " + part.bearer + " can have a creature " + part.subject + " can see in the area make a Constitution save or take 1d6 Cold damage per my Wisdom modifier and, if it's Large or smaller, be pushed 15 ft away.", "This lasts for 10 " + (typePF ? "minutes" : "min") + " or until I dismiss it (no action), manifest it again, or I'm Incapacitated.", ]; return desc(text); }), spellcastingExtra: ["ray of frost", "fog cloud", "thunderwave", "gust of wind", "shatter", "lightning bolt", "water breathing", "control water", "ice storm", "conjure elemental", "hold monster"], action: [["bonus action", " (1 WS to create)"]], additional: levels.map(function (n) { var WSuses = n < 14 ? "1 WS use" : "1-2 WS uses"; var emanation = n < 6 ? 5 : 10; return n < 3 ? "" : WSuses + "; Wis mod \xD7 d6 dmg; " + emanation + "-ft rad" }), }, "subclassfeature6": { name: "Aquatic Affinity", source: [["P24", 87]], minlevel: 6, description: desc("I gain a Swim Speed equal to my Speed and Wrath of the Sea is now a 10-ft Emanation."), speed: { swim: { spd: "walk", end: "walk" } }, }, "subclassfeature10": { name: "Stormborn", source: [["P24", 87]], minlevel: 10, description: desc("While my Wrath of the Sea is active, it now also grants: ***Resistance*** to Cold, Lightning, and Thunder damage, and ***Flight***. A Fly Speed equal to my Speed."), dmgres: [ ["Cold", "Cold (in WotS)"], ["Lightning", "Lightn. (in WotS)"], ["Thunder", "Thunder (in WotS)"], ], }, "subclassfeature14": { name: "Oceanic Gift", source: [["P24", 88]], minlevel: 14, description: desc([ "I can create Wrath of the Sea around an ally within 60 ft that I can see instead of myself, or around both my and the ally by expending 2 Wild Shape uses.", "It grants all benefits to the bearer, but always uses my spell save DC and my Wisdom " + (typePF ? "modifier" : "mod") + ".", ]), }, }, }); AddSubClass("druid", "stars", { regExpSearch: /^(?=.*druid)(?=.*\b(stars?|constellations?)\b).*$/i, subname: "Circle of the Stars", subnameShort: "Stars", source: [["P24", 88]], features: { "subclassfeature3": { name: "Star Map", source: [["P24", 88]], minlevel: 3, description: desc("I can use this Tiny object as my spellcasting focus. While holding it, I know *Guidance* and always have *Guiding Bolt* prepared, which I can cast my Wisdom mod times per Long Rest without a spell slot. I can recreate it with a 1-hour ceremony during a Short or Long Rest."), additional: "Guiding Bolt", usages: "Wisdom modifier per ", usagescalc: "event.value = Math.max(1, What('Wis Mod'));", recovery: "Long Rest", spellcastingBonus: [{ name: "Star Map", spells: ["guidance"], selection: ["guidance"], }, { name: "Star Map", spells: ["guiding bolt"], selection: ["guiding bolt"], firstCol: "oncelr+markedbox", }], }, "subclassfeature3.1": { name: "Starry Form", source: [["P24", 88]], minlevel: 3, description: desc([ "As a Bonus Action, I can expend a WS use to take on a glowing form with the benefits of a constellation (3rd page). I shed Bright Light in " + (typePF ? "10-ft radius" : "10 ft") + " and Dim Light for an additional 10 ft.", "This lasts for 10 minutes or until I dismiss it (no action), use it again, or I'm Incapacitated.", ]), action: [["bonus action", " (1 WS)"]], additional: "1 Wild Shape use", weaponOptions: [{ regExpSearch: /^(?=.*luminous)(?=.*arrow).*$/i, name: "Luminous Arrow", source: [["P24", 89]], ability: 5, type: "Spell", damage: [1, 8, "radiant"], range: "60 ft", description: "Use as a Bonus Action", abilitytodamage: true, useSpellMod: "druid", selectNow: true, isLuminousArrow: true, }], extraname: "Starry Form", "archer constellation": { name: "Archer Constellation", source: [["P24", 89]], description: levels.map(function (n) { return desc("As a Bonus Action, including the one to take this Starry Form, I can make a ranged spell attack to hurl a luminous arrow 60 ft that deals " + (n < 10 ? 1 : 2) + "d8 + Wisdom modifier Radiant damage."); }), additional: levels.map(function (n) { return n < 3 ? "" : (n < 10 ? 1 : 2) + "d8 damage"; }), action: [["bonus action", "Archer (Luminous Arrow)"]], }, "chalice constellation": { name: "Chalice Constellation", source: [["P24", 89]], description: levels.map(function (n) { return desc("Whenever I cast a healing spell using a spell slot, I can also heal myself or another within 30 ft for " + (n < 10 ? 1 : 2) + "d8 + Wisdom modifier HP."); }), additional: levels.map(function (n) { return n < 3 ? "" : (n < 10 ? 1 : 2) + "d8 healing"; }), }, "dragon constellation": { name: "Dragon Constellation", source: [["P24", 89]], description: levels.map(function (n) { var text = [ "When I make an Intelligence or Wisdom check, or make a Con save to maintain Concentration,", "I can treat a roll of 9 or lower on the d20 as a 10.", ]; if (n >= 10) text[1] += " I also gain 20 ft Fly Speed and can hover."; return desc(text); }), additional: levels.map(function (n) { return n < 10 ? "" : "gain Fly Speed"; }), }, autoSelectExtrachoices : [{ extrachoice: "archer constellation", }, { extrachoice: "chalice constellation", }, { extrachoice: "dragon constellation", }], }, "subclassfeature6": { name: "Cosmic Omen", source: [["P24", 89]], minlevel: 6, description: desc([ "When I finish a Long Rest, I roll a die to determine which omen I can use until my next LR.", "As a Reaction when I see a creature within 30 ft about to make a D20 test, I can use it to:", "**Weal (even)**. Add 1d6 to the total. **Woe (odd)**. Subtract 1d6 from the total.", ]), action: [["reaction", ""]], usages: "Wisdom modifier per ", usagescalc: "event.value = Math.max(1, What('Wis Mod'));", recovery: "Long Rest", }, "subclassfeature10": { name: "Twinkling Constellations", source: [["P24", 89]], minlevel: 10, description: " [improves constellations, see 3rd page]" + desc("While in my Starry Form, I can change the constellation at the start of each of my turns."), calcChanges: { atkAdd: [ function (fields, v) { if (v.theWea.isLuminousArrow && fields.Damage_Die.indexOf('1d8') !== -1) { fields.Damage_Die = fields.Damage_Die.replace('1d8', '2d8'); } }, '', ], }, }, "subclassfeature14": { name: "Full of Stars", source: [["P24", 89]], minlevel: 14, description: desc("While in my Starry Form, I have Resistance to Bludgeoning, Piercing, and Slashing damage."), dmgres: [ ["Bludgeoning", "Bludgeon. (in SF)"], ["Piercing", "Piercing (in SF)"], ["Slashing", "Slashing (in SF)"], ], }, }, }); // Fighter Subclasses AddSubClass("fighter", "battle master", { regExpSearch: /^(?=.*(war|fighter|battle|martial))(?=.*master).*$/i, subname: "Battle Master", fullname: "Battle Master", source: [["P24", 93]], abilitySave: 1, abilitySaveAlt: 2, features: { "subclassfeature3": { // includes the level 10 and 18 Improved/Ultimate Combat Superiority features name: "Combat Superiority", source: [["P24", 93]], minlevel: 3, description: desc("I gain a number of Superiority Dice (SD) that I can use to fuel special Maneuvers."), additional: levels.map(function (n) { if (n < 3) return ""; return "d" + (n < 10 ? 8 : n < 18 ? 10 : 12); }), limfeaname: "Superiority Dice", usages: levels.map(function (n) { return n < 3 ? 0 : n < 7 ? 4 : n < 15 ? 5 : 6; }), recovery: "Short Rest", }, "subclassfeature3.1": { name: "Maneuvers", source: [["P24", 93]], minlevel: 3, description: desc([ "I can expend one Superiority Die to do a Maneuver I know, but only one per attack.", "The save DC for my Maneuvers is 8 + my Prof. Bonus + my Str or Dex modifier (my choice).", ]), additional: levels.map(function (n) { return n < 3 ? "" : (n < 7 ? 3 : n < 10 ? 5 : n < 15 ? 7 : 9) + " known"; }), extraTimes: levels.map(function (n) { return n < 3 ? 0 : n < 7 ? 3 : n < 10 ? 5 : n < 15 ? 7 : 9; }), extraname: "Maneuver Options", extrachoices: ["Ambush", "Bait and Switch", "Commander's Strike", "Commanding Presence", "Disarming Attack", "Distracting Strike", "Evasive Footwork", "Feinting Attack", "Goading Attack", "Lunging Attack", "Maneuvering Attack", "Menacing Attack", "Parry", "Precision Attack", "Pushing Attack", "Rally", "Riposte", "Sweeping Attack", "Tactical Assessment", "Trip Attack"], "ambush": { name: "Ambush", extraname: "Maneuver", source: [["P24", 94]], description: desc("When I roll for Initiative or Dex (Stealth), I can expend and add 1 SD unless I'm Incapacitated."), additional: "add SD to Stealth or Initiative", }, "bait and switch": { name: "Bait and Switch", extraname: "Maneuver", source: [["P24", 94]], description: desc([ "On my turn, I can expend 1 SD to switch places with a willing, not-Incapacitated creature within 5 ft, if I spend at least 5 ft of movement. This doesn't provoke Opportunity Attacks.", "The other creature or I (my choice) can add the SD to AC until the start of my next turn.", ]), additional: "add SD to my/ally's AC", }, "commander's strike": { name: "Commander's Strike", extraname: "Maneuver", source: [["P24", 94]], description: desc("When I take the Attack action on my turn, I can forgo one attack to direct a willing creature I can see or hear to strike. I expend 1 SD and that creature can immediately use its Reaction to make one attack with a weapon or Unarmed Strike, adding the SD to the attack's damage."), additional: "ally adds SD to damage", }, "commanding presence": { name: "Commanding Presence", extraname: "Maneuver", source: [["P24", 95]], description: desc("When I make an Intimidation, Performance, or Persuasion check, I can expend and add 1 SD."), additional: "add SD to Charisma skill check", }, "disarming attack": { name: "Disarming Attack", extraname: "Maneuver", source: [["P24", 95]], description: desc("When I hit a creature with an attack, I can expend and add 1 SD to the damage. The target must make a Strength save or drop one object of my choice that it's holding in its space."), additional: "add SD to damage", }, "distracting strike": { name: "Distracting Strike", extraname: "Maneuver", source: [["P24", 95]], description: desc("When I hit a creature with an attack, I can expend and add 1 SD to the damage. The next attack vs. the target by another than me has Advantage, if made before my next turn starts."), additional: "add SD to damage", }, "evasive footwork": { name: "Evasive Footwork", extraname: "Maneuver", source: [["P24", 95]], description: desc([ "As a Bonus Action, I can expend 1 SD to take the Disengage action.", "I add the Superiority Die to my AC until the start of my next turn.", ]), additional: "add SD to AC", action: [["bonus action", ""]], }, "feinting attack": { name: "Feinting Attack", extraname: "Maneuver", source: [["P24", 95]], description: desc("As a Bonus Action, I can expend 1 SD to gain Advantage on my next attack this turn against a creature within 5 ft. If that attack hits, I add the Superiority Die to its damage."), additional: "add SD to damage", action: [["bonus action", ""]], }, "goading attack": { name: "Goading Attack", extraname: "Maneuver", source: [["P24", 95]], description: desc("When I hit a creature with an attack, I can expend and add 1 SD to the damage. The target must make a Wis save or have Disadvantage on attacks not vs. me until my next turn ends."), additional: "add SD to damage", }, "lunging attack": { name: "Lunging Attack", extraname: "Maneuver", source: [["P24", 95]], description: desc("As a Bonus Action, I can expend 1 SD to take the Dash action. If I move 5 ft in a straight line before hitting a melee attack in the same turn's Attack action, I add the SD to the damage."), additional: "add SD to melee damage", action: [["bonus action", ""]], }, "maneuvering attack": { name: "Maneuvering Attack", extraname: "Maneuver", source: [["P24", 95]], description: desc([ "When I hit a creature with an attack, I can expend and add 1 SD to the damage.", "A willing creature of my choice who can see or hear me can then use its Reaction to move up to half its Speed without provoking an Opportunity Attack from the target of my attack.", ]), additional: "add SD to damage", }, "menacing attack": { name: "Menacing Attack", extraname: "Maneuver", source: [["P24", 95]], description: desc("When I hit a creature with an attack, I can expend and add 1 SD to the damage. The target must make a Wisdom save or have the Frightened condition until the end of my next turn."), additional: "add SD to damage", }, "parry": { name: "Parry", extraname: "Maneuver", source: [["P24", 95]], description: desc("As a Reaction when I take damage from a melee attack, I can expend and roll 1 SD to reduce the damage by it plus my Strength or Dexterity modifier (my choice)."), additional: "reduce damage taken by SD + Str/Dex mod", action: [["reaction", ""]], }, "precision attack": { name: "Precision Attack", extraname: "Maneuver", source: [["P24", 95]], description: desc("When I miss an attack, I can expend and add 1 SD to the roll, potentially causing it to hit."), additional: "add SD to attack roll", }, "pushing attack": { name: "Pushing Attack", extraname: "Maneuver", source: [["P24", 95]], description: desc("When I hit a creature with a weapon or Unarmed Strike, I can expend and add 1 SD to the damage. If Large or smaller, it must make a Str save or be pushed up to 15 ft back from me."), additional: "add SD to damage", }, "rally": { name: "Rally", extraname: "Maneuver", source: [["P24", 95]], description: desc("As a Bonus Action, I can expend 1 SD to grant an ally within 30 ft who can see or hear me Temporary Hit Points equal to the SD roll plus half my Fighter level."), additional: levels.map(function (n) { return "ally gains SD + " + Math.floor(n/2) + " Temp HP"; }), action: [["bonus action", ""]], }, "riposte": { name: "Riposte", extraname: "Maneuver", source: [["P24", 95]], description: desc("As a Reaction when a creature misses me with a melee attack, I can expend 1 SD to make a melee attack with a weapon or Unarmed Strike against it, adding the SD to the damage."), additional: "add SD to melee damage", action: [["reaction", ""]], }, "sweeping attack": { name: "Sweeping Attack", extraname: "Maneuver", source: [["P24", 95]], description: desc("When I hit a creature with a melee weapon or Unarmed Strike, I can expend 1 SD to damage another creature within reach and within 5 ft of the first. If the original attack roll would hit the second creature, it takes 1 SD damage of the same type as the original attack."), additional: "deal SD damage", }, "tactical assessment": { name: "Tactical Assessment", extraname: "Maneuver", source: [["P24", 95]], description: desc("When I make a History, Investigation, or Insight check, I can expend and add 1 SD to it."), additional: "add SD to certain skill checks", }, "trip attack": { name: "Trip Attack", extraname: "Maneuver", source: [["P24", 95]], description: desc("When I hit a creature with a weapon or Unarmed Strike, I can expend and add 1 SD to the damage. If the target is Large or smaller, it must make a Strength save or be knocked Prone."), additional: "add SD to damage", }, }, "subclassfeature3.2": function () { var a = { name: "Student of War", source: [["P24", 94]], minlevel: 3, description: ' #[Select option with "Choose Feature"]#' + desc("I gain proficiency with one type of Artisan's Tools and in one skill from the Fighter list. Use the \"Choose Feature\" button to select a skill."), toolProfs: [["Artisan's tools", 1]], choices: ["Acrobatics", "Animal Handling", "Athletics", "History", "Insight", "Intimidation", "Persuasion", "Perception", "Survival"], }; for (var i = 0; i < a.choices.length; i++) { var attr = a.choices[i].toLowerCase(); var skill = a.choices[i]; a[attr] = { name: "Student of War: " + skill, description: desc("I gain proficiency with one type of Artisan's Tools of my choice and " + skill + "."), skills: [skill], prereqeval: function (v) { return v.skillProfsLC.indexOf(v.choice) === -1 ? true : "markButDisable"; }, }; } return a; }(), "subclassfeature7": { name: "Know Your Enemy", source: [["P24", 94]], minlevel: 7, description: desc("As a Bonus Action, I can learn the Immunities, Resistances, and Vulnerabilities of a creature I can see within 30 ft. I can expend a Superiority Die to regain use of this."), action: [["bonus action", ""]], usages: 1, recovery: "Long Rest", altResource: "1 SD", }, "subclassfeature15": { name: "Relentless", source: [["P24", 94]], minlevel: 15, description: desc("Once per turn when I do a Maneuver, I can use a d8 instead of expending a Superiority Die."), }, }, }); // Monk Subclasses AddSubClass("monk", "shadow", { regExpSearch: /^(?=.*shadow)((?=.*(monk|monastic))|(((?=.*martial)(?=.*(artist|arts)))|((?=.*spiritual)(?=.*warrior)))).*$/i, subname: "Warrior of Shadow", subnameShort: "Shadow", source: [["P24", 105]], features: { "subclassfeature3": { name: "Shadow Arts", source: [["P24", 105]], minlevel: 3, description: desc("I gain +60 ft Darkvision. I know the *Minor Illusion* cantrip, using Wis as spellcasting ability."), vision: [["Darkvision", "fixed 60"], ["Darkvision", "+60"]], spellFirstColTitle : "Ki", spellcastingBonus: [{ name: "Shadow Arts", spells: ["minor illusion"], selection: ["minor illusion"], }, { name: "Shadow Arts", spells: ["darkness"], selection: ["darkness"], firstCol: 1, }], spellChanges: { "darkness": { components: "", compMaterial: "", description: "15-ft rad darkness; blocks other's vision/nonmagical light; dispels magical light SL \u22642; my SoT move it", descriptionMetric: "4,5m rad darkness; blocks other's vision/nonmagical light; dispels magical light SL \u22642; my SoT move it", changes: "With the Shadow Arts feature I can cast Darkness without spell components, can see through it, and can move it to a space within 60 ft of me at the start of each of my turns.", }, }, extraname: "Focus Feature", "shadow arts: darkness": { name: "Shadow Arts: Darkness", extraname: "Warrior of Shadow 3", source: [["P24", 105]], description: desc("I can expend 1 Focus Point to cast *Darkness* without spell components. When I do so, I can see within its area and I can move it to a space within 60 ft at the start of each of my turns."), additional: "1 Focus Point", }, autoSelectExtrachoices: [{ extrachoice: "shadow arts: darkness" }], }, "subclassfeature6": { name: "Shadow Step", source: [["P24", 105]], minlevel: 6, description: desc("As a Bonus Action while in Dim Light or Darkness, I can teleport up to 60 ft to an empty " + (typePF ? "space" : "spot") + " I can see in Dim Light or Darkness. I then gain Adv" + (typePF ? "antage" : ".") + " on my next melee attack this turn."), action: [["bonus action", ""]], }, "subclassfeature11": { name: "Improved Shadow Step", source: [["P24", 105]], minlevel: 11, extraname: "Focus Feature", "improved shadow step": { name: "Improved Shadow Step", extraname: "Warrior of Shadow 11", source: [["P24", 105]], description: desc("When I use Shadow Step, I can expend 1 Focus Point to remove the need to start and end in Dim Light or Darkness, and I can make an Unarmed Strike immediately after I teleport."), additional: "1 Focus Point", }, autoSelectExtrachoices: [{ extrachoice: "improved shadow step" }], }, "subclassfeature17": { name: "Cloak of Shadows", source: [["P24", 105]], minlevel: 17, action: [["action", " (3 FP)"]], extraname: "Focus Feature", "cloak of shadows": { name: "Cloak of Shadows", extraname: "Warrior of Shadow 17", source: [["P24", 105]], description: desc([ "As a Magic action while in Dim Light or Darkness, I can expend 3 Focus Points to shroud myself in shadows for 1 min, until I'm Incapacitated, or I end my turn in Bright Light.", "While shrouded, I'm Invisible, using Flurry of Blows requires no Focus Points, and I can move through occupied spaces as if they were Difficult Terrain, but can't end my turn in one.", ]), additional: "3 Focus Points", }, autoSelectExtrachoices: [{ extrachoice: "cloak of shadows" }], }, }, }); // Paladin Subclasses // Ranger Subclasses // Rogue Subclasses // Sorcerer Subclasses // Warlock Subclasses // Wizard Subclasses // Backgrounds and their corresponding Background Features (which grant the origin feats) BackgroundList["artisan"] = { regExpSearch: /^(?!.*guild)(?=.*artisan).*$/i, name: "Artisan", source: [["P24", 178]], scorestxt: "+2 to one and +1 to another -or- +1 to all three: Strength, Dexterity, and Intelligence", skills: ["Investigation", "Persuasion"], toolProfs: [["Artisan's tools", 1]], gold: 32, equipleft: [ ["Artisan's tools (same as proficiency)", "", 5], ], equipright: [ ["Traveler's clothes", "", 4], ["Pouch", "", 1], ["Belt pouch (with coins)", "", 1], ], feature: "Artisan", // from PHB'14 (Guild Artisan): traitsOriginName: "Guild Artisan", traitsSourceString: "PHB'14 133", trait: [ "I believe that anything worth doing is worth doing right. I can't help it\u2015 I'm a perfectionist.", "I'm a snob who looks down on those who can't appreciate fine art.", "I always want to know how things work and what makes people tick.", "I'm full of witty aphorisms and have a proverb for every occasion.", "I'm rude to people who lack my commitment to hard work and fair play.", "I like to talk at length about my profession.", "I don't part with my money easily and will haggle tirelessly to get the best deal possible.", "I'm well known for my work, and I want to make sure everyone appreciates it. I'm always taken aback when people haven't heard of me.", ], ideal: [ "**Community**. It is the duty of all civilized people to strengthen the bonds of community and the security of civilization. (Lawful)", "**Generosity**. My talents were given to me so that I could use them to benefit the world. (Good)", "**Freedom**. Everyone should be free to pursue his or her own livelihood. (Chaotic)", "**Greed**. I'm only in it for the money. (Evil)", "**People**. I'm committed to the people I care about, not to ideals. (Neutral)", "**Aspiration**. I work hard to be the best there is at my craft. (Any)", ], bond: [ "The workshop where I learned my trade is the most important place in the world to me.", "I created a great work for someone, and then found them unworthy to receive it. I'm still looking for someone worthy.", "I owe my guild a great debt for forging me into the person I am today.", "I pursue wealth to secure someone's love.", "One day I will return to my guild and prove that I am the greatest artisan of them all.", "I will get revenge on the evil forces that destroyed my place of business and ruined my livelihood.", ], flaw: [ "I'll do anything to get my hands on something rare or priceless.", "I'm quick to assume that someone is trying to cheat me.", "No one must ever learn that I once stole money from guild coffers.", "I'm never satisfied with what I have\u2015 I always want more.", "I would kill to acquire a noble title.", "I'm horribly jealous of anyone who can outshine my handiwork. Everywhere I go, I'm surrounded by rivals.", ], extra: [ "Select a Artisan Business", "Alchemists and apothecaries", "Armorers, locksmiths, and finesmiths", "Brewers, distillers, and vintners", "Calligraphers, scribes, and scriveners", "Carpenters, roofers, and plasterers", "Cartographers, surveyors, and chart-makers", "Cobblers and shoemakers", "Cooks and bakers", "Glassblowers and glaziers", "Jewelers and gemcutters", "Leatherworkers, skinners, and tanners", "Masons and stonecutters", "Painters, limners, and sign-makers", "Potters and tile-makers", "Shipwrights and sailmakers", "Smiths and metal-forgers", "Tinkers, pewterers, and casters", "Wagon-makers and wheelwrights", "Weavers and dyers", "Woodcarvers, coopers, and bowyers", ], }; BackgroundFeatureList["artisan"] = { description: "I began mopping floors and scrubbing counters in an artisan's workshop for a few coppers per day as soon as I was strong enough to carry a bucket. When I was old enough to apprentice, I learned to create basic crafts of my own, as well as how to sweet talk the occasional demanding customer. My trade has also given me a keen eye for detail.", source: [["P24", 178]], featsAdd: ["Crafter"], }; BackgroundList["charlatan"] = { regExpSearch: /charlatan/i, name: "Charlatan", source: [["P24", 179]], scorestxt: "+2 to one and +1 to another -or- +1 to all three: Dexterity, Constitution, and Charisma", skills: ["Deception", "Sleight of Hand"], toolProfs: [["Forgery Kit", "Dex"]], gold: 15, equipleft: [ ["Forgery kit", "", 5], ["Costume clothes", "", 1], ], equipright: [ ["Fine clothes", "", 6], ["Belt pouch (with coins)", "", 1], ], feature: "Charlatan", // from PHB'14: traitsSourceString: "PHB'14 128", trait: [ "I fall in and out of love easily, and am always pursuing someone.", "I have a joke for every occasion, especially occasions where humor is inappropriate.", "Flattery is my preferred trick for getting what I want.", "I'm a born gambler who can't resist taking a risk for a potential payoff.", "I lie about almost everything, even when there's no good reason to.", "Sarcasm and insults are my weapons of choice.", "I keep multiple holy symbols on me and invoke whatever deity might come in useful at any given moment.", "I pocket anything I see that might have some value.", ], ideal: [ "**Independence**. I am a free spirit \u2015 no one tells me what to do. (Chaotic)", "**Fairness**. I never target people who can't afford to lose a few coins. (Lawful)", "**Charity**. I distribute the money I acquire to the people who really need it. (Good)", "**Creativity**. I never run the same con twice. (Chaotic)", "**Friendship**. Material goods come and go. Bonds of friendship last forever. (Good)", "**Aspiration**. I'm determined to make something of myself. (Any)", ], bond: [ "I fleeced the wrong person and must work to ensure that this individual never crosses paths with me or those I care about.", "I owe everything to my mentor \u2015 a horrible person who's probably rotting in jail somewhere.", "Somewhere out there, I have a child who doesn't know me. I'm making the world better for him or her.", "I come from a noble family, and one day I'll reclaim my lands and title from those who stole them from me.", "A powerful person killed someone I love. Someday soon, I'll have my revenge.", "I swindled and ruined a person who didn't deserve it. I seek to atone for my misdeeds but might never be able to forgive myself.", ], flaw: [ "I can't resist a pretty face.", "I'm always in debt. I spend my ill-gotten gains on decadent luxuries faster than I bring them in.", "I'm convinced that no one could ever fool me the way I fool others.", "I'm too greedy for my own good. I can't resist taking a risk if there's money involved.", "I can't resist swindling people who are more powerful than me.", "I hate to admit it and will hate myself for it, but I'll run and preserve my own hide if the going gets tough.", ], extra: [ "Select a Favorite Scheme", "Cheat at games of chance", "Shave coins, forge documents", "User/manipulator", "Change identity", "Sleight-of-hand cons", "Sell junk as expensive necessities", ], }; BackgroundFeatureList["charlatan"] = { description: "Once I was old enough to order an ale, I soon had a favorite stool in every tavern within ten miles of where I was born. As I traveled the circuit from public house to watering hole, I learned to prey on unfortunates who were in the market for a comforting lie or two - perhaps a sham potion or forged ancestry records.", source: [["P24", 179]], featsAdd: ["Skilled"], }; BackgroundList["entertainer"] = { regExpSearch: /(entertainer|actor|dancer|fire.?eater|jester|juggler|instrumentalist|poet|singer|storyteller|tumbler)/i, name: "Entertainer", source: [["P24", 180]], scorestxt: "+2 to one and +1 to another -or- +1 to all three: Strength, Dexterity, and Charisma", skills: ["Acrobatics", "Performance"], toolProfs: [["Musical Instrument", 1]], gold: 11, equipleft: [ ["Costume clothes", 2, 1], ["Mirror", "", 0.5], ["Perfume", "", ""], ], equipright: [ ["Traveler's clothes", "", 4], ["Musical instrument (choose one)", "", 1], ["Belt pouch (with coins)", "", 1], ], feature: "Entertainer", // from PHB'14: traitsSourceString: "PHB'14 130", trait: [ "I know a story relevant to almost every situation.", "Whenever I come to a new place, I collect local rumors and spread gossip.", "I'm a hopeless romantic, always searching for that 'special someone'.", "Nobody stays angry at me or around me for long, since I can defuse any amount of tension.", "I love a good insult, even one directed at me.", "I get bitter if I'm not the center of attention.", "I'll settle for nothing less than perfection.", "I change my mood or my mind as quickly as I change key in a song.", ], ideal: [ "**Beauty**. When I perform, I make the world better than it was. (Good)", "**Tradition**. The stories, legends, and songs of the past must never be forgotten, for they teach us who we are. (Lawful)", "**Creativity**. The world is in need of new ideas and bold action. (Chaotic)", "**Greed**. I'm only in it for the money and fame. [Evil]", "**People**. I like seeing the smiles on people's faces when I perform. That's all that matters. (Neutral)", "**Honesty**. Art should reflect the soul; it should come from within and reveal who we really are. (Any)", ], bond: [ "My instrument is my most treasured possession, and it reminds me of someone I love.", "Someone stole my precious instrument, and someday I'll get it back.", "I want to be famous, whatever it takes.", "I idolize a hero of the old tales and measure my deeds against that person's.", "I will do anything to prove myself superior to my hated rival.", "I would do anything for the other members of my old troupe.", ], flaw: [ "I'll do anything to win fame and renown.", "I'm a sucker for a pretty face.", "A scandal prevents me from ever going home again. That kind of trouble seems to follow me around.", "I once satirized a noble who still wants my head. It was a mistake that I will likely repeat.", "I have trouble keeping my true feelings hidden. My sharp tongue lands me in trouble.", "Despite my best efforts, I am unreliable to my friends.", ], extra: [ "Select an Entertainer Routine", "Actor", "Dancer", "Fire-eater", "Jester", "Juggler", "Instrumentalist", "Poet", "Singer", "Storyteller", "Tumbler", ], }; BackgroundFeatureList["entertainer"] = { description: "I spent much of my youth following roving fairs and carnivals, performing odd jobs for musicians and acrobats in exchange for lessons. I may have learned how to walk a tightrope, how to play a lute in a distinct style, or how to recite poetry with impeccable diction. To this day, I thrive on applause and long for the stage.", source: [["P24", 180]], featsAdd: ["Musician"], }; BackgroundList["farmer"] = { regExpSearch: /farmer/i, name: "Farmer", source: [["P24", 180]], scorestxt: "+2 to one and +1 to another -or- +1 to all three: Strength, Constitution, and Wisdom", skills: ["Animal Handling", "Nature"], toolProfs: [["Carpenter's Tools", "Str"]], gold: 30, equipleft: [ ["Iron pot", "", 10], ["Shovel", "", 5], ["Healer's kit", "", 3], ["Carpenter's tools", "", 6], ], equipright: [ ["Traveler's clothes", "", 4], ["Belt pouch (with coins)", "", 1], ["Sickle", "", 2], ], equip1stPage: { weapons: ["Sickle"], }, feature: "Farmer", // from PHB'14 (Folk Hero): traitsOriginName: "Folk Hero", traitsSourceString: "PHB'14 131", trait: [ "I judge people by their actions, not their words.", "If someone is in trouble, I'm always ready to lend help.", "When I set my mind to something, I follow through no matter what gets in my way.", "I have a strong sense of fair play and always try to find the most equitable solution to arguments.", "I'm confident in my own abilities and do what I can to instill confidence in others.", "Thinking is for other people. I prefer action.", "I misuse long words in an attempt to sound smarter.", "I get bored easily. When am I going to get on with my destiny?", ], ideal: [ "**Respect**. People deserve to be treated with dignity and respect. (Good)", "**Fairness**. No one should get preferential treatment before the law, and no one is above the law. (Lawful)", "**Freedom**. Tyrants must not be allowed to oppress the people. (Chaotic)", "**Might**. If I become strong, I can take what I want\u2015 what I deserve. (Evil)", "**Sincerity**. There's no good in pretending to be something I'm not. (Neutral)", "**Destiny**. Nothing and no one can steer me away from my higher calling. (Any)", ], bond: [ "I have a family, but I have no idea where they are. One day, I hope to see them again.", "I worked the land, I love the land, and I will protect the land.", "A proud noble once gave me a horrible beating, and I will take my revenge on any bully I encounter.", "My tools are symbols of my past life, and I carry them so that I will never forget my roots.", "I protect those who cannot protect themselves.", "I wish my childhood sweetheart had come with me to pursue my destiny.", ], flaw: [ "The tyrant who rules my land will stop at nothing to see me killed.", "I'm convinced of the significance of my destiny, and blind to my shortcomings and the risk of failure.", "The people who knew me when I was young know my shameful secret, so I can never go home again.", "I have a weakness for the vices of the city, especially hard drink.", "Secretly, I believe that things would be better if I were a tyrant lording over the land.", "I have trouble trusting in my allies.", ], extra: [ "Select a Defining Event", "I stood up to a tyrant's agents", "I saved people during a natural disaster", "I stood alone against a terrible monster", "I stole from a corrupt merchant for the poor", "I led a militia to fight off an invading army", "I stole weapons from a tyrant to arm the people", "I trained peasantry to fight a tyrant with farm tools", "A decree was rescinded after I led a protest against it", "A magical creature gave me a blessing or insight", "I rose to leadership in a lord's army", ], }; BackgroundFeatureList["farmer"] = { description: "I grew up close to the land. Years tending animals and cultivating the earth rewarded me with patience and good health. I have a keen appreciation for nature's bounty alongside a healthy respect for nature's wrath.", source: [["P24", 180]], featsAdd: ["Tough"], }; BackgroundList["guard"] = { regExpSearch: /guard/i, name: "Guard", source: [["P24", 181]], scorestxt: "+2 to one and +1 to another -or- +1 to all three: Strength, Intelligence, and Wisdom", skills: ["Athletics", "Perception"], toolProfs: [["Gaming Set", 1]], gold: 12, equipleft: [ ["Manacles", "", 6], ["Hooded lantern", "", 2], ["Gaming set (same as proficiency)", "", ""], ], equipright: [ ["Traveler's clothes", "", 4], ["Belt pouch (with coins)", "", 1], ["Spear", "", 3], ["Light crossbow", "", 5], ["Crossbow bolt case, with:", "", 1], ["- Crossbow bolts", 20, 0.075], ], equip1stPage: { weapons: ["Spear", "Light Crossbow"], ammo: [["Bolts", 20]], }, feature: "Guard", }; BackgroundFeatureList["guard"] = { description: "My feet ache when I remember the countless hours I spent at my post in the tower. I was trained to keep one eye looking outside the wall watching for marauders sweeping from the nearby forest, and my other eye looking inside the wall searching for cut purses and troublemakers.", source: [["P24", 181]], featsAdd: ["Alert"], }; BackgroundList["guide"] = { regExpSearch: /^(?!.*urban)(?=.*(guide|outlander|forester|trapper|homesteader|exile|outcast|bounty.?hunter|tribal nomad|hunter.?gatherer|tribal.?marauder)).*$/i, name: "Guide", source: [["P24", 181]], scorestxt: "+2 to one and +1 to another -or- +1 to all three: Dexterity, Constitution, and Wisdom", skills: ["Stealth", "Survival"], toolProfs: [["Cartographer's Tools", "Wis"]], gold: 3, equipleft: [ ["Bedroll", "", 7], ["Cartographer's tools", "", 6], ["Two-person tent", "", 20], ], equipright: [ ["Traveler's clothes", "", 4], ["Belt pouch (with coins)", "", 1], ["Shortbow", "", 2], ["Quiver, with:", "", 1], ["- Arrows", 20, 0.05], ], equip1stPage: { weapons: ["Shortbow"], ammo: [["Arrows", 20]], }, feature: "Guide", // from PHB'14 (Outlander): traitsOriginName: "Outlander", traitsSourceString: "PHB'14 137", trait: [ "I'm driven by a wanderlust that led me away from home.", "I watch over my friends as if they were a litter of newborn pups.", "I once ran twenty-five miles without stopping to warn to my clan of an approaching orc horde. I'd do it again if I had to.", "I have a lesson for every situation, drawn from observing nature.", "I place no stock in wealthy or well-mannered folk. Money and manners won't save you from a hungry owlbear.", "I'm always picking things up, absently fiddling with them, and sometimes accidentally breaking them.", "I feel far more comfortable around animals than people.", "I was, in fact, raised by wolves.", ], ideal: [ "**Change**. Life is like the seasons, in constant change, and we must change with it. (Chaotic)", "**Greater Good**. It is each person's responsibility to make the most happiness for the whole tribe. (Good)", "**Honor**. If I dishonor myself, I dishonor my whole clan. (Lawful)", "**Might**. The strongest are meant to rule. (Evil)", "**Nature**. The natural world is more important than all the constructs of civilization. (Neutral)", "**Glory**. I must earn glory in battle, for myself and my clan. (Any)", ], bond: [ "My family, clan, or tribe is the most important thing in my life, even when they are far from me.", "An injury to the unspoiled wilderness of my home is an injury to me.", "I will bring terrible wrath down on the evildoers who destroyed my homeland.", "I am the last of my tribe, and it is up to me to ensure their names enter legend.", "I suffer awful visions of a coming disaster and will do anything to prevent it.", "It is my duty to provide children to sustain my tribe.", ], flaw: [ "I am too enamored of ale, wine, and other intoxicants.", "There's no room for caution in a life lived to the fullest.", "I remember every insult I've received and nurse a silent resentment toward anyone who's ever wronged me.", "I am slow to trust members of other races, tribes, and societies.", "Violence is my answer to almost any challenge.", "Don't expect me to save those who can't save themselves. It is nature's way that the strong thrive and the weak perish.", ], extra: ["Select an Origin", "Forester", "Trapper", "Homesteader", "Guide", "Exile or outcast", "Bounty hunter", "Pilgrim", "Tribal nomad", "Hunter-gatherer", "Tribal marauder", ], }; BackgroundFeatureList["guide"] = { description: "I came of age outdoors, far from settled lands. My home was anywhere I chose to spread my bedroll. The wilderness has wonders like strange monsters, pristine forests, streams, overgrown ruins, and I learned to fend for myself as I explored them. From time to time, I guided nature priests who taught me the fundamentals of using the magic of the wild.", source: [["P24", 181]], featsAdd: [{ key: "magic initiate", choice: "druid" }], }; BackgroundList["hermit"] = { regExpSearch: /hermit/i, name: "Hermit", source: [["P24", 182]], scorestxt: "+2 to one and +1 to another -or- +1 to all three: Constitution, Wisdom, and Charisma", skills: ["Medicine", "Religion"], toolProfs: [["Herbalism Kit", "Int"]], gold: 16, equipleft: [ ["Bedroll", "", 7], ["Book (philosophy)", "", 5], ["Herbalism kit", "", 3], ["Lamp", "", 1], ["Oil, flasks of", 3, 1], ], equipright: [ ["Traveler's clothes", "", 4], ["Belt pouch (with coins)", "", 1], ["Quarterstaff", "", 4], ], equip1stPage: { weapons: ["Quarterstaff"], }, feature: "Hermit", // from PHB'14: traitsSourceString: "PHB'14 134", trait: [ "I've been isolated for so long that I rarely speak, preferring gestures and the occasional grunt.", "I am utterly serene, even in the face of disaster.", "The leader of my community had something wise to say on every topic, and I am eager to share that wisdom.", "I feel tremendous empathy for all who suffer.", "I'm oblivious to etiquette and social expectations.", "I connect everything that happens to me to a grand, cosmic plan.", "I often get lost in my own thoughts and contemplation, becoming oblivious to my surroundings.", "I am working on a grand philosophical theory and love sharing my ideas.", ], ideal: [ "**Greater Good**. My gifts are meant to be shared with all, not used for my own benefit. (Good)", "**Logic**. Emotions must not cloud our sense of what is right and true, or our logical thinking. (Lawful)", "**Free Thinking**. Inquiry and curiosity are the pillars of progress. (Chaotic)", "**Power**. Solitude and contemplation are paths toward mystical or magical power. (Evil)", "**Live and Let Live**. Meddling in the affairs of others only causes trouble. (Neutral)", "**Self-Knowledge**. If you know yourself, there's nothing left to know. (Any)", ], bond: [ "Nothing is more important than the other members of my hermitage, order, or association.", "I entered seclusion to hide from the ones who might still be hunting me. I must someday confront them.", "I'm still seeking the enlightenment I pursued in my seclusion, and it still eludes me.", "I entered seclusion because I loved someone I could not have.", "Should my discovery come to light, it could bring ruin to the world.", "My isolation gave me great insight into a great evil that only I can destroy.", ], flaw: [ "Now that I've returned to the world, I enjoy its delights a little too much.", "I harbor dark, bloodthirsty thoughts that my isolation and meditation failed to quell.", "I am dogmatic in my thoughts and philosophy.", "I let my need to win arguments overshadow friendships and harmony.", "I'd risk too much to uncover a lost bit of knowledge.", "I like keeping secrets and won't share them with anyone.", ], extra: [ "Select a Life of Seclusion", "Searching for spiritual enlightenment", "Living in accordance with a religious order", "Exiled for a crime I didn't commit", "Retreated from society after a life-altering event", "Worked on my art, literature, music, or manifesto", "Commune with nature, far from civilization", "Caretaker of an ancient ruin or relic", "Pilgrim in search of a thing of spiritual significance", ], }; BackgroundFeatureList["hermit"] = { description: "I spent my early years secluded in a hut or monastery located well beyond the outskirts of the nearest settlement. In those days, my only companions were the creatures of the forest and those who would occasionally visit to bring news of the outside world and supplies. The solitude allowed me to spend many hours pondering the mysteries of creation.", source: [["P24", 182]], featsAdd: ["Healer"], }; BackgroundList["merchant"] = { regExpSearch: /^(?!.*guild)(?=.*merchant).*$/i, name: "Merchant", source: [["P24", 182]], scorestxt: "+2 to one and +1 to another -or- +1 to all three: Constitution, Intelligence, and Charisma", skills: ["Animal Handling", "Persuasion"], toolProfs: [["Navigator's Tools", "Wis"]], gold: 22, equipleft: [ ["Navigator's tools", "", 2], ], equipright: [ ["Traveler's clothes", "", 4], ["Pouch", "", 1], ["Belt pouch (with coins)", "", 1], ], feature: "Merchant", // from PHB'14 (Guild Merchant variant for the Guild Artisan): traitsOriginName: "Guild Merchant", traitsSourceString: "PHB'14 133", extra: [ "Select a Business", "Trader", "Caravan master", "Shopkeeper", ], }; BackgroundFeatureList["merchant"] = { description: "I was apprenticed to a trader, caravan master, or shopkeeper, learning the fundamentals of commerce. I traveled broadly and earned a living by buying and selling raw materials artisans need to practice their craft, or their finished works. I transported goods from one place to another or bought them from traveling traders and sold them in my own shop.", source: [["P24", 182]], featsAdd: ["Lucky"], }; BackgroundList["noble"] = { regExpSearch: /^(?!.*(waterdhavian|waterdeep|knight))(?=.*noble).*$/i, name: "Noble", source: [["P24", 183]], scorestxt: "+2 to one and +1 to another -or- +1 to all three: Strength, Intelligence, and Charisma", skills: ["History", "Persuasion"], toolProfs: [["Gaming Set", 1]], gold: 25, equipleft: [ ["Gaming set (same as proficiency)", "", ""], ["Perfume", "", ""], ], equipright: [ ["Fine clothes", "", 6], ["Purse (with coins)", "", 1], ], feature: "Noble", // from PHB'14: traitsSourceString: "PHB'14 135", trait: [ "My eloquent flattery makes everyone I talk to feel like the most wonderful and important person in the world.", "The common folk love me for my kindness and generosity.", "No one could doubt by looking at my regal bearing that I am a cut above the unwashed masses.", "I take great pains to always look my best and follow the latest fashions.", "I don't like to get my hands dirty, and I won't be caught dead in unsuitable accommodations.", "Despite my noble birth, I do not place myself above other folk. We all have the same blood.", "My favor, once lost, is lost forever.", "If you do me an injury, I will crush you, ruin your name, and salt your fields.", ], ideal: [ "**Respect**. Respect is due to me because of my position, but all people regardless of station deserve to be treated with dignity. (Good)", "**Responsibility**. It is my duty to respect the authority of those above me, just as those below me must respect mine. (Lawful)", "**Independence**. I must prove that I can handle myself without the coddling of my family. (Chaotic)", "**Power**. If I can attain more power, no one will tell me what to do. (Evil)", "**Family**. Blood runs thicker than water. (Any)", "**Noble Obligation**. It is my duty to protect and care for the people beneath me. (Good)", ], bond: [ "I will face any challenge to win the approval of my family.", "My house's alliance with another noble family must be sustained at all costs.", "Nothing is more important than the other members of my family.", "I am in love with the heir of a family that my family despises.", "My loyalty to my sovereign is unwavering.", "The common folk must see me as a hero of the people.", ], flaw: [ "I secretly believe that everyone is beneath me.", "I hide a truly scandalous secret that could ruin my family forever.", "I too often hear veiled insults and threats in every word addressed to me, and I'm quick to anger.", "I have an insatiable desire for carnal pleasures.", "In fact, the world does revolve around me.", "By my words and actions, I often bring shame to my family.", ], }; BackgroundFeatureList["noble"] = { description: "I was raised in a castle, surrounded by wealth, power, and privilege. My family of minor aristocrats ensured that I received a first-class education, some of which I appreciated and some of which I resented. My time in the castle, especially the many hours I spent observing my family at court, also taught me a great deal about leadership.", source: [["P24", 183]], featsAdd: ["Skilled"], }; BackgroundList["sailor"] = { regExpSearch: /sailor/i, name: "Sailor", source: [["P24", 184]], scorestxt: "+2 to one and +1 to another -or- +1 to all three: Strength, Dexterity, and Wisdom", skills: ["Acrobatics", "Perception"], toolProfs: [["Navigator's Tools", "Wis"]], gold: 20, equipleft: [ ["Navigator's tools", "", 2], ["Rope", "", 5], ], equipright: [ ["Traveler's clothes", "", 4], ["Belt pouch (with coins)", "", 1], ["Dagger", "", 1], ], equip1stPage: { weapons: ["Dagger"], }, feature: "Sailor", // from PHB'14: traitsSourceString: "PHB'14 139", trait: [ "My friends know they can rely on me, no matter what.", "I work hard so that I can play hard when the work is done.", "I enjoy sailing into new ports and making new friends over a flagon of ale.", "I stretch the truth for the sake of a good story.", "To me, a tavern brawl is a nice way to get to know a new city.", "I never pass up a friendly wager.", "My language is as foul as an otyugh nest.", "I like a job well done, especially if I can convince someone else to do it.", ], ideal: [ "**Respect**. The thing that keeps a ship together is mutual respect between captain and crew. (Good)", "**Fairness**. We all do the work, so we all share in the rewards. (Lawful)", "**Freedom**. The sea is freedom\u2015 the freedom to go anywhere and do anything. (Chaotic)", "**Mastery**. I'm a predator, and the other ships on the sea are my prey. (Evil)", "**People**. I'm committed to my crewmates, not to ideals. (Neutral)", "**Aspiration**. Someday I'll own my own ship and chart my own destiny. (Any)", ], bond: [ "I'm loyal to my captain first, everything else second.", "The ship is most important\u2015 crewmates and captains come and go.", "I'll always remember my first ship.", "In a harbor town, I have a paramour whose eyes nearly stole me from the sea.", "I was cheated out of my fair share of the profits, and I want to get my due.", "Ruthless pirates murdered my captain and crewmates, plundered our ship, and left me to die. Vengeance will be mine.", ], flaw: [ "I follow orders, even if I think they're wrong.", "I'll say anything to avoid having to do extra work.", "Once someone questions my courage, I never back down no matter how dangerous the situation.", "Once I start drinking, it's hard for me to stop.", "I can't help but pocket loose coins and other trinkets I come across.", "My pride will probably lead to my destruction.", ], }; BackgroundFeatureList["sailor"] = { description: "I lived as a seafarer, wind at my back and decks swaying beneath my feet. I've perched on bar stools in more ports of call than I can remember, faced mighty storms, and swapped stories with folk who live beneath the waves.", source: [["P24", 184]], featsAdd: ["Tavern Brawler"], }; BackgroundList["scribe"] = { regExpSearch: /scribe/i, name: "Scribe", source: [["P24", 184]], scorestxt: "+2 to one and +1 to another -or- +1 to all three: Dexterity, Intelligence, and Wisdom", skills: ["Investigation", "Perception"], toolProfs: [["Calligrapher's Supplies", "Dex"]], gold: 23, equipleft: [ ["Calligrapher's supplies", "", 5], ["Lamp", "", 1], ["Oil, flasks of", 3, 1], ["Parchment, sheets of", 12, ""], ], equipright: [ ["Fine clothes", "", 6], ["Belt pouch (with coins)", "", 1], ], feature: "Scribe", }; BackgroundFeatureList["scribe"] = { description: "I spent formative years in a scriptorium, monastery, or government agency, where I learned to write with a clear hand and produce finely written texts. Perhaps I scribed government documents, or copied tomes, or perhaps I've written poetry, prose, or scholarly research. I have an attention to detail, helping me avoid mistakes in that I copy or create.", source: [["P24", 184]], featsAdd: ["Skilled"], }; BackgroundList["wayfarer"] = { regExpSearch: /wayfarer/i, name: "Wayfarer", source: [["P24", 185]], scorestxt: "+2 to one and +1 to another -or- +1 to all three: Dexterity, Wisdom, and Charisma", skills: ["Insight", "Stealth"], toolProfs: [["Thieves' Tools", "Dex"]], gold: 16, equipleft: [ ["Bedroll", "", 7], ["Gaming set (choose one)", "", ""], ["Thieves' tools", "", 1], ], equipright: [ ["Traveler's clothes", "", 4], ["Pouch", "", 1], ["Belt pouch (with coins)", "", 1], ["Dagger", 2, 1], ], equip1stPage: { weapons: ["Dagger", "Dagger (off-hand)"], }, feature: "Wayfarer", // from PHB'14 (Urchin): traitsOriginName: "Urchin", traitsSourceString: "PHB'14 141", trait: [ "I keep scraps of food and trinkets hidden away in my pockets.", "I ask questions all the time.", "I like to squeeze into compact places where nobody can harm me.", "I sleep with my back to solid surface, with all that I own embraced tightly in my arms.", "I have bad manners and eat like a pig.", "I expect that anybody who's nice to me is hiding malicious intent.", "I eschew bathing.", "I say, without reserve, what other people are implying or masking.", ], ideal: [ "**Respect**. Everybody, no matter their riches, deserves respect. (Good)", "**Community**. We have to take look out for each other, because nobody else will do it for us. (Lawful)", "**Change**. The low rise up, and the high and mighty come down. Change is natural. (Chaotic)", "**Retribution**. The rich need to be shown how it is to live and die in the poor quarters. (Evil)", "**People**. I help those who help me\u2015 that is what lets us stay alive. (Neutral)", "**Aspiration**. I'm going to prove that I'm worthy of a better life. (Any)", ], bond: [ "My town or city is my home, and I'll battle those that threaten it.", "I'm the benefactor of an orphanage so others may be kept from enduring what I was forced to endure.", "I owe my life to another urchin who taught me the ways of living in the gutters.", "I owe a debt I can never repay to the person who showed me sympathy.", "I got away from my life of poverty by robbing an influential person, and I'm wanted for it.", "No one else should have to suffer the difficulties I've been through.", ], flaw: [ "I will run away from a fight if I'm outnumbered.", "A gold piece already has a lot of value to me, and I'll do just about anything for more of it.", "I will never completely trust another. I only trust myself.", "I would rather use an unfair advantage than fight honorably.", "It's not theft if I have more use for it than someone else.", "People who are incapable of taking care of themselves get what they deserve.", ], }; BackgroundFeatureList["wayfarer"] = { description: "I grew up on the streets surrounded by similarly ill-fated castoffs, a few of them friends and a few of them rivals. I slept where I could and did odd jobs for food. At times, when the hunger became unbearable, I resorted to theft. Still, I never lost my pride and never abandoned hope. Fate is not yet finished with me.", source: [["P24", 185]], featsAdd: ["Lucky"], }; // Species RaceList["aasimar"] = { regExpSearch: /^((?=.*aasimar)|((?=.*planetouched)(?=.*(celestial|angel)))).*$/i, name: "Aasimar", source: [["P24", 186]], plural: "Aasimar", size: [3, 4], speed: { walk: { spd: 30, enc: 20 } }, vision: [["Darkvision", 60]], dmgres: ["Necrotic", "Radiant"], spellcastingAbility: 6, spellcastingBonus: [{ name: "Light Bearer", spells: ["light"], selection: ["light"], }], features: { "healing hands": { name: "Healing Hands", source: [["P24", 186]], minlevel: 1, usages: 1, recovery: "long rest", action: [["action", ""]], additional: ProficiencyBonusList.map(function(n) { return n + "d4 healing"; }), }, "celestial revelation": { name: "Celestial Revelation", source: [["P24", 186]], minlevel: 3, usages: 1, recovery: "long rest", additional: ProficiencyBonusList.map(function(n) { return "+" + n + " damage"; }), action: [["bonus action", ""]], toNotesPage: [{ name: "Celestial Revelation", note: [ "As a Bonus Action once per Long Rest, I can transform using one of the options below (choose the option each time). This lasts for 1 min or until I end it (no action).", "While transformed, once on each of my turns when I deal damage with an attack or spell, I can deal my Proficiency Bonus in extra damage to one target. This extra damage's type is Necrotic for Necrotic Shroud, or Radiant for Heavenly Wings and Inner Radiance.", " **\u2022 Heavenly Wings**. Two spectral wings sprout from my back temporarily. Until the transformation ends, I have a Fly Speed equal to my Speed.", "While transformed like this, the extra damage on attacks/spells mentioned above is Radiant.", " **\u2022 Inner Radiance**. Searing light temporarily radiates from my eyes and mouth. For the duration, I shed Bright Light in a 10-ft radius and Dim Light for an additional 10 ft, and at the end of each of my turns, each creature within 10 ft of me takes Radiant damage equal to my Proficiency Bonus", "While transformed like this, the extra damage on attacks/spells mentioned above is Radiant.", " **\u2022 Necrotic Shroud**. My eyes briefly become pools of darkness, and flightless wings sprout from my back temporarily. Creatures other than my allies within 10 ft of me must succeed on a Charisma saving throw (DC 8 + Cha mod + Prof. Bonus) or have the Frightened condition until the end of my next turn.", "While transformed like this, the extra damage on attacks/spells mentioned above is Necrotic.", ], additional: "1\xD7 per long rest", }], }, }, trait: [ "**Aasimar**", "##\u25C6 Healing Hands##. As a Magic action once per Long Rest, I can touch a creature and restore HP to it for a number of d4s equal to my Proficiency Bonus.", "##\u25C6 Light Bearer##. I know the *Light* cantrip. Charisma is my spellcasting ability for it.", "##\u25C6 Celestial Revelation## (level 3). As a Bonus Action once per Long Rest, I can transform for 1 min or until I end it (no action). Once on each of my turns while transformed, I can deal my Prof. Bonus in extra damage. I choose how I transform each time. See Notes page.", ].join("\n"), // from VGM: age : " reach adulthood in their late teens and live around 160 years", height: " are about 2-4 ft (small) or 4-7 ft (medium) tall (4'8\" + 2d10\")", weight : " weigh around 165 lb (110 + 2d10 \xD7 2d4 lb)", heightMetric: " are about 60-120 cm (small) or 120-210 cm (medium) tall (145 + 5d10 cm)", weightMetric : " weigh around 75 kg (50 + 5d10 \xD7 4d4 / 10 kg)", }; // Origin feats FeatsList["crafter"] = { name: "Crafter", source: [["P24", 200]], type: "origin", description: "I received a 20% discount on nonmagical items. I'm proficient with three Artisan's Tools of choice from the Fast Crafting table. Fast Crafting. I can craft one item from that table during a Long Rest, which lasts until I finish another Long Rest. I need to have the associated tools and proficiency to do this. [See Notes page]", descriptionFull: [ "You gain the following benefits.", "***Tool Proficiency***. You gain proficiency with three different Artisan's Tools of your choice from the Fast Crafting table.", "***Discount***. Whenever you buy a nonmagical item, you receive a 20 percent discount on it.", "***Fast Crafting***. When you finish a Long Rest, you can craft one piece of gear from the Fast Crafting table, provided you have the Artisan's Tools associated with that item and have proficiency with those tools. The item lasts until you finish another Long Rest, at which point the item falls apart.", [ ["Artisan's Tools", "Crafted Gear"], ["Carpenter's Tools", "Ladder, Torch"], ["Leatherworker's Tools", "Crossbow Bolt Case, Map or Scroll Case, Pouch"], ["Mason's Tools", "Block and Tackle"], ["Potter's Tools", "Jug, Lamp"], ["Smith's Tools", "Ball Bearings, Bucket, Caltrops, Grappling Hook, Iron Pot"], ["Tinker's Tools", "Bell, Shovel, Tinderbox"], ["Weaver's Tools", "Basket, Rope, Net, Tent"], ["Woodcarver's Tools", "Club, Greatclub, Quarterstaff"], ], ], toolProfs: [["Artisan's tools", 3]], toNotesPage: [ { name: "Fast Crafting", note: [ "When I finish a Long Rest, I can craft one piece of gear from the table below, provided I have the Artisan's Tools associated with that item and have proficiency with those tools. The item lasts until I finish another Long Rest, at which point the item falls apart.", [ ["Artisan's Tools", "Crafted Gear"], ["Carpenter's Tools", "Ladder, Torch"], ["Leatherworker's Tools", "Crossbow Bolt Case, Map or Scroll Case, Pouch"], ["Mason's Tools", "Block and Tackle"], ["Potter's Tools", "Jug, Lamp"], ["Smith's Tools", "Ball Bearings, Bucket, Caltrops, Grappling Hook, Iron Pot"], ["Tinker's Tools", "Bell, Shovel, Tinderbox"], ["Weaver's Tools", "Basket, Rope, Net, Tent"], ["Woodcarver's Tools", "Club, Greatclub, Quarterstaff"], ], ], }, ], }; FeatsList["healer"] = { name: "Healer", source: [["P24", 201]], type: "origin", description: "##Battle Medic##. As a Utilize action, I can expend 1 use of a Healer's Kit to allow a creature within 5 ft of me to expend 1 Hit Die and regain HP equal to the HD's roll plus my Proficiency Bonus. ##Healing Rerolls##. Whenever I roll a 1 on the die to heal using a spell or this feat, I can reroll the die but must use the new roll.", descriptionFull: [ "You gain the following benefits.", "***Battle Medic***. If you have a Healer's Kit, you can expend one use of it and tend to a creature within 5 feet of yourself as a Utilize action. That creature can expend one of its Hit Point Dice, and you then roll that die. The creature regains a number of Hit Points equal to the roll plus your Proficiency Bonus.", "***Healing Rerolls***. Whenever you roll a die to determine the number of Hit Points you restore with a spell or with this feat's Battle Medic benefit, you can reroll the die if it rolls a 1, and you must use the new roll.", ], action: [["action", "Battle Medic"]], }; FeatsList["lucky"] = { name: "Lucky", source: [["P24", 201]], type: "origin", description: [ "I gain a number of ##Luck Points## equal to my Proficiency Bonus that I regain "+ (typePF ? "after" : "when") + " I finish a Long Rest. I can expend 1 of them to:", " \u2022 Give myself Advantage on a D20 Test.", " \u2022 Impose Disadvantage on an attack roll against me.", ].join("\n"), descriptionFull: [ "You gain the following benefits.", "***Luck Points***. You have a number of Luck Points equal to your Proficiency Bonus and can spend the points on the benefits below. You regain your expended Luck Points when you finish a Long Rest.", "***Advantage***. When you roll a d20 for a D20 Test, you can spend 1 Luck Point to give yourself Advantage on the roll.", "***Disadvantage***. When a creature rolls a d20 for an attack roll against you, you can spend 1 Luck Point to impose Disadvantage on that roll.", ], limfeaname: "Luck Points", usages: "Proficiency bonus per ", usagescalc: "event.value = Number(How('Proficiency Bonus'));", recovery: "long rest", }; FeatsList["musician"] = { name: "Musician", source: [["P24", 201]], type: "origin", description: [ "At the end of a Short or Long Rest, I can play an instrument I'm proficient with to give Heroic Inspiration to a number of allies up to my Proficiency Bonus, if they hear the song.", "I gain proficiency with three Musical Instruments of my choice.", ].join("\n"), descriptionFull: [ "You gain the following benefits.", "***Instrument Training***. You gain proficiency with three Musical Instruments of your choice.", "***Encouraging Song***. As you finish a Short or Long Rest, you can play a song on a Musical Instrument with which you have proficiency and give Heroic Inspiration to allies who hear the song. The number of allies you can affect in this way equals your Proficiency Bonus.", ], toolProfs: [["Musical Instrument", 3]], }; FeatsList["tavern brawler"] = { name: "Tavern Brawler", source: [["P24", 202]], type: "origin", description: "Once per turn when I hit a creature with an Unarmed Strike as part of the Attack action on my turn, I can deal damage to the target and also push it 5 ft away from me. My Unarmed Strike deals 1d4 damage and I can reroll a 1 on its damage die, but must use the new roll. I'm proficient with improvised weapons. ", descriptionFull: [ "You gain the following benefits.", "***Enhanced Unarmed Strike***. When you hit with your Unarmed Strike and deal damage, you can deal Bludgeoning damage equal to 1d4 plus your Strength modifier instead of the normal damage of an Unarmed Strike.", "***Damage Rerolls***. Whenever you roll a damage die for your Unarmed Strike, you can reroll the die if it rolls a 1, and you must use the new roll.", "***Improvised Weaponry***. You have proficiency with improvised weapons.", "***Push***. When you hit a creature with an Unarmed Strike as part of the Attack action on your turn, you can deal damage to the target and also push it 5 feet away from you. You can use this benefit only once per turn.", ], weaponProfs: [false, false, ["Improvised weapons"]], calcChanges: { atkAdd: [ function (fields, v) { if (v.baseWeaponName == "improvised weapon" || /improvised/i.test(v.WeaponName + v.baseWeaponName) || /improvised weapon/i.test(v.theWea.type)) { fields.Proficiency = true; }; if (v.baseWeaponName == "unarmed strike") { fields.Description += (fields.Description ? "; " : "") + "1/turn also push 5 ft; reroll 1 on damage"; if (fields.Damage_Die == 1) fields.Damage_Die = "1d4"; }; }, "My Unarmed Strike deals 1d4 damage instead of 1.\n \u2022 Whenever I roll a 1 on the damage die of an Unarmed Strike, I can reroll it but must use the new roll.\n \u2022 Once per turn as part of the Attack action on my turn, I can deal damage and push the target 5 ft away from me.", ], }, }; FeatsList["tough"] = { name: "Tough", source: [["P24", 202]], type: "origin", description: "My Hit Point maximum increases by an amount equal to twice my character level when I gain this feat. Whenever I gain a character level thereafter, my Hit Point maximum increases by an additional 2 Hit Points.", descriptionFull: [ "Your Hit Point maximum increases by an amount equal to twice your character level when you gain this feat. Whenever you gain a character level thereafter, your Hit Point maximum increases by an additional 2 Hit Points.", ], calcChanges: { hp: function (totalHD) { return [totalHD * 2, '\n + ' + totalHD + ' \xD7 2 from the Tough feat (' + (totalHD * 2) + ')', true]; }, }, }; // General feats FeatsList["actor"] = { name: "Actor", source: [["P24", 202]], type: "general", prerequisite: "Level 4+, Charisma 13+", prereqeval: function (v) { return v.characterLevel >= 4 && What("Cha") >= 13; }, description: "While disguised as a specific person, I have Advantage on Charisma (Deception or Performance) checks to convince others that I am that person. I am able to mimic the sounds and speech of others. Wisdom (Insight) check (DC 8 + Cha mod + Prof Bonus) to determine the effect is faked. [+1 Charisma]", calculate: 'var dc = 8 + Number(How("Proficiency Bonus")) + Number(What("Cha Mod")); event.value = "While disguised as a specific person, I have Advantage on Charisma (Deception or Performance) checks to convince others that I am that person. I am able to mimic the sounds and speech of others. DC " + dc + " (8 + Cha mod + Prof Bonus) Wisdom (Insight) check to determine the effect is faked. [+1 Charisma]"', descriptionFull: [ "You gain the following benefits.", "***Ability Score Increase***. Increase your Charisma score by 1, to a maximum of 20.", "***Impersonation***. While you're disguised as a real or fictional person, you have Advantage on Charisma (Deception or Performance) checks to convince others that you are that person.", "***Mimicry***. You can mimic the sounds of other creatures, including speech. A creature that hears the mimicry must succeed on a Wisdom (Insight) check to determine the effect is faked (8 plus your Charisma modifier and Proficiency Bonus).", ], scores: [0, 0, 0, 0, 0, 1], }; FeatsList["athlete"] = { name: "Athlete", source: [["P24", 202]], type: "general", prerequisite: "Level 4+, Strength or Dexterity 13+", prereqeval: function (v) { return v.characterLevel >= 4 && (What("Str") >= 13 || What("Dex") >= 13); }, description: [ "I gain a Climb Speed equal to my Speed.", "I can make a running Long or High Jump after moving only 5 ft.", "I can right myself from the Prone condition with only 5 ft of movement. [+1 Str or Dex]", ].join("\n"), descriptionFull: [ "You gain the following benefits.", "***Ability Score Increase***. Increase your Strength or Dexterity score by 1, to a maximum of 20.", "***Climb Speed***. You gain a Climb Speed equal to your Speed.", "***Hop Up***. When you have the Prone condition, you can right yourself with only 5 feet of movement.", "***Jumping***. You can make a running Long or High Jump after moving only 5 feet.", ], speed: { climb: { spd: "walk", enc: "walk" } }, choices: ["Strength", "Dexterity"], choicesNotInMenu: true, "strength": { description: [ "I gain a Climb Speed equal to my Speed.", "I can make a running Long or High Jump after moving only 5 ft.", "I can right myself from the Prone condition with only 5 ft of movement. [+1 Strength]", ].join("\n"), scores: [1, 0, 0, 0, 0, 0], }, "dexterity": { description: [ "I gain a Climb Speed equal to my Speed.", "I can make a running Long or High Jump after moving only 5 ft.", "I can right myself from the Prone condition with only 5 ft of movement. [+1 Dexterity]", ].join("\n"), scores: [0, 1, 0, 0, 0, 0], }, }; FeatsList["charger"] = { name: "Charger", source: [["P24", 202]], type: "general", prerequisite: "Level 4+, Strength or Dexterity 13+", prereqeval: function (v) { return v.characterLevel >= 4 && (What("Str") >= 13 || What("Dex") >= 13); }, description: "When I take the Dash action, my Speed increases by 10 ft for that action. If I move at least 10 ft in a straight line towards an enemy and hit it with a melee attack as part of the Attack action, once per turn I may either deal +1d8 damage or push the target 10 ft away from me if it's no more than 1 size larger. [+1 Str or Dex]", descriptionFull: [ "You gain the following benefits.", "***Ability Score Increase***. Increase your Strength or Dexterity score by 1, to a maximum of 20.", "***Improved Dash***. When you take the Dash action, your Speed increases by 10 feet for that action.", "***Charge Attack***. If you move at least 10 feet in a straight line toward a target immediately before hitting it with a melee attack roll as part of the Attack action, choose one of the following effects: gain a 1d8 bonus to the attack's damage roll, or push the target up to 10 feet away if it is no more than one size larger than you. You can use this benefit only once on each of your turns.", ], choices: ["Strength", "Dexterity"], choicesNotInMenu: true, "strength": { description: "When I take the Dash action, my Speed increases by 10 ft for that action. If I move at least 10 ft in a straight line towards an enemy and hit it with a melee attack as part of the Attack action, once per turn I may either deal +1d8 damage or push the target 10 ft away from me if it's no more than 1 size larger. [+1 Str" + (typePF ? "]" : "ength]"), scores: [1, 0, 0, 0, 0, 0], }, "dexterity": { description: "When I take the Dash action, my Speed increases by 10 ft for that action. If I move at least 10 ft in a straight line towards an enemy and hit it with a melee attack as part of the Attack action, once per turn I may either deal +1d8 damage or push the target 10 ft away from me if it's no more than 1 size larger. [+1 Dex" + (typePF ? "]" : "terity]"), scores: [0, 1, 0, 0, 0, 0], }, }; FeatsList["chef"] = { name: "Chef", source: [["P24", 202]], type: "general", prerequisite: "Level 4+", prereqeval: function (v) { return v.characterLevel >= 4; }, description: "I'm proficient with Cook's Utensils. In a Short Rest I can cook for 4+Prof Bonus creatures. If they eat and spend 1+ HD in that rest, they heal +1d8 HP. In 1 hour or after a Long Rest, I can cook Prof Bonus of special treats that last for 8 hours. As a Bonus Action, one can eat a treat to gain my Prof Bonus of Temp HP.", descriptionFull: [ "You gain the following benefits.", "***Ability Score Increase***. Increase your Constitution or Wisdom score by 1, to a maximum of 20.", "***Cook's Utensils***. You gain proficiency with Cook's Utensils if you don't already have it.", "***Replenishing Meal***. As part of a Short Rest, you can cook special food if you have ingredients and Cook's Utensils on hand. You can prepare enough of this food for a number of creatures equal to 4 plus your Proficiency Bonus. At the end of the Short Rest, any creature who eats the food and spends one or more Hit Dice to regain Hit Points regains an extra 1d8 Hit Points.", "***Bolstering Treats***. With 1 hour of work or when you finish a Long Rest, you can cook a number of treats equal to your Proficiency Bonus if you have ingredients and Cook's Utensils on hand. These special treats last 8 hours after being made. A creature can use a Bonus Action to eat one of those treats to gain a number of Temporary Hit Points equal to your Proficiency Bonus.", ], toolProfs: ["Cook's Utensils"], toNotesPage: [{ name: "Replenishing Meal", note: ["As part of a Short Rest, I can cook special food if I have ingredients and Cook's Utensils on hand. I can prepare enough of this food for a number of creatures equal to 4 plus my Proficiency Bonus. At the end of the Short Rest, any creature who eats the food and spends one or more Hit Dice to regain Hit Points regains an extra 1d8 Hit Points."], }, { name: "Bolstering Treats", note: [ "With 1 hour of work or when I finish a Long Rest, I can cook a number of treats equal to my Proficiency Bonus if I have ingredients and Cook's Utensils on hand. These special treats last 8 hours after being made.", "As a Bonus Action, a creature can eat one of those treats to gain a number of Temporary Hit Points equal to my Proficiency Bonus.", ], amendTo: "Replenishing Meal", }], choices: ["Constitution", "Wisdom"], choicesNotInMenu: true, "constitution": { description: "I'm proficient with Cook's Utensils. In a Short Rest I can cook for 4+Prof Bonus creatures. If they eat and spend 1+ HD in that rest, they heal +1d8 HP. In 1 hour or after a Long Rest, I can cook Prof Bonus of special treats that last for 8 hours. As a Bonus Action, one can eat a treat to gain my Prof Bonus of Temp HP." + (typePF ? "" : " [+1 Constitution]"), scores: [0, 0, 1, 0, 0, 0], }, "wisdom": { description: "I'm proficient with Cook's Utensils. In a Short Rest I can cook for 4+Prof Bonus creatures. If they eat and spend 1+ HD in that rest, they heal +1d8 HP. In 1 hour or after a Long Rest, I can cook Prof Bonus of special treats that last for 8 hours. As a Bonus Action, one can eat a treat to gain my Prof Bonus of Temp HP." + (typePF ? "" : " [+1 Wisdom]"), scores: [0, 0, 0, 0, 1, 0], }, }; FeatsList["crossbow expert"] = { name: "Crossbow Expert", source: [["P24", 203]], type: "general", prerequisite: "Level 4+, Dexterity 13+", prereqeval: function (v) { return v.characterLevel >= 4 && What("Dex") >= 13; }, description: "I ignore the Loading property of Hand, Light, and Heavy Crossbows. Being within 5 ft of an enemy doesn't impose Disadvantage on my crossbow attacks. I can add my ability modifier to the damage of off-hand attacks I make with crossbows that have the light property. [+1 Dexterity]", descriptionFull: [ "You gain the following benefits.", "***Ability Score Increase***. Increase your Dexterity score by 1, to a maximum of 20.", "***Ignore Loading***. You ignore the Loading property of the Hand Crossbow, Heavy Crossbow, and Light Crossbow (all called crossbows elsewhere in this feat). If you're holding one of them, you can load a piece of ammunition into it even if you lack a free hand.", "***Firing in Melee***. Being within 5 feet of an enemy doesn't impose Disadvantage on your attack rolls with crossbows.", "***Dual Wielding***. When you make the extra attack of the Light property, you can add your ability modifier to the damage of the extra attack if that attack is with a crossbow that has the Light property and you aren't already adding that modifier to the damage.", ], scores: [0, 1, 0, 0, 0, 0], calcChanges : { atkAdd : [ function (fields, v) { if (/(hand|heavy|light) crossbow/i.test(v.baseWeaponName)) { fields.Description = fields.Description.replace(/([,;]? ?loading|loading[,;]? ?)/i, ''); if (v.isOffHand && /\blight\b/i.test(fields.Description)) { output.modToDmg = true; }; }; }, "I ignore the Loading property of the Hand Crossbow, Heavy Crossbow, and Light Crossbow.", ], }, }; FeatsList["crusher"] = { name: "Crusher", source: [["P24", 203]], type: "general", prerequisite: "Level 4+", prereqeval: function (v) { return v.characterLevel >= 4; }, description: "Once per turn when my attack deals Bludgeoning damage to a creature up to one size larger than me, I can move it 5 ft to an empty space. When I score a Critical Hit that deals Bludgeoning damage to a creature, attack rolls against that creature have Advantage until the start of my next turn. [+1 Str or Con]", descriptionFull: [ "You gain the following benefits.", "***Ability Score Increase***. Increase your Strength or Constitution score by 1, to a maximum of 20.", "***Push***. Once per turn, when you hit a creature with an attack that deals Bludgeoning damage, you can move it 5 feet to an unoccupied space if the target is no more than one size larger than you.", "***Enhanced Critical***. When you score a Critical Hit that deals Bludgeoning damage to a creature, attack rolls against that creature have Advantage until the start of your next turn.", ], choices: ["Strength", "Constitution"], choicesNotInMenu: true, "strength": { description: "Once per turn when my attack deals Bludgeoning damage to a creature up to one size larger than me, I can move it 5 ft to an empty space. When I score a Critical Hit that deals Bludgeoning damage to a creature, attack rolls against that creature have Advantage until the start of my next turn. [+1 Strength]", scores: [1, 0, 0, 0, 0, 0], }, "constitution": { description: "Once per turn when my attack deals Bludgeoning damage to a creature up to one size larger than me, I can move it 5 ft to an empty space. When I score a Critical Hit that deals Bludgeoning damage to a creature, attack rolls against that creature have Advantage until the start of my next turn. [+1 Constitution]", scores: [0, 0, 1, 0, 0, 0], }, }; FeatsList["defensive duelist"] = { name: "Defensive Duelist", source: [["P24", 203]], type: "general", prerequisite: "Level 4+, Dexterity 13+", prereqeval: function (v) { return v.characterLevel >= 4 && What("Dex") >= 13; }, description: "##Parry##. As a reaction when I'm holding a Finesse weapon and another creature hits me with a melee attack, I can add my Proficiency Bonus to my Armor Class, potentially causing the attack to miss me. I gain this bonus to my AC against melee attacks until the start of my next turn. [+1 Dexterity]", descriptionFull: [ "You gain the following benefits.", "***Ability Score Increase***. Increase your Dexterity score by 1, to a maximum of 20.", "***Parry***. If you're holding a Finesse weapon and another creature hits you with a melee attack, you can take a Reaction to add your Proficiency Bonus to your Armor Class, potentially causing the attack to miss you. You gain this bonus to your AC against melee attacks until the start of your next turn.", ], scores: [0, 1, 0, 0, 0, 0], action: [["reaction", "Parry"]], }; FeatsList["dual wielder"] = { name: "Dual Wielder", source: [["P24", 203]], type: "general", prerequisite: "Level 4+, Strength or Dexterity 13+", prereqeval: function (v) { return v.characterLevel >= 4 && (What("Str") >= 13 || What("Dex") >= 13); }, description: "I can draw and stow 2 non-Two-Handed weapons at a time. If I take the Attack action on my turn to attack with a Light weapon, I can make an off-hand attack with another non-Two-Handed weapon as a Bonus Action. I don't add my ability modifier to this attack's damage unless it is negative. [+1 Str or Dex]", descriptionFull: [ "You gain the following benefits.", "***Ability Score Increase***. Increase your Strength or Dexterity score by 1, to a maximum of 20.", "***Enhanced Dual Wielding***. When you take the Attack action on your turn and attack with a weapon that has the Light property, you can make one extra attack as a Bonus Action later on the same turn with a different weapon, which must be a Melee weapon that lacks the Two-Handed property. You don't add your ability modifier to the extra attack's damage unless that modifier is negative.", "***Quick Draw***. You can draw or stow two weapons that lack the Two-Handed property when you would normally be able to draw or stow only one.", ], choices: ["Strength", "Dexterity"], choicesNotInMenu: true, "strength": { description: "I can draw and stow 2 non-Two-Handed weapons at a time. If I take the Attack action on my turn to attack with a Light weapon, I can make an off-hand attack with another non-Two-Handed weapon as a Bonus Action. I don't add my ability modifier to this attack's damage unless it is negative. [+1 Strength]", scores: [1, 0, 0, 0, 0, 0], }, "dexterity": { description: "I can draw and stow 2 non-Two-Handed weapons at a time. If I take the Attack action on my turn to attack with a Light weapon, I can make an off-hand attack with another non-Two-Handed weapon as a Bonus Action. I don't add my ability modifier to this attack's damage unless it is negative. [+1 Dexterity]", scores: [0, 1, 0, 0, 0, 0], }, }; FeatsList["durable"] = { name: "Durable", source: [["P24", 203]], type: "general", prerequisite: "Level 4+", prereqeval: function (v) { return v.characterLevel >= 4; }, description: [ "##Defy Death##. I have Advantage on Death Saving Throws.", "##Speedy Recovery##. As a Bonus Action, I can expend and roll one of my Hit Dice to regain a number of Hit Points equal to the roll. [+1 Constitution]", ].join("\n"), descriptionFull: [ "You gain the following benefits.", "***Ability Score Increase***. Increase your Constitution score by 1, to a maximum of 20.", "***Defy Death***. You have Advantage on Death Saving Throws.", "***Speedy Recovery***. As a Bonus Action, you can expend one of your Hit Point Dice, roll the die, and regain a number of Hit Points equal to the roll.", ], scores: [0, 0, 1, 0, 0, 0], savetxt: { text: ["Adv. on Death Saves"], }, action: [["bonus action", "Speedy Recovery (1 HD)"]], }; FeatsList["elemental adept"] = { name: "Elemental Adept", source: [["P24", 203]], type: "general", prerequisite: "Level 4+, Spellcasting or Pact Magic Feature", prereqeval: function (v) { return v.characterLevel >= 4 && v.isSpellcastingClass; }, description: "Choose one of the damage types: Acid, Cold, Fire, Lightning, or Thunder. Spells I cast ignore resistance to damage from this damage type. For any spell I cast that deals this damage type, I can treat any 1 on a damage die as a 2. [+1 Int, Wis, or Cha]", descriptionFull: [ "You gain the following benefits.", "***Ability Score Increase***. Increase your Intelligence, Wisdom, or Charisma score by 1, to a maximum of 20.", "***Energy Mastery***. Choose one of the following damage types: Acid, Cold, Fire, Lightning, or Thunder. Spells you cast ignore Resistance to damage of the chosen type. In addition, when you roll damage for a spell you cast that deals damage of that type, you can treat any 1 on a damage die as a 2.", "***Repeatable***. You can take this feat more than once, but you must choose a different damage type each time for Energy Mastery.", ], scorestxt: "+1 Intelligence, Wisdom, or Charisma", allowDuplicates: true, choices: ["Acid Energy Mastery", "Cold Energy Mastery", "Fire Energy Mastery", "Lightning Energy Mastery", "Thunder Energy Mastery"], "acid energy mastery": { name: "Elemental Adept [Acid]", description: [ "Spells cast by me ignore Resistance to Acid damage.", "When I roll damage for a spell casted by me that deals Acid damage, I can treat any 1 on a damage die as a 2.", "[+1 Intelligence, Wisdom, or Charisma]", ].join("\n"), }, "cold energy mastery": { name: "Elemental Adept [Cold]", description: [ "Spells cast by me ignore Resistance to Cold damage.", "When I roll damage for a spell casted by me that deals Cold damage, I can treat any 1 on a damage die as a 2.", "[+1 Intelligence, Wisdom, or Charisma]", ].join("\n"), }, "fire energy mastery": { name: "Elemental Adept [Fire]", description: [ "Spells cast by me ignore Resistance to Fire damage.", "When I roll damage for a spell casted by me that deals Fire damage, I can treat any 1 on a damage die as a 2.", "[+1 Intelligence, Wisdom, or Charisma]", ].join("\n"), }, "lightning energy mastery": { name: "Elemental Adept [Lightning]", description: [ "Spells cast by me ignore Resistance to Lightning damage.", "When I roll damage for a spell casted by me that deals Lightning damage, I can treat any 1 on a damage die as a 2.", "[+1 Intelligence, Wisdom, or Charisma]", ].join("\n"), }, "thunder energy mastery": { name: "Elemental Adept [Thunder]", description: [ "Spells cast by me ignore Resistance to Thunder damage.", "When I roll damage for a spell casted by me that deals Thunder damage, I can treat any 1 on a damage die as a 2.", "[+1 Intelligence, Wisdom, or Charisma]", ].join("\n"), }, }; FeatsList["fey-touched"] = { name: "Fey-Touched", source: [["P24", 204]], type: "general", prerequisite: "Level 4+", prereqeval: function (v) { return v.characterLevel >= 4; }, description: "I learn *Misty Step* and one 1st-level Divination or Enchantment spell. I always have these spells prepared. I can cast each once per Long Rest at their lowest level without expending a spell slot and by expending a spell slot as normal. The spells' spellcasting ability is the ability increased by this feat. [+1 Int, Wis, or Cha]", descriptionFull: [ "Your exposure to the Feywild's magic grants you the following benefits.", "***Ability Score Increase***. Increase your Intelligence, Wisdom, or Charisma score by 1, to a maximum of 20.", "***Fey Magic***. Choose one level 1 spell from the Divination or Enchantment school of magic. You always have that spell and the *Misty Step* spell prepared. You can cast each of these spells without expending a spell slot. Once you cast either spell in this way, you can't cast that spell in this way again until you finish a Long Rest. You can also cast these spells using spell slots you have of the appropriate level. The spells' spellcasting ability is the ability increased by this feat.", ], spellFirstColTitle: "PR", spellcastingBonus: [{ name: "Misty Step", spells: ["misty step"], selection: ["misty step"], firstCol: "oncelr+markedbox", }, { name: "1st-level Ench/Div spell", school: ["Ench", "Div"], level: [1, 1], firstCol: "oncelr+markedbox", }], choices: ["Intelligence", "Wisdom", "Charisma"], choicesNotInMenu: true, "intelligence": { description: "I learn Misty Step and one 1st-level Divination or Enchantment spell. I always have these spell prepared. I can cast each once per Long Rest at their lowest level without expending a spell slot and can cast them by expending a spell slot as normal. Intelligence is my spellcasting ability for these spells. [+1 Int" + (typePF ? "]" : "elligence]"), spellcastingAbility: 4, scores: [0, 0, 0, 1, 0, 0], }, "wisdom": { description: "I learn Misty Step and one 1st-level Divination or Enchantment spell. I always have these spell prepared. I can cast each once per Long Rest at their lowest level without expending a spell slot and can cast them by expending a spell slot as normal. Wisdom is my spellcasting ability for these spells. [+1 Wisdom]", spellcastingAbility: 5, scores: [0, 0, 0, 0, 1, 0], }, "charisma": { description: "I learn Misty Step and one 1st-level Divination or Enchantment spell. I always have these spell prepared. I can cast each once per Long Rest at their lowest level without expending a spell slot and can cast them by expending a spell slot as normal. Charisma is my spellcasting ability for these spells. [+1 Charisma]", spellcastingAbility: 6, scores: [0, 0, 0, 0, 0, 1], }, }; FeatsList["great weapon master"] = { name: "Great Weapon Master", source: [["P24", 204]], type: "general", prerequisite: "Level 4+, Strength 13+", prereqeval: function (v) { return v.characterLevel >= 4 && What("Str") >= 13; }, description: [ "##Heavy Weapon Mastery##. During the Attack action on my turn, I can add my Proficiency Bonus to the damage of " + (typePF ? "Heavy weapons. " : "weapons with the Heavy property."), "##Hew##. Immediately after I reduce a creature to 0 HP with a melee weapon or score a Critical Hit with one, I can make another attack with that weapon as a Bonus Action. [+1 Str]", ].join("\n"), descriptionFull: [ "You gain the following benefits.", "***Ability Score Increase***. Increase your Strength score by 1, to a maximum of 20.", "***Heavy Weapon Mastery***. When you hit a creature with a weapon that has the Heavy property as part of the Attack action on your turn, you can cause the weapon to deal extra damage to the target. The extra damage equals your Proficiency Bonus.", "***Hew***. Immediately after you score a Critical Hit with a Melee weapon or reduce a creature to 0 Hit Points with one, you can make one attack with the same weapon as a Bonus Action.", ], scores: [1, 0, 0, 0, 0, 0], action: [["bonus action", "Hew (Great Weapon Master)"]], calcChanges: { atkCalc: [ function (fields, v, output) { if (v.isWeapon && /heavy/i.test(fields.Description) && /\bgwm\b|power.{0,3}attack|great.{0,3}weapon.{0,3}master/i.test(v.WeaponTextName)) { output.extraDmg += Number(How("Proficiency Bonus")); }; }, "If I include the words 'Power Attack', 'Great Weapon Master', or 'GWM' in the name of a weapon with the Heavy property, my Proficiency Bonus is added to its damage.", ], }, }; FeatsList["heavily armored"] = { name: "Heavily Armored", source: [["P24", 204]], type: "general", prerequisite: "Level 4+, Medium Armor Training", prereqeval: function (v) { return v.characterLevel >= 4 && v.mediumArmorProf; }, description: "I gain training with Heavy armor. [+1 Strength or Constitution]", descriptionFull: [ "You gain the following benefits.", "***Ability Score Increase***. Increase your Constitution or Strength score by 1, to a maximum of 20.", "***Armor Training***. You gain training with Heavy armor.", ], armorProfs: [false, false, true, false], choices: ["Constitution", "Strength"], choicesNotInMenu: true, "strength": { description: "I gain training with Heavy armor. [+1 Strength]", scores: [1, 0, 0, 0, 0, 0], }, "constitution": { description: "I gain training with Heavy armor. [+1 Constitution]", scores: [0, 0, 1, 0, 0, 0], }, }; FeatsList["heavy armor master"] = { name: "Heavy Armor Master", source: [["P24", 204]], type: "general", prerequisite: "Level 4+, Heavy Armor Training", prereqeval: function (v) { return v.characterLevel >= 4 && v.heavyArmorProf; }, description: "When I'm hit by an attack while I'm wearing Heavy armor, any Bludgeoning, Piercing, and Slashing damage dealt to me by that attack is reduced by an amount equal to my Proficiency Bonus. [+1 Strength or Constitution]", descriptionFull: [ "You gain the following benefits.", "***Ability Score Increase***. Increase your Constitution or Strength score by 1, to a maximum of 20.", "***Damage Reduction***. When you're hit by an attack while you're wearing Heavy armor, any Bludgeoning, Piercing, and Slashing damage dealt to you by that attack is reduced by an amount equal to your Proficiency Bonus.", ], choices: ["Constitution", "Strength"], choicesNotInMenu: true, "strength": { description: "When I'm hit by an attack while I'm wearing Heavy armor, any Bludgeoning, Piercing, and Slashing damage dealt to me by that attack is reduced by an amount equal to my Proficiency Bonus. [+1 Strength]", scores: [1, 0, 0, 0, 0, 0], }, "constitution": { description: "When I'm hit by an attack while I'm wearing Heavy armor, any Bludgeoning, Piercing, and Slashing damage dealt to me by that attack is reduced by an amount equal to my Proficiency Bonus. [+1 Constitution]", scores: [0, 0, 1, 0, 0, 0], }, }; FeatsList["inspiring leader"] = { name: "Inspiring Leader", source: [["P24", 204]], type: "general", prerequisite: "Level 4+, Wisdom or Charisma 13+", prereqeval: function (v) { return v.characterLevel >= 4 && (What("Wis") >= 13 || What("Cha") >= 13); }, description: "When I finish a Short or Long Rest, I can give an inspiring performance. Up to six allies (which can include myself) within 30 ft who witness this performance each gain Temporary Hit Points equal to my character level plus the modifier of the ability increased by this feat. [+1 Wisdom or Charisma]", descriptionFull: [ "You gain the following benefits.", "***Ability Score Increase***. Increase your Wisdom or Charisma score by 1, to a maximum of 20.", "***Bolstering Performance***. When you finish a Short or Long Rest, you can give an inspiring performance: a speech, song, or dance. When you do so, choose up to six allies (which can include yourself) within 30 feet of yourself who witness the performance. The chosen creatures each gain Temporary Hit Points equal to your character level plus the modifier of the ability you increased with this feat.", ], choices: ["Wisdom", "Charisma"], choicesNotInMenu: true, "wisdom": { calculate: 'event.value = "When I finish a Short or Long Rest, I can give an inspiring performance. I can choose up to six allies (or five and myself) within 30 ft of myself who witness this performance to each gain " + ( Number(What("Character Level")) + Number(What("Wis Mod")) ) + " Temporary Hit Points (= character level + Wisdom modifier). [+1 Wisdom]";', scores: [0, 0, 0, 0, 1, 0], }, "charisma": { calculate: 'event.value = "When I finish a Short or Long Rest, I can give an inspiring performance. I can choose up to six allies (or five and myself) within 30 ft of myself who witness this performance to each gain " + ( Number(What("Character Level")) + Number(What("Cha Mod")) ) + " Temporary Hit Points (= character level + Charisma modifier). [+1 Charisma]";', scores: [0, 0, 0, 0, 0, 1], }, }; FeatsList["keen mind"] = { name: "Keen Mind", source: [["P24", 205]], type: "general", prerequisite: "Level 4+, Intelligence 13+", prereqeval: function (v) { return v.characterLevel >= 4 && What("Int") >= 13; }, description: "##Quick Study##. I can take the Study action as a Bonus Action. ##Lore Knowledge##. I gain proficiency in one Intelligence skill of my choice. If I already have proficiency in it, I gain Expertise in it. [+1 Intelligence]", descriptionFull: [ "You gain the following benefits.", "***Ability Score Increase***. Increase your Intelligence score by 1, to a maximum of 20.", "***Lore Knowledge***. Choose one of the following skills: Arcana, History, Investigation, Nature, or Religion. If you lack proficiency in the chosen skill, you gain proficiency in it, and if you already have proficiency in it, you gain Expertise in it.", "***Quick Study***. You can take the Study action as a Bonus Action.", ], scores: [0, 0, 0, 1, 0, 0], action: [["bonus action", "Study"]], choices: ["Arcana", "History", "Investigation", "Nature", "Religion"], choicesNotInMenu: true, "arcana": { description: [ "##Quick Study##. I can take the Study action as a Bonus Action.", "##Lore Knowledge##. I gain proficiency in the Arcana skill. If I already have proficiency in it, I gain Expertise in it.", "[+1 Intelligence]", ].join("\n"), skills: [["Arcana", "increment"]], }, "history": { description: [ "##Quick Study##. I can take the Study action as a Bonus Action.", "##Lore Knowledge##. I gain proficiency in the History skill. If I already have proficiency in it, I gain Expertise in it.", "[+1 Intelligence]", ].join("\n"), skills: [["History", "increment"]], }, "investigation": { description: [ "##Quick Study##. I can take the Study action as a Bonus Action.", "##Lore Knowledge##. I gain proficiency in the Investigation skill. If I already have proficiency in it, I gain Expertise in it.", "[+1 Intelligence]", ].join("\n"), skills: [["Investigation", "increment"]], }, "nature": { description: [ "##Quick Study##. I can take the Study action as a Bonus Action.", "##Lore Knowledge##. I gain proficiency in the Nature skill. If I already have proficiency in it, I gain Expertise in it.", "[+1 Intelligence]", ].join("\n"), skills: [["Nature", "increment"]], }, "religion": { description: [ "##Quick Study##. I can take the Study action as a Bonus Action.", "##Lore Knowledge##. I gain proficiency in the Religion skill. If I already have proficiency in it, I gain Expertise in it.", "[+1 Intelligence]", ].join("\n"), skills: [["Religion", "increment"]], }, }; FeatsList["lightly armored"] = { name: "Lightly Armored", source: [["P24", 205]], type: "general", prerequisite: "Level 4+", prereqeval: function (v) { return v.characterLevel >= 4; }, description: "I gain training with Light armor and Shields. [+1 Strength or Dexterity]", descriptionFull: [ "You gain the following benefits.", "***Ability Score Increase***. Increase your Strength or Dexterity score by 1, to a maximum of 20.", "***Armor Training***. You gain training with Light armor and Shields.", ], armorProfs: [true, false, false, true], choices: ["Strength", "Dexterity"], choicesNotInMenu: true, "strength": { description: "I gain training with Light armor and Shields. [+1 Strength]", scores: [1, 0, 0, 0, 0, 0], }, "dexterity": { description: "I gain training with Light armor and Shields. [+1 Dexterity]", scores: [0, 1, 0, 0, 0, 0], }, }; FeatsList["mage slayer"] = { name: "Mage Slayer", source: [["P24", 205]], type: "general", prerequisite: "Level 4+", prereqeval: function (v) { return v.characterLevel >= 4; }, description: "##Concentration Breaker##. When I damage a creature that is Concentrating, they have Disadvantage on their save to maintain it." + (typePF ? " " : "\n") + "##Guarded Mind##. Once per Short or Long Rest when I fail an Intelligence, Wisdom, or Charisma saving throw, I can cause myself to succeed instead. [+1 Strength or Dexterity]", descriptionFull: [ "You gain the following benefits.", "***Ability Score Increase***. Increase your Strength or Dexterity score by 1, to a maximum of 20.", "***Concentration Breaker***. When you damage a creature that is Concentrating, it has Disadvantage on the saving throw it makes to maintain Concentration.", "***Guarded Mind***. If you fail an Intelligence, a Wisdom, or a Charisma saving throw, you can cause yourself to succeed instead. Once you use this benefit, you can't use it again until you finish a Short or Long Rest.", ], extraLimitedFeatures: [{ name: "Guarded Mind (Mage Slayer)", usages: 1, recovery: "short rest", }], choices: ["Strength", "Dexterity"], choicesNotInMenu: true, "strength": { description: "##Concentration Breaker##. When I damage a creature that is Concentrating, they have Disadvantage on their save to maintain it." + (typePF ? " " : "\n") + "##Guarded Mind##. Once per Short or Long Rest when I fail an Intelligence, Wisdom, or Charisma saving throw, I can cause myself to succeed instead. [+1 Strength]", scores: [1, 0, 0, 0, 0, 0], }, "dexterity": { description: "##Concentration Breaker##. When I damage a creature that is Concentrating, they have Disadvantage on their save to maintain it." + (typePF ? " " : "\n") + "##Guarded Mind##. Once per Short or Long Rest when I fail an Intelligence, Wisdom, or Charisma saving throw, I can cause myself to succeed instead. [+1 Dexterity]", scores: [0, 1, 0, 0, 0, 0], }, }; FeatsList["martial weapon training"] = { name: "Martial Weapon Training", source: [["P24", 205]], type: "general", prerequisite: "Level 4+", prereqeval: function (v) { return v.characterLevel >= 4; }, description: "I gain proficiency with Martial weapons. [+1 Strength or Dexterity]", descriptionFull: [ "You gain the following benefits.", "***Ability Score Increase***. Increase your Strength or Dexterity score by 1, to a maximum of 20.", "***Weapon Proficiency***. You gain proficiency with Martial weapons.", ], weaponProfs: [false, true], choices: ["Strength", "Dexterity"], choicesNotInMenu: true, "strength": { description: "I gain proficiency with Martial weapons. [+1 Strength]", scores: [1, 0, 0, 0, 0, 0], }, "dexterity": { description: "I gain proficiency with Martial weapons. [+1 Dexterity]", scores: [0, 1, 0, 0, 0, 0], }, }; FeatsList["medium armor master"] = { name: "Medium Armor Master", source: [["P24", 205]], type: "general", prerequisite: "Level 4+, Medium Armor Training", prereqeval: function (v) { return v.characterLevel >= 4 && v.mediumArmorProf; }, description: "While I'm wearing Medium armor, I can add 3, rather than 2 to my AC if I have a Dexterity score of 16 or higher. [+1 Strength or Dexterity]", descriptionFull: [ "You gain the following benefits.", "***Ability Score Increase***. Increase your Strength or Dexterity score by 1, to a maximum of 20.", "***Dexterous Wearer***. While you're wearing Medium armor, you can add 3, rather than 2 to your AC if you have a Dexterity score of 16 or higher.", ], eval: function () { Value("Medium Armor Max Mod", 3); ApplyArmor(What("AC Armor Description")); }, removeeval: function () { tDoc.resetForm(["Medium Armor Max Mod"]); ApplyArmor(What("AC Armor Description")); }, choices: ["Strength", "Dexterity"], choicesNotInMenu: true, "strength": { description: "While I'm wearing Medium armor, I can add 3, rather than 2 to my AC if I have a Dexterity score of 16 or higher. [+1 Strength]", scores: [1, 0, 0, 0, 0, 0], }, "dexterity": { description: "While I'm wearing Medium armor, I can add 3, rather than 2 to my AC if I have a Dexterity score of 16 or higher. [+1 Dexterity]", scores: [0, 1, 0, 0, 0, 0], }, }; FeatsList["moderately armored"] = { name: "Moderately Armored", source: [["P24", 205]], type: "general", prerequisite: "Level 4+, Light Armor Training", prereqeval: function (v) { return v.characterLevel >= 4 && v.lightArmorProf; }, description: "I gain training with Medium armor. [+1 Strength or Dexterity]", descriptionFull: [ "You gain the following benefits.", "***Ability Score Increase***. Increase your Strength or Dexterity score by 1, to a maximum of 20.", "***Armor Training***. You gain training with Medium armor.", ], armorProfs: [false, true, false, false], choices: ["Strength", "Dexterity"], choicesNotInMenu: true, "strength": { description: "I gain training with Medium armor. [+1 Strength]", scores: [1, 0, 0, 0, 0, 0], }, "dexterity": { description: "I gain training with Medium armor. [+1 Dexterity]", scores: [0, 1, 0, 0, 0, 0], }, }; FeatsList["mounted combatant"] = { name: "Mounted Combatant", source: [["P24", 205]], type: "general", prerequisite: "Level 4+", prereqeval: function (v) { return v.characterLevel >= 4; }, description: "While I'm mounted and not Incapacitated: ##\u2022 Mounted Strike##. I have Advantage on attacks against unmounted within 5 ft that are smaller than my mount. ##\u2022 Leap Aside##. If my mount is not Incapacitated and makes a Dex save to halve the damage, it takes none on a pass and half on a fail. ##\u2022 Veer##. When an attack hits my mount, I can have it hit me instead. [+1 Strength, Dexterity, or Wisdom]", descriptionFull: [ "You gain the following benefits.", "***Ability Score Increase***. Increase your Strength, Dexterity, or Wisdom score by 1, to a maximum of 20.", "***Mounted Strike***. While mounted, you have Advantage on attack rolls against any unmounted creature within 5 feet of your mount that is at least one size smaller than the mount.", "***Leap Aside***. If your mount is subjected to an effect that allows it to make a Dexterity saving throw to take only half damage, it instead takes no damage if it succeeds on the saving throw and only half damage if it fails. For your mount to gain this benefit, you must be riding it, and neither of you can have the Incapacitated condition.", "***Veer***. While mounted, you can force an attack that hits your mount to hit you instead if you don't have the Incapacitated condition.", ], choices: ["Strength", "Dexterity", "Wisdom"], choicesNotInMenu: true, "strength": { description: "While I'm mounted and not Incapacitated:"+ (typePF ? " \u2022 " : " ##\u2022 Mounted Strike##. ") + "I have Advantage on attacks against unmounted within 5 ft that are smaller than my mount."+ (typePF ? " \u2022 " : " ##\u2022 Leap Aside##. ") + "If my mount is not Incapacitated and makes a Dex save to halve the damage, it takes none on a pass and half on a fail."+ (typePF ? "\n\u2022 " : " ##\u2022 Veer##. ") + "When an attack hits my mount, I can have it hit me instead."+ (typePF ? "" : " [+1 Str]"), scores: [1, 0, 0, 0, 0, 0], }, "dexterity": { description: "While I'm mounted and not Incapacitated:"+ (typePF ? " \u2022 " : " ##\u2022 Mounted Strike##. ") + "I have Advantage on attacks against unmounted within 5 ft that are smaller than my mount."+ (typePF ? " \u2022 " : " ##\u2022 Leap Aside##. ") + "If my mount is not Incapacitated and makes a Dex save to halve the damage, it takes none on a pass and half on a fail."+ (typePF ? "\n\u2022 " : " ##\u2022 Veer##. ") + "When an attack hits my mount, I can have it hit me instead."+ (typePF ? "" : " [+1 Dex]"), scores: [0, 1, 0, 0, 0, 0], }, "wisdom": { description: "While I'm mounted and not Incapacitated:"+ (typePF ? " \u2022 " : " ##\u2022 Mounted Strike##. ") + "I have Advantage on attacks against unmounted within 5 ft that are smaller than my mount."+ (typePF ? " \u2022 " : " ##\u2022 Leap Aside##. ") + "If my mount is not Incapacitated and makes a Dex save to halve the damage, it takes none on a pass and half on a fail."+ (typePF ? "\n\u2022 " : " ##\u2022 Veer##. ") + "When an attack hits my mount, I can have it hit me instead."+ (typePF ? "" : " [+1 Wis]"), scores: [0, 0, 0, 0, 1, 0], }, }; FeatsList["observant"] = { name: "Observant", source: [["P24", 205]], type: "general", prerequisite: "Level 4+, Intelligence or Wisdom 13+", prereqeval: function (v) { return v.characterLevel >= 4 && (What("Int") >= 13 || What("Wis") >= 13); }, description: "##Quick Search##. I can take the Search action as a Bonus Action. ##Keen Observer##. I gain proficiency in Insight, Investigation, or Perception. If I already have proficiency in it, I gain Expertise in it. [+1 Intelligence or Wisdom]", descriptionFull: [ "You gain the following benefits.", "***Ability Score Increase***. Increase your Intelligence or Wisdom score by 1, to a maximum of 20.", "***Keen Observer***. Choose one of the following skills: Insight, Investigation, or Perception. If you lack proficiency with the chosen skill, you gain proficiency in it, and if you already have proficiency in it, you gain Expertise in it.", "***Quick Search***. You can take the Search action as a Bonus Action.", ], action: [["bonus action", "Search"]], choices: [ "Intelligence, Insight", "Intelligence, Investigation", "Intelligence, Perception", "Wisdom, Insight", "Wisdom, Investigation", "Wisdom, Perception", ], choicesNotInMenu: true, "intelligence, insight": { description: [ "##Quick Search##. I can take the Search action as a Bonus Action.", "##Keen Observer##. I gain proficiency in the Insight skill. If I already have proficiency in it, I gain Expertise in it.", "[+1 Intelligence]", ].join("\n"), scores: [0, 0, 0, 1, 0, 0], skills: [["Insight", "increment"]], }, "intelligence, investigation": { description: [ "##Quick Search##. I can take the Search action as a Bonus Action.", "##Keen Observer##. I gain proficiency in the Investigation skill. If I already have proficiency in it, I gain Expertise in it.", "[+1 Intelligence]", ].join("\n"), scores: [0, 0, 0, 1, 0, 0], skills: [["Investigation", "increment"]], }, "intelligence, perception": { description: [ "##Quick Search##. I can take the Search action as a Bonus Action.", "##Keen Observer##. I gain proficiency in the Perception skill. If I already have proficiency in it, I gain Expertise in it.", "[+1 Intelligence]", ].join("\n"), scores: [0, 0, 0, 1, 0, 0], skills: [["Perception", "increment"]], }, "wisdom, insight": { description: [ "##Quick Search##. I can take the Search action as a Bonus Action.", "##Keen Observer##. I gain proficiency in the Insight skill. If I already have proficiency in it, I gain Expertise in it.", "[+1 Wisdom]", ].join("\n"), scores: [0, 0, 0, 0, 1, 0], skills: [["Insight", "increment"]], }, "wisdom, investigation": { description: [ "##Quick Search##. I can take the Search action as a Bonus Action.", "##Keen Observer##. I gain proficiency in the Investigation skill. If I already have proficiency in it, I gain Expertise in it.", "[+1 Wisdom]", ].join("\n"), scores: [0, 0, 0, 0, 1, 0], skills: [["Investigation", "increment"]], }, "wisdom, perception": { description: [ "##Quick Search##. I can take the Search action as a Bonus Action.", "##Keen Observer##. I gain proficiency in the Perception skill. If I already have proficiency in it, I gain Expertise in it.", "[+1 Wisdom]", ].join("\n"), scores: [0, 0, 0, 0, 1, 0], skills: [["Perception", "increment"]], }, }; FeatsList["piercer"] = { name: "Piercer", source: [["P24", 206]], type: "general", prerequisite: "Level 4+", prereqeval: function (v) { return v.characterLevel >= 4; }, description: "##Puncture##. Once per turn when I hit a creature with an attack that deals Piercing damage, I can reroll one of its damage dice and must use this new roll. ##Enhanced Critical##. When I score a Critical Hit that deals Piercing damage to a creature, I add one extra damage die to the Piercing damage. [+1 Strength or Dexterity]", descriptionFull: [ "You gain the following benefits.", "***Ability Score Increase***. Increase your Strength or Dexterity score by 1, to a maximum of 20.", "***Puncture***. Once per turn, when you hit a creature with an attack that deals Piercing damage, you can reroll one of the attack's damage dice, and you must use the new roll.", "***Enhanced Critical***. When you score a Critical Hit that deals Piercing damage to a creature, you can roll one additional damage die when determining the extra Piercing damage the target takes.", ], calcChanges: { atkAdd: [ function (fields, v) { if (/pierc/i.test(fields.Damage_Type)) { var descrAdd = '1/turn reroll 1 dmg die'; var dmgDice = fields.Damage_Die.match(/(\b\w|\b\d+|\b)d\d+/ig); if (dmgDice && !v.isDC) { var dieSize = dmgDice.reduce(function (acc, val) { var size = Number(val.replace(/.+d/, '')); return size > acc ? size : acc; }, 0); descrAdd += '; Crit: +1' + dieSize + ' dmg'; }; fields.Description += (fields.Description ? '; ' : '') + descrAdd; }; }, 'Attacks that deal Piercing damage get the benefits from the Piercer feat added to their description: Once per turn reroll 1 damage die, and to roll an extra damage die on a Critical Hit.', ], }, choices: ["Strength", "Dexterity"], choicesNotInMenu: true, "strength": { description: "##Puncture##. Once per turn, when I hit a creature with an attack that deals Piercing damage, I can reroll one of its damage dice and must use this new roll."+ (typePF ? " " : "\n") + "##Enhanced Critical##. When I score a Critical Hit that deals Piercing damage to a creature, I add one extra damage die to the Piercing damage. [+1 Strength]", scores: [1, 0, 0, 0, 0, 0], }, "dexterity": { description: "##Puncture##. Once per turn, when I hit a creature with an attack that deals Piercing damage, I can reroll one of its damage dice and must use this new roll."+ (typePF ? " " : "\n") + "##Enhanced Critical##. When I score a Critical Hit that deals Piercing damage to a creature, I add one extra damage die to the Piercing damage. [+1 Dexterity]", scores: [0, 1, 0, 0, 0, 0], }, }; FeatsList["poisoner"] = { name: "Poisoner", source: [["P24", 206]], type: "general", prerequisite: "Level 4+", prereqeval: function (v) { return v.characterLevel >= 4; }, description: "As a Bonus Action, I can apply poison to weapon/ammo, lasting for 1 min or until used to damage. Creatures damaged this way must make a Con save (DC 8+Prof+mod) or take 2d8 Poison damage and be Poisoned until my next turn ends. Poison damage I deal ignores Resistance. I can create poisons. See Notes page. [+1 Dex or Int]", descriptionFull: [ "You gain the following benefits.", "***Ability Score Increase***. Increase your Dexterity or Intelligence score by 1, to a maximum of 20.", "***Potent Poison***. When you make a damage roll that deals Poison damage, it ignores Resistance to Poison damage.", "***Brew Poison***. You gain proficiency with the Poisoner's Kit. With 1 hour of work using such a kit and expending 50 GP worth of materials, you can create a number of poison doses equal to your Proficiency Bonus. As a Bonus Action, you can apply a poison dose to a weapon or piece of ammunition. Once applied, the poison retains its potency for 1 minute or until you deal damage with the poisoned item, whichever is shorter. When a creature takes damage from the poisoned item, that creature must succeed on a Constitution saving throw (8 plus the modifier of the ability increased by this feat and your Proficiency Bonus) or take 2d8 Poison damage and have the Poisoned condition until the end of your next turn.", ], toolProfs: [["Poisoner's Kit"]], action: [["bonus action", "Apply Poison"]], toNotesPage: [{ name: "Potent Poison", note: ["When I make a damage roll that deals Poison damage, it ignores Resistance to Poison damage."], }], choices: ["Dexterity", "Intelligence"], choicesNotInMenu: true, "dexterity": { calculate: 'var abi = "Dex";\n var dc = 8 + Number(How("Proficiency Bonus")) + Number(What(abi + " Mod"));\n event.value = "As a Bonus Action, I can apply poison to weapon/ammo, lasting for 1 min or until used to damage. Creatures damaged this way must make a DC " + dc + " Con save or take 2d8 Poison damage and be Poisoned until my next turn ends. Poison damage I deal ignores Resistance. I can create poisons. See Notes page. [+1 " + abi + "]";', scores: [0, 1, 0, 0, 0, 0], toNotesPage: [{ name: "Brew Poison", note: [ "I gain proficiency with the Poisoner's Kit. With 1 hour of work using such a kit and expending 50 GP worth of materials, I can create a number of poison doses equal to my Proficiency Bonus.", "As a Bonus Action, I can apply a poison dose to a weapon or piece of ammunition. Once applied, the poison retains its potency for 1 minute or until I deal damage with the poisoned item, whichever is shorter.", "When a creature takes damage from the poisoned item, that creature must succeed on a Constitution saving throw (8 + my Proficiency Bonus + my Dexterity modifier) or take 2d8 Poison damage and have the Poisoned condition until the end of my next turn.", ], amendTo: "Potent Poison", }], }, "intelligence": { calculate: 'var abi = "Int";\n var dc = 8 + Number(How("Proficiency Bonus")) + Number(What(abi + " Mod"));\n event.value = "As a Bonus Action, I can apply poison to weapon/ammo, lasting for 1 min or until used to damage. Creatures damaged this way must make a DC " + dc + " Con save or take 2d8 Poison damage and be Poisoned until my next turn ends. Poison damage I deal ignores Resistance. I can create poisons. See Notes page. [+1 " + abi + "]";', scores: [0, 0, 0, 1, 0, 0], toNotesPage: [{ name: "Brew Poison", note: [ "I gain proficiency with the Poisoner's Kit. With 1 hour of work using such a kit and expending 50 GP worth of materials, I can create a number of poison doses equal to my Proficiency Bonus.", "As a Bonus Action, I can apply a poison dose to a weapon or piece of ammunition. Once applied, the poison retains its potency for 1 minute or until I deal damage with the poisoned item, whichever is shorter.", "When a creature takes damage from the poisoned item, that creature must succeed on a Constitution saving throw (8 + my Proficiency Bonus + my Intelligence modifier) or take 2d8 Poison damage and have the Poisoned condition until the end of my next turn.", ], amendTo: "Potent Poison", }], }, }; FeatsList["polearm master"] = { name: "Polearm Master", source: [["P24", 206]], type: "general", prerequisite: "Level 4+, Strength or Dexterity 13+", prereqeval: function (v) { return v.characterLevel >= 4 && (What("Str") >= 13 || What("Dex") >= 13); }, description: "While wielding a Quarterstaff, Spear, or Heavy Reach weapon: ##Pole Strike##. As a Bonus Action directly after an Attack action with it, I can make a 1d4 Bludgeoning attack with its other end. ##Reactive Strike##. As a Reaction when a creature enters my reach with it, I can make one melee attack against them. [+1 Strength or Dexterity]", descriptionFull: [ "You gain the following benefits.", "***Ability Score Increase***. Increase your Dexterity or Strength score by 1, to a maximum of 20.", "***Pole Strike***. Immediately after you take the Attack action and attack with a Quarterstaff, a Spear, or a weapon that has the Heavy and Reach properties, you can use a Bonus Action to make a melee attack with the opposite end of the weapon. The weapon deals Bludgeoning damage, and the weapon's damage die for this attack is a d4.", "***Reactive Strike***. While you're holding a Quarterstaff, a Spear, or a weapon that has the Heavy and Reach properties, you can take a Reaction to make one melee attack against a creature that enters the reach you have with that weapon.", ], weaponOptions: [{ name: "Pole Strike", regExpSearch : /pole strike|polearm master|^(?=.*(polearm|(quarterstaff|\bstaff\b|\bbo\b)|(spear|qiang|\byaris?\b)|(glaive|guandao|bisento|naginata)|(halberd|\bji\b|kamayari)|(lance|umayari)|(pike|\bmaos?\b|nagaeyari)))(?=.*butt)(?=.*end).*$/i, source: [["P24", 206]], ability: 1, type: "polearm master", damage: [1, 4, "bludgeoning"], range: "Melee", description: "As Bonus Action after Attack action with Quarterstaff, Spear, or Heavy Reach weapon", abilitytodamage: true, selectNow: true, isAlwaysProf: true, }], action: [ ["bonus action", "Pole Strike (after Attack action)"], ["reaction", "Reactive Strike (if enters my reach)"], ], choices: ["Strength", "Dexterity"], choicesNotInMenu: true, "strength": { description: "While wielding a Quarterstaff, Spear, or Heavy Reach weapon: ##Pole Strike##. As a Bonus Action directly after an Attack action with it, I can make a 1d4 Bludgeoning attack with its other end. ##Reactive Strike##. As a Reaction when a creature enters my reach with it, I can make one melee attack against them." + (typePF ? "" : " [+1 Strength]"), scores: [1, 0, 0, 0, 0, 0], }, "dexterity": { description: "While wielding a Quarterstaff, Spear, or Heavy Reach weapon: ##Pole Strike##. As a Bonus Action directly after an Attack action with it, I can make a 1d4 Bludgeoning attack with its other end. ##Reactive Strike##. As a Reaction when a creature enters my reach with it, I can make one melee attack against them." + (typePF ? "" : " [+1 Dexterity]"), scores: [0, 1, 0, 0, 0, 0], }, }; FeatsList["resilient"] = { name: "Resilient", source: [["P24", 206]], type: "general", prerequisite: "Level 4+", prereqeval: function (v) { return v.characterLevel >= 4; }, description: "Select an ability score using the square button on this feat line. I gain proficiency with the saving throw of that ability score and a +1 added to it.", descriptionFull: [ "You gain the following benefits.", "***Ability Score Increase***. Increase one ability score of your choice by 1, to a maximum of 20.", "***Saving Throw Proficiency***. You gain saving throw proficiency with the chosen ability.", ], choices: ["Strength", "Dexterity", "Constitution", "Intelligence", "Wisdom", "Charisma"], choicesNotInMenu: true, "strength": { description: "I gain proficiency with Strength saving throws. [+1 Strength]", scores: [1, 0, 0, 0, 0, 0], saves: ["Str"], }, "dexterity": { description: "I gain proficiency with Dexterity saving throws. [+1 Dexterity]", scores: [0, 1, 0, 0, 0, 0], saves: ["Dex"], }, "constitution": { description: "I gain proficiency with Constitution saving throws. [+1 Constitution]", scores: [0, 0, 1, 0, 0, 0], saves: ["Con"], }, "intelligence": { description: "I gain proficiency with Intelligence saving throws. [+1 Intelligence]", scores: [0, 0, 0, 1, 0, 0], saves: ["Int"], }, "wisdom": { description: "I gain proficiency with Wisdom saving throws. [+1 Wisdom]", scores: [0, 0, 0, 0, 1, 0], saves: ["Wis"], }, "charisma": { description: "I gain proficiency with Charisma saving throws. [+1 Charisma]", scores: [0, 0, 0, 0, 0, 1], saves: ["Cha"], }, }; var PHB24_RitualCasterDescription = [ "##Ritual Spells##. I know a number of 1st-level Ritual spells equal to my Proficiency Bonus." + (typePF ? " " : "\n") + "I always have these spells prepared and can cast them as a Ritual or using spell slots.", "##Quick Ritual##. Once per Long Rest, I can cast a prepared Ritual spell using its regular casting time without " + (typePF ? "using" : "expending") + " a spell slot.", ]; if (typePF) PHB24_RitualCasterDescription.reverse(); FeatsList["ritual caster"] = { name: "Ritual Caster", source: [["P24", 206]], type: "general", prerequisite: "Level 4+; Intelligence, Wisdom, or Charisma 13+", prereqeval: function (v) { return v.characterLevel >= 4 && (What("Int") >= 13 || What("Wis") >= 13 || What("Cha") >= 13); }, description: PHB24_RitualCasterDescription.join("\n") + " [+1 Intelligence, Wisdom, or Charisma]", descriptionFull: [ "You gain the following benefits.", "***Ability Score Increase***. Increase your Intelligence, Wisdom, or Charisma score by 1, to a maximum of 20.", "***Ritual Spells***. Choose a number of level 1 spells equal to your Proficiency Bonus that have the Ritual tag. You always have those spells prepared, and you can cast them with any spell slots you have. The spells' spellcasting ability is the ability increased by this feat. Whenever your Proficiency Bonus increases thereafter, you can add an additional level 1 spell with the Ritual tag to the spells always prepared with this feature.", "***Quick Ritual***. With this benefit, you can cast a Ritual spell that you have prepared using its regular casting time rather than the extended time for a Ritual. Doing so doesn't require a spell slot. Once you cast the spell in this way, you can't use this benefit again until you finish a Long Rest.", ], spellcastingBonus: [{ name: "1st-level Ritual spell", ritual: true, level: [1, 1], times: ProficiencyBonusList, firstCol: "markedbox", }], extraLimitedFeatures: [{ name: "Quick Ritual", usages: 1, recovery: "long rest", }], choices: ["Intelligence", "Wisdom", "Charisma"], choicesNotInMenu: true, "intelligence": { description: PHB24_RitualCasterDescription.join("\n") + (typePF ? " [+1 Int]" : " [+1 Intelligence]"), scores: [0, 0, 0, 1, 0, 0], spellcastingAbility: 4, }, "wisdom": { description: PHB24_RitualCasterDescription.join("\n") + (typePF ? " [+1 Wis]" : " [+1 Wisdom]"), scores: [0, 0, 0, 0, 1, 0], spellcastingAbility: 5, }, "charisma": { description: PHB24_RitualCasterDescription.join("\n") + (typePF ? " [+1 Cha]" : " [+1 Charisma]"), scores: [0, 0, 0, 0, 0, 1], spellcastingAbility: 6, }, }; FeatsList["sentinel"] = { name: "Sentinel", source: [["P24", 207]], type: "general", prerequisite: "Level 4+, Strength or Dexterity 13+", prereqeval: function (v) { return v.characterLevel >= 4 && (What("Str") >= 13 || What("Dex") >= 13); }, description: [ "##Guardian##. When a creature within 5 ft of me takes the Disengage action or hits a target other than me with an attack, I can make an Opportunity Attack against them.", "##Halt##. When I make an Opportunity Attack against a creature, its Speed becomes 0 for the rest of the current turn. [+1 Strength or Dexterity]", ].join("\n"), descriptionFull: [ "You gain the following benefits.", "***Ability Score Increase***. Increase your Strength or Dexterity score by 1, to a maximum of 20.", "***Guardian***. Immediately after a creature within 5 feet of you takes the Disengage action or hits a target other than you with an attack, you can make an Opportunity Attack against that creature.", "***Halt***. When you hit a creature with an Opportunity Attack, the creature's Speed becomes 0 for the rest of the current turn.", ], action: [["reaction", "Guardian (ally hit/enemy Disengages)"]], choices: ["Strength", "Dexterity"], choicesNotInMenu: true, "strength": { description: [ "##Guardian##. When a creature within 5 ft of me takes the Disengage action or hits a target other than me with an attack, I can make an Opportunity Attack against them.", "##Halt##. When I make an Opportunity Attack against a creature, its Speed becomes 0 for the rest of the current turn. [+1 Strength]", ].join("\n"), scores: [1, 0, 0, 0, 0, 0], }, "dexterity": { description: [ "##Guardian##. When a creature within 5 ft of me takes the Disengage action or hits a target other than me with an attack, I can make an Opportunity Attack against them.", "##Halt##. When I make an Opportunity Attack against a creature, its Speed becomes 0 for the rest of the current turn. [+1 Dexterity]", ].join("\n"), scores: [0, 1, 0, 0, 0, 0], }, }; FeatsList["shadow-touched"] = { name: "Shadow-Touched", source: [["P24", 207]], type: "general", prerequisite: "Level 4+", prereqeval: function (v) { return v.characterLevel >= 4; }, description: "I learn *Invisibility* and one 1st-level Illusion or Necromancy spell. I always have these spells prepared. I can cast each once per Long Rest at their lowest level without expending a spell slot and by expending a spell slot as normal. The spells' spellcasting ability is the ability increased by this feat. [+1 Int, Wis, or Cha]", descriptionFull: [ "Your exposure to the Shadowfell's magic grants you the following benefits.", "***Ability Score Increase***. Increase your Intelligence, Wisdom, or Charisma score by 1, to a maximum of 20.", "***Shadow Magic***. Choose one level 1 spell from the Illusion or Necromancy school of magic. You always have that spell and the *Invisibility* spell prepared. You can cast each of these spells without expending a spell slot. Once you cast either spell in this way, you can't cast that spell in this way again until you finish a Long Rest. You can also cast these spells using spell slots you have of the appropriate level. The spells' spellcasting ability is the ability increased by this feat.", ], spellFirstColTitle: "PR", spellcastingBonus: [{ name: "Invisibility", spells: ["invisibility"], selection: ["invisibility"], firstCol: "oncelr+markedbox", }, { name: "1st-level Illus/Necro spell", school: ["Illus", "Necro"], level: [1, 1], firstCol: "oncelr+markedbox", }], choices: ["Intelligence", "Wisdom", "Charisma"], choicesNotInMenu: true, "intelligence": { description: "I learn Invisibility and one 1st-level Illusion or Necromancy spell. I always have these spell prepared. I can cast each once per Long Rest at their lowest level without expending a spell slot and can cast them by expending a spell slot as normal. Intelligence is my spellcasting ability for these spells. [+1 Intelligence]", spellcastingAbility: 4, scores: [0, 0, 0, 1, 0, 0], }, "wisdom": { description: "I learn Invisibility and one 1st-level Illusion or Necromancy spell. I always have these spell prepared. I can cast each once per Long Rest at their lowest level without expending a spell slot and can cast them by expending a spell slot as normal. Wisdom is my spellcasting ability for these spells. [+1 Wisdom]", spellcastingAbility: 5, scores: [0, 0, 0, 0, 1, 0], }, "charisma": { description: "I learn Invisibility and one 1st-level Illusion or Necromancy spell. I always have these spell prepared. I can cast each once per Long Rest at their lowest level without expending a spell slot and can cast them by expending a spell slot as normal. Charisma is my spellcasting ability for these spells. [+1 Charisma]", spellcastingAbility: 6, scores: [0, 0, 0, 0, 0, 1], }, }; FeatsList["sharpshooter"] = { name: "Sharpshooter", source: [["P24", 207]], type: "general", prerequisite: "Level 4+, Dexterity 13+", prereqeval: function (v) { return v.characterLevel >= 4 && What("Dex") >= 13; }, description: [ "My attack rolls with Ranged weapons:", "\n##Bypass Cover##. Ignore Half Cover and Three-Quarters Cover.", "\n##Firing in Melee##. Suffer no Disadvantage when I'm within 5 ft of an enemy.", "\n##Long Shots##. Suffer no Disadvantage when used at long range.", " [+1 Dexterity]", ].map(function (n, idx, arr) { // Swap 'Firing in Melee' with 'Long Shots' lines on the Printer Friendly sheet return typePF && idx === 2 ? arr[3] : typePF && idx === 3 ? arr[2] : n; }).join(""), descriptionFull: [ "You gain the following benefits.", "***Ability Score Increase***. Increase your Dexterity score by 1, to a maximum of 20.", "***Bypass Cover***. Your ranged attacks with weapons ignore Half Cover and Three-Quarters Cover.", "***Firing in Melee***. Being within 5 feet of an enemy doesn't impose Disadvantage on your attack rolls with Ranged weapons.", "***Long Shots***. Attacking at long range doesn't impose Disadvantage on your attack rolls with Ranged weapons.", ], scores: [0, 1, 0, 0, 0, 0], calcChanges: { atkAdd: [ function (fields, v) { if (v.isRangedWeapon || v.isThrownWeapon) { fields.Description += (fields.Description ? "; " : "") + "No Disadv. at long range; Ignores \u00BD \x26 \u00BE cover"; }; }, "My attack rolls with Ranged weapons suffer no Disadvantage from being used at long range nor from me being within 5 ft of an enemy. They also ignore Half Cover and Three-Quarters Cover.", ], }, }; FeatsList["shield master"] = { name: "Shield Master", source: [["P24", 207]], type: "general", prerequisite: "Level 4+, Shield Training", prereqeval: function (v) { return v.characterLevel >= 4 && v.shieldProf; }, description: "##Shield Bash##. Once per turn after I hit a creature in 5 ft during the Attack action, I can have it make a Str save (DC 8 + Str mod + Prof B.) or be pushed 5 ft away or knocked Prone. ##Interpose Shield##. As a Reaction when I succeed on a Dex save to halve damage, I can interpose my shield to avoid all the damage. [+1 Strength]", calculate: 'var dc = 8 + Number(How("Proficiency Bonus")) + Number(What("Str Mod"));\n var txt = ["##Shield Bash##. Once per turn after I hit a creature in 5 ft during the Attack action, I can have it make a DC " + dc + " (8+Str+Prof) Str save or be pushed 5 ft away or knocked Prone.", "##Interpose Shield##. As a Reaction when I succeed on a Dex save to halve damage, I can interpose my shield to avoid all the damage."];\n if (typePF) { txt.reverse(); };\n event.value = txt.join("\\n") + " [+1 Strength]";', descriptionFull: [ "You gain the following benefits.", "***Ability Score Increase***. Increase your Strength score by 1, to a maximum of 20.", "***Shield Bash***. If you attack a creature within 5 feet of you as part of the Attack action and hit with a Melee weapon, you can immediately bash the target with your Shield if it's equipped, forcing the target to make a Strength saving throw (8 plus your Strength modifier and Proficiency Bonus). On a failed save, you either push the target 5 feet from you or cause it to have the Prone condition (your choice). You can use this benefit only once on each of your turns.", "***Interpose Shield***. If you're subjected to an effect that allows you to make a Dexterity saving throw to take only half damage, you can take a Reaction to take no damage if you succeed on the saving throw and are holding a Shield.", ], scores: [1, 0, 0, 0, 0, 0], weaponOptions: [{ name: "Shield Bash", regExpSearch: /^(?=.*shield)(?=.*bash).*$/i, source: [["P24", 207]], ability: 1, type: "shield master", damage: ["Str save", "", "Shove/Prone"], range: "Melee", description: "1/turn after Melee weapon hit during Attack action", abilitytodamage: false, dc: true, selectNow: true, isNotWeapon: true, isAlwaysProf: true, }], action: [["reaction", "Interpose Shield"]], }; FeatsList["skill expert"] = { name: "Skill Expert", source: [["P24", 207]], type: "general", prerequisite: "Level 4+", prereqeval: function (v) { return v.characterLevel >= 4; }, description: [ "I gain proficiency in one skill of my choice.", "I also gain Expertise in one skill of my choice in which I have proficiency (can be the same skill).", "Neither are automated. [+1 to one ability score of my choice]", ].join("\n"), descriptionFull: [ "You gain the following benefits.", "***Ability Score Increase***. Increase one ability score of your choice by 1, to a maximum of 20.", "***Skill Proficiency***. You gain proficiency in one skill of your choice.", "***Expertise***. Choose one skill in which you have proficiency but lack Expertise. You gain Expertise with that skill.", ], skillstxt: "Proficiency in one skill, and Expertise with one skill I'm proficient with.", choices: ["Strength", "Dexterity", "Constitution", "Intelligence", "Wisdom", "Charisma"], choicesNotInMenu: true, "strength": { description: [ "I gain proficiency in one skill of my choice.", "I also gain Expertise in one skill of my choice in which I have proficiency (can be the same skill).", "Neither are automated. [+1 Strength]", ].join("\n"), scores: [1, 0, 0, 0, 0, 0], }, "dexterity": { description: [ "I gain proficiency in one skill of my choice.", "I also gain Expertise in one skill of my choice in which I have proficiency (can be the same skill).", "Neither are automated. [+1 Dexterity]", ].join("\n"), scores: [0, 1, 0, 0, 0, 0], }, "constitution": { description: [ "I gain proficiency in one skill of my choice.", "I also gain Expertise in one skill of my choice in which I have proficiency (can be the same skill).", "Neither are automated. [+1 Constitution]", ].join("\n"), scores: [0, 0, 1, 0, 0, 0], }, "intelligence": { description: [ "I gain proficiency in one skill of my choice.", "I also gain Expertise in one skill of my choice in which I have proficiency (can be the same skill).", "Neither are automated. [+1 Intelligence]", ].join("\n"), scores: [0, 0, 0, 1, 0, 0], }, "wisdom": { description: [ "I gain proficiency in one skill of my choice.", "I also gain Expertise in one skill of my choice in which I have proficiency (can be the same skill).", "Neither are automated. [+1 Wisdom]", ].join("\n"), scores: [0, 0, 0, 0, 1, 0], }, "charisma": { description: [ "I gain proficiency in one skill of my choice.", "I also gain Expertise in one skill of my choice in which I have proficiency (can be the same skill).", "Neither are automated. [+1 Charisma]", ].join("\n"), scores: [0, 0, 0, 0, 0, 1], }, }; FeatsList["skulker"] = { name: "Skulker", source: [["P24", 208]], type: "general", prerequisite: "Level 4+, Dexterity 13+", prereqeval: function (v) { return v.characterLevel >= 4 && What("Dex") >= 13; }, description: [ "##Fog of War##. I have Advantage on Dexterity (Stealth) checks when using the Hide action during combat.", "##Sniper##. If I miss an attack while hidden, making the attack doesn't reveal my location.", "##Blindsight##. I have Blindsight with a range of 10 ft. [+1 Dexterity]", ].join("\n"), descriptionFull: [ "You gain the following benefits.", "***Ability Score Increase***. Increase your Dexterity score by 1, to a maximum of 20.", "***Blindsight***. You have Blindsight with a range of 10 feet.", "***Fog of War***. You exploit the distractions of battle, gaining Advantage on any Dexterity (Stealth) check you make as part of the Hide action during combat.", "***Sniper***. If you make an attack roll while hidden and the roll misses, making the attack roll doesn't reveal your location.", ], scores: [0, 1, 0, 0, 0, 0], vision: [["Blindsight", 10]], }; FeatsList["slasher"] = { name: "Slasher", source: [["P24", 208]], type: "general", prerequisite: "Level 4+", prereqeval: function (v) { return v.characterLevel >= 4; }, description: "##Hamstring##. Once per turn when I hit a creature with an attack that deals Slashing damage, I can reduce its Speed by 10 ft until the start of my next turn. ##Enhanced Critical##. When I score a Critical Hit that deals Slashing damage to a creature, it gets Disadvantage on attack rolls until the start of my next turn. [+1 Strength or Dexterity]", descriptionFull: [ "You gain the following benefits.", "***Ability Score Increase***. Increase your Strength or Dexterity score by 1, to a maximum of 20.", "***Hamstring***. Once per turn when you hit a creature with an attack that deals Slashing damage, you can reduce the Speed of that creature by 10 feet until the start of your next turn.", "***Enhanced Critical***. When you score a Critical Hit that deals Slashing damage to a creature, it has Disadvantage on attack rolls until the start of your next turn.", ], calcChanges: { atkAdd: [ function (fields, v) { if (/slash/i.test(fields.Damage_Type)) { fields.Description += (fields.Description ? '; ' : '') + '1/turn target -10 ft Spd till my next SoT, Crit: also Disadv. on atks'; }; }, 'Attacks that deal Slashing damage get the benefits from the Slasher feat added to their description: Once per turn -10 ft Speed, and on a Critical Hit target gets Disadvantage on attacks. Each effect lasts until the start of my next turn.', ], }, choices: ["Strength", "Dexterity"], choicesNotInMenu: true, "strength": { description: "##Hamstring##. Once per turn when I hit a creature with an attack that deals Slashing damage, I can reduce its Speed by 10 ft" + (typePF ? "." : " until the start of my next turn.")+ "\n##Enhanced Critical##. When I score a Critical Hit that deals Slashing damage to a creature, it gets Disadvantage on attack rolls" + (typePF ? "." : " until the start of my next turn.")+ (typePF ? "\nEach effect lasts until the start of my next turn." : "")+ " [+1 Strength]", scores: [1, 0, 0, 0, 0, 0], }, "dexterity": { description: "##Hamstring##. Once per turn when I hit a creature with an attack that deals Slashing damage, I can reduce its Speed by 10 ft" + (typePF ? "." : " until the start of my next turn.")+ "\n##Enhanced Critical##. When I score a Critical Hit that deals Slashing damage to a creature, it gets Disadvantage on attack rolls" + (typePF ? "." : " until the start of my next turn.")+ (typePF ? "\nEach effect lasts until the start of my next turn." : "")+ " [+1 Dexterity]", scores: [0, 1, 0, 0, 0, 0], }, }; FeatsList["speedy"] = { name: "Speedy", source: [["P24", 208]], type: "general", prerequisite: "Level 4+, Dexterity or Constitution 13+", prereqeval: function (v) { return v.characterLevel >= 4 && (What("Dex") >= 13 || What("Con") >= 13); }, description: [ "##Agile Movement##. Opportunity Attacks have Disadvantage against me.", "##Dash over Difficult Terrain##. When I take the Dash action on my turn, Difficult Terrain doesn't cost me extra movement that turn.", "##Speed Increase##. I have +10 ft Speed. [+1 Dexterity or Constitution]", ].join("\n"), descriptionFull: [ "You gain the following benefits.", "***Ability Score Increase***. Increase your Dexterity or Constitution score by 1, to a maximum of 20.", "***Speed Increase***. Your Speed increases by 10 feet.", "***Dash over Difficult Terrain***. When you take the Dash action on your turn, Difficult Terrain doesn't cost you extra movement for the rest of that turn.", "***Agile Movement***. Opportunity Attacks have Disadvantage against you.", ], speed: { allModes: { bonus: "+10" } }, choices: ["Dexterity", "Constitution"], choicesNotInMenu: true, "dexterity": { description: [ "##Agile Movement##. Opportunity Attacks have Disadvantage against me.", "##Dash over Difficult Terrain##. When I take the Dash action on my turn, Difficult Terrain doesn't cost me extra movement that turn.", "##Speed Increase##. I have +10 ft Speed. [+1 Dexterity]", ].join("\n"), scores: [0, 1, 0, 0, 0, 0], }, "constitution": { description: [ "##Agile Movement##. Opportunity Attacks have Disadvantage against me.", "##Dash over Difficult Terrain##. When I take the Dash action on my turn, Difficult Terrain doesn't cost me extra movement that turn.", "##Speed Increase##. I have +10 ft Speed. [+1 Constitution]", ].join("\n"), scores: [0, 0, 1, 0, 0, 0], }, }; var PHB24_SpellSniperDescription = [ "My attack rolls with spells:", "##Bypass Cover##. Ignore Half Cover and Three-Quarters Cover.", "##Casting in Melee##. Suffer no Disadvantage when I'm within 5 ft of an enemy.", "##Increased Range##. Gain +60 ft range if the spell's range is " + (typePF ? "\u226510 ft." : "10 ft or more."), ].map(function (n, idx, arr) { // Swap 'Increased Range' with 'Casting in Melee' lines on the Printer Friendly sheet return typePF && idx === 2 ? arr[3] : typePF && idx === 3 ? arr[2] : n; }).join("\n"); FeatsList["spell sniper"] = { name: "Spell Sniper", source: [["P24", 208]], type: "general", prerequisite: "Level 4+, Spellcasting or Pact Magic Feature", prereqeval: function (v) { return v.characterLevel >= 4 && v.isSpellcastingClass; }, description: PHB24_SpellSniperDescription + " [+1 Intelligence, Wisdom, or Charisma]", descriptionFull: [ "You gain the following benefits.", "***Ability Score Increase***. Increase your Intelligence, Wisdom, or Charisma score by 1, to a maximum of 20.", "***Bypass Cover***. Your attack rolls for spells ignore Half Cover and Three-Quarters Cover.", "***Casting in Melee***. Being within 5 feet of an enemy doesn't impose Disadvantage on your attack rolls with spells.", "***Increased Range***. When you cast a spell that has a range of at least 10 feet and requires you to make an attack roll, you can increase the spell's range by 60 feet.", ], calcChanges: { atkAdd: [ function (fields, v) { if (!v.isDC && v.isSpell) { var name = "spell sniper", addition = "+60"; var useRange = v.rangeObject ? v.rangeObject : fields.Range; var stopFunction = function (sRange, nRangeFT) { return nRangeFT < 10; }; v.rangeObject = amendRangeObject(useRange, name, addition, stopFunction); // Test if something changed if (v.rangeObject && v.rangeObject.result !== fields.Range) { fields.Range = v.rangeObject.result; }; }; }, "My spells and cantrips that require an attack roll and have a range of 10 ft or more gain +60 ft range.", 700, ], spellAdd: [ function (spellKey, spellObj, spName) { if ( !spellObj.psionic && /spell at(tac)?k/i.test(spellObj.description + spellObj.descriptionFull) && /^(?!.*(S:|rad|touch|self|cone|cube)).*\d+([.,]\d+)?.?(f.{0,2}t|m).*$/i.test(spellObj.range) ) { var name = "spell sniper", addition = "+60"; var useRange = spellObj.rangeObject ? spellObj.rangeObject : spellObj.range; var stopFunction = function (sRange, nRangeFT) { return nRangeFT < 10; }; spellObj.rangeObject = amendRangeObject(useRange, name, addition, stopFunction); // Test if something changed if (spellObj.rangeObject && spellObj.rangeObject.result !== spellObj.range) { spellObj.range = spellObj.rangeObject.result; return true; }; }; }, "My spells and cantrips that require an attack roll and have a range of 10 ft or more gain +60 ft range.", 700, ], }, choices: ["Intelligence", "Wisdom", "Charisma"], choicesNotInMenu: true, "intelligence": { description: PHB24_SpellSniperDescription + " [+1 Intelligence]", scores: [0, 0, 0, 1, 0, 0], }, "wisdom": { description: PHB24_SpellSniperDescription + " [+1 Wisdom]", scores: [0, 0, 0, 0, 1, 0], }, "charisma": { description: PHB24_SpellSniperDescription + " [+1 Charisma]", scores: [0, 0, 0, 0, 0, 1], }, }; FeatsList["telekinetic"] = { name: "Telekinetic", source: [["P24", 208]], type: "general", prerequisite: "Level 4+", prereqeval: function (v) { return v.characterLevel >= 4; }, description: "I know the *Mage Hand* cantrip, can cast it without components, can make it invisible, and with +30 ft range. As a Bonus Action, I can have one creature I can see within 30 ft make a Strength save (vs. this feat's spell save DC) or move it 5 ft from or towards me. My spellcasting ability is the one increased by this feat. [+1 Int, Wis, or Cha]", descriptionFull: [ "You gain the following benefits.", "***Ability Score Increase***. Increase your Intelligence, Wisdom, or Charisma score by 1, to a maximum of 20.", "***Minor Telekinesis***. You learn the *Mage Hand* spell. You can cast it without Verbal or Somatic components, you can make the spectral hand Invisible, and its range and the distance it can be away from you both increase by 30 feet when you cast it. The spell's spellcasting ability is the ability increased by this feat.", "***Telekinetic Shove***. As a Bonus Action, you can telekinetically shove one creature you can see within 30 feet of yourself. When you do so, the target must succeed on a Strength saving throw (8 plus the ability modifier of the score increased by this feat and your Proficiency Bonus) or be moved 5 feet toward or away from you.", ], action: [["bonus action", "Telekinetic Shove"]], spellcastingBonus: [{ name: "Mage Hand", spells: ["mage hand"], selection: ["mage hand"], }], spellChanges: { "mage hand": { components: "", range: "60 ft", description: "(in)visible hand does simple task, carry \u226410lb; Act: control again \x26 move 30ft; ends if recast/out range", changes: "I can cast Mage Hand without Verbal or Somatic components, can make the spectral hand Invisible, and can the range and distance it can be away from me increases by +30 ft.", }, }, choices: ["Intelligence", "Wisdom", "Charisma"], choicesNotInMenu: true, "intelligence": { description: (typePF ? "" : "##Minor Telekinesis##. ") + "I know the Mage Hand cantrip, can cast it without components, can make it invisible, and with +30 ft range. Intelligence is my spellcasting ability for it. "+ (typePF ? "" : "##Telekinetic Shove##. ") + "As a Bonus Action, I can have one creature I can see within 30 ft make a Strength save (vs. this feat's spell save DC) or move it 5 ft from or towards me. [+1 Int]", spellcastingAbility: 4, scores: [0, 0, 0, 1, 0, 0], }, "wisdom": { description: (typePF ? "" : "##Minor Telekinesis##. ") + "I know the Mage Hand cantrip, can cast it without components, can make it invisible, and with +30 ft range. Wisdom is my spellcasting ability for it. "+ (typePF ? "" : "##Telekinetic Shove##. ") + "As a Bonus Action, I can have one creature I can see within 30 ft make a Strength save (vs. this feat's spell save DC) or move it 5 ft from or towards me. [+1 Wis]", spellcastingAbility: 5, scores: [0, 0, 0, 0, 1, 0], }, "charisma": { description: (typePF ? "" : "##Minor Telekinesis##. ") + "I know the Mage Hand cantrip, can cast it without components, can make it invisible, and with +30 ft range. Charisma is my spellcasting ability for it. "+ (typePF ? "" : "##Telekinetic Shove##. ") + "As a Bonus Action, I can have one creature I can see within 30 ft make a Strength save (vs. this feat's spell save DC) or move it 5 ft from or towards me. [+1 Cha]", spellcastingAbility: 6, scores: [0, 0, 0, 0, 0, 1], }, }; FeatsList["telepathic"] = { name: "Telepathic", source: [["P24", 208]], type: "general", prerequisite: "Level 4+", prereqeval: function (v) { return v.characterLevel >= 4; }, description: "##Telepathic Utterance##. I can telepathically speak to a creature I can see within 60 ft in a language I know, but they can't respond telepathically. I always have ##Detect Thoughts## prepared. I can cast it once per Long Rest without a spell slot or components and by expending a spell slot as normal. My spellcasting ability is the one increased by this feat. [+1 Int, Wis, or Cha]", descriptionFull: [ "You gain the following benefits.", "***Ability Score Increase***. Increase your Intelligence, Wisdom, or Charisma score by 1, to a maximum of 20.", "***Telepathic Utterance***. You can speak telepathically to any creature you can see within 60 feet of yourself. Your telepathic utterances are in a language you know, and the creature understands you only if it knows that language. Your communication doesn't give the creature the ability to respond to you telepathically.", "***Detect Thoughts***. You always have the *Detect Thoughts* spell prepared. You can cast it without a spell slot or spell components, and you must finish a Long Rest before you can cast it in this way again. You can also cast it using spell slots you have of the appropriate level. Your spellcasting ability for the spell is the ability increased by this feat.", ], spellcastingBonus: [{ name: "Detect Thoughts", spells: ["detect thoughts"], selection: ["detect thoughts"], firstCol: "oncelr+markedbox", }], spellChanges: { "detect thoughts": { components: "(V,S,M)", changes: "My Telepathic feat allows me to cast Detect Thoughts once per Long Rest without requiring a spell slot or components, or by using a spell slot to cast it with components as normal.", }, }, choices: ["Intelligence", "Wisdom", "Charisma"], choicesNotInMenu: true, "intelligence": { description: (typePF ? "" : "##Telepathic Utterance##. ") + "I can telepathically speak to a creature I can see within 60 ft in a language I know, but they can't respond telepathically. I always have ##Detect Thoughts## prepared. I can cast it once per Long Rest without a spell slot or components and by expending a spell slot as normal. Intelligence is my spellcasting ability for it. [+1 Int]", spellcastingAbility: 4, scores: [0, 0, 0, 1, 0, 0], }, "wisdom": { description: (typePF ? "" : "##Telepathic Utterance##. ") + "I can telepathically speak to a creature I can see within 60 ft in a language I know, but they can't respond telepathically. I always have ##Detect Thoughts## prepared. I can cast it once per Long Rest without a spell slot or components and by expending a spell slot as normal. Wisdom is my spellcasting ability for it. [+1 Wis]", spellcastingAbility: 5, scores: [0, 0, 0, 0, 1, 0], }, "charisma": { description: (typePF ? "" : "##Telepathic Utterance##. ") + "I can telepathically speak to a creature I can see within 60 ft in a language I know, but they can't respond telepathically. I always have ##Detect Thoughts## prepared. I can cast it once per Long Rest without a spell slot or components and by expending a spell slot as normal. Charisma is my spellcasting ability for it. [+1 Cha]", spellcastingAbility: 6, scores: [0, 0, 0, 0, 0, 1], }, }; FeatsList["war caster"] = { name: "War Caster", source: [["P24", 209]], type: "general", prerequisite: "Level 4+, Spellcasting or Pact Magic Feature", prereqeval: function (v) { return v.characterLevel >= 4 && v.isSpellcastingClass; }, description: "I have Advantage on Con saves to maintain ##Concentration##. I can do ##Somatic components## even when I have weapons or a Shield in both hands. ##Reactive Spell##. instead of an Opportunity Attack when a creature leaves my reach, I can cast a spell on it, a spell with a one action casting time that targets only that creature.", descriptionFull: [ "You gain the following benefits.", "***Ability Score Increase***. Increase your Intelligence, Wisdom, or Charisma score by 1, to a maximum of 20.", "***Concentration***. You have Advantage on Constitution saving throws that you make to maintain Concentration.", "***Reactive Spell***. When a creature provokes an Opportunity Attack from you by leaving your reach, you can take a Reaction to cast a spell at the creature rather than making an Opportunity Attack. The spell must have a casting time of one action and must target only that creature.", "***Somatic Components***. You can perform the Somatic components of spells even when you have weapons or a Shield in one or both hands.", ], action: [["reaction", "Reactive Spell"]], savetxt: { text: "Adv. on Con (Concentration) saves" }, choices: ["Intelligence", "Wisdom", "Charisma"], choicesNotInMenu: true, "intelligence": { description: "I have Advantage on Con saves to maintain ##Concentration##. I can " + (typePF ? "do" : "perform") + " ##Somatic components## " + (typePF ? "" : "of spells ") + "even when I have weapons or a Shield in both hands. ##Reactive Spell##. instead of an Opportunity Attack when a creature leaves my reach, I can cast a spell on it, a spell with a one action casting time that targets only that creature." + (typePF ? "" : " [+1 Intelligence]"), scores: [0, 0, 0, 1, 0, 0], }, "wisdom": { description: "I have Advantage on Con saves to maintain ##Concentration##. I can " + (typePF ? "do" : "perform") + " ##Somatic components## " + (typePF ? "" : "of spells ") + "even when I have weapons or a Shield in both hands. ##Reactive Spell##. instead of an Opportunity Attack when a creature leaves my reach, I can cast a spell on it, a spell with a one action casting time that targets only that creature." + (typePF ? "" : " [+1 Wisdom]"), scores: [0, 0, 0, 0, 1, 0], }, "charisma": { description: "I have Advantage on Con saves to maintain ##Concentration##. I can " + (typePF ? "do" : "perform") + " ##Somatic components## " + (typePF ? "" : "of spells ") + "even when I have weapons or a Shield in both hands. ##Reactive Spell##. instead of an Opportunity Attack when a creature leaves my reach, I can cast a spell on it, a spell with a one action casting time that targets only that creature." + (typePF ? "" : " [+1 Charisma]"), scores: [0, 0, 0, 0, 0, 1], }, }; FeatsList["weapon master"] = { name: "Weapon Master", source: [["P24", 209]], type: "general", prerequisite: "Level 4+", prereqeval: function (v) { return v.characterLevel >= 4; }, description: 'I gain mastery with one Simple or Martial weapon. Whenever I finish a Long Rest, I can change my choice. Use 2nd page "Choose Feature" button to select this. [+1 Strength or Dexterity]', descriptionFull: [ "You gain the following benefits.", "***Ability Score Increase***. Increase your Strength or Dexterity score by 1, to a maximum of 20.", "***Mastery Property***. Your training with weapons allows you to use the mastery property of one kind of Simple or Martial weapon of your choice, provided you have proficiency with it. Whenever you finish a Long Rest, you can change the kind of weapon to another eligible kind.", ], bonusClassExtrachoices: [{ "class": "fighter", "feature": "weapon mastery", "bonus": 1, }], choices: ["Strength", "Dexterity"], choicesNotInMenu: true, "strength": { description: 'I gain mastery with one Simple or Martial weapon. Whenever I finish a Long Rest, I can change my choice. Use 2nd page "Choose Feature" button to select this. [+1 Strength]', scores: [1, 0, 0, 0, 0, 0], }, "dexterity": { description: 'I gain mastery with one Simple or Martial weapon. Whenever I finish a Long Rest, I can change my choice. Use 2nd page "Choose Feature" button to select this. [+1 Dexterity]', scores: [0, 1, 0, 0, 0, 0], }, }; // Fighting Style feats FeatsList["blind fighting"] = { name: "Blind Fighting", source: [["P24", 209]], type: "fighting style", description: "I have Blindsight with a range of 10 ft.", descriptionFull: [ "You have Blindsight with a range of 10 feet.", ], vision : [["Blindsight", 10]], }; FeatsList["dueling"] = { name: "Dueling", source: [["P24", 209]], type: "fighting style", description: "When I'm holding a Melee weapon in one hand and no other weapons, I gain a +2 bonus to damage rolls with that weapon.", descriptionClassFeature: desc("I add +2 to damage rolls when wielding a Melee weapon in one hand and no other weapons."), descriptionFull: [ "When you're holding a Melee weapon in one hand and no other weapons, you gain a +2 bonus to damage rolls with that weapon.", ], calcChanges : { atkCalc : [ function (fields, v, output) { for (var i = 1; i <= FieldNumbers.actions; i++) { if (/off.hand.attack/i.test(What('Bonus Action ' + i))) return; }; if (v.isMeleeWeapon && !/((^|[^+-]\b)2|\btwo).?hand(ed)?s?\b/i.test(fields.Description)) output.extraDmg += 2; }, "When I'm holding a Melee weapon in one hand and no other weapons, I gain a +2 bonus to damage rolls with that weapon. This condition will always be false if the bonus action 'Off-hand Attack' exists.", ], }, }; FeatsList["interception"] = { name: "Interception", source: [["P24", 209]], type: "fighting style", description: "As a reaction when a creature I can see hits another creature within 5 ft of me with an attack, I can reduce the damage dealt by 1d10 plus my Proficiency Bonus. I must be holding a Shield or a Simple or Martial weapon to do this.", calculate: 'event.value = "As a reaction when a creature I can see hits another creature within 5 ft of me with an attack, I can reduce the damage dealt by 1d10 plus my Proficiency Bonus (1d10+" + Number(How("Proficiency Bonus")) + "). I must be holding a Shield or a Simple or Martial weapon to do this.";', descriptionClassFeature: desc("As a reaction when a creature I can see hits another within 5 ft of me, I can use a Shield or Simple/Martial weapon I'm holding to reduce the damage done by 1d10 + my Prof Bonus."), descriptionFull: [ "When a creature you can see hits another creature within 5 feet of you with an attack roll, you can take a Reaction to reduce the damage dealt to the target by 1d10 plus your Proficiency Bonus. You must be holding a Shield or a Simple or Martial weapon to use this Reaction.", ], action : [["reaction", "Interception Fighting Style"]], }; FeatsList["protection"] = { name: "Protection", source: [["P24", 209]], type: "fighting style", description: "As a reaction when a creature I can see attacks a target other than me within 5 ft of me, I can interpose my Shield if I'm holding one. This gives Disadv" + (typePF ? "antage" : ".") + " to the triggering attack and all other attacks against the target until the start of my next turn while I stay within 5 ft" + (typePF ? " of the target." : "."), descriptionClassFeature: desc("As a reaction when a creature I can see attacks another within 5 ft of me, I can use a shield I'm holding to impose Disadv" + (typePF ? "antage" : ".") + " on this and other attacks vs. them until my next turn starts."), descriptionFull: [ "When a creature you can see attacks a target other than you that is within 5 feet of you, you can take a Reaction to interpose your Shield if you're holding one. You impose Disadvantage on the triggering attack roll and all other attack rolls against the target until the start of your next turn if you remain within 5 feet of the target.", ], action : [["reaction", "Protection Fighting Style"]], }; FeatsList["thrown weapon fighting"] = { name: "Thrown Weapon Fighting", source: [["P24", 210]], type: "fighting style", description: "I add +2 to the damage roll when I hit with a ranged attack roll using a weapon that has the Thrown property.", descriptionClassFeature: desc("I add +2 damage to ranged attacks made with weapons with the Thrown property."), descriptionFull: [ "When you hit with a ranged attack roll using a weapon that has the Thrown property, you gain a +2 bonus to the damage roll.", ], calcChanges: { atkAdd: [ function (fields, v) { if (v.isThrownWeapon && v.isMeleeWeapon) { fields.Description += (fields.Description ? '; ' : '') + '+2 damage when thrown'; }; }, "I deal +2 damage when I hit a ranged attack made with a thrown weapon.", ], atkCalc: [ function (fields, v, output) { if (v.isThrownWeapon && !v.isMeleeWeapon) { output.extraDmg += 2; }; }, "", ], }, }; FeatsList["unarmed fighting"] = { name: "Unarmed Fighting", source: [["P24", 210]], type: "fighting style", description: "My Unarmed Strikes deal 1d6 damage instead of 1. If I'm not holding any weapons or a Shield when I make the attack roll, the d6 becomes a d8. At the start of each of my turns, I can deal 1d4 Bludgeoning damage to one creature Grappled by me.", descriptionClassFeature: desc([ "My unarmed strikes deal 1d6 damage, or 1d8 when I'm not holding any weapons or Shield.", "At the start of my turn, I can deal 1d4 Bludgeoning damage to a creature I'm Grappling.", ]), descriptionFull: [ "When you hit with your Unarmed Strike and deal damage, you can deal Bludgeoning damage equal to 1d6 plus your Strength modifier instead of the normal damage of an Unarmed Strike. If you aren't holding any weapons or a Shield when you make the attack roll, the d6 becomes a d8.", "At the start of each of your turns, you can deal 1d4 Bludgeoning damage to one creature Grappled by you.", ], calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == "unarmed strike") { if (fields.Damage_Die == 1 || fields.Damage_Die == "1d4") fields.Damage_Die = '1d6'; fields.Description += (fields.Description ? '; ' : '') + 'Versatile (d8)'; }; }, "My unarmed strikes deal 1d6 damage instead of 1, which increases to 1d8 if I'm not holding any weapons or a Shield when I make the attack roll.", 1, ], }, }; // Epic Boons feats FeatsList["boon of energy resistance"] = { name: "Boon of Energy Resistance", source: [["P24", 210]], type: "epic boon", prerequisite: "Level 19+", prereqeval: function (v) { return v.characterLevel >= 19; }, description: "I gain ***Resistance*** to two non-physical damage types, which I can change after a Long Rest. ***Energy Redirection***. As a reaction when I take these types of damage, I can have a creature I can see within 60 ft make a Dex save DC 8 + Con mod + Prof Bonus, or take 2d12+Con mod damage of the same type.", calculate: 'var conMod = Number(What("Con Mod")), profB = Number(How("Proficiency Bonus")); var conModStr = conMod > 0 ? "+" + conMod : conMod === 0 ? "" : conMod; event.value = "I gain ***Resistance*** to two non-physical damage types, which I can change after a Long Rest. ***Energy Redirection***. As a reaction when I take these types of damage, I can have a creature I can see within 60 ft make a Dex save DC " + (8+conMod+profB) + " (8 + Con mod + Prof Bonus) or take 2d12" + conModStr + " (Con mod) damage of the same type.";', descriptionFull: [ "You gain the following benefits.", "***Ability Score Increase***. Increase one ability score of your choice by 1, to a maximum of 30.", "***Energy Resistances***. You gain Resistance to two of the following damage types of your choice: Acid, Cold, Fire, Lightning, Necrotic, Poison, Psychic, Radiant, or Thunder. Whenever you finish a Long Rest, you can change your choices.", "***Energy Redirection***. When you take damage of one of the types chosen for the Energy Resistances benefit, you can take a Reaction to direct damage of the same type toward another creature you can see within 60 feet of yourself that isn't behind Total Cover. If you do so, that creature must succeed on a Dexterity saving throw (8 plus your Constitution modifier and Proficiency Bonus) or take damage equal to 2d12 plus your Constitution modifier.", ], action: [["reaction", "Energy Redirection"]], }; FeatsList["boon of fortitude"] = { name: "Boon of Fortitude", source: [["P24", 210]], type: "epic boon", prerequisite: "Level 19+", prereqeval: function (v) { return v.characterLevel >= 19; }, description: "My Hit Point maximum increases by 40. When I regain Hit Points, I can add my Constitution modifier to the amount of HP regained. Once I've regained these additional HP, I can't do so again until the start of my next turn.", descriptionFull: [ "You gain the following benefits.", "***Ability Score Increase***. Increase one ability score of your choice by 1, to a maximum of 30.", "***Fortified Health***. Your Hit Point maximum increases by 40. In addition, whenever you regain Hit Points, you can regain additional Hit Points equal to your Constitution modifier. Once you've regained these additional Hit Points, you can't do so again until the start of your next turn.", ], calcChanges: { hp: function (totalHD, HDobj, prefix) { return [40, "Boon of Fortitude"]; }, }, }; FeatsList["boon of recovery"] = { name: "Boon of Recovery", source: [["P24", 211]], type: "epic boon", prerequisite: "Level 19+", prereqeval: function (v) { return v.characterLevel >= 19; }, description: [ "##Last Stand##. Once per Long Rest when I would be reduced to 0 HP, I can instead drop to 1 HP and regain half my max HP.", "n##Recover Vitality##. I have a pool of ten d10s, which replenish after a Long Rest. As a Bonus Action, I can expend and roll a number of dice from this pool to regain HP.", ].join("\n"), descriptionFull: [ "You gain the following benefits.", "***Ability Score Increase***. Increase one ability score of your choice by 1, to a maximum of 30.", "***Last Stand***. When you would be reduced to 0 Hit Points, you can drop to 1 Hit Point instead and regain a number of Hit Points equal to half your Hit Point maximum. Once you use this benefit, you can't use it again until you finish a Long Rest.", "***Recover Vitality***. You have a pool of ten d10s. As a Bonus Action, you can expend dice from the pool, roll those dice, and regain a number of Hit Points equal to the roll's total. You regain all the expended dice when you finish a Long Rest.", ], action: [["bonus action", "Recover Vitality"]], extraLimitedFeatures: [{ name: "Last Stand", usages: 1, recovery: "long rest", }, { name: "Recover Vitality (d10)", usages: 10, recovery: "long rest", }], }; FeatsList["boon of skill"] = { name: "Boon of Skill", source: [["P24", 211]], type: "epic boon", prerequisite: "Level 19+", prereqeval: function (v) { return v.characterLevel >= 19; }, description: "I gain proficiency in all skills and Expertise in one skill of my choice.", descriptionFull: [ "You gain the following benefits.", "***Ability Score Increase***. Increase one ability score of your choice by 1, to a maximum of 30.", "***All-Around Adept***. You gain proficiency in all skills.", "***Expertise***. Choose one skill in which you lack Expertise. You gain Expertise in that skill.", ], skills: ["Acrobatics", "Animal Handling", "Arcana", "Athletics", "Deception", "History", "Insight", "Intimidation", "Investigation", "Medicine", "Nature", "Perception", "Performance", "Persuasion", "Religion", "Sleight of Hand", "Stealth", "Survival"], skillstxt: "I gain proficiency in all skills and Expertise in one skill of my choice.", }; FeatsList["boon of speed"] = { name: "Boon of Speed", source: [["P24", 211]], type: "epic boon", prerequisite: "Level 19+", prereqeval: function (v) { return v.characterLevel >= 19; }, description: "***Escape Artist***. As a Bonus Action, I can take the Disengage action, which also ends the Grappled condition on me.\n***Quickness***. My Speed increases by 30 ft.", descriptionFull: [ "You gain the following benefits.", "***Ability Score Increase***. Increase one ability score of your choice by 1, to a maximum of 30.", "***Escape Artist***. As a Bonus Action, you can take the Disengage action, which also ends the Grappled condition on you.", "***Quickness***. Your Speed increases by 30 feet.", ], speed: { allModes: { bonus: "+30" } }, action: [["bonus action", "Escape Artist (Disengage \x26 Escape Grapple)"]], }; [ // Add ability score choices to the epic boons ["boon of energy resistance", true, false], ["boon of fortitude", true, false], ["boon of recovery", true, true], ["boon of skill", false, false], ["boon of speed", false, false], ].forEach(function (entry) { addAbilityScoreChoicesToFeat(FeatsList[entry[0]], false, 30, entry[1], entry[2]); }); // Weapons (cantrips not in the free rules) WeaponsList["mind sliver"] = { regExpSearch: /^(?=.*mind)(?=.*sliver).*$/i, name: "Mind Sliver", source: [["P24", 298]], list: "spell", ability: 6, type: "Cantrip", damage: ["C", 6, "psychic"], range: "60 ft", description: "Int save to avoid; Target has -1d4 on next save before my next turn ends", abilitytodamage: false, dc: true, }; WeaponsList["thorn whip"] = { regExpSearch: /^(?=.*thorn)(?=.*whip).*$/i, name: "Thorn Whip", source: [["P24", 333]], list: "spell", ability: 5, type: "Cantrip", damage: ["C", 6, "piercing"], range: "Melee, 30 ft", description: "Melee spell attack; Pull up to Large target up to 10 ft closer", abilitytodamage: false, }; WeaponsList["thunderclap"] = { regExpSearch: /thunderclap/i, name: "Thunderclap", source: [["P24", 333]], list: "spell", ability: 6, type: "Cantrip", damage: ["C", 6, "thunder"], range: "5-ft radius", description: "Con save to avoid; All creatures in area; Audible in 100 ft", abilitytodamage: false, dc: true, }; WeaponsList["toll the dead"] = { regExpSearch: /^(?=.*toll)(?=.*dead).*$/i, name: "Toll the Dead", source: [["P24", 334]], list: "spell", ability: 5, type: "Cantrip", damage: ["C", 12, "necrotic"], range: "60 ft", description: "Wis save to avoid; If target is at full HP, d8 instead of d12 damage", abilitytodamage: false, dc: true, }; WeaponsList["word of radiance"] = { regExpSearch: /^(?=.*word)(?=.*radiance).*$/i, name: "Word of Radiance", source: [["P24", 343]], list: "spell", ability: 5, type: "Cantrip", damage: ["C", 6, "radiant"], range: "5-ft radius", description: "Con save to avoid; Only chosen creatures I can see are affected", abilitytodamage: false, dc: true, }; // Spells SpellsList["arcane gate"] = { name: "Arcane Gate", classes: ["sorcerer", "warlock", "wizard"], source: [["P24", 242]], reqLoS: true, level: 6, school: "Conj", time: "Act", range: "500 ft", components: "V,S", duration: "Conc, 10 min", description: "Two portals up to 500 ft apart filled with opaque mist; teleport any between; Bns change orientation", descriptionFull: [ "You create linked teleportation portals. Choose two Large, unoccupied spaces on the ground that you can see, one space within range and the other one within 10 feet of you. A circular portal opens in each of those spaces and remains for the duration.", "The portals are two-dimensional glowing rings filled with mist that blocks sight. They hover inches from the ground and are perpendicular to it.", "A portal is open on only one side (you choose which). Anything entering the open side of a portal exits from the open side of the other portal as if the two were adjacent to each other. As a Bonus Action, you can change the facing of the open sides.", ], }; SpellsList["arcane vigor"] = { name: "Arcane Vigor", classes: ["sorcerer", "wizard"], source: [["P24", 242]], level: 2, school: "Abjur", time: "Bns", range: "Self", components: "V,S", duration: "Instantaneous", description: "Expend and roll up to 2+1/SL unused Hit Dice; Heal roll + spellcasting ability modifier in HP", descriptionFull: [ "You tap into your life force to heal yourself. Roll one or two of your unexpended Hit Point Dice, and regain a number of Hit Points equal to the roll's total plus your spellcasting ability modifier. Those dice are then expended.", UsingHigherLvl + "The number of unexpended Hit Dice you can roll increases by one for each spell slot level above 2.", ], }; SpellsList["armor of agathys"] = { name: "Armor of Agathys", classes: ["warlock"], source: [["P24", 243]], level: 1, school: "Abjur", time: "Bns", range: "Self", components: "V,S,M", compMaterial: "A shard of blue glass", duration: "1 h", description: "5+5/SL temp HP; crea that hit me with melee atk take 5+5/SL Cold dmg; spell ends if 0 temp HP left", descriptionShorter: "5+5/SL temp HP; melee attackers vs. me take 5+5/SL Cold dmg; spell ends if 0 temp HP", descriptionFull: [ "Protective magical frost surrounds you. You gain 5 Temporary Hit Points. If a creature hits you with a melee attack roll before the spell ends, the creature takes 5 Cold damage. The spell ends early if you have no Temporary Hit Points.", UsingHigherLvl + "The Temporary Hit Points and the Cold damage both increase by 5 for each spell slot level above 1.", ], }; SpellsList["arms of hadar"] = { name: "Arms of Hadar", classes: ["warlock"], source: [["P24", 243]], level: 1, school: "Conj", time: "Act", range: "S:10-ft rad", components: "V,S", duration: "Instantaneous", save: "Str", description: "All crea in range 2d6+1d6/SL Necrotic dmg; save halves; on failed save no reactions until next turn", descriptionFull: [ "Invoking Hadar, you cause tendrils to erupt from yourself. Each creature in a 10-foot Emanation originating from you makes a Strength saving throw. On a failed save, a target takes 2d6 Necrotic damage and can't take Reactions until the start of its next turn. On a successful save, a target takes half as much damage only.", UsingHigherLvl + "The damage increases by 1d6 for each spell slot level above 1.", ], }; SpellsList["aura of purity"] = { name: "Aura of Purity", classes: ["cleric", "paladin"], source: [["P24", 244]], level: 4, school: "Abjur", time: "Act", range: "S:30-ft rad", components: "V", duration: "Conc, 10 min", description: "Me \x26 allies resist Poison dmg, adv. on saves vs. blind, charm, deaf, fright, paralysis, poison, and stun", descriptionFull: [ "An aura radiates from you in a 30-foot Emanation for the duration. While in the aura, you and your allies have Resistance to Poison damage and Advantage on saving throws to avoid or end effects that include the Blinded, Charmed, Deafened, Frightened, Paralyzed, Poisoned, or Stunned condition.", ], }; SpellsList["aura of vitality"] = { name: "Aura of Vitality", classes: ["cleric", "druid", "paladin"], source: [["P24", 244]], level: 3, school: "Abjur", time: "Act", range: "S:30-ft rad", components: "V", duration: "Conc, 1 min", description: "On cast and at the start of each of my turns, 1 creature in aura heals 2d6 HP", descriptionFull: [ "An aura radiates from you in a 30-foot Emanation for the duration. When you create the aura and at the start of each of your turns while it persists, you can restore 2d6 Hit Points to one creature in it.", ], }; SpellsList["banishing smite"] = { name: "Banishing Smite", classes: ["paladin"], source: [["P24", 245]], level: 5, school: "Conj", time: "Bns", timeFull: "Bonus Action, which you take immediately after hitting a creature with a Melee weapon or an Unarmed Strike", range: "Self", components: "V", duration: "Conc, 1 min", description: "Cast on melee wea hit; +5d10 Force dmg; if this brings target HP\u226450, banished until spell ends", descriptionFull: [ "The target hit by the attack roll takes an extra 5d10 Force damage from the attack. If the attack reduces the target to 50 Hit Points or fewer, the target must succeed on a Charisma saving throw or be transported to a harmless demiplane for the duration. While there, the target has the Incapacitated condition. When the spell ends, the target reappears in the space it left or in the nearest unoccupied space if that space is occupied.", ], dynamicDamageBonus: { multipleDmgMoments: false, }, }; SpellsList["beast sense"] = { name: "Beast Sense", classes: ["druid", "ranger"], source: [["P24", 245]], ritual: true, level: 2, school: "Div", time: "Act", range: "Touch", components: "S", duration: "Conc, 1 h", description: "Use 1 willing Beast's senses as well as my own for the duration", descriptionFull: [ "You touch a willing Beast. For the duration, you can perceive through the Beast's senses as well as your own. When perceiving through the Beast's senses, you benefit from any special senses it has.", ], }; SpellsList["blade ward"] = { name: "Blade Ward", classes: ["bard", "sorcerer", "warlock", "wizard"], source: [["P24", 247]], level: 0, school: "Abjur", time: "Act", range: "Self", components: "V,S", duration: "Conc, 1 min", description: "Creatures subtract 1d4 from attack rolls made against me for the duration", descriptionFull: ["Whenever a creature makes an attack roll against you before the spell ends, the attacker subtracts 1d4 from the attack roll."], }; SpellsList["blinding smite"] = { name: "Blinding Smite", classes: ["paladin"], source: [["P24", 247]], level: 3, school: "Evoc", time: "Bns", timeFull: "Bonus Action, which you take immediately after hitting a creature with a Melee weapon or an Unarmed Strike", range: "Self", components: "V", duration: "1 min", save: "Con", description: "Cast on melee wea hit; +3d8+1d8/SL Radiant dmg and Blinded; save at end of its turns to stop", descriptionFull: [ "The target hit by the strike takes an extra 3d8 Radiant damage from the attack, and the target has the Blinded condition until the spell ends. At the end of each of its turns, the Blinded target makes a Constitution saving throw, ending the spell on itself on a success.", UsingHigherLvl + "The extra damage increases by 1d8 for each spell slot level above 3.", ], dynamicDamageBonus: { multipleDmgMoments: false }, }; SpellsList["circle of power"] = { name: "Circle of Power", classes: ["cleric", "paladin", "wizard"], source: [["P24", 250]], level: 5, school: "Abjur", time: "Act", range: "S:30-ft rad", components: "V", duration: "Conc, 10 min", description: "While in aura, me \x26 allies adv. on saves vs magical effects; if save would half dmg, we take no dmg", descriptionFull: [ "An aura radiates from you in a 30-foot Emanation for the duration. While in the aura, you and your allies have Advantage on saving throws against spells and other magical effects. When an affected creature makes a saving throw against a spell or magical effect that allows a save to take only half damage, it takes no damage if it succeeds on the save.", ], }; SpellsList["cloud of daggers"] = { name: "Cloud of Daggers", classes: ["bard", "sorcerer", "warlock", "wizard"], source: [["P24", 251]], level: 2, school: "Conj", time: "Act", range: "60 ft", components: "V,S,M", compMaterial: "A sliver of glass", duration: "Conc, 1 min", description: "5-ft cube all in it on cast/enter/end 4d4+2d4/SL Slashing dmg; Act to teleport cube 30 ft", descriptionFull: [ "You conjure spinning daggers in a 5-foot Cube centered on a point within range. Each creature in that area takes 4d4 Slashing damage. A creature also takes this damage if it enters the Cube or ends its turn there or if the Cube moves into its space. A creature takes this damage only once per turn.", "On your later turns, you can take a Magic action to teleport the Cube up to 30 feet.", UsingHigherLvl + "The damage increases by 2d4 for each spell slot level above 2.", ], }; SpellsList["compelled duel"] = { name: "Compelled Duel", classes: ["paladin"], source: [["P24", 252]], reqLoS: true, level: 1, school: "Ench", time: "Bns", range: "30 ft", components: "V", duration: "Conc, 1 min", save: "Wis", description: "1 crea save or dis. atk vs. not-me, can't move >30ft away; ends if ally dmg, I atk other or move >30ft", descriptionFull: [ "You try to compel a creature into a duel. One creature that you can see within range makes a Wisdom saving throw. On a failed save, the target has Disadvantage on attack rolls against creatures other than you, and it can't willingly move to a space that is more than 30 feet away from you.", "The spell ends if you make an attack roll against a creature other than the target, if you cast a spell on an enemy other than the target, if an ally of yours damages the target, or if you end your turn more than 30 feet away from the target.", ], }; SpellsList["conjure barrage"] = { name: "Conjure Barrage", classes: ["ranger"], source: [["P24", 254]], reqLoS: true, level: 3, school: "Conj", time: "Act", range: "S:60-ft cone", components: "V,S,M\u0192", compMaterial: "A Melee or Ranged weapon worth at least 1 CP", duration: "Instantaneous", save: "Dex", description: "Conjure more of held weapon (or its ammo); any creatures in area 5d8+1d8/SL Force dmg; save half", descriptionFull: [ "You brandish the weapon used to cast the spell and conjure similar spectral weapons (or ammunition appropriate to the weapon) that launch forward and then disappear. Each creature of your choice that you can see in a 60-foot Cone makes a Dexterity saving throw, taking 5d8 Force damage on a failed save or half as much damage on a successful one.", UsingHigherLvl + "The damage increases by 1d8 for each spell slot level above 3.", ], }; SpellsList["conjure volley"] = { name: "Conjure Volley", classes: ["ranger"], source: [["P24", 255]], reqLoS: true, level: 5, school: "Conj", time: "Act", range: "150 ft", components: "V,S,M\u0192", compMaterial: "A Melee or Ranged weapon worth at least 1 CP", duration: "Instantaneous", save: "Dex", description: "Volley falls in 40-ft rad 20-ft high cylinder; any seen creatures in it take 8d8 Force dmg; save halves", descriptionFull: [ "You brandish the weapon used to cast the spell and choose a point within range. Hundreds of similar spectral weapons (or ammunition appropriate to the weapon) fall in a volley and then disappear. Each creature of your choice that you can see in a 40-foot-radius, 20-foot-high Cylinder centered on that point makes a Dexterity saving throw. A creature takes 8d8 Force damage on a failed save or half as much damage on a successful one.", ], }; SpellsList["cordon of arrows"] = { name: "Cordon of Arrows", classes: ["ranger"], source: [["P24", 258]], level: 2, school: "Trans", time: "Act", range: "Touch", components: "V,S,M\u2020", compMaterial: "Four or more arrows or bolts", duration: "8 h", save: "Dex", description: "4+2/SL ammo in space; undesignated crea enter/end in 30 ft: 1 ammo atk, save or 2d4 Piercing dmg", descriptionShorter: "4+2/SL ammo; undesignated crea enter/end in 30 ft: 1 ammo atk, save or 2d4 Piercing dmg", descriptionFull: [ "You touch up to four nonmagical Arrows or Bolts and plant them in the ground in your space. Until the spell ends, the ammunition can't be physically uprooted, and whenever a creature other than you enters a space within 30 feet of the ammunition for the first time on a turn or ends its turn there, one piece of ammunition flies up to strike it. The creature must succeed on a Dexterity saving throw or take 2d4 Piercing damage. The piece of ammunition is then destroyed. The spell ends when none of the ammunition remains planted in the ground.", "When you cast this spell, you can designate any creatures you choose, and the spell ignores them.", UsingHigherLvl + "The amount of ammunition that can be affected increases by two for each spell slot level above 2.", ], }; SpellsList["crown of madness"] = { name: "Crown of Madness", classes: ["bard", "sorcerer", "warlock", "wizard"], source: [["P24", 259]], reqLoS: true, level: 2, school: "Ench", time: "Act", range: "120 ft", components: "V,S", duration: "Conc, 1 min", save: "Wis", description: "1 humanoid save or Charmed \x26 melee atk chosen crea before move; Act to keep; repeat save turn's end", descriptionFull: [ "One creature that you can see within range must succeed on a Wisdom saving throw or have the Charmed condition for the duration. The creature succeeds automatically if it isn't Humanoid.", "A spectral crown appears on the Charmed target's head, and it must use its action before moving on each of its turns to make a melee attack against a creature other than itself that you mentally choose. The target can act normally on its turn if you choose no creature or if no creature is within its reach. The target repeats the save at the end of each of its turns, ending the spell on itself on a success.", "On your later turns, you must take the Magic action to maintain control of the target, or the spell ends.", ], }; SpellsList["crusader's mantle"] = { name: "Crusader's Mantle", classes: ["paladin"], source: [["P24", 259]], level: 3, school: "Evoc", time: "Act", range: "S:30-ft rad", components: "V", duration: "Conc, 1 min", description: "Allies within the aura and I deal +1d4 Radiant dmg with weapons and unarmed strikes", descriptionFull: [ "You radiate a magical aura in a 30-foot Emanation. While in the aura, you and your allies each deal an extra 1d4 Radiant damage when hitting with a weapon or an Unarmed Strike.", ], }; SpellsList["destructive wave"] = { name: "Destructive Wave", classes: ["paladin"], source: [["P24", 261]], level: 5, school: "Evoc", time: "Act", range: "S:30-ft rad", components: "V", duration: "Instantaneous", save: "Con", description: "Any crea 5d6 Thunder dmg \x26 5d6 Radiant or Necrotic dmg \x26 knocked prone; save halves, not prone", descriptionShorter: "Any crea 5d6 Thunder dmg \x26 5d6 Radiant or Necrotic dmg \x26 prone; save half, not prone", descriptionFull: [ "Destructive energy ripples outward from you in a 30-foot Emanation. Each creature you choose in the Emanation makes a Constitution saving throw. On a failed save, a target takes 5d6 Thunder damage and 5d6 Radiant or Necrotic damage (your choice) and has the Prone condition. On a successful save, a target takes half as much damage only.", ], dynamicDamageBonus: { allDmgTypesSingleMoment: true, multipleDmgTypes: { dmgTypes: ["radiant", "necrotic"], inDescriptionAs: "Radiant or Necrotic", }, }, }; SpellsList["elemental weapon"] = { name: "Elemental Weapon", classes: ["artificer", "druid", "paladin", "ranger"], source: [["P24", 267]], level: 3, school: "Trans", time: "Act", range: "Touch", components: "V,S", duration: "Conc, 1 h", description: "Nonmagical to +1 wea \x26 +1d4 Acid/Cold/Fire/Lightn./Thunder dmg; SL5: +2/+2d4, SL7: +3/+3d4", descriptionShorter: "+1 wea \x26 +1d4 Acid/Cold/Fire/Lightning/Thunder dmg; SL5: +2/+2d4, SL7: +3/+3d4", descriptionFull: [ "A nonmagical weapon you touch becomes a magic weapon. Choose one of the following damage types: Acid, Cold, Fire, Lightning, or Thunder. For the duration, the weapon has a +1 bonus to attack rolls and deals an extra 1d4 damage of the chosen type when it hits.", UsingHigherLvl + "If you use a level 5-6 spell slot, the bonus to attack rolls increases to +2, and the extra damage increases to 2d4. If you use a level 7+ spell slot, the bonus increases to +3, and the extra damage increases to 3d4.", ], dynamicDamageBonus: { multipleDmgTypes: { dmgTypes: ["acid", "cold", "fire", "lightning", "thunder"], inDescriptionAs: "Acid/Cold/Fire/Lightning/Thunder|Acid/Cold/Fire/Lightn\./Thunder", }, }, }; SpellsList["feign death"] = { name: "Feign Death", classes: ["bard", "cleric", "druid", "wizard"], source: [["P24", 271]], ritual: true, level: 3, school: "Necro", time: "Act", range: "Touch", components: "V,S,M", compMaterial: "A pinch of graveyard dirt", duration: "1 h", description: "Willing crea looks dead: Blinded, Incapacitated, speed 0, resist. all dmg but Psychic, Poisoned immune", descriptionFull: [ "You touch a willing creature and put it into a cataleptic state that is indistinguishable from death.", "For the duration, the target appears dead to outward inspection and to spells used to determine the target's status. The target has the Blinded and Incapacitated conditions, and its Speed is 0.", "The target also has Resistance to all damage except Psychic damage, and it has Immunity to the Poisoned condition.", ], }; SpellsList["fount of moonlight"] = { name: "Fount of Moonlight", classes: ["bard", "druid"], source: [["P24", 277]], level: 4, school: "Evoc", time: "Act", range: "Self", components: "V,S", duration: "Conc, 10 min", save: "Con", description: "Radiant dmg resistance; melee atk +2d6 Radiant dmg; 20-ft rad bright/20-ft dim light; Reaction below", descriptionShorter: "Radiant resistance; melee atk +2d6 Radiant dmg; 20-ft bright/20-ft dim light; React below", descriptionFull: [ "A cool light wreathes your body for the duration, emitting Bright Light in a 20-foot radius and Dim Light for an additional 20 feet.", "Until the spell ends, you have Resistance to Radiant damage, and your melee attacks deal an extra 2d6 Radiant damage on a hit.", "In addition, immediately after you take damage from a creature you can see within 60 feet of yourself, you can take a Reaction to force the creature to make a Constitution saving throw. On a failed save, the creature has the Blinded condition until the end of your next turn.", ], dependencies: ["fount of moonlight-1-reaction"], withoutDependencies: { description: "Radiant resist; melee atk +2d6 Radiant dmg; 60ft React vis. crea dmg me: save or Blind to my next EoT", descriptionShorter: "Radiant resist; melee atk+2d6 Radiant dmg; 60ft React vis. crea dmg me: save or Blind to EoT", }, }; SpellsList["fount of moonlight-1-reaction"] = { name: "Fount of Moonlight: Reaction", nameShort: "Fount of Moon: reaction", // capitalized Reacton doesn't fit classes: ["bard", "druid"], source: [["P24", 277]], reqLoS: true, level: 4, school: "Evoc", time: "React", range: "60 ft", components: "option", duration: "My next EoT", save: "Con", description: "Reaction if crea I can see within 60 ft damages me: save or Blinded until the end of my next turn", descriptionFull: [ "Immediately after you take damage from a creature you can see within 60 feet of yourself, you can take a Reaction to force the creature to make a Constitution saving throw. On a failed save, the creature has the Blinded condition until the end of your next turn.", "This is an option of the Fount of Moonlight spell, see the line above for its full description.", ], dynamicDamageBonus: { doNotProcess: true, // sheet makes mistake because "damage" comes after a numerical }, }; SpellsList["friends"] = { name: "Friends", classes: ["bard", "sorcerer", "warlock", "wizard"], source: [["P24", 277]], reqLoS: true, level: 0, school: "Ench", time: "Act", range: "10 ft", components: "S,M", compMaterial: "Some makeup", duration: "Conc, 1 min", save: "Wis", description: "1 humanoid save or Charmed; once/24h; ends if dmged or if I atk, dmg, force save a crea; knows after", descriptionFull: [ "You magically emanate a sense of friendship toward one creature you can see within range. The target must succeed on a Wisdom saving throw or have the Charmed condition for the duration. The target succeeds automatically if it isn't a Humanoid, if you're fighting it, or if you have cast this spell on it within the past 24 hours.", "The spell ends early if the target takes damage or if you make an attack roll, deal damage, or force anyone to make a saving throw. When the spell ends, the target knows it was Charmed by you.", ], }; SpellsList["grasping vine"] = { name: "Grasping Vine", classes: ["druid", "ranger"], source: [["P24", 280]], reqLoS: true, level: 4, school: "Conj", time: "Bns", range: "60 ft", components: "V,S", duration: "Conc, 1 min", description: "Place vine; at cast/Bns: 30 ft melee spell atk: 4d8 Bludg. dmg, pull \u226430 ft, \u2264Huge Grappled (1+1/SL)", descriptionShorter: "Place vine; cast/Bns: 30 ft melee spell atk: 4d8 Bludg. dmg, pull \u226430 ft, Grappled (1+1/SL)", descriptionFull: [ "You conjure a vine that sprouts from a surface in an unoccupied space that you can see within range. The vine lasts for the duration.", "Make a melee spell attack against a creature within 30 feet of the vine. On a hit, the target takes 4d8 Bludgeoning damage and is pulled up to 30 feet toward the vine; if the target is Huge or smaller, it has the Grappled condition (escape DC equal to your spell save DC). The vine can grapple only one creature at a time, and you can cause the vine to release a Grappled creature (no action required).", "As a Bonus Action on your later turns, you can repeat the attack against a creature within 30 feet of the vine.", UsingHigherLvl + "The number of creatures the vine can grapple increases by one for each spell slot level above 4.", ], }; SpellsList["hail of thorns"] = { name: "Hail of Thorns", classes: ["ranger"], source: [["P24", 283]], level: 1, school: "Conj", time: "Bns", timeFull: "Bonus Action, which you take immediately after hitting a creature with a Ranged weapon", range: "Self", components: "V", duration: "Instantaneous", save: "Dex", description: "Cast on ranged wea hit: target and all crea in 5 ft take 1d10+1d10/SL Piercing dmg; save halves", descriptionFull: [ "As you hit the creature, this spell creates a rain of thorns that sprouts from your Ranged weapon or ammunition. The target of the attack and each creature within 5 feet of it make a Dexterity saving throw, taking 1d10 Piercing damage on a failed save or half as much damage on a successful one.", UsingHigherLvl + "The damage increases by 1d10 for each spell slot level above 1.", ], }; /* Hunger of Hadar doesn't behave correctly with `genericSpellDmgEdit`, if adding a bonus that matches both damage types (Cold and Acid) and not restricted to a single roll. There is no setting to prevent both damage types getting the bonus added., However, no official feature allows for adding damage to multiple rolls of a spell. */ SpellsList["hunger of hadar"] = { name: "Hunger of Hadar", classes: ["warlock"], source: [["P24", 286]], level: 3, school: "Conj", time: "Act", range: "150 ft", components: "V,S,M", compMaterial: "A pickled tentacle", duration: "Conc, 1 min", save: "Dex", description: "20-ft rad all in area Blinded; start in: 2d6 Cold dmg; end in: save or 2d6 Acid dmg; +1d6/SL one type", descriptionShorter: "20-ft rad all in: Blinded; start: 2d6 Cold dmg; end save or 2d6 Acid dmg; +1d6/SL one type", descriptionFull: [ "You open a gateway to the Far Realm, a region infested with unspeakable horrors. A 20-foot-radius Sphere of Darkness appears, centered on a point with range and lasting for the duration. The Sphere is Difficult Terrain, and it is filled with strange whispers and slurping noises, which can be heard up to 30 feet away. No light, magical or otherwise, can illuminate the area, and creatures fully within it have the Blinded condition.", "Any creature that starts its turn in the area takes 2d6 Cold damage. Any creature that ends its turn there must succeed on a Dexterity saving throw or take 2d6 Acid damage from otherworldly tentacles.", UsingHigherLvl + "The Cold or Acid damage (your choice) increases by 1d6 for each spell slot level above 3.", ], }; SpellsList["jallarzi's storm of radiance"] = { name: "Jallarzi's Storm of Radiance", nameShort: "J's Storm of Radiance", nameAlt: "Storm of Radiance", classes: ["warlock", "wizard"], source: [["P24", 289]], reqLoS: true, level: 5, school: "Evoc", time: "Act", range: "120 ft", components: "V,S,M", compMaterial: "A pinch of phosphorus", duration: "Conc, 1 min", save: "Con", description: "10\xD740ft all cast/enter/end 2d10+1d10/SL Radiant \x26 again Thunder dmg; save \xBD; all in Blind \x26 Deaf", descriptionMetric: "3\xD712m all cast/enter/end 2d10+1d10/SL Radiant \x26 again Thunder dmg; save \xBD; all in Blind \x26 Deaf", descriptionShorter: "10\xD740ft all cast/enter/end 2d10+1d10/SL Radiant \x26 Thndr dmg; save \xBD; all in blind, deaf", descriptionShorterMetric: "3\xD712m all cast/enter/end 2d10+1d10/SL Radiant \x26 Thndr dmg; save \xBD; all in blind, deaf", descriptionFull: [ "You unleash a storm of flashing light and raging thunder in a 10-foot-radius, 40-foot-high Cylinder centered on a point you can see within range. While in this area, creatures have the Blinded and Deafened conditions, and they can't cast spells with a Verbal component.", "When the storm appears, each creature in it makes a Constitution saving throw, taking 2d10 Radiant damage and 2d10 Thunder damage on a failed save or half as much damage on a successful one. A creature also makes this save when it enters the spell's area for the first time on a turn or ends its turn there. A creature makes this save only once per turn.", UsingHigherLvl + "The Radiant and Thunder damage increase by 1d10 for each spell slot level above 5.", ], dynamicDamageBonus: { multipleDmgTypes: { dmgTypes: ["radiant", "thunder"], inDescriptionAs: "Radiant \x26 again Thunder dmg|Radiant \x26 Thndr dmg", }, }, }; SpellsList["lightning arrow"] = { name: "Lightning Arrow", classes: ["ranger"], source: [["P24", 292]], level: 3, school: "Trans", time: "Bns", timeFull: "Bonus Action, which you take immediately after hitting or missing a target with a ranged attack using a weapon", range: "Self", components: "V,S", duration: "Instantaneous", save: "Dex", description: "After rngd wea atk: 4d8+1d8/SL Lightn. dmg, miss half; all in 10ft 2d8+1d8/SL Lightn. dmg, save \xBD", descriptionShorter: "Aftr rng wea atk: 4d8+1d8/SL Lightn. dmg, miss half; 10ft all 2d8+1d8/SL Lightn. dmg, save \xBD", descriptionFull: [ "As your attack hits or misses the target, the weapon or ammunition you're using transforms into a lightning bolt. Instead of taking any damage or other effects from the attack, the target takes 4d8 Lightning damage on a hit or half as much damage on a miss. Each creature within 10 feet of the target then makes a Dexterity saving throw, taking 2d8 Lightning damage on a failed save or half as much damage on a successful one.", "The weapon or ammunition then returns to its normal form.", UsingHigherLvl + "The damage for both effects of the spell increases by 1d8 for each spell slot level above 3.", ], dynamicDamageBonus: { multipleDmgMoments: false, skipDmgGroupIfNotMultiple: /(atk .*?lightn\. dmg.*?)/i, }, }; SpellsList["mind sliver"] = { name: "Mind Sliver", classes: ["sorcerer", "warlock", "wizard"], source: [["P24", 298]], reqLoS: true, level: 0, school: "Ench", time: "Act", range: "60 ft", components: "V", duration: "Instantaneous", save: "Int", description: "1 crea save or 1d6 Psychic dmg \x26 -1d4 on first save before my next EoT; +1d6 at CL 5, 11, \x26 17", descriptionCantripDie: "1 crea save or `CD`d6 Psychic dmg and -1d4 on first saving throw before my next turn ends", descriptionFull: [ "You try to temporarily sliver the mind of one creature you can see within range. The target must succeed on an Intelligence saving throw or take 1d6 Psychic damage and subtract 1d4 from the next saving throw it makes before the end of your next turn.", CantripUpgrade + "The damage increases by 1d6 when you reach levels 5 (2d6), 11 (3d6), and 17 (4d6).", ], }; SpellsList["power word fortify"] = { name: "Power Word Fortify", classes: ["bard", "cleric"], source: [["P24", 306]], reqLoS: true, level: 7, school: "Ench", time: "Act", range: "60 ft", components: "V", duration: "Instantaneous", description: "Divide 120 Temporary HP equally among up to 6 visible creatures in range", descriptionFull: ["You fortify up to six creatures you can see within range. The spell bestows 120 Temporary Hit Points, which you divide among the spell's recipients."], }; SpellsList["staggering smite"] = { name: "Staggering Smite", classes: ["paladin"], source: [["P24", 320]], level: 4, school: "Ench", time: "Bns", timeFull: "Bonus Action, which you take immediately after hitting a creature with a Melee weapon or an Unarmed Strike", range: "Self", components: "V", duration: "Instantaneous", save: "Wis", description: "Cast on melee wea hit; +4d6+1d6/SL Psychic dmg; target save or Stunned until my next EoT", descriptionFull: [ "The target takes an extra 4d6 Psychic damage from the attack, and the target must succeed on a Wisdom saving throw or have the Stunned condition until the end of your next turn.", UsingHigherLvl + "The extra damage increases by 1d6 for each spell slot level above 4.", ], }; SpellsList["steel wind strike"] = { name: "Steel Wind Strike", classes: ["ranger", "wizard"], source: [["P24", 320]], reqLoS: true, level: 5, school: "Conj", time: "Act", range: "30 ft", components: "S,M\u0192", compMaterial: "A Melee weapon worth 1+ SP", duration: "Instantaneous", description: "Melee spell atk vs. 5 visible creature for each 6d10 Force dmg; after, I teleport next to 1 target", descriptionFull: [ "You flourish the weapon used in the casting and then vanish to strike like the wind. Choose up to five creatures you can see within range. Make a melee spell attack against each target. On a hit, a target takes 6d10 Force damage.", "You then teleport to an unoccupied space you can see within 5 feet of one of the targets.", ], dynamicDamageBonus: { multipleDmgMoments: true }, }; SpellsList["summon aberration"] = { name: "Summon Aberration", classes: ["warlock", "wizard"], source: [["P24", 322]], reqLoS: true, level: 4, school: "Conj", time: "Act", range: "90 ft", components: "V,S,M\u0192", compMaterial: "A pickled tentacle and an eyeball in a platinum-inlaid vial worth 400+ GP", duration: "Conc, 1 h", description: (typePF ? "C" : "c") + "hosen Abberant spirit; obeys verbal commands; takes turn after mine; vanishes at 0 HP; see B (400gp)", descriptionFull: [ "You call forth an aberrant spirit. It manifests in an unoccupied space that you can see within range and uses the Aberrant Spirit stat block. When you cast the spell, choose Beholderkin, Mind Flayer, or Slaad. The creature resembles an Aberration of that kind, which determines certain details in its stat block. The creature disappears when it drops to 0 Hit Points or when the spell ends.", "The creature is an ally to you and your allies. In combat, it shares your Initiative count, but it takes its turn immediately after yours. It obeys your verbal commands (no action required by you). If you don't issue any, it takes the Dodge action and uses its movement to avoid danger.", UsingHigherLvl + "Use the spell slot's level for the spell's level in the stat block.", ], }; SpellsList["summon beast"] = { name: "Summon Beast", classes: ["druid", "ranger"], source: [["P24", 322]], reqLoS: true, level: 2, school: "Conj", time: "Act", range: "90 ft", components: "V,S,M\u0192", compMaterial: "A feather, tuft of fur, and fish tail inside a gilded acorn worth 200+ GP", duration: "Conc, 1 h", description: "Chosen Bestial Spirit; obeys verbal commands; takes turn after mine; vanishes at 0 HP; see B (200gp)", descriptionFull: [ "You call forth a bestial spirit. It manifests in an unoccupied space that you can see within range and uses the Bestial Spirit stat block. When you cast the spell, choose an environment: Air, Land, or Water. The creature resembles an animal of your choice that is native to the chosen environment, which determines certain details in its stat block. The creature disappears when it drops to 0 Hit Points or when the spell ends.", "The creature is an ally to you and your allies. In combat, the creature shares your Initiative count, but it takes its turn immediately after yours. It obeys your verbal commands (no action required by you). If you don't issue any, it takes the Dodge action and uses its movement to avoid danger.", UsingHigherLvl + "Use the spell slot's level for the spell's level in the stat block.", ], }; SpellsList["summon celestial"] = { name: "Summon Celestial", classes: ["cleric", "paladin"], source: [["P24", 323]], reqLoS: true, level: 5, school: "Conj", time: "Act", range: "90 ft", components: "V,S,M\u0192", compMaterial: "A reliquary worth 500+ GP", duration: "Conc, 1 h", description: "Chosen Celestial Spirit; obeys verbal commands; takes turn after mine; vanishes at 0 HP; see B (500gp)", descriptionFull: [ "You call forth a Celestial spirit. It manifests in an angelic form in an unoccupied space that you can see within range and uses the Celestial Spirit stat block. When you cast the spell, choose Avenger or Defender. Your choice determines certain details in its stat block. The creature disappears when it drops to 0 Hit Points or when the spell ends.", "The creature is an ally to you and your allies. In combat, the creature shares your Initiative count, but it takes its turn immediately after yours. It obeys your verbal commands (no action required by you). If you don't issue any, it takes the Dodge action and uses its movement to avoid danger.", UsingHigherLvl + "Use the spell slot's level for the spell's level in the stat block.", ], }; SpellsList["summon construct"] = { name: "Summon Construct", classes: ["artificer", "wizard"], source: [["P24", 324]], reqLoS: true, level: 4, school: "Conj", time: "Act", range: "90 ft", components: "V,S,M\u0192", compMaterial: "A lockbox worth 400+ GP", duration: "Conc, 1 h", description: (typePF ? "C" : "c") + "hosen Construct " + (typePF ? "S" : "s") + "pirit; obeys verbal commands; takes turn after mine; vanishes at 0 HP; see B (400gp)", descriptionFull: [ "You call forth the spirit of a Construct. It manifests in an unoccupied space that you can see within range and uses the Construct Spirit stat block. When you cast the spell, choose a material: Clay, Metal, or Stone. The creature resembles an animate statue (you determine the appearance) made of the chosen material, which determines certain details in its stat block. The creature disappears when it drops to 0 Hit Points or when the spell ends.", "The creature is an ally to you and your allies. In combat, the creature shares your Initiative count, but it takes its turn immediately after yours. It obeys your verbal commands (no action required by you). If you don't issue any, it takes the Dodge action and uses its movement to avoid danger.", UsingHigherLvl + "Use the spell slot's level for the spell's level in the stat block.", ], }; SpellsList["summon elemental"] = { name: "Summon Elemental", classes: ["druid", "ranger", "wizard"], source: [["P24", 325]], reqLoS: true, level: 4, school: "Conj", time: "Act", range: "90 ft", components: "V,S,M\u0192", compMaterial: "Air, a pebble, ash, and water inside a gold-inlaid vial worth 400+ GP", duration: "Conc, 1 h", description: (typePF ? "C" : "c") + "hosen Elemental " + (typePF ? "S" : "s") + "pirit; obeys verbal commands; takes turn after mine; vanishes at 0 HP; see B (400gp)", descriptionFull: [ "You call forth an Elemental spirit. It manifests in an unoccupied space that you can see within range and uses the Elemental Spirit stat block. When you cast the spell, choose an element: Air, Earth, Fire, or Water. The creature resembles a bipedal form wreathed in the chosen element, which determines certain details in its stat block. The creature disappears when it drops to 0 Hit Points or when the spell ends.", "The creature is an ally to you and your allies. In combat, the creature shares your Initiative count, but it takes its turn immediately after yours. It obeys your verbal commands (no action required by you). If you don't issue any, it takes the Dodge action and uses its movement to avoid danger.", UsingHigherLvl + "Use the spell slot's level for the spell's level in the stat block.", ], }; SpellsList["summon fey"] = { name: "Summon Fey", classes: ["druid", "ranger", "warlock", "wizard"], source: [["P24", 326]], reqLoS: true, level: 3, school: "Conj", time: "Act", range: "90 ft", components: "V,S,M\u0192", compMaterial: "A gilded flower worth 300+ GP", duration: "Conc, 1 h", description: "Chosen Fey Spirit; obeys verbal commands; takes turn after mine; vanishes at 0 HP; see B (300gp)", descriptionFull: [ "You call forth a Fey spirit. It manifests in an unoccupied space that you can see within range and uses the Fey Spirit stat block. When you cast the spell, choose a mood: Fuming, Mirthful, or Tricksy. The creature resembles a Fey creature of your choice marked by the chosen mood, which determines certain details in its stat block. The creature disappears when it drops to 0 Hit Points or when the spell ends.", "The creature is an ally to you and your allies. In combat, the creature shares your Initiative count, but it takes its turn immediately after yours. It obeys your verbal commands (no action required by you). If you don't issue any, it takes the Dodge action and uses its movement to avoid danger.", UsingHigherLvl + "Use the spell slot's level for the spell's level in the stat block.", ], }; SpellsList["summon fiend"] = { name: "Summon Fiend", classes: ["warlock", "wizard"], source: [["P24", 326]], reqLoS: true, level: 6, school: "Conj", time: "Act", range: "90 ft", components: "V,S,M\u0192", compMaterial: "A bloody vial worth 600+ GP", duration: "Conc, 1 h", description: "Chosen Fiend Spirit; obeys verbal commands; takes turn after mine; vanishes at 0 HP; see B (600gp)", descriptionFull: [ "You call forth a fiendish spirit. It manifests in an unoccupied space that you can see within range and uses the Fiendish Spirit stat block. When you cast the spell, choose Demon, Devil, or Yugoloth. The creature resembles a Fiend of the chosen type, which determines certain details in its stat block. The creature disappears when it drops to 0 Hit Points or when the spell ends.", "The creature is an ally to you and your allies. In combat, the creature shares your Initiative count, but it takes its turn immediately after yours. It obeys your verbal commands (no action required by you). If you don't issue any, it takes the Dodge action and uses its movement to avoid danger.", UsingHigherLvl + "Use the spell slot's level for the spell's level in the stat block.", ], }; SpellsList["summon undead"] = { name: "Summon Undead", classes: ["warlock", "wizard"], source: [["P24", 328]], reqLoS: true, level: 3, school: "Necro", time: "Act", range: "90 ft", components: "V,S,M\u0192", compMaterial: "A gilded skull worth 300+ GP", duration: "Conc, 1 h", description: "Chosen Undead Spirit; obeys verbal commands; takes turn after mine; vanishes at 0 HP; see B (300gp)", descriptionFull: [ "You call forth an Undead spirit. It manifests in an unoccupied space that you can see within range and uses the Undead Spirit stat block. When you cast the spell, choose the creature's form: Ghostly, Putrid, or Skeletal. The spirit resembles an Undead creature with the chosen form, which determines certain details in its stat block. The creature disappears when it drops to 0 Hit Points or when the spell ends.", "The creature is an ally to you and your allies. In combat, the creature shares your Initiative count, but it takes its turn immediately after yours. It obeys your verbal commands (no action required by you). If you don't issue any, it takes the Dodge action and uses its movement to avoid danger.", UsingHigherLvl + "Use the spell slot's level for the spell's level in the stat block.", ], }; SpellsList["swift quiver"] = { name: "Swift Quiver", classes: ["ranger"], source: [["P24", 329]], level: 5, school: "Trans", time: "Bns", range: "Self", components: "V,S,M\u0192", compMaterial: "A Quiver worth 1+ GP", duration: "Conc, 1 min", description: "At cast \x26 Bns after: attack twice with weapon that uses arrows or bolts; spell creates nonmagical ammo", descriptionFull: [ "When you cast the spell and as a Bonus Action until it ends, you can make two attacks with a weapon that fires Arrows or Bolts, such as a Longbow or a Light Crossbow. The spell magically creates the ammunition needed for each attack. Each Arrow or Bolt created by the spell deals damage like a nonmagical piece of ammunition of its kind and disintegrates immediately after it hits or misses.", ], }; SpellsList["synaptic static"] = { name: "Synaptic Static", classes: ["bard", "sorcerer", "warlock", "wizard"], source: [["P24", 330]], level: 5, school: "Ench", time: "Act", range: "120 ft", components: "V,S", duration: "Instantaneous", save: "Int", description: "20-ft rad all save or 8d6 Psychic dmg, 1 min -1d6 on atk/chk/conc save; save half only; redo save EoT", descriptionShorter: "20ft rad all save or 8d6+1d8 Psychic dmg, 1 min -1d6 to atks/check/conc save; save \xBD only; EoT save", descriptionFull: [ "You cause psychic energy to erupt at a point within range. Each creature in a 20-foot-radius Sphere centered on that point makes an Intelligence saving throw, taking 8d6 Psychic damage on a failed save or half as much damage on a successful one.", "On a failed save, a target also has muddled thoughts for 1 minute. During that time, it subtracts 1d6 from all its attack rolls and ability checks, as well as any Constitution saving throws to maintain Concentration. The target makes an Intelligence saving throw at the end of each of its turns, ending the effect on itself on a success.", ], }; SpellsList["tasha's bubbling cauldron"] = { name: "Tasha's Bubbling Cauldron", nameAlt: "Bubbling Cauldron", nameShort: "T's Bubbling Cauldron", classes: ["warlock", "wizard"], source: [["P24", 330]], level: 6, school: "Conj", time: "Act", range: "5 ft", components: "V,S,M\u0192", compMaterial: "A gilded ladle worth 500+ GP", duration: "10 min", description: "Conjure immobile pot with spell mod of (un)common potion; Bns to take 1, lasting till recast (500 gp)", descriptionFull: [ "You conjure a claw-footed cauldron filled with bubbling liquid. The cauldron appears in an unoccupied space on the ground within 5 feet of you and lasts for the duration. The cauldron can't be moved and disappears when the spell ends, along with the bubbling liquid inside it.", "The liquid in the cauldron duplicates the properties of a Common or an Uncommon potion of your choice (such as a Potion of Healing). As a Bonus Action, you or an ally can reach into the cauldron and withdraw one potion of that kind. The potion is contained in a vial that disappears when the potion is consumed. The cauldron can produce a number of these potions equal to your spellcasting ability modifier (minimum 1). When the last of these potions is withdrawn from the cauldron, the cauldron disappears, and the spell ends.", "Potions obtained from the cauldron that aren't consumed disappear when you cast this spell again.", ], }; SpellsList["telepathy"] = { name: "Telepathy", classes: ["wizard"], source: [["P24", 331]], level: 8, school: "Div", time: "Act", range: "Unlimited", components: "V,S,M", compMaterial: "A pair of linked silver rings", duration: "24 h", description: "1 familiar willing crea \x26 I telepathic link; share \x26 understand words, images, sounds and sensory info", descriptionFull: [ "You create a telepathic link between yourself and a willing creature with which you are familiar. The creature can be anywhere on the same plane of existence as you. The spell ends if you or the target are no longer on the same plane.", "Until the spell ends, you and the target can instantly share words, images, sounds, and other sensory messages with each other through the link, and the target recognizes you as the creature it is communicating with. The spell enables a creature to understand the meaning of your words and any sensory messages you send to it.", ], }; SpellsList["thorn whip"] = { name: "Thorn Whip", classes: ["artificer", "druid"], source: [["P24", 333]], level: 0, school: "Trans", time: "Act", range: "30 ft", components: "V,S,M", compMaterial: "The stem of a plant with thorns", duration: "Instantaneous", description: "Melee spell atk for 1d6 Piercing dmg \x26 can pull \u2264Large crea up to 10 ft closer; +1d6 at CL 5, 11, \x26 17", descriptionShorter: "Melee spell atk for 1d6 Piercing dmg \x26 pull \u2264Large crea up to 10 ft closer; +1d6 at CL 5, 11, 17", descriptionCantripDie: "Melee spell atk for `CD`d6 Piercing dmg and can pull up to Large crea up to 10 ft closer", descriptionFull: [ "You create a vine-like whip covered in thorns that lashes out at your command toward a creature in range. Make a melee spell attack against the target. On a hit, the target takes 1d6 Piercing damage, and if it is Large or smaller, you can pull it up to 10 feet closer to you.", CantripUpgrade + "The damage increases by 1d6 when you reach levels 5 (2d6), 11 (3d6), and 17 (4d6).", ], }; SpellsList["thunderclap"] = { name: "Thunderclap", classes: ["artificer", "bard", "druid", "sorcerer", "warlock", "wizard"], source: [["P24", 333]], level: 0, school: "Evoc", time: "Act", range: "S:5-ft rad", components: "S", duration: "Instantaneous", save: "Con", description: "All creatures but me save or 1d6 Thunder dmg; 100-ft rad audible; +1d6 at CL 5, 11, and 17", descriptionCantripDie: "All creatures but me save or `CD`d6 Thunder dmg; 100-ft rad audible", descriptionFull: [ "Each creature in a 5-foot Emanation originating from you must succeed on a Constitution saving throw or take 1d6 Thunder damage. The spell's thunderous sound can be heard up to 100 feet away.", CantripUpgrade + "The damage increases by 1d6 when you reach levels 5 (2d6), 11 (3d6), and 17 (4d6).", ], }; SpellsList["thunderous smite"] = { name: "Thunderous Smite", classes: ["paladin"], source: [["P24", 334]], level: 1, school: "Evoc", time: "Bns", timeFull: "Bonus Action, which you take immediately after hitting a target with a Melee weapon or an Unarmed Strike", range: "Self", components: "V", duration: "Instantaneous", save: "Str", description: "Cast on melee wea hit; +2d6+1d6/SL Thunder dmg; save or 10 ft push \x26 Prone; audible in 300" + (typePF ? " " : "") + "ft", descriptionFull: [ "Your strike rings with thunder that is audible within 300 feet of you, and the target takes an extra 2d6 Thunder damage from the attack. Additionally, if the target is a creature, it must succeed on a Strength saving throw or be pushed 10 feet away from you and have the Prone condition.", UsingHigherLvl + "The damage increases by 1d6 for each spell slot level above 1.", ], }; SpellsList["toll the dead"] = { name: "Toll the Dead", classes: ["cleric", "warlock", "wizard"], source: [["P24", 334]], reqLoS: true, level: 0, school: "Necro", time: "Act", range: "60 ft", components: "V,S", duration: "Instantaneous", save: "Wis", description: "1 crea save or 1d12 Necrotic dmg (d8 if full HP); bell audible in 10 ft; +1d12/1d8 at CL 5, 11, \x26 17", descriptionShorter: "1 crea save or 1d12 Necrotic dmg (d8 not d12 if full HP); bell audible 10ft; +1d at CL 5, 11, 17", descriptionCantripDie: "1 crea save or `CD`d12 Necrotic damage (d8 not d12 if at full HP); bell audible in 10 ft", descriptionFull: [ "You point at one creature you can see within range, and the single chime of a dolorous bell is audible within 10 feet of the target. The target must succeed on a Wisdom saving throw or take 1d8 Necrotic damage. If the target is missing any of its Hit Points, it instead takes 1d12 Necrotic damage.", CantripUpgrade + "The damage increases by one die when you reach levels 5 (2d8 or 2d12), 11 (3d8 or 3d12), and 17 (4d8 or 4d12).", ], }; SpellsList["witch bolt"] = { name: "Witch Bolt", classes: ["sorcerer", "warlock", "wizard"], source: [["P24", 343]], level: 1, school: "Evoc", time: "Act", range: "60 ft", components: "V,S,M", compMaterial: "A twig struck by lightning", duration: "Conc, 1 min", description: "Rngd atk 2d12+1d12/SL Lightn. dmg; rnds after: Bns 1d12 Lightn. dmg; end: out of range/total cover", descriptionShorter: "Rngd atk 2d12+1d12/SL Lightn. dmg; Bns 1d12 Lightn. dmg; end: out of range/total cover", descriptionFull: [ "A beam of crackling energy lances toward a creature within range, forming a sustained arc of lightning between you and the target. Make a ranged spell attack against it. On a hit, the target takes 2d12 Lightning damage.", "On each of your subsequent turns, you can take a Bonus Action to deal 1d12 Lightning damage to the target automatically, even if the first attack missed.", "The spell ends if the target is ever outside the spell's range or if it has Total Cover from you.", UsingHigherLvl + "The initial damage increases by 1d12 for each spell slot level above 1.", ], dynamicDamageBonus: { multipleDmgMoments: false, extraDmgGroupsSameType: /(Bns )(.*?)( Lightn. dmg)/i, // WERKT DIT??? }, }; SpellsList["word of radiance"] = { name: "Word of Radiance", classes: ["cleric"], source: [["P24", 343]], reqLoS: true, level: 0, school: "Evoc", time: "Act", range: "S:5-ft rad", components: "V,M", compMaterial: "A sunburst token", duration: "Instantaneous", save: "Con", description: "Any creature save or 1d6 Radiant damage; +1d6 at CL 5, 11, and 17", descriptionCantripDie: "Any creature save or `CD`d6 Radiant damage", descriptionFull: [ "Burning radiance erupts from you in a 5-foot Emanation. Each creature of your choice that you can see in it must succeed on a Constitution saving throw or take 1d6 Radiant damage.", CantripUpgrade + "The damage increases by 1d6 when you reach levels 5 (2d6), 11 (3d6), and 17 (4d6).", ], }; SpellsList["wrathful smite"] = { name: "Wrathful Smite", classes: ["paladin"], source: [["P24", 343]], level: 1, school: "Necro", time: "Bns", timeFull: "Bonus Action, which you take immediately after hitting a creature with a Melee weapon or an Unarmed Strike", range: "Self", components: "V", duration: "1 min", save: "Wis", description: "Cast on melee wea hit; +1d6 Necrotic dmg and save or Frightened; repeat save EoT to end", descriptionFull: [ "The target takes an extra 1d6 Necrotic damage from the attack, and it must succeed on a Wisdom saving throw or have the Frightened condition until the spell ends. At the end of each of its turns, the Frightened target repeats the save, ending the spell on itself on a success.", UsingHigherLvl + "The damage increases by 1d6 for each spell slot level above 1.", ], }; SpellsList["yolande's regal presence"] = { name: "Yolande's Regal Presence", nameShort: "Y's Regal Presence", classes: ["bard", "wizard"], source: [["P24", 343]], reqLoS: true, level: 5, school: "Ench", time: "Act", range: "S:10-ft rad", components: "V,S,M", compMaterial: "A miniature tiara", duration: "Conc, 1 min", save: "Wis", description: "Any crea cast/enter/end 4d6 Psychic dmg, Prone, and can push it up to 10 ft away; save half dmg only", descriptionShorter: "Any crea cast/enter/end 4d6 Psychic dmg, Prone, can push it up to 10 ft; save half dmg only", descriptionFull: [ "You surround yourself with unearthly majesty in a 10-foot Emanation. Whenever the Emanation enters the space of a creature you can see and whenever a creature you can see enters the Emanation or ends its turn there, you can force that creature to make a Wisdom saving throw. On a failed save, the target takes 4d6 Psychic damage and has the Prone condition, and you can push it up to 10 feet away. On a successful save, the target takes half as much damage only. A creature makes this save only once per turn.", ], }; ================================================ FILE: WotC 2024/pub_20250218_MM.js ================================================ var iFileName = "pub_20250218_MM.js"; RequiredSheetVersion("24.0.1-beta"); // This file adds material from the 2025 Monster Manual that isn't in the SRD v5.2.1 to MPMB's Character Record Sheet // Define the source SourceList["M24"] = { name: "2025 Monster Manual", abbreviation: "MM'25", group: "Primary Sources", url: "https://marketplace.dndbeyond.com/core-rules/3711000", date: "2025/02/18", }; // Pact of the Chain familiar CreatureList["slaad tadpole"] = { name: "Slaad Tadpole", nameThis: "slaad", source: [["M24", 284]], size: 5, type: "Aberration", companion: ["pact_of_the_chain"], alignment: "Chaotic Neutral", ac: 12, hp: 7, hd: [3, 4], speed: "30 ft, burrow 10 ft", scores: [7, 15, 10, 3, 5, 3], skills: { "stealth": 4, }, resistances: "Acid, Cold, Fire, Lightning, Thunder", senses: "Darkvision 60 ft", passivePerception: 7, languages: "Understands Slaad but can't speak", challengeRating: "1/8", proficiencyBonus: 2, attacksAction: 1, traits: [{ name: "Magic Resistance", description: "The [THIS] has Advantage on saving throws against spells and other magical effects.", }], attacks: [{ name: "Bite", ability: 2, damage: [1, 6, "piercing"], range: "Melee (5 ft)", }], }; // Undead CreatureList["crawling claw"] = { name: "Crawling Claw", source: [["M24", 83]], size: 5, type: "Undead", alignment: "Neutral Evil", ac: 12, hp: 2, hd: [1, 4], speed: "20 ft, climb 20 ft", scores: [13, 14, 11, 5, 10, 4], immunities: "Necrotic, Poison; Charmed, Exhaustion, Frightened, Incapacitated, Poisoned", senses: "Blindsight 30 ft", passivePerception: 10, languages: "Understands Common but can't speak", challengeRating: "0", proficiencyBonus: 2, attacksAction: 1, attacks: [{ name: "Slam", ability: 1, damage: [1, "", "necrotic"], range: "Melee (5 ft)", }], }; // Beast CreatureList["giant squid"] = { name: "Giant Squid", source: [["M24", 360]], size: 1, type: "Beast", alignment: "Unaligned", ac: 12, hp: 120, hd: [16, 12], speed: "5 ft, swim 80 ft", scores: [23, 14, 12, 5, 11, 4], saves: [9, 5, "", "", "", ""], skills: { "perception": 6, }, senses: "Darkvision 120 ft", passivePerception: 16, challengeRating: "6", proficiencyBonus: 3, attacksAction: 2, features: [{ name: "Water Breathing", description: "The [THIS] can breathe only underwater.", }], actions: [{ name: "Multiattack", description: "As an Attack action, the [THIS] can make one Bite and one Tentacle attack.", }, { name: "Ink Cloud (1/Day)", description: "As a Reaction when the [THIS] takes damage while underwater, it can release ink that fills a 15-ft Cube centered on itself, and it moves up to its Swim Speed. The Cube is Heavily Obscured for 1 minute or until a strong current or similar effect disperses the ink.", wildshapeShow: "As a Reaction after taking damage underwater, can release a 15-ft Cube of ink on itself and move up to Swim Speed. The area is Heavily Obscured for 1 minute or until dispersed by a strong current.", }, { name: "Tentacle", description: "If the target is a Huge or smaller creature, it has the Grappled condition (escape DC 16) from one of two tentacles, and the [THIS] can pull the target up to 10 ft straight toward itself.", wildshapeShow: false, }], attacks: [{ name: "Bite", ability: 1, damage: [4, 10, "piercing"], range: "Melee (5 ft)", }, { name: "Tentacle", ability: 1, damage: [3, 8, "bludgeoning"], range: "Melee (15 ft)", description: "\u2264Huge is Grappled (escape DC 16) \x26 pulled 10 ft closer", }], }; ================================================ FILE: WotC material/all_WotC_pub+UA.js ================================================ if (sheetVersion < 14000006) { throw "This add-on script was made for a newer version of the sheet (v14.0.6-beta). Please use this required version or a later version (but lower than v15.0.0) and try again.\n\nYou can get the different versions at www.flapkan.com.\n\nFrom v24.0.0 onwards, the sheet uses the 2024 (5.5e) rules, while lower versions use the 5e (2014) rules."; }; if (sheetVersion >= 15000000) { throw "This add-on script was made for a lower version of the sheet (one before v15.0.0). Please use the required version (v14.0.6-beta) or a later version and try again.\n\nYou can get the different versions at www.flapkan.com.\n\nFrom v24.0.0 onwards, the sheet uses the 2024 (5.5e) rules, while lower versions use the 5e (2014) rules."; }; var iFileName = "all_WotC_pub+UA.js"; RequiredSheetVersion("14.0.6-beta", "15.0.0"); // pub_20140715_LMoP.js // This file adds the magic items from the Lost Mines of Phandelver adventure from the D&D 5e starter set to MPMB's Character Record Sheet // Define the source SourceList["LMoP"] = { name : "Lost Mines of Phandelver [items]", abbreviation : "LMoP", group : "Adventure Books", campaignSetting : "Forgotten Realms", url : "https://www.dndbeyond.com/sources/lmop", date : "2014/07/15" }; // Magic Items MagicItemsList["dragonguard"] = { name : "Dragonguard", source : [["LMoP", 48], ["PaBTSO", 72]], type : "armor (breastplate)", rarity : "rare", magicItemTable : "G", description : "This +1 breastplate has a gold dragon motif worked into its design. It grants its wearer advantage on saving throws against the breath weapons of creatures that have the dragon type.", descriptionFull : "This +1 breastplate has a gold dragon motif worked into its design. Created for a human hero of Neverwinter named Tergon, it grants its wearer advantage on saving throws against the breath weapons of creatures that have the dragon type.", weight : 20, armorOptions : [{ regExpSearch : /dragonguard/i, name : "Dragonguard", source : [["LMoP", 48], ["PaBTSO", 72]], type : "medium", ac : "14+1", weight : 20, selectNow : true }], savetxt : { adv_vs : ["breath weapons of dragons"] } } MagicItemsList["hew"] = { name : "Hew", source : [["LMoP", 33], ["PaBTSO", 54]], type : "weapon (battleaxe)", rarity : "uncommon", magicItemTable : "F", description : 'Dwarvish runes on the head of this rusty battleaxe read "Hew". It adds a +1 bonus to attack and damage rolls made with it and deals maximum damage against plant creatures or objects made of wood. While carrying it, I feel uneasy when I travel through a forest, as its creator was a dwarf smith who feuded with dryads.', descriptionFull : 'This rusty old battleaxe of dwarven manufacture has runes in Dwarvish on the axe head which read "Hew". Hew is a +1 battleaxe that deals maximum damage when the wielder hits a plant creature or an object made of wood. The axe\'s creator was a dwarf smith who feuded with the dryads of a forest where he used it for protection while he cut firewood. Whoever carries the axe feels uneasy whenever he or she travels through a forest.', weight : 4, weaponOptions : [{ baseWeapon : "battleaxe", regExpSearch : /\bhew\b/i, name : '"Hew"', source : [["LMoP", 33], ["PaBTSO", 54]], description : "Versatile (1d10); Max damage against plant creatures and wooden objects", modifiers : [1, 1], selectNow : true }] } MagicItemsList["lightbringer"] = { name : "Lightbringer", source : [["LMoP", 48], ["PaBTSO", 54]], type : "weapon (mace)", rarity : "uncommon", magicItemTable : "F", description : "This mace adds a +1 bonus to attack and damage rolls made with it. It is made for a cleric of the god of dawn, with its head shaped like a sunburst and made of solid brass. I can command it to glow as bright as a torch. While glowing, the mace deals an extra 1d6 radiant damage to undead creatures.", descriptionFull : "This +1 mace was made for a cleric of Lathander, the god of dawn. The head of the mace is shaped like a sunburst and is made of solid brass. Named Lightbringer, this weapon glows as bright as a torch when its wielder commands. While glowing, the mace deals an extra 1d6 radiant damage to undead creatures.", weight : 4, weaponOptions : [{ baseWeapon : "mace", regExpSearch : /lightbringer/i, name : "Lightbringer", source : [["LMoP", 48], ["PaBTSO", 54]], description : "Command to glow as torch and deal +1d6 radiant damage to undead", modifiers : [1, 1], selectNow : true }] } MagicItemsList["spider staff"] = { // changed to the new version introduced in Phandelver and Below: The Shattered Obelisk with the prerequisite name : "Spider Staff", source : [["LMoP", 53], ["PaBTSO", 220]], type : "staff", rarity : "rare", magicItemTable : "G", description : "Attacks with this black adamantine quarterstaff topped with a spider deal +1d6 poison damage on a hit. It has 10 charges and regains 1d6+4 expended charges at dawn. If I use its last charge, roll a d20. On a 1, it is destroyed. I can use its charges to cast Spider Climb (1 charge) or Web (2 charges, spell save DC 15).", descriptionFull : "The top of this black, adamantine staff is shaped like a spider. The staff weighs 6 pounds. You must be attuned to the staff to gain its benefits and cast its spells. The staff can be wielded as a quarterstaff. It deals 1d6 extra poison damage on a hit when used to make a weapon attack.\n The staff has 10 charges, which are used to fuel the spells within it. With the staff in hand, you can use your action to cast one of the following spells from the staff if the spell is on your class's spell list: Spider Climb (1 charge) or Web (2 charges, spell save DC 15). No components are required.\n The staff regains 1d6+4 expended charges each day at dusk. If you expend the staff's last charge, roll a d20. On a 1, the staff crumbles to dust and is destroyed.", attunement : true, prerequisite : "Requires attunement by a bard, sorcerer, warlock, or wizard", prereqeval : function(v) { return classes.known.bard || classes.known.sorcerer || classes.known.warlock || classes.known.wizard ? true : false; }, weight : 6, // kept to the original weight usages : 10, recovery : "dawn", additional : "regains 1d6+4", weaponOptions : [{ baseWeapon : "quarterstaff", regExpSearch : /^(?=.*spider)(?=.*staff).*$/i, name : "Spider Staff", source : [["LMoP", 53], ["PaBTSO", 220]], description : "Versatile (1d8); +1d6 poison damage", selectNow : true }], fixedDC : 15, spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "1 charge", spells : ["spider climb"], selection : ["spider climb"], firstCol : 1 }, { name : "2 charges", spells : ["web"], selection : ["web"], firstCol : 2 }] } MagicItemsList["staff of defense"] = { // changed to the new version introduced in Phandelver and Below: The Shattered Obelisk with the prerequisite name : "Staff of Defense", source : [["LMoP", 53]], type : "staff", rarity : "rare", magicItemTable : "G", description : "This slender, hollow staff is made of glass yet is as strong as oak. While holding it, I gain a +1 bonus to AC. It has 10 charges and regains 1d6+4 expended charges at dawn. If I use its last charge, roll a d20. On a 1, it is destroyed. I can use its charges to cast Mage Armor (1 charge) or Shield (2 charges) as an action.", descriptionFull : "This slender, hollow staff is made of glass yet is as strong as oak. It weighs 3 pounds. You must be attuned to the staff to gain its benefits and cast its spells.\n While holding the staff, you have a +1 bonus to your Armor Class.\n The staff has 10 charges, which are used to fuel the spells within it. With the staff in hand, you can use your action to cast one of the following spells from the staff if the spell is on your class's spell list: Mage Armor (1 charge) or Shield (2 charges). No components are required.\n The staff regains 1d6+4 expended charges each day at dawn. If you expend the staff's last charge, roll a d20. On a 1, the staff shatters and is destroyed.", attunement : true, prerequisite : "Requires attunement by a bard, sorcerer, warlock, or wizard", prereqeval : function(v) { return classes.known.bard || classes.known.sorcerer || classes.known.warlock || classes.known.wizard ? true : false; }, weight : 3, usages : 10, recovery : "dawn", additional : "regains 1d6+4", spellcastingAbility : "class", spellFirstColTitle : "Ch", weaponsAdd : { options : ["Staff of Defense"] }, spellcastingBonus : [{ name : "1 charge", spells : ["mage armor"], selection : ["mage armor"], firstCol : 1 }, { name : "2 charges", spells : ["shield"], selection : ["shield"], firstCol : 2 }], spellChanges : { "shield" : { time : "1 a", changes : "Cast as an action." } }, extraAC : [{name : "Staff of Defense", mod : 1, magic : true, text : "I gain a +1 bonus to AC while holding the Staff of Defense."}], } // pub_20140818_PHB.js // This file adds all material from the Player's Handbook to MPMB's Character Record Sheet // Define the source SourceList.P={ name : "Player's Handbook", abbreviation : "PHB", abbreviationSpellsheet : "P", group : "Core Sources", url : "https://dnd.wizards.com/products/rpg_playershandbook", date : "2014/08/19" }; // (sub)Races that are not in the SRD RaceList["mountain dwarf"] = { regExpSearch : /^((?=.*(hylar|daewar))|((?=.*\b(dwarfs?|dwarves|dwarfish|dwarvish|dwarven)\b)(?=.*\b(mountain|shield)\b))).*$/i, name : "Mountain dwarf", sortname : "Dwarf, Mountain", source : [["P", 20]], plural : "Mountain dwarves", size : 3, speed : { walk : { spd : 25, enc : 25 } }, languageProfs : ["Common", "Dwarvish"], vision : [["Darkvision", 60]], savetxt : { adv_vs : ["poison"] }, dmgres : ["Poison"], weaponProfs : [false, false, ["battleaxe", "handaxe", "warhammer", "light hammer"]], armorProfs : [true, true, false, false], toolProfs : [["Smith, brewer, or mason tools", 1]], age : " are considered young until they are 50 and live about 350 years", height : " stand between 4 and 5 feet tall (4' + 2d4\")", weight : " weigh around 150 lb (130 + 2d4 \xD7 2d6 lb)", heightMetric : " stand between 1,2 and 1,5 metres tall (120 + 5d4 cm)", weightMetric : " weigh around 75 kg (60 + 5d4 \xD7 4d6 / 10 kg)", scores : [2, 0, 2, 0, 0, 0], trait : "Mountain Dwarf (+2 Strength, +2 Constitution)\n\nStonecunning:\n Whenever I make an Intelligence (History) check related to the origin of stonework, I am considered proficient in the History skill and add double my proficiency bonus to the check, instead of my normal proficiency bonus." }; RaceList["dark elf"] = { regExpSearch : /^(?!.*half)((?=.*drow)|((?=.*\b(elfs?|elves|elvish|elven)\b)(?=.*\b(dark|underdarks?|deep|depths?)\b))).*$/i, name : "Drow", sortname : "Elf, Dark (Drow)", source : [["P", 24]], plural : "Drow", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Elvish"], vision : [["Darkvision", 120], ["Sunlight Sensitivity", 0]], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["charmed"] }, weaponProfs : [false, false, ["rapier", "shortsword", "hand crossbow"]], skills : ["Perception"], age : " typically claim adulthood around age 100 and can live to be 750 years old", height : " range from under 5 to 5 1/2 feet tall (4'5\" + 2d6\")", weight : " weigh around 100 lb (75 + 2d6 \xD7 1d6 lb)", heightMetric : " range from under 1,5 to 1,7 metres tall (135 + 5d6 cm)", weightMetric : " weigh around 45 kg (35 + 5d6 \xD7 2d6 / 10 kg)", scores : [0, 2, 0, 0, 0, 1], trait : "Drow (+2 Dexterity, +1 Charisma)\nTrance: Elves don't need to sleep, but meditate semiconsciously, for 4 hours a day. This gives the same benefit as a human gets from 8 hours of sleep (long rest takes only 4 hours).\nSunlight Sensitivity: Disadvantage on attack rolls and Wisdom (Perception) checks that rely on sight when I or what I am trying to attack/perceive is in direct sunlight.\nDrow Magic: 1st level: Dancing Lights cantrip; 3rd level: Faerie Fire; 5th level: Darkness. Both spells can be used once per long rest. Charisma is my spellcasting ability for these.", // errata to specify once per day is long rest spellcastingAbility : 6, spellcastingBonus : [{ name : "Drow Magic (level 1)", spells : ["dancing lights"], selection : ["dancing lights"], }], features : { "faerie fire" : { name : "Drow Magic (level 3)", limfeaname : "Faerie Fire", minlevel : 3, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Drow Magic (level 3)", spells : ["faerie fire"], selection : ["faerie fire"], firstCol : "oncelr" }] }, "darkness" : { name : "Drow Magic (level 5)", limfeaname : "Darkness", minlevel : 5, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Drow Magic (level 5)", spells : ["darkness"], selection : ["darkness"], firstCol : "oncelr" }] } } }; RaceList["wood elf"] = { regExpSearch : /^(?!.*half)((?=.*(grugach|kagonesti|silhana))|((?=.*\b(elfs?|elves|elvish|elven)\b)(?=.*\b(woodlands?|woods?|forests?|wilds?|green)\b))).*$/i, name : "Wood elf", sortname : "Elf, Wood", source : [["P", 24]], plural : "Wood elves", size : 3, speed : { walk : { spd : 35, enc : 25 } }, languageProfs : ["Common", "Elvish"], vision : [["Darkvision", 60]], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["charmed"] }, weaponProfs : [false, false, ["longsword", "shortsword", "longbow", "shortbow"]], skills : ["Perception"], age : " typically claim adulthood around age 100 and can live to be 750 years old", height : " range from under 5 to over 6 feet tall (4'6\" + 2d10\")", weight : " weigh around 125 lb (100 + 2d10 \xD7 1d4 lb)", heightMetric : " range from under 1,5 to over 1,8 metres tall (140 + 5d10 cm)", weightMetric : " weigh around 60 kg (45 + 5d10 \xD7 2d4 / 10 kg)", scores : [0, 2, 0, 0, 1, 0], trait : "Wood Elf (+2 Dexterity, +1 Wisdom)\nTrance: Elves don't need to sleep, but meditate semiconsciously, for 4 hours a day. While meditating, I can dream after a fashion; such dreams are actually mental exercises that have become reflexive through years of practice. After resting in this way, I gain the same benefit that a human does from 8 hours of sleep, thus needing only 4 hours for a long rest.\nMask of the Wild: I can attempt to hide even when I am only lightly obscured by foliage, heavy rain, falling snow, mist, and other natural phenomena." }; RaceList["forest gnome"] = { regExpSearch : /^((?=.*\bgnomes?\b)(?=.*\b(woods?|forests?|wilds?|green)\b)).*$/i, name : "Forest gnome", sortname : "Gnome, Forest", source : [["P", 37]], plural : "Forest gnomes", size : 4, speed : { walk : { spd : 25, enc : 15 } }, languageProfs : ["Common", "Gnomish"], vision : [["Darkvision", 60]], savetxt : { text : ["Adv. on Int/Wis/Cha saves vs. magic"] }, age : " start adult life around age 40 and can live 350 to almost 500 years", height : " are 3 to 4 feet tall (2'11\" + 2d4\")", weight : " weigh around 40 lb (35 + 2d4 lb)", heightMetric : " are 90 to 120 cm tall (2'11\" + 5d4)", weightMetric : " weigh around 18 kg (16 + 5d4 / 10 kg)", scores : [0, 1, 0, 2, 0, 0], trait : "Forest Gnome (+1 Dexterity, +2 Intelligence)" + (typePF ? "\n" : " ") + "\nNatural Illusionist:\n I know the Minor Illusion cantrip. Intelligence is my spellcasting ability for it.\n\nSpeak with Small Beasts:\n Through sounds and gestures, I can communicate simple ideas with Small or smaller beasts.", spellcastingAbility : 4, spellcastingBonus : [{ name : "Natural Illusionist", spells : ["minor illusion"], selection : ["minor illusion"], }] }; RaceList["stout halfling"] = { regExpSearch : /^(?=.*\b(halflings?|hobbits?)\b)(?=.*stout).*$/i, name : "Stout halfling", sortname : "Halfling, Stout", source : [["P", 28]], plural : "Stout halflings", size : 4, speed : { walk : { spd : 25, enc : 15 } }, languageProfs : ["Common", "Halfling"], savetxt : { adv_vs : ["frightened", "poison"] }, dmgres : ["Poison"], age : " reach adulthood at age 20 and live around 150 years", height : " average about 3 feet tall (2'7\" + 2d4\")", weight : " weigh around 40 lb (35 + 2d4 lb)", heightMetric : " average about 90 cm tall (80 + 5d4)", weightMetric : " weigh around 18 kg (16 + 5d4 / 10 kg)", scores : [0, 2, 1, 0, 0, 0], trait : "Stout Halfling (+2 Dexterity, +1 Constitution)\n\nLucky: When I roll a 1 on an attack roll, ability check, or saving throw, I can reroll the die and must use the new roll.\n\nHalfling Nimbleness: I can move through the space of any creature that is of a size larger than me." }; // Add racial variants that are not part of the SRD AddRacialVariant("human", "variant", { regExpSearch : /variant/i, source : [["P", 31]], skillstxt : "Choose any one skill", scorestxt : "+1 to two different ability scores of my choice", scores : [0, 0, 0, 0, 0, 0], trait : "Human (+1 to two different ability scores of my choice)\n\nSkills: I gain proficiency in one skill of my choice.\n\nFeat: I gain one feat of my choice.", featsAdd: [{ type: /^(?!.*(blessing|boon|gift|fighting style)).*$/i }], }); // Add the subclasses that are not in the SRD AddSubClass("barbarian", "totem warrior", { regExpSearch : /^(?=.*totem)(?=.*(warrior|fighter|marauder|barbarian|viking|(norse|tribes?|clans?)(wo)?m(a|e)n)).*$/i, subname : "Path of the Totem Warrior", fullname : "Totem Warrior", source : [["P", 50]], features : { "subclassfeature3" : { name : "Spirit Seeker", source : [["P", 50]], minlevel : 3, description: desc("I can cast Beast Sense and Speak with Animals as rituals (PHB 217 \u0026 277)"), spellcastingBonus : [{ name : "Spirit Seeker", spells : ["beast sense", "speak with animals"], selection : ["beast sense", "speak with animals"], firstCol : SpellRitualTag, times : 2 }], spellChanges : { "beast sense" : { time : "10 min", changes : "I can cast this spell only as a ritual, thus its casting time is 10 minutes longer." }, "speak with animals" : { time : "10 min", changes : "I can cast this spell only as a ritual, thus its casting time is 10 minutes longer." } } }, "subclassfeature3.1" : { name : "Totem Spirit", source : [["P", 50]], minlevel : 3, description: desc('Choose Bear, Eagle, Elk, Wolf, or Tiger Spirit using the "Choose Feature" button above'), choices : ["Bear", "Eagle", "Wolf"], "bear" : { name : "Bear Spirit", description: desc("While raging, I have resistance to all damage types except psychic"), dmgres : [["All -Psychic", "All -Psychic (rage)"]], eval : function() { processResistance(false, 'Barbarian: Rage', ClassList.barbarian.features.rage.dmgres); }, removeeval : function() { processResistance(true, 'Barbarian: Rage', ClassList.barbarian.features.rage.dmgres); } }, "eagle" : { name : "Eagle Spirit", description: desc([ "While raging without heavy armor, others have disadv. on opportunity attacks vs. me", "I can use the Dash action as a bonus action", ]), action : [["bonus action", " (Dash)"]] }, "wolf" : { name : "Wolf Spirit", description: desc("While raging, friends have advantage on melee attacks vs. hostiles within 5 ft of me") } }, "subclassfeature6" : { name : "Aspect of the Beast", source : [["P", 50]], minlevel : 6, description: desc('Choose Bear, Eagle, Elk, Wolf, or Tiger Aspect using the "Choose Feature" button above'), choices : ["Bear", "Eagle", "Wolf"], "bear" : { name : "Aspect of the Bear", description: desc("Advantage on Strength checks to push/pull/lift/break; Carrying capacity is doubled"), carryingCapacity : 2 }, "eagle" : { name : "Aspect of the Eagle", description: desc("I can see up to 1 mile away perfectly; No disadvantage on Perception from dim light") }, "wolf" : { name : "Aspect of the Wolf", description: desc("I can track while traveling at a fast pace; I can move stealthily at a normal pace") } }, "subclassfeature10" : { name : "Spirit Walker", source : [["P", 50]], minlevel : 10, description: desc("I can cast Commune with Nature as a ritual"), spellcastingBonus : [{ name : "Spirit Walker", spells : ["commune with nature"], selection : ["commune with nature"], firstCol : SpellRitualTag, }], spellChanges : { "commune with nature" : { time : "11 min", changes : "I can cast this spell only as a ritual, thus its casting time is 10 minutes longer." } } }, "subclassfeature14" : { name : "Totemic Attunement", source : [["P", 50]], minlevel : 14, description: desc('Choose Bear, Eagle, Elk, Wolf, or Tiger Attunement using the "Choose Feature" button'), choices : ["Bear", "Eagle", "Wolf"], "bear" : { name : "Bear Attunement", description: desc([ "While raging, any creature that sees me within 5 ft has disadv. on attacks vs. others", "Enemies that can't perceive me or be frightened are immune", ]), }, "eagle" : { name : "Eagle Attunement", description: desc("While raging, I can fly at my current speed, but I can only stay aloft during my turn") }, "wolf" : { name : "Wolf Attunement", description: desc("If my melee attack hits while raging, I can knock prone as a bonus action (up to Large)"), action : [["bonus action", " (raging: knock prone)"]] } } } }); AddSubClass("bard", "college of valor", { regExpSearch : /^(?=.*(college|bard|minstrel|troubadour|jongleur))(?=.*valor).*$/i, subname : "College of Valor", subnameshort: "Valor", source : [["P", 55]], attacks : [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], features : { "subclassfeature3" : { name : "Bonus Proficiencies", source : [["P", 55]], minlevel : 3, description: desc("I gain proficiency with medium armor, shields, and martial weapons"), armorProfs : [false, true, false, true], weaponProfs : [false, true] }, "subclassfeature3.1" : { name : "Combat Inspiration", source : [["P", 55]], minlevel : 3, description: desc([ "My Bardic Inspiration can also be used to add the die to a weapon damage roll", "Alternatively, it can be used as a reaction to add the die to AC against one attack", ]), }, "subclassfeature14" : { name : "Battle Magic", source : [["P", 55]], minlevel : 14, description: desc("As a bonus action when I use my action to cast a bard spell, I can make a weapon attack"), action : [["bonus action", " (with Bard spell)"]] } } }); AddSubClass("cleric", "knowledge domain", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*(knowledge|wisdom|learning)).*$/i, subname : "Knowledge Domain", subnameshort: "Knowledge", source : [["P", 59]], spellcastingExtra : ["command", "identify", "augury", "suggestion", "nondetection", "speak with dead", "arcane eye", "confusion", "legend lore", "scrying"], features : { "subclassfeature1" : { name : "Blessings of Knowledge", source : [["P", 59]], minlevel : 1, description: desc([ "I learn two languages and gain proficiency and expertise with two skills", "I can choose from the following: Arcana, History, Nature, or Religion", ]), skillstxt : "Choose two from Arcana, History, Nature, and Religion. You also gain expertise with these skills", languageProfs : [2] }, "subclassfeature2" : { name : "Channel Divinity: Knowledge of Ages", source : [["P", 59]], minlevel : 2, description: desc("As an action, I gain proficiency with a chosen skill or tool for 10 minutes"), action : [["action", ""]] }, "subclassfeature6" : { name : "Channel Divinity: Read Thoughts", source : [["P", 59]], minlevel : 6, description: desc([ "As an action, one creature within 60 ft I can see must make a Wisdom save", "If it fails, I can read its surface thoughts for 1 min, as long as it's within 60 ft of me", "As an action, I can end this and cast Suggestion on it (it fails its save automatically)", "If it succeeded on its save, I can't use this feature again on it until I finish a long rest", ]), action : [["action", ""]] }, "subclassfeature8" : { name : "Potent Spellcasting", source : [["P", 60]], minlevel : 8, description : desc("I add my Wisdom modifier to the damage I deal with my cleric cantrips"), calcChanges : GenericClassFeatures["potent spellcasting"].calcChanges }, "subclassfeature17" : { name : "Visions of the Past", source : [["P", 60]], minlevel : 17, description : desc([ "I can see recent events of an object or area by concentrating and praying for 1 min", "I can meditate this way for up to a number of minutes equal to my Wisdom score", "\u2022 Object Reading (after meditating for 1 minute per owner):", " If an owner owned it in the last Wis score in days, I learn how that owner got/lost it", " I also learn the most recent significant event involving the object and the owner", "\u2022 Area Reading (my immediate surroundings, up to a 50-foot cube):", " Going back my Wisdom score in days, per minute I meditate, I learn about one event", " This starts with the most recent event; It can be significant or just important to me" ]), usages : 1, recovery : "short rest" } } }); AddSubClass("cleric", "light domain", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*\b(light|sun|shining)\b).*$/i, subname : "Light Domain", source : [["P", 61]], spellcastingExtra : ["burning hands", "faerie fire", "flaming sphere", "scorching ray", "daylight", "fireball", "guardian of faith", "wall of fire", "flame strike", "scrying"], features : { "subclassfeature1" : { name : "Bonus Cantrip", source : [["P", 61]], minlevel : 1, description: desc("I learn the Light cantrip if I didn't already know it"), spellcastingBonus : [{ name : "Bonus Cantrip (Light)", spells : ["light"], selection : ["light"] }] }, "subclassfeature1.1" : { name : "Warding Flare", source : [["P", 61]], minlevel : 1, description : desc([ "When a creature within 30 ft attacks me and I can see it, I can interpose divine light", "As a reaction, I impose disadv. on the attacker's attack roll (unless it can't be blinded)" ]), usages : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest", action : [["reaction", ""]] }, "subclassfeature2" : { name : "Channel Divinity: Radiance of the Dawn", source : [["P", 61]], minlevel : 2, description: desc([ "As an action, in 30 ft, magical darkness is dispelled and hostiles must make a Con save", "Each takes radiant damage, saves for half, and negates with total cover", ]), additional : ["", "2d10 + 2 damage", "2d10 + 3 damage", "2d10 + 4 damage", "2d10 + 5 damage", "2d10 + 6 damage", "2d10 + 7 damage", "2d10 + 8 damage", "2d10 + 9 damage", "2d10 + 10 dmg", "2d10 + 11 dmg", "2d10 + 12 dmg", "2d10 + 13 dmg", "2d10 + 14 dmg", "2d10 + 15 dmg", "2d10 + 16 dmg", "2d10 + 17 dmg", "2d10 + 18 dmg", "2d10 + 19 dmg", "2d10 + 20 dmg"], action : [["action", ""]] }, "subclassfeature6" : { name : "Improved Flare", source : [["P", 61]], minlevel : 6, description: desc("I can also use my Warding Flare if another is attacked by a creature within 30 ft of me") }, "subclassfeature8" : { name : "Potent Spellcasting", source : [["P", 61]], minlevel : 8, description : desc("I add my Wisdom modifier to the damage I deal with my cleric cantrips"), calcChanges : GenericClassFeatures["potent spellcasting"].calcChanges }, "subclassfeature17" : { name : "Corona of Light", source : [["P", 61]], minlevel : 17, description: desc([ "As an action, I have an aura of 60 ft sunlight and 30 ft dim light for 1 min", "Enemies in the sunlight have disadv. on saves vs. spells that deal fire or radiant damage", ]), action : [["action", " (start/stop)"]] } } }); AddSubClass("cleric", "nature domain", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*\b(nature|natural|animal|element(s|al)?)\b).*$/i, subname : "Nature Domain", source : [["P", 62]], spellcastingExtra : ["animal friendship", "speak with animals", "barkskin", "spike growth", "plant growth", "wind wall", "dominate beast", "grasping vine", "insect plague", "tree stride"], features : { "subclassfeature1" : { name : "Bonus Proficiency", source : [["P", 62]], minlevel : 1, description: desc("I gain proficiency with heavy armor"), armorProfs : [false, false, true, false] }, "subclassfeature1.1" : { name : "Acolyte of Nature", source : [["P", 62]], minlevel : 1, description: desc("I learn a druid cantrip and proficiency with a skill: Animal Handling, Nature, Survival"), skillstxt : "Choose one from Animal Handling, Nature, or Survival", spellcastingBonus : [{ name : "Acolyte of Nature", "class" : "druid", level : [0, 0] }] }, "subclassfeature2" : { name : "Channel Divinity: Charm Animals and Plants", source : [["P", 62]], minlevel : 2, description: desc([ "As an action, all beasts and plants within 30 ft that I can see must make a Wis save", "If failed, each is charmed and friendly to allies and me for 1 min or until damaged", ]), action : [["action", ""]] }, "subclassfeature6" : { name : "Dampen Elements", source : [["P", 62]], minlevel : 6, description: desc([ "As a reaction, if an ally in 30 ft or I takes acid/cold/fire/lightning/thunder damage,", "I can grant resistance against that instance of damage", ]), action : [["reaction", ""]] }, "subclassfeature8" : { name : "Divine Strike", source : [["P", 62]], minlevel : 8, description: desc("Once per turn, when I hit a creature with a weapon attack, I can do extra damage"), additional : levels.map(function (n) { return n < 8 ? "" : "+" + (n < 14 ? 1 : 2) + "d8 cold/fire/lightning damage (choice)"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && v.isWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.cleric.level < 14 ? 1 : 2) + 'd8 cold/fire/lightning damage'; } }, "Once per turn, I can have one of my weapon attacks that hit do extra cold, fire, or lightning damage (my choice)." ] } }, "subclassfeature17" : { name : "Master of Nature", source : [["P", 62]], minlevel : 17, description: desc("As a bonus action, I can command creatures that are charmed by my Channel Divinity"), action : [["bonus action", ""]] } } }); AddSubClass("cleric", "tempest domain", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*\b(tempest|destruction|storm)\b).*$/i, subname : "Tempest Domain", source : [["P", 62]], spellcastingExtra : ["fog cloud", "thunderwave", "gust of wind", "shatter", "call lightning", "sleet storm", "control water", "ice storm", "destructive wave", "insect plague"], features : { "subclassfeature1" : { name : "Bonus Proficiency", source : [["P", 62]], minlevel : 1, description: desc("I gain proficiency with martial weapons and heavy armor"), armorProfs : [false, false, true, false], weaponProfs : [false, true] }, "subclassfeature1.1" : { name : "Wrath of the Storm", source : [["P", 62]], minlevel : 1, description: desc([ "As a reaction, when a creature I can see within 5 ft hits me, I can thunderously rebuke", "It takes 2d8 lightning or thunder damage (my choice) that a Dex save can halve", ]), usages : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest", action : [["reaction", ""]] }, "subclassfeature2" : { name : "Channel Divinity: Destructive Wrath", source : [["P", 62]], minlevel : 2, description: desc("Instead of rolling, I can do maximum damage when I do lightning or thunder damage") }, "subclassfeature6" : { name : "Thunderbolt Strike", source : [["P", 62]], minlevel : 6, description: desc("When I deal lightning damage to a Large or smaller foe, I can push it up to 10 ft away") }, "subclassfeature8" : { name : "Divine Strike", source : [["P", 62]], minlevel : 8, description: desc("Once per turn, when I hit a creature with a weapon attack, I can do extra damage"), additional : levels.map(function (n) { if (n < 8) return ""; return "+" + (n < 14 ? 1 : 2) + "d8 thunder damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && v.isWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.cleric.level < 14 ? 1 : 2) + 'd8 thunder damage'; } }, "Once per turn, I can have one of my weapon attacks that hit do extra thunder damage." ] } }, "subclassfeature17" : { name : "Stormborn", source : [["P", 62]], minlevel : 17, description: desc("Whenever I'm not underground or indoors, I have a fly speed equal to my current speed"), speed : { fly : { spd : "walk", enc : "walk" } } } } }); AddSubClass("cleric", "trickery domain", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*(trickery|trickster|illusion)).*$/i, subname : "Trickery Domain", subnameshort: "Trickery", source : [["P", 63]], spellcastingExtra : ["charm person", "disguise self", "mirror image", "pass without trace", "blink", "dispel magic", "dimension door", "polymorph", "dominate person", "modify memory"], features : { "subclassfeature1" : { name : "Blessing of the Trickster", source : [["P", 63]], minlevel : 1, description: desc([ "As an action, a willing creature I touch (not me) has adv. on Dex (Stealth) checks", "This lasts for 1 hour or until I use it again", ]), action : [["action", ""]] }, "subclassfeature2" : { name : "Channel Divinity: Invoke Duplicity", source : [["P", 63]], minlevel : 2, description : desc([ "As an action, I create illusory duplicates of myself within 30 ft of me for 1 min (conc)", "As a bonus action, I can move them 30 ft to space(s) I can see within 120 ft of me", "I can cast spells as though I were in a duplicate's space, using my own senses", "I have advantage on attacks if the target is within 5 ft of a duplicate and me" ]), additional : levels.map(function (n) { return n < 2 ? "" : (n < 17 ? 1 : 2) + " illusory duplicate" + (n < 17 ? "" : "s"); }), action : [["action", ""], ["bonus action", "Move Duplicate(s)"]] }, "subclassfeature6" : { name : "Channel Divinity: Cloak of Shadows", source : [["P", 63]], minlevel : 6, description: desc("As an action, I become invisible until the end of my next turn or I attack/cast a spell"), action : [["action", ""]] }, "subclassfeature8" : { name : "Divine Strike", source : [["P", 63]], minlevel : 8, description: desc("Once per turn, when I hit a creature with a weapon attack, I can do extra damage"), additional : levels.map(function (n) { return n < 8 ? "" : "+" + (n < 14 ? 1 : 2) + "d8 poison damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && v.isWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.cleric.level < 14 ? 1 : 2) + 'd8 poison damage'; } }, "Once per turn, I can have one of my weapon attacks that hit do extra poison damage." ] } }, "subclassfeature17" : { name : "Improved Duplicity", source : [["P", 63]], minlevel : 17, description : desc([ "When I use Invoke Duplicity, I make four illusory duplicates instead of one", "I can move any number of the illusory duplicates as part of the same bonus action" ]) } } }); AddSubClass("cleric", "war domain", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*\b(war|fighting|conflict)\b).*$/i, subname : "War Domain", source : [["P", 63]], spellcastingExtra : ["divine favor", "shield of faith", "magic weapon", "spiritual weapon", "crusader's mantle", "spirit guardians", "freedom of movement", "stoneskin", "flame strike", "hold monster"], features : { "subclassfeature1" : { name : "Bonus Proficiency", source : [["P", 63]], minlevel : 1, description: desc("I gain proficiency with martial weapons and heavy armor"), armorProfs : [false, false, true, false], weaponProfs : [false, true] }, "subclassfeature1.1" : { name : "War Priest", source : [["P", 63]], minlevel : 1, description: desc("When I use the Attack action, I can make a weapon attack as a bonus action"), usages : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest", action : [["bonus action", " (with Attack action)"]] }, "subclassfeature2" : { name : "Channel Divinity: Guided Strike", source : [["P", 63]], minlevel : 2, description: desc("When I make an attack roll, I can add a +10 bonus to the roll after seeing the d20 roll") }, "subclassfeature6" : { name : "Channel Divinity: War God's Blessing", source : [["P", 63]], minlevel : 6, description : desc([ "As a reaction, when a creature within 30 ft makes an attack roll, I can bless its attack", "The creature then adds a +10 bonus to the roll; I can do this after seeing the d20 roll" ]), action : [["reaction", ""]] }, "subclassfeature8" : { name : "Divine Strike", source : [["P", 63]], minlevel : 8, description: desc("Once per turn, when I hit a creature with a weapon attack, I can do extra damage"), additional : levels.map(function (n) { if (n < 8) return ""; return "+" + (n < 14 ? 1 : 2) + "d8 damage of the weapon's type"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && v.isWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.cleric.level < 14 ? 1 : 2) + 'd8 damage'; } }, "Once per turn, I can have one of my weapon attacks that hit do extra damage." ] } }, "subclassfeature17" : { name : "Avatar of Battle", source : [["P", 63]], minlevel : 17, description: desc("I have resistance to bludgeoning/piercing/slashing damage from nonmagical weapons"), dmgres : [["Bludgeoning", "Bludg. (nonmagical)"], ["Piercing", "Pierc. (nonmagical)"], ["Slashing", "Slash. (nonmagical)"]] } } }); AddSubClass("druid", "circle of the moon", { regExpSearch : /^(?=.*(druid|shaman))((?=.*\bmoon\b)|((?=.*\bmany\b)(?=.*\bforms?\b))).*$/i, subname : "Circle of the Moon", subnameshort: "Moon", source : [["P", 69]], features : { "subclassfeature2" : { name : "Circle Forms", source : [["P", 69]], minlevel : 2, description: desc("I am able to transform into more dangerous animal forms when using Wild Shape") }, "subclassfeature2.wild shape" : { name : "Wild Shape", source : [["P", 66]], minlevel : 2, description : desc([ "As a bonus action, I assume the shape of a beast I have seen before with these rules:", " \u2022 I gain all its game statistics except Intelligence, Wisdom, or Charisma", " \u2022 I get its skill/saving throw prof. while keeping my own, using whichever is higher", " \u2022 I assume the beast's HP and HD; I get mine back when I revert back", " \u2022 I can't cast spells in beast form, but transforming doesn't break concentration", " \u2022 I retain features from class, race, etc., but I don't retain special senses", " \u2022 I can choose whether equipment falls to the ground, merges, or stays worn", " \u2022 I revert if out of time or unconscious; if KOd by damage, excess damage carries over" ]), usages : ClassList.druid.features["subclassfeature2.wild shape"].usages, recovery : "short rest", additional : levels.map(function (n) { if (n < 2) return ""; var cr = Math.max(1, Math.floor(n/3)); var hr = Math.floor(n/2); var limits = n < 4 ? ", no fly/swim" : n < 8 ? ", no fly" : ""; return "CR " + cr + limits + "; " + hr + (limits.length ? " h" : " hours"); }), action : [["bonus action", " (start/stop)"]], eval : function() { processActions(false, "Druid: Wild Shape", ClassList.druid.features["subclassfeature2.wild shape"].action, "Wild Shape"); }, wildshapePageInfo: { uses: ClassList.druid.features["subclassfeature2.wild shape"].wildshapePageInfo.uses, duration: ClassList.druid.features["subclassfeature2.wild shape"].wildshapePageInfo.duration, limitations: levels.map(function (n) { var CR = Math.max(1, Math.floor(n/3)); var limits = n < 4 ? ", no fly/swim" : ", no fly speed"; return n < 8 ? "max CR " + CR + limits : "CR " + CR + "or lower"; }), }, }, "subclassfeature2.1" : { name : "Combat Wild Shape", source : [["P", 69]], minlevel : 2, description: desc([ "As a bonus action while in Wild Shape, I can expend spell slots to heal myself", "I regain 1d8 HP per expended spell slot level; I can use Wild Shape as a bonus action", ]), action : [["bonus action", " (heal)"]], removeeval : function() { processActions(true, "Druid: Wild Shape", ClassList.druid.features["subclassfeature2.wild shape"].action, "Wild Shape"); } }, "subclassfeature6" : { name : "Primal Strike", source : [["P", 69]], minlevel : 6, description: desc("My attacks count as magical while in Wild Shape") }, "subclassfeature10" : { name : "Elemental Wild Shape", source : [["P", 69]], minlevel : 10, description: desc("I can transform into an air/earth/fire/water elemental by expending 2 Wild Shape uses") }, "subclassfeature14" : { name : "Thousand Forms", source : [["P", 69]], minlevel : 14, description: desc("I can cast Alter Self at will without using a spell slot"), spellcastingBonus : [{ name : "Thousand Forms", spells : ["alter self"], selection : ["alter self"], firstCol : "atwill", }] } } }); AddSubClass("fighter", "battle master", { regExpSearch : /^(?=.*(war|fighter|battle|martial))(?=.*master).*$/i, subname : "Battle Master", fullname : "Battle Master", source : [["P", 73]], abilitySave : 1, abilitySaveAlt : 2, features : { "subclassfeature3" : { name : "Combat Superiority", source : [["P", 73]], minlevel : 3, description: desc([ "I gain a number of superiority dice that I can use to fuel special Maneuvers", "I regain all superiority dice after a short rest", ]), additional : ["", "", "d8", "d8", "d8", "d8", "d8", "d8", "d8", "d10", "d10", "d10", "d10", "d10", "d10", "d10", "d10", "d12", "d12", "d12"], usages : [0, 0, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6], recovery : "short rest" }, "subclassfeature3.1" : { name : "Maneuvers", source : [["P", 73]], minlevel : 3, description: desc([ 'Use the "Choose Feature" button above to add a Maneuver to the third page', "I can use a Maneuver by expending a superiority die (only one Maneuver per attack)", ]), additional : levels.map(function (n) { return n < 3 ? "" : (n < 7 ? 3 : n < 10 ? 5 : n < 15 ? 7 : 9) + " known"; }), extraname : "Maneuver", extrachoices : ["Commander's Strike", "Disarming Attack", "Distracting Strike", "Evasive Footwork", "Feinting Attack", "Goading Attack", "Lunging Attack", "Maneuvering Attack", "Menacing Attack", "Parry", "Precision Attack", "Pushing Attack", "Rally", "Riposte", "Sweeping Attack", "Trip Attack"], extraTimes : levels.map(function (n) { return n < 3 ? 0 : n < 7 ? 3 : n < 10 ? 5 : n < 15 ? 7 : 9; }), "commander's strike" : { name : "Commander's Strike", source : [["P", 74]], description: desc([ "I forgo one attack of my Attack action to use a bonus action to direct an ally I see/hear", "The ally can use a reaction to make an attack, adding the superiority die to damage", ]), action : [["bonus action", " (with Attack action)"]] }, "disarming attack" : { name : "Disarming Attack", source : [["P", 74]], description: desc([ "Use after hitting a creature; I add the superiority die to my attack's damage", "Target makes a Strength save or drops a held object of my choice to its feet", ]), }, "distracting strike" : { name : "Distracting Strike", source : [["P", 74]], description: desc([ "Use after hitting a creature; I add the superiority die to my attack's damage", "The next attack of an ally before my next turn has adv. against the creature", ]), }, "evasive footwork" : { name : "Evasive Footwork", source : [["P", 74]], description: desc("Use when moving; I add the superiority die to my AC until I stop moving") }, "feinting attack" : { name : "Feinting Attack", source : [["P", 74]], description: desc([ "As a bonus action, I can feint to gain adv. on my next attack this turn vs. a target in 5 ft", "If the attack hits, I add the superiority die to my attack's damage", ]), action : [["bonus action", ""]] }, "goading attack" : { name : "Goading Attack", source : [["P", 74]], description: desc([ "Use after hitting a creature; I add the superiority die to my attack's damage", "Target makes a Wis save or has disadv. vs. other targets until the end of my next turn", ]), }, "lunging attack" : { name : "Lunging Attack", source : [["P", 74]], description: desc([ "I can spend a superiority die to increase the reach of a melee weapon attack by 5 ft", "If the attack hits, I add the superiority die to my attack's damage", ]), }, "maneuvering attack" : { name : "Maneuvering Attack", source : [["P", 74]], description: desc([ "Use after hitting a creature; I add the superiority die to my attack's damage", "Ally can use reaction to move half speed without opportunity attack from the target", ]), }, "menacing attack" : { name : "Menacing Attack", source : [["P", 74]], description: desc([ "Use after hitting a creature; I add the superiority die to my attack's damage", "Target makes a Wisdom save or is frightened of me until the end of my next turn", ]), }, "parry" : { name : "Parry", source : [["P", 74]], description: desc("When damaged in melee, I can use a reaction to reduce it by superiority die + Dex mod"), action : [["reaction", " (when damaged in melee)"]] }, "precision attack" : { name : "Precision Attack", source : [["P", 74]], description: desc("I add the superiority die to my attack roll, either before or after rolling") }, "pushing attack" : { name : "Pushing Attack", source : [["P", 74]], description: desc([ "Use after hitting a creature; I add the superiority die to the attack's damage", "If target is Large or smaller, it must make a Strength save or be pushed up to 15 ft away", ]), }, "rally" : { name : "Rally", source : [["P", 74]], description: desc("Ally that can see/hear me gets temporary HP equal to superiority die + Charisma mod"), action : [["bonus action", ""]] }, "riposte" : { name : "Riposte", source : [["P", 74]], description: desc([ "When missed in melee, I can use my reaction to make one melee attack vs. the attacker", "If the attack hits, I add the superiority die to my attack's damage", ]), action : [["reaction", " (after missed in melee)"]] }, "sweeping attack" : { name : "Sweeping Attack", source : [["P", 74]], description: desc([ "Use after hitting a creature and a second creature is within 5 ft of the first", "If the original attack roll hits this second creature, it takes the superiority die in damage", ]), }, "trip attack" : { name : "Trip Attack", source : [["P", 74]], description: desc([ "Use after hitting a creature; I add the superiority die to the attack's damage", "If target is Large or smaller, it must make a Strength save or be knocked prone", ]), } }, "subclassfeature3.2" : { name : "Student of War", source : [["P", 73]], minlevel : 3, description: desc("I have proficiency with one artisan's tool set of my choice"), toolProfs : [["Artisan's tools", 1]] }, "subclassfeature7" : { name : "Know Your Enemy", source : [["P", 73]], minlevel : 7, description: desc("If I spend 1 min studying someone, the DM will tell me info about him/her") }, "subclassfeature10" : { name : "Improved Combat Superiority", source : [["P", 74]], minlevel : 10, description: desc("My superiority dice turn into d10s at 10th level and into d12s at 18th level") }, "subclassfeature15" : { name : "Relentless", source : [["P", 74]], minlevel : 15, description: desc("I regain one superiority die if I have no more remaining when I roll initiative") } } }); AddSubClass("fighter", "eldritch knight", { regExpSearch : /^(?!.*(exalted|sacred|holy|divine|nature|natural|purple.*dragon|green|arcane archer))(?=.*(knight|fighter|warrior|militant|warlord|phalanx|gladiator|trooper))(?=.*\b(eldritch|arcane|magic|mage|witch)\b).*$/i, subname : "Eldritch Knight", fullname : "Eldritch Knight", source : [["P", 75]], abilitySave : 4, spellcastingFactor : 3, spellcastingList : { "class" : "wizard", school : ["Evoc", "Abjur"], level : [0, 4] }, spellcastingKnown : { cantrips : [0, 0, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3], spells : [0, 0, 2, 3, 3, 3, 4, 4, 4, 5, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9] }, features : { "action surge" : { name : "Action Surge", source : [["P", 72]], minlevel : 2, description: desc("I can take one additional action on my turn on top of my normally allowed actions"), usages : [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2], recovery : "short rest", additional : ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "30 ft teleport", "30 ft teleport", "30 ft teleport", "30 ft teleport", "30 ft teleport", "30 ft teleport"] }, "subclassfeature3" : { name : "Spellcasting", source : [["P", 75]], minlevel : 3, description: desc("I can cast known wizard cantrips/spells, using Intelligence as my spellcasting ability"), additional : ["", "", "2 cantrips \u0026 3 spells known", "2 cantrips \u0026 4 spells known", "2 cantrips \u0026 4 spells known", "2 cantrips \u0026 4 spells known", "2 cantrips \u0026 5 spells known", "2 cantrips \u0026 6 spells known", "2 cantrips \u0026 6 spells known", "3 cantrips \u0026 7 spells known", "3 cantrips \u0026 8 spells known", "3 cantrips \u0026 8 spells known", "3 cantrips \u0026 9 spells known", "3 cantrips \u0026 10 spells known", "3 cantrips \u0026 10 spells known", "3 cantrips \u0026 11 spells known", "3 cantrips \u0026 11 spells known", "3 cantrips \u0026 11 spells known", "3 cantrips \u0026 12 spells known", "3 cantrips \u0026 13 spells known"], spellcastingBonus : [{ // the spells gained at level 3, 8, 14, 20 name : "From any school", "class" : "wizard", times : [0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4], level : [1, 4] }] }, "subclassfeature3.1" : { name : "Weapon Bond", source : [["P", 75]], minlevel : 3, description: desc([ "I can bond with up to two weapons by spending a short rest with each", "I can't be disarmed of a bonded weapon and I can summon one as a bonus action", ]), action : [["bonus action", ""]] }, "subclassfeature7" : { name : "War Magic", source : [["P", 75]], minlevel : 7, description: desc("When I use my action to cast a cantrip, I can make a weapon attack as a bonus action"), action : [["bonus action", ""]] }, "subclassfeature10" : { name : "Eldritch Strike", source : [["P", 75]], minlevel : 10, description: desc([ "A creature hit by my weapon attack has disadv. on the save vs. the next spell I cast", "This lasts until the end of my next turn", ]), }, "subclassfeature15" : { name : "Arcane Charge", source : [["P", 75]], minlevel : 15, description: desc([ "When I use Action Surge, I can also teleport up to 30 ft to an empty space I can see", "I can do so before or after the extra action", ]), }, "subclassfeature18" : { name : "Improved War Magic", source : [["P", 75]], minlevel : 18, description: desc("When I use my action to cast a spell, I can make a weapon attack as a bonus action"), action : [["bonus action", ""]] } } }); AddSubClass("monk", "way of the four elements", { regExpSearch : /^(?=.*\b(four|4)\b)((?=.*elements?)|((?=.*earth)|(?=.*(wind|air))|(?=.*fire)|(?=.*water)))((?=.*(monk|monastic))|(((?=.*martial)(?=.*(artist|arts)))|((?=.*spiritual)(?=.*warrior)))).*$/i, subname : "Way of the Four Elements", subnameshort: "Four Elements", source : [["P", 80]], features : { "subclassfeature3" : { name : "Disciple of the Elements", source : [["P", 80]], minlevel : 3, description: desc([ "I know Elemental Attunement and additional Elemental Disciplines, depending on level", 'Use the "Choose Feature" button above to add Elemental Disciplines to the third page', "From 5th level onward, I can use additional ki points to increase their spell slot level", "I can trade known Elemental Disciplines for others when I gain new ones", ]), additional : levels.map(function (n) { return n < 3 ? "" : ((n < 6 ? 2 : n < 11 ? 3 : n < 17 ? 4 : 5) + " known; ") + (n < 5 ? 2 : n < 9 ? 3 : n < 13 ? 4 : n < 17 ? 5 : 6) + " max ki"; }), extraname : "Elemental Discipline", extrachoices : ["Breath of Winter (prereq: level 17 monk)", "Clench of the North Wind (prereq: level 6 monk)", "Elemental Attunement", "Eternal Mountain Defense (prereq: level 17 monk)", "Fangs of the Fire Snake", "Fist of Four Thunders", "Fist of Unbroken Air", "Flames of the Phoenix (prereq: level 11 monk)", "Gong of the Summit (prereq: level 6 monk)", "Mist Stance (prereq: level 11 monk)", "Ride the Wind (prereq: level 11 monk)", "River of Hungry Flame (prereq: level 17 monk)", "Rush of the Gale Spirits", "Shape the Flowing River", "Sweeping Cinder Strike", "Water Whip", "Wave of Rolling Earth (prereq: level 17 monk)"], extraTimes : levels.map(function (n) { return n < 3 ? 0 : n < 6 ? 2 : n < 11 ? 3 : n < 17 ? 4 : 5; }), autoSelectExtrachoices : [{ extrachoice : "elemental attunement" }], "elemental attunement" : { name : "Elemental Attunement", source : [["P", 81]], description: desc([ "As an action, I can briefly control elemental forces within 30 ft of me", "I can make a harmless sensory effect, light/snuff light, chill/warm 1 lb for 1 hour,", "or I cause earth/fire/water/mist in a 1 ft cube to shape itself into a form for 1 minute", ]), action : [["action", ""]] }, "breath of winter (prereq: level 17 monk)" : { name : "Breath of Winter", source : [["P", 81]], additional: "6 ki points", description: desc("As an action, I can cast Cone of Cold without material components"), spellcastingBonus : [{ name : "Breath of Winter", spells : ["cone of cold"], selection : ["cone of cold"], firstCol : 6 }], spellFirstColTitle : "Ki", prereqeval : function(v) { return classes.known.monk.level >= 17; }, spellChanges : { "cone of cold" : { components : "V,S", compMaterial : "", allowUpCasting : false, changes : "With the Breath of Winter discipline, I can cast Cone of Cold without a material component." } } }, "clench of the north wind (prereq: level 6 monk)" : { name : "Clench of the North Wind", source : [["P", 81]], additional: "3 ki points", description: desc("As an action, I can cast Hold Person without material components"), spellcastingBonus : [{ name : "Clench of the North Wind", spells : ["hold person"], selection : ["hold person"], firstCol : 3 }], spellFirstColTitle : "Ki", prereqeval : function(v) { return classes.known.monk.level >= 6; }, spellChanges : { "hold person" : { components : "V,S", compMaterial : "", allowUpCasting : false, changes : "With the Clench of the North Wind discipline, I can cast Hold Person without a material component." } } }, "eternal mountain defense (prereq: level 17 monk)" : { // errata from level 11 to level 17 name : "Eternal Mountain Defense", source : [["P", 81]], additional: "5 ki points", description: desc("As an action, I can cast Stoneskin on myself without material components"), spellcastingBonus : [{ name : "Eternal Mountain Defense", spells : ["stoneskin"], selection : ["stoneskin"], firstCol : 5 }], spellFirstColTitle : "Ki", prereqeval : function(v) { return classes.known.monk.level >= 17; }, spellChanges : { "stoneskin" : { range : "Self", components : "V,S", compMaterial : "", description : "I gain resistance to nonmagical Bludgeoning, Piercing, and Slashing damage", changes : "With the Eternal Mountain Defense discipline, I can cast Stoneskin without a material component but only on myself." } } }, "fangs of the fire snake" : { name : "Fangs of the Fire Snake", source : [["P", 81]], additional: "1 ki point", description: desc([ "With Attack action, my unarmed strikes +10 ft reach and deal fire damage this turn", "Also, I can spent an additional 1 ki point to cause an attack to deal +1d10 fire damage", ]), calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == "unarmed strike" && (/^(?=.*fire)(?=.*snake).*$/i).test(v.WeaponTextName)) { fields.Description += (fields.Description ? '; ' : '') + 'After hit, spend 1 ki point for +1d10 fire damage'; fields.Range = 'Melee (15 ft reach)'; fields.Damage_Type = 'fire'; }; }, "If I include the words 'Fire Snake' in the name of an unarmed strike, it gets +10 ft reach, does fire damage, and gains the option to deal +1d10 fire damage by spending 1 additional ki point." ] } }, "fist of four thunders" : { name : "Fist of Four Thunders", source : [["P", 81]], additional: "2 ki points", description: desc("As an action, I can cast Thunderwave"), spellcastingBonus : [{ name : "Fist of Four Thunders", spells : ["thunderwave"], selection : ["thunderwave"], firstCol : 2 }], spellFirstColTitle : "Ki", spellChanges : { "thunderwave" : { allowUpCasting : false, changes : "With the Fist of Four Thunders discipline, I can cast Thunderwave." } } }, "fist of unbroken air" : { name : "Fist of Unbroken Air", source : [["P", 81]], additional: "2 ki points; +1d10/extra ki point", description: desc([ "As an action, target within 30 ft takes 3d10 bludgeoning damage (spend ki for more)", "It is also pushed up to 20 ft away from me and knocked prone", "It can make a Strength save to halve damage and avoid being pushed and knocked prone", ]), action : [["action", ""]] }, "flames of the phoenix (prereq: level 11 monk)" : { name : "Flames of the Phoenix", source : [["P", 81]], additional: "4 ki points", description: desc("As an action, I can cast Fireball without material components"), spellcastingBonus : [{ name : "Flames of the Phoenix", spells : ["fireball"], selection : ["fireball"], firstCol : 4 }], spellFirstColTitle : "Ki", prereqeval : function(v) { return classes.known.monk.level >= 11; }, spellChanges : { "fireball" : { components : "V,S", compMaterial : "", allowUpCasting : false, changes : "With the Flames of the Phoenix discipline, I can cast Fireball without a material component." } } }, "gong of the summit (prereq: level 6 monk)" : { name : "Gong of the Summit", source : [["P", 81]], additional: "3 ki points", description: desc("As an action, I can cast Shatter without material components"), spellcastingBonus : [{ name : "Gong of the Summit", spells : ["shatter"], selection : ["shatter"], firstCol : 3 }], spellFirstColTitle : "Ki", prereqeval : function(v) { return classes.known.monk.level >= 6; }, spellChanges : { "shatter" : { components : "V,S", compMaterial : "", allowUpCasting : false, changes : "With the Gong of the Summit discipline, I can cast Shatter without a material component." } } }, "mist stance (prereq: level 11 monk)" : { name : "Mist Stance", source : [["P", 81]], additional: "4 ki points", description: desc("As an action, I can cast Gaseous Form on myself without material components"), spellcastingBonus : [{ name : "Mist Stance", spells : ["gaseous form"], selection : ["gaseous form"], firstCol : 4 }], spellFirstColTitle : "Ki", prereqeval : function(v) { return classes.known.monk.level >= 11; }, spellChanges : { "gaseous form" : { range : "Self", components : "V,S", compMaterial : "", description : "I turn into a misty cloud with fly 10 ft, resist. to nonmagical dmg, adv. on Str/Dex/saves", changes : "With the Mist Stance discipline, I can cast Gaseous Form without a material component, but only on myself." } } }, "ride the wind (prereq: level 11 monk)" : { name : "Ride the Wind", source : [["P", 81]], additional: "4 ki points", description: desc("As an action, I can cast Fly on myself without material components"), spellcastingBonus : [{ name : "Ride the Wind", spells : ["fly"], selection : ["fly"], firstCol : 4 }], spellFirstColTitle : "Ki", prereqeval : function(v) { return classes.known.monk.level >= 11; }, spellChanges : { "fly" : { range : "Self", components : "V,S", compMaterial : "", description : "I gain 60 ft flying speed", changes : "With the Ride the Wind discipline, I can cast Fly without a material component but only on myself." } } }, "river of hungry flame (prereq: level 17 monk)" : { name : "River of Hungry Flame", source : [["P", 81]], additional: "5 ki points", description: desc("As an action, I can cast Wall of Fire without material components"), spellcastingBonus : [{ name : "River of Hungry Flame", spells : ["wall of fire"], selection : ["wall of fire"], firstCol : 5 }], spellFirstColTitle : "Ki", prereqeval : function(v) { return classes.known.monk.level >= 17; }, spellChanges : { "wall of fire" : { components : "V,S", compMaterial : "", allowUpCasting : false, changes : "With the River of Hungry Flame discipline, I can cast Wall of Fire without a material component." } } }, "rush of the gale spirits" : { name : "Rush of the Gale Spirits", source : [["P", 81]], additional: "2 ki points", description: desc("As an action, I can cast Gust of Wind without material components"), spellcastingBonus : [{ name : "Rush of the Gale Spirits", spells : ["gust of wind"], selection : ["gust of wind"], firstCol : 2 }], spellFirstColTitle : "Ki", spellChanges : { "gust of wind" : { components : "V,S", compMaterial : "", changes : "With the Rush of the Gale Spirits discipline, I can cast Gust of Wind without a material component." } } }, "shape the flowing river" : { name : "Shape the Flowing River", source : [["P", 81]], additional: "1 ki point", description: desc([ "As an action, I can affect ice/water up to a 30-foot cube within 120 ft", "I can switch it between water/ice states and reshape ice up to half its largest dimension", ]), action : [["action", ""]] }, "sweeping cinder strike" : { name : "Sweeping Cinder Strike", source : [["P", 81]], additional: "2 ki points", description: desc("As an action, I can cast Burning Hands"), spellcastingBonus : [{ name : "Sweeping Cinder Strike", spells : ["burning hands"], selection : ["burning hands"], firstCol : 2 }], spellFirstColTitle : "Ki", spellChanges : { "burning hands" : { components : "V,S", compMaterial : "", allowUpCasting : false, changes : "With the Sweeping Cinder Strike discipline, I can cast Burning Hands." } } }, "water whip" : { name : "Water Whip", source : [["P", 81]], additional: "2 ki points; +1d10/extra ki point", description: desc([ "As an action, a creature within 30 ft takes 3d10 bludgeoning damage (spend ki for more)", "It is also knocked prone or pulled up to 25 ft closer to me (my choice)", "It can make a Dexterity save to halve damage and avoid being pulled or knocked prone", ]), action : [["action", ""]] }, "wave of rolling earth (prereq: level 17 monk)" : { name : "Wave of Rolling Earth", source : [["P", 81]], additional: "6 ki points", description: desc("As an action, I can cast Wall of Stone without material components"), spellcastingBonus : [{ name : "Wave of Rolling Earth", spells : ["wall of stone"], selection : ["wall of stone"], firstCol : 6 }], spellFirstColTitle : "Ki", prereqeval : function(v) { return classes.known.monk.level >= 17; }, spellChanges : { "wall of stone" : { components : "V,S", compMaterial : "", changes : "With the Wave of Rolling Earth discipline, I can cast Wall of Stone without a material component." } } } } } }); AddSubClass("monk", "way of shadow", { regExpSearch : /^(?=.*shadow)((?=.*(monk|monastic))|(((?=.*martial)(?=.*(artist|arts)))|((?=.*spiritual)(?=.*warrior)))).*$/i, subname : "Way of Shadow", subnameshort: "Shadow", source : [["P", 80]], features : { "subclassfeature3" : { name : "Shadow Arts", source : [["P", 80]], minlevel : 3, description: desc("I know the Minor Illusion cantrip and can cast certain spells by using ki (see page 3)"), spellcastingBonus : [{ name : "Shadow Arts", spells : ["minor illusion"], selection : ["minor illusion"], }], spellFirstColTitle : "Ki", "shadow spells" : { name : "Shadow Spells", extraname : "Shadow Arts", source : [["P", 80]], additional: "2 ki points", description: desc([ "As an action, I can cast Darkness, Darkvision, Pass Without Trace, or Silence", "I don't require spell slots or material components to cast these spells like this, just ki points", ]), action : [["action", ""]], spellcastingBonus : [{ name : "Shadow Arts", spells : ["darkness", "darkvision", "pass without trace", "silence"], selection : ["darkness", "darkvision", "pass without trace", "silence"], firstCol : 2, times : 4 }] }, autoSelectExtrachoices : [{ extrachoice : "shadow spells" }], spellChanges : { "darkness" : { components : "V", compMaterial : "", changes : "Spell cast with my Shadow Arts don't require material components." }, "darkvision" : { components : "V,S", compMaterial : "", changes : "Spell cast with my Shadow Arts don't require material components." }, "pass without trace" : { components : "V,S", compMaterial : "", changes : "Spell cast with my Shadow Arts don't require material components." } } }, "subclassfeature6" : { name : "Shadow Step", source : [["P", 80]], minlevel : 6, description: desc([ "As a bonus action, I can teleport from and into dim light or darkness within 60 ft", "After I do this, I have adv. on the next melee attack I make before the end of my turn", ]), action : [["bonus action", ""]] }, "subclassfeature11" : { name : "Cloak of Shadows", source : [["P", 80]], minlevel : 11, description: desc("As an action, I can become invisible in dim light or darkness until I attack/cast"), action : [["action", ""]] }, "subclassfeature17" : { name : "Opportunist", source : [["P", 80]], minlevel : 17, description: desc("As a reaction, if a creature in 5 ft is hit by another, I can make a melee attack vs. it"), action : [["reaction", ""]] } } }); AddSubClass("paladin", "oath of the ancients", { regExpSearch : /^(((?=.*(ancient|nature|natural|green|fey|horned))((?=.*paladin)|((?=.*(exalted|sacred|holy|divine))(?=.*(knight|fighter|warrior|warlord|trooper)))))|((?=.*(green|fey|horned))(?=.*(knight|fighter|warrior|warlord|trooper)))).*$/i, subname : "Oath of the Ancients", subnameshort: "Ancients", source : [["P", 87]], features : { "subclassfeature3" : { name : "Channel Divinity: Nature's Wrath", source : [["P", 87]], minlevel : 3, description: desc([ "As an action, a creature I can see within 10 ft must make a Str/Dex save (its choice)", "If it fails this save, it is restrained until it succeeds on a save at the end of its turn", ]), action : [["action", ""]], spellcastingExtra : ["ensnaring strike", "speak with animals", "moonbeam", "misty step", "plant growth", "protection from energy", "ice storm", "stoneskin", "commune with nature", "tree stride"] }, "subclassfeature3.1" : { name : "Channel Divinity: Turn the Faithless", source : [["P", 87]], minlevel : 3, description: desc([ "As an action, all fey/fiends within 30 ft that can hear me must make a Wisdom save", "If one fails, it is turned for 1 minute or until it takes damage and must show true form", "Turned: move away, never within 30 ft of me, no reactions or actions other than Dash", "Turned: may Dodge instead of Dash when nowhere to move and unable to escape bonds", ]), action : [["action", ""]] }, "subclassfeature7" : { name : "Aura of Warding", source : [["P", 87]], minlevel : 7, description: desc("Allies within range and I have resistance to damage from spells"), additional : ["", "", "", "", "", "", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "30-foot aura", "30-foot aura", "30-foot aura"], dmgres : ["Spells"] }, "subclassfeature15" : { name : "Undying Sentinel", source : [["P", 87]], minlevel : 15, description: desc([ "If dropped to 0 hit points and not killed outright, I can choose to stay at 1 hit point", "Additionally, I suffer no drawbacks of old age and can't be aged magically", ]), recovery : "long rest", usages : 1 }, "subclassfeature20" : { name : "Elder Champion", source : [["P", 87]], minlevel : 20, description : desc([ "As an action, I assume the form of a force of nature for 1 minute and gain benefits:", " \u2022 At the start of each of my turns, I regain 10 hit points", " \u2022 I can cast paladin spells with a casting time of 1 action as a bonus action instead", " \u2022 Enemies within 10 ft have disadv. on saves vs. my paladin spells and channel divinity" ]), recovery : "long rest", usages : 1, action : [["action", ""]] } } }); AddSubClass("paladin", "oath of vengeance", { regExpSearch : /^(((?=.*(vengeance|wrath|justice))((?=.*paladin)|((?=.*(exalted|sacred|holy|divine))(?=.*(knight|fighter|warrior|warlord|trooper)))))|((?=.*dark)(?=.*knight))|(?=.*avenger)).*$/i, subname : "Oath of Vengeance", subnameshort: "Vengeance", source : [["P", 88]], features : { "subclassfeature3" : { name : "Channel Divinity: Abjure Enemy", source : [["P", 88]], minlevel : 3, description: desc([ "As an action, one creature within 60 ft that I can see me must make a Wisdom save", "If failed, it is frightened and its speed is 0 despite bonuses; if success, its speed is halved", "This lasts for 1 minute or until it takes damage; Undead/fiends have disadv. on save", ]), action : [["action", ""]], spellcastingExtra : ["bane", "hunter's mark", "hold person", "misty step", "haste", "protection from energy", "banishment", "dimension door", "hold monster", "scrying"] }, "subclassfeature3.1" : { name : "Channel Divinity: Vow of Enmity", source : [["P", 88]], minlevel : 3, description: desc([ "As a bonus action, I utter a vow against a creature I can see within 10 ft", "I get adv. on attacks against it for 1 minute or until it drops to 0 HP or falls unconscious", ]), action : [["bonus action", ""]] }, "subclassfeature7" : { name : "Relentless Avenger", source : [["P", 88]], minlevel : 7, description: desc([ "After I hit with an opportunity attack, I can move 1/2 my speed in the same reaction", "This movement doesn't provoke opportunity attacks", ]), }, "subclassfeature15" : { name : "Soul of Vengeance", source : [["P", 88]], minlevel : 15, description: desc([ "When an enemy I have an active Vow of Enmity against makes an attack, I can react", "As a reaction, I can make a melee weapon attack against it if it is within range", ]), action : [["reaction", " (with Vow of Enmity)"]] }, "subclassfeature20" : { name : "Avenging Angel", source : [["P", 88]], minlevel : 20, description : desc([ "As an action, I gain a flying speed of 60 ft and a 30 ft aura of menace for 1 hour", "When a creature first enters or starts its turn in the aura, it must make a Wis save", "If failed, for 1 min or until it takes damage, it is frightened and attacks vs. it have adv." ]), recovery : "long rest", usages : 1, action : [["action", ""]] } } }); AddSubClass("ranger", "beast master", { regExpSearch : /^(?=.*(animal|beast))((?=.*(master|ranger|strider))|((?=.*(nature|natural|green))(?=.*(knight|fighter|warrior|warlord|trooper)))).*$/i, subname : "Beast Master", fullname : "Beast Master", source : [["P", 93]], features : { "subclassfeature3" : { name : "Ranger's Companion", source : [["P", 93]], minlevel : 3, description : desc([ "It adds my proficiency bonus to AC, attacks, damage, and save/skill proficiencies", "Its hit point maximum equals four times my ranger level if higher than its normal HP", "It takes a turn on my initiative; It takes the Dodge action unless I command it otherwise", "As an action, I can have it take the Attack, Dash, Disengage, or Help action on its turn", "I can still use Extra Attack while commanding it to Attack; No action to order to move" ]), additional : "Beast \u2264Medium and CR \u22641/4", creaturesAdd : [["Ranger's Companion", false, function(AddRemove, prefix) { if (!AddRemove) return; var cObj = MakeCompMenu_CompOptions(prefix, "justCompanions"); if (!cObj.companion || !cObj.companion.length) { var selectedRace = "Wolf"; } else { var compOptions = cObj.companion.map(function(n) { return n[0] }); var selectedRace = AskUserOptions("Select Ranger's Companion", "Select which beast you would like to have as your ranger's companion.\nThis can be any beast that is no larger than Medium and that has a challenge rating of 1/4 or lower.\nYou can change the beast at any time using the \"Companion Options\" button at the top of the Companion page.", compOptions, "radio", true); } ApplyCompRace(selectedRace, prefix, "companion"); }]] }, "subclassfeature7" : { name : "Exceptional Training", source : [["P", 93]], minlevel : 7, description : desc([ "My beast's attacks count as magical for overcoming resistances and immunities", "As a bonus action, I can command it to take the Dash/Disengage/Help action on its turn" ]) }, "subclassfeature11" : { name : "Bestial Fury", source : [["P", 93]], minlevel : 11, description: desc("When I command my beast to use the Attack action, it can attack twice on its turn") }, "subclassfeature15" : { name : "Share Spells", source : [["P", 93]], minlevel : 15, description: desc("When I cast a spell on myself, I can have it also affect my beast if it is within 30 ft") } } }); AddSubClass("rogue", "arcane trickster", { regExpSearch : /^(?=.*(trickster|rogue|miscreant))(?=.*\b(eldritch|arcane|magic|mage|witch)\b).*$/i, subname : "Arcane Trickster", fullname : "Arcane Trickster", source : [["P", 98]], abilitySave : 4, spellcastingFactor : 3, spellcastingList : { "class" : "wizard", school : ["Ench", "Illus"], level : [0, 4] }, spellcastingKnown : { cantrips : [0, 0, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3], spells : [0, 0, 2, 3, 3, 3, 4, 4, 4, 5, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9] }, features : { "subclassfeature3" : { name : "Spellcasting", source : [["P", 98]], minlevel : 3, description: desc("I can cast known wizard cantrips/spells, using Intelligence as my spellcasting ability"), additional : ["", "", "3 cantrips \u0026 3 spells known", "3 cantrips \u0026 4 spells known", "3 cantrips \u0026 4 spells known", "3 cantrips \u0026 4 spells known", "3 cantrips \u0026 5 spells known", "3 cantrips \u0026 6 spells known", "3 cantrips \u0026 6 spells known", "4 cantrips \u0026 7 spells known", "4 cantrips \u0026 8 spells known", "4 cantrips \u0026 8 spells known", "4 cantrips \u0026 9 spells known", "4 cantrips \u0026 10 spells known", "4 cantrips \u0026 10 spells known", "4 cantrips \u0026 11 spells known", "4 cantrips \u0026 11 spells known", "4 cantrips \u0026 11 spells known", "4 cantrips \u0026 12 spells known", "4 cantrips \u0026 13 spells known"], spellcastingBonus : [{ name : "Mage Hand cantrip", // the Mage Hand cantrip gained at level 1 spells : ["mage hand"], selection : ["mage hand"] }, { name : "From any school", // the spells gained at level 3, 8, 14, 20 "class" : "wizard", times : [0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4], level : [1, 4] }] }, "subclassfeature3.1" : { name : "Mage Hand Legerdemain", source : [["P", 98]], minlevel : 3, description : desc([ "As a bonus action, I can direct my Mage Hand", "With a Dex (Sleight of Hand) vs. Wis (Perception) checks, I can do so discreetly", "I can make it invisible and perform the following tasks:", " \u2022 Stow/retrieve an object the hand is holding in a container worn/carried by another", " \u2022 Use thieves' tools to pick locks and disarm traps at range" ]), action : [["bonus action", ""]], spellChanges : { "mage hand" : { description : "Invisible hand, carries 10 lb; 1 bns to control, use thieves' tools, or stow/retrieve obj; only 1 instance", changes : "My Mage Hand Legerdemain class feature expands my use of the Mage Hand cantrip and makes the spectral hand invisible." } } }, "subclassfeature9" : { name : "Magical Ambush", source : [["P", 98]], minlevel : 9, description: desc("When I cast a spell while hidden, the target(s) have disadvantage against that spell") }, "subclassfeature13" : { name : "Versatile Trickster", source : [["P", 98]], minlevel : 13, description: desc("As a bonus action, gain adv. on attacks this turn on creature within 5 ft of Mage Hand"), action : [["bonus action", ""]] }, "subclassfeature17" : { name : "Spell Thief", source : [["P", 98]], minlevel : 17, description: desc([ "As a reaction, after a spell is cast at me, I can try to negate and steal it", "The caster makes a save against my spell DC with his/her spellcasting ability", "On failure, the caster forgets how to cast that spell for eight hours", "If I have a spell slot of a high enough level for it, I learn how to cast it during this time", ]), action : [["reaction", ""]], recovery : "long rest", usages : 1 } } }); AddSubClass("rogue", "assassin", { regExpSearch : /^(?!.*(barbarian|bard|cleric|druid|fighter|monk|paladin|ranger|sorcerer|warlock|wizard))(?=.*assassin).*$/i, subname : "Assassin", fullname : "Assassin", source : [["P", 97]], abilitySave : 2, features : { "subclassfeature3" : { name : "Bonus Proficiencies", source : [["P", 97]], minlevel : 3, description: desc("I am proficient with disguise kits and poisoner's kits"), toolProfs : ["Disguise kit", "Poisoner's kit"] }, "subclassfeature3.1" : { name : "Assassinate", source : [["P", 97]], minlevel : 3, description: desc([ "I have adv. on attack rolls against creatures that have not taken a turn in combat yet", "Any hit I score against a creature that is surprised is a critical hit", ]), }, "subclassfeature9" : { name : "Infiltration Expertise", source : [["P", 97]], minlevel : 9, description: desc("I can create false identities in 7 days for 25 gp") }, "subclassfeature13" : { name : "Imposter", source : [["P", 97]], minlevel : 13, description: desc([ "After 3 hours of studying a person, I can mimic speech, writing, and behavior", "I have advantage on Charisma (Deception) checks to maintain this ruse", ]), }, "subclassfeature17" : { name : "Death Strike", source : [["P", 97]], minlevel : 17, description: desc("When I hit a surprised creature, it must make a Con save or take double damage"), additional : "Save DC: 8 + Dex mod + Proficiency bonus" } } }); AddSubClass("sorcerer", "wild magic", { regExpSearch : /^(?=.*(mage|magus|sorcerer|witch))(?=.*(wild|chaos|chaotic|limbo)).*$/i, subname : "Wild Magic", fullname : "Wild Mage", source : [["P", 103]], features : { "subclassfeature1" : { name : "Wild Magic Surge", source : [["P", 103]], minlevel : 1, description : desc([ "Wild Magic Surges can happen 5% of the time that I cast a sorcerer spell", "This doesn't happen with cantrips and I only take this chance if the DM tells me to", "Metamagic can't affect spells cast because of the surge, but they require no concentration", '"See the "Notes" page for the table"', ]), toNotesPage : [{ name : "Wild Magic Surge Table", source : [["P", 104]], popupName : "Wild Mage's Wild Magic Surge Table, part 1", additional : "results 01-50", note : [ "My spellcasting can unleash surges of untamed magic. Immediately after I cast a sorcerer spell of 1st level or higher, the DM can have me roll a d20. If I roll a 1, a Wild Magic Surge happens. Roll on the table below to create a random magical effect. A surge can happen only once per turn.", "If a Wild Magic effect is a spell, it's too wild to be affected by Metamagic. If it normally requires concentration, it doesn't require concentration in this case; the spell lasts for its full duration.", "d100 Effect", "01-02 Roll on this table at the start of each of your turns for the next minute, ignoring this result on subsequent rolls.", "03-04 For the next minute, you can see any invisible creature if you have line of sight to it.", "05-06 A modron chosen and controlled by the DM appears in an unoccupied space within 5 ft of you, then disappears 1 minute later.", "07-08 You cast fireball as a 3rd-level spell centered on yourself.", "09-10 You cast magic missile as a 5th-level spell.", "11-12 Roll a d10. Your height changes by a number of inches equal to the roll. If the roll is odd, you shrink. If the roll is even, you grow.", "13-14 You cast confusion centered on yourself.", "15-16 For the next minute, you regain 5 hit points at the start of each of your turns.", "17-18 You grow a long beard made of feathers that remains until you sneeze, at which point the feathers explode out from your face.", "19-20 You cast grease centered on yourself.", "21-22 Creatures have disadvantage on saving throws against the next spell you cast in the next minute that involves a saving throw.", "23-24 Your skin turns a vibrant shade of blue. A remove curse spell can end this effect.", "25-26 An eye appears on your forehead for the next minute.", "27-28 For the next minute, all your spells with a casting time feet of 1 action have a casting time of 1 bonus action.", "29-30 You teleport up to 60 ft to an unoccupied space of your choice that you can see.", "31-32 You are transported to the Astral Plane until the end of your next turn, after which time you return to the space you previously occupied or the nearest unoccupied space if that space is occupied.", "33-34 Maximize the damage of the next damaging spell you cast within the next minute.", "35-36 Roll a d10. Your age changes by a number of years equal to the roll. If the roll is odd, you get younger (minimum 1 year old). If the roll is even, you get older.", "37-38 1d6 flumphs controlled by the DM appear in unoccupied spaces within 60 ft of you and are frightened of you. They vanish after 1 minute.", "39-40 You regain 2d10 hit points.", "41-42 You turn into a potted plant until the start of your next turn. While a plant, you are incapacitated and have vulnerability to all damage. If you drop to 0 hit points, your pot breaks, and your form reverts.", "43-44 For the next minute, you can teleport up to 20 ft as a bonus action on each of your turns.", "45-46 You cast levitate on yourself.", "47-48 A unicorn controlled by the DM appears in a space within 5 ft of you, then disappears 1 minute later.", "49-50 You can't speak for the next minute. Whenever you try, pink bubbles float out of your mouth." ] }, { name : "Wild Magic Surge Table", source : [["P", 104]], popupName : "Wild Mage's Wild Magic Surge Table, part 2", additional : "results 51-100", note : [ "d100 Effect", "51-52 A spectral shield hovers near you for the next minute, granting you a +2 bonus to AC and immunity to magic missile.", "53-54 You are immune to being intoxicated by alcohol for the next 5d6 days.", "55-56 Your hair falls out but grows back within 24 hours.", "57-58 For the next minute, any flammable object you touch that isn't being worn or carried by another creature bursts into flame.", "59-60 You regain your lowest-level expended spell slot.", "61-62 For the next minute, you must shout when you speak.", "63-64 You cast fog cloud centered on yourself.", "65-66 Up to three creatures you choose within 30 ft of you take 4d10 lightning damage.", "67-68 You are frightened by the nearest creature until the end of your next turn.", "69-70 Each creature within 30 ft of you becomes invisible for the next minute. The invisibility ends on a creature when it attacks or casts a spell.", "71-72 You gain resistance to all damage for the next minute.", "73-74 A random creature within 60 ft of you becomes poisoned for 1d4 hours.", "75-76 You glow with bright light in a 30-ft radius for the next minute. Any creature that ends its turn within 5 ft of you is blinded until the end of its next turn.", "79-80 Illusory butterflies and flower petals flutter in the air within 10 ft of you for the next minute.", "77-78 You cast polymorph on yourself. If you fail the saving throw, you turn into a sheep for the spell's duration.", "81-82 You can take one additional action immediately.", "83-84 Each creature within 30 ft of you takes 1d10 necrotic damage. You regain hit points equal to the sum of the necrotic damage dealt.", "85-86 You cast mirror image.", "87-88 You cast fly on a random creature within 60 ft of you.", "89-90 You become invisible for the next minute. During that time, other creatures can't hear you. The invisibility ends if you attack or cast a spell.", "91-92 If you die within the next minute, you immediately come back to life as if by the reincarnate spell.", "93-94 Your size increases by one size category for the next minute.", "95-96 You and all creatures within 30 ft of you gain vulnerability to piercing damage for the next minute.", "97-98 You are surrounded by faint, ethereal music for the next minute.", "99-100 You regain all expended sorcery points." ] }] }, "subclassfeature1.1" : { name : "Tides of Chaos", source : [["P", 103]], minlevel : 1, description: desc([ "I can gain advantage on either one attack roll, ability check, or saving throw", "After I cast a 1st-level or higher sorcerer spell, the DM can impose a Wild Magic Surge", "After I roll on the Wild Magic Surge table, I regain my use of Tides of Chaos", ]), recovery : "long rest", usages : 1 }, "subclassfeature6" : { name : "Bend Luck", source : [["P", 103]], minlevel : 6, description: desc("As a reaction, I can add/subtract 1d4 from another's attack roll, ability check, or save"), action : [["reaction", " (2 sorcery points)"]], additional : "2 sorcery points" }, "subclassfeature14" : { name : "Controlled Chaos", source : [["P", 103]], minlevel : 14, description: desc("Whenever I roll on the Wild Magic Surge table, I can roll twice and use either result") }, "subclassfeature18" : { name : "Spell Bombardment", source : [["P", 103]], minlevel : 18, description: desc([ "Once per turn, when I roll spell damage, I can take one damage die that rolled max", "I can then roll this die again and add it to the spell's damage", ]), } } }); AddSubClass("warlock", "the archfey", { regExpSearch : /^(?=.*fey)(?=.*warlock).*$/i, subname : "the Archfey", source : [["P", 109]], spellcastingExtra : ["faerie fire", "sleep", "calm emotions", "phantasmal force", "blink", "plant growth", "dominate beast", "greater invisibility", "dominate person", "seeming"], features : { "subclassfeature1" : { name : "Fey Presence", source : [["P", 109]], minlevel : 1, description: desc([ "As an action, all creatures in a 10-ft cube around me must make a Wisdom save", "If failed, they're all charmed or frightened (my choice) until the end of my next turn", ]), recovery : "short rest", usages : 1, action : [["action", ""]] }, "subclassfeature6" : { name : "Misty Escape", source : [["P", 109]], minlevel : 6, description: desc([ "As a reaction, when I take damage, I can turn invisible and teleport up to 60 ft", "I stay invisible until the start of my next turn or until I attack or cast a spell", ]), action : [["reaction", " (taking damage)"]], recovery : "short rest", usages : 1 }, "subclassfeature10" : { name : "Beguiling Defenses", source : [["P", 109]], minlevel : 10, description: desc([ "As a reaction, when a creature tries to charm me, I can turn the charm back on it", "It must make a Wis save or be charmed by me for 1 minute or until taking damage", "I am immune to being charmed", ]), action : [["reaction", " (when charmed)"]], savetxt : { immune : ["charmed"] } }, "subclassfeature14" : { name : "Dark Delirium", source : [["P", 109]], minlevel : 14, description: desc([ "As an action, a creature within 60 ft must make a Wis save or be charmed/frightened", "This lasts for 1 minute or until my concentration is broken or it takes damage", "During this time, it can't see or hear anything but the illusion, me, and itself", ]), recovery : "short rest", usages : 1, action : [["action", ""]] } } }); AddSubClass("warlock", "the great old one", { regExpSearch : /^(((?=.*(tharizdun|cthulhu))(?=.*warlock))|((?=.*(great|dread))(?=.*(ancient|old))(?=.*\b(one|entity)\b))).*$/i, subname : "the Great Old One", source : [["P", 110]], spellcastingExtra : ["dissonant whispers", "tasha's hideous laughter", "detect thoughts", "phantasmal force", "clairvoyance", "sending", "dominate beast", "evard's black tentacles", "dominate person", "telekinesis"], features : { "subclassfeature1" : { name : "Awakened Mind", source : [["P", 110]], minlevel : 1, description: desc("I can telepathically speak to creatures I can see within 30 ft if they know a language"), // 'to' not 'with', so one-way }, "subclassfeature6" : { name : "Entropic Ward", source : [["P", 110]], minlevel : 6, description: desc([ "As a reaction, when I'm attacked, I can impose disadvantage to that attack roll", "If it misses me, I have adv. on my next attack vs. the attacker during my next turn", ]), action : [["reaction", " (when attacked)"]], recovery : "short rest", usages : 1 }, "subclassfeature10" : { name : "Thought Shield", source : [["P", 110]], minlevel : 10, description: desc([ "No one can read my mind unless I allow it; I have resistance to psychic damage", "When I take psychic damage, the dealer of the psychic damage takes the same amount", ]), dmgres : ["Psychic"] }, "subclassfeature14" : { name : "Create Thrall", source : [["P", 110]], minlevel : 14, description: desc([ "As an action, I can charm an incapacitated humanoid by touch", "While it is charmed, I can communicate with it telepathically if it is on the same plane", "This lasts until the charm is removed (can be by Remove Curse) or I use this again", ]), action : [["action", ""]] } } }); AddSubClass("wizard", "abjuration", { regExpSearch : /abjuration|abjurer/i, subname : "School of Abjuration", subnameshort: "Abjuration", fullname : "Abjurer", source : [["P", 115]], features : { "subclassfeature2" : { name : "Abjuration Savant", source : [["P", 115]], minlevel : 2, description: desc("I halve the gp and time needed to copy abjuration spells into my spellbook") }, "subclassfeature2.1" : { name : "Arcane Ward", source : [["P", 115]], minlevel : 2, description: desc([ "Whenever I cast an 1st-level or higher abjuration spell, I make/heal a ward", "I make it at max HP; When I cast again, it heals two HP per spell level", "It stays active at 0 HP and doesn't go away until my next long rest", "If I take damage, the ward takes the damage instead, but excess damage carries over", ]), additional : levels.map( function(n) { return n < 2 ? "" : "Ward max HP: " + (n * 2) + "+Int mod"; }), usages : 1, recovery : "long rest" }, "subclassfeature6" : { name : "Projected Ward", source : [["P", 115]], minlevel : 6, description: desc("As a reaction, my Arcane Ward can absorb damage done to a creature within 30 ft"), action : [["reaction", ""]] }, "subclassfeature10" : { name : "Improved Abjuration", source : [["P", 115]], minlevel : 10, description: desc("When I cast an abjuration spell requiring an ability check, I add my proficiency bonus"), calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { if (spellKey === "dispel magic" || spellKey === "counterspell") { var profB = Number(How("Proficiency Bonus")); var checkStr = "(" + AbilityScores.names.join("|") + "|spell(casting)?( ability )?) check"; var checkRx = RegExp(checkStr + " \\(([+-]?\\d+)\\)", "i"); var theBonus = profB; if (checkRx.test(spellObj.description)) { var theMatch = spellObj.description.match(checkRx); theBonus += Number(theMatch[2]); if (tDoc.getField("Remarkable Athlete").isBoxChecked(0) === 1 && theMatch[1].test(/Str|Dex|Con/i)) { theBonus -= Math.ceil(profB/2); } else if (tDoc.getField("Jack of All Trades").isBoxChecked(0) === 1) { theBonus -= Math.floor(profB/2); } } else { var theMatch = spellObj.description.match(RegExp(checkStr, "i")); } spellObj.description = spellObj.description.replace(theMatch[0], theMatch[1] + " check (" + (theBonus >= 0 ? "+" : "") + theBonus + ")"); return true; }; }, "I add my proficiency bonus to ability checks required by abjuration spells. This is shown on the spell sheet by a lowered DC or higher bonus on the check." ] } }, "subclassfeature14" : { name : "Spell Resistance", source : [["P", 116]], minlevel : 14, description: desc("I have adv. on spell saves and resistance to damaging spells"), dmgres : ["Spells"], savetxt : { adv_vs : ["spells"] } } } }); AddSubClass("wizard", "conjuration", { regExpSearch : /conjuration|conjurer/i, subname : "School of Conjuration", subnameshort: "Conjuration", fullname : "Conjurer", source : [["P", 116]], features : { "subclassfeature2" : { name : "Conjuration Savant", source : [["P", 116]], minlevel : 2, description: desc("I halve the gp and time needed to copy conjuration spells into my spellbook") }, "subclassfeature2.1" : { name : "Minor Conjuration", source : [["P", 116]], minlevel : 2, description: desc([ "As an action, I can conjure an object up to 3 ft on each side and no more than 10 lbs", "It must be of a form of a nonmagical object I have seen and is created within 10 ft", "The object disappears after 1 hour, if it takes or deals damage, or when I use this again", ]), action : [["action", ""]] }, "subclassfeature6" : { name : "Benign Transposition", source : [["P", 116]], minlevel : 6, description: desc([ "As an action, I can teleport to a place within 30 ft that I can see", "Instead, I can swap places with a willing Small/Medium creature in 30 ft that I can see", "I can do this again after a long rest or casting a 1st-level or higher conjuration spell", ]), usages : 1, recovery : "long rest", action : [["action", ""]] }, "subclassfeature10" : { name : "Focused Conjuration", source : [["P", 116]], minlevel : 10, description: desc("While I am concentrating on a conjuration spell, it can't be broken by taking damage") }, "subclassfeature14" : { name : "Durable Summons", source : [["P", 116]], minlevel : 14, description: desc("Any creature I summon or create with a conjuration spell has 30 temporary hit points"), calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { if (spellKey.indexOf("conjure") !== -1 && !(/barrage|volley|knowbot/i).test(spellKey)) { spellObj.description = spellObj.description.replace(/verbal commands/i, "command").replace(/^summon /i, '') + "; +30 temp hp"; return true; } else if ((/find (greater )?(steed|familiar)/i).test(spellKey)) { spellObj.description = spellObj.description.replace(/Gain the services of a ([^;]+)/i, "A $1 (+30 temp hp)"); return true; } }, "Any creature I summon or create with a conjuration spell gains 30 temporary hit points." ] } } } }); AddSubClass("wizard", "divination", { regExpSearch : /divination|diviner|divinator/i, subname : "School of Divination", subnameshort: "Divination", fullname : "Diviner", source : [["P", 116]], features : { "subclassfeature2" : { name : "Divination Savant", source : [["P", 116]], minlevel : 2, description: desc("I halve the gp and time needed to copy divination spells into my spellbook") }, "subclassfeature2.1" : { name : "Portent", source : [["P", 116]], minlevel : 2, description : desc([ "After a long rest, I roll dice and keep the results to be used before my next long rest", "A result can replace an attack/save/ability check made by me or a creature I can see", "I choose to switch them before the dice to be replaced are rolled; Max once per turn" ]), additional : levels.map( function(n) { return n < 2 ? "" : (n < 14 ? 2 : 3) + "d20 after a long rest"; }) }, "subclassfeature6" : { name : "Expert Divination", source : [["P", 116]], minlevel : 6, description: desc("When I cast a divination spell, I recover a spell slot of a lower level than the one I cast"), additional : "Spell slot < 6th-level" }, "subclassfeature10" : { name : "The Third Eye", source : [["P", 116]], minlevel : 10, description: desc([ "As an action, I gain one of the following until my next short or long rest:", "Darkvision 60ft, see the Ethereal Plane 60ft, read any language, or see invisibility 10ft", ]), recovery : "short rest", usages : 1, action : [["action", ""]] }, "subclassfeature14" : { name : "Greater Portent", source : [["P", 117]], minlevel : 14, description: desc("I can roll 3d20 instead of 2d20 when using my Portent feature") } } }); AddSubClass("wizard", "enchantment", { regExpSearch : /enchantment|enchanter/i, subname : "School of Enchantment", subnameshort: "Enchantment", fullname : "Enchanter", source : [["P", 117]], features : { "subclassfeature2" : { name : "Enchantment Savant", source : [["P", 117]], minlevel : 2, description: desc("I halve the gp and time needed to copy enchantment spells into my spellbook") }, "subclassfeature2.1" : { name : "Hypnotic Gaze", source : [["P", 117]], minlevel : 2, description: desc([ "As an action, a seen enemy within 5 ft must make a Wis save or be charmed", "This doesn't work if it can't see/hear me; It's also incapacitated and reduced to 0 speed", "This lasts until the end of my next turn, but I can use an action to extend the duration", "It also ends if it takes damage, can't see or hear me, or is more than 5 ft from me", "On success or once it ends, I can't use this on it again until after a long rest", ]), action : [["action", ""]], usages : 1, recovery : "long rest" }, "subclassfeature6" : { name : "Instinctive Charm", source : [["P", 117]], minlevel : 6, description: desc([ "As a reaction, when someone I can see in 30 ft attacks me, it must make a Wis save", "If failed, it must instead attack the closest creature within range (not me or self)", "On a success, the target is immune to this until after my long rest; This is a charm effect", ]), action : [["reaction", " (when attacked)"]] }, "subclassfeature10" : { name : "Split Enchantment", source : [["P", 117]], minlevel : 10, description: desc([ "When I cast an enchantment spell with only one target, I can target a second in range", "This does not apply to cantrips", ]), calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { if (spellObj.psionic || !spellObj.level || spellObj.school !== "Ench") return; var startDescr = spellObj.description; switch(spellKey) { case "animal messenger" : spellObj.description = spellObj.description.replace("Tiny beast delivers", "2 tiny beasts deliver single"); break; case "antipathy/sympathy" : spellObj.description = spellObj.description.replace("Creature,", "2 crea, 1"); break; case "heroism" : case "command" : spellObj.description = spellObj.description.replace(/, halt| as spell lasts/i, ""); default : spellObj.description = spellObj.description.replace("1+1/SL", "2 or 1+1/SL").replace(/1 (crea(ture)?|beast|humanoid)/i, "2 $1s").replace(/creas\b/gi, "crea"); } return startDescr !== spellObj.description; }, "My enchantment, single-target 1st-level or higher spells can affect two targets instead of only one." ] } }, "subclassfeature14" : { name : "Alter Memories", source : [["P", 117]], minlevel : 14, description: desc([ "When I cast an enchantment spell that charms, I can have one target be unaware of it", "Also, once before that spell ends, I can have that target forget time while affected", "It must make an Intelligence save or lose up to 1 + Charisma modifier hours of memory", ]), } } }); AddSubClass("wizard", "illusion", { regExpSearch : /illusion|illusionist|illusionary/i, subname : "School of Illusion", subnameshort: "Illusion", fullname : "Illusionist", source : [["P", 118]], features : { "subclassfeature2" : { name : "Illusion Savant", source : [["P", 118]], minlevel : 2, description: desc("I halve the gp and time needed to copy illusion spells into my spellbook") }, "subclassfeature2.1" : { name : "Improved Minor Illusion", source : [["P", 118]], minlevel : 2, description: desc([ "I gain the knowledge of the Minor Illusion cantrip (or another if I already knew it)", "When I cast it, I can create both a sound and an image with a single casting", ]), spellcastingBonus : [{ name : "Minor Illusion cantrip", spells : ["minor illusion"], selection : ["minor illusion"] }], spellChanges : { "minor illusion" : { description : "5-ft cube illusion includes visible and audible; Int(Investigation) check vs. Spell DC; see book", changes : "My Improved Minor Illusion class feature allows me to make both a sound and an image with a single casting." } } }, "subclassfeature6" : { name : "Malleable Illusion", source : [["P", 118]], minlevel : 6, description: desc("After I cast an illusion spell that lasts 1 min or longer, I can use an action to change it"), action : [["action", ""]] }, "subclassfeature10" : { name : "Illusory Self", source : [["P", 118]], minlevel : 10, description: desc("As a reaction, when I'm attacked, I can impose an illusion that makes the attack miss"), action : [["reaction", ""]], recovery : "short rest", usages : 1 }, "subclassfeature14" : { name : "Illusory Reality", source : [["P", 118]], minlevel : 14, description: desc([ "As a bonus action, after I cast a 1st-level or higher illusion spell, I can make it real", "One inanimate, nonmagical object that is part of the illusion becomes real for 1 minute", "The object can't be something that directly harms someone", ]), action : [["bonus action", ""]] } } }); AddSubClass("wizard", "necromancy", { regExpSearch : /necromancy|necromancer|necromantic/i, subname : "School of Necromancy", subnameshort: "Necromancy", fullname : "Necromancer", source : [["P", 118]], features : { "subclassfeature2" : { name : "Necromancy Savant", source : [["P", 118]], minlevel : 2, description: desc("I halve the gp and time needed to copy necromancy spells into my spellbook"), }, "subclassfeature2.1" : { name : "Grim Harvest", source : [["P", 118]], minlevel : 2, description: desc([ "Once per turn, when I kill something with a 1st-level or higher spell, I regain hit points", "The number of hit points regained is 2\xD7 the spell's level (or 3\xD7 with necromancy spells)", "This doesn't occur for constructs/undead", ]), }, "subclassfeature6" : { name : "Undead Thralls", source : [["P", 119]], minlevel : 6, description: desc([ "I add Animate Dead to my spellbook and can have an additional target when casting it", "Undead created by my necromancy spells have the following benefits:", "They add my proficiency bonus to damage and my wizard level to their HP maximums", ]), spellcastingBonus : [{ name : "Undead Thralls", spells : ["animate dead"], selection : ["animate dead"], }], spellChanges : { "animate dead" : { description : "Turn corpses into 2+2/SL Skeletons or Zombies; control for 24h; bns a command within 60 ft", changes : "My Undead Thralls class feature allows me to animate one more corpse than normal with Animate Dead.", }, }, }, "subclassfeature10" : { name : "Inured to Undead", source : [["P", 119]], minlevel : 10, description: desc("I have resistance to necrotic damage and my hit point maximum can't be reduced"), dmgres : ["Necrotic"] }, "subclassfeature14" : { name : "Command Undead", source : [["P", 11]], minlevel : 14, description: desc([ "As an action, an undead within 60 ft that I can see must make a Charisma save", "If its Int is > 7, it has adv. on the save; If its Int is > 11, it repeats the save every hour", "If failed, it becomes friendly to me and obeys my commands until I use this on another", "On success, it becomes permanently immune to my further attempts", ]), action : [["action", ""]] } } }); AddSubClass("wizard", "transmutation", { regExpSearch : /transmutation|transmuter/i, subname : "School of Transmutation", subnameshort: "Transmutation", fullname : "Transmuter", source : [["P", 119]], features : { "subclassfeature2" : { name : "Transmutation Savant", source : [["P", 119]], minlevel : 2, description: desc("I halve the gp and time needed to copy transmutation spells into my spellbook") }, "subclassfeature2.1" : { name : "Minor Alchemy", source : [["P", 119]], minlevel : 2, description: desc([ "I can transform an object of wood/stone/iron/copper/silver into another of those", "For each 10 min I spend, I can transform up to 1 cubic foot of the material", "It reverts back when I lose concentration or after 1 hour", ]), }, "subclassfeature6" : { name : "Transmuter's Stone", source : [["P", 119]], minlevel : 6, description : desc([ "In 8 hours, I can create a transmuter's stone that gives its wielder one of the following:", " \u2022 Darkvision 60 ft", " \u2022 10 ft increase to speed while unencumbered", " \u2022 Proficiency in Constitution saving throws", " \u2022 Resistance to either acid, cold, fire, lightning, or thunder damage", "The benefit is chosen at creation; I can have only one active stone at a time", "I can change the benefit when I cast a 1st-level or higher transmutation spell with it" ]) }, "subclassfeature10" : { name : "Shapechanger", source : [["P", 119]], minlevel : 10, description: desc([ "I add Polymorph to my spellbook; I can cast it on myself without using a spell slot", "When I do that, I can only transform into a beast with a challenge rating of 1 or lower", ]), recovery : "short rest", usages : 1, spellcastingBonus : [{ name : "Add to spellbook", spells : ["polymorph"], selection : ["polymorph"] }, { name : "1/SR no spell slot", spells : ["polymorph"], selection : ["polymorph"], firstCol : "oncesr" }], spellChanges : { "polymorph" : { name : "Polymorph (special)", range : "Self", description : "I transformed into a beast of my choice with a CR 1 or lower; see book", changes : "Using my Shapechanger class feature, I can cast Polymorph once per short rest without using a spell slot, but when I do so I can only cast it on myself and transform into a beast." } } }, "subclassfeature14" : { name : "Master Transmuter", source : [["P", 119]], minlevel : 14, description: desc([ "As an action, I can destroy my transmuter's stone and do one of the four following:", "##\u2022 Major Transformation##.", " In 10 minutes, I transmute one nonmagical object up to 5 cubic foot into another", " This new, nonmagical object must be of similar size and mass and equal or less value", "##\u2022 Panacea##.", " One touched has all curses, diseases, and poisons removed and is healed to max HP", "##\u2022 Restore Life##.", " I cast Raise Dead without using spell slots or needing to have it in my spellbook", "##\u2022 Restore Youth##.", " A touched creature's apparent age is reduced by 3d10 years (to a minimum of 13)", ]), action : [["action", ""]] } } }); // Companions CompanionList["undead_thrall"] = { name: "Undead Thralls", nameOrigin: "School of Necromancy 6", nameMenu : "Undead Thrall (School of Necromancy feature)", source: [["P", 119]], includeCheck: function(sCrea, objCrea, iCreaCR, bIsAL) { return /undead/i.test(objCrea.type); }, attributesChange: function(sCrea, objCrea) { objCrea.hp += classes.known.wizard ? classes.known.wizard.level : classes.totallevel; if (!objCrea.attacks) return; objCrea.attacks = objCrea.attacks.map(function(oAtk) { if (oAtk.abilitytodamage !== false && !oAtk.dc) { if (!oAtk.modifiers) { oAtk.modifiers = ["", "oProf"]; } else { oAtk.modifiers[1] += "+oProf"; } } return oAtk; }); }, calcChanges: { hp: function (totalHD, HDobj, prefix) { if (classes.known.wizard) { return [classes.known.wizard.level, "Undead Thralls (wizard level)"]; } else { return [classes.totallevel, "Undead Thralls (character level)"]; } }, }, notes: [{ name: "Undead I create with a necromancy spell", description: "add my wizard level to their hit point maximum and add my proficiency bonus to their weapon damage rolls.", joinString: " ", }], eval: function(prefix, lvl) { // Set HP to use average value, so that the level bonus is automatically included var sHPfld = prefix + "Comp.Use.HP.Max"; var aHPsets = How(sHPfld).split(","); aHPsets[3] = "average"; AddTooltip(sHPfld, undefined, aHPsets.toString()); }, }; // Add the backgrounds that are not in the SRD BackgroundList["charlatan"] = { regExpSearch : /charlatan/i, name : "Charlatan", source : [["P", 128], ["ALbackground", 0]], skills : ["Deception", "Sleight of Hand"], gold : 15, equipleft : [ ["Disguise kit", "", 3], ["Tools for chosen con", "", ""] ], equipright : [ ["Fine clothes", "", 6], ["Belt pouch (with coins)", "", 1] ], feature : "False Identity", trait : [ "I fall in and out of love easily, and am always pursuing someone.", "I have a joke for every occasion, especially occasions where humor is inappropriate.", "Flattery is my preferred trick for getting what I want.", "I'm a born gambler who can't resist taking a risk for a potential payoff.", "I lie about almost everything, even when there's no good reason to.", "Sarcasm and insults are my weapons of choice.", "I keep multiple holy symbols on me and invoke whatever deity might come in useful at any given moment.", "I pocket anything I see that might have some value." ], ideal : [ ["Independence", "Independence: I am a free spirit \u2015 no one tells me what to do. (Chaotic)" ], ["Fairness", "Fairness: I never target people who can't afford to lose a few coins. (Lawful)" ], ["Charity", "Charity: I distribute the money I acquire to the people who really need it. (Good)" ], ["Creativity", "Creativity: I never run the same con twice. (Chaotic)" ], ["Friendship", "Friendship: Material goods come and go. Bonds of friendship last forever. (Good)" ], ["Aspiration", "Aspiration: I'm determined to make something of myself. (Any)" ] ], bond : [ "I fleeced the wrong person and must work to ensure that this individual never crosses paths with me or those I care about.", "I owe everything to my mentor \u2015 a horrible person who's probably rotting in jail somewhere.", "Somewhere out there, I have a child who doesn't know me. I'm making the world better for him or her.", "I come from a noble family, and one day I'll reclaim my lands and title from those who stole them from me.", "A powerful person killed someone I love. Someday soon, I'll have my revenge.", "I swindled and ruined a person who didn't deserve it. I seek to atone for my misdeeds but might never be able to forgive myself." ], flaw : [ "I can't resist a pretty face.", "I'm always in debt. I spend my ill-gotten gains on decadent luxuries faster than I bring them in.", "I'm convinced that no one could ever fool me the way I fool others.", "I'm too greedy for my own good. I can't resist taking a risk if there's money involved.", "I can't resist swindling people who are more powerful than me.", "I hate to admit it and will hate myself for it, but I'll run and preserve my own hide if the going gets tough." ], extra : [ "Select a Favorite Scheme", "Cheat at games of chance", "Shave coins, forge documents", "User/manipulator", "Change identity", "Sleight-of-hand cons", "Sell junk as expensive necessities" ], toolProfs : ["Disguise kit", "Forgery kit"], lifestyle : "comfortable" }; BackgroundList["criminal"] = { regExpSearch : /criminal/i, name : "Criminal", source : [["P", 129], ["ALbackground", 0]], skills : ["Deception", "Stealth"], gold : 15, equipright : [ ["Dark, common clothes with hood", "", 3], ["Crowbar", "", 5], ["Belt pouch (with coins)", "", 1] ], feature : "Criminal Contact", trait : [ "I always have a plan for what to do when things go wrong.", "I am always calm, no matter the situation. I never raise my voice or let my emotions control me.", "The first thing I do in a new place is note the locations of everything valuable \u2015 or where such things could be hidden.", "I would rather make a new friend than a new enemy.", "I am incredibly slow to trust. Those who seem the fairest often have the most to hide.", "I don't pay attention to the risks in a situation. Never tell me the odds.", "The best way to get me to do something is to tell me I can't do it.", "I blow up at the slightest insult." ], ideal : [ ["Honor", "Honor: I don't steal from others in the trade. (Lawful)" ], ["Freedom", "Freedom: Chains are meant to be broken, as are those who would forge them. (Chaotic)" ], ["Charity", "Charity: I steal from the wealthy so that I can help people in need. (Good)" ], ["Greed", "Greed: I will do whatever it takes to become wealthy. (Evil)" ], ["People", "People: I'm loyal to my friends, not to any ideals, and everyone else can take a trip down the Styx for all I care. (Neutral)" ], ["Redemption", "Redemption: There's a spark of good in everyone. (Good)" ] ], bond : [ "I'm trying to pay off an old debt I owe to a generous benefactor.", "My ill-gotten gains go to support my family.", "Something important was taken from me, and I aim to steal it back.", "I will become the greatest thief that ever lived.", "I'm guilty of a terrible crime. I hope I can redeem myself for it.", "Someone I loved died because of a mistake I made. That will never happen again." ], flaw : [ "When I see something valuable, I can't think about anything but how to steal it.", "When faced with a choice between money and my friends, I usually choose the money.", "If there's a plan, I'll forget it. If I don't forget it, I'll ignore it.", "I have a \"tell\" that reveals when I'm lying.", "I turn tail and run when things look bad.", "An innocent person is in prison for a crime that I committed. I'm okay with that." ], extra : [ "Select a Criminal Specialty", "Blackmailer", "Burglar", "Enforcer", "Fence", "Highway robber", "Hired killer", "Pickpocket", "Smuggler", "Spy" ], toolProfs : [["Gaming set", 1], ["Thieves' tools", "Dex"]], lifestyle : "poor" }; BackgroundList["entertainer"] = { regExpSearch : /(entertainer|actor|dancer|fire.?eater|jester|juggler|instrumentalist|poet|singer|storyteller|tumbler)/i, name : "Entertainer", source : [["P", 130], ["ALbackground", 0]], skills : ["Acrobatics", "Performance"], gold : 15, equipright : [ ["Costume", "", 4], ["Favor of an admirer", "", ""], ["Belt pouch (with coins)", "", 1], ["Musical instrument of my choice", "", ""] ], feature : "By Popular Demand", trait : [ "I know a story relevant to almost every situation.", "Whenever I come to a new place, I collect local rumors and spread gossip.", "I'm a hopeless romantic, always searching for that 'special someone'.", "Nobody stays angry at me or around me for long, since I can defuse any amount of tension.", "I love a good insult, even one directed at me.", "I get bitter if I'm not the center of attention.", "I'll settle for nothing less than perfection.", "I change my mood or my mind as quickly as I change key in a song." ], ideal : [ ["Beauty", "Beauty: When I perform, I make the world better than it was. (Good)" ], ["Tradition", "Tradition: The stories, legends, and songs of the past must never be forgotten, for they teach us who we are. (Lawful)" ], ["Creativity", "Creativity: The world is in need of new ideas and bold action. (Chaotic)" ], ["Greed", "Greed: I'm only in it for the money and fame. [Evil]" ], ["People", "People: I like seeing the smiles on people's faces when I perform. That's all that matters. (Neutral)" ], ["Honesty", "Honesty: Art should reflect the soul; it should come from within and reveal who we really are. (Any)" ] ], bond : [ "My instrument is my most treasured possession, and it reminds me of someone I love.", "Someone stole my precious instrument, and someday I'll get it back.", "I want to be famous, whatever it takes.", "I idolize a hero of the old tales and measure my deeds against that person's.", "I will do anything to prove myself superior to my hated rival.", "I would do anything for the other members of my old troupe." ], flaw : [ "I'll do anything to win fame and renown.", "I'm a sucker for a pretty face.", "A scandal prevents me from ever going home again. That kind of trouble seems to follow me around.", "I once satirized a noble who still wants my head. It was a mistake that I will likely repeat.", "I have trouble keeping my true feelings hidden. My sharp tongue lands me in trouble.", "Despite my best efforts, I am unreliable to my friends." ], extra : [ "Select an Entertainer Routine", "Actor", "Dancer", "Fire-eater", "Jester", "Juggler", "Instrumentalist", "Poet", "Singer", "Storyteller", "Tumbler" ], toolProfs : ["Disguise kit", ["Musical instrument", 1]], lifestyle : "modest" }; BackgroundList["folk hero"] = { regExpSearch : /^(?=.*folk)(?=.*hero).*$/i, name : "Folk Hero", source : [["P", 131], ["ALbackground", 0]], skills : ["Animal Handling", "Survival"], gold : 10, equipleft : [ ["Set of artisan's tools", "", ""], ["Shovel", "", 5], ["Iron pot", "", 10] ], equipright : [ ["Common clothes", "", 3], ["Belt pouch (with coins)", "", 1] ], feature : "Rustic Hospitality", trait : [ "I judge people by their actions, not their words.", "If someone is in trouble, I'm always ready to lend help.", "When I set my mind to something, I follow through no matter what gets in my way.", "I have a strong sense of fair play and always try to find the most equitable solution to arguments.", "I'm confident in my own abilities and do what I can to instill confidence in others.", "Thinking is for other people. I prefer action.", "I misuse long words in an attempt to sound smarter.", "I get bored easily. When am I going to get on with my destiny?" ], ideal : [ ["Respect", "Respect: People deserve to be treated with dignity and respect. (Good)" ], ["Fairness", "Fairness: No one should get preferential treatment before the law, and no one is above the law. (Lawful)" ], ["Freedom", "Freedom: Tyrants must not be allowed to oppress the people. (Chaotic)" ], ["Might", "Might: If I become strong, I can take what I want\u2015 what I deserve. (Evil)" ], ["Sincerity", "Sincerity: There's no good in pretending to be something I'm not. (Neutral)" ], ["Destiny", "Destiny: Nothing and no one can steer me away from my higher calling. (Any)" ] ], bond : [ "I have a family, but I have no idea where they are. One day, I hope to see them again.", "I worked the land, I love the land, and I will protect the land.", "A proud noble once gave me a horrible beating, and I will take my revenge on any bully I encounter.", "My tools are symbols of my past life, and I carry them so that I will never forget my roots.", "I protect those who cannot protect themselves.", "I wish my childhood sweetheart had come with me to pursue my destiny." ], flaw : [ "The tyrant who rules my land will stop at nothing to see me killed.", "I'm convinced of the significance of my destiny, and blind to my shortcomings and the risk of failure.", "The people who knew me when I was young know my shameful secret, so I can never go home again.", "I have a weakness for the vices of the city, especially hard drink.", "Secretly, I believe that things would be better if I were a tyrant lording over the land.", "I have trouble trusting in my allies." ], extra : [ "Select a Defining Event", "I stood up to a tyrant's agents", "I saved people during a natural disaster", "I stood alone against a terrible monster", "I stole from a corrupt merchant for the poor", "I led a militia to fight off an invading army", "I stole weapons from a tyrant to arm the people", "I trained peasantry to fight a tyrant with farm tools", "A decree was rescinded after I led a protest against it", "A magical creature gave me a blessing or insight", "I rose to leadership in a lord's army" ], toolProfs : [["Artisan's tools", 1], "Vehicles (land)"], lifestyle : "modest" }; BackgroundList["guild artisan"] = { regExpSearch : /^(?=.*guild)(?=.*artisan).*$/i, name : "Guild Artisan", source : [["P", 132], ["ALbackground", 0]], skills : ["Insight", "Persuasion"], gold : 15, equipleft : [ ["Set of artisan's tools", "", ""], ["Letter of introduction from guild", "", ""] ], equipright : [ ["Traveler's clothes", "", 4], ["Belt pouch (with coins)", "", 1] ], feature : "Guild Membership", trait : [ "I believe that anything worth doing is worth doing right. I can't help it\u2015 I'm a perfectionist.", "I'm a snob who looks down on those who can't appreciate fine art.", "I always want to know how things work and what makes people tick.", "I'm full of witty aphorisms and have a proverb for every occasion.", "I'm rude to people who lack my commitment to hard work and fair play.", "I like to talk at length about my profession.", "I don't part with my money easily and will haggle tirelessly to get the best deal possible.", "I'm well known for my work, and I want to make sure everyone appreciates it. I'm always taken aback when people haven't heard of me." ], ideal : [ ["Community", "Community: It is the duty of all civilized people to strengthen the bonds of community and the security of civilization. (Lawful)" ], ["Generosity", "Generosity: My talents were given to me so that I could use them to benefit the world. (Good)" ], ["Freedom", "Freedom: Everyone should be free to pursue his or her own livelihood. (Chaotic)" ], ["Greed", "Greed: I'm only in it for the money. (Evil)" ], ["People", "People: I'm committed to the people I care about, not to ideals. (Neutral)" ], ["Aspiration", "Aspiration: I work hard to be the best there is at my craft. (Any)" ] ], bond : [ "The workshop where I learned my trade is the most important place in the world to me.", "I created a great work for someone, and then found them unworthy to receive it. I'm still looking for someone worthy.", "I owe my guild a great debt for forging me into the person I am today.", "I pursue wealth to secure someone's love.", "One day I will return to my guild and prove that I am the greatest artisan of them all.", "I will get revenge on the evil forces that destroyed my place of business and ruined my livelihood." ], flaw : [ "I'll do anything to get my hands on something rare or priceless.", "I'm quick to assume that someone is trying to cheat me.", "No one must ever learn that I once stole money from guild coffers.", "I'm never satisfied with what I have\u2015 I always want more.", "I would kill to acquire a noble title.", "I'm horribly jealous of anyone who can outshine my handiwork. Everywhere I go, I'm surrounded by rivals." ], extra : [ "Select a Guild Business", "Alchemists and apothecaries", "Armorers, locksmiths, and finesmiths", "Brewers, distillers, and vintners", "Calligraphers, scribes, and scriveners", "Carpenters, roofers, and plasterers", "Cartographers, surveyors, and chart-makers", "Cobblers and shoemakers", "Cooks and bakers", "Glassblowers and glaziers", "Jewelers and gemcutters", "Leatherworkers, skinners, and tanners", "Masons and stonecutters", "Painters, limners, and sign-makers", "Potters and tile-makers", "Shipwrights and sailmakers", "Smiths and metal-forgers", "Tinkers, pewterers, and casters", "Wagon-makers and wheelwrights", "Weavers and dyers", "Woodcarvers, coopers, and bowyers" ], toolProfs : [["Artisan's tools", 1]], languageProfs : [1], lifestyle : "comfortable" }; BackgroundList["hermit"] = { regExpSearch : /hermit/i, name : "Hermit", source : [["P", 134], ["ALbackground", 0]], skills : ["Medicine", "Religion"], gold : 5, equipleft : [ ["Winter blanket", "", 3], ["Herbalism kit", "", 3] ], equipright : [ ["Common clothes", "", 3], ["Scroll case with notes", "", 1] ], feature : "Discovery", trait : [ "I've been isolated for so long that I rarely speak, preferring gestures and the occasional grunt.", "I am utterly serene, even in the face of disaster.", "The leader of my community had something wise to say on every topic, and I am eager to share that wisdom.", "I feel tremendous empathy for all who suffer.", "I'm oblivious to etiquette and social expectations.", "I connect everything that happens to me to a grand, cosmic plan.", "I often get lost in my own thoughts and contemplation, becoming oblivious to my surroundings.", "I am working on a grand philosophical theory and love sharing my ideas." ], ideal : [ ["Greater Good", "Greater Good: My gifts are meant to be shared with all, not used for my own benefit. (Good)" ], ["Logic", "Logic: Emotions must not cloud our sense of what is right and true, or our logical thinking. (Lawful)" ], ["Free Thinking", "Free Thinking: Inquiry and curiosity are the pillars of progress. (Chaotic)" ], ["Power", "Power: Solitude and contemplation are paths toward mystical or magical power. (Evil)" ], ["Live and Let Live", "Live and Let Live: Meddling in the affairs of others only causes trouble. (Neutral)" ], ["Self-Knowledge", "Self-Knowledge: If you know yourself, there's nothing left to know. (Any)" ] ], bond : [ "Nothing is more important than the other members of my hermitage, order, or association.", "I entered seclusion to hide from the ones who might still be hunting me. I must someday confront them.", "I'm still seeking the enlightenment I pursued in my seclusion, and it still eludes me.", "I entered seclusion because I loved someone I could not have.", "Should my discovery come to light, it could bring ruin to the world.", "My isolation gave me great insight into a great evil that only I can destroy." ], flaw : [ "Now that I've returned to the world, I enjoy its delights a little too much.", "I harbor dark, bloodthirsty thoughts that my isolation and meditation failed to quell.", "I am dogmatic in my thoughts and philosophy.", "I let my need to win arguments overshadow friendships and harmony.", "I'd risk too much to uncover a lost bit of knowledge.", "I like keeping secrets and won't share them with anyone." ], extra : [ "Select a Life of Seclusion", "Searching for spiritual enlightenment", "Living in accordance with a religious order", "Exiled for a crime I didn't commit", "Retreated from society after a life-altering event", "Worked on my art, literature, music, or manifesto", "Commune with nature, far from civilization", "Caretaker of an ancient ruin or relic", "Pilgrim in search of a thing of spiritual significance" ], toolProfs : ["Herbalism kit"], languageProfs : [1], lifestyle : "poor" }; BackgroundList["noble"] = { regExpSearch : /^(?!.*(waterdhavian|waterdeep|knight))(?=.*noble).*$/i, name : "Noble", source : [["P", 135], ["ALbackground", 0]], skills : ["History", "Persuasion"], gold : 25, equipleft : [ ["Scroll of pedigree", "", ""] ], equipright : [ ["Fine clothes", "", 6], ["Signet ring", "", ""], ["Purse (with coins)", "", 1] ], feature : "Position of Privilege", trait : [ "My eloquent flattery makes everyone I talk to feel like the most wonderful and important person in the world.", "The common folk love me for my kindness and generosity.", "No one could doubt by looking at my regal bearing that I am a cut above the unwashed masses.", "I take great pains to always look my best and follow the latest fashions.", "I don't like to get my hands dirty, and I won't be caught dead in unsuitable accommodations.", "Despite my noble birth, I do not place myself above other folk. We all have the same blood.", "My favor, once lost, is lost forever.", "If you do me an injury, I will crush you, ruin your name, and salt your fields." ], ideal : [ ["Respect", "Respect: Respect is due to me because of my position, but all people regardless of station deserve to be treated with dignity. (Good)" ], ["Responsibility", "Responsibility: It is my duty to respect the authority of those above me, just as those below me must respect mine. (Lawful)" ], ["Independence", "Independence: I must prove that I can handle myself without the coddling of my family. (Chaotic)" ], ["Power", "Power: If I can attain more power, no one will tell me what to do. (Evil)" ], ["Family", "Family: Blood runs thicker than water. (Any)" ], ["Noble Obligation", "Noble Obligation: It is my duty to protect and care for the people beneath me. (Good)" ] ], bond : [ "I will face any challenge to win the approval of my family.", "My house's alliance with another noble family must be sustained at all costs.", "Nothing is more important than the other members of my family.", "I am in love with the heir of a family that my family despises.", "My loyalty to my sovereign is unwavering.", "The common folk must see me as a hero of the people." ], flaw : [ "I secretly believe that everyone is beneath me.", "I hide a truly scandalous secret that could ruin my family forever.", "I too often hear veiled insults and threats in every word addressed to me, and I'm quick to anger.", "I have an insatiable desire for carnal pleasures.", "In fact, the world does revolve around me.", "By my words and actions, I often bring shame to my family." ], toolProfs : [["Gaming set", 1]], languageProfs : [1], lifestyle : "wealthy" }; BackgroundList["outlander"] = { regExpSearch : /^(?!.*urban)(?=.*(outlander|forester|trapper|homesteader|guide|exile|outcast|bounty.?hunter|tribal nomad|hunter-gatherer|tribal.?marauder)).*$/i, name : "Outlander", source : [["P", 136], ["ALbackground", 0]], skills : ["Athletics", "Survival"], gold : 10, equipright : [ ["Traveler's clothes", "", 4], ["Staff", "", 4], ["Hunting trap", "", 25], ["Trophy from animal", "", ""], ["Belt pouch (with coins)", "", 1] ], feature : "Wanderer", trait : [ "I'm driven by a wanderlust that led me away from home.", "I watch over my friends as if they were a litter of newborn pups.", "I once ran twenty-five miles without stopping to warn to my clan of an approaching orc horde. I'd do it again if I had to.", "I have a lesson for every situation, drawn from observing nature.", "I place no stock in wealthy or well-mannered folk. Money and manners won't save you from a hungry owlbear.", "I'm always picking things up, absently fiddling with them, and sometimes accidentally breaking them.", "I feel far more comfortable around animals than people.", "I was, in fact, raised by wolves." ], ideal : [ ["Change", "Change: Life is like the seasons, in constant change, and we must change with it. (Chaotic)" ], ["Greater Good", "Greater Good: It is each person's responsibility to make the most happiness for the whole tribe. (Good)" ], ["Honor", "Honor: If I dishonor myself, I dishonor my whole clan. (Lawful)" ], ["Might", "Might: The strongest are meant to rule. (Evil)" ], ["Nature", "Nature: The natural world is more important than all the constructs of civilization. (Neutral)" ], ["Glory", "Glory: I must earn glory in battle, for myself and my clan. (Any)" ] ], bond : [ "My family, clan, or tribe is the most important thing in my life, even when they are far from me.", "An injury to the unspoiled wilderness of my home is an injury to me.", "I will bring terrible wrath down on the evildoers who destroyed my homeland.", "I am the last of my tribe, and it is up to me to ensure their names enter legend.", "I suffer awful visions of a coming disaster and will do anything to prevent it.", "It is my duty to provide children to sustain my tribe." ], flaw : [ "I am too enamored of ale, wine, and other intoxicants.", "There's no room for caution in a life lived to the fullest.", "I remember every insult I've received and nurse a silent resentment toward anyone who's ever wronged me.", "I am slow to trust members of other races, tribes, and societies.", "Violence is my answer to almost any challenge.", "Don't expect me to save those who can't save themselves. It is nature's way that the strong thrive and the weak perish." ], extra : ["Select an Origin", "Forester", "Trapper", "Homesteader", "Guide", "Exile or outcast", "Bounty hunter", "Pilgrim", "Tribal nomad", "Hunter-gatherer", "Tribal marauder" ], toolProfs : [["Musical instrument", 1]], languageProfs : [1], lifestyle : "poor" }; BackgroundList["sage"] = { regExpSearch : /(sage|alchemist|astronomer|academic|librarian|professor|researcher|apprentice|scribe)/i, name : "Sage", source : [["P", 137], ["ALbackground", 0]], skills : ["Arcana", "History"], gold : 10, equipleft : [ ["Ink, 1 ounce bottle of", 1, ""], ["Ink pen (quill)", "", ""], ["Small knife", "", 0.5], ["Letter from dead colleague", "", ""] ], equipright : [ ["Common clothes", "", 3], ["Belt pouch (with coins)", "", 1] ], feature : "Researcher", trait : [ "I use polysyllabic words that convey the impression of great erudition.", "I've read every book in the world's greatest libraries\u2015 or I like to boast that I have.", "I'm used to helping out those who aren't as smart as I am, and I patiently explain anything and everything to others.", "There's nothing I like more than a good mystery.", "I'm willing to listen to every side of an argument before I make my own judgment.", "I . . . speak . . . slowly . . . when talking . . . to idiots, . . . which . . . almost. . . everyone . . . is . . . compared . . . to me.", "I am horribly, horribly awkward in social situations.", "I'm convinced that people are always trying to steal my secrets." ], ideal : [ ["Knowledge", "Knowledge: The path to power and self-improvement is through knowledge. (Neutral)" ], ["Beauty", "Beauty: What is beautiful points us beyond itself toward what is true. (Good)" ], ["Logic", "Logic: Emotions must not cloud our logical thinking. (Lawful)" ], ["No Limits", "No Limits: Nothing should fetter the infinite possibility inherent in all existence. (Chaotic)" ], ["Power", "Power: Knowledge is the path to power and domination. (Evil)" ], ["Self-Improvement", "Self-Improvement: The goal of a life of study is the betterment of oneself. (Any)" ] ], bond : [ "It is my duty to protect my students.", "I have an ancient text that holds terrible secrets that must not fall into the wrong hands.", "I work to preserve a library, university, scriptorium, or monastery.", "My life's work is a series of tomes related to a specific field of lore.", "I've been searching my whole life for the answer to a certain question.", "I sold my soul for knowledge. I hope to do great deeds and win it back." ], flaw : [ "I am easily distracted by the promise of information.", "Most people scream and run when they see a demon. I stop and take notes on its anatomy.", "Unlocking an ancient mystery is worth the price of a civilization.", "I overlook obvious solutions in favor of complicated ones.", "I speak without really thinking through my words, invariably insulting others.", "I can't keep a secret to save my life, or anyone else's." ], extra : ["Select a Specialty", "Alchemist", "Astronomer", "Discredited academic", "Librarian", "Professor", "Researcher", "Wizard's apprentice", "Scribe" ], languageProfs : [2], lifestyle : "modest" }; BackgroundList["sailor"] = { regExpSearch : /sailor/i, name : "Sailor", source : [["P", 139], ["ALbackground", 0]], skills : ["Athletics", "Perception"], gold : 10, equipleft : [ ["Silk rope, feet of", 50, 0.1] ], equipright : [ ["Common clothes", "", 3], ["Belaying pin (club)", "", 2], ["Lucky charm", "", ""], ["Belt pouch (with coins)", "", 1] ], feature : "Ship's Passage", trait : [ "My friends know they can rely on me, no matter what.", "I work hard so that I can play hard when the work is done.", "I enjoy sailing into new ports and making new friends over a flagon of ale.", "I stretch the truth for the sake of a good story.", "To me, a tavern brawl is a nice way to get to know a new city.", "I never pass up a friendly wager.", "My language is as foul as an otyugh nest.", "I like a job well done, especially if I can convince someone else to do it." ], ideal : [ ["Respect", "Respect: The thing that keeps a ship together is mutual respect between captain and crew. (Good)" ], ["Fairness", "Fairness: We all do the work, so we all share in the rewards. (Lawful)" ], ["Freedom", "Freedom: The sea is freedom\u2015 the freedom to go anywhere and do anything. (Chaotic)" ], ["Mastery", "Mastery: I'm a predator, and the other ships on the sea are my prey. (Evil)" ], ["People", "People: I'm committed to my crewmates, not to ideals. (Neutral)" ], ["Aspiration", "Aspiration: Someday I'll own my own ship and chart my own destiny. (Any)" ] ], bond : [ "I'm loyal to my captain first, everything else second.", "The ship is most important\u2015 crewmates and captains come and go.", "I'll always remember my first ship.", "In a harbor town, I have a paramour whose eyes nearly stole me from the sea.", "I was cheated out of my fair share of the profits, and I want to get my due.", "Ruthless pirates murdered my captain and crewmates, plundered our ship, and left me to die. Vengeance will be mine." ], flaw : [ "I follow orders, even if I think they're wrong.", "I'll say anything to avoid having to do extra work.", "Once someone questions my courage, I never back down no matter how dangerous the situation.", "Once I start drinking, it's hard for me to stop.", "I can't help but pocket loose coins and other trinkets I come across.", "My pride will probably lead to my destruction." ], toolProfs : ["Navigator's tools", "Vehicles (water)"], lifestyle : "modest", }; BackgroundList["soldier"] = { regExpSearch : /^(?!.*mercenary)(?=.*soldier).*$/i, name : "Soldier", source : [["P", 140], ["ALbackground", 0]], skills : ["Athletics", "Intimidation"], gold : 10, equipright : [ ["Common clothes", "", 3], ["Insignia of rank", "", ""], ["Trophy from fallen enemy", "", ""], ["Bone dice or playing cards", "", ""], ["Belt pouch (with coins)", "", 1] ], feature : "Military Rank", trait : [ "I'm always respectful and polite.", "I'm haunted by memories of war. I can't get the violent images out of my mind.", "I'm slow to make new friends, because I've lost too many old ones.", "I'm full of inspiring and cautionary tales from my military experience with some relevance to almost every type of combat situation.", "I can stare down an owlbear without flinching.", "I enjoy my strength and like to break things.", "I have a rough sense of humor.", "I approach problems head-on. A simple, direct course is the best path to a solution." ], ideal : [ ["Greater Good", "Greater Good: Our fate is to give our lives in the defense of others. (Good)" ], ["Responsibility", "Responsibility: I do what I have to and follow just authority. (Lawful)" ], ["Independence", "Independence: When people obey orders blindly, they affirm a kind of tyranny. (Chaotic)" ], ["Might", "Might: In life as in war, the mightier force prevails. (Evil)" ], ["Live and Let Live", "Live and Let Live: Ideals aren't worth killing over or going to war for. (Neutral)" ], ["Nation", "Nation: My city, state, or people are the only things that matter. (Any)" ] ], bond : [ "I would still give my life for the people I have served with.", "Someone saved my life on the battlefield. Even now, I would never leave a friend behind.", "My honor is my life.", "I'll never forget the crushing defeat my company endured or the foes who inflicted it.", "Those who fight with me are those worth laying down my life for.", "I fight for those who cannot fight for themselves." ], flaw : [ "The atrocious enemy we faced in battle still leaves me trembling with fear.", "I have little respect for those who are not a tested warrior.", "A disastrous mistake I made in battle cost many lives\u2015 I will do anything to keep that mistake a secret.", "My hatred of my foes is blind and unreasoning. ", "I uphold the law, even if the law causes suffering.", "I'd rather eat my weapon than admit when I'm wrong." ], extra : ["Select a Specialty", "Officer", "Scout", "Infantry", "Cavalry", "Healer", "Quartermaster", "Standard-bearer", "Support staff" ], toolProfs : [["Gaming set", 1], "Vehicles (land)"], lifestyle : "modest" }; BackgroundList["urchin"] = { regExpSearch : /urchin/i, name : "Urchin", source : [["P", 141], ["ALbackground", 0]], skills : ["Sleight of Hand", "Stealth"], gold : 10, equipleft : [ ["Map of the city", "", ""], ["Small knife", "", 0.5] ], equipright : [ ["Common clothes", "", 3], ["Token from my parents", "", ""], ["Pet mouse", "", 0.1], ["Belt pouch (with coins)", "", 1] ], feature : "City Secrets", trait : [ "I keep scraps of food and trinkets hidden away in my pockets.", "I ask questions all the time.", "I like to squeeze into compact places where nobody can harm me.", "I sleep with my back to solid surface, with all that I own embraced tightly in my arms.", "I have bad manners and eat like a pig.", "I expect that anybody who's nice to me is hiding malicious intent.", "I eschew bathing.", "I say, without reserve, what other people are implying or masking." ], ideal : [ ["Respect", "Respect: Everybody, no matter their riches, deserves respect. (Good)" ], ["Community", "Community: We have to take look out for each other, because nobody else will do it for us. (Lawful)" ], ["Change", "Change: The low rise up, and the high and mighty come down. Change is natural. (Chaotic)" ], ["Retribution", "Retribution: The rich need to be shown how it is to live and die in the poor quarters. (Evil)" ], ["People", "People: I help those who help me\u2015 that is what lets us stay alive. (Neutral)" ], ["Aspiration", "Aspiration: I'm going to prove that I'm worthy of a better life. (Any)" ] ], bond : [ "My town or city is my home, and I'll battle those that threaten it.", "I'm the benefactor of an orphanage so others may be kept from enduring what I was forced to endure.", "I owe my life to another urchin who taught me the ways of living in the gutters.", "I owe a debt I can never repay to the person who showed me sympathy.", "I got away from my life of poverty by robbing an influential person, and I'm wanted for it.", "No one else should have to suffer the difficulties I've been through." ], flaw : [ "I will run away from a fight if I'm outnumbered.", "A gold piece already has a lot of value to me, and I'll do just about anything for more of it.", "I will never completely trust another. I only trust myself.", "I would rather use an unfair advantage than fight honorably.", "It's not theft if I have more use for it than someone else.", "People who are incapable of taking care of themselves get what they deserve." ], toolProfs : ["Disguise kit", ["Thieves' tools", "Dex"]], lifestyle : "modest" }; // Add the background variants AddBackgroundVariant("entertainer", "gladiator", { regExpSearch : /gladiator/i, name : "Gladiator", source : [["P", 131], ["ALbackground", 0]], equipright : [ ["Costume", "", 4], ["Favor of an admirer", "", ""], ["Belt pouch (with coins)", "", 1], ["Inexpensive, unusual weapon", "", ""] ], feature : "Are You Entertained?", extra : "" }); AddBackgroundVariant("guild artisan", "guild merchant", { regExpSearch : /^(?=.*guild)(?=.*merchant).*$/i, name : "Guild Merchant", source : [["P", 133], ["ALbackground", 0]], equipleft : [ ["Letter of introduction from guild", "", ""] ], equipright : [ ["Traveler's clothes", "", 4], ["Belt pouch (with coins)", "", 1], ["Cart", "", ""], ["Mule", "", ""] ], extra : [ "Select a Guild Business", "Traders", "Caravan masters", "Shopkeepers" ], toolProfs : ["Navigator's tools (or language)"] }); AddBackgroundVariant("noble", "knight", { regExpSearch : /^(?!.*order)(?=.*knight).*$/i, name : "Knight", source : [["P", 136], ["ALbackground", 0]], equipright : [ ["Fine clothes", "", 6], ["Signet ring", "", ""], ["Purse (with coins)", "", 1], ["Banner or token from devoted love", "", ""] ], feature : "Retainers" }); AddBackgroundVariant("sailor", "pirate", { regExpSearch : /pirate/i, name : "Pirate", source : [["P", 139], ["ALbackground", 0]], feature : "Bad Reputation" }); // Add the backgrounds features that are not in the SRD BackgroundFeatureList["are you entertained?"] = { description : "I can always find a place to perform (arena/pit fight), where I receive free lodging and food of a modest or comfortable standard, as long as I perform each night. In addition, my performance makes me something of a local figure. When strangers recognize me in a town where I have performed, they typically take a liking to me.", source : [["P", 131], ["ALbackground", 0]] }; BackgroundFeatureList["bad reputation"] = { description : "No matter where I go, people are afraid of me due to my reputation. When I am in a civilized settlement, I can get away with minor criminal offenses, such as refusing to pay for food at a tavern or breaking down doors at a local shop, since most people will not report my activity to the authorities.", source : [["P", 139], ["ALbackground", 0]] }; BackgroundFeatureList["by popular demand"] = { description : "I can always find a place to perform (inn/tavern/circus/etc.), where I receive free lodging and food of a modest or comfortable standard, as long as I perform each night. In addition, my performance makes me something of a local figure. When strangers recognize me in a town where I have performed, they typically take a liking to me.", source : [["P", 130], ["ALbackground", 0]] }; BackgroundFeatureList["city secrets"] = { description : "I know the secret patterns and flow to cities and can find passages through the urban sprawl that others would miss. When I am not in combat, I (and companions I lead) can travel between any two locations in the city twice as fast as my speed would normally allow.", source : [["P", 141], ["ALbackground", 0]] }; BackgroundFeatureList["criminal contact"] = { description : "I have a reliable and trustworthy contact who acts as my liaison to a network of other criminals. I know how to get messages to and from my contact, even over great distances; specifically, I know the local messengers, corrupt caravan masters, and seedy sailors who can deliver my messages.", source : [["P", 129], ["ALbackground", 0]] }; BackgroundFeatureList["discovery"] = { description : "The quiet seclusion of my extended hermitage gave me access to a unique and powerful discovery. The exact nature of this revelation depends on the nature of my seclusion. It might be a great truth, a hidden site, a long forgotten fact, or unearthed some relic of the past that could rewrite history.", source : [["P", 134], ["ALbackground", 0]] }; BackgroundFeatureList["false identity"] = { description : "I have created a second identity that includes documentation, established acquaintances, and disguises that allow me to assume that persona. Additionally, I can forge documents, including official papers and personal letters, as long as I have seen an example of the kind of document or the handwriting I am trying to copy.", source : [["P", 128], ["ALbackground", 0]] }; BackgroundFeatureList["guild membership"] = { description : "5 gp membership fees per month: The guild offers lodging if possible. In case of being accused of a crime, the guild will support me if a good case can be made for my innocence or the crime is justifiable. I can also gain access to powerful political figures through the guild, as long as I'm in good standing and the guild is paid enough.", source : [["P", 133], ["ALbackground", 0]] }; BackgroundFeatureList["military rank"] = { description : "I have a military rank from my career as a soldier. Soldiers loyal to my former military organization still recognize my authority and influence. I can invoke my rank to influence soldiers and temporarily requisition simple equipment or horses. I can usually gain access to friendly military encampments and fortresses where my rank is recognized.", source : [["P", 140], ["ALbackground", 0]], }; BackgroundFeatureList["position of privilege"] = { description : "I am welcome in high society, and people assume I have the right to be wherever I am. The common folk make every effort to accommodate me and avoid my displeasure, and other people of high birth treat me as a member of the same social sphere. I can secure an audience with a local noble if I need to.", source : [["P", 135], ["ALbackground", 0]] }; BackgroundFeatureList["researcher"] = { description : "When I attempt to learn or recall a piece of lore, if I do not know that information, I often know where and from whom I can obtain it. Usually, this information comes from a library, scriptorium, university, or a sage or other learned person or creature. Unearthing the deepest secrets of the multiverse can require an adventure or even a whole campaign.", source : [["P", 138], ["ALbackground", 0]] }; BackgroundFeatureList["retainers"] = { description : "I have the service of three retainers loyal to my family, one of whom is another noble and my squire. My other retainers are commoners who can perform mundane tasks for me, but they do not fight for me, will not follow me into obviously dangerous areas (such as dungeons), and will leave if they are frequently endangered or abused.", source : [["P", 136], ["ALbackground", 0]] }; BackgroundFeatureList["rustic hospitality"] = { description : "Since I come from the ranks of the common folk, I fit in among them with ease. I can find a place to hide, rest, or recuperate among other commoners, unless I have shown myself to be a danger to them. They will shield me from the law or anyone else searching for me, though they will not risk their lives for me.", source : [["P", 131], ["ALbackground", 0]] }; BackgroundFeatureList["ship's passage"] = { description : "When I need to, I can secure free passage on a sailing ship for myself and my companions. I might sail on the ship I served on, or another ship I have good relations with. Because I'm calling in a favor, I can't be certain of a schedule or route that will meet my every need. My companions and I are expected to assist the crew during the voyage.", source : [["P", 139], ["ALbackground", 0]] }; BackgroundFeatureList["wanderer"] = { description : "I have an excellent memory for maps and geography, and I can always recall the general layout of terrain, settlements, and other features around me. In addition, I can find food and fresh water for myself and up to five other people each day, provided that the land offers berries, small game, water, and so forth.", source : [["P", 136], ["ALbackground", 0]] }; // Add the feats that are not in the SRD FeatsList["actor"] = { name : "Actor", source : [["P", 165]], descriptionFull : "Skilled at mimicry and dramatics, you gain the following benefits:\n \u2022 Increase your Charisma score by 1, to a maximum of 20.\n \u2022 You have advantage on Charisma (Deception) and Charisma (Performance) checks when trying to pass yourself off as a different person.\n \u2022 You can mimic the speech of another person or the sounds made by other creatures. You must have heard the person speaking, or heard the creature make the sound, for at least 1 minute. A successful Wisdom (Insight) check contested by your Charisma (Deception) check allows a listener to determine that the effect is faked.", description : "Advantage on Charisma (Deception) and (Performance) if trying to pass as another. I can mimic a person's speech or other creature's sounds if I've heard it for at least 1 minute. Wisdom (Insight) vs. Charisma (Deception) to determine the sound is faked. [+1 Charisma]", scores : [0, 0, 0, 0, 0, 1] }; FeatsList["alert"] = { name : "Alert", source : [["P", 165]], descriptionFull : "Always on the lookout for danger, you gain the following benefits:\n \u2022 You gain a +5 bonus to initiative.\n \u2022 You can't be surprised while you are conscious.\n \u2022 Other creatures don't gain advantage on attack rolls against you as a result of being unseen by you.", description : "I can't be surprised while I'm conscious. I have a +5 bonus on initiative rolls. Other creatures don't gain advantage on attack rolls against me as a result of being hidden from me.", addMod : { type : "skill", field : "Init", mod : 5, text : "I have a +5 bonus on initiative rolls." } }; FeatsList["athlete"] = { name : "Athlete", source : [["P", 165]], descriptionFull : "You have undergone extensive physical training to gain the following benefits:\n \u2022 Increase your Strength or Dexterity score by 1, to a maximum of 20.\n \u2022 When you are prone, standing up uses only 5 feet of your movement.\n \u2022 Climbing doesn't cost you extra movement.\n \u2022 You can make a running long jump or a running high jump after moving only 5 feet on foot, rather than 10 feet.", description : "Standing up from prone uses only 5 ft of movement. Climbing doesn't cost me extra movement. I can make a running long jump or a running high jump after moving only 5 feet on foot, rather than 10 feet. [+1 Strength or Dexterity]", scorestxt : "+1 Strength or Dexterity" }; FeatsList["charger"] = { name : "Charger", source : [["P", 165]], descriptionFull : "When you use your action to Dash, you can use a bonus action to make one melee weapon attack or to shove a creature.\n If you move at least 10 feet in a straight line immediately before taking this bonus action, you either gain a +5 bonus to the attack's damage roll (if you chose to make a melee attack and hit) or push the target up to 10 feet away from you (if you chose to shove and you succeed).", description : "As a bonus action after taking the Dash action, I can make one melee weapon attack or shove a creature. If I move at least 10 ft in a straight line before this bonus action, I add +5 damage to the attack or increase the distance up to 10 ft for the shove.", action : [["bonus action", " (after Dash action)"]] }; FeatsList["crossbow expert"] = { name : "Crossbow Expert", source : [["P", 165]], descriptionFull : "Thanks to extensive practice with the crossbow, you gain the following benefits:\n \u2022 You ignore the loading quality of crossbows with which you are proficient.\n \u2022 Being within 5 feet of a hostile creature doesn't impose disadvantage on your ranged attack rolls.\n \u2022 When you use the Attack action and attack with a one-handed weapon, you can use a bonus action to attack with a hand crossbow you are holding.", description : "I ignore the loading quality of crossbows I'm proficient with. I don't suffer disadv. on ranged attack rolls for being within 5 ft of a hostile. When I attack with a one-handed weapon in my Attack action, I can use a bonus action to attack with a hand crossbow I'm holding.", action : [["bonus action", " (with Attack action)"]], calcChanges : { atkAdd : [ function (fields, v) { if (/crossbow/i.test(v.baseWeaponName) && fields.Proficiency) { fields.Description = fields.Description.replace(/(,? ?loading|loading,? ?)/i, ''); }; }, "I ignore the loading quality of crossbows I'm proficient with." ] } }; FeatsList["defensive duelist"] = { name : "Defensive Duelist", source : [["P", 165]], descriptionFull : "When you are wielding a finesse weapon with which you are proficient and another creature hits you with a melee attack, you can use your reaction to add your proficiency bonus to your AC for that attack, potentially causing the attack to miss you.", description : "When wielding a finesse weapon with which I am proficient and another creature hits me with a melee attack, I can use my reaction to add my proficiency bonus to my AC for that attack, potentially causing the attack to miss me.", prerequisite : "Dexterity 13 or higher", prereqeval : function(v) { return What('Dex') >= 13; }, action : [["reaction", " (when hit in melee)"]] }; FeatsList["dual wielder"] = { name : "Dual Wielder", source : [["P", 165]], descriptionFull : "You master fighting with two weapons, gaining the following benefits:\n \u2022 You gain a +1 bonus to AC while you are wielding a separate melee weapon in each hand.\n \u2022 You can use two-weapon fighting even when the one-handed melee weapons you are wielding aren't light.\n \u2022 You can draw or stow two one-handed weapons when you would normally be able to draw or stow only one.", description : "I can use two-weapon fighting even when the one-handed melee weapons I'm wielding aren't light. I can draw or stow two one-handed weapons when I would normally be able to draw or stow only one. +1 AC while wielding separate melee weapons in each hand.", extraAC : { mod : 1, text : "I gain a +1 bonus to AC when holding a melee weapon in each hand.", stopeval : function (v) { return v.usingShield && !(/animated/i).test(What("AC Shield Bonus Description")); } } }; FeatsList["dungeon delver"] = { name : "Dungeon Delver", source : [["P", 166]], descriptionFull : "Alert to the hidden traps and secret doors found in many dungeons, you gain the following benefits:\n \u2022 You have advantage on Wisdom (Perception) and Intelligence (Investigation) checks made to detect the presence of secret doors.\n \u2022 You have advantage on saving throws made to avoid or resist traps.\n \u2022 You have resistance to the damage dealt by traps.\n \u2022 Traveling at a fast pace doesn't impose the normal -5 penalty on your passive Wisdom (Perception) score.", description : "I have adv. on Wis (Perception) and Int (Investigation) checks made to detect the presence of secret doors. I have resistance to damage dealt by traps and advantage on saves to avoid or resist traps. Travelling at a fast pace doesn't impose -5 on my passive Perception.", dmgres : ["Traps"], savetxt : { adv_vs : ["traps"] }, vision : [["Adv. on Perception and Investigation for secret doors", 0], ["No -5 for travelling at fast pace", 0]] }; FeatsList["durable"] = { name : "Durable", source : [["P", 166]], descriptionFull : "Hardy and resilient, you gain the following benefits:\n \u2022 Increase your Constitution score by 1, to a maximum of 20.\n \u2022 When you roll a Hit Die to regain hit points, the minimum number of hit points you regain from the roll equals twice your Constitution modifier (minimum of 2).", description : "When I roll a hit die to regain hit points, the minimum number of hit points I regain from the roll equals twice my Constitution modifier (minimum of 2). [+1 Constitution]", scores : [0, 0, 1, 0, 0, 0] }; FeatsList["elemental adept"] = { name : "Elemental Adept", source : [["P", 166]], descriptionFull : "When you gain this feat, choose one of the following damage types: acid, cold, fire, lightning, or thunder.\n Spells you cast ignore resistance to damage of the chosen type. In addition, when you roll damage for a spell you cast that deals damage of that type, you can treat any 1 on a damage die as a 2.\n\nYou can select this feat multiple times. Each time you do so, you must choose a different damage type.", description : "Choose one of the damage types: acid, cold, fire, lightning, or thunder. Spells I cast ignore resistance to damage from this damage type. For any spell I cast that deals this damage type, I can treat any 1 on a damage die as a 2.", prerequisite : "The ability to cast at least one spell", prereqeval : function(v) { return v.isSpellcaster; }, allowDuplicates : true, choices : ["acid", "cold", "fire", "lightning", "thunder"], "acid" : { description : "Spells I cast ignore resistance to acid damage. For any spell I cast that deals acid damage, I can treat any 1 on a damage die as a 2." }, "cold" : { description : "Spells I cast ignore resistance to cold damage. For any spell I cast that deals cold damage, I can treat any 1 on a damage die as a 2." }, "fire" : { description : "Spells I cast ignore resistance to fire damage. For any spell I cast that deals fire damage, I can treat any 1 on a damage die as a 2." }, "lightning" : { description : "Spells I cast ignore resistance to lightning damage. For any spell I cast that deals lightning damage, I can treat any 1 on a damage die as a 2." }, "thunder" : { description : "Spells I cast ignore resistance to thunder damage. For any spell I cast that deals thunder damage, I can treat any 1 on a damage die as a 2." } }; FeatsList["great weapon master"] = { name : "Great Weapon Master", source : [["P", 167]], descriptionFull : "You've learned to put the weight of a weapon to your advantage, letting its momentum empower your strikes. You gain the following benefits:\n \u2022 On your turn, when you score a critical hit with a melee weapon or reduce a creature to 0 hit points with one, you can make one melee weapon attack as a bonus action.\n \u2022 Before you make a melee attack with a heavy weapon that you are proficient with, you can choose to take a -5 penalty to the attack roll. If the attack hits, you add +10 to the attack's damage.", description : "If I score a critical hit or reduce a creature to 0 hit points with a melee weapon in my turn, I can make one melee weapon attack as a bonus action. With a heavy melee weapon, I can choose to take a -5 penalty on the attack roll for +10 on the attack's damage.", action : [["bonus action", " (after crit or take-down)"]], calcChanges : { atkCalc : [ function (fields, v, output) { if (v.isMeleeWeapon && (/heavy/i).test(fields.Description) && (/\bgwm\b|power.{0,3}attack|great.{0,3}weapon.{0,3}master/i).test(v.WeaponText)) { output.extraDmg += 10; output.extraHit -= 5; }; }, "If I include the words 'Power Attack', 'Great Weapon Master', or just 'GWM' in a heavy melee weapon's name or description, the calculation will put a -5 penalty on the attack's To Hit and +10 on its Damage." ] } }; FeatsList["healer"] = { name : "Healer", source : [["P", 167]], descriptionFull : "You are an able physician, allowing you to mend wounds quickly and get your allies back in the fight. You gain the following benefits:\n \u2022 When you use a healer's kit to stabilize a dying creature, that creature also regains 1 hit point.\n \u2022 As an action, you can spend one use of a healer's kit to tend to a creature and restore 1d6+4 hit points to it, plus additional hit points equal to the creature's maximum number of Hit Dice. The creature can't regain hit points from this feat again until it finishes a short or long rest.", description : "Using a healer's kit to stabilize someone gives them 1 hit point as well. As an action, I can spend one use of a healer's kit to restore 1d6 + 4 + (creature's HD) hit points. After that, the creature can't gain hit points from this feat again until it finishes a short rest.", action : [["action", " (1d6+4+HD with healing kit)"]] }; FeatsList["heavily armored"] = { name : "Heavily Armored", source : [["P", 167]], descriptionFull : "You have trained to master the use of heavy armor, gaining the following benefits:\n \u2022 Increase your Strength score by 1, to a maximum of 20.\n \u2022 You gain proficiency with heavy armor.", description : "I gain proficiency with heavy armor. [+1 Strength]", prerequisite : "Proficiency with medium armor", prereqeval : function(v) { return v.mediumArmorProf; }, scores : [1, 0, 0, 0, 0, 0], armorProfs : [false, false, true, false] }; FeatsList["heavy armor master"] = { name : "Heavy Armor Master", source : [["P", 167]], descriptionFull : "You can use your armor to deflect strikes that would kill others. You gain the following benefits:\n \u2022 While you are wearing heavy armor, bludgeoning, piercing, and slashing damage that you take from nonmagical weapons is reduced by 3.", description : "While wearing heavy armor, bludgeoning, piercing, and slashing damage taken from nonmagical weapons is reduced by 3. [+1 Strength]", prerequisite : "Proficiency with heavy armor", prereqeval : function(v) { return v.heavyArmorProf; }, scores : [1, 0, 0, 0, 0, 0] }; FeatsList["inspiring leader"] = { name : "Inspiring Leader", source : [["P", 167]], descriptionFull : "You can spend 10 minutes inspiring your companions, shoring up their resolve to fight. When you do so, choose up to six friendly creatures (which can include yourself) within 30 feet of you who can see or hear you and who can understand you. Each creature can gain temporary hit points equal to your level + your Charisma modifier. A creature can't gain temporary hit points from this feat again until it has finished a short or long rest.", calculate : "event.value = 'I can spend 10 minutes inspiring up to 6 friendly creatures within 30 feet who can see or hear and can understand me. Each gains lvl (' + What('Character Level') + ') + Cha mod (' + What('Cha Mod') + \") temporary hit points. One can't gain temporary hit points from this feat again until after a short rest.\";", prerequisite : "Charisma 13 or higher", prereqeval : function(v) { return What('Cha') >= 13; } }; FeatsList["keen mind"] = { name : "Keen Mind", source : [["P", 167]], descriptionFull : "You have a mind that can track time, direction, and detail with uncanny precision. You gain the following benefits:\n \u2022 Increase your Intelligence score by 1, to a maximum of 20.\n \u2022 You always know which way is north.\n \u2022 You always know the number of hours left before the next sunrise or sunset.\n \u2022 You can accurately recall anything you have seen or heard within the past month.", description : "I always know which way is north and the number of hours left before the next sunrise or sunset. I can accurately recall anything I have seen or heard within the past month. [+1 Intelligence]", scores : [0, 0, 0, 1, 0, 0] }; FeatsList["lightly armored"] = { name : "Lightly Armored", source : [["P", 167]], descriptionFull : "You have trained to master the use of light armor, gaining the following benefits:\n \u2022 Increase your Strength or Dexterity score by 1, to a maximum of 20.\n \u2022 You gain proficiency with light armor.", description : "I gain proficiency with light armor. [+1 Strength or Dexterity]", scorestxt : "+1 Strength or Dexterity", armorProfs : [true, false, false, false] }; FeatsList["linguist"] = { name : "Linguist", source : [["P", 167]], descriptionFull : "You have studied languages and codes, gaining the following benefits:\n \u2022 Increase your Intelligence score by 1, to a maximum of 20.\n \u2022 You learn three languages of your choice.\n \u2022 You can ably create written ciphers. Others can't decipher a code you create unless you teach them, they succeed on an Intelligence check (DC equal to your Intelligence score + your proficiency bonus), or they use magic to decipher it.", calculate : "event.value = \"I can ably create written ciphers that others can't decipher unless I teach them, they succeed on an Intelligence check DC \" + (Number(What('Int')) + Number(How('Proficiency Bonus'))) + ' (Intelligence score + proficiency bonus), or they use magic to decipher it. I learn three languages of my choice. [+1 Intelligence]';", scores : [0, 0, 0, 1, 0, 0], languageProfs : [3] }; FeatsList["lucky"] = { name : "Lucky", source : [["P", 167]], descriptionFull : "You have inexplicable luck that seems to kick in at just the right moment.\n You have 3 luck points. Whenever you make an attack roll, an ability check, or a saving throw, you can spend one luck point to roll an additional d20. You can choose to spend one of your luck points after you roll the die, but before the outcome is determined. You choose which of the d20s is used for the attack roll, ability check, or saving throw.\n You can also spend one luck point when an attack roll is made against you. Roll a d20, and then choose whether the attack uses the attacker's roll or yours. If more than one creature spends a luck point to influence the outcome of a roll, the points cancel each other out; no additional dice are rolled.\n You regain your expended luck points when you finish a long rest.", description : "Use one of three luck points to roll an extra d20 for attacking, being attacked, an ability check, or a saving throw before the outcome is determined. If more than one creature uses luck, no extra dice are rolled. I regain expended luck points when I finish a long rest.", usages : 3, recovery : "long rest", additional : "attack/check/save" }; FeatsList["mage slayer"] = { name : "Mage Slayer", source : [["P", 168]], descriptionFull : "You have practiced techniques useful in melee combat against spellcasters, gaining the following benefits:\n \u2022 When a creature within 5 feet of you casts a spell, you can use your reaction to make a melee weapon attack against that creature.\n \u2022 When you damage a creature that is concentrating on a spell, that creature has disadvantage on the saving throw it makes to maintain its concentration.\n \u2022 You have advantage on saving throws against spells cast by creatures within 5 feet of you.", description : "As a reaction, I can make a melee weapon attack on a creature within 5 ft of me that casts a spell. Concentration checks from damage from me are made with disadvantage. I have advantage on saving throws against spells cast by creatures within 5 feet of me.", savetxt : { adv_vs : ["spells cast within 5 ft"] }, action : [["reaction", "Melee weapon attack (if spell cast in 5 ft)"]] }; FeatsList["magic initiate"] = { name : "Magic Initiate", source : [["P", 168]], descriptionFull : "Choose a class: bard, cleric, druid, sorcerer, warlock, or wizard. You learn two cantrips of your choice from that class's spell list.\n In addition, choose one 1st-level spell to learn from that same list. Using this feat, you can cast the spell once at its lowest level, and you must finish a long rest before you can cast it in this way again.\n Your spellcasting ability for these spells depends on the class you chose: Charisma for bard, sorcerer, or warlock; Wisdom for cleric or druid: or Intelligence for wizard.", description : "Select a spellcasting class using the square button on this feat line. I learn two cantrips and one 1st-level spell of my choice from that class' spell list. I can cast the 1st-level spell at its lowest level once per long rest without using a spell slot.", calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { if (spName.indexOf("magic initiate") === 0 && spellObj.level > 0) { // test if levels in same class var casterClass = spName.replace(/magic initiate[_-]*/i, ''); if (classes.known[casterClass]) { spellObj.firstCol = "oncelr+markedbox"; } } } ] }, choices : ["Bard", "Cleric", "Druid", "Sorcerer", "Warlock", "Wizard"], "bard" : { description : "I learn two cantrips and one 1st-level spell of my choice from the bard's spell list. I can cast the 1st-level spell at its lowest level once per long rest without using a spell slot. If I'm a bard, I can also cast the 1st-level spell by expending a spell slot as normal. Charisma is my spellcasting ability for these spells.", spellcastingBonus : [{ name : "Bard cantrip", spellcastingAbility : 6, 'class' : 'bard', level : [0, 0], times : 2, }, { name : "Bard 1st-level spell", 'class' : 'bard', level : [1, 1], firstCol : "oncelr", }] }, "cleric" : { description : "I learn two cantrips and one 1st-level spell of my choice from the cleric's spell list. I can cast the 1st-level spell at its lowest level once per long rest without using a spell slot. If I'm a cleric, I can also cast the 1st-level spell by expending a spell slot as normal. Wisdom is my spellcasting ability for these spells.", spellcastingBonus : [{ name : "Cleric cantrip", spellcastingAbility : 5, 'class' : 'cleric', level : [0, 0], times : 2, }, { name : "Cleric 1st-level spell", 'class' : 'cleric', level : [1, 1], firstCol : "oncelr", }] }, "druid" : { description : "I learn two cantrips and one 1st-level spell of my choice from the druid's spell list. I can cast the 1st-level spell at its lowest level once per long rest without using a spell slot. If I'm a druid, I can also cast the 1st-level spell by expending a spell slot as normal. Wisdom is my spellcasting ability for these spells.", spellcastingBonus : [{ name : "Druid cantrip", spellcastingAbility : 5, 'class' : 'druid', level : [0, 0], times : 2, }, { name : "Druid 1st-level spell", 'class' : 'druid', level : [1, 1], firstCol : "oncelr", }] }, "sorcerer" : { description : "I learn two cantrips and one 1st-level spell of my choice from the sorcerer's spell list. I can cast the 1st-level spell at its lowest level once per long rest without using a spell slot. If I'm a sorcerer, I can also cast the 1st-level spell by expending a spell slot as normal. Charisma is my spellcasting ability for these spells.", spellcastingBonus : [{ name : "Sorcerer cantrip", spellcastingAbility : 6, 'class' : 'sorcerer', level : [0, 0], times : 2, }, { name : "Sorcerer 1st-level spell", 'class' : 'sorcerer', level : [1, 1], firstCol : "oncelr", }] }, "warlock" : { description : "I learn two cantrips and one 1st-level spell of my choice from the warlock's spell list. I can cast the 1st-level spell at its lowest level once per long rest without using a spell slot. If I'm a warlock, I can also cast the 1st-level spell by expending a spell slot as normal. Charisma is my spellcasting ability for these spells.", spellcastingBonus : [{ name : "Warlock cantrip", spellcastingAbility : 6, 'class' : 'warlock', level : [0, 0], times : 2, }, { name : "Warlock 1st-level spell", 'class' : 'warlock', level : [1, 1], firstCol : "oncelr", }] }, "wizard" : { description : "I learn two cantrips and one 1st-level spell of my choice from the wizard's spell list. I can cast the 1st-level spell at its lowest level once per long rest without using a spell slot. If I'm a wizard, I can also cast the 1st-level spell by expending a spell slot as normal. Intelligence is my spellcasting ability for these spells.", spellcastingBonus : [{ name : "Wizard cantrip", spellcastingAbility : 4, 'class' : 'wizard', level : [0, 0], times : 2, }, { name : "Wizard 1st-level spell", 'class' : 'wizard', level : [1, 1], firstCol : "oncelr", }] } }; FeatsList["martial adept"] = { name : "Martial Adept", source : [["P", 168]], descriptionFull : "You have martial training that allows you to perform special combat maneuvers. You gain the following benefits:\n \u2022 You learn two maneuvers of your choice from among those available to the Battle Master archetype in the fighter class. If a maneuver you use requires your target to make a saving throw to resist the maneuver's effects, the saving throw DC equals 8 + your proficiency bonus + your Strength or Dexterity modifier (your choice).\n \u2022 You gain one superiority die, which is a d6 (this die is added to any superiority dice you have from another source). This die is used to fuel your maneuvers. A superiority die is expended when you use it. You regain your expended superiority dice when you finish a short or long rest.", description : "", calculate : "event.value = 'I learn two maneuvers of my choice from those available to the Battle Master (2nd page \"Choose Feature\" button). The saving throw DC for this is ' + (8 + Number(How('Proficiency Bonus')) + Math.max(Number(What('Str Mod')), Number(What('Dex Mod')))) + ' (8 + proficiency bonus + Str/Dex mod). I gain one superiority die (d6), which I regain when I finish a short rest.';", bonusClassExtrachoices : [{ "class" : "fighter", "subclass" : "fighter-battle master", "feature" : "subclassfeature3.1", "bonus" : 2 }], extraLimitedFeatures : [{ name : "Combat Superiority", usages : 1, additional : 'd6', recovery : "short rest", addToExisting : true }] }; FeatsList["medium armor master"] = { name : "Medium Armor Master", source : [["P", 168]], descriptionFull : "You have practiced moving in medium armor to gain the following benefits:\n \u2022 Wearing medium armor doesn't impose disadvantage on your Dexterity (Stealth) checks.\n \u2022 When you wear medium armor, you can add 3, rather than 2, to your AC if you have a Dexterity of 16 or higher.", description : "Wearing medium armor doesn't impose disadvantage on my Dexterity (Stealth) checks. When I wear medium armor, I can add up to 3, rather than 2, to my AC if my Dexterity is 16 or higher.", prerequisite : "Proficiency with medium armor", prereqeval : function(v) { return v.mediumArmorProf; }, eval : function () { Value('Medium Armor Max Mod', 3); ApplyArmor(What("AC Armor Description")); }, removeeval : function () { tDoc.resetForm(['Medium Armor Max Mod']); ApplyArmor(What("AC Armor Description")); } }; FeatsList["mobile"] = { name : "Mobile", source : [["P", 168]], descriptionFull : "You are exceptionally speedy and agile. You gain the following benefits:\n \u2022 Your speed increases by 10 feet.\n \u2022 When you use the Dash action, difficult terrain doesn't cost you extra movement on that turn.\n \u2022 When you make a melee attack against a creature, you don't provoke opportunity attacks from that creature for the rest of the turn, whether you hit or not.", description : "When I use the Dash action, difficult terrain doesn't cost me extra movement that turn. When I make a melee attack against a creature, I don't provoke opportunity attacks from that creature for the rest of the turn, whether I hit or not. [+10 ft speed]", speed : { allModes : { bonus : "+10" } } }; FeatsList["moderately armored"] = { name : "Moderately Armored", source : [["P", 168]], descriptionFull : "You have trained to master the use of medium armor and shields, gaining the following benefits:\n \u2022 Increase your Strength or Dexterity score by 1, to a maximum of 20.\n \u2022 You gain proficiency with medium armor and shields.", description : "I gain proficiency with medium armor and shields. [+1 Strength or Dexterity]", prerequisite : "Proficiency with light armor", prereqeval : function(v) { return v.lightArmorProf; }, scorestxt : "+1 Strength or Dexterity", armorProfs : [false, true, false, true] }; FeatsList["mounted combatant"] = { name : "Mounted Combatant", source : [["P", 168]], descriptionFull : "You are a dangerous foe to face while mounted. While you are mounted and aren't incapacitated, you gain the following benefits:\n \u2022 You have advantage on melee attack rolls against any unmounted creature that is smaller than your mount.\n \u2022 You can force an attack targeted at your mount to target you instead.\n \u2022 If your mount is subjected to an effect that allows it to make a Dexterity saving throw to take only half damage, it instead takes no damage if it succeeds on the saving throw, and only half damage if it fails.", description : "I have advantage on melee attack rolls against unmounted creatures smaller than my mount. I can force attacks targeting my mount to target me instead. When a Dex save would halve damage, my mount takes no damage on success and half damage on failure." }; FeatsList["observant"] = { name : "Observant", source : [["P", 168]], descriptionFull : "Quick to notice details of your environment, you gain the following benefits:\n \u2022 Increase your Intelligence or Wisdom score by 1, to a maximum of 20.\n \u2022 If you can see a creature's mouth while it is speaking a language you understand, you can interpret what it's saying by reading its lips.\n \u2022 You have a +5 bonus to your passive Wisdom (Perception) and passive Intelligence (Investigation) scores.", description : "If I can see a creature's mouth while it is speaking a language I understand, I can interpret what it's saying by reading its lips. I have a +5 bonus to passive Wisdom (Perception) and passive Intelligence (Investigation) scores. [+1 Intelligence or Wisdom]", scorestxt : "+1 Intelligence or Wisdom", addMod : { type : "skill", field : "passive perception", mod : 5, text : "I have a +5 bonus to passive Wisdom (Perception)." } }; FeatsList["polearm master"] = { name : "Polearm Master", source : [["P", 168]], descriptionFull : "You can keep your enemies at bay with reach weapons. You gain the following benefits:\n \u2022 When you take the Attack action and attack with only a glaive, halberd, quarterstaff, or spear, you can use a bonus action to make a melee attack with the opposite end of the weapon; this attack uses the same ability modifier as the primary attack. The weapon's damage die for this attack is a d4, and the attack deals bludgeoning damage.\n \u2022 While you are wielding a glaive, halberd, pike, quarterstaff, or spear, other creatures provoke an opportunity attack from you when they enter your reach.", description : "As a bonus action when I do the Attack action with a glaive/" + (typePF ? " " : "") + "halberd/quarterstaff/spear, I can make a 1d4 bludgeoning attack with its butt end." + (typePF ? "\n" : " ") + "While wielding a glaive/halberd/" + (typePF ? "" : " ") + "pike/quarterstaff/spear, I get an opportunity attack when a creature enters my reach.", weaponOptions : [{ regExpSearch : /^(?=.*(polearm|(glaive|guandao|bisento|naginata)|(halberd|\bji\b|kamayari)|(quarterstaff|\bstaff\b|\bbo\b)|(spear|qiang|\byaris?\b)))(?=.*butt)(?=.*end).*$/i, name : "Polearm Butt End", source : [["P", 168]], ability : 1, type : "polearm butt end", damage : [1, 4, "bludgeoning"], range : "Melee", description : "As bonus action after Attack action with only a glaive, halberd, spear, or quarterstaff", abilitytodamage : true, selectNow : true }], action : ['bonus action', 'Butt End Attack (after attack with polearm)'], weaponProfs : [false, false, ["polearm butt end"]] }; FeatsList["resilient"] = { name : "Resilient", source : [["P", 168]], descriptionFull : "Choose one ability score. You gain the following benefits:\n \u2022 Increase the chosen ability score by 1, to a maximum of 20.\n \u2022 You gain proficiency in saving throws using the chosen ability.", description : "Select an ability score using the square button on this feat line. I gain proficiency with the saving throw of that ability score and a +1 added to it.", choices : ["Strength", "Dexterity", "Constitution", "Intelligence", "Wisdom", "Charisma"], "strength" : { description : "I gain proficiency with Strength saving throws. [+1 Strength]", scores : [1, 0, 0, 0, 0, 0], saves : ["Str"] }, "dexterity" : { description : "I gain proficiency with Dexterity saving throws. [+1 Dexterity]", scores : [0, 1, 0, 0, 0, 0], saves : ["Dex"] }, "constitution" : { description : "I gain proficiency with Constitution saving throws. [+1 Constitution]", scores : [0, 0, 1, 0, 0, 0], saves : ["Con"] }, "intelligence" : { description : "I gain proficiency with Intelligence saving throws. [+1 Intelligence]", scores : [0, 0, 0, 1, 0, 0], saves : ["Int"] }, "wisdom" : { description : "I gain proficiency with Wisdom saving throws. [+1 Wisdom]", scores : [0, 0, 0, 0, 1, 0], saves : ["Wis"] }, "charisma" : { description : "I gain proficiency with Charisma saving throws. [+1 Charisma]", scores : [0, 0, 0, 0, 0, 1], saves : ["Cha"] } }; FeatsList["ritual caster"] = { name : "Ritual Caster", source : [["P", 169]], descriptionFull : "You have learned a number of spells that you can cast as rituals. These spells are written in a ritual book, which you must have in hand while casting one of them.\n When you choose this feat, you acquire a ritual book holding two 1st-level spells of your choice. Choose one of the following classes: bard, cleric, druid, sorcerer, warlock, or wizard. You must choose your spells from that class's spell list, and the spells you choose must have the ritual tag. The class you choose also determines your spellcasting ability for these spells: Charisma for bard, sorcerer, or warlock; Wisdom for cleric or druid; or Intelligence for wizard.\n If you come across a spell in written form, such as a magical spell scroll or a wizard's spellbook, you might be able to add it to your ritual book. The spell must be on the spell list for the class you chose, the spell's level can be no higher than half your level (rounded up), and it must have the ritual tag. The process of copying the spell into your ritual book takes 2 hours per level of the spell, and costs 50 gp per level. The cost represents material components you expend as you experiment with the spell to master it, as well as the fine inks you need to record it.", description : "Select a spellcasting class using the square button on this feat line. I gain a book with two 1st-level ritual spells from that class' spell list. I can transcribe more ritual spells into this book and cast them as rituals only.", prerequisite : "Intelligence or Wisdom 13 or higher", prereqeval : function(v) { return What('Int') >= 13 || What('Wis') >= 13; }, commoneval : function(chc, spellAbility) { if (!chc) return; CurrentSpells['ritual caster ' + chc] = { name : 'Ritual Book [' + chc.capitalize() + ']', ability : spellAbility, list : {"class" : chc, ritual : true}, known : {spells : 'book'}, refType : "feat" }; SetStringifieds('spells'); CurrentUpdates.types.push('spells'); }, commonremoveeval : function(chc) { if (!chc) return; delete CurrentSpells['ritual caster ' + chc]; SetStringifieds('spells'); CurrentUpdates.types.push('spells'); }, calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { if (!spellObj.ritualCasterFeatChange && spName.indexOf("ritual caster ") !== -1) { spellObj.ritualCasterFeatChange = true; spellObj.firstCol = SpellRitualTag; if (!(/.*(\d+ ?h\b|special|see b).*/i).test(spellObj.time)) { var numMinutes = Number(spellObj.time.replace(/(\d+) ?min.*/, "$1")); if (isNaN(numMinutes)) numMinutes = 0; spellObj.time = (numMinutes + 10) + " min"; } return true; }; }, "By the Ritual Caster feat, I can cast ritual spells from my Ritual Book. Casting a spell as a ritual means adding 10 minutes to its casting time." ] }, choices : ["Bard", "Cleric", "Druid", "Sorcerer", "Warlock", "Wizard"], "bard" : { description : "I can cast spells in my ritual book as rituals only. I gain two 1st-level ritual bard spells.\nI can copy ritual bard spells that I find into my book if they are not more than half my level (2 hours and 50 gp per spell level). Charisma is my spellcasting ability for these.", eval : function(lvl, chc) { FeatsList["ritual caster"].commoneval(chc[1], 6); }, removeeval : function(lvl, chc) { FeatsList["ritual caster"].commonremoveeval(chc[0]); } }, "cleric" : { description : "I can cast spells in my ritual book as rituals only. I gain two 1st-level ritual cleric spells.\nI can copy ritual cleric spells that I find into my book if they are not more than half my level (2 hours and 50 gp per spell level). Wisdom is my spellcasting ability for these.", eval : function(lvl, chc) { FeatsList["ritual caster"].commoneval(chc[1], 5); }, removeeval : function(lvl, chc) { FeatsList["ritual caster"].commonremoveeval(chc[0]); } }, "druid" : { description : "I can cast spells in my ritual book as rituals only. I gain two 1st-level ritual druid spells.\nI can copy ritual druid spells that I find into my book if they are not more than half my level (2 hours and 50 gp per spell level). Wisdom is my spellcasting ability for these.", eval : function(lvl, chc) { FeatsList["ritual caster"].commoneval(chc[1], 5); }, removeeval : function(lvl, chc) { FeatsList["ritual caster"].commonremoveeval(chc[0]); } }, "sorcerer" : { description : "I can cast spells in my ritual book as rituals only. I gain two 1st-level ritual sorcerer spells.\nI can copy ritual sorcerer spells that I find into my book if they are not more than half my level (2 hours and 50 gp per spell level). Charisma is my spellcasting ability for these.", eval : function(lvl, chc) { FeatsList["ritual caster"].commoneval(chc[1], 6); }, removeeval : function(lvl, chc) { FeatsList["ritual caster"].commonremoveeval(chc[0]); } }, "warlock" : { description : "I can cast spells in my ritual book as rituals only. I gain two 1st-level ritual warlock spells.\nI can copy ritual warlock spells that I find into my book if they are not more than half my level (2 hours and 50 gp per spell level). Charisma is my spellcasting ability for these.", eval : function(lvl, chc) { FeatsList["ritual caster"].commoneval(chc[1], 6); }, removeeval : function(lvl, chc) { FeatsList["ritual caster"].commonremoveeval(chc[0]); } }, "wizard" : { description : "I can cast spells in my ritual book as rituals only. I gain two 1st-level ritual wizard spells.\nI can copy ritual wizard spells that I find into my book if they are not more than half my level (2 hours and 50 gp per spell level). Intelligence is my spellcasting ability for these.", eval : function(lvl, chc) { FeatsList["ritual caster"].commoneval(chc[1], 4); }, removeeval : function(lvl, chc) { FeatsList["ritual caster"].commonremoveeval(chc[0]); } } }; FeatsList["savage attacker"] = { name : "Savage Attacker", source : [["P", 169]], descriptionFull : "Once per turn when you roll damage for a melee weapon attack, you can reroll the weapon's damage dice and use either total.", description : "Once per turn, when I roll damage for a melee weapon attack, I can reroll the weapon's damage dice and use either total." }; FeatsList["sentinel"] = { name : "Sentinel", source : [["P", 169]], descriptionFull : "You have mastered techniques to take advantage of every drop in any enemy's guard, gaining the following benefits:\n \u2022 When you hit a creature with an opportunity attack, the creature's speed becomes 0 for the rest of the turn.\n \u2022 Creatures provoke opportunity attacks from you even if they take the Disengage action before leaving your reach.\n \u2022 When a creature within 5 feet of you makes an attack against a target other than you (and that target doesn't have this feat), you can use your reaction to make a melee weapon attack against the attacking creature.", description : "Creatures I hit with opportunity attacks have 0 speed for this turn. The Disengage action doesn't work on me. When a creature within 5 ft makes an attack against a target other than me, I can use my reaction to make a melee weapon attack against the attacker.", action : [["reaction", " (after attack on ally)"]] }; FeatsList["sharpshooter"] = { name : "Sharpshooter", source : [["P", 170]], descriptionFull : "You have mastered ranged weapons and can make shots that others find impossible. You gain the following benefits:\n \u2022 Attacking at long range doesn't impose disadvantage on your ranged weapon attack rolls.\n \u2022 Your ranged weapon attacks ignore half cover and three-quarters cover.\n \u2022 Before you make an attack with a ranged weapon that you are proficient with, you can choose to take a -5 penalty to the attack roll. If the attack hits, you add +10 to the attack's damage.", description : "My ranged weapon attacks don't have disadvantage on long range and ignore half cover and three-quarters cover. With a ranged weapon that I am proficient with, I can choose to take a -5 penalty on the attack roll for +10 on the attack's damage.", calcChanges : { atkAdd : [ function (fields, v) { if (v.isRangedWeapon || v.isThrownWeapon) { fields.Description += (fields.Description ? '; ' : '') + "No disadv. at long range; Ignore \u00BD and \u00BE cover"; }; }, "My ranged weapon attacks suffer no disadvantage for long range and ignore half cover and three-quarters cover. This includes thrown weapons.\n \u2022 If I include the words 'Power Attack', 'Sharpshooter', or 'Sharpshot' in the name or description of a ranged weapon that I'm proficient with, the calculation will put a -5 penalty on the attack's To Hit and a +10 bonus to its Damage. This does not work with thrown weapons." ], atkCalc : [ function (fields, v, output) { if (v.isRangedWeapon && fields.Proficiency && /power.{0,3}attack|sharp.{0,3}shoo?t/i.test(v.WeaponText)) { output.extraDmg += 10; output.extraHit -= 5; }; }, '' ] } }; FeatsList["shield master"] = { name : "Shield Master", source : [["P", 170]], descriptionFull : "You use shields not just for protection but also for offense. You gain the following benefits while you are wielding a shield:\n \u2022 If you take the Attack action on your turn, you can use a bonus action to try to shove a creature within 5 feet of you with your shield.\n \u2022 If you aren't incapacitated, you can add your shield's AC bonus to any Dexterity saving throw you make against a spell or other harmful effect that targets only you.\n \u2022 If you are subjected to an effect that allows you to make a Dexterity saving throw to take only half damage, you can use your reaction to take no damage if you succeed on the saving throw, interposing your shield between yourself and the source of the effect.", description : "As a bonus action, when I use the Attack action, I can shove someone within 5 ft with my shield. I add my shield's AC bonus to Dex saves vs. effects targeting only me. As a reaction, if I succeed on a Dex save for half damage, I can interpose my shield to avoid the damage.", action : [['bonus action', 'Shove with shield (with Attack action)'], ['reaction', 'Interpose shield (if Dex save half dmg)']] }; FeatsList["skilled"] = { name : "Skilled", source : [["P", 170]], descriptionFull : "You gain proficiency in any combination of three skills or tools of your choice.", description : "I gain proficiency with any combination of three skills or tools of my choice.", skillstxt : "Choose three skills or tools" }; FeatsList["skulker"] = { name : "Skulker", source : [["P", 170]], descriptionFull : "You are expert at slinking through shadows. You gain the following benefits:\n \u2022 You can try to hide when you are lightly obscured from the creature from which you are hiding.\n \u2022 When you are hidden from a creature and miss it with a ranged weapon attack, making the attack doesn't reveal your position.\n \u2022 Dim light doesn't impose disadvantage on your Wisdom (Perception) checks relying on sight.", description : "I can try to hide when I am lightly obscured. My position is not revealed when I am hidden from a creature and miss it with a ranged weapon attack. Dim light doesn't impose disadvantage on my Wisdom (Perception) checks relying on sight.", prerequisite : "Dexterity 13 or higher", prereqeval : function(v) { return What('Dex') >= 13; }, vision : [["No disadv. on Perception in dim light", 0]] }; FeatsList["spell sniper"] = { name : "Spell Sniper", source : [["P", 170]], descriptionFull : "You have learned techniques to enhance your attacks with certain kinds of spells, gaining the following benefits:\n \u2022 When you cast a spell that requires you to make an attack roll, the spell's range is doubled.\n \u2022 Your ranged spell attacks ignore half cover and three-quarters cover.\n \u2022 You learn one cantrip that requires an attack roll. Choose the cantrip from the bard, cleric, druid, sorcerer, warlock, or wizard spell list. Your spellcasting ability for this cantrip depends on the spell list you chose from: Charisma for bard, sorcerer, or warlock; Wisdom for cleric or druid; or Intelligence for wizard.", description : "Select a spellcasting class using the square button on this feat line. I learn one cantrip requiring an attack roll from the spell list of the chosen class. Any spell I cast requiring an attack roll has its range doubled and ignores half and 3/4 cover.", prerequisite : "The ability to cast at least one spell", prereqeval : function(v) { return v.isSpellcaster; }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.spellSniper && !v.isDC && v.isSpell && (/\d+ ?(f.{0,2}t|m)/i).test(fields.Range)) { v.spellSniper = true; var rangeNmbr = fields.Range.match(/\d+([.,]\d+)?/g); var notNmbrs = fields.Range.split(RegExp(rangeNmbr.join('|'))); fields.Range = ''; rangeNmbr.forEach(function (dR, idx) { fields.Range += (notNmbrs[idx] ? notNmbrs[idx] : '') + (parseFloat(dR.toString().replace(',', '.') * 2)); }); if (notNmbrs.length > rangeNmbr.length) { fields.Range += notNmbrs[notNmbrs.length - 1]; }; if (!v.rangeM) { v.rangeM = 2; } else { v.rangeM *= 2; } }; }, "My spells and cantrips that require an attack roll have their range doubled.", 700 ], spellAdd : [ function (spellKey, spellObj, spName) { if ( !spellObj.spellSniper && !spellObj.psionic && (/spell attack/i).test(spellObj.description + spellObj.descriptionFull) && (/^(?!.*(S:|rad|touch|self|cone|cube)).*\d+([.,]\d+)?[\- ]?(f.{0,2}t|m).*$/i).test(spellObj.range) ) { spellObj.spellSniper = true; var rangeNmbr = spellObj.range.match(/\d+([.,]\d+)?/g); var notNmbrs = spellObj.range.split(RegExp(rangeNmbr.join('|'))); spellObj.range = ''; rangeNmbr.forEach(function (dR, idx) { spellObj.range += (notNmbrs[idx] ? notNmbrs[idx] : '') + (parseFloat(dR.toString().replace(',', '.') * 2)); }); if (notNmbrs.length > rangeNmbr.length) { spellObj.range += notNmbrs[notNmbrs.length - 1]; }; if (!spellObj.rangeM) { spellObj.rangeM = 2; } else { spellObj.rangeM *= 2; } return true; }; }, "My spells and cantrips that require an attack roll have their range doubled.", 700 ] }, choices : ["Bard", "Cleric", "Druid", "Sorcerer", "Warlock", "Wizard"], "bard" : { description : "Any spell that I cast that requires an attack roll has its range doubled. My ranged spell attacks ignore half cover and three-quarters cover. I learn one bard cantrip that requires an attack roll. Charisma is my spellcasting ability for this.", spellcastingBonus : [{ name : "Spell Attack Cantrip", spellcastingAbility : 6, 'class' : 'bard', level : [0, 0], attackOnly : true, }] }, "cleric" : { description : "Any spell that I cast that requires an attack roll has its range doubled. My ranged spell attacks ignore half cover and three-quarters cover. I learn one cleric cantrip that requires an attack roll. Wisdom is my spellcasting ability for this.", spellcastingBonus : [{ name : "Spell Attack Cantrip", spellcastingAbility : 5, 'class' : 'cleric', level : [0, 0], attackOnly : true, }] }, "druid" : { description : "Any spell that I cast that requires an attack roll has its range doubled. My ranged spell attacks ignore half cover and three-quarters cover. I learn one druid cantrip that requires an attack roll. Wisdom is my spellcasting ability for this.", spellcastingBonus : [{ name : "Spell Attack Cantrip", spellcastingAbility : 5, 'class' : 'druid', level : [0, 0], attackOnly : true, }] }, "sorcerer" : { description : "Any spell that I cast that requires an attack roll has its range doubled. My ranged spell attacks ignore half cover and three-quarters cover. I learn one sorcerer cantrip that requires an attack roll. Charisma is my spellcasting ability for this.", spellcastingBonus : [{ name : "Spell Attack Cantrip", spellcastingAbility : 6, 'class' : 'sorcerer', level : [0, 0], attackOnly : true, }] }, "warlock" : { description : "Any spell that I cast that requires an attack roll has its range doubled. My ranged spell attacks ignore half cover and three-quarters cover. I learn one warlock cantrip that requires an attack roll. Charisma is my spellcasting ability for this.", spellcastingBonus : [{ name : "Spell Attack Cantrip", spellcastingAbility : 6, 'class' : 'warlock', level : [0, 0], attackOnly : true, }] }, "wizard" : { description : "Any spell that I cast that requires an attack roll has its range doubled. My ranged spell attacks ignore half cover and three-quarters cover. I learn one wizard cantrip that requires an attack roll. Intelligence is my spellcasting ability for this.", spellcastingBonus : [{ name : "Spell Attack Cantrip", spellcastingAbility : 4, 'class' : 'wizard', level : [0, 0], attackOnly : true, }] } }; FeatsList["tavern brawler"] = { name : "Tavern Brawler", source : [["P", 170]], descriptionFull : "Accustomed to rough-and-tumble fighting using whatever weapons happen to be at hand, you gain the following benefits:\n \u2022 Increase your Strength or Constitution score by 1, to a maximum of 20.\n \u2022 You are proficient with improvised weapons.\n \u2022 Your unarmed strike uses a d4 for damage.\n \u2022 When you hit a creature with an unarmed strike or an improvised weapon on your turn, you can use a bonus action to attempt to grapple the target.", description : "I am proficient with improvised weapons. My unarmed strike does 1d4 damage. When I hit a creature with an unarmed strike or improvised weapon on my turn, I can attempt to grapple the target as a bonus action. [+1 Strength or Constitution]", scorestxt : "+1 Strength or Constitution", action : ['bonus action', 'Grapple (on hit with unarmed/improv.)'], weaponProfs : [false, false, ["Improvised weapons"]], calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == "unarmed strike" || v.baseWeaponName == "improvised weapon" || /improvised/i.test(v.WeaponName + v.baseWeaponName) || /improvised weapon/i.test(v.theWea.type)) { fields.Proficiency = true; if (v.isMeleeWeapon) fields.Description += (fields.Description ? '; ' : '') + 'After hit, can attempt to grapple as a bonus action'; }; if (v.baseWeaponName == "unarmed strike" && fields.Damage_Die == 1) { fields.Damage_Die = '1d4'; }; }, "My unarmed strikes deal 1d4 damage instead of 1.\n \u2022 After hitting a creature with an unarmed strike or improvised weapon in melee, I can attempt to start a grapple as a bonus action." ] } }; FeatsList["tough"] = { name : "Tough", source : [["P", 170]], descriptionFull : "Your hit point maximum increases by an amount equal to twice your level when you gain this feat. Whenever you gain a level thereafter, your hit point maximum increases by an additional 2 hit points.", description : "My hit point maximum increases by an amount equal to twice my character level.", calcChanges : { hp : function (totalHD) { return [totalHD * 2, '\n + ' + totalHD + ' \xD7 2 from the Tough feat (' + (totalHD * 2) + ')', true]; } } }; FeatsList["war caster"] = { name : "War Caster", source : [["P", 170]], prerequisite : "The ability to cast at least one spell", prereqeval : function(v) { return v.isSpellcaster; }, descriptionFull : "You have practiced casting spells in the midst of combat, learning techniques that grant you the following benefits:\n \u2022 You have advantage on Constitution saving throws that you make to maintain your concentration on a spell when you take damage.\n \u2022 You can perform the somatic components of spells even when you have weapons or a shield in one or both hands.\n \u2022 When a hostile creature's movement provokes an opportunity attack from you, you can use your reaction to cast a spell at the creature, rather than making an opportunity attack. The spell must have a casting time of 1 action and must target only that creature.", description : "Advantage on Con saves to maintain concentration on spells when damaged. Perform somatic components even when holding weapons or shield in one or both hands. Cast spell of 1 action casting time that targets only one creature instead of an opportunity attack.", action : [["reaction", " - Opportunity Spell"]], savetxt : { text : "Adv. on Con (Concentration) saves when damaged" } }; FeatsList["weapon master"] = { name : "Weapon Master", source : [["P", 170]], descriptionFull : "You have practiced extensively with a variety of weapons, gaining the following benefits:\n \u2022 Increase your Strength or Dexterity score by 1, to a maximum of 20.\n \u2022 You gain proficiency with four simple or martial weapons of your choice.", description : "I gain proficiency with four simple or martial weapons of my choice.\n[+1 Strength or Dexterity]", scorestxt : "+1 Strength or Dexterity" }; // Add attack entry that is not in the SRD WeaponsList["thorn whip"] = { regExpSearch : /^(?=.*thorn)(?=.*whip).*$/i, name : "Thorn Whip", source : [["P", 282]], list : "spell", ability : 5, type : "Cantrip", damage : ["C", 6, "piercing"], range : "Melee, 30 ft", description : "Melee spell attack, pull target up to 10 ft closer", abilitytodamage : false }; // Add spells that are not in the SRD SpellsList["arcane gate"] = { name : "Arcane Gate", classes : ["sorcerer", "warlock", "wizard"], source : [["P", 214]], level : 6, school : "Conj", time : "1 a", range : "500 ft", components : "V,S", duration : "Conc, 10 min", description : "Two portals, up to 500 ft apart, teleport any to other side; portals are filled with opaque mist", descriptionFull : "You create linked teleportation portals that remain open for the duration. Choose two points on the ground that you can see, one point within 10 feet of you and one point within 500 feet of you. A circular portal, 10 feet in diameter, opens over each point. If the portal would open in the space occupied by a creature, the spell fails, and the casting is lost." + "\n " + "The portals are two-dimensional glowing rings filled with mist, hovering inches from the ground and perpendicular to it at the points you choose. A ring is visible only from one side (your choice), which is the side that functions as a portal." + "\n " + "Any creature or object entering the portal exits from the other portal as if the two were adjacent to each other, passing through a portal from the non-portal side has no effect. The mist that fills each portal is opaque and blocks vision through it. On your turn, you can rotate the rings as a bonus action so that the active side faces in a different direction." }; SpellsList["armor of agathys"] = { name : "Armor of Agathys", classes : ["warlock"], source : [["P", 215]], level : 1, school : "Abjur", time : "1 a", range : "Self", components : "V,S,M", compMaterial : "A cup of water", duration : "1 h", description : "5+5/SL temp HP; as long as temp HP last any crea that hits in melee takes 5+5/SL Cold dmg", descriptionFull : "A protective magical force surrounds you, manifesting as a spectral frost that covers you and your gear. You gain 5 temporary hit points for the duration. If a creature hits you with a melee attack while you have these hit points, the creature takes 5 cold damage." + AtHigherLevels + "When you cast this spell using a spell slot of 2nd level or higher, both the temporary hit points and the cold damage increase by 5 for each slot level above 1st." }; SpellsList["arms of hadar"] = { name : "Arms of Hadar", classes : ["warlock"], source : [["P", 215]], level : 1, school : "Conj", time : "1 a", range : "S:10-ft rad", components : "V,S", duration : "Instantaneous", save : "Str", description : "2d6+1d6/SL Necrotic dmg; save halves; on failed save no reactions until next turn", descriptionFull : "You invoke the power of Hadar, the Dark Hunger. Tendrils of dark energy erupt from you and batter all creatures within 10 feet of you. Each creature in that area must make a Strength saving throw. On a failed save, a target takes 2d6 necrotic damage and can't take reactions until its next turn. On a successful save, the creature takes half damage, but suffers no other effect." + AtHigherLevels + "When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d6 for each slot level above 1st." }; SpellsList["aura of life"] = { name : "Aura of Life", classes : ["paladin"], source : [["P", 216]], level : 4, school : "Abjur", time : "1 a", range : "S:30-ft rad", components : "V", duration : "Conc, 10 min", description : "Me + any crea while in area Necrotic dmg resist.; at turn start, 0 HP living in area heal 1 HP", descriptionFull : "Life-preserving energy radiates from you in an aura with a 30-foot radius. Until the spell ends, the aura moves with you, centered on you. Each non-hostile creature in the aura (including you) has resistance to necrotic damage, and its hit point maximum can't be reduced. In addition, a non-hostile, living creature regains 1 hit point when it starts its turn in the aura with 0 hit points." }; SpellsList["aura of purity"] = { name : "Aura of Purity", classes : ["paladin"], source : [["P", 216]], level : 4, school : "Abjur", time : "1 a", range : "S:30-ft rad", components : "V", duration : "Conc, 10 min", description : "Me + any crea while in area Poison dmg resist., immune to disease, adv. on saves vs. conditions", descriptionFull : "Purifying energy radiates from you in an aura with a 30-foot radius. Until the spell ends, the aura moves with you, centered on you. Each non-hostile creature in the aura (including you) can't become diseased, has resistance to poison damage, and has advantage on saving throws against effects that cause any of the following conditions - blinded, charmed, deafened, frightened, paralyzed, poisoned, and stunned." }; SpellsList["aura of vitality"] = { name : "Aura of Vitality", classes : ["paladin"], source : [["P", 216]], level : 3, school : "Evoc", time : "1 a", range : "S:30-ft rad", components : "V", duration : "Conc, 1 min", description : "As a bonus action for the duration, I can heal 2d6 HP to 1 creature in range (can be me)", descriptionFull : "Healing energy radiates from you in an aura with a 30-foot radius. Until the spell ends, the aura moves with you, centered on you. You can use a bonus action to cause one creature in the aura (including you) to regain 2d6 hit points." }; SpellsList["banishing smite"] = { name : "Banishing Smite", classes : ["paladin"], source : [["P", 216]], level : 5, school : "Abjur", time : "1 bns", range : "Self", components : "V", duration : "Conc, 1 min", description : "Next weapon hit +5d10 Force dmg; if this brings target HP<50, I banish it until spell ends", descriptionFull : "The next time you hit a creature with a weapon attack before this spell ends, your weapon crackles with force, and the attack deals an extra 5d10 force damage to the target. Additionally, if this attack reduces the target to 50 hit points of fewer, you banish it. If the target is native to a different plane of existence than the one you're on, the target disappears, returning to its home plane. If the target is native to the plane you're on, the creature vanishes into a harmless demiplane. While there, the target is incapacitated. It remains there until the spell ends, at which point the tart reappears in the space it left or in the nearest unoccupied space if that space is occupied." }; SpellsList["beast sense"] = { name : "Beast Sense", classes : ["druid", "ranger"], source : [["P", 217]], ritual : true, level : 2, school : "Div", time : "1 a", range : "Touch", components : "S", duration : "Conc, 1 h", description : "Use 1 willing beast's senses; I'm blinded and deafened while doing so", descriptionFull : "You touch a willing beast. For the duration of the spell, you can use your action to see through the beast's eyes and hear what it hears, and continue to do so until you use your action to return to your normal senses. While perceiving through the beast's senses, you gain the benefits of any special senses possessed by that creature, though you are blinded and deafened to your own surroundings." }; SpellsList["blade ward"] = { name : "Blade Ward", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["P", 218]], level : 0, school : "Abjur", time : "1 a", range : "Self", components : "V,S", duration : "1 rnd", description : "Until the end of my next turn, Bludgeoning, Piercing, and Slashing dmg resist. vs. weapons", descriptionFull : "You extend your hand and trace a sigil of warding in the air. Until the end of your next turn, you have resistance against bludgeoning, piercing, and slashing damage dealt by weapon attacks." }; SpellsList["blinding smite"] = { name : "Blinding Smite", classes : ["paladin"], source : [["P", 219]], level : 3, school : "Evoc", time : "1 bns", range : "Self", components : "V", duration : "Conc, 1 min", save : "Con", description : "Next melee weapon hit +3d8 Radiant dmg; save or blinded; extra save at end of every turn", descriptionFull : "The next time you hit a creature with a melee weapon attack during this spell's duration, you weapon flares with a bright light, and the attack deals an extra 3d8 radiant damage to the target. Additionally, the target must succeed on a Constitution saving throw or be blinded until the spell ends." + "\n " + "A creature blinded by this spell makes another Constitution saving throw at the end of each of its turns. On a successful save, it is no longer blinded." }; SpellsList["chromatic orb"] = { name : "Chromatic Orb", classes : ["sorcerer", "wizard"], source : [["P", 221]], level : 1, school : "Evoc", time : "1 a", range : "90 ft", components : "V,S,M\u0192", compMaterial : "A diamond worth at least 50 gp", duration : "Instantaneous", description : "Spell attack for 3d8+1d8/SL Acid, Cold, Fire, Lightning, Poison or Thunder dmg (50gp)", descriptionFull : "You hurl a 4-inch-diameter sphere of energy at a creature that you can see within range. You choose acid, cold, fire, lightning, poison, or thunder for the type of orb you create, and then make a ranged spell attack against the target. If the attack hits, the creature takes 3d8 damage of the type you chose." + AtHigherLevels + "When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d8 for each slot level above 1st.", dynamicDamageBonus : { multipleDmgTypes : { dmgTypes : ["acid", "cold", "fire", "lightning", "poison", "thunder"], inDescriptionAs :"Acid, Cold, Fire, Lightning, Poison or Thunder" } } }; SpellsList["circle of power"] = { name : "Circle of Power", classes : ["paladin"], source : [["P", 221]], level : 5, school : "Abjur", time : "1 a", range : "S:30-ft rad", components : "V", duration : "Conc, 10 min", description : "Any crea while in area adv. on saves vs. magical effects; if save would half dmg it takes no dmg", descriptionFull : "Divine energy radiates from you, distorting and diffusing magical energy within 30 feet of you. Until the spell ends, the sphere moves with you, centered on you. For the duration, each friendly creature in the area (including you) has advantage on saving throws against spells and other magical effects. Additionally, when an affected creature succeeds on a saving throw made against a spell or magical effect that allows it to make a saving throw to take only half damage, it instead takes no damage if it succeeds on the saving throw." }; SpellsList["cloud of daggers"] = { name : "Cloud of Daggers", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["P", 222]], level : 2, school : "Conj", time : "1 a", range : "60 ft", components : "V,S,M", compMaterial : "A sliver of glass", duration : "Conc, 1 min", description : "5-ft cube 4d4+2d4/SL Slashing dmg to all that enter or start turn in area", descriptionFull : "You fill the air with spinning daggers in a cube 5 feet on each side, centered on a point you choose within range. A creature takes 4d4 slashing damage when it enters the spell's area for the first time on a turn or starts its turn there." + AtHigherLevels + "when you cast this spell using a spell slot of 3rd level or higher, the damage increases by 2d4 for each slot level above 2nd." }; SpellsList["compelled duel"] = { name : "Compelled Duel", classes : ["paladin"], source : [["P", 224]], level : 1, school : "Ench", time : "1 bns", range : "30 ft", components : "V", duration : "Conc, 1 min", save : "Wis", description : "1 crea save or dis. on attacks vs. not-me and save if moving more than 30 ft away", descriptionFull : "You attempt to compel a creature into a duel. One creature that you can see within range must make a Wisdom saving throw. On a failed save, the creature is drawn to you, compelled by your divine demand. For the duration, it has disadvantage on attack rolls against creatures other than you, and must make a Wisdom saving throw each time it attempts to move to a space that is more than 30 feet away from you, if it succeeds on this saving throw, this spell doesn't restrict the target's movement for that turn." + "\n " + "The spell ends if you attack any other creature, if you cast a spell that targets a hostile creature other than the target, if a creature friendly to you damages the target or casts a harmful spell on it, or if you end your turn more than 30 feet away from the target." }; SpellsList["conjure barrage"] = { name : "Conjure Barrage", classes : ["ranger"], source : [["P", 225]], level : 3, school : "Conj", time : "1 a", range : "S:60" + (typePF ? "-" : "") + "ft cone", components : "V,S,M", compMaterial : "One piece of ammunition or a thrown weapon", duration : "Instantaneous", save : "Dex", description : "Throw weapon or ammo; copies rain down for 3d8 dmg; dmg type as weapon; save halves", descriptionFull : "You throw a nonmagical weapon or fire a piece of nonmagical ammunition into the air to create a cone of identical weapons that shoot forward and then disappear. Each creature in a 60-foot cone must succeed on a Dexterity saving throw. A creature takes 3d8 damage on a failed save, or half as much damage on a successful one. The damage type is the same as that of the weapon or ammunition used as a component." }; SpellsList["conjure volley"] = { name : "Conjure Volley", classes : ["ranger"], source : [["P", 226]], level : 5, school : "Conj", time : "1 a", range : "150 ft", components : "V,S,M", compMaterial : "One piece of ammunition or one thrown weapon", duration : "Instantaneous", save : "Dex", description : "Turn ammo/thrown wea into volley; 40-ft rad 20-ft high 8d8 dmg; dmg type as weapon; save halves", descriptionFull : "You fire a piece of nonmagical ammunition from a ranged weapon or throw a nonmagical weapon into the air and choose a point within range. Hundreds of duplicates of the ammunition or weapon fall in a volley from above and then disappear. Each creature in a 40-foot-radius. 20-foot-high cylinder centered on that point must make a Dexterity saving throw. A creature takes 8d8 damage on a failed save, or half as much damage on a successful one. The damage type is the same as that of the ammunition or weapon." }; SpellsList["cordon of arrows"] = { name : "Cordon of Arrows", classes : ["ranger"], source : [["P", 228]], level : 2, school : "Trans", time : "1 a", range : "5 ft", components : "V,S,M", compMaterial : "Four or more arrows or bolts", duration : "8 h", save : "Dex", description : "4+2/SL arrows/bolts attack first crea in 30 ft one at a time for 1d6 Piercing dmg; save halves", descriptionFull : "You plant four pieces of nonmagical ammunition - arrows or crossbow bolts - in the ground within range and lay magic upon them to protect an area. Until the spell ends, whenever a creature other than you comes within 30 feet of the ammunition for the first time on a turn or ends its turn there, one piece of ammunition flies up to strike it. The creature must succeed on a Dexterity saving throw or take 1d6 piercing damage. The piece of ammunition is then destroyed. The spell ends when no ammunition remains." + "\n " + "When you cast this spell, you can designate any creatures you choose, and the spell ignores them." + AtHigherLevels + "When you cast this spell using a spell slot of 3rd level or higher, the amount of ammunition that can be affected increases by two for each slot level above 2nd." }; SpellsList["crown of madness"] = { name : "Crown of Madness", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["P", 229]], level : 2, school : "Ench", time : "1 a", range : "120 ft", components : "V,S", duration : "Conc, 1 min", save : "Wis", description : "1 humanoid save or charmed and must melee attack against crea chosen by me; extra save/rnd", descriptionFull : "One humanoid of your choice that you can see within range must succeed on a Wisdom saving throw or become charmed by you for the duration. While the target is charmed in this way, a twisted crown of jagged iron appears on its head, and a madness glows in its eyes." + "\n " + "The charmed target must use its action before moving on each of its turns to make a melee attack against a creature other than itself that you mentally choose. The target can act normally on its turn if you choose no creature or if none are within its reach." + "\n " + "On your subsequent turns, you must use your action to maintain control over the target, or the spell ends. Also, the target can make a Wisdom saving throw at the end of each of its turns. On a success, the spell ends." }; SpellsList["crusader's mantle"] = { name : "Crusader's Mantle", classes : ["paladin"], source : [["P", 230]], level : 3, school : "Evoc", time : "1 a", range : "S:30-ft rad", components : "V", duration : "Conc, 1 min", description : "Me and allies in range deal extra 1d4 Radiant dmg with weapon attacks", descriptionFull : "Holy power radiates from you in an aura with a 30-foot radius, awakening boldness in friendly creatures. Until the spell ends, the aura moves with you, centered on you. While in the aura, each non-hostile creature in the aura (including you) deals an extra 1d4 radiant damage when it hits with a weapon attack." }; SpellsList["destructive wave"] = { name : "Destructive Wave", classes : ["paladin"], source : [["P", 231]], level : 5, school : "Evoc", time : "1 a", range : "S:30-ft rad", components : "V", duration : "Instantaneous", save : "Con", description : "Any crea 5d6 Thunder dmg \u0026 5d6 Radiant or Necrotic dmg \u0026 knocked prone; save halves, not prone", descriptionShorter : "Any crea 5d6 Thunder dmg \u0026 5d6 Radiant or Necrotic dmg \u0026 prone; save half, not prone", descriptionFull : "You strike the ground, creating a burst of divine energy that ripples outward from you. Each creature you choose within 30 feet of you must succeed on a Constitution saving throw or take 5d6 thunder damage, as well as 5d6 radiant or necrotic damage (your choice), and be knocked prone. A creature that succeeds on its saving throw takes half as much damage and isn't knocked prone.", dynamicDamageBonus : { allDmgTypesSingleMoment : true, multipleDmgTypes : { dmgTypes : ["radiant", "necrotic"], inDescriptionAs : "Radiant or Necrotic" } } }; SpellsList["dissonant whispers"] = { name : "Dissonant Whispers", classes : ["bard"], source : [["P", 234]], level : 1, school : "Ench", time : "1 a", range : "60 ft", components : "V", duration : "Instantaneous", save : "Wis", description : "1 crea 3d6+1d6/SL Psychic dmg and flee; save halves and no fleeing; deaf crea are immune", descriptionFull : "You whisper a discordant melody that only one creature of your choice within range can hear, wracking it with terrible pain. The target must make a Wisdom saving throw. On a failed save, it takes 3d6 psychic damage and must immediately use its reaction, if available, to move as far as its speed allows away from you. The creature doesn't move into obviously dangerous ground, such as a fire or a pit. On a successful save, the target takes half as much damage and doesn't have to move away. A deafened creature automatically succeeds on the save." + AtHigherLevels + "When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d6 for each slot level above 1st." }; SpellsList["elemental weapon"] = { name : "Elemental Weapon", classes : ["artificer", "paladin"], source : [["P", 237]], level : 3, school : "Trans", time : "1 a", range : "Touch", components : "V,S", duration : "Conc, 1 h", description : "+1 magical weapon; +1d4 Acid, Cold, Fire, Lightning, or Thunder dmg; SL5: +2/+2d4, SL7: +3/+3d4", descriptionShorter : "+1 wea; +1d4 Acid/Cold/Fire/Lightning/Thunder dmg; SL5: +2/+2d4, SL7: +3/+3d4", descriptionFull : "A nonmagical weapon you touch becomes a magic weapon. Choose one of the following damage types - acid, cold, fire, lightning, or thunder. For the duration, the weapon has a +1 bonus to attack rolls and deals an extra 1d4 damage of the chosen type when it hits." + AtHigherLevels + "When you cast this spell using a spell slot of 5th or 6th level, the bonus to attack rolls increases to +2 and the extra damage increases to 2d4. When you use a spell slot of 7th level or higher, the bonus increases to +3 and the extra damage increases to 3d4.", dynamicDamageBonus : { multipleDmgTypes : { dmgTypes : ["acid", "cold", "fire", "lightning", "thunder"], inDescriptionAs : "Acid, Cold, Fire, Lightning, or Thunder|Acid/Cold/Fire/Lightning/Thunder" } } }; SpellsList["ensnaring strike"] = { name : "Ensnaring Strike", classes : ["ranger"], source : [["P", 237]], level : 1, school : "Conj", time : "1 bns", range : "Self", components : "V", duration : "Conc, 1 min", save : "Str", description : "Next crea hit save (Large adv.) or restrained, 1d6+1d6/SL Piercing dmg/rnd; Str check to escape", descriptionShorter : "Next crea hit save (Large adv.) or restrained, 1d6+1d6/SL Piercing dmg/rnd; Str chk escape", descriptionFull : "The next time you hit a creature with a weapon attack before this spell ends, a writhing mass of thorny vines appears at the point of impact, and the target must succeed on a Strength saving throw or be restrained by the magical vines until the spell ends. A Large or larger creature has advantage on this saving throw. If the target succeeds on the save, the vines shrivel away." + "\n " + "While restrained by this spell, the target takes 1d6 piercing damage at the start of each of its turns. A creature restrained by the vines or one that can touch the creature can use its action to make a Strength check against your spell save DC. On a success, the target is freed." + AtHigherLevels + "If you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d6 for each slot level above 1st." }; SpellsList["feign death"] = { name : "Feign Death", classes : ["bard", "cleric", "druid", "wizard"], source : [["P", 240]], ritual : true, level : 3, school : "Necro", time : "1 a", range : "Touch", components : "V,S,M", compMaterial : "A pinch of graveyard dirt", duration : "1 h (D)", description : "Willing creature appears dead; it is blinded, incapacitated, has dmg resist. all but Psychic, and speed 0", descriptionFull : "You touch a willing creature and put it into a cataleptic state that is indistinguishable from death." + "\n " + "For the spell's duration, or until you use an action to touch the target and dismiss the spell, the target appears dead to all outward inspection and to spells used to determine the target's status. The target is blinded and incapacitated, and its speed drops to 0. The target has resistance to all damage except psychic damage. If the target is diseased or poisoned when you cast the spell, or becomes diseased or poisoned while under the spell's effect, the disease and poison have no effect until the spell ends." }; SpellsList["friends"] = { name : "Friends", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["P", 244]], level : 0, school : "Ench", time : "1 a", range : "Self", components : "S,M", compMaterial : "A small amount of makeup applied to the face as this spell is cast", duration : "Conc, 1 min", description : "Adv. on Cha checks vs. 1 crea currently not hostile; when spell ends, crea knows and becomes hostile", descriptionFull : "For the duration, you have advantage on all Charisma checks directed at one creature of your choice that isn't hostile toward you. When the spell ends, the creature realizes that you used magic to influence its mood and becomes hostile toward you. A creature prone to violence might attack you. Another creature might seek retribution in other ways (at the DM's discretion), depending on the nature of your interaction with it." }; SpellsList["grasping vine"] = { name : "Grasping Vine", classes : ["druid", "ranger"], source : [["P", 246]], level : 4, school : "Conj", time : "1 bns", range : "30 ft", components : "V,S", duration : "Conc, 1 min", save : "Dex", description : "Conjure vine with 30 ft reach; bns a to direct to 1 crea save or pulled 20 ft to vine", descriptionFull : "You conjure a vine that sprouts from the ground in an unoccupied space of your choice that you can see within range. When you cast this spell, you can direct the vine to lash out at a creature within 30 feet of it that you can see. That creature must succeed on a Dexterity saving throw or be pulled 20 feet directly toward the vine." + "\n " + "Until the spell ends, you can direct the vine to lash out at the same creature or another one as a bonus action on each of your turns." }; SpellsList["hail of thorns"] = { name : "Hail of Thorns", classes : ["ranger"], source : [["P", 249]], level : 1, school : "Conj", time : "1 bns", range : "Self", components : "V", duration : "Conc, 1 min", save : "Dex", description : "Next ranged weapon hit, all within 5 ft of target 1d10+1d10/SL Piercing dmg; save halves", descriptionFull : "The next time you hit a creature with a ranged weapon attack before the spell ends, this spell creates a rain of thorns that sprouts from your ranged weapon or ammunition. In addition to the normal effect of the attack, the target of the attack and each creature within 5 feet of it must make a Dexterity saving throw. A creature takes 1d10 piercing damage on a failed save, or half as much damage on a successful one." + AtHigherLevels + "If you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d10 for each slot level above 1st (to a maximum of 6d10).", dynamicDamageBonus : { multipleDmgMoments : false } }; SpellsList["hex"] = { name : "Hex", classes : ["warlock"], source : [["P", 251]], level : 1, school : "Ench", time : "1 bns", range : "90 ft", components : "V,S,M", compMaterial : "The petrified eye of a newt", duration : "Conc, 1 h", description : "1 crea +1d6 Necrotic dmg from my atks; dis. on chosen ability checks; SL3: conc, 8h; SL5: conc, 24h", descriptionShorter : "1 crea +1d6 Necrotic dmg from my atks; dis. chosen abi chks; SL3: conc, 8h; SL5: conc, 24h", descriptionFull : "You place a curse on a creature that you can see within range. Until the spell ends, you deal an extra 1d6 necrotic damage to the target whenever you hit it with an attack. Also, choose one ability when you cast the spell. The target has disadvantage on ability checks made with the chosen ability." + "\n " + "If the target drops to 0 hit points before this spell ends, you can use a bonus action on a subsequent turn of yours to curse a new creature." + "\n " + "A remove curse cast on the target ends this spell early." + AtHigherLevels + "When you cast this spell using a spell slot of 3rd or 4th level, you can maintain your concentration on the spell for up to 8 hours. When you use a spell slot of 5th level or higher, you can maintain your concentration on the spell for up to 24 hours." }; SpellsList["hunger of hadar"] = { name : "Hunger of Hadar", classes : ["warlock"], source : [["P", 251]], level : 3, school : "Conj", time : "1 a", range : "150 ft", components : "V,S,M", compMaterial : "A pickled octopus tentacle", duration : "Conc, 1 min", save : "Dex", description : "20-ft rad all: blind while in, start turn in 2d6 Cold dmg, end turn in save or 2d6 Acid dmg", descriptionFull : "You open a gateway to the dark between the stars, a region infested with unknown horrors. A 20-foot-radius sphere of blackness and bitter cold appears, centered on a point with range and lasting for the duration. This void is filled with a cacophony of soft whispers and slurping noises that can be heard up to 30 feet away. No light, magical or otherwise, can illuminate the area, and creatures fully within the area are blinded." + "\n " + "The void creates a warp in the fabric of space, and the area is difficult terrain. Any creature that starts its turn in the area takes 2d6 cold damage. Any creature that ends its turn in the area must succeed on a Dexterity saving throw or take 2d6 acid damage as milky, otherworldly tentacles rub against it." }; SpellsList["lightning arrow"] = { name : "Lightning Arrow", classes : ["ranger"], source : [["P", 255]], level : 3, school : "Trans", time : "1 bns", range : "Self", components : "V,S", duration : "Conc, 1 min", save : "Dex", description : "Next rngd wea atk 4d8+1d8/SL Lightn. dmg, miss half; 10 ft all 2d8+1d8/SL Lightn. dmg, save half", descriptionShorter : "Next atk 4d8+1d8/SL Lightn. dmg, miss h" + (typePF ? "a" : "") + "lf; 10 ft all 2d8+1d8/SL Lightn. dmg, save half", descriptionFull : "The next time you make a ranged weapon attack during the spell's duration, the weapon's ammunition, or the weapon itself if it's a thrown weapon, transforms into a bolt of lightning. Make the attack roll as normal. The target takes 4d8 lightning damage on a hit, or half as much damage on a miss, instead of the weapon's normal damage." + "\n " + "Whether you hit or miss, each creature within 10 feet of the target must make a Dexterity saving throw. Each of these creatures takes 2d8 lightning damage on a failed save, or half as much damage on a successful one." + "\n " + "The piece of ammunition or weapon then returns to its normal form." + AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, the damage for both effects of the spell increases by 1d8 for each slot level above 3rd.", dynamicDamageBonus : { multipleDmgMoments : false, skipDmgGroupIfNotMultiple : /(atk .*?lightn\. dmg.*?)/i } }; SpellsList["phantasmal force"] = { name : "Phantasmal Force", classes : ["bard", "sorcerer", "wizard"], source : [["P", 264]], level : 2, school : "Illus", time : "1 a", range : "60 ft", components : "V,S,M", compMaterial : "A bit of fleece", duration : "Conc, 1 min", save : "Int", description : "1 crea save or sees 10 ft cube illusion that does 1d6 Psychic dmg/rnd; Int(Investigation) vs. spell DC", descriptionShorter : "1 crea save or sees 10 ft cube illusion that does 1d6 Psychic dmg/rnd; Investigation vs. DC", descriptionFull : "You craft an illusion that takes root in the mind of a creature that you can see within range. The target must make an Intelligence saving throw. On a failed save, you create a phantasmal object, creature, or other visible phenomenon of your choice that is no larger than a 10-foot cube and that is perceivable only to the target for the duration. This spell has no effect on undead or constructs." + "\n " + "The phantasm includes sound, temperature, and other stimuli, also evident only to the creature." + "\n " + "The target can use its action to examine the phantasm with an Intelligence (Investigation) check against your spell save DC. If the check succeeds, the target realizes that the phantasm is an illusion, and the spell ends." + "\n " + "While a target is affected by the spell, the target treats the phantasm as if it were real. The target rationalizes any illogical outcomes from interacting with the phantasm. For example, a target attempting to walk across a phantasmal bridge that spans a chasm falls once it steps onto the bridge. If the target survives the fall, it still believes that the bridge exists and comes up with some other explanation for its fall - it was pushed, it slipped, or a strong wind might have knocked it off." + "\n " + "An affected target is so convinced of the phantasm's reality that it can even take damage from the illusion. A phantasm created to appear as a creature can attack the target. Similarly, a phantasm created to appear as fire, a pool of acid, or lava can burn the target. Each round on your turn, the phantasm can deal 1d6 psychic damage to the target if it is in the phantasm's area or within 5 feet of the phantasm, provided that the illusion is of a creature or hazard that could logically deal damage, such as by attacking. The target perceives the damage as a type appropriate to the illusion." }; SpellsList["power word heal"] = { name : "Power Word Heal", classes : ["bard"], source : [["P", 266]], level : 9, school : "Evoc", time : "1 a", range : "Touch", components : "V,S", duration : "Instantaneous", description : "1 crea heals all HP and stops being charmed, frightened, paralyzed, stunned; it can use rea to stand up", descriptionShorter : "1 crea heals all HP, not charmed, frightened, paralyzed, stunned; rea to stand up", descriptionFull : "A wave of healing energy washes over the creature you touch. The target regains all its hit points. If the creature is charmed, frightened, paralyzed, or stunned, the condition ends. If the creature is prone, it can use its reaction to stand up. This spell has no effect on undead or constructs." }; SpellsList["ray of sickness"] = { name : "Ray of Sickness", classes : ["sorcerer", "wizard"], source : [["P", 271]], level : 1, school : "Necro", time : "1 a", range : "60 ft", components : "V,S", duration : "Instantaneous", save : "Con", description : "Spell attack for 2d8+1d8/SL Poison dmg; save or also poisoned until end of my next turn", descriptionFull : "A ray of sickening greenish energy lashes out toward a creature within range. Make a ranged spell attack against the target. On a hit, the target takes 2d8 poison damage and must make a Constitution saving throw. On a failed save, it is also poisoned until the end of your next turn." + AtHigherLevels + "When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d8 for each slot level above 1st." }; SpellsList["searing smite"] = { name : "Searing Smite", classes : ["paladin"], source : [["P", 274]], level : 1, school : "Evoc", time : "1 bns", range : "Self", components : "V", duration : "Conc, 1 min", save : "Con", description : "Next melee weapon hit +1d6+1d6/SL Fire dmg and target ignites: start of turn save to end or 1d6 dmg", descriptionShorter : "Next melee wea hit +1d6+1d6/SL Fire dmg \u0026 ignites: start of turn save to end or 1d6 dmg", descriptionFull : "The next time you hit a creature with a melee weapon attack during the spell's duration, your weapon flares with white-hot intensity, and the attack deals an extra 1d6 fire damage to the target and causes the target to ignite in flames. At the start of each of its turns until the spell ends, the target must make a Constitution saving throw. On a failed save, it takes 1d6 fire damage. On a successful save, the spell ends. If the target or a creature within 5 feet of it uses an action to put out the flames, or if some other effect douses the flames (such as the target being submerged in water), the spell ends." + AtHigherLevels + "When you cast this spell using a spell slot of 2nd level or higher, the initial extra damage dealt by the attack increases by 1d6 for each slot above the 1st.", dynamicDamageBonus : { extraDmgGroupsSameType : /(end or )((?:\+?\d+d?\d*)+)/i } }; SpellsList["staggering smite"] = { name : "Staggering Smite", classes : ["paladin"], source : [["P", 278]], level : 4, school : "Evoc", time : "1 bns", range : "Self", components : "V", duration : "Conc, 1 min", save : "Wis", description : "Next melee weapon hit +4d6 Psychic dmg and save or dis. on atks/chks, no rea, until end next turn", descriptionFull : "The next time you hit a creature with a melee weapon attack during this spell's duration, your weapon pierces both body and mind, and the attack deals an extra 4d6 psychic damage to the target. The target must make a Wisdom saving throw. On a failed save, it has disadvantage on attack rolls and ability checks, and can't take reactions, until the end of its next turn." }; SpellsList["swift quiver"] = { name : "Swift Quiver", classes : ["ranger"], source : [["P", 279]], level : 5, school : "Trans", time : "1 bns", range : "Touch", components : "V,S,M", compMaterial : "A quiver containing at least one piece of ammunition", duration : "Conc, 1 min", description : "Quiver gives nonmagical ammo; bns a to make 2 atks with weapon that uses ammo from that quiver", descriptionFull : "You transmute your quiver so it produces an endless supply of nonmagical ammunition, which seems to leap into your hand when you reach for it." + "\n " + "On each of your turns until the spell ends, you can use a bonus action to make two attacks with a weapon that uses ammunition from the quiver. Each time you make such a ranged attack, your quiver magically replaces the piece of ammunition you used with a similar piece of nonmagical ammunition. Any pieces of ammunition created by this spell disintegrate when the spell ends. If the quiver leaves your possession, the spell ends." }; SpellsList["telepathy"] = { name : "Telepathy", classes : ["wizard"], source : [["P", 281]], level : 8, school : "Evoc", time : "1 a", range : "Unlimited", components : "V,S,M", compMaterial : "A pair of linked silver rings", duration : "24 h", description : "1 willing crea Int>0 and I telepathic link; share words, sensory information if on same plane", descriptionFull : "You create a telepathic link between yourself and a willing creature with which you are familiar. The creature can be anywhere on the same plane of existence as you. The spell ends if you or the target are no longer on the same plane." + "\n " + "Until the spell ends, you and the target can instantaneously share words, images, sounds, and other sensory messages with one another through the link, and the target recognizes you as the creature it is communicating with. The spell enables a creature with an Intelligence score of at least 1 to understand the meaning of your words and take in the scope of any sensory messages you send to it." }; SpellsList["thorn whip"] = { name : "Thorn Whip", classes : ["artificer", "druid"], source : [["P", 282]], level : 0, school : "Trans", time : "1 a", range : "30 ft", components : "V,S,M", compMaterial : "The stem of a plant with thorns", duration : "Instantaneous", description : "Melee spell atk for 1d6 Piercing dmg and pull crea up to 10 ft towards me; +1d6 at CL 5, 11, and 17", descriptionCantripDie : "Melee spell attack for `CD`d6 Piercing dmg and pull crea up to 10 ft towards me", descriptionFull : "You create a long, vine-like whip covered in thorns that lashes out at your command toward a creature in range. Make a melee spell attack against the target. If the attack hits, the creature takes 1d6 piercing damage, and if the creature is Large or smaller, you pull the creature up to 10 feet closer to you." + "\n " + "This spell's damage increases by 1d6 when you reach 5th level (2d6), 11th level (3d6), and 17th level (4d6)." }; SpellsList["thunderous smite"] = { name : "Thunderous Smite", classes : ["paladin"], source : [["P", 282]], level : 1, school : "Evoc", time : "1 bns", range : "Self", components : "V", duration : "Conc, 1 min", save : "Str", description : "Next melee weapon hit +2d6 Thunder dmg and save or 10 ft push and prone; audible in 300 ft", descriptionFull : "The first time you hit with a melee weapon attack during this spell's duration, your weapon rings with thunder that is audible within 300 feet of you, and the attack deals an extra 2d6 thunder damage to the target. Additionally, if the target is a creature, it must succeed on a Strength saving throw or be pushed 10 feet away from you and knocked prone." }; SpellsList["tsunami"] = { name : "Tsunami", classes : ["druid"], source : [["P", 284]], level : 8, school : "Conj", time : "1 min", range : "Sight", components : "V,S", duration : "Conc, 6 rnds", save : "Str", description : "300\xD750\xD7300ft (l\xD7w\xD7h) wall of water moves away at 50 ft/rnd; 6d10 Bludg. dmg; save halves; see B", descriptionShorter : "300\xD750\xD7300ft (l\xD7w\xD7h) wave moves away at 50 ft/rnd; 6d10 Bludg. dmg; save half; see B", descriptionMetric : "90\xD715\xD790m (l\xD7w\xD7h) wall of water moves away at 15 m/rnd; 6d10 Bludg. dmg; save halves; see B", descriptionShorterMetric : "90\xD715\xD790m (l\xD7w\xD7h) wave moves away at 15 m/rnd; 6d10 Bludg. dmg; save half; see B", descriptionFull : "A wall of water springs into existence at a point you choose within range. You can make the wall up to 300 feet long, 300 feet high, and 50 feet thick. The wall lasts for the duration." + "\n " + "When the wall appears, each creature within its area must make a Strength saving throw. On a failed save, a creature takes 6d10 bludgeoning damage, or half as much damage on a successful save." + "\n " + "At the start of each of your turns after the wall appears, the wall, along with any creatures in it, moves 50 feet away from you. Any Huge or smaller creature inside the wall or whose space the wall enters when it moves must succeed on a Strength saving throw or take 5d10 bludgeoning damage. A creature can take this damage only once per round. At the end of the turn, the wall's height is reduced by 50 feet, and the damage creatures take from the spell on subsequent rounds is reduced by 1d10. When the wall reaches 0 feet in height, the spell ends." + "\n " + "A creature caught in the wall can move by swimming. Because of the force of the wave, though, the creature must make a successful Strength (Athletics) check against your spell save DC in order to move at all. If it fails the check, it can't move. A creature that moves out of the area falls to the ground." }; SpellsList["witch bolt"] = { name : "Witch Bolt", classes : ["sorcerer", "warlock", "wizard"], source : [["P", 289]], level : 1, school : "Evoc", time : "1 a", range : "30 ft", components : "V,S,M", compMaterial : "A twig from a tree that has been struck by lightning", duration : "Conc, 1 min", description : "Rngd spell atk 1d12+1d12/SL Lightn. dmg; 1 a 1d12 Lightn. dmg; ends if out of range or I do other a", descriptionShorter : "Rngd atk 1d12+1d12/SL Lightn. dmg; 1 a 1d12 Lightn. dmg; end: out of range/do other a", descriptionFull : "A beam of crackling, blue energy lances out toward a creature within range, forming a sustained arc of lightning between you and the target. Make a ranged spell attack against that creature. On a hit, the target takes 1d12 lightning damage, and on each of your turns for the duration, you can use your action to deal 1d12 lightning damage to the target automatically. The spell ends if you use your action to do anything else. The spell also ends if the target is ever outside the spell's range or if it has total cover from you." + AtHigherLevels + "When you cast this spell using a spell slot of 2nd level or higher, the initial damage increases by 1d12 for each slot level above 1st.", dynamicDamageBonus : { multipleDmgMoments : false, extraDmgGroupsSameType : /(1 a )(.*?)( Lightn. dmg)/i } }; SpellsList["wrathful smite"] = { name : "Wrathful Smite", classes : ["paladin"], source : [["P", 289]], level : 1, school : "Evoc", time : "1 bns", range : "Self", components : "V", duration : "Conc, 1 min", save : "Wis", description : "Next melee weapon hit +1d6 Psychic dmg and save or frightened; it can take 1 a for extra save", descriptionFull : "The next time you hit with a melee weapon attack during this spell's duration, your attack deals an extra 1d6 psychic damage. Additionally, if the target is a creature, it must make a Wisdom saving throw or be frightened of you until the spell ends. As an action, the creature can make a Wisdom check against your spell save DC to steel its resolve and end this spell." }; // pub_20140819_HotDQ+20141104_RoT.js // This file adds the background features and magic items from the Hoard of the Dragon Queen and Rise of Tiamat adventure books to MPMB's Character Record Sheet // Define the source SourceList.HotDQ={ name : "Hoard of the Dragon Queen [background features, items]", abbreviation : "HotDQ", group : "Adventure Books", campaignSetting : "Forgotten Realms", url : "https://wpn.wizards.com/en/products/tyranny-of-dragons", date : "2014/08/19" }; SourceList.RoT = { name : "Rise of Tiamat [items]", abbreviation : "RoT", group : "Adventure Books", campaignSetting : "Forgotten Realms", url : "https://wpn.wizards.com/en/products/tyranny-of-dragons", date : "2014/11/04" }; // Background features BackgroundFeatureList["cult of the dragon infiltrator"] = { description : "I have infiltrated the ranks of the Cult of the Dragon. Having spied on the organization for quite some time, I am familiar with its inner workings and customs. I have a second identity as an initiate of the cult, enough of a facade to blend in as a simple grunt or servant.", source : [["HotDQ", 87], ["ALbackground", 0]] }; BackgroundFeatureList["dragon scholar"] = { description : "I have studied dragons and their lore for many years. I can automatically identify locations built or used by dragons, and I can identify dragon eggs and scales by sight. If I fail an Intelligence check to recall lore relating to dragons, I know someone or some book that I can consult for the answer unless the DM rules that the lore is unknown.", source : [["HotDQ", 87], ["ALbackground", 0]] }; // Magic Items // The magic cauldron on page 79 is omitted as its only magic is that it functions as the material component for the Augury spell. Not something an adventurer is likely to use, with it being 50 lb. MagicItemsList["dragongleam"] = { name : "Dragongleam", source : [["HotDQ", 69]], type : "weapon (spear)", rarity : "rare", magicItemTable : "F", description : "This rusty spear is engraved with draconic runes on its crossguard which read \"Tiamat's Eyes Shine\". The spear has 10 charges. As an action while holding it, I can say this command and expend 1 charge to cast Daylight. The spear loses its magic once all charges are expended.", descriptionFull : "This rusty spear is engraved with draconic runes on its crossguard which read \"Tiamat's Eyes Shine\". The spear has 10 charges. While holding it, you can say the command and expend 1 charge as an action to cast the Daylight spell. The spear loses this property if it has no charges left.", weight : 3, usages : 10, recovery : "Never", spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "1 charge", spells : ["daylight"], selection : ["daylight"], firstCol : 1 }], spellChanges : { "daylight" : { component : "V,M\u0192" } }, weaponOptions : [{ baseWeapon : "spear", regExpSearch : /dragongleam/i, name : "Dragongleam", source : [["HotDQ", 69]], selectNow : true }] } MagicItemsList["tankard of plenty"] = { name : "Tankard of Plenty", source : [["HotDQ", 74]], type : "wondrous item", rarity : "uncommon", magicItemTable : "A", description : 'This golden stein is decorated with dancing dwarves and grain patterns. Speaking the command word "Illefarn" while grasping the handle fills the tankard with three pints of rich dwarven ale. This power can be used up to three times per day.', descriptionFull : 'This golden stein is decorated with dancing dwarves and grain patterns. Speaking the command word ("Illefarn") while grasping the handle fills the tankard with three pints of rich dwarven ale. This power can be used up to three times per day.', usages : 3, recovery : "Day" } var HotDQ_tempDragonMaskNoteTxt = [ desc([ toUni("Damage Absorption") + ". You have resistance against DTYPE damage. If you already have resistance to DTYPE damage from another source, you instead have immunity to DTYPE damage. If you already have immunity to DTYPE damage from another source, whenever you are subjected to DTYPE damage, you take none of that damage and regain a number of hit points equal to half the damage dealt of that type.", toUni("Draconic Majesty") + ". While you are wearing no armor, you can add your Charisma bonus to your Armor Class.", toUni("Dragon Breath") + ". If you have a breath weapon that requires rest to recharge, it gains a recharge of 6.", toUni("Dragon Sight") + ". You gain darkvision out to 60 feet, or to an additional 60 feet if you already have that sense. Once per day, you can gain blindsight out to 30 feet for 5 minutes.", toUni("Dragon Tongue") + ". You can speak and understand Draconic. You also have advantage on any Charisma check you make against DCOLOUR dragons.", toUni("Legendary Resistance (1/Day)") + ". If you fail a saving throw, you can choose to succeed instead." ]), [ " It reshapes to fit my face and head when I attuned to it. While I'm wearing a dragon mask and attuned to it, it grants me the following benefits.", "\u2022 Damage Absorption. I have resistance against DTYPE damage. If I already have resistance to DTYPE damage from another source, I instead gain immunity to DTYPE damage. If I already have immunity to DTYPE damage from another source, whenever I am subjected to DTYPE damage, I take none of that damage and instead regain a number of hit points equal to half the DTYPE damage dealt.", "\u2022 Draconic Majesty. While I am wearing no armor, I can add my Charisma bonus to my Armor Class.", "\u2022 Dragon Breath. If I have a breath weapon that requires rest to recharge, it gains a recharge of 6.", "\u2022 Dragon Sight. I gain darkvision out to 60 ft, or to an additional 60 ft if I already have that sense. Once per day, I can gain blindsight out to 30 ft for 5 minutes.", "\u2022 Dragon Tongue. I can speak and understand Draconic. I also have advantage on any Charisma check I make against DCOLOUR dragons.", "\u2022 Legendary Resistance. Once per day when I fail a saving throw, I can choose to succeed instead." ].join("\n ") ]; MagicItemsList["dragon mask"] = { name : "Dragon Mask", source : [["HotDQ", 94]], type : "wondrous item", rarity : "legendary", storyItemAL : true, description : "This mask reshapes to fit my head. It grants me the ability to absorb associated damage type, darkvision 60 ft, blindsight 30 ft (1/day), Legendary Resistance (1/day), adv. on Cha checks vs. a dragon type, the ability speak Draconic, and lets me add my Cha mod to AC while not wearing armor, see Notes page.", descriptionFull : "Each dragon mask is a legendary wondrous item that reshapes to fit the face and head of a wearer attuned to it. While you are wearing any dragon mask and attuned to it, you gain the following benefits." + HotDQ_tempDragonMaskNoteTxt[0].replace(/You have resistance against DTYPE damage.*?\n/, "You have resistance against the mask's damage type. If you already have resistance to that damage type from another source, you instead have immunity to that damage type. If you already have immunity to that damage type from another source, whenever you are subjected to damage of that type, you take none of that damage and regain a number of hit points equal to half the damage dealt of that type.\n").replace("DCOLOUR dragons", "dragons that share the mask's color"), attunement : true, languageProfs : ["Draconic"], vision : [["Darkvision", "fixed 60"], ["Darkvision", "+60"]], usages : 1, recovery : "Day", additional : "Legendary Resistance", extraLimitedFeatures : [{ name : "Dragon Mask (Blindsight 30 ft, 5 min)", usages : 1, recovery : "Day" }], extraAC : [{ mod : "Cha", magic : true, text : "I add my Charisma modifier to AC while I'm not wearing armor.", stopeval : function (v) { return v.wearingArmor; } }], calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.dbBreathWeapon || (/^(?=.*breath)(?=.*weapon).*$/i).test(v.theWea.name)) { fields.Description = fields.Description.replace(/(Us(e|able)( only)? )?once per (short|long) rest/i, 'Recharge 6'); }; } ] }, incrementDamageRes : function (dType, dRes) { SetProf( "savetxt", CurrentProfs.resistance[dRes] && CurrentProfs.resistance[dRes].src.length > 1, { immune : [dRes] }, !dType ? "Mask of the Dragon Queen (magic item)" : dType + " Dragon Mask (magic item)" ); }, choices : ["Black", "Blue", "Green", "Red", "White", "Mask of the Dragon Queen"], choicesNotInMenu : true, "black" : { name : "Black Dragon Mask", description : "This mask reshapes to fit my head. It grants me the ability to absorb acid damage, darkvision 60 ft, blindsight 30 ft (1/day), Legendary Resistance (1/day), adv. on Cha checks vs. black dragons, the ability speak Draconic, and lets me add my Cha mod to AC while not wearing armor, and more, see Notes page.", descriptionLong : "This horned mask of glossy ebony has horns and a skull-like mien. The mask reshapes to fit my face and head when I attuned to it. It grants me the ability to absorb acid damage, depending on how resistant I'm to it already. Additionally, it gives me darkvision 60 ft (or +60 ft) and blindsight 30 ft once per day for 5 min, the ability speak Draconic, advantage on Charisma checks against black dragons, lets me add my Charisma modifier to AC while I'm not wearing armor, and water breathing. Once per day when I fail a saving throw, I can use the mask to succeed on it instead. See Notes page.", descriptionFull : "This horned mask of glossy ebony has horns and a skull-like mien. The mask reshapes to fit a wearer attuned to it. While you are wearing the mask and attuned to it, you can access the following properties." + HotDQ_tempDragonMaskNoteTxt[0].replace(/DTYPE/g, "acid").replace("DCOLOUR", "black") + "\n " + toUni("Water Breathing") + ". You can breathe underwater.", dmgres : ["Acid"], changeeval : function () { MagicItemsList["dragon mask"].incrementDamageRes("Black", "acid"); }, toNotesPage : [{ name : "Features", note : "\n This horned mask of glossy ebony has horns and a skull-like mien." + HotDQ_tempDragonMaskNoteTxt[1].replace(/DTYPE/g, "acid").replace("DCOLOUR", "black") + "\n Water Breathing. I can breathe underwater." }] }, /* Although the adventure book only includes the Black Dragon Mask, this code also includes the Blue, Green, Red, and White Dragon Masks. The rules for these are found in the Rise of Tiamat Online Supplement, here: https://media.wizards.com/2014/downloads/dnd/RiseTiamatSupplementv0.2_Printer.pdf */ "blue" : { name : "Blue Dragon Mask", source : [["HotDQ", 0], ["RoTOS", 4]], description : "This mask reshapes to fit my head. It grants me the ability to absorb lightning damage, darkvision 60 ft, blindsight 30 ft (1/day), Legendary Resistance (1/day), adv. Cha checks vs. blue dragons, the ability speak Draconic, and lets me add my Cha mod to AC while not wearing armor, and more, see Notes page.", descriptionLong : "This mask of glossy azure has spikes around its edges and a ridged horn in its center. The mask reshapes to fit my face and head when I attuned to it. It grants me the ability to absorb lightning damage, depending on how resistant I'm to it already. Additionally, it gives me darkvision 60 ft (or +60 ft) and blindsight 30 ft once per day for 5 min, the ability speak Draconic, advantage on Charisma checks against blue dragons, lets me add my Charisma modifier to AC while I'm not wearing armor, and Lingering Shock. Once per day when I fail a saving throw, I can use the mask to succeed on it instead. See Notes page.", descriptionFull : "This mask of glossy azure has spikes around its edges and a ridged horn in its center. The mask reshapes to fit a wearer attuned to it. While you are wearing the mask and attuned to it, you can access the following properties." + HotDQ_tempDragonMaskNoteTxt[0].replace(/DTYPE/g, "lightning").replace("DCOLOUR", "blue") + "\n " + toUni("Lingering Shock") + ". If you deal lightning damage to a creature, it can't take reactions until its next turn.", dmgres : ["Lightning"], changeeval : function () { MagicItemsList["dragon mask"].incrementDamageRes("Blue", "lightning"); }, toNotesPage : [{ name : "Features", note : "\n This mask of glossy azure has spikes around its edges and a ridged horn in its center." + HotDQ_tempDragonMaskNoteTxt[1].replace(/DTYPE/g, "lightning").replace("DCOLOUR", "blue") + "\n Lingering Shock. If I deal lightning damage to a creature, it can't take reactions until its next turn." }] }, "green" : { name : "Green Dragon Mask", source : [["HotDQ", 0], ["RoTOS", 4]], description : "This mask reshapes to fit my head. It grants me the ability to absorb poison damage, darkvision 60 ft, blindsight 30 ft (1/day), Legendary Resistance (1/day), adv. on Cha checks vs. green dragons, the ability speak Draconic, and lets me add my Cha mod to AC while not wearing armor, and more, see Notes page.", descriptionLong : "This mottled green mask is surmounted by a frilled crest and has spikes along its jaw. The mask reshapes to fit my face and head when I attuned to it. It grants me the ability to absorb poison damage, depending on how resistant I'm to it already. Additionally, it gives me darkvision 60 ft (or +60 ft) and blindsight 30 ft once per day for 5 min, the ability speak Draconic, advantage on Charisma checks against green dragons, lets me add my Charisma modifier to AC while I'm not wearing armor, and water breathing. Once per day when I fail a saving throw, I can use the mask to succeed on it instead. See Notes page.", descriptionFull : "This mottled green mask is surmounted by a frilled crest and has leathery spiked plates along its jaw. The mask reshapes to fit a wearer attuned to it. While you are wearing the mask and attuned to it, you can access the following properties." + HotDQ_tempDragonMaskNoteTxt[0].replace(/DTYPE/g, "poison").replace("DCOLOUR", "green") + "\n " + toUni("Water Breathing") + ". You can breathe underwater.", dmgres : ["Poison"], changeeval : function () { MagicItemsList["dragon mask"].incrementDamageRes("Green", "poison"); }, toNotesPage : [{ name : "Features", note : "\n This mottled green mask is surmounted by a frilled crest and has leathery spiked plates along its jaw." + HotDQ_tempDragonMaskNoteTxt[1].replace(/DTYPE/g, "poison").replace("DCOLOUR", "green") + "\n Water Breathing. I can breathe underwater." }] }, "red" : { name : "Red Dragon Mask", source : [["HotDQ", 0], ["RoTOS", 4]], description : "This mask reshapes to fit my head. It grants me the ability to absorb fire damage, darkvision 60 ft, blindsight 30 ft (1/day), Legendary Resistance (1/day), adv. on Cha checks vs. red dragons, the ability speak Draconic, and lets me add my Cha mod to AC while not wearing armor, and more, see Notes page.", descriptionLong : "This mask of glossy crimson has swept-back horns and spiked cheek ridges. The mask reshapes to fit my face and head when I attuned to it. It grants me the ability to absorb fire damage, depending on how resistant I'm to it already. Additionally, it gives me darkvision 60 ft (or +60 ft) and blindsight 30 ft once per day for 5 min, the ability speak Draconic, advantage on Charisma checks against red dragons, lets me add my Charisma modifier to AC while I'm not wearing armor, and Dragon Fire. Once per day when I fail a saving throw, I can use the mask to succeed on it instead. See Notes page.", descriptionFull : "This mask of glossy crimson has swept-back horns and spiked cheek ridges. The mask reshapes to fit a wearer attuned to it. While you are wearing the mask and attuned to it, you can access the following properties." + HotDQ_tempDragonMaskNoteTxt[0].replace(/DTYPE/g, "fire").replace("DCOLOUR", "red") + "\n " + toUni("Dragon Fire") + ". If you deal fire damage to a creature or flammable object, it starts burning. At the start of each of its turns, a creature burning in this way takes 1d6 fire damage. A creature that can reach the burning target can use an action to extinguish the fire.", dmgres : ["Fire"], changeeval : function () { MagicItemsList["dragon mask"].incrementDamageRes("red", "fire"); }, toNotesPage : [{ name : "Features", note : "\n This mask of glossy crimson has swept-back horns and spiked cheek ridges." + HotDQ_tempDragonMaskNoteTxt[1].replace(/DTYPE/g, "fire").replace("DCOLOUR", "red") + "\n Dragon Fire. If I deal fire damage to a creature or flammable object, it starts burning. At the start of each of its turns, a creature burning in this way takes 1d6 fire damage. A creature that can reach the burning target can use an action to extinguish the fire." }] }, "white" : { name : "White Dragon Mask", source : [["HotDQ", 0], ["RoTOS", 4]], description : "This mask reshapes to fit my head. It grants me the ability to absorb cold damage, darkvision 60 ft, blindsight 30 ft (1/day), Legendary Resistance (1/day), adv. on Cha checks vs. white dragons, the ability speak Draconic, and lets me add my Cha mod to AC while not wearing armor, and more, see Notes page.", descriptionLong : "This gleaming mask is white with highlights of pale blue and is topped by a spined crest. The mask reshapes to fit my face and head when I attuned to it. It grants me the ability to absorb cold damage, depending on how resistant I'm to it already. Additionally, it gives me darkvision 60 ft (or +60 ft) and blindsight 30 ft once per day for 5 min, the ability speak Draconic, advantage on Charisma checks against white dragons, lets me add my Charisma modifier to AC while I'm not wearing armor, and Winter's Fury. Once per day when I fail a saving throw, I can use the mask to succeed on it instead. See Notes page.", descriptionFull : "This gleaming mask is white with highlights of pale blue and is topped by a spined crest. The mask reshapes to fit a wearer attuned to it. While you are wearing the mask and attuned to it, you can access the following properties." + HotDQ_tempDragonMaskNoteTxt[0].replace(/DTYPE/g, "cold").replace("DCOLOUR", "white") + "\n " + toUni("Winter's Fury") + ". While your current hit points are equal to or less than half your hit point maximum, you deal an extra 1d8 cold damage with your melee attacks.", dmgres : ["Cold"], changeeval : function () { MagicItemsList["dragon mask"].incrementDamageRes("white", "cold"); }, toNotesPage : [{ name : "Features", note : "\n This gleaming mask is white with highlights of pale blue and is topped by a spined crest." + HotDQ_tempDragonMaskNoteTxt[1].replace(/DTYPE/g, "cold").replace("DCOLOUR", "white") + "\n Winter's Fury. While my current hit points are equal to or less than half my hit point maximum, I deal an extra 1d8 cold damage with my melee attacks." }] }, "mask of the dragon queen" : { name : "Mask of the Dragon Queen", source : [["RoT", 94]], description : "This mask reshapes to fit my head. It allows to absorb acid, cold, fire, lightning, and poison damage, darkvision 60 ft, blindsight 30 ft (1/day), Legendary Resistance (5/day), adv. on Cha checks vs. dragons, the ability speak Draconic, and lets me add my Cha mod to AC while not wearing armor, and more, see Notes page.", descriptionLong : "This mask gives me a draconic visage and covers my face, neck, and shoulders. The mask reshapes to fit my face and head when I attuned to it. It grants me the ability to absorb acid, cold, fire, lightning, and poison damage, depending on how resistant I'm already. Additionally, it gives me darkvision 60 ft (or +60 ft) and blindsight 30 ft once per day for 5 min, the ability speak Draconic, advantage on Charisma checks against dragons, lets me add my Charisma modifier to AC while not wearing armor, and more. 5 times per day when I fail a saving throw, I can use the mask to succeed on it instead. See Notes page.", descriptionFull : "When two or more of the dragon masks are assembled they magically transform into the Mask of the Dragon Queen. Each mask shrinks to become the modeled head of a chromatic dragon, appearing to roar its devotion to Tiamat where all the masks brought together are arranged crown-like on the wearer's head. Below the five masks, a new mask shapes itself, granting the wearer a draconic visage that covers the face, neck, and shoulders. The mask reshapes to fit a wearer attuned to it. While you are wearing the mask and attuned to it, you can access the following properties." + HotDQ_tempDragonMaskNoteTxt[0].replace(/You have resistance against DTYPE damage.*?\n/, "You have resistance against acid, cold, fire, lightning, and poison damage. If you already have resistance to a damage type from another source, you instead have immunity to that damage type. If you already have immunity to a damage type from another source, whenever you are subjected to that damage type, you take none of that damage and regain a number of hit points equal to half the damage dealt of that type.\n").replace("DCOLOUR ", "").replace(toUni("(1/Day)"), toUni("(5/Day)")) + "\n\n It can have the properties of any one of the colored masks, but only can have one active at a time. These are the following:\n " + toUni("Water Breathing (black and green)") + ". You can breathe underwater.\n " + toUni("Lingering Shock (blue)") + ". If you deal lightning damage to a creature, it can't take reactions until its next turn.\n " + toUni("Dragon Fire (red)") + ". If you deal fire damage to a creature or flammable object, it starts burning. At the start of each of its turns, a creature burning in this way takes 1d6 fire damage. A creature that can reach the burning target can use an action to extinguish the fire.\n " + toUni("Winter's Fury (white)") + ". While your current hit points are equal to or less than half your hit point maximum, you deal an extra 1d8 cold damage with your melee attacks.", dmgres : ["Acid", "Cold", "Fire", "Lightning", "Poison"], changeeval : function () { MagicItemsList["dragon mask"].incrementDamageRes("", "acid"); MagicItemsList["dragon mask"].incrementDamageRes("", "cold"); MagicItemsList["dragon mask"].incrementDamageRes("", "fire"); MagicItemsList["dragon mask"].incrementDamageRes("", "lightning"); MagicItemsList["dragon mask"].incrementDamageRes("", "poison"); }, toNotesPage : [{ name : "Features", note : "\n When two or more of the dragon masks are assembled they magically transform into the Mask of the Dragon Queen. Each mask shrinks to become the modeled head of a chromatic dragon, appearing to roar its devotion to Tiamat where all the masks brought together are arranged crown-like on the wearer's head. Below the five masks, a new mask shapes itself, granting the wearer a draconic visage that covers the face, neck, and shoulders." + HotDQ_tempDragonMaskNoteTxt[1].replace(/Damage Absorption.*?\n/, "Damage Absorption. I have resistance to acid, cold, fire, lightning, and poison damage. If I already have resistance to a damage type from another source, I instead have immunity to that damage type. If I already have immunity to a damage type from another source, whenever I am subjected to that damage type, I take none of that damage and regain a number of hit points equal to half the damage dealt of that type.\n").replace("DCOLOUR ", "").replace("Once per day when", "Five times per day when") + "\n \u2022 Special Properties. I can access the properties of any one of the colored masks, but only can have one active at a time. These are the following:"+ "\n \u25E6 Water Breathing (black and green). I can breathe underwater."+ "\n \u25E6 Lingering Shock (blue). If I deal lightning damage to a creature, it can't take reactions until its next turn."+ "\n \u25E6 Dragon Fire (red). If I deal fire damage to a creature or flammable object, it starts burning. At the start of each of its turns, a creature burning in this way takes 1d6 fire damage. A creature that can reach the burning target can use an action to extinguish the fire."+ "\n \u25E6 Winter's Fury (white). While my current hit points are equal to or less than half my hit point maximum, I deal an extra 1d8 cold damage with my melee attacks." }], usages : 5, recovery : "Day", additional : "Legendary Resistance" } } MagicItemsList["hazirawn"] = { name : "Hazirawn", source : [["HotDQ", 94]], type : "weapon (greatsword)", rarity : "legendary", storyItemAL : true, description : "This sentient, neutral evil, greatsword functions depend on whether you are attuned to it or not.", descriptionFull : "A sentient (neutral evil) greatsword, Hazirawn is capable of speech in Common and Netherese. Even if you aren't attuned to the sword, you gain a +1 bonus on attack and damage rolls made with this weapon and you deal an extra 1d6 necrotic damage when you hit with the weapon.\n " + toUni("Increased Potency") + ". While you are attuned to this weapon, its bonus on attack and damage rolls increases to +2, and a hit deals an extra 2d6 necrotic damage (instead of 1d6).\n " + toUni("Spells") + ". Hazirawn has 4 charges to cast spells. As long as the sword is attuned to you and you are holding it in your hand, you can cast Detect Magic (1 charge), Detect Evil and Good (1 charge), or Detect Thoughts (2 charges). Each night at midnight, Hazirawn regains 1d4 expended charges.\n " + toUni("Wounding") + ". While you are attuned to the weapon, any creature that you hit with Hazirawn can't regain hit points for 1 minute. The target can make a DC 15 Constitution saving throw at the end of each of its turns, ending this effect early on a success.", weight : 6, choices : ["not attuned", "attuned"], "not attuned" : { name : "Hazirawn\u200A", description : "A sentient (neutral evil) greatsword, Hazirawn is capable of speech in Common and Netherese. While I'm not attuned to the sword, I gain a +1 bonus on attack and damage rolls made with it. It also deals an extra 1d6 necrotic damage on attacks made with the sword.", weaponOptions : [{ baseWeapon : "greatsword", regExpSearch : /hazirawn/i, name : "Hazirawn", source : [["HotDQ", 94]], description : "Heavy, two-handed; +1d6 necrotic damage", modifiers : [1, 1], selectNow : true }] }, "attuned" : { name : "Hazirawn\u200A\u200A", attunement : true, description : "This sentient, neutral evil, greatsword adds +2 to damage and to hit rolls, deals +2d6 necrotic damage, and those hit with it can't regain HP for 1 min, but can make a DC 15 Con save at the end of each turn to stop this effect. It has 4 charges to cast spells, regaining 1d4 at midnight. It speaks Common and Netherese.", extraLimitedFeatures : [{ name : "Hazirawn (regains 1d4)", usages : 4, recovery : "Midnight" }], weaponOptions : [{ baseWeapon : "greatsword", regExpSearch : /hazirawn/i, name : "Hazirawn", source : [["HotDQ", 94]], description : "Heavy, two-handed; +2d6 necrotic damage; Wounding (can't regain HP for 1 min, DC 15 Con save to stop)", modifiers : [2, 2], selectNow : true }], spellcastingBonus : [{ name : "1 charge", spells : ["detect evil and good", "detect magic"], selection : ["detect evil and good", "detect magic"], firstCol : 1, times : 2 }, { name : "2 charges", spells : ["detect thoughts"], selection : ["detect thoughts"], firstCol : 2 }], fixedDC : 15, // assumed from the fact that its Wounding property has DC 15 spellFirstColTitle : "Ch" } } MagicItemsList["insignia of claws"] = { name : "Insignia of Claws", source : [["HotDQ", 94]], type : "wondrous item", rarity : "uncommon", magicItemTable : "F", description : "The jewels in the insignia flare with purple light when I enter combat, empowering my fists. While wearing the insignia, I gain a +1 bonus to the attack rolls and the damage rolls of my unarmed strikes and natural weapons. Such attacks are considered to be magical.", descriptionFull : "The jewels in the insignia of the Cult of the Dragon flare with purple light when you enter combat, empowering your natural fists or natural weapons.\n While wearing the insignia you gain a +1 bonus to the attack rolls and the damage rolls you make with unarmed strikes and natural weapons. Such attacks are considered to be magical.", calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == "unarmed strike" && !(/counts as( a)? magical/i).test(fields.Description)) { fields.Description += (fields.Description ? '; ' : '') + 'Counts as magical'; }; }, "My unarmed strikes gain a +1 bonus to their attack and damage rolls, and count as magical." ], atkCalc : [ function (fields, v, output) { if (v.baseWeaponName == "unarmed strike") { output.magic += 1; } }, '' ] } } MagicItemsList["wand of winter"] = { name : "Wand of Winter", source : [["HotDQ", 94]], type : "wand", rarity : "rare", attunement : true, magicItemTable : "G", description : "This wand looks and feels like an icicle and has 7 charges, regaining 1d6+1 expended charges at dawn. If I use its last charge, roll a d20. On a 20, it melts away. I can use its charges to cast spells with DC 15/+5 to hit: Ray of Frost (0 charges: 1d8, 1 charge: 2d8), Sleet Storm (3 charges), or Ice Storm (4 charges).", descriptionFull : "This wand looks and feels like an icicle. You must be attuned to the wand to use it.\n The wand has 7 charges, which are used to fuel the spells within it. With the wand in hand, you can use your action to cast one of the following spells from the wand, even if you are incapable of casting spells: Ray of Frost (no charges, or 1 charge to cast at 5th level; +5 to hit with ranged spell attack), Sleet Storm (3 charges; spell save DC 15), or Ice Storm (4 charges; spell save DC 15). No components are required. The wand regains 1d6+1 expended charges each day at dawn. If you expend the wand's last charge, roll a d20. On a 20, the wand melts away, forever destroyed.", weight : 1, usages : 7, recovery : "dawn", additional : "regains 1d6+1", fixedDC : 15, fixedSpAttack : 5, spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "1 charge", spells : ["ray of frost"], selection : ["ray of frost"], firstCol : 1 }, { name : "0 charges (at will)", spells : ["ray of frost"], selection : ["ray of frost"], firstCol : "atwill" }, { name : "3 charges", spells : ["sleet storm"], selection : ["sleet storm"], firstCol : 3 }, { name : "4 charges", spells : ["ice storm"], selection : ["ice storm"], firstCol : 4 }], calcChanges : { spellAdd : [ function (spellKey, spellObj, spName, isDuplicate) { if (spellKey == "ray of frost" && spName == "wand of winter") { if (isDuplicate) { spellObj.firstCol = "1"; spellObj.description = "Spell attack for 2d8 Cold dmg and -10 ft speed until start of my next turn"; } else { spellObj.description = "Spell attack for 1d8 Cold dmg and -10 ft speed until start of my next turn"; } return true; }; }, "" ] } } MagicItemsList["dragontooth dagger"] = { name : "Dragontooth Dagger", source : [["RoT", 94]], type : "weapon (dagger)", rarity : "rare", magicItemTable : "H", description : "This dagger is fashioned from the tooth of a dragon. Its handle is its leather wrapped root and there is no crossguard. It adds a +1 bonus to attack and damage rolls made with it and deals +1d6 acid damage on a hit. Against the enemies of the Cult of the Dragon this increases to a +2 bonus and +2d6 acid damage.", descriptionFull : "A dagger fashioned from the tooth of a dragon. While the blade is obviously a fang or predator's tooth, the handle is leather wrapped around the root of the tooth, and there is no crossguard.\n You gain a +1 bonus to attack and damage rolls made with this weapon. On a hit with this weapon, the target takes an extra 1d6 acid damage.\n " + toUni("Draconic Potency") + ". Against enemies of the Cult of the Dragon, the dagger's bonus to attack and damage rolls increases to 2, and the extra acid damage increases to 2d6.", weight : 1, weaponOptions : [{ baseWeapon : "dagger", regExpSearch : /^(?=.*dragontooth)(?=.*dagger).*$/i, name : "Dragontooth Dagger", source : [["RoT", 94]], description : "Finesse, light, thrown; +1d6 acid damage; Vs. Cult of the Dragon enemies: +2 magic \u0026 +2d6 acid damage", modifiers : [1, 1], selectNow : true }] } // Beast // Sled dog is just a wolf under a different name, it has been added to the SRD code as a `nameAlt` // pub_20140930_MM.js // This file adds all the player-material from the Monster Manual to MPMB's Character Record Sheet // Define the source SourceList.M={ name : "Monster Manual", abbreviation : "MM", group : "Core Sources", url : "https://dnd.wizards.com/products/monster-manual", date : "2014/09/30" }; // Dinosaurs not in the SRD CreatureList["allosaurus"] = { name : "Allosaurus", source : [["M", 79]], size : 2, //Large type : "Beast", alignment : "Unaligned", ac : 13, hp : 51, hd : [6, 10], //[#, die] speed : "60 ft", scores : [19, 13, 17, 2, 12, 5], //[Str, Dex, Con, Int, Wis, Cha] skills : { "perception" : 5 }, passivePerception : 15, challengeRating : "2", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Claw", ability : 1, damage : [1, 8, "slashing"], //[#, die, type] "" for die is allowed range : "Melee (5 ft)", description : "If used after moving 30 ft straight in the same round, see Pounce trait" }, { name : "Bite", ability : 1, damage : [2, 10, "piercing"], //[#, die, type] "" for die is allowed range : "Melee (5 ft)", description : "Can be used in combination with claw while pouncing (see Pounce trait)" }], traits : [{ name : "Pounce", description : "If the allosaurus moves at least 30 ft straight toward a creature and then hits it with a claw attack on the same turn, that target must succeed on a DC 13 Strength saving throw or be knocked prone. If the target is prone, the allosaurus can make one bite attack against it as a bonus action." }] }; CreatureList["ankylosaurus"] = { name : "Ankylosaurus", source : [["M", 79]], size : 1, //Huge type : "Beast", alignment : "Unaligned", ac : 15, hp : 68, hd : [8, 12], //[#, die] speed : "30 ft", scores : [19, 11, 15, 2, 12, 5], //[Str, Dex, Con, Int, Wis, Cha] passivePerception : 11, challengeRating : "3", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Tail", ability : 1, damage : [4, 6, "bludgeoning"], //[#, die, type] "" for die is allowed range : "Melee (10 ft)", description : "Target must succeed on a DC 14 Strength saving throw or be knocked prone", modifiers : [1, ""] }] }; CreatureList["pteranodon"] = { name : "Pteranodon", source : [["M", 79]], size : 3, //Medium type : "Beast", alignment : "Unaligned", ac : 13, hp : 13, hd : [3, 8], //[#, die] speed : "10 ft, fly 60 ft", scores : [12, 15, 10, 2, 9, 5], //[Str, Dex, Con, Int, Wis, Cha] skills : { "perception" : 1 }, passivePerception : 11, challengeRating : "1/4", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Bite", ability : 1, damage : [1, 6, "piercing"], //[#, die, type] "" for die is allowed range : "Melee (5 ft)", description : "" }], traits : [{ name : "Flyby", description : "The pteranodon doesn't provoke opportunity attacks when it flies out of an enemy's reach." }] }; // Special familiars not in the SRD CreatureList["faerie dragon"] = { // With contributions by Patrick O. name : "Faerie Dragon", nameAlt : ["Dragon, Faerie"], source : [["M", 133]], size : 5, //Tiny type : "Dragon", alignment : "Chaotic Good", ac : 15, hp : 14, hd : [4, 4], speed : "10 ft, fly 60 ft", scores : [3, 20, 13, 14, 12, 16], //[Str, Dex, Con, Int, Wis, Cha] skills : { "arcana" : 4, "perception" : 3, "stealth" : 7 }, senses : "Darkvision 60 ft", passivePerception : 13, languages : "Draconic, Sylvan", challengeRating : "1", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Bite", ability : 2, damage : [1, "", "piercing"], range : "Melee (5 ft)", description : "", abilitytodamage : false }, { name : "Euphoria Breath (Recharge 5-6)", ability : 3, damage : ["Wis save", "", "Euphoria"], range : "5 ft", description : "For 1 min, target rolls d6 at turn start: 1-4 move random (no actions), 5-6 save again (no actions/move)", dc : true, abilitytodamage : false, tooltip : "The dragon exhales a puff of euphoria gas at one creature within 5 feet of it. The target must succeed on a DC 11 Wisdom saving throw, or for 1 minute, the target can't take reactions and must roll a d6 at the start of each of its turns to determine its behavior during the turn: 1-4 - the target takes no action or bonus action and uses all its movement to move in a random direction. 5-6 - the target doesn't move, and the only thing it can do on its turn is make a DC 11 Wisdom saving throw, ending the effect on itself on a success." }], traits : [{ name : "Superior Invisibility", description : "As a bonus action, the dragon can magically turn invisible until its concentration ends (as with a spell). Anything it wears or carries is invisible with it." }, { name : "Limited Telepathy", description : "Using telepathy, the dragon can magically communicate with any other faerie dragon within 60 feet of it." }, { name : "Magic Resistance", description : "The dragon has advantage on saves against spells and magical effects." }, { name : "Euphoria Breath (Recharge 5-6)", description : "Exhale a puff of euphoria gas at a creature within 5 ft. It must succeed on a DC 11 Wisdom save, or for 1 minute, it can't take reactions and must roll a d6 at the start of each of its turns:\n 1-4 - No action or bonus action, using all movment to move in a random direction.\n 5-6 - The target does nothing except attempt another save to try end the effect on itself." }], features : [{ name : "Innate Spellcasting", description : "Cast spells using Charisma (save DC 13), requiring no material components. The spells it knows depends on its age (and stack):\n Red: 1/day - Dancing Lights, Mage Hand, Minor Illusion\n Orange (6-10 years): 1/day - Color Spray\n Yellow (11-20 years): 1/day - Mirror Image\n Green (21-30 years): 1/day - Suggestion\n Blue (31-40 years): 1/day - Major Image\n Indigo (41-50 years): 1/day - Hallucinatory Terrain\n Violet (51+ years): 1/day - Polymorph" }] }; CreatureList["crawling claw"] = { name : "Crawling Claw", source : [["M", 44]], size : 5, //Tiny type : "Undead", companion : "familiar_not_al", alignment : "Neutral Evil", ac : 12, hp : 2, hd : [1, 4], //[#, die] speed : "20 ft, climb 20 ft", scores : [13, 14, 11, 5, 10, 4], //[Str, Dex, Con, Int, Wis, Cha] senses : "Blindsight 30 ft (blind beyond this radius)", damage_immunities : "poison", condition_immunities : "charmed, exhaustion, poisoned", passivePerception : 10, languages : "understands Common but can't speak", challengeRating : "0", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Claw", ability : 1, damage : [1, 4, "bludgeoning"], //[#, die, type] "" for die is allowed range : "Melee (5 ft)", description : "Does bludgeoning or slashing damage (claw's choice)" }], traits : [{ name : "Turn Immunity", description : "The claw is immune to effects that turn undead." }] }; CreatureList["peryton"] = { name : "Peryton", source : [["M", 251]], size : 3, //Medium type : "Monstrosity", companion : "steed", alignment : "Chaotic Evil", ac : 13, hp : 33, hd : [6, 8], //[#, die] speed : "20 ft, fly 60 ft", scores : [16, 12, 13, 9, 12, 10], //[Str, Dex, Con, Int, Wis, Cha] skills : { "perception" : 5 }, senses : "Adv. on Wis (Perception) checks using sight/smell", passivePerception : 16, languages : "understands Common and Elvish, but can't speak", challengeRating : "2", proficiencyBonus : 2, attacksAction : 2, attacks : [{ name : "Gore", ability : 1, damage : [1, 8, "piercing"], //[#, die, type] "" for die is allowed range : "Melee (5 ft)", description : "One gore and one talons attack as an Attack action; +2d8 after 30 ft dive straight down" }, { name : "Talons", ability : 1, damage : [2, 4, "piercing"], //[#, die, type] "" for die is allowed range : "Melee (5 ft)", description : "One talons and one gore attack as an Attack action; +2d8 after 30 ft dive straight down" }], actions : [{ name : "Multiattack", description : "As an action on its turn, the peryton can make one Gore and one Talon attack." }], traits : [{ name : "Dive Attack", description : "If the peryton is flying and dives at least 30 ft. straight toward a target and then hits it with a melee weapon attack, the attack deals an extra 9 (2d8) damage to the target." }, { name : "Flyby", description : "The peryton doesn't provoke an opportunity attack when it flies out of an enemy's reach." }, { name : "Keen Sight and Smell", description : "The peryton has advantage on Wisdom (Perception) checks that rely on sight or smell." }] }; // Blights and spores CreatureList["needle blight"] = { name : "Needle Blight", nameAlt : ["Blight, Needle"], source : [["M", 32]], size : 3, //Medium type : "Plant", alignment : "Neutral Evil", ac : 12, hp : 11, hd : [2, 8], //[#, die] speed : "30 ft", scores : [12, 12, 13, 4, 8, 3], //[Str, Dex, Con, Int, Wis, Cha] condition_immunities : "blinded, deafened", senses : "Blindsight 60 ft (blind beyond this radius).", passivePerception : 9, languages : "understands Common but can't speak", challengeRating : "1/4", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Claws", ability : 2, damage : [2, 4, "piercing"], //[#, die, type] "" for die is allowed range : "Melee (5 ft)", description : "" }, { name : "Needles", ability : 2, damage : [2, 6, "piercing"], //[#, die, type] "" for die is allowed range : "30/60 ft", description : "" }] }; CreatureList["twig blight"] = { name : "Twig Blight", nameAlt : ["Blight, Twig"], source : [["M", 32]], size : 4, //Small type : "Plant", alignment : "Neutral Evil", ac : 13, hp : 4, hd : [1, 6], //[#, die] speed : "20 ft", scores : [6, 13, 12, 4, 8, 3], //[Str, Dex, Con, Int, Wis, Cha] damage_vulnerabilities : "fire", condition_immunities : "blinded, deafened", senses : "Blindsight 60 ft (blind beyond this radius).", passivePerception : 9, languages : "understands Common but can't speak", challengeRating : "1/8", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Claws", ability : 2, damage : [1, 4, "piercing"], //[#, die, type] "" for die is allowed range : "Melee (5 ft)", description : "" }], traits : [{ name : "False Appearance", description : "While the blight remains motionless, it is indistinguishable from a dead shrub." }] }; CreatureList["vine blight"] = { name : "Vine Blight", nameAlt : ["Blight, Vine"], source : [["M", 32]], size : 3, //Medium type : "Plant", alignment : "Neutral Evil", ac : 12, hp : 26, hd : [4, 8], //[#, die] speed : "10 ft", scores : [15, 8, 14, 5, 10, 3], //[Str, Dex, Con, Int, Wis, Cha] skills : { "stealth" : 1 }, condition_immunities : "blinded, deafened", senses : "Blindsight 60 ft (blind beyond this radius).", passivePerception : 9, languages : "Common", challengeRating : "1/2", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Constrict", ability : 1, damage : [2, 6, "bludgeoning"], //[#, die, type] "" for die is allowed range : "Melee (10 ft)", description : "Large or smaller target is grappled and restrained (escape DC 12); Can't use constrict again until grapple ends" }], traits : [{ name : "False Appearance", description : "While the blight remains motionless, it is indistinguishable from a tangle of vines." }], actions : [{ name : "Entangling Plants (Recharge 5-6)", description : "As an action, grasping roots and vines sprout in a 15-ft radius centered on the blight, withering away after 1 minute. For the duration, that area is difficult terrain for nonplant creatures. In addition, each creature of the blight's choice in that area when the plants appear must succeed on a DC 12 Strength saving throw or become restrained. A creature can use its action to make a DC 12 Strength check, freeing it self or another entangled creature within reach on a success." }], wildshapeString : [ (typePF ? "##Senses##. " : "") + "Blindsight 60 ft (blind beyond).", "##Immunities##. Blinded, deafened.", "##Entangling Plants (Recharge 5-6)##. As an action, 15-ft radius is difficult terrain for nonplant creatures for 1 min. Chosen creatures in it must make a DC 12 Str save or become restrained. A creature can use its action to free itself or another within reach with a DC 12 Str check.", "##False Appearance##. While motionless, it's indistinguishable from a tangle of vines.", ].join(typePF ? "\n" : " "), }; CreatureList["gas spore"] = { name : "Gas Spore", source : [["M", 138]], size : 2, //Large type : "Plant", alignment : "Unaligned", ac : 5, hp : 1, hd : [1, 10], //[#, die] speed : "fly 10 ft (hover)", scores : [5, 1, 3, 1, 1, 1], //[Str, Dex, Con, Int, Wis, Cha] condition_immunities : "blinded, deafened, frightened", senses : "Blindsight 30 ft (blind beyond this radius).", passivePerception : 5, challengeRating : "1/2", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Touch", ability : 1, damage : [1, "", "poison"], //[#, die, type] "" for die is allowed range : "Melee (5 ft)", description : "DC 10 Con save or infected with Death Burst disease, see traits", modifiers : [1, ""], abilitytodamage : false }], traits : [{ name : "Death Burst", description : "The gas spore explodes when it drops to 0 hit points. Each creature within 20 feet of it must succeed on a DC 15 Constitution saving throw or take 10 (3d6) poison damage and become infected with a disease on a failed save. Creatures immune to the poisoned condition are immune to this disease.\n Spores invade an infected creature's system, killing the creature in a number of hours equal to 1d12+the creature's Constitution score, unless the disease is removed. In half that time, the creature becomes poisoned for the rest of the duration. After the creature dies, it sprouts 2d4 Tiny gas spores that grow to full size in 7 days." }, { name : "Eerie Resemblance", description : "The gas spore resembles a beholder. A creature that can see the gas spore can discern its true nature with a successful DC 15 Intelligence (Nature) check." }], wildshapeString : [ (typePF ? "##Senses##. " : "") + "Blindsight 30 ft (blind beyond).", "##Immunities##. Blinded, deafened, frightened.", "##Eerie Resemblance##. Distinguishable form a beholder only with a DC 15 Nature check. ##Death Burst##. Explodes at 0 HP: all within 20 ft DC 15 Con save or 3d6 poison damage and infected with disease that kills a creature in 1d12+its Con score of hours. After half that, it's poisoned for the remainder. When dies, sprouts 2d4 Tiny gas spores that grow to full size in 7 days.", ].join(typePF ? "\n" : " "), }; // Even though the shield guardian is in the SRD, the description for its control amulet is only found in the Monster Manual MagicItemsList["shield guardian amulet"] = { name : "Shield Guardian Amulet", source : [["M", 271], ["RotF", 149]], type : "wondrous item", rarity : "rare", attunement : true, notLegalAL : true, prerequisite : "Requires attunement by a humanoid", prereqeval : function(v) { return !CurrentRace.known || !RaceList[CurrentRace.known] || !/creature type/i.test(RaceList[CurrentRace.known].trait); }, description : "A shield guardian is magically linked to this amulet. It has AC 10, 10 HP, and immunity to poison and psychic damage. I know the distance and direction of the guardian while I'm wearing the amulet and I'm on the same plane as it. While within 10 ft of it, I can use the amulet to reactivate it with a DC 20 Arcana check.", descriptionFull : "The amulet is a 4-inch-wide disk composed of silver-framed wood, with a rune carved into its face. A detect magic spell reveals a magical aura of enchantment around the amulet."+ "\n Every shield guardian has an amulet magically linked to it. A shield guardian can have only one corresponding amulet, and if that amulet is destroyed, the shield guardian is incapacitated until a replacement amulet is created."+ "\n A shield guardian's amulet is subject to direct attack if it isn't being worn or carried. It has AC 10, 10 hit points, and immunity to poison and psychic damage. Crafting an amulet requires 1 week and costs 1,000 gp in components."+ "\n A shield guardian's solitary focus is to protect the amulet's wearer. The amulet's wearer can command the guardian to attack its enemies or to guard the wielder against attack. If an attack threatens to injure the wearer, the construct can magically absorb the blow into its own body, even at a distance."+ "\n A humanoid that attunes to this amulet knows the distance and direction of the shield guardian, provided the amulet and the guardian are on the same plane of existence. As an action, the amulet's attuned wearer can try to reactivate the shield guardian, doing so with a successful DC 20 Intelligence (Arcana) check. Reactivation can only be attempted while the amulet and guardian are within 10 feet of each other.", creaturesAdd : [["Shield Guardian"]] }; // Player characters as Lycanthropes race - even though they are in the SRD, the rules for applying their abilities to player characters are not (added in v13.1.13) /* Gains: - speed in non-humanoid form - damage immunities - traits - actions that don't involve equipment P.S. multiattack is a weird one, going with the interpretation here: https://rpg.stackexchange.com/questions/70694 */ var MM_lycanthrope = { createDefaultTraits : function(sLycanName, sLycanPlural) { // the traits of a human var obj = { name : "Human " + sLycanName, plural : "Human " + sLycanPlural, languageProfs : ["Common", 1], age : " reach adulthood in their late teens and live less than 100 years", height : " range from barely 5 to well over 6 feet tall (4'8\" + 2d10\")", weight : " weigh around 165 lb (110 + 2d10 \xD7 2d4 lb)", heightMetric : " range from barely 1,5 to well over 1,8 metres tall (145 + 5d10 cm)", weightMetric : " weigh around 75 kg (50 + 5d10 \xD7 4d4 / 10 kg)", scorestxt : "+1 to all ability scores", scores : [1, 1, 1, 1, 1, 1, 1] } return obj; }, createMessage : function(sLycanName, aOtherGains) { var aGained = [ "Its speed in nonhumanoid form.", "Natural attacks in nonhumanoid form (e.g. bite/claw).", "Damage immunity to bludgeoning, piercing, and slashing from nonmagical attacks that aren't silvered.", "Shapechanger trait." ].concat(aOtherGains); return "The lycanthrope races are template races. All features and traits of the base race are retained and all the " + sLycanName + "'s features are added to it."+ "\nIf you choose not to use a previous race as the base race or you selected a " + sLycanName + " at character creation, a human (non-variant) will be used as the base race."+ "\nThe " + sLycanName + "'s features added to the base race are:"+ desc(aGained, "\n \u2022 ")+ "\n\nThe possible alignment change and moon-related limitations of lycanthrope are not mentioned in this race. Discuss with your DM how they want to handle lycanthrope." }, }; RaceList["lycanthrope-werebear"] = { regExpSearch : /were.?bear|^(?=.*lycanthrope)(?=.*bear).*$/i, name : "Werebear", source : [["M", 208]], plural : "Werebears", size : 3, speed : { walk : { spd : 30, enc : 20 } }, trait : "Human Werebear (+1 to all ability scores; min 19 Str)" + desc([ "Shapechanger: As an action, I can polymorph into a Large bear-hybrid, into a Large bear, or back. In those forms, I gain 40 ft walking speed, 30 ft climb speed, +1 AC, and a bite and claw attack. My stats don't otherwise change when transformed, but my equipment doesn't change and I revert back when I die. Humanoids hit by my bite must save or be cursed with werebear lycanthrope.", "Keen Smell: I have adv. on Wis (Perception) checks using smell." ], "\n \u2022 "), features : { lycanthrope_features : { name : "Lycanthrope", source : [["M", 208]], minlevel : 1, toNotesPage : [{ name : "Lycanthrope", note : [ "My Strength score increases to 19 unless it was already higher", "As an action, I can polymorph into a Large bear-hybrid, into a Large bear, or back", "In my bear and hybrid forms, I gain 40 ft walking speed, 30 ft climb speed, and +1 AC", "In these forms I also gain a bite and claw attack, but can't use bite as part of a multiattack", "My stats don't otherwise change, my equipment doesn't transform and I revert back if I die", "Humanoids hit by my bite must make a Con save or be cursed with werebear lycanthrope", "The DC to avoid this curse is 8 + my Proficiency bonus + my Constitution modifier" ], page3notes : true }, { name : "Multiattack", note : [ "As an action, I can make two attacks, none of which can be with my werebear bite" ], page3notes : true }], action : [ ["action", "Shapechange (bear/hybrid/back)"], ["action", "Multiattack (2 attacks, no bite)"] ], scoresOverride : [19, 0, 0, 0, 0, 0], savetxt : { immune : ["bludgeoning, piercing, and slashing damage unless from magic/silver"] }, weaponOptions : [{ name : "Werebear Bite", regExpSearch : /^(?=.*(werebear|lycanthrope))(?=.*bite).*$/i, source : [["M", 208]], ability : 1, type : "Natural", damage : [2, 10, "piercing"], range : "Melee", description : "Bear and Hybrid form only; Humanoids Con save or cursed", abilitytodamage : true, selectNow : true }, { name : "Werebear Claw", regExpSearch : /^(?=.*(werebear|lycanthrope))(?=.*\bclaws?\b).*$/i, source : [["M", 208]], ability : 1, type : "Natural", damage : [2, 8, "slashing"], range : "Melee", description : "Bear and Hybrid form only", abilitytodamage : true, selectNow : true }], extraAC : [{ name : "+1 in bear/hybrid form", mod : 0, text : "I gain a +1 bonus to AC while I'm in my bear or bear-hybrid form. This bonus is not added by default, it has to be added/removed manually when changing form." }] }, lycanthrope_keen_senses : { name : "Keen Smell", source : [["M", 208]], minlevel : 1, toNotesPage : [{ name : "Keen Smell", note : [ "I have advantage on Wisdom (Perception) checks that rely on smell" ], page3notes : true }], vision : [["Keen Smell", 0]] } }, useFromPreviousRace : { updateName : "prefix", // e.g. "Drow Werebear" message : MM_lycanthrope.createMessage("werebear", [ "Strength increase to 19 unless it was already higher.", "Keen Smell trait." ]), defaultTraits : MM_lycanthrope.createDefaultTraits("Werebear", "Werebears"), gainTraits : ["everything"] } }; RaceList["lycanthrope-wereboar"] = { regExpSearch : /were.?boar|^(?=.*lycanthrope)(?=.*boar).*$/i, name : "Wereboar", source : [["M", 209]], plural : "Wereboars", size : 3, speed : { walk : { spd : 30, enc : 20 } }, trait : "Human Wereboar (+1 to all ability scores; min 17 Str)" + desc([ "Shapechanger: As an action, I can polymorph into a boar-" + (typePF ? "" : "humanoid ") + "hybrid, into a boar, or back. In those forms, I gain 40 ft walking speed, +1 AC, and a tusks attack. My stats don't otherwise change when transformed, but my equipment doesn't change and I revert back when I die. Humanoids hit by my tusks must save or be cursed" + (typePF ? "." : " with lycanthrope."), "Relentless: If I'm reduced to 0 HP by 14 damage or less, I can instead drop to 1 HP.", "Charge: If I move 15 ft straight before a tusks hit, +2d6 damage and Str save or prone." ], "\n \u2022 "), features : { lycanthrope_features : { name : "Lycanthrope", source : [["M", 209]], minlevel : 1, toNotesPage : [{ name : "Lycanthrope", note : [ "My Strength score increases to 17 unless it was already higher", "As an action, I can polymorph into a boar-humanoid hybrid, into a boar, or back", "In my boar and hybrid forms, I gain 40 ft walking speed, a tusks attack, and +1 AC", "I also gain a bite and claw attack; As an action, I can make two claw attacks (multiattack)", "My stats don't otherwise change, my equipment doesn't transform and I revert back if I die", "Humanoids hit by my bite must make a Con save or be cursed with wereboar lycanthrope", "The DC to avoid this curse is 8 + my Proficiency bonus + my Constitution modifier" ], page3notes : true }, { name : "Multiattack", note : [ "As an action, I can make two attacks, only one of which can be with my wereboar tusks" ], page3notes : true, additional : "in humanoid or hybrid form only" }], action : [ ["action", "Shapechange (boar/hybrid/back)"], ["action", "Multiattack (2 attacks, max 1 tusks)"] ], scoresOverride : [17, 0, 0, 0, 0, 0], savetxt : { immune : ["bludgeoning, piercing, and slashing damage unless from magic/silver"] }, weaponOptions : [{ name : "Wereboar Tusks", regExpSearch : /^(?=.*(wereboar|lycanthrope))(?=.*tusks).*$/i, source : [["M", 209]], ability : 1, type : "Natural", damage : [2, 6, "slashing"], range : "Melee", description : "Boar/hybrid form only; Humanoids Con save or cursed; Charge for +2d6 damage", abilitytodamage : true, selectNow : true }], extraAC : [{ name : "+1 in boar/hybrid form", mod : 0, text : "I gain a +1 bonus to AC while I'm in my boar or boar-hybrid form. This bonus is not added by default, it has to be added/removed manually when changing form." }] }, wereboar_relentless : { name : "Relentless", source : [["M", 209]], minlevel : 1, toNotesPage : [{ name : "Relentless", note : [ "If I'm reduced to 0 HP by an affect dealing 14 damage or less, I can instead drop to 1 HP" ], page3notes : true, additional : "in boar or hybrid form only" }], usages : 1, recovery : "short rest" }, wereboar_charge : { name : "Charge", source : [["M", 209]], minlevel : 1, toNotesPage : [{ name : "Charge", note : [ "If, in one turn, I move straight for 15 ft and then hit with my tusks, I deal +2d6 damage", "Those hit like this must make a Str save or be knocked prone (DC 8 + Prof B. + Str mod)" ], page3notes : true, additional : "in boar or hybrid form only" }] } }, useFromPreviousRace : { updateName : "prefix", // e.g. "High Elf Wereboar" message : MM_lycanthrope.createMessage("wereboar", [ "Strength increase to 17 unless it was already higher.", "Relentless and Charge traits." ]), defaultTraits : MM_lycanthrope.createDefaultTraits("Wereboar", "Wereboars"), gainTraits : ["everything"] }, abilitySave : 1 // for charge trait }; RaceList["lycanthrope-wererat"] = { regExpSearch : /were.?rat|^(?=.*lycanthrope)(?=.*rat).*$/i, name : "Wererat", source : [["M", 209]], plural : "Wererats", size : 3, speed : { walk : { spd : 30, enc : 20 } }, trait : "Human Wererat (+1 to all ability scores; min 15 Dex)" + desc([ "Shapechanger: As an action, I can transform into a rat-humanoid hybrid, into a giant rat, or back. In those forms, I gain a bite attack, which can use Strength or Dexterity. In my giant rat form, I also become small and gain Darkvision 60 ft My stats don't otherwise change when transformed, but my equipment doesn't change and I revert back when I die. Humanoids hit by my bite must save or be cursed with wererat lycanthrope.", "Keen Smell: I have adv. on Wis (Perception) checks using smell." ], "\n \u2022 "), features : { lycanthrope_features : { name : "Lycanthrope", source : [["M", 209]], minlevel : 1, toNotesPage : [{ name : "Lycanthrope", note : [ "My Dexterity score increases to 15 unless it was already higher", "As an action, I can transform into a rat-humanoid hybrid, into a giant rat (Small), or back", "In my rat and hybrid forms, I gain a bite attack that can use either Strength or Dexterity", "In my giant rat form, I also become small and gain Darkvision 60 ft", "My stats don't otherwise change, my equipment doesn't transform and I revert back if I die", "Humanoids hit by my bite must make a Con save or be cursed with wererat lycanthrope", "The DC to avoid this curse is 8 + my Proficiency bonus + my Constitution modifier" ], page3notes : true }, { name : "Multiattack", note : [ "As an action, I can make two attacks, only one of which can be with my wererat bite" ], page3notes : true, additional : "in humanoid or hybrid form only" }], action : [ ["action", "Shapechange (giant rat/hybrid/back)"], ["action", "Multiattack (2 attacks, max 1 bite)"] ], scoresOverride : [0, 15, 0, 0, 0, 0], savetxt : { immune : ["bludgeoning, piercing, and slashing damage unless from magic/silver"] }, weaponOptions : [{ name : "Wererat Bite", regExpSearch : /^(?=.*(wererat|lycanthrope))(?=.*bite).*$/i, source : [["M", 209]], ability : 2, type : "Natural", damage : [1, 4, "piercing"], range : "Melee", description : "Rat and Hybrid form only; Humanoids Con save or cursed", abilitytodamage : true, isWereratBite : true, // for calcChanges.atkAdd selectNow : true }], calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.isWereratBite) fields.Mod = v.StrDex; }, 'I can use Strength or Dexterity for my Wererat Bite, whichever is higher.' ] } }, lycanthrope_keen_senses : { name : "Keen Smell", source : [["M", 209]], minlevel : 1, toNotesPage : [{ name : "Keen Smell", note : [ "I have advantage on Wisdom (Perception) checks that rely on smell" ], page3notes : true }], vision : [["Keen Smell", 0]] } }, useFromPreviousRace : { updateName : "prefix", // e.g. "Lizardfolk Wererat" message : MM_lycanthrope.createMessage("wererat", [ "Dexterity increase to 15 unless it was already higher.", "Keen Smell trait." ]), defaultTraits : MM_lycanthrope.createDefaultTraits("Wererat", "Wererats"), gainTraits : ["everything"] } }; RaceList["lycanthrope-weretiger"] = { regExpSearch : /were.?tiger|^(?=.*lycanthrope)(?=.*tiger).*$/i, name : "Weretiger", source : [["M", 210]], plural : "Weretigers", size : 3, speed : { walk : { spd : 30, enc : 20 } }, trait : "Human Weretiger (+1 to all ability scores; min 15 Str)" + desc([ "Shapechanger: As an action, I can polymorph into a tiger-humanoid hybrid, into a Large tiger, or back. In those forms, I gain 40 ft walking speed, a bite attack, and a claw attack. My stats don't otherwise change when transformed, but my equipment doesn't transform and I revert back when I die. Humanoids hit by my bite must save or be cursed with weretiger lycanthrope."+ (typePF ? "\n \u2022 Pounce: " : " ") + "I can pounce in my tiger and hybrid form, see notes.", "Keen Hearing and Smell: I have adv. on Wis (Perception) checks using hearing or smell." ], "\n \u2022 "), features : { lycanthrope_features : { name : "Lycanthrope", source : [["M", 210]], minlevel : 1, toNotesPage : [{ name : "Lycanthrope", note : [ "My Strength score increases to 17 unless it was already higher; I gain 60 ft darkvision", "As an action, I can polymorph into a tiger-humanoid hybrid, into a Large tiger, or back", "In my tiger and hybrid forms, I gain 40 ft walking speed, a bite attack, and a claw attack", "My stats don't otherwise change, my equipment doesn't transform and I revert back if I die", "Humanoids hit by my bite must make a Con save or be cursed with weretiger lycanthrope", "The DC to avoid this curse is 8 + my Proficiency bonus + my Constitution modifier" ], page3notes : true }, { name : "Multiattack", note : [ "As an action, I can make two attacks, none of which can be with my weretiger bite" ], page3notes : true, additional : "in humanoid or hybrid form only" }], action : [ ["action", "Shapechange (tiger/hybrid/back)"], ["action", "Multiattack (2 attacks, no bite)"] ], scoresOverride : [17, 0, 0, 0, 0, 0], savetxt : { immune : ["bludgeoning, piercing, and slashing damage unless from magic/silver"] }, weaponOptions : [{ name : "Weretiger Bite", regExpSearch : /^(?=.*(weretiger|lycanthrope))(?=.*bite).*$/i, source : [["M", 210]], ability : 1, type : "Natural", damage : [1, 10, "piercing"], range : "Melee", description : "Tiger and Hybrid form only; Humanoids Con save or cursed", abilitytodamage : true, selectNow : true }, { name : "Weretiger Claw", regExpSearch : /^(?=.*(weretiger|lycanthrope))(?=.*\bclaws?\b).*$/i, source : [["M", 210]], ability : 1, type : "Natural", damage : [1, 8, "slashing"], range : "Melee", description : "Tiger and Hybrid form only; Can be use to pounce", abilitytodamage : true, selectNow : true }], vision : [["Darkvision", 60]] }, lycanthrope_keen_senses : { name : "Keen Hearing and Smell", source : [["M", 210]], minlevel : 1, toNotesPage : [{ name : "Keen Hearing and Smell", note : [ "I have advantage on Wisdom (Perception) checks that rely on hearing or smell" ], page3notes : true }], vision : [["Keen Hearing and Smell", 0]] }, weretiger_pounce : { name : "Pounce", source : [["M", 210]], minlevel : 1, toNotesPage : [{ name : "Pounce", note : [ "If, in one turn, I move straight for 15 ft and then hit with my claw, I can pounce a target", "The creature must make a Str save or be knocked prone (DC 8 + Prof Bonus + Str mod)", "If I knocked someone prone, I can then make a bite attack against them as a bonus action" ], page3notes : true, additional : "in tiger or hybrid form only" }], action : [["bonus action", "Bite after successful Pounce"]] } }, useFromPreviousRace : { updateName : "prefix", // e.g. "Mountain Dwarf Weretiger" message : MM_lycanthrope.createMessage("weretiger", [ "Strength increase to 17 unless it was already higher.", "Keen Hearing and Smell trait." ]), defaultTraits : MM_lycanthrope.createDefaultTraits("Weretiger", "Weretigers"), gainTraits : ["everything"] }, abilitySave : 1 // for pounce trait }; RaceList["lycanthrope-werewolf"] = { regExpSearch : /were.?wol(f|ve)|^(?=.*lycanthrope)(?=.*wol(f|ve)).*$/i, name : "Werewolf", source : [["M", 211]], plural : "Werewolves", size : 3, speed : { walk : { spd : 30, enc : 20 } }, trait : "Human Werewolf (+1 to all ability scores; min 15 Str)" + desc([ "Shapechanger: As an action, I can polymorph into a wolf-humanoid hybrid, into a wolf, or back. In those forms, I gain 40 ft walking speed, a bite attack, and +1 AC. In my hybrid form, I also gain a claws attack. My stats don't otherwise change when transformed, but my equipment doesn't transform and I revert back when I die. Humanoids hit by my bite must save or be cursed with werewolf lycanthrope.", "Keen Hearing and Smell: I have adv. on Wis (Perception) checks using hearing or smell." ], "\n \u2022 "), features : { lycanthrope_features : { name : "Lycanthrope", source : [["M", 211]], minlevel : 1, toNotesPage : [{ name : "Lycanthrope", note : [ "My Strength score increases to 15 unless it was already higher", "As an action, I can polymorph into a wolf-humanoid hybrid, into a wolf, or back", "In my wolf and hybrid forms, I gain 40 ft walking speed, a bite attack, and +1 AC", "In my hybrid form, I also gain a claws attack", "My stats don't otherwise change, my equipment doesn't transform and I revert back if I die", "Humanoids hit by my bite must make a Con save or be cursed with werewolf lycanthrope", "The DC to avoid this curse is 8 + my Proficiency bonus + my Constitution modifier" ], page3notes : true }, { name : "Multiattack", note : [ "As an action, I can make two attacks, only one of which can be with my werewolf bite" ], page3notes : true, additional : "in humanoid or hybrid form only" }], action : [ ["action", "Shapechange (wolf/hybrid/back)"], ["action", "Multiattack (2 attacks, max 1 bite)"] ], scoresOverride : [15, 0, 0, 0, 0, 0], savetxt : { immune : ["bludgeoning, piercing, and slashing damage unless from magic/silver"] }, weaponOptions : [{ name : "Werewolf Bite", regExpSearch : /^(?=.*(werewolf|lycanthrope))(?=.*bite).*$/i, source : [["M", 211]], ability : 1, type : "Natural", damage : [1, 8, "piercing"], range : "Melee", description : "Wolf and Hybrid form only; Humanoids Con save or cursed", abilitytodamage : true, selectNow : true }, { name : "Wolf-hybrid Claws", regExpSearch : /^(?=.*wolf)(?=.*hybrid)(?=.*\bclaws?\b).*$/i, source : [["M", 211]], ability : 1, type : "Natural", damage : [2, 4, "slashing"], range : "Melee", description : "Hybrid form only", abilitytodamage : true, selectNow : true }], extraAC : [{ name : "+1 in wolf/hybrid form", mod : 0, text : "I gain a +1 bonus to AC while I'm in my wolf or wolf-hybrid form. This bonus is not added by default, it has to be added/removed manually when changing form." }] }, lycanthrope_keen_senses : { name : "Keen Hearing and Smell", source : [["M", 211]], minlevel : 1, toNotesPage : [{ name : "Keen Hearing and Smell", note : [ "I have advantage on Wisdom (Perception) checks that rely on hearing or smell" ], page3notes : true }], vision : [["Keen Hearing and Smell", 0]] } }, useFromPreviousRace : { updateName : "prefix", // e.g. "Rock Gnome Werewolf" message : MM_lycanthrope.createMessage("werewolf", [ "Strength increase to 15 unless it was already higher.", "Keen Hearing and Smell trait." ]), defaultTraits : MM_lycanthrope.createDefaultTraits("Werewolf", "Werewolves"), gainTraits : ["everything"] } }; // pub_20141209_DMG.js // This file adds all the player-material from the Dungeon Master's Guide to MPMB's Character Record Sheet // Define the source SourceList.D={ name : "Dungeon Master's Guide", abbreviation : "DMG", group : "Core Sources", url : "https://dnd.wizards.com/products/dungeon-masters-guide", date : "2014/12/09" }; // Races RaceList["aasimar"] = { regExpSearch : /^(?!.*(fallen|protector|scourge))((?=.*aasimar)|((?=.*planetouched)(?=.*(celestial|angel)))).*$/i, name : "Aasimar", source : [["D", 286]], plural : "Aasimar", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Celestial"], vision : [["Darkvision", 60]], dmgres : ["Necrotic", "Radiant"], age : " reach adulthood in their late teens and live around 160 years", height : " range from barely 5 to well over 6 feet tall (4'8\" + 2d10\")", weight : " weigh around 165 lb (110 + 2d10 \xD7 2d4 lb)", heightMetric : " range from barely 1,5 to well over 1,8 metres tall (145 + 5d10 cm)", weightMetric : " weigh around 75 kg (50 + 5d10 \xD7 4d4 / 10 kg)", scores : [0, 0, 0, 0, 1, 2], trait : "Aasimar (+1 Wisdom, +2 Charisma)\n\nCelestial Legacy:\n I know the Light cantrip.\n Once I reach 3rd level, I can cast the Lesser Restoration spell once per long rest.\n Once I reach 5th level, I can cast the Daylight spell once per long rest.\n Charisma is my spellcasting ability for these spells.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Celestial Legacy (level 1)", spells : ["light"], selection : ["light"], firstCol : 'atwill' }], features : { "lesser restoration" : { name : "Celestial Legacy (level 3)", limfeaname : "Lesser Restoration", usages : 1, minlevel : 3, recovery : "long rest", spellcastingBonus : [{ name : "Celestial Legacy (level 3)", spells : ["lesser restoration"], selection : ["lesser restoration"], firstCol : 'oncelr' }] }, "daylight" : { name : "Celestial Legacy (level 5)", limfeaname : "Daylight", usages : 1, minlevel : 5, recovery : "long rest", spellcastingBonus : [{ name : "Celestial Legacy (level 5)", spells : ["daylight"], selection : ["daylight"], firstCol : 'oncelr' }] } } }; RaceList["eladrin"] = { regExpSearch : /^(?!.*half)((?=.*eladrin)|((?=.*\b(elfs?|elves|elvish|elven)\b)(?=.*\b(feys?|feywild)\b))).*$/i, name : "Eladrin", sortname : "Elf, Fey (Eladrin)", source : [["D", 286]], plural : "Eladrin", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Elvish"], vision : [["Darkvision", 60]], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["charmed"] }, weaponProfs : [false, false, ["longsword", "shortsword", "longbow", "shortbow"]], skills : ["Perception"], age : " typically claim adulthood around age 100 and can live to be 750 years old", height : " range from under 5 to over 6 feet tall (4'6\" + 2d12\")", weight : " weigh around 115 lb (90 + 2d12 \xD7 1d4 lb)", heightMetric : " range from under 1,5 to over 1,8 metres tall (140 + 5d12 cm)", weightMetric : " weigh around 55 kg (40 + 5d12 \xD7 2d4 / 10 kg)", scores : [0, 2, 0, 1, 0, 0], trait : "Eladrin (+2 Dexterity, +1 Intelligence)\nTrance: Elves don't need to sleep, but meditate semiconsciously, for 4 hours a day. While meditating, I can dream after a fashion; such dreams are actually mental exercises that have become reflexive through years of practice. After resting in this way, I gain the same benefit that a human does from 8 hours of sleep, thus needing only 4 hours for a long rest.\nFey Step: I can cast the Misty Step spell once using this trait. I regain the ability to do so when I finish a short rest.", spellcastingAbility : 4, features : { "fey step" : { name : "Fey Step", limfeaname : "Misty Step", minlevel : 1, usages : 1, recovery : "short rest", spellcastingBonus : [{ name : "Fey Step", spells : ["misty step"], selection : ["misty step"], firstCol : 'oncesr' }] } } }; // Subclasses AddSubClass("cleric", "death domain", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*(death|dead|dying)).*$/i, subname : "Death Domain", source : [["D", 96]], spellcastingExtra : ["false life", "ray of sickness", "blindness/deafness", "ray of enfeeblement", "animate dead", "vampiric touch", "blight", "death ward", "antilife shell", "cloudkill"], features : { "subclassfeature1" : { name : "Bonus Proficiency", source : [["D", 96]], minlevel : 1, description: desc("I gain proficiency with martial weapons"), weaponProfs : [false, true] }, "subclassfeature1.1" : { name : "Reaper", source : [["D", 96]], minlevel : 1, description: desc([ "I learn one necromancy cantrip of my choice from any spell list", "My necromancy, single-target cantrips can affect two targets within 5 ft of each other", ]), spellcastingBonus : [{ name : "Reaper", "class" : "any", school : ["Necro"], level : [0, 0] }], calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { if (spellObj.school == "Necro" && spellObj.level === 0) { var startDescr = spellObj.description; switch (spellKey) { case "chill touch" : spellObj.description = spellObj.description.replace("Spell attack", "2 crea in 5 ft spell atk").replace("Necrotic", "Necro.").replace("at CL 5, 11, and 17", "CL 5/11/17"); break; case "spare the dying" : spellObj.description = spellObj.description.replace("1 living creature", "1 living creature (or 2 within 5 ft of each other)"); break; case "toll the dead" : default : spellObj.description = spellObj.description.replace(/1 crea(ture)?/i, "2 crea in 5 ft").replace("disadvantage", "disadv.").replace("save halves", "save half"); } return startDescr !== spellObj.description; }; }, "My necromancy, single-target cantrips can affect two targets within 5 ft of each other." ] } }, "subclassfeature2" : { name : "Channel Divinity: Touch of Death", source : [["D", 97]], minlevel : 2, description: desc("When I hit a creature with a melee attack, I can deal extra necrotic damage"), additional : ["", "+9 damage", "+11 damage", "+13 damage", "+15 damage", "+17 damage", "+19 damage", "+21 damage", "+23 damage", "+25 damage", "+27 damage", "+29 damage", "+31 damage", "+33 damage", "+35 damage", "+37 damage", "+39 damage", "+41 damage", "+43 damage", "+45 damage"] }, "subclassfeature6" : { name : "Inescapable Destruction", source : [["D", 97]], minlevel : 6, description: desc("When I deal necrotic damage with spells or Channel Divinity, I ignore resistance to it") }, "subclassfeature8" : { name : "Divine Strike", source : [["D", 97]], minlevel : 8, description: desc("Once per turn, when I hit a creature with a weapon attack, I can do extra damage"), additional : levels.map(function (n) { if (n < 8) return ""; return "+" + (n < 14 ? 1 : 2) + "d8 necrotic damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && v.isWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.cleric.level < 14 ? 1 : 2) + 'd8 necrotic damage'; } }, "Once per turn, I can have one of my weapon attacks that hit do extra necrotic damage." ] } }, "subclassfeature17" : { name : "Improved Reaper", source : [["D", 97]], minlevel : 17, description: desc([ "If I cast a 5th-level or lower necromancy spell that has one target, I can target two", "They need to be within 5 ft of each other; I have to provide material comp. for both", ]), calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { if (spellObj.school == "Necro" && spellObj.level && spellObj.level < 6) { var startDescr = spellObj.description; switch (spellKey) { case "blindness/deafness" : // only 2 target if not cast at higher SL spellObj.description = "2 crea in 5 ft or " + spellObj.description; break; case "contagion" : case "inflict wounds" : case "ray of enfeeblement" : spellObj.description = spellObj.description.replace(/(Melee )?spell attack/i, "2 " + "$1".toLowerCase() + "spell atk in 5 ft").replace("spell ends", "ends"); break; case "cause fear" : spellObj.description = "2 crea in 5 ft or 1+1/SL crea max 30 ft apart (no constr/undead), save or frightened; save end of turn"; break; case "feign death" : spellObj.description = "2 willing crea in 5 ft appear dead; Are blinded, incapacitated, dmg resist. all but Psychic, speed 0"; break; case "gentle repose" : spellObj.description = spellObj.description.replace("1 corpse protected from", "2 corpses in 5 ft suffer no"); break; case "raise dead" : case "revivify" : spellObj.description = spellObj.description.replace("a creature's body that has", "body of 2 crea in 5 ft that").replace("cons.)", "cons. \xD72)"); spellObj.compMaterial += " (once for each target)"; break; case "speak with dead" : spellObj.description = spellObj.description.replace("1 corpse with mouth answers 5 questions", "2 corpses in 5 ft answer 5 questions each"); break; case "enervation" : spellObj.description = spellObj.description.replace("action", "1 a").replace("see book", "see B"); case "bestow curse" : case "blight" : case "cause fear-uass" : case "life transference" : case "negative energy flood" : default : spellObj.description = spellObj.description.replace(/1 crea(ture)?/i, "2 crea in 5 ft").replace("disadvantage", "disadv.").replace("save halves", "save half"); } return startDescr !== spellObj.description; }; }, "My necromancy, single-target 5th-level or lower spells can affect two targets within 5 ft of each other if both are within range of the spell. The spells still require material components for each target separately." ] } } } }); AddSubClass("paladin", "oathbreaker", { regExpSearch : /^((?=.*blackguard)|((?=.*(oath.*breaker|breaker.*oath))((?=.*paladin)|((?=.*(exalted|sacred|holy|divine))(?=.*(knight|fighter|warrior|warlord|trooper)))))).*$/i, subname : "Oathbreaker", source : [["D", 97]], features : { "subclassfeature3" : { name : "Channel Divinity: Control Undead", source : [["D", 97]], minlevel : 3, description: desc([ "As an action, one undead (CR < paladin level) I can see in 30 ft must make a Wis save", "If failed, it must obey my commands for 24 hours or until I use this on another", ]), action : [["action", ""]], spellcastingExtra : ["hellish rebuke", "inflict wounds", "crown of madness", "darkness", "animate dead", "bestow curse", "blight", "confusion", "contagion", "dominate person"] }, "subclassfeature3.1" : { name : "Channel Divinity: Dreadful Aspect", source : [["D", 97]], minlevel : 3, description: desc([ "As an action, anyone I choose within 30 ft that can see me must make a Wisdom save", "If failed, it is frightened for 1 min or until it succeeds a save at the end of its turns", "It can't save at the end of its turn if it's still within 30 ft of me", ]), action : [["action", ""]] }, "subclassfeature7" : { name : "Aura of Hate", source : [["D", 97]], minlevel : 7, description: desc([ "Fiends/undead within range and I add my Cha mod as bonus on melee weapon damage", "Multiple Auras of Hate don't stack; only the strongest applies", ]), additional : ["", "", "", "", "", "", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "30-foot aura", "30-foot aura", "30-foot aura"], calcChanges : { atkAdd : [ function (fields, v) { if (v.isMeleeWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Cha mod added to damage'; } }, "I add my Charisma modifier to my melee weapon damage." ], atkCalc : [ function (fields, v, output) { if (v.isMeleeWeapon) { output.extraDmg += Number(What("Cha Mod")); }; } ] } }, "subclassfeature15" : { name : "Supernatural Resistance", source : [["D", 97]], minlevel : 15, description: desc("I have resistance to bludgeoning/piercing/slashing damage from nonmagical weapons"), dmgres : [["Bludgeoning", "Bludg. (nonmagical)"], ["Piercing", "Pierc. (nonmagical)"], ["Slashing", "Slash. (nonmagical)"]] }, "subclassfeature20" : { name : "Dread Lord", source : [["D", 97]], minlevel : 20, description: desc([ "As an action, I gain a 30-ft aura of gloom that reduces bright light to dim for 1 min", "If frightened of me, foes starting their turn in the aura take 4d10 psychic damage", "Attacks vs. my allies and me inside the aura have disadvantage if attackers need sight", "As a bonus action, I can make a melee spell attack vs. a target inside the aura", "If this attack hits, it does 3d10 + Charisma modifier necrotic damage", ]), recovery : "long rest", usages : 1, action : [["action", ""]] } } }); // Magic Items not found in the SRD MagicItemsList["alchemy jug"] = { name : "Alchemy Jug", source : [["D", 150]], type : "wondrous item", rarity : "uncommon", magicItemTable : "B", description : "As an action, command the jug to produce liquid; or an action to uncorked it and pour 2 gal/min. After producing, it only makes the same up to its max, until next dawn. Oil (1 qt), acid (8 fl oz), basic poison (1/2 fl oz), beer (4 gal), honey/wine (1 gal), fresh water (8 gal), mayonnaise/vinegar (2 gal), salt water (12 gal).", descriptionLong : "A heavy ceramic jug. As an action, the jug can be commanded to hold a chosen liquid. With another action, I can uncork the jug and pour the liquid out at 2 gallons per minute. Once commanded to produce a liquid, it can't produce a different one or more than the maximum of one, until the next dawn.\rLiquids (with maximum): acid (8 fl. oz.), basic poison (1/2 fl. oz.), beer (4 gallons), honey (1 gallon), mayonnaise (2 gallons), oil (1 quart), vinegar (2 gallons), fresh water (8 gallons), salt water (12 gallons), wine (1 gallon).", descriptionFull : "This ceramic jug appears to be able to hold a gallon of liquid and weighs 12 pounds whether full or empty. Sloshing sounds can be heard from within the jug when it is shaken, even if the jug is empty."+ "\n You can use an action and name one liquid from the table below to cause the jug to produce the chosen liquid. Afterward, you can uncork the jug as an action and pour that liquid out, up to 2 gallons per minute. The maximum amount of liquid the jug can produce depends on the liquid you named."+ "\n Once the jug starts producing a liquid, it can't produce a different one, or more of one that has reached its maximum, until the next dawn.\n\n"+ toUni("Max \tLiquid\t\tMax \tLiquid")+ "\n8 ounces \tAcid\t\t1 quart \tOil"+ "\n1/2 ounce\tBasic poison\t2 gallons \tVinegar"+ "\n4 gallons \tBeer\t\t8 gallons \tWater, fresh"+ "\n1 gallon \tHoney\t\t12 gallons\tWater, salt"+ "\n2 gallons \tMayonnaise\t1 gallon \tWine", weight : 12 } MagicItemsList["cap of water breathing"] = { name : "Cap of Water Breathing", source : [["D", 157]], type : "wondrous item", rarity : "uncommon", magicItemTable : "B", description : "While wearing this cap underwater, I can speak its command word as an action to create a bubble of air around my head. It allows me to breathe normally underwater. This bubble stays with me until I speak the command word again, the cap is removed, or I am no longer underwater.", descriptionFull : "While wearing this cap underwater, you can speak its command word as an action to create a bubble of air around your head. It allows you to breathe normally underwater. This bubble stays with you until you speak the command word again, the cap is removed, or you are no longer underwater.", action : [["action", ""]] } MagicItemsList["cloak of invisibility"] = { name : "Cloak of Invisibility", source : [["D", 158]], type : "wondrous item", rarity : "legendary", magicItemTable : "I", description : "As an action, I can pull the hood of this cloak down or up over my head, making myself invisible (down) or visible again (up). While invisible, anything I carry or wear is invisible as well. It functions for 2 hours, usable in increments of 1 minute. It regains 1 hour of duration for every 12 hours not being used.", descriptionFull : "While wearing this cloak, you can pull its hood over your head to cause yourself to become invisible. While you are invisible, anything you are carrying or wearing is invisible with you. You become visible when you cease wearing the hood. Pulling the hood up or down requires an action.\n Deduct the time you are invisible, in increments of 1 minute, from the cloak's maximum duration of 2 hours. After 2 hours of use, the cloak ceases to function. For every uninterrupted period of 12 hours the cloak goes unused, it regains 1 hour of duration.", attunement : true, action : [["action", " (hood up/down)"]], usages : "120 min", recovery : "Special", additional : "regain 1h/12h" } MagicItemsList["driftglobe"] = { name : "Driftglobe", source : [["D", 166]], type : "wondrous item", rarity : "uncommon", magicItemTable : ["A", "B"], description : "By speaking its command word while within 60 ft, this glass sphere casts Light or Daylight on itself. Daylight only works once per dawn. While lit up, I can use an action to speak another command word to make it hover 5 ft off the ground and follow me at a distance of 60 ft. It stops hovering when grasped.", descriptionFull : "This small sphere of thick glass weighs 1 pound. If you are within 60 feet of it, you can speak its command word and cause it to emanate the Light or Daylight spell. Once used, the Daylight effect can't be used again until the next dawn.\n You can speak another command word as an action to make the illuminated globe rise into the air and float no more than 5 feet off the ground. The globe hovers in this way until you or another creature grasps it. If you move more than 60 feet from the hovering globe, it follows you until it is within 60 feet of you. It takes the shortest route to do so. If prevented from moving, the globe sinks gently to the ground and becomes inactive, and its light winks out.", weight : 1, action : [["action", " (hover)"]], usages : 1, recovery : "dawn", additional : "Daylight", spellcastingBonus : [{ name : "On globe", spells : ["light"], selection : ["light"], firstCol : "atwill" }, { name : "On globe", spells : ["daylight"], selection : ["daylight"], firstCol : "oncelr" }], spellChanges : { "light" : { range : "Globe", description : "Driftglobe sheds bright light in a 20-ft radius and dim light in an additional 20-ft radius", changes : "The spell can only affect the globe." }, "daylight" : { range : "Globe", description : "Driftglobe shed 60-ft rad bright light + 60-ft dim light; only magical darkness of SL 4+ works in it", changes : "The spell can only affect the globe." } } } MagicItemsList["efreeti chain"] = { name : "Efreeti Chain", source : [["D", 167]], type : "armor (chain mail)", rarity : "legendary", magicItemTable : "I", description : "While wearing this armor, I gain a +3 bonus to AC, I am immune to fire damage, and I can understand and speak Primordial. In addition, I can stand on and walk across molten rock as if it were solid ground.", descriptionFull : "While wearing this armor, you gain a +3 bonus to AC, you are immune to fire damage, and you can understand and speak Primordial. In addition, you can stand on and walk across molten rock as if it were solid ground.", attunement : true, weight : 55, languageProfs : ["Primordial"], savetxt : { immune : ["fire"] }, armorOptions : [{ regExpSearch : /^(?=.*efreeti)(?=.*chain).*$/i, name : "Efreeti Chain", source : [["D", 167]], type : "heavy", ac : "16+3", stealthdis : true, weight : 55, strReq : 13, selectNow : true }] } MagicItemsList["elixir of health"] = { name : "Elixir of Health", source : [["D", 168]], type : "potion", rarity : "rare", magicItemTable : "C", description : "Once as an action, I can drink this potion or administer it to another to cure any disease, and removing the blinded, deafened, paralyzed, and poisoned conditions. The potion's clear red liquid has tiny bubbles of light in it.", descriptionFull : "When you drink this potion, it cures any disease afflicting you, and it removes the blinded, deafened, paralyzed, and poisoned conditions. The clear red liquid has tiny bubbles of light in it.", weight : 0.5 } MagicItemsList["gloves of thievery"] = { name : "Gloves of Thievery", source : [["D", 172]], type : "wondrous item", rarity : "uncommon", magicItemTable : "F", description : "These gloves are invisible while worn. While wearing them, I gain a +5 bonus to Dexterity (Sleight of Hand) checks and Dexterity checks made to pick locks.", descriptionFull : "These gloves are invisible while worn. While wearing them, you gain a +5 bonus to Dexterity (Sleight of Hand) checks and Dexterity checks made to pick locks.", addMod : [{ type: "skill", field : "Sleight of Hand", mod : 5, text : "I gain a +5 bonus to Dexterity (Sleight of Hand) checks while wearing Gloves of Thievery." }] } MagicItemsList["instrument of the bards"] = { name : "Instrument of the Bards", source : [["D", 176]], type : "wondrous item (instrument)", description : "If I play this exquisite, magical instruments while casting a spell that has a somatic or material component and charms on a failed save, it imposes disadvantage on that save. I can also use it to cast a set of spells, each once per dawn, using my spellcasting ability and spell save DC.", descriptionFull : "An instrument of the bards is an exquisite example of its kind, superior to an ordinary instrument in every way. Seven types of these instruments exist, each named after a legendary bard college. A creature that attempts to play the instrument without being attuned to it must succeed on a DC 15 Wisdom saving throw or take 2d4 psychic damage.\n You can use an action to play the instrument and cast one of its spells. Once the instrument has been used to cast a spell, it can't be used to cast that spell again until the next dawn. The spells use your spellcasting ability and spell save DC.\n You can play the instrument while casting a spell that causes any of its targets to be charmed on a failed saving throw, thereby imposing disadvantage on the save. This effect applies only if the spell has a somatic or a material component.\n All instruments of the bards can be used to cast the following spells: Fly, Invisibility, Levitate, and Protection from Evil and Good.", attunement : true, weight : 3, // Magic of Faerûn (2001) page 161 prerequisite : "Requires attunement by a bard", prereqeval : function(v) { return classes.known.bard ? true : false; }, choices : ["Anstruth Harp (very rare)", "Canaith Mandolin (rare)", "Cli Lyre (rare)", "Doss Lute (uncommon)", "Fochlucan Bandore (uncommon)", "Mac-Fuirmidh Cittern (uncommon)", "Ollamh Harp (legendary)"], "anstruth harp (very rare)" : { name : "Anstruth Harp [Instrument of the Bards]", sortname : "Instrument of the Bards, Anstruth Harp", rarity : "very rare", magicItemTable : "H", descriptionFull : "An instrument of the bards is an exquisite example of its kind, superior to an ordinary instrument in every way. Seven types of these instruments exist, each named after a legendary bard college. A creature that attempts to play the instrument without being attuned to it must succeed on a DC 15 Wisdom saving throw or take 2d4 psychic damage.\n You can use an action to play the instrument and cast one of its spells. Once the instrument has been used to cast a spell, it can't be used to cast that spell again until the next dawn. The spells use your spellcasting ability and spell save DC.\n You can play the instrument while casting a spell that causes any of its targets to be charmed on a failed saving throw, thereby imposing disadvantage on the save. This effect applies only if the spell has a somatic or a material component.\n All instruments of the bards can be used to cast the following spells: Fly, Invisibility, Levitate, and Protection from Evil and Good.\n In addition, the Anstruth harp can be used to cast Control Weather, Cure Wounds (5th level), and Wall of Thorns.", spellcastingBonus : [{ name : "Once per long rest", spells : ["fly", "invisibility", "levitate", "protection from evil and good", "control weather", "cure wounds", "wall of thorns"], selection : ["fly", "invisibility", "levitate", "protection from evil and good", "control weather", "cure wounds", "wall of thorns"], firstCol : "oncelr", times : 7, spellcastingAbility : "class" }], spellChanges : { "cure wounds" : { description : "1 living creature heals 5d8+spellcasting ability modifier HP", changes : "When using the Anstruth Harp to cast Cure Wounds, it is cast at 5th-level." }, "control weather" : { time : "1 a", changes : "Casting time is only an action." } } }, "canaith mandolin (rare)" : { name : "Canaith Mandolin [Instrument of the Bards]", sortname : "Instrument of the Bards, Canaith Mandolin", rarity : "rare", magicItemTable : "G", descriptionFull : "An instrument of the bards is an exquisite example of its kind, superior to an ordinary instrument in every way. Seven types of these instruments exist, each named after a legendary bard college. A creature that attempts to play the instrument without being attuned to it must succeed on a DC 15 Wisdom saving throw or take 2d4 psychic damage.\n You can use an action to play the instrument and cast one of its spells. Once the instrument has been used to cast a spell, it can't be used to cast that spell again until the next dawn. The spells use your spellcasting ability and spell save DC.\n You can play the instrument while casting a spell that causes any of its targets to be charmed on a failed saving throw, thereby imposing disadvantage on the save. This effect applies only if the spell has a somatic or a material component.\n All instruments of the bards can be used to cast the following spells: Fly, Invisibility, Levitate, and Protection from Evil and Good.\n In addition, the Canaith mandolin can be used to cast Cure Wounds (3rd level), Dispel Magic, and Protection from Energy (lightning only).", spellcastingBonus : [{ name : "Once per long rest", spells : ["fly", "invisibility", "levitate", "protection from evil and good", "cure wounds", "dispel magic", "protection from energy"], selection : ["fly", "invisibility", "levitate", "protection from evil and good", "cure wounds", "dispel magic", "protection from energy"], firstCol : "oncelr", times : 7, spellcastingAbility : "class" }], spellChanges : { "cure wounds" : { description : "1 living creature heals 3d8+spellcasting ability modifier HP", changes : "When using the Canaith Mandolin to cast Cure Wounds, it is cast at 3rd-level." }, "protection from energy" : { description : "1 creature gains resistance to Lightning damage for the duration", changes : "When using the Canaith Mandolin to cast Protection from Energy, it can only grant resistance to lightning damage." } } }, "cli lyre (rare)" : { name : "Cli Lyre [Instrument of the Bards]", sortname : "Instrument of the Bards, Cli Lyre", rarity : "rare", magicItemTable : "G", descriptionFull : "An instrument of the bards is an exquisite example of its kind, superior to an ordinary instrument in every way. Seven types of these instruments exist, each named after a legendary bard college. A creature that attempts to play the instrument without being attuned to it must succeed on a DC 15 Wisdom saving throw or take 2d4 psychic damage.\n You can use an action to play the instrument and cast one of its spells. Once the instrument has been used to cast a spell, it can't be used to cast that spell again until the next dawn. The spells use your spellcasting ability and spell save DC.\n You can play the instrument while casting a spell that causes any of its targets to be charmed on a failed saving throw, thereby imposing disadvantage on the save. This effect applies only if the spell has a somatic or a material component.\n All instruments of the bards can be used to cast the following spells: Fly, Invisibility, Levitate, and Protection from Evil and Good.\n In addition, the Cli lyre can be used to cast Stone Shape, Wall of Fire, and Wind Wall.", spellcastingBonus : [{ name : "Once per long rest", spells : ["fly", "invisibility", "levitate", "protection from evil and good", "stone shape", "wall of fire", "wind wall"], selection : ["fly", "invisibility", "levitate", "protection from evil and good", "stone shape", "wall of fire", "wind wall"], firstCol : "oncelr", times : 7, spellcastingAbility : "class" }] }, "doss lute (uncommon)" : { name : "Doss Lute [Instrument of the Bards]", sortname : "Instrument of the Bards, Doss Lute", rarity : "uncommon", magicItemTable : "F", descriptionFull : "An instrument of the bards is an exquisite example of its kind, superior to an ordinary instrument in every way. Seven types of these instruments exist, each named after a legendary bard college. A creature that attempts to play the instrument without being attuned to it must succeed on a DC 15 Wisdom saving throw or take 2d4 psychic damage.\n You can use an action to play the instrument and cast one of its spells. Once the instrument has been used to cast a spell, it can't be used to cast that spell again until the next dawn. The spells use your spellcasting ability and spell save DC.\n You can play the instrument while casting a spell that causes any of its targets to be charmed on a failed saving throw, thereby imposing disadvantage on the save. This effect applies only if the spell has a somatic or a material component.\n All instruments of the bards can be used to cast the following spells: Fly, Invisibility, Levitate, and Protection from Evil and Good.\n In addition, the Doss lute can be used to cast Animal Friendship, Protection from Energy (fire only), and Protection from Poison.", spellcastingBonus : [{ name : "Once per long rest", spells : ["fly", "invisibility", "levitate", "protection from evil and good", "animal friendship", "protection from energy", "protection from poison"], selection : ["fly", "invisibility", "levitate", "protection from evil and good", "animal friendship", "protection from energy", "protection from poison"], firstCol : "oncelr", times : 7, spellcastingAbility : "class" }], spellChanges : { "protection from energy" : { description : "1 creature gains resistance to Fire damage for the duration", changes : "When using the Doss Lute to cast Protection from Energy, it can only grant resistance to fire damage." } } }, "fochlucan bandore (uncommon)" : { name : "Fochlucan Bandore [Instrument of the Bards]", sortname : "Instrument of the Bards, Fochlucan Bandore", rarity : "uncommon", magicItemTable : "F", descriptionFull : "An instrument of the bards is an exquisite example of its kind, superior to an ordinary instrument in every way. Seven types of these instruments exist, each named after a legendary bard college. A creature that attempts to play the instrument without being attuned to it must succeed on a DC 15 Wisdom saving throw or take 2d4 psychic damage.\n You can use an action to play the instrument and cast one of its spells. Once the instrument has been used to cast a spell, it can't be used to cast that spell again until the next dawn. The spells use your spellcasting ability and spell save DC.\n You can play the instrument while casting a spell that causes any of its targets to be charmed on a failed saving throw, thereby imposing disadvantage on the save. This effect applies only if the spell has a somatic or a material component.\n All instruments of the bards can be used to cast the following spells: Fly, Invisibility, Levitate, and Protection from Evil and Good.\n In addition, the Fochlucan bandore can be used to cast Entangle, Faerie Fire, Shillelagh, and Speak with Animals.", spellcastingBonus : [{ name : "Once per long rest", spells : ["fly", "invisibility", "levitate", "protection from evil and good", "entangle", "faerie fire", "shillelagh", "speak with animals"], selection : ["fly", "invisibility", "levitate", "protection from evil and good", "entangle", "faerie fire", "shillelagh", "speak with animals"], firstCol : "oncelr", times : 8, spellcastingAbility : "class" }] }, "mac-fuirmidh cittern (uncommon)" : { name : "Mac-Fuirmidh Cittern [Instrument of the Bards]", sortname : "Instrument of the Bards, Mac-Fuirmidh Cittern", rarity : "uncommon", magicItemTable : "F", descriptionFull : "An instrument of the bards is an exquisite example of its kind, superior to an ordinary instrument in every way. Seven types of these instruments exist, each named after a legendary bard college. A creature that attempts to play the instrument without being attuned to it must succeed on a DC 15 Wisdom saving throw or take 2d4 psychic damage.\n You can use an action to play the instrument and cast one of its spells. Once the instrument has been used to cast a spell, it can't be used to cast that spell again until the next dawn. The spells use your spellcasting ability and spell save DC.\n You can play the instrument while casting a spell that causes any of its targets to be charmed on a failed saving throw, thereby imposing disadvantage on the save. This effect applies only if the spell has a somatic or a material component.\n All instruments of the bards can be used to cast the following spells: Fly, Invisibility, Levitate, and Protection from Evil and Good.\n In addition, the Mac-Fuirmidh cittern can be used to cast Barkskin, Cure Wounds, and Fog Cloud.", spellcastingBonus : [{ name : "Once per long rest", spells : ["fly", "invisibility", "levitate", "protection from evil and good", "barkskin", "cure wounds", "fog cloud"], selection : ["fly", "invisibility", "levitate", "protection from evil and good", "barkskin", "cure wounds", "fog cloud"], firstCol : "oncelr", times : 7, spellcastingAbility : "class" }] }, "ollamh harp (legendary)" : { name : "Ollamh Harp [Instrument of the Bards]", sortname : "Instrument of the Bards, Ollamh Harp", rarity : "legendary", magicItemTable : "I", descriptionFull : "An instrument of the bards is an exquisite example of its kind, superior to an ordinary instrument in every way. Seven types of these instruments exist, each named after a legendary bard college. A creature that attempts to play the instrument without being attuned to it must succeed on a DC 15 Wisdom saving throw or take 2d4 psychic damage.\n You can use an action to play the instrument and cast one of its spells. Once the instrument has been used to cast a spell, it can't be used to cast that spell again until the next dawn. The spells use your spellcasting ability and spell save DC.\n You can play the instrument while casting a spell that causes any of its targets to be charmed on a failed saving throw, thereby imposing disadvantage on the save. This effect applies only if the spell has a somatic or a material component.\n All instruments of the bards can be used to cast the following spells: Fly, Invisibility, Levitate, and Protection from Evil and Good.\n In addition, the Ollamh harp can be used to cast Confusion, Control Weather, and Fire Storm.", spellcastingBonus : [{ name : "Once per long rest", spells : ["fly", "invisibility", "levitate", "protection from evil and good", "confusion", "control weather", "fire storm"], selection : ["fly", "invisibility", "levitate", "protection from evil and good", "confusion", "control weather", "fire storm"], firstCol : "oncelr", times : 7, spellcastingAbility : "class" }], spellChanges : { "control weather" : { time : "1 a", changes : "Casting time is only an action." } } } } MagicItemsList["mariner's armor"] = { name : "Mariner's Armor", nameTest : "Mariner's", source : [["D", 188]], type : "armor (light, medium, or heavy)", rarity : "uncommon", magicItemTable : "B", description : "While wearing this armor, I have a swimming speed equal to my walking speed. In addition, whenever I start my turn underwater with 0 hit points, the armor causes me to rise 60 ft toward the surface. The armor is decorated with fish and shell motifs.", descriptionFull : "While wearing this armor, you have a swimming speed equal to your walking speed. In addition, whenever you start your turn underwater with 0 hit points, the armor causes you to rise 60 feet toward the surface. The armor is decorated with fish and shell motifs.", allowDuplicates : true, chooseGear : { type : "armor", prefixOrSuffix : "suffix", descriptionChange : ["prefix", "armor"] }, speed : { swim : { spd : "walk", enc : "walk" } } } MagicItemsList["potion of fire breath"] = { name : "Potion of Fire Breath", source : [["D", 187]], type : "potion", rarity : "uncommon", magicItemTable : "B", description : "Once as an action, I can drink this potion or administer it to another to, for 1 hour, use a bonus action to do 4d6 fire damage at a target within 30 ft, Dex save DC 13 halves. This can be done 3 times. This potion's orange liquid flickers, and smoke fills the top of the container and wafts out whenever it is opened.", descriptionFull : "After drinking this potion, you can use a bonus action to exhale fire at a target within 30 feet of you. The target must make a DC 13 Dexterity saving throw, taking 4d6 fire damage on a failed save, or half as much damage on a successful one. The effect ends after you exhale the fire three times or when 1 hour has passed. This potion's orange liquid flickers, and smoke fills the top of the container and wafts out whenever it is opened.", weight : 0.5 } MagicItemsList["potion of invulnerability"] = { name : "Potion of Invulnerability", source : [["D", 188]], type : "potion", rarity : "rare", magicItemTable : "C", description : "Once as an action, I can drink this potion or administer it to another to have resistance to all damage for 1 minute. The potion's syrupy liquid looks like liquefied iron.", descriptionFull : "For 1 minute after you drink this potion, you have resistance to all damage. The potion's syrupy liquid looks like liquefied iron.", weight : 0.5 } MagicItemsList["potion of longevity"] = { name : "Potion of Longevity", source : [["D", 188]], type : "potion", rarity : "very rare", magicItemTable : "D", description : "Once as an action, I can drink this potion or administer it to another to reduce the consumer's physical age is by 1d6+6 years, to a minimum of 13 years. Subsequent consumptions of this type of potion have a 10% cumulative chance to instead age the consumer by 1d6+6 years.", descriptionLong : "Once as an action, I can drink this potion or administer it to another to reduce the consumer's physical age is by 1d6+6 years, to a minimum of 13 years. Subsequent consumptions of this type of potion have a 10% cumulative chance to instead age the consumer by 1d6+6 years. Suspended in this amber liquid are a scorpion's tail, an adder's fang, a dead spider, and a tiny heart that, against all reason, is still beating. These ingredients vanish when the potion is opened.", descriptionFull : "When you drink this potion, your physical age is reduced by 1d6+6 years, to a minimum of 13 years. Each time you subsequently drink a potion of longevity, there is 10 percent cumulative chance that you instead age by 1d6+6 years. Suspended in this amber liquid are a scorpion's tail, an adder's fang, a dead spider, and a tiny heart that, against all reason, is still beating. These ingredients vanish when the potion is opened.", weight : 0.5 } MagicItemsList["potion of vitality"] = { name : "Potion of Vitality", source : [["D", 188]], type : "potion", rarity : "very rare", magicItemTable : "D", description : "Once as an action, I can drink this potion or administer it to another to remove any exhaustion, disease, and poison affecting the consumer. For the next 24 hours, the consumer regains the maximum number of HP for any HD used. The potion's crimson liquid regularly pulses with dull light, calling to mind a heartbeat.", descriptionFull : "When you drink this potion, it removes any exhaustion you are suffering and cures any disease or poison affecting you. For the next 24 hours, you regain the maximum number of hit points for any Hit Die you spend. The potion's crimson liquid regularly pulses with dull light, calling to mind a heartbeat.", weight : 0.5 } MagicItemsList["rod of resurrection"] = { name : "Rod of Resurrection", source : [["D", 197]], type : "rod", rarity : "legendary", magicItemTable : "I", description : "This rod has 5 charges and regains 1 expended charge daily at dawn. While I hold it, I can use an action to expend 1 charge and cast Heal from it, or expend 5 charges and cast Resurrection from it. If the rod is reduced to 0 charges, roll a d20. On a 1, the rod disappears in a burst of radiance.", descriptionFull : "The rod has 5 charges. While you hold it, you can use an action to cast one of the following spells from it: Heal (expends 1 charge) or Resurrection (expends 5 charges).\n The rod regains 1 expended charge daily at dawn. If the rod is reduced to 0 charges, roll a d20. On a 1, the rod disappears in a burst of radiance.", attunement : true, weight : 2, prerequisite : "Requires attunement by a cleric, druid, or paladin", prereqeval : function(v) { return classes.known.cleric || classes.known.druid || classes.known.paladin ? true : false; }, usages : 5, recovery : "dawn", additional : "regains 1", spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "1 charge", spells : ["heal"], selection : ["heal"], firstCol : 1 }, { name : "5 charges", spells : ["resurrection"], selection : ["resurrection"], firstCol : 5 }], spellChanges : { "resurrection" : { time : "1 a", changes : "Casting time is only 1 action instead of 1 hour." } } } MagicItemsList["rod of the pact keeper, +1, +2, or +3"] = { name : "Rod of the Pact Keeper, +1, +2, or +3", source : [["D", 197]], type : "rod", description : "While holding this rod, I gain a bonus to spell attack rolls and to the saving throw DCs of my warlock spells, determined by the rod's rarity: uncommon (+1), rare (+2), or very rare (+3). As an action once per long rest, I can regain one warlock spell slot while holding the rod.", descriptionFull : "While holding this rod, you gain a bonus to spell attack rolls and to the saving throw DCs of your warlock spells. The bonus is determined by the rod's rarity: uncommon (+1), rare (+2), or very rare (+3).\n In addition, you can regain one warlock spell slot as an action while holding the rod. You can't use this property again until you finish a long rest.", attunement : true, weight : 2, prerequisite : "Requires attunement by a warlock", prereqeval : function(v) { return classes.known.warlock; }, usages : 1, recovery : "long rest", limfeaname : "Rod of the Pact Keeper (warlock spell slot)", action : [["action", ""]], allowDuplicates : true, choices : ["+1 Rod (uncommon)", "+2 Rod (rare)", "+3 Rod (very rare)"], "+1 rod (uncommon)" : { name : "Rod of the Pact Keeper +1", rarity : "uncommon", magicItemTable : "F", description : "While holding this rod, I gain a +1 bonus to spell attack rolls and to the saving throw DCs of my warlock spells. As an action once per long rest, I can regain one warlock spell slot while holding the rod.", calcChanges : { spellCalc : [ function (type, spellcasters, ability) { if (type !== "prepare" && spellcasters.indexOf('warlock') !== -1) return 1; }, "While holding the Rod of the Pact Keeper, I gain a +1 bonus to spell attack rolls and to the saving throw DCs of my warlock spells." ] } }, "+2 rod (rare)" : { name : "Rod of the Pact Keeper +2", rarity : "rare", magicItemTable : "G", description : "While holding this rod, I gain a +2 bonus to spell attack rolls and to the saving throw DCs of my warlock spells. As an action once per long rest, I can regain one warlock spell slot while holding the rod.", calcChanges : { spellCalc : [ function (type, spellcasters, ability) { if (type !== "prepare" && spellcasters.indexOf('warlock') !== -1) return 2; }, "While holding the Rod of the Pact Keeper, I gain a +2 bonus to spell attack rolls and to the saving throw DCs of my warlock spells." ] } }, "+3 rod (very rare)" : { name : "Rod of the Pact Keeper +3", rarity : "very rare", magicItemTable : "H", description : "While holding this rod, I gain a +3 bonus to spell attack rolls and to the saving throw DCs of my warlock spells. As an action once per long rest, I can regain one warlock spell slot while holding the rod.", calcChanges : { spellCalc : [ function (type, spellcasters, ability) { if (type !== "prepare" && spellcasters.indexOf('warlock') !== -1) return 3; }, "While holding the Rod of the Pact Keeper, I gain a +3 bonus to spell attack rolls and to the saving throw DCs of my warlock spells." ] } } } MagicItemsList["saddle of the cavalier"] = { name : "Saddle of the Cavalier", source : [["D", 199]], type : "wondrous item", rarity : "uncommon", magicItemTable : "B", description : "While in this saddle on a mount, I can't be dismounted against my will if I am conscious, and attack rolls against the mount have disadvantage.", descriptionFull : "While in this saddle on a mount, you can't be dismounted against your will if you're conscious, and attack rolls against the mount have disadvantage.", weight : 25 } MagicItemsList["scroll of protection"] = { name : "Scroll of Protection", source : [["D", 199]], type : "scroll", rarity : "rare", magicItemTable : "C", description : "Once as an action, I can use this to make a 5-ft radius, 10-ft high invisible barrier around myself for 5 min that moves with me and stops a creature type from entering or affecting anything within. As an action, a creature can make a DC 15 Cha check to stop being affected.", descriptionFull : "Each scroll of protection works against a specific type of creature chosen by the DM or determined randomly by rolling on the following table.\n\n" + [ toUni("d100\tCreature Type\td100\tCreature Type"), "01-10\tAberrations\t41-50\tFey", "11-20\tBeasts\t\t51-75\tFiends", "21-30\tCelestials \t76-80\tPlants", "31-40\tElementals\t81-00\tUndead", ].join("\n") + "\nUsing an action to read the scroll encloses you in an invisible barrier that extends from you to form a 5-foot-radius, 10-foot-high cylinder. For 5 minutes, this barrier prevents creatures of the specified type from entering or affecting anything within the cylinder.\n The cylinder moves with you and remains centered on you. However, if you move in such a way that an aberration would be inside the cylinder, the effect ends.\n A creature can attempt to overcome the barrier by using an action to make a DC 15 Charisma check. On a success, the creature ceases to be affected by the barrier.", choices : ["Aberrations", "Beasts", "Celestials", "Elementals", "Fey", "Fiends", "Plants", "Undead"], "aberrations" : { name : "Scroll of Protection from Aberrations", description : "Once as an action, I can use this to make a 5-ft radius, 10-ft high invisible barrier around myself for 5 min that moves with me and stops aberrations from entering or affecting anything within. As an action, a creature can make a DC 15 Cha check to stop being affected. If I move so the barrier includes an aberration, it ends." }, "beasts" : { name : "Scroll of Protection from Beasts", description : "Once as an action, I can use this to make a 5-ft radius, 10-ft high invisible barrier around myself for 5 minutes that moves with me and stops beasts from entering or affecting anything within. As an action, a creature can make a DC 15 Charisma check to stop being affected. If I move so the barrier includes a beast, it ends." }, "celestials" : { name : "Scroll of Protection from Celestials", description : "Once as an action, I can use this to make a 5-ft radius, 10-ft high invisible barrier around myself for 5 min that moves with me and stops celestials from entering or affecting anything within. As an action, a creature can make a DC 15 Cha check to stop being affected. If I move so the barrier includes a celestial, it ends." }, "elementals" : { name : "Scroll of Protection from Elementals", description : "Once as an action, I can use this to make a 5-ft radius, 10-ft high invisible barrier around myself for 5 min that moves with me and stops elementals from entering or affecting anything within. As an action, a creature can make a DC 15 Cha check to stop being affected. If I move so the barrier includes an elemental, it ends." }, "fey" : { name : "Scroll of Protection from Fey", description : "Once as an action, I can use this to make a 5-ft radius, 10-ft high invisible barrier around myself for 5 minutes that moves with me and stops fey from entering or affecting anything within. As an action, a creature can make a DC 15 Charisma check to stop being affected. If I move so the barrier includes a fey, it ends." }, "fiends" : { name : "Scroll of Protection from Fiends", description : "Once as an action, I can use this to make a 5-ft radius, 10-ft high invisible barrier around myself for 5 minutes that moves with me and stops fiends from entering or affecting anything within. As an action, a creature can make a DC 15 Charisma check to stop being affected. If I move so the barrier includes a fiend, it ends." }, "plants" : { name : "Scroll of Protection from Plants", description : "Once as an action, I can use this to make a 5-ft radius, 10-ft high invisible barrier around myself for 5 minutes that moves with me and stops plants from entering or affecting anything within. As an action, a creature can make a DC 15 Charisma check to stop being affected. If I move so the barrier includes a plant, it ends." }, "undead" : { name : "Scroll of Protection from Undead", description : "Once as an action, I can use this to make a 5-ft radius, 10-ft high invisible barrier around myself for 5 minutes that moves with me and stops undead from entering or affecting anything within. As an action, a creature can make a DC 15 Cha check to stop being affected. If I move so the barrier includes a undead, it ends." } } MagicItemsList["sending stones"] = { name : "Sending Stones", source : [["D", 199]], type : "wondrous item", rarity : "uncommon", magicItemTable : "C", description : "While I touch one of this pair of stones, I can use an action to cast Sending, targeting the bearer of the other stone. If no creature has the other stone, the spell won't cast. Once it is cast, neither stone can be used again until the next dawn. Sending allows each bearer to communicate up to 25 words.", descriptionFull : "Sending stones come in pairs, with each smooth stone carved to match the other so the pairing is easily recognized. While you touch one stone, you can use an action to cast the Sending spell from it. The target is the bearer of the other stone. If no creature bears the other stone, you know that fact as soon as you use the stone and don't cast the spell.\n Once Sending is cast through the stones, they can't be used again until the next dawn. If one of the stones in a pair is destroyed, the other one becomes nonmagical.", spellcastingBonus : [{ name : "To other stone bearer only", spells : ["sending"], selection : ["sending"], firstCol : "oncelr" }], usages : 1, recovery : "dawn", spellChanges : { "sending" : { description : "Send a 25 word message to the bearer of the other Sending Stone, who can respond with 25 words", changes : "Using one stone of a pair of Sending Stones, the spell can only target the bearer of the other stone of the pair." } } } MagicItemsList["sentinel shield"] = { name : "Sentinel Shield", source : [["D", 199]], type : "shield", rarity : "uncommon", magicItemTable : "F", description : "While holding this shield, I have advantage on initiative rolls and Wisdom (Perception) checks. The shield is emblazoned with a symbol of an eye.", descriptionFull : "While holding this shield, you have advantage on initiative rolls and Wisdom (Perception) checks. The shield is emblazoned with a symbol of an eye.", weight : 6, shieldAdd : "Sentinel Shield", advantages : [["Initiative", true], ["Perception", true]], vision : [["Adv. on Perception checks", 0]] } MagicItemsList["staff of the adder"] = { name : "Staff of the Adder", source : [["D", 203]], type : "staff", rarity : "uncommon", magicItemTable : "F", description : "As a bonus action, I can speak this staff's command word to animate its snake head for 1 minute or make it inanimate again. While animated, I can use it in melee (1d6 piercing + DC 15 Con save or 3d6 poison), but it can be attacked and has AC 15 and 20 HP (full every time). If it reaches 0 HP, the staff is destroyed.", descriptionFull : "You can use a bonus action to speak this staff's command word and make the head of the staff become that of an animate poisonous snake for 1 minute. By using another bonus action to speak the command word again, you return the staff to its normal inanimate form.\n You can make a melee attack using the snake head, which has a reach of 5 feet. Your proficiency bonus applies to the attack roll. On a hit, the target takes 1d6 piercing damage and must succeed on a DC 15 Constitution saving throw or take 3d6 poison damage.\n The snake head can be attacked while it is animate. It has an Armor Class of 15 and 20 hit points. If the head drops to 0 hit points, the staff is destroyed. As long as it's not destroyed, the staff regains all lost hit points when it reverts to its inanimate form.", attunement : true, weight : 4, prerequisite : "Requires attunement by a cleric, druid, or warlock", prereqeval : function(v) { return classes.known.cleric || classes.known.druid || classes.known.warlock ? true : false; }, action : [["bonus action", " (animate/end)"]], weaponOptions : [{ regExpSearch : /^(?=.*snake)(?=.*head)(?=.*staff)(?=.*adder).*$/i, name : "Animated Snake Head from Staff of the Adder", source : [["D", 203]], list : "melee", ability : 1, type : "Natural", damage : [1, 6, "piercing"], range : "Melee", weight : 4, description : "DC 15 Constitution save or 3d6 poison damage", abilitytodamage : false, selectNow : true }] } MagicItemsList["sword of answering"] = { name : "Sword of Answering", source : [["D", 206]], type : "weapon (longsword)", rarity : "legendary", magicItemTable : "I", description : "I gain a +3 bonus to attack and damage rolls made with this magical longsword that has a gem set in its pommel. As a reaction when a creature within my reach damages me, I can make one melee attack with this sword with advantage. This attack ignores damage immunities and resistances of the target.", descriptionFull : 'In the world of Greyhawk, only nine of these blades are known to exist. Each is patterned after the legendary sword Fragarach, which is variously translated as "Final Word." Each of the nine swords has its own name and alignment, and each bears a different gem in its pommel.\n You gain a +3 bonus to attack and damage rolls made with this sword. In addition, while you hold the sword, you can use your reaction to make one melee attack with it against any creature in your reach that deals damage to you. You have advantage on the attack roll, and any damage dealt with this special attack ignores any damage immunity or resistance the target has.\n\n' + [ toUni("Name\t\tAlignment\tGem"), "Answerer \tChaotic good\tEmerald", "Back Talker\tChaotic evil\tJet", "Concluder \tLawful neutral\tAmethyst", "Last Quip \tChaotic neutral\tTourmaline", "Rebutter\t\tNeutral good\tTopaz", "Replier\t\tNeutral\t\tPeridot", "Retorter\t\tLawful good\tAquamarine", "Scather\t\tLawful evil\tGarnet", "Squelcher \tNeutral evil\tSpinel" ].join("\n"), attunement : true, weight : 3, action : [["reaction", ""]], weaponOptions : [{ baseWeapon : "longsword", regExpSearch : /^(?=.*sword)(?=.*answering).*$/i, name : "Sword of Answering", source : [["D", 206]], modifiers : [3, 3], selectNow : true }], choices : ["Answerer (chaotic good)", "Back Talker (chaotic evil)", "Concluder (lawful neutral)", "Last Quip (chaotic neutral)", "Rebutter (neutral good)", "Replier (neutral)", "Retorter (lawful good)", "Scather (lawful evil)", "Squelcher (neutral evil)"], "answerer (chaotic good)" : { name : "Sword of Answering [Answerer]", prerequisite : "Requires attunement by a creature with the chaotic good alignment", prereqeval : function(v) { return (/^(?=.*chaotic)(?=.*good).*$/i).test(What("Alignment")); }, description : "I gain a +3 bonus to attack and damage rolls made with this magical longsword that has an emerald set in its pommel. As a reaction when a creature within my reach damages me, I can make one melee attack with this sword with advantage. This attack ignores damage immunities and resistances of the target." }, "back talker (chaotic evil)" : { name : "Sword of Answering [Back Talker]", prerequisite : "Requires attunement by a creature with the chaotic evil alignment", prereqeval : function(v) { return (/^(?=.*chaotic)(?=.*evil).*$/i).test(What("Alignment")); }, description : "I gain a +3 bonus to attack and damage rolls made with this magical longsword that has jet set in its pommel. As a reaction when a creature within my reach damages me, I can make one melee attack with this sword with advantage. This attack ignores damage immunities and resistances of the target." }, "concluder (lawful neutral)" : { name : "Sword of Answering [Concluder]", prerequisite : "Requires attunement by a creature with the lawful neutral alignment", prereqeval : function(v) { return (/^(?=.*lawful)(?=.*neutral).*$/i).test(What("Alignment")); }, description : "I gain a +3 bonus to attack and damage rolls made with this magical longsword that has an amethyst set in its pommel. As a reaction when a creature within my reach damages me, I can make one melee attack with this sword with advantage. This attack ignores damage immunities and resistances of the target." }, "last quip (chaotic neutral)" : { name : "Sword of Answering [Last Quip]", prerequisite : "Requires attunement by a creature with the chaotic neutral alignment", prereqeval : function(v) { return (/^(?=.*chaotic)(?=.*neutral).*$/i).test(What("Alignment")); }, description : "I gain a +3 bonus to attack and damage rolls made with this magical longsword that has a tourmaline set in its pommel. As a reaction when a creature within my reach damages me, I can make one melee attack with this sword with advantage. This attack ignores damage immunities and resistances of the target." }, "rebutter (neutral good)" : { name : "Sword of Answering [Rebutter]", prerequisite : "Requires attunement by a creature with the neutral good alignment", prereqeval : function(v) { return (/^(?=.*neutral)(?=.*good).*$/i).test(What("Alignment")); }, description : "I gain a +3 bonus to attack and damage rolls made with this magical longsword that has a topaz set in its pommel. As a reaction when a creature within my reach damages me, I can make one melee attack with this sword with advantage. This attack ignores damage immunities and resistances of the target." }, "replier (neutral)" : { name : "Sword of Answering [Replier]", prerequisite : "Requires attunement by a creature with the neutral alignment", prereqeval : function(v) { return (/^(?=.*neutral)(?!.*(chaotic|lawful|evil|good)).*$/i).test(What("Alignment")); }, description : "I gain a +3 bonus to attack and damage rolls made with this magical longsword that has a peridot set in its pommel. As a reaction when a creature within my reach damages me, I can make one melee attack with this sword with advantage. This attack ignores damage immunities and resistances of the target." }, "retorter (lawful good)" : { name : "Sword of Answering [Retorter]", prerequisite : "Requires attunement by a creature with the lawful good alignment", prereqeval : function(v) { return (/^(?=.*lawful)(?=.*good).*$/i).test(What("Alignment")); }, description : "I gain a +3 bonus to attack and damage rolls made with this magical longsword that has an aquamarine set in its pommel. As a reaction when a creature within my reach damages me, I can make one melee attack with this sword with advantage. This attack ignores damage immunities and resistances of the target." }, "scather (lawful evil)" : { name : "Sword of Answering [Scather]", prerequisite : "Requires attunement by a creature with the lawful evil alignment", prereqeval : function(v) { return (/^(?=.*lawful)(?=.*evil).*$/i).test(What("Alignment")); }, description : "I gain a +3 bonus to attack and damage rolls made with this magical longsword that has a garnet set in its pommel. As a reaction when a creature within my reach damages me, I can make one melee attack with this sword with advantage. This attack ignores damage immunities and resistances of the target." }, "squelcher (neutral evil)" : { name : "Sword of Answering [Squelcher]", prerequisite : "Requires attunement by a creature with the neutral evil alignment", prereqeval : function(v) { return (/^(?=.*neutral)(?=.*evil).*$/i).test(What("Alignment")); }, description : "I gain a +3 bonus to attack and damage rolls made with this magical longsword that has a spinel set in its pommel. As a reaction when a creature within my reach damages me, I can make one melee attack with this sword with advantage. This attack ignores damage immunities and resistances of the target." } } MagicItemsList["sword of vengeance"] = { name : "Sword of Vengeance", nameTest : "of Vengeance", source : [["D", 206]], type : "weapon (any sword)", rarity : "uncommon", magicItemTable : "F", attunement : true, description : "This sword gives +1 to hit and damage and is cursed. I can't part with this sword and have disadv. on attacks with other weapons. If I take damage in combat, I must make a DC 15 Wis save or I will attack the attacker until it drops to 0 HP or I can't attack it in melee anymore.", descriptionFull : "You gain a +1 bonus to attack and damage rolls made with this magic weapon.\n " + toUni("Curse") + ". This sword is cursed and possessed by a vengeful spirit. Becoming attuned to it extends the curse to you. As long as you remain cursed, you are unwilling to part with the sword, keeping it on your person at all times. While attuned to this weapon, you have disadvantage on attack rolls made with weapons other than this one.\n In addition, while the sword is on your person, you must succeed on a DC 15 Wisdom saving throw whenever you take damage in combat. On a failed save you must attack the creature that damaged you until you drop to 0 hit points or it does, or until you can't reach the creature to make a melee attack against it.\n You can break the curse in the usual ways. Alternatively, casting banishment on the sword forces the vengeful spirit to leave it. The sword then becomes a +1 weapon with no other properties.", chooseGear : { type : "weapon", prefixOrSuffix : "prefix", descriptionChange : ["replace", "sword"], excludeCheck : function (inObjKey, inObj) { var testRegex = /sword|scimitar|rapier/i; return !(testRegex).test(inObjKey) && (!inObj.baseWeapon || !(testRegex).test(inObj.baseWeapon)); } }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && v.isMeleeWeapon && (/sword|scimitar|rapier/i).test(v.baseWeaponName) && (/of vengeance/i).test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + 'Cursed'; } }, 'If I include the words "of Vengeance" in the name of a sword, it will be treated as the magic weapon Sword of Vengeance. It has +1 to hit and damage, but also bears a curse.' ], atkCalc : [ function (fields, v, output) { if (v.isMeleeWeapon && (/sword|scimitar|rapier/i).test(v.baseWeaponName) && (/of vengeance/i).test(v.WeaponTextName)) { output.magic = v.thisWeapon[1] + 1; } }, '' ] } } MagicItemsList["tentacle rod"] = { name : "Tentacle Rod", source : [["D", 208]], type : "rod", rarity : "rare", magicItemTable : "G", description : "As an action, all 3 tentacles of this rod attack with 15 ft reach, +9 to hit, dealing 1d6 bludgeoning damage. If a target is hit by all 3 it must make a DC 15 Con save or have half speed, disadv. on Dex saves, no reactions, and do action or bonus action, not both, for 1 min. It can repeat the save at the end of each of its turns.", descriptionLong : "As an action while holding the rod, I can direct each of its three tentacles to attack a creature I can see within 15 ft. Each tentacle makes a melee attack roll, +9 to hit, dealing 1d6 bludgeoning damage. If a target is hit by all three tentacles, it must make a DC 15 Constitution saving throw. On a failure, the creature's speed is halved, it has disadvantage on Dexterity saving throws, and it can't use reactions for 1 minute. Moreover, on each of its turns, it can take either an action or a bonus action, but not both. At the end of each of its turns, it can repeat the saving throw, ending the effect on itself on a success.", descriptionFull : "Made by the drow, this rod is a magic weapon that ends in three rubbery tentacles. While holding the rod, you can use an action to direct each tentacle to attack a creature you can see within 15 feet of you. Each tentacle makes a melee attack roll with a +9 bonus. On a hit, the tentacle deals 1d6 bludgeoning damage. If you hit a target with all three tentacles, it must make a DC 15 Constitution saving throw. On a failure, the creature's speed is halved, it has disadvantage on Dexterity saving throws, and it can't use reactions for 1 minute. Moreover, on each of its turns, it can take either an action or a bonus action, but not both. At the end of each of its turns, it can repeat the saving throw, ending the effect on itself on a success.", attunement : true, weight : 2, action : [["action", ""]], weaponOptions : [{ regExpSearch : /^(?=.*tentacle)(?=.*rod).*$/i, name : "Tentacle Rod", source : [["D", 208]], ability : 0, type : "Magic Item", damage : [1, 6, "bludgeoning"], range : "Melee (15 ft)", description : "Action to use, 3 attacks; If all 3 hit same target, it DC 15 Con save, see magic item", abilitytodamage : false, modifiers : [9, ""], weight : 2, isAlwaysProf : false, selectNow : true }] } MagicItemsList["tome of the stilled tongue"] = { name : "Tome of the Stilled Tongue", source : [["D", 208]], type : "wondrous item", rarity : "legendary", magicItemTable : "I", description : "I can use this thick leather-bound tome as a spellbook and an arcane focus. Once per dawn while holding it, I can use a bonus action to cast a spell I have written in it, without expending a spell slot or using any verbal or somatic components. Removing the tongue on the cover erases all spells within.", descriptionLong : "The first few pages of this thick leather-bound tome are filled with indecipherable scrawls. The remaining pages are blank and pristine. I can use it as a spellbook and an arcane focus. Once per dawn while holding it, I can use a bonus action to cast a spell I have written in the tome, without expending a spell slot or using any verbal or somatic components. While attuned to the book, I can remove the tongue from the book's cover, permanently erasing all spells within. Vecna watches the user or this tome and sometimes has cryptic messages appear in it at midnight and fade away after they are read.", descriptionFull : "This thick leather-bound volume has a desiccated tongue pinned to the front cover. Five of these tomes exist, and it's unknown which one is the original. The grisly cover decoration on the first tome of the stilled tongue once belonged to a treacherous former servant of the lich-god Vecna, keeper of secrets. The tongues pinned to the covers of the four copies came from other spellcasters who crossed Vecna. The first few pages of each tome are filled with indecipherable scrawls. The remaining pages are blank and pristine.\n If you can attune to this item, you can use it as a spellbook and an arcane focus. In addition, while holding the tome, you can use a bonus action to cast a spell you have written in this tome, without expending a spell slot or using any verbal or somatic components. Once used, this property of the tome can't be used again until the next dawn.\n While attuned to the book, you can remove the tongue from the book's cover. If you do so, all spells written in the book are permanently erased.\n Vecna watches anyone using this tome. He can also write cryptic messages in the book. These messages appear at midnight and fade away after they are read.", attunement : true, weight : 5, prerequisite : "Requires attunement by a wizard", prereqeval : function(v) { return classes.known.wizard ? true : false; }, action : [["bonus action", ""]], usages : 1, recovery : "dawn" } MagicItemsList["weapon of warning"] = { name : "Weapon of Warning", nameTest : "of Warning", source : [["D", 213]], type : "weapon (any)", rarity : "uncommon", magicItemTable : "F", description : "While this magic weapon is on my person, I have advantage on initiative rolls. In addition, both me and my allies within 30 ft of me can't be surprised and the weapon magically awakens us when combat starts, except those incapacitated by something other than nonmagical sleep.", descriptionFull : "This magic weapon warns you of danger. While the weapon is on your person, you have advantage on initiative rolls. In addition, you and any of your companions within 30 feet of you can't be surprised, except when incapacitated by something other than nonmagical sleep. The weapon magically awakens you and your companions within range if any of you are sleeping naturally when combat begins.", attunement : true, chooseGear : { type : "weapon", prefixOrSuffix : "prefix", descriptionChange : ["replace", "weapon"] }, advantages : [["Initiative", true]], calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && !v.isSpell && (/warning/i).test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); } }, 'If I include the word "Warning" in the name of a weapon, it will be treated as the magic weapon Weapon of Warning.' ] }, savetxt : { immune : ["surprised"] } } // Sentient Items var DMG_blackrazorFullDescription = [ "Hidden in the dungeon of White Plume Mountain, Blackrazor shines like a piece of night sky filled with stars. Its black scabbard is decorated with pieces of cut obsidian.", "You gain a +3 bonus to attack and damage rolls made with this magic weapon. It has the following additional properties.", ">>Devour Soul<<. Whenever you use it to reduce a creature to 0 hit points, the sword slays the creature devours its soul, unless it is a construct or an undead. A creature whose soul has been devoured by Blackrazor can be restored to life only by a Wish spell.", "When it devours a soul, Blackrazor grants you temporary hit points equal to the slain creature's hit point maximum. These hit points fade after 24 hours. As long as these temporary hit points last and you keep Blackrazor in hand, you have advantage on attack rolls, saving throws, and ability checks.", "If you hit an undead with this weapon, you take 1d10 necrotic damage and the target regains 1d10 hit points. If this necrotic damage reduces you to 0 hit points, Blackrazor devours your soul.", ">>Soul Hunter<<. While you hold the weapon, you are aware of the presence of Tiny or larger creatures within 60 feet of you that aren't constructs or undead. You also can't be charmed or frightened.", "Blackrazor can cast the Haste spell on you once per day. It decides when to cast the spell and maintains concentration on it so that you don't have to.", ">>Sentience<<. Blackrazor is a sentient chaotic neutral weapon with an Intelligence of 17, a Wisdom of 10, and a Charisma of 19. It has hearing and darkvision out to a range of 120 feet.", "The weapon can speak, read, and understand Common, and can communicate with its wielder telepathically. Its voice is deep and echoing. While you are attuned to it, Blackrazor also understands every language you know.", ">>Personality<<. Blackrazor speaks with an imperious tone, as though accustomed to being obeyed.", "The sword's purpose is to consume souls. It doesn't care whose souls it eats, including the wielder's. The sword believes that all matter and energy sprang from a void of negative energy and will one day return to it. Blackrazor is meant to hurry that process along.", "Despite its nihilism, Blackrazor feels a strange kinship to Wave and Whelm, two other weapons locked away under White Plume Mountain. It wants the three weapons to be united again and wielded together in combat, even though it violently disagrees with Whelm and finds Wave tedious.", "Blackrazor's hunger for souls must be regularly fed. If the sword goes three days or more without consuming a soul, a conflict between it and its wielder occurs at the next sunset." ]; MagicItemsList["blackrazor"] = { name : "Blackrazor", source : [["D", 216]], type : "weapon (greatsword)", rarity : "legendary", notLegalAL : true, description : "This sentient greatsword adds +3 to hit and damage and makes me immune to being charmed or frightened. Once per day it can cast Haste on me as it sees fit. If I use it to bring a creature to 0 HP, it devours the creature's soul, granting me temporary HP equal to the creature's max HP for 24 hours. See Notes page.", descriptionFull : DMG_blackrazorFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)<>Sentience<<. Wave is a sentient weapon of neutral alignment, with an Intelligence of 14, a Wisdom of 10, and a Charisma of 18. It has hearing and darkvision out to a range of 120 feet.", "The weapon communicates telepathically with its wielder and can speak, read, and understand Aquan. It can also speak with aquatic animals as if using a Speak with Animals spell, using telepathy to involve its wielder in the conversation.", ">>Personality<<. When it grows restless, Wave has a habit of humming tunes that vary from sea chanteys to sacred hymns of the sea gods.", "Wave zealously desires to convert mortals to the worship of one or more sea gods, or else to consign the faithless to death. Conflict arises if the wielder fails to further the weapon's objectives in the world. The trident has a nostalgic attachment to the place where it was forged, a desolate island called Thunderforge. A sea god imprisoned a family of storm giants there, and the giants forged Wave in an act of devotion to\u2014or rebellion against\u2014that god.", "Wave harbors a secret doubt about its own nature and purpose. For all its devotion to the sea gods, Wave fears that it was intended to bring about a particular sea god's demise. This destiny is something Wave might not be able to avert." ]; if (MagicItemsList["trident of fish command"] && MagicItemsList["weapon of warning"] && MagicItemsList["cap of water breathing"] && MagicItemsList["cube of force"]) { MagicItemsList["wave"] = { name : "Wave", source : [["D", 218]], type : "weapon (trident)", rarity : "legendary", notLegalAL : true, description : "This sentient trident adds +3 to hit and damage and if I score a critical hit with it, the target takes extra necrotic damage equal to half its max HP. It also functions as a trident of fish command, a weapon of warning, cap of water breathing while I hold it, and I can use it as a cube of force. See Notes page.", descriptionFull : DMG_waveFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)<>Thrown Weapon<<. Whelm has the thrown property, with a normal range of 20 feet and a long range of 60 feet. When you hit with a ranged weapon attack using it, the target takes an extra 1d8 bludgeoning damage, or an extra 2d8 bludgeoning damage if the target is a giant. Each time you throw the weapon, it flies back to your hand after the attack. If you don't have a hand free, the weapon lands at your feet.", ">>Shock Wave<<. You can use an action to strike the ground with Whelm and send a shock wave out from the point of impact. Each creature of your choice on the ground within 60 feet of that point must succeed on a DC 15 Constitution saving throw or become stunned for 1 minute. A creature can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success. Once used, this property can't be used again until the next dawn.", ">>Supernatural Awareness<<. While you are holding the weapon, it alerts you to the location of any secret or concealed doors within 30 feet of you. In addition, you can use an action to cast Detect Evil and Good or Locate Object from the weapon. Once you cast either spell, you can't cast it from the weapon again until the next dawn.", ">>Sentience<<. Whelm is a sentient lawful neutral weapon with an Intelligence of 15, a Wisdom of 12, and a Charisma of 15. It has hearing and darkvision out to a range of 120 feet.", "The weapon communicates telepathically with its wielder and can speak, read, and understand Dwarvish. Giant, and Goblin. It shouts battle cries in Dwarvish when used in combat.", ">>Personality<<. Whelm's purpose is to slaughter giants and goblinoids. It also seeks to protect dwarves against all enemies. Conflict arises if the wielder fails to destroy goblins and giants or to protect dwarves. Whelm has ties to the dwarf clan that created it, variously called the Dankil or the Mightyhammer clan. It longs to be returned to that clan. It would do anything to protect those dwarves from harm. The hammer also carries a secret shame. Centuries ago, a dwarf named Ctenmiir wielded it valiantly for a time. But Ctenmiir was turned into a vampire. His will was strong enough that he bent Whelm to his evil purposes, even killing members of his own clan." ]; MagicItemsList["whelm"] = { name : "Whelm", source : [["D", 218]], type : "weapon (warhammer)", rarity : "legendary", notLegalAL : true, description : "This sentient warhammer adds +3 to hit and damage, has the thrown property, deals extra damage when thrown, and returns to my hand when thrown. I can use it to create a shock wave. It makes me afraid of the outdoors, so while I can see the daytime sky, I have disadv. on attacks, saves, and checks. See Notes page.", descriptionFull : DMG_whelmFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)< 2 && (/\brage\b/i).test(v.WeaponTextName)) { var theDMG = GetFeatureChoice('class', 'barbarian', 'subclassfeature3'); if (!theDMG) return; fields.Description += (fields.Description ? '; ' : '') + '+1d6+' + Math.floor(classes.known.barbarian.level / 2) + ' ' + GetFeatureChoice('class', 'barbarian', 'subclassfeature3') + ' on first hit each turn'; }; }, "If I include the word 'Rage' in a melee weapon's name, it will show in its description that its first hit does extra damage." ] } }, "subclassfeature3.1" : { name : "Warrior of the Gods", source : [["X", 11]], minlevel : 3, description : desc("Spells restoring me to life (not undeath or anything else) don't require material comp.") }, "subclassfeature6" : { name : "Fanatical Focus", source : [["X", 11]], minlevel : 6, description : desc([ "When I fail a saving throw while raging, I can reroll it and must use the new roll", "I can use this ability only once per rage" ]), usages : 1, recovery : "rage" }, "subclassfeature10" : { name : "Zealous Presence", source : [["X", 11]], minlevel : 10, description : desc([ "As a bonus action, I choose up to 10 creatures within 60 ft that can hear my battle cry", "These creatures gain adv. on attacks and saves until the start of my next turn" ]), usages : 1, recovery : "long rest", action : [["bonus action", ""]] }, "subclassfeature14" : { name : "Rage Beyond Death", source : [["X", 11]], minlevel : 14, description : desc([ "While raging, having 0 hit points doesn't knock me unconscious", "I still must make death saves, and I suffer the normal effects of taking damage", "I only die due to failed death saves if my rage ends while I'm at 0 HP" ]) } } }); // Add 3 subclasses for the Bard AddSubClass("bard", "college of glamour", { regExpSearch : /^(?=.*(college|bard|minstrel|troubadour|jongleur))(?=.*glamour).*$/i, subname : "College of Glamour", subnameShort: "Glamour", source : [["X", 14]], features : { "subclassfeature3" : { name : "Mantle of Inspiration", source : [["X", 14]], minlevel : 3, description : desc([ "As a bonus action, I expend one Bardic Inspiration die to aid those within 60 ft of me", "My Cha mod (min 1) of creatures that I can see and can see me gain temporary HP", "They can immediately use a reaction to move their speed, without opportunity attacks" ]), additional : levels.map(function (n) { return n < 3 ? "" : "1 inspiration die; " + (n < 5 ? 5 : n < 10 ? 8 : n < 15 ? 11 : 14) + " temp HP"; }), action : [["bonus action", ""]] }, "subclassfeature3.1" : { name : "Enthralling Performance", source : [["X", 14]], minlevel : 3, recovery : "short rest", usages : 1, description : desc([ "By performing for at least 1 minute, I can charm humanoids within 60 ft of me", "After the performance, my Cha mod (min 1) number of targets must make a Wis save", "On a fail, a target is charmed for 1 hour; If success, it doesn't knows I tried to charm it", "While charmed, the target idolizes me, hinders those opposing me, and avoids violence", "This lasts until a target takes damage, I attack it, or if it sees me attacking its allies" ]) }, "subclassfeature6" : { name : "Mantle of Majesty", source : [["X", 14]], minlevel : 6, recovery : "long rest", usages : 1, action : [["bonus action", ""]], description : desc([ "As a bonus action, I appear unearthly beautiful while I concentrate, up to 1 minute", "At the same time, and as a bonus action during, I can cast Command without a spell slot", "Creatures charmed by me automatically fail their saves against these Command spells" ]), spellcastingBonus : [{ name : "Mantle of Majesty", spells : ["command"], selection : ["command"], firstCol : 'oncelr' }], spellChanges : { "command" : { time : "1 bns", description : "1 crea save or follow one word command, e.g. approach, drop, flee, halt", changes : "Using my Mantle of Majesty class feature, I can cast Command as a bonus action once per long rest without using a spell slot, thus only affect a single target." } } }, "subclassfeature14" : { name : "Unbreakable Majesty", source : [["X", 14]], minlevel : 14, recovery : "short rest", usages : 1, action : [["bonus action", ""]], description : desc([ "As a bonus action, I gain a magically majestic presence for 1 min or until incapacitated", "During this, the first time a creature attacks me each turn they must make a Cha save", "If failed, it can't attack me this turn and must choose another target or lose its attack", "If successful, it can attack, but has disadv. on all saves against my spells on my next turn" ]) } } }); AddSubClass("bard", "college of swords", { regExpSearch : /^(?=.*(college|bard|minstrel|troubadour|jongleur))(?=.*\bswords?\b).*$/i, subname : "College of Swords", subnameShort: "Swords", source : [["X", 15]], attacks : [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], features : { "subclassfeature3" : { name : "Bonus Proficiencies", source : [["X", 15]], minlevel : 3, description : desc([ "I gain proficiency with medium armor and scimitars", "My bardic spellcasting focus can be any simple or martial weapon I'm proficient with" ]), armorProfs : [false, true, false, false], weaponProfs : [false, false, ["scimitar"]] }, "subclassfeature3.1" : { name : "Fighting Style", source : [["X", 15]], minlevel : 3, description : desc('Select a Fighting Style for the college of swords using the "Choose Feature" button above'), choices : ["Dueling", "Two-Weapon Fighting"], "dueling" : FightingStyles.dueling, "two-weapon fighting" : FightingStyles.two_weapon }, "subclassfeature3.2" : { name : "Blade Flourish", source : [["X", 15]], minlevel : 3, description : desc([ "When I take the Attack action on my turn, I gain bonus speed and special attack options", "I gain +10 ft to my walking speed until the end of the current turn", "Once per turn when I hit with a weapon attack, I can expend a Bardic Inspiration die", "The roll of that die is added to the weapon's damage, in addition to one of the following:", "\u2022 Defensive Flourish: the result is also added to my AC until the start of my next turn", "\u2022 Slashing Flourish: the extra damage is also dealt to any of my choosing in 5 ft of me", "\u2022 Mobile Flourish: the target is also pushed 5 plus the die result in feet away from me", " As a reaction after this push, I can move my speed to a space within 5 ft of the target" ]) }, "subclassfeature14" : { name : "Master Flourish", source : [["X", 16]], minlevel : 14, description : desc("When I do a Blade Flourish, I can use a d6 instead of expending a Bardic Inspiration die") } } }); AddSubClass("bard", "college of whispers", { regExpSearch : /^(?=.*(college|bard|minstrel|troubadour|jongleur))(?=.*whispers).*$/i, subname : "College of Whispers", subnameShort: "Whispers", source : [["X", 16]], features : { "subclassfeature3" : { name : "Psychic Blades", source : [["X", 16]], minlevel : 3, description : desc([ "When I hit a creature with a weapon attack, I can expend one use of Bardic Inspiration", "If so, the attack does extra psychic damage; I can do so only once per round, on my turn" ]), additional : levels.map(function (n) { return n < 3 ? "" : "1 Bardic Inspiration for +" + (n < 5 ? 2 : n < 10 ? 3 : n < 15 ? 5 : 8) + "d6 damage"; }) }, "subclassfeature3.1" : { name : "Words of Terror", source : [["X", 16]], minlevel : 3, recovery : "short rest", usages : 1, description : desc([ "By speaking privately with a humanoid for at least 1 minute, I can try to inspire terror", "After the talk, it must make a Wis save or be frightened of me or someone of my choice", "If the save is successful, the target doesn't know I tried to frighten it", "This lasts for 1 hour, or until it sees its allies or itself being attacked or damaged" ]) }, "subclassfeature6" : { name : "Mantle of Whispers", source : [["X", 16]], minlevel : 6, recovery : "short rest", usages : 1, action : [["reaction", ""]], description : desc([ "As a reaction when a humanoid dies within 30 ft of me, I can capture its shadow", "As an action, I can use it to make me look just like the dead person did while it was alive", "While disguised, I know general information about it and its memories, but not its secrets", "Others can see through the disguise with a Wis (Insight) check vs. my Cha (Deception) +5", "A shadow lasts until used or next long rest; The disguise ends as a bonus action or 1 hour" ]), action : [['action', 'Shadow Disguise (start)'], ['bonus action', 'Shadow Disguise (end)']] }, "subclassfeature14" : { name : "Shadow Lore", source : [["X", 16]], minlevel : 14, recovery : "long rest", usages : 1, action : [["action", ""]], description : desc([ "As an action, I whisper to a creature within 30 ft that can hear and understand me", "Only the target can hear me; It must make a Wis save or be charmed by me for 8 hours", "If failed, it thinks I know its most mortifying secret, otherwise it only hears mumbling", "While charmed, the target obeys my commands, but won't fight or risk its life for me", "This lasts for 8 hours, or until I or my allies attack it, damage it, or have it make a save" //"When the effect ends, the target has no idea why it was so afraid of me" ]) } } }); // Add 2 subclasses for the Cleric AddSubClass("cleric", "forge domain", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*(forge|forgery|blacksmith)).*$/i, subname : "Forge Domain", source : [["X", 18]], spellcastingExtra : ["identify", "searing smite", "heat metal", "magic weapon", "elemental weapon", "protection from energy", "fabricate", "wall of fire", "animate objects", "creation"], features : { "subclassfeature1" : { name : "Bonus Proficiency", source : [["X", 19]], minlevel : 1, description : desc("I gain proficiency with heavy armor and smith's tools"), armorProfs : [false, false, true, false], toolProfs : ["Smith's tools"] }, "subclassfeature1.1" : { name : "Blessing of the Forge", source : [["X", 19]], minlevel : 1, action : [["action", ""]], usages : 1, recovery : "long rest", description : desc([ "At the end of a long rest, I can imbue magic into a nonmagical weapon or armor", "It becomes magical: +1 AC if armor, or +1 to attack and damage rolls if a weapon", "This lasts until the end of my next long rest or until I die" ]) }, "subclassfeature2" : { name : "Channel Divinity: Artisan's Blessing", source : [["X", 19]], minlevel : 2, description : desc([ "With an hour-long ritual, I can craft a nonmagical item that is at least part metal", "Including: suit of armor, simple or martial weapon, set of tools, 10 pieces of ammunition", "The creation can be worth up to 100 gp, and I must expend metals of equal value to it", "The metals irretrievably coalesce into the new item, forming even nonmetal parts of it", "The item can be an exact duplicate of a nonmagical item if I possess the original", "The item comes into existence at the end of the hour in an unoccupied space within 5 ft" ]) }, "subclassfeature6" : { name : "Soul of the Forge", source : [["X", 19]], minlevel : 6, description : desc("I gain resistance to fire damage and +1 to AC while wearing medium or heavy armor"), dmgres : ["Fire"], extraAC : { mod : 1, text : "I gain a +1 bonus to AC while wearing Medium or Heavy armor.", stopeval : function (v) { return !v.mediumArmor && !v.heavyArmor; } } }, "subclassfeature8" : { name : "Divine Strike", source : [["X", 19]], minlevel : 8, description : desc("Once per turn, when I hit a creature with a weapon attack, I can do extra damage"), additional : levels.map(function (n) { if (n < 8) return ""; return "+" + (n < 14 ? 1 : 2) + "d8 fire damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && v.isWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.cleric.level < 14 ? 1 : 2) + 'd8 fire damage'; } }, "Once per turn, I can have one of my weapon attacks that hit do extra fire damage." ] } }, "subclassfeature17" : { name : "Saint of Forge and Fire", source : [["X", 19]], minlevel : 17, description : desc([ "I gain immunity to fire damage", "When wearing heavy armor, I'm resistant to nonmagical bludg./piercing/slashing damage" ]), savetxt : { immune : ["fire"] }, dmgres : [["Bludgeoning", "Bludg. (nonmagical)"], ["Piercing", "Pierc. (nonmagical)"], ["Slashing", "Slash. (nonmagical)"]] } } }); AddSubClass("cleric", "grave domain", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*grave).*$/i, subname : "Grave Domain", source : [["X", 19]], spellcastingExtra : ["bane", "false life", "gentle repose", "ray of enfeeblement", "revivify", "vampiric touch", "blight", "death ward", "antilife shell", "raise dead"], features : { "subclassfeature1" : { name : "Circle of Mortality", source : [["X", 20]], minlevel : 1, action : [["bonus action", ""]], description : desc([ "Spells I cast to heal a living creature at 0 HP have their dice count as their max result", "I learn Spare the Dying, which I can cast as a bonus action with a range of 30 ft" ]), spellcastingBonus : [{ name : "Circle of Mortality", spells : ["spare the dying"], selection : ["spare the dying"], firstCol : 'atwill' }], spellChanges : { "spare the dying" : { time : "1 bns", range : "30 ft", changes : "I can cast Spare the Dying as a bonus action instead of an action, and it has a range of 30 ft instead of touch." } } }, "subclassfeature1.1" : { name : "Eyes of the Grave", source : [["X", 20]], minlevel : 1, usages : typePF ? "Wisdom mod per " : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest", description : desc([ "As an action, I sense undead within 60 ft that aren't protected from divination magic", "Until the end of my next turn, I sense the location of any undead not behind total cover" ]) }, "subclassfeature2" : { name : "Channel Divinity: Path to the Grave", source : [["X", 20]], minlevel : 2, action : [["action", ""]], description : desc([ "As an action, I can curse a creature within 30 ft until the end of my next turn", "It is vulnerable to all the damage from the next attack by me or my allies that hits it" ]) }, "subclassfeature6" : { name : "Sentinel at Death's Door", source : [["X", 20]], minlevel : 6, usages : typePF ? "Wisdom mod per " : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest", action : [["reaction", ""]], description : desc("As a reaction, I turn a critical hit to me or an ally I see within 30 ft to a normal hit") }, "subclassfeature8" : { name : "Potent Spellcasting", source : [["X", 20]], minlevel : 8, description : desc("I add my Wisdom modifier to the damage I deal with my cleric cantrips"), calcChanges : GenericClassFeatures["potent spellcasting"].calcChanges }, "subclassfeature17" : { name : "Keeper of Souls", source : [["X", 20]], minlevel : 17, description : desc([ "Once per round, if I'm not incapacitated, I can manipulate the energy of the dying", "When an enemy I can see dies within 60 ft of me, I or an ally within 60 ft regain HP", "The HP regained is equal to the enemy's number of Hit Dice" ]) } } }); // Add 2 subclasses for the Druid AddSubClass("druid", "circle of dreams", { regExpSearch : /^(?=.*(druid|shaman))(?=.*\bdreams\b).*$/i, subname : "Circle of Dreams", subnameShort: "Dreams", source : [["X", 22]], features : { "subclassfeature2" : { name : "Balm of the Summer Court", source : [["X", 22]], minlevel : 2, description : desc([ "I have a pool of fey energy represented by a number of d6s equal to my druid level", "As a bonus action, I can spend dice to heal an ally within 120 ft of me that I can see", "I can spend up to half my druid level worth of dice from the pool at once", "The ally heals an amount equal to the total rolled and gains 1 temp HP per die spent" ]), usages : levels.map(function (n) { return n < 2 ? "" : n + "d6 per "; }), recovery : "long rest", action : [["bonus action", ""]] }, "subclassfeature6" : { name : "Hearth of Moonlight and Shadow", source : [["X", 22]], minlevel : 6, description : desc([ "At the start of a rest, I can create a 30-ft radius invisible magical sphere", "The sphere extends from a point in space I touch, but doesn't extend through total cover", "Within this area, my allies and I gain +5 on Wis (Perception) and Dex (Stealth) checks", "Also, any light from open flames that are in the sphere is invisible from outside the area", "This effect lasts until the end of the rest or when I leave the sphere" ]) }, "subclassfeature10" : { name : "Hidden Paths", source : [["X", 22]], minlevel : 10, description : desc([ "As a bonus action, I can teleport myself up to 60 ft to a spot I can see", "As an action, I can teleport a willing ally I touch up to 30 ft to a spot I can see" ]), usages : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest", action : [["bonus action", ""], ['action', ' (on ally)']] }, "subclassfeature14" : { name : "Walker in Dreams", source : [["X", 23]], minlevel : 14, usages : 1, recovery : "long rest", description : desc([ "When I finish a short rest, I can cast either Dream, Scrying, or Teleportation Circle", "This doesn't require a spell slot or material components; Dream uses me as the messenger", "Teleportation Circle connects to the last place I finished a long rest, if on the same plane" ]), spellcastingBonus : [{ name : "Walker in Dreams", spells : ["dream"], selection : ["dream"], firstCol : 'oncelr' }, { name : "Walker in Dreams", spells : ["scrying"], selection : ["scrying"], firstCol : 'oncelr' }, { name : "Walker in Dreams", spells : ["teleportation circle"], selection : ["teleportation circle"], firstCol : 'oncelr' }], spellChanges : { "dream" : { components : "V,S", compMaterial : "", changes : "Using Walker in Dreams, I can cast either Dream, Scrying, or Teleportation Circle once per long rest without requiring material components." }, "scrying" : { components : "V,S", compMaterial : "", description : "1 crea save or sensor follows it around; or create sensor in familiar location; see book", changes : "Using Walker in Dreams, I can cast either Dream, Scrying, or Teleportation Circle once per long rest without requiring material components." }, "teleportation circle" : { components : "V", compMaterial : "", description : "Create a circle to teleport to the place where I finished my last long rest, if on the same plane; see book", changes : "Using Walker in Dreams, I can cast either Dream, Scrying, or Teleportation Circle once per long rest without requiring material components.\n \u2022 The teleportation circle brings me back to the place where I finished my last long rest." } } } } }); AddSubClass("druid", "circle of the shepherd", { regExpSearch : /^(?=.*(druid|shaman))(?=.*shepherd).*$/i, subname : "Circle of the Shepherd", subnameShort: "Shepherd", source : [["X", 23]], features : { "subclassfeature2" : { name : "Speech of the Woods", source : [["X", 23]], minlevel : 2, description : desc([ "I can talk with beasts, they understand me and I them, to the limit of their intelligence", "This doesn't automatically make me friends with all beasts; Additionally, I learn Sylvan" ]), languageProfs : ["Sylvan"] }, "subclassfeature2.1" : { name : "Spirit Totem", source : [["X", 23]], minlevel : 2, description : desc([ "As a bonus action, I can summon, or move, a spirit to a point I can see within 60 ft", "It is a spectral form of a Bear, Hawk, or Unicorn (my choice), with a 30-ft radius aura", "It is incorporeal, immobile, doesn't counts as a creature or object, and persists for 1 min", "The spirit persists for 1 minute or until I'm incapacitated", "\u2022 Bear: my allies and I, if in the aura, immediately gain 5 + my druid level in temp HP", " While in the aura, my allies and I gain advantage on Strength checks and saves", "\u2022 Hawk: As a reaction, I can grant advantage on an attack vs. a target in the aura", " While in the aura, my allies and I gain advantage on Wisdom (Perception) checks", "\u2022 Unicorn: my allies and I gain advantage on ability checks to detect targets in the aura", " When I cast a healing spell with a spell slot, allies in the aura heal my druid level in HP" ]), usages : 1, recovery : "short rest", action : [["bonus action", ""]] }, "subclassfeature6" : { name : "Mighty Summoner", source : [["X", 24]], minlevel : 6, description : desc("Beasts or Fey I summon with spells get +2 HP per HD and their attacks count as magical"), calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { switch (spellKey) { case "conjure animals" : case "conjure fey" : spellObj.description += "; each +2 HP/HD, magical natural attacks"; return true; case "conjure woodland beings" : spellObj.description = spellObj.description.replace(/fey.*/, "fey; obeys commands if its align. agrees; breaks free if break conc.; +2 HP/HD, magic atks"); return true; } }, "When I use a spell that summons beast or fey creatures, those summons have +2 HP per HD and their attacks count as magical." ] } }, "subclassfeature10" : { name : "Guardian Spirit", source : [["X", 24]], minlevel : 10, description : desc("When a Beast or Fey that I summoned ends its turn in my Spirit Totem aura, it heals"), additional : levels.map(function (n) { return n < 10 ? "" : "heals " + Math.floor(n / 2) + " HP"; }) }, "subclassfeature14" : { name : "Faithful Summons", source : [["X", 24]], minlevel : 14, description : desc([ "When I am reduced to 0 HP or incapacitated against my will, I can cast Conjure Animals", "This is done as if using a 9th-level spell slot to summon 4 beast of my choice up to CR 2", "They appear within 20 ft of me, last 1 hour, and protect me from harm and attack foes" ]), usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Faithful Summons", spells : ["conjure animals"], selection : ["conjure animals"], firstCol : "oncelr" }], spellChanges : { "conjure animals" : { nameShort : "Conjure Animals (level 9)", range : "20 ft", duration : "1 h", description : "Summon 4 CR 2 beasts; protect me from harm and attack foes", changes : "Using my Faithful Summons class feature when I'm reduced to 0 HP, I can cast Conjure Animals as if using a 9th-level spell slot. This then summons 4 beast of my choice up to CR 2 within 20 ft of me without needing concentration." } } } } }); // Add 3 subclasses for the Fighter AddSubClass("fighter", "arcane archer", { regExpSearch : /^(?=.*arcane)(?=.*archer).*$/i, subname : "Arcane Archer", source : [["X", 28]], fullname : "Arcane Archer", abilitySave : 4, features : { "subclassfeature3" : { name : "Arcane Archer's Lore", source : [["X", 28]], minlevel : 3, description : desc([ "I gain proficiency with either the Arcana or Nature skill", "I also learn either the Prestidigitation or the Druidcraft cantrip" ]), skillstxt : "Arcana or Nature", spellcastingBonus : [{ name : "Arcane Archer's Lore", spells : ["druidcraft", "prestidigitation"] }] }, "subclassfeature3.1" : { name : "Arcane Shot", source : [["X", 28]], minlevel : 3, description : desc([ "I can unleash magical effects when I fire an arrow from a short- or longbow", "I can use this once per turn as part of the Attack action, after an attack hits", "I know a number of Arcane Shot Options and learn additional at certain levels", 'Use the "Choose Feature" button above to add Arcane Shots Options to the third page' ]), usages : 2, recovery : "short rest", additional : levels.map( function(n) { return n < 3 ? "" : (n < 7 ? 2 : n < 10 ? 3 : n < 15 ? 4 : n < 18 ? 5 : 6) + " options known"; }), extraname : "Arcane Shot Option", extrachoices : ["Banishing Arrow [Abjuration]", "Beguiling Arrow [Enchantment]", "Bursting Arrow [Evocation]", "Enfeebling Arrow [Necromancy]", "Grasping Arrow [Conjuration]", "Piercing Arrow [Transmutation]", "Seeking Arrow [Divination]", "Shadow Arrow [Illusion]"], extraTimes : levels.map(function (n) { return n < 3 ? 0 : n < 7 ? 2 : n < 10 ? 3 : n < 15 ? 4 : n < 18 ? 5 : 6; }), "banishing arrow [abjuration]" : { name : "Banishing Arrow [Abjuration]", source : [["X", 29]], description : desc([ "The target makes a Cha save or is banished to the Feywild until the end of its next turn", "While banished, its speed is 0 and is incapacitated; It re-appearing in the same spot", "When I reach 18th level, this Arcane Shot Option also does an extra 2d6 force damage" ]), additional : levels.map( function(n) { return n < 18 ? "" : "+2d6 force damage"; }) }, "beguiling arrow [enchantment]" : { name : "Beguiling Arrow [Enchantment]", source : [["X", 29]], description : desc([ "The target takes extra psychic damage and must succeed on a Wisdom save", "If failed, it is charmed by one of my allies within 30 ft of it that I choose", "This lasts until my next turn starts or until the chosen ally attacks the target in any way" ]), additional : levels.map( function(n) { return n < 3 ? "" : "+" + (n < 18 ? 2 : 4) + "d6 damage"; }) }, "bursting arrow [evocation]" : { name : "Bursting Arrow [Evocation]", source : [["X", 29]], description : desc("The target, in addition to the shot, and all creatures within 10 ft of it take damage"), additional : levels.map( function(n) { return n < 3 ? "" : "+" + (n < 18 ? 2 : 4) + "d6 force damage"; }) }, "enfeebling arrow [necromancy]" : { name : "Enfeebling Arrow [Necromancy]", source : [["X", 29]], description : desc([ "The target takes extra necrotic damage and must make a Constitution save", "If failed, the damage of the target's attacks are halved until the start of my next turn" ]), additional : levels.map( function(n) { return n < 3 ? "" : "+" + (n < 18 ? 2 : 4) + "d6 necrotic damage"; }) }, "grasping arrow [conjuration]" : { name : "Grasping Arrow [Conjuration]", source : [["X", 29]], description : desc([ "The target takes extra poison damage as brambles wrap around it for 1 minute", "The brambles give it -10 ft speed and do it slashing damage every round it moves", "These can be removed by it or another as an action with Strength (Athletics) vs. my DC" ]), additional : levels.map( function(n) { return n < 3 ? "" : (n < 18 ? 2 : 4) + "d6 poison/slash. damage"; }) }, "piercing arrow [transmutation]" : { name : "Piercing Arrow [Transmutation]", source : [["X", 29]], description : desc([ "With this I don't roll for the attack, but shoot the arrow in a 30-ft long, 1-ft wide line", "It passes through objects, ignoring cover, but all creatures in the area take damage", "The damage is the same as a normal hit from my attack, plus extra piercing damage", "A creature can make a Dexterity save to reduce the damage by half" ]), additional : levels.map( function(n) { return n < 3 ? "" : "+" + (n < 18 ? 1 : 2) + "d6 piercing damage"; }) }, "seeking arrow [divination]" : { name : "Seeking Arrow [Divination]", source : [["X", 30]], description : desc([ "With this I don't roll for the attack, but I choose a target I have seen in the last minute", "The seeking arrow moves around corners, obstacles, and ignores cover to hit the target", "It is hit if it is within the weapon's range and there is a path for the arrow to get to it", "The target takes the full damage of the attack plus extra force damage", "It can make a Dexterity save to reduce the damage by half; If failed, I know its location" ]), additional : levels.map( function(n) { return n < 3 ? "" : "+" + (n < 18 ? 1 : 2) + "d6 force damage"; }) }, "shadow arrow [illusion]" : { name : "Shadow Arrow [Illusion]", source : [["X", 30]], description : desc([ "The target takes extra psychic damage and must succeed on a Wisdom save", "If failed, the target can't see anything beyond 5 ft until the end of my next turn" ]), additional : levels.map( function(n) { return n < 3 ? "" : "+" + (n < 18 ? 2 : 4) + "d6 psychic damage"; }) } }, "subclassfeature7" : { name : "Magic Arrow", source : [["X", 28]], minlevel : 7, description : desc("Whenever I fire a nonmagical arrow from a short- or longbow, I can make it magical") }, "subclassfeature7.1" : { name : "Curving Shot", source : [["X", 28]], minlevel : 7, description : desc([ "Once per turn when I miss with a magic arrow, I can use a bonus action to redirect it", "I reroll the attack against a different target within 60 ft of the original target" ]), action : [["bonus action", ""]] }, "subclassfeature15" : { name : "Ever-Ready Shot", source : [["X", 28]], minlevel : 15, description : desc("I regain one use of Arcane Shot if I have no more remaining when I roll initiative") } } }); AddSubClass("fighter", "cavalier", { regExpSearch : /cavalier/i, subname : "Cavalier", source : [["X", 30]], fullname : "Cavalier", abilitySave : 1, features : { "subclassfeature3" : { name : "Bonus Proficiency", source : [["X", 30]], minlevel : 3, description : desc([ "I gain proficiency with Animal Handling, History, Insight, Performance, or Persuasion", 'Alternatively, I learn one language; Use the "Choose Feature" button above for this' ]), choices : ["Language proficiency", "Skill proficiency: Animal Handling, History, Insight, Performance, or Persuasion"], "language proficiency" : { name : "Bonus Proficiency", description : desc("I learn one language of my choice"), languageProfs : [1] }, "skill proficiency: animal handling, history, insight, performance, or persuasion" : { name : "Bonus Proficiency", description : desc("I gain proficiency with Animal Handling, History, Insight, Performance, or Persuasion"), skillstxt : "Choose one from: Animal Handling, History, Insight, Performance, or Persuasion" } }, "subclassfeature3.1" : { name : "Born in the Saddle", source : [["X", 30]], minlevel : 3, description : desc([ "I have advantage on saves to avoid falling off my mount, and land on my feet if I fail", "Mounting or dismounting a creature costs me only 5 ft of movement instead of half" ]), savetxt : { adv_vs : ["falling off my mount"] } }, "subclassfeature3.2" : { name : "Unwavering Mark", source : [["X", 30]], minlevel : 3, description : desc([ "If I hit a creature with a melee weapon attack, I mark it until the end of my next turn", "While it is within 5 ft of me, a marked target has disadv. on attacks not directed at me", "If it damages anybody but me, I can make a special melee attack vs. it in my next turn", "This takes a bonus action, but has adv. and adds half my fighter level to the damage", "A mark ends early if I'm incapacitated, die, or somebody else marks the target" ]), usages : "Strength modifier per ", usagescalc : "event.value = Math.max(1, What('Str Mod'));", recovery : "long rest", additional : levels.map(function (n) { return n < 3 ? "" : "+" + Math.floor(n/2) + " damage"; }), calcChanges : { atkCalc : [ function (fields, v, output) { if (v.isMeleeWeapon && classes.known.fighter && classes.known.fighter.level > 2 && (/\b(unwavering.?mark|marked)\b/i).test(v.WeaponTextName)) { output.extraDmg += Math.floor(classes.known.fighter.level / 2); }; }, "If I include the words 'Unwavering Mark' or 'Marked' in the name of a melee weapon, it gets half my fighter level added to its Damage." ] } }, "subclassfeature7" : { name : "Warding Maneuver", source : [["X", 30]], minlevel : 7, description : desc([ "As a reaction when I or a creature within 5 ft is hit, I can try to fend off the strike", "I add 1d8 to the target's AC; If the attack still hits, the target has resistance against it", "I can only do this while wielding a melee weapon or a shield" ]), usages : "Constitution modifier per ", usagescalc : "event.value = Math.max(1, What('Con Mod'));", recovery : "long rest", action : [["reaction", ""]], }, "subclassfeature10" : { name : "Hold the Line", source : [["X", 30]], minlevel : 10, description : desc([ "Creatures provoke opportunity attacks when moving 5 ft or more while within my reach", "If I hit an opportunity attack, the target's speed is reduced to 0 until the end of the turn" ]) }, "subclassfeature15" : { name : "Ferocious Charger", source : [["X", 31]], minlevel : 15, description : desc([ "If I hit a creature after moving 10 ft in a straight line, it must make a Strength save", "If failed, the target is knocked prone; I can do this only once per turn" ]) }, "subclassfeature18" : { name : "Vigilant Defender", source : [["X", 31]], minlevel : 18, description : desc([ "I can make opportunity attacks without using my reaction", "I can do this only once on every creature's turn, except on my own turn", "I can't do this on the same turn that I use my normal reaction" ]) } } }); AddSubClass("fighter", "samurai", { regExpSearch : /samurai/i, subname : "Samurai", source : [["X", 31]], fullname : "Samurai", features : { "subclassfeature3" : { name : "Bonus Proficiency", source : [["X", 31]], minlevel : 3, description : desc([ "I gain proficiency with History, Insight, Performance, or Persuasion", 'Alternatively, I learn one language; Use the "Choose Feature" button above for this' ]), choices : ["Language proficiency", "Skill proficiency: History, Insight, Performance, or Persuasion"], "language proficiency" : { name : "Bonus Proficiency", description : desc("I learn one language of my choice"), languageProfs : [1] }, "skill proficiency: history, insight, performance, or persuasion" : { name : "Bonus Proficiency", description : desc("I gain proficiency with History, Insight, Performance, or Persuasion"), skillstxt : "Choose one from: History, Insight, Performance, or Persuasion" } }, "subclassfeature3.1" : { name : "Fighting Spirit", source : [["X", 31]], minlevel : 3, description : desc([ "As a bonus action, I can give myself advantage on weapon attacks and temporary HP", "This advantage on weapon attack rolls lasts until the end of my current turn" ]), recovery : "long rest", usages : 3, additional : levels.map(function (n) { return n < 3 ? "" : (n < 10 ? 5 : n < 15 ? 10 : 15) + " temporary HP"; }), action : [["bonus action", ""]] }, "subclassfeature7" : { name : "Elegant Courtier", source : [["X", 31]], minlevel : 7, description : desc([ "I can add my Wisdom modifier to any Charisma (Persuasion) checks I make", "I gain proficiency with Wis saves, or if I'm already proficient, either Int or Cha saves" ]), saves : ["Wis"], addMod : { type : "skill", field : "Pers", mod : "max(Wis|0)", text : "I can add my Wisdom modifier to any Charisma (Persuasion) checks I make." } }, "subclassfeature10" : { name : "Tireless Spirit", source : [["X", 31]], minlevel : 10, description : desc("I regain one use of Fighting Spirit if I have no more remaining when I roll initiative") }, "subclassfeature15" : { name : "Rapid Strike", source : [["X", 31]], minlevel : 15, description : desc([ "With the Attack action, I can forgo advantage on one attack to make one extra attack", "This extra attack is part of the same action; I can do this only once per turn" ]) }, "subclassfeature18" : { name : "Strength Before Death", source : [["X", 31]], minlevel : 18, description : desc([ "If I'm reduced to 0 HP but not killed outright, I can delay falling unconscious", "I then immediately take a bonus turn, interrupting the current turn", "While I'm at 0 HP, I suffer damage normally and die if I have 3 failed death saves", "If I'm still at 0 HP at the end of this bonus turn, I fall unconscious" ]), recovery : "long rest", usages : 1 } } }); // Add 3 subclasses for the Monk AddSubClass("monk", "way of the drunken master", { regExpSearch : /^((?=.*drunken)(?=.*master))|((?=.*drunk)((?=.*(monk|monastic))|((?=.*martial)(?=.*(artist|arts)))|((?=.*spiritual)(?=.*warrior)))).*$/i, subname : "Way of the Drunken Master", subnameShort: "Drunken Master", fullname : "Drunken Master", source : [["X", 33]], features : { "subclassfeature3" : { name : "Bonus Proficiencies", source : [["X", 34]], minlevel : 3, description : desc("I gain proficiency with the Performance skill and brewer's supplies"), skills : ["Performance"], toolProfs : ["Brewer's supplies"] }, "subclassfeature3.1" : { name : "Drunken Technique", source : [["X", 34]], minlevel : 3, description : desc("When using Flurry of Blows, I gain the benefits of a Disengage and +10 ft speed this turn") }, "subclassfeature6" : { name : "Tipsy Sway", source : [["X", 34]], minlevel : 6, description : desc("1 ki point: as a reaction if missed in melee, attacker instead hits other I see within 5 ft"), additional : "Standing up from prone costs only 5 ft", action : [["reaction", ""]] }, "subclassfeature11" : { name : "Drunkard's Luck", source : [["X", 34]], minlevel : 11, description : desc("By spending 2 ki points, I can remove disadv. from an ability check, attack roll, or save"), additional : "2 ki points" }, "subclassfeature17" : { name : "Intoxicated Frenzy", source : [["X", 34]], minlevel : 17, description : desc("I can make 3 extra attacks with Flurry of Blows if each is used on a different target") } } }); // Create the Kensei and its weapon options last, so we benefit of all possible weapons that were added RunFunctionAtEnd(function () { var theKenseiSubclassName = AddSubClass("monk", "way of the kensei", { regExpSearch : /kensei/i, subname : "Way of the Kensei", subnameShort: "Kensei", fullname : "Kensei", source : [["X", 34]], features : { "subclassfeature3" : { name : "Path of the Kensei", source : [["X", 34]], minlevel : 3, description : desc([ "I gain proficiency with either calligrapher's supplies or painter's supplies", "Some weapons, that don't have the heavy or special property, are kensei weapons for me", "At least one ranged and one melee weapon, more at higher levels (longbow does qualify)", "With these: proficient, count as a monk weapons, special bonuses depending on type held:", "\u2022 Melee: if I do unarmed strike during an Attack action, +2 AC until my next turn starts", "\u2022 Ranged: as a bonus action, ranged weapon attacks deal +1d4 damage in current turn" ]), action : [["bonus action", " (with ranged)"]], additional : levels.map( function(n) { return n < 3 ? "" : (n < 6 ? 2 : n < 11 ? 3 : n < 17 ? 4 : 5) + " kensei weapons"; }), toolProfs : ["calligrapher's or painter's supplies"], extraname : "Kensei Weapon", extrachoices : [], // add these dynamically, see below extraTimes : levels.map( function(n) { return n < 3 ? 0 : n < 6 ? 2 : n < 11 ? 3 : n < 17 ? 4 : 5; }), calcChanges : { atkAdd : [ function (fields, v) { var theKenseiWeapons = GetFeatureChoice("class", "monk", "subclassfeature3", true); if (theKenseiWeapons.indexOf(v.baseWeaponName) != -1 || ((/kensei/i).test(v.WeaponTextName) && !v.theWea.special && (!(/heavy|special/i).test(fields.Description) || v.baseWeaponName === 'longbow'))) { v.theWea.monkweapon = true; v.theWea.kenseiweapon = true; if (v.isRangedWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'As bonus action with Attack action, +1d4 damage'; }; fields.Proficiency = true; }; }, "For the weapons that I select using the \"Choose Feature\" button on the second page or when I include the word 'Kensei' in the name of a weapon that doesn't have the Heavy or Special attribute, or that is a longbow, that weapon gains the same benefits as any other 'Monk Weapon'.\nIn addition, with ranged 'Kensei Weapons', I can take a bonus action to have that hit, and any other hit after that as part of the same action, do +1d4 damage.", 1 ] } }, "ki-empowered strikes" : { name : "One with the Blade", source : [["X", 34]], minlevel : 6, description : desc("My unarmed strikes and kensei weapon attacks count as magical"), calcChanges : { atkAdd : [ function (fields, v) { if (!v.isSpell && !v.thisWeapon[1] && !v.theWea.isMagicWeapon && !(/counts as( a)? magical/i).test(fields.Description) && (v.baseWeaponName === "unarmed strike" || v.theWea.kenseiweapon)) { fields.Description += (fields.Description ? '; ' : '') + 'Counts as magical'; }; }, "My unarmed strikes and any Kensei Weapons count as magical for overcoming resistances and immunities." ] }, "deft strike" : { name : "Deft Strike", extraname : "Way of the Kensei 6", source : [["X", 35]], description : desc("Once per turn when I hit with a kensei weapon, I can do a martial arts die extra damage"), additional : "1 ki point" }, "sharpen the blade" : { name : "Sharpen the Blade", extraname : "Way of the Kensei 11", source : [["X", 35]], description : desc([ "As a bonus action, I can grant my kensei weapon a bonus to attack and damage rolls", "This bonus is equal to the number of ki points I spend and doesn't stack with magic", "This lasts for 1 minute or until I use this feature again" ]), additional : "1 to 3 ki points", action : [["bonus action", ""]] }, autoSelectExtrachoices : [{ extrachoice : "deft strike" }, { extrachoice : "sharpen the blade", minlevel : 11 }] }, "subclassfeature17" : { name : "Unerring Accuracy", source : [["X", 35]], minlevel : 17, description : desc("Once per turn, if I miss a monk weapon attack on my turn, I can reroll the attack roll") } } }); var itsFea = ClassSubList[theKenseiSubclassName].features.subclassfeature3; for (var weapon in WeaponsList) { var aWea = WeaponsList[weapon]; // skip attacks that are not simple or martial weapons, that have the heavy or special property, are magic weapons, or those that are spells or cantrips if (weapon !== "longbow" && (aWea.isMagicWeapon || !(/simple|martial/i).test(aWea.type) || (/heavy|special/i).test(aWea.description) || aWea.special || (/improvised|gear|spell|cantrip/i).test(aWea.list))) continue; itsFea.extrachoices.push(aWea.name); itsFea[aWea.name.toLowerCase()] = { name : aWea.name, description : "", source : aWea.source, weaponProfs : [false, false, [weapon]], weaponsAdd : { select : [aWea.name] }, submenu : ((/simple/i).test(aWea.type) ? "\x1BSimple weapon, " : "Martial weapon, ") + ((/^(?!.*melee).*\d+.*$/i).test(aWea.range) ? "ranged" : "melee"), prereqeval : 'testSource("' + weapon + '", WeaponsList["' + weapon + '"], "weapExcl") ? "skip" : true;' } } }); // Add 2 subclasses for the Paladin AddSubClass("paladin", "oath of conquest", { regExpSearch : /^((?=.*(knight tyrant|iron mongers))|((?=.*(conquest|tyranny|tyrant))(((?=.*paladin)|((?=.*(exalted|sacred|holy|divine))(?=.*(knight|fighter|warrior|warlord|trooper))))))).*$/i, subname : "Oath of Conquest", subnameShort: "Conquest", source : [["X", 37]], features : { "subclassfeature3" : { name : "Channel Divinity: Conquering Presence", source : [["X", 38]], minlevel : 3, description : desc([ "As an action, all creatures of my choice within a 30-ft radius must make a Wisdom save", "If failed, a target is frightened for 1 minute; It can save again at the end of each turn" ]), action : [["action", ""]], spellcastingExtra : ["armor of agathys", "command", "hold person", "spiritual weapon", "bestow curse", "fear", "dominate beast", "stoneskin", "cloudkill", "dominate person"] }, "subclassfeature3.1" : { name : "Channel Divinity: Guided Strike", source : [["X", 38]], minlevel : 3, description : desc("When I make an attack roll, I can add a +10 bonus to the roll after seeing the d20 roll") }, "subclassfeature7" : { name : "Aura of Conquest", source : [["X", 38]], minlevel : 7, description : desc([ "Creatures that are frightened of me have their speed reduced to 0 while in my aura", "They also take psychic damage whenever they start theirs turn within my aura" ]), additional : levels.map(function (n) { if (n < 7) return ""; return (n < 18 ? 10 : 30) + "-foot aura; " + Math.floor(n / 2) + " psychic damage"; }) }, "subclassfeature15" : { name : "Scornful Rebuke", source : [["X", 38]], minlevel : 15, description : desc([ "Whenever I'm hit with an attack while I'm not incapacitated, the attacker takes damage", "This is psychic damage equal to my Charisma modifier (minimum of 1)" ]) }, "subclassfeature20" : { name : "Invincible Conqueror", source : [["X", 38]], minlevel : 20, description : desc([ "As an action, I can gain the following benefits for 1 minute:", " - I have resistance to all damage", " - I can make an additional attack as part of my Attack action", " - My melee weapons score critical hits on a roll of 19 or 20" ]), recovery : "long rest", usages : 1, action : [["action", ""]] } } }); AddSubClass("paladin", "oath of redemption", { regExpSearch : /^((?=.*redeemer)|((?=.*redemption)(((?=.*paladin)|((?=.*(exalted|sacred|holy|divine))(?=.*(knight|fighter|warrior|warlord|trooper))))))).*$/i, subname : "Oath of Redemption", subnameShort: "Redemption", source : [["X", 38]], features : { "subclassfeature3" : { name : "Channel Divinity: Emissary of Peace", source : [["X", 39]], minlevel : 3, description : desc("As a bonus action, I grant myself +5 on Charisma (Persuasion) checks for 10 minutes"), action : [["bonus action", ""]], spellcastingExtra : ["sanctuary", "sleep", "calm emotions", "hold person", "counterspell", "hypnotic pattern", "otiluke's resilient sphere", "stoneskin", "hold monster", "wall of force"] }, "subclassfeature3.1" : { name : "Channel Divinity: Rebuke the Violent", source : [["X", 39]], minlevel : 3, description : desc([ "As a reaction after a creature within 30 ft attacks and damages another, I can rebuke it", "It takes the same damage as it dealt but as radiant damage, with a Wis save to halve it" ]), action : [["reaction", ""]] }, "subclassfeature7" : { name : "Aura of the Guardian", source : [["X", 39]], minlevel : 7, description : desc([ "As a reaction when an ally within my aura takes damage, I instead take the damage", "This damage can't be reduced in any way; Other effects might still apply to my ally" ]), additional : levels.map(function (n) { return n < 7 ? "" : (n < 18 ? 10 : 30) + "-foot aura"; }), action : [["reaction", ""]] }, "subclassfeature15" : { name : "Protective Spirit", source : [["X", 39]], minlevel : 15, description : desc("At the end of my turn when I'm below half HP and not incapacitated, I regain HP"), additional : levels.map(function (n) { return n < 15 ? "" : "1d6+" + Math.floor(n/2) + " HP"; }) }, "subclassfeature20" : { name : "Emissary of Redemption", source : [["X", 39]], minlevel : 20, description : desc([ "When taking damage from a creature, I take only half and it takes the other half", "This stops working on any that I attack or force to make a save, until I have a long rest" ]), dmgres : ["All from creatures"] } } }); // Add 3 subclasses for the Ranger var XGtE_Ranger_Subclass_Gloom_Stalker = AddSubClass("ranger", "gloom stalker", { regExpSearch : /^(?=.*gloom)(?=.*stalker).*$/i, subname : "Gloom Stalker", source : [["X", 41]], fullname : "Gloom Stalker", features : { "subclassfeature3" : { name : "Dread Ambusher", source : [["X", 42]], minlevel : 3, description : desc([ "I can add my Wisdom modifier to my initiative rolls", "In the first turn of combat I get +10 ft speed and an extra attack with the Attack action", "If I take the Attack action and that extra attack hits, it does +1d8 damage" ]), addMod : { type : "skill", field : "Init", mod : "max(Wis|0)", text : "I can add my Wisdom modifier to my initiative rolls." } }, "subclassfeature3.1" : { name : "Gloom Stalker Magic", source : [["X", 42]], minlevel : 3, description : desc([ "I add a spell to my known spells at level 3, 5, 9, 13, and 17", "These count as ranger spells, but do not count against the number of spells I can know" ]), spellcastingExtra : ["disguise self", "rope trick", "fear", "greater invisibility", "seeming"], spellcastingExtraApplyNonconform : true }, "subclassfeature3.2" : { name : "Umbral Sight", source : [["X", 42]], minlevel : 3, description : desc([ "I gain 60 ft darkvision, or add 30 ft to darkvision if I already had it because of my race", "When I'm in darkness, others gain no benefit from darkvision to detect me" ]), vision : [["Darkvision", "fixed 60"], ["Darkvision", "+30"]] }, "subclassfeature7" : { name : "Iron Mind", source : [["X", 42]], minlevel : 7, description : desc("I gain proficiency with Wis saves, or if I'm already proficient, either Int or Cha saves"), saves : ["Wis"] }, "subclassfeature11" : { name : "Stalker's Flurry", source : [["X", 42]], minlevel : 11, description : desc("Once on each of my turns when I miss a weapon attack, I can make an extra attack") }, "subclassfeature15" : { name : "Shadowy Dodge", source : [["X", 42]], minlevel : 15, description : desc("As a reaction when I'm attacked without adv., I can impose disadv. on the attack roll"), action : [["reaction", " (when attacked)"]] } } }); var XGtE_Ranger_Subclass_Horizon_Walker = AddSubClass("ranger", "horizon walker", { regExpSearch : /^(?=.*horizon)(?=.*walker).*$/i, subname : "Horizon Walker", source : [["X", 42]], fullname : "Horizon Walker", features : { "subclassfeature3" : { name : "Detect Portal", source : [["X", 42]], minlevel : 3, description : desc("As an action, I sense the distance and direction to the closest planar portal within 1 mile"), usages : 1, recovery : "short rest", action : [["action", ""]] }, "subclassfeature3.1" : { name : "Horizon Walker Magic", source : [["X", 42]], minlevel : 3, description : desc([ "I add a spell to my known spells at level 3, 5, 9, 13, and 17", "These count as ranger spells, but do not count against the number of spells I can know" ]), spellcastingExtra : ["protection from evil and good", "misty step", "haste", "banishment", "teleportation circle"], spellcastingExtraApplyNonconform : true }, "subclassfeature3.2" : { name : "Planar Warrior", source : [["X", 42]], minlevel : 3, description : desc([ "As a bonus action, I choose one creature that I can see within 30 ft of me", "All damage from my first weapon attack that hits it on this turn becomes force damage", "In addition, that first hit does extra damage" ]), additional : levels.map(function (n) { return n < 3 ? "" : "+" + (n < 11 ? 1 : 2) + "d8 force damage"; }), action : [["bonus action", ""]] }, "subclassfeature7" : { name : "Ethereal Step", source : [["X", 43]], minlevel : 7, description : desc("As a bonus action, I can cast the Etherealness spell, which lasts until the end of my turn"), usages : 1, recovery : "short rest", spellcastingBonus : [{ name : "Ethereal Step", spells : ["etherealness"], selection : ["etherealness"], firstCol : 'oncesr' }], spellChanges : { "etherealness" : { time : "1 bns", duration : "1 rnd", description : "I go to Ethereal Plane; move there, but able to perceive 60 ft into the normal plane", changes : "Using my Ethereal Step class feature I can cast Etherealness as a bonus action once per short rest, but it only affects myself and lasts until the end of my turn." } } }, "subclassfeature11" : { name : "Distant Strike", source : [["X", 43]], minlevel : 11, description : desc([ "With the Attack action, I can teleport 10 ft before each attack, to a place I can see", "If I attack two different creatures with this action, I get an extra attack against a third" ]) }, "subclassfeature15" : { name : "Spectral Defense", source : [["X", 43]], minlevel : 15, description : desc("As a reaction when an attack damages me, I can give myself resistance vs. that attack"), action : [["reaction", ""]] } } }); var XGtE_Ranger_Subclass_Monster_Slayer = AddSubClass("ranger", "monster slayer", { regExpSearch : /^(?=.*monster)(?=.*slayer).*$/i, subname : "Monster Slayer", source : [["X", 43]], fullname : "Monster Slayer", features : { "subclassfeature3" : { name : "Hunter's Sense", source : [["X", 43]], minlevel : 3, description : desc([ "As an action, I learn vulnerabilities/immunities/resistances of a target I see within 60 ft", "If it is protected from divination magic, I sense it has none of these" ]), action : [["action", ""]], usages : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest" }, "subclassfeature3.1" : { name : "Monster Slayer Magic", source : [["X", 43]], minlevel : 3, description : desc("I get bonus spells known, which do not count against the number of spells I can know"), spellcastingExtra : ["protection from evil and good", "zone of truth", "magic circle", "banishment", "hold monster"], spellcastingExtraApplyNonconform : true }, "subclassfeature3.2" : { name : "Slayer's Prey", source : [["X", 43]], minlevel : 3, description : desc([ "As a bonus action, I designate a creature I see within 60 ft; This lasts until I do this again", "My first hit to the target with a weapon attack on each of my turns does +1d6 damage" ]), action : [["bonus action", ""]] }, "subclassfeature7" : { name : "Supernatural Defense", source : [["X", 43]], minlevel : 7, description : desc([ "I add 1d6 to saving throws the current target of my Slayer's Prey forces me to make", "In addition, I also add 1d6 to checks to escape that target's grapple" ]) }, "subclassfeature11" : { name : "Magic-User's Nemesis", source : [["X", 43]], minlevel : 11, description : desc([ "As a reaction when I see someone within 60 ft casting a spell or teleporting, I can foil it", "The target must make a Wisdom save or have its spell or teleport fail and be wasted" ]), action : [["reaction", ""]], usages : 1, recovery : "short rest" }, "subclassfeature15" : { name : "Slayer's Counter", source : [["X", 43]], minlevel : 15, description : desc([ "As a reaction when the target of my Slayer's Prey has me make a save, I can attack it", "I can make one weapon attack; If this hits, I automatically succeed on the saving throw" ]), action : [["reaction", ""]] } } }); // Add all three subclasses to the revised ranger as well, if it exists if (ClassList.rangerua) { ClassList.rangerua.subclasses[1].push(XGtE_Ranger_Subclass_Gloom_Stalker, XGtE_Ranger_Subclass_Horizon_Walker, XGtE_Ranger_Subclass_Monster_Slayer); }; // Add 4 subclasses for the Rogue AddSubClass("rogue", "inquisitive", { regExpSearch : /^(?=.*(rogue|miscreant))(?=.*inquisitive).*$/i, subname : "Inquisitive", source : [["X", 45]], features : { "subclassfeature3" : { name : "Ear for Deceit", source : [["X", 45]], minlevel : 3, description : desc("For Wis (Insight) to sense if another is lying, I can treat a die roll of 7 or lower as an 8") }, "subclassfeature3.1" : { name : "Eye for Detail", source : [["X", 46]], minlevel : 3, description : desc([ "As a bonus action, I can do either of the following:", "\u2022 Make a Wisdom (Perception) check to spot a hidden creature or object", "\u2022 Make an Intelligence (Investigation) check to uncover or decipher clues" ]), action : [["bonus action", ""]] }, "subclassfeature3.2" : { name : "Insightful Fighting", source : [["X", 46]], minlevel : 3, description : desc([ "As a bonus action, I can decipher the tactics of another I can see that's not incapacitated", "I have to make a Wisdom (Insight) check vs. the target's Charisma (Deception) check", "If I succeed, I can use my sneak attack on it even if I don't have adv. (but not if disadv.)", "This benefit lasts for 1 minute or until I successfully use Insightful Fighting again" ]), action : [["bonus action", ""]] }, "subclassfeature9" : { name : "Steady Eye", source : [["X", 46]], minlevel : 9, description : desc([ "I'm more perceptive when I don't move more than half my speed in the same turn", "If so, I gain adv. on Wis (Perception) and Int (Investigation) checks during that turn" ]) }, "subclassfeature13" : { name : "Unerring Eye", source : [["X", 46]], minlevel : 13, description : desc([ "As an action, I can sense magical deceptions within 30 feet of me, but not what it does", "I learn the presence of illusions, shapechanged creatures, or magic designed to deceive" ]), action : [["action", ""]], usages : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest" }, "subclassfeature17" : { name : "Eye for Weakness", source : [["X", 46]], minlevel : 17, description : desc("While my Insightful Fighting is active, I add 3d6 to sneak attacks against that target") } } }); AddSubClass("rogue", "scout", { regExpSearch : /scout/i, subname : "Scout", source : [["X", 47]], features : { "subclassfeature3" : { name : "Skirmisher", source : [["X", 47]], minlevel : 3, description : desc([ "As a reaction when a hostile ends its turn within 5 ft of me, I can move half my speed", "This movement does not provoke attacks of opportunity" ]), action : [["reaction", ""]] }, "subclassfeature3.1" : { name : "Survivalist", source : [["X", 47]], minlevel : 3, description : desc("I gain proficiency and expertise with the Nature and Survival skills"), skills : [['Nature', 'full'], ['Survival', 'full']] }, "subclassfeature9" : { name : "Superior Mobility", source : [["X", 47]], minlevel : 9, description : desc("I gain +10 ft to my walking speed (and swimming/climbing speed, if applicable)"), speed : { allModes : { bonus : "+10", exclude : ["fly", "burrow"] } } }, "subclassfeature13" : { name : "Ambush Master", source : [["X", 47]], minlevel : 13, description : desc([ "I gain advantage on Initiative rolls", "The first creature I hit in the first round of combat becomes an easy target", "Until the start of my next turn, all attacks against the target have advantage" ]), advantages : [["Initiative", true]] }, "subclassfeature17" : { name : "Sudden Strike", source : [["X", 47]], minlevel : 17, description : desc([ "With the Attack action, I can make one additional attack as a bonus action", "This attack can benefit from my Sneak Attack even if I already used it this turn", "However, I still can't use Sneak Attack on a single target more than once per turn" ]), action : [["bonus action", " (with Attack action)"]] } } }); // Add 3 subclasses for the Sorcerer AddSubClass("sorcerer", "divine soul", { // this code includes contributions by SoilentBrad regExpSearch : /^(?=.*divine)(?=.*soul).*$/i, subname : "Divine Soul", source : [["X", 50]], fullname : "Divine Soul", spellcastingList : { "class" : ["cleric", "sorcerer"] }, features : { "subclassfeature1" : { name : "Divine Magic", source : [["X", 50]], minlevel : 1, description : desc([ "When I learn spells/cantrips or replace known, I can also pick from the cleric spell list", "These cleric spells count as sorcerer spells for me", 'I also learn a spell based on my affinity, use the "Choose Feature" button above for this' ]), choices : ["Good", "Evil", "Law", "Chaos", "Neutrality"], "good" : { name : "Divine Magic: Good", description : desc([ "When I learn spells/cantrips or replace known, I can also pick from the cleric spell list", "I also learn Cure Wounds, which doesn't count against my number of spells known", "These count as sorcerer spells for me; I can only replace the bonus spell with a cleric spell" ]), spellcastingBonus : [{ name : "Divine Magic (Good)", "class" : "cleric", level : [1,9], selection : ["cure wounds"] }], dependentChoices : "eagle" }, "evil" : { name : "Divine Magic: Evil", description : desc([ "When I learn spells/cantrips or replace known, I can also pick from the cleric spell list", "I also learn Inflict Wounds, which doesn't count against my number of spells known", "These count as sorcerer spells for me; I can only replace the bonus spell with a cleric spell" ]), spellcastingBonus : [{ name : "Divine Magic (Evil)", "class" : "cleric", level : [1,9], selection : ["inflict wounds"] }], dependentChoices : "bat" }, "law" : { name : "Divine Magic: Law", description : desc([ "When I learn spells/cantrips or replace known, I can also pick from the cleric spell list", "I also learn Bless, which doesn't count against my number of spells known", "These count as sorcerer spells for me; I can only replace the bonus spell with a cleric spell" ]), spellcastingBonus : [{ name : "Divine Magic (Law)", "class" : "cleric", level : [1,9], selection : ["bless"] }], dependentChoices : "eagle" }, "chaos" : { name : "Divine Magic: Chaos", description : desc([ "When I learn spells/cantrips or replace known, I can also pick from the cleric spell list", "I also learn Bane, which doesn't count against my number of spells known", "These count as sorcerer spells for me; I can only replace the bonus spell with a cleric spell" ]), spellcastingBonus : [{ name : "Divine Magic (Chaos)", "class" : "cleric", level : [1,9], selection : ["bane"] }], dependentChoices : "bat" }, "neutrality" : { name : "Divine Magic: Neutrality", description : desc([ "When I learn spells/cantrips or replace known, I can also pick from the cleric spell list", "I learn Protection from Evil \xD7 Good; It doesn't count against my number of spells known", "These count as sorcerer spells for me; I can only replace the bonus spell with a cleric spell" ]), spellcastingBonus : [{ name : "Divine Magic (Neutrality)", "class" : "cleric", level : [1,9], selection : ["protection from evil and good"] }], dependentChoices : "dragonfly" }, choiceDependencies : [{ feature : "subclassfeature14", choiceAttribute : true }] }, "subclassfeature1.2" : { name : "Favored by the Gods", source : [["X", 50]], minlevel : 1, description : desc("If I fail a saving throw or miss with an attack roll, I can add 2d4 to the total"), recovery : "short rest", usages : 1 }, "subclassfeature6" : { name : "Empowered Healing", source : [["X", 50]], minlevel : 6, description : desc([ "Once per turn, when I or an ally in 5 ft roll dice to healing with a spell, I can reroll dice", "By spending 1 sorcery point; I can reroll any number of those dice for that spell once" ]), additional : "1 sorcery point" }, "subclassfeature14" : { name : "Otherworldy Wings", source : [["X", 50]], minlevel : 14, description : desc([ "As a bonus action, I can manifest a pair of spectral wings that give me 30 ft fly speed", "These wings last until I become incapacitated or I dismiss them as a bonus action" ]), choices : ["eagle", "bat", "dragonfly"], choicesNotInMenu : true, "eagle" : { name : "Otherworldy Wings", description : desc([ "As a bonus action, I manifest a pair of spectral eagle wings, giving me 30 ft fly speed", "These wings last until I become incapacitated or I dismiss them as a bonus action" ]) }, "bat" : { name : "Otherworldy Wings", description : desc([ "As a bonus action, I manifest a pair of spectral bat wings, giving me 30 ft fly speed", "These wings last until I become incapacitated or I dismiss them as a bonus action" ]) }, "dragonfly" : { name : "Otherworldy Wings", description : desc([ "As a bonus action, I create a pair of spectral dragonfly wings, giving me 30 ft fly speed", "These wings last until I become incapacitated or I dismiss them as a bonus action" ]) }, action : [["bonus action", ""]], speed : { fly : { spd : 30, enc : 20 } } }, "subclassfeature18" : { name : "Unearthly Recovery", source : [["X", 50]], minlevel : 18, description : desc([ "As a bonus action when I have less than half of my max HP remaining, I can heal myself", "I regain a number of HP equal to half my hit point maximum" ]), action : [["bonus action", ""]], recovery : "long rest", usages : 1 } } }); AddSubClass("sorcerer", "shadow magic", { regExpSearch : /^(?=.*(sorcerer|witch))(?=.*shadow).*$/i, subname : "Shadow Magic", source : [["X", 50]], fullname : "Shadow Sorcerer", features : { "subclassfeature1" : { name : "Eyes of the Dark", source : [["X", 51]], minlevel : 1, description : desc("I gain 120 ft darkvision"), vision : [["Darkvision", 120]] }, "subclassfeature1.1" : { name : "Strength of the Grave", source : [["X", 51]], minlevel : 1, description : desc([ "When damage reduces me to 0 HP, that isn't radiant damage or a critical hit,", "I can make a Charisma save (DC 5 + damage taken) to drop to 1 HP instead" ]), usages : 1, recovery : "long rest" }, "subclassfeature3" : { name : "Darkness", source : [["X", 51]], minlevel : 3, description : desc([ "I learn Darkness, which doesn't count against my number of spells known", "I can also cast it by spending 2 sorcery points and then I can see through it normally" ]), additional : "2 sorcery points", action : [["action", " (2 sorcery points)"]], spellcastingBonus : [{ name : "Eyes of the Dark", spells : ["darkness"], selection : ["darkness"] }] }, "subclassfeature6" : { name : "Hound of Ill Omen", source : [["X", 51]], minlevel : 6, description : desc([ "As a bonus action, I summon a hound within 30 ft of a creature I see within 120 ft", "The hound has all the stats of a dire wolf with the following exceptions:", "\u2022 It is medium size and counts as a monstrosity not a beast", "\u2022 It starts with a number of temporary hit points equal to half my sorcerer level", "\u2022 At the start of its turn, it automatically knows where the (hidden) target is", "\u2022 It can only move towards and make (opportunity) attack against the target", "\u2022 It can move through other creatures and objects as if they were difficult terrain", "\u2022 It takes 5 force damage if it ends its turn inside an object", "The target has disadvantage on saves vs. my spells while the hound is within 5 ft of it", "It disappears if reduced to 0 HP, if the target is reduced to 0 HP, or after 5 minutes" ]), additional : levels.map(function (n) { return n < 6 ? "" : "3 sorcery points; " + Math.floor(n/2) + " temporary HP"; }), action : [["bonus action", " (3 sorcery points)"]], creaturesAdd : [["Hound of Ill Omen", true]], creatureOptions : [{ name : "Hound of Ill Omen", source : [["X", 51]], size : 3, type : "Monstrosity", alignment : "Unaligned", ac : 14, hp : 37, hd : [5, 10], speed : "50 ft", scores : [17, 15, 15, 3, 12, 7], skills : { "perception" : 3, "stealth" : 4 }, senses : "Adv. on Wis (Perception) checks using hearing/smell;\nAt the start of each turn, knows where the target is", passivePerception : 13, challengeRating : "1", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Bite", ability : 1, damage : [2, 6, "piercing"], range : "Melee (5 ft)", description : "Target must succeed on a DC 13 Strength saving throw or be knocked prone" }], traits : [{ name : "Keen Hearing and Smell", description : "The hound has advantage on Wisdom (Perception) checks that rely on hearing or smell." }, { name : "Pack Tactics", description : "The hound has advantage on an attack roll against a creature if at least one of the hound's allies is within 5 ft of the creature and the ally isn't incapacitated." }], features : [{ name : "Actions", description : "The hound can only move towards its targets and make attacks or opportunity attacks against its target." }, { name : "Temporary Hit Points", description : "When the hound is summoned, it gains temporary HP equal to half my sorcerer level." }, { name : "Shadowy Form", description : "The hound can move through other creatures and objects as if they were difficult terrain. It takes 5 force damage if it ends its turn inside an object." }, { name : "Sign of Ill Omen", description : "While the hound is within 5 ft of its target, that target has disadvantage on saving throws versus my spells." }], header : "Summoned", eval : function(prefix, lvl) { AddTooltip(prefix + 'Comp.Use.HP.Temp', "The hound of ill omen gains half my sorcerer level as temporary HP when created."); }, removeeval : function(prefix, lvl) { AddTooltip(prefix + 'Comp.Use.HP.Temp', ""); }, changeeval : function (prefix, lvl) { if (!classes.known.sorcerer) return; Value(prefix + 'Comp.Use.HP.Temp', Math.floor(classes.known.sorcerer.level / 2)); } }] }, "subclassfeature14" : { name : "Shadow Walk", source : [["X", 51]], minlevel : 14, description : desc([ "As a bonus action when I'm in dim light or darkness, I can teleport up to 120 ft", "The destination has to be unoccupied, within line of sight, and in dim light or darkness" ]), action : [["bonus action", ""]] }, "subclassfeature18" : { name : "Umbral Form", source : [["X", 51]], minlevel : 18, additional : "6 sorcery points", description : desc([ "As a bonus action, I transform into a shadow form for 1 minute", "While transformed, I have resistance to all damage except force and radiant damage", "Also, I can move through other creatures and objects as if they were difficult terrain", "I take 5 force damage if I end my turn inside an object", "This ends early if I end it as a bonus action, I die, or I'm incapacitated" ]), action : [["bonus action", " (6 sorcery points)"]] } } }); // Add 2 subclasses for the Warlock AddSubClass("warlock", "the celestial", { regExpSearch : /^(?=.*warlock)(?=.*celestial).*$/i, subname : "the Celestial", source : [["X", 54]], spellcastingExtra : ["cure wounds", "guiding bolt", "flaming sphere", "lesser restoration", "daylight", "revivify", "guardian of faith", "wall of fire", "flame strike", "greater restoration"], features : { "subclassfeature1" : { name : "Bonus Cantrips", source : [["X", 54]], minlevel : 1, description : desc("I learn the Light and Sacred Flame cantrips, not counting for the number I can know"), spellcastingBonus : [{ name : "Bonus Cantrips", spells : ["light"], selection : ["light"] }, { name : "Bonus Cantrips", spells : ["sacred flame"], selection : ["sacred flame"] }] }, "subclassfeature1.1" : { name : "Healing Light", source : [["X", 54]], minlevel : 1, description : desc([ "As a bonus action, I can heal a creature I can see within 60 ft by expending dice", "I can expend up to my Charisma modifier (min 1) of dice from my pool at a time", "The target heals HP equal to the roll of the dice; I regain all expended dice on a long rest" ]), usages : levels.map(function (n) { return (n + 1) + "d6 per "; }), usagescalc : "event.value = !classes.known.warlock ? '' : (1 + classes.known.warlock.level) + 'd6';", recovery : "long rest", action : [["bonus action", ""]] }, "subclassfeature6" : { name : "Radiant Soul", source : [["X", 55]], minlevel : 6, description : desc([ "I add my Cha modifier once to the fire or radiant damage of cantrips and spells I cast", "This bonus only applies to one target; Also, I have resistance to radiant damage" ]), dmgres : ["Radiant"], calcChanges : { atkCalc : [ function (fields, v, output) { if (v.isSpell && (/fire|radiant/i).test(fields.Damage_Type)) { output.extraDmg += What('Cha Mod'); }; }, "Cantrips and spells that fire or radiant damage get my Charisma modifier added to their damage to one target." ], spellAdd : [ function (spellKey, spellObj, spName) { if (!spellObj.psionic) return genericSpellDmgEdit(spellKey, spellObj, "fire|radiant", "Cha", true); }, "Cantrips and spells that fire or radiant damage get my Charisma modifier added to their damage to one target." ] } }, "subclassfeature10" : { name : "Celestial Resilience", source : [["X", 55]], minlevel : 10, description : desc([ "When I finish a short or long rest, I and up to five allies gain temporary hit points", "I get my warlock level + Cha mod, while my allies get half my warlock level + Cha mod" ]), additional : levels.map(function (n) { return n < 10 ? "" : "Me: " + n + "+Cha mod; Allies: " + Math.floor(n / 2) + "+Cha mod"; }) }, "subclassfeature14" : { name : "Searing Vengeance", source : [["X", 55]], minlevel : 14, description : desc([ "At the start of my turn when I would make a death save, I can instead spring back up", "I recover HP equal to half my current HP maximum, and can then stand up if I choose", "When I do, creatures of my choice within 30 ft take 2d8 + Cha mod in radiant damage", "Damaged creatures are blinded until the end of my current turn" ]), usages : 1, recovery : "long rest" } } }); AddSubClass("warlock", "the hexblade", { // this code includes contributions by SoilentBrad regExpSearch : /^(?=.*hexblade)(?=.*warlock).*$/i, subname : "the Hexblade", source : [["X", 55]], spellcastingExtra : ["shield", "wrathful smite", "blur", "branding smite", "blink", "elemental weapon", "phantasmal killer", "staggering smite", "banishing smite", "cone of cold"], features : { "subclassfeature1" : { name : "Hexblade's Curse", source : [["X", 55]], minlevel : 1, description : desc([ "As a bonus action, I can curse a creature I can see within 30 ft of me for 1 minute", "\u2022 I add my proficiency bonus to damage rolls against the cursed target", "\u2022 My attack rolls against the curse target score a critical hit on a roll of 19 and 20", "\u2022 If the target dies while cursed, I regain HP equal to my warlock level + Cha mod", "The curse ends after 1 minute, when the target dies, I die, or I'm incapacitated" ]), recovery : "short rest", usages : 1, action : [["bonus action", ""]], calcChanges : { atkAdd : [ function (fields, v) { if (!v.isDC && /curse/i.test(v.WeaponTextName) && !v.CritChance) { v.CritChance = 19; fields.Description += (fields.Description ? '; ' : '') + 'Crit on 19-20'; } }, "If I include the word 'Curse' in the name of a weapon, the automation will treat the attack as being against a target of the Hexblade's Curse: adding my proficiency bonus to the damage and adding the increased chance of a critical hit to the description.", 19 ], atkCalc : [ function (fields, v, output) { if ((/curse/i).test(v.WeaponTextName)) output.extraDmg += output.prof; }, ""] } }, "subclassfeature1.1" : { name : "Hex Warrior", source : [["X", 55]], minlevel : 1, description : desc([ "I gain proficiency with medium armor, shields, and martial weapons", "When I finish a long rest, I can imbue one weapon I touch with my will", "Until my next long rest, I can use it with Charisma instead of Strength or Dexterity", "I have to be proficient with the weapon and it can't have the two-handed property", "This benefit also works with every weapon from Pact of the Blade, with no restriction" ]), armorProfs : [false, true, false, true], weaponProfs : [false, true], calcChanges : { atkAdd : [ function (fields, v) { if (What('Cha Mod') > What(AbilityScores.abbreviations[fields.Mod - 1] + ' Mod') && (v.pactWeapon || v.theWea.pactWeapon || /^(?=.*hexblade)(?!.*((^|[^+-]\b)2|\btwo).?hand(ed)?s?\b).*$/i.test(v.WeaponText))) { fields.Mod = 6; }; }, "If I include the word 'Hexblade' in the name of a weapon that is not two-handed, it gets treated as the weapon I imbued to use Charisma instead of Strength or Dexterity, if my Charisma modifier is higher than the ability it would otherwise use. Alternatively, if I have the Pact of the Blade feature, this will also work for any weapons set to be my Pact Weapon." ] } }, "subclassfeature6" : { name : "Accursed Specter", source : [["X", 56]], minlevel : 6, description : desc([ "When I slay a humanoid, I can curse its soul and have it rise as a specter from its corpse", "It has the stats of a specter with temporary hit points equal to half my warlock level", "It rolls initiative and has its own turns, obeying my verbal commands", "It gains a bonus to attack rolls equal to my Charisma modifier (min +0)", "The specter remains until the end of my next long rest, at which point it vanishes" ]), additional : levels.map( function(n) { return n < 6 ? "" : Math.floor(n/2) + " temp HP"; }), usages : 1, recovery : "long rest", creaturesAdd : [["Accursed Specter", true]], creatureOptions : [{ name : "Accursed Specter", nameAlt : ["Accursed Spectre"], source : [["X", 56]], size : 3, type : "Undead", alignment : "Chaotic Evil", ac : 12, hp : 22, hd : [5, 8], speed : "fly 50 ft (hover)", scores : [1, 14, 11, 10, 10, 12], damage_resistances : "acid; cold; fire; lightning; thunder; bludgeoning, piercing, and slashing from nonmagical weapons", damage_immunities : "necrotic, poison", condition_immunities : "charmed, exhaustion, grappled, paralyzed, petrified, poisoned, prone, restrained, unconscious", senses : "Darkvision 60 ft; While in sunlight, disadv. on Wis (Perception) checks using sight", passivePerception : 10, languages : "all languages it knew in life, but can't speak", challengeRating : "1", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Life Drain", ability : 2, damage : [3, 6, "necrotic"], range : "Melee (5 ft)", description : "DC 10 Con save or HP max reduced by same as damage taken until a long rest", modifiers : ["max(oCha|0)", ""], abilitytodamage : false, tooltip : "A target of the specter's life drain must succeed on a DC 10 Constitution saving throw or its hit point maximum is reduced by an amount equal to the damage taken. This reduction lasts until the creature finishes a long rest. The target dies if this effect reduces its hit point maximum to 0." }], traits : [{ name : "Incorporeal Movement", description : "The specter can move through other creatures and objects as if they were difficult terrain. It takes 5 (1d10) force damage if it ends its turn inside an object." }, { name : "Sunlight Sensitivity", description : "While in sunlight, the specter has disadvantage on attack rolls, as well as on Wisdom (Perception) checks that rely on sight." }, { name : "Life Drain", description : "A target of the specter's life drain must succeed on a DC 10 Constitution saving throw or its hit point maximum is reduced by an amount equal to the damage taken. This reduction lasts until the creature finishes a long rest. The target dies if this effect reduces its hit point maximum to 0." }], features : [{ name : "Bound Spirit", description : "The specter obeys my verbal commands and remains in my service until the end of my next long rest, at which point it vanishes to the afterlife. It acts on its own turn with its own initiative." }], header : "Bound Spirit", eval : function(prefix) { AddTooltip(prefix + 'Comp.Use.HP.Temp', "The accursed specter gains half my warlock level as temporary HP when created."); }, removeeval : function(prefix) { AddTooltip(prefix + 'Comp.Use.HP.Temp', ""); }, changeeval : function (prefix, newLvl) { if (!classes.known.warlock) return; Value(prefix + 'Comp.Use.HP.Temp', Math.floor(classes.known.warlock.level / 2)); } }] }, "subclassfeature10" : { name : "Armor of Hexes", source : [["X", 56]], minlevel : 10, description : desc([ "As a reaction when a Hexblade's Curse recipient hits me with an attack, I can roll a d6", "On a result of 4 or higher, the attacks misses me instead, regardless of its d20 roll" ]) }, "subclassfeature14" : { name : "Master of Hexes", source : [["X", 56]], minlevel : 14, description : desc([ "When the target of my Hexblade's Curse dies, I can curse another I can see within 30 ft", "I can't do this while incapacitated and I don't regain HP from the death of the previous" ]) } } }); // Add Warlock Invocations AddWarlockInvocation("Aspect of the Moon (prereq: Pact of the Tome)", { name : "Aspect of the Moon", description : desc("I don't need sleep nor can be forced to by any means; I can rest while doing light activity"), source : [["X", 56], ["UA:RCO", 5]], submenu : "[improves Pact of the Tome]", prereqeval : function(v) { return GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the tome'; }, savetxt : { text : ["Nothing can force me to sleep"] } }); AddWarlockInvocation("Cloak of Flies (prereq: level 5 warlock)", { name : "Cloak of Flies", description : desc([ "As a bonus action, I can surround myself with a 5-ft radius magical aura of buzzing flies", "It lasts until I'm incapacitated or dismiss it as a bonus action; Total cover block the aura", "The aura grants me adv. on Cha (Intimidation), but disadv. on all other Cha checks", "Creatures starting their turn in the aura take my Cha mod (min 0) in poison damage" ]), source : [["X", 56], ["UA:RCO", 5]], submenu : "[warlock level 5+]", prereqeval : function(v) { return classes.known.warlock.level >= 5; }, recovery : "short rest", usages : 1, action : [["bonus action", " (start/stop)"]] }); AddWarlockInvocation("Eldritch Smite (prereq: level 5 warlock, Pact of the Blade)", { name : "Eldritch Smite", description : desc([ "Once per turn when I hit a creature with my pact weapon, I can empower the strike", "By expending a warlock spell slot, the creature takes extra damage and is knocked prone", "It takes 1d8 force damage and another 1d8 force damage per level of the spell slot", "The target is only knocked prone if it is Huge or smaller" ]), source : [["X", 56]], submenu : "[improves Pact of the Blade]", prereqeval : function(v) { return classes.known.warlock.level >= 5 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the blade'; } }); AddWarlockInvocation("Ghostly Gaze (prereq: level 7 warlock)", { name : "Ghostly Gaze", description : desc([ "As an action, I can gain darkvision, and the ability to see through solid objects, out to 30 ft", "Objects appear ghostly to me; This lasts up to 1 minute, while I'm concentrating on this" ]), source : [["X", 56]], submenu : "[warlock level 7+]", prereqeval : function(v) { return classes.known.warlock.level >= 7; }, recovery : "short rest", usages : 1, action : [["action", ""]] }); AddWarlockInvocation("Gift of the Depths (prereq: level 5 warlock)", { name : "Gift of the Depths", description : desc([ "I can breathe underwater and I have a swim speed equal to my walking speed", "Once per long rest, I can cast Water Breathing without using a spell slot (PHB 287)" ]), source : [["X", 57], ["UA:RCO", 6]], submenu : "[warlock level 5+]", spellcastingBonus : [{ name : "Gift of the Depths", spells : ["water breathing"], selection : ["water breathing"], firstCol : 'oncelr' }], prereqeval : function(v) { return classes.known.warlock.level >= 5; }, speed : { swim : { spd : "walk", enc : "walk" } } }); AddWarlockInvocation("Gift of the Ever-Living Ones (prereq: Pact of the Chain)", { name : "Gift of the Ever-Living Ones", description : desc("When I regain HP while my familiar is within 100 ft, I regain the max the dice can roll"), source : [["X", 57], ["UA:RCO", 6]], submenu : "[improves Pact of the Chain]", prereqeval : function(v) { return GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the chain'; } }); AddWarlockInvocation("Grasp of Hadar (prereq: Eldritch Blast cantrip)", { name : "Grasp of Hadar", description : desc("Once per turn when my Eldritch Blast hits a creature, I can move it 10 ft closer to me"), source : [["X", 57], ["UA:RCO", 6]], submenu : "[improves Eldritch Blast]", prereqeval : function(v) { return v.hasEldritchBlast; }, calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == 'eldritch blast') fields.Description += '; Target moved 10 ft to me'; }, "When I hit a creature with my Eldritch Blast cantrip once or more times in a turn, I can move it in a straight line 10 ft closer to me." ] } }); AddWarlockInvocation("Improved Pact Weapon (prereq: Pact of the Blade)", { name : "Improved Pact Weapon", description : desc([ "I can use any pact weapon I create as my spellcasting focus for warlock spells", "Any pact weapon I create is a +1 magic weapon, if it isn't already a +1 magic weapon", "I can now also conjure a shortbow, longbow, or light or heavy crossbow as my pact weapon" ]), source : [["X", 57]], submenu : "[improves Pact of the Blade]", prereqeval : function(v) { return GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the blade'; }, calcChanges : { atkCalc : [ function (fields, v, output) { if ((/^(shortbow|longbow|light crossbow|heavy crossbow)$/).test(v.baseWeaponName) && (/\bpact\b/i).test(v.WeaponTextName)) { v.pactWeapon = true; } // Test if this is a pact weapon, has no + bonus from somewhere else, and doesn't already have a improved pact weapon bonus if (v.pactWeapon && !output.magic) { var bContinue = true; // Now test if this isn't a weaponOptions addition with a static + bonus set to the modifier fields if (v.theWea.isMagicWeapon && v.theWea.modifiers) { // Test the first two modifiers to see if both offer a +1 or more. Returns `true` if one contains no numbers or is less than the improved pact weapon bonus var bContinue = v.theWea.modifiers.slice(0, 2).some(function (n) { if (!n || !/\d/.test(n)) { var nmbr = 0; } else if (isNaN(n)) { var nmbr = n.match(/(^|\+|-)\d+\b/g); nmbr = !nmbr ? 0 : nmbr.reduce(function(a, b) {return Number(a) + Number(b)}); } else { var nmbr = Number(n); } return nmbr < 1; }); } // if the continue boolean wasn't set to false, we can proceed if (bContinue) { v.pactMag = 1; output.magic = 1; } }; }, "If I include the word 'Pact' in a the name of a melee weapon, shortbow, longbow, light crossbow, or heavy crossbow, it will be treated as my Pact Weapon.\n \u2022 If my Pact Weapon doesn't already include a magical bonus in its name and is not a magic weapon with at least a +1 bonus, the calculation will add +1 to its To Hit and Damage.", 290 ], atkAdd : [ function (fields, v) { if ((/^(shortbow|longbow|light crossbow|heavy crossbow)$/).test(v.baseWeaponName) && (/\bpact\b/i).test(v.WeaponTextName)) { v.pactWeapon = true; }; }, "", 90] } }); AddWarlockInvocation("Lance of Lethargy (prereq: Eldritch Blast cantrip)", { name : "Lance of Lethargy", description : desc([ "Once per turn when my Eldritch Blast hits a creature, I can reduce its speed by 10 ft", "This speed reduction lasts until the end of my next turn" ]), source : [["X", 57]], submenu : "[improves Eldritch Blast]", prereqeval : function(v) { return v.hasEldritchBlast; }, calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == 'eldritch blast') fields.Description += '; 1 target -10 ft speed'; }, "Once on each of my turns when I hit a creature with my Eldritch Blast cantrip, I can reduce its speed by 10 ft until the end of my next turn." ] } }); AddWarlockInvocation("Maddening Hex (prereq: level 5 warlock, Hex spell or warlock feature that curses)", { name : "Maddening Hex", description : desc([ "As a bonus action, I cause pain around a target hexed by me that I can see within 30 ft", "It and any of my choice I can see in 5 ft of it take my Cha mod (min 1) in psychic damage", "The Hex spell and all of my warlock features that curse are considered a hex for this" ]), source : [["X", 57]], submenu : "[improves Hex spell or warlock feature that curses]", prereqeval : function(v) { return classes.known.warlock.level >= 5 && (isSpellUsed('hex', true) || (/hexblade/).test(classes.known.warlock.subclass)); }, action : [["bonus action", ""]] }); AddWarlockInvocation("Relentless Hex (prereq: level 7 warlock, Hex spell or warlock feature that curses)", { name : "Relentless Hex", description : desc([ "As a bonus action, I can teleport to a target hexed by me that I can see within 30 ft", "I teleport up to 30 ft to an unoccupied space that I can see within 5 ft of the target" ]), source : [["X", 57]], submenu : "[improves Hex spell or warlock feature that curses]", prereqeval : function(v) { return classes.known.warlock.level >= 7 && (isSpellUsed('hex', true) || (/hexblade/).test(classes.known.warlock.subclass)); }, action : [["bonus action", ""]] }); AddWarlockInvocation("Shroud of Shadow (prereq: level 15 warlock)", { name : "Shroud of Shadow", description : desc("I can cast Invisibility at will, without using spell slots (PHB 254)"), source : [["X", 57], ["UA:RCO", 6]], submenu : "[warlock level 15+]", spellcastingBonus : [{ name : "Shroud of Shadow", spells : ["invisibility"], selection : ["invisibility"], firstCol : 'atwill' }], prereqeval : function(v) { return classes.known.warlock.level >= 15; }, spellChanges : { "invisibility" : { description : "1 crea invisible; attacking/casting makes the crea visible; anything worn/carried also invisible", changes : "With the Shroud of Shadow invocation I can cast Invisibility at will, but when I do so I am unable to cast it using a higher level spell slot." } } }); AddWarlockInvocation("Tomb of Levistus (prereq: level 5 warlock)", { name : "Tomb of Levistus", description : desc([ "As a reaction when I take damage, I can entomb myself in ice until the end of my turn", "During, I get 10 temp. HP per warlock level, which I use to absorb the triggering damage", "After, till the ice is gone, I also get vulnerability to fire, 0 speed, and am incapacitated" ]), source : [["X", 57], ["UA:RCO", 6]], submenu : "[warlock level 5+]", prereqeval : function(v) { return classes.known.warlock.level >= 5; }, recovery : "short rest", usages : 1, action : [["reaction", ""]], additional : levels.map( function(n) { return (n * 10) + " temp HP"; }) }); AddWarlockInvocation("Trickster's Escape (prereq: level 7 warlock)", { name : "Trickster's Escape", description : desc("Once per long rest, I can cast Freedom of Movement on myself without using a spell slot"), source : [["X", 57], ["UA:RCO", 7]], submenu : "[warlock level 7+]", spellcastingBonus : [{ name : "Trickster's Escape", spells : ["freedom of movement"], selection : ["freedom of movement"], firstCol : 'oncelr' }], prereqeval : function(v) { return classes.known.warlock.level >= 7; }, spellChanges : { "freedom of movement" : { range : "Self", description : "Magic can't reduce my speed, paralyze or restrain me; I can use 5 ft to escape nonmagical restrains", changes : "With the Trickster's Escape invocation I can cast Freedom of Movement, but only on myself." } } }); // Add 1 subclass for the Wizard AddSubClass("wizard", "war magic", { regExpSearch : /^(?=.*war)(?=.*(wizard|magic|mage)).*$/i, subname : "War Magic", fullname : "War Mage", source : [["X", 59]], features : { "subclassfeature2" : { //has to be identical to a feature named in the ClassList name : "Arcane Deflection", source : [["X", 59]], minlevel : 2, description : desc([ "As a reaction when I'm hit by an attack, I can gain +2 to my AC against that attack", "As a reaction when I fail a save, I can gain +4 bonus to that saving throw", "After I do either, I can't cast spells other than cantrips until the end of my next turn" ]), action : [["reaction", ""]] }, "subclassfeature2.1" : { name : "Tactical Wit", source : [["X", 60]], minlevel : 2, description : desc("I gain a bonus to my initiative rolls equal to my Intelligence modifier"), addMod : { type : "skill", field : "Init", mod : "max(Int|0)", text : "I can add my Intelligence modifier to initiative rolls." } }, "subclassfeature6" : { name : "Power Surge", source : [["X", 60]], minlevel : 6, description : desc([ "I have a pool of stored power surges that I can use to empower my damaging spells", "I gain a power surge whenever I successfully end a spell with Dispel Magic or Counterspell", "This pool can store a number of power surges equal to my Intelligence modifier (min 1)", "It resets to 1 power surge after a long rest or when I have 0 surges left after a short rest", "When I deal damage with a wizard spell, I can spend a power surge to do extra damage", "One target takes half my wizard level in force damage; I can do this only once per turn" ]), usages : "Resets to 1 after ", usagescalc : "event.value = !event.value || event.value == 'Resets to 1 after ' ? 1 : event.value;", recovery : "long rest", additional : levels.map( function(n) { return n < 6 ? "" : "+" + Math.floor(n/2) + " force damage"; }) }, "subclassfeature10" : { name : "Durable Magic", source : [["X", 60]], minlevel : 10, description : desc("While I'm maintaining concentration on a spell, I gain +2 to AC and all saving throws") }, "subclassfeature14" : { name : "Deflecting Shroud", source : [["X", 60]], minlevel : 14, description : desc([ "When I use my Arcane Deflection feature, magical energy arcs from me to creatures", "Up to 3 targets I can see within 60 ft of me take half my wizard level in force damage" ]), additional : levels.map( function(n) { return n < 14 ? "" : Math.floor(n/2) + " force damage"; }) } } }); // Add feats FeatsList["bountiful luck"] = { name : "Bountiful Luck", source : [["X", 73]], prerequisite : "Being a Halfling", prereqeval : function(v) { return CurrentRace.known.indexOf('halfling') !== -1; }, descriptionFull : "Your people have extraordinary luck, which you have learned to mystically lend to your companions when you see them falter. You're not sure how you do it; you just wish it, and it happens. Surely a sign of fortune's favor!\n When an ally you can see within 30 feet of you rolls a 1 on the d20 for an attack roll, an ability check, or a saving throw, you can use your reaction to let the ally reroll the die. The ally must use the new roll\n When you use this ability, you can't use your Lucky racial trait before the end of your next turn.", description : "When an ally I can see within 30 ft of me rolls a 1 on an attack roll, an ability check, or a saving throw, I can use my reaction to let the ally reroll the die. The ally must use the new roll. When I use this, I can't use my racial Lucky trait until the end of my next turn.", action : [["reaction", ""]] }; FeatsList["dragon fear"] = { name : "Dragon Fear", source : [["X", 74]], prerequisite : "Being a Dragonborn", prereqeval : function(v) { return CurrentRace.known.indexOf('dragonborn') !== -1; }, descriptionFull : "When angered, you radiate menace. You gain the following benefits:\n \u2022 Increase your Strength, Constitution, or Charisma score by 1, to a maximum of 20.\n \u2022 Instead of exhaling destructive energy, you can expend a use of your Breath Weapon trait to roar, forcing each creature of your choice within 30 feet of you to make a Wisdom saving throw (DC 8 + your proficiency bonus + your Charisma modifier). A target automatically succeeds on the save if it can't hear or see you. On a failed save, a target becomes frightened of you for 1 minute. If the frightened target takes any damage, it can repeat the saving throw, ending the effect on itself on a success.", calculate : "event.value = 'I can use my Breath Weapon to roar instead. Chosen creatures within 30 ft that see and hear me must make a DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Cha Mod'))) + ' Wis save (8 + Prof Bonus + Cha mod) or be frightened of me for 1 min. A target can repeat the save whenever it takes damage. [+1 Str, Con, or Cha]';", scorestxt : "+1 Strength, Constitution, or Charisma", action : [['action', 'Breath Weapon or Dragon Fear', 'Breath Weapon']] }; FeatsList["dragon hide"] = { name : "Dragon Hide", source : [["X", 74]], prerequisite : "Being a Dragonborn", prereqeval : function(v) { return CurrentRace.known.indexOf('dragonborn') !== -1; }, descriptionFull : "You manifest scales and claws reminiscent of your draconic ancestors. You gain the following benefits:\n \u2022 Increase your Strength, Constitution, or Charisma score by 1, to a maximum of 20.\n \u2022 Your scales harden. While you aren't wearing armor, you can calculate your AC as 13 + your Dexterity modifier. You can use a shield and still gain this benefit.\n \u2022 You grow retractable claws from the tips of your fingers. Extending or retracting the claws requires no action. The claws are natural weapons, which you can use to make unarmed strikes. If you hit with them, you deal slashing damage equal to 1d4 + your Strength modifier, instead of the normal bludgeoning damage for an unarmed strike.", description : "I gain retractable claws that I can retract or extend, requiring no action. While extended, my unarmed strikes deal 1d4 slashing damage. My scales harden, giving me an AC of 13 + Dexterity modifier + shield when I'm not wearing armor. [+1 Str, Con, or Cha]", scorestxt : "+1 Strength, Constitution, or Charisma", weaponOptions : [{ baseWeapon : "unarmed strike", regExpSearch : /^(?=.*(retractable|dragon))(?=.*claw).*$/i, name : "Retractable Claws", source : [["X", 74]], damage : [1, 4, "slashing"], selectNow : true }], armorOptions : [{ regExpSearch : /^(?=.*(dragon|draconic|scaly))(?=.*(hide|skin|scales|resilience)).*$/i, name : "Dragon Hide", source : [["X", 74]], ac : 13, selectNow : true }] }; FeatsList["drow high magic"] = { name : "Drow High Magic", source : [["X", 74]], prerequisite : "Being a Drow (Dark Elf)", prereqeval : function(v) { return CurrentRace.known.indexOf('dark elf') !== -1; }, descriptionFull : "You learn more of the magic typical of dark elves. You learn the Detect Magic spell and can cast it at will, without expending a spell slot. You also learn Levitate and Dispel Magic, each of which you can cast once without expending a spell slot. You regain the ability to cast those two spells in this way when you finish a long rest. Charisma is your spellcasting ability for all three spells.", description : "I can cast Detect Magic at will, without expending a spell slot. I can also cast Levitate and Dispel Magic without expending a spell slot, but each only once per long rest. Charisma is my spellcasting ability for these three spells.", spellcastingBonus : [{ name : "At will", spellcastingAbility : 6, spells : ["detect magic"], selection : ["detect magic"], firstCol : 'atwill' }, { name : "Once per long rest", spells : ["levitate"], selection : ["levitate"], firstCol : 'oncelr' }, { name : "Once per long rest", spells : ["dispel magic"], selection : ["dispel magic"], firstCol : 'oncelr' }] }; FeatsList["dwarven fortitude"] = { name : "Dwarven Fortitude", source : [["X", 74]], prerequisite : "Being a Dwarf", prereqeval : function(v) { return CurrentRace.known.indexOf('dwarf') !== -1; }, descriptionFull : "You have the blood of dwarf heroes flowing through your veins. You gain the following benefits:\n \u2022 Increase your Constitution score by 1, to a maximum of 20.\n \u2022 Whenever you take the Dodge action in combat, you can spend one Hit Die to heal yourself. Roll the die, add your Constitution modifier, and regain a number of hit points equal to the total (minimum of 1).", description : "Whenever I take the Dodge action in combat, I can spend one Hit Die to heal myself. I roll the die, add my Constitution modifier, and regain a number of hit points equal to the total (minimum of 1). [+1 Constitution]", scores : [0, 0, 1, 0, 0, 0] }; FeatsList["elven accuracy"] = { name : "Elven Accuracy", source : [["X", 74]], prerequisite : "Being an Elf or a Half-Elf", prereqeval : function(v) { return (/elf|eladrin|avariel|grugach|shadar-kai/i).test(CurrentRace.known); }, descriptionFull : "The accuracy of elves is legendary, especially that of elf archers and spellcasters. You have uncanny aim with attacks that rely on precision rather than brute force. You gain the following benefits:\n \u2022 Increase your Dexterity, Intelligence, Wisdom, or Charisma score by 1, to a maximum of 20.\n \u2022 Whenever you have advantage on an attack roll using Dexterity, Intelligence, Wisdom, or Charisma, you can reroll one of the dice once.", description : "Whenever I have advantage on an attack roll that uses Dexterity, Intelligence, Wisdom, or Charisma, I can reroll one of the dice once. [+1 Dexterity, Intelligence, Wisdom, or Charisma]", scorestxt : "+1 Dexterity, Intelligence, Wisdom, or Charisma" }; FeatsList["fade away"] = { name : "Fade Away", source : [["X", 74]], prerequisite : "Being a Gnome", prereqeval : function(v) { return CurrentRace.known.indexOf('gnome') !== -1; }, descriptionFull : "Your people are clever, with a knack for illusion magic. You have learned a magical trick for fading away when you suffer harm. You gain the following benefits:\n \u2022 Increase your Dexterity or Intelligence score by 1, to a maximum of 20.\n \u2022 Immediately after you take damage, you can use a reaction to magically become invisible until the end of your next turn or until you attack, deal damage, or force someone to make a saving throw. Once you use this ability, you can't do so again until you finish a short or long rest.", description : "As a reaction when I take damage, I can magically become invisible until the end of my next turn or until I attack, deal damage, or force someone to make a saving throw. Once I do this, I can't do so again until I finish a short rest. [+1 Dexterity or Intelligence]", scorestxt : "+1 Dexterity or Intelligence", action : [["reaction", ""]], usages : 1, recovery : "short rest" }; FeatsList["fey teleportation"] = { // this code includes contributions by SoilentBrad name : "Fey Teleportation", source : [["X", 74]], prerequisite : "Being a High Elf", prereqeval : function(v) { return CurrentRace.known.indexOf('high elf') !== -1; }, descriptionFull : "Your study of high elven lore has unlocked fey power that few other elves possess, except your eladrin cousins. Drawing on your fey ancestry, you can momentarily stride through the Feywild to shorten your path from one place to another. You gain the following benefits:\n \u2022 Increase your Intelligence or Charisma score by 1, to a maximum of 20.\n \u2022 You learn to speak, read, and write Sylvan.\n \u2022 You learn the Misty Step spell and can cast it once without expending a spell slot. You regain the ability to cast it in this way when you finish a short or long rest. Intelligence is your spellcasting ability for this spell.", description : "I can cast Misty Step without using a spell slot. I can do so once per short rest. Intelligence is my spellcasting ability for this spell. I also learn to speak, read, and write Sylvan. [+1 Intelligence or Charisma]", scorestxt : "+1 Intelligence or Charisma", spellcastingBonus : [{ name : "Once per short rest", spellcastingAbility : 4, spells : ["misty step"], selection : ["misty step"], firstCol : 'oncesr' }], languageProfs : ["Sylvan"], usages : 1, recovery : "short rest" }; FeatsList["flames of phlegethos"] = { name : "Flames of Phlegethos", source : [["X", 74]], prerequisite : "Being a Tiefling", prereqeval : function(v) { return CurrentRace.known.indexOf('tiefling') !== -1; }, descriptionFull : "You learn to call on hellfire to serve your commands. You gain the following benefits:\n \u2022 Increase your Intelligence or Charisma score by 1, to a maximum of 20.\n \u2022 When you roll fire damage for a spell you cast, you can reroll any roll of 1 on the fire damage dice, but you must use the new roll, even if it is another 1.\n \u2022 Whenever you cast a spell that deals fire damage, you can cause flames to wreathe you until the end of your next turn. The flames don't harm you or your possessions, and they shed bright light out to 30 feet and dim light for an additional 30 feet. While the flames are present, any creature within 5 feet of you that hits you with a melee attack takes 1d4 fire damage.", description : "When I cast a fire damage spell, I can reroll any 1 on fire damage dice once. I then sheathe myself in flame until my next turn ends. These shed bright light in 30 ft, dim light in 30 ft and cause any within 5 ft that hit me in melee to take 1d4 fire damage. [+1 Int or Cha]", scorestxt : "+1 Intelligence or Charisma" }; FeatsList["infernal constitution"] = { name : "Infernal Constitution", source : [["X", 75]], prerequisite : "Being a Tiefling", prereqeval : function(v) { return CurrentRace.known.indexOf('tiefling') !== -1; }, descriptionFull : "Fiendish blood runs strong in you, unlocking a resilience akin to that possessed by some fiends. You gain the following benefits:\n \u2022 Increase your Constitution score by 1, to a maximum of 20.\n \u2022 You have resistance to cold and poison damage.\n \u2022 You have advantage on saving throws against being poisoned.", description : "I have resistance to cold and poison damage and I have advantage on saving throws against being poisoned.\n[+1 Constitution]", scores : [0, 0, 1, 0, 0, 0], dmgres : ["Cold", "Poison"], savetxt : { adv_vs : ["poison"] } }; FeatsList["orcish fury"] = { name : "Orcish Fury", source : [["X", 75]], prerequisite : "Being a Half-Orc", prereqeval : function(v) { return (/^(?=.*half)(?=.*orc).*$/i).test(CurrentRace.known); }, descriptionFull : "Your fury burns tirelessly. You gain the following benefits:\n \u2022 Increase your Strength or Constitution score by 1, to a maximum of 20.\n \u2022 When you hit with an attack using a simple or martial weapon, you can roll one of the weapon's damage dice an additional time and add it as extra damage of the weapon's damage type. Once you use this ability, you can't use it again until you finish a short or long rest.\n \u2022 Immediately after you use your Relentless Endurance trait, you can use your reaction to make one weapon attack.", description : "Once per short rest, I can roll an extra damage die for an attack with a simple or martial weapon. In addition, Immediately after I use my Relentless Endurance trait, I can use my reaction to make one weapon attack. [+1 Strength or Constitution]", scorestxt : "+1 Strength or Constitution", action : [["reaction", " (after Relentless Endurance)"]], usages : 1, recovery : "short rest", additional : "extra damage" }; FeatsList["prodigy"] = { name : "Prodigy", source : [["X", 75]], prerequisite : "Being a Half-Elf, Half-Orc, or Human", prereqeval : function(v) { return (/human|^(?=.*half)(?=.*(elf|orc)).*$/i).test(CurrentRace.known); }, descriptionFull : "You have a knack for learning new things. You gain the following benefits:\n \u2022 You gain one skill proficiency of your choice, one tool proficiency of your choice, and fluency in one language of your choice.\n \u2022 Choose one skill in which you have proficiency. You gain expertise with that skill, which means your proficiency bonus is doubled for any ability check you make with it. The skill you choose must be one that isn't already benefiting from a feature, such as Expertise, that doubles your proficiency bonus.", description : "I gain proficiency with one skill of my choice and expertise with it, or expertise with another skill of my choice that I'm already proficient with. I also gain proficiency with one tool of my choice and fluency in one language of my choice.", skillstxt : "Proficiency with any one skill and Expertise with any one skill that you are already proficient with", languageProfs : [1], toolProfs : [["Any tool", 1]] }; FeatsList["second chance"] = { name : "Second Chance", source : [["X", 75]], prerequisite : "Being a Halfling", prereqeval : function(v) { return CurrentRace.known.indexOf('halfling') !== -1; }, descriptionFull : "Fortune favors you when someone tries to strike you. You gain the following benefits:\n \u2022 Increase your Dexterity, Constitution, or Charisma score by 1, to a maximum of 20.\n \u2022 When a creature you can see hits you with an attack roll, you can use your reaction to force that creature to reroll. Once you use this ability, you can't use it again until you roll initiative at the start of combat or until you finish a short or long rest.", description : "When a creature I can see hits me with an attack roll, I can use my reaction to force that creature to reroll. Once I use this ability, I can't do so again until I roll initiative at the start of combat or I finish a short rest. [+1 Dexterity, Constitution, or Charisma]", scorestxt : "+1 Dexterity, Constitution, or Charisma", action : [["reaction", ""]], usages : 1, recovery : "Combat" }; FeatsList["squat nimbleness"] = { name : "Squat Nimbleness", source : [["X", 75]], prerequisite : "Being a Dwarf or a small race", prereqeval : function(v) { return (/dwarf/i).test(CurrentRace.known) || tDoc.getField('Size Category').currentValueIndices === 4; }, descriptionFull : "You are uncommonly nimble for your race. You gain the following benefits:\n \u2022 Increase your Strength or Dexterity score by 1, to a maximum of 20.\n \u2022 Increase your walking speed by 5 feet.\n \u2022 You gain proficiency in the Acrobatics or Athletics skill (your choice).\n \u2022 You have advantage on any Strength (Athletics) or Dexterity (Acrobatics) check you make to escape from being grappled.", description : "My walking speed increases by 5 ft. I gain proficiency in either the Acrobatics or the Athletics skill. I have advantage on Dexterity (Acrobatics) and Strength (Athletics) checks I make to escape from being grappled. [+1 Strength or Dexterity]", scorestxt : "+1 Strength or Dexterity", skillstxt : "Acrobatics or Athletics", speed : { walk : {spd : "+5", enc : "+5" } } }; FeatsList["wood elf magic"] = { name : "Wood Elf Magic", source : [["X", 75]], prerequisite : "Being a Wood Elf", prereqeval : function(v) { return CurrentRace.known.indexOf('wood elf') !== -1; }, descriptionFull : "You learn the magic of the primeval woods, which are revered and protected by your people. You learn one druid cantrip of your choice. You also learn the Longstrider and Pass Without Trace spells, each of which you can cast once without expending a spell slot. You regain the ability to cast these two spells in this way when you finish a long rest. Wisdom is your spellcasting ability for all three spells.", description : "I learn a druid cantrip. In addition, I can cast Longstrider and Pass Without Trace, without expending a spell slot, but each only once per long rest. Wisdom is my spellcasting ability for these three spells.", spellcastingBonus : [{ name : "Druid Cantrip", spellcastingAbility : 5, "class" : "druid", level : [0, 0], firstCol : 'atwill' }, { name : "Once per long rest", spells : ["longstrider"], selection : ["longstrider"], firstCol : 'oncelr' }, { name : "Once per long rest", spells : ["pass without trace"], selection : ["pass without trace"], firstCol : 'oncelr' }] }; // Then add the new spells from XGtE (contains contributions by SoilentBrad) SpellsList["catnap"] = { name : "Catnap", classes : ["artificer", "bard", "sorcerer", "wizard"], source : [["X", 151]], level : 3, school : "Ench", time : "1 a", range : "30 ft", components : "S,M", compMaterial : "A pinch of sand", duration : "10 min", description : "3+1/SL willing crea unconscious for 10 min to gain benefits of short rest; Ends if dmg or 1 a to wake", descriptionFull : "You make a calming gesture, and up to three willing creatures of your choice that you can see within range fall unconscious for the spell's duration. The spell ends on a target early if it takes damage or someone uses an action to shake or slap it awake. If a target remains unconscious for the full duration, that target gains the benefit of a short rest, and it can't be affected by this spell again until it finishes a long rest." + AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, you can target one additional willing creature for each slot level above 3rd." }; SpellsList["cause fear"] = { name : "Cause Fear", classes : ["warlock", "wizard"], source : [["X", 151]], level : 1, school : "Necro", time : "1 a", range : "60 ft", components : "V", duration : "Conc, 1 min", save : "Wis", description : "1+1/SL crea (not construct/undead), each max 30 ft apart, save or frightened; save end of each turn", descriptionFull : "You awaken the sense of mortality in one creature you can see within range. A construct or an undead is immune to this effect. The target must succeed on a Wisdom saving throw or become frightened of you until the spell ends. The frightened target can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success." + AtHigherLevels + "When you cast this spell using a spell slot of 2nd level or higher, you can target one additional creature for each slot level above 1st. The creatures must be within 30 feet of each other when you target them." }; SpellsList["ceremony"] = { name : "Ceremony", classes : ["cleric", "paladin"], source : [["X", 151]], ritual : true, level : 1, school : "Abjur", time : "1 h", range : "Touch", components : "V,S,M\u2020", compMaterial : "25 gp worth of powdered silver, which the spell consumes", duration : "Instantaneous", description : "Perform religious ceremony on target(s) within 10 ft throughout the casting; see book (25gp cons.)", descriptionFull : "You perform a special religious ceremony that is infused with magic. When you cast the spell, choose one of the following rites, the target of which must be within 10 feet of you throughout the casting." + "\n " + toUni("Atonement") + ": You touch one willing creature whose alignment has changed, and you make a DC 20 Wisdom (Insight) check. On a successful check, you restore the target to its original alignment." + "\n " + toUni("Bless Water") + ": You touch one vial of water and cause it to become holy water." + "\n " + toUni("Coming of Age") + ": You touch one humanoid who is a young adult. For the next 24 hours, whenever the target makes an ability check, it can roll a d4 and add the number rolled to the ability check. A creature can benefit from this rite only once." + "\n " + toUni("Dedication") + ": You touch one humanoid who wishes to be dedicated to your god's service. For the next 24 hours, whenever the target makes a saving throw, it can roll a d4 and add the number rolled to the save. A creature can benefit from this rite only once." + "\n " + toUni("Funeral Rite") + ": You touch one corpse, and for the next 7 days, the target can't become undead by any means short of a wish spell." + "\n " + toUni("Wedding") + ": You touch adult humanoids willing to be bonded together in marriage. For the next 7 days, each target gains a +2 bonus to AC while they are within 30 feet of each other. A creature can benefit from this rite again only if widowed." }; SpellsList["chaos bolt"] = { name : "Chaos Bolt", classes : ["sorcerer"], source : [["X", 151], ["G", 67]], level : 1, school : "Evoc", time : "1 a", range : "120 ft", components : "V,S", duration : "Instantaneous", description : "Spell atk 2d8+1d6+1d6/SL dmg, d8s set dmg type, see B; double on d8s: new atk vs. crea in 30 ft", descriptionShorter : "Spell atk 2d8+1d6+1d6/SL dmg, d8s set type, see B; double on d8s: new atk vs. crea in 30 ft", descriptionFull : "You hurl an undulating, warbling mass of chaotic energy at one creature in range. Make a ranged spell attack against the target. On a hit, the target takes 2d8 + 1d6 damage. Choose one of the d8s. The number rolled on that die determines the attack's damage type, as shown below." + "\n\n" + toUni("d8") + "\t" + toUni("Damage Type") + "\n 1\tAcid" + "\n 2\tCold" + "\n 3\tFire" + "\n 4\tForce" + "\n 5\tLightning" + "\n 6\tPoison" + "\n 7\tPsychic" + "\n 8\tThunder" + "\n\n " + "If you roll the same number on both d8s, the chaotic energy leaps from the target to a different creature of your choice within 30 feet of it. Make a new attack roll against the new target, and make a new damage roll, which could cause the chaotic energy to leap again." + "\n " + "A creature can be targeted only once by each casting of this spell." + AtHigherLevels + "When you cast this spell using a spell slot of 2nd level or higher, each target takes 1d6 extra damage of the type rolled for each slot level above 1st.", dynamicDamageBonus : { multipleDmgTypes : { dmgTypes : ["acid", "cold", "fire", "force", "lightning", "poison", "psychic", "thunder"], inDescriptionAs : '' } } }; SpellsList["charm monster"] = { name : "Charm Monster", classes : ["bard", "druid", "sorcerer", "warlock", "wizard"], source : [["X", 151]], level : 4, school : "Ench", time : "1 a", range : "30 ft", components : "V,S", duration : "1 h", save : "Wis", description : "1+1/SL creatures, each max 30 ft apart, save or charmed; adv. on save if me/ally is fighting it", descriptionFull : "You attempt to charm a creature you can see within range. It must make a Wisdom saving throw, and it does so with advantage if you or your companions are fighting it. If it fails the saving throw, it is charmed by you until the spell ends or until you or your companions do anything harmful to it. The charmed creature is friendly to you. When the spell ends, the creature knows it was charmed by you." + AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, you can target one additional creature for each slot level above 4th. The creatures must be within 30 feet of each other when you target them." }; SpellsList["create homunculus"] = { name : "Create Homunculus", classes : ["wizard"], source : [["X", 152]], level : 6, school : "Trans", time : "1 h", range : "Touch", components : "V,S,M\u0192", compMaterial : "Clay, ash, and mandrake root, all of which the spell consumes, and a jewel-encrusted dagger worth at least 1,000 gp", duration : "Instantaneous", description : "I take 2d4 piercing dmg to create a homunculus as my faithful companion; see book (1000gp)", descriptionFull : "While speaking an intricate incantation, you cut yourself with a jewel-encrusted dagger, taking 2d4 piercing damage that can't be reduced in any way. You then drip your blood on the spell's other components and touch them, transforming them into a special construct called a homunculus." + "\n " + "The statistics of the homunculus are in the Monster Manual. It is your faithful companion, and it dies if you die. Whenever you finish a long rest, you can spend up to half your Hit Dice if the homunculus is on the same plane of existence as you. When you do so, roll each die and add your Constitution modifier to it. Your hit point maximum is reduced by the total, and the homunculus's hit point maximum and current hit points are both increased by it. This process can reduce you to no lower than 1 hit point, and the change to your and the homunculus's hit points ends when you finish your next long rest. The reduction to your hit point maximum can't be removed by any means before then, except by the homunculus's death." + "\n " + "You can have only one homunculus at a time. If you cast this spell while your homunculus lives, the spell fails.", dynamicDamageBonus : { doNotProcess : true } // You don't want to do yourself more damage do you? }; SpellsList["crown of stars"] = { name : "Crown of Stars", classes : ["sorcerer", "warlock", "wizard"], source : [["X", 152]], level : 7, school : "Evoc", time : "1 a", range : "Self", components : "V,S", duration : "1 h", description : "7+2/SL motes shed 30-ft light; bonus action to fire one as 120 ft ranged atk for 4d12 Radiant dmg", descriptionShorter : "7+2/SL motes shed 30-ft light; bns a to fire one as 120 ft ranged atk for 4d12 Radiant dmg", descriptionFull : "Seven star-like motes of light appear and orbit your head until the spell ends. You can use a bonus action to send one of the motes streaking toward one creature or object within 120 feet of you. When you do so, make a ranged spell attack. On a hit, the target takes 4d12 radiant damage. Whether you hit or miss, the mote is expended. The spell ends early if you expend the last mote." + "\n " + "If you have four or more motes remaining, they shed bright light in a 30-foot radius and dim light for an additional 30 feet. If you have one to three motes remaining, they shed dim light in a 30-foot radius." + AtHigherLevels + "When you cast this spell using a spell slot of 8th level or higher, the number of motes created increases by two for each slot level above 7th." }; SpellsList["danse macabre"] = { name : "Danse Macabre", classes : ["warlock", "wizard"], source : [["X", 153]], level : 5, school : "Necro", time : "1 a", range : "60 ft", components : "V,S", duration : "Conc, 1 h", description : "5+2/SL small/medium corpses as zombie/skeleton; spellc. mod to atk/dmg; bns a command in 60 ft", descriptionFull : "Threads of dark power leap from your fingers to pierce up to five Small or Medium corpses you can see within range. Each corpse immediately stands up and becomes undead. You decide whether it is a zombie or a skeleton (the statistics for zombies and skeletons are in the Monster Manual), and it gains a bonus to its attack and damage rolls equal to your spellcasting ability modifier." + "\n " + "You can use a bonus action to mentally command the creatures you make with this spell, issuing the same command to all of them. To receive the command, a creature must be within 60 feet of you. You decide what action the creatures will take and where they will move during their next turn, or you can issue a general command, such as to guard a chamber or passageway against your foes. If you issue no commands, the creatures do nothing except defend themselves against hostile creatures. Once given an order, the creatures continue to follow it until their task is complete." + "\n " + "The creatures are under your control until the spell ends, after which they become inanimate once more" + AtHigherLevels + "When you cast this spell using a spell slot of 6th level or higher, you animate up to two additional corpses for each slot level above 5th." }; SpellsList["dawn"] = { name : "Dawn", classes : ["cleric", "wizard"], source : [["X", 153]], level : 5, school : "Evoc", time : "1 a", range : "60 ft", components : "V,S,M\u0192", compMaterial : "A sunburst pendant worth at least 100 gp", duration : "Conc, 1 min", save : "Con", description : "30-ft rad 40-ft high all crea 4d10 Radiant dmg at cast/end turn; bns a move it 60 ft (100gp)", descriptionFull : "The light of dawn shines down on a location you specify within range. Until the spell ends, a 30-foot-radius, 40-foot-high cylinder of bright light glimmers there. This light is sunlight." + "\n " + "When the cylinder appears, each creature in it must make a Constitution saving throw, taking 4d10 radiant damage on a failed save, or half as much damage on a successful one. A creature must also make this saving throw whenever it ends its turn in the cylinder." + "\n " + "If you're within 60 feet of the cylinder, you can move it up to 60 feet as a bonus action on your turn." }; SpellsList["dragon's breath"] = { name : "Dragon's Breath", classes : ["sorcerer", "wizard"], source : [["X", 154]], level : 2, school : "Trans", time : "1 bns", range : "Touch", components : "V,S,M", compMaterial : "A hot pepper", duration : "Conc, 1 min", save : "Dex", description : "1 willing crea: 1 a breathe 15-ft cone all 3d6+1d6/SL Acid/Cold/Fire/Lightn./Poison dmg; save half", descriptionShorter : "1 willing crea: 1 a 15-ft cone 3d6+1d6/SL Acid/Cold/Fire/Lightn/Poison dmg; save half", descriptionFull : "You touch one willing creature and imbue it with the power to spew magical energy from its mouth, provided it has one. Choose acid, cold, fire, lightning, or poison. Until the spell ends, the creature can use an action to exhale energy of the chosen type in a 15-foot cone. Each creature in that area must make a Dexterity saving throw, taking 3d6 damage of the chosen type on a failed save, or half as much damage on a successful one." + AtHigherLevels + "When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d6 for each slot level above 2nd.", dynamicDamageBonus : { multipleDmgTypes : { dmgTypes : ["acid", "cold", "fire", "lightning", "poison"], inDescriptionAs : "Acid/Cold/Fire/Lightn.?/Poison" } } }; SpellsList["druid grove"] = { name : "Druid Grove", classes : ["druid"], source : [["X", 154]], level : 6, school : "Abjur", time : "10 min", range : "Touch", components : "V,S,M\u2020", compMaterial : "Mistletoe, which the spell consumes, that was harvested with a golden sickle under the light of a full moon", duration : "24 h", description : "Protect 30-ft to 90-ft cube outdoors or underground; see book for effects", descriptionFull : "You invoke the spirits of nature to protect an area outdoors or underground. The area can be as small as a 30-foot cube or as large as a 90-foot cube. Buildings and other structures are excluded from the affected area. If you cast this spell in the same area every day for a year, the spell lasts until dispelled." + "\n " + "The spell creates the following effects within the area. When you cast this spell, you can specify creatures as friends who are immune to the effects. You can also specify a password that, when spoken aloud, makes the speaker immune to these effects." + "\n " + "The entire warded area radiates magic. A dispel magic cast on the area, if successful, removes only one of the following effects, not the entire area. That spell's caster chooses which effect to end. Only when all its effects are gone is this spell dispelled." + "\n " + toUni("Solid Fog") + ": You can fill any number of 5-foot squares on the ground with thick fog, making them heavily obscured. The fog reaches 10 feet high. In addition, every foot of movement through the fog costs 2 extra feet. To a creature immune to this effect, the fog obscures nothing and looks like soft mist, with motes of green light floating in the air." + "\n " + toUni("Grasping Undergrowth") + ": You can fill any number of 5-foot squares on the ground that aren't filled with fog with grasping weeds and vines, as if they were affected by an entangle spell. To a creature immune to this effect, the weeds and vines feel soft and reshape themselves to serve as temporary seats or beds." + "\n " + toUni("Grove Guardians") + ": You can animate up to four trees in the area, causing them to uproot themselves from the ground. These trees have the same statistics as an awakened tree, which appears in the Monster Manual, except they can't speak, and their bark is covered with druidic symbols. If any creature not immune to this effect enters the warded area, the grove guardians fight until they have driven off or slain the intruders. The grove guardians also obey your spoken commands (no action required by you) that you issue while in the area. If you don't give them commands and no intruders are present, the grove guardians do nothing. The grove guardians can't leave the warded area. When the spell ends, the magic animating them disappears, and the trees take root again if possible." + "\n " + toUni("Additional Spell Effects") + ": You can place your choice of one of the following magical effects within the warded area:" + "\n \u2022 " + "A constant gust of wind in two locations of your choice" + "\n \u2022 " + "Spike growth in one location of your choice" + "\n \u2022 " + "Wind wall in two locations of your choice" + "\n " + "To a creature immune to this effect, the winds are a fragrant, gentle breeze, and the area of spike growth is harmless." }; SpellsList["enemies abound"] = { name : "Enemies Abound", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["X", 155]], level : 3, school : "Ench", time : "1 a", range : "120 ft", components : "V,S", duration : "Conc, 1 min", save : "Int", description : "1 crea save or regard all creatures it can see as enemies, random targeting; save when damaged to end", descriptionFull : "You reach into the mind of one creature you can see and force it to make an Intelligence saving throw. A creature automatically succeeds if it is immune to being frightened. On a failed save, the target loses the ability to distinguish friend from foe, regarding all creatures it can see as enemies until the spell ends. Each time the target takes damage, it can repeat the saving throw, ending the effect on itself on a success." + "\n " + "Whenever the affected creature chooses another creature as a target, it must choose the target at random from among the creatures it can see within range of the attack, spell, or other ability it's using. If an enemy provokes an opportunity attack from the affected creature, the creature must make that attack if it is able to." }; SpellsList["enervation"] = { name : "Enervation", classes : ["sorcerer", "warlock", "wizard"], source : [["X", 155]], level : 5, school : "Necro", time : "1 a", range : "60 ft", components : "V,S", duration : "Conc, 1 min", save : "Dex", description : "1 crea 2d8+1d8/SL Necrotic dmg, saved: ends; fail: +2d8 dmg and Act to repeat; I heal half; see B", descriptionShorter : "1 crea 2d8+1d8/SL Necro. dmg, save: ends; fail: +2d8 dmg & Act repeat; I heal half; see B", descriptionFull : "A tendril of inky darkness reaches out from you, touching a creature you can see within range to drain life from it. The target must make a Dexterity saving throw. On a successful save, the target takes 2d8 necrotic damage, and the spell ends. On a failed save, the target takes 4d8 necrotic damage, and until the spell ends, you can use your action on each of your turns to automatically deal 4d8 necrotic damage to the target. The spell ends if you use your action to do anything else, if the target is ever outside the spell's range, or if the target has total cover from you." + "\n " + "Whenever the spell deals damage to a target, you regain hit points equal to half the amount of necrotic damage the target takes." + AtHigherLevels + "When you cast this spell using a spell slot of 6th level or higher, the damage increases by 1d8 for each slot level above 5th.", }; SpellsList["far step"] = { name : "Far Step", classes : ["sorcerer", "warlock", "wizard"], source : [["X", 155]], level : 5, school : "Conj", time : "1 bns", range : "Self", components : "V", duration : "Conc, 1 min", description : "At casting and as bonus action for duration, I can teleport 60 ft to a space I can see", descriptionFull : "You teleport up to 60 feet to an unoccupied space you can see. On each of your turns before the spell ends, you can use a bonus action to teleport in this way again." }; SpellsList["find greater steed"] = { name : "Find Greater Steed", classes : ["paladin"], source : [["X", 156]], level : 4, school : "Conj", time : "10 min", range : "30 ft", components : "V,S", duration : "Instantaneous", description : "Gain the services of a steed; can communicate with it telepathically; can share spells with it; see book", descriptionFull : "You summon a spirit that assumes the form of a loyal, majestic mount. Appearing in an unoccupied space within range, the spirit takes on a form you choose: a griffon, a pegasus, a peryton, a dire wolf, a rhinoceros, or a saber-toothed tiger. The creature has the statistics provided in the Monster Manual for the chosen form, though it is a celestial, a fey, or a fiend (your choice) instead of its normal creature type. Additionally, if it has an Intelligence score of 5 or lower, its Intelligence becomes 6, and it gains the ability to understand one language of your choice that you speak." + "\n " + "You control the mount in combat. While the mount is within 1 mile of you, you can communicate with it telepathically. While mounted on it, you can make any spell you cast that targets only you also target the mount." + "\n " + "The mount disappears temporarily when it drops to 0 hit points or when you dismiss it as an action. Casting this spell again re-summons the bonded mount, with all its hit points restored and any conditions removed." + "\n " + "You can't have more than one mount bonded by this spell or find steed at the same time. As an action, you can release a mount from its bond, causing it to disappear permanently." + "\n " + "Whenever the mount disappears, it leaves behind any objects it was wearing or carrying." }; SpellsList["guardian of nature"] = { name : "Guardian of Nature", classes : ["druid", "ranger"], source : [["X", 157]], level : 4, school : "Trans", time : "1 bns", range : "Self", components : "V", duration : "Conc, 1 min", description : "I transform into a Primal Beast (offensive bonuses) or a Great Tree (defensive bonuses); see book", descriptionFull : "A nature spirit answers your call and transforms you into a powerful guardian. The transformation lasts until the spell ends. You choose one of the following forms to assume: Primal Beast or Great Tree." + "\n\n" + toUni("Primal Beast") + ": Bestial fur covers your body, your facial features become feral, and you gain the following benefits:" + "\n \u2022 " + "Your walking speed increases by 10 feet." + "\n \u2022 " + "You gain darkvision with a range of 120 feet." + "\n \u2022 " + "You make Strength-based attack rolls with advantage." + "\n \u2022 " + "Your melee weapon attacks deal an extra 1d6 force damage on a hit." + "\n\n" + toUni("Great Tree") + ": Your skin appears barky, leaves sprout from your hair, and you gain the following benefits:" + "\n \u2022 " + "You gain 10 temporary hit points." + "\n \u2022 " + "You make Constitution saving throws with advantage." + "\n \u2022 " + "You make Dexterity- and Wisdom-based attack rolls with advantage." + "\n \u2022 " + "While you are on the ground, the ground within 15 feet of you is difficult terrain for your enemies." }; SpellsList["healing spirit"] = { // limited usages (https://media.wizards.com/2020/dnd/downloads/XGtE-Errata.pdf) name : "Healing Spirit", classes : ["druid", "ranger"], source : [["X", 157]], level : 2, school : "Conj", time : "1 bns", range : "60 ft", components : "V,S", duration : "Conc, 1 min", description : "5-ft cube; any living crea I see start/enter heals 1d6+1d6/SL HP; 1+spell mod uses; bns a move it 30 ft", descriptionShorter : "5-ft cube; any living start/enter heals 1d6+1d6/SL HP; 1+spell mod uses; bns a move 30 ft", descriptionFull : "You call forth a nature spirit to soothe the wounded. The intangible spirit appears in a space that is a 5-foot cube you can see within range. The spirit looks like a transparent beast or fey (your choice)." + "\n " + "Until the spell ends, whenever you or a creature you can see moves into the spirit's space for the first time on a turn or starts its turn there, you can cause the spirit to restore 1d6 hit points to that creature (no action required). The spirit can't heal constructs or undead. The spirit can heal a number of times equal to 1 + your spellcasting ability modifier (minimum of twice). After healing that number of times, the spirit disappears." + "\n " + "As a bonus action on your turn, you can move the spirit up to 30 feet to a space you can see." + AtHigherLevels + "When you cast this spell using a spell slot of 3rd level or higher, the healing increases by 1d6 for each slot level above 2nd." }; SpellsList["holy weapon"] = { name : "Holy Weapon", classes : ["cleric", "paladin"], source : [["X", 157]], level : 5, school : "Evoc", time : "1 bns", range : "Touch", components : "V,S", duration : "Conc, 1 h", save : "Con", description : "Wea +2d8 Radiant dmg; bns a end spell: 30-ft rad all crea 4d8 Radiant dmg, blind; save half, no blind", descriptionShorter : "wea +2d8 Radiant dmg; bns a end: 30-ft rad all 4d8 Radiant dmg, blind; save half, no blind", descriptionFull : "You imbue a weapon you touch with holy power. Until the spell ends, the weapon emits bright light in a 30-foot radius and dim light for an additional 30 feet. In addition, weapon attacks made with it deal an extra 2d8 radiant damage on a hit. If the weapon isn't already a magic weapon, it becomes one for the duration." + "\n " + "As a bonus action on your turn, you can dismiss this spell and cause the weapon to emit a burst of radiance. Each creature of your choice that you can see within 30 feet of the weapon must make a Constitution saving throw. On a failed save, a creature takes 4d8 radiant damage, and it is blinded for 1 minute. On a successful save, a creature takes half as much damage and isn't blinded. At the end of each of its turns, a blinded creature can make a Constitution saving throw, ending the effect on itself on a success.", dynamicDamageBonus : { multipleDmgMoments : false, skipDmgGroupIfNotMultiple : /(wea .*?radiant dmg.*?)/i } }; SpellsList["illusory dragon"] = { name : "Illusory Dragon", classes : ["wizard"], source : [["X", 157]], level : 8, school : "Illus", time : "1 a", range : "120 ft", components : "S", duration : "Conc, 1 min", save : "W/I", description : "Huge shadowy dragon; see: Wis save or fright.; bns a move 60 ft \u0026 breath wea 7d6 dmg; Int save half", descriptionShorter : "Huge illus.; see: Wis save or fright.; bns a move 60 ft \u0026 breath wea 7d6 dmg; Int save half", descriptionFull : "By gathering threads of shadow material from the Shadowfell, you create a Huge shadowy dragon in an unoccupied space that you can see within range. The illusion lasts for the spell's duration and occupies its space, as if it were a creature." + "\n " + "When the illusion appears, any of your enemies that can see it must succeed on a Wisdom saving throw or become frightened of it for 1 minute. If a frightened creature ends its turn in a location where it doesn't have line of sight to the illusion, it can repeat the saving throw, ending the effect on itself on a success." + "\n " + "As a bonus action on your turn, you can move the illusion up to 60 feet. At any point during its movement, you can cause it to exhale a blast of energy in a 60-foot cone originating from its space. When you create the dragon, choose a damage type: acid, cold, fire, lightning, necrotic, or poison. Each creature in the cone must make an Intelligence saving throw, taking 7d6 damage of the chosen damage type on a failed save, or half as much damage on a successful one." + "\n " + "The illusion is tangible because of the shadow stuff used to create it, but attacks miss it automatically, it succeeds on all saving throws, and it is immune to all damage and conditions. A creature that uses an action to examine the dragon can determine that it is an illusion by succeeding on an Intelligence (Investigation) check against your spell save DC. If a creature discerns the illusion for what it is, the creature can see through it and has advantage on saving throws against its breath.", dynamicDamageBonus : { multipleDmgTypes : { dmgTypes : ["radiant", "necrotic"], inDescriptionAs : '' } } }; SpellsList["infernal calling"] = { name : "Infernal Calling", classes : ["warlock", "wizard"], source : [["X", 158]], level : 5, school : "Conj", time : "1 min", range : "90 ft", components : "V,S,M\u0192", compMaterial : "A ruby worth at least 999 gp", duration : "Conc, 1 h", description : "Summon 1 devil of CR 6+1/SL; hostile to all, obeys my command if to its liking or Cha check; see B", descriptionFull : "Uttering a dark incantation, you summon a devil from the Nine Hells. You choose the devil's type, which must be one of challenge rating 6 or lower, such as a barbed devil or a bearded devil. The devil appears in an unoccupied space that you can see within range. The devil disappears when it drops to 0 hit points or when the spell ends." + "\n " + "The devil is unfriendly toward you and your companions. Roll initiative for the devil, which has its own turns. It is under the Dungeon Master's control and acts according to its nature on each of its turns, which might result in its attacking you if it thinks it can prevail, or trying to tempt you to undertake an evil act in exchange for limited service. The DM has the creature's statistics." + "\n " + "On each of your turns, you can try to issue a verbal command to the devil (no action required by you). It obeys the command if the likely outcome is in accordance with its desires, especially if the result would draw you toward evil. Otherwise, you must make a Charisma (Deception, Intimidation, or Persuasion) check contested by its Wisdom (Insight) check. You make the check with advantage if you say the devil's true name. If your check fails, the devil becomes immune to your verbal commands for the duration of the spell, though it can still carry out your commands if it chooses. If your check succeeds, the devil carries out your command \u2014 such as “attack my enemies,” “explore the room ahead,” or “bear this message to the queen” \u2014 until it completes the activity, at which point it returns to you to report having done so." + "\n " + "If your concentration ends before the spell reaches its full duration, the devil doesn't disappear if it has become immune to your verbal commands. Instead, it acts in whatever manner it chooses for 3d6 minutes, and then it disappears." + "\n " + "If you possess an individual devil's talisman, you can summon that devil if it is of the appropriate challenge rating plus 1, and it obeys all your commands, with no Charisma checks required." + AtHigherLevels + "When you cast this spell using a spell slot of 6th level or higher, the challenge rating increases by 1 for each slot level above 5th." }; SpellsList["infestation"] = { name : "Infestation", classes : ["druid", "sorcerer", "warlock", "wizard"], source : [["X", 158]], level : 0, school : "Conj", time : "1 a", range : "30 ft", components : "V,S,M", compMaterial : "A living flea", duration : "Instantaneous", save : "Con", description : "1 crea save or 1d6 Poison dmg and moved 5 ft in random direction; +1d6 at CL 5, 11, and 17", descriptionCantripDie : "1 crea save or `CD`d6 Poison dmg and moved 5 ft in random direction", descriptionFull : "You cause a cloud of mites, fleas, and other parasites to appear momentarily on one creature you can see within range. The target must succeed on a Constitution saving throw, or it takes 1d6 poison damage and moves 5 feet in a random direction if it can move and its speed is at least 5 feet. Roll a d4 for the direction:" + "\n\n" + toUni("d4") + "\t" + toUni("Direction") + "\n 1\tNorth" + "\n 2\tSouth" + "\n 3\tEast" + "\n 4\tWest" + "\n\n " + "This movement doesn't provoke opportunity attacks, and if the direction rolled is blocked, the target doesn't move." + "\n " + "The spell's damage increases by 1d6 when you reach 5th level (2d6), 11th level (3d6), and 17th level (4d6)." }; SpellsList["invulnerability"] = { name : "Invulnerability", classes : ["wizard"], source : [["X", 160]], level : 9, school : "Abjur", time : "1 a", range : "Self", components : "V,S,M\u2020", compMaterial : "A small piece of adamantine worth at least 500 gp, which the spell consumes", duration : "Conc, 10 min", description : "Immune to all damage until the spell ends (500gp cons.)", descriptionFull : "You are immune to all damage until the spell ends." }; SpellsList["life transference"] = { // can't reduce damage taken (https://media.wizards.com/2020/dnd/downloads/XGtE-Errata.pdf) name : "Life Transference", classes : ["cleric", "wizard"], source : [["X", 160]], level : 3, school : "Necro", time : "1 a", range : "30 ft", components : "V,S", duration : "Instantaneous", description : "I take 4d8+1d8/SL Necrotic dmg (in full) and 1 crea in range I can see heals twice that in HP", descriptionFull : "You sacrifice some of your health to mend another creature's injuries. You take 4d8 necrotic damage, which can't be reduced in any way, and one creature of your choice that you can see within range regains a number of hit points equal to twice the necrotic damage you take." + AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d8 for each slot level above 3rd." }; SpellsList["maddening darkness"] = { name : "Maddening Darkness", classes : ["warlock", "wizard"], source : [["X", 160]], level : 8, school : "Evoc", time : "1 a", range : "150 ft", components : "V,M", compMaterial : "A drop of pitch mixed with a drop of mercury", duration : "Conc, 10 min", save : "Wis", description : "60-ft rad darkness; darkvision, no light works; all crea starting turn in 8d8 Psychic dmg, save halves", descriptionShorter : "60-ft rad darkness; darkvision, no light works; all start turn in 8d8 Psychic dmg, save half", descriptionFull : "Magical darkness spreads from a point you choose within range to fill a 60-foot-radius sphere until the spell ends. The darkness spreads around corners. A creature with darkvision can't see through this darkness. Nonmagical light, as well as light created by spells of 8th level or lower, can't illuminate the area." + "\n " + "Shrieks, gibbering, and mad laughter can be heard within the sphere. Whenever a creature starts its turn in the sphere, it must make a Wisdom saving throw, taking 8d8 psychic damage on a failed save, or half as much damage on a successful one." }; SpellsList["mass polymorph"] = { name : "Mass Polymorph", classes : ["bard", "sorcerer", "wizard"], source : [["X", 160]], level : 9, school : "Trans", time : "1 a", range : "120 ft", components : "V,S,M", compMaterial : "A caterpillar cocoon", duration : "Conc, 1 h", save : "Wis", description : "10 crea save or take chosen beast form of CR \u2264 its CR or half its char. level; can only act as beast; see B", descriptionFull : "You transform up to ten creatures of your choice that you can see within range. An unwilling target must succeed on a Wisdom saving throw to resist the transformation. An unwilling shapechanger automatically succeeds on the save." + "\n " + "Each target assumes a beast form of your choice, and you can choose the same form or different ones for each target. The new form can be any beast you have seen whose challenge rating is equal to or less than the target's (or half the target's level, if the target doesn't have a challenge rating). The target's game statistics, including mental ability scores, are replaced by the statistics of the chosen beast, but the target retains its hit points, alignment, and personality." + "\n " + "Each target gains a number of temporary hit points equal to the hit points of its new form. These temporary hit points can't be replaced by temporary hit points from another source. A target reverts to its normal form when it has no more temporary hit points or it dies. If the spell ends before then, the creature loses all its temporary hit points and reverts to its normal form." + "\n " + "The creature is limited in the actions it can perform by the nature of its new form. It can't speak, cast spells, or do anything else that requires hands or speech." + "\n " + "The target's gear melds into the new form. The target can't activate, use, wield, or otherwise benefit from any of its equipment." }; SpellsList["mental prison"] = { name : "Mental Prison", classes : ["sorcerer", "warlock", "wizard"], source : [["X", 161]], level : 6, school : "Illus", time : "1 a", range : "60 ft", components : "S", duration : "Conc, 1 min", save : "Int", description : "1 crea 5d10 Psychic dmg; save or restrained, blind, deaf, and if moved: 10d10 dmg, ends; charm effect", descriptionShorter : "1 crea 5d10 Psychic dmg; save or restrained, blind, deaf, if move: 10d10 dmg, ends; charm", descriptionFull : "You attempt to bind a creature within an illusory cell that only it perceives. One creature you can see within range must make an Intelligence saving throw. The target succeeds automatically if it is immune to being charmed. On a successful save, the target takes 5d10 psychic damage, and the spell ends. On a failed save, the target takes 5d10 psychic damage, and you make the area immediately around the target's space appear dangerous to it in some way. You might cause the target to perceive itself as being surrounded by fire, floating razors, or hideous maws filled with dripping teeth. Whatever form the illusion takes, the target can't see or hear anything beyond it and is restrained for the spell's duration. If the target is moved out of the illusion, makes a melee attack through it, or reaches any part of its body through it, the target takes 10d10 psychic damage, and the spell ends.", dynamicDamageBonus : { multipleDmgMoments : false, extraDmgGroupsSameType : /(if moved?: )((?:\+?\d+d?\d*)+)/i } }; SpellsList["mighty fortress"] = { name : "Mighty Fortress", classes : ["wizard"], source : [["X", 161]], level : 8, school : "Conj", time : "1 min", range : "1 mile", components : "V,S,M\u2020", compMaterial : "A diamond worth at least 500 gp, which the spell consumes", duration : "Instantaneous", description : "Create a stone fortress 120 ft on a side for 7 days; see book for effects (500gp cons.)", descriptionFull : "A fortress of stone erupts from a square area of ground of your choice that you can see within range. The area is 120 feet on each side, and it must not have any buildings or other structures on it. Any creatures in the area are harmlessly lifted up as the fortress rises." + "\n " + "The fortress has four turrets with square bases, each one 20 feet on a side and 30 feet tall, with one turret on each corner. The turrets are connected to each other by stone walls that are each 80 feet long, creating an enclosed area. Each wall is 1 foot thick and is composed of panels that are 10 feet wide and 20 feet tall. Each panel is contiguous with two other panels or one other panel and a turret. You can place up to four stone doors in the fortress's outer wall." + "\n " + "A small keep stands inside the enclosed area. The keep has a square base that is 50 feet on each side, and it has three floors with 10-foot-high ceilings. Each of the floors can be divided into as many rooms as you like, provided each room is at least 5 feet on each side. The floors of the keep are connected by stone staircases, its walls are 6 inches thick, and interior rooms can have stone doors or open archways as you choose. The keep is furnished and decorated however you like, and it contains sufficient food to serve a nine-course banquet for up to 100 people each day. Furnishings, food, and other objects created by this spell crumble to dust if removed from the fortress." + "\n " + "A staff of one hundred invisible servants obeys any command given to them by creatures you designate when you cast the spell. Each servant functions as if created by the unseen servant spell." + "\n " + "The walls, turrets, and keep are all made of stone that can be damaged. Each 10-foot-by-10-foot section of stone has AC 15 and 30 hit points per inch of thickness. It is immune to poison and psychic damage. Reducing a section of stone to 0 hit points destroys it and might cause connected sections to buckle and collapse at the DM's discretion." + "\n " + "After 7 days or when you cast this spell somewhere else, the fortress harmlessly crumbles and sinks back into the ground, leaving any creatures that were inside it safely on the ground." + "\n " + "Casting this spell on the same spot once every 7 days for a year makes the fortress permanent." }; SpellsList["mind spike"] = { // +1d8 at higher levels errata (https://media.wizards.com/2020/dnd/downloads/XGtE-Errata.pdf) name : "Mind Spike", classes : ["sorcerer", "warlock", "wizard"], source : [["X", 162]], level : 2, school : "Div", time : "1 a", range : "60 ft", components : "S", duration : "Conc, 1 h", save : "Wis", description : "1 crea 3d8+1d8/SL Psychic dmg, know its location, can't be invis for me; save half, no other benefits", descriptionShorter : "1 crea 3d8+1d8/SL Psychic dmg, know its location, can't be invis for me; save half, not rest", descriptionFull : "You reach into the mind of one creature you can see within range. The target must make a Wisdom saving throw, taking 3d8 psychic damage on a failed save, or half as much damage on a successful one. On a failed save, you also always know the target's location until the spell ends, but only while the two of you are on the same plane of existence. While you have this knowledge, the target can't become hidden from you, and if it's invisible, it gains no benefit from that condition against you." + AtHigherLevels + "When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d8 for each slot level above 2nd.", dynamicDamageBonus : { multipleDmgMoments : false } }; SpellsList["negative energy flood"] = { name : "Negative Energy Flood", classes : ["warlock", "wizard"], source : [["X", 163]], level : 5, school : "Necro", time : "1 a", range : "60 ft", components : "V,M", compMaterial : "A broken bone and a square of black silk", duration : "Instantaneous", save : "Con", description : "1 crea: living 5d12 Necrotic dmg, save halves, rises as zombie if killed; undead 5d12/2 temp HP", descriptionFull : "You send ribbons of negative energy at one creature you can see within range. Unless the target is undead, it must make a Constitution saving throw, taking 5d12 necrotic damage on a failed save, or half as much damage on a successful one. A target killed by this damage rises up as a zombie at the start of your next turn. The zombie pursues whatever creature it can see that is closest to it. Statistics for the zombie are in the Monster Manual." + "\n " + "If you target an undead with this spell, the target doesn't make a saving throw. Instead, roll 5d12. The target gains half the total as temporary hit points." }; SpellsList["power word pain"] = { name : "Power Word Pain", classes : ["sorcerer", "warlock", "wizard"], source : [["X", 163]], level : 7, school : "Ench", time : "1 a", range : "60 ft", components : "V", duration : "Instantaneous", description : "1 crea with 100 HP or less disadv. atk/check/save, conc. save to cast; save/rnd to end; charm effect", descriptionFull : "You speak a word of power that causes waves of intense pain to assail one creature you can see within range. If the target has 100 hit points or fewer, it is subject to crippling pain. Otherwise, the spell has no effect on it. A target is also unaffected if it is immune to being charmed." + "\n " + "While the target is affected by crippling pain, any speed it has can be no higher than 10 feet. The target also has disadvantage on attack rolls, ability checks, and saving throws, other than Constitution saving throws. Finally, if the target tries to cast a spell, it must first succeed on a Constitution saving throw, or the casting fails and the spell is wasted." + "\n " + "A target suffering this pain can make a Constitution saving throw at the end of each of its turns. On a successful save, the pain ends." }; SpellsList["primal savagery"] = { name : "Primal Savagery", classes : ["druid"], source : [["X", 163]], level : 0, school : "Trans", time : "1 a", range : "Self", components : "S", duration : "Instantaneous", description : "Melee spell attack, 5 ft range, for 1d10 Acid dmg; +1d10 at CL 5, 11, and 17", descriptionCantripDie : "Melee spell attack, 5 ft range, for `CD`d10 Acid dmg", descriptionFull : "You channel primal magic to cause your teeth or fingernails to sharpen, ready to deliver a corrosive attack. Make a melee spell attack against one creature within 5 feet of you. On a hit, the target takes 1d10 acid damage. After you make the attack, your teeth or fingernails return to normal." + "\n " + "The spell's damage increases by 1d10 when you reach 5th level (2d10), 11th level (3d10), and 17th level (4d10)." }; SpellsList["psychic scream"] = { name : "Psychic Scream", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["X", 163]], level : 9, school : "Ench", time : "1 a", range : "90 ft", components : "S", duration : "Instantaneous", save : "Int", description : "10 crea Int>2 save or 14d6 Psychic dmg and stunned; save halves, no stun; end of turn save to stop", descriptionFull : "You unleash the power of your mind to blast the intellect of up to ten creatures of your choice that you can see within range. Creatures that have an Intelligence score of 2 or lower are unaffected." + "\n " + "Each target must make an Intelligence saving throw. On a failed save, a target takes 14d6 psychic damage and is stunned. On a successful save, a target takes half as much damage and isn't stunned. If a target is killed by this damage, its head explodes, assuming it has one." + "\n " + "A stunned target can make an Intelligence saving throw at the end of each of its turns. On a successful save, the stunning effect ends." }; SpellsList["scatter"] = { name : "Scatter", classes : ["sorcerer", "warlock", "wizard"], source : [["X", 164]], level : 6, school : "Conj", time : "1 a", range : "30 ft", components : "V", duration : "Instantaneous", save : "Wis", description : "Up to 5 creatures in range, save or teleported 120 ft to a different space I can see on the ground", descriptionFull : "The air quivers around up to five creatures of your choice that you can see within range. An unwilling creature must succeed on a Wisdom saving throw to resist this spell. You teleport each affected target to an unoccupied space that you can see within 120 feet of you. That space must be on the ground or on a floor." }; SpellsList["shadow blade"] = { name : "Shadow Blade", classes : ["sorcerer", "warlock", "wizard"], source : [["X", 164]], level : 2, school : "Illus", time : "1 bns", range : "Self", components : "V,S", duration : "Conc, 1 min", description : "Sword 2d8 Psychic dmg, finesse, light, thrown (20/60 ft), adv. if target in dim/dark; +1d8 at SL3/5/7", descriptionMetric : "Sword: 2d8 Psychic dmg, finesse, light, thrown (6/18 m), adv. if target in dim/dark; +1d8 at SL3/5/7", descriptionShorter : "Sword 2d8 Psychic dmg, finesse, light, thrown (20/60ft), adv. in dim/dark; +1d8 SL3/5/7", descriptionShorterMetric : "Sword 2d8 Psychic dmg, finesse, light, thrown (6/18 m), adv. in dim/dark; +1d8 SL3/5/7", descriptionFull : "You weave together threads of shadow to create a sword of solidified gloom in your hand. This magic sword lasts until the spell ends. It counts as a simple melee weapon with which you are proficient. It deals 2d8 psychic damage on a hit and has the finesse, light, and thrown properties (range 20/60). In addition, when you use the sword to attack a target that is in dim light or darkness, you make the attack roll with advantage." + "\n " + "If you drop the weapon or throw it, it dissipates at the end of the turn. Thereafter, while the spell persists, you can use a bonus action to cause the sword to reappear in your hand." + AtHigherLevels + "When you cast this spell using a 3rd- or 4th-level spell slot, the damage increases to 3d8. When you cast it using a 5th- or 6th-level spell slot, the damage increases to 4d8. When you cast it using a spell slot of 7th level or higher, the damage increases to 5d8." }; WeaponsList["shadow blade"] = { regExpSearch : /(?=.*shadow)(?=.*blade).*$/i, name : "Shadow Blade", source : [["X", 164]], list : "spell", ability : 1, type : "Simple", damage : [2, 8, "psychic"], range : "Melee, 20/60 ft", description : "Finesse, light, thrown; +1d8 at SL3/5/7; Adv. if target in dim light/darkness", abilitytodamage : true, isAlwaysProf : true, useSpellcastingAbility : false }; SpellsList["shadow of moil"] = { name : "Shadow of Moil", classes : ["warlock"], source : [["X", 164]], level : 4, school : "Necro", time : "1 a", range : "Self", components : "V,S,M\u0192", compMaterial : "An undead eyeball encased in a gem worth at least 150 gp", duration : "Conc, 1 min", description : "Me: heavy obsc., Radiant resistance; 10-ft rad: 1 step darker, hit vs. me get 2d8 Necrotic dmg (150gp)", descriptionShorter : "Me: hvy obsc., Radiant resist; 10-ft rad: 1 step darker, hit vs. me 2d8 Necrotic dmg (150gp)", descriptionFull : "Flame-like shadows wreathe your body until the spell ends, causing you to become heavily obscured to others. The shadows turn dim light within 10 feet of you into darkness, and bright light in the same area to dim light." + "\n " + "Until the spell ends, you have resistance to radiant damage. In addition, whenever a creature within 10 feet of you hits you with an attack, the shadows lash out at that creature, dealing it 2d8 necrotic damage." }; SpellsList["sickening radiance"] = { name : "Sickening Radiance", classes : ["sorcerer", "warlock", "wizard"], source : [["X", 164]], level : 4, school : "Evoc", time : "1 a", range : "120 ft", components : "V,S", duration : "Conc, 10 min", save : "Con", description : "30-ft rad all enter/start turn save or 4d10 Radiant dmg, 1 level of exhaustion, and emit 5-ft rad light", descriptionShorter : "30-ft rad all enter/start turn save or 4d10 Radiant dmg, 1 lvl exhaust., emit 5-ft rad light", descriptionFull : "Dim, greenish light spreads within a 30-foot-radius sphere centered on a point you choose within range. The light spreads around corners, and it lasts until the spell ends." + "\n " + "When a creature moves into the spell's area for the first time on a turn or starts its turn there, that creature must succeed on a Constitution saving throw or take 4d10 radiant damage, and it suffers one level of exhaustion and emits a dim, greenish light in a 5-foot radius. This light makes it impossible for the creature to benefit from being invisible. The light and any levels of exhaustion caused by this spell go away when the spell ends." }; SpellsList["skill empowerment"] = { name : "Skill Empowerment", classes : ["artificer", "bard", "sorcerer", "wizard"], source : [["X", 165]], level : 5, school : "Trans", time : "1 a", range : "Touch", components : "V,S", duration : "Conc, 1 h", description : "1 willing creature gains expertise in one skill of my choice that it is proficient with for the duration", descriptionFull : "Your magic deepens a creature's understanding of its own talent. You touch one willing creature and give it expertise in one skill of your choice; until the spell ends, the creature doubles its proficiency bonus for ability checks it makes that use the chosen skill." + "\n " + "You must choose a skill in which the target is proficient and that isn't already benefiting from an effect, such as Expertise, that doubles its proficiency bonus." }; SpellsList["snare"] = { name : "Snare", classes : ["artificer", "druid", "ranger", "wizard"], source : [["X", 165]], level : 1, school : "Abjur", time : "1 min", range : "Touch", components : "S,M\u2020", compMaterial : "25 feet of rope, which the spell consumes", duration : "8 h, till trigger", save : "Dex", description : "5-ft rad trap; Investigation vs spell DC to see; save or restrained 3 ft in the air; save each rnd (5sp)", descriptionFull : "As you cast this spell, you use the rope to create a circle with a 5-foot radius on the ground or the floor. When you finish casting, the rope disappears and the circle becomes a magic trap." + "\n " + "This trap is nearly invisible, requiring a successful Intelligence (Investigation) check against your spell save DC to be discerned." + "\n " + "The trap triggers when a Small, Medium, or Large creature moves onto the ground or the floor in the spell's radius. That creature must succeed on a Dexterity saving throw or be magically hoisted into the air, leaving it hanging upside down 3 feet above the ground or the floor. The creature is restrained there until the spell ends." + "\n " + "A restrained creature can make a Dexterity saving throw at the end of each of its turns, ending the effect on itself on a success. Alternatively, the creature or someone else who can reach it can use an action to make an Intelligence (Arcana) check against your spell save DC. On a success, the restrained effect ends." + "\n " + "After the trap is triggered, the spell ends when no creature is restrained by it." }; SpellsList["soul cage"] = { name : "Soul Cage", classes : ["warlock", "wizard"], source : [["X", 165]], level : 6, school : "Necro", time : "1 rea", timeFull : "1 reaction, which you take when a humanoid you can see within 60 feet of you dies", range : "60 ft", components : "V,S,M\u0192", compMaterial : "A tiny silver cage worth 100 gp", duration : "8 h", description : "As a reaction when humanoid in range dies, I capture their soul in a tiny cage; see book (100gp)", descriptionFull : "This spell snatches the soul of a humanoid as it dies and traps it inside the tiny cage you use for the material component. A stolen soul remains inside the cage until the spell ends or until you destroy the cage, which ends the spell. While you have a soul inside the cage, you can exploit it in any of the ways described below. You can use a trapped soul up to six times. Once you exploit a soul for the sixth time, it is released, and the spell ends. While a soul is trapped, the dead humanoid it came from can't be revived." + "\n " + toUni("Steal Life") + ": You can use a bonus action to drain vigor from the soul and regain 2d8 hit points." + "\n " + toUni("Query Soul") + ": You ask the soul a question (no action required) and receive a brief telepathic answer, which you can understand regardless of the language used. The soul knows only what it knew in life, but it must answer you truthfully and to the best of its ability. The answer is no more than a sentence or two and might be cryptic." + "\n " + toUni("Borrow Experience") + ": You can use a bonus action to bolster yourself with the soul's life experience, making your next attack roll, ability check, or saving throw with advantage. If you don't use this benefit before the start of your next turn, it is lost." + "\n " + toUni("Eyes of the Dead") + ": You can use an action to name a place the humanoid saw in life, which creates an invisible sensor somewhere in that place if it is on the plane of existence you're currently on. The sensor remains for as long as you concentrate, up to 10 minutes (as if you were concentrating on a spell). You receive visual and auditory information from the sensor as if you were in its space using your senses" + "\n " + "A creature that can see the sensor (such as one using see invisibility or truesight) sees a translucent image of the tormented humanoid whose soul you caged." }; SpellsList["steel wind strike"] = { name : "Steel Wind Strike", classes : ["ranger", "wizard"], source : [["X", 166]], level : 5, school : "Conj", time : "1 a", range : "30 ft", components : "S,M\u0192", compMaterial : "A melee weapon worth at least 1 sp", duration : "Instantaneous", description : "Melee spell attack vs. 5 crea in range; 6d10 Force dmg on hit; after, I teleport next to one target", descriptionFull : "You flourish the weapon used in the casting and then vanish to strike like the wind. Choose up to five creatures you can see within range. Make a melee spell attack against each target. On a hit, a target takes 6d10 force damage." + "\n " + "You can then teleport to an unoccupied space you can see within 5 feet of one of the targets you hit or missed." }; SpellsList["summon greater demon"] = { name : "Summon Greater Demon", classes : ["warlock", "wizard"], source : [["X", 166]], level : 4, school : "Conj", time : "1 a", range : "60 ft", components : "V,S,M", compMaterial : "A vial of blood from a humanoid killed within the past 24 hours", duration : "Conc, 1 h", save : "Cha", description : "Summon 1 demon of CR 5+1/SL that obeys me; end of each of its turn, save to break free; see book", descriptionFull : "You utter foul words, summoning one demon from the chaos of the Abyss. You choose the demon's type, which must be one of challenge rating 5 or lower, such as a shadow demon or a barlgura. The demon appears in an unoccupied space you can see within range, and the demon disappears when it drops to 0 hit points or when the spell ends." + "\n " + "Roll initiative for the demon, which has its own turns. When you summon it and on each of your turns thereafter, you can issue a verbal command to it (requiring no action on your part), telling it what it must do on its next turn. If you issue no command, it spends its turn attacking any creature within reach that has attacked it." + "\n " + "At the end of each of the demon's turns, it makes a Charisma saving throw. The demon has disadvantage on this saving throw if you say its true name. On a failed save, the demon continues to obey you. On a successful save, your control of the demon ends for the rest of the duration, and the demon spends its turns pursuing and attacking the nearest non-demons to the best of its ability. If you stop concentrating on the spell before it reaches its full duration, an uncontrolled demon doesn't disappear for 1d6 rounds if it still has hit points." + "\n " + "As part of casting the spell, you can form a circle on the ground with the blood used as a material component. The circle is large enough to encompass your space. While the spell lasts, the summoned demon can't cross the circle or harm it, and it can't target anyone within it. Using the material component in this manner consumes it when the spell ends." + AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, the challenge rating increases by 1 for each slot level above 4th." }; SpellsList["summon lesser demons"] = { name : "Summon Lesser Demons", classes : ["warlock", "wizard"], source : [["X", 167]], level : 3, school : "Conj", time : "1 a", range : "60 ft", components : "V,S,M", compMaterial : "A vial of blood from a humanoid killed within the past 24 hours", duration : "Conc, 1 h", description : "Summon up to 8 (16 at SL6, 24 at SL8) CR \u22641 1 demons, DM choice; attack nearest non-demons", descriptionFull : "You utter foul words, summoning demons from the chaos of the Abyss. Roll on the following table to determine what appears." + "\n\n " + toUni("d6") + "\t" + toUni("Demons Summoned") + "\n 1-2\tTwo demons of challenge rating 1 or lower" + "\n 3-4\tFour demons of challenge rating 1/2 or lower" + "\n 5-6\tEight demons of challenge rating 1/4 or lower" + "\n\n " + "The DM chooses the demons, such as manes or dretches, and you choose the unoccupied spaces you can see within range where they appear. A summoned demon disappears when it drops to 0 hit points or when the spell ends." + "\n " + "The demons are hostile to all creatures, including you. Roll initiative for the summoned demons as a group, which has its own turns. The demons pursue and attack the nearest non-demons to the best of their ability." + "\n " + "As part of casting the spell, you can form a circle on the ground with the blood used as a material component. The circle is large enough to encompass your space. While the spell lasts, the summoned demons can't cross the circle or harm it, and they can't target anyone within it. Using the material component in this manner consumes it when the spell ends." + AtHigherLevels + "When you cast this spell using a spell slot of 6th or 7th level, you summon twice as many demons. If you cast it using a spell slot of 8th or 9th level, you summon three times as many demons." }; SpellsList["synaptic static"] = { name : "Synaptic Static", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["X", 167]], level : 5, school : "Ench", time : "1 a", range : "120 ft", components : "V,S", duration : "Instant, 1 min", save : "Int", description : "20-ft rad all crea Int>2 save or 8d6 Psychic dmg, -1d6 on atks/check/conc. save; save half, no -1d6", descriptionShorter : "20-ft rad all crea Int>2 save or 8d6 Psychic dmg, -1d6 on atk/chk/conc save; save half, no -1d6", descriptionFull : "You choose a point within range and cause psychic energy to explode there. Each creature in a 20-foot-radius sphere centered on that point must make an Intelligence saving throw. A creature with an Intelligence score of 2 or lower can't be affected by this spell. A target takes 8d6 psychic damage on a failed save, or half as much damage on a successful one." + "\n " + "After a failed save, a target has muddled thoughts for 1 minute. During that time, it rolls a d6 and subtracts the number rolled from all its attack rolls and ability checks, as well as its Constitution saving throws to maintain concentration. The target can make an Intelligence saving throw at the end of each of its turns, ending the effect on itself on a success." }; SpellsList["temple of the gods"] = { name : "Temple of the Gods", classes : ["cleric"], source : [["X", 167]], level : 7, school : "Conj", time : "1 h", range : "120 ft", components : "V,S,M\u0192", compMaterial : "A holy symbol worth at least 5 gp", duration : "24 h", description : "Create a temple 120 ft on a side to the deity of a holy symbol used; see book for effects", descriptionFull : "You cause a temple to shimmer into existence on ground you can see within range. The temple must fit within an unoccupied cube of space, up to 120 feet on each side. The temple remains until the spell ends. It is dedicated to whatever god, pantheon, or philosophy is represented by the holy symbol used in the casting." + "\n " + "You make all decisions about the temple's appearance. The interior is enclosed by a floor, walls, and a roof, with one door granting access to the interior and as many windows as you wish. Only you and any creatures you designate when you cast the spell can open or close the door." + "\n " + "The temple's interior is an open space with an idol or altar at one end. You decide whether the temple is illuminated and whether that illumination is bright light or dim light. The smell of burning incense fills the air within, and the temperature is mild." + "\n " + "The temple opposes types of creatures you choose when you cast this spell. Choose one or more of the following: celestials, elementals, fey, fiends, or undead. If a creature of the chosen type attempts to enter the temple, that creature must make a Charisma saving throw. On a failed save, it can't enter the temple for 24 hours. Even if the creature can enter the temple, the magic there hinders it; whenever it makes an attack roll, an ability check, or a saving throw inside the temple, it must roll a d4 and subtract the number rolled from the d20 roll." + "\n " + "In addition, the sensors created by divination spells can't appear inside the temple, and creatures within can't be targeted by divination spells." + "\n " + "Finally, whenever any creature in the temple regains hit points from a spell of 1st level or higher, the creature regains additional hit points equal to your Wisdom modifier (minimum 1 hit point)." + "\n " + "The temple is made from opaque magical force that extends into the Ethereal Plane, thus blocking ethereal travel into the temple's interior. Nothing can physically pass through the temple's exterior. It can't be dispelled by dispel magic, and antimagic field has no effect on it. A disintegrate spell destroys the temple instantly." + "\n " + "Casting this spell on the same spot once every 7 days for a year makes this effect permanent." }; SpellsList["tenser's transformation"] = { name : "Tenser's Transformation", classes : ["wizard"], source : [["X", 168]], level : 6, school : "Trans", time : "1 a", range : "Self", components : "V,S,M", compMaterial : "A few hairs from a bull", duration : "Conc, 10 min", description : "50 temp HP; prof Str/Con save, all wea/arm; extra atk; adv., wea atks +2d12 Force dmg; no spellc.", descriptionShorter : "50 temp HP; prof Str/Con save, wea/arm; +1 atk; adv, wea atks +2d12 Force dmg; no spellc", descriptionFull : "You endow yourself with endurance and martial prowess fueled by magic. Until the spell ends, you can't cast spells, and you gain the following benefits:" + "\n \u2022 " + "You gain 50 temporary hit points. If any of these remain when the spell ends, they are lost." + "\n \u2022 " + "You have advantage on attack rolls that you make with simple and martial weapons." + "\n \u2022 " + "When you hit a target with a weapon attack, that target takes an extra 2d12 force damage." + "\n \u2022 " + "You have proficiency with all armor, shields, simple weapons, and martial weapons." + "\n \u2022 " + "You have proficiency in Strength and Constitution saving throws." + "\n \u2022 " + "You can attack twice, instead of once, when you take the Attack action on your turn. You ignore this benefit if you already have a feature, like Extra Attack, that gives you extra attacks." + "\n " + "Immediately after the spell ends, you must succeed on a DC 15 Constitution saving throw or suffer one level of exhaustion." }; SpellsList["thunder step"] = { name : "Thunder Step", classes : ["sorcerer", "warlock", "wizard"], source : [["X", 168]], level : 3, school : "Conj", time : "1 a", range : "90 ft", components : "V", duration : "Instantaneous", save : "Con", description : "Me + 1 willing crea teleport 90 ft; all crea in 10 ft of origin 3d10+1d10/SL Thunder dmg; save half", descriptionShorter : "Me + 1 willing crea teleport 90 ft; all in 10 ft of origin 3d10+1d10/SL Thunder dmg; save half", descriptionFull : "You teleport yourself to an unoccupied space you can see within range. Immediately after you disappear, a thunderous boom sounds, and each creature within 10 feet of the space you left must make a Constitution saving throw, taking 3d10 thunder damage on a failed save, or half as much damage on a successful one. The thunder can be heard from up to 300 feet away." + "\n " + "You can bring along objects as long as their weight doesn't exceed what you can carry. You can also teleport one willing creature of your size or smaller who is carrying gear up to its carrying capacity. The creature must be within 5 feet of you when you cast this spell, and there must be an unoccupied space within 5 feet of your destination space for the creature to appear in; otherwise, the creature is left behind." + AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d10 for each slot level above 3rd." }; SpellsList["tiny servant"] = { name : "Tiny Servant", classes : ["artificer", "wizard"], source : [["X", 168]], level : 3, school : "Trans", time : "1 min", range : "Touch", components : "V,S", duration : "8 h", description : "Animate 1+2/SL Tiny, nonmagical, unattended obj as tiny servants; bns a to command telepathically", descriptionFull : "You touch one Tiny, nonmagical object that isn't attached to another object or a surface and isn't being carried by another creature. The target animates and sprouts little arms and legs, becoming a creature under your control until the spell ends or the creature drops to 0 hit points. See the Tiny Servant stat block for its statistics." + "\n " + "As a bonus action, you can mentally command the creature if it is within 120 feet of you. (If you control multiple creatures with this spell, you can command any or all of them at the same time, issuing the same command to each one.) You decide what action the creature will take and where it will move during its next turn, or you can issue a simple, general command, such as to fetch a key, stand watch, or stack some books. If you issue no commands, the servant does nothing other than defend itself against hostile creatures. Once given an order, the servant continues to follow that order until its task is complete." + "\n " + "When the creature drops to 0 hit points, it reverts to its original form, and any remaining damage carries over to that form." + AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, you can animate two additional objects for each slot level above 3rd." }; SpellsList["toll the dead"] = { name : "Toll the Dead", classes : ["cleric", "warlock", "wizard"], source : [["X", 169], ["UA:SS", 4]], level : 0, school : "Necro", time : "1 a", range : "60 ft", components : "V,S", duration : "Instantaneous", save : "Wis", description : "1 crea save or 1d12 Necrotic dmg (d8 instead of d12 if at full HP); +1d12/1d8 at CL 5, 11, \u0026 17", descriptionCantripDie : "1 crea save or `CD`d12 Necrotic damage (d8 instead of d12 if at full HP)", descriptionFull : "You point at one creature you can see within range, and the sound of a dolorous bell fills the air around it for a moment. The target must succeed on a Wisdom saving throw or take 1d8 necrotic damage. If the target is missing any of its hit points, it instead takes 1d12 necrotic damage." + "\n " + "The spell's damage increases by one die when you reach 5th level (2d8 or 2d12), 11th level (3d8 or 3d12), and 17th level (4d8 or 4d12)." }; SpellsList["wall of light"] = { name : "Wall of Light", classes : ["sorcerer", "warlock", "wizard"], source : [["X", 170]], level : 5, school : "Evoc", time : "1 a", range : "120 ft", components : "V,S,M", compMaterial : "A hand mirror", duration : "Conc, 10 min", save : "Con", description : "60\xD75\xD710ft (l\xD7w\xD7h) 4d8+1d8/SL Radiant dmg \u0026 blind; save half, not blind; 1 a rngd spell atk; see B", descriptionShorter : "60|5|10ft (l|w|h) 4d8+1d8/SL Radiant dmg, blind; save half, no blind; 1 a rngd atk; see B", descriptionMetric : "18\xD71,5\xD73m (l\xD7w\xD7h) 4d8+1d8/SL Radiant dmg \u0026 blind; save half, not blind; 1 a rngd spell atk; see B", descriptionShorterMetric : "18|1,5|3m (l|w|h) 4d8+1d8/SL Radiant dmg, blind; save half, no blind; 1 a rngd atk; see B", descriptionFull : "A shimmering wall of bright light appears at a point you choose within range. The wall appears in any orientation you choose: horizontally, vertically, or diagonally. It can be free floating, or it can rest on a solid surface. The wall can be up to 60 feet long, 10 feet high, and 5 feet thick. The wall blocks line of sight, but creatures and objects can pass through it. It emits bright light out to 120 feet and dim light for an additional 120 feet." + "\n " + "When the wall appears, each creature in its area must make a Constitution saving throw. On a failed save, a creature takes 4d8 radiant damage, and it is blinded for 1 minute. On a successful save, it takes half as much damage and isn't blinded. A blinded creature can make a Constitution saving throw at the end of each of its turns, ending the effect on itself on a success." + "\n " + "A creature that ends its turn in the wall's area takes 4d8 radiant damage." + "\n " + "Until the spell ends, you can use an action to launch a beam of radiance from the wall at one creature you can see within 60 feet of it. Make a ranged spell attack. On a hit, the target takes 4d8 radiant damage. Whether you hit or miss, reduce the length of the wall by 10 feet. If the wall's length drops to 0 feet, the spell ends." + AtHigherLevels + "When you cast this spell using a spell slot of 6th level or higher, the damage increases by 1d8 for each slot level above 5th." }; SpellsList["word of radiance"] = { name : "Word of Radiance", classes : ["cleric"], source : [["X", 171]], level : 0, school : "Evoc", time : "1 a", range : "5 ft", components : "V,M", compMaterial : "A holy symbol", duration : "Instantaneous", save : "Con", description : "Any crea within range save or 1d6 Radiant damage; +1d6 at CL 5, 11, and 17", descriptionCantripDie : "Any crea within range save or `CD`d6 Radiant damage", descriptionFull : "You utter a divine word, and burning radiance erupts from you. Each creature of your choice that you can see within range must succeed on a Constitution saving throw or take 1d6 radiant damage." + "\n " + "The spell's damage increases by 1d6 when you reach 5th level (2d6), 11th level (3d6), and 17th level (4d6)." }; SpellsList["wrath of nature"] = { name : "Wrath of Nature", classes : ["druid", "ranger"], source : [["X", 171]], level : 5, school : "Evoc", time : "1 a", range : "120 ft", components : "V,S", duration : "Conc, 1 min", description : "60-ft cu dif. ter.; rock: rngd atk 3d8 Bludg. dmg; tree: Dex or 4d6 Slash. dmg; root: Str or restr.; see B", descriptionShorter : "60-ft cu dif. ter.; rock: atk 3d8 Bludg. dmg; tree: Dex or 4d6 Slash. dmg; root: Str or restrain", descriptionFull : "You call out to the spirits of nature to rouse them against your enemies. Choose a point you can see within range. The spirits cause trees, rocks, and grasses in a 60-foot cube centered on that point to become animated until the spell ends." + "\n " + toUni("Grasses and Undergrowth") + ": Any area of ground in the cube that is covered by grass or undergrowth is difficult terrain for your enemies." + "\n " + toUni("Trees") + ": At the start of each of your turns, each of your enemies within 10 feet of any tree in the cube must succeed on a Dexterity saving throw or take 4d6 slashing damage from whipping branches." + "\n " + toUni("Roots and Vines") + ": At the end of each of your turns, one creature of your choice that is on the ground in the cube must succeed on a Strength saving throw or become restrained until the spell ends. A restrained creature can use an action to make a Strength (Athletics) check against your spell save DC, ending the effect on itself on a success." + "\n " + toUni("Rocks") + ": As a bonus action on your turn, you can cause a loose rock in the cube to launch at a creature you can see in the cube. Make a ranged spell attack against the target. On a hit, the target takes 3d8 nonmagical bludgeoning damage, and it must succeed on a Strength saving throw or fall prone." }; SpellsList["zephyr strike"] = { name : "Zephyr Strike", classes : ["ranger"], source : [["X", 171]], level : 1, school : "Trans", time : "1 bns", range : "Self", components : "V", duration : "Conc, 1 min", description : "Moving doesn't provoke opportunity atks; once: adv. on wea atk, +1d8 Force dmg, +30 ft spd for turn", descriptionShorter : "Moving doesn't provoke opport. atks; once: adv. on wea atk, +1d8 Force dmg, +30 ft spd for turn", descriptionFull : "You move like the wind. Until the spell ends, your movement doesn't provoke opportunity attacks." + "\n " + "Once before the spell ends, you can give yourself advantage on one weapon attack roll on your turn. That attack deals an extra 1d8 force damage on a hit. Whether you hit or miss, your walking speed increases by 30 feet until the end of that turn.", dynamicDamageBonus : { multipleDmgMoments : false } }; // Add weapons (attack cantrips) WeaponsList["create bonfire"] = { regExpSearch : /^(?=.*create)(?=.*bonfire).*$/i, name : "Create Bonfire", source : [["X", 152], ["E", 16]], list : "spell", ability : 6, type : "Cantrip", damage : ["C", 8, "fire"], range : "60 ft", description : "5-ft cube; Dex save at casting or when moved into, success - no damage; Conc, 1 min", abilitytodamage : false, dc : true }; WeaponsList["frostbite"] = { regExpSearch : /frostbite/i, name : "Frostbite", source : [["X", 156], ["E", 18]], list : "spell", ability : 6, type : "Cantrip", damage : ["C", 6, "cold"], range : "60 ft", description : "Con save, success - no damage, fail - also disadv. on next weapon attack roll in next turn; 1 creature", abilitytodamage : false, dc : true }; WeaponsList["infestation"] = { regExpSearch : /infestation/i, name : "Infestation", source : [["X", 158]], list : "spell", ability : 6, type : "Cantrip", damage : ["C", 6, "poison"], range : "30 ft", description : "Con save, success - no damage, fail - target also moved 5 ft in random direction", abilitytodamage : false, dc : true }; WeaponsList["magic stone"] = { regExpSearch : /^(?=.*magic)(?=.*stone).*$/i, name : "Magic Stone", source : [["X", 160], ["E", 20]], list : "spell", ability : 5, type : "Cantrip", damage : [1, 6, "bludgeoning"], range : "60/120 ft", description : "Produces 3 stones that each can be thrown (60 ft) or hurled with a sling (120 ft) as a spell attack", abilitytodamage : true }; WeaponsList["primal savagery"] = { regExpSearch : /^(?=.*primal)(?=.*savagery).*$/i, name : "Primal Savagery", source : [["X", 169]], list : "spell", ability : 5, type : "Cantrip", damage : ["C", 10, "acid"], range : "Melee (5 ft)", description : "", abilitytodamage : false }; WeaponsList["thunderclap"] = { regExpSearch : /thunderclap/i, name : "Thunderclap", source : [["X", 168], ["E", 22]], list : "spell", ability : 6, type : "Cantrip", damage : ["C", 6, "thunder"], range : "5-ft radius", description : "Con save, success - no damage; all creatures in area; audible in 100 ft", abilitytodamage : false, dc : true }; WeaponsList["toll the dead"] = { regExpSearch : /^(?=.*toll)(?=.*the)(?=.*dead).*$/i, name : "Toll the Dead", source : [["X", 169], ["UA:SS", 4]], list : "spell", ability : 5, type : "Cantrip", damage : ["C", 12, "necrotic"], range : "60 ft", description : "Wis save, success - no damage; If target is at full HP, d8 instead of d12 damage", abilitytodamage : false, dc : true }; WeaponsList["word of radiance"] = { regExpSearch : /^(?=.*word)(?=.*radiance).*$/i, name : "Word of Radiance", source : [["X", 171]], list : "spell", ability : 5, type : "Cantrip", damage : ["C", 6, "radiant"], range : "5-ft radius", description : "Con save, success - no damage; Only chosen creatures I can see are affected", abilitytodamage : false, dc : true }; // Companion options (Find Greater Steed spell) CompanionList.steed = { name : "Find Greater Steed", nameTooltip : "the Find Greater Steed spell", nameOrigin : "4th-level conjuration spell", nameMenu : "Greater steed (Find Greater Steed spell)", source : [["X", 156]], action : [["action", "Find Greater Steed (dismiss)"]], attributesAdd : { header : "Mount", type : ["Celestial", "Fey", "Fiend"], subtype : "", features : [{ name : "Find Greater Steed", description : "If dropped to 0 HP, the steed disappears, leaving behind no physical form." }], languages : "understands one language its master speaks (master's choice)" }, attributesChange : function(sCrea, objCrea) { if (objCrea.scores[3] < 6) objCrea.scores[3] = 6; }, notes : function() { if (!CompanionList.mount) return; var a = newObj(CompanionList.mount.notes); a[0].description = a[0].description.replace(/It assumes a chosen form.*/i, "It has the chosen form: griffon, pegasus, peryton, dire wolf, rhinoceros, or saber-toothed tiger"); return a; }() }; // Add creatures CreatureList["tiny servant"] = { // Stats for the Tiny Servant spell (contains contributions by SoilentBrad) name : "Tiny Servant", source : [["X", 169]], size : 5, type : "Construct", alignment : "Unaligned", ac : 15, hp : 10, hd : [4, 4], speed : "30 ft, climb 30 ft", scores : [4, 16, 10, 2, 10, 1], damage_immunities : "poison, psychic", condition_immunities : "blinded, charmed, deafened, exhaustion, frightened, paralyzed, petrified, poisoned", senses : "Blindsight 60 ft (blind beyond this radius)", passivePerception : 10, challengeRating : "0", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Slam", ability : 2, damage : [1, 4, "bludgeoning"], range : "Melee (5 ft)", description : "" }] }; // Magic Items MagicItemsList["adamantine ammunition"] = { name : "Adamantine Ammunition", source : [["X", 78]], type : "weapon (any ammunition)", rarity : "unknown", description : "Whenever a ammunition made or coated with adamantine hits an object, the hit is a critical hit. The adamantine version of ten pieces of ammunition costs 500 gp more than the normal version, whether the ammunition is made of the metal or coated with it.", descriptionFull : "Ammunition made of or coated with adamantine is unusually effective when used to break objects. Whenever a piece of adamantine ammunition hits an object, the hit is a critical hit.\n The adamantine version of ten pieces of ammunition costs 500 gp more than the normal version, whether the ammunition is made of the metal or coated with it.", allowDuplicates : true, chooseGear : { type : "ammo", prefixOrSuffix : "brackets", itemName1stPage : ["suffix", "Adamantine"], descriptionChange : ["replace", "ammunition"], excludeCheck : function (inObjKey, inObj) { return /vials|flasks/i.test(inObj.icon); } } } MagicItemsList["adamantine weapon"] = { name : "Adamantine Weapon", source : [["X", 78]], type : "weapon (any melee)", rarity : "unknown", description : "Whenever a weapon made or coated with adamantine hits an object, the hit is a critical hit. The adamantine version of a melee weapon costs 500 gp more than the normal version, whether the weapon is made of the metal or coated with it.", descriptionFull : "Melee weapons made of or coated with adamantine are unusually effective when used to break objects. Whenever an adamantine weapon hits an object, the hit is a critical hit.\n The adamantine version of a melee weapon costs 500 gp more than the normal version, whether the weapon is made of the metal or coated with it.", allowDuplicates : true, chooseGear : { type : "weapon", prefixOrSuffix : "brackets", itemName1stPage : ["suffix", "Adamantine"], descriptionChange : ["replace", "weapon"], excludeCheck : function (inObjKey, inObj) { return inObj.list != "melee"; } }, calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.list == "melee" && /adamantine/i.test(v.WeaponTextName)) { fields.Description += (fields.Description ? '; ' : '') + 'Always critical hits on objects'; } }, 'If I include the word "Adamantine" in the name of a melee weapon, it will be treated as the magic item Adamantine Weapon. Whenever it hits an object, it automatically scores a critical hit.' ] } } MagicItemsList["armor of gleaming"] = { name : "Armor of Gleaming", nameTest : "of Gleaming", source : [["X", 136]], type : "armor (medium, or heavy)", rarity : "common", description : "This armor never gets dirty.", descriptionFull : "This armor never gets dirty.", allowDuplicates : true, chooseGear : { type : "armor", prefixOrSuffix : "prefix", descriptionChange : ["prefix", "armor"], excludeCheck : function (inObjKey, inObj) { return !(/medium|heavy/i).test(inObj.type); } } } MagicItemsList["bead of nourishment"] = { name : "Bead of Nourishment", source : [["X", 136]], type : "wondrous item", rarity : "common", description : "Once I can eat this spongy, flavorless, gelatinous bead. It dissolves on my tongue and provides as much nourishment as 1 day of rations.", descriptionFull : "This spongy, flavorless, gelatinous bead dissolves on your tongue and provides as much nourishment as 1 day of rations." } MagicItemsList["bead of refreshment"] = { name : "Bead of Refreshment", source : [["X", 136]], type : "wondrous item", rarity : "common", description : "Once I can drop this spongy, flavorless, gelatinous bead in liquid. It dissolves in the liquid and transforms up to a pint of it into fresh, cold drinking water. The bead has no effect on magical liquids or harmful substances such as poison.", descriptionFull : "This spongy, flavorless, gelatinous bead dissolves in liquid, transforming up to a pint of the liquid into fresh, cold drinking water. The bead has no effect on magical liquids or harmful substances such as poison." } MagicItemsList["boots of false tracks"] = { name : "Boots of False Tracks", source : [["X", 136]], type : "wondrous item", rarity : "common", description : "Only humanoids can wear these boots. While wearing the boots, I can choose to have them leave tracks like those of another kind of humanoid of my size.", descriptionFull : "Only humanoids can wear these boots. While wearing the boots, you can choose to have them leave tracks like those of another kind of humanoid of your size." } MagicItemsList["candle of the deep"] = { name : "Candle of the Deep", source : [["X", 136]], type : "wondrous item", rarity : "common", description : "The flame of this candle is not extinguished when immersed in water. It gives off light and heat like a normal candle.", descriptionFull : "The flame of this candle is not extinguished when immersed in water. It gives off light and heat like a normal candle." } MagicItemsList["cast-off armor"] = { name : "Cast-Off Armor", nameTest : "Cast-Off", source : [["X", 136]], type : "armor (light, medium, or heavy)", rarity : "common", description : "As an action, I can doff this armor.", descriptionFull : "You can doff this armor as an action.", chooseGear : { type : "armor", prefixOrSuffix : "suffix", descriptionChange : ["prefix", "armor"] }, action : [["action", ""]] } MagicItemsList["charlatan's die"] = { name : "Charlatan's Die", source : [["X", 136]], type : "wondrous item", rarity : "common", description : "Whenever I roll this six-sided die, I can control which number it rolls.", descriptionFull : "Whenever you roll this six-sided die, you can control which number it rolls.", attunement : true } MagicItemsList["cloak of billowing"] = { name : "Cloak of Billowing", source : [["X", 136]], type : "wondrous item", rarity : "common", description : "As a bonus action while wearing this cloak, I can make it billow dramatically.", descriptionFull : "While wearing this cloak, you can use a bonus action to make it billow dramatically.", action : [["bonus action", ""]] } MagicItemsList["cloak of many fashions"] = { name : "Cloak of Many Fashions", source : [["X", 136], ["WBtW", 208]], type : "wondrous item", rarity : "common", description : "As a bonus action while wearing this cloak, I can change its style, color, and apparent qualities. The cloak's weight doesn't change. Regardless of its appearance, the cloak can't be anything but a cloak. Although it can duplicate the appearance of other magic cloaks, it doesn't gain their magical properties.", descriptionFull : "While wearing this cloak, you can use a bonus action to change the style, color, and apparent quality of the garment. The cloak's weight doesn't change. Regardless of its appearance, the cloak can't be anything but a cloak. Although it can duplicate the appearance of other magic cloaks, it doesn't gain their magical properties.", action : [["bonus action", ""]] } MagicItemsList["clockwork amulet"] = { name : "Clockwork Amulet", source : [["X", 137]], type : "wondrous item", rarity : "common", description : "Once per dawn when I make an attack roll while wearing this copper amulet, I can forgo rolling the d20 to get a 10 on the die. The amulet contains tiny interlocking gears powered by magic from Mechanus, a plane of clockwork predictability. When I hold it up to my ear, I can hear faint ticking and whirring noises.", descriptionFull : "This copper amulet contains tiny interlocking gears and is powered by magic from Mechanus, a plane of clockwork predictability. A creature that puts an ear to the amulet can hear faint ticking and whirring noises coming from within.\n When you make an attack roll while wearing the amulet, you can forgo rolling the d20 to get a 10 on the die. Once used, this property can't be used again until the next dawn.", usages : 1, recovery : "dawn" } MagicItemsList["clothes of mending"] = { name : "Clothes of Mending", source : [["X", 137]], type : "wondrous item", rarity : "common", description : "This elegant outfit of traveler's clothes magically mends itself to counteract daily wear and tear. Pieces of the outfit that are destroyed can't be repaired in this way.", descriptionFull : "This elegant outfit of traveler's clothes magically mends itself to counteract daily wear and tear. Pieces of the outfit that are destroyed can't be repaired in this way.", weight : 4 } MagicItemsList["dark shard amulet"] = { name : "Dark Shard Amulet", source : [["X", 137]], type : "wondrous item", rarity : "common", description : "I can use this amulet of extraplanar material from the realm of my warlock patron as a spellcasting focus for my warlock spells. Once per long rest, I can use it to cast a warlock cantrip that I don't know. To do so, I must make a DC 10 Intelligence (Arcana) check, wasting the attempt as well as my action if I fail.", descriptionFull : "This amulet is fashioned from a single shard of resilient extraplanar material originating from the realm of your warlock patron. While you are wearing it, you gain the following benefits:\n \u2022 You can use the amulet as a spellcasting focus for your warlock spells.\n \u2022 You can try to cast a cantrip that you don't know. The cantrip must be on the warlock spell list, and you must make a DC 10 Intelligence (Arcana) check. If the check succeeds, you cast the spell. If the check fails, so does the spell, and the action used to cast the spell is wasted. In either case, you can't use this property again until you finish a long rest.", attunement : true, prerequisite : "Requires attunement by a warlock", prereqeval : function (v) { return classes.known.warlock ? true : false; }, usages : 1, recovery : "long rest", spellcastingAbility: "warlock", spellFirstColTitle: "", spellcastingPreparedCantrips: { 'class': 'warlock' }, allowUpCasting: true, spellcastingBonus: [{ name: 'Select 1 cantrip or enable', 'class': 'warlock', level: [0, 0], }, { name: '"Prepare cantrips just like', spells: [], }, { name: 'spells" on the bottom left.', spells: [], }], calcChanges : { spellList : [ function(spList, spName, spType) { // Remove the already known cantrips, from any source except magic items if (spName.indexOf('dark shard amulet') !== -1) { var allSpellsKnown = []; for (var sCast in CurrentSpells) { if (sCast.refType === "item") continue; var oCast = CurrentSpells[sCast]; if (oCast.selectCa) allSpellsKnown = allSpellsKnown.concat(oCast.selectCa); if (oCast.selectBo) allSpellsKnown = allSpellsKnown.concat(oCast.selectBo); } var knownCantrips = OrderSpells(allSpellsKnown, "single", false, false, 0); if (!spList.notspells) spList.notspells = []; spList.notspells = spList.notspells.concat(knownCantrips); } }, ], spellAdd : [ function (spellKey, spellObj, spName, isDuplicate) { if (spName.indexOf('dark shard amulet') !== -1) { spellObj.firstCol = ""; }; }, ], }, } MagicItemsList["dread helm"] = { name : "Dread Helm", source : [["X", 137], ["WBtW", 209]], type : "wondrous item", rarity : "common", description : "This fearsome steel helm makes my eyes glow red while I wear it.", descriptionFull : "This fearsome steel helm makes your eyes glow red while you wear it.", weight : 1 } MagicItemsList["ear horn of hearing"] = { name : "Ear Horn of Hearing", source : [["X", 137]], type : "wondrous item", rarity : "common", description : "While held up to my ear, this horn suppresses the effects of the deafened condition on me, allowing me to hear normally.", descriptionFull : "While held up to your ear, this horn suppresses the effects of the deafened condition on you, allowing you to hear normally.", savetxt : { immune : ["deafened"] }, weight : 1 } MagicItemsList["enduring spellbook"] = { name : "Enduring Spellbook", source : [["X", 137]], type : "wondrous item", rarity : "common", description : "This spellbook, along with anything written on its pages, can't be damaged by fire or immersion in water. In addition, the spellbook doesn't deteriorate with age.", descriptionFull : "This spellbook, along with anything written on its pages, can't be damaged by fire or immersion in water. In addition, the spellbook doesn't deteriorate with age.", weight : 5 } MagicItemsList["ersatz eye"] = { name : "Ersatz Eye", source : [["X", 137], ["W", 267]], type : "wondrous item", rarity : "common", description : "This artificial eye replaces a real one that was lost or removed. While the ersatz eye is embedded in my eye socket, it can't be removed by anyone other than me, and I can see through the tiny orb as though it were a normal eye.", descriptionFull : "This artificial eye replaces a real one that was lost or removed. While the ersatz eye is embedded in your eye socket, it can't be removed by anyone other than you, and you can see through the tiny orb as though it were a normal eye.", attunement : true } MagicItemsList["hat of vermin"] = { name : "Hat of Vermin", source : [["X", 137]], type : "wondrous item", rarity : "common", description : "This hat has 3 charges, regaining all at dawn. As an action while holding it, I can expend 1 charge and speak a command word to have one bat, frog, or rat appear in the hat. The creature acts as an ordinary member of its kind and disappears after 1 hour or when it has 0 HP. It is not under my control.", descriptionFull : "This hat has 3 charges. While holding the hat, you can use an action to expend 1 of its charges and speak a command word that summons your choice of a bat, a frog, or a rat. The summoned creature magically appears in the hat and tries to get away from you as quickly as possible. The creature is neither friendly nor hostile, and it isn't under your control. It behaves as an ordinary creature of its kind and disappears after 1 hour or when it drops to 0 hit points. The hat regains all expended charges daily at dawn.", action : [["action", ""]], usages : 3, recovery : "dawn" } MagicItemsList["hat of wizardry"] = { name : "Hat of Wizardry", source : [["X", 137]], type : "wondrous item", rarity : "common", description : "I can use this antiquated, cone-shaped hat adorned with gold crescent moons and stars as a spellcasting focus for my wizard spells. Once per long rest, I can use it to cast a wizard cantrip that I don't know. To do so, I must make a DC 10 Intelligence (Arcana) check, wasting the attempt as well as my action if I fail.", descriptionFull : "This antiquated, cone-shaped hat is adorned with gold crescent moons and stars. While you are wearing it, you gain the following benefits:\n \u2022 You can use the hat as a spellcasting focus for your wizard spells.\n \u2022 You can try to cast a cantrip that you don't know. The cantrip must be on the wizard spell list, and you must make a DC 10 Intelligence (Arcana) check. If the check succeeds, you cast the spell. If the check fails, so does the spell, and the action used to cast the spell is wasted. In either case, you can't use this property again until you finish a long rest.", attunement : true, prerequisite : "Requires attunement by a wizard", prereqeval : function (v) { return classes.known.wizard ? true : false; }, usages : 1, recovery : "long rest", spellcastingAbility: "wizard", spellFirstColTitle: "", spellcastingPreparedCantrips: { 'class': 'wizard' }, allowUpCasting: true, spellcastingBonus: [{ name: 'Select 1 cantrip or enable', 'class': 'wizard', level: [0, 0], }, { name: '"Prepare cantrips just like', spells: [], }, { name: 'spells" on the bottom left.', spells: [], }], calcChanges : { spellList : [ function(spList, spName, spType) { // Remove the already known cantrips, from any source except magic items if (spName.indexOf('hat of wizardry') !== -1) { var allSpellsKnown = []; for (var sCast in CurrentSpells) { if (sCast.refType === "item") continue; var oCast = CurrentSpells[sCast]; if (oCast.selectCa) allSpellsKnown = allSpellsKnown.concat(oCast.selectCa); if (oCast.selectBo) allSpellsKnown = allSpellsKnown.concat(oCast.selectBo); } var knownCantrips = OrderSpells(allSpellsKnown, "single", false, false, 0); if (!spList.notspells) spList.notspells = []; spList.notspells = spList.notspells.concat(knownCantrips); } } ], spellAdd : [ function (spellKey, spellObj, spName, isDuplicate) { if (spName.indexOf('hat of wizardry') !== -1) { spellObj.firstCol = ""; }; } ] }, } MagicItemsList["heward's handy spice pouch"] = { name : "Heward's Handy Spice Pouch", source : [["X", 137]], type : "wondrous item", rarity : "common", description : "This belt pouch appears empty. It has 10 charges, regaining 1d6+4 expended charges at dawn. As an action while holding it, I can speak the name of any nonmagical food seasoning (e.g. salt, pepper, or saffron), and remove a pinch of the desired seasoning from the pouch. A pinch is enough to season a single meal.", descriptionFull : "This belt pouch appears empty and has 10 charges. While holding the pouch, you can use an action to expend 1 of its charges, speak the name of any nonmagical food seasoning (such as salt, pepper, saffron, or cilantro), and remove a pinch of the desired seasoning from the pouch. A pinch is enough to season a single meal. The pouch regains 1d6+4 expended charges daily at dawn.", weight : 1, usages : 10, recovery : "dawn", additional : "regains 1d6+4", action : [["action", ""]] } MagicItemsList["horn of silent alarm"] = { name : "Horn of Silent Alarm", source : [["X", 137]], type : "wondrous item", rarity : "common", description : "This horn has 4 charges, regaining 1d4 expended charges daily at dawn. As an action, I can expend 1 charge and blow it, have only one creature within 600 ft of my choice hear the horn's blare, provided it isn't deafened. No other creature hears sound coming from the horn.", descriptionFull : "This horn has 4 charges. When you use an action to blow it, one creature of your choice can hear the horn's blare, provided the creature is within 600 feet of the horn and not deafened. No other creature hears sound coming from the horn. The horn regains 1d4 expended charges daily at dawn.", weight : 2, usages : 4, recovery : "dawn", additional : "regains 1d4", action : [["action", ""]] } MagicItemsList["instrument of illusions"] = { // contains contributions by AelarTheElFRogue name : "Instrument of Illusions", source : [["X", 137]], type : "wondrous item (instrument)", rarity : "common", description : "While I am playing this musical instrument, I can create harmless, illusory visual effects within a 5-ft-radius (15-ft for bards) sphere centered on the instrument. The magical effects have neither substance nor sound, and they are obviously illusory. The effects end when I stop playing.", descriptionFull : "While you are playing this musical instrument, you can create harmless, illusory visual effects within a 5-foot-radius sphere centered on the instrument. If you are a bard, the radius increases to 15 feet. Sample visual effects include luminous musical notes, a spectral dancer, butterflies, and gently falling snow. The magical effects have neither substance nor sound, and they are obviously illusory. The effects end when you stop playing.", attunement : true, weight : 3, // same as instrument of the bards choices : ["Bard (15-ft radius)", "Not a Bard (5-ft radius)"], selfChoosing : function () { return classes.known.bard ? "bard (15-ft radius)" : "not a bard (5-ft radius)"; }, "bard (15-ft radius)" : { name : "Instrument\u200A of Illusions", description : "While I am playing this musical instrument, I can create harmless, illusory visual effects within a 15-ft-radius sphere centered on the instrument. The magical effects have neither substance nor sound, and they are obviously illusory. The effects end when I stop playing." }, "not a bard (5-ft radius)" : { name : "Instrument\u200A\u200A of Illusions", description : "While I am playing this musical instrument, I can create harmless, illusory visual effects within a 5-ft-radius sphere centered on the instrument. The magical effects have neither substance nor sound, and they are obviously illusory. The effects end when I stop playing." } } MagicItemsList["instrument of scribing"] = { name : "Instrument of Scribing", source : [["X", 138], ["WBtW", 212]], type : "wondrous item (instrument)", rarity : "common", description : "As an action while I'm playing this musical instrument, I can write a magical message on a nonmagical surface that I can see within 30 ft. The message can be up to 6 (or 7) words in a language I know and fades away after 24 hours or when Dispel Magic is cast on it. The instrument can be used like this 3 times per dawn.", descriptionFull : "This musical instrument has 3 charges. While you are playing it, you can use an action to expend 1 charge from the instrument and write a magical message on a nonmagical object or surface that you can see within 30 feet of you. The message can be up to six words long and is written in a language you know. If you are a bard, you can scribe an additional seven words and choose to make the message glow faintly, allowing it to be seen in nonmagical darkness. Casting Dispel Magic on the message erases it. Otherwise, the message fades away after 24 hours.\n The instrument regains all expended charges daily at dawn.", attunement : true, weight : 3, // same as instrument of the bards choices : ["Bard (15-ft radius)", "Not a Bard (5-ft radius)"], selfChoosing : function () { return classes.known.bard ? "bard (15-ft radius)" : "not a bard (5-ft radius)"; }, "bard (15-ft radius)" : { name : "Instrument\u200A of Scribing", description : "As an action while I'm playing this musical instrument, I can write a magical message on a nonmagical surface that I can see within 30 ft. The message can be up to 7 words in a language I know and I can have it glow faintly. Dispel Magic erases it, otherwise it fades away after 24 hours. This can be used 3 times per dawn." }, "not a bard (5-ft radius)" : { name : "Instrument\u200A\u200A of Scribing", description : "As an action while I'm playing this musical instrument, I can write a magical message on a nonmagical surface that I can see within 30 ft. The message can be up to 6 words in a language I know and fades away after 24 hours or when Dispel Magic is cast on it. The instrument can be used like this 3 times per dawn." } } MagicItemsList["lock of trickery"] = { name : "Lock of Trickery", source : [["X", 138]], type : "wondrous item", rarity : "common", description : "This lock appears to be an ordinary lock and comes with a single key. The tumblers in this lock magically adjust to thwart burglars. Without the key, a creature proficient with thieves' tools can pick this lock with a successful DC 15 Dexterity check, but has disadvantage on that check.", descriptionFull : "This lock appears to be an ordinary lock and comes with a single key. The tumblers in this lock magically adjust to thwart burglars. Dexterity checks made to pick the lock have disadvantage. Thus, without the key, a creature proficient with thieves' tools can pick this lock with a successful DC 15 Dexterity check, but has disadvantage on that check.", weight : 1 } MagicItemsList["moon-touched sword"] = { name : "Moon-Touched Sword", nameTest : "Moon-Touched", source : [["X", 138]], type : "weapon (any sword)", rarity : "common", description : "In darkness, the unsheathed blade of this sword sheds moonlight, creating bright light in a 15-ft radius and dim light for an additional 15 ft.", descriptionFull : "In darkness, the unsheathed blade of this sword sheds moonlight, creating bright light in a 15-foot radius and dim light for an additional 15 feet.", chooseGear : { type : "weapon", prefixOrSuffix : "suffix", descriptionChange : ["replace", "sword"], excludeCheck : function (inObjKey, inObj) { var testRegex = /sword|scimitar|rapier/i; return !(testRegex).test(inObjKey) && (!inObj.baseWeapon || !(testRegex).test(inObj.baseWeapon)); } }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && v.isMeleeWeapon && /sword|scimitar|rapier/i.test(v.baseWeaponName) && /moon.touched/i.test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); } }, 'If I include the words "Moon-Touched" in the name of a sword, it will be treated as the magic weapon Moon-Touched Sword.' ] } } MagicItemsList["mystery key"] = { name : "Mystery Key", source : [["X", 138]], type : "wondrous item", rarity : "common", description : "A question mark is worked into the head of this key. The key has a 5% chance of unlocking any lock into which it's inserted. Once it unlocks something, the key disappears.", descriptionFull : "A question mark is worked into the head of this key. The key has a 5% chance of unlocking any lock into which it's inserted. Once it unlocks something, the key disappears." } MagicItemsList["orb of direction"] = { name : "Orb of Direction", source : [["X", 138], ["WBtW", 212]], type : "wondrous item", rarity : "common", description : "As an action while holding this orb, I can determine which way is north. This property functions only on the Material Plane.", descriptionFull : "While holding this orb, you can use an action to determine which way is north. This property functions only on the Material Plane.", weight : 3, action : [["action", ""]] } MagicItemsList["orb of time"] = { name : "Orb of Time", source : [["X", 138]], type : "wondrous item", rarity : "common", description : "As an action while holding this orb, I can determine whether it is morning, afternoon, evening, or nighttime outside. This property functions only on the Material Plane.", descriptionFull : "While holding this orb, you can use an action to determine whether it is morning, afternoon, evening, or nighttime outside. This property functions only on the Material Plane.", weight : 3, action : [["action", ""]] } MagicItemsList["perfume of bewitching"] = { name : "Perfume of Bewitching", source : [["X", 138]], type : "wondrous item", rarity : "common", description : "Once as an action, I can apply the perfume in this tiny vial to myself and its effect lasts 1 hour. For the duration, I have advantage on all Charisma checks directed at humanoids of challenge rating 1 or lower. Those subjected to the perfume's effect are not aware that they've been influenced by magic.", descriptionFull : "This tiny vial contains magic perfume, enough for one use. You can use an action to apply the perfume to yourself, and its effect lasts 1 hour. For the duration, you have advantage on all Charisma checks directed at humanoids of challenge rating 1 or lower. Those subjected to the perfume's effect are not aware that they've been influenced by magic." } MagicItemsList["pipe of smoke monsters"] = { name : "Pipe of Smoke Monsters", source : [["X", 138], ["WBtW", 212]], type : "wondrous item", rarity : "common", description : "As an action while smoking this pipe, I can exhale a puff of smoke that takes the form of a single creature, such as a dragon, a flumph, or a froghemoth. The form must be small enough to fit in a 1-ft cube and loses its shape after a few seconds, becoming an ordinary puff of smoke.", descriptionFull : "While smoking this pipe, you can use an action to exhale a puff of smoke that takes the form of a single creature, such as a dragon, a flumph, or a froghemoth. The form must be small enough to fit in a 1-foot cube and loses its shape after a few seconds, becoming an ordinary puff of smoke." } MagicItemsList["pole of angling"] = { name : "Pole of Angling", source : [["X", 138]], type : "wondrous item", rarity : "common", description : "While holding this 10 ft pole, I can speak a command word and transform it into a fishing pole with a hook, a line, and a reel. Speaking the command word again changes the fishing pole back into a normal 10 ft pole.", descriptionFull : "While holding this 10-foot pole, you can speak a command word and transform it into a fishing pole with a hook, a line, and a reel. Speaking the command word again changes the fishing pole back into a normal 10-foot pole.", weight : 7 } MagicItemsList["pole of collapsing"] = { name : "Pole of Collapsing", source : [["X", 138], ["WBtW", 212]], type : "wondrous item", rarity : "common", description : "As an action while holding this 10 ft pole, I can speak a command word to have it collapse into a 1-ft-long rod. The pole's weight doesn't change. As an action while holding the rod, I can speak a different command word to have it elongate back to a pole, but only as long as the surrounding space allows.", descriptionFull : "While holding this 10-foot pole, you can use an action to speak a command word and cause it to collapse into a 1-foot-long rod, for ease of storage. The pole's weight doesn't change. You can use an action to speak a different command word and cause the rod to revert to a pole; however, the rod will elongate only as far as the surrounding space allows.", weight : 7, action : [["action", ""]] } MagicItemsList["pot of awakening"] = { name : "Pot of Awakening", source : [["X", 138]], type : "wondrous item", rarity : "common", description : "If I plant an ordinary shrub in this 10 lb clay pot and let it grow for 30 days, the shrub magically transforms into an awakened shrub at the end of that time. When the shrub awakens, its roots break the pot, destroying it. The awakened shrub is friendly toward me. Absent commands from me, it does nothing.", descriptionFull : "If you plant an ordinary shrub in this 10-pound clay pot and let it grow for 30 days, the shrub magically transforms into an awakened shrub at the end of that time. When the shrub awakens, its roots break the pot, destroying it.\n The awakened shrub is friendly toward you. Absent commands from you, it does nothing.", weight : 10 } MagicItemsList["rope of mending"] = { name : "Rope of Mending", source : [["X", 138]], type : "wondrous item", rarity : "common", description : "I can cut this 50-foot coil of hempen rope into any number of smaller pieces, and then use an action to speak a command word and cause the pieces to knit back together. The pieces must be in contact with each other and not otherwise in use. A rope of mending is forever shortened if a section of it is lost.", descriptionFull : "You can cut this 50-foot coil of hempen rope into any number of smaller pieces, and then use an action to speak a command word and cause the pieces to knit back together. The pieces must be in contact with each other and not otherwise in use. A rope of mending is forever shortened if a section of it is lost or destroyed.", action : [["action", ""]], weight : 10 } MagicItemsList["ruby of the war mage"] = { name : "Ruby of the War Mage", source : [["X", 138]], type : "wondrous item", rarity : "common", description : "By pressing this 1-inch-diameter ruby etched with eldritch runes to a simple or martial weapon for 10 minutes, it attaches itself to the weapon. I can then use that weapon as a spellcasting focus. Once attached, it can't be removed unless my attunement ends, I detach it as an action, or the weapon is destroyed.", descriptionFull : "Etched with eldritch runes, this 1-inch-diameter ruby allows you to use a simple or martial weapon as a spellcasting focus for your spells. For this property to work, you must attach the ruby to the weapon by pressing the ruby against it for at least 10 minutes. Thereafter, the ruby can't be removed unless you detach it as an action or the weapon is destroyed. Not even an Antimagic Field causes it to fall off. The ruby does fall off the weapon if your attunement to the ruby ends.", attunement : true, prerequisite : "Requires attunement by a spellcaster", prereqeval : function(v) { return v.isSpellcaster; } } MagicItemsList["shield of expression"] = { name : "Shield of Expression", source : [["X", 139]], type : "shield", rarity : "common", description : "The front of this shield is shaped in the likeness of a face. As a bonus action while bearing the shield, I can have the shield alter the expression of the face.", descriptionFull : "The front of this shield is shaped in the likeness of a face. While bearing the shield, you can use a bonus action to alter the face's expression.", weight : 6, shieldAdd : "Shield of Expression", action : [["bonus action", ""]] } MagicItemsList["smoldering armor"] = { name : "Smoldering Armor", nameTest : "Smoldering", source : [["X", 139]], type : "armor (light, medium, or heavy)", rarity : "common", description : "Wisps of harmless, odorless smoke rise from this armor while it is worn.", descriptionFull : "Wisps of harmless, odorless smoke rise from this armor while it is worn.", chooseGear : { type : "armor", prefixOrSuffix : "suffix", descriptionChange : ["prefix", "armor"] } } MagicItemsList["staff of adornment"] = { name : "Staff of Adornment", source : [["X", 139]], type : "staff", rarity : "common", description : "If I place an object up to 1 lb above the tip of the staff while holding it, the object floats 1 inch from its tip and remains there until it is removed or until I no longer possess the staff. It can have up to three objects floating over its tip at any given time and I can make one or more objects slowly spin or turn in place.", descriptionFull : "If you place an object weighing no more than 1 pound (such as a shard of crystal, an egg, or a stone) above the tip of the staff while holding it, the object floats an inch from the staff's tip and remains there until it is removed or until the staff is no longer in your possession. The staff can have up to three such objects floating over its tip at any given time. While holding the staff, you can make one or more of the objects slowly spin or turn in place.", weight : 4 } MagicItemsList["staff of birdcalls"] = { name : "Staff of Birdcalls", source : [["X", 139]], type : "staff", rarity : "common", description : "This staff has 10 charges, regaining 1d6+4 at dawn, 5% chance it is destroyed when its last charge is used. As an action, I can use 1 charge to create a sound out to a range of 60 ft: a finch's chirp, raven's caw, duck's quack, chicken's cluck, goose's honk, loon's call, turkey's gobble, seagull's cry, owl's hoot, or eagle's shriek.", descriptionFull : "This wooden staff is decorated with bird carvings. It has 10 charges. While holding it, you can use an action to expend 1 charge from the staff and cause it to create one of the following sounds out to a range of 60 feet: a finch's chirp, a raven's caw, a duck's quack, a chicken's cluck, a goose's honk, a loon's call, a turkey's gobble, a seagull's cry, an owl's hoot, or an eagle's shriek.\n The staff regains 1d6+4 expended charges daily at dawn. If you expend the last charge, roll a d20. On a 1, the staff explodes in a harmless cloud of bird feathers and is lost forever.", weight : 4, usages : 10, recovery : "dawn", additional : "regains 1d6+4", action : [["action", ""]] } MagicItemsList["staff of flowers"] = { name : "Staff of Flowers", source : [["X", 139]], type : "staff", rarity : "common", description : "This staff has 10 charges, regaining 1d6+4 at dawn, 5% chance it is destroyed when its last charge is used. As an action, I can use 1 charge to cause a flower of my choice to sprout from a patch of earth or soil within 5 ft or from the staff itself. The flower is nonmagical and grows or withers as a normal flower would.", descriptionFull : "This wooden staff has 10 charges. While holding it, you can use an action to expend 1 charge from the staff and cause a flower to sprout from a patch of earth or soil within 5 feet of you, or from the staff itself. Unless you choose a specific kind of flower, the staff creates a mildscented daisy. The flower is harmless and nonmagical, and it grows or withers as a normal flower would. The staff regains 1d6+4 expended charges daily at dawn. If you expend the last charge, roll a d20. On a 1, the staff turns into flower petals and is lost forever.", weight : 4, usages : 10, recovery : "dawn", additional : "regains 1d6+4", action : [["action", ""]] } MagicItemsList["talking doll"] = { name : "Talking Doll", source : [["X", 139], ["WBtW", 214]], type : "wondrous item", rarity : "common", attunement : true, description : "During a short rest with this doll within 5 ft of me, I can tell it to say up to 6 phrases of up to 6 words each, and set an observable condition under which the doll speaks each phrase. Conditions must happen within 5 ft of the doll. The doll can remember only 6 phrases that are lost when my attunement to it ends.", descriptionFull : "While this stuffed doll is within 5 feet of you, you can spend a short rest telling it to say up to six phrases, none of which can be more than six words long, and set an observable condition under which the doll speaks each phrase. You can also replace old phrases with new ones. Whatever the condition, it must occur within 5 feet of the doll to make it speak. For example, whenever someone picks up the doll, it might say, \"I want a piece of candy.\" The doll's phrases are lost when your attunement to the doll ends." } MagicItemsList["tankard of sobriety"] = { name : "Tankard of Sobriety", source : [["X", 139]], type : "wondrous item", rarity : "common", description : "This tankard has a stern face sculpted into one side. I can drink ale, wine, or any other nonmagical alcoholic beverage poured into it without becoming inebriated. The tankard has no effect on magical liquids or harmful substances such as poison.", descriptionFull : "This tankard has a stern face sculpted into one side. You can drink ale, wine, or any other nonmagical alcoholic beverage poured into it without becoming inebriated. The tankard has no effect on magical liquids or harmful substances such as poison.", weight : 1 } MagicItemsList["unbreakable arrow"] = { name : "Unbreakable Arrow", source : [["X", 139]], type : "weapon (arrow)", rarity : "common", description : "This arrow can't be broken, except when it is within an Antimagic Field.", descriptionFull : "This arrow can't be broken, except when it is within an Antimagic Field.", weight : 0.05 } MagicItemsList["veteran's cane"] = { name : "Veteran's Cane", source : [["X", 139]], type : "wondrous item", rarity : "common", description : "Once as a bonus action, I can grasp this walking cane and speak its command word to have it transform into an ordinary longsword. Once transformed, the longsword is nonmagical and can't revert back to a walking cane.", descriptionFull : "When you grasp this walking cane and use a bonus action to speak the command word, it transforms into an ordinary longsword and ceases to be magical.", weight : 4, action : [["bonus action", ""]] } MagicItemsList["walloping ammunition"] = { name : "Walloping Ammunition", nameTest : "Walloping", source : [["X", 139]], type : "weapon (any ammunition)", rarity : "common", description : "This magic ammunition packs a wallop. A creature hit by the ammunition must succeed on a DC 10 Strength saving throw or be knocked prone.", descriptionFull : "This ammunition packs a wallop. A creature hit by the ammunition must succeed on a DC 10 Strength saving throw or be knocked prone.", allowDuplicates : true, chooseGear : { type : "ammo", prefixOrSuffix : "suffix", descriptionChange : ["replace", "ammunition"], excludeCheck : function (inObjKey, inObj) { return /vials|flasks/i.test(inObj.icon); } } } MagicItemsList["wand of conducting"] = { name : "Wand of Conducting", source : [["X", 140]], type : "wand", rarity : "common", description : "This wand has 3 charges, regaining all at dawn. As an action, I can wave it around and expend 1 charge to create orchestral music that can be heard out to a range of 60 ft and ends when I stop waving the wand. If I use its last charge, roll a d20. On a 1, a sad tuba sound plays as the wand crumbles to dust.", descriptionFull : "This wand has 3 charges. While holding it, you can use an action to expend 1 of its charges and create orchestral music by waving it around. The music can be heard out to a range of 60 feet and ends when you stop waving the wand.\n The wand regains all expended charges daily at dawn. If you expend the wand's last charge, roll a d20. On a 1, a sad tuba sound plays as the wand crumbles to dust and is destroyed.", weight : 1, action : [["action", ""]], usages : 3, recovery : "dawn" } MagicItemsList["wand of pyrotechnics"] = { name : "Wand of Pyrotechnics", source : [["X", 140]], type : "wand", rarity : "common", description : "This wand has 7 charges, regaining 1d6+1 at dawn, 5% chance it is destroyed when its last charge is used. As an action, I can expend 1 charge to create a harmless burst of sound light at a point I can see up to 60 ft away, with the noise travelling 300 ft. The light is as bright as a torch flame but lasts only a second.", descriptionFull : "This wand has 7 charges. While holding it, you can use an action to expend 1 of its charges and create a harmless burst of multicolored light at a point you can see up to 60 feet away. The burst of light is accompanied by a crackling noise that can be heard up to 300 feet away. The light is as bright as a torch flame but lasts only a second.\n The wand regains 1d6+1 expended charges daily at dawn. If you expend the wand's last charge, roll a d20. On a 1, the wand erupts in a harmless pyrotechnic display and is destroyed.", weight : 1, action : [["action", ""]], usages : 7, recovery : "dawn", additional : "regains 1d6+1" } MagicItemsList["wand of scowls"] = { name : "Wand of Scowls", source : [["X", 140], ["WBtW", 214]], type : "wand", rarity : "common", description : "This wand has 3 charges, regain all at dawn. As an action, I can expend 1 of its charges and target a humanoid I can see within 30 ft. The target must succeed on a DC 10 Charisma save or be forced to scowl for 1 minute. If I expend the wand's last charge, roll a d20. On a 1, the wand transforms into a wand of smiles.", descriptionFull : "This wand has 3 charges. While holding it, you can use an action to expend 1 of its charges and target a humanoid you can see within 30 feet of you. The target must succeed on a DC 10 Charisma saving throw or be forced to scowl for 1 minute.\n The wand regains all expended charges daily at dawn. If you expend the wand's last charge, roll a d20. On a 1, the wand transforms into a wand of smiles.", weight : 1, action : [["action", ""]], usages : 3, recovery : "dawn" } MagicItemsList["wand of smiles"] = { name : "Wand of Smiles", source : [["X", 140], ["WBtW", 214]], type : "wand", rarity : "common", description : "This wand has 3 charges, regain all at dawn. As an action, I can expend 1 of its charges and target a humanoid I can see within 30 ft. The target must succeed on a DC 10 Charisma save or be forced to smile for 1 minute. If I expend the wand's last charge, roll a d20. On a 1, the wand transforms into a wand of scowls.", descriptionFull : "This wand has 3 charges. While holding it, you can use an action to expend 1 of its charges and target a humanoid you can see within 30 feet of you. The target must succeed on a DC 10 Charisma saving throw or be forced to smile for 1 minute.\n The wand regains all expended charges daily at dawn. If you expend the wand's last charge, roll a d20. On a 1, the wand transforms into a wand of scowls.", weight : 1, action : [["action", ""]], usages : 3, recovery : "dawn" } // pub_20180529_MToF.js // This file adds all the player-material from Mordenkainen's Tome of Foes to MPMB's Character Record Sheet // Define the source SourceList.MToF={ name : "Mordenkainen's Tome of Foes", abbreviation : "MToF", group : "Primary Sources", url : "https://dnd.wizards.com/products/mordenkainens-tome-foes", date : "2018/05/29" }; // Tiefling subraces RaceList["baalzebul tiefling"] = { regExpSearch : /^(?=.*baalzebul)(?=.*tiefling|planetouched).*$/i, name : "Baalzebul tiefling", sortname : "Tiefling, Baalzebul", source : [["MToF", 21], ["UA:FO", 1]], plural : "Baalzebul tieflings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Infernal"], vision : [["Darkvision", 60]], dmgres : ["Fire"], age : " reach adulthood in their late teens and live around 100 years", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 0, 0, 1, 0, 2], trait : "Baalzebul Tiefling (+1 Intelligence, +2 Charisma)\n\nLegacy of Maladomini:\n I know the Thaumaturgy cantrip.\n At 3rd level, I can cast Ray of Sickness once per long rest as a 2nd-level spell.\n At 5th level, I can also cast Crown of Madness once per long rest.\n Charisma is my spellcasting ability for these spells.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Legacy of Maladomini (1)", spells : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : 'atwill' }], features : { "ray of sickness" : { name : "Legacy of Maladomini (level 3)", minlevel : 3, spellcastingBonus : [{ name : "Legacy of Maladomini (3)", spells : ["ray of sickness"], selection : ["ray of sickness"], firstCol : 'oncelr' }], spellChanges : { "ray of sickness" : { description : "Spell attack for 3d8 Poison dmg; save or also poisoned until end of my next turn", changes : "Using Legacy of Maladomini, I cast Ray of Sickness as if I'm using a 2nd-level spell slot." } } }, "crown of madness" : { name : "Legacy of Maladomini (level 5)", minlevel : 5, spellcastingBonus : [{ name : "Legacy of Maladomini (5)", spells : ["crown of madness"], selection : ["crown of madness"], firstCol : 'oncelr' }] } } }; RaceList["dispater tiefling"] = { regExpSearch : /^(?=.*dispater)(?=.*tiefling|planetouched).*$/i, name : "Dispater tiefling", sortname : "Tiefling, Dispater", source : [["MToF", 21]], plural : "Dispater tieflings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Infernal"], vision : [["Darkvision", 60]], dmgres : ["Fire"], age : " reach adulthood in their late teens and live around 100 years", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 1, 0, 0, 0, 2], trait : "Dispater Tiefling (+1 Dexterity, +2 Charisma)\n\nLegacy of Dis:\n I know the Thaumaturgy cantrip.\n At 3rd level, I can cast Disguise Self once per long rest.\n At 5th level, I can also cast Detect Thoughts once per long rest.\n Charisma is my spellcasting ability for these spells.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Legacy of Dis (level 1)", spells : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : 'atwill' }], features : { "disguise self" : { name : "Legacy of Dis (level 3)", minlevel : 3, spellcastingBonus : [{ name : "Legacy of Dis (level 3)", spells : ["disguise self"], selection : ["disguise self"], firstCol : 'oncelr' }] }, "detect thoughts" : { name : "Legacy of Dis (level 5)", minlevel : 5, spellcastingBonus : [{ name : "Legacy of Dis (level 5)", spells : ["detect thoughts"], selection : ["detect thoughts"], firstCol : 'oncelr' }] } } }; RaceList["fierna tiefling"] = { regExpSearch : /^(?=.*fierna)(?=.*tiefling|planetouched).*$/i, name : "Fierna tiefling", sortname : "Tiefling, Fierna", source : [["MToF", 21], ["UA:FO", 1]], plural : "Fierna tieflings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Infernal"], vision : [["Darkvision", 60]], dmgres : ["Fire"], age : " reach adulthood in their late teens and live around 100 years", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 0, 0, 0, 1, 2], trait : "Fierna Tiefling (+1 Wisdom, +2 Charisma)\n\nLegacy of Phlegethos:\n I know the Friends cantrip.\n At 3rd level, I can cast Charm Person once per long rest as a 2nd-level spell.\n At 5th level, I can also cast Suggestion once per long rest.\n Charisma is my spellcasting ability for these spells.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Legacy of Phlegethos (1)", spells : ["friends"], selection : ["friends"], firstCol : 'atwill' }], features : { "charm person" : { name : "Legacy of Phlegethos (level 3)", minlevel : 3, spellcastingBonus : [{ name : "Legacy of Phlegethos (3)", spells : ["charm person"], selection : ["charm person"], firstCol : 'oncelr' }], spellChanges : { "charm person" : { description : "2 humanoids, max 30 ft apart, save or charmed; adv. on save if me/ally is fighting it", changes : "Using Legacy of Phlegethos, I cast Charm Person as if I'm using a 2nd-level spell slot." } } }, "suggestion" : { name : "Legacy of Phlegethos (level 5)", minlevel : 5, spellcastingBonus : [{ name : "Legacy of Phlegethos (5)", spells : ["suggestion"], selection : ["suggestion"], firstCol : 'oncelr' }] } } }; RaceList["glasya tiefling"] = { regExpSearch : /^(?=.*glasya)(?=.*tiefling|planetouched).*$/i, name : "Glasya tiefling", sortname : "Tiefling, Glasya", source : [["MToF", 22], ["UA:FO", 2]], plural : "Glasya tieflings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Infernal"], vision : [["Darkvision", 60]], dmgres : ["Fire"], age : " reach adulthood in their late teens and live around 100 years", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 1, 0, 0, 0, 2], trait : "Glasya Tiefling (+1 Dexterity, +2 Charisma)\n\nLegacy of Malbolge:\n I know the Minor Illusion cantrip.\n At 3rd level, I can cast Disguise Self once per long rest.\n At 5th level, I can also cast Invisibility once per long rest.\n Charisma is my spellcasting ability for these spells.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Legacy of Malbolge (1)", spells : ["minor illusion"], selection : ["minor illusion"], firstCol : 'atwill' }], features : { "disguise self" : { name : "Legacy of Malbolge (level 3)", minlevel : 3, spellcastingBonus : [{ name : "Legacy of Malbolge (3)", spells : ["disguise self"], selection : ["disguise self"], firstCol : 'oncelr' }] }, "invisibility" : { name : "Legacy of Malbolge (level 5)", minlevel : 5, spellcastingBonus : [{ name : "Legacy of Malbolge (5)", spells : ["invisibility"], selection : ["invisibility"], firstCol : 'oncelr' }] } } }; RaceList["levistus tiefling"] = { regExpSearch : /^(?=.*levistus)(?=.*tiefling|planetouched).*$/i, name : "Levistus tiefling", sortname : "Tiefling, Levistus", source : [["MToF", 22], ["UA:FO", 2]], plural : "Levistus tieflings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Infernal"], vision : [["Darkvision", 60]], dmgres : ["Fire"], age : " reach adulthood in their late teens and live around 100 years", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 0, 1, 0, 0, 2], trait : "Levistus Tiefling (+1 Constitution, +2 Charisma)\n\nLegacy of Stygia:\n I know the Ray of Frost cantrip.\n At 3rd level, I can cast Armor of Agathys once per long rest as a 2nd-level spell.\n At 5th level, I can also cast Darkness once per long rest.\n Charisma is my spellcasting ability for these spells.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Legacy of Stygia (1)", spells : ["ray of frost"], selection : ["ray of frost"], firstCol : 'atwill' }], features : { "armor of agathys" : { name : "Legacy of Stygia (level 3)", minlevel : 3, spellcastingBonus : [{ name : "Legacy of Stygia (3)", spells : ["armor of agathys"], selection : ["armor of agathys"], firstCol : 'oncelr' }], spellChanges : { "armor of agathys" : { description : "10 temp HP; as long as temp HP last any crea that hits in melee takes 10 Cold dmg", changes : "Using Legacy of Stygia, I cast Armor of Agathys as if I'm using a 2nd-level spell slot." } } }, "darkness" : { name : "Legacy of Stygia (level 5)", minlevel : 5, spellcastingBonus : [{ name : "Legacy of Stygia (5)", spells : ["darkness"], selection : ["darkness"], firstCol : 'oncelr' }] } } }; RaceList["mammon tiefling"] = { regExpSearch : /^(?=.*mammon)(?=.*tiefling|planetouched).*$/i, name : "Mammon tiefling", sortname : "Tiefling, Mammon", source : [["MToF", 22], ["UA:FO", 2]], plural : "Mammon tieflings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Infernal"], vision : [["Darkvision", 60]], dmgres : ["Fire"], age : " reach adulthood in their late teens and live around 100 years", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 0, 0, 1, 0, 2], trait : "Mammon Tiefling (+1 Intelligence, +2 Charisma)\nLegacy of Minauros:\n I know the Mage Hand cantrip.\n At 3rd level, I can cast Tenser's Floating Disk once per short rest.\n At 5th level, I can also cast Arcane Lock without a material component once per long rest.\n Charisma is my spellcasting ability for these spells.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Legacy of Minauros (1)", spells : ["mage hand"], selection : ["mage hand"], firstCol : 'atwill' }], features : { "tenser's floating disk" : { name : "Legacy of Minauros (level 3)", minlevel : 3, spellcastingBonus : [{ name : "Legacy of Minauros (3)", spells : ["tenser's floating disk"], selection : ["tenser's floating disk"], firstCol : 'oncesr' }] }, "arcane lock" : { name : "Legacy of Minauros (level 5)", minlevel : 5, spellcastingBonus : [{ name : "Legacy of Minauros (5)", spells : ["arcane lock"], selection : ["arcane lock"], firstCol : 'oncelr' }], spellChanges : { "arcane lock" : { components : "V,S", compMaterial : "", changes : "I can cast this spell once per long rest without requiring material components." } } } } }; RaceList["mephistopheles tiefling"] = { regExpSearch : /^(?=.*mephistopheles)(?=.*tiefling|planetouched).*$/i, name : "Mephistopheles tiefling", sortname : "Tiefling, Mephistopheles", source : [["MToF", 23]], plural : "Mephistopheles tieflings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Infernal"], vision : [["Darkvision", 60]], dmgres : ["Fire"], age : " reach adulthood in their late teens and live around 100 years", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 0, 0, 1, 0, 2], trait : "Mephistopheles Tiefling (+1 Intelligence, +2 Charisma)\n\nLegacy of Cania:\n I know the Mage Hand cantrip.\n At 3rd level, I can cast Burning Hands once per long rest as a 2nd-level spell.\n At 5th level, I can also cast Flame Blade once per long rest.\n Charisma is my spellcasting ability for these spells.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Legacy of Cania (level 1)", spells : ["mage hand"], selection : ["mage hand"], firstCol : 'atwill' }], features : { "burning hands" : { name : "Legacy of Cania (level 3)", minlevel : 3, spellcastingBonus : [{ name : "Legacy of Cania (level 3)", spells : ["burning hands"], selection : ["burning hands"], firstCol : 'oncelr' }], spellChanges : { "burning hands" : { description : "All in area 4d6 Fire dmg; save halves; unattended flammable objects ignite", changes : "Using Legacy of Cania, I cast Burning Hands as if I'm using a 2nd-level spell slot." } } }, "flame blade" : { name : "Legacy of Cania (level 5)", minlevel : 5, spellcastingBonus : [{ name : "Legacy of Cania (level 5)", spells : ["flame blade"], selection : ["flame blade"], firstCol : 'oncelr' }] } } }; RaceList["zariel tiefling"] = { regExpSearch : /^(?=.*zariel)(?=.*tiefling|planetouched).*$/i, name : "Zariel tiefling", sortname : "Tiefling, Zariel", source : [["MToF", 23], ["UA:FO", 2]], plural : "Zariel tieflings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Infernal"], vision : [["Darkvision", 60]], dmgres : ["Fire"], age : " reach adulthood in their late teens and live around 100 years", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [1, 0, 0, 0, 0, 2], trait : "Zariel Tiefling (+1 Strength, +2 Charisma)\n\nLegacy of Avernus:\n I know the Thaumaturgy cantrip.\n At 3rd level, I can cast Searing Smite once per long rest as a 2nd-level spell.\n At 5th level, I can also cast Branding Smite once per long rest.\n Charisma is my spellcasting ability for these spells.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Legacy of Avernus (1)", spells : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : 'atwill' }], features : { "searing smite" : { name : "Legacy of Avernus (level 3)", minlevel : 3, spellcastingBonus : [{ name : "Legacy of Avernus (3)", spells : ["searing smite"], selection : ["searing smite"], firstCol : 'oncelr' }], spellChanges : { "searing smite" : { description : "Next melee weapon hit +2d6 Fire dmg and target ignites; save to end spell or 1d6 Fire dmg", changes : "Using Legacy of Avernus, I cast Searing Smite as if I'm using a 2nd-level spell slot." } } }, "branding smite" : { name : "Legacy of Avernus (level 5)", minlevel : 5, spellcastingBonus : [{ name : "Legacy of Avernus (5)", spells : ["branding smite"], selection : ["branding smite"], firstCol : 'oncelr' }] } } }; // Elf subraces RaceList["eladrin-mtof"] = { regExpSearch : /^(?!.*half)((?=.*eladrin)|((?=.*\b(elfs?|elves|elvish|elven)\b)(?=.*\b(feys?|feywild)\b))).*$/i, name : "Eladrin", sortname : "Elf, Fey (Eladrin)", source : [["MToF", 61]], plural : "Eladrin", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Elvish"], vision : [["Darkvision", 60]], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["charmed"] }, skills : ["Perception"], age : " typically claim adulthood around age 100 and can live to be 750 years old", height : " range from under 5 to over 6 feet tall (4'6\" + 2d12\")", weight : " weigh around 115 lb (90 + 2d12 \xD7 1d4 lb)", heightMetric : " range from under 1,5 to over 1,8 metres tall (140 + 5d12 cm)", weightMetric : " weigh around 55 kg (40 + 5d12 \xD7 2d4 / 10 kg)", scores : [0, 2, 0, 0, 0, 1], abilitySave : 6, trait : "Eladrin (+2 Dexterity, +1 Charisma)" + desc([ "Trance: Elves don't need to sleep, but meditate semiconsciously, for 4 hours a day. This gives the same benefit as a human gets from 8 hours of sleep (long rest takes only 4 hours).", "Fey Step: Once per short rest, as a bonus action, I can magically teleport up to 30 ft to an unoccupied space I can see. Once I reach 3rd level, this gains an additional effect, based on the current season I'm aligned with. See the third page notes section for the effects.", "Shifting Seasons: After I finish a long rest, I can align myself with a season of my choice." ]), features : { "fey step" : { name : "Fey Step", minlevel : 1, usages : 1, recovery : "short rest", action : [["bonus action", ""]] } }, toNotesPage : [{ name : "Eladrin Season Features", source : [["MToF", 62]], popupName : "Eladrin Shifting Season Features", additional : "save DC 8 + Cha mod + Prof Bonus", page3notes : true, note : "\n \u2022 Autumn (Eladrin Season, MToF 62)" + desc([ " After using Fey Step, up to 2 creatures I can see within 10 ft of me must make a Wis save", " If failed, a target is charmed by me for 1 minute, or until I or my allies damage it" ]) + "\n \u2022 Winter (Eladrin Season, MToF 62)" + desc([ " When I use Fey Step, one target in 5 ft of where I teleported from must make a Wis save", " If failed, it is frightened of me until the end of my next turn" ]) + "\n \u2022 Spring (Eladrin Season, MToF 62)" + desc([ " When I use Fey Step, I can instead teleport one willing creature I touch within 5 ft of me", " It teleports to an unoccupied space of my choice that I can see within 30 ft of me" ]) + "\n \u2022 Summer (Eladrin Season, MToF 62)" + desc([ " After using Fey Step, each creature of my choice within 5 ft of me takes fire damage", " This fire damage is equal to my Charisma modifier (minimum 1)" ]) }] }; RaceList["sea elf"] = { regExpSearch : /^(?!.*half)((?=.*\b(elfs?|elves|elvish|elven)\b)(?=.*\b(seas?|oceans?|water)\b)).*$/i, name : "Sea elf", sortname : "Elf, Sea", source : [["MToF", 62], ["W", 163], ["UA:ES", 1]], plural : "Sea elves", size : 3, speed : { walk : { spd : 30, enc : 20 }, swim : { spd : 30, enc : 20 } }, weaponProfs : [false, false, ["spear", "trident", "light crossbow", "net"]], languageProfs : ["Common", "Elvish", "Aquan", "Friend of the Sea"], vision : [["Darkvision", 60]], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["charmed"] }, skills : ["Perception"], age : " typically claim adulthood around age 100 and can live to be 750 years old", height : " range from under 5 to almost 6 feet tall (4'6\" + 2d8\")", weight : " weigh around 115 lb (90 + 2d8 \xD7 1d4 lb)", heightMetric : " range from under 1,5 to almost 1,8 metres tall (140 + 5d8 cm)", weightMetric : " weigh around 52 kg (40 + 5d8 \xD7 2d4 / 10 kg)", scores : [0, 2, 1, 0, 0, 0], trait : "Sea Elf (+2 Dexterity, +1 Constitution)" + desc([ "Trance: Elves don't need to sleep, but meditate semiconsciously, for 4 hours a day. While meditating, I can dream after a fashion. After resting in this way, I gain the same benefit that a human does from 8 hours of sleep, thus needing only 4 hours for a long rest.", "Child of the Sea. I have 30 ft swimming speed and can breathe air and water.", "Friend of the Sea: Through sounds and gestures, I can communicate simple ideas with any beast that has an inborn swimming speed." ]) }; RaceList["shadar-kai elf"] = { regExpSearch : /^(?!.*half)((?=.*shadar-kai)|((?=.*\b(elfs?|elves|elvish|elven)\b)(?=.*\b(shadows?|shadowfell)\b))).*$/i, name : "Shadar-kai", sortname : "Elf, Shadow (Shadar-kai)", source : [["MToF", 62]], plural : "Shadar-kai", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Elvish"], vision : [["Darkvision", 60]], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["charmed"] }, dmgres : ["Necrotic"], skills : ["Perception"], age : " typically claim adulthood around age 100 and can live to be 750 years old", height : " range from under 5 to over 6 feet tall (4'8\" + 2d8\")", weight : " weigh around 115 lb (90 + 2d8 \xD7 1d4 lb)", heightMetric : " range from under 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 52 kg (40 + 5d8 \xD7 2d4 / 10 kg)", scores : [0, 2, 1, 0, 0, 0], trait : "Shadar-kai (+2 Dexterity, +1 Constitution)" + desc([ "Trance: Elves don't need to sleep, but meditate semiconsciously, for 4 hours a day. This gives the same benefit as a human gets from 8 hours of sleep (long rest takes only 4 hours).", "Blessing of the Raven Queen: Once per long rest, as a bonus action, I can magically teleport up to 30 ft to an unoccupied space I can see.", "Once I reach 3rd level, after I use the Blessing of the Raven Queen, I appear translucent and have resistance to all damage until the start of my next turn." ]), features : { "blessing of the raven queen" : { name : "Blessing of the Raven Queen", minlevel : 1, usages : 1, recovery : "long rest", action : [["bonus action", ""]] } } }; // Gith and its two subraces RaceList["githyanki-mtof"] = { regExpSearch : /githyanki/i, name : "Githyanki", source : [["MToF", 96]], plural : "Githyanki", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Gith", 1], armorProfs : [true, true, false, false], weaponProfs : [false, false, ["shortsword", "longsword", "greatsword"]], skillstxt : "Choose any one skill or tool", age : " reach adulthood in their late teens and live for about a century", height : " are more leaner and taller than humans, most are a slender 6 feet tall (5'0\" + 2d12\")", weight : " weigh around 135 lb (100 + 2d12 \xD7 2d4 lb)", heightMetric : " are more leaner and taller than humans, most are a slender 1,8 metres tall (150 + 5d12 cm)", weightMetric : " weigh around 61 kg (45 + 5d10 \xD7 4d4 / 10 kg)", scores : [2, 0, 0, 1, 0, 0], trait : "Githyanki (+2 Strength, +1 Intelligence)\n" + (typePF ? "\n" : "") + "Githyanki Psionics:" + desc([ "I know the Mage Hand cantrip, but the hand is invisible.", "At 3rd level, I can cast Jump once per long rest.", "At 5th level, I can also cast Misty Step once per long rest.", "Intelligence is my spellcasting ability for these spells.", "I don't require components to cast these spells." ]), spellcastingAbility : 4, spellcastingBonus : [{ name : "Githyanki Psionics (1)", spells : ["mage hand"], selection : ["mage hand"], firstCol : 'atwill' }], spellChanges : { "mage hand" : { components : "", description : "Create invisible spectral hand for simple tasks or carry up to 10 lb; 1 a to control; can't have multiple", changes : "Using Githyanki Psionics, I can cast Mage Hand without requiring components and the spectral hand is invisible." } }, features : { "jump" : { name : "Githyanki Psionics (level 3)", minlevel : 3, spellcastingBonus : [{ name : "Githyanki Psionics (3)", spells : ["jump"], selection : ["jump"], firstCol : 'oncelr' }], spellChanges : { "jump" : { components : "", compMaterial : "", changes : "Using Githyanki Psionics, I can cast Jump once per long rest without requiring components." } } }, "misty step" : { name : "Githyanki Psionics (level 5)", minlevel : 5, spellcastingBonus : [{ name : "Githyanki Psionics (5)", spells : ["misty step"], selection : ["misty step"], firstCol : 'oncelr' }], spellChanges : { "misty step" : { components : SpellsList["misty step"].components + "*", changes : "Using Githyanki Psionics, I can cast Misty Step once per long rest without requiring components." } } } } }; AddRacialVariant("githyanki-mtof", "tool proficiency", { regExpSearch : /tool proficiency/i, skillstxt : "", toolProfs : [["Any tool", 1]] }); AddRacialVariant("githyanki-mtof", "skill proficiency", { regExpSearch : /skill proficiency/i, skillstxt : "Choose any one skill" }); RaceList["githzerai-mtof"] = { regExpSearch : /githzerai/i, name : "Githzerai", source : [["MToF", 96]], plural : "Githzerai", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Gith"], age : " reach adulthood in their late teens and live for about a century", height : " are more leaner and taller than humans, most are a slender 6 feet tall (4'11\" + 2d12\")", weight : " weigh around 115 lb (90 + 2d12 \xD7 1d4 lb)", heightMetric : " are more leaner and taller than humans, most are a slender 1,8 metres tall (150 + 5d12 cm)", weightMetric : " weigh around 55 kg (40 + 5d10 \xD7 2d4 / 10 kg)", scores : [0, 0, 0, 1, 2, 0], trait : "Githzerai (+1 Intelligence, +2 Wisdom)\n" + (typePF ? "\n" : "") + "Githzerai Psionics:" + desc([ "I know the Mage Hand cantrip, but the hand is invisible.", "At 3rd level, I can cast Shield once per long rest.", "At 5th level, I can also cast Detect Thoughts once per long rest.", "Wisdom is my spellcasting ability for these spells.", "I don't require components to cast these spells." ]), savetxt : { adv_vs : ["charmed", "frightened"] }, spellcastingAbility : 5, spellcastingBonus : [{ name : "Githzerai Psionics (1)", spells : ["mage hand"], selection : ["mage hand"], firstCol : 'atwill' }], spellChanges : { "mage hand" : { components : "", description : "Create invisible spectral hand for simple tasks or carry up to 10 lb; 1 a to control; can't have multiple", changes : "Using Githzerai Psionics, I can cast Mage Hand without requiring components and the spectral hand is invisible." } }, features : { "shield" : { name : "Githzerai Psionics (level 3)", minlevel : 3, spellcastingBonus : [{ name : "Githzerai Psionics (3)", spells : ["shield"], selection : ["shield"], firstCol : 'oncelr' }], spellChanges : { "shield" : { components : "", changes : "Using Githzerai Psionics, I can cast Shield once per long rest without requiring components." } } }, "detect thoughts" : { name : "Githzerai Psionics (level 5)", minlevel : 5, spellcastingBonus : [{ name : "Githzerai Psionics (5)", spells : ["detect thoughts"], selection : ["detect thoughts"], firstCol : 'oncelr' }], spellChanges : { "detect thoughts" : { components : "", compMaterial : "", changes : "Using Githzerai Psionics, I can cast Detect Thoughts once per long rest without requiring components." } } } } }; // Magic Items MagicItemsList["greater silver sword"] = { name : "Greater Silver Sword", source : [["MToF", 89]], type : "weapon (greatsword)", rarity : "legendary", description : "This magic greatsword gives +1 to hit and damage. While holding it, I have adv. on Int, Wis, and Cha saves, immunity to being charmed, and resistance to psychic damage. If I score a critical hit with it on a creature's astral body, I can cut the cord tethering it to its material body, instead of dealing damage.", descriptionFull : "This magic weapon grants a +3 bonus to attack and damage rolls made with it. While you hold the sword, you have advantage on Intelligence, Wisdom, and Charisma saving throws, you are immune to being charmed, and you have resistance to psychic damage. In addition, if you score a critical hit with it against a creature's astral body, you can cut the silvery cord that tethers the target to its material body, instead of dealing damage.", attunement : true, weight : 6, prerequisite : "Requires attunement by a creature that has psionic ability", prereqeval : function (v) { if (!v.isSpellcaster) return false; if ((/psion|mystic/i).test(What("Racial Traits"))) return true; for (var aCast in CurrentSpells) { var spCast = CurrentSpells[aCast]; if ((/psion|mystic/i).test(spCast.name) || (spCast.list && spCast.list.psionic)) return true; if (!spCast.bonus) continue; for (var aBon in spCast.bonus) { if ((/psion|mystic/i).test(aBon) || (/psion|mystic/i).test(spCast.bonus[aBon].name)) return true; } } }, weaponOptions : [{ baseWeapon : "greatsword", regExpSearch : /^(?=.*greater)(?=.*silver)(?=.*sword).*$/i, name : "Greater Silver Sword", source : [["MToF", 89]], description : "Heavy, two-handed; On crit vs. astral body, cut cord instead of damage", modifiers : [3, 3], selectNow : true }], savetxt : { text : ["Adv. on Int, Wis, and Cha saves"], immune : ["charmed"] }, advantages : [["Intelligence", true], ["Wisdom", true], ["Charisma", true]], dmgres : ["Psychic"] } MagicItemsList["infernal tack"] = { name : "Infernal Tack", source : [["MToF", 167], ["DiA", 224]], type : "wondrous item", rarity : "legendary", notLegalAL : true, description : "While wearing the spurs of this set, the nightmare equipped with the bridle, bit, reins, saddle, and stirrups is under my command. As an action, I can have it appear in 20 ft at the start of my next turn. It acts on as my ally on my initiative, remains for 1 day, until I or it dies, or I dismiss it as an action. If it dies, it reforms in 24 h.", descriptionLong : "This tack consists of a bridle, bit, reins, saddle, stirrups, and spurs. A nightmare equipped with the tack serves whoever wears the spurs until the wearer dies or the tack is removed. As an action, I can clash the spurs together or scrape them through blood, causing the nightmare to appear within 20 ft at the start of my next turn. It acts as my ally on my initiative count, remains for 1 day, until I or it dies, or until I dismiss it as an action. If it dies, it reforms within 24 hours, after which I can summon it again. The tack doesn't create a nightmare from thin air; one must first be subdued so the tack can be placed on it.", descriptionFull : "A narzugon binds a nightmare to its service with infernal tack, which consists of a bridle, bit, reins, saddle, stirrups, and spurs. A nightmare equipped with infernal tack must serve whoever wears the spurs until the wearer dies or the tack is removed.\n You can use an action to call a nightmare equipped with infernal tack by clashing the spurs together or scraping them through blood. The nightmare appears at the start of your next turn, within 20 feet of you. It acts as your ally and takes its turn on your initiative count. It remains for 1 day, until you or it dies, or until you dismiss it as an action. If the nightmare dies, it reforms in the Nine Hells within 24 hours, after which you can summon it again.\n The tack doesn't conjure a nightmare from thin air; one must first be subdued so the tack can be placed on it. No nightmare accepts this forced servitude willingly, but some eventually form strong loyalties to their masters and become true partners in evil.", attunement : true, weight : 26, // riding saddle (25) + bit and bridle (1) prerequisite : "Requires attunement by a creature of evil alignment", prereqeval : function(v) { return (/evil/i).test(What("Alignment")); }, action : [["action", ""]], creaturesAdd : [["Nightmare", true, function (AddRemove, prefix) { if (!AddRemove) return; // Show equipment section MakeCompMenu_CompOptions(prefix, ["companion", "visible", "comp.eqp"], true); // Add equipment when added var equip = ["bit and bridle", "riding"]; for (var i = 0; i < equip.length; i++) { var gear = GearList[equip[i]]; if (!gear) continue; AddToInv(prefix + "comp", "l", gear.name, gear.amount, gear.weight, "", false, false, false, false); } // Add notes var note = "I can use an action to call a nightmare equipped with infernal tack by clashing the spurs together or scraping them through blood. The nightmare appears at the start of my next turn, within 20 ft of me.\nThe nightmare acts as my ally and takes its turn on my initiative count. It remains for 1 day, until I or it dies, or until I dismiss it as an action. If the nightmare dies, it reforms in the Nine Hells within 24 hours, after which I can summon it again."; Value(prefix + "Comp.eqp.Notes", What("Unit System") === "metric" ? ConvertToMetric(note, 0.5) : note); }]] } // pub_20180918_WDH.js // This file adds the magic items from the Waterdeep: Dragon Heist adventure to MPMB's Character Record Sheet // Define the source SourceList["WDH"] = { name : "Waterdeep: Dragon Heist [items]", abbreviation : "WDH", group : "Adventure Books", campaignSetting : "Forgotten Realms", url : "https://dnd.wizards.com/products/waterdeep-dragon-heist", date : "2018/09/18" }; // Mundane Items WeaponsList["oversized longbow"] = { regExpSearch : /^(?=.*oversized?)(?=.*(\bbows?\b|longbow)).*$/i, name : "Oversized Longbow", nameAlt : ["Bow, Oversized"], source : [["WDH", 201]], list : "ranged", ability : 2, type : "Martial", damage : [2, 6, "piercing"], range : "150/600 ft", weight : 2, description : "Ammunition, heavy, two-handed; Damage uses Str; Requires Medium size and Str 18", abilitytodamage : false, modifiers : ["", "Str"], ammo : "oversized arrow", defaultExcluded : true }; AmmoList["oversized arrow"] = { name : "Oversized Arrows", source : [["WDH", 201]], icon : "Arrows", weight : 0.10, defaultExcluded : true }; // Magic Items var WDH_azuredgeFullDescription = [ "Forged by the archwizard Ahghairon, this intelligent battleaxe was crafted to defend Waterdeep. Its current wielder is a former member of Force Grey named Meloon Wardragon, but the weapon is searching for a new owner.", "Azuredge has a solid steel handle etched with tiny runes, wrapped in blue dragon hide with a star sapphire set into the pommel. The axe head is forged from silver, electrum, and steel alloys whose edges constantly shimmer with a deep blue luminescence.", "You gain a +3 bonus to attack and damage rolls made with this magic weapon. The Shield spell provides no defense against the axe, which passes through that spell's barrier of magical force.", "When you hit a fiend or an undead with the axe, cold blue flames erupt from its blade and deal an extra 2d6 radiant damage to the target.", ">>Hurling<<. The battleaxe has 3 charges. You can expend 1 charge and make a ranged attack with the axe, hurling it as if it had the thrown property with a normal range of 60 feet and a long range of 180 feet. Whether it hits or misses, the axe flies back to you at the end of the current turn, landing in your open hand or at your feet in your space (as you choose). The axe regains all expended charges daily at dawn.", ">>Illumination<<. While holding the axe, you can use an action to cause the axe to glow blue or to quench the glow. This glow sheds bright light in a 30-foot radius and dim light for an additional 30 feet.", ">>Sentience<<. Azuredge is a sentient lawful neutral weapon with an Intelligence of 12, a Wisdom of 15, and a Charisma of 15. It has hearing and darkvision out to a range of 120 feet.", "The weapon communicates telepathically with its wielder and can speak, read, and understand Common. It has a calm, delicate voice. The weapon can sense the presence of non-lawful creatures within 120 feet of it.", ">>Personality<<. Azuredge is sworn to protect Waterdeep, and it desires to be wielded by a law-abiding person willing to dedicate everything to the city's defense. The weapon is patient and takes its time finding its ideal wielder.", "If someone tries to use Azuredge against its will, the axe can become ten times heavier than normal, and can magically adhere to any Medium or larger object or surface it comes into contact with. Once it does so, the axe can't be wielded. Nothing short of a Wish spell can separate the axe from the item or surface to which it is adhered without destroying one or the other, though the axe can choose to end the effect at any time." ]; MagicItemsList["azuredge"] = { name : "Azuredge", source : [["WDH", 189]], type : "weapon (battleaxe)", rarity : "legendary", storyItemAL : true, description : "This battleaxe is sentient, adds +3 to hit and damage, and deals +2d6 radiant damage vs. fiends/undead. As an action, I can stop or start its glow of bright light in a 30-ft radius and dim light for another 30 ft. It has 3 charges, regaining all at dawn, which can be used to throw it, after which it returns to my hand. See Notes.", descriptionFull : WDH_azuredgeFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)<>Power Strike<<. When you hit with a melee attack using the staff, you can expend 1 charge to deal an extra 1d6 force damage to the target.\n >>Spells<<. While holding this staff, you can use an action to expend 1 or more of its charges to cast one of the following spells from it, using your spell save DC and spell attack bonus: Cone of Cold (5 charges), Fireball (5th-level version, 5 charges), Globe of Invulnerability (6 charges), Hold Monster (5 charges), Levitate (2 charges). Lightning Bolt (5th-level version, 5 charges), Magic Missile (1 charge), Ray of Enfeeblement (1 charge), or Wall of Force (5 charges).\n >>Retributive Strike<<. You can use an action to break the staff over your knee or against a solid surface, performing a retributive strike. The staff is destroyed and releases its remaining magic in an explosion that expands to fill a 30-foot-radius sphere centered on it.\n You have a 50% chance to instantly travel to a random plane of existence, avoiding the explosion. If you fail to avoid the effect, you take force damage equal to 16 \xD7 the number of charges in the staff. Every other creature in the area must make a DC 17 Dexterity saving throw. On a failed save, a creature takes an amount of damage based on how far away it is from the point of origin, as shown in the following table. On a successful save, a creature takes half as much damage.\n\n>>Distance from Origin\tEffect<<\n10 ft. away or closer\t8 \xD7 the number of charges in the staff\n11 to 20 ft. away\t6 \xD7 the number of charges in the staff\n21 to 30 ft. away\t4 \xD7 the number of charges in the staff\n\n\n >>Animate Walking Statues<<. You can expend 1 or more of the staff's charges as an action to animate or deactivate one or more of the walking statues of Waterdeep. You must be in the city to use this property, and you can animate or deactivate one statue for each charge expended. An animated statue obeys the telepathic commands of Khelben Arunsun's spirit, which is trapped inside the staff (see \"Personality\" below). A walking statue becomes inanimate if deactivated or if the staff is broken.\n >>Dispel Magic<<. You can expend 1 of the staff's charges as a bonus action to cast Dispel Magic on a creature, an object, or a magical effect that you touch with the tip of the staff. If the target is an unwilling creature or an object in the possession of such a creature, you must hit the creature with a melee attack using the Blackstaff before you can expend the charge to cast the spell.\n >>Drain Magic<<. This property affects only creatures that use spell slots. When you hit such a creature with a melee attack using the Blackstaff, you can expend 1 of the staff's charges as a bonus action, causing the target to expend one spell slot of the highest spell level it can cast without casting a spell. If the target has already expended all its spell slots, nothing happens. Spell slots that are expended in this fashion are regained when the target finishes a long rest, as normal.\n >>Master of Enchantment<<. When you cast an enchantment spell of 1st level or higher while holding the staff, you can make an Intelligence (Arcana) check with a DC of 10 + the level of the spell. If the check succeeds, you cast the spell without expending a spell slot.\n >>Sentience<<. The Blackstaff is a sentient staff of neutral alignment, with an Intelligence of 22, a Wisdom of 15, and a Charisma of 18. It has hearing and darkvision out to a range of 120 feet, and it can communicate telepathically with any creature that is holding it.\n >>Personality<<. The staff has the spirits of all previous Blackstaffs trapped within it. Its creator, Khelben Arunsun, is the dominant personality among them. Like Khelben, the staff is extremely devious and manipulative. It prefers to counsel its owner without exerting outright control. The staff's primary goal is to protect Waterdeep and its Open Lord, currently Laeral Silverhand. Its secondary goal is to help its wielder become more powerful.\n In the event that the holder of the office of the Blackstaff no longer serves the staff's wishes, the staff ceases to function until it finds a worthy inheritor\u2014someone whose loyalty to Waterdeep is beyond reproach.\n >>Spirit Trap<<. When the Blackstaff dies, the spirit of that individual becomes trapped in the staff along with the spirits of the previous Blackstaffs. (A Blackstaff whose spirit is trapped in the staff can't be raised from the dead.)\n Destroying the staff would release the spirits trapped inside it, but in that event, Khelben's spirit can lodge itself inside any one piece of the staff that remains. The piece containing Khelben's spirit has the staff's Sentience property but none of its other properties. As long as this piece of the staff exists, Khelben's spirit can make the staff whole again whenever he wishes. When the staff is remade, the spirits of the previous Blackstaffs become trapped inside it again."; if (MagicItemsList["staff of power"]) { MagicItemsList["blackstaff"] = { name : "Blackstaff", source : [["WDH", 190]], type : "staff", rarity : "legendary", storyItemAL : true, description : "This +2 quarterstaff gives me a +2 bonus on saves, AC, and spell attacks. It has 20 charges, regaining 2d8+4 at dawn, which can be used to cast spells, deal +1d6 force damage in melee, drain magic from a target hit in melee, or animate walking statues. It is sentient and has more features, see Notes page.", descriptionFull : WDH_blackstaffFullDescription.replace(/>>(.*?)<3", changes : "Can cast as a bonus action, but only on something touched by the staff. It might first require an attack by the staff to be able to cast it on" } }, toNotesPage : [{ name : "Features", note : "\n " + WDH_blackstaffFullDescription.replace(/>>(.*?)< 1; var hasBonus = How(aFld).indexOf(iTxt) !== -1; if (hasBonus !== addIt) { processMods( addIt, iName + " (magic item)", [{ type : "skill", field : aSkill, mod : 1, text : iTxt }] ); } } AddFeatureChoice(MagicItemsList["ioun stone"], false, "Supreme Intellect", { source : [["LLoK", 55]], rarity : "rare", magicItemTable : "G", description : "As an action, I can make this faceted sphere orbit my head at 1d3 ft or retrieve it. Others can catch it as an action with an attack or Acrobatics check (AC/DC 24). It has 10 HP and resistance to all damage. While it orbits my head, I gain a +1 bonus on Intelligence checks.", descriptionFull : "An Ioun stone is named after Ioun, a god of knowledge and prophecy revered on some worlds. Many types of Ioun stone exist, each type a distinct combination of shape and color.\n When you use an action to toss one of these stones into the air, the stone orbits your head at a distance of 1d3 feet and confers a benefit to you. Thereafter, another creature must use an action to grasp or net the stone to separate it from you, either by making a successful attack roll against AC 24 or a successful DC 24 Dexterity (Acrobatics) check. You can use an action to seize and stow the stone, ending its effect.\n A stone has AC 24, 10 hit points, and resistance to all damage. It is considered to be an object that is being worn while it orbits your head.\n You gain a +1 bonus to Intelligence checks while this faceted sphere orbits your head.", addMod : [ { type : "skill", field : "Arcana", mod : 1, text : "While the Ioun stone of Supreme Intellect orbits my head, I gain a +1 bonus on Intelligence checks." }, { type : "skill", field : "History", mod : 1, text : "While the Ioun stone of Supreme Intellect orbits my head, I gain a +1 bonus on Intelligence checks." }, { type : "skill", field : "Investigation", mod : 1, text : "While the Ioun stone of Supreme Intellect orbits my head, I gain a +1 bonus on Intelligence checks." }, { type : "skill", field : "Nature", mod : 1, text : "While the Ioun stone of Supreme Intellect orbits my head, I gain a +1 bonus on Intelligence checks." }, { type : "skill", field : "Religion", mod : 1, text : "While the Ioun stone of Supreme Intellect orbits my head, I gain a +1 bonus on Intelligence checks." } ] }); AddFeatureChoice(MagicItemsList["ioun stone"], false, "Historical Knowledge", { source : [["LLoK", 55]], rarity : "rare", magicItemTable : "G", description : "As an action, I can make this polished, steely sphere orbit my head at 1d3 ft or retrieve it. Others can catch it as an action with an attack or Acrobatics check (AC/DC 24). It has resistance to all damage and 10 HP. While it orbits my head, I gain proficiency in the History skill, or a +1 bonus with it if I'm already proficient.", descriptionFull : "An Ioun stone is named after Ioun, a god of knowledge and prophecy revered on some worlds. Many types of Ioun stone exist, each type a distinct combination of shape and color.\n When you use an action to toss one of these stones into the air, the stone orbits your head at a distance of 1d3 feet and confers a benefit to you. Thereafter, another creature must use an action to grasp or net the stone to separate it from you, either by making a successful attack roll against AC 24 or a successful DC 24 Dexterity (Acrobatics) check. You can use an action to seize and stow the stone, ending its effect.\n A stone has AC 24, 10 hit points, and resistance to all damage. It is considered to be an object that is being worn while it orbits your head.\n You gain proficiency in the History skill, or a +1 bonus to checks with that skill if already proficient, while this polished, steely sphere orbits your head.", skills : ["History"], changeeval : function () { MagicItemsList["ioun stone"].incrementSkill("His", "Historical Knowledge"); }, removeeval : function () { MagicItemsList["ioun stone"].incrementSkill("His", "Historical Knowledge", true); } }); AddFeatureChoice(MagicItemsList["ioun stone"], false, "Natural Knowledge", { source : [["LLoK", 55]], rarity : "rare", magicItemTable : "G", description : "As an action, I can make this burnished, brassy stone orbit my head at 1d3 ft or retrieve it. Others can catch it as an action with an attack or Acrobatics check (AC/DC 24). It has resistance to all damage and 10 HP. While it orbits my head, I gain proficiency in the Nature skill, or a +1 bonus with it if I'm already proficient.", descriptionFull : "An Ioun stone is named after Ioun, a god of knowledge and prophecy revered on some worlds. Many types of Ioun stone exist, each type a distinct combination of shape and color.\n When you use an action to toss one of these stones into the air, the stone orbits your head at a distance of 1d3 feet and confers a benefit to you. Thereafter, another creature must use an action to grasp or net the stone to separate it from you, either by making a successful attack roll against AC 24 or a successful DC 24 Dexterity (Acrobatics) check. You can use an action to seize and stow the stone, ending its effect.\n A stone has AC 24, 10 hit points, and resistance to all damage. It is considered to be an object that is being worn while it orbits your head.\n You gain proficiency in the Nature skill, or a +1 bonus to checks with that skill if already proficient, while this burnished, brassy stone orbits your head.", skills : ["Nature"], changeeval : function () { MagicItemsList["ioun stone"].incrementSkill("Nat", "Natural Knowledge"); }, removeeval : function () { MagicItemsList["ioun stone"].incrementSkill("Nat", "Natural Knowledge", true); } }); AddFeatureChoice(MagicItemsList["ioun stone"], false, "Religious Knowledge", { source : [["LLoK", 55]], rarity : "rare", magicItemTable : "G", description : "As an action, I can make this tiny golden gem orbit my head at 1d3 ft or retrieve it. Others can catch it as an action with an attack or Acrobatics check (AC/DC 24). It has resistance to all damage and 10 HP. While it orbits my head, I gain proficiency in the Religion skill, or a +1 bonus with it if I'm already proficient.", descriptionFull : "An Ioun stone is named after Ioun, a god of knowledge and prophecy revered on some worlds. Many types of Ioun stone exist, each type a distinct combination of shape and color.\n When you use an action to toss one of these stones into the air, the stone orbits your head at a distance of 1d3 feet and confers a benefit to you. Thereafter, another creature must use an action to grasp or net the stone to separate it from you, either by making a successful attack roll against AC 24 or a successful DC 24 Dexterity (Acrobatics) check. You can use an action to seize and stow the stone, ending its effect.\n A stone has AC 24, 10 hit points, and resistance to all damage. It is considered to be an object that is being worn while it orbits your head.\n You gain proficiency in the Religion skill, or a +1 bonus to checks with that skill if already proficient, while this tiny golden gem orbits your head.", skills : ["Religion"], changeeval : function () { MagicItemsList["ioun stone"].incrementSkill("Rel", "Religious Knowledge"); }, removeeval : function () { MagicItemsList["ioun stone"].incrementSkill("Rel", "Religious Knowledge", true); } }); AddFeatureChoice(MagicItemsList["ioun stone"], false, "Language Knowledge", { source : [["LLoK", 55]], rarity : "rare", magicItemTable : "G", description : "As an action, I can make this pulsating bit of red jeweled crystal orbit my head at 1d3 ft or retrieve it. Others can catch it as an action with an attack or Acrobatics check (AC/DC 24). It has 10 HP and resistance to all damage. While it orbits my head, I am fluent in one additional language chosen by the DM.", descriptionFull : "An Ioun stone is named after Ioun, a god of knowledge and prophecy revered on some worlds. Many types of Ioun stone exist, each type a distinct combination of shape and color.\n When you use an action to toss one of these stones into the air, the stone orbits your head at a distance of 1d3 feet and confers a benefit to you. Thereafter, another creature must use an action to grasp or net the stone to separate it from you, either by making a successful attack roll against AC 24 or a successful DC 24 Dexterity (Acrobatics) check. You can use an action to seize and stow the stone, ending its effect.\n A stone has AC 24, 10 hit points, and resistance to all damage. It is considered to be an object that is being worn while it orbits your head.\n You are fluent in one additional language while this pulsating bit of red jeweled crystal orbits your head. The DM chooses the language bestowed by the stone.", languageProfs : [1] }); AddFeatureChoice(MagicItemsList["ioun stone"], false, "Self-Preservation", { source : [["LLoK", 55]], rarity : "rare", description : "As an action, I can make this silvery gem orbit my head at 1d3 ft or retrieve it. Others can catch it as an action with an attack or Acrobatics check (AC/DC 24). It has 10 HP and resistance to all damage. While it orbits my head, I gain a +1 bonus to Intelligence saving throws.", descriptionFull : "An Ioun stone is named after Ioun, a god of knowledge and prophecy revered on some worlds. Many types of Ioun stone exist, each type a distinct combination of shape and color.\n When you use an action to toss one of these stones into the air, the stone orbits your head at a distance of 1d3 feet and confers a benefit to you. Thereafter, another creature must use an action to grasp or net the stone to separate it from you, either by making a successful attack roll against AC 24 or a successful DC 24 Dexterity (Acrobatics) check. You can use an action to seize and stow the stone, ending its effect.\n A stone has AC 24, 10 hit points, and resistance to all damage. It is considered to be an object that is being worn while it orbits your head.\n You gain a +1 bonus to Intelligence saving throws while this silvery gem orbits your head.", addMod : [{ type : "save", field : "Int", mod : 1, text : "While the Ioun stone of Self-Preservation orbits my head, I gain a +1 bonus to Intelligence saving throws." }] }, false, true); // force sorting on the last one } var LLoK_leatherGolemArmorFullDescription = [ "Strange rituals have repurposed the body of a flesh golem into this partially sentient suit of leather armor. While wearing this armor, you gain the following benefits:", "\u2022 You gain a +1 bonus to AC and to saving throws against spells and other magical effects.", "\u2022 >>Immutable Form<<. You are immune to any spell or effect that would alter your form.", "\u2022 >>Lightning Absorption<<. You gain resistance to lightning damage. Whenever you take lightning damage, you gain 5 temporary hit points.", ">>Curse<<. This armor is cursed, and it extends to whomever becomes attuned to it. Until the curse is broken with a remove curse spell or similar magic, you are unwilling to part with the armor. In addition, while you wear the cursed armor, you gain the following properties:", "\u2022 >>Aversion of Fire<<. If you take fire damage, you have disadvantage on attack rolls and ability checks until the end of your next turn.", "\u2022 >>Berserk<<. Whenever you suffer a critical hit, roll a d6. On a 6, you go beserk because of the armor. On each of your turns while berserk, you attack the nearest creature you can see. If no creature is near enough to move to and attack, you attack an object, with preference for an object smaller than yourself. Once you go beserk because of the armor, it cannot be removed. You continue to attack until you are incapacitated or until another creature is able to change your state of mind with appropriate magic (such as a calm emotions spell) or a successful DC 15 Charisma (Persuasion) check." ]; MagicItemsList["leather golem armor"] = { name : "Leather Golem Armor", source : [["LLoK", 55]], type : "armor (leather)", rarity : "rare", magicItemTable : "G", description : "I am unwilling to part with this leather armor until its curse is lifted from me, see Notes page. The curse makes me go berserk and have an aversion to fire. It gives me a +1 bonus to AC and saves vs. spells and magical effects. I have resistance to lightning damage and when I suffer such damage, I gain 5 temporary HP.", descriptionFull : LLoK_leatherGolemArmorFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)<>d20\tNew Form \td20\tNew Form<<", " 1\tTyrannosaurus\t 11\tWolf", " 2\tGiant ape \t 12\tHorse", " 3\tElephant \t 13\tOx", " 4\tGiant scorpion\t 14\tGiant frog", " 5\tRhinoceros \t 15\tPoisonous snake", " 6\tPolar bear \t 16\tHawk", " 7\tGiant toad \t 17\tOctopus", " 8\tGiant eagle \t 18\tCat", " 9\tBlack bear \t 19\tRat", "10\tCrocodile \t 20\tRabbit", "A creature is immune to this effect if it is immune to damage of the weapon's type, is a shapechanger, or has legendary actions.", ">>Curse<<. This weapon is cursed, and it extends to whomever becomes attuned to it. Until the curse is broken with a Remove Curse spell or similar magic, you are unwilling to part with the weapon. Whenever you attack a creature with this weapon and roll a 1 on the attack roll, you suffer the effect of a polymorph spell for 1 hour, rolling on the table to determine your new form." ]; MagicItemsList["polymorph blade"] = { name : "Polymorph Blade", nameTest : "Polymorph", source : [["LLoK", 59]], type : "weapon (any sword)", rarity : "very rare", magicItemTable : "H", description : "I'm unwilling to part with this magic sword. When I attack a creature with it and roll a 20 to hit, the creature must make a DC 15 Wisdom save or be polymorphed for 1 hour into a random beast (see Notes page). However, on a roll of 1 to hit, I am the one being polymorphed for 1 hour without a save.", descriptionFull : LLoK_polymorphBladeFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)<>Sentience<<. The Shield of the Hidden Lord is sentient as long as it imprisons Gargauth. While sentient, the shield has the following properties:", "\u2022 The shield has an Intelligence of 22, a Wisdom of 18, and a Charisma of 24, as well as hearing and truesight out to a range of 120 feet.", "\u2022 The shield can speak, read, and understand Common and Infernal, and it can communicate telepathically with any creature it can sense within 120 feet of it. Its voice is a deep, hollow whisper.", "\u2022 The shield has 3 charges. You can use an action to expend 1 charge to cast Fireball or 2 charges to cast Wall of Fire from the shield (save DC 21 for each). The Wall of Fire spell lasts for 1 minute (no concentration required). The shield regains all expended charges daily at dawn.", "\u2022 Anytime during your turn, the shield can choose to radiate an aura of dread for 1 minute. (This is not a power of the shield that you control.) Any creature hostile to you that starts its turn within 20 feet of the shield must make a DC 18 Wisdom saving throw. On a failed save, the creature is frightened until the start of its next turn. On a successful save, the creature is immune to this power of the shield for the next 24 hours. Once the shield uses this power, it can't use it again until the next dawn.\n", ">>Gargauth's Personality<<. Gargauth desperately seeks freedom but can't escape on its own. The pit fiend won't reveal its true nature, referring to itself only as the Hidden Lord. It drops hints and subtle suggestions that it is an angel trapped in an unholy prison. If released from the shield, the pit fiend honors the terms of whatever bargain it struck to facilitate its escape.", "While trapped in the shield, Gargauth carefully steers the shield's current owner toward committing acts of cruelty and domination, hoping to condemn the individual's soul to the Nine Hells. Conflict occurs if the shield's owner does anything that would make it more difficult for Gargauth to escape its prison, such as leaving the shield in a place where others are unlikely to find it.", "Gargauth doesn't know how to escape from the shield. The pit fiend believes (incorrectly) that it can break free of the shield if it's brought to the Nine Hells, for it's convinced that the shield's powers are weaker there.", ">>Freeing Gargauth<<. Casting dispel evil and good on the shield has a 1 percent chance of freeing the pit fiend, or automatically succeeds if the spell is cast by a solar, a planetar, or an archdevil. A god can release the pit fiend by touching the shield and speaking Gargauth's name. When released, Gargauth appears in a random, unoccupied space as close to the shield as possible." ]; MagicItemsList["shield of the hidden lord"] = { name : "Shield of the Hidden Lord", source : [["DiA", 225]], type : "shield", rarity : "legendary", storyItemAL : true, description : 'This shield grants me +2 bonus to AC and resistance to fire damage. It has 3 charges, regaining all at dawn. I can expend 1 charge to cast Fireball or 2 charges to cast Wall of Fire from it at DC 21. The shield is sentient and can communicate telepathically with any creature within 120 ft of it. See "Notes" page for more.', descriptionFull : DiA_shieldOfTheHiddenLordFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)<>Carrying Soul Coins<<. To hold a soul coin is to feel the soul bound within it\u2014overcome with rage or fraught with despair.", "An evil creature can carry as many soul coins as it wishes (up to its maximum weight allowance). A non-evil creature can carry a number of soul coins equal to or less than its Constitution modifier without penalty. A non-evil creature carrying a number of soul coins greater than its Constitution modifier has disadvantage on its attack rolls, ability checks, and saving throws.", ">>Using a Soul Coin<<. A soul coin has 3 charges. A creature carrying the coin can use its action to expend 1 charge from a soul coin and use it to do one of the following:", "\u2022 >>Drain Life<<. You siphon away some of the soul's essence and gain 1d10 temporary hit points.", "\u2022 >>Query<<. You telepathically ask the soul a question and receive a brief telepathic response, which you can understand. The soul knows only what it knew in life, but it must answer you truthfully and to the best of its ability. The answer is no more than a sentence or two and might be cryptic.\n", ">>Freeing a Soul<<. Casting a spell that removes a curse on a soul coin frees the soul trapped within it, as does expending all of the coin's charges. The coin itself rusts from within and is destroyed once the soul is released. A freed soul travels to the realm of the god it served or the outer plane most closely tied to its alignment (DM's choice). The souls of lawful evil creatures released from soul coins typically emerge from the River Styx as lemure devils.", "A soul can also be freed by destroying the coin that contains it. A soul coin has AC 19, 1 hit point for each charge it has remaining, and immunity to all damage except that which is dealt by a hellfire weapon or an infernal war machine's furnace.", "Freeing a soul from a soul coin is considered a good act, even if the soul belongs to an evil creature.", ">>Hellish Currency<<. Soul coins are a currency of the Nine Hells and are highly valued by devils. The coins are used among the infernal hierarchy to barter for favors, bribe the unwilling, and reward the faithful for services rendered.", "Soul coins are created by Mammon and his greater devils on Minauros, the third layer of the Nine Hells, in a vast chamber where the captured souls of evil mortals are bound into the coins. These coins are then distributed throughout the Nine Hells to be used for goods and services, infernal deals, dark bargains, and bribes." ]; MagicItemsList["soul coin"] = { name : "Soul Coin", source : [["DiA", 225], ["CoA", 269]], type : "wondrous item", rarity : "uncommon", description : "Each coin traps a unique soul, whose rage or despair is felt by me while I hold it. A coin has 3 charges. As an action, I can expend 1 charge to either siphon the soul's essence to grant me 1d10 temporary HP or telepathically ask the soul a question which it must answer truthfully. See \"Notes\" page for more.", descriptionFull : DiA_soulCoinFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)< 4 ? "my arcane firearm, " : classes.known.artificer.subclass.indexOf("armorer") !== -1 && classes.known.artificer.level > 2 ? "my arcane armor, " : ""; spellObj.compMaterial = (spellObj.compMaterial ? spellObj.compMaterial + ".\n\nAlso a" : "A") + "lways requires my artificer spellcasting focus: thieves' tools, any set of artisan's tools I'm proficient with, " + extraFocus + "or an item infused by me."; if (GetFeatureChoice("classes", "artificer", "spellcasting", true).indexOf("don't change component column on spell sheet") != -1) { // do nothing if set to do so } else if (!spellObj.components) { spellObj.components = "M\u0192"; } else if (spellObj.components.indexOf("M") == -1) { spellObj.components += ",M\u0192"; } else if ((/M([^\u0192\u2020]|$)/).test(spellObj.components)) { spellObj.components = spellObj.components.replace("M", "M\u0192"); } return true; } return false; }, "My artificer spells always require me to use a spellcasting focus: thieves' tools, artisan's tools I'm proficient with, or an item infused by me." ] }, extrachoices : ["Don't change component column on spell sheet"], extraname : "Artificer Spellcasting", "don't change component column on spell sheet" : { name : "[Meta] Don't alter spell sheets", source : [["E:RLW", 55], ["T", 11]], description: desc("The automation will not add M\u0192 to each artificer spell on the generated spell sheets") } }, "infuse item" : { name : "Infuse Item", source : [["E:RLW", 57], ["T", 12]], minlevel : 2, description : desc('Use the "Choose Feature" button above to add Artificer Infusions to the third page'), additional : levels.map(function (n) { return n < 2 ? "" : (n < 6 ? 4 : n < 10 ? 6 : n < 14 ? 8 : n < 18 ? 10 : 12) + " infusions known; max " + (n < 6 ? 2 : n < 10 ? 3 : n < 14 ? 4 : n < 18 ? 5 : 6) + " infused items"; }), extraname : "Artificer Infusion", extrachoices : ["Boots of the Winding Path (prereq: level 6 artificer)", "Enhanced Arcane Focus", "Enhanced Defense (armor)", "Enhanced Defense (shield)", "Enhanced Weapon", "Homunculus Servant", "Radiant Weapon (prereq: level 6 artificer)", "Repeating Shot", "Repulsion Shield (prereq: level 6 artificer)", "Resistant Armor (prereq: level 6 artificer)", "Returning Weapon"], extraTimes : levels.map(function (n) { return n < 2 ? 0 : n < 6 ? 4 : n < 10 ? 6 : n < 14 ? 8 : n < 18 ? 10 : 12; }), "boots of the winding path (prereq: level 6 artificer)" : { name : "Boots of the Winding Path", source : [["E:RLW", 62], ["T", 21]], description : desc([ "The wearer can use a bonus action to teleport up to 15 ft to an unoccupied space it can see", "It must be a space that the wearer had occupied some time during the current turn" ]), additional : "pair of boots; requires attunement", prereqeval : function(v) { return classes.known.artificer.level >= 6; }, magicitemsAdd : ["Boots of the Winding Path"] }, "enhanced arcane focus" : { name : "Enhanced Arcane Focus", source : [["E:RLW", 62], ["T", 21]], description: desc("The holder has a bonus to spell attack rolls and ignores half cover with spell attacks"), additional : levels.map(function (n) { return "rod/staff/wand; attunement; +" + (n < 10 ? 1 : 2); }), eval : function (lvl, chc) { AddMagicItem("Enhanced Arcane Focus +" + (classes.known.artificer.level < 10 ? 1 : 2)); }, removeeval : function (lvl, chc) { RemoveMagicItem("enhanced arcane focus, +1 or +2"); } }, "enhanced defense (armor)" : { name : "Enhanced Defense", source : [["E:RLW", 62], ["T", 21]], description : "", additional : levels.map(function (n) { return "armor/shield; +" + (n < 10 ? 1 : 2) + " magical"; }), prereqeval : function(v) { return GetFeatureChoice("classes", "artificer", "infuse item", true).indexOf("enhanced defense (shield)") == -1; }, eval : function (lvl, chc) { AddMagicItem("Armor +" + (classes.known.artificer.level < 10 ? 1 : 2)); }, removeeval : function (lvl, chc) { RemoveMagicItem("armor, +1, +2, or +3"); } }, "enhanced defense (shield)" : { name : "Enhanced Defense", source : [["E:RLW", 62], ["T", 21]], description : "", additional : levels.map(function (n) { return "armor/shield; +" + (n < 10 ? 1 : 2) + " magical"; }), prereqeval : function(v) { return GetFeatureChoice("classes", "artificer", "infuse item", true).indexOf("enhanced defense (armor)") == -1; }, eval : function (lvl, chc) { AddMagicItem("Shield +" + (classes.known.artificer.level < 10 ? 1 : 2)); }, removeeval : function (lvl, chc) { RemoveMagicItem("shield, +1, +2, or +3"); } }, "enhanced weapon" : { name : "Enhanced Weapon", source : [["E:RLW", 62], ["T", 21]], description : "", additional : levels.map(function (n) { return "simple/martial weapon; +" + (n < 10 ? 1 : 2) + " magical"; }), eval : function (lvl, chc) { AddMagicItem("Weapon +" + (classes.known.artificer.level < 10 ? 1 : 2)); }, removeeval : function (lvl, chc) { RemoveMagicItem("weapon, +1, +2, or +3"); } }, "homunculus servant" : { name : "Homunculus Servant", source : [["E:RLW", 62], ["T", 21]], description : desc([ "The item I infuse becomes the heart of a homunculus that immediately forms around it", "I determine its appearance; It is friendly to me and my allies and obeys my commands", 'See "Homunculus Servant" on a companion page to see its game statistics' ]), additional : "gem or crystal of 100+ gp", action : [["bonus action", " (command)"]], creaturesAdd : [["Homunculus Servant"]], creatureOptions : [{ name : "Homunculus Servant", source : [["E:RLW", 62], ["T", 22]], size : 5, type : "Construct", alignment : "Neutral", ac : 13, hp : 3, hd : [2, 4], hdLinked : ["artificer"], speed : "20 ft, fly 30 ft", scores : [4, 15, 12, 10, 10, 7], saves : ["", 4, "", "", "", ""], skills : { "perception" : 4, "stealth" : 4 }, damage_immunities : "poison", condition_immunities : "exhaustion, poisoned", senses : "Darkvision 60 ft", passivePerception : 14, languages : "understands the languages of its creator but can't speak", challengeRating : "0", proficiencyBonus : 2, proficiencyBonusLinked : true, attacksAction : 1, attacks : [{ name : "Force Strike", ability : 4, damage : [1, 4, "force"], range : "30 ft", description : "", modifiers : ["", "Prof"], abilitytodamage : false, useSpellMod : "artificer" }], features : [{ name : "Creator", description : "The homunculus obeys the commands of its creator and has the same proficiency bonus. It takes its turn immediately after its creator, on the same initiative count. It can move and take reactions on its own, but only takes the Dodge action on its turn unless its creator takes a bonus action to command it to take another action. If its creator is incapacitated, it can take any action, not just Dodge." }], traits : [{ name : "Healing", description : "The homunculus regains 2d6 hit points whenever the Mending spell is cast on it. Its HP total is equal to 1 + its creator's artificer level + its creator's Intelligence modifier. If it or its creator dies, the homunculus vanishes, leaving its heart in its space." }, { name : "Evasion", description : "If the homunculus is subjected to an effect that allows it to make a Dexterity saving throw to take only half damage, it instead takes no damage if it succeeds on the saving throw, and only half damage if it fails. It can't use this trait if it's incapacitated." }], actions : [{ name : "Channel Magic", description : "As a reaction, the homunculus delivers a spell cast by its creator that has a range of touch. The homunculus must be within 120 ft of its creator to do so." }], header : "Construct", calcChanges : { hp : function (totalHD, HDobj, prefix) { if (!classes.known.artificer) return; var intMod = Number(What('Int Mod')); var artLvl = classes.known.artificer.level; HDobj.alt.push(1 + intMod + artLvl); HDobj.altStr.push(" = 1 as a base\n + " + intMod + " from its creator's Intelligence modifier\n + " + artLvl + " from its creator's artificer level"); }, setAltHp : true, hpForceRecalc : true } }] }, "radiant weapon (prereq: level 6 artificer)" : { name : "Radiant Weapon", source : [["E:RLW", 62], ["T", 22]], description : desc([ "The weapon has a +1 bonus to attack and damage rolls made with it and it sheds light", "As a bonus action, its wielder can start/stop the light, 30-ft radius bright + 30 ft dim light", "The weapon has 4 charges, regaining 1d4 expended charges daily at dawn", "As a reaction when hit by an attack, the wielder can expend 1 charge to blind its attacker", "The attacker makes a Con save (my spell save DC) or is blinded until its next turn ends" ]), additional : "simple/martial weapon; requires attunement", prereqeval : function(v) { return classes.known.artificer.level >= 6; }, magicitemsAdd : ["Radiant Weapon"] }, "repeating shot" : { name : "Repeating Shot", source : [["E:RLW", 62], ["T", 22]], description : desc([ "The weapon requiring ammunition has a +1 bonus to attack and damage rolls made with it", "It magically produces one piece of ammunition whenever it is used to make a ranged attack", "Thus, it doesn't require ammunition and ignores the loading property if it has it" ]), additional : "weapon with ammo; requires attunement", magicitemsAdd : ["Repeating Shot"] }, "repulsion shield (prereq: level 6 artificer)" : { name : "Repulsion Shield", source : [["E:RLW", 63], ["T", 23]], description : desc([ "The shield gives its wearer an extra +1 bonus to AC; It has 4 charges, regaining 1d4 daily", "As a reaction when hit in melee, the wearer can use 1 charge to push the attacker 15 ft" ]), additional : "shield; requires attunement", prereqeval : function(v) { return classes.known.artificer.level >= 6; }, magicitemsAdd : ["Repulsion Shield"] }, "resistant armor (prereq: level 6 artificer)" : { name : "Resistant Armor", source : [["E:RLW", 63], ["T", 23]], description : desc([ "The armor gives its wearer resistance to one type of damage, chosen at the time of infusion", "Choose from: acid, cold, fire, force, lightning, necrotic, poison, psychic, radiant, or thunder" ]), additional : "suit of armor; requires attunement", prereqeval : function(v) { return classes.known.artificer.level >= 6; }, magicitemsAdd : ["Armor of Resistance"] }, "returning weapon" : { name : "Returning Weapon", source : [["E:RLW", 63], ["T", 23]], description : "After being used for a ranged attack, the weapon returns immediately; +1 magical bonus", additional : "weapon with the thrown property", magicitemsAdd : ["Returning Weapon"] } }, "the right tool for the job" : { name : "The Right Tool for the Job", source : [["E:RLW", 57], ["T", 13]], minlevel : 3, description: " [using thieves' or artisan's tools]" + desc("In 1 hour (during a rest) I can create a set of artisan's tools that last until I do so again"), }, "subclassfeature3" : { name : "Artificer Specialist", source : [["E:RLW", 57], ["T", 13]], minlevel : 3, description : desc([ 'Choose a specialism and put it in the "Class" field on the first page', "Choose either alchemist, artillerist, or battle smith" ]) }, "tool expertise" : { name : "Tool Expertise", source : [["E:RLW", 57], ["T", 13]], minlevel : 6, description : " [expertise with all tools I'm proficient with]", skillstxt : "Expertise with all tools I'm proficient with", eval : function () { Checkbox('Too Exp', true); }, removeeval : function () { Checkbox('Too Exp', false); } }, "flash of genius" : { name : "Flash of Genius", source : [["E:RLW", 57], ["T", 13]], minlevel : 7, description: desc("As a reaction when I or another in 30 ft make a check/save, I can add my Int mod to it"), action : [["reaction", ""]], usages : "Intelligence modifier per ", usagescalc : "event.value = Math.max(1, What('Int Mod'));", recovery : "long rest" }, "magic item adept" : { name : "Magic Item Adept", source : [["E:RLW", 57], ["T", 13]], minlevel : 10, description: desc("It takes me half the normal time and gold to craft common and uncommon magic items"), additional : levels.map(function (n) { return n < 10 ? "" : "attune to " + (n < 14 ? 4 : n < 18 ? 5 : 6) + " magic items"; }) }, "spell-storing item" : { name : "Spell-Storing Item", source : [["E:RLW", 58], ["T", 13]], minlevel : 11, description : desc([ "When I finish a long rest, I can infuse a 1st-/2nd-level artificer spell into an item I touch", "It has to be a weapon or spellcasting focus for me; Stored spells are lost if I do this again", "The spell must have a casting time of 1 action, but I need not have it prepared", "A creature holding an infused item can use an action to cast the spell, using my abilities" ]), additional : "cast stored spell", usages : "2\xD7 Int mod per ", usagescalc : "event.value = Math.max(2, Number(What('Int Mod')) * 2);", recovery : typePF ? "LR" : "long rest" }, "magic item savant" : { name : "Magic Item Savant", source : [["E:RLW", 58], ["T", 14]], minlevel : 14, description : " [ignore class/race/spell/level attune require.]" }, "soul of artifice" : { name : "Soul of Artifice", source : [["E:RLW", 58], ["T", 14]], minlevel : 20, description : " [+1 on all saves per attuned magic item]\n As a reaction when I'm reduced to 0 HP, I can end one infusion to drop to 1 HP instead", action : [["reaction", ""]], savetxt : { text : ["+1 to all saves per attuned magic item"] } } }, prereqLvl6 : function(v) { return classes.known.artificer.level >= 6; }, prereqLvl10 : function(v) { return classes.known.artificer.level >= 10; }, prereqLvl14 : function(v) { return classes.known.artificer.level >= 14; }, }; // Set the Artificer infusion list for Replicate Magic Item RunFunctionAtEnd(function() { var artMi = [ // 2nd-level artificer ["alchemy jug", 2], ["bag of holding", 2], ["cap of water breathing", 2], ["goggles of night", 2], ["rope of climbing", 2], ["sending stones", 2], ["wand of magic detection", 2], ["wand of secrets", 2], // 6th-level artificer ["boots of elvenkind", 6], ["cloak of elvenkind", 6], ["cloak of the manta ray", 6], ["eyes of charming", 6], ["gloves of thievery", 6], ["lantern of revealing", 6], ["pipes of haunting", 6], ["ring of water walking", 6], // 10th-level artificer ["boots of striding and springing", 10], ["boots of the winterlands", 10], ["bracers of archery", 10], ["brooch of shielding", 10], ["cloak of protection", 10], ["eyes of the eagle", 10], ["gauntlets of ogre power", 10], ["gloves of missile snaring", 10], ["gloves of swimming and climbing", 10], ["hat of disguise", 10], ["headband of intellect", 10], ["helm of telepathy", 10], ["medallion of thoughts", 10], ["necklace of adaptation", 10], // TCoE addition ["periapt of wound closure", 10], ["pipes of the sewers", 10], ["quiver of ehlonna", 10], ["ring of jumping", 10], ["ring of mind shielding", 10], ["slippers of spider climbing", 10], ["ventilating lung", 10], ["winged boots", 10], // 14th-level artificer ["amulet of health", 14], ["arcane propulsion arm", 14], ["belt of giant strength", 14, "hill (str 21, rare)"], ["boots of levitation", 14], ["boots of speed", 14], ["bracers of defense", 14], ["cloak of the bat", 14], ["dimensional shackles", 14], ["gem of seeing", 14], ["horn of blasting", 14], ["ring of free action", 14], ["ring of protection", 14], ["ring of the ram", 14] ]; // add all common items (except potions and scrolls) for (var mi in MagicItemsList) { var aMI = MagicItemsList[mi]; if (aMI.type && !(/potion|scroll/i).test(aMI.type) && ( (!aMI.rarity && aMI.choices) || (aMI.rarity && aMI.rarity.toLowerCase() === "common") ) ) { // only look at choices if the main object has no rarity (i.e. the choices have different rarities) if (!aMI.rarity && aMI.choices) { for (var c = 0; c < aMI.choices.length; c++) { var choiceNmLC = aMI.choices[c].toLowerCase(); var aMIchoice = aMI[choiceNmLC]; // skip if not common rarity or a potion or a scroll if (!aMIchoice || !aMIchoice.rarity || aMIchoice.rarity.toLowerCase() !== "common" || (/potion|scroll/i).test(aMIchoice.type)) continue; artMi.push([mi, 0, choiceNmLC]); } } else { // the main object has rarity "common", so add it as a whole artMi.push([mi]); } } } var theObj = ClassList.artificer.features["infuse item"]; for (var a = 0; a < artMi.length; a++) { var MI0 = artMi[a][0]; var MI1 = artMi[a][1]; var MI2 = artMi[a][2]; var anArtMi = MagicItemsList[MI0]; if (!anArtMi) continue; if (MI2 && anArtMi[MI2]) { anArtMi = { name : anArtMi[MI2].name ? anArtMi[MI2].name : anArtMi.name + " [" + MI2.capitalize() + "]", rarity : anArtMi[MI2].rarity ? anArtMi[MI2].rarity : anArtMi.rarity, source : anArtMi[MI2].source ? anArtMi[MI2].source : anArtMi.source, attunement : anArtMi[MI2].attunement !== undefined ? anArtMi[MI2].attunement : anArtMi.attunement } } var theI = anArtMi.name + (MI1 ? " (prereq: level " + MI1 + " artificer)" : ""); var theILC = theI.toLowerCase(); if (theObj[theILC]) continue; theObj[theILC] = { name : anArtMi.name, description : "", source : anArtMi.source, magicitemsAdd : [anArtMi.name], additional : anArtMi.attunement ? "requires attunement" : undefined, prereqeval : MI1 && MI1 > 2 ? ClassList.artificer["prereqLvl" + MI1] : undefined, submenu : "Replicate Magic Item" + (MI1 ? " (prereq: level " + (" "+MI1).slice(-2) + " artificer)" : " (common magic items) [" + getLetterRange(anArtMi.name, ["A-F", "G-Q", "R-Z"]) + "]") }; theObj.extrachoices.push(theI); }; }); // Add the Alchemist specialism AddSubClass("artificer", "alchemist", { regExpSearch : /^(?=.*alchemist)(?!.*wizard).*$/i, subname : "Alchemist", fullname : "Alchemist", source : [["E:RLW", 58], ["T", 14]], features : { "subclassfeature3" : { name : "Tools Proficiency", source : [["E:RLW", 58], ["T", 14]], minlevel : 3, description : " [proficient with alchemist's supplies]", toolProfs : ["Alchemist's supplies"], spellcastingExtra : ["healing word", "ray of sickness", "flaming sphere", "melf's acid arrow", "gaseous form", "mass healing word", "blight", "death ward", "cloudkill", "raise dead"] }, "subclassfeature3.1" : { name : "Experimental Elixir", source : [["E:RLW", 58], ["T", 14]], minlevel : 3, description : desc([ "When I finish a long rest I can produce a number of elixirs in empty flasks I touch", "Also, as an action, I can expend a spell slot to create one elixir in a touched empty flask", "I need alchemist supplies on my person to do this; An elixir lasts until my next long rest", "For their effects, see the experimental elixir table on a Notes page; They work like potions" ]), additional : levels.map(function (n) { return n < 3 ? "" : (n < 6 ? 1 : n < 15 ? 2 : 3) + " elixir" + (n < 6 ? "" : "s"); }), action : [["action", ""]], toNotesPage : [{ name : "Experimental Elixir Table", note : [ "Whenever I finish a long rest, I can magically produce a number of experimental elixir in empty flasks I touch. I can create one at 3rd level, two at 6th level, and three at 15th level.", "Creating an experimental elixir requires me to have alchemist's supplies on my person, and any elixir created like this lasts until it is drunk or until the end of my next long rest.", "I can create additional experimental elixirs by expending a spell slot of 1st level or higher for each one. When I do so, I use my action to create the elixir in an empty flask I touch.", "As an action, a creature can drink the elixir or administer it to an incapacitated creature.", "The effect of an elixir when someone drinks it is found on the table below. Roll to determine the effect for each elixir I create when finishing a long rest. I can choose the effect from the table for those created by expending a spell slot.", "\n D6\tEFFECT", "1\tHealing: The drinker regains a number of hit points equal to 2d4 + my Intelligence modifier.", "2\tSwiftness: The drinker's walking speed increases by 10 ft for 1 hour.", "3\tResilience: The drinker gains a +1 bonus to AC for 10 minutes.", "4\tBoldness: The drinker can roll a d4 and add the number rolled to every attack roll and saving throw they make for the next minute.", "5\tFlight: The drinker gains a flying speed of 10 ft for 10 minutes.", "6\tTransformation: The drinker's body is transformed as if by the alter self spell. The drinker determines the transformation caused by the spell, the effects of which last for 10 minutes." ] }] }, "subclassfeature5" : { name : "Alchemical Savant", source : [["E:RLW", 58], ["T", 15]], minlevel : 5, description : desc([ "When I cast spells using alchemist's supplies as my spellcasting focus, I can enhance them", "I add my Int mod to one roll of acid, fire, necrotic, or poison damage, or restoring HP" ]), calcChanges : { atkCalc : [ function (fields, v, output) { if (v.thisWeapon[3] && v.thisWeapon[4].indexOf("artificer") !== -1 && (/acid|fire|necrotic|poison/i).test(fields.Damage_Type)) { output.extraDmg += Math.max(Number(What("Int Mod")), 1); } }, "Artificer spells that deal acid, fire, necrotic, or poison damage which I cast while using alchemist's supplies as my spellcasting focus, have my Intelligence modifier (min 1) added to one damage die roll." ], spellAdd : [ function (spellKey, spellObj, spName) { if (spellObj.psionic || spName !== "artificer") return; var toAdd = Math.max(Number(What("Int Mod")), 1); if (genericSpellDmgEdit(spellKey, spellObj, "acid|fire|necro\\.?|necrotic|poison", toAdd, true, true) || genericSpellDmgEdit(spellKey, spellObj, "heal", toAdd, true, true)) { return true; } }, "Artificer spells I cast using alchemist's supplies as my spellcasting focus, have my Intelligence modifier (min 1) added to one die rolled for dealing acid, fire, necrotic, or poison damage, or when restoring hit points." ] } }, "subclassfeature9" : { name : "Restorative Reagents", source : [["E:RLW", 59], ["T", 15]], minlevel : 9, description : desc([ "Drinking my experimental elixirs now also grants 2d6 + my Int mod in temp HP (min 1)", "I can cast Lesser Restoration with alchemist's supplies without a spell slot (Int mod times)" ]), usages : "Int mod per ", usagescalc : "event.value = Math.max(1, What('Int Mod'));", recovery : "long rest", limfeaname : "Restorative Reagents: Lesser Restoration", spellcastingBonus : [{ name : "Restorative Reagents", spells : ["lesser restoration"], selection : ["lesser restoration"], firstCol : "Sp" }], spellChanges : { "lesser restoration" : { components : "V,S,M\u0192", compMaterial : "Alchemist's supplies", changes : "When using my Restorative Reagents class feature, I can cast Lesser Restoration a number of times per long rest equal to my Intelligence modifier. To do so, I have to use alchemist's supplies as my spellcasting focus." } } }, "subclassfeature15" : { name : "Chemical Mastery", source : [["E:RLW", 59], ["T", 15]], minlevel : 15, additional: "each spell 1\xD7 per long rest", description : desc([ "I have resistance to acid and poison damage and immunity to being poisoned", "I can cast Greater Restoration and Heal each once per long rest without a spell slot", "I need alchemist's supplies as a focus for it, but the spells require no material components" ]), dmgres : ["Acid", "Poison"], savetxt : { immune : ["poisoned condition"] }, spellcastingBonus : [{ name : "Chemical Mastery", spells : ["greater restoration", "heal"], selection : ["greater restoration", "heal"], firstCol : "oncelr", times : 2 }], spellChanges : { "greater restoration" : { components : "V,S,M\u0192", compMaterial : "Alchemist's supplies", description : "Reduce exhaustion 1 lvl or end charm, petrify, curse, one ability score reduction, or max HP reduction", changes : "When using my Chemical Mastery class feature and alchemist's supplies as my spellcasting focus, I can cast Greater Restoration once per long rest without using a spell slot or requiring other material components." }, "heal" : { components : "V,S,M\u0192", compMaterial : "Alchemist's supplies", allowUpCasting : false, changes : "When using my Chemical Mastery class feature and alchemist's supplies as my spellcasting focus, I can cast Heal once per long rest without using a spell slot." } } } } }); // Add the Artillerist specialism AddSubClass("artificer", "artillerist", { regExpSearch : /^(?=.*artillerist)(?!.*wizard).*$/i, subname : "Artillerist", fullname : "Artillerist", source : [["E:RLW", 59], ["T", 17]], features : { "subclassfeature3" : { name : "Tools Proficiency", source : [["E:RLW", 59], ["T", 17]], minlevel : 3, description : " [proficient with woodcarver's tools]", toolProfs : ["Woodcarver's tools"], spellcastingExtra : ["shield", "thunderwave", "scorching ray", "shatter", "fireball", "wind wall", "ice storm", "wall of fire", "cone of cold", "wall of force"] }, "subclassfeature3.1" : { name : "Eldritch Cannon", source : [["E:RLW", 59], ["T", 17]], minlevel : 3, description : desc([ "As an action, I can use woodcarver's or smith's tools to create an eldritch cannon in 5 ft", "I can do this once per long rest, or by expending a spell slot (SS 1+) to create one cannon", "I decide its size (Small/Tiny), appearance, type: flamethrower, force ballista, or protector", "It disappears after 1 hour, when reduced to 0 HP, or if I dismiss it as an action", "As a bonus action when within 60 ft of it, I can activate it to move and do its action", "I can't have multiple cannons; Select \"Eldritch Cannon\" on a companion page for its stats" ]), usages : 1, recovery : "long rest", altResource : "SS 1+", additional : levels.map(function(n) { return n < 3 ? "" : n < 15 ? "1 cannon" : "2 cannons"; }), action : [["action", " (create/dismiss)"], ["bonus action", " (activate)"]], creaturesAdd : [["Eldritch Cannon"]], creatureOptions : [{ name : "Eldritch Cannon", source : [["E:RLW", 59], ["T", 17]], size : [4, 5], type : "Object", alignment : "", ac : 18, hp : 5, hd : ["", ""], speed : "15 ft, climb 15 ft", scores : [10, 10, 10, 10, 10, 10], damage_immunities : "poison, psychic", passivePerception : 10, challengeRating : "1", proficiencyBonus : 2, proficiencyBonusLinked : true, attacksAction : 0, attacks : [{ name : "Flamethrower", ability : 4, damage : [2, 8, "fire"], range : "15-ft cone", description : "Dex save, success - half damage; Unattended flammable objects ignite", dc : true, useSpellMod : "artificer", abilitytodamage : false, tooltip : "The cannon exhales fire in an adjacent 15-ft cone that its creator designates. Each creature in that area must make a Dexterity saving throw against its creator's artificer spell save DC, taking 2d8 fire damage on a failed save or half as much damage on a successful one. The fire ignites any flammable objects in the area that aren't being worn or carried." }, { name : "Force Ballista", ability : 4, damage : [2, 8, "force"], range : "120 ft", description : "Creature hit is pushed 5 ft away", useSpellMod : "artificer", abilitytodamage : false, tooltip : "The cannon's creator makes a ranged spell attack, originating from the cannon, at one creature or object within 120 ft of it. On a hit, the target takes 2d8 force damage, and if the target is a creature, it is pushed up to 5 ft away from the cannon." }, { name : "Detonate", ability : 4, damage : [3, 8, "force"], range : "20-ft radius", description : "Dex save, success - half damage; Destroys cannon", dc : true, useSpellMod : "artificer", abilitytodamage : false, tooltip : "As an action, its creator can command the cannon to detonate if its creator is within 60 ft of it. Doing so destroys the cannon and forces each creature within 20 ft of it to make a Dexterity saving throw against its creator's artificer spell save DC, taking 3d8 force damage on a failed save or half as much damage on a successful one." }], features : [{ name : "Healing", description : "The cannon regains 2d6 HP whenever Mending is cast on it." }, { name : "Cannon Type", description : "Upon creation, the creator decides what type of cannon it is: Flamethrower, Force Ballista, or Protector. What feature/attack it can use depends on its type." }, { name : "Protector", description : "The cannon emits a burst of positive energy that grants itself and each creature of its creator's choice within 10 ft of it a number of temporary hit points equal to 1d8 + its creator's Intelligence modifier (minimum of +1)." }], traits : [{ name : "Creator", description : "As an object, the cannon only acts when activated by its creator, uses its creator's artificer spell attack and save DC, and has five times the artificer level in HP. It disappears after 1 hour, when reduced to 0 HP, or when its creator dismisses it as an action." }, { name : "Activation", description : "The creator of the cannon can activate it as a bonus action while within 60 ft of it. Once activated, the cannon does as instructed, moves and uses the action associated with its type: flamethrower attack, force ballista attack, or protector feature." }, { name : "Detonate (Artillerist 9)", minlevel : 9, description : "The creator of the cannon, can use an action to detonate the cannon when within 60 ft of it, see the attack section. The cannon's attacks now deal 3d8 damage.", eval : function(prefix, lvl) { // add the Detonate attack entry Value(prefix + "Comp.Use.Attack.3.Weapon Selection", "Detonate"); // Upgrade the damage for the attacks for (var i = 1; i <= 2; i++) { Value(prefix + "BlueText.Comp.Use.Attack." + i + ".Damage Die", "3d8"); } }, removeeval : function(prefix, lvl) { // remove the Detonate attack entry Value(prefix + "Comp.Use.Attack.3.Weapon Selection", ""); // Reset the damage for the attacks for (var i = 1; i <= 2; i++) { Value(prefix + "BlueText.Comp.Use.Attack." + i + ".Damage Die", "2d8"); } } }, { name : "Shimmering Field (Artillerist 15)", minlevel : 15, description : "The creator of the cannon and their allies have half cover while within 10 ft of the cannon." }], minlevelLinked : ["artificer"], header : "Object", calcChanges : { hp : function (totalHD, HDobj, prefix) { if (!classes.known.artificer) return; var artLvl = classes.known.artificer.level; HDobj.alt.push(5 * artLvl); HDobj.altStr.push(" = 5 \xD7 " + artLvl + " from five times its creator's artificer level"); }, setAltHp : true }, eval : function(prefix, lvl) { // remove the Detonate attack if adding this creature before artificer level 9 if (lvl[0] < 9) Value(prefix + "Comp.Use.Attack.3.Weapon Selection", ""); } }] }, "subclassfeature5" : { name : "Arcane Firearm", source : [["E:RLW", 59], ["T", 18]], minlevel : 5, description : " [lasts until I use this feature again]" + desc([ "After a long rest, I can use woodcarver's tools to enhance a wand, staff, or rod", "If I use this as my spellcasting focus for an artificer spell, I add +1d8 to one damage" ]), calcChanges : { atkAdd : [ function (fields, v) { if (v.thisWeapon[3] && v.thisWeapon[4].indexOf("artificer") !== -1) { fields.Damage_Die = fields.Damage_Die.replace(/D/g, 'd'); var d8Regex = /(\d+)d8/; if (fields.Damage_Die.indexOf('Bd8') != -1) { fields.Damage_Die = fields.Damage_Die.replace('Bd8', 'Cd8'); } else if (fields.Damage_Die.indexOf('Cd8') != -1) { fields.Damage_Die = fields.Damage_Die.replace('Cd8', 'Qd8'); } else if (d8Regex.test(fields.Damage_Die)) { fields.Damage_Die = fields.Damage_Die.replace(d8Regex, Number(fields.Damage_Die.replace(d8Regex, '$1')) + 1 + 'd8'); } else if (v.thisWeapon[3] == "eldritch blast") { fields.Description += (fields.Description ? '; ' : '') + "One ray +1d8 dmg"; } else { fields.Damage_Die += '+1d8'; } } }, "If I use my arcane firearm as a spellcasting focus for an artificer spell, I can add +1d8 to one of the spell's damage rolls.", 10 ], spellAdd : [ function (spellKey, spellObj, spName) { if (spellObj.psionic || spName !== "artificer") return; return genericSpellDmgEdit(spellKey, spellObj, "\\w+\\.?", "1d8", true, true); }, "If I use my arcane firearm as a spellcasting focus for an artificer spell, I can add +1d8 to one of the spell's damage rolls." ] } }, "subclassfeature9" : { name : "Explosive Cannon", source : [["E:RLW", 60], ["T", 18]], minlevel : 9, description: desc("My eldritch cannons deal +1d8 damage; As an action, I can detonate a cannon in 60 ft"), action : [["action", "Eldritch Cannon (detonate)"]] }, "subclassfeature15" : { name : "Fortified Position", source : [["E:RLW", 60], ["T", 18]], minlevel : 15, description : " [cannons grant half cover in 10 ft to allies]" + desc([ "I can now have two cannons at the same time and activate both with one bonus action", "I can create 2 eldritch cannons with the same action (still only one with a spell slot)" ]) } } }); // Add the Battle Smith specialism AddSubClass("artificer", "battle smith", { regExpSearch : /^(?=.*battle)(?=.*smith)(?!.*wizard).*$/i, subname : "Battle Smith", fullname : "Battle Smith", source : [["E:RLW", 60], ["T", 18]], attacks : [1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], features : { "subclassfeature3" : { name : "Battle Ready \u0026 Tool Proficiency", source : [["E:RLW", 61], ["T", 19]], minlevel : 3, description : desc([ "I gain proficiency with martial weapons and smith's tools", "I can use my Intelligence modifier instead of Strength or Dexterity for magic weapons" ]), toolProfs : ["Smith's tools"], spellcastingExtra : ["heroism", "shield", "branding smite", "warding bond", "aura of vitality", "conjure barrage", "aura of purity", "fire shield", "banishing smite", "mass cure wounds"], weaponProfs : [false, true], calcChanges : { atkAdd : [ function (fields, v) { if (!v.isSpell && (v.theWea.isMagicWeapon || v.thisWeapon[1]) && (fields.Mod === 1 || fields.Mod === 2) && Number(What("Int")) > Number(What(fields.Mod === 1 ? "Str" : "Dex"))) { fields.Mod = 4; } }, 'I can use my Intelligence modifier instead of Strength or Dexterity for the attack and damage rolls of magic weapons.' ] } }, "subclassfeature3.1" : { name : "Steel Defender", source : [["E:RLW", 61], ["T", 19]], minlevel : 3, description : desc([ "When I end a long rest, I can use smith's tools to create a steel defender", "I determine its appearance; It obeys my commands and it acts on my initiative, after me", "Unless I use a bonus action to command it, it only takes the Dodge action on its turn", "It can take reactions and move on its turn even if I don't command it", "I can't have multiple at once; Select \"Steel Defender\" on a companion page for its stats" ]), action : [["bonus action", " (command)"], ["action", " (restore)"]], creaturesAdd : [["Steel Defender"]], creatureOptions : [{ name : "Steel Defender", source : [["E:RLW", 61], ["T", 19]], size : 3, type : "Construct", alignment : "Neutral", ac : 15, hp : 12, hd : [2, 8], hdLinked : ["artificer"], speed : "40 ft", scores : [14, 12, 14, 4, 10, 6], saves : ["", 3, 4, "", "", ""], skills : { "athletics" : 4, "perception" : 4 }, damage_immunities : "poison", condition_immunities : "charmed, exhaustion, poisoned", passivePerception : 14, senses : "Darkvision 60 ft", languages : "understands the languages of its creator but can't speak", challengeRating : "1", proficiencyBonus : 2, proficiencyBonusLinked : true, attacksAction : 1, attacks : [{ name : "Force-Empowered Rend", ability : 4, damage : [1, 8, "piercing"], range : "Melee (5 ft)", description : "", modifiers : ["", "Prof"], abilitytodamage : false, useSpellMod : "artificer" }, { name : "Deflect Attack (reaction)", ability : 0, damage : [1, 4, "force"], range : "Melee (5 ft)", description : "After using the reaction, the attacker takes this damage, no attack roll required", modifiers : ["-Prof", "oInt"], abilitytodamage : false }], features : [{ name : "Creator", description : "The steel defender obeys the commands of its creator and shares its proficiency bonus. It takes its turn immediately after its creator, on the same initiative count. It can move and take reactions on its own, but only takes the Dodge action on its turn unless its creator takes a bonus action to command it to take another action. If its creator is incapacitated, it can take any action, not just Dodge." }, { name : "Vigilant", description : "The " + (typePF ? "" : "steel ") + "defender can't be surprised." }], traits : [{ name : "Healing", description : "The steel defender regains 2d6 HP whenever the Mending spell is cast on it. Its HP total is equal to 2 + its creator's artificer level times five + its creator's Int mod. Within an hour of its death, while within 5 ft, its creator can take an action to use smith's tools and expend a spell slot to have it return to full HP after 1 minute. If its creator dies, " + (typePF ? "the steel defender also perishes" : "so does it") + "." }], actions : [{ name : "Repair (3/Day)", description : "As an action, the " + (typePF ? "" : "magical mechanisms inside the ") + "steel defender restore" + (typePF ? "s" : "") + " 2d8 + its proficiency bonus in HP to itself or to one construct or object within 5 ft of it." }, { name : "Deflect Attack (reaction)", description : typePF ? "As a reaction, the steel defender imposes disadvantage on the attack roll of one creature it can see that is within 5 ft of it, provided the attack roll is against a creature other than the defender." : "As a reaction, the defender imposes disadv. on the attack roll of one creature it can see within 5 ft, provided the creature attacks another than the defender." }, { name : "Arcane Jolt (Battle Smith 9)", minlevel : 9, eval : function(prefix, lvl) { Value(prefix + "Comp.Use.Attack.1.Description", "Arcane Jolt (1d6): On hit, deal force damage or heal target in 30 ft"); }, removeeval : function(prefix, lvl) { Value(prefix + "Comp.Use.Attack.1.Description", ""); } }, { name : "Improved Defender (Battle Smith 15)", minlevel : 15, description : "The steel defender's Deflect Attack now deals 1d4 + its creator's Intelligence modifier in force damage to the attacker.", addMod : [{ type : "", field : "Comp.Use.AC", mod : 2, text : "The steel defender gains a +2 bonus to its AC (base AC of 15)." }], eval : function(prefix, lvl) { Value(prefix + "Comp.Use.Attack.1.Description", What(prefix + "Comp.Use.Attack.1.Description").replace("Arcane Jolt (1d6)", "Arcane Jolt (2d6)")); Value(prefix + "Comp.Use.Attack.2.Weapon Selection", "Deflect Attack (reaction)"); }, removeeval : function(prefix, lvl) { Value(prefix + "Comp.Use.Attack.1.Description", What(prefix + "Comp.Use.Attack.1.Description").replace("Arcane Jolt (2d6)", "Arcane Jolt (1d6)")); Value(prefix + "Comp.Use.Attack.2.Weapon Selection", ""); } }], minlevelLinked : ["artificer"], header : "Construct", calcChanges : { hp : function (totalHD, HDobj, prefix) { if (!classes.known.artificer) return; var intMod = Number(What('Int Mod')); var artLvl = classes.known.artificer.level; var artLvl5 = 5 * artLvl; HDobj.alt.push(2 + intMod + artLvl5); HDobj.altStr.push(" = 2 as a base\n + " + intMod + " from its creator's Intelligence modifier\n + 5 \xD7 " + artLvl + " from five times its creator's artificer level (" + artLvl5 + ")"); }, setAltHp : true, hpForceRecalc : true }, eval : function(prefix, lvl) { // remove the Deflect Attack (reaction) attack if adding this creature before artificer level 15 if (lvl[0] < 15) Value(prefix + "Comp.Use.Attack.2.Weapon Selection", ""); } }] }, "subclassfeature9" : { name : "Arcane Jolt", source : [["E:RLW", 61], ["T", 20]], minlevel : 9, description : function () { var descr9 = desc([ "Once per turn when my steel defender or magic weapon hits a target, I can have it:", " \u2022 Deal an extra +2d6 force damage to the target", " \u2022 Restore 2d6 HP to another target within 30 ft of the one that was hit" ]); var descr15 = descr9.replace(/2d6/g, '4d6'); return levels.map(function (n) { return n < 9 ? "" : n < 15 ? descr9 : descr15; }); }(), usages : "Intelligence modifier per ", usagescalc : "event.value = Math.max(1, What('Int Mod'));", recovery : "long rest", additional : levels.map(function (n) { return n < 9 ? "" : (n < 15 ? 2 : 4) + "d6"; }), calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.isMagicWeapon || v.thisWeapon[1]) { fields.Description += (fields.Description ? '; ' : '') + 'Arcane Jolt (' + (classes.known.artificer && classes.known.artificer.level >= 15 ? 4 : 2) + 'd6)'; } }, "Once per turn when I hit with a magic weapon or my steel defender hits with its attack, I can use my Arcane Jolt class feature to have the hit either deal extra force damage or heal somebody within 30 ft of the target hit." ] } }, "subclassfeature15" : { name : "Improved Defender", source : [["E:RLW", 61], ["T", 20]], minlevel : 15, description : desc([ "My defender's Deflect Attack now deals its attacker 1d4 + my Int mod force damage", "My arcane jolt damage/healing increases to 4d6; My steel defender gains +2 AC" ]) } } }); // Add the new special magic items for the artificer class (infusions) MagicItemsList["boots of the winding path"] = { name : "Boots of the Winding Path", source : [["E:RLW", 62], ["T", 21], ["UA:A2", 9], ["UA:A3", 12]], type : "wondrous item", description : "While wearing these boots, I can teleport up to 15 ft as a bonus action to an unoccupied space I can see, as long as I occupied that space at some point during the current turn.", descriptionFull : "While wearing these boots, a creature can teleport up to 15 feet as a bonus action to an unoccupied space the creature can see. The creature must have occupied that space at some point during the current turn.", attunement : true, action : [["bonus action", ""]] } MagicItemsList["enhanced arcane focus, +1 or +2"] = { name : "Enhanced Arcane Focus, +1 or +2", nameTest : /^(?=.*enhanced)(?=.*(arcane focus|rod|wand|staff)).*$/i, source : [["E:RLW", 62], ["T", 21]], type : "wondrous item", description : "While I am holding this arcane focus (rod, staff, or wand), I gain a +1 bonus to spell attack rolls (or +2 if the artificer that created it is level 10 or higher). In addition, I ignore half cover when making a spell attack.", descriptionFull : "While holding this rod, staff, or wand, a creature gains a +1 bonus to spell attack rolls. In addition, the creature ignores half cover when making a spell attack.\n The bonus increases to +2 when it is created by someone with 10 levels or more in the artificer class.", attunement : true, weight : 1, prerequisite : "Requires attunement by a spellcaster", prereqeval : function(v) { return v.isSpellcaster; }, choices : ["+1 to spell attacks", "+2 to spell attacks (artificer level 10+)"], "+1 to spell attacks" : { name : "Enhanced Arcane Focus +1", nameTest : /^(?=.*enhanced)(?=.*(arcane focus|rod|wand|staff))(?=.*\+1)(?!.*\+2).*$/i, description : "While I am holding this arcane focus (rod, staff, or wand), I gain a +1 bonus to spell attack rolls and I ignore half cover when making a spell attack.", calcChanges : { spellCalc : [ function (type, spellcasters, ability) { if (type == "attack") return 1; }, "I gain a +1 bonus to spell attack rolls." ] } }, "+2 to spell attacks (artificer level 10+)" : { name : "Enhanced Arcane Focus +2", nameTest : /^(?=.*enhanced)(?=.*(arcane focus|rod|wand|staff))(?!.*\+1)(?=.*\+2).*$/i, description : "While I am holding this arcane focus (rod, staff, or wand), I gain a +2 bonus to spell attack rolls and I ignore half cover when making a spell attack.", calcChanges : { spellCalc : [ function (type, spellcasters, ability) { if (type == "attack") return 2; }, "I gain a +2 bonus to spell attack rolls." ] } } } MagicItemsList["radiant weapon"] = { name : "Radiant Weapon", nameTest : "Radiant", source : [["E:RLW", 62], ["T", 22]], type : "weapon (any)", description : "This item adds a +1 on its to hit and damage, has 4 charges, and regains 1d4 at dawn. As a bonus action, I can have it start/stop shedding light, bright in 30 ft, dim in another 30 ft. As a reaction if hit by an attack, I can use 1 charge to blind the attacker until the end of its next turn unless it makes a Con save (my spell DC).", descriptionFull : "This magic weapon grants a +1 bonus to attack and damage rolls made with it. While holding it, the wielder can take a bonus action to cause it to shed bright light in a 30-foot radius and dim light for an additional 30 feet. The wielder can extinguish the light as a bonus action.\n The weapon has 4 charges. As a reaction immediately after being hit by an attack, the wielder can expend 1 charge and cause the attacker to be blinded until the end of the attacker's next turn, unless the attacker succeeds on a Constitution saving throw against your spell save DC. The weapon regains 1d4 expended charges daily at dawn.", attunement : true, usages : 4, recovery : "dawn", additional : "blind attacker; regains 1d4", action : [["bonus action", " (start/stop light)"], ["reaction", " (1 charge; after hit)"]], chooseGear : { type : "weapon", prefixOrSuffix : "suffix", descriptionChange : ["replace", "weapon"] }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && !v.isSpell && (/radiant/i).test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + 'Reaction to blind attacker'; } }, 'If I include the word "Radiant" in the name of a weapon, it will be treated as the magic weapon Radiant Weapon. It has +1 to hit and damage and can be used to shed light and to blind an attacker.' ], atkCalc : [ function (fields, v, output) { if (v.isMeleeWeapon && !v.isSpell && (/radiant/i).test(v.WeaponTextName)) { output.magic = v.thisWeapon[1] + 1; } } ] } } MagicItemsList["repeating shot"] = { name : "Repeating Shot", source : [["E:RLW", 62], ["T", 22], ["UA:A3", 13]], type : "weapon (any with ammunition)", description : "When I use this magic weapon to make a ranged attack, it magically produces one piece of ammunition and grants a +1 bonus to its attack and damage rolls. Thus, it doesn't require ammunition and ignores the loading property if it has it. The produced ammunition vanishes once it hits or misses a target.", descriptionFull : "This magic weapon grants a +1 bonus to attack and damage rolls made with it when it's used to make a ranged attack, and it ignores the loading property if it has it.\n If you load no ammunition in the weapon, it produces its own, automatically creating one piece of magic ammunition when you make a ranged attack with it. The ammunition created by the weapon vanishes the instant after it hits or misses a target.", attunement : true, chooseGear : { type : "weapon", prefixOrSuffix : "suffix", descriptionChange : ["replace", "weapon"], excludeCheck : function (inObjKey, inObj) { return !(/ammunition/i).test(inObj.description); } }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && !v.isSpell && (/^(?=.*repeating shot)(?=.*ammunition).*$/i).test(v.WeaponText)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, '').replace(/(;|,)? ?loading/i, ''); } }, 'If I include the words "Repeating Shot" in the name of a weapon with the ammunition property, it will be treated as the magic weapon Repeating Shot. It has +1 to hit and damage and produces its own ammunition, thus its loading property is removed if it has it.' ], atkCalc : [ function (fields, v, output) { if ((/^(?=.*repeating shot)(?=.*ammunition).*$/i).test(v.WeaponText) && !v.isSpell) { output.magic = v.thisWeapon[1] + 1; } }, '' ] } } MagicItemsList["repulsion shield"] = { name : "Repulsion Shield", source : [["E:RLW", 63], ["T", 23]], type : "shield", description : "I gain an additional +1 bonus to Armor Class while wielding this shield. The shield has 4 charges and regains 1d4 expended charges daily at dawn. As a reaction immediately after being hit by a melee attack, I can expend 1 charge to push the attacker up to 15 ft away.", descriptionFull : "A creature gains a +1 bonus to Armor Class while wielding this shield.\n The shield has 4 charges. While holding it, the wielder can use a reaction immediately after being hit by a melee attack to expend 1 of the shield's charges and push the attacker up to 15 feet away. The shield regains 1d4 expended charges daily at dawn.", weight : 6, attunement : true, usages : 4, additional : "regains 1d4", recovery : "dawn", action : [["reaction", " (1 charge)"]], shieldAdd : ["Repulsion Shield", 3, 6] } MagicItemsList["returning weapon"] = { name : "Returning Weapon", nameTest : "Returning", source : [["E:RLW", 63], ["T", 23], ["UA:A3", 14], ["UA:A2", 10]], type : "weapon (any thrown)", description : "This magic weapon grants a +1 bonus to attack and damage rolls I make with it. It returns to my hand immediately after I use it to make a ranged attack.", descriptionFull : "This magic weapon grants a +1 bonus to attack and damage rolls made with it, and it returns to the wielder's hand immediately after it is used to make a ranged attack.", chooseGear : { type : "weapon", prefixOrSuffix : "suffix", descriptionChange : ["replace", "weapon"], excludeCheck : function (inObjKey, inObj) { return !/\bthrown\b/i.test(inObj.description); } }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && v.isThrownWeapon && /returning/i.test(v.WeaponText)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + 'Returns immediately after ranged attack'; } }, 'If I include the word "Returning" in the name of a thrown weapon, it will be treated as the magic weapon Returning Weapon. It has +1 to hit and damage and returns to my hand immediately after I use it to make a ranged attack.' ], atkCalc : [ function (fields, v, output) { if (v.isThrownWeapon && /returning/i.test(v.WeaponText)) { output.magic = v.thisWeapon[1] + 1; } }, '' ] } } // Magic Items MagicItemsList["arcane propulsion arm"] = { name : "Arcane Propulsion Arm", source : [["E:RLW", 276]], type : "wondrous item", rarity : "very rare", description : "Once attached to my wrist, elbow, or shoulder, this prosthetic magically forms a copy of the appendage it's replacing. It can't be removed against my will, but I can as an action. I can use it as a proficient melee weapon with the thrown property. After a throwing attack with it, it returns and reattaches immediately.", descriptionFull : "This prosthetic appendage was developed by artificers of House Cannith. To attune to this item, you must attach it to your arm at the wrist, elbow, or shoulder, at which point the prosthetic magically forms a copy of the appendage it's replacing.\n\nWhile attached, the prosthetic provides these benefits:\n \u2022 The prosthetic is a fully capable part of your body.\n \u2022 You can take an action to remove the prosthetic, and it removes itself if your attunement to it ends. It can't be removed against your will.\n \u2022 The prosthetic is a magic melee weapon with which you're proficient. It deals 1d8 force damage on a hit and has the thrown property, with a normal range of 20 feet and a long range of 60 feet. When thrown, the prosthetic detaches and flies at the target of the attack, then immediately returns to you and reattaches.", attunement : true, prerequisite : "Requires attunement by a creature missing a hand or an arm", prereqeval : function (v) { return false; }, weaponOptions : [{ regExpSearch : /^(?=.*arcane)(?=.*propulsion)(?=.*arm).*$/i, name : "Arcane Propulsion Arm", source : [["E:RLW", 276]], ability : 1, type : "AlwaysProf", damage : [1, 8, "force"], range : "Melee, 20/60 ft", description : "Thrown; Returns immediately after thrown", abilitytodamage : true, selectNow : true }] } MagicItemsList["armblade"] = { name : "Armblade", source : [["E:RLW", 276]], type : "weapon (any one-handed melee weapon)", rarity : "common", description : "While attuned to it, this magic weapon is attached to my arm and inseparable from me. As a bonus action, I can retract it into my forearm or extend it from there. While it is extended, I can use the weapon as if I was holding it, and I can't use that hand for other purposes.", descriptionFull : "An armblade is a magic weapon that attaches to your arm, becoming inseparable from you as long as you're attuned to it. To attune to this item, you must hold it against your forearm for the entire attunement period.\n As a bonus action, you can retract the armblade into your forearm or extend it from there. While it is extended, you can use the weapon as if you were holding it, and you can't use that hand for other purposes.", attunement : true, prerequisite : "Requires attunement by a warforged", prereqeval : function (v) { return (/warforged/i).test(CurrentRace.known); }, allowDuplicates : true, chooseGear : { type : "weapon", prefixOrSuffix : "brackets", descriptionChange : ["replace", "weapon"], excludeCheck : function (inObjKey, inObj) { return (!inObj.description || (/two.{0,3}handed/i).test(inObj.description)) || (!inObj.range || !(/melee/i).test(inObj.range)); } } } MagicItemsList["belashyrra's beholder crown"] = { name : "Belashyrra's Beholder Crown", nameAlt : "Beholder Crown", source : [["E:RLW", 276]], type : "wondrous item", rarity : "legendary", description : "This symbiotic crown of dark purple and mauve stone attaches to my skull and removing it requires ending a curse. It allows me to see normally in magical and normal darkness (devil's sight) out to 120 ft. It has 10 charges, regaining 1d6+3 at dawn, which I can use to cast several spells with spell save DC 16.", descriptionLong : "This symbiotic crown of dark purple and mauve stone attaches to my skull once I attune to it and removing it requires ending a curse. It allows me to see normally in magical and normal darkness (devil's sight) out to 120 ft. It has 10 charges, regaining 1d6+3 at dawn, which I can use to cast several spells with spell save DC 16. These are: Charm Person (1 charge), Disintegrate (6 charges), Fear (3 charges), Finger of Death (7 charges), Flesh to Stone (6 charges), Hold Person (2 charges), Ray of Enfeeblement (2 charges), Sleep (1 charge), Slow (3 charges), and Telekinesis (5 charges).", descriptionFull : "This symbiotic crown is carved from dark purple and mauve stone, with ten points like stalks set with gemstones resembling the eyestalks of a beholder. To attune to this item, you must wear it on your head for the entire attunement period, during which the crown's hidden tendrils burrow into your scalp to bond with your skull.\n While wearing the crown, you can see normally in darkness, both magical and nonmagical, to a distance of 120 feet.\n " + toUni("Spells") + ". The crown has 10 charges. While wearing it, you can use an action to expend some of its charges to cast one of the following spells from it (spell save DC 16): charm person (1 charge), disintegrate (6 charges), fear (3 charges), finger of death (7 charges), flesh to stone (6 charges), hold person (2 charges), ray of enfeeblement (2 charges), sleep (1 charge), slow (3 charges), telekinesis (5 charges).\n The crown regains 1d6 + 3 expended charges daily at dawn.\n " + toUni("Symbiotic Nature") + ". The crown can't be removed from you while you're attuned to it, and you can't voluntarily end your attunement to it. If you're targeted by a spell that ends a curse, your attunement to the crown ends, and it detaches from you.\n The daelkyr Belashyrra made these crowns. While on the same plane of existence as the crown, Belashyrra can see through its eyestalks.", attunement : true, usages : 10, recovery : "dawn", additional : "regains 1d6+3", fixedDC : 16, spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "1 charge", spells : ["charm person", "sleep"], selection : ["charm person", "sleep"], firstCol : 1, times : 2 }, { name : "2 charges", spells : ["hold person", "ray of enfeeblement"], selection : ["hold person", "ray of enfeeblement"], firstCol : 2, times : 2 }, { name : "3 charges", spells : ["fear", "slow"], selection : ["fear", "slow"], firstCol : 3, times : 2 }, { name : "5 charges", spells : ["telekinesis"], selection : ["telekinesis"], firstCol : 5 }, { name : "6 charges", spells : ["disintegrate", "flesh to stone"], selection : ["disintegrate", "flesh to stone"], firstCol : 6, times : 2 }, { name : "7 charges", spells : ["finger of death"], selection : ["finger of death"], firstCol : 7 }] } MagicItemsList["cleansing stone"] = { name : "Cleansing Stone", source : [["E:RLW", 276], ["WGtE", 115], ["UA:MIoE", 2]], type : "wondrous item", rarity : "common", description : "This stone sphere is 1 ft in diameter and engraved with mystic sigils. As an action while touching it, I can activate it to remove dirt and grime from my garments and my person.", descriptionFull : "A cleansing stone is a sphere 1 foot in diameter, engraved with mystic sigils. When touching the stone, you can use an action to activate it and remove dirt and grime from your garments and your person.\n Such stones are often embedded in pedestals in public squares in Aundair or in high-end Ghallanda inns.", action : [["action", ""]], weight : 88 // using average marble/limestone density of 2.711 g/cm3 } var ERftLW_docentFullDescription = [ "A docent is a small metal sphere, about 2 inches across, studded with dragonshards. To attune to a docent, you must embed the item somewhere on your body, such as your chest or your eye socket.", '>>Sentience<<. A docent is a sentient item of any alignment with an Intelligence of 16, a Wisdom of 14, and a Charisma of 14. It perceives the world through your senses. It communicates telepathically with you and can speak, read, and understand any language it knows (see "Random Properties" below).', ">>Life Support<<. Whenever you end your turn with 0 hit points, the docent can make a Wisdom (Medicine) check with a +6 bonus. If this check succeeds, the docent stabilizes you.", ">>Random Properties<<. A docent has the following properties:", " \u2022 >>Languages<<. The docent knows Common, Giant, and 1d4 additional languages chosen by the DM. If a docent knows fewer than six languages, it can learn a new language after it hears or reads the language through your senses.", " \u2022 >>Skills<<. The docent has a +7 bonus to one of the following skills (roll a d4): (1) Arcana, (2) History, (3) Investigation, or (4) Nature.", " \u2022 >>Spells<<. The docent knows one of the following spells and can cast it at will, requiring no components (roll a d6): (1–2) detect evil and good or (3–6) detect magic. The docent decides when to cast the spell.", ">>Personality<<. A docent is designed to advise and assist the warforged it's attached to. One of the simple functions of a docent is to serve as a translator. The docent's properties are under its control, and if you have a bad relationship with your docent, it might refuse to assist you." ]; MagicItemsList["docent"] = { name : "Docent", source : [["E:RLW", 276]], type : "wondrous item", rarity : "rare", description : "I can embed this sentient small metal sphere studded with dragonshards into my chest or eye socket. I can communicate telepathically with it and it uses my senses. It can serve me as an advisor and a translator. It knowns 6 languages, a spells, an Intelligence skill, and can stabilize me. See Notes page.", descriptionFull : ERftLW_docentFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)<= 0 ? "Con" : "Dex"; return capitailzedDmgType + " Breath Weapon: As an action once per short rest, I can deal 2d6 " + dmgType + " damage to all in a " + shapeStr + ", " + saveStat + " save halves (DC 8 + Con mod + Prof Bonus).\nThis damage increases to 3d6 at level 6, 4d6 at level 11, and 5d6 at level 16."; }; var EGtW_draconicAncestryFeature = { name : "Draconic Ancestry", limfeaname : "Breath Weapon", minlevel : 1, usages : 1, additional : levels.map(function (n) { return (n < 6 ? 2 : n < 11 ? 3 : n < 16 ? 4 : 5) + 'd6'; }), recovery : "short rest", action : [['action', ""]], calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.dbBreathWeapon && (/dragonborn/i).test(CurrentRace.known)) { fields.Damage_Die = (CurrentRace.level < 6 ? 2 : CurrentRace.level < 11 ? 3 : CurrentRace.level < 16 ? 4 : 5) + 'd6'; if (CurrentRace.variant) { fields.Damage_Type = CurrentRace.breathDmgType; fields.Description = fields.Description.replace(/(dex|con) save/i, ((/cold|poison/i).test(CurrentRace.breathDmgType) ? 'Con' : 'Dex') + ' save'); fields.Range = (/black|blue|brass|bronze|copper/i).test(CurrentRace.variant) ? '5-ft \xD7 30-ft line' : '15-ft cone'; } } }, '', 1 ] } }; var EGtW_breathWeaponObj = { regExpSearch : /^(?=.*breath)(?=.*weapon).*$/i, name : "Breath weapon", source : [["W", 168]], ability : 3, type : 'Natural', damage : [2, 6, 'fire'], range : "15-ft cone", description : "Hits all in area; Dex save, success - half damage; Usable only once per short rest", abilitytodamage : false, dc : true, dbBreathWeapon : true, selectNow : true }; var EGtW_acidBreath = EGtW_breathWeaponDesc("acid", "line"); var EGtW_fireBreathCone = EGtW_breathWeaponDesc("fire", "cone"); var EGtW_fireBreathLine = EGtW_breathWeaponDesc("fire", "cone"); var EGtW_coldBreath = EGtW_breathWeaponDesc("cold", "cone"); var EGtW_lightningBreath = EGtW_breathWeaponDesc("lightning", "line"); var EGtW_poisonBreath = EGtW_breathWeaponDesc("poison", "cone"); var EGtW_forcefulPresenceStr = "Forceful Presence: Once per short rest, I can give myself adv. on an Intimidation or Persuasion check."; var EGtW_vengefulAssaultStr = "Vengeful Assault: As a reaction when I take damage from a creature in range of a weapon that I'm holding, I can use the weapon to make an attack against the creature. I can do this once per short rest."; // Draconblood RaceList["draconblood dragonborn"] = { regExpSearch : /draconblood/i, name : "Draconblood Dragonborn", sortname : "Dragonborn, Draconblood", source : [["W", 168]], plural : "Draconblood Dragonborn", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Draconic"], vision : [["Darkvision", 60]], weaponOptions : [EGtW_breathWeaponObj], age : " reach adulthood by 15 and live around 80 years", height : " stand well over 6 feet tall (5'6\" + 2d8\")", weight : " weigh around 240 lb (175 + 2d8 \xD7 2d6 lb)", heightMetric : " stand well over 1,8 metres tall (170 + 5d8 cm)", weightMetric : " weigh around 110 kg (80 + 5d8 \xD7 4d6 / 10 kg)", scores : [0, 0, 0, 2, 0, 1], trait : "Draconblood Dragonborn (+2 Intelligence, +1 Charisma)" + desc([ "Draconic Ancestry: Choose one type of dragon using the \"Racial Options\" button. I gain a breath weapon as determined by the dragon type chosen.", EGtW_forcefulPresenceStr ]), features : { "draconic ancestry" : EGtW_draconicAncestryFeature, "forceful presence" : { name : "Forceful Presence", source : [["W", 168]], minlevel : 1, usages : 1, recovery : "short rest" } }, variants : [] }; AddRacialVariant("draconblood dragonborn", "black", { regExpSearch : /black/i, name : "Black draconblood dragonborn", trait : "Black draconblood dragonborn (+2 Intelligence, +1 Charisma)" + desc([ EGtW_acidBreath, EGtW_forcefulPresenceStr ]), breathDmgType : "acid" }); AddRacialVariant("draconblood dragonborn", "blue", { regExpSearch : /blue/i, name : "Blue draconblood dragonborn", trait : "Blue draconblood dragonborn (+2 Intelligence, +1 Charisma)" + desc([ EGtW_lightningBreath, EGtW_forcefulPresenceStr ]), breathDmgType : "lightning" }); AddRacialVariant("draconblood dragonborn", "brass", { regExpSearch : /brass/i, name : "Brass draconblood dragonborn", trait : "Brass draconblood dragonborn (+2 Intelligence, +1 Charisma)" + desc([ EGtW_fireBreathLine, EGtW_forcefulPresenceStr ]), breathDmgType : "fire" }); AddRacialVariant("draconblood dragonborn", "bronze", { regExpSearch : /bronze/i, name : "Bronze draconblood dragonborn", trait : "Bronze draconblood dragonborn (+2 Intelligence, +1 Charisma)" + desc([ EGtW_lightningBreath, EGtW_forcefulPresenceStr ]), breathDmgType : "lightning" }); AddRacialVariant("draconblood dragonborn", "copper", { regExpSearch : /copper/i, name : "Copper draconblood dragonborn", trait : "Copper draconblood dragonborn (+2 Intelligence, +1 Charisma)" + desc([ EGtW_acidBreath, EGtW_forcefulPresenceStr ]), breathDmgType : "acid" }); AddRacialVariant("draconblood dragonborn", "gold", { regExpSearch : /gold/i, name : "Gold draconblood dragonborn", trait : "Gold draconblood dragonborn (+2 Intelligence, +1 Charisma)" + desc([ EGtW_fireBreathCone, EGtW_forcefulPresenceStr ]), breathDmgType : "fire" }); AddRacialVariant("draconblood dragonborn", "green", { regExpSearch : /green/i, name : "Green draconblood dragonborn", trait : "Green draconblood dragonborn (+2 Intelligence, +1 Charisma)" + desc([ EGtW_poisonBreath, EGtW_forcefulPresenceStr ]), breathDmgType : "poison" }); AddRacialVariant("draconblood dragonborn", "red", { regExpSearch : /red/i, name : "Red draconblood dragonborn", trait : "Red draconblood dragonborn (+2 Intelligence, +1 Charisma)" + desc([ EGtW_fireBreathCone, EGtW_forcefulPresenceStr ]), breathDmgType : "fire" }); AddRacialVariant("draconblood dragonborn", "silver", { regExpSearch : /silver/i, name : "Silver draconblood dragonborn", trait : "Silver draconblood dragonborn (+2 Intelligence, +1 Charisma)" + desc([ EGtW_coldBreath, EGtW_forcefulPresenceStr ]), breathDmgType : "cold" }); AddRacialVariant("draconblood dragonborn", "white", { regExpSearch : /white/i, name : "White draconblood dragonborn", trait : "White draconblood dragonborn (+2 Intelligence, +1 Charisma)" + desc([ EGtW_coldBreath, EGtW_forcefulPresenceStr ]), breathDmgType : "cold" }); // Ravenite RaceList["ravenite dragonborn"] = { regExpSearch : /ravenite/i, name : "Ravenite Dragonborn", sortname : "Dragonborn, Ravenite", source : [["W", 169]], plural : "Ravenite Dragonborn", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Draconic"], vision : [["Darkvision", 60]], weaponOptions : [EGtW_breathWeaponObj], age : " reach adulthood by 15 and live around 80 years", height : " stand well over 6 feet tall (5'6\" + 2d8\")", weight : " weigh around 240 lb (175 + 2d8 \xD7 2d6 lb)", heightMetric : " stand well over 1,8 metres tall (170 + 5d8 cm)", weightMetric : " weigh around 110 kg (80 + 5d8 \xD7 4d6 / 10 kg)", scores : [2, 1, 0, 0, 0, 0], trait : "Ravenite Dragonborn (+2 Strength, +1 Constitution)" + desc([ "Draconic Ancestry: Choose one type of dragon using the \"Racial Options\" button. I gain a breath weapon as determined by the dragon type chosen.", EGtW_vengefulAssaultStr ]), features : { "draconic ancestry" : EGtW_draconicAncestryFeature, "vengeful assault" : { name : "Vengeful Assault", source : [["W", 168]], minlevel : 1, usages : 1, action : [['reaction', ""]], recovery : "short rest" } }, variants : [] }; AddRacialVariant("ravenite dragonborn", "black", { regExpSearch : /black/i, name : "Black ravenite dragonborn", trait : "Black ravenite dragonborn (+2 Strength, +1 Constitution)" + desc([ EGtW_acidBreath, EGtW_vengefulAssaultStr ]), breathDmgType : "acid" }); AddRacialVariant("ravenite dragonborn", "blue", { regExpSearch : /blue/i, name : "Blue ravenite dragonborn", trait : "Blue ravenite dragonborn (+2 Strength, +1 Constitution)" + desc([ EGtW_lightningBreath, EGtW_vengefulAssaultStr ]), breathDmgType : "lightning" }); AddRacialVariant("ravenite dragonborn", "brass", { regExpSearch : /brass/i, name : "Brass ravenite dragonborn", trait : "Brass ravenite dragonborn (+2 Strength, +1 Constitution)" + desc([ EGtW_fireBreathLine, EGtW_vengefulAssaultStr ]), breathDmgType : "fire" }); AddRacialVariant("ravenite dragonborn", "bronze", { regExpSearch : /bronze/i, name : "Bronze ravenite dragonborn", trait : "Bronze ravenite dragonborn (+2 Strength, +1 Constitution)" + desc([ EGtW_lightningBreath, EGtW_vengefulAssaultStr ]), breathDmgType : "lightning" }); AddRacialVariant("ravenite dragonborn", "copper", { regExpSearch : /copper/i, name : "Copper ravenite dragonborn", trait : "Copper ravenite dragonborn (+2 Strength, +1 Constitution)" + desc([ EGtW_acidBreath, EGtW_vengefulAssaultStr ]), breathDmgType : "acid" }); AddRacialVariant("ravenite dragonborn", "gold", { regExpSearch : /gold/i, name : "Gold ravenite dragonborn", trait : "Gold ravenite dragonborn (+2 Strength, +1 Constitution)" + desc([ EGtW_fireBreathCone, EGtW_vengefulAssaultStr ]), breathDmgType : "fire" }); AddRacialVariant("ravenite dragonborn", "green", { regExpSearch : /green/i, name : "Green ravenite dragonborn", trait : "Green ravenite dragonborn (+2 Strength, +1 Constitution)" + desc([ EGtW_poisonBreath, EGtW_vengefulAssaultStr ]), breathDmgType : "poison" }); AddRacialVariant("ravenite dragonborn", "red", { regExpSearch : /red/i, name : "Red ravenite dragonborn", trait : "Red ravenite dragonborn (+2 Strength, +1 Constitution)" + desc([ EGtW_fireBreathCone, EGtW_vengefulAssaultStr ]), breathDmgType : "fire" }); AddRacialVariant("ravenite dragonborn", "silver", { regExpSearch : /silver/i, name : "Silver ravenite dragonborn", trait : "Silver ravenite dragonborn (+2 Strength, +1 Constitution)" + desc([ EGtW_coldBreath, EGtW_vengefulAssaultStr ]), breathDmgType : "cold" }); AddRacialVariant("ravenite dragonborn", "white", { regExpSearch : /white/i, name : "White ravenite dragonborn", trait : "White ravenite dragonborn (+2 Strength, +1 Constitution)" + desc([ EGtW_coldBreath, EGtW_vengefulAssaultStr ]), breathDmgType : "cold" }); } // Subclasses AddSubClass("fighter", "echo knight", { // contains contributions by Smashman, @Nod_Hero#2046 (Discord), BraabHimself, and TysonJouglet regExpSearch : /^(?!.*(exalted|sacred|holy|divine|nature|natural|purple.*dragon|green))(?=.*(knight|fighter|warrior|militant|warlord|phalanx|gladiator|trooper))(?=.*(echo|mirror|mirage|reflection)).*$/i, subname : "Echo Knight", source : [["W", 183]], fullname : "Echo Knight", features : { "subclassfeature3" : { name : "Manifest Echo", source : [["W", 183]], minlevel : 3, description : desc([ "As a bonus action, I can magically manifest a translucent image of myself within 15 ft", "My echo lasts until I dismiss it as a bonus action, I manifest another, or I'm incapacitated", "It is also destroyed if it is more than 30 ft away from me at the end of my turn", "It has 1 HP, immunity to all conditions, uses my save bonuses, and AC 14 + Prof Bonus", "On my turn as a free action, I can command it to move up to 30 ft in any direction", "As a bonus action, I can teleport to swap places with it, at a cost of 15 ft movement", "When I use the Attack action on my turn, I can have any attack originate from my echo", "I can also make opportunity attacks from the echo's location as if I were in its space" ]), action : [["bonus action", " (summon/dismiss)"], ["bonus action", "Swap Location with Echo"]], creaturesAdd : [["Echo"]], creatureOptions : [{ name : "Echo", source : [["W", 183]], size : 3, type : "Echo", alignment : "", ac : "14+oProf", hp : 1, hd : [], speed : "fly 30 ft (hover)", scores : ["", "", "", "", "", ""], savesLinked : true, condition_immunities : "all conditions", passivePerception : 0, languages : "", challengeRating : "0", proficiencyBonus : 0, attacksAction : 0, attacks : [], features : [{ name : "Echo", description : "The echo is a magical, translucent, gray image of its creator that doesn't act and has no turn in combat. It lasts until it is destroyed, dismissed, another is manifested, or its creator is incapacitated. The echo is also destroyed if it is ever more than 30 ft away from its creator at the end of its creator's turn." }], traits : [{ name : "Swap Place", description : "The echo's creator can, as a bonus action, teleport, magically swapping places with the echo at a cost of 15 feet of the creator's movement, regardless of the distance between the two." }, { name : "Attack Origin", description : "When the echo's creator takes the Attack action on their turn, any attack they make with that action can originate from the echo's space. This choice is made for each attack separately.\n In addition, when a creature that the echo's creator can see within 5 ft of the echo moves at least 5 ft away from it, its creator can use their reaction to make an opportunity attack against that creature as if its creator was in the echo's space." }], header : "Echo", eval : function(prefix, lvl) { // Same size as character PickDropdown(prefix + "Comp.Desc.Size", tDoc.getField("Size Category").currentValueIndices); Value(prefix + "Comp.Desc.Age", What("Age")); Value(prefix + "Comp.Desc.Sex", What("Sex")); Value(prefix + "Comp.Desc.Height", What("Height")); Value(prefix + "Comp.Desc.Alignment", What("Alignment")); } }] }, "subclassfeature3.1" : { name : "Unleash Incarnation", source : [["W", 183]], minlevel : 3, description : desc([ "When I use the Attack action, I can make one extra melee attack from my echo's position" ]), usages : "Constitution modifier per ", usagescalc : "event.value = Math.max(1, What('Con Mod'));", recovery : "long rest" }, "subclassfeature7" : { name : "Echo Avatar", source : [["W", 183]], minlevel : 7, description : desc([ "As an action, I can temporarily transfer my consciousness to my echo for up to 10 min", "During this time, I see and hear through its eyes and ears, but not my own eyes and ears", "While I use my echo this way, it can be up to 1000 ft away from me without issue", "I can end this at any time, requiring no action" ]), action : [["action", ""]] }, "subclassfeature10" : { name : "Shadow Martyr", source : [["W", 183]], minlevel : 10, description : desc([ "As a reaction when a creature I can see is attacked, I can make my echo the target", "Before the attack roll, the echo teleports to an empty space within 5 ft of the creature", "The attack roll of the triggering attack is then made against the echo instead" ]), action : [["reaction", ""]], usages : 1, recovery : "short rest" }, "subclassfeature15" : { name : "Reclaim Potential", source : [["W", 184]], minlevel : 15, description : desc([ "When my echo is destroyed by taking damage, I gain 2d6 + my Con mod in temp HP", "I can only gain these temporary hit points if I don't already have temporary hit points" ]), usages : "Constitution modifier per ", usagescalc : "event.value = Math.max(1, What('Con Mod'));", recovery : "long rest" }, "subclassfeature18" : { name : "Legion of One", source : [["W", 184]], minlevel : 18, description : desc([ "I can now manifest two echoes instead of one with the same bonus action", "These two can coexist, but if I manifest a third, the previous two are destroyed", "Anything I can do from one echo's position can be done from the other's instead", "I regain one use of Unleash Incarnation if I have no more remaining when I roll initiative" ]) } } }); AddSubClass("wizard", "chronurgy magic", { // contains contributions by bassbogan on GitHub and @Nod_Hero#2046 on Discord regExpSearch : /chronurgy|chronomancer|chronurgist/i, subname : "Chronurgy Magic", subnameShort: "Chronurgy", fullname : "Chronurgist", source : [["W", 184]], features : { "subclassfeature2" : { name : "Chronal Shift", source : [["W", 184]], minlevel : 2, description : desc([ "As a reaction after I or a creature I see rolls a check, save, or attack, I can force a reroll", "I can do this after I see if the roll fails or succeeds; The target must use the second roll." ]), action : [["reaction", ""]], usages : 2, recovery : "long rest", eval : function() { // Always have access to dunamancy spells enabled if (GetFeatureChoice("classes", "wizard", "spellcasting", true).indexOf("access to dunamancy spells") === -1) { ClassFeatureOptions(["wizard", "spellcasting", "access to dunamancy spells", true]); } }, removeeval : function() { // Remove access to dunamancy spells when removing subclass if (GetFeatureChoice("classes", "wizard", "spellcasting", true).indexOf("access to dunamancy spells") !== -1) { ClassFeatureOptions(["wizard", "spellcasting", "access to dunamancy spells", true], "remove"); } } }, "subclassfeature2.1" : { name : "Temporal Awareness", source : [["W", 184]], minlevel : 2, description : desc([ "I gain a bonus to my initiative rolls equal to my Intelligence modifier" ]), addMod : { type : "skill", field : "Init", mod : "max(Int|0)", text : "I can add my Intelligence modifier to initiative rolls." } }, "subclassfeature6" : { name : "Momentary Stasis", source : [["W", 184]], minlevel : 6, description : desc([ "As an action, I can have a Large or smaller creature I can see in 60 ft make a Con save", "If failed, it is encased in a field of magical energy, incapacitated and has a speed of 0", "This lasts until the end of my next turn or until the creature takes any damage" ]), action : [["action", ""]], usages : "Intelligence modifier per ", usagescalc : "event.value = Math.max(1, What('Int Mod'));", recovery : "long rest" }, "subclassfeature10" : { name : "Arcane Abeyance", source : [["W", 184]], minlevel : 10, description : desc([ "When I use a spell slot to cast a 4th-level or lower spell, I can condense it into a mote", "The spell is frozen in time at the moment of casting and held within a grey bead", "The bead is a Tiny object with 1 HP, AC 15, and immune to poison and psychic damage", "After 1 hour or if it is destroyed, it vanishes with a flash of light and the spell is lost", "As an action, a creature holding the bead can release the spell within as if they cast it", "The spell still uses my spell attack bonus and save DC; The bead vanishes once used" ]), usages : 1, recovery : "short rest" }, "subclassfeature14" : { name : "Convergent Future", source : [["W", 185]], minlevel : 14, description : desc([ "As a reaction after I or a creature I see rolls a check, save, or attack, I can choose the roll", "I decide the number rolled, if it is the minimum needed to succeed or 1 less than that", "When I use this feature, I gain a level of exhaustion which only a long rest can remove" ]), action : [["reaction", ""]] } } }); AddSubClass("wizard", "graviturgy magic", { // contains contributions by bassbogan on GitHub and @Nod_Hero#2046 on Discord regExpSearch : /^((?=.*graviturgy)(?=.*(wizard|magic|mage))|gravimancer|graviturgist).*$/i, subname : "Graviturgy Magic", subnameShort: "Graviturgy", fullname : "Graviturgist", source : [["W", 185]], features : { "subclassfeature2" : { name : "Adjust Density", source : [["W", 185]], minlevel : 2, description : desc([ "As an action, I can magically double or halve the weight of a creature I can see in 30 ft", "If doubled, it has -10 ft speed and advantage on Strength checks and Strength saves", "If halved, it has +10 ft speed, can jump twice as far, and disadv. on Str checks and saves", "This lasts for 1 minute or until my concentration ends (like concentrating on a spell)" ]), action : [["action", ""]], additional : levels.map(function (n) { return n < 2 ? "" : (n < 10 ? "Large" : "Huge") + " or smaller creatures"; }), eval : function() { // Always have access to dunamancy spells enabled if (GetFeatureChoice("classes", "wizard", "spellcasting", true).indexOf("access to dunamancy spells") === -1) { ClassFeatureOptions(["wizard", "spellcasting", "access to dunamancy spells", true]); } }, removeeval : function() { // Remove access to dunamancy spells when removing subclass if (GetFeatureChoice("classes", "wizard", "spellcasting", true).indexOf("access to dunamancy spells") !== -1) { ClassFeatureOptions(["wizard", "spellcasting", "access to dunamancy spells", true], "remove"); } } }, "subclassfeature6" : { name : "Gravity Well", source : [["W", 185]], minlevel : 6, description : desc([ "Whenever I cast a spell on a creature, I can move it 5 ft to an empty space of my choice", "This only works if the target is willing, fails its save vs. the spell, or the spell attack hits it" ]), }, "subclassfeature10" : { name : "Violent Attraction", source : [["W", 185]], minlevel : 10, description : desc([ "As a reaction when I or a creature I see in 60 ft hits a weapon attack, I can improve it", "I increase the weapon's velocity, causing it to deal an extra 1d10 damage", "As a reaction if a creature within 60 ft is damaged by a fall, I can increase it by 2d10" ]), action : [["reaction", ""]], usages : "Intelligence modifier per ", usagescalc : "event.value = Math.max(1, What('Int Mod'));", recovery : "long rest" }, "subclassfeature14" : { name : "Event Horizon", source : [["W", 185]], minlevel : 14, description : desc([ "As an action, I can magically emit powerful gravitational magic that pulls on hostiles", "Whenever a creature hostile to me starts it turn within 30 ft, it must make Str save", "If failed, it takes 2d10 force damage and its speed is 0 until the start of its next turn", "If successful, it takes half the damage and every foot it moves this turn costs 2 extra feet", "This lasts for 1 minute or until my concentration ends (like concentrating on a spell)", "I can do this once per long rest, or by expending a 3rd-level or higher spell slot (SS 3+)" ]), action : [["action", ""]], usages : 1, recovery : "long rest", altResource : "SS 3+", } } }); // Add option to allow Dunamancy spells for the other spellcastingclasses AddFeatureChoice(ClassList.bard.features.spellcasting, true, "Access to Dunamancy Spells", { name : "Dunamancy Spells", extraname : "Optional Bard 1", source : [["W", 186]], description : desc([ "All dunamancy spells are added to the bard spell list, each still pending DM's approval" ]), calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "bard" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["sapping sting", "gift of alacrity", "magnify gravity", "fortune's favor", "immovable object", "wristpocket", "pulse wave", "gravity sinkhole", "temporal shunt", "gravity fissure", "tether essence", "dark star", "reality break", "ravenous void", "time ravage"]); }, "This optional class feature expands the spell list of the bard class with all dunamancy spells (spell level in brackets): Sapping Sting (cantrip), Gift of Alacrity (1), Magnify Gravity (1), Fortune's Favor (2), Immovable Object (2), Wristpocket (2), Pulse Wave (3), Gravity Sinkhole (4), Temporal Shunt (5), Gravity Fissure (6), Tether Essence (7), Dark Star (8), Reality Break (8),Ravenous Void (9), and Time Ravage (9)." ] } }, "Optional 1st-level bard features"); AddFeatureChoice(ClassList.cleric.features.spellcasting, true, "Access to Dunamancy Spells", { name : "Dunamancy Spells", extraname : "Optional Cleric 1", source : [["W", 186]], description : desc([ "All dunamancy spells are added to the cleric spell list, each still pending DM's approval" ]), calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "cleric" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["sapping sting", "gift of alacrity", "magnify gravity", "fortune's favor", "immovable object", "wristpocket", "pulse wave", "gravity sinkhole", "temporal shunt", "gravity fissure", "tether essence", "dark star", "reality break", "ravenous void", "time ravage"]); }, "This optional class feature expands the spell list of the cleric class with all dunamancy spells (spell level in brackets): Sapping Sting (cantrip), Gift of Alacrity (1), Magnify Gravity (1), Fortune's Favor (2), Immovable Object (2), Wristpocket (2), Pulse Wave (3), Gravity Sinkhole (4), Temporal Shunt (5), Gravity Fissure (6), Tether Essence (7), Dark Star (8), Reality Break (8),Ravenous Void (9), and Time Ravage (9)." ] } }, "Optional 1st-level cleric features"); AddFeatureChoice(ClassList.druid.features.spellcasting, true, "Access to Dunamancy Spells", { name : "Dunamancy Spells", extraname : "Optional Druid 1", source : [["W", 186]], description : desc([ "All dunamancy spells are added to the druid spell list, each still pending DM's approval" ]), calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "druid" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["sapping sting", "gift of alacrity", "magnify gravity", "fortune's favor", "immovable object", "wristpocket", "pulse wave", "gravity sinkhole", "temporal shunt", "gravity fissure", "tether essence", "dark star", "reality break", "ravenous void", "time ravage"]); }, "This optional class feature expands the spell list of the druid class with all dunamancy spells (spell level in brackets): Sapping Sting (cantrip), Gift of Alacrity (1), Magnify Gravity (1), Fortune's Favor (2), Immovable Object (2), Wristpocket (2), Pulse Wave (3), Gravity Sinkhole (4), Temporal Shunt (5), Gravity Fissure (6), Tether Essence (7), Dark Star (8), Reality Break (8),Ravenous Void (9), and Time Ravage (9)." ] } }, "Optional 1st-level druid features"); AddFeatureChoice(ClassList.paladin.features.spellcasting, true, "Access to Dunamancy Spells", { name : "Dunamancy Spells", extraname : "Optional Paladin 2", source : [["W", 186]], description : desc([ "All dunamancy spells are added to the paladin spell list, each still pending DM's approval" ]), calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "paladin" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["gift of alacrity", "magnify gravity", "fortune's favor", "immovable object", "wristpocket", "pulse wave", "gravity sinkhole", "temporal shunt"]); }, "This optional class feature expands the spell list of the paladin class with all dunamancy spells (spell level in brackets): Gift of Alacrity (1), Magnify Gravity (1), Fortune's Favor (2), Immovable Object (2), Wristpocket (2), Pulse Wave (3), Gravity Sinkhole (4), and Temporal Shunt (5)." ] } }, "Optional 2nd-level paladin features"); var EGtW_Ranger_Dunamancy_Spells = { name : "Dunamancy Spells", extraname : "Optional Ranger 2", source : [["W", 186]], description : desc([ "All dunamancy spells are added to the ranger spell list, each still pending DM's approval" ]), calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if ((spName !== "ranger" && spName !== "rangerua") || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["gift of alacrity", "magnify gravity", "fortune's favor", "immovable object", "wristpocket", "pulse wave", "gravity sinkhole", "temporal shunt"]); }, "This optional class feature expands the spell list of the ranger class with all dunamancy spells (spell level in brackets): Gift of Alacrity (1), Magnify Gravity (1), Fortune's Favor (2), Immovable Object (2), Wristpocket (2), Pulse Wave (3), Gravity Sinkhole (4), and Temporal Shunt (5)." ] } }; AddFeatureChoice(ClassList.ranger.features.spellcasting, true, "Access to Dunamancy Spells", EGtW_Ranger_Dunamancy_Spells, "Optional 2nd-level ranger features"); RunFunctionAtEnd(function() { if (!ClassList["rangerua"]) return; AddFeatureChoice(ClassList.rangerua.features.spellcasting, true, "Access to Dunamancy Spells", EGtW_Ranger_Dunamancy_Spells, "Optional 2nd-level ranger features"); }); AddFeatureChoice(ClassList.sorcerer.features.spellcasting, true, "Access to Dunamancy Spells", { name : "Dunamancy Spells", extraname : "Optional Sorcerer 1", source : [["W", 186]], description : desc([ "All dunamancy spells are added to the sorcerer spell list, each still pending DM's approval" ]), calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "sorcerer" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["sapping sting", "gift of alacrity", "magnify gravity", "fortune's favor", "immovable object", "wristpocket", "pulse wave", "gravity sinkhole", "temporal shunt", "gravity fissure", "tether essence", "dark star", "reality break", "ravenous void", "time ravage"]); }, "This optional class feature expands the spell list of the sorcerer class with all dunamancy spells (spell level in brackets): Sapping Sting (cantrip), Gift of Alacrity (1), Magnify Gravity (1), Fortune's Favor (2), Immovable Object (2), Wristpocket (2), Pulse Wave (3), Gravity Sinkhole (4), Temporal Shunt (5), Gravity Fissure (6), Tether Essence (7), Dark Star (8), Reality Break (8),Ravenous Void (9), and Time Ravage (9)." ] } }, "Optional sorcerer features"); AddFeatureChoice(ClassList.warlock.features["pact magic"], true, "Access to Dunamancy Spells", { name : "Dunamancy Spells", extraname : "Optional Warlock 1", source : [["W", 186]], description : desc([ "All dunamancy spells are added to the warlock spell list, each still pending DM's approval" ]), calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "warlock" || (spType.indexOf("bonus") !== -1 && (!spList["class"] || spList["class"] !== "warlock"))) return; spList.extraspells = spList.extraspells.concat(["sapping sting", "gift of alacrity", "magnify gravity", "fortune's favor", "immovable object", "wristpocket", "pulse wave", "gravity sinkhole", "temporal shunt", "gravity fissure", "tether essence", "dark star", "reality break", "ravenous void", "time ravage"]); }, "This optional class feature expands the spell list of the warlock class with all dunamancy spells (spell level in brackets): Sapping Sting (cantrip), Gift of Alacrity (1), Magnify Gravity (1), Fortune's Favor (2), Immovable Object (2), Wristpocket (2), Pulse Wave (3), Gravity Sinkhole (4), Temporal Shunt (5), Gravity Fissure (6), Tether Essence (7), Dark Star (8), Reality Break (8),Ravenous Void (9), and Time Ravage (9)." ] } }, "Optional 1st-level warlock features"); AddFeatureChoice(ClassList.wizard.features.spellcasting, true, "Access to Dunamancy Spells", { name : "Dunamancy Spells", extraname : "Optional Wizard 1", source : [["W", 186]], description : desc([ "All dunamancy spells are added to the wizard spell list, each still pending DM's approval" ]), calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "wizard" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["sapping sting", "gift of alacrity", "magnify gravity", "fortune's favor", "immovable object", "wristpocket", "pulse wave", "gravity sinkhole", "temporal shunt", "gravity fissure", "tether essence", "dark star", "reality break", "ravenous void", "time ravage"]); }, "This optional class feature expands the spell list of the wizard class with all dunamancy spells (spell level in brackets): Sapping Sting (cantrip), Gift of Alacrity (1), Magnify Gravity (1), Fortune's Favor (2), Immovable Object (2), Wristpocket (2), Pulse Wave (3), Gravity Sinkhole (4), Temporal Shunt (5), Gravity Fissure (6), Tether Essence (7), Dark Star (8), Reality Break (8),Ravenous Void (9), and Time Ravage (9)." ] } }, "Optional 1st-level wizard features"); RunFunctionAtEnd(function() { if (!ClassList.artificer) return; AddFeatureChoice(ClassList.artificer.features.spellcasting, true, "Access to Dunamancy Spells", { name : "Dunamancy Spells", extraname : "Optional Artificer 1", source : [["W", 186]], description : desc([ "All dunamancy spells are added to the artificer spell list, each still pending DM's approval" ]), calcChanges : { spellList : [ function(spList, spName, spType) { if (spName !== "artificer" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["sapping sting", "gift of alacrity", "magnify gravity", "fortune's favor", "immovable object", "wristpocket", "pulse wave", "gravity sinkhole", "temporal shunt"]); }, "This optional class feature expands the spell list of the artificer class with all dunamancy spells (spell level in brackets): Sapping Sting (cantrip), Gift of Alacrity (1), Magnify Gravity (1), Fortune's Favor (2), Immovable Object (2), Wristpocket (2), Pulse Wave (3), Gravity Sinkhole (4), Temporal Shunt (5)." ] } }, "Optional 1st-level artificer features"); }); // Backgrounds (includes contributions by remcovandalen) BackgroundList["grinner"] = { regExpSearch : /grinner/i, name : "Grinner", source : [["W", 200]], skills : ["Deception", "Performance"], toolProfs : [["Thieves' tools", "Dex"], ["Musical instrument", 1]], gold : 15, equipleft : [ ["Disguise kit", "", 3], ["Musical instrument", "", ""] ], equipright : [ ["Fine clothes", "", 6], ["Gold-plated ring with smiling face", "", ""], ["Belt pouch (with coins)", "", 1] ], feature : "Ballad of the Grinning Fool", trait : [ "I love the spotlight. Everyone, look at me!", "Give me a drink and I'm your friend.", "Talk to me about yourself. I'm a hell of a listener.", "I hate to start fights, but I love to finish them.", "I can't sit still.", "I'm always humming an old tune from my past.", "When I don't have a reason to smile, I'm miserable.", "I'm lucky like you wouldn't believe." ], ideal : [ ["Revolution", "Revolution: Tyrants must fall, no matter the cost. (Chaotic)" ], ["Compassion", "Compassion: The only way to make a better world is to perform small kindnesses. (Good)" ], ["Justice", "Justice: A nation built upon just foundations will uphold freedom for all. (Law)" ], ["Expression", "Expression: Music, joy, and laughter are the keys to freedom. (Good)" ], ["Self-Determination", "Self-Determination: People should be free to do as they please. (Chaotic)" ], ["Vigilance", "Vigilance: A free people must be carefully taught, lest they be misled. (Neutral)" ] ], bond : [ "I lost someone important to an agent of the empire. That regime will fall.", "The first people to be hurt by this war will be the common folk. I need to protect them.", "Music helped me through a dark time in my life. Now, I'll use music to change the world.", "I will be known as the greatest spy who ever lived.", "All life is precious to me. I know I can change the world without taking a humanoid life.", "The elite in their ivory towers don't understand how we suffer. I intend to show them." ], flaw : [ "I've never lied once in my life. What? No, I'm not crossing my fingers!", "I do everything big! Subtlety? I don't know the meaning of subtlety! Oh, that's a problem?", "Being a spy in wartime is painful. I've seen so much suffering, I think I'm losing my mind.", "I can't focus on my mission. I just want to carouse and sing and play!", "Yeah, that's my name. Yeah, I'm a Grinner spy. Who cares about staying undercover?", "I can't afford to trust anyone. Not. Anyone." ], extra : [ "Select Your Favorite Code-Song", "Zan's Coming Back", "Blow Fire Down the Coast", "Hush! Onward Come the Dragons", "Let the Sword Grow Rust", "Drink Deep, Li'l Hummingbird", "Dirge for the Emerald Fire" ] }; BackgroundFeatureList["ballad of the grinning fool"] = { description : "A member of the Golden Grin will find me and give shelter to me and my companions if I play the Ballad of the Grinning Fool in a major tavern or inn in a large city. This shelter might be discontinued if it becomes too dangerous to hide me. I must use the ballad with caution, for those who know the ballad can be traitors, counterspies, or agents of tyranny.", source : [["W", 200]] }; BackgroundList["volstrucker agent"] = { regExpSearch : /^(?=.*volstrucker)(?=.*agent).*$/i, name : "Volstrucker Agent", source : [["W", 202]], skills : ["Deception", "Stealth"], toolProfs : ["Poisoner's kit"], languageProfs : [1], gold : 10, equipleft : [ ["Poisoner's kit", "", 2] ], equipright : [ ["Common clothes", "", 3], ["Black cloak with a hood", "", ""], ["Belt pouch (with coins)", "", 1] ], feature : "Shadow Network", trait : [ "I prefer to keep my thoughts to myself.", "I indulge vice in excess to quiet my conscience.", "I've left emotion behind me. I'm now perfectly placid.", "Some event from the past keeps worming its way into my mind, making me restless.", "I always keep my word\u2014except when I'm commanded to break it.", "I laugh off insults and never take them personally." ], ideal : [ ["Order", "Order: The will of the crown is absolute. (Law)" ], ["True Loyalty", "True Loyalty: The Cerberus Assembly is greater than any power, even the crown. (Any)" ], ["Death", "Death: The penalty for disloyalty is death. (Evil)" ], ["Determination", "Determination: I cannot fail. Not ever. (Neutral)" ], ["Fear", "Fear: People should not respect power. They should fear it. (Evil)" ], ["Escape", "Escape: The Volstrucker are pure evil! I can't atone for what I've done for them, but I can escape with my life. (Any)" ] ], bond : [ "The job is all that matters. I will see it through.", "My orders are important, but my comrades are worth more than anything. I would die for them.", "Everything I've done, I've done to protect someone close to me.", "If the empire falls, all of civilization falls with it. I will hold back chaos and barbarism at any cost." ], flaw : [ "I drink to dull the pain in the back of my head.", "I go a bit mad when I see blood.", "I can hear the voices of everyone I've killed. I see their faces. I can't be free of these ghosts.", "Fear is a powerful motivator. I will do whatever it takes to prevent those who know what I am from seeing me fail, and from those I care about from knowing what I am." ], extra : [ "Select Your Tragedy", "Familicide", "Amnesia", "Capture", "Starvation", "Disfigurement", "Vicissitude" ] }; BackgroundFeatureList["shadow network"] = { description : "I can use the Volstrucker shadow network to communicate with other members over long distances. I can write a letter in special arcane ink (10 gp per page), address it to another member of the Volstrucker, and cast it into a fire. It will burn and materialize whole again on the person of the addressee. This special ink is the same as used for a wizard's spellbook.", source : [["W", 202]] }; AddBackgroundVariant("acolyte", "luxonborn", { regExpSearch : /luxonborn/i, name : "Luxonborn", source : [["W", 203]] }); AddBackgroundVariant("criminal", "myriad operative", { regExpSearch : /^(?=.*myriad)(?=.*operative).*$/i, name : "Myriad Operative", source : [["W", 203]], extra : "" }); AddBackgroundVariant("sailor", "revelry pirate", { regExpSearch : /^(?=.*revelry)(?=.*pirate).*$/i, name : "Revelry Pirate", source : [["W", 203]] }); AddBackgroundVariant("sage", "cobalt scholar", { regExpSearch : /^(?=.*cobalt)(?=.*scholar).*$/i, name : "Cobalt Scholar", source : [["W", 203]], extra : [ "Select Specific Role", "Rank-and-file", "Expositors", "Archivists" ] }); AddBackgroundVariant("criminal", "augen trust", { regExpSearch : /^(?=.*augen)(?=.*trust).*$/i, name : "Augen Trust", source : [["W", 203]], extra : "" }); // Spells (contains contributions by Biggoron144) SpellsList["sapping sting"] = { name : "Sapping Sting", classes : [], source : [["W", 189]], level : 0, school : "Necro", time : "1 a", range : "30 ft", components : "V,S", duration : "Instantaneous", save : "Con", description : "1 creature that I can see save or 1d4 Necrotic dmg and fall prone; +1d4 at CL 5, 11, and 17", descriptionCantripDie : "1 creature that I can see save or `CD`d4 Necrotic dmg and fall prone", descriptionFull : "You sap the vitality of one creature you can see in range. The target must succeed on a Constitution saving throw or take 1d4 necrotic damage and fall prone.\n This spell's damage increases by 1d4 when you reach 5th level (2d4), 11th level (3d4), and 17th level (4d4)." }; WeaponsList["sapping sting"] = { regExpSearch : /^(?=.*sapping)(?=.*sting).*$/i, name : "Sapping Sting", source : [["W", 189]], list : "spell", ability : 6, type : "Cantrip", damage : ["C", 4, "necrotic"], range : "30 ft", description : "Con save, success - no damage, fail - also fall prone", abilitytodamage : false, dc : true }; SpellsList["gift of alacrity"] = { name : "Gift of Alacrity", classes : [], source : [["W", 186]], level : 1, school : "Div", time : "1 min", range : "Touch", components : "V,S", duration : "8 h", description : "1 willing creature can add 1d8 to its initiative rolls for the duration", descriptionFull : "You touch a willing creature. For the duration, the target can add 1d8 to its initiative rolls." }; SpellsList["magnify gravity"] = { name : "Magnify Gravity", classes : [], source : [["W", 188]], level : 1, school : "Trans", time : "1 a", range : "60 ft", components : "V,S", duration : "1 rnd", save : "Con", description : "10-ft rad all crea 2d8+1d8/SL Force dmg, half spd; Save halves \u0026 no spd reduce; Str check to move obj", descriptionShorter : "10-ft rad all 2d8+1d8/SL Force dmg, half spd; Save half, no spd reduce; Str check to move obj", descriptionFull : "The gravity in a 10-foot-radius sphere centered on a point you can see within range increases for a moment. Each creature in the sphere on the turn when you cast the spell must make a Constitution saving throw. On a failed save, a creature takes 2d8 force damage, and its speed is halved until the end of its next turn. On a successful save, a creature takes half as much damage and suffers no reduction to its speed.\n Until the start of your next turn, any object that isn't being worn or carried in the sphere requires a successful Strength check against your spell save DC to pick up or move." + AtHigherLevels + "When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d8 for each slot level above 1st." }; SpellsList["fortune's favor"] = { name : "Fortune's Favor", classes : [], source : [["W", 186]], level : 2, school : "Div", time : "1 min", range : "Touch", components : "V,S,M\u2020", compMaterial : "A white pearl worth at least 100 gp, which the spell consumes", duration : "1 h", description : "1+1/SL crea once roll extra d20 and select which to use for atk, check, save, or atk vs. it (100gp cons.)", descriptionFull : "You impart latent luck to yourself or one willing creature you can see within range. When the chosen creature makes an attack roll, an ability check, or a saving throw before the spell ends, it can dismiss this spell on itself to roll an additional d20 and choose which of the d20s to use. Alternatively, when an attack roll is made against the chosen creature, it can dismiss this spell on itself to roll a d20 and choose which of the d20s to use, the one it rolled or the one the attacker rolled.\n If the original d20 roll has advantage or disadvantage, the creature rolls the additional d20 after advantage or disadvantage has been applied to the original roll." + AtHigherLevels + "When you cast this spell using a spell slot of 3rd level or higher, you can target one additional creature for each slot level above 2nd." }; SpellsList["immovable object"] = { name : "Immovable Object", classes : [], source : [["W", 187]], level : 2, school : "Trans", time : "1 a", range : "Touch", components : "V,S,M\u2020", compMaterial : "Gold dust worth at least 25 gp, which the spell consumes", duration : "1 h", description : "1 obj <10 lb fixed in place; holds 4k lb; Str check move, except chosen/password; See B (25gp cons.)", descriptionMetric : "1 obj <5 kg fixed in place; holds 2k kg; Str check move, except chosen/password; See B (25gp cons.)", descriptionFull : "You touch an object that weighs no more than 10 pounds and cause it to become magically fixed in place. You and the creatures you designate when you cast this spell can move the object normally. You can also set a password that, when spoken within 5 feet of the object, suppresses this spell for 1 minute.\n If the object is fixed in the air, it can hold up to 4,000 pounds of weight. More weight causes the object to fall. Otherwise, a creature can use an action to make a Strength check against your spell save DC. On a success, the creature can move the object up to 10 feet." + AtHigherLevels + "If you cast this spell using a spell slot of 4th or 5th level, the DC to move the object increases by 5, it can carry up to 8,000 pounds of weight, and the duration increases to 24 hours. If you cast this spell using a spell slot of 6th level or higher, the DC to move the object increases by 10, it can carry up to 20,000 pounds of weight, and the effect is permanent until dispelled." }; SpellsList["wristpocket"] = { name : "Wristpocket", classes : [], source : [["W", 190]], ritual : true, level : 2, school : "Conj", time : "1 a", range : "Self", components : "S", duration : "Conc, 1 h", description : "Store 1 held obj <5 lb in extradim. space; 1 a to summon obj in free hand or return; reappears at end", descriptionMetric : "Store 1 held obj <2,5 kg in extradim. space; 1 a summon obj in free hand or return; reappears at end", descriptionFull : "You flick your wrist, causing one object in your hand to vanish. The object, which only you can be holding and can weigh no more than 5 pounds, is transported to an extradimensional space, where it remains for the duration.\n Until the spell ends, you can use your action to summon the object to your free hand, and you can use your action to return the object to the extradimensional space. An object still in the pocket plane when the spell ends appears in your space, at your feet." }; SpellsList["pulse wave"] = { name : "Pulse Wave", classes : [], source : [["W", 188]], level : 3, school : "Evoc", time : "1 a", range : "S:30" + (typePF ? "-" : "") + "ft cone", components : "V,S", duration : "Instantaneous", save : "Con", description : "6d6+1d6/SL Force dmg, pulled/pushed 15+5/SL ft from me (also free obj); save halves, no move", descriptionMetric : "6d6+1d6/SL Force dmg, pull/push 4,5+1,5/SL m from me (also free obj); save halves, no move", descriptionShorter : "6d6+1d6/SL Force dmg, pull/push 15+5/SL ft from me (also free obj); save half, no move", descriptionFull : "You create intense pressure, unleash it in a 30-foot cone, and decide whether the pressure pulls or pushes creatures and objects. Each creature in that cone must make a Constitution saving throw. A creature takes 6d6 force damage on a failed save, or half as much damage on a successful one. And every creature that fails the save is either pulled 15 feet toward you or pushed 15 feet away from you, depending on the choice you made for the spell.\n In addition, unsecured objects that are completely within the cone are likewise pulled or pushed 15 feet." + AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d6 and the distance pulled or pushed increases by 5 feet for each slot level above 3rd." }; SpellsList["gravity sinkhole"] = { name : "Gravity Sinkhole", classes : [], source : [["W", 187]], level : 4, school : "Evoc", time : "1 a", range : "120 ft", components : "V,S,M", compMaterial : "A black marble", duration : "Instantaneous", save : "Con", description : "20-ft rad all crea 5d10+1d10/SL Force dmg, pulled to center of radius; save halves and not pulled", descriptionFull : "A 20-foot-radius sphere of crushing force forms at a point you can see within range and tugs at the creatures there. Each creature in the sphere must make a Constitution saving throw. On a failed save, the creature takes 5d10 force damage and is pulled in a straight line toward the center of the sphere, ending in an unoccupied space as close to the center as possible (even if that space is in the air). On a successful save, the creature takes half as much damage and isn't pulled." + AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, the damage increases by 1d10 for each slot level above 4th." }; SpellsList["temporal shunt"] = { name : "Temporal Shunt", classes : [], source : [["W", 189]], level : 5, school : "Trans", time : "1 rea", timeFull : "1 reaction, taken when a creature you can see makes an attack roll or starts to cast a spell", range : "120 ft", components : "V,S", duration : "1 rnd", save : "Wis", description : "Cast if see atk/cast, 1+1/SL crea, each max 30 ft apart, save or vanish until next turn, atk/cast wasted", descriptionFull : "You target the triggering creature, which must succeed on a Wisdom saving throw or vanish, being thrown to another point in time and causing the attack to miss or the spell to be wasted. At the start of its next turn, the target reappears where it was or in the closest unoccupied space. The target doesn't remember you casting the spell or being affected by it." + AtHigherLevels + "When you cast this spell using a spell slot of 6th level or higher, you can target one additional creature for each slot level above 5th. All targets must be within 30 feet of each other." }; SpellsList["gravity fissure"] = { name : "Gravity Fissure", source : [["W", 187]], level : 6, school : "Evoc", time : "1 a", range : "S:100" + (typePF ? "-" : "") + "ft line", components : "V,S,M", compMaterial : "A fistful of iron filings", duration : "Instantaneous", save : "Con", description : "100-ft long 5-ft wide all 8d8+1d8/SL Force dmg, save half; all in 10 ft of line save or dmg \u0026 pull to it", descriptionShorter : "100-ft long 5-ft wide all 8d8+1d8/SL Force dmg, save half; all in 10 ft of it save or dmg \u0026 pulled", descriptionFull : "You manifest a ravine of gravitational energy in a line originating from you that is 100 feet long and 5 feet wide. Each creature in that line must make a Constitution saving throw, taking 8d8 force damage on a failed save, or half as much damage on a successful one.\n Each creature within 10 feet of the line but not in it must succeed on a Constitution saving throw or take 8d8 force damage and be pulled toward the line until the creature is in its area." + AtHigherLevels + "When you cast this spell using a spell slot of 7th level or higher, the damage increases by 1d8 for each slot level above 6th." }; SpellsList["tether essence"] = { name : "Tether Essence", classes : [], source : [["W", 189]], level : 7, school : "Necro", time : "1 a", range : "60 ft", components : "V,S,M\u2020", compMaterial : "A spool of platinum cord worth at least 250 gp, which the spell consumes", duration : "Conc, 1 h", save : "Con", description : "2 crea save (dis. if in 30 ft) or if both fail take same dmg and same healing; ends if 0 hp (250gp cons.)", descriptionFull : "Two creatures you can see within range must make a Constitution saving throw, with disadvantage if they are within 30 feet of each other. Either creature can willingly fail the save. If either save succeeds, the spell has no effect. If both saves fail, the creatures are magically linked for the duration, regardless of the distance between them. When damage is dealt to one of them, the same damage is dealt to the other one. If hit points are restored to one of them, the same number of hit points are restored to the other one. If either of the tethered creatures is reduced to 0 hit points, the spell ends on both. If the spell ends on one creature, it ends on both." }; SpellsList["dark star"] = { name : "Dark Star", classes : [], source : [["W", 186]], level : 8, school : "Evoc", time : "1 a", range : "150 ft", components : "V,S,M", compMaterial : "A shard of onyx and a drop of the caster's blood, both of which the spell consumes", duration : "Conc, 1 min", save : "Con", description : "Up to 40-ft rad as Darkness spell, as Silence spell, dif. ter.; enter/start turn 8d10 Force dmg, save half", descriptionShorter : "Up to 40-ft rad as Darkness \u0026 Silence, dif. ter.; enter/start turn 8d10 Force dmg, save half", descriptionFull : "This spell creates a sphere centered on a point you choose within range. The sphere can have a radius of up to 40 feet. The area within this sphere is filled with magical darkness and crushing gravitational force.\n For the duration, the spell's area is difficult terrain. A creature with darkvision can't see through the magical darkness, and nonmagical light can't illuminate it. No sound can be created within or pass through the area. Any creature or object entirely inside the sphere is immune to thunder damage, and creatures are deafened while entirely inside it. Casting a spell that includes a verbal component is impossible there.\n Any creature that enters the spell's area for the first time on a turn or starts its turn there must make a Constitution saving throw. The creature takes 8d10 force damage on a failed save, or half as much damage on a successful one. A creature reduced to 0 hit points by this damage is disintegrated. A disintegrated creature and everything it is wearing and carrying, except magic items, are reduced to a pile of fine gray dust." }; SpellsList["reality break"] = { name : "Reality Break", classes : [], source : [["W", 189]], level : 8, school : "Conj", time : "1 a", range : "60 ft", components : "V,S,M", compMaterial : "A crystal prism", duration : "Conc, 1 min", save : "Wis", description : "1 crea save or can't take reactions, random effect each turn, see book; extra save at end of every turn", descriptionFull : "You shatter the barriers between realities and timelines, thrusting a creature into turmoil and madness. The target must succeed on a Wisdom saving throw, or it can't take reactions until the spell ends. The affected target must also roll a d10 at the start of each of its turns; the number rolled determines what happens to the target, as shown on the Reality Break Effects table."+ "\n At the end of each of its turns, the affected target can repeat the Wisdom saving throw, ending the spell on itself on a success."+ "\n\n d10 \tEffect"+ "\n 1-2 \tVision of the Far Realm: The target takes 6d12 psychic damage, and it is stunned until the end of the turn."+ "\n 3-5 \tRending Rift: The target must make a Dexterity saving throw, taking 8d12 force damage on a failed save, or half as much damage on a successful one."+ "\n 6-8 \tWormhole: The target is teleported, along with everything it is wearing and carrying, up to 30 feet to an unoccupied space of your choice that you can see. The target also takes 10d12 force damage and is knocked prone."+ "\n 9-10\tChill of the Dark Void: The target takes 10d12 cold damage, and it is blinded until the end of the turn." }; SpellsList["ravenous void"] = { name : "Ravenous Void", classes : [], source : [["W", 188]], level : 9, school : "Evoc", time : "1 a", range : "1000 ft", components : "V,S,M", compMaterial : "A small, nine-pointed star made of iron", duration : "Conc, 1 min", save : "Str", description : "20-ft rad all enter/start 5d10 Force dmg, restrained; all enter/start in 100 ft save or pulled in; see B", descriptionShorter : "20-ft rad all enter/start 5d10 Force dmg, restrained; all start in 100 ft save or pull in; see B", descriptionFull : "You create a 20-foot-radius sphere of destructive gravitational force centered on a point you can see within range. For the spell's duration, the sphere and any space within 100 feet of it are difficult terrain, and nonmagical objects fully inside the sphere are destroyed if they aren't being worn or carried.\n When the sphere appears and at the start of each of your turns until the spell ends, unsecured objects within 100 feet of the sphere are pulled toward the sphere's center, ending in an unoccupied space as close to the center as possible.\n A creature that starts its turn within 100 feet of the sphere must succeed on a Strength saving throw or be pulled straight toward the sphere's center, ending in an unoccupied space as close to the center as possible. A creature that enters the sphere for the first time on a turn or starts its turn there takes 5d10 force damage and is restrained until it is no longer in the sphere. If the sphere is in the air, the restrained creature hovers inside the sphere. A creature can use its action to make a Strength check against your spell save DC, ending this restrained condition on itself or another creature in the sphere that it can reach. A creature reduced to 0 hit points by this spell is annihilated, along with any nonmagical items it is wearing or carrying." }; SpellsList["time ravage"] = { name : "Time Ravage", classes : [], source : [["W", 189]], level : 9, school : "Necro", time : "1 a", range : "90 ft", components : "V,S,M\u2020", compMaterial : "An hourglass filled with diamond dust worth at least 5,000 gp, which the spell consumes", duration : "Instantaneous", save : "Con", description : "1 crea 10d12 Necrotic dmg \u0026 aged: dis. atk/chk/save, die in 30 days; save half, not aged (5k gp cons.)", descriptionShorter : "1 crea 10d12 Necro. dmg, aged: dis. atk/chk/save, die in 30 days; save hlf, no aged (5k gp cons)", descriptionFull : "You target a creature you can see within range, putting its physical form through the devastation of rapid aging. The target must make a Constitution saving throw, taking 10d12 necrotic damage on a failed save, or half as much damage on a successful one. If the save fails, the target also ages to the point where it has only 30 days left before it dies of old age. In this aged state, the target has disadvantage on attack rolls, ability checks, and saving throws, and its walking speed is halved. Only the wish spell or the greater restoration cast with a 9th-level spell slot can end these effects and restore the target to its previous age." }; // Creatures - new beasts CreatureList["moorbounder"] = { name : "Moorbounder", source : [["W", 295]], size : 2, type : "Beast", alignment : "Unaligned", ac : 13, hp : 30, hd : [4, 10], speed : "70 ft", scores : [18, 14, 14, 2, 13, 5], senses : "Darkvision 60 ft", passivePerception : 11, challengeRating : "1", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Claws", ability : 1, damage : [4, 4, "slashing"], range : "Melee (5 ft)", description : "" }], traits : [{ name : "Standing Leap", description : "The moorbounder's long jump is up to 40 ft and its high jump is up to 20 ft, with or without a running start." }] }; CreatureList["bristled moorbounder"] = { name : "Bristled Moorbounder", source : [["W", 295]], size : 2, type : "Beast", alignment : "Unaligned", ac : 15, hp : 52, hd : [7, 10], speed : "70 ft", scores : [18, 14, 14, 2, 13, 5], senses : "Darkvision 60 ft", passivePerception : 11, challengeRating : "3", proficiencyBonus : 2, attacksAction : 2, attacks : [{ name : "Blades", ability : 1, damage : [2, 6, "slashing"], range : "Melee (5 ft)", description : "One blades and one claws attack as an Attack action" }, { name : "Claws", ability : 1, damage : [4, 4, "slashing"], range : "Melee (5 ft)", description : "One blades and one claws attack as an Attack action" }], actions : [{ name : "Multiattack", description : "As an action on its turn, the moorbounder can makeone Blades and one Claws attack." }], traits : [{ name : "Bladed Hide", description : "At the start of each of its turns, the moorbounder deals 2d4 piercing damage to any creature grappling it." }, { name : "Standing Leap", description : "The moorbounder's long jump is up to 40 ft and its high jump is up to 20 ft, with or without a running start." }] }; // Magic Items (each contain contributions by kat9137 [Discord] aka sophiechiabatta [GitHub]) MagicItemsList["acheron blade"] = { name : "Acheron Blade", nameTest : "Acheron", source : [["W", 265]], type : "weapon (any sword)", rarity : "rare", notLegalAL : true, attunement : true, description : "This sword gives a +1 to hit and damage rolls. While I'm holding it, I'm immune to effects that turn undead. As an action, once per dusk, I can use it to gain 1d4+4 temporary HP. Once per dusk, I can give a creature hit with it disadvantage on their next save until the end of my next turn (frighten effect).", descriptionFull : "The black blade of this sword is crafted from a mysterious arcane alloy. You gain a +1 bonus to attack and damage rolls made with this magic weapon. While the sword is on your person, you are immune to effects that turn undead."+ "\n " + toUni("Dark Blessing") + ". While holding the sword, you can use an action to give yourself 1d4 + 4 temporary hit points. This property can't be used again until the next dusk."+ "\n " + toUni("Disheartening Strike") + ". When you hit a creature with an attack using this weapon, you can fill the target with unsettling dread: the target has disadvantage on the next saving throw it makes before the end of your next turn. The creature ignores this effect if it's immune to the frightened condition. Once you use this property, you can't do so again until the next dusk", action : [["action", " (Dark Blessing)"]], savetxt : { immune : ["Effects that turn undead"] }, extraLimitedFeatures : [{ name : "Acheron Blade (Dark Blessing)", usages : 1, recovery : "Dusk" }, { name : "Acheron Blade (Disheartening Strike)", usages : 1, recovery : "Dusk" }], chooseGear : { type : "weapon", prefixOrSuffix : "suffix", descriptionChange : ["replace", "sword"], excludeCheck : function (inObjKey, inObj) { var testRegex = /sword|scimitar|rapier/i; return !(testRegex).test(inObjKey) && (!inObj.baseWeapon || !(testRegex).test(inObj.baseWeapon)); } }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && v.isMeleeWeapon && (/sword|scimitar|rapier/i).test(v.baseWeaponName) && (/acheron/i).test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + 'Once per dusk, target disadv. on next save until my next turn ends'; } }, 'If I include the words "Acheron" in a the name of a sword, it will be treated as the magic weapon Acheron Blade.' ], atkCalc : [ function (fields, v, output) { if (v.isMeleeWeapon && (/sword|scimitar|rapier/i).test(v.baseWeaponName) && (/acheron/i).test(v.WeaponTextName)) { output.magic = v.thisWeapon[1] + 1; } }, '' ] } }; MagicItemsList["amulet of the drunkard"] = { name : "Amulet of the Drunkard", source : [["W", 266]], type : "wondrous item", rarity : "uncommon", notLegalAL : true, description : "This amulet smells of old, ale-stained wood. While wearing it, I can regain 4d4 + 4 hit points when I drink a pint of beer, ale, mead, or wine. Once the amulet has restored hit points, it can't do so again until the next dawn.", descriptionFull : "This amulet smells of old, ale-stained wood. While wearing it, you can regain 4d4 + 4 hit points when you drink a pint of beer, ale, mead, or wine. Once the amulet has restored hit points, it can't do so again until the next dawn.", usages : 1, recovery : "dawn" }; var EGtW_ArcaneCannonFullDescription = [ "This Large cannon is imbued with magic. It requires no ammunition and doesn't need to be loaded. It takes one action to aim the cannon and one action to fire it. After the cannon has fired, it must recharge for 5 minutes before it can be fired again. The creature firing the cannon chooses the effect from the following options:", ">>Acid Jet<<. The cannon discharges acid in a line 300 feet long and 5 feet wide. Each creature in that line must make a DC 15 Dexterity saving throw, taking 4d10 acid damage on a failed save, or half as much damage on a successful one. In addition, a creature that fails its saving throw takes 2d10 acid damage at the start of each of its turns; a creature can end this damage by using its action to wash off the acid with a pint or more of water.", ">>Fire Jet<<. The cannon discharges fire in a line 300 feet long and 5 feet wide. Each creature in the area must make a DC 15 Dexterity saving throw, taking 6d10 fire damage on a failed save, or half as much damage on a successful one. The fire ignites any flammable objects in the area that aren't being worn or carried.", ">>Frost Shot<<. The cannon shoots a ball of frost to a point you can see within 1200 feet of the cannon. The ball then expands to form a 30-foot-radius sphere centered on that point. Each creature in that area must make a DC 15 Constitution saving throw. On a failed save, a creature takes 4d10 cold damage, and its speed is reduced by 10 feet for 1 minute. On a successful save, the creature takes half as much damage, and its speed isn't reduced. A creature whose speed is reduced by this effect can repeat the save at the end of each of its turns, ending the effect on itself on a success.", ">>Lightning Shot<<. The cannon shoots a ball of lightning to a point you can see within 1200 feet of the cannon. The lightning then expands to form a 20-foot-radius sphere centered on that point. Each creature in that area must make a DC 15 Dexterity saving throw, taking 6d10 lightning damage on a failed save, or half as much damage on a successful one. Creatures wearing metal armor have disadvantage on the save.", ">>Poison Spray<<. The cannon expels poison gas in a 60-foot cone. Each creature in that area must make a DC 15 Constitution saving throw. On a failed save, the creature takes 4d10 poison damage and is poisoned for 1 minute. On a successful save, the creature takes half as much damage and isn't poisoned. A creature poisoned in this way can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success." ]; MagicItemsList["arcane cannon"] = { name : "Arcane Cannon", source : [["W", 265]], type : "wondrous item", rarity : "very rare", notLegalAL : true, description : "This Large magical cannon requires no ammunition and doesn't need to be loaded, but takes 5 minutes to recharge once fired. It takes one action to aim it and another action to fire it. When I fire it, I can choose the effect, an acid jet, fire jet, frost shot, lightning shot, or poison spray. See Notes page.", descriptionFull : EGtW_ArcaneCannonFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)<<\./g, function(a, match) { return match.toUpperCase() + ":"; }).replace(/\byou\b/ig, "I").replace(/\bf(oo|ee)t\b/ig, "ft") }] }; MagicItemsList["battering shield"] = { name : "Battering Shield", source : [["W", 266]], type : "shield", rarity : "uncommon", notLegalAL : true, attunement : true, description : "This iron tower shield gives me a +1 bonus to AC, in addition to the shield's normal bonus to AC. It has 3 charges, regaining 1d3 expended charges daily at dawn. When I am holding the shield and push a creature 5 ft away, I can expend 1 charge to push that creature an additional 10 ft, knock it prone, or both.", descriptionFull : "While holding this iron tower shield, you gain a +1 bonus to AC. This bonus is in addition to the shield's normal bonus to AC.\n Additionally, the shield has 3 charges, and it regains 1d3 expended charges daily at dawn. If you are holding the shield and push a creature within your reach at least 5 feet away, you can expend 1 charge to push that creature an additional 10 feet, knock it prone, or both.", usages : 3, recovery : "dawn", additional : "regains 1d3", shieldAdd : ["Battering Shield", 3], weight : 6 }; MagicItemsList["bloodaxe"] = { name : "Bloodaxe", source : [["W", 266]], type : "weapon (greataxe)", rarity : "very rare", notLegalAL : true, attunement : true, description : "This rust-colored magical greataxe grants a +2 bonus to attack and damage rolls made with it. The axe deals an additional 1d6 necrotic damage to creature's that aren't constructs or undead. If I reduce a creature to 0 hit points with this axe, I gain 10 temporary hit points.", descriptionFull : "You gain a +2 bonus to attack and damage rolls made with this magic axe. The axe deals an extra 1d6 necrotic damage to creatures that aren't constructs or undead. If you reduce such a creature to 0 hit points with an attack using this axe, you gain 10 temporary hit points.\n This axe is forged from a dark, rust-colored metal and once belonged to the goliath barbarian Grog Strongjaw of Vox Machina.", weaponOptions : [{ baseWeapon : "greataxe", regExpSearch : /bloodaxe/i, name : "Bloodaxe", source : [["W", 266]], description : "Heavy, two-handed; +1d6 necrotic damage to living targets", modifiers : [2, 2], selectNow : true }], weight : 7 }; MagicItemsList["breathing bubble"] = { name : "Breathing Bubble", source : [["W", 266], ["CotN", 212]], type : "wondrous item", rarity : "common", notLegalAL : true, description : "This translucent, bubble-like sphere has a slightly tacky outer surface. I gain its benefits only while wearing it over my head like a helmet. The bubble contains 1 hour of breathable air. The bubble regains all its expended air daily at dawn.", descriptionFull : "This translucent, bubble-like sphere has a slightly tacky outer surface, and you gain the item's benefits only while wearing it over your head like a helmet. The bubble contains 1 hour of breathable air. The bubble regains all its expended air daily at dawn.", usages : 1, recovery : "dawn" }; MagicItemsList["brooch of living essence"] = { name : "Brooch of Living Essence", source : [["W", 266]], type : "wondrous item", rarity : "uncommon", notLegalAL : true, attunement : true, description : "While wearing this nondescript brooch, spells and anything else that would detect or reveal my creature type treat me as humanoid, and those that would reveal my alignment treat it as neutral.", descriptionFull : "While wearing this nondescript brooch, spells and anything else that would detect or reveal your creature type treat you as humanoid, and those that would reveal your alignment treat it as neutral." }; MagicItemsList["butcher's bib"] = { name : "Butcher's Bib", source : [["W", 266]], type : "wondrous item", rarity : "rare", notLegalAL : true, attunement : true, description : "This black leather apron is perpetually covered by blood. Once per turn when I roll damage for a melee attack with a weapon, I can use it to reroll the weapon's damage dice, but must use the new roll. While wearing the bib, my weapon attacks that deal slashing damage score a critical hit on a roll of 19 or 20.", descriptionFull : "This black leather apron is perpetually covered by blood, even after being washed off. You gain the following benefits while wearing the apron:"+ "\n \u2022 Once per turn when you roll damage for a melee attack with a weapon, you can reroll the weapon's damage dice. If you do so, you must use the second total."+ "\n \u2022 Your weapon attacks that deal slashing damage score a critical hit on a roll of 19 or 20 on the d20.", calcChanges : { atkAdd : [ function (fields, v) { if (!v.isDC && !v.isSpell && !v.CritChance && /slash/i.test(v.theWea.damage[2])) { fields.Description += (fields.Description ? '; ' : '') + 'Crit on 19-20'; v.CritChance = 19; } if (!v.isDC && v.isMeleeWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Reroll damage once per turn'; } }, "My weapon attacks that deal slashing damage score a critical on a to hit roll of both 19 and 20. Once per turn, I can reroll the damage of a melee weapon attack and must use the second result.", 19 ] } }; MagicItemsList["coin of delving"] = { name : "Coin of Delving", source : [["W", 266]], type : "wondrous item", rarity : "common", notLegalAL : true, description : "This scintillating copper coin sheds dim light in a 5-ft radius. If dropped a distance greater than 5 ft, the coin issues a melodious ringing sound when it hits a surface. Any creature that can hear the chime can determine the distance the coin dropped based on the tone.", descriptionFull : "This scintillating copper coin sheds dim light in a 5-foot radius. If dropped a distance greater than 5 feet, the coin issues a melodious ringing sound when it hits a surface. Any creature that can hear the chime can determine the distance the coin dropped based on the tone." }; MagicItemsList["corpse slayer"] = { name : "Corpse Slayer", nameTest : "Corpse Slaying", source : [["W", 266]], type : "weapon (any)", rarity : "rare", notLegalAL : true, attunement : true, description : "I gain a +1 bonus to attack and damage rolls made with this magic weapon. Undead hit by it take an additional 1d8 damage and gain disadvantage on saving throws against effects that turn undead until the start of my next turn.", descriptionFull : "You gain a +1 bonus to attack and damage rolls made with this magic weapon.\n When you hit an undead creature with an attack using this weapon, the attack deals an extra 1d8 damage of the weapon's type, and the creature has disadvantage on saving throws against effects that turn undead until the start of your next turn.", chooseGear : { type : "weapon", prefixOrSuffix : ["between", "Corpse Slaying", ""], itemName1stPage : ["suffix", "Corpse Slaying"], descriptionChange : ["replace", "weapon"] }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.isSpell && !v.theWea.isMagicWeapon && (/corpse slay(er|ing)/i).test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + '+1d8 damage vs. undead; Target disadv. vs. turn undead'; } }, 'If I include the words "Corpse Slayer" or "Corpse Slaying" in a the name of a weapon, it will be treated as the magic weapon Corpse Slayer, which has a +1 to hit and damage and deals +1d8 damage vs. undead.' ], atkCalc : [ function (fields, v, output) { if (!v.isSpell && (/corpse slay(er|ing)/i).test(v.WeaponTextName)) { output.magic = v.thisWeapon[1] + 1; } }, '' ] } }; MagicItemsList["dispelling stone"] = { name : "Dispelling Stone", source : [["W", 266]], type : "wondrous item", rarity : "very rare", notLegalAL : true, description : "This smooth, rainbow-colored, egg-shaped stone can be thrown up to 30 ft and explodes in a 10-ft-radius sphere of magical energy on impact, destroying the stone. Any active spell of 5th level or lower in the sphere ends.", descriptionFull : "This smooth, rainbow-colored, egg-shaped stone can be thrown up to 30 feet and explodes in a 10-foot-radius sphere of magical energy on impact, destroying the stone. Any active spell of 5th level or lower in the sphere ends.", usages : 1, recovery : "Never" }; MagicItemsList["duskcrusher"] = { name : "Duskcrusher", source : [["W", 266]], type : "weapon (warhammer)", rarity : "very rare", notLegalAL : true, attunement : true, description : "This rod caries the symbol of Pelor. As a bonus action, I can activate its crackling head of sunlight, that shines bright light in 15 ft and dim for another 15 ft. While active, I can use it as a +2 warhammer that deals radiant damage and +1d8 damage to undead. Once per dawn, I can cast Sunbeam with it (DC 15).", descriptionLong : "This leather-wrapped metal rod caries the symbol of Pelor on top. As a bonus action, I can cause a warhammer head of crackling radiance to spring into existence. It emits emits bright light in a 15-foot radius and dim light for an additional 15 feet. The light is sunlight. While the radiant head is active, the rod functions as a +2 warhammer that deals radiant damage and +1d8 damage to undead. Once per dawn while its radiant head is active, I can use it to cast Sunbeam (DC 15). I can deactivate the head as an action.", descriptionFull : "This item takes the form of a leather-wrapped metal rod emblazoned with the symbol of Pelor, the Dawn Father. While grasping the rod, you can use a bonus action to cause a warhammer head of crackling radiance to spring into existence. The warhammer's radiant head emits bright light in a 15-foot radius and dim light for an additional 15 feet. The light is sunlight. You can use an action to make the radiant head disappear."+ "\n While the radiant head is active, you gain a +2 bonus to attack and damage rolls made with this magic weapon, and attacks with the weapon deal radiant damage instead of bludgeoning damage. An undead creature hit by the weapon takes an extra 1d8 radiant damage."+ "\n While you are holding Duskcrusher and its radiant head is active, you can use an action to cast the sunbeam spell (save DC 15) from the weapon, and this action can't be used again until the next dawn.", action : [ ["bonus action", " (activate)"], ["action", " (deactivate)"] ], extraLimitedFeatures : [{ name : "Duskcrusher (Sunbeam)", usages : 1, recovery : "dawn" }], weaponOptions : [{ baseWeapon : "warhammer", regExpSearch : /duskcrusher/i, name : "Duskcrusher", source : [["W", 266]], damage : [1, 8, "radiant"], description : "Versatile (1d10); +1d8 damage vs. undead", modifiers : [2, 2], selectNow : true }], weight : 2, fixedDC : 15, spellcastingBonus : [{ name : "Once per dawn", spells : ["sunbeam"], selection : ["sunbeam"], firstCol : 'oncelr' }] }; MagicItemsList["dust of deliciousness"] = { name : "Dust of Deliciousness", source : [["W", 267]], type : "wondrous item", rarity : "uncommon", notLegalAL : true, description : "This reddish brown dust can be sprinkled over any edible substance to greatly improve the flavor. The dust also dulls the eater's senses: anyone eating food treated with this dust has disadvantage on Wisdom ability checks and Wisdom saving throws for 1 hour. There is enough dust to flavor six servings.", descriptionFull : "This reddish brown dust can be sprinkled over any edible substance to greatly improve the flavor. The dust also dulls the eater's senses: anyone eating food treated with this dust has disadvantage on Wisdom ability checks and Wisdom saving throws for 1 hour. There is enough dust to flavor six servings.", usages : 6, recovery : "Never" }; MagicItemsList["goggles of object reading"] = { name : "Goggles of Object Reading", source : [["W", 267]], type : "wondrous item", rarity : "uncommon", notLegalAL : true, attunement : true, description : "While wearing these leather-framed goggles feature purple crystal lenses, I have advantage on Intelligence (Arcana) checks made to reveal information about a creature or object I can see. Once per dawn, I can cast Identify using the goggles.", descriptionFull : "These leather-framed goggles feature purple crystal lenses. While wearing the goggles, you have advantage on Intelligence (Arcana) checks made to reveal information about a creature or object you can see. In addition, you can cast the identify spell using the goggles. Once you do so, you can't do so again until the next dawn.", // Changed googles to goggles, as this is clearly a typo in the book additional : "Identify", usages : 1, recovery : "dawn", spellcastingBonus : [{ name : "Once per dawn", spells : ["identify"], selection : ["identify"], firstCol : 'oncelr' }] }; MagicItemsList["hunter's coat"] = { name : "Hunter's Coat", source : [["W", 267]], type : "armor (leather)", rarity : "very rare", notLegalAL : true, attunement : true, description : "I have a +1 bonus to AC while wearing this leather armor. The coat has 3 charges. When I hit a creature with an attack and that creature doesn't have all its hit points, I can expend 1 charge to deal an extra 1d10 necrotic damage to the target. The coat regains 1d3 expended charges at dawn.", descriptionFull : "You have a +1 bonus to AC while wearing this armor. The coat has 3 charges. When you hit a creature with an attack and that creature doesn't have all its hit points, you can expend 1 charge to deal an extra 1d10 necrotic damage to the target. The coat regains 1d3 expended charges daily at dawn.", usages : 3, recovery : "dawn", additional : "regains 1d3", armorOptions : [{ regExpSearch : /^(?=.*hunter)(?=.*coat).*$/i, name : "Hunter's Coat", source : [["W", 267]], type : "light", ac : "11+1", weight : 10, selectNow : true }], weight : 10 }; MagicItemsList["last stand armor"] = { name : "Last Stand Armor", nameTest : /last.stand.*armou?r/i, source : [["W", 267]], type : "armor (any)", rarity : "very rare", notLegalAL : true, description : "I have a +1 bonus to AC while wearing this magic armor. If I die while wearing this armor, it is destroyed, and each celestial, fey, and fiend with 30 ft of me must succeed on a DC 15 Charisma saving throw or be banished to their home plane of existence, unless they are already there.", descriptionFull : "You have a +1 bonus to AC while wearing this armor, which shimmers softly. If you die while wearing the armor, it is destroyed, and each celestial, fey, and fiend with 30 feet of you must succeed on a DC 15 Charisma saving throw or be banished to its home plane of existence, unless it is already there.", chooseGear : { type : "armor", prefixOrSuffix : ["between", "Last Stand", "Armor"], descriptionChange : ["prefix", "armor"], itemName1stPage : ["between", "Last Stand", "(+1)"] }, extraLimitedFeatures : [{ name : "Last Stand Armor", usages : 1, recovery : "Never" }] }; var EGtW_LuxonBeaconFullDescription = [ "This dodecahedron of faintly glowing crystal is heavier than it appears. A set of handles are affixed to its sides, and it pulsates and thrums when touched.", ">>Fragment of Possibility<<. A creature that touches the beacon and concentrates for 1 minute receives a Fragment of Possibility, which looks like a Tiny, grayish bead of energy that follows the creature around, staying within 1 foot of it at all times. The fragment lasts for 8 hours or until used. Once the beacon grants a Fragment of Possibility, it can't grant another until the next dawn. A creature with a Fragment of Possibility from a Luxon Beacon can't gain another Fragment of Possibility from any source.", "When a creature with a Fragment of Possibility makes an attack roll, an ability check, or a saving throw, it can expend its fragment to roll an additional d20 and choose which of the d20s to use. Alternatively, when an attack roll is made against the creature, it can expend its fragment to roll a d20 and choose which of the d20s to use, the one it rolled or the one the attacker rolled.", "If the original d20 roll has advantage or disadvantage, the creature rolls its d20 after advantage or disadvantage has been applied to the original roll.", ">>Soul Snare<<. If a follower of the Luxon who has undergone a ritual of consecution dies within 100 miles of a Luxon Beacon, their soul is ensnared by it. This soul will be reincarnated within the body of a random humanoid baby developing within 100 miles of the beacon." ]; MagicItemsList["luxon beacon"] = { name : "Luxon Beacon", source : [["W", 268]], type : "wondrous item", rarity : "legendary", notLegalAL : true, description : "Once per dawn, a creature can touch this crystal for 1 minute to gain a Fragment of Possibility. Once for the next 8 hours, it can roll an extra d20 for an attack, check, save, or being attacked, before the outcome is determined. Creatures consecuted to the Luxon that die within 100 miles of it are reincarnated. See notes.", descriptionFull : EGtW_LuxonBeaconFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)<<\. /g, function(a, match) { return match.toUpperCase() + "\n "; }) }] }; MagicItemsList["needle of mending"] = { name : "Needle of Mending", source : [["W", 268]], type : "weapon (dagger)", rarity : "rare", notLegalAL : true, attunement : true, description : "This weapon is a magic dagger disguised as a sewing needle. As a bonus action, I can speak its command word to transform it into a dagger or back into a needle. I gain a +1 bonus to attack and damage rolls made with the dagger. As an action while holding it, I can cast the mending cantrip from it.", descriptionFull : "This weapon is a magic dagger disguised as a sewing needle. When you hold it and use a bonus action to speak its command word, it transforms into a dagger or back into a needle.\n You gain a +1 bonus to attack and damage rolls made with the dagger. While holding it, you can use an action to cast the mending cantrip from it.", action : [["bonus action", " (transform)"]], weaponOptions : [{ baseWeapon : "dagger", regExpSearch : /^(?=.*needle)(?=.*mending).*$/i, name : "Needle of Mending", source : [["W", 268]], modifiers : [1, 1], selectNow : true }], spellcastingBonus : [{ name : "At will", spells : ["mending"], selection : ["mending"], firstCol : 'atwill' }], spellChanges : { "mending" : { time : "1 a", changes : "Using the Needle of Mending, I can cast Mending as an action." } }, weight : 1 }; MagicItemsList["nightfall pearl"] = { name : "Nightfall Pearl", source : [["W", 268]], type : "wondrous item", rarity : "legendary", notLegalAL : true, attunement : true, description : "I can spend 10 minutes to activate this his 6-inch-diameter, jet-black orb, causing the area within 10 miles of it to become night even if it is daytime. This night lasts for 24 hours, until I cancel it as an action, or until my attunement to the pearl ends. Once used, the pearl can't be used again for 24 hours.", descriptionFull : "Used to summon night, this 6-inch-diameter, jet-black orb is cold to the touch. You can spend 10 minutes to activate it, causing the area within 10 miles of it at the moment of activation to become night even if it is daytime. This night lasts for 24 hours, until you cancel it as an action, or until your attunement to the pearl ends. Once used, the pearl can't be used again for 24 hours.", action : [["action", " (end)"]], usages : 1, recovery : "24 hrs" }; MagicItemsList["orb of the veil"] = { // no automation for halving the fire damage, because it is very complex, error prone, and the curse could (and will) be removed name : "Orb of the Veil", source : [["W", 268]], type : "wondrous item", rarity : "very rare", notLegalAL : true, attunement : true, description : "This orb increases my Wisdom and maximum by 2, grants me +60 ft darkvision, and adv. on Wisdom checks to find hidden doors and paths. It is cursed and once attuned to it, I become unwilling to part with it, nonmagical flames within 30 ft of me extinguish, and fire damage I deal is halved (not automated).", descriptionFull : "This onyx sphere bears deep, spiraling grooves and dangles from an iron chain. While the orb is on your person, you gain the following benefits:\n Your Wisdom score increases by 2, as does your maximum for that score.\n You gain darkvision out to a range of 60 feet. If you already have darkvision, the orb increases its range by 60 feet.\n You have advantage on Wisdom checks to find hidden doors and paths.\n " + toUni("Curse") + ". The orb is cursed, and becoming attuned to it extends the curse to you. As long as you remain cursed, you are unwilling to part with the orb, keeping it on your person at all times. All nonmagical flames within 30 feet of you automatically extinguish, and fire damage dealt by you is halved.", vision : [["Darkvision", "fixed 60"], ["Darkvision", "+60"]], scores : [0, 0, 0, 0, 2, 0], scoresMaximum : [0, 0, 0, 0, "+2", 0], weight : 3 }; MagicItemsList["potion of maximum power"] = { name : "Potion of Maximum Power", source : [["W", 268]], type : "potion", rarity : "rare", notLegalAL : true, description : "Once as an action, I can drink this potion of glowing purple liquid that smells of sugar and plum or administer it to another. The next time the recipient casts a damage-dealing spell of 4th-level or lower within 1 minute, instead of rolling the damage die, the highest number possible for each die is used.", descriptionFull : "The first time you cast a damage-dealing spell of 4th level or lower within 1 minute after drinking the potion, instead of rolling dice to determine the damage dealt, you can instead use the highest number possible for each die.\n This glowing purple liquid smells of sugar and plum, but it has a muddy taste.", weight : 0.5 }; MagicItemsList["potion of possibility"] = { name : "Potion of Possibility", source : [["W", 268]], type : "potion", rarity : "very rare", notLegalAL : true, description : "Once as an action, I can drink this potion of glowing purple liquid that smells of sugar and plum or administer it to another. Twice for the next 8 hours, the consumer can roll an extra d20 for an attack, check, save, or being attacked, before the outcome is determined.", descriptionFull : "When you drink this clear potion, you gain two Fragments of Possibility, each of which looks like a Tiny, grayish bead of energy that follows you around, staying within 1 foot of you at all times. Each fragment lasts for 8 hours or until used."+ "\n When you make an attack roll, an ability check, or a saving throw, you can expend your fragment to roll an additional d20 and choose which of the d20s to use. Alternatively, when an attack roll is made against you, you can expend your fragment to roll a d20 and choose which of the d20s to use, the one you rolled or the one the attacker rolled."+ "\n If the original d20 roll has advantage or disadvantage, you roll your d20 after advantage or disadvantage has been applied to the original roll."+ "\n While you have one or more Fragments of Possibility from this potion, you can't gain another Fragment of Possibility from any source.", weight : 0.5 }; MagicItemsList["reincarnation dust"] = { name : "Reincarnation Dust", source : [["W", 268]], type : "wondrous item", rarity : "very rare", notLegalAL : true, usages : 1, recovery : "Never", description : "Once I can sprinkle the purple dust in this small pouch on a dead humanoid or a piece of a dead humanoid. The dust is absorbed by the remains. If willing, the dead creature returns to life with a new body as if the reincarnate spell had been cast on the remains.", descriptionFull : "When this small pouch of purple dust is sprinkled on a dead humanoid or a piece of a dead humanoid, the dust is absorbed by the remains. If willing, the dead creature returns to life with a new body as if the reincarnate spell had been cast on the remains.", spellcastingBonus : [{ name : "Use once", spells : ["reincarnate"], selection : ["reincarnate"] }] }; MagicItemsList["ring of obscuring"] = { name : "Ring of Obscuring", source : [["W", 269]], type : "ring", rarity : "uncommon", notLegalAL : true, attunement : true, description : "This band of iron resembling a skull has 3 charges, regaining 1d3 expended charges at dawn. As an action, I can expend 1 charge to cast Fog Cloud from it, with the following changes: the cloud is centered on me when it first appears, the spell lasts for 1 minute, and the spell requires no concentration.", descriptionFull : "This band of iron resembles a skull and is cold to the touch. It has 3 charges and regains 1d3 expended charges daily at dawn. As an action while wearing the ring, you can expend 1 of its charges to cast the fog cloud spell from it, with the following changes: the cloud is centered on you when it first appears, and the spell lasts for 1 minute (no concentration required).", extraLimitedFeatures : [{ name : "Ring of Obscuring", usages : 3, recovery : "Dawn" }], spellcastingAbility : "class", spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "1 charge", spells : ["fog cloud"], selection : ["fog cloud"], firstCol : '1' }], spellChanges : { "fog cloud" : { range : "Self", duration : "1 min", changes : "When I cast fog cloud with the Ring of Obscuring, the spell is centered on me, lasts for 1 minute, and the requires no concentration." } } }; MagicItemsList["ring of temporal salvation"] = { name : "Ring of Temporal Salvation", source : [["W", 269]], type : "ring", rarity : "rare", notLegalAL : true, attunement : true, description : "If I die while wearing this gray crystal ring, I vanish and reappear in an empty space within 5 ft, with 3d6 + my Con mod in HP, and 1 less level of exhaustion (if any). If my maximum HP is less than the amount rolled, my max rises to a similar amount. Once this ring is used, it turns to dust and is destroyed.", descriptionFull : "If you die while wearing this gray crystal ring, you vanish and reappear in an unoccupied space within 5 feet of the space you left (or the nearest unoccupied space). You have a number of hit points equal to 3d6 + your Constitution modifier. If your hit point maximum is lower than the number of hit points you regain, your hit point maximum rises to a similar amount. If you have any levels of exhaustion, reduce your level of exhaustion by 1. Once the ring is used, it turns to dust and is destroyed." }; MagicItemsList["rod of retribution"] = { name : "Rod of Retribution", source : [["W", 269]], type : "rod", rarity : "uncommon", notLegalAL : true, attunement : true, description : "This adamantine rod with a glowing crystalline tip has 3 charges, regaining all daily at dawn. As a reaction when a creature I can see within 60 ft damages me, I can expend a charge to force it to make a DC 13 Dexterity save. It takes a 2d10 lightning damage on a failed save, or half as much on a successful one.", descriptionFull : "This adamantine rod is tipped with a glowing crystalline eye. The rod has 3 charges and regains all its expended charges daily at dawn.\n When a creature you can see within 60 feet of you damages you while you are holding this rod, you can use your reaction to expend 1 of the rod's charges to force the creature to make a DC 13 Dexterity saving throw. The creature takes 2d10 lightning damage on a failed save, or half as much damage on a successful one.", usages : 3, recovery : "dawn", action : [["reaction", " (if damaged)"]], weight : 2 }; MagicItemsList["spell bottle"] = { name : "Spell Bottle", source : [["W", 269]], type : "wondrous item", rarity : "legendary", notLegalAL : true, attunement : true, description : "While holding this bottle, I can cast a 5th-level or lower spell into it if empty, or cast the stored spell from it (slot level, DC, and spell attack as original casting). As a reaction when I see a spell being cast in 60 ft, I can try to store it in the empty bottle. Works if 3rd-level or lower, otherwise Int check DC 10 + spell level.", descriptionFull : "This glass bottle can store one spell of up to 5th level at a time. When found, roll a d6 and subtract 1; the total determines the level of spell in the bottle (the DM chooses the spell, and 0 means the bottle is empty). A swirling blue vapor fills the bottle while it contains a spell."+ "\n When the bottle is empty, any creature can cast a spell of 1st through 5th level into it by touching it while casting. The spell has no effect other than to be stored in the bottle."+ "\n While holding the bottle, you can cast the spell stored in it. The spell uses the slot level, spell save DC, spell attack bonus, and spellcasting ability of the original caster, but is otherwise treated as if you cast the spell. The bottle becomes empty once the spell is cast."+ "\n If you're holding the empty bottle when you see a creature casting a spell within 60 feet of you, you can open the bottle as a reaction in an attempt to interrupt the spell. If the creature is casting a spell of 3rd level or lower, the spell has no effect, and it is stored in the bottle. If it is casting a spell of 4th level or higher, make an Intelligence check. The DC equals 10 + the spell's level. On a success, the spell has no effect, and it is stored in the bottle." }; MagicItemsList["staff of dunamancy"] = { name : "Staff of Dunamancy", source : [["W", 270]], type : "staff", rarity : "very rare", notLegalAL : true, attunement : true, prerequisite : "Requires attunement by a wizard", prereqeval : function (v) { return classes.known.wizard ? true : false; }, description : "This staff has 10 charges, regains 1d6+4 at dawn. If I use its last charge, roll a d20. On a 1, it is destroyed. As an action, I can use its charges to cast Fortune's Favor (2), Pulse Wave (3), or Gravity Sinkhole (4), using my spellcasting ability. Once per dawn, I can turn a failed save vs. a spell that targets only me into a success.", descriptionFull : "This staff of polished gray wood bears numerous runes carved along its length. The staff has 10 charges and regains 1d6 + 4 expended charges daily at dawn. If you expend the last charge, roll a d20. On a 1, the staff turns into dust and is destroyed."+ "\n While holding the staff, you can use an action to expend 2 or more of its charges to cast one of the following spells from it, using your spell save DC and spell attack bonus: fortune's favor (2 charges), pulse wave (3 charges), or gravity sinkhole (4 charges)."+ "\n " + toUni("New Possibility") + ". If you are holding the staff and fail a saving throw against a spell that targets only you, you can turn your failed save into a successful one. This property can't be used again until the next dawn.", extraLimitedFeatures : [{ name : "Staff of Dunamancy (regains 1d6+4)", usages : 10, recovery : "dawn" }, { name : "Staff of Dunamancy (New Possibility)", usages : 1, recovery : "dawn" }], spellcastingAbility : "class", spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "2 charges", spells : ["fortune's favor"], selection : ["fortune's favor"], firstCol : 2 }, { name : "3 charges", spells : ["pulse wave"], selection : ["pulse wave"], firstCol : 3 }, { name : "4 charges", spells : ["gravity sinkhole"], selection : ["gravity sinkhole"], firstCol : 4 }], spellChanges : { "fortune's favor" : { time : "1 a", changes : "Using the Staff of Dunamancy, I can cast Fortune's Favor as an action." } }, weight : 4 }; MagicItemsList["staff of the ivory claw"] = { name : "Staff of the Ivory Claw", source : [["W", 270]], type : "staff", rarity : "rare", notLegalAL : true, attunement : true, description : "This gray-and-cerulean staff is topped with a small dragon claw carved from ivory. While holding the staff, I gain a +1 bonus to spell attack rolls. Whenever you score a critical hit with a spell attack, the target takes an extra 3d6 radiant damage.", descriptionFull : "This gray-and-cerulean staff is topped with a small dragon claw carved from ivory. While holding the staff, you gain a +1 bonus to spell attack rolls. Whenever you score a critical hit with a spell attack, the target takes an extra 3d6 radiant damage.", prerequisite : "Requires attunement by a spellcaster", prereqeval : function(v) { return v.isSpellcaster; }, calcChanges : { spellCalc : [ function (type, spellcasters, ability) { if (type == "attack") return 1; }, "While holding the Staff of the Ivory Claw, I have a +1 bonus to spell attack rolls." ], atkAdd : [ function (fields, v) { if (v.isSpell && !v.theWea.dc) { fields.Description += (fields.Description ? '; ' : '') + 'On crit, +3d6 radiant damage'; } }, "While holding the Staff of the Ivory Claw whenever I score a critical hit with a spell attack, the target takes an extra 3d6 radiant damage." ] }, weight : 4 }; MagicItemsList["vox seeker"] = { name : "Vox Seeker", source : [["W", 270]], type : "wondrous item", rarity : "common", notLegalAL : true, description : "This clockwork device resembles a metal crab the size of a dinner plate. Every action used to wind up this clockwork device allows it to operate for 1 minute, to a maximum of 10 minutes. See the vox seeker on a companion page. This creature is under the DM's control. If reduced to 0 HP, it is destroyed.", descriptionFull : "This clockwork device resembles a metal crab the size of a dinner plate. Every action used to wind up the device allows it to operate for 1 minute, to a maximum of 10 minutes. While operational, the item uses the accompanying Vox Seeker stat block. This automaton is under the DM's control. A vox seeker reduced to 0 hit points is destroyed.", action : [["action", " (wind up)"]], creaturesAdd : [["Vox Seeker"]], creatureOptions : [{ name : "Vox Seeker", source : [["W", 270]], size : 5, type : "Construct", alignment : "", ac : 14, hp : 7, hd : [2, 4], speed : "20 ft, climb 20 ft", scores : [2, 10, 12, 1, 10, 1], damage_immunities : "poison, psychic", condition_immunities : "blinded, charmed, deafened, exhaustion, frightened, paralyzed, petrified, poisoned", senses : "Blindsight 60 ft (blind beyond this radius", passivePerception : 10, languages : "", challengeRating : "0", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Pincer", ability : 2, damage : [1, 4, "piercing"], range : "Melee (5 ft)", description : "+3 lightning damage", abilitytodamage : false }], features : [{ name : "Creator", description : "The homunculus obeys the commands of its creator and has the same proficiency bonus. It takes its turn immediately after its creator, on the same initiative count. It can move and take reactions on its own, but only takes the Dodge action on its turn unless its creator takes a bonus action to command it to take another action. If its creator is incapacitated, it can take any action, not just Dodge." }], traits : [{ name : "Spider Climb", description : "The vox seeker can climb difficult surfaces, including upside down on ceilings, without needing to make an ability check." }, { name : "Voice Lock", description : "The vox seeker must move toward and attack the source of the nearest voice within 60 ft of it, to the exclusion of all other targets, for as long as it remains operational." }] }] }; MagicItemsList["weapon of certain death"] = { name : "Weapon of Certain Death", nameTest : "of Certain Death", source : [["W", 270]], type : "weapon (any)", rarity : "rare", notLegalAL : true, description : "When I damage a creature with an attack using this magic weapon, the target can't regain hit points until the start of my next turn.", descriptionFull : "When you damage a creature with an attack using this magic weapon, the target can't regain hit points until the start of your next turn.", chooseGear : { type : "weapon", prefixOrSuffix : "prefix", descriptionChange : ["replace", "weapon"] }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && (/of certain death/i).test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + "On hit, target can't heal until my next turn starts"; } }, 'If I include the words "of Certain Death" in a the name of a weapon, it will be treated as the magic weapon "Weapon of Certain Death". On a hit, the target can\'t regain hit points until the start of my next turn.' ] } }; // Vestiges of Divergence (contains contributions by kat9137 [Discord] aka sophiechiabatta [GitHub]) var EGtW_Vestiges_Replace = function (sDescr) { return desc(sDescr).replace(/\bf(oo|ee)t\b/ig, "ft") .replace(/you are/ig, "I am").replace(/\byou\b/ig, "I") .replace(/(by|giving|grants|of|to|for) I\b/ig, "$1 me") .replace(/your/g, "my").replace(/Your/g, "My") .replace(/ >>(.*?)<<\. /g, function(a, match) { return "\n" + match.toUpperCase() + "\n "; }); } var EGtW_DanothsVisorFullDescription = [ "These mithral-frame goggles with clear diamond lenses were used by the evoker Danoth Oro to spot invisible enemies and scout areas from afar.", ">>Dormant<<. While wearing the goggles in their dormant state, you can see normally in darkness, both magical and nonmagical, to a distance of 60 feet. Additionally, you have advantage on Intelligence (Investigation) and Wisdom (Perception) checks that rely on sight.", ">>Awakened<<. When Danoth's Visor reaches an awakened state, it gains the following properties:", "\u2022 You see invisible creatures and objects within 60 feet of you as if they were visible, and you can see into the Ethereal Plane. Ethereal creatures and objects appear ghostly and translucent.", "\u2022 As a bonus action, you can speak a command word and use the goggles to see into and through solid matter. This vision has a radius of 60 feet and lasts for 1 minute. To you, solid objects within that radius appear transparent. The vision can penetrate 1 foot of stone, 1 inch of common metal, or up to 3 feet of wood or dirt. Thicker substances block the vision, as does a thin sheet of lead. This property can't be used again until the next dawn.", "\u2022 As a bonus action, you can speak a command word to switch the goggles into spyglass mode. While in this mode, creatures and objects viewed through the goggles are magnified to twice their size. Speaking the command word again reverts the goggles to their normal operation.", ">>Exalted<<.", "When Danoth's Visor reaches an exalted state, it gains the following properties:", "\u2022 You automatically detect illusions you can see and automatically succeed on saving throws against them. In addition, you see a bright aura around any creature that isn't in its true form.", "\u2022 As an action, you can cast the antimagic field spell from the visor. This property can't be used again until the next dawn." ]; MagicItemsList["danoth's visor"] = { name : "Danoth's Visor", source : [["W", 270]], type : "wondrous item", rarity : "legendary", notLegalAL : true, attunement : true, description : "These mithral-frame goggles with clear diamond lenses were used by the evoker Danoth Oro to spot invisible enemies and scout areas from afar. See notes page for more information.", descriptionFull : EGtW_DanothsVisorFullDescription.join("\n ").replace(/>>(.*?)<>Dormant<<. Most of the book is blank, but the following spells are recorded in the first pages of the tome: alarm, antimagic field, Bigby's hand, blight, charm person, confusion, control weather, create undead, detect thoughts, enlarge/reduce, fear, foresight, gaseous form, glyph of warding, legend lore, Leomund's tiny hut, mass suggestion, mislead, misty step, Mordenkainen's faithful hound, prismatic spray, ray of enfeeblement, silent image, teleport, and thunderwave.", "You can use the grimoire as your spellbook, and you can scribe new spells into it as normal. When you prepare wizard spells using the grimoire, the number of wizard spells you can prepare increases by 1.", ">>Awakened<<. When the Grimoire Infinitus reaches an awakened state, it gains the following properties:", "\u2022 While you carry the spellbook, you have advantage on saving throws against spells and magical effects.", "\u2022 When you prepare wizard spells using the grimoire as your spellbook, the number of spells you can prepare increases by 1 again.", ">>Exalted<<. When the Grimoire Infinitus reaches an exalted state, it gains the following properties:", "\u2022 You can now use your Arcane Recovery feature twice between long rests, rather than once.", "\u2022 When you prepare wizard spells using the grimoire as your spellbook, the number of spells you can prepare increases by 1 again." ]; MagicItemsList["grimoire infinitus"] = { name : "Grimoire Infinitus", source : [["W", 271]], type : "wondrous item", rarity : "legendary", notLegalAL : true, attunement : true, description : "This spellbook with unlimited gilded pages and silver-plated covers can be used by a wizard to prepare and store spells. It holds several spells already. When I use to prepare wizards spells, I can prepare 1 additional spell.", descriptionFull : EGtW_GrimoireInfinitusFullDescription.join("\n ").replace(/>>(.*?)<>Dormant<<. While wearing the armor in its dormant state, you gain the following benefits:", "\u2022 The armor grants you a +1 bonus to AC.", "\u2022 While you are transformed by an effect that replaces any of your game statistics with those of another creature, you have a +1 bonus to melee attack and damage rolls, and you retain the benefits of this armor.", "\u2022 As an action, you can use the armor to cast polymorph on yourself, transforming into a giant owl while retaining your Intelligence, Wisdom, and Charisma scores. This property can't be used again until the next dawn.", ">>Awakened<<. When the armor reaches an awakened state, it gains the following properties:", "\u2022 The AC bonus of the armor increases to +2.", "\u2022 While you are transformed by an effect that replaces any of your game statistics with those of another creature, your bonus to melee attack and damage rolls increases by 1 (to +2).", "\u2022 When you cast the polymorph spell using this armor, you can transform into a cave bear.", ">>Exalted<<. When the armor reaches an exalted state, it gains the following properties:", "\u2022 The AC bonus of the armor increases to +3.", "\u2022 While you are transformed by an effect that replaces any of your game statistics with those of another creature, your bonus to melee attack and damage rolls increases by 1 (to +3).", "\u2022 When you cast the polymorph spell using this armor, you can transform into a guardian wolf." ]; MagicItemsList["hide of the feral guardian"] = { name : "Hide of the Feral Guardian", source : [["W", 271]], type : "armor (studded leather)", rarity : "legendary", notLegalAL : true, attunement : true, description : "This magic studded leather armor retains it benefits even when I'm transformed by an effect that replaces any of my game statistics with those of another creature and then also grants me a bonus to melee attack and damage rolls. Once per dawn, I can use it to cast Polymorph on myself.", descriptionFull : EGtW_HideFeralGuardianFullDescription.join("\n ").replace(/>>(.*?)<>Dormant<<. The Infiltrator's Key grants the following benefits in its dormant state:", "\u2022 The key can be used as thieves' tools for the purpose of opening locks. When using the key, you are considered proficient in thieves' tools and you have advantage on ability checks made to open locks.", "\u2022 While holding the key, your steps are muffled, giving you advantage on Dexterity (Stealth) checks made to move silently.", ">>Awakened<<. When the Infiltrator's Key reaches an awakened state, it gains the following properties:", "\u2022 While holding the key, you can use a bonus action to transform the key into a magic dagger or back into a key. While the key is in the form of a dagger, you gain a +1 bonus to attack and damage rolls made with it, and it returns to your hand immediately after it is used to make a ranged attack.", "\u2022 While holding the key, you can use an action to cast one of the following spells from it: alter self, invisibility, knock, or pass without trace. Once a spell has been cast using the key, it can't be used to cast that spell again until the next dawn.", ">>Exalted<<. When the Infiltrator's Key reaches an exalted state, it gains the following properties:", "\u2022 As a bonus action, you can touch the key to a floor, wall, or ceiling that is no more than 5 feet thick and cause a magical opening to appear in the surface. When you create the opening, you choose its length and width, up to 10 feet for each dimension. The opening lasts until the key passes through it to the other side, at which point it disappears (if a creature is in the opening when the doorway closes, the creature is safely shunted to the nearest unoccupied space). The key can't be used to create another opening until the next dawn.", "\u2022 While holding the key, you can use an action to cast one of the following spells from it: dimension door, gaseous form, or mislead. Once a spell has been cast using the key, it can't be used to cast that spell again until the next dawn." ]; MagicItemsList["infiltrator's key"] = { name : "Infiltrator's Key", source : [["W", 273]], type : "wondrous item", rarity : "legendary", notLegalAL : true, attunement : true, description : "This mithral skeleton key was forged using the blood of twelve master thieves executed for trying to steal magic items during the Age of Arcanum. See notes page for more information.", descriptionFull : EGtW_InfiltratorsKeyFullDescription.join("\n ").replace(/>>(.*?)<>Dormant<<. While wearing the Stormgirdle in its dormant state, you have resistance to lightning damage and thunder damage, and your Strength score becomes 21 if it isn't already 21 or higher. In addition, you can use an action to become a Storm Avatar for 1 minute, gaining the following benefits for the duration:", "\u2022 You have immunity to lightning damage and thunder damage.", "\u2022 When you hit with a weapon attack that normally deals bludgeoning damage, it deals thunder damage instead. When you hit with a weapon attack that normally deals piercing or slashing damage, it deals lightning damage instead.", "\u2022 As a bonus action, you can choose one creature you can see within 30 feet of you to be struck by lightning. The target must make a DC 15 Dexterity saving throw, taking 3d6 lightning damage on a failed save, or half as much damage on a successful one.", "Once you use the girdle's Storm Avatar property, that property can't be used again until the next dawn.", ">>Awakened<<. While wearing the Stormgirdle in its awakened state, you gain the following benefits:", "\u2022 Your Strength score becomes 23 if it isn't already 23 or higher.", "\u2022 Your Storm Avatar's lightning strike deals 4d6 lightning damage (instead of 3d6).", "\u2022 While transformed into a Storm Avatar, you gain a flying speed of 30 feet and can hover.", ">>Exalted<<. While wearing the Stormgirdle in its exalted state, you gain the following benefits:", "\u2022 Your Strength score becomes 25 if it isn't already 25 or higher.", "\u2022 Your Storm Avatar's lightning strike deals 5d6 lightning damage (instead of 3d6).", "\u2022 You can cast the control weather spell from the girdle. This property can't be used again until the next dawn." ]; MagicItemsList["stormgirdle"] = { name : "Stormgirdle", source : [["W", 273]], type : "wondrous item", rarity : "legendary", notLegalAL : true, attunement : true, description : "A wide belt of leather branded with the symbol of Kord. While attuned to and wearing this belt, I am resistant to lightning and thunder damage. My Strength score becomes 21, provided my Strength is not already 21 or higher. As an action, I can become a Storm Avatar for 1 minute. See notes page for more info.", descriptionFull : EGtW_StormgirdleFullDescription.join("\n ").replace(/>>(.*?)<>Dormant<<. While wearing the Verminshroud in its dormant state, you gain the following benefits:", "\u2022 You have advantage on Wisdom (Perception) checks that rely on smell, you are immune to disease, and you have darkvision out to a range of 60 feet. If you already have darkvision, wearing the cloak increases the range of your darkvision by 60 feet.", "\u2022 As an action, you can use the Verminshroud to cast polymorph on yourself, transforming into a giant rat or rat while retaining your Intelligence, Wisdom, and Charisma scores, as well as the properties of the cloak. This property can't be used again until the next dawn.", ">>Awakened<<. While wearing the Verminshroud in its awakened state, you gain the following benefits:", "\u2022 You have resistance to poison damage.", "\u2022 You can use an action to cast the insect plague spell (save DC 15) from the Verminshroud, requiring no material components. This property can't be used again until the next dawn.", "\u2022 When you cast the polymorph spell using the Verminshroud, you can transform into a giant wasp.", ">>Exalted<<. While wearing the Verminshroud in its exalted state, you gain the following benefits:", "\u2022 You gain a climbing speed equal to your walking speed.", "\u2022 Your teeth become razor-sharp natural weapons, which you can use to make unarmed strikes. If you hit with them, you deal piercing damage equal to 1d6 + your Strength modifier, instead of the bludgeoning damage normal for an unarmed strike. You can make this attack as a bonus action. When you bite a creature and deal damage to it, the creature must succeed on a DC 17 Constitution saving throw or be poisoned for 1 minute. The target can repeat the saving throw at the end of each of its turns, ending the condition on itself on a success.", "\u2022 When you cast the polymorph spell using the Verminshroud, you can transform into a giant scorpion." ]; MagicItemsList["verminshroud"] = { name : "Verminshroud", source : [["W", 273]], type : "wondrous item", rarity : "legendary", notLegalAL : true, attunement : true, description : "This patchy cloak was pieced together from the pelts of rats found feasting on the dead in Blightshore and is dotted with the bloated corpses of magically preserved insects along its seams. See notes page for more info.", descriptionFull : EGtW_VerminshroudFullDescription.join("\n ").replace(/>>(.*?)<>Dormant<<. While wearing the wreath in its dormant state, you have darkvision out to a range of 60 feet. If you already have darkvision, wearing the wreath increases the range of your darkvision by 60 feet.", "When you hit a beast, dragon, or monstrosity of challenge rating 5 or lower with an attack, or when you grapple it, you can use the wreath to cast dominate monster on the creature (save DC 13). On a successful save, the target is immune to the power of the wreath for 24 hours. On a failure, a shimmering, golden image of the wreath appears as a collar around the target's neck or as a crown on its head (your choice) until it is no longer charmed by the spell. If you use the wreath to charm a second creature, the first spell immediately ends. When the spell ends, the target knows it was charmed by you.", ">>Awakened<<. Once the Wreath of the Prism reaches an awakened state, it gains the following benefits:", "\u2022 You can affect creatures of challenge rating 10 or lower with the wreath.", "\u2022 The save DC of the wreath's spell increases to 15.", ">>Exalted<<. Once the Wreath of the Prism reaches an exalted state, it gains the following benefits:", "\u2022 You can affect creatures of challenge rating 15 or lower with the wreath.", "\u2022 The save DC of the wreath's spell increases to 17." ]; MagicItemsList["wreath of the prism"] = { name : "Wreath of the Prism", source : [["W", 274]], type : "wondrous item", rarity : "legendary", notLegalAL : true, attunement : true, description : "This loop of golden thorns is inset with dozens of gems that represent the five colors of Tiamat. I gain darkvision to 60 ft, or extend my darkvision by 60 ft. When I hit a beast, dragon, or monstrosity with an attack, I can cast dominate monster on that creature, depending on its CR. See notes page for info.", descriptionFull : EGtW_WreathPrismFullDescription.join("\n ").replace(/>>(.*?)<>Curse<<. Any creature that gains the benefit of a short rest from the vessel hears cloying telepathic whispers emanating it. That creature must make a DC 17 Wisdom saving throw. On a failed save, the creature is charmed by the vessel for 1 hour. The charmed creature does everything it can to open the vessel as soon as possible. On a successful save, the creature is immune to the vessel's whispers for 24 hours.\n", toUni("d8\tCalamity"), " 1\t>>Androphagia<<. Each creature within 60 feet of the vessel must succeed on a DC 17 Wisdom saving throw or go berserk for l minute. The berserk creature must begin its turn using the Attack action to make one melee or ranged attack (its choice) against the creature nearest to it. The berserk creature can repeat the save at the end of its turn, ending the effect on itself on a success.", " 2\t>>Bile Blight<<. The vessel casts the harm spell on each creature within 30 feet of it.", " 3\t>>Flood<<. The vessel casts the tsunami spell at a point of the DM's choice within 120 feet of it.", " 4\t>>Medusa's Gaze<<. The vessel casts the flesh to stone spell on each creature within 30 feet of it.", " 5\t>>Labyrinth<<. The vessel casts the maze spell on each creature within 30 feet of it.", " 6\t>>Nightmare<<. Tendrils of shadow seep from the vessel and form into 1d4 shadow demons (see the Monster Manual for their stat block), which appear in unoccupied spaces within 30 feet of it and are hostile.", " 7\t>>Swarming Insects<<. The vessel casts the insect plague spell, centered on itself and with a radius of 30 feet.", " 8\t>>Unbridled Revel<<. The vessel casts the Otto's irresistible dance spell on each creature within 30 feet of it." ]; MagicItemsList["pyxis of pandemonium"] = { name : "Pyxis of Pandemonium", source : [["MOT", 197]], type : "wondrous item", rarity : "legendary", notLegalAL : true, description : "Once per long rest, I gain the benefits of a short rest by touching this ornate vessel for 1 minute. I also gain the benefit of Bless until I finish my next rest. After benefiting from this vessel, I have to make a DC 17 Wis save or become charmed by the vessel for 1 hour. If charmed, I must do everything to open it. See Notes.", descriptionLong : "Once per long rest, I can touch this ornate wooden vessel for 1 minute to gain the benefits of a short rest. I then also gain the benefit of the Bless spell until I finish my next rest. After I gain the benefits of a short rest from this vessel, I must make a DC 17 Wisdom save or become charmed by it for 1 hour. On a success, I am immune to its charm for 24 hours. If charmed, I will do everything I can to open the vessel as soon as possible. Once opened, the vessel causes a random effect to occur, then it disappears after 1 minute and reappears, sealed, in random location on the same plane. See Notes.", descriptionFull : MOT_PyxisOfPandemoniumFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)<>d4 Bullet<<", "1 >>Banishment<<. A creature that takes damage from this bullet must succeed on a DC 15 Charisma saving throw or be banished as though affected by the banishment spell.", "2 >>Fulguration<<. On a hit, this bullet deals an extra 2d8 lightning damage to its target. All other creatures within 10 feet of the target must each succeed on a DC 15 Constitution saving throw or take 1d8 thunder damage.", "3 >>Stunning<<. On a hit, this bullet deals an extra ldlO force damage, and the target is stunned until the end of your next turn.", "4 >>Tracking<<. A creature that takes damage from this bullet is marked with a glowing rune where the bullet hit. The mark lasts 24 hours. While the creature is marked, you always know the direction to it.", ]; MagicItemsList["sling bullets of althemone"] = { name : "Sling Bullets of Althemone", source : [["MOT", 198]], type : "weapon (sling bullet)", rarity : "very rare", notLegalAL : true, description : "These bullets come in a pouch containing 1d4 + 4 bullets. Attacks made with these sling bullets add +2 to hit and damage. If a bullet misses, it teleports back to its pouch. On a hit, the bullet's effect happens and the bullet loses its magic. I roll on the table to determine each bullet's magical effect, see Notes.", descriptionFull : MOT_SlingBulletsOfAlthemoneFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)<>d20\tFish color and result<<", "1-10\t>>Green with copper bands<<. This tasty fish provides a day's worth of nourishment to one creature that eats it. The fish loses this property and rots if it's not eaten within 24 hours of being caught.", "11-14\t>>Yellow with black stripes<<. Once removed from the hook, this awful-tasting fish can be thrown up to 120 feet, targeting a creature the thrower can see. The target must succeed on a DC 15 Strength saving throw or be knocked prone. The fish then disappears.", "15-18\t>>Blue with white bands<<. When released from the hook, this fish squirms free, sprouts wings, follows you around, and sings a beautiful tune in Aquan. It disappears after 2d4 hours or when reduced to 0 hit points. The fish uses the quipper stat block, except that it can breathe air and has a flying speed of 30 feet.", "19-20\t>>Gold with silver stripes<<. This tasty fish provides a day's worth of nourishment to one creature that eats it and grants 2d10 temporary hit points to that creature. The fish loses these properties and rots if it's not eaten within 24 hours of being caught." ]; MagicItemsList["hook of fisher's delight"] = { // contains contributions by BraabHimself name : "Hook of Fisher's Delight", source : [["RotF", 314]], type : "wondrous item", rarity : "rare", description : "For this tiny silver fishhook to work, I must attach it to the end of a fishing line and immerse it in at least 10 cu ft of water. Then, at the end of each uninterrupted hour of immersion, I roll a d6. On a 6, a magical fish appears on the hook; roll a d20 to determine the fish's properties on the table on the Notes page.", descriptionFull : IDRotF_HookOfFishersDelightFullDescription.join("\n ").replace(/>>(.*?)<>|<= 3; }, description : "While attuned to this orb, it glows with an inner purplish light and gives me telepathy. The range of telepathy and intensity of light are determined by my Intelligence score.", descriptionFull : "This crystal grants you telepathy for as long as you remain attuned to it. See the introduction of the Monster Manual for rules on how this telepathy works."+ "\n The crystal also glows with a purplish inner light while you are attuned to it."+ "\n The higher your intelligence, the greater the light's intensity and the greater the range of the telepathy (see the table below)."+ toUni("\n\nIntelligence\tRange of \tLight"+ "\n Score\t\tTelepathy \tIntensity")+ "\n 3-7\t\t 15 feet\t\tDim light out to a range of 5 ft"+ "\n 8-11\t\t 30 feet\t\tBright light in a 5-ft radius and dim light for an additional 5 ft"+ "\n 12-15\t\t 60 feet\t\tBright light in a 10-ft radius and dim light for an additional 10 ft"+ "\n 16 or higher\t 120 feet\t\tBright light in a 15-ft radius and dim light for an additional 15 ft", weight : 3, choices : ["Intelligence 3-7", "Intelligence 8-11", "Intelligence 12-15", "Intelligence 16 or higher"], selfChoosing : function () { var iInt = Number(What("Int")); return iInt >= 16 ? "intelligence 16 or higher" : iInt >= 12 ? "intelligence 12-15" : iInt >= 8 ? "intelligence 8-11" : "intelligence 3-7"; }, "intelligence 3-7" : { name : "Psi Crystal (Int 3-7)", description : "While attuned to this orb, it glows with an inner purplish light, dim light out to a range of 5 ft. It also grants me telepathy out to a range of 15 ft. The range of telepathy and intensity of light are determined by my Intelligence score." }, "intelligence 8-11" : { name : "Psi Crystal (Int 8-11)", description : "While attuned to this orb, it glows with an inner purplish light, bright light in a 5-ft radius and dim light for an additional 5 ft. It also grants me telepathy out to a range of 30 ft. The range of telepathy and intensity of light are determined by my Intelligence score." }, "intelligence 12-15" : { name : "Psi Crystal (Int 12-15)", description : "While attuned to this orb, it glows with an inner purplish light, bright light in a 10-ft radius and dim light for an additional 10 ft. It also grants me telepathy out to a range of 60 ft. The range of telepathy and intensity of light are determined by my Intelligence score." }, "intelligence 16 or higher" : { name : "Psi Crystal (Int 16+)", description : "While attuned to this orb, it glows with an inner purplish light, bright light in a 15-ft radius and dim light for an additional 15 ft. It also grants me telepathy out to a range of 120 ft. The range of telepathy and intensity of light are determined by my Intelligence score." } }; MagicItemsList["scroll of tarrasque summoning"] = { // contains contributions by BraabHimself name : "Scroll of Tarrasque Summoning", source : [["RotF", 315]], type : "scroll", rarity : "legendary", description : "Once as an action, I can use this to cause the tarrasque to appear in an unoccupied space I can see within 1 mile. The tarrasque disappears when it drops to 0 hit points and is hostile toward all creatures other than itself.", descriptionFull : "Using an action to read the scroll causes the tarrasque (see the creature's entry in the Monster Manual) to appear in an unoccupied space you can see within 1 mile of you. The tarrasque disappears when it drops to 0 hit points and is hostile toward all creatures other than itself." }; MagicItemsList["scroll of the comet"] = { // contains contributions by BraabHimself name : "Scroll of the Comet", source : [["RotF", 315]], type : "scroll", rarity : "legendary", description : "Once as an action outdoors, I can use this to cause a comet to fall on a point I can see within 1 mile, creating a 50-ft deep, 500-ft radius crater. All creatures in the radius take 30d10 force damage and can make a DC 20 Dex save to halve this damage. It destroys all nonmagical objects and structures within the area.", descriptionFull : "By using an action to read the scroll, you cause a comet to fall from the sky and crash to the ground at a point you can see up to 1 mile away from you. You must be outdoors when you use the scroll, or nothing happens and the scroll is wasted."+ "\n The comet creates a 50-foot-deep, 500-foot-radius crater on impact. Any creature in that radius must make a DC 20 Dexterity saving throw, taking 30d10 force damage on a failed saving throw, or half as much damage on a successful one. All structures in the crater are destroyed, as are all nonmagical objects that aren't being worn or held." }; MagicItemsList["thermal cube"] = { // contains contributions by BraabHimself name : "Thermal Cube", source : [["RotF", 316]], type : "wondrous item", rarity : "common", description : "This 3-inch cube of solid brimstone generates enough dry heat to keep the temperature within 15 ft of it at 95 degrees Fahrenheit.", descriptionFull : "This 3-inch cube of solid brimstone generates enough dry heat to keep the temperature within 15 feet of it at 95 degrees Fahrenheit (35 degrees Celsius)." }; MagicItemsList["ythryn mythallar"] = { // contains contributions by BraabHimself name : "Ythryn Mythallar", source : [["RotF", 316]], type : "wondrous item", rarity : "legendary", attunement : true, prerequisite : "Requires attunement by a spellcaster", prereqeval : function(v) { return v.isSpellcaster; }, description : "This 50 ft diameter crystal ball sheds light in a 300 ft radius and dim light for an additional 300 ft. Up to 8 creatures can attune to it at one time, a 9th creature's attunement fails. All those attuned to it can sense when it is used and they all must agree to any properties being used. See Notes page.", descriptionFull : "A mythallar looks like an enormous crystal ball held in an ornate cradle. The globe sheds bright light in a 300-foot radius and dim light for an additional 300 feet. The globe draws magic from the Weave that can be harnessed for various purposes. For example, Netherese mages used mythallars to keep their cities aloft and empower their magic items. The bigger the mythallar, the more magic it can hold. The largest mythallars are 150 feet in diameter."+ "\n The Ythryn mythallar is a relatively small device\u2014a mere 50 feet in diameter. To attune to this mythallar, a creature must finish a short rest within 30 feet of it, meditating on the mythallar. Up to eight creatures can be attuned to it at one time; otherwise, the Ythryn mythallar follows the attunement rules in the Dungeon Master's Guide. If a ninth creature tries to attune to the mythallar, nothing happens."+ "\n All creatures attuned to the Ythryn mythallar can sense when the device is being used. A creature attuned to the device can use any of its properties, but only if all other creatures attuned to the device agree to allow it. The Ythryn mythallar's properties are as follows:"+ "\n \u2022 While you're on the same plane of existence as the Ythryn mythallar, you can use an action to cause it to fly in any direction you choose at a speed of 30 feet. All matter within 500 feet of the device moves with it. The Ythryn mythallar and all structures held aloft by it hover in place when not in motion."+ "\n \u2022 As an action, you can cause one magic item you are holding within 30 feet of the Ythryn mythallar to immediately regain all its expended charges or uses. A magic item recharged in this manner can't be recharged by the Ythryn mythallar again until after the item regains expended charges or uses on its own."+ "\n \u2022 You can use the Ythryn mythallar to cast the control weather spell without requiring any components and without the need for you to be outdoors. This casting of the spell has a 50-mile radius. For the duration of the spell's casting time, you must be within 30 feet of the Ythryn mythallar or the spell fails."+ "\n" + toUni("Touching the Mythallar") + ". Any creature that touches the globe of the mythallar must make a DC 22 Constitution saving throw, taking 180 (20d10 + 70) radiant damage on a failed save, or half as much damage on a successful one. Undead have disadvantage on this saving throw. Any object that touches the globe, other than an artifact or the mythallar's cradle, is disintegrated instantly (no save).", toNotesPage : [{ name : "Properties", note : [ "The Ythryn Mythallar is a 50 ft diameter crystal ball that sits on a cradle", "It has the following properties:", "\u2022 Sheds light in a 300 ft radius and dim light for an additional 300 ft", "\u2022 Up to 8 creatures can attune to it, a 9th attunement fails", "\u2022 To attune, a creature must short rest within 30 ft of it", "\u2022 All those attuned to it can sense when sense when it is being used", "\u2022 All those attuned must agree to allow any properties to be used", "\u2022 You can use an action to use the Ythryn Mythallar in the following ways:", " \u25E6 While on the same plane, give it a flying speed of 30 ft", " All matter within 500 ft of it moves with it", " The ball and all structures held aloft by it hover in place when not in motion", " \u25E6 Cause one magic item to regain all charges/uses", " I must be within 30 ft of the ball and holding the item", " It cannot be recharged again until all charges/uses are expended", " \u25E6 Cast the control weather spell without components or spell slots", " It has a radius of 50 miles and can be cast inside", " I must be within 30 ft of the ball for the casting time, or it will fail", "\nTOUCHING THE MYTHALLAR", "Any creature that touches the ball must make a DC 22 Constitution save", "On a failure, they take 20d10 + 70 radiant damage, or half that on a success", "Undead have disadvantage on this saving throw", "Objects touching the ball, except artifacts or the cradle, disintegrate instantly" ] }] }; MagicItemsList["the codicil of white"] = { name : "The Codicil of White", source : [["RotF", 317]], type : "wondrous item", rarity : "", notLegalAL : true, description : 'This volume bound in white fur, sealed with a silver lock, containing velum pages with silver edges is cold to the touch. While I have this tome in my possession, I gain resistance to cold damage. It contains the Frost Fingers spell which a wizard can learn and a poem incantation "Rime of the Frostmaiden".', descriptionFull : "The Codicil of White is a tall, thin volume bound in white ermine fur over seasoned boards of white pine and sealed with a clasp and lock of tarnished silver. The book is cold to the touch, and the fur is worn about the edges from use. The twenty-seven pages within are of vellum painted with silver gilt on the outer edges. The whole is sewn to a leather binding with strips of sinews, making it quite durable."+ "\n A creature with the codicil in its possession has resistance to cold damage."+ "\n The codicil was written by followers of Auril as a primer on her worship. The first page is a title page with the snowflake symbol of Auril on it. The remaining pages describe various priestly rituals and ceremonies in chilling detail. Nestled among these descriptions is a spell that wizards can learn (frost fingers, and a poem called \"Rime of the Frostmaiden\", see appendix E of Icewind Dale: Rime of the Frostmaiden). The poem is an incantation, the power of which can be used to split a glacier (see chapter 6 of Icewind Dale: Rime of the Frostmaiden). The poem might have other capabilities, at the DM's discretion", dmgres : ["Cold"], weight : 3 }; // Spells SpellsList["blade of disaster"] = { name : "Blade of Disaster", classes : ["sorcerer", "warlock", "wizard"], source : [["T", 106], ["RotF", 318]], level : 9, school : "Conj", time : "1 bns", range : "60 ft", components : "V,S", duration : "Conc, 1 min", description : "Create weapon; 2 spell atks 4d12 Force dmg; crit on 18+, triple dmg; bns a to move 30 ft \u0026 do 2 atks", descriptionShorter : "Create wea; 2 spell atks 4d12 Force dmg; crit 18+, triple dmg; bns a to move 30 ft \u0026 2 atks", descriptionFull : "You create a blade-shaped planar rift about 3 feet long in an unoccupied space you can see within range. The blade lasts for the duration. When you cast this spell, you can make up to two melee spell attacks with the blade, each one against a creature, loose object, or structure within 5 feet of the blade. On a hit, the target takes 4d12 force damage. This attack scores a critical hit if the number on the d20 is 18 or higher. On a critical hit, the blade deals an extra 8d12 force damage (for a total of 12d12 force damage)."+ "\n As a bonus action on your turn, you can move the blade up to 30 feet to an unoccupied space you can see and then make up to two melee spell attacks with it again."+ "\n The blade can harmlessly pass through any barrier, including a wall of force." }; SpellsList["create magen"] = { // contains contributions by BraabHimself name : "Create Magen", source : [["RotF", 318]], classes : ["wizard"], level : 7, school : "Trans", time : "1 h", range : "Touch", components : "V,S,M\u2020", compMaterial : "A vial of quicksilver worth 500 gp and a life-sized human doll, both of which the spell consumes, and an intricate crystal rod worth at least 1,500 gp that is not consumed", duration : "Instantaneous", description : "Transform doll into magen (500gp cons.); obeys me; my HP max reduced by its CR; see book (1.5k gp)", descriptionFull : "While casting the spell, you place a vial of quicksilver in the chest of a life-sized human doll stuffed with ash or dust. You then stitch up the doll and drip your blood on it. At the end of the casting, you tap the doll with a crystal rod, transforming it into a magen clothed in whatever the doll was wearing. The type of magen is chosen by you during the casting of the spell. See appendix C for different kinds of magen and their statistics."+ "\n When the magen appears, your hit point maximum decreases by an amount equal to the magen's challenge rating (minimum reduction of 1). Only a wish spell can undo this reduction to your hit point maximum."+ "\n Any magen you create with this spell obeys your commands without question." }; SpellsList["frost fingers"] = { // contains contributions by BraabHimself name : "Frost Fingers", source : [["RotF", 318]], classes : ["wizard"], level : 1, school : "Evoc", time : "1 a", range : "S:15" + (typePF ? "-" : "") + "ft cone", components : "V,S", duration : "Instantaneous", save : "Con", description : "All in area 2d8+1d8/SL Cold dmg; save halves; unattended nonmagical liquids freeze", descriptionFull : "Freezing cold blasts from your fingertips in a 15-foot cone. Each creature in that area must make a Constitution saving throw, taking 2d8 cold damage on a failed save, or half as much damage on a successful one."+ "\n The cold freezes nonmagical liquids in the area that aren't being worn or carried."+ AtHigherLevels + "When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d8 for each slot level above 1st." }; // pub_20201117-2_TCoE-sidekicks.js // This file adds the sidekick classes from Tasha's Cauldron of Everything (p142-147) to MPMB's Character Record Sheet /* - NOTICE - These sidekick classes are available as normal classes because the sheet doesn't support classes for the companion page These classes are excluded by default so that they aren't confused with normal classes The base 1/2 CR creature will have to be added manually It would be too complex and messy to add them all as racial options */ // Define the source, if it doesn't yet exist if (!SourceList.T) { SourceList.T = { name : "Tasha's Cauldron of Everything", abbreviation : "TCoE", abbreviationSpellsheet : "T", group : "Primary Sources", url : "https://dnd.wizards.com/products/tashas-cauldron-everything", date : "2020/11/17" }; } // Define some functions here, so we an use them for all sidekick classes without duplication global_TCoE_Sidekick_fn = { // prereqeval runs before any of the other class stuff is added, so we can even modify the ClassList object with it to set the HD prereqeval : function(v) { var sClass = v['class']; var sSubclass = v.subclass; var sClassOld = CurrentVars.sidekickDialogShown === undefined ? false : CurrentVars.sidekickDialogShown[0]; // If we already did this function for this (sub)class, stop now if (CurrentVars.sidekickDialogShown && CurrentVars.sidekickDialogShown[0] === sClass && (!CurrentVars.sidekickDialogShown[1] || CurrentVars.sidekickDialogShown[1] === sSubclass)) { // if no subclass was defined when previously calling this, but now there is one selected, add that to the CurrentVars if (!CurrentVars.sidekickDialogShown[1] && sSubclass) { CurrentVars.sidekickDialogShown[1] = sSubclass; SetStringifieds("vars"); } return true; } // Tell the player what is about to happen and give an option to opt-out var sClassName = ClassList[sClass].name.replace(/\(?sidekick\)?/i, '').trim(); var warningMsg = { nIcon : 3, // Status nType : 2, // Yes,No cTitle : "Creating a Sidekick Works Differently", cMsg : "You are about to create a character with a " + sClassName + " sidekick class. Sidekick classes use the rules as described in Tasha's Cauldron of Everything, page 142. As this character sheet is intended for regular, non-sidekick classes, some changes will be made that you need to be aware off:" }; var lineNo = 1; [ "A sidekick class is added to a creature of CR 1/2 or lower. Before continuing, lookup the stat block of the base creature you would like to use. You will have to manually enter its:"+ "\n \u2022 Ability scores"+ "\n \u2022 Proficiencies for: skills, saving throws, weapons, armor, languages, and tools"+ "\n \u2022 Attacks (tip: use Modifier fields for attacks that aren't weapons/cantrips)"+ "\n \u2022 Hit dice (you will be prompted to enter)", sClass.indexOf('warrior') !== -1 ? false : 'To gain either the Expert of Spellcaster sidekick class, a creature must have at least one language in its stat block that it can speak.', 'If you continue, the race and background automation will be turned off and the respective fields emptied. You can use these fields to enter the name and type of the base creature.'+ '\nFor example. when using the bandit stat block, you could enter:'+ '\n \u2022 Race: Elf'+ '\n \u2022 Background: Bandit'+ '\nYou can turn the automation back on with the "Auto/Manual" bookmark.', "Sidekicks don't use experience points, but gain levels as the average level of the group goes up. Thus, simply ignore the experience points box and change the level when needed.", "Sidekick classes can't multiclass and haven't been tested to work that way." ].forEach(function (line) { if (!line) return; warningMsg.cMsg += "\n\n" + lineNo + ". " + line; lineNo++; }); warningMsg.cMsg += "\n\n\n>>> Do you want to continue making a sidekick? <<<"; warningMsg.cMsg += "\n\nIf you select 'No', the " + v.classlevel + " level(s) of this class will be counted towards the total character level, but none of its features will be added."; if (app.alert(warningMsg) !== 4) return 'skip'; // Save that this dialog has been shown CurrentVars.sidekickDialogShown = [sClass, sSubclass]; // Remove race and background, and set them to manual global_TCoE_Sidekick_fn.manualRaceBackground(); // if the sidekick HD is already defined, delete those HD first before applying the new one if (CurrentVars.sidekickHD && sClassOld && classes.old[sClassOld]) { global_TCoE_Sidekick_fn.eval([classes.old[sClassOld].classlevel, 0], false, false, true); }; // Ask the player to enter the number and type of HD the creature has in its stat block CurrentVars.sidekickHD = AskUserOptions( "Set Base Creature Hit Dice", // title "Enter the number and type of hit dice that the chosen base creature has in its stat block (i.e. without bonuses from sidekick levels).\nThe sidekick will gain 1 extra HD for each level it gains after the first.", // top explanation ['Number of hit dice, for example "2"', 'Size of the hit dice, for example "d8"'], false, true, "Be aware that you *can't* change the *size* of the hit die (e.g. d8) at a later time. To do that, you will have to first remove the sidekick class completely.\n\nHowever, you *can* change the *number* of hit dice manually by editing the appropriate field." // bottom explanation ).map(function (n, idx) { var a = n.replace(/.*?(\d+).*/, "$1"); return !isNaN(a) ? Number(a) : idx === 0 ? 2 : 8; }); ClassList[sClass].die = CurrentVars.sidekickHD[1]; CurrentClasses[sClass].die = CurrentVars.sidekickHD[1]; SetStringifieds("vars"); }, // Change the race and background to manual or auto manualRaceBackground : function(bAuto) { if (bAuto && (CurrentVars.manual.background || CurrentVars.manual.race)) { // set to automatic if (CurrentVars.manual.background) { Value("Background", ""); SetToManual_Dialog.mBac = false; } if (CurrentVars.manual.race) { Value("Race", ""); SetToManual_Dialog.mRac = false; } SetToManual_Button(true); } else if (!bAuto) { // set to manual if (CurrentVars.manual.race || CurrentVars.manual.background || CurrentVars.manual.backgroundFeature) { // if currently already set to manual, set to auto before emptying the fields IsNotImport = false; ignorePrereqs = true; SetToManual_Dialog.mBac = false; SetToManual_Dialog.mBFe = false; SetToManual_Dialog.mRac = false; SetToManual_Button(true); IsNotImport = true; ignorePrereqs = false; }; // Remove the race and background if (CurrentRace.known) Value("Race", ""); if (CurrentBackground.known) Value("Background", ""); // Set race and background to manual SetToManual_Dialog.mRac = true; SetToManual_Dialog.mBac = true; SetToManual_Button(true); } }, // When removing a sidekick class, return some stuff to normal removeeval : function(lvl) { // This could be called after the dialog was shown for another sidekick, so check if there is actually something to do var sClass = CurrentVars.sidekickDialogShown ? CurrentVars.sidekickDialogShown[0] : false; var sSubclass = CurrentVars.sidekickDialogShown ? CurrentVars.sidekickDialogShown[1] : false; if (!sClass || !classes.known[sClass] || classes.known[sClass].level || (classes.old[sClass] && classes.old[sClass].subclass && classes.old[sClass].subclass !== sSubclass) ) return; // Remove the extra sidekickHD and delete it from the CurrentVars global_TCoE_Sidekick_fn.eval(lvl, false, false, true); delete CurrentVars.sidekickHD; delete CurrentVars.sidekickDialogShown; SetStringifieds("vars"); // Reset race and background to auto (if not already) global_TCoE_Sidekick_fn.manualRaceBackground(true); }, // After the HD has been set, we still need to enter the bonus HD, if any (this can't be done with the prereqeval) eval : function(lvl, chc, undef, bRemove) { var hd = CurrentVars.sidekickHD; var extraHD = hd[0] - 1; if (isNaN(extraHD) || extraHD < 1) return; var totalHD = bRemove ? lvl[0] : lvl[1] + extraHD; var expectedHD = bRemove ? lvl[0] + extraHD : lvl[1]; // Add the extra HD to the field for (var i = 1; i <= 3; i++) { var dieFld = "HD" + i + " Die"; var lvlFld = "HD" + i + " Level"; if (What(dieFld) == hd[1] && What(lvlFld) == expectedHD) { Value(lvlFld, totalHD); CurrentUpdates.types.push("hp"); break; } } }, calcChanges_hp : function (totalHD, HDobj) { // remove 1st level max (and change its average and fixed value to reflect this change) var hd = CurrentVars.sidekickHD[1]; var matchRegex = RegExp('(\\d+)(d' + hd + ' \\()(\\d+\\.?\\d+?)\\)'); var match = HDobj.dieStr[1] ? HDobj.dieStr[1].match(matchRegex) : false; if (!match) return; var hdAverage = hd / 2 + 0.5; var hdFixed = Math.ceil(hdAverage); HDobj.dieStr.shift(); HDobj.average += hdAverage - hd; HDobj.fixed += hdFixed - hd; HDobj.dieStr[0] = HDobj.dieStr[0].replace(matchRegex, (Number(match[1]) + 1) + match[2] + (Number(match[3]) + hdAverage) + ") [sidekicks don't get max for 1st level]"); }, spellcasting_additional : levels.map(function (n, idx) { var cantr = [2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4][idx]; var splls = [1, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9,10,10,11,11][idx]; return cantr + " cantrips \u0026 " + splls + " spells known"; }) } // Add the three classes ClassList["sidekick-expert-tcoe"] = { defaultExcluded : true, prereqeval : global_TCoE_Sidekick_fn.prereqeval, regExpSearch : /^(?=.*expert)(?=.*sidekick).*$/i, name : "Expert (sidekick)", source : [["T", 143]], primaryAbility : "Dexterity, Intelligence, or Charisma", prereqs : "Can't multiclass", improvements : levels.map(function (n) { return n < 4 ? 0 : n < 8 ? 1 : n < 10 ? 2 : n < 12 ? 3 : n < 16 ? 4 : n < 19 ? 5 : 6; }), die : CurrentVars.sidekickHD ? CurrentVars.sidekickHD[1] : 8, skillstxt : { primary : "Choose any five skills" }, armorProfs : { primary : [true, false, false, false] }, equipment : "", subclasses : ["", []], subclassGainedLevel : 100, attacks : [1], features : { "a sidekick" : { name : "A Sidekick", source : [["T", 142]], minlevel : 1, description : desc([ "A sidekick can be any creature with challenge rating of 1/2 or lower", "The Spellcaster and Expert classes can only apply to creatures that can speak a language", "Fill out the stats block into the character sheet manually, the class adds to it", "The sidekick's level is the same as the average level of the group", "The hit dice of a sidekick are the same as those of the base creature, gaining +1 per level", "A sidekick does not get the benefits of a background, nor can it take feats or multiclass" ]), calcChanges : { hp : global_TCoE_Sidekick_fn.calcChanges_hp }, eval : global_TCoE_Sidekick_fn.eval, removeeval : global_TCoE_Sidekick_fn.removeeval }, "bonus proficiencies: saving throws" : { name : "Bonus Proficiencies: Saving Throws", source : [["T", 143]], minlevel : 1, description : desc('Choose Dex, Int, or Cha save proficiency, using the "Choose Feature" button above'), choices : ["Dexterity", "Intelligence", "Charisma"], "dexterity" : { name : "Bonus Proficiencies: Dexterity Saving Throws", description : desc("I am proficient in Dexterity saving throws"), saves : ["Dex"] }, "intelligence" : { name : "Bonus Proficiencies: Intelligence Saving Throws", description : desc("I am proficient in Intelligence saving throws"), saves : ["Int"] }, "charisma" : { name : "Bonus Proficiencies: Charisma Saving Throws", description : desc("I am proficient in Charisma saving throws"), saves : ["Cha"] } }, "bonus proficiencies" : { name : "Bonus Proficiencies", source : [["T", 143]], minlevel : 1, description : desc([ "I gain proficiency with light armor and in five skills of my choice", 'If the base creature is a Humanoid or has a simple or martial weapon in its stat block,', 'select it using the "Choose Feature" button above, so I gain more bonus proficiencies' ]), choices : ["Base creature is a Humanoid or has a simple or martial weapon in its stat block", "Other base creatures"], "base creature is a humanoid or has a simple or martial weapon in its stat block" : { name : "Bonus Proficiencies: Humanoid", description : desc([ "I gain proficiency with light armor and in five skills of my choice", "Additionally, I gain proficiency with two tools of my choice and with all simple weapons" ]), weaponProfs : [true, false], toolProfs : [["Tool of my choice", 2]] }, "other base creatures" : { name : "Bonus Proficiencies: Non-humanoid", description : desc("I gain proficiency with light armor and in five skills of my choice") } }, "helpful" : { name : "Helpful", source : [["T", 143]], minlevel : 1, description : desc("I can use a bonus action to take the Help action"), action : [["bonus action", ""]] }, "cunning action" : { name : "Cunning Action", source : [["T", 143]], minlevel : 2, description : desc("I can use a bonus action to take the Dash, Disengage, or Hide action"), action : [["bonus action", ""]] }, "expertise" : function() { var a = { name : "Expertise", source : [["T", 143]], minlevel : 3, description : desc([ "I gain expertise with two skills I am proficient with", "At level 15th, I gain expertise with two more skills I am proficient with" ]), skillstxt : "Expertise with any two skill proficiencies, two more at level 15th", extraname : "Expertise", extrachoices : ["Acrobatics", "Animal Handling", "Arcana", "Athletics", "Deception", "History", "Insight", "Intimidation", "Investigation", "Medicine", "Nature", "Perception", "Performance", "Persuasion", "Religion", "Sleight of Hand", "Stealth", "Survival"], extraTimes : levels.map(function (n) { return n < 3 ? 0 : n < 15 ? 2 : 4; }) } for (var i = 0; i < a.extrachoices.length; i++) { var attr = a.extrachoices[i].toLowerCase(); a[attr] = { name : a.extrachoices[i] + " Expertise", description : "", source : a.source, skills : [[a.extrachoices[i], "only"]], prereqeval : function(v) { return v.skillProfsLC.indexOf(v.choice) === -1 ? false : v.skillExpertiseLC.indexOf(v.choice) === -1 ? true : "markButDisable"; } } } return a; }(), "ability score improvement" : { name : "Ability Score Improvement", source : [["T", 144]], minlevel : 4, description : desc([ "Increase one ability score by 2, or two ability scores by 1, up to a maximum of 20", "I gain this at 4th level and again at 8th, 10th, 12th, 16th, and 19th level" ]), additional : levels.map(function (n) { return n < 4 ? "" : (n < 8 ? 1 : n < 10 ? 2 : n < 12 ? 3 : n < 16 ? 4 : n < 19 ? 5 : 6) + "\xD7 2 points increase"; }) }, "coordinated strike" : { name : "Coordinated Strike", source : [["T", 144]], minlevel : 6, description : desc([ "I can use Helpful to aid an ally to attack a creature up to 30 ft away from me", "If I do so, I add +2d6 damage on my next attack to that creature in the current turn" ]) }, "evasion" : { name : "Evasion", source : [["T", 144]], minlevel : 7, description : desc([ "If an effect allows me to make a Dex save for half damage, I take no damage on a success", "Also, I only take half damage on a failed save; I can't do this while incapacitated" ]), savetxt : { text : ["Dex save vs. area effects: fail \u2015 half dmg, success \u2015 no dmg"] } }, "inspiring help" : { name : "Inspiring Help", source : [["T", 144]], minlevel : 11, description : desc([ "When I use the Help action, the creature that receives the help adds +1d6 to its d20 roll", "If it was an attack roll that hits without the +1d6, it can add it to the damage instead", "At 20th level, this bonus increases to 2d6" ]), additional : levels.map(function (n) { return n < 11 ? "" : "+" + (n < 20 ? 1 : 2) + "d6 bonus"; }) }, "reliable talent" : { name : "Reliable Talent", source : [["T", 144]], minlevel : 14, description : desc("If I make an ability check where I add my proficiency bonus, rolls of 9 or lower are 10") }, "sharp mind" : { name : "Sharp Mind", source : [["T", 144]], minlevel : 18, description : desc('Choose Int, Wis, or Cha save proficiency, using the "Choose Feature" button above'), choices : ["Intelligence", "Wisdom", "Charisma"], "intelligence" : { name : "Sharp Mind: Intelligence", description : desc("I gain proficiency in Intelligence saving throws"), saves : ["Int"], prereqeval : function(v) { return tDoc.getField("Int ST Prof").isBoxChecked(0) ? false : true; } }, "wisdom" : { name : "Sharp Mind: Wisdom", description : desc("I gain proficiency in Wisdom saving throws"), saves : ["Wis"], prereqeval : function(v) { return tDoc.getField("Wis ST Prof").isBoxChecked(0) ? false : true; } }, "charisma" : { name : "Sharp Mind: Charisma", description : desc("I gain proficiency in Charisma saving throws"), saves : ["Cha"], prereqeval : function(v) { return tDoc.getField("Cha ST Prof").isBoxChecked(0) ? false : true; } } } } } ClassList["sidekick-spellcaster-tcoe"] = { defaultExcluded : true, prereqeval : global_TCoE_Sidekick_fn.prereqeval, regExpSearch : /^(?=.*(spellcaster|mage|healer|prodigy))(?=.*sidekick).*$/i, name : "Spellcaster (sidekick)", source : [["T", 144]], primaryAbility : "Intelligence, Wisdom, or Charisma", prereqs : "Can't multiclass", improvements : levels.map(function (n) { return n < 4 ? 0 : n < 8 ? 1 : n < 12 ? 2 : n < 16 ? 3 : n < 18 ? 4 : 5; }), die : CurrentVars.sidekickHD ? CurrentVars.sidekickHD[1] : 8, skillstxt : { primary : "Choose two from Arcana, History, Insight, Investigation, Medicine, Performance, Persuasion, and Religion" }, armorProfs : { primary : [true, false, false, false] }, equipment : "", subclasses : ["Spellcaster's Role", []], subclassGainedLevel : 100, attacks : [1], abilitySave : 4, spellcastingFactor : 2, spellcastingTable : ClassList.artificer && ClassList.artificer.spellcastingTable ? ClassList.artificer.spellcastingTable : [[0, 0, 0, 0, 0, 0, 0, 0, 0]].concat(levels.map(function (n) { return defaultSpellTable[Math.ceil(n / 2)]; })), spellcastingList : { "class" : "wizard", level : [0, 5] }, spellcastingKnown : { cantrips : [2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4], spells : [1, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9,10,10,11,11] }, features : { "a sidekick" : { name : "A Sidekick", source : [["T", 142]], minlevel : 1, description : desc([ "A sidekick can be any creature with challenge rating of 1/2 or lower", "The Spellcaster and Expert classes can only apply to creatures that can speak a language", "Fill out the stats block into the character sheet manually, the class adds to it", "The sidekick's level is the same as the average level of the group", "The hit dice of a sidekick are the same as those of the base creature, gaining +1 per level", "A sidekick does not get the benefits of a background, nor can it take feats or multiclass" ]), calcChanges : { hp : global_TCoE_Sidekick_fn.calcChanges_hp }, eval : global_TCoE_Sidekick_fn.eval, removeeval : global_TCoE_Sidekick_fn.removeeval }, "bonus proficiencies: saving throws" : { name : "Bonus Proficiencies: Saving Throws", source : [["T", 144]], minlevel : 1, description : desc('Choose Int, Wis, or Cha save proficiency, using the "Choose Feature" button above'), choices : ["Intelligence", "Wisdom", "Charisma"], "intelligence" : { name : "Bonus Proficiencies: Intelligence Saving Throws", description : desc("I am proficient in Intelligence saving throws"), saves : ["Int"] }, "wisdom" : { name : "Bonus Proficiencies: Wisdom Saving Throws", description : desc("I am proficient in Wisdom saving throws"), saves : ["Wis"] }, "charisma" : { name : "Bonus Proficiencies: Charisma Saving Throws", description : desc("I am proficient in Charisma saving throws"), saves : ["Cha"] } }, "bonus proficiencies" : { name : "Bonus Proficiencies", source : [["T", 144]], minlevel : 1, description : desc([ "I gain proficiency with light armor and two skills of my choice from the following list:", "Arcana, History, Insight, Investigation, Medicine, Performance, Persuasion, and Religion", 'If the base creature is a Humanoid or has a simple or martial weapon in its stat block,', 'select it using the "Choose Feature" button above, so I gain more bonus proficiencies' ]), choices : ["Base creature is a Humanoid or has a simple or martial weapon in its stat block", "Other base creatures"], "base creature is a humanoid or has a simple or martial weapon in its stat block" : { name : "Bonus Proficiencies: Humanoid", description : desc([ "I gain proficiency with light armor and two skills of my choice from the following list:", "Arcana, History, Insight, Investigation, Medicine, Performance, Persuasion, and Religion", "Additionally, I gain proficiency with all simple weapons" ]), weaponProfs : [true, false] }, "other base creatures" : { name : "Bonus Proficiencies: Non-humanoid", description : desc([ "I gain proficiency with light armor and two skills of my choice from the following list:", "Arcana, History, Insight, Investigation, Medicine, Performance, Persuasion, and Religion" ]) } }, "subclassfeature1" : { name : "Spellcaster's Role", source : [["T", 144]], minlevel : 1, description : desc('Choose the role of the sidekick, mage, healer, or prodigy, and put it in the "Class" field') }, "ability score improvement" : { name : "Ability Score Improvement", source : [["T", 146]], minlevel : 4, description : desc([ "Increase one ability score by 2, or two ability scores by 1, up to a maximum of 20", "I gain this at 4th level and again at 8th, 12th, 16th, and 18th level" ]), additional : levels.map(function (n) { return n < 4 ? "" : (n < 8 ? 1 : n < 12 ? 2 : n < 16 ? 3 : n < 18 ? 4 : 5) + "\xD7 2 points increase"; }) }, "potent cantrips" : { name : "Potent Cantrips", source : [["T", 146]], minlevel : 6, description : desc("I add my spellcasting ability modifier to the damage I deal with any cantrip"), calcChanges : { atkCalc : [ function (fields, v, output) { var subclass = classes.known["sidekick-spellcaster-tcoe"].subclass; if (!subclass || !ClassSubList[subclass].abilitySave) return; var spAbiMod = Number(What(AbilityScores.abbreviations[ClassSubList[subclass].abilitySave - 1] + ' Mod')); if (spAbiMod > 0 && v.thisWeapon[3] && SpellsList[v.thisWeapon[3]].level === 0) { output.extraDmg += spAbiMod; }; }, "My cantrips get my spellcasting ability modifier added to their damage." ], spellAdd : [ function (spellKey, spellObj, spName) { var subclass = classes.known["sidekick-spellcaster-tcoe"].subclass; if (!subclass || !ClassSubList[subclass].abilitySave || spellObj.psionic || spellObj.level !== 0) return; var spAbi = AbilityScores.abbreviations[ClassSubList[subclass].abilitySave - 1]; var spAbiMod = Number(What(spAbi + ' Mod')); if (spAbiMod < 1) return; return genericSpellDmgEdit(spellKey, spellObj, "\\w+\\.?", spAbi); }, "My cantrips get my spellcasting ability modifier added to their damage." ] } }, "empowered spells" : { name : "Empowered Spells", source : [["T", 146]], minlevel : 14, description : desc([ 'Select one of the eight schools of magic using the "Choose Feature" button above', "Whenever I cast a spell from the selected school by expending a spell slot, I empower it", "I add my spellcasting ability modifier to the damage or healing I roll for that spell" ]), calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { var subclass = classes.known["sidekick-spellcaster-tcoe"].subclass; var spSchool = GetFeatureChoice("classes", "sidekick-spellcaster-tcoe", "empowered spells"); if (!subclass || !ClassSubList[subclass].abilitySave || !spSchool || spellObj.psionic || !spellObj.level) return; for (var aSchl in spellSchoolList) { if (spellSchoolList[aSchl] == spSchool) { spSchool = aSchl; break; } } if (spellObj.school !== spSchool) return; var spAbi = AbilityScores.abbreviations[ClassSubList[subclass].abilitySave - 1]; var spAbiMod = Number(What(spAbi + ' Mod')); if (spAbiMod < 1) return; if (genericSpellDmgEdit(spellKey, spellObj, "\\w+\\.?", spAbiMod, true, true) || genericSpellDmgEdit(spellKey, spellObj, "heal", spAbiMod, true, true)) { return true; } }, "Spells from my selected school cast by expending a spell slot get my spellcasting ability modifier added to their damage or healing rolls." ] }, choices : ["Abjuration", "Conjuration", "Divination", "Enchantment", "Evocation", "Illusion", "Necromancy", "Transmutation"], "abjuration" : { name : "Empowered Abjurations", description : desc([ "Whenever I cast an abjuration spell by expending a spell slot, I can empower its effect", "I then add my spellcasting ability modifier to the damage or healing I roll for that spell" ]) }, "conjuration" : { name : "Empowered Conjurations", description : desc([ "Whenever I cast a conjuration spell by expending a spell slot, I can empower its effect", "I then add my spellcasting ability modifier to the damage or healing I roll for that spell" ]) }, "divination" : { name : "Empowered Divinations", description : desc([ "Whenever I cast a divination spell by expending a spell slot, I can empower its effect", "I then add my spellcasting ability modifier to the damage or healing I roll for that spell" ]) }, "enchantment" : { name : "Empowered Enchantments", description : desc([ "Whenever I cast a enchantment spell by expending a spell slot, I can empower its effect", "I then add my spellcasting ability modifier to the damage or healing I roll for that spell" ]) }, "evocation" : { name : "Empowered Evocations", description : desc([ "Whenever I cast a evocation spell by expending a spell slot, I can empower its effect", "I then add my spellcasting ability modifier to the damage or healing I roll for that spell" ]) }, "illusion" : { name : "Empowered Illusions", description : desc([ "Whenever I cast an illusion spell by expending a spell slot, I can empower its effect", "I then add my spellcasting ability modifier to the damage or healing I roll for that spell" ]) }, "necromancy" : { name : "Empowered Necromancy", description : desc([ "Whenever I cast a necromancy spell by expending a spell slot, I can empower its effect", "I then add my spellcasting ability modifier to the damage or healing I roll for that spell" ]) }, "transmutation" : { name : "Empowered Transmutations", description : desc([ "Whenever I cast a transmutation spell by expending a spell slot, I can empower its effect", "I then add my spellcasting ability modifier to the damage or healing I roll for that spell" ]) } }, "focused casting" : { name : "Focused Casting", source : [["T", 146]], minlevel : 20, description : desc("Taking damage can't break my concentration on a spell") } } } ClassList["sidekick-warrior-tcoe"] = { defaultExcluded : true, prereqeval : global_TCoE_Sidekick_fn.prereqeval, regExpSearch : /^(?=.*warrior)(?=.*sidekick).*$/i, name : "Warrior (sidekick)", source : [["T", 146]], primaryAbility : "Strength, Dexterity, or Constitution", prereqs : "Can't multiclass", improvements : levels.map(function (n) { return n < 4 ? 0 : n < 8 ? 1 : n < 12 ? 2 : n < 14 ? 3 : n < 16 ? 4 : n < 19 ? 5 : 6; }), die : CurrentVars.sidekickHD ? CurrentVars.sidekickHD[1] : 8, skillstxt : { primary : "Choose two from Acrobatics, Animal Handling, Athletics, Intimidation, Nature, Perception, and Survival" }, armorProfs : { primary : [true, true, true, false] }, equipment : "", subclasses : ["", []], subclassGainedLevel : 100, attacks : [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3], features : { "a sidekick" : { name : "A Sidekick", source : [["T", 142]], minlevel : 1, description : desc([ "A sidekick can be any creature with challenge rating of 1/2 or lower", "Fill out the stats block into the character sheet manually, the class adds to it", "The sidekick's level is the same as the average level of the group", "The hit dice of a sidekick are the same as those of the base creature, gaining +1 per level", "A sidekick does not get the benefits of a background, nor can it take feats or multiclass" ]), calcChanges : { hp : global_TCoE_Sidekick_fn.calcChanges_hp }, eval : global_TCoE_Sidekick_fn.eval, removeeval : global_TCoE_Sidekick_fn.removeeval }, "bonus proficiencies: saving throws" : { name : "Bonus Proficiencies: Saving Throws", source : [["T", 146]], minlevel : 1, description : desc('Choose Str, Dex, or Con save proficiency, using the "Choose Feature" button above'), choices : ["Strength", "Dexterity", "Constitution"], "strength" : { name : "Bonus Proficiencies: Strength Saving Throws", description : desc("I am proficient in Strength saving throws"), saves : ["Str"] }, "dexterity" : { name : "Bonus Proficiencies: Dexterity Saving Throws", description : desc("I am proficient in Dexterity saving throws"), saves : ["Dex"] }, "constitution" : { name : "Bonus Proficiencies: Constitution Saving Throws", description : desc("I am proficient in Constitution saving throws"), saves : ["Con"] } }, "bonus proficiencies" : { name : "Bonus Proficiencies", source : [["T", 146]], minlevel : 1, description : desc([ "I gain proficiency with all armor and two skills of my choice from the following list:", "Acrobatics, Animal Handling, Athletics, Intimidation, Nature, Perception, and Survival", 'If the base creature is a Humanoid or has a simple or martial weapon in its stat block,', 'select it using the "Choose Feature" button above, so I gain more bonus proficiencies' ]), choices : ["Base creature is a Humanoid or has a simple or martial weapon in its stat block", "Other base creatures"], "base creature is a humanoid or has a simple or martial weapon in its stat block" : { name : "Bonus Proficiencies: Humanoid", description : desc([ "I gain proficiency with all armor and two skills of my choice from the following list:", "Acrobatics, Animal Handling, Athletics, Intimidation, Nature, Perception, and Survival", "Additionally, I gain proficiency with shields and all simple and martial weapons" ]), armorProfs : [false, false, false, true], weaponProfs : [true, true] }, "other base creatures" : { name : "Bonus Proficiencies: Non-humanoid", description : desc([ "I gain proficiency with all armor and two skills of my choice from the following list:", "Acrobatics, Animal Handling, Athletics, Intimidation, Nature, Perception, and Survival" ]) } }, "martial role" : { name : "Martial Role", source : [["T", 146]], minlevel : 1, description : desc('Choose a Martial Role for the warrior using the "Choose Feature" button above'), choices : ["Attacker", "Defender"], "attacker" : { name : "Martial Role: Attacker", description : desc("I gain a +2 bonus to all my attack rolls"), calcChanges : { atkCalc : [ function (fields, v, output) { if (!v.isDC) output.extraHit += 2; }, "I add a +2 bonus on the To Hit of all my attack rolls." ] } }, "defender" : { name : "Martial Role: Defender", description : desc([ "As a reaction, I can give disadv. on an attack made vs. someone within 5 ft of me", "I need to be able to see the attacker to do this" ]), action : [["reaction", ""]] } }, "second wind" : { name : "Second Wind", source : [["T", 146]], minlevel : 2, description : desc([ "As a bonus action, I can regain hit points equal to 1d10 + warrior level", "I can use this once per short rest (twice at 20th-level)" ]), additional : levels.map(function (n) { return "1d10+" + n; }), usages : levels.map(function (n) { return n < 2 ? "" : n < 20 ? 1 : 2 }), recovery : "short rest", action : [["bonus action", ""]] }, "improved critical" : { name : "Improved Critical", source : [["T", 146]], minlevel : 3, description : desc("I score a critical hit with my weapon attacks on a roll of 19 and 20"), calcChanges : { atkAdd : [ function (fields, v) { if (!v.isDC && !v.isSpell && !v.CritChance && classes.known["sidekick-warrior"]) { fields.Description += (fields.Description ? '; ' : '') + 'Crit on 19-20'; v.CritChance = 19; }; }, "My weapon attacks score a critical on a to hit roll of both 19 and 20.", 19 ] } }, "ability score improvement" : { name : "Ability Score Improvement", source : [["T", 146]], minlevel : 4, description : desc([ "Increase one ability score by 2, or two ability scores by 1, up to a maximum of 20", "I gain this at 4th level and again at 8th, 12th, 14th, 16th, and 19th level" ]), additional : levels.map(function (n) { return n < 4 ? "" : (n < 8 ? 1 : n < 12 ? 2 : n < 14 ? 3 : n < 16 ? 4 : n < 19 ? 5 : 6) + "\xD7 2 points increase"; }) }, "extra attack" : { name : "Extra Attack", source : [["T", 147]], minlevel : 6, description : desc([ "I can attack twice, instead of once, whenever I take the Attack action on my turn", "This increases to three at 15th level", "If I have the Multiattack action, I can use either that or extra attack on a turn, not both" ]), additional : levels.map(function (n) { return n < 6 ? "" : (n < 15 ? 1 : 3) + " attacks as an action on my turn"; }) }, "battle readiness" : { name : "Battle Readiness", source : [["T", 147]], minlevel : 7, description : desc("I have advantage on my Initiative rolls"), advantages : [["Initiative", true]] }, "improved defense" : { name : "Improved Defense", source : [["T", 147]], minlevel : 10, description : desc("I gain a +1 bonus to AC"), extraAC : { mod : 1 } }, "indomitable" : { name : "Indomitable", source : [["T", 147]], minlevel : 11, description : desc([ "I can reroll a failed saving throw, but must keep the new result", "I can use this once per long rest (twice at 20th-level)" ]), usages : levels.map(function (n) { return n < 11 ? "" : n < 20 ? 1 : 2 }), recovery : "long rest" } } } // Add three subclasses to the spellcaster sidekick AddSubClass("sidekick-spellcaster-tcoe", "mage", { regExpSearch : /^(?=.*mage)(?=.*sidekick).*$/i, subname : "Mage", fullname : "Spellcaster: Mage (sidekick)", source : [["T", 144]], abilitySave : 4, spellcastingList : { "class" : "wizard", level : [0, 5] }, features : { "subclassfeature1" : { name : "Spellcasting", source : [["T", 144]], minlevel : 1, description : desc([ "I can cast wizard cantrips/spells I know, using Intelligence as my spellcasting ability", "I can use an arcane focus as a spellcasting focus for my spells", "Whenever I gain a level, I can replace one cantrip/spell I know with another I'm allowed" ]), additional : global_TCoE_Sidekick_fn.spellcasting_additional } } }); AddSubClass("sidekick-spellcaster-tcoe", "healer", { regExpSearch : /^(?=.*healer)(?=.*sidekick).*$/i, subname : "Healer", fullname : "Spellcaster: Healer (sidekick)", source : [["T", 144]], abilitySave : 5, spellcastingList : { "class" : ["cleric", "druid"], level : [0, 5] }, features : { "subclassfeature1" : { name : "Spellcasting", source : [["T", 144]], minlevel : 1, description : desc([ "I can cast cleric and druid cantrips/spells I know, using Wisdom as my spellcasting ability", "I can use a holy symbol or druidic focus as a spellcasting focus for my spells", "Whenever I gain a level, I can replace one cantrip/spell I know with another I'm allowed" ]), additional : global_TCoE_Sidekick_fn.spellcasting_additional } } }); AddSubClass("sidekick-spellcaster-tcoe", "prodigy", { regExpSearch : /^(?=.*prodigy)(?=.*sidekick).*$/i, subname : "Prodigy", fullname : "Spellcaster: Prodigy (sidekick)", source : [["T", 144]], abilitySave : 6, spellcastingList : { "class" : ["bard", "warlock"], level : [0, 5] }, features : { "subclassfeature1" : { name : "Spellcasting", source : [["T", 144]], minlevel : 1, description : desc([ "I can cast bard and warlock cantrips/spells I know, using Cha as my spellcasting ability", "I can use an arcane focus or musical instrument as a spellcasting focus for my spells", "Whenever I gain a level, I can replace one cantrip/spell I know with another I'm allowed" ]), additional : global_TCoE_Sidekick_fn.spellcasting_additional } } }); // pub_20201117_TCoE.js // This file adds the content from Tasha's Cauldron of Everything to MPMB's Character Record Sheet /* ACKNOWLEDGEMENTS This file contains contributions from many different people over on the /r/mpmb subreddit and the MPMB Discord server. Many contributions have been reworked by Safety-Orange to fix bugs, make texts more uniform, adhere to MPMB's standards, and/or adhere to the latest syntax version. Combined with the fact that many contributions haven't been individually tracked (on GitHub), it is no longer possible to assign specific additions to a single person. Instead, here is a list of people (account names on GitHub) who made contributions, helped collect materials, or were otherwise essential to this script coming to fruition, in no particular order: - Nod_Hero#2046 (Discord) - Smashman - Metacomet10 - BraabHimself - AelarTheElfRogue - uhohspaghetti0 - Undrhil - easyboy - SoggieWafflz - phelot - Cosaur - remcovandalen - Seneschal55 - Gam90 - CountVladmir - alastairmarchant - edimshuffling - githubtkompare - Holynight6 - lizrdgizrd Think you're missing from this list? Please let me know! */ // Define the source SourceList.T = { name : "Tasha's Cauldron of Everything", abbreviation : "TCoE", abbreviationSpellsheet : "T", group : "Primary Sources", url : "https://dnd.wizards.com/products/tashas-cauldron-everything", date : "2020/11/17" }; // Add Custom Lineage RaceList["custom lineage"] = { regExpSearch : /^(?=.*custom)(?=.*lineage).*$/i, name : "Custom lineage", source : [["T", 8]], plural : "Custom lineages", size : [3, 4], speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", 1], scorestxt : "+2 to one ability score of my choice", eval : function() { AddString('Feat Note 1', 'Custom lineage bonus feat', '; '); }, removeeval : function() { RemoveString('Feat Note 1', 'Custom lineage bonus feat'); }, trait : "Custom Lineage (+2 to one ability score of my choice)" + desc([ "Size: I am Small or Medium (my choice).", "Feat: I gain one feat of my choice for which I qualify.", "Variable Trait: I gain either darkvision with a range of 60 ft or proficiency with a skill of my choice. Use the Racial Options button to select either one." ]) }; AddRacialVariant("custom lineage", "darkvision", { regExpSearch : /darkvision/i, source : [["T", 8]], vision : [["Darkvision", 60]], trait : "Custom Lineage (+2 to one ability score of my choice)" + desc([ "Size: I am Small or Medium (my choice).", "Feat: I gain one feat of my choice for which I qualify.", "Variable Trait: I have darkvision with a range of 60 ft." ]) }); AddRacialVariant("custom lineage", "skill proficiency", { regExpSearch : /skill proficiency/i, source : [["T", 8]], skillstxt : "Choose any one skill", trait : "Custom Lineage (+2 to one ability score of my choice)" + desc([ "Size: I am Small or Medium (my choice).", "Feat: I gain one feat of my choice for which I qualify.", "Variable Trait: I have proficiency with a skill of my choice." ]) }); // >>>>>>>>>>>>>>>>>>>>>>> // // >>> Artificer Class >>> // // >>>>>>>>>>>>>>>>>>>>>>> // // New Artificer Infusions AddFeatureChoice(ClassList.artificer.features["infuse item"], true, "Arcane Propulsion Armor (prereq: level 14 artificer)", { name : "Arcane Propulsion Armor", source : [["T", 20]], description : desc([ "The armor replaces any missing limbs of the wearer and can't be removed against its will", "It increases the wearer's walking speed by 5 ft; Its gauntlet can be used as melee weapons" ]), additional : "suit of armor; requires attunement", prereqeval : function(v) { return classes.known.artificer.level >= 14; }, magicitemsAdd : ["Arcane Propulsion Armor"] }); MagicItemsList["arcane propulsion armor"] = { name : "Arcane Propulsion Armor", nameTest : /arcane.propulsion.*armou?r/i, source : [["T", 20]], type : "armor (light, medium, or heavy)", descriptionFull : "The wearer of this armor gains these benefits:\n \u2022 The wearer's walking speed increases by 5 feet.\n \u2022 The armor includes gauntlets, each of which is a magic melee weapon that can be wielded only when the hand is holding nothing. The wearer is proficient with the gauntlets, and each one deals 1d8 force damage on a hit and has the thrown property, with a normal range of 20 feet and a long range of 60 feet. When thrown, the gauntlet detaches and flies at the attack's target, then immediately returns to the wearer and reattaches.\n \u2022 The armor can't be removed against the wearer's will.\n \u2022 If the wearer is missing any limbs, the armor replaces those limbs\u2014hands, arms, feet, legs, or similar appendages. The replacements function identically to the body parts they replace.", description : "This armor replaces any missing limbs, increases my walking speed by 5 ft, and can't be removed against my will. I can use either empty-handed gauntlet as a proficient melee weapon with the thrown property. After a throwing attack with a gauntlet, it returns and reattaches immediately.", attunement : true, chooseGear : { type : "armor", prefixOrSuffix : ["between", "Arcane Propulsion", "Armor"], descriptionChange : ["prefix", "armor"], itemName1stPage : ["suffix", "Arcane Propulsion"] }, speed : { walk : { spd : "+5", enc : "+5" } }, weaponOptions : [{ regExpSearch : /^(?=.*arcane)(?=.*propulsion)(?=.*gauntlet).*$/i, name : "Arcane Propulsion Gauntlets", source : [["T", 20]], ability : 1, type : "AlwaysProf", damage : [1, 8, "force"], range : "Melee, 20/60 ft", description : "Thrown; Returns immediately after thrown", abilitytodamage : true, selectNow : true }] } AddFeatureChoice(ClassList.artificer.features["infuse item"], true, "Armor of Magical Strength", { name : "Armor of Magical Strength", source : [["T", 20]], description : desc([ "The armor has 6 charges, regaining 1d6 expended charges daily at dawn", "As a reaction when being knocked prone, the wearer can use 1 charge to not be prone", "When making a Str check/save, the wearer can use 1 charge to add its Int mod to the roll" ]), additional : "suit of armor; requires attunement", magicitemsAdd : ["Armor of Magical Strength"] }); MagicItemsList["armor of magical strength"] = { name : "Armor of Magical Strength", nameTest : "of Magical Strength", source : [["T", 20]], type : "armor (light, medium, or heavy)", descriptionFull : "This armor has 6 charges. The wearer can expend the armor's charges in the following ways:\n \u2022 When the wearer makes a Strength check or a Strength saving throw, it can expend 1 charge to add a bonus to the roll equal to its Intelligence modifier.\n \u2022 If the creature would be knocked prone, it can use its reaction to expend 1 charge to avoid being knocked prone.\nThe armor regains 1d6 expended charges daily at dawn.", description : "This armor has 6 charges and regains 1d6 expended charges daily at dawn. As a reaction when I would be knocked prone, I can expend 1 charge to avoid being knocked prone. When I make a Strength check or Strength saving throw, I can expend 1 charge to add my Intelligence modifier to the roll.", attunement : true, action : [["reaction", ""]], chooseGear : { type : "armor", prefixOrSuffix : "prefix" }, usages : 6, recovery : "dawn", additional : "regains 1d6" }; AddFeatureChoice(ClassList.artificer.features["infuse item"], true, "Helm of Awareness (prereq: level 10 artificer)", { name : "Helm of Awareness", source : [["T", 21], ["UA:SP3", 3]], description: desc("The wearer has advantage on Initiative rolls and can't be surprised while not incapacitated"), additional : "helmet; requires attunement", prereqeval : function(v) { return classes.known.artificer.level >= 10; }, magicitemsAdd : ["Helm of Awareness"] }); MagicItemsList["helm of awareness"] = { name : "Helm of Awareness", source : [["T", 21], ["UA:SP3", 3]], type : "wondrous item", description : "While wearing this helmet, I have advantage on initiative rolls. In addition, I can't be surprised, provided I'm not incapacitated.", descriptionFull : "While wearing this helmet, a creature has advantage on initiative rolls. In addition, the wearer can't be surprised, provided it isn't incapacitated.", attunement : true, advantages : [["Initiative", true]], savetxt : { immune : ["surprised"] } }; AddFeatureChoice(ClassList.artificer.features["infuse item"], true, "Mind Sharpener", { name : "Mind Sharpener", source : [["T", 22]], description: desc("The wearer can use its reaction to ignore a failed Con save to maintain concentration"), additional : "suit of armor or robes", magicitemsAdd : ["Mind Sharpener"] }); MagicItemsList["mind sharpener"] = { name : "Mind Sharpener", source : [["T", 22]], descriptionFull : "The infused item can send a jolt to the wearer to refocus their mind. The item has 4 charges. When the wearer fails a Constitution saving throw to maintain concentration on a spell, the wearer can use its reaction to expend 1 of the item's charges to succeed instead. The item regains 1d4 expended charges daily at dawn.", description : "This magic armor or robes can send a jolt to refocus my mind. It has 4 charges and regains 1d4 expended charges daily at dawn. As a reaction when I fail a Constitution saving throw to maintain concentration on a spell, I can expend 1 charge to succeed instead.", action : [["reaction", ""]], usages : 4, recovery : "dawn", additional : "regains 1d4", choices : ["Mind Sharpener Armor", "Mind Sharpener Robes"], choicesNotInMenu : true, "mind sharpener armor" : { name : "Mind\u200A Sharpener", type : "armor (light, medium, or heavy)", description : "This magic armor can send a jolt to refocus my mind. It has 4 charges and regains 1d4 expended charges daily at dawn. As a reaction when I fail a Constitution saving throw to maintain concentration on a spell, I can expend 1 charge to succeed instead.", chooseGear : { type : "armor", prefixOrSuffix : "brackets", itemName1stPage : ["suffix", "Mind Sharpener"], descriptionChange : ["prefix", "armor"] } }, "mind sharpener robes" : { name : "Mind Sharpener (Robes)", type : "wondrous item", description : "These magic robes can send a jolt to refocus my mind. It has 4 charges and regains 1d4 expended charges daily at dawn. As a reaction when I fail a Constitution saving throw to maintain concentration on a spell, I can expend 1 charge to succeed instead." } }; AddFeatureChoice(ClassList.artificer.features["infuse item"], true, "Spell-Refueling Ring (prereq: level 6 artificer)", { name : "Spell-Refueling Ring", source : [["T", 23]], description: desc("As an action once per dawn, this ring's wearer can recover one 3rd-level or lower spell slot"), additional : "ring; requires attunement", prereqeval : function(v) { return classes.known.artificer.level >= 6; }, magicitemsAdd : ["Spell-Refueling Ring"] }); MagicItemsList["spell-refueling ring"] = { name : "Spell-Refueling Ring", source : [["T", 23]], type : "ring", descriptionFull : "While wearing this ring, the creature can recover one expended spell slot as an action. The recovered slot can be of 3rd level or lower. Once used, the ring can't be used again until the next dawn.", description : "As an action, I can activate this magic ring to recover one expended spell slot. The recovered slot can be of 3rd level or lower. Once used, the ring can't be used again until the next dawn.", attunement : true, action : [["action", ""]], usages : 1, recovery : "dawn" }; // Add the Armorer specialism (but after all other scripts, so that all armour options are present) RunFunctionAtEnd(function () { var TCoE_Artificer_Subclass_Armorer = AddSubClass("artificer", "armorer", { regExpSearch : /^(?=.*armou?rer)(?!.*wizard).*$/i, subname : "Armorer", fullname : "Armorer", source : [["T", 15]], attacks : [1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], features : { "subclassfeature3" : { name : "Tools of the Trade", source : [["T", 15]], minlevel : 3, description : " [proficient with heavy armor \u0026 smith's tools]", toolProfs : ["Smith's tools"], armorProfs : [false, false, true, false], spellcastingExtra : ["magic missile", "thunderwave", "mirror image", "shatter", "hypnotic pattern", "lightning bolt", "fire shield", "greater invisibility", "passwall", "wall of force"] }, "subclassfeature3.1" : { name : "Arcane Armor", source : [["T", 15]], minlevel : 3, description : " [reverts back if I die or don another armor]" + desc([ "As an action, I can use smith's tool to turn an armor I'm wearing into arcane armor", "As an action, I can don or doff it; As a bonus action, I can deploy or retract its helmet", "It can't be removed against my will, covers all my limbs, and even replaces missing limbs", "I ignore the Strength requirement of arcane armor and can use it as a spellcasting focus" ]), action : [["action", " (create/don/doff)"], ["bonus action", " (retract/deploy helmet)"]] }, "subclassfeature3.2" : { name : "Armor Model", source : [["T", 16]], minlevel : 3, description : desc([ "When I finish a rest, I can use smith's tools to change the model of my arcane armor", 'Select a model using the "Choose Feature" button; See "Notes" page for features of each' ]), additional : "also see notes page", toNotesPage : [{ name : "Arcane Armor Model Features", note : desc([ "I can customize my arcane armor to the guardian or infiltrator model whenever I finish a short or long rest, provided I have smith's tools in hand.", "Each model includes a special weapon. When I attack with that weapon, I can use my Intelligence modifier, instead of Strength or Dexterity, for the attack and damage rolls." ]) }, { name : "Guardian Arcane Armor", popupName : "Guardian Arcane Armor Features", note : desc([ "\u2022 Thunder Gauntlets: Each of the armor's gauntlets counts as a simple melee weapon while I'm not holding anything in it, and it deals 1d8 thunder damage on a hit. A creature hit by the gauntlet has disadvantage on attack rolls against targets other than me until the start of me next turn, as the armor magically emits a distracting pulse when the creature attacks someone else.", "\u2022 Defensive Field: As a bonus action, I can gain temporary hit points equal to my artificer level, replacing any temporary hit points I already have. I lose these temporary hit points if I doff the armor. I can use this bonus action a number of times equal to my proficiency bonus, and I regain all expended uses when I finish a long rest." ]), amendTo : "Arcane Armor Model Features" }, { name : "Infiltrator Arcane Armor", popupName : "Infiltrator Arcane Armor Features", note : desc([ "\u2022 Lightning Launcher: A gemlike node on one of the armored fists or on the chest (my choice) counts as a simple ranged weapon, with a normal range of 90 ft and a long range of 300 ft. It deals 1d6 lightning damage on a hit. Once on each of my turns when I hit a creature with it, I can deal an extra 1d6 lightning damage to that target.", "\u2022 Powered Steps: My walking speed increases by 5 feet.", "\u2022 Dampening Field: I have advantage on Dexterity (Stealth) checks. If the armor normally imposes disadvantage on such checks, the advantage and disadvantage cancel each other, as normal." ]), amendTo : "Arcane Armor Model Features" }], choices : [], choiceDependencies : [{ feature : "subclassfeature15", choiceAttribute : true }], weaponOptions : [{ regExpSearch : /^(?=.*thunder)(?=.*gauntlet).*$/i, name : "Thunder Gauntlets", source : [["T", 16]], ability : 4, type : "Simple", damage : [1, 8, "thunder"], range : "Melee", description : "Target hit disadv. on attacks vs. others than me until my next turn starts", abilitytodamage : true, monkweapon : true }, { regExpSearch : /^(?=.*lightning)(?=.*launcher).*$/i, name : "Lightning Launcher", source : [["T", 16]], ability : 4, type : "Simple", damage : [1, 6, "lightning"], range : "90/300 ft", description : "Once per turn on hit, +1d6 lightning damage", abilitytodamage : true }], // Do this in the parent object, so that it is always visible and people printing the sheet can more easily switch between the two models // Also, the armor model can be changed on a short rest, but the limited feature only resets on a long rest, so shouldn't be removed action : [["bonus action", "Defensive Field (Guardian Model)"]], extraLimitedFeatures : [{ name : "Defensive Field (Guardian Model)", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }] }, "subclassfeature9" : { name : "Armor Modifications", source : [["T", 17]], minlevel : 9, description : desc([ "Arcane armor now counts as armor, boots, helmet, and a weapon for holding infusions", "Each can hold one infusion; The infusions remain when I change the armor's model" ]), additional : "+2 infused items if" + (typePF ? "" : " used") + " on arcane armor", }, "subclassfeature15" : { name : "Perfected Armor", source : [["T", 17]], minlevel : 15, description : desc([ 'My armor gets additional features, based on the model; Use "Choose Feature" to select it', "The guardian gets the ability to pull a creature closer as a reaction and make an attack", "The infiltrator gets an upgrade to its lightning launcher weapon attack" ]), toNotesPage : [{ name : "Guardian Perfected Armor Features", note : desc([ "Tinkering with my armor's energy system leads me to discover a powerful pulling force.", "As a reaction when a Huge or smaller creature I can see ends its turn within 30 ft of me, I can magically force the creature to make a Strength saving throw against my spell save DC, pulling the creature up to 30 ft toward me to an unoccupied space. If I pull the target to a space within 5 ft of me, I can make a melee weapon attack against it as part of this reaction.", "I can use this reaction a number of times equal to my proficiency bonus. I regain all expended uses of it when I finish a long rest." ]), amendTo : "Arcane Armor Model Features" }, { name : "Infiltrator Perfected Armor Features", note : desc([ "Any creature that takes lightning damage from my Lightning Launcher glimmers with magical light until the start of my next turn.", "The glimmering creature sheds dim light in a 5-ft radius, and it has disadvantage on attack rolls against me, as the light jolts it if it attacks me. In addition, the next attack roll against it has advantage, and if that attack hits, the target takes an extra 1d6 lightning damage." ]), amendTo : "Arcane Armor Model Features" }], "guardian" : { name : "Perfected Armor: Guardian", additional: "Proficiency Bonus per long rest", description : desc([ "As a reaction when a creature I can see ends its turn in 30 ft, I have it make a Str save", "If it is Huge or smaller and fails, I pull it up to 30 ft towards me to an unoccupied space", "If I pull it within 5 ft, I can make a melee weapon attack vs. it as part of this reaction" ]) }, "infiltrator" : { name : "Perfected Armor: Infiltrator", description : desc([ "Those hit by my lightning launcher shed 5-ft radius dim light until my next turn starts", "The light gives the target disadvantage on attacks rolls made against me", "Also, the next attack against it has advantage and deals an extra 1d6 lightning damage" ]) }, // Do these in the parent object, so that they are always visible and people printing the sheet can more easily switch between the two models // Also, the armor model can be changed on a short rest, but the limited feature only resets on a long rest, so shouldn't be removed action : [["reaction", "Perfected Armor: Guardian"]], extraLimitedFeatures : [{ name : "Perfected Armor: Guardian", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }] } } }); var itsFea = ClassSubList[TCoE_Artificer_Subclass_Armorer].features["subclassfeature3.2"]; var guardianTxt = desc([ "Both fists are Thunder Gauntlets, simple melee weapons that distract those hit by it", "As a bonus action, I can activate a defensive shield to gain my artificer level in temp HP" ]) var guardianAdditional = levels.map(function (n) { return n + " temp HP, Prof B. per long rest"; }) var infiltratorTxt = desc([ "+5 ft walking speed; Gemlike node in fist/chest is a ranged weapon, Lightning Launcher", "It gives me advantage on Dexterity (Stealth) checks" ]) var prereqFunc = function(v) { var sParsed = ParseArmor(v.choice.replace(/(Guardian|Infiltrator) arcane /i, '')); return sParsed && testSource(sParsed, ArmourList[sParsed], "armorExcl") ? "skip" : true; }; for (var armor in ArmourList) { var anArm = ArmourList[armor]; if (anArm.isMagicArmor || !anArm.weight || (CurrentVars.extraArmour && CurrentVars.extraArmour[armor])) continue; // Add the Guardian variant of the armor var gArmName = "Guardian Arcane " + anArm.name; itsFea[gArmName.toLowerCase()] = { name : (typePF ? "Armor " : "") + "Model: Guardian " + anArm.name, submenu : "Guardian Arcane Armor", description : guardianTxt, additional : guardianAdditional, armorAdd : { select : gArmName, options : [gArmName] }, weaponsAdd : { select : ["Thunder Gauntlets"] }, prereqeval : prereqFunc, dependentChoices : "guardian" } // And now add the Infiltrator variant of the armor var iArmName = "Infiltrator Arcane " + anArm.name; itsFea[iArmName.toLowerCase()] = { name : "Armor Model: Infiltrator " + anArm.name, submenu : "Infiltrator Arcane Armor", description : infiltratorTxt + (anArm.stealthdis ? ", cancelling out the disadv. it imposes" : ""), speed : { walk : {spd : "+5", enc : "+5" } }, armorAdd : { select : iArmName, options : [iArmName] }, weaponsAdd : { select : ["Lightning Launcher"] }, prereqeval : prereqFunc, advantages : [["Stealth", true]], dependentChoices : "infiltrator" } // Lastly push both choices to the array itsFea.choices.push(gArmName, iArmName); } }); // >>>>>>>>>>>>>>>>>>>>>>>>> // // >>> Barbarian Options >>> // // >>>>>>>>>>>>>>>>>>>>>>>>> // // Barbarian Optional Class Features AddFeatureChoice(ClassList.barbarian.features["danger sense"], true, "Primal Knowledge", { name : "Primal Knowledge", extraname : "Optional Barbarian 3", source : [["T", 24]], description : desc([ "At 3rd level and again at 10th level I gain proficiency with one skill of my choice", "I can choose from Animal Handling, Athletics, Intimidation, Nature, Perception, Survival" ]), skillstxt : "Choose one from Animal Handling, Athletics, Intimidation, Nature, Perception and Survival.\nChoose another from this list at 10th level", prereqeval : function (v) { return classes.known.barbarian.level >= 3 ? true : "skip"; } }, "Optional 3rd-level barbarian features"); AddFeatureChoice(ClassList.barbarian.features["feral instinct"], true, "Instinctive Pounce", { name : "Instinctive Pounce", extraname : "Optional Barbarian 7", source : [["T", 24]], description : desc([ "As part of the bonus action I use to enter rage, I can move up to half my speed" ]), action : [["bonus action", "Rage (start & half move / end)", "Rage (start/end)"]] }, "Optional 7th-level barbarian features"); // Barbarian Subclasses AddSubClass("barbarian", "path of the beast", { regExpSearch : /^(?=.*\bbeast\b)(?=.*(warrior|marauder|barbarian|viking|(norse|tribes?|clans?)(wo)?m(a|e)n)).*$/i, subname : "Path of the Beast", subnameShort: "Beast", source : [["T", 24]], abilitySave : 3, features : { "subclassfeature3" : { name : "Form of the Beast", source : [["T", 24]], minlevel : 3, description : desc([ "When I enter my rage, I can transform to gain a bite, tail, or claws attack for that rage", "On a hit with the bite attack once on each of my turns, I can heal my Prof Bonus in HP", "This only works if I have less than half my hit points when I hit with this bite attack", "With the claws I can make one extra attack when I attack with it in my Attack action", "As a reaction with the tail when I'm hit, I can add 1d8 to my AC for that attack", "This only works if the hit is from an attack roll made a creature I can see within 30 ft" ]), weaponOptions : [{ regExpSearch : /^(?=.*(bestial|beast))(?=.*bite).*$/i, name : "Bestial Bite", source : [["T", 24]], ability : 1, type : "Natural", damage : [1, 8, "piercing"], range : "Melee", description : "Only in rage; On a hit once on my turn, regain Prof Bonus in HP (if below 1/2 HP)", abilitytodamage : true, bestialNaturalWeapon : true, selectNow : true }, { regExpSearch : /^(?=.*(bestial|beast))(?=.*claws?).*$/i, name : "Bestial Claws", source : [["T", 24]], ability : 1, type : "Natural", damage : [1, 6, "slashing"], range : "Melee", description : "Only in rage; Extra attack if used as part of Attack action", abilitytodamage : true, bestialNaturalWeapon : true, selectNow : true }, { regExpSearch : /^(?=.*(bestial|beast))(?=.*tail).*$/i, name : "Bestial Tail", source : [["T", 25]], ability : 1, type : "Natural", damage : [1, 8, "piercing"], range : "Melee", description : "Reach; Only in rage", abilitytodamage : true, bestialNaturalWeapon : true, selectNow : true }], additional : levels.map(function(n) { return n < 6 ? "" : "chosen weapon counts as magical"; }), action : [["reaction", "Bestial Tail"]] }, "subclassfeature6" : { name : "Bestial Soul", source : [["T", 25]], minlevel : 6, description : desc([ "When I finish a short rest, I can choose one of the following benefits until my next rest:", " \u2022 Swimming speed equal to my walking speed and I can breathe underwater", " \u2022 Climb speed (same as walking) and no check to climb difficult surfaces or upside down", " \u2022 Once per turn when I jump, I can extend it by the result of an Athletics check in feet" ]), calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.bestialNaturalWeapon && !v.thisWeapon[1] && !v.theWea.isMagicWeapon && !(/counts as( a)? magical/i).test(fields.Description)) { fields.Description += (fields.Description ? '; ' : '') + 'Counts as magical'; }; }, "The natural melee weapon that I gain from Form of the Beast count as magical for the purpose of overcoming resistance and immunity to nonmagical attacks and damage." ] } }, "subclassfeature10" : { name : "Infectious Fury", source : [["T", 25]], minlevel : 10, description : desc([ "In rage, when I hit a creature with my natural weapon, I can have it make a Wis save", "If it fails (DC 8 + my Prof Bonus + my Con mod) it suffers one effect of my choice:", " \u2022 It uses its reaction to make a melee attack against one creature I can see of my choice", " \u2022 It takes 2d12 psychic damage" ]), usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature14" : { name : "Call the Hunt", source : [["T", 25]], minlevel : 14, description : desc([ "When I enter rage, I can choose my Con mod of willing creatures I can see within 30 ft", "Once on each of their turns, if they hit an attack, they can have it deal +1d6 damage", "This lasts as long as I rage; I gain 5 temporary HP per creature that accepts this benefit" ]), usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" } } }); AddSubClass("barbarian", "path of wild magic", { regExpSearch : /^(?=.*\bwild\b)(?=.*\bmagic\b).*$/i, subname : "Path of Wild Magic", subnameShort: "Wild Magic", source : [["T", 25]], abilitySave : 3, features : { "subclassfeature3" : { name : "Magic Awareness", source : [["T", 25]], minlevel : 3, description : desc([ "As an action, I can open my awareness to the presence of concentrated magic", "Until my next turn ends, I know the location of any spell or magic item within 60 ft", "I also learn the school of magic of a spell; This doesn't reveal anything behind total cover" ]), usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus')", recovery : "long rest", action : [["action", ""]] }, "subclassfeature3.1" : { name : "Wild Surge", source : [["T", 25]], minlevel : 3, description: desc("Whenever I enter my rage, I roll on the Wild Magic table (see Notes page)"), toNotesPage : [{ name : "Wild Magic Table", source : [["T", 26]], note : [ "The magical energy roiling inside me sometimes erupts from me. Whenever I enter my rage, I have to roll on the table below to see what happens.", "If the effect calls for a saving throw, the DC is equal to 8 + my proficiency bonus + my Constitution modifier.\n", "d8\tEFFECT", " 1\tShadowy tendrils lash around me. Each creature of my choice that I can see within 30 ft of me must succeed on a Constitution saving throw or take 1d12 necrotic damage. I also gain 1d12 temporary hit points.", " 2\tI teleport up to 30 ft to an unoccupied space I can see. Until my rage ends, I can use this effect again on each of my turns as a bonus action.", " 3\tAn intangible spirit, which looks like a flumph or a pixie (my choice), appears within 5 ft of one creature of my choice that I can see within 30 ft of me. At the end of the current turn, the spirit explodes, and each creature within 5 ft of it must succeed on a Dexterity saving throw or take 1d6 force damage. Until my rage ends, I can use this effect again, summoning another spirit, on each of my turns as a bonus action.", " 4\tMagic infuses one weapon of my choice that I am holding. Until my rage ends, the weapon's damage type changes to force, and it gains the light and thrown properties, with a normal range of 20 ft and a long range of 60 ft. If the weapon leaves my hand, the weapon reappears in my hand at the end of the current turn.", " 5\tWhenever a creature hits me with an attack roll before my rage ends, that creature takes 1d6 force damage, as magic lashes out in retribution.", " 6\tUntil my rage ends, I am surrounded by multicolored, protective lights; I gain a +1 bonus to AC, and while within 10 ft of me, my allies gain the same bonus.", " 7\tFlowers and vines temporarily grow around me; until my rage ends, the ground within 15 ft of me is difficult terrain for my enemies.", " 8\tA bolt of light shoots from my chest. Another creature of my choice that I can see within 30 ft of me must succeed on a Constitution saving throw or take 1d6 radiant damage and be blinded until the start of my next turn. Until my rage ends, I can use this effect again on each of my turns as a bonus action." ] }] }, "subclassfeature6" : { name : "Bolstering Magic", source : [["T", 26]], minlevel : 6, description : desc([ "As an action, I can touch a creature or myself and confer one of the following benefits:", " \u2022 For 10 minutes, they can add 1d3 to any attack roll and ability check", " \u2022 Roll 1d3. They regain an expended spell slot of a level equal to or lower than the roll", "A creature that receives the second benefit can't receive it again until after a long rest" ]), usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus')", recovery : "long rest", action : [["action", ""]] }, "subclassfeature10" : { name : "Unstable Backlash", source : [["T", 26]], minlevel : 10, description : desc([ "As a reaction in rage when taking damage or failing a save, I can lash out with magic", "I roll on the Wild Magic table and immediately apply the roll, replacing my current effect" ]), action : [["reaction", " (in rage on damage/save fail)"]] }, "subclassfeature14" : { name : "Controlled Surge", source : [["T", 26]], minlevel : 14, description : desc([ "Whenever I roll on the Wild Magic table, I can roll two dice and choose which to use", "If I roll the same on both dice, I can instead choose any effect on the Wild Magic table" ]) } } }); // >>>>>>>>>>>>>>>>>>>> // // >>> Bard Options >>> // // >>>>>>>>>>>>>>>>>>>> // // Bard Optional Class Features AddFeatureChoice(ClassList.bard.features.spellcasting, true, "Additional Bard Spells", { name : "Additional Bard Spells", source : [["T", 27]], extraname : "Optional Bard 1", description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "bard" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["color spray", "command", "aid", "enlarge/reduce", "mirror image", "mass healing word", "slow", "phantasmal killer", "rary's telepathic bond", "heroes' feast", "prismatic spray", "antipathy/sympathy", "prismatic wall"]); }, "This optional class feature expands the spell list of the bard class with the following spells (spell level in brackets): Color Spray (1), Command (1), Aid (2), Enlarge/Reduce (2), Mirror Image (2), Mass Healing Word (3), Slow (3), Phantasmal Killer (4), Rary's Telepathic Bond (5), Heroes' Feast (6), Prismatic Spray (7), Antipathy/Sympathy (8), and Prismatic Wall (9)." ] } }, "Optional 1st-level bard features"); AddFeatureChoice(ClassList.bard.features["jack of all trades"], true, "Magical Inspiration", { name : "Magical Inspiration", extraname : "Optional Bard 2", source : [["T", 27]], description : desc([ "A bardic inspiration die recipient can also use it when casting a damaging or healing spell", "They can expend the die and add it to healing or damage dealt to one target of the spell" ]) }, "Optional 2nd-level bard features"); AddFeatureChoice(ClassList.bard.features["song of rest"], true, "Bardic Versatility", { name : "Bardic Versatility", extraname : "Optional Bard 4", source : [["T", 28]], description : " [ASI = Ability Score Improvement]" + desc([ "Whenever I gain an ASI from the bard class, I can change one cantrip or expertise choice", "I can select another cantrip from the bard spell list or another skill I'm proficient with" ]), prereqeval : function (v) { return classes.known.bard.level >= 4 ? true : "skip"; } }, "Optional 4th-level bard features"); // Bard Subclasses AddSubClass("bard", "college of creation", { regExpSearch : /^(?=.*(college|bard|minstrel|troubadour|jongleur))(?=.*creation).*$/i, subname : "College of Creation", subnameShort: "Creation", source : [["T", 28]], features : { "subclassfeature3" : { name : "Mote of Potential", source : [["T", 28]], minlevel : 3, description : desc([ "Those who use my Bardic Inspiration die gain an extra bonus depending how they use it:", "\u2022 Ability check: Roll the die twice and choose which result to use", "\u2022 Attack roll: the target and others of my choice I can see in 5 ft must make a Con save", " If failed, they take the die roll in thunder damage; This uses my spell save DC", "\u2022 Saving throw: Grants temporary HP equal to the roll + my Cha mod (min 1 temp HP)" ]) }, "subclassfeature3.1" : { name : "Performance of Creation", source : [["T", 28]], minlevel : 3, description : levels.map(function (n) { if (n < 14) { var descr = [ "As an action, I create " + (n < 6 ? "a Medium" : "one Large") + " or smaller nonmagical item in an empty space in 10 ft", "It can't be worth more than " + (20 * n) + " gp; It lasts for my Proficiency Bonus in hours", "I can't have multiple, creating more makes the first one vanish", "I can do this once per long rest, or by expending a 2nd-level or higher spell slot (SS 2+)" ]; } else { var descr = [ "As an action, I create my Charisma mod of nonmagical items in an empty space in 10 ft", "One can be Huge, the rest Small or smaller; They last for my Proficiency Bonus in hours", "I can't have more than my Cha mod; If I create more, I get to choose which vanish", "I can do this once per long rest, or by expending a 2nd-level or higher spell slot (SS 2+)" ]; } return desc(descr); }), action : [["action", ""]], usages : 1, recovery : "long rest", altResource : "SS 2+" }, "subclassfeature6" : { name : "Animating Performance", source : [["T", 29]], minlevel : 6, description : desc([ "As an action, I can animate a Large or smaller nonmagical item I can see within 30 ft", "It is friendly and obeys my commands; It lasts for 1 hour, until it has 0 HP, or I die", "Unless I use a bonus action to command it, it only takes the Dodge action on its turn", "It can take reactions and move on its turn without commands; I can't have multiple", "When I use bardic inspiration, I can command the item as part of the same bonus action", 'It acts on my initiative, after me; See "Dancing Item" on a companion page for its stats', "I can do this once per long rest, or by expending a 3rd-level or higher spell slot (SS 3+)" ]), action : [["action", ""], ["bonus action", "Command Dancing Item"]], usages : 1, recovery : "long rest", altResource : "SS 3+", creaturesAdd : [["Dancing Item"]], creatureOptions : [{ name : "Dancing Item", source : [["T", 29]], size : 4, type : "Construct", alignment : "", ac : 16, hp : 25, hd : [], speed : "fly 30 ft (hover)", scores : [18, 14, 16, 4, 10, 6], damage_immunities : "poison, psychic", condition_immunities : "charmed, exhaustion, poisoned, frightened", passivePerception : 10, senses : "Darkvision 60 ft", languages : "understands the languages of its creator but can't speak", challengeRating : "1/2", proficiencyBonus : 2, proficiencyBonusLinked : true, attacksAction : 1, attacks : [{ name : "Force-Empowered Slam", ability : 6, damage : [1, 10, "force"], range : "Melee (5 ft)", modifiers : ["", "Prof"], abilitytodamage : false, useSpellMod : "bard" }], features : [{ name : "Variable Size", description : "The item animated can be Large or smaller." }, { name : "Creator", description : "The item obeys the commands of its creator and has the same proficiency bonus. It takes its turn immediately after its creator, on the same initiative count. It can move and take reactions on its own, but only takes the Dodge action on its turn unless its creator takes a bonus action to command it to take another action. If its creator is incapacitated, it can take any action, not just Dodge." }], actions : [{ name : "Immutable Form", description : "The item is immune to any spell or effect that would alter its form." }, { name : "Irrepressible Dance", description : "When any creature starts its turn within 10 ft of the item, the item can increase or decrease (its creator's choice) the walking speed of that creature by 10 ft until the end of the turn, provided the item isn't incapacitated." }], header : 'Animated', calcChanges : { hp : function (totalHD, HDobj, prefix) { if (!classes.known.bard) return; var brdLvl = classes.known.bard.level; var brdLvl5 = 5 * brdLvl; HDobj.alt.push(10 + brdLvl5); HDobj.altStr.push(" = 10 as a base\n + 5 \xD7 " + brdLvl + " from five times its creator's bard level (" + brdLvl5 + ")"); }, setAltHp : true } }] }, "subclassfeature14" : { name : "Creative Crescendo", source : [["T", 29]], minlevel : 14, description : " [enhances Performance of Creation]" } } }); // >>>>>>>>>>>>>>>>>>>>>> // // >>> Cleric Options >>> // // >>>>>>>>>>>>>>>>>>>>>> // // Cleric Optional Class Features AddFeatureChoice(ClassList.cleric.features.spellcasting, true, "Additional Cleric Spells", { name : "Additional Cleric Spells", extraname : "Optional Cleric 1", source : [["T", 30]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "cleric" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["aura of vitality", "aura of life", "aura of purity", "sunbeam", "sunburst", "power word heal"]); }, "This optional class feature expands the spell list of the cleric class with the following spells (spell level in brackets): Aura of Vitality (3), Aura of Life (4), Aura of Purity (4), Sunbeam (6), Sunburst (8), and Power Word Heal (9)." ] } }, "Optional 1st-level cleric features"); AddFeatureChoice(ClassList.cleric.features["channel divinity"], true, "Harness Divine Power", { name : "Channel Divinity: Harness Divine Power", extraname : "Optional Cleric 2", source : [["T", 30]], description : desc([ "As a bonus action, I can expend a use of my channel divinity to regain one used spell slot", "The level of this spell slot can be no more than half my Proficiency Bonus (rounded up)", "I can only do this so many times per long rest, even if I have uses of channel divinity left" ]), action : [["bonus action", ""]], usages : levels.map(function(n) { return n < 3 ? "" : n < 6 ? 1 : n < 18 ? 2 : 3; }), recovery : "long rest" }, "Optional 2nd-level cleric features"); AddFeatureChoice(ClassList.cleric.features["turn undead"], true, "Cantrip Versatility", { name : "Cantrip Versatility", extraname : "Optional Cleric 4", source : [["T", 31]], description : " [ASI = Ability Score Improvement]\n Whenever I gain an ASI from the cleric class, I can change one cleric cantrip for another", prereqeval : function (v) { return classes.known.cleric.level >= 4 ? true : "skip"; } }, "Optional 4th-level cleric features"); // Cleric subclass alternative feature, so only run this after we are sure all subclasses have been added RunFunctionAtEnd(function() { for (var i = 0; i < ClassList.cleric.subclasses[1].length; i++) { var domain = ClassList.cleric.subclasses[1][i]; var objDomain = ClassSubList[domain]; if (!objDomain || !objDomain.features.subclassfeature8 || !(/divine strike|potent spellcasting/i).test(objDomain.features.subclassfeature8.name)) continue; CreateClassFeatureVariant(domain, "subclassfeature8", "Blessed Strikes", { name : "Blessed Strikes", source : [["T", 31]], description : desc([ "When my weapon attack or cantrip damages a creature, I can do +1d8 radiant damage", "Once I deal this extra damage, I can't do so again until the start of my next turn" ]), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && (v.isWeapon || (v.thisWeapon[3] && SpellsList[v.thisWeapon[3]].level === 0)) && /\d/.test(fields.Damage_Die)) { fields.Description += (fields.Description ? '; ' : '') + 'Once per round +1d8 radiant damage'; } }, "Once per round, when a creature takes damage from one of my spell or weapon attacks, I can also deal 1d8 radiant damage to the target." ] } }); } }); // Cleric Subclasses AddSubClass("cleric", "peace domain", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*peace).*$/i, subname : "Peace Domain", source : [["T", 32]], spellcastingExtra : ["heroism", "sanctuary", "aid", "warding bond", "beacon of hope", "sending", "aura of purity", "otiluke's resilient sphere", "greater restoration", "rary's telepathic bond"], features : { "subclassfeature1" : { name : "Emboldening Bond", source : [["T", 33]], minlevel : 1, description : levels.map(function (n) { return desc([ "As an action, I can magically bond my Prof Bonus of willing creatures I can see in 30 ft", "I can be one of the bonded creatures; The bond lasts for 10 min or until I use this again", "While within " + (n < 17 ? 30 : 60) + " ft of another, a bonded target can add +1d4 to a save, attack, or check", "Each creature can add the +1d4 only once per turn" ]); }), action : [["action", ""]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature1.1" : { name : "Implement of Peace", description : desc("I gain proficiency in the Insight, Performance, or Persuasion skill (my choice)"), skillstxt : "Choose one from: Insight, Performance, or Persuasion" }, "subclassfeature2" : { name : "Channel Divinity: Balm of Peace", source : [["T", 33]], minlevel : 2, description : desc([ "As an action, I can move up to my speed without provoking opportunity attacks", "During this move, I can heal each creature that I come within 5 ft of once", "I restore a number of hit points equal to 2d6 + my Wisdom modifier (minimum 1 HP)" ]), action : [["action", ""]] }, "subclassfeature6" : { name : "Protective Bond", source : [["T", 33]], minlevel : 6, description : desc([ "My Emboldening Bond now also helps those bonded to protect each other if within range", "When one is about to take damage, another bonded can use its reaction to teleport closer", "They teleport to an empty space within 5 ft of the first and take all the damage instead", "From 17th-level, they count as having resistance for this damage, thus take only half" ]), additional : levels.map(function (n) { return n < 6 ? "" : "the bonded must be within " + (n < 17 ? 30 : 60) + " ft"; }) }, "subclassfeature8" : { name : "Potent Spellcasting", source : [["T", 33]], minlevel : 8, description : desc("I add my Wisdom modifier to the damage I deal with my cleric cantrips"), calcChanges : GenericClassFeatures["potent spellcasting"].calcChanges }, "subclassfeature17" : { name : "Expansive Bond", source : [["T", 33]], minlevel : 17, description : desc([ "Emboldening and Protective Bond work when the bonded are within 60 ft of each other", "Protective Bond now also grants resistance when used to take damage for another" ]) } } }); AddSubClass("cleric", "twilight domain", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*(twilight|transition)).*$/i, subname : "Twilight Domain", subnameShort: "Twilight", source : [["T", 34]], spellcastingExtra : ["faerie fire", "sleep", "moonbeam", "see invisibility", "aura of vitality", "leomund's tiny hut", "aura of life", "greater invisibility", "circle of power", "mislead"], features : { "subclassfeature1" : { name : "Bonus Proficiency", source : [["T", 34]], minlevel : 1, description: desc("I gain proficiency with martial weapons and heavy armor"), armorProfs : [false, false, true, false], weaponProfs : [false, true] }, "subclassfeature1.1" : { name : "Eyes of Night", source : [["T", 34]], minlevel : 1, description : desc([ "I gain darkvision out to a range of 300 ft; As an action, I can grant others this as well", "I can grant it for 1 hour to my Wis mod (min 1) of willing targets I can see within 10 ft", "I can do this once per long rest, or by expending a spell slot (SS 1+)" ]), action : [["action", " (grant others)"]], vision : [["Darkvision", 300]], additional : "grant others", usages : 1, recovery : "long rest", altResource : "SS 1+" }, "subclassfeature1.2" : { name : "Vigilant Blessing", source : [["T", 35]], minlevel : 1, description : desc([ "As an action, I can grant myself or a creature I touch adv. on the next initiative roll", "This benefit ends immediately after the roll or when I use this feature again" ]), action : [["action", ""]] }, "subclassfeature2" : { name : "Channel Divinity: Twilight Sanctuary", source : [["T", 35]], minlevel : 2, description : desc([ "As an action, I can use my holy symbol to create a 30-ft radius sphere around myself", "It moves with me, is filled with dim light, and lasts for 1 min or until I'm incapacitated", "When a creature, including me, ends its turn inside the sphere, I can grant it a benefit:", " \u2022 I grant it temporary hit points equal to 1d6 + my cleric level", " \u2022 I end one effect on it causing it to be charmed or frightened", "From 17th-level onwards, me and my allies have half cover while inside the sphere" ]), action : [["action", ""]], additional : levels.map(function(n) { return n < 2 ? "" : "1d6 + " + n + " temp HP"; }), }, "subclassfeature6" : { name : "Steps of Night", source : [["T", 35]], minlevel : 6, description : desc([ "As a bonus action when I'm in dim light or darkness, I can magically grant myself flight", "I gain a flying speed equal to my walking speed for 1 minute" ]), action : [["bonus action", ""]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature8" : { name : "Divine Strike", source : [["T", 35]], minlevel : 8, description: desc("Once per turn, when I hit a creature with a weapon attack, I can do extra damage"), additional : levels.map(function (n) { if (n < 8) return ""; return "+" + (n < 14 ? 1 : 2) + "d8 radiant damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && v.isWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.cleric.level < 14 ? 1 : 2) + 'd8 radiant damage'; } }, "Once per turn, I can have one of my weapon attacks that hit do extra radiant damage." ] } }, "subclassfeature17" : { name : "Twilight Shroud", source : [["T", 35]], minlevel : 17, description : desc([ "Me and my allies have half cover while in the sphere created by my Twilight Sanctuary" ]) } } }); // >>>>>>>>>>>>>>>>>>>>> // // >>> Druid Options >>> // // >>>>>>>>>>>>>>>>>>>>> // // Druid Optional Class Features AddFeatureChoice(ClassList.druid.features.spellcasting, true, "Additional Druid Spells", { name : "Additional Druid Spells", extraname : "Optional Druid 1", source : [["T", 35]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "druid" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["protection from evil and good", "augury", "continual flame", "enlarge/reduce", "aura of vitality", "elemental weapon", "revivify", "divination", "fire shield", "cone of cold", "flesh to stone", "symbol", "incendiary cloud"]); }, "This optional class feature expands the spell list of the druid class with the following spells (spell level in brackets): Protection from Evil and Good (1), Augury (2), Continual Flame (2), Enlarge/Reduce (2), Aura of Vitality (3), Elemental Weapon (3), Revivify (3), Divination (4), Fire Shield (4), Cone of Cold (5), Flesh to Stone (6), Symbol (7), and Incendiary Cloud (8)." ] } }, "Optional 1st-level druid features"); var TCoE_Wild_Companion = { name : "Wild Companion", extraname : "Optional Druid 2", source : [["T", 35], ["UA:CFV", 4]], description : desc([ "I can expend a use of wild shape to cast Find Familiar without material components", "The familiar always has the Fey type and disappears after half my druid level in hours" ]), additional : levels.map(function (n) { return n < 2 ? "" : Math.floor(n/2) + " hours"; }), spellcastingBonus : [{ name : "Wild Companion", spells : ["find familiar"], selection : ["find familiar"], firstCol : "Sp" }], spellChanges : { "find familiar" : { components : "V,S", compMaterial : "", description : "Gain the services of a fey familiar; can see through its eyes; it can deliver touch spells; see B", duration : "\u00BD druid lvl h", changes : "By using my Wild Companion class feature, I can expend a use of wild shape to cast Find Familiar without material components. The familiar created this way always has the Fey type and disappears after a number of hours equal to half my druid level." } } } AddFeatureChoice(ClassList.druid.features["subclassfeature2.wild shape"], true, "Wild Companion", TCoE_Wild_Companion, "Optional 2nd-level druid features"); if (ClassSubList["druid-circle of the moon"]) { AddFeatureChoice(ClassSubList["druid-circle of the moon"].features["subclassfeature2.wild shape"], true, "Wild Companion", TCoE_Wild_Companion, "Optional 2nd-level druid features"); } AddFeatureChoice(ClassList.druid.features.druidic, true, "Cantrip Versatility", { name : "Cantrip Versatility", extraname : "Optional Druid 4", source : [["T", 35]], description : " [ASI = Ability Score Improvement]\n Whenever I gain an ASI from the druid class, I can change one druid cantrip for another", prereqeval : function (v) { return classes.known.druid.level >= 4 ? true : "skip"; } }, "Optional 4th-level druid features"); // Druid Subclasses AddSubClass("druid", "circle of the stars", { regExpSearch : /^(?=.*(druid|shaman))(?=.*circle)(?=.*stars).*$/i, subname : "Circle of the Stars", subnameShort: "Stars", source : [["T", 38]], features : { "subclassfeature2" : { name : "Star Map", source : [["T", 38]], minlevel : 2, description : desc([ "I've created a star map, a Tiny object which I can use as my spellcasting focus", "If I lose it, I can perform a 1-hour ceremony during a rest to create a replacement", "While holding it, I know the Guidance cantrip and always have Guiding Bolt prepared", "These count as druid spells, but do not count against the number of spells I can prepare", "I can cast Guiding Bolt without expending a spell slot my Proficiency Bonus per long rest" ]), spellcastingBonus : [{ name : "Star Map", spells : ["guidance"], selection : ["guidance"], }, { name : "Star Map", spells : ["guiding bolt"], selection : ["guiding bolt"], firstCol : "oncelr" }], additional : "Guiding Bolt", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature2.1" : { name : "Starry Form", source : [["T", 38]], minlevel : 2, description : desc([ "As a bonus action, I can expend a use of wild shape to take on a starry form for 10 min", "In that form I shed bright light in a 10-ft radius and dim light for an extra 10-ft radius", "When I do so, I choose one constellation that glimmers on my body, granting me benefits", 'See the 3rd page "Notes" section for the benefits of the possible constellations', ]), weaponOptions : [{ regExpSearch : /^(?=.*luminous)(?=.*arrow).*$/i, name : "Luminous Arrow", source : [["T", 38]], ability : 5, type : "Spell", damage : [1, 8, "radiant"], range : "60 ft", description : "Use as bonus action", abilitytodamage : true, useSpellMod : "druid", luminousarrow : true, selectNow : true }], extraname : "Starry Form", "archer constellation" : { name : "Archer Constellation", source : [["T", 38]], description : desc([ "As a bonus action, I can make a ranged spell attack to hurl a luminous arrow 60 ft", "I can also do this as part of the bonus action I use to assume the starry form" ]), additional : levels.map(function (n) { return n < 2 ? "" : (n < 10 ? 1 : 2) + "d8 + Wisdom modifier radiant damage"; }), action : [["bonus action", " (Luminous Arrow)"]] }, "chalice constellation" : { name : "Chalice Constellation", source : [["T", 39]], description : desc([ "When I cast a healing spell with a spell slot, I can heal myself or another within 30 ft of me" ]), additional : levels.map(function (n) { return n < 2 ? "" : (n < 10 ? 1 : 2) + "d8 + Wisdom modifier hit points restored"; }) }, "dragon constellation" : { name : "Dragon Constellation", source : [["T", 39]], description : desc([ "I can treat a roll below 10 as a 10 for Int/Wis checks and saves to maintain concentration", "From 10th-level onwards, I also gain a flying speed of 20 ft and can hover" ]) }, autoSelectExtrachoices : [{ extrachoice : "archer constellation" }, { extrachoice : "chalice constellation" }, { extrachoice : "dragon constellation" }] }, "subclassfeature6" : { name : "Cosmic Omen", source : [["T", 39]], minlevel : 6, description : desc([ "When I finish a long rest, I roll a die to gain an omen based on the result (odd/even)", "As a reaction when a creature I can see in 30 ft makes an attack, check, or save, I can:", " \u2022 Weal (even): add 1d6 to the number rolled for the attack, check, or save", " \u2022 Woe (odd): subtract 1d6 from the number rolled for the attack, check, or save" ]), action : [["reaction", ""]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature10" : { name : "Twinkling Constellations", source : [["T", 39]], minlevel : 10, description : desc([ "While in my starry form, I can change the constellation at the start of each of my turns", 'The benefit of my constellations improve, see the 3rd page "Notes" section', ]), calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.luminousarrow && fields.Damage_Die.indexOf('1d8') !== -1) { fields.Damage_Die = fields.Damage_Die.replace('1d8', '2d8'); }; }, '', 1 ] } }, "subclassfeature14" : { name : "Full of Stars", source : [["T", 39]], minlevel : 14, description: desc("While in my starry form, I have resistance to bludgeoning, piercing, and slashing damage"), dmgres : [ ["Bludgeoning", "Bludgeon. (in form)"], ["Piercing", "Piercing (in form)"], ["Slashing", "Slashing (in form)"] ] } } }); AddSubClass("druid", "circle of wildfire", { regExpSearch : /^(?=.*(druid|shaman))(?=.*wild.{0,1}fire).*$/i, subname : "Circle of Wildfire", subnameShort: "Wildfire", source : [["T", 39]], features : { "subclassfeature2" : { name : "Circle Spells", source : [["T", 39]], minlevel : 2, description : desc([ "My link to a wildfire spirit grants me access to spells, which count as druid spells to me", "These are always prepared, but don't count against the number of spells I can prepare" ]), spellcastingExtra : ["burning hands", "cure wounds", "flaming sphere", "scorching ray", "plant growth","revivify", "aura of life", "fire shield", "flame strike", "mass cure wounds"] }, "subclassfeature2.1" : { name : "Summon Wildfire Spirit", source : [["T", 40]], minlevel : 2, description : desc([ "As an action, I can expend a use of wild shape to summon a wildfire spirit within 30 ft", "All within 10 ft of where it manifests must make a Dex save or take 2d10 fire damage", "It is friendly and obeys my commands; It lasts for 1 hour, until it has 0 HP, or I die", "Unless I use a bonus action to command it, it only takes the Dodge action on its turn", "It can always take reactions and move on its turn; It acts on my initiative, after me", 'It disappears if I summon another; See "Wildfire Spirit" on a companion page for its stats', ]), action : [["action", ""], ["bonus action", "Command Wildfire Spirit"]], creaturesAdd : [["Wildfire Spirit", true]], creatureOptions : [{ name : "Wildfire Spirit", source : [["T", 40]], size : 4, type : "Elemental", alignment : "", ac : 13, hp : 20, hd : [], speed : "30 ft, fly 30 ft (hover)", scores : [10, 14, 14, 13, 15, 11], damage_immunities : "fire", condition_immunities : "charmed, frightened, grappled, prone, restrained", senses : "Darkvision 60 ft", passivePerception : 12, languages : "understands the languages of its creator", challengeRating : "1/2", proficiencyBonus : 2, proficiencyBonusLinked : true, attacksAction : 1, attacks : [{ name : "Flame Seed", ability : 5, damage : [1, 6, "fire"], range : "60 ft", description : "Ranged weapon attack", modifiers : ["", "Prof"], abilitytodamage : false, useSpellMod : "druid" }, { name : "Fiery Teleportation", ability : 5, damage : [1, 6, "fire"], range : "5-ft radius", description : "Dex save for all within 5 ft of teleportation origin, success - no damage; See traits", dc : true, modifiers : ["", "Prof"], abilitytodamage : false, useSpellMod : "druid" }, { name : "Fiery Manifestation", ability : 5, damage : [2, 6, "fire"], range : "10-ft radius", description : "Dex save for all within 10 ft where spirit is summoned, success - no damage", dc : true, abilitytodamage : false, useSpellMod : "druid" }], features : [{ name : "Creator", description : "The spirit obeys the commands of its creator and has the same proficiency bonus. It takes its turn immediately after its creator, on the same initiative count. It can move and take reactions on its own, but only takes the Dodge action on its turn unless its creator takes a bonus action to command it to take another action. If its creator is incapacitated, it can take any action, not just Dodge." }], actions : [{ name : "Fiery Teleportation", description : "The spirit and each willing creature of its creator's choice within 5 ft of it teleport up to 15 ft to unoccupied spaces its creator can see. Then each creature within 5 ft of the space that the spirit left must succeed on a Dexterity saving throw against its creator's spell save DC or take fire damage equal to 1d6 + its proficiency bonus." }], traits : [{ name : "Fiery Manifestation", description : "The spirit appears in an unoccupied space of its creator's choice that its creator can see within 30 ft. Each creature within 10 ft of the spirit (other than its creator) when it appears must succeed on a Dexterity saving throw against its creator's spell save DC or take 2d6 fire damage." }], header : "Wildfire", calcChanges : { hp : function (totalHD, HDobj, prefix) { if (!classes.known.druid) return; var drdLvl = classes.known.druid.level; var drdLvl5 = 5 * drdLvl; HDobj.alt.push(5 + drdLvl5); HDobj.altStr.push(" = 10 as a base\n + 5 \xD7 " + drdLvl + " from five times its creator's druid level (" + drdLvl5 + ")"); }, setAltHp : true } }] }, "subclassfeature6" : { name : "Enhanced Bond", source : [["T", 40]], minlevel : 6, description : desc([ "While my wildfire spirit is present, I can have my spells originate from it (no range 'self')", "Also, I can then add 1d8 to a single roll of my spells that restore HP or deal fire damage" ]) }, "subclassfeature10" : { name : "Cauterizing Flames", source : [["T", 40]], minlevel : 10, description : desc([ "As a reaction when a Small or larger creature dies within 30 ft of me or wildfire spirit,", "I can have a spectral flame erupt in its space that lasts for 1 minute", "As a reaction when I see a creature enter the flame's space, I can extinguish the flame", "This heals or deals fire damage to the creature (my choice) equal to 2d10 + my Wis mod" ]), action : [["reaction", ""]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature14" : { name : "Blazing Revival", source : [["T", 40]], minlevel : 14, description : desc([ "If I drop to 0 HP and don't die, and my wildfire spirit is within 120 ft, it can save me", "I can have it drop to 0 HP; I then regain half my HP and immediately rise to my feet" ]), usages : 1, recovery : "long rest" } } }); // >>>>>>>>>>>>>>>>>>>>>>> // // >>> Fighter Options >>> // // >>>>>>>>>>>>>>>>>>>>>>> // // Fighter Optional Class Features AddFightingStyle(["fighter", "ranger", "paladin"], "Blind Fighting", { name : "Blind Fighting Style", source : [["T", 41]], description : desc([ "I have blindsight with 10 ft range, allowing me to see anything not behind total cover", "In range, I can see invisible, but not hidden, things, even when blinded or in darkness" ]), vision : [["Blindsight", 10]] }); AddFightingStyle(["fighter", "paladin"], "Interception", { name : "Interception Fighting Style", source : [["T", 41], ["UA:CFV", 12]], description : desc([ "As a reaction when a creature I can see hits another within 5 ft of me, I can intercept", "I reduce the damage the target takes by 1d10 + my Proficiency Bonus (min 0 damage)", "I can't be the target and it requires me wielding a shield or a simple or martial weapon" ]), action : [["reaction", ""]] }); AddFightingStyle(["fighter", "ranger"], "Thrown Weapon Fighting", { name : "Thrown Weapon Fighting Style", source : [["T", 42]], description : desc([ "I can draw a weapon with the thrown property as part of the attack I make with it", "In addition, my ranged attacks made with thrown weapons deal +2 damage" ]), calcChanges : { atkAdd : [ function (fields, v) { if (v.isThrownWeapon && v.isMeleeWeapon) { fields.Description += (fields.Description ? '; ' : '') + '+2 damage when thrown'; }; }, "I deal +2 damage when I hit a ranged attack made with a thrown weapon." ], atkCalc : [ function (fields, v, output) { if (v.isThrownWeapon && !v.isMeleeWeapon) { output.extraDmg += 2; }; }, "" ] } }); AddFightingStyle(["fighter"], "Unarmed Fighting", { name : "Unarmed Fighting Style", source : [["T", 42]], description : desc([ "My unarmed strikes deal 1d6 damage, or 1d8 damage when I have both hands free", "At the start of my turn, I can deal 1d4 bludgeoning damage to one target I'm grappling" ]), calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == "unarmed strike") { if (fields.Damage_Die == 1 || fields.Damage_Die == "1d4") fields.Damage_Die = '1d6'; fields.Description += (fields.Description ? '; ' : '') + 'Versatile (d8)'; }; }, "My unarmed strikes deal 1d6 damage instead of 1, which increases to 1d8 if I have both hands free to make an unarmed strike with.", 1 ] } }); AddFeatureChoice(ClassList.fighter.features['action surge'], true, "Martial Versatility", { name : "Martial Versatility", extraname : "Optional Fighter 4", source : [["T", 42]], description : " [ASI = Ability Score Improvement]\n Whenever I gain an ASI from the fighter class, I can change a fighting style or a maneuver", prereqeval : function (v) { return classes.known.fighter.level >= 4 ? true : "skip"; } }, "Optional 4th-level fighter features"); // Fighter alternative class features and enhancements (only if Battle Master subclass exists) if (ClassSubList["fighter-battle master"]) { AddFightingStyle(["fighter"], "Superior Technique", { name : "Superior Technique", source : [["T", 41], ["UA:CFV", 5]], additional: "1 maneuver; d6, 1\xD7 per short rest", description : desc([ "I gain one superiority die (d6) that I can expend to fuel a special Maneuver", "I can only use one Maneuver per attack; DCs are 8 + Prof B. + Str/Dex mod, my choice", 'Use the "Choose Feature" button above to add a Maneuver to the third page' ]), bonusClassExtrachoices : [{ "class" : "fighter", "subclass" : "fighter-battle master", "feature" : "subclassfeature3.1", "bonus" : 1 }], extraLimitedFeatures : [{ name : "Combat Superiority", usages : 1, additional : 'd6', recovery : "short rest", addToExisting : true }] }); // New Maneuver options AddFeatureChoice(ClassSubList["fighter-battle master"].features["subclassfeature3.1"], true, "Ambush", { name : "Ambush", source : [["T", 42], ["UA:CFV", 5]], description : desc([ "When I make an initiative roll or a Dex (Stealth) check, I can add a superiority die to it", "I can't do this if I'm incapacitated" ]) }); AddFeatureChoice(ClassSubList["fighter-battle master"].features["subclassfeature3.1"], true, "Bait and Switch", { name : "Bait and Switch", source : [["T", 42]], description : desc([ "On my turn, I can expend a superiority die to swap places with an ally within 5 ft", "I can't do this if the ally is incapacitated or unwilling to swap", "Doing this costs me 5 ft of movement, but this doesn't provoke opportunity attacks", "Me or my ally (my choice) can then add the superiority die to AC until my next turn starts" ]) }); AddFeatureChoice(ClassSubList["fighter-battle master"].features["subclassfeature3.1"], true, "Brace", { name : "Brace", source : [["T", 42]], description : desc([ "As a reaction when a creature I can see moves within my melee reach, I can attack it", "I expend a superiority die and make one weapon attack, adding the die to the damage" ]), action : [["reaction", ""]] }); AddFeatureChoice(ClassSubList["fighter-battle master"].features["subclassfeature3.1"], true, "Commanding Presence", { name : "Commanding Presence", source : [["T", 42]], description: desc("When I make a Performance, Intimidation, or Persuasion check, I can add a superiority die") }); AddFeatureChoice(ClassSubList["fighter-battle master"].features["subclassfeature3.1"], true, "Grappling Strike", { name : "Grappling Strike", source : [["T", 42]], description : desc([ "Immediately after hitting with a melee attack, I can use a bonus action to try to grapple", "I add the superiority die to the Str (Athletics) check; I can only do this on my own turn" ]), action : [["bonus action", " (after melee hit)"]] }); AddFeatureChoice(ClassSubList["fighter-battle master"].features["subclassfeature3.1"], true, "Quick Toss", { name : "Quick Toss", source : [["T", 42]], description : desc([ "As a bonus action, I can use a superiority die to do a ranged attack with a thrown weapon", "I can draw a thrown weapon as part of making this attack; I add the die to the damage" ]), action : [["bonus action", ""]] }); AddFeatureChoice(ClassSubList["fighter-battle master"].features["subclassfeature3.1"], true, "Tactical Assessment", { name : "Tactical Assessment", source : [["T", 42]], description: desc("When I make an Investigation, History, or Insight check, I can add a superiority die to it") }); } // Fighter Subclasses AddSubClass("fighter", "psi warrior", { regExpSearch : /^(?=.*\bpsi(onic)?s?\b)(?=.*warrior).*$/i, subname : "Psi Warrior", source : [["T", 42]], fullname : "Psi Warrior", abilitySave : 4, features : { "subclassfeature3" : { name : "Psionic Energy Dice", source : [["T", 43]], minlevel : 3, description : desc([ "I gain twice my proficiency bonus of psionic energy dice (PsiD) that fuel my psionics", "I regain all expended psionic energy dice after a long rest", "As a bonus action once per short rest, I can regain one expended psionic energy die" ]), additional : levels.map(function(n) { return n < 3 ? "" : n < 5 ? "d6" : n < 11 ? "d8" : n < 17 ? "d10" : "d12"; }), action : [["bonus action", "Regain 1 Psionic Energy Die"]], usages : "Proficiency Bonus \xD7 2 per ", usagescalc : "event.value = Number(How('Proficiency Bonus'))*2", recovery : "long rest", extraLimitedFeatures : [{ name : "Regain 1 Psionic Energy die", usages : 1, recovery : "short rest" }] }, "subclassfeature3.1" : { name : "Psionic Power: Protective Field", source : [["T", 43]], minlevel : 3, additional: "1 psionic energy die", description : desc([ "As a reaction when I or a creature I can see within 30 ft takes damage, I can reduce it", "I reduce the damage by the roll of the one psionic energy die I expend + my Int mod" ]), action : [["reaction", "Protective Field"]] }, "subclassfeature3.2" : { name : "Psionic Power: Psionic Strike", source : [["T", 43]], minlevel : 3, additional: "1 psionic energy die", description : desc([ "Once on each of my turns after I hit a target in 30 ft and damage it with a weapon,", "I can expend a psionic energy die to deal it the die roll + my Int mod in force damage" ]) }, "subclassfeature3.3" : { name : "Psionic Power: Telekinetic Movement", source : [["T", 43]], minlevel : 3, description : desc([ "As an action, I can move a Large or smaller loose object or one willing creature in 30 ft", "I must be able to see the target and can move it up to 30 ft to an empty space I can see", "If it is a Tiny object, I can also move it to or from my hand; I can't move myself this way", "I can do this once per short rest, or by expending a psionic energy die (PsiD)" ]), limfeaname : "Telekinetic Movement", action : [["action", ""]], usages : 1, recovery : "short rest", altResource : "PsiD" }, "subclassfeature7.1" : { name : "Telekinetic Adept: Psi-Powered Leap", source : [["T", 43]], minlevel : 7, description : desc([ "As a bonus action, I gain a flying speed of twice my walking speed until the turn ends", "I can do this once per short rest, or by expending a psionic energy die (PsiD)" ]), limfeaname : "Psi-Powered Leap", action : [["bonus action", ""]], usages : 1, recovery : "short rest", altResource : "PsiD" }, "subclassfeature7.2" : { name : "Telekinetic Adept: Telekinetic Thrust", source : [["T", 43]], minlevel : 7, additional: "DC 8 + Prof B. + Int mod", description : desc([ "When I deal damage with my Psionic Strike, I can have the target make a Strength save", "If failed, I knock the target prone or move it up to 10 ft in any direction horizontally" ]), }, "subclassfeature10" : { name : "Guarded Mind", source : [["T", 43]], minlevel : 10, description : desc([ "I can expend a psionic energy die to end all effects on me causing charmed or frightened", "I can do this if at the start of my turn; I also gain resistance to psychic damage" ]), dmgres : ["Psychic"] }, "subclassfeature15" : { name : "Bulwark of Force", source : [["T", 44]], minlevel : 15, description : desc([ "As a bonus action, I can choose up to my Int mod of creatures (min 1) I can see in 30 ft", "This can include me; Each chosen gains half cover for 1 minute or until I'm incapacitated", "I can do this once per long rest, or by expending a psionic energy die (PsiD)" ]), action : [["bonus action", ""]], usages : 1, recovery : "long rest", altResource : "PsiD" }, "subclassfeature18" : { name : "Telekinetic Master", source : [["T", 44]], minlevel : 18, description : desc([ "I can cast Telekinesis, requiring no spell slot or components, with Int spellcasting ability", "As a bonus action while concentrating on this spell, I can make one weapon attack", "I can cast Telekinesis once per long rest, or by expending a psionic energy die (PsiD)" ]), spellcastingBonus : [{ name : "Telekinetic Master", spells : ["telekinesis"], selection : ["telekinesis"], firstCol : "oncelr" }], spellChanges : { "telekinesis" : { components : "", changes : "Using Telekinetic Master, I can cast Telekinesis without requiring components or spell slots." } }, action : [["bonus action", "Weapon Attack while Telekinesis conc."]], usages : 1, recovery : "long rest", altResource : "PsiD" } } }); AddSubClass("fighter", "rune knight", { regExpSearch : /^(?=.*rune)(?=.*knight).*$/i, subname : "Rune Knight", source : [["T", 44]], fullname : "Rune Knight", abilitySave : 3, features : { "subclassfeature3" : { name : "Bonus Proficiencies", source : [["T", 44]], minlevel : 3, description: desc("I gain proficiency with smith's tools and I learn to speak, read, and write Giant"), toolProfs : ["Smith's tools"], languageProfs : ["Giant"] }, "subclassfeature3.1" : { name : "Rune Carver", source : [["T", 44]], minlevel : 3, description : desc([ "I learn how to use magic runes to enhance my gear that I can wear or hold in my hand", 'Use the "Choose Feature" button above to select a rune and add it to the third page', "When I finish a long rest, I can inscribe each rune I know upon a different item I touch", "Each item can hold only one rune and remains there until I finish a long rest", "Runes inscribed on a carried object grant both a passive and a limited-use active effect", "Whenever I gain a fighter level, I can swap a rune I know for another", "The DC for a rune's abilities is 8 + my Proficiency bonus + my Constitution modifier" ]), additional : levels.map(function (n){ return n < 3 ? "" : (n < 7 ? 2 : n < 10 ? 3 : n < 15 ? 4 : 5) + " runes known" }), extraTimes : levels.map(function (n) { return n < 3 ? 0 : n < 7 ? 2 : n < 10 ? 3 : n < 15 ? 4 : 5; }), extraname : "Rune Knight 3", extrachoices : ["Cloud Rune", "Fire Rune", "Frost Rune", "Stone Rune", "Hill Rune (prereq: level 7 fighter)", "Storm Rune (prereq: level 7 fighter)"], "cloud rune" : { name : "Cloud Rune", source : [["T", 44]], description : desc([ "While I wear an object inscribed with this, I gain a deceptiveness reminiscent of cloud giants", "I always gain advantage on Dexterity (Sleight of Hand) and Charisma (Deception) checks", "As a reaction when I or another I can see within 30 ft is hit by an attack, I can invoke this", "I select another target for the attack within 30 ft of me, using the same roll (ignore range)" ]), action : [["reaction", " (invoke)"]], additional : "invoke", usages : ["", "", 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2], recovery : "short rest", advantages : [ ["Sleight of Hand", true], ["Deception", true] ] }, "fire rune" : { name : "Fire Rune", source : [["T", 44]], description : desc([ "While I wear an object inscribed with this, I gain craftsmanship reminiscent of great smiths", "I always double my proficiency bonus when making an ability check with a tool", "When I hit a creature with a weapon attack, I can invoke it to summon fiery shackles", "It takes an extra 2d6 fire damage and must make a Str save or be restrained for 1 min", "While restrained, the creature takes 2d6 fire damage at the start of each of its turns", "It can repeat the save at the end of each of its turns, banishing the shackles on a success" ]), additional : "invoke", usages : ["", "", 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2], recovery : "short rest", skillstxt : "expertise with all tools I am proficient with", eval : function () { Checkbox('Too Exp', true); }, removeeval : function () { Checkbox('Too Exp', false); } }, "frost rune" : { name : "Frost Rune", source : [["T", 45]], description : desc([ "While I wear an object inscribed with this, I gain might of those surviving wintry wilderness", "I always gain advantage on Wisdom (Animal Handling) and Charisma (Intimidation) checks", "As a bonus action, I can invoke this to gain +2 on Str and Con checks and saves for 10 min" ]), action : [["bonus action", " (invoke)"]], additional : "invoke", usages : ["", "", 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2], recovery : "short rest", advantages : [ ["Animal Handling", true], ["Intimidation", true] ] }, "stone rune" : { name : "Stone Rune", source : [["T", 45]], description : desc([ "While I wear an object inscribed with this, I gain judiciousness reminiscent of stone giants", "I always gain advantage on Wisdom (Insight) checks and I gain darkvision out to 120 ft", "As a reaction when a creature I can see ends it turn within 30 ft, I can invoke this rune", "This causes the creature to make a Wisdom save or be charmed by me for 1 minute", "While charmed, it descends into a dreamy stupor, becoming incapacitated and has speed 0", "It can repeat the save at the end of each of its turns, ending the effect on a success" ]), action : [["reaction", " (invoke)"]], additional : "invoke", usages : ["", "", 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2], recovery : "short rest", vision : [["Darkvision", 120]], advantages : [ ["Insight", true] ] }, "hill rune (prereq: level 7 fighter)" : { name : "Hill Rune", source : [["T", 45]], description : desc([ "While I wear an object inscribed with this rune, I gain a resilience reminiscent of hill giants", "I always gain advantage on saves against being poisoned and resistance to poison damage", "As a bonus action, I can invoke it to gain resistance to bludg/slash/pierc damage for 1 min" ]), prereqeval : function(v) { return classes.known.fighter.level >= 7; }, action : [["bonus action", " (invoke)"]], additional : "invoke", usages : ["", "", 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2], recovery : "short rest", dmgres : ["Poison"], savetxt : { adv_vs : ["poison"] } }, "storm rune (prereq: level 7 fighter)" : { name : "Storm Rune", source : [["T", 45]], description : desc([ "While I wear an object inscribed with this rune, I can glimpse the future like storm giants", "I always gain adv. on Int (Arcana) checks and I can't be surprised while not incapacitated", "As a bonus action, I can invoke it to enter a prophetic state for 1 min or till incapacitated", "While in this state, I can use a reaction to cause a roll to gain advantage or disadvantage", "I can do this for attacks, saves, and checks of myself or others I can see within 60 ft of me" ]), prereqeval : function(v) { return classes.known.fighter.level >= 7; }, action : [["bonus action", " (invoke)"]], additional : "invoke", usages : ["", "", 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2], recovery : "short rest", advantages : [ ["Arcana", true] ], savetxt : { immune : ["surprised"] }, } }, "subclassfeature3.2" : { name : "Giant's Might", source : [["T", 45]], minlevel : 3, description : desc([ "As a bonus action, I can imbue myself with giant magic for 1 minute and gain benefits:", " \u2022 Space permitted, I grow to a larger size category along with everything I'm wearing", " \u2022 I have advantage on my Strength check and saves", " \u2022 My weapon and unarmed strike attacks deal extra damage" ]), additional : levels.map(function (n) { return n < 3 ? "" : (n < 18 ? "Large" : "Huge") + ", +1d" + (n < 10 ? 6 : n < 18 ? 8 : 10) + " damage" }), action : [["bonus action", ""]], savetxt : { text : ["Adv. on Str saves in Giant's Might"] }, usages : "Prof Bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.fighter && classes.known.fighter.level >= 3 && v.isWeapon && (/giant('s)? might/i).test(v.WeaponTextName)) { var GMdmgDie = classes.known.fighter.level < 10 ? 'd6' : classes.known.fighter.level < 18 ? 'd8' : 'd10'; var dmgDieRx = RegExp('(\\d+)' + GMdmgDie, 'i'); if (dmgDieRx.test(fields.Damage_Die)) { var dmgDieMatch = fields.Damage_Die.match(dmgDieRx); fields.Damage_Die = fields.Damage_Die.replace(dmgDieRx, Number(dmgDieMatch[1]) + 1 + GMdmgDie); fields.Description = fields.Description.replace(/Versatile \((\d+d\d+)\)/i, 'Versatile ($1+1' + GMdmgDie + ')'); } else if (!isNaN(fields.Damage_Die)) { fields.Damage_Die = 1 + GMdmgDie + "+" + fields.Damage_Die; } else { fields.Description += (fields.Description ? '; ' : '') + '+1' + GMdmgDie + ' damage'; } if (classes.known.fighter.level >= 18 && v.isMeleeWeapon) fields.Description += (fields.Description ? '; ' : '') + '+5 ft reach'; }; }, "If I include the words \"Giant Might\" in the name of a weapon or unarmed strike, it gets treated as a weapon that I use while imbued by my Giant's Might feature. It adds +1d6 weapon damage. From 10th-level onwards, this increases to +1d8 damage. From 18th-level onwards, this increases to +1d10 damage and my reach increases by 5 ft (for melee weapons).", 8 ] } }, "subclassfeature7" : { name : "Runic Shield", source : [["T", 45]], minlevel : 7, description : desc([ "As a reaction when I see a creature within 60 ft get hit by an attack, I can protect it", "The attacker must reroll its attack roll and use the new roll" ]), action : [["reaction", ""]] }, "subclassfeature10" : { name : "Great Stature", source : [["T", 46]], minlevel : 10, description : desc([ "My runes permanently make me grow; I add 3d4 inches to my length", "In addition, the extra weapon damage I deal with Giant Might increases to 1d8" ]) }, "subclassfeature15" : { name : "Master of Runes", source : [["T", 46]], minlevel : 15, description: desc("I can now invoke each of my runes twice per short rest instead of once") }, "subclassfeature18" : { name : "Runic Juggernaut", source : [["T", 46]], minlevel : 18, description : desc([ "Giant's Might now adds +1d10 weapon damage, and can make me grow up to Huge", "While I'm Huge, my reach increases by 5 ft" ]) } } }); // >>>>>>>>>>>>>>>>>>>> // // >>> Monk Options >>> // // >>>>>>>>>>>>>>>>>>>> // // Monk Optional Class Features AddFeatureChoice(ClassList.monk.features.ki, true, "Dedicated Weapon", { name : "Dedicated Weapon", extraname : "Optional Monk 2", source : [["T", 48]], description : desc([ "When I finish a short or long rest, I can focus ki and touch one simple or martial weapon", "From then on, until I use this feature again, this weapon counts as a monk weapon for me", "I have to be proficient with the weapon and it can't have the heavy or special property" ]), calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.monkweapon && !v.theWea.special && classes.known.monk && classes.known.monk.level && (/dedicated/i).test(v.WeaponTextName) && fields.Proficiency && (/simple|martial/i).test(v.theWea.type) && !(/\b(heavy|special)\b/i).test(fields.Description)) { v.theWea.monkweapon = true; }; }, 'If I include the word "Dedicated" in the name of a simple or martial weapon that I\'m proficient with and that doesn\'t have the heavy or special property, it will be treated as a monk weapon.', 1 ] } }, "Optional 2nd-level monk features"); AddFeatureChoice(ClassList.monk.features["unarmored movement"], true, "Ki-Fueled Attack", { name : "Ki-Fueled Attack", extraname : "Optional Monk 3", source : [["T", 48]], description : desc([ "If I use any ki points during my action on my turn, I can make an attack as a bonus action", "This attack has to be in the same turn and with an unarmed strike or a monk weapon" ]), action : [["bonus action", ""]] }, "Optional 3rd-level monk features"); AddFeatureChoice(ClassList.monk.features["deflect missiles"], true, "Quickened Healing (2 ki points)", { name : "Quickened Healing", extraname : "Optional Monk 4", source : [["T", 49]], description : " [2 ki points]\n As an action, I can regain HP equal to the roll of my martial arts die + Proficiency Bonus", action : [["action", ""]] }, "Optional 4th-level monk features"); AddFeatureChoice(ClassList.monk.features["slow fall"], true, "Focused Aim (1-3 ki points)", { name : "Focused Aim", extraname : "Optional Monk 5", source : [["T", 49]], description : " [1-3 ki points]\n When I miss an attack roll, I can spend ki to increase the roll by +2 per ki point (max +6)", prereqeval : function (v) { return classes.known.monk.level >= 5 ? true : "skip"; } }, "Optional 5th-level monk features"); // Monk Subclasses AddSubClass("monk", "way of mercy", { regExpSearch : /^(?=.*mercy)((?=.*(monk|monastic))|((?=.*martial)(?=.*(artist|arts)))|((?=.*spiritual)(?=.*warrior))).*$/i, subname : "Way of Mercy", subnameShort: "Mercy", source : [["T", 49]], features : { "subclassfeature3" : { name : "Implements of Mercy", source : [["T", 49]], minlevel : 3, description : desc([ "I gain proficiency with Insight, Medicine, and herbalism kit; I have a special Merciful Mask" ]), skills : ["Insight", "Medicine"], toolProfs : ["Herbalism kit"], "hands of healing" : { name : "Hands of Healing", extraname : "Way of Mercy 3", source : [["T", 49]], description : levels.map(function (n) { var a = "As an action, I can spend 1 ki point to touch a creature and restore a number of its HP"; var b6 = "It also recovers from one disease or being blinded, deafened, paralyzed, poisoned or stunned"; var c = "When I use Flurry of Blows, I can do this instead of one unarmed strike (no extra ki cost)"; return desc( n < 6 ? [a, c] : [a, b6, n < 11 ? c : c.replace("one", "each")] ); }), action : [["action", ""]], additional : levels.map(function (n) { return n < 3 ? "" : "1 ki point; heal 1d" + (n < 5 ? 4 : n < 11 ? 6 : n < 17 ? 8 : 10) + " + Wisdom modifier"; }) }, "hands of harm" : { name : "Hands of Harm", extraname : "Way of Mercy 3", source : [["T", 50]], description : levels.map(function (n) { var a = "When I hit a creature with an unarmed strike, I can spend 1 ki point to deal extra damage"; var b6 = "I can also subject the target to the poisoned condition until the end of my next turn"; var c11 = "When I use Flurry of Blows, I can do this with one unarmed strike (no extra ki cost)"; var d = "I can use this feature only once per turn"; return desc( n < 6 ? [a, d] : n < 11 ? [a, b6, d] : [a, b6, c11, d] ); }), additional : levels.map(function (n) { return n < 3 ? "" : "1 ki point; 1d" + (n < 5 ? 4 : n < 11 ? 6 : n < 17 ? 8 : 10) + " + Wis mod necrotic damage"; }) }, autoSelectExtrachoices : [{ extrachoice : "hands of healing" }, { extrachoice : "hands of harm" }] }, "subclassfeature6" : { name : "Physician's touch", source : [["T", 50]], minlevel : 6, description : desc([ "Hand of Healing also ends 1 disease, blinded, deafened, paralyzed, poisoned or stunned", "Hand of Harm also causes target to be poisoned until the end of my next turn" ]) }, "subclassfeature11" : { name : "Flurry of Healing and Harm", source : [["T", 50]], minlevel : 11, description : desc([ "I can use Hand of Healing instead of each Flurry of Blows unarmed strike without ki cost", "I can use Hand of Harm on one Flurry of Blows unarmed strike without ki cost" ]), "hand of ultimate mercy" : { name : "Hand of Ultimate Mercy", extraname : "Way of Mercy 17", source : [["T", 50]], description : desc([ "As an action, I can spend 5 ki points and touch a creature that died in the last 24 hours", "The creature returns to life and regains 4d10 + my Wisdom modifier in hit points", "It is also cured of all these conditions: blinded, deafened, paralyzed, poisoned, and stunned" ]), action : [["action", ""]], additional : "5 ki points", usages : 1, recovery : "long rest" }, autoSelectExtrachoices : [{ extrachoice : "hand of ultimate mercy", minlevel : 17 }] } } }); AddSubClass("monk", "way of the astral self", { regExpSearch : /^(?=.*astral)(?=.*(self|projection|travel))((?=.*(monk|monastic))|((?=.*martial)(?=.*(artist|arts)))|((?=.*spiritual)(?=.*warrior))).*$/i, subname : "Way of the Astral Self", subnameShort: "Astral Self", source : [["T", 50]], features : { "subclassfeature3" : { name : "Arms of the Astral Self", source : [["T", 50]], minlevel : 3, description : ' [1 ki; see 3rd page "Notes"]' + desc([ "As a bonus action, I can use my ki to summon the arms of my astral self for 10 minutes" ]), action : [["bonus action", "Summon Astral Arms"]], weaponOptions : [{ baseWeapon : "unarmed strike", regExpSearch : /^(?=.*\bastral\b)(?=.*\barms?\b).*$/i, name : "Astral Arms", source : [["T", 50]], ability : 5, range : "Melee (+5 ft)", damage : [1, "", "Force"], description : "+5 ft reach; Uses Str, Dex, or Wis", isAstralArms : true, selectNow : true }], "astral arms" : { name : "Astral Arms", extraname : "Way of the Astral Self 3", source : [["T", 50]], description : desc([ "As a bonus action, I can summon my astral arms to hover next to or over my own arms", "When I summon them, all creatures of my choice I can see in 10 ft must make a Dex save", "If failed, they take twice my martial arts die in force damage", "I can use the arms to make unarmed strikes, using Wisdom instead of Strength/Dexterity", "I have +5 ft reach on attacks made with my astral arms and they deal force damage", "They last for 10 minutes or until I'm incapacitated or die; I choose their appearance" ]), additional : levels.map(function (n) { return n < 3 ? "" : "1 ki point; 2d" + (n < 5 ? 4 : n < 11 ? 6 : n < 17 ? 8 : 10) + " force damage on summon"; }) }, autoSelectExtrachoices : [{ extrachoice : "astral arms" }] }, "subclassfeature6" : { name : "Visage of the Astral Self", source : [["T", 50]], minlevel : 6, description : ' [1 ki; see 3rd page "Notes"]' + desc([ "As a bonus action, I can use my ki to summon the visage of my astral self for 10 minutes" ]), action : [["bonus action", "Summon Astral Arms and/or Visage", "Summon Astral Arms"]], "astral visage" : { name : "Astral Visage", extraname : "Way of the Astral Self 6", source : [["T", 50]], additional: "1 ki point", description : desc([ "As a bonus action (or when summoning my astral arms), I can summon my astral visage", "It lasts for 10 minutes or until I'm incapacitated or die; I choose its appearance", "My astral visage covers my face like a helmet or mask and grants me the following benefits:", " \u2022 Astral Sight: I can see normally in normal and magical darkness to a distance of 120 ft", " \u2022 Wisdom of the Spirit: I have advantage on Wisdom (Insight) and Charisma (Intimidation)", " \u2022 Word of the Spirit: I can have only one target I can see in 60 ft hear me, or all in 300 ft" ]) }, autoSelectExtrachoices : [{ extrachoice : "astral visage" }] }, "subclassfeature11" : { name : "Body of the Astral Self", source : [["T", 51]], minlevel : 11, description : ' [see 3rd page "Notes"]' + desc([ "When I have both my astral arms and visage summoned, my astral body appears as well", "This spectral body covers me like an armor, connecting my astral arms and astral visage" ]), action : [["reaction", "Deflect Energy"]], "astral body" : { name : "Astral Body", extraname : "Way of the Astral Self 11", source : [["T", 51]], description : " [if both astral arms \u0026 visage are present]" + desc([ " \u2022 Deflect Energy: As a reaction when I take damage, I can reduce it by 1d10 + Wis mod", " I can only do this if the damage I take is acid, cold, fire, force, lightning, or thunder", " \u2022 Empowered Arms: Once per my turn, I can add martial art die to astral arms damage" ]) }, autoSelectExtrachoices : [{ extrachoice : "astral body" }], calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.isAstralArms && classes.known.monk && classes.known.monk.level) { var aMonkDie = function (n) { return n < 5 ? 4 : n < 11 ? 6 : n < 17 ? 8 : 10; }(classes.known.monk.level); fields.Description += (fields.Description ? '; ' : '') + 'Once on each of my turns +1d' + aMonkDie + ' damage'; } }, "Once on each of my turns when I hit a target with my astral arms, I can add my martial arts die to the damage dealt." ] } }, "subclassfeature17" : { name : "Awakened Astral Self", source : [["T", 51]], minlevel : 17, description : ' [5 ki; see 3rd page "Notes"]' + desc([ "As a bonus action, I can use 5 ki points to summon astral arms and visage with benefits" ]), action : [["bonus action", ""]], "astral body" : { name : "Awakened Astral Self", extraname : "Way of the Astral Self 17", source : [["T", 50]], additional: "5 ki points", description : desc([ "As a bonus action, I can summon my astral arms and astral visage, with extra benefits:", " \u2022 Armor of the Spirit: I gain a +2 bonus to my armor class", " \u2022 Astral Barrage: I can do three attacks with the Attack action, if all are with astral arms", "This lasts for 10 minutes or until I'm incapacitated or die" ]) }, autoSelectExtrachoices : [{ extrachoice : "astral body" }] } } }); // >>>>>>>>>>>>>>>>>>>>>>> // // >>> Paladin Options >>> // // >>>>>>>>>>>>>>>>>>>>>>> // // Paladin Optional Class Features AddFeatureChoice(ClassList.paladin.features.spellcasting, true, "Additional Paladin Spells", { name : "Additional Paladin Spells", extraname : "Optional Paladin 2", source : [["T", 52]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "paladin" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["gentle repose", "prayer of healing", "warding bond"]); }, "This optional class feature expands the spell list of the paladin class with the following spells (spell level in brackets): Gentle Repose (2), Prayer of Healing (2), and Warding Bond (2)." ] } }, "Optional 2nd-level paladin features"); // Blind Fighting & Interception already added in the Fighter Options section AddFightingStyle(["paladin"], "Blessed Warrior", { name : "Blessed Warrior Fighting Style", source : [["T", 52], ["UA:CFV", 6]], description : desc([ "I learn two cleric cantrips that count as paladin spells for me and use Cha for spellcasting", "Whenever I gain a paladin level, I can swap one of these for another cleric cantrip" ]), spellcastingBonus : [{ name : "Blessed Warrior", "class" : "cleric", level : [0, 0], times : 2 }] }); AddFeatureChoice(ClassList.paladin.features["subclassfeature3.0-channel divinity"], true, "Harness Divine Power", { name : "Channel Divinity: Harness Divine Power", extraname : "Optional Paladin 3", source : [["T", 52]], description : desc([ "As a bonus action, I can expend a use of my channel divinity to regain one used spell slot", "The level of this spell slot can be no more than half my Proficiency Bonus (rounded up)", "I can only do this so many times per long rest, even if I have uses of channel divinity left" ]), action : [["bonus action", ""]], usages : levels.map(function(n) { return n < 3 ? "" : n < 7 ? 1 : n < 15 ? 2 : 3; }), recovery : "long rest" }, "Optional 3rd-level paladin features"); AddFeatureChoice(ClassList.paladin.features['divine health'], true, "Martial Versatility", { name : "Martial Versatility", extraname : "Optional Paladin 4", source : [["T", 53]], description : " [ASI = Ability Score Improvement]\n Whenever I gain an ASI from the paladin class, I can change my paladin fighting style", prereqeval : function (v) { return classes.known.paladin.level >= 4 ? true : "skip"; } }, "Optional 4th-level paladin features"); // Paladin Subclasses AddSubClass("paladin", "oath of the watchers", { regExpSearch : /^(?=.*watchers)((?=.*paladin)|((?=.*(exalted|sacred|holy|divine))(?=.*(knight|fighter|warrior|warlord|trooper)))).*$/i, subname : "Oath of the Watchers", subnameShort: "Watchers", source : [["T", 54]], features : { "subclassfeature3" : { name : "Channel Divinity: Watcher's Will", source : [["T", 55]], minlevel : 3, description: desc("As an action, Cha mod of creatures I see in 30 ft adv. on Int/Wis/Cha saves for 1 min"), action : [["action", ""]], spellcastingExtra : ["alarm", "detect magic", "moonbeam", "see invisibility", "counterspell", "nondetection", "aura of purity", "banishment", "hold monster", "scrying"] }, "subclassfeature3.1" : { name : "Channel Divinity: Abjure the Extraplanar", source : [["T", 55]], minlevel : 3, description : desc([ "As an action, all aberration, celestial, elemental, fey, fiend in 30 ft must make Wis save", "Succeeds if it can't hear me; On fail, turned for 1 minute or until it takes any damage", "Turned: move away, never within 30 ft of me, no reactions or actions other than Dash", "Turned: may Dodge instead of Dash when nowhere to move and unable to escape bonds" ]), action : [["action", ""]] }, "subclassfeature7" : { name : "Aura of the Sentinel", source : [["T", 55]], minlevel : 7, description: desc("If I'm not incapacitated, chosen creatures in range and I add my Prof Bonus to Initiative"), additional : levels.map(function (n) { return n < 7 ? "" : (n < 18 ? 10 : 30) + "-foot aura"; }), addMod : [{ type : "skill", field : "Init", mod : "prof", text : "I can add my Proficiency Bonus to initiative rolls." }] }, "subclassfeature15" : { name : "Vigilant Rebuke", source : [["T", 55]], minlevel : 15, description : desc([ "As a reaction when I or another I can see succeeds a Int, Wis, or Cha save, I can rebuke", "The creature that forced the saving throw takes 2d8 + my Charisma mod force damage" ]), action : [["reaction", ""]] }, "subclassfeature20" : { name : "Mortal Bulwark", source : [["T", 55]], minlevel : 20, description : desc([ "As a bonus action, I can gain the following benefits for 1 minute:", " \u2022 Truesight 120 ft; Adv. on attacks vs. aberrations, celestials, elementals, fey, and fiends", " \u2022 When I hit and damage a creature with an attack, I can banish it if it fails a Cha save", " It's banished to its native plane if not there now; It's immune for 24 hours on a success", "I can do this once per long rest, or by expending a 5th-level or higher spell slot (SS 5+)" ]), recovery : "long rest", usages : 1, altResource : "SS 5+", action : [["bonus action", ""]] } } }); // >>>>>>>>>>>>>>>>>>>>>>> // // >>> Ranger Options >>> // // >>>>>>>>>>>>>>>>>>>>>>> // // Ranger Optional Class Features var TCoE_Deft_Explorer = function () { var a = { name : "Deft Explorer: Canny", source : [["T", 56]], description: desc("I learn two languages and gain expertise with one skill I'm proficient with"), languageProfs : [2], skillstxt : "Expertise with one skill I'm proficient with", additional : "extra benefits at 6th and 10th level", extraTimes : [1], extraname : "Canny (select skill for expertise)", extrachoices : ["Acrobatics", "Animal Handling", "Arcana", "Athletics", "Deception", "History", "Insight", "Intimidation", "Investigation", "Medicine", "Nature", "Perception", "Performance", "Persuasion", "Religion", "Sleight of Hand", "Stealth", "Survival"], "roving benefit" : { name : "Roving", extraname : "Deft Explorer Benefit 6", source : [["T", 56]], description: desc("I gain +5 ft walking speed and climbing and swimming speed equal to my walking speed"), speed : { walk : { spd : "+5", enc : "+5" }, climb : { spd : "walk", enc : "walk" }, swim : { spd : "walk", enc : "walk" } } }, "tireless benefit" : { name : "Tireless", extraname : "Deft Explorer Benefit 10", source : [["T", 56]], description : desc([ "Whenever I finish a short rest, I reduce my exhaustion level, if any, by 1", "As an action a number of times per long rest, I can give myself temp HP of 1d8 + Wis mod" ]), action : [["action", ""]], additional : "1d8 + Wis Mod", usages : "Prof Bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, autoSelectExtrachoices : [{ extrachoice : "roving benefit", minlevel : 6 }, { extrachoice : "tireless benefit", minlevel : 10 }] } for (var i = 0; i < a.extrachoices.length; i++) { var attr = a.extrachoices[i].toLowerCase(); a[attr] = { name : a.extrachoices[i] + " Expertise", extraname : "Deft Explorer Benefit 1", description : "", source : a.source, skills : [[a.extrachoices[i], "only"]], prereqeval : function(v) { return v.skillProfsLC.indexOf(v.choice) === -1 ? false : v.skillExpertiseLC.indexOf(v.choice) === -1 ? true : "markButDisable"; } } } return a; }(); CreateClassFeatureVariant("ranger", "natural explorer", "Deft Explorer", TCoE_Deft_Explorer); var TCoE_Favored_Foe = { name : "Favored Foe", source : [["T", 56]], description : desc([ "When I hit a creature with an attack roll, I can mark it as my favored enemy for 1 min", "I deal extra damage to it when I mark it and the first time I hit a marked on my turn", "Keeping a creature marked as favored enemy requires me to concentrate, like on a spell" ]), additional : levels.map(function (n) { return "+1d" + (n < 6 ? 4 : n < 14 ? 6 : 8) + " damage"; }), usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", calcChanges : { atkAdd : [ function (fields, v) { if (!v.isSpell && (classes.known.rangerua || classes.known.ranger) && /favou?red.{1,2}(foe|enemy)/i.test(v.WeaponTextName)) { var rngrLvl = classes.known.ranger ? classes.known.ranger.level : classes.known.rangerua.level; fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +1d' + (rngrLvl < 6 ? 4 : rngrLvl < 14 ? 6 : 8) + ' damage'; }; }, 'If I include the words "Favored Foe" or "Favored Enemy" in the name of a weapon, it gets the bonus damage I do against marked favored enemies added to its description.' ] } }; CreateClassFeatureVariant("ranger", "favored enemy", "Favored Foe", TCoE_Favored_Foe); var TCoE_Additional_Ranger_Spells = { name : "Additional Ranger Spells", extraname : "Optional Ranger 2", source : [["T", 57]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if ((spName !== "ranger" && spName !== "rangerua") || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["entangle", "searing smite", "aid", "enhance ability", "gust of wind", "magic weapon", "elemental weapon", "meld into stone", "revivify", "dominate beast", "greater restoration"]); }, "This optional class feature expands the spell list of the ranger class with the following spells (spell level in brackets): Entangle (1), Searing Smite (1), Aid (2), Enhance Ability (2), Gust of Wind (2), Magic Weapon (2), Elemental Weapon (3), Meld into Stone (3), Revivify (3), Dominate Beast (4), and Greater Restoration (5)." ] }, prereqeval : function (v) { return (classes.known.ranger && classes.known.ranger.level >= 2) || (classes.known.rangerau && classes.known.rangerau.level >= 2) ? true : "skip"; } }; AddFeatureChoice(ClassList.ranger.features.spellcasting, true, "Additional Ranger Spells (prereq: level 2 ranger)", TCoE_Additional_Ranger_Spells, "Optional ranger features"); // Blind Fighting & Thrown Weapon Fighting already added in the Fighter Options section AddFightingStyle(["ranger"], "Druidic Warrior", { name : "Druidic Warrior Fighting Style", source : [["T", 57], ["UA:CFV", 7]], description : desc([ "I learn two druid cantrips that count as ranger spells for me and use Wis for spellcasting", "Whenever I gain a ranger level, I can swap one of these for another druid cantrip" ]), spellcastingBonus : [{ name : "Druidic Warrior", "class" : "druid", level : [0, 0], times : 2 }] }); var TCoE_Ranger_Spellcasting_Focus = { name : "Spellcasting Focus", extraname : "Optional Ranger 2", source : [["T", 57], ["UA:CFV", 8]], description: desc("I can use a druidic focus as a spellcasting focus for my ranger spells"), prereqeval : function (v) { return (classes.known.ranger && classes.known.ranger.level >= 2) || (classes.known.rangerau && classes.known.rangerau.level >= 2) ? true : "skip"; } }; AddFeatureChoice(ClassList.ranger.features.spellcasting, true, "Spellcasting Focus (prereq: level 2 ranger)", TCoE_Ranger_Spellcasting_Focus, "Optional ranger features"); var TCoE_Primal_Awareness = { name : "Primal Awareness", source : [["T", 57]], description : desc([ "I get bonus spells known, which do not count against the number of spells I can know", "In addition, I can cast each once per long rest without expending a spell slot" ]), calcChanges : { spellList : [ function(spList, spName, spType) { // Remove the bonus spells from the normally selectable list if ((spName === "ranger" || spName === "rangerua") && spType.indexOf("bonus") === -1) { if (!spList.notspells) spList.notspells = []; spList.notspells = spList.notspells.concat(["speak with animals", "beast sense", "speak with plants", "locate creature", "commune with nature"]); } }, "I know the following spells, without them counting towards the maximum number of spells I can know: Speak with Animals, Beast Sense, Speak with Plants, Locate Creature, and Commune with Nature." ] }, spellcastingBonus : [{ name : "Primal Awareness", spells : ["speak with animals", "beast sense", "speak with plants", "locate creature", "commune with nature"], selection : ["speak with animals", "beast sense", "speak with plants", "locate creature", "commune with nature"], firstCol : "oncelr+markedbox", times : levels.map(function (n) { return n < 5 ? 1 : n < 9 ? 2 : n < 13 ? 3 : n < 17 ? 4 : 5; }) }] }; CreateClassFeatureVariant("ranger", "primeval awareness", "Primal Awareness", TCoE_Primal_Awareness); var TCoE_Ranger_Martial_Versatility = { name : "Martial Versatility", extraname : "Optional Ranger 4", source : [["T", 57]], description : " [ASI = Ability Score Improvement]\n Whenever I gain an ASI from the ranger class, I can change my ranger fighting style", prereqeval : function (v) { return (classes.known.ranger && classes.known.ranger.level >= 4) || (classes.known.rangerau && classes.known.rangerau.level >= 4) ? true : "skip"; } }; AddFeatureChoice(ClassList.ranger.features.spellcasting, true, "Martial Versatility (prereq: level 4 ranger)", TCoE_Ranger_Martial_Versatility, "Optional ranger features"); var TCoE_Natures_Veil = { name : "Nature's Veil", source : [["T", 57]], description : desc([ "As a bonus action, I can become invisible along with any equipment I'm wearing/carrying", "This invisibility lasts until the start of my next turn" ]), action : [["bonus action", ""]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", }; CreateClassFeatureVariant("ranger", "hide in plain sight", "Nature's Veil", TCoE_Natures_Veil); // Add the Ranger alternative class features also to the Revised Ranger, if it exists after all scripts have ran RunFunctionAtEnd(function() { if (!ClassList["rangerua"]) return; CreateClassFeatureVariant("rangerua", "natural explorer", "Deft Explorer", TCoE_Deft_Explorer); // Add Favored Foe as an alternative choice (can't be done by automation because of choices) and add "Favored Foe" variant option // Move some attributes from the main object to the favored enemy choice objects ['additional', 'languageProfs', 'calcChanges'].forEach( function(attr) { var fea = ClassList.rangerua.features["favored enemy"]; if (!fea[attr]) return; // Move the attribute to each of the choices for (var i = 0; i < fea.choices.length; i++) { var aCh = fea[fea.choices[i].toLowerCase()]; if (aCh.source) continue; // don't do options that are not part of the original entry (which don't have a source) aCh[attr] = fea[attr]; } // Now delete the attributes from the parent object delete fea[attr]; }); // Now add the alternative class feature as another choice AddFeatureChoice(ClassList.rangerua.features["favored enemy"], false, "[alternative feature] Favored Foe", TCoE_Favored_Foe); AddFeatureChoice(ClassList.rangerua.features.spellcasting, true, "Additional Ranger Spells (prereq: level 2 ranger)", TCoE_Additional_Ranger_Spells, "Optional ranger features"); AddFeatureChoice(ClassList.rangerua.features.spellcasting, true, "Spellcasting Focus (prereq: level 2 ranger)", TCoE_Ranger_Spellcasting_Focus, "Optional ranger features"); CreateClassFeatureVariant("rangerua", "primeval awareness", "Primal Awareness", TCoE_Primal_Awareness); AddFeatureChoice(ClassList.rangerua.features.spellcasting, true, "Martial Versatility (prereq: level 4 ranger)", TCoE_Ranger_Martial_Versatility, "Optional ranger features"); CreateClassFeatureVariant("rangerua", "hide in plain sight", "Nature's Veil", TCoE_Natures_Veil); }); // Ranger (Beast Master) alternative class feature if (ClassSubList["ranger-beast master"]) { var TCoE_Primal_Companion_Attributes = { hdLinked : ["ranger", "spell-less ranger"], languages : "understands the languages of its master but can't speak", features : [{ name : "Master", description : "The beast obeys the commands of its master and shares its proficiency bonus. It takes its turn during that of its master, on the same initiative count. It can move and take reactions on its own, but only takes the Dodge action on its turn unless its master takes a bonus action to command it to take another action. Its master can also forgo one attack during their Attack action to command the beast to take the Attack action. If its master is incapacitated, the beast can take any action, not just Dodge. The beast vanishes if its master dies." }], traits : [{ name : "Primal Rebirth", description : "Within an hour of the beast's death, its master can take an action to touch it and expend a spell slot to have it return to full HP after 1 minute." }, { name : "Primal Bond", description : "The beast adds it proficiency bonus to all its ability check and saving throws." }, { name : "Exceptional Training (Beast Master 7)", minlevel : 7, description : "The beast's attacks count as magical for overcoming resistances and immunities.", eval : function(prefix, lvl) { AddString(prefix + "Comp.Use.Attack.1.Description", "Counts as magical", "; "); }, removeeval : function(prefix, lvl) { RemoveString(prefix + "Comp.Use.Attack.1.Description", "Counts as magical"); } }, { name : "Bestial Fury (Beast Master 11)", minlevel : 11, description : "When commanded to take the Attack action, the beast can make 2 attacks as part of its Attack action.", eval : function(prefix, lvl) { Value(prefix + "Comp.Use.Attack.perAction", 2); }, removeeval : function(prefix, lvl) { Value(prefix + "Comp.Use.Attack.perAction", 1); } }], addMod : [ { type : "skill", field : "all", mod : "Prof", text : "The primal companion adds it proficiency bonus to all its ability check and saving throws." }, { type : "skill", field : "Init", mod : "Prof", text : "The primal companion adds it proficiency bonus to all its ability check and saving throws." }, { type : "save", field : "all", mod : "Prof", text : "The primal companion adds it proficiency bonus to all its ability check and saving throws." } ], calcChanges : { hp : function (totalHD, HDobj, prefix) { if (!classes.known.ranger && !classes.known["spell-less ranger"]) return; var rngrLvl = classes.known.ranger ? classes.known.ranger.level : classes.known["spell-less ranger"].level; var multiplier = What(prefix + "Comp.Use.HD.Die") == 6 ? [4, "four"] : [5, "five"]; var rngrLvlM = multiplier[0] * rngrLvl; HDobj.alt.push(multiplier[0] + rngrLvlM); HDobj.altStr.push(" = " + multiplier[0] + " as a base\n + " + multiplier[0] + " \xD7 " + rngrLvl + " from " + multiplier[1] + " times its master's ranger level (" + rngrLvlM + ")"); }, setAltHp : true } }; CreateClassFeatureVariant("ranger-beast master", "subclassfeature3", "Primal Companion", { name : "Primal Companion", source : [["T", 61]], description : desc([ "When I finish a long rest, I can summon a primal beast of the land, sea, or sky in 5 ft", "I determine what animal it looks like, but it always has primal markings", "It is friendly to me and my allies, obeys my commands, and acts during my turn", "Unless I use a bonus action to command it, it only takes the Dodge action on its turn", "I can also forgo one attack of my Attack action to command it to take the Attack action", "It can take reactions and move on its turn even if I don't command it", "As an action within 1 hour of it dying, I can touch it and expend a spell slot to revive it", "It then returns to full HP in 1 minute; It vanishes if I summon another one or if I die" ]), action : [ ["bonus action", " (command)"], ["action", " (revive)"] ], creaturesAdd : [ ["Beast of the Land", true], ["Beast of the Sea", true], ["Beast of the Sky", true] ], creatureOptions : [{ name : "Beast of the Land", source : [["T", 61]], size : 3, type : "Beast", alignment : "Unaligned", ac : "11+Dex+Prof", hp : 20, hd : [3, 8], hdLinked : TCoE_Primal_Companion_Attributes.hdLinked, speed : "40 ft, climb 40 ft", scores : [14, 14, 15, 8, 14, 11], senses : "Darkvision 60 ft", passivePerception : 12, languages : TCoE_Primal_Companion_Attributes.languages, challengeRating : "1/4", proficiencyBonus : 2, proficiencyBonusLinked : true, attacksAction : 1, attacks : [{ name : "Maul", ability : 5, damage : [1, 8, "slashing"], modifiers : ["", "Prof"], range : "Melee (5 ft)", description : "+1d6 damage if hits after moving 20 ft straight in same round, see Charge", tooltip : "If the beast moves at least 20 feet straight toward a target and then hits it with a maul attack on the same turn, the target takes an extra 1d6 slashing damage. If the target is a creature, it must succeed on a Strength saving throw against your spell save DC or be knocked prone.", useSpellMod : "ranger" }, { name : "Charge", ability : 5, damage : ["Str save", "", "Knocked prone"], range : "Melee (5 ft)", description : "Str save or knocked prone; Only if maul hits after moving 20 ft straight in same round", tooltip : "If the beast moves at least 20 feet straight toward a target and then hits it with a maul attack on the same turn, the target takes an extra 1d6 slashing damage. If the target is a creature, it must succeed on a Strength saving throw against your spell save DC or be knocked prone.", abilitytodamage : false, dc : true, useSpellMod : "ranger" }], actions : [{ name : "Charge", description : "If the beast moves at least 20 ft straight toward a target and then hits it with a maul attack on the same turn, the target takes an extra 1d6 slashing damage. If the target is a creature, it must succeed on a Strength saving throw against my spell save DC or be knocked prone." }], features : TCoE_Primal_Companion_Attributes.features, traits : TCoE_Primal_Companion_Attributes.traits.map( function(n) { if (!typePF && /Exceptional Training/i.test(n.name)) { var a = newObj(n); a.description = "The beast's attacks count as magical."; return a; } else { return n; } }), addMod : TCoE_Primal_Companion_Attributes.addMod, calcChanges : TCoE_Primal_Companion_Attributes.calcChanges, minlevelLinked : TCoE_Primal_Companion_Attributes.hdLinked }, { name : "Beast of the Sea", source : [["T", 61]], size : 3, type : "Beast", alignment : "Unaligned", ac : "11+Dex+Prof", hp : 20, hd : [3, 8], hdLinked : TCoE_Primal_Companion_Attributes.hdLinked, speed : "5 ft, swim 60 ft", scores : [14, 14, 15, 8, 14, 11], senses : "Darkvision 60 ft", passivePerception : 12, languages : TCoE_Primal_Companion_Attributes.languages, challengeRating : "1/4", proficiencyBonus : 2, proficiencyBonusLinked : true, attacksAction : 1, attacks : [{ name : "Binding Strike", ability : 1, damage : [1, 6, "Pierc./Bludg."], modifiers : ["", "Prof"], range : "Melee (5 ft)", description : "On hit, target is grappled (escape DC is spell DC) and beast can't use attack on others", tooltip : "If the beast hits a target with its blinding strike, the target is grappled (escape DC equal to your spellcasting save DC). Until this grapple ends, the beast can't use this attack on another target.", useSpellMod : "ranger" }], actions : [{ name : "Amphibious", description : "The beast can breathe both air and water." }], features : TCoE_Primal_Companion_Attributes.features, traits : TCoE_Primal_Companion_Attributes.traits, addMod : TCoE_Primal_Companion_Attributes.addMod, calcChanges : TCoE_Primal_Companion_Attributes.calcChanges, minlevelLinked : TCoE_Primal_Companion_Attributes.hdLinked }, { name : "Beast of the Sky", source : [["T", 61]], size : 4, type : "Beast", alignment : "Unaligned", ac : "10+Dex+Prof", hp : 16, hd : [3, 6], hdLinked : TCoE_Primal_Companion_Attributes.hdLinked, speed : "10 ft, fly 60 ft", scores : [6, 16, 13, 8, 14, 11], senses : "Darkvision 60 ft", passivePerception : 12, languages : TCoE_Primal_Companion_Attributes.languages, challengeRating : "1/4", proficiencyBonus : 2, proficiencyBonusLinked : true, attacksAction : 1, attacks : [{ name : "Shred", ability : 2, damage : [1, 6, "slashing"], modifiers : ["", "Prof"], range : "Melee (5 ft)", useSpellMod : "ranger" }], actions : [{ name : "Flyby", description : "The beast doesn't provoke opportunity attacks when it flies out of an enemy's reach." }], features : TCoE_Primal_Companion_Attributes.features, traits : TCoE_Primal_Companion_Attributes.traits, addMod : TCoE_Primal_Companion_Attributes.addMod, calcChanges : TCoE_Primal_Companion_Attributes.calcChanges, minlevelLinked : TCoE_Primal_Companion_Attributes.hdLinked }], eval : function() { // Remove any ranger companion pages What("Template.extras.AScomp").split(",").forEach(function (prefix) { if (What(prefix + "Companion.Remember") === "companion") { DoTemplate("AScomp", "Remove", prefix, true) } }); } }); } // Ranger Subclasses var TCoE_Ranger_Subclass_Fey_Wanderer = AddSubClass("ranger", "fey wanderer", { regExpSearch : /^(?=.*fey)(?=.*wanderer).*$/i, subname : "Fey Wanderer", source : [["T", 58]], fullname : "Fey Wanderer", features : { "subclassfeature3" : { name : "Dreadful Strikes", source : [["T", 58]], minlevel : 3, description : desc([ "My weapons deal extra psychic damage, but only once per turn per creature" ]), additional : levels.map(function (n) { return n < 3 ? "" : "+1d" + (n < 11 ? 4 : 6) + " psychic damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (v.isWeapon && (classes.known.ranger || classes.known.rangerua)) { var rngrLvl = classes.known.ranger ? classes.known.ranger.level : classes.known.rangerua.level; fields.Description += (fields.Description ? '; ' : '') + 'Once per turn per target +1d' + (rngrLvl < 11 ? 4 : 6) + ' psychic damage'; }; }, "When I hit a creature with a weapon, I can deal an extra 1d4 psychic damage to the target, which can take this extra damage only once per turn. From 11th-level, this damage increases to 1d6." ] } }, "subclassfeature3.1" : { name : "Fey Wanderer Magic", source : [["T", 58]], minlevel : 3, description: desc("I get bonus spells known, which do not count against the number of spells I can know"), spellcastingExtra : ["charm person", "misty step", "dispel magic", "dimension door", "mislead"], spellcastingExtraApplyNonconform : true }, "subclassfeature3.2" : { name : "Otherworldly Glamour", source : [["T", 59]], minlevel : 3, description : desc([ "I can add my Wisdom modifier to any Charisma check I make (minimum of +1)", 'I gain proficiency in Deception, Performance, or Persuasion; Use "Choose Feature" button' ]), addMod : ["Deception", "Intimidation", "Performance", "Persuasion"].map(function(skill){return { type : "skill", field : skill, mod : "max(Wis|1)", text : "I can add my Wisdom modifier to any Charisma check I make (minimum of +1)." };}), choices : ["Deception proficiency", "Performance proficiency", "Persuasion proficiency"], "deception proficiency" : { name : "Otherworldly Glamour", description : " [Deception proficiency]\n I can add my Wisdom modifier to any Charisma check I make (minimum of +1)", skills : ["Deception"] }, "performance proficiency" : { name : "Otherworldly Glamour", description : " [Performance proficiency]\n I can add my Wisdom modifier to any Charisma check I make (minimum of +1)", skills : ["Performance"] }, "persuasion proficiency" : { name : "Otherworldly Glamour", description : " [Persuasion proficiency]\n I can add my Wisdom modifier to any Charisma check I make (minimum of +1)", skills : ["Persuasion"] } }, "subclassfeature7" : { name : "Beguiling Twist", source : [["T", 59]], minlevel : 7, description : desc([ "I have advantage on saves against being charmed or frightened; Below uses my save DC", "As a reaction when a creature I see in 120 ft succeeds its save vs. charmed or frightened,", "I can have another I see in 120 ft make a Wis save or be charmed/frightened (I choose)", "This lasts for 1 minute and the target can repeat the save at the end of each of its turns" ]), action : [["reaction", ""]], savetxt : { adv_vs : ["charmed", "frightened"] } }, "subclassfeature11" : { name : "Fey Reinforcements", source : [["T", 59]], minlevel : 11, description : desc([ "I learn Summon Fey; It needs no material component, nor counts against spells known", "Once per long rest, I can cast it without expending a spell slot", "When I cast it, I can have it not require concentration, but than its duration is 1 minute" ]), usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Fey Reinforcements", spells : ["summon fey"], selection : ["summon fey"], firstCol : 'oncelr+markedbox' }], spellChanges : { "summon fey" : { components : "V,S", compMaterial : "", duration : "Conc,1h/1min", changes : "Using my Fey Reinforcements class feature, I can cast Summon Fey without requiring material components and I can cast it once per long rest without requiring a spell slot. Whenever I start casting the spell, I can modify it so that it doesn't require concentration. If I do so, the spell's duration becomes 1 minute for that casting." } } }, "subclassfeature15" : { name : "Misty Wanderer", source : [["T", 59]], minlevel : 15, description : desc([ "I can cast Misty Step without a spell slot and can bring a willing creature in 5 ft along" ]), usages : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest", calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { if (spellKey === "misty step") { spellObj.firstCol = "oncelr+markedbox"; spellObj.description = "I and one willing creature I can see within 5 ft of me teleport 30 ft to a unoccupied space I can see"; return true; } return false; }, "Whenever I cast misty step, I can bring along one willing creature I can see within 5 ft of me. That creature teleports to an unoccupied space of my choice within 5 ft of my destination space.\nI can cast Misty Step without expending a spell slot a number of times per long rest equal to my Wisdom modifier (minimum of once)." ] } } } }); var TCoE_Ranger_Subclass_Swarmkeeper = AddSubClass("ranger", "swarmkeeper", { regExpSearch : /swarmkeeper/i, subname : "Swarmkeeper", source : [["T", 59]], fullname : "Swarmkeeper", features : { "subclassfeature3" : { name : "Gathered Swarm", source : [["T", 60]], minlevel : 3, description : levels.map(function (n) { var a = [ "I'm bonded to a swarm of nature spirits crawling in my space; I choose their appearance", "Once on each of my turns, I can have it assist me after I hit a creature with an attack:", " \u2022 The target takes an extra 1d" + (n < 11 ? 6 : 8) + " piercing damage from the swarm", " \u2022 The target must make a Strength save or be moved 15 ft horizontally by the swarm", " \u2022 The swarm moves me 5 ft horizontally" + (n < 11 ? "" : " and I have half cover until my next turn starts"), "I get to choose the direction whenever the target or I'm moved by the swarm" ]; if (n >= 11) a.splice(4, 0, " Additionally, on a failed save, I can also have the target be knocked prone"); if (n >= 20) a.pop(); return desc(a); }) }, "subclassfeature3.1" : { name : "Swarmkeeper Magic", source : [["T", 60]], minlevel : 3, description : desc([ "I learn Mage Hand; When cast, its hand takes the form of my swarming nature spirits", "I get bonus spells known, which do not count against the number of spells I can know" ]), spellcastingBonus : [{ name : "Swarmkeeper Magic", spells : ["mage hand"], selection : ["mage hand"], }], spellcastingExtra : ["faerie fire", "web", "gaseous form", "arcane eye", "insect plague"], spellcastingExtraApplyNonconform : true }, "subclassfeature7" : { name : "Writhing Tide", source : [["T", 60]], minlevel : 7, description : desc([ "As a bonus action, I can fly on my swarm for 1 minute: 10 ft flying speed and can hover" ]), action : [["bonus action", ""]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature11" : { name : "Mighty Swarm", source : [["T", 60]], minlevel : 11, description : " [improves Gathered Swarm, see above]\n Now 1d8 damage, knocks prone on failed save, or grants me half cover until next turn" }, "subclassfeature15" : { name : "Swarming Dispersal", source : [["T", 60]], minlevel : 15, description : desc([ "As a reaction when I take damage, I can gain resistance to that damage and teleport", "I vanish into my swarm and teleport to an unoccupied space within 30 ft that I can see" ]), action : [["reaction", ""]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" } } }); // Add both subclasses to the revised ranger as well, if it exists if (ClassList.rangerua) { ClassList.rangerua.subclasses[1].push(TCoE_Ranger_Subclass_Fey_Wanderer, TCoE_Ranger_Subclass_Swarmkeeper); }; // >>>>>>>>>>>>>>>>>>>>> // // >>> Rogue Options >>> // // >>>>>>>>>>>>>>>>>>>>> // // Rogue Optional Class Features AddFeatureChoice(ClassList.rogue.features["thieves cant"], true, "Steady Aim", { name : "Steady Aim", extraname : "Optional Rogue 3", source : [["T", 62]], description : desc([ "As a bonus action if I don't move during my turn, I can give myself adv. on my next attack", "This attack roll has to be in the same turn and my speed is 0 until the end of the turn" ]), action : [["bonus action", ""]], prereqeval : function (v) { return classes.known.rogue.level >= 3 ? true : "skip"; } }, "Optional 3rd-level rogue features"); // Rogue Subclasses AddSubClass("rogue", "phantom", { regExpSearch : /^(?!.*(barbarian|bard|cleric|druid|fighter|monk|paladin|ranger|sorcerer|warlock|wizard))(?=.*phantom).*$/i, subname : "Phantom", source : [["T", 62]], fullname : "Phantom", features : { "subclassfeature3" : { name : "Whispers of the Dead", source : [["UA:SR", 1]], source : [["T", 62]], minlevel : 3, description : desc([ "When I finish a rest, I gain a skill or tool proficiency of my choice until I change it again" ]), skillstxt : "Choose one skill or tool; I can change the choice whenever I finish a short or long rest" }, "subclassfeature3.1" : { name : "Wails from the Grave", source : [["T", 62]], minlevel : 3, description : levels.map(function (n) { var a = [ "Directly after I deal sneak attack damage to a creature on my turn, I " + (n < 17 ? "can" : "also") + " harm another", n < 17 ? "I then deal half my sneak attack in necrotic damage to a creature I can see within 30 ft" : "I deal half my sneak attack in necrotic damage to both it and another I can see in 30 ft" ]; if (n >= 9) a.push("I can do this my Proficiency Bonus per long rest, or by destroying a soul trinket (ST)"); return desc(a); }), usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", additional : levels.map(function (n) { return Math.ceil(n / 4) + "d6"; }), altResource : levels.map(function (n) { return n < 9 ? "" : "ST"; }) }, "subclassfeature9" : { name : "Tokens of the Departed", source : [["T", 63]], minlevel : 9, description : " [max Proficiency Bonus of soul trinkets]" + desc([ "As a reaction when I see a creature within 30 ft die, I can create a Tiny soul trinket", "The token of its life essence appears in my free hand; The DM determines its appearance", "While a soul trinket is on my person, I have advantage on death and Constitution saves", "As an action, I can destroy one of my soul trinkets and ask its associated spirit a question", "Its spirit appears and answers concisely in a language it knew; Trinket can be anywhere" ]), action : [ ["reaction", "Create Soul Trinket"], ["action", "Destroy Soul Trinket"] ], extraLimitedFeatures : [{ name : "Soul Trinkets (max Prof Bonus)", usages : "", recovery : "Special" }], savetxt : { text : ["While soul trinket is on me, Adv. on Con and death saves"] } }, "subclassfeature13" : { name : "Ghost Walk", source : [["T", 63]], minlevel : 13, description : desc([ "As a bonus action, I can assume a spectral form with 10 ft flying speed and can hover", "Attacks vs. me have disadv.; I can move through creatures and objects as difficult terrain", "This lasts 10 min; I take 1d10 force damage if I end my turn inside a creature or object", "I can assume this form once per long rest, or by destroying one of my soul trinkets (ST)" ]), action : [["bonus action", " (start/end)"]], usages : 1, recovery : "long rest", altResource : "ST" }, "subclassfeature17" : { name : "Death's Friend", source : [["T", 63]], minlevel : 17, description : desc([ "Wails from the Grave now also deals damage to the target of the original sneak attack", "If I don't have any soul trinkets at the end of a long rest, one appears in my hand" ]) } } }); AddSubClass("rogue", "soulknife", { regExpSearch : /soulknife/i, subname : "Soulknife", source : [["T", 63]], fullname : "Soulknife", abilitySave : 2, features : { "subclassfeature3" : { name : "Psionic Energy Dice", source : [["T", 64]], minlevel : 3, description : desc([ "I gain twice my proficiency bonus of psionic energy dice (PsiD) that fuel my psionics", "I regain all expended psionic energy dice after a long rest; See psionic powers on page 3", "As a bonus action once per short rest, I can regain one expended psionic energy die" ]), additional : levels.map(function(n) { return n < 3 ? "" : n < 5 ? "d6" : n < 11 ? "d8" : n < 17 ? "d10" : "d12"; }), action : [["bonus action", "Regain 1 Psionic Energy Die"]], usages : "Proficiency Bonus \xD7 2 per ", usagescalc : "event.value = Number(How('Proficiency Bonus'))*2", recovery : "long rest", extraLimitedFeatures : [{ name : "Regain 1 Psionic Energy die", usages : 1, recovery : "short rest" }], extraname : "Soulknife 3", "psi-bolstered knack" : { name : "Psionic Power: Psi-Bolstered Knack", source : [["T", 64]], additional: "1 PsiD if successful", description : desc([ "If I fail an check using a skill or tool I'm proficient with, I can add a psionic energy die to it", "The psionic energy die is only expended if this addition turns the failure into a success" ]) }, "psychic whispers" : { name : "Psionic Power: Psychic Whispers", source : [["T", 64]], description : desc([ "As an action, I can select my Prof Bonus of creatures I can see and roll a psionic energy die", "For the roll of hours, I can telepathically communicate with each and they with me", "To send or receive messages (no action), we must be within 1 mile of each other", "A creature must be able to speak a language to do this; It can end the link at any time", "The first time I do this after a long rest, I don't expend the psionic energy die (PsiD)" ]), limfeaname : "Psychic Whispers", action : [["action", ""]], usages : 1, recovery : "long rest", altResource : "PsiD" }, autoSelectExtrachoices : [{ extrachoice : "psi-bolstered knack" }, { extrachoice : "psychic whispers" }] }, "subclassfeature3.1" : { name : "Psychic Blades", source : [["T", 64]], minlevel : 3, description : desc([ "As part of an Attack action, I can manifest a psychic blade from a free hand to attack", "It vanishes immediately after making the attack and leaves no mark on its target", "As a bonus action after this attack, I can manifest and attack with another psychic blade", "To do this, my other hand needs to be free as well and this blade does only 1d4 damage" ]), action : [["bonus action", "Psychic Blade (after Attack action)"]], weaponOptions : [{ regExpSearch : /^(?=.*psychic)(?=.*blade).*$/i, name : "Psychic Blade", source : [["T", 64]], ability : 1, type : "Simple", damage : [1, 6, "psychic"], range : "Melee, 60 ft", description : "Finesse, thrown; Bonus action: 1d4 instead of 1d6", abilitytodamage : true, selectNow : true }] }, "subclassfeature9" : { name : "Soul Blades", source : [["T", 65]], minlevel : 9, description : desc([ 'My psi-suffused soul grants me more psionic powers, see the 3rd page "Notes" section', ]), extraname : "Soulknife 9", "homing strikes" : { name : "Homing Strikes", source : [["T", 65]], additional: "1 PsiD if successful", description : desc([ "If I miss an attack with my psychic blades, I can add a psionic energy die to the attack roll", "The psionic energy die is only expended if this addition turns the miss into a hit" ]) }, "psychic teleportation" : { name : "Psychic Teleportation", source : [["T", 65]], additional: "1 PsiD", description : desc([ "As a bonus action, I can teleport up to 10 ft away times the roll of my psionic energy die", "I manifest a psychic blade and throw it to an empty space I can see before teleporting to it" ]), action : [["bonus action", ""]] }, autoSelectExtrachoices : [{ extrachoice : "homing strikes" }, { extrachoice : "psychic teleportation" }] }, "subclassfeature13" : { name : "Psychic Veil", source : [["T", 65]], minlevel : 13, description : desc([ "As an action, I can become invisible along with what I'm wearing or carrying for 1 hour", "I can end it (no action); It also ends if I damage a creature or force one to make a save", "I can do this once per long rest, or by expending a psionic energy die (PsiD)" ]), action : [["action", ""]], usages : 1, recovery : "long rest", altResource : "PsiD" }, "subclassfeature17" : { name : "Rend Mind", source : [["T", 65]], minlevel : 17, description : desc([ "When I use my psychic blade to deal sneak attack damage to a target, I can have it save", "It must make a Wisdom save (DC 8 + Prof Bonus + Dex mod) or be stunned for 1 min", "It can repeat the save at the end of each of its turns to end being stunned", "I can do this once per long rest, or by expending three psionic energy dice (3 PsiD)" ]), action : [["action", ""]], usages : 1, recovery : "long rest", altResource : "3 PsiD" } } }); // >>>>>>>>>>>>>>>>>>>>>>>> // // >>> Sorcerer Options >>> // // >>>>>>>>>>>>>>>>>>>>>>>> // // Sorcerer Optional Class Features AddFeatureChoice(ClassList.sorcerer.features.spellcasting, true, "Additional Sorcerer Spells", { name : "Additional Sorcerer Spells", extraname : "Optional Sorcerer 1", source : [["T", 65]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "sorcerer" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["grease", "flame blade", "flaming sphere", "magic weapon", "vampiric touch", "fire shield", "bigby's hand", "flesh to stone", "otiluke's freezing sphere", "demiplane"]); }, "This optional class feature expands the spell list of the sorcerer class with the following spells (spell level in brackets): Grease (1), Flame Blade (2), Flaming Sphere (2), Magic Weapon (2), Vampiric Touch (3), Fire Shield (4), Bigby's Hand (5), Flesh to Stone (6), Otiluke's Freezing Sphere (6), and Demiplane (8)." ] } }, "Optional sorcerer features"); // Metamagic options AddFeatureChoice(ClassList.sorcerer.features["metamagic"], true, "Seeking Spell", { name : "Seeking Spell", source : [["T", 66]], additional: "2 sorcery points", description : desc([ "If I miss an attack roll for a spell, I can reroll the d20 and must use the new roll", "I can do this even if I already used another Metamagic option during the casting of the spell" ]) }); AddFeatureChoice(ClassList.sorcerer.features["metamagic"], true, "Transmuted Spell", { name : "Transmuted Spell", source : [["T", 66]], additional: "1 sorcery point", description : desc([ "If the spell deals one of the below damage types, I can change it to another on the list", "These damage types are: acid, cold, fire, lightning, poison, or thunder" ]) }); // Other optional features AddFeatureChoice(ClassList.sorcerer.features.spellcasting, true, "Sorcerous Versatility (prereq: level 4 sorcerer)", { name : "Sorcerous Versatility", extraname : "Optional Sorcerer 4", source : [["T", 66]], description : " [ASI = Ability Score Improvement]" + desc([ "Whenever I gain an ASI from the sorcerer class, I can change a cantrip or Metamagic choice", "I can select either another cantrip from the sorcerer spell list or another Metamagic option" ]), prereqeval : function (v) { return classes.known.sorcerer.level >= 4 ? true : "skip"; } }, "Optional sorcerer features"); AddFeatureChoice(ClassList.sorcerer.features.spellcasting, true, "Magical Guidance (prereq: level 5 sorcerer)", { name : "Magical Guidance", extraname : "Optional Sorcerer 5", source : [["T", 66]], description : " [1 sorcery point]\n When I make an ability check that fails, I can reroll the d20 and must use the new roll", prereqeval : function (v) { return classes.known.sorcerer.level >= 5 ? true : "skip"; } }, "Optional sorcerer features"); // Sorcerer Subclasses AddSubClass("sorcerer", "aberrant mind", { regExpSearch : /^(?=.*aberrant)(?=.*mind).*$/i, subname : "Aberrant Mind", source : [["T", 67]], features : { "subclassfeature1" : { name : "Psionic Spells", source : [["T", 67]], minlevel : 1, description : desc([ "I learn additional spells, which do not count towards the number of spell I can know", "Whenever I gain a sorcerer level, I can replace one of these with another of the same level", "It must be a divination or enchantment spell on the sorcerer, wizard, or warlock spell list" ]), spellcastingBonus : [{ name : "Psionic Spells (cantrip)", "class" : ["sorcerer", "warlock", "wizard"], school : ["Ench", "Div"], level : [0, 0], extraspells : ["mind sliver"], selection : ["mind sliver"] }, { name : "Psionic Spells (1st-level)", "class" : ["sorcerer", "warlock", "wizard"], school : ["Ench", "Div"], level : [1, 1], firstCol : "PS", extraspells : ["arms of hadar", "dissonant whispers"], selection : ["arms of hadar", "dissonant whispers"], times : 2 }, { name : "Psionic Spells (2nd-level)", "class" : ["sorcerer", "warlock", "wizard"], school : ["Ench", "Div"], level : [2, 2], firstCol : "PS", extraspells : ["calm emotions", "detect thoughts"], selection : ["calm emotions", "detect thoughts"], times : levels.map(function (n) { return n < 3 ? 0 : 2; }) }, { name : "Psionic Spells (3rd-level)", "class" : ["sorcerer", "warlock", "wizard"], school : ["Ench", "Div"], level : [3, 3], firstCol : "PS", extraspells : ["hunger of hadar", "sending"], selection : ["hunger of hadar", "sending"], times : levels.map(function (n) { return n < 5 ? 0 : 2; }) }, { name : "Psionic Spells (4th-level)", "class" : ["sorcerer", "warlock", "wizard"], school : ["Ench", "Div"], level : [4, 4], firstCol : "PS", extraspells : ["evard's black tentacles", "summon aberration"], selection : ["evard's black tentacles", "summon aberration"], times : levels.map(function (n) { return n < 7 ? 0 : 2; }) }, { name : "Psionic Spells (5th-level)", "class" : ["sorcerer", "warlock", "wizard"], school : ["Ench", "Div"], level : [5, 5], firstCol : "PS", extraspells : ["rary's telepathic bond", "telekinesis"], selection : ["rary's telepathic bond", "telekinesis"], times : levels.map(function (n) { return n < 9 ? 0 : 2; }) }] }, "subclassfeature1.1" : { name : "Telepathic Speech", source : [["T", 67]], minlevel : 1, description : desc([ "As a bonus action, I can telepathic link myself with a creature within 30 ft that I can see", "If we share a language, we can talk telepathically while in my Cha mod of miles (min 1)", "This last for my level in minutes, until I'm incapacitated, I die, or I use this feature again" ]), action : [["bonus action", ""]], additional : levels.map(function (n) { return n + " minute" + (n > 1 ? "s" : ""); }) }, "subclassfeature6" : { name : "Psionic Sorcery", source : [["T", 68]], minlevel : 6, description : desc([ "I can expend sorcery points instead of a spell slot to cast a spell from my Psionic Spells", "This costs the spell's level in sorcery points, but in doing so requires no other components", "However, I do need to provide a material components if it is consumed by the spell" ]) }, "subclassfeature6.1" : { name : "Psychic Defenses", source : [["T", 68]], minlevel : 6, description: desc("I gain resistance to psychic damage and adv. on saves vs. being charmed or frightened"), dmgres : ["Psychic"], savetxt : { adv_vs : ["charmed", "frightened"] } }, "subclassfeature14" : { name : "Revelation in Flesh", source : [["T", 68]], minlevel : 14, description : desc([ "As a bonus action, I can expend 1 or more sorcery points to transform for 10 minutes", "For each sorcery point used, I gain one of the following benefits of my choice:", " \u2022 I can see any invisible creatures within 60 ft of me not behind total cover", " \u2022 I gain a flying speed equal to my walking speed and I can hover", " \u2022 I gain a swimming speed equal to twice my walking speed \u0026 I can breathe underwater", " \u2022 I can move, with equipment, through any space as narrow as 1 inch without squeezing", " Also, I can spend 5 ft of movement to escape form a grapple or nonmagical restraints" ]), action : [["bonus action", ""]], additional : "1+ sorcery points" }, "subclassfeature18" : { name : "Warping Implosion", source : [["T", 68]], minlevel : 18, description : desc([ "As an action, I can teleport to an unoccupied space I can see within 120 ft", "All within 30 ft of where I left take 3d10 force damage and must make a Strength save", "If failed, each is pulled towards the space I left, ending up in the nearest empty space", "If successful, a creature takes only half damage and isn't pulled", "I can do this once per long rest, or by expending 5 sorcery points (5 SP)" ]), action : [["action", ""]], recovery : "long rest", usages : 1, altResource : "5 SP" } } }); AddSubClass("sorcerer", "clockwork soul", { regExpSearch : /^((?=.*(sorcerer|witch))(?=.*mechanus)|(?=.*clockwork)(?=.*soul)).*$/i, subname : "Clockwork Soul", source : [["T", 68]], fullname : "Clockwork Soul", features : { "subclassfeature1" : { name : "Clockwork Magic", source : [["T", 68]], minlevel : 1, description : desc([ "I learn additional spells, which do not count towards the number of spell I can know", "Whenever I gain a sorcerer level, I can replace one of these with another of the same level", "It must be an abjuration or transmutation spell on the sorcerer, wizard, or warlock list" ]), spellcastingBonus : [{ name : "Clockwork Magic (1st-level)", "class" : ["sorcerer", "warlock", "wizard"], school : ["Abjur", "Trans"], level : [1, 1], extraspells : ["alarm", "protection from evil and good"], selection : ["alarm", "protection from evil and good"], times : 2 }, { name : "Clockwork Magic (2nd-level)", "class" : ["sorcerer", "warlock", "wizard"], school : ["Abjur", "Trans"], level : [2, 2], extraspells : ["aid", "lesser restoration"], selection : ["aid", "lesser restoration"], times : levels.map(function (n) { return n < 3 ? 0 : 2; }) }, { name : "Clockwork Magic (3rd-level)", "class" : ["sorcerer", "warlock", "wizard"], school : ["Abjur", "Trans"], level : [3, 3], extraspells : ["dispel magic", "protection from energy"], selection : ["dispel magic", "protection from energy"], times : levels.map(function (n) { return n < 5 ? 0 : 2; }) }, { name : "Clockwork Magic (4th-level)", "class" : ["sorcerer", "warlock", "wizard"], school : ["Abjur", "Trans"], level : [4, 4], extraspells : ["freedom of movement", "summon construct"], selection : ["freedom of movement", "summon construct"], times : levels.map(function (n) { return n < 7 ? 0 : 2; }) }, { name : "Clockwork Magic (5th-level)", "class" : ["sorcerer", "warlock", "wizard"], school : ["Abjur", "Trans"], level : [5, 5], extraspells : ["greater restoration", "wall of force"], selection : ["greater restoration", "wall of force"], times : levels.map(function (n) { return n < 9 ? 0 : 2; }) }] }, "subclassfeature1.1" : { name : "Restore Balance", source : [["T", 69]], minlevel : 1, description : desc([ "As a reaction when a creature I can see in 60 ft is about to roll a d20 with adv./disadv.,", "I can prevent that roll from being affected by advantage and disadvantage" ]), action : [["reaction", ""]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature6" : { name : "Bulwark of Law", source : [["T", 69]], minlevel : 6, description : desc([ "As an action, I can imbue a creature I can see within 30 ft with a magical ward", "The ward has a number of d8s equal to the number of sorcery points I expend to do this", "As a reaction when the creature takes damage, it can expend any number of those dice", "The dice roll reduces the damage; The ward lasts until I finish a long rest or do this again" ]), additional : "1-5 sorcery points; 1d8 per point", action : [["action", ""]] }, "subclassfeature14" : { name : "Trance of Order", source : [["T", 69]], minlevel : 14, description : desc([ "As a bonus action, I can enter a state of clockwork consciousness for 1 minute", "While in this state, attack rolls against me can't benefit from advantage", "Also, I can then treat a d20 roll below 9 as a 10 for my attack rolls, checks, and saves", "I can do this once per long rest, or by expending 5 sorcery points (5 SP)" ]), action : [["bonus action", ""]], usages : 1, recovery : "long rest", altResource : "5 SP" }, "subclassfeature18" : { name : "Clockwork Cavalcade", source : [["T", 69]], minlevel : 18, description : desc([ "As an action, I can call spirits to bring balance in a 30-ft cube originating from me", "Inside the cube, the intangible spirits do all the following before vanishing:", " \u2022 Restore up to 100 HP, divided among the creatures in the cube as I choose", " \u2022 Repair all damaged objects entirely in the cube instantly", " \u2022 End every spell of 6th-level or lower on objects or creatures of my choice in the cube", "I can do this once per long rest, or by expending 7 sorcery points (7 SP)" ]), action : [["action", ""]], usages : 1, recovery : "long rest", altResource : "7 SP" } } }); // >>>>>>>>>>>>>>>>>>>>>>> // // >>> Warlock Options >>> // // >>>>>>>>>>>>>>>>>>>>>>> // // Warlock Optional Class Features AddFeatureChoice(ClassList.warlock.features["pact magic"], true, "Additional Warlock Spells", { name : "Additional Warlock Spells", extraname : "Optional Warlock 1", source : [["T", 70]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "warlock" || (spType.indexOf("bonus") !== -1 && (!spList["class"] || spList["class"] !== "warlock"))) return; spList.extraspells = spList.extraspells.concat(["mislead", "planar binding", "teleportation circle", "gate", "weird"]); }, "This optional class feature expands the spell list of the warlock class with the following spells (spell level in brackets): Mislead (5), Planar Binding (5), Teleportation Circle (5), Gate (9), and Weird (9)." ] } }, "Optional 1st-level warlock features"); AddWarlockPactBoon("Pact of the Talisman", { name : "Pact of the Talisman", source : [["T", 70]], description : desc([ "When the wearer of this amulet fails an ability check, they can add +1d4 to the roll", "I can give the talisman to others to use; The talisman turns to ash when I die", "If I lose my talisman, I can perform a 1-hour ceremony to gain a replacement", "This ceremony destroys the previous amulet and can be done during a short or long rest" ]), usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus')", recovery : "long rest" }); AddFeatureChoice(ClassList.warlock.features["pact boon"], true, "Eldritch Versatility", { name : "Eldritch Versatility", extraname : "Optional Warlock 4", source : [["T", 70]], description : " [ASI = Ability Score Improvement]" + desc([ "Whenever I gain an ASI from the warlock class, I can change one of the following things:", " \u2022 I can replace one warlock cantrip with another cantrip from the warlock spell list", " \u2022 I can replace my pact boon for another", " \u2022 If I have Mystic Arcanum, I can replace one spell from it with another of the same level" ]), prereqeval : function (v) { return classes.known.warlock.level >= 4 ? true : "skip"; } }, "Optional 4th-level warlock features"); // Eldritch Invocation options AddWarlockInvocation("Bond of the Talisman (prereq: level 12 warlock, Pact of the Talisman)", { name : "Bond of the Talisman", source : [["T", 70]], submenu : "[improves Pact of the Talisman]", description : desc([ "As an action, I can teleport to the unoccupied space closest to the wearer of my talisman", "The talisman's wearer can do the same to teleport to me; Only works if both on same plane" ]), prereqeval : function(v) { return classes.known.warlock.level >= 12 && GetFeatureChoice('class', 'warlock', 'pact boon').indexOf("pact of the talisman") !== -1; }, action : [["action", ""]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus')", recovery : "long rest" }); AddWarlockInvocation("Eldritch Mind", { name : "Eldritch Mind", source : [["T", 71]], description: desc("I have advantage on my Constitution saving throws to maintain concentration on a spell"), savetxt : { text : "Adv. on Con (Concentration) saves" } }); AddWarlockInvocation("Far Scribe (prereq: level 5 warlock, Pact of the Tome)", { name : "Far Scribe", source : [["T", 71]], submenu : "[improves Pact of the Tome]", description : desc([ "My book of shadows has a new page; As an action, a creature can write its name on it", "This page can hold my Proficiency Bonus in creature names; I can remove one as an action", "I can cast Sending without a spell slot or material components, targeting one on the page", "Instead of saying the message, I write it on the page and any reply appears there as well", "This writing disappears after 1 minute; The target still hears the message in their mind" ]), prereqeval : function(v) { return classes.known.warlock.level >= 5 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the tome'; }, action : [["action", " (erase name)"]], spellcastingBonus : [{ name : "Far Scribe", spells : ["sending"], selection : ["sending"], firstCol : "atwill" }], spellChanges : { "sending" : { components : "V,S", compMaterial : "", description : "Send 25 word message to crea named in book of shadows; it recognizes me and can respond 25 words", changes : "By using Far Scribe, I can cast Sending without using a spell slot or material components, but only to target one of the creatures that wrote their name in my book of shadows. Instead of speaking the message, I write it in my book and any response appears there as well, lasting for 1 minute. The target still hears the message in their mind." } } }); AddWarlockInvocation("Gift of the Protectors (prereq: level 9 warlock, Pact of the Tome)", { name : "Gift of the Protectors", source : [["T", 71]], submenu : "[improves Pact of the Tome]", description : desc([ "My book of shadows has a new page; As an action, a creature can write its name on it", "This page can hold my Proficiency Bonus in creature names; I can remove one as an action", "If a creature whose name is on the page drops to 0 HP, it magically drops to 1 HP instead", "This doesn't work if the creature would be killed outright" ]), prereqeval : function(v) { return classes.known.warlock.level >= 9 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the tome'; }, action : [["action", " (erase name)"]], usages : 1, recovery : "long rest" }); AddWarlockInvocation("Investment of the Chain Master (prereq: Pact of the Chain)", { name : "Investment of the Chain Master", source : [["T", 71]], submenu : "[improves Pact of the Chain]", description : desc([ "When I cast Find Familiar, the summoned create has additional benefits:", "\u2022 It gains a flying or swimming speed of 40 ft (my choice at casting)", "\u2022 As a bonus action, I can command it to take the Attack action", "\u2022 Its weapon attacks are considered magical for overcoming immunities and resistances", "\u2022 If it forces a creature to make a saving throw, it uses my spell save DC", "\u2022 As a reaction when it takes damage, I can grant it resistance against that damage" ]), action : [["bonus action", " (command to attack)"], ["reaction", " (give resistance)"]], prereqeval : function(v) { return GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the chain'; }, calcChanges : { companionCallback : [function(prefix, oCrea, bAdd, sCompType) { if (sCompType !== "pact_of_the_chain") return; var strFea = "##\u25C6 Investment of the Chain Master (TCoE 71)##. The familiar gains 40 ft fly or swim speed (my choice), its attacks are considered magical, and it can use my spell save DC instead of its own DC's (if any)."; var strSpd = "fly or swim 40 ft"; if (What("Unit System") === "metric") { strFea = ConvertToMetric(strFea, 0.5); strSpd = ConvertToMetric(strSpd, 0.5); } var aFnc = bAdd ? AddString : RemoveString; aFnc(prefix + "Comp.Use.Features", strFea, true); aFnc(prefix + "Comp.Use.Speed", strSpd, typePF ? ",\n" : ", "); for (var i = 1; i <= 3; i++) { var baseFld = prefix + "Comp.Use.Attack." + i; var weaDescrFld = baseFld + ".Description"; var strWeaDescr = What(weaDescrFld); if (bAdd && What(baseFld + ".Weapon Selection") && !(/(,|;)? ?counts as magical/i).test(strWeaDescr)) { AddString(weaDescrFld, "Counts as magical", "; "); } else if (!bAdd) { Value(weaDescrFld, strWeaDescr.replace(/(,|;)? ?counts as magical/i, '')); } } }, "My pact of the chain familiars gain an extra feature listing the extra bonuses they gain."] } }); AddWarlockInvocation("Protection of the Talisman (prereq: level 7 warlock, Pact of the Talisman)", { name : "Protection of the Talisman", source : [["T", 71]], submenu : "[improves Pact of the Talisman]", description: desc("When the wearer of my talisman fails a saving throw, they can add +1d4 to the roll"), prereqeval : function(v) { return classes.known.warlock.level >= 7 && GetFeatureChoice('class', 'warlock', 'pact boon').indexOf("pact of the talisman") !== -1; }, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus')", recovery : "long rest" }); AddWarlockInvocation("Rebuke of the Talisman (prereq: Pact of the Talisman)", { name : "Rebuke of the Talisman", source : [["T", 71]], submenu : "[improves Pact of the Talisman]", description : desc([ "As a reaction when the wearer of my talisman is hit, I deal damage and push the attacker", "To be able to do this, I have to see the attacker and it has to be within 30 ft of me", "I deal it my Proficiency Bonus in psychic damage and push it 10 ft away from the talisman" ]), prereqeval : function(v) { return GetFeatureChoice('class', 'warlock', 'pact boon').indexOf("pact of the talisman") !== -1; }, action : [["reaction", ""]] }); AddWarlockInvocation("Undying Servitude (prereq: level 5 warlock)", { name : "Undying Servitude", description: desc("Once per long rest, I can cast Animate Dead without using a spell slot"), source : [["T", 71]], submenu : "[warlock level 5+]", usages : 1, additional : "no spell slot", recovery : "long rest", spellcastingBonus : [{ name : "Undying Servitude", spells : ["animate dead"], selection : ["animate dead"], firstCol : "oncelr" }], prereqeval : function(v) { return classes.known.warlock.level >= 5; } }); // Warlock Subclasses AddSubClass("warlock", "the fathomless", { regExpSearch : /^(?=.*warlock)(?=.*fathomless).*$/i, subname : "the Fathomless", source : [["T", 72]], spellcastingExtra : ["create or destroy water", "thunderwave", "gust of wind", "silence", "lightning bolt", "sleet storm", "control water", "summon elemental", "bigby's hand", "cone of cold"], features : { "subclassfeature1" : { name : "Tentacle of the Deeps", source : [["T", 72]], minlevel : 1, description : desc([ "As a bonus action, I can summon or move a spectral tentacle and make an attack with it", "I can summon it to a space within 60 ft that I can see or move an existing one 30 ft", "I make melee spell attacks with 10 ft reach with it that deal cold damage", "Creatures hit by the tentacle suffer 10 ft speed reduction until the start of my next turn", "The 10-ft long tentacle lasts for 1 minute or until I summon another" ]), action : [["bonus action", " (summon/move)"]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", additional : levels.map(function (n) { return (n < 10 ? 1 : 2) + "d8"; }), weaponOptions : [{ regExpSearch : /^(?=.*tentacle)(?=.*\b(deeps?|spectral)\b).*$/i, name : "Tentacle of the Deeps", source : [["T", 72]], ability : 6, type : "Spell", damage : [1, 8, "Cold"], range : "Melee (10 ft)", description : "On hit, -10 ft speed until my next turn starts", abilitytodamage : false, tentacleOfTheDeeps : true, selectNow : true }], calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.tentacleOfTheDeeps && classes.known.warlock.level >= 10) { fields.Damage_Die = '2d8'; }; }, '', 1 ] } }, "subclassfeature1.1" : { name : "Gift of the Sea", source : [["T", 72]], minlevel : 1, description: desc("I have a swimming speed of 40 ft and I can breathe underwater"), speed : { swim : { spd : 40, enc : 30 } } }, "subclassfeature6" : { name : "Oceanic Soul", source : [["T", 73]], minlevel : 6, description : desc([ "I gain resistance to cold damage now that I'm even more at home in the depths", "While I'm fully submerged, others who are as well can understand my speech and I theirs" ]), dmgres : ["Cold"], spellChanges : { "summon elemental" : { description : "Summon Water Elemental Spirit; obeys commands; takes turn after mine; vanishes at 0 hp (400gp)", changes : "My warlock spell Summon Elemental can only call forth an elemental spirit of water." } } }, "subclassfeature6.1" : { name : "Guardian Coil", source : [["T", 73]], minlevel : 6, description : desc([ "As a reaction when I or a creature I see in 10 ft of my tentacle is damaged, it can help", "The tentacle interposes itself, reducing the damage of the attack for that creature" ]), action : [["reaction", ""]], additional : levels.map(function (n) { return (n < 10 ? 1 : 2) + "d8 damage reduced"; }) }, "subclassfeature10" : { name : "Grasping Tentacles", source : [["T", 73]], minlevel : 10, description : desc([ "I learn Evard's Black Tentacles; Once per long rest, I can cast it without using a spell slot", "It counts as a warlock spell for me, but not towards the number of spell I can know", "Whenever I cast it, I gain temporary hit points equal to my warlock level", "Moreover, damage can't break my concentration on this spell" ]), action : [["action", ""]], additional : levels.map(function (n) { return n < 10 ? "" : n + " temp HP; 1\xD7 per long rest no SS"; }), spellcastingBonus : [{ name : "Grasping Tentacles", spells : ["evard's black tentacles"], selection : ["evard's black tentacles"], firstCol : "oncelr+markedbox" }], extraLimitedFeatures : [{ name : "Evard's Black Tentacles (no spell slot)", usages : 1, recovery : "long rest" }], calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { if (spellKey === "evard's black tentacles") { spellObj.description = "I temp hp; All enter/start in 20-ft rad save or restrained \u0026 3d6 Bludg. dmg/rnd; Str/Dex check escape"; spellObj.duration = "Conc*, 1 min"; return true; } }, "Whenever I cast Evard's Black Tentacles, I gain temporary hit points equal to my warlock level.\n \u2022 Damage can't break my concentration on this spell." ] } }, "subclassfeature14" : { name : "Fathomless Plunge", source : [["T", 73]], minlevel : 14, description : desc([ "As an action, I can teleport myself and up to 5 willing creatures I can see within 30 ft", "We reappear up to 1 mile away, inside or within 30 ft of a body of water I've seen" ]), action : [["action", ""]], recovery : "short rest", usages : 1 } } }); AddSubClass("warlock", "the genie", { regExpSearch : /^(?=.*warlock)(?=.*(genie|dao|djinni|efreeti|marid)).*$/i, subname : "the Genie", source : [["T", 73], ["UA:SR", 2]], features : { "subclassfeature1" : { name : "Choose Genie Kind", source : [["T", 73], ["UA:SR", 3]], minlevel : 1, description : desc('Use the "Choose Feature" button above to choose the kind of genie your patron is'), calcChanges : { spellList : [ function(spList, spName, spType) { if (spType.indexOf("bonus") !== -1 && spList.name && /mystic arcanum/i.test(spList.name) && spList.level[0] === 9) { spList.extraspells.push("wish"); } else if (spType.indexOf("bonus") === -1 && spName === "warlock") { if (!spList.notspells) spList.notspells = []; spList.notspells.push("wish"); } }, "The Genie patron adds Wish as a spell available for my 9th-level Mystic Arcanum selection." ] }, choices : ["Dao (earth)", "Djinni (air)", "Efreeti (fire)", "Marid (water)"], "dao (earth)" : { name : "Dao Genie Patron", description: desc("My genie patron is a Dao, associated with earth"), spellcastingExtra : ["detect evil and good", "sanctuary", "phantasmal force", "spike growth", "create food and water", "meld into stone", "phantasmal killer", "stone shape", "creation", "wall of stone", "wish"] }, "djinni (air)" : { name : "Djinni Genie Patron", description: desc("My genie patron is a Djinni, associated with air"), spellcastingExtra : ["detect evil and good", "thunderwave", "gust of wind", "phantasmal force", "create food and water", "wind wall", "greater invisibility", "phantasmal killer", "creation", "seeming", "wish"] }, "efreeti (fire)" : { name : "Efreeti Genie Patron", description: desc("My genie patron is an Efreeti, associated with fire"), spellcastingExtra : ["burning hands", "detect evil and good", "phantasmal force", "scorching ray", "create food and water", "fireball", "fire shield", "phantasmal killer", "creation", "flame strike", "wish"] }, "marid (water)" : { name : "Marid Genie Patron", description: desc("My genie patron is a Marid, associated with water"), spellcastingExtra : ["detect evil and good", "fog cloud", "blur", "phantasmal force", "create food and water", "sleet storm", "control water", "phantasmal killer", "cone of cold", "creation", "wish"] }, choiceDependencies : [{ feature : "subclassfeature1.3" }, { feature : "subclassfeature6" }] }, "subclassfeature1.1" : { name : "Genie's Vessel", source : [["T", 73], ["UA:SR", 3]], minlevel : 1, description : desc([ "My patron gifts me a magical vessel, a Tiny object, granting me a measure of its power", "I choose the vessel's appearance; I can use it as my spellcasting focus for warlock spells", "The vessel's AC is my spell save DC and it has my warlock level + Proficiency Bonus in HP", "If it is destroyed or lost, I can get a replacement with a 1-hour ceremony during a rest" ]) }, "subclassfeature1.2" : { name : "Genie's Vessel: Bottled Respite", source : [["T", 74], ["UA:SR", 3]], minlevel : 1, description : desc([ "As an action, I can vanish and enter the extradimensional space inside my genie's vessel", "The vessel stays in its location; The space inside is a 20-ft high, 20-ft radius cylinder", "As a bonus action, I can exit my vessel; I exit it early if I die or the vessel is destroyed", "I can remain inside for twice my Proficiency Bonus in hours; Objects can be left inside" ]), limfeaname : "Bottled Respite", action : [["action", " (enter)"], ["bonus action", " (eject)"]], usages : 1, recovery : "long rest" }, "subclassfeature1.3" : { name : "Genie's Wrath", source : [["T", 73], ["UA:SR", 3]], minlevel : 1, description : desc([ "I can deal bonus damage on my attacks, its type depending on my patron's genie kind", 'Use the "Choose Feature" button above to choose the kind of genie your patron is' ]), choices : ["dao (earth)", "djinni (air)", "efreeti (fire)", "marid (water)"], choicesNotInMenu : true, "dao (earth)" : { name : "Dao's Wrath", description : " [once on each of my turns]\n When I hit an attack, I can have it deal my Prof Bonus in extra bludgeoning damage", calcChanges : { atkAdd : [ function (fields, v) { if (!v.isDC) { fields.Description += (fields.Description ? '; ' : '') + 'Once per my turn +' + How('Proficiency Bonus') + ' bludgeoning damage'; } }, "Once on each of my turns, I can have one of my attacks that hit deal extra bludgeoning damage equal to my proficiency bonus." ] } }, "djinni (air)" : { name : "Djinni's Wrath", description : " [once on each of my turns]\n When I hit an attack, I can have it deal my Proficiency Bonus in extra thunder damage", calcChanges : { atkAdd : [ function (fields, v) { if (!v.isDC) { fields.Description += (fields.Description ? '; ' : '') + 'Once per my turn +' + How('Proficiency Bonus') + ' thunder damage'; } }, "Once on each of my turns, I can have one of my attacks that hit deal extra thunder damage equal to my proficiency bonus." ] } }, "efreeti (fire)" : { name : "Efreeti's Wrath", description : " [once on each of my turns]\n When I hit an attack, I can have it deal my Proficiency Bonus in extra fire damage", calcChanges : { atkAdd : [ function (fields, v) { if (!v.isDC) { fields.Description += (fields.Description ? '; ' : '') + 'Once per my turn +' + How('Proficiency Bonus') + ' fire damage'; } }, "Once on each of my turns, I can have one of my attacks that hit deal extra fire damage equal to my proficiency bonus." ] } }, "marid (water)" : { name : "Marid's Wrath", description : " [once on each of my turns]\n When I hit an attack, I can have it deal my Proficiency Bonus in extra cold damage", calcChanges : { atkAdd : [ function (fields, v) { if (!v.isDC) { fields.Description += (fields.Description ? '; ' : '') + 'Once per my turn +' + How('Proficiency Bonus') + ' cold damage'; } }, "Once on each of my turns, I can have one of my attacks that hit deal extra cold damage equal to my proficiency bonus." ] } } }, "subclassfeature6" : { name : "Elemental Gift", source : [["T", 75], ["UA:SR", 3]], minlevel : 6, description : desc([ "I gain resistance to a damage type depending on my patron's genie kind", 'Use the "Choose Feature" button above to choose the kind of genie your patron is', "As a bonus action, I can gain a flying speed of 30 ft and I can hover, for 10 minutes" ]), choices : ["dao (earth)", "djinni (air)", "efreeti (fire)", "marid (water)"], choicesNotInMenu : true, "dao (earth)" : { name : "Dao's Elemental Gift", description : desc([ "I gain resistance to bludgeoning damage", "As a bonus action, I can gain a flying speed of 30 ft and I can hover, for 10 minutes" ]), action : [["bonus action", " (start fly)"]], dmgres : ["Bludgeoning"] }, "djinni (air)" : { name : "Djinni's Elemental Gift", description : desc([ "I gain resistance to thunder damage", "As a bonus action, I can gain a flying speed of 30 ft and I can hover, for 10 minutes" ]), action : [["bonus action", " (start fly)"]], dmgres : ["Thunder"] }, "efreeti (fire)" : { name : "Efreeti's Elemental Gift", description : desc([ "I gain resistance to fire damage", "As a bonus action, I can gain a flying speed of 30 ft and I can hover, for 10 minutes" ]), action : [["bonus action", " (start fly)"]], dmgres : ["Fire"] }, "marid (water)" : { name : "Marid's Elemental Gift", description : desc([ "I gain resistance to cold damage", "As a bonus action, I can gain a flying speed of 30 ft and I can hover, for 10 minutes" ]), action : [["bonus action", " (start fly)"]], dmgres : ["Cold"] }, additional : "Fly 10 min", usages : "Prof Bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature10" : { name : "Sanctuary Vessel", source : [["T", 75], ["UA:SR", 3]], minlevel : 10, description : desc([ "When I enter my vessel I can have up to 5 willing creatures I can see in 30 ft join me", "As a bonus action, I can eject any number of creatures from my genie's vessel", "Everyone is ejected when I leave it, I die, or if the vessel is destroyed", "Anyone who remains in the vessel for at least 10 min gains the benefits of a short rest", "Also, HD spend as part of this short rest has my Proficiency Bonus added to the roll" ]) }, "subclassfeature14" : { name : "Limited Wish", source : [["T", 75], ["UA:SR", 3]], minlevel : 14, additional: "1\xD7 per 1d4 long rests", description : desc([ "As an action, I can cast a 6th-level or lower spell with a casting time time of one action", "This can be any spell; It doesn't require any costly components, it simply takes effect" ]), action : [["action", ""]], extraLimitedFeatures : [{ name : "Limited Wish", usages : 1, recovery : "1d4 LR" }] } } }); // >>>>>>>>>>>>>>>>>>>>>> // // >>> Wizard Options >>> // // >>>>>>>>>>>>>>>>>>>>>> // // Wizard Optional Class Features AddFeatureChoice(ClassList.wizard.features.spellcasting, true, "Additional Wizard Spells", { name : "Additional Wizard Spells", extraname : "Optional Wizard 1", source : [["T", 75]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "wizard" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["augury", "enhance ability", "speak with dead", "divination"]); }, "This optional class feature expands the spell list of the wizard class with the following spells (spell level in brackets): Augury (2), Enhance Ability (2), Speak with Dead (3), and Divination (4)." ] } }, "Optional 1st-level wizard features"); AddFeatureChoice(ClassList.wizard.features["arcane recovery"], true, "Cantrip Formulas", { name : "Cantrip Formulas", extraname : "Optional Wizard 3", source : [["T", 76]], description : desc([ "I have scribed arcane formulas in my spellbook with which I formulate cantrips in my mind", "Whenever I finish a long rest, I can use this to change a wizard cantrip I know for another" ]), prereqeval : function (v) { return classes.known.wizard.level >= 3 ? true : "skip"; }, spellcastingPreparedCantrips: { "class": ["wizard"] }, }, "Optional 3rd-level wizard features"); // Wizard Subclasses AddSubClass("wizard","order of scribes", { regExpSearch : /^(?=.*wizard)(?=.*order)(?=.*scribes?).*$|scrivener/i, subname : "Order of Scribes", subnameShort: "Scribes", source : [["T", 77]], features : { "subclassfeature2" : { name : "Wizardly Quill", source : [["T", 77]], minlevel : 2, description : desc([ "As a bonus action, I can magically create a Tiny quill with the following properties:", " \u2022 It doesn't require ink and produces ink in the color of my choice when writing with it", " \u2022 I require only 2 minutes per spell level to transcribe spells into my spellbook with it", " \u2022 As a bonus action, I can use it to erase a text written with it if within 5 ft of the text", "The quill disappear if I create another or if I die" ]), action : [["bonus action", " (create/erase)"]] }, "subclassfeature2.1" : { name : "Awakened Spellbook", source : [["T", 77]], minlevel : 2, description : desc([ "My spellbook gains sentience and grants me the following benefits while I am holding it:", " \u2022 I can use the book as a spellcasting focus for my wizard spells", " \u2022 When I cast a wizard spell using a spell slot, I can temporarily replace its damage type", " The new type must appear in my spellbook in a spell of the same level as the spell slot", " \u2022 Once per long rest, I can ritual cast a wizard spell without 10 min extra casting time", "I can replace it over a short rest, transferring its spells and sentience to a blank book" ]), additional : "fast ritual cast", usages : 1, recovery : "long rest" }, "subclassfeature6" : { name : "Manifest Mind", source : [["T", 78]], minlevel : 6, description : desc([ "As a bonus action, I can have the mind of my awakened spellbook manifest within 60 ft", "The spellbook needs to be on my person to do this; The mind is a Tiny spectral object", "The mind is intangible, doesn't occupy a space, hovers, and sheds dim light in 10 ft", "It can hear, see, has 60 ft darkvision, and telepathically shares with me what it perceives", "As a bonus action, I can dismiss it or move it up to 30 ft to an empty space I can see", "It can pass through creatures; It stops manifesting if it's over 300 ft from me or I die", "It also stop manifesting if Dispel Magic is cast on it or the awakened spellbook is no more", "I can do this once per long rest, or by expending a spell slot (SS 1+) to manifest it again" ]), action : [["bonus action", " (conjure/move/dismiss)"]], usages : 1, recovery : "long rest", altResource : "SS 1+" }, "subclassfeature6.1" : { name : "Manifest Mind: Cast Spell", source : [["T", 78]], minlevel : 6, description : desc([ "I can have wizard spells I cast on my turn originate from the mind while its manifested" ]), usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature10" : { name : "Master Scrivener", source : [["T", 78]], minlevel : 10, description : desc([ "When I finish a long rest, I can write a spell in my awakened spellbook on a blank paper", "It must be a level 1 or 2 spell with 1 action casting time; My spellbook must be in 5 ft", "As an action, I can use this scroll to cast the spell on it at one higher level than normal", "Only I can use the scroll; The scroll turns blank again when I use it or finish a long rest", "Also, using my Wizardly Quill, the gold and time I need to craft spell scrolls is halved" ]), action : [["action", " (cast scroll)"]], usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Master Scrivener scoll", "class" : "wizard", level : [1, 2], firstCol : "MS" }], calcChanges : { spellAdd : [ function (spellKey, spellObj, spName, isDuplicate) { if (!isDuplicate && spName === "wizard" && spellObj.firstCol === "MS" && (spellObj.level === 1 || spellObj.level === 2)) { // Calculate upcasting to be exactly 1 level higher var rxMatch = /(\d*d?\d+)\+(\d*d?\d+)\/(\d*SL)\b/i; while (rxMatch.test(spellObj.description)) { var aMatch = spellObj.description.match(rxMatch); var strDie1 = !isNaN(aMatch[1]) ? true : /\d+d\d+/i.test(aMatch[1]) ? aMatch[1].replace(/\d+(d\d+)/i, "$1") : false; var strDie2 = !isNaN(aMatch[2]) ? true : /\d+d\d+/i.test(aMatch[2]) ? aMatch[2].replace(/\d+(d\d+)/i, "$1") : undefined; if (!/^SL$/i.test(aMatch[3])) { // only increases if more than 1 level higher spell slot, so nothing we can do with it, just remove all upcasting removeSpellUpcasting(spellObj); } else if (/^\d/.test(aMatch[1]) && strDie1 === strDie2) { // identical type steps (e.g. 1d6+1d6/SL or 3+1/SL), so add the second to the first var strNew = (Number(aMatch[1].replace(/^(\d+).*/, "$1")) + Number(aMatch[2].replace(/^(\d+).*/, "$1"))) + aMatch[1].replace(/^\d+(.*)/, "$1"); spellObj.description = spellObj.description.replace(rxMatch, strNew); } else { // non-identical steps, so leave the first and second along, but remove the /SL spellObj.description = spellObj.description.replace(rxMatch, "$1+$2"); } } // Remove costly material components spellObj.description = spellObj.description.replace(/ \(\d+ ?gp( cons\.?)?\)/i, ''); // List only the scroll as a component from the spell spellObj.components = "M\u2020"; spellObj.compMaterial = "Spells cast from spell scrolls don't require any components other than the spell scroll itself."; return true; } }, "When I finish a long rest, I can create a scroll of a spell in my spellbook using my Master Scrivener class feature. I can then cast this spell from the scroll and the spell is cast as if using a spell slot one level higher than its spell level." ] } }, "subclassfeature14" : { name : "One with the Word", source : [["T", 78]], minlevel : 14, description : ' [see 3rd page "Notes" section]', action : [["reaction", " (when damaged)"]], advantages : [["Arcana", true]], "one with the word" : { name : "One with the Word", extraname : "Order of Scribes 14", source : [["T", 78]], description : desc([ "While my awakened spellbook is on my person, I have advantage on Int (Arcana) checks", "As a reaction when I take damage while my spellbook's mind is manifested, I can dismiss it", "In dismissing the manifested mind like this, I prevent all of the damage taken by me", "After doing so, I lose spells with a combined level of 3d6 from my awakened spellbook", "If I do not have enough spells left to cover the number rolled, I drop to 0 HP instead", "The spells vanish from my spellbook, reappearing only after I finish 1d6 long rests", "I can't cast spells that I lost this way, even if found on a scroll or in another spellbook" ]), usages : 1, recovery : "long rest" }, autoSelectExtrachoices : [{ extrachoice : "one with the word" }] } } }); // >>>>>>>>>>>>>>>>> // // >>> New Feats >>> // // >>>>>>>>>>>>>>>>> // FeatsList["artificer initiate"] = { name : "Artificer Initiate", source : [["T", 79], ["UA:F2", 1]], descriptionFull : "You've learned some of an artificer's inventiveness:\n \u2022 You learn one cantrip of your choice from the artificer spell list, and you learn one 1st-level spell of your choice from that list. Intelligence is your spellcasting ability for these spells.\n \u2022 You can cast this feat's 1st-level spell without a spell slot, and you must finish a long rest before you can cast it in this way again. You can also cast the spell using any spell slots you have.\n \u2022 You gain proficiency with one type of artisan's tools of your choice, and you can use that type of tool as a spellcasting focus for any spell you cast that uses Intelligence as its spellcasting ability.", description : typePF ? "I learn a cantrip and a 1st-level spell from the artificer's spell list. Int is my spellcasting ability for these. Once per long rest, I can cast the 1st-level spell at its lowest level without using a spell slot. I gain proficiency in one artisan's tool, which I can use as a spellcasting focus for spells I cast with Int as spellcasting ability." : "I learn one cantrip and one 1st-level spell from the artificer's spell list. Intelligence is my spellcasting ability for these. I can cast the 1st-level spell at its lowest level once per long rest without using a spell slot. I gain proficiency in one artisan's tool, which I can use as a spellcasting focus for any spell I cast that uses Intelligence as its spellcasting ability.", spellcastingBonus : [{ name : "Artificer cantrip", spellcastingAbility : 4, allowUpCasting : true, "class" : 'artificer', level : [0, 0], }, { name : "1st-level artificer spell", "class" : 'artificer', level : [1, 1], firstCol : "oncelr", }], toolProfs : [ ["Artisan's tools", 1] ] }; FeatsList["chef"] = { name : "Chef", source : [["T", 79], ["UA:F2", 1]], descriptionFull : "Time spent mastering the culinary arts has paid off, granting you the following benefits:\n \u2022 Increase your Constitution or Wisdom score by 1, to a maximum of 20.\n \u2022 You gain proficiency with cook's utensils if you don't already have it.\n \u2022 As part of a short rest, you can cook special food, provided you have ingredients and cook's utensils on hand. You can prepare enough of this food for a number of creatures equal to 4 + your proficiency bonus. At the end of the short rest, any creature who eats the food and spends one or more Hit Dice to regain hit points regains an extra 1d8 hit points.\n \u2022 With one hour of work or when you finish a long rest, you can cook a number of treats equal to your proficiency bonus. These special treats last 8 hours after being made. A creature can use a bonus action to eat one of those treats to gain temporary hit points equal to your proficiency bonus.", description : "During a short rest, I can make food for 4 + my Prof" + (typePF ? "" : "iciency") + " Bonus creatures; if they eat it and spend 1" + (typePF ? "+ HD" : " or more Hit Die") + ", they regain 1d8 HP. In one hour or during a long rest, I can make treats equal to my Prof" + (typePF ? "" : "iciency") + " Bonus that last for 8 hours; As a bonus action, one can eat a treat, gaining my Prof" + (typePF ? "" : "iciency") + " Bonus in temporary HP. [+1 " + (typePF ? "Con or Wis" : "Constitution or Wisdom") + "]", action : [["bonus action", "Consume Chef's Treat"]], toolProfs : ["Cook's utensils"], scorestxt : "+1 Constitution or Wisdom" }; FeatsList["crusher"] = { name : "Crusher", source : [["T", 79]], descriptionFull : "You are practiced in the art of crushing your enemies, granting you the following benefits:\n \u2022 Increase your Strength or Constitution by 1, to a maximum of 20.\n \u2022 Once per turn, when you hit a creature with an attack that deals bludgeoning damage, you can move it 5 feet to an unoccupied space, provided the target is no more than one size larger than you.\n \u2022 When you score a critical hit that deals bludgeoning damage to a creature, attack rolls against that creature are made with advantage until the start of your next turn.", description : "Once per turn, when I hit a creature no more than one size larger than me with an attack that deals bludgeoning damage, I can move it 5 ft to an unoccupied space. If I score a critical hit that deals bludgeoning damage, attacks against the creature hit gain advantage until the start of my next turn. [+1 " + (typePF ? "Str or Con" : "Strength or Constitution") + "]", scorestxt : "+1 Strength or Constitution" }; FeatsList["eldritch adept"] = { name : "Eldritch Adept", source : [["T", 79], ["UA:F2", 1]], descriptionFull : "Studying occult lore, you have unlocked eldritch power within yourself: you learn one Eldritch Invocation option of your choice from the warlock class. If the invocation has a prerequisite of any kind, you can choose that invocation only if you're a warlock who meets the prerequisite.\n Whenever you gain a level, you can replace the invocation with another one from the warlock class.", description : 'I learn one Eldritch Invocation from the warlock class for which I meet the prerequisites (2nd page "Choose Feature" button). I can replace this invocation for another whenever I gain a level.', bonusClassExtrachoices : [{ "class" : "warlock", feature : "eldritch invocations", bonus : 1 }], prerequisite : "Spellcasting or Pact Magic feature", prereqeval : function (v) { return v.isSpellcastingClass; } }; FeatsList["fey touched"] = { name : "Fey Touched", source : [["T", 79], ["UA:F2", 2]], descriptionFull : "Your exposure to the Feywild's magic has changed you, granting you the following benefits:\n \u2022 Increase your Intelligence, Wisdom, or Charisma score by 1, to a maximum of 20.\n \u2022 You learn the misty step spell and one 1st-level spell of your choice. The 1st-level spell must be from the divination or enchantment school of magic. You can cast each of these spells without expending a spell slot. Once you cast either of these spells in this way, you can't cast that spell in this way again until you finish a long rest. You can also cast these spells using spell slots you have of the appropriate level. The spells' spellcasting ability is the ability increased by this feat.", description : "I learn Misty Step and one 1st level divination or enchantment spell. I can cast each once per long rest at their lowest level without expending a spell slot, and can cast them if I have a spell slot to do so. My spellcasting ability is the ability I choose to increase when I gain this feat. [+1 Intelligence, Wisdom, or Charisma]", spellcastingBonus : [{ name : "Misty Step", spells : ["misty step"], selection : ["misty step"], firstCol : "oncelr+markedbox" }, { name : "1st-level Ench/Div spell", 'class': "any", school : ["Ench", "Div"], level : [1, 1], firstCol : "oncelr+markedbox" }], spellcastingAbility : 4, allowUpCasting : true, choices : ["Intelligence", "Wisdom", "Charisma"], "intelligence" : { description : "I learn Misty Step and one 1st level divination or enchantment spell. I can cast each once per long rest at their lowest level without expending a spell slot, and can cast them " + (typePF ? "by expending" : "with") + " a spell slot as normal. Intelligence is my spellcasting ability for these spells. [+1 Intelligence]", spellcastingAbility : 4, scores : [0, 0, 0, 1, 0, 0] }, "wisdom" : { description : "I learn Misty Step and one 1st level divination or enchantment spell. I can cast each once per long rest at their lowest level without expending a spell slot, and can cast them by expending a spell slot as normal. Wisdom is my spellcasting ability for these spells. [+1 Wisdom]", spellcastingAbility : 5, scores : [0, 0, 0, 0, 1, 0] }, "charisma" : { description : "I learn Misty Step and one 1st level divination or enchantment spell. I can cast each once per long rest at their lowest level without expending a spell slot, and can cast them by expending a spell slot as normal. Charisma is my spellcasting ability for these spells. [+1 Charisma]", spellcastingAbility : 6, scores : [0, 0, 0, 0, 0, 1] } }; // Add the fighting initiate only when all other code has run, so that we get fighting styles added by the code RunFunctionAtEnd(function() { if (!ClassList.fighter || !ClassList.fighter.features["fighting style"]) return; var FtngStyles = ClassList.fighter.features["fighting style"]; FeatsList["fighting initiate"] = { name : "Fighting Initiate", source : [["T", 80], ["UA:F2", 2]], descriptionFull : "Your martial training has helped you develop a particular style of fighting. As a result, you learn one Fighting Style option of your choice from the fighter class. If you already have a style, the one you choose must be different.\n Whenever you reach a level that grants the Ability Score Improvement feature, you can replace this feat's fighting style with another one from the fighter class that you don't have.", description : "I learn one Fighting Style from the fighter class, which must be one that I don't yet know. I can replace this fighting style for another whenever I gain an Ability Score Improvement.", prerequisite : "Proficiency with a martial weapon", prereqeval : function(v) { return v.martialWeaponsProf || v.otherWeaponsProf.some(function (n) { return WeaponsList[n] && (/Martial/i).test(WeaponsList[n].type); }); }, choices : [], "archery" : { description : "I gain a +2 bonus to attack rolls I make with ranged weapons. I can replace this fighting style for another whenever I gain an Ability Score Improvement.", source : FtngStyles.source }, "defense" : { description : "I gain a +1 bonus to my AC while I'm wearing armor. I can replace this fighting style for another whenever I gain an Ability Score Improvement.", source : FtngStyles.source }, "dueling" : { description : "When I wield a melee weapon in one hand and no other weapons, I gain a +2 bonus to damage rolls with that weapon. I can replace this fighting style for another whenever I gain an Ability Score Improvement.", source : FtngStyles.source }, "great weapon fighting" : { description : "When I roll a 1 or 2 on a damage die for an attack I make with a two-handed or versatile melee weapon that I'm wielding with two hands, I can reroll the die and must use the new roll, even if the new roll is a 1 or a 2. I can replace this fighting style for another whenever I gain an Ability Score Improvement.", source : FtngStyles.source }, "protection" : { description : "When a creature I can see attacks a target other than me that is within 5 ft of me, I can use my reaction to impose disadvantage on the attack roll. I must be wielding a shield to do this. I can replace this fighting style for another whenever I gain an Ability Score Improvement.", source : FtngStyles.source }, "two-weapon fighting" : { description : "When I engage in two-weapon fighting, I can add my ability modifier to the damage of the second (off-hand) attack. I can replace this fighting style for another whenever I gain an Ability Score Improvement.", source : FtngStyles.source }, "blind fighting" : { description : "I have blindsight with a range of 10 ft, wherein I can effectively see anything that isn't behind total cover, including invisible things, even if I'm blinded or in darkness. This doesn't allow me to see things hidden from me. I can replace this fighting style for another whenever I gain an Ability Score Improvement.", source : [["T", 41]] }, "interception" : { description : "As a reaction when a creature I can see hits a target, other than me, within 5 ft of me with an attack, I can reduce the damage the target takes by 1d10 + my proficiency bonus (min 0 damage). I must be wielding a shield or a simple or martial weapon to do this. I can replace this fighting style for another whenever I gain an Ability Score Improvement.", source : [["T", 41], ["UA:CFV", 12]] }, "thrown weapon fighting" : { description : "I can draw a weapon that has the thrown property as part of the attack I make with the weapon. In addition, when I hit with a ranged attack using a thrown weapon, I gain a +2 bonus to the damage roll. I can replace this fighting style for another whenever I gain an Ability Score Improvement.", source : [["T", 42]] }, "unarmed fighting" : { description : "My unarmed strikes deal 1d6 damage, or 1d8 if I'm not wielding any weapons or a shield. At the start of each of my turns, I can deal 1d4 bludgeoning damage to one creature grappled by me. I can replace this fighting style for another whenever I gain an Ability Score Improvement.", source : [["T", 42]] } }; FtngStyles.choices.forEach(function (sName) { var sNameLC = sName.toLowerCase(); if (!FtngStyles[sNameLC]) return; FeatsList["fighting initiate"].choices.push(sName); if (!FeatsList["fighting initiate"][sNameLC]) { FeatsList["fighting initiate"][sNameLC] = { description : FtngStyles[sNameLC].description.replace(/^\n /i, '').replace(/\n /g, '. ') + ". I can replace this fighting style whenever I gain an ASI.", source : FtngStyles[sNameLC].source ? FtngStyles[sNameLC].source : FtngStyles.source } } // Copy all attributes except name, source and description for (var attr in FtngStyles[sNameLC]) { if ((/\b(name|description|source)\b/i).test(attr)) continue; FeatsList["fighting initiate"][sNameLC][attr] = FtngStyles[sNameLC][attr]; } if (!FeatsList["fighting initiate"][sNameLC].prereqeval) { FeatsList["fighting initiate"][sNameLC].prereqeval = function(v) { var knownStyles = GetFightingStyleSelection(); return knownStyles[v.choice] ? false : true; }; if (!FeatsList["fighting initiate"][sNameLC].prerequisite) FeatsList["fighting initiate"][sNameLC].prerequisite = sName + " Fighting Style is not selected anywhere else." }; }); }); FeatsList["gunner"] = { name : "Gunner", source : [["T", 80], ["UA:F2", 2]], descriptionFull : "You have a quick hand and keen eye when employing firearms, granting you the following benefits:\n \u2022 Increase your Dexterity score by 1, to a maximum of 20.\n \u2022 You gain proficiency with firearms (see \"Firearms\" in the Dungeon Master's Guide).\n \u2022 You ignore the loading property of firearms.\n \u2022 Being within 5 feet of a hostile creature doesn't impose disadvantage on your ranged attack rolls.", description : "I gain proficiency with firearms. I ignore the loading property of firearms. I don't suffer disadvantage on ranged attack rolls for being within 5 ft of a hostile creature. [+1 Dexterity]", scores : [0, 1, 0, 0, 0, 0], weaponProfs : [false, false, ["Firearms"]], calcChanges : { atkAdd : [ function (fields, v) { if ((/firearm/i).test(v.theWea.type) || (/firearm/i).test(v.theWea.list)) { fields.Description = fields.Description.replace(/([;,]? ?loading|loading[;,]? ?)/i, ''); }; }, "I ignore the loading quality of firearms." ] } }; FeatsList["metamagic adept"] = { name : "Metamagic Adept", source : [["T", 80], ["UA:F2", 2]], descriptionFull : "You've learned how to exert your will on your spells to alter how they function:\n \u2022 You learn two Metamagic options of your choice from the sorcerer class. You can use only one Metamagic option on a spell when you cast it, unless the option says otherwise. Whenever you reach a level that grants the Ability Score Improvement feature, you can replace one of these Metamagic options with another one from the sorcerer class.\n \u2022 You gain 2 sorcery points to spend on Metamagic (these points are added to any sorcery points you have from another source but can be used only on Metamagic). You regain all spent sorcery points when you finish a long rest.", description : 'I learn two Metamagic options from the sorcerer class (2nd page "Choose Feature" button). I can use only one option on a spell unless it says otherwise. I gain 2 sorcery points, which I can only use for Metamagic. I regain all expended sorcery points when I finish a long rest. I can change one ' + (typePF ? '' : 'Metamagic option ') + 'whenever I gain an ' + (typePF ? 'ASI' : 'Ability Score Improvement') + '.', bonusClassExtrachoices : [{ "class" : "sorcerer", feature : "metamagic", bonus : 2 }], extraLimitedFeatures : [{ name : "Sorcery Points", usages : 2, recovery : "long rest", addToExisting : true }], prerequisite : "Spellcasting or Pact Magic feature", prereqeval : function (v) { return v.isSpellcastingClass; } }; FeatsList["piercer"] = { name : "Piercer", source : [["T", 80], ["UA:F2", 2]], descriptionFull : "You have achieved a penetrating precision in combat, granting you the following benefits:\n \u2022 Increase your Strength or Dexterity by 1, to a maximum of 20.\n \u2022 Once per turn, when you hit a creature with an attack that deals piercing damage, you can reroll one of the attack's damage dice, and you must use the new roll.\n \u2022 When you score a critical hit that deals piercing damage to a creature, you can roll one additional damage die when determining the extra piercing damage the target takes.", description : "Once per turn when I deal piercing damage to a target, I can reroll one of the damage die and use the new roll. If I deal piercing damage on a critical hit to a target, I can roll one additional damage die. [+1 Strength or Dexterity]", scorestxt : "+1 Strength or Dexterity", calcChanges : { atkAdd : [ function (fields, v) { if ((/pierc(\.|ing)/i).test(fields.Damage_Type)) { var extraCritRegex = /\d+(d\d+ extra on a crit(ical)?( hit)?( in melee)?)/i; v.extraCritM = (v.extraCritM ? v.extraCritM : 0) + 1; if (extraCritRegex.test(fields.Description)) { fields.Description = fields.Description.replace(extraCritRegex, v.extraCritM + '$1'); } else if ((/d\d/).test(fields.Damage_Die)) { fields.Description += (fields.Description ? '; ' : '') + v.extraCritM + fields.Damage_Die.replace(/.*(d\d+).*/, '$1') + ' extra on a crit'; } if (!(/re-?roll (one|1)? ?damage/i).test(fields.Description)) { fields.Description += '; Once per turn, re-roll one damage die'; } } }, "Once per turn when I deal piercing damage to a target, I can reroll one of the damage die and use the new roll. If I deal piercing damage on a critical hit to a target, I can roll one additional damage die.", 900 ] } }; FeatsList["poisoner"] = { name : "Poisoner", source : [["T", 80], ["UA:F2", 2]], descriptionFull : "You can prepare and deliver deadly poisons, granting you the following benefits:\n \u2022 When you make a damage roll that deals poison damage, it ignores resistance to poison damage.\n \u2022 You can apply poison to a weapon or piece of ammunition as a bonus action, instead of an action.\n \u2022 You gain proficiency with the poisoner's kit if you don't already have it. With one hour of work using a poisoner's kit and expending 50 gp worth of materials, you can create a number of doses of potent poison equal to your proficiency bonus. Once applied to a weapon or piece of ammunition, the poison retains its potency for 1 minute or until you hit with the weapon or ammunition. When a creature takes damage from the coated weapon or ammunition, that creature must succeed on a DC 14 Constitution saving throw or take 2d8 poison damage and become poisoned until the end of your next turn.", description : "My poison damage rolls ignore poison resistance. As a bonus action, I can apply poison to a weapon or piece of ammo. I can use a poisoner's kit and 50 gp to create my Prof Bonus doses of poison in 1 hour. Potent 1 min after applying. DC 14 Con save or 2d8 poison damage and poisoned until the end of my next turn.", toolProfs : ["Poisoner's kit"], action : [["bonus action", "Apply poison to weapon/ammo"]] }; FeatsList["shadow touched"] = { name : "Shadow Touched", source : [["T", 80]], descriptionFull : "Your exposure to the Shadowfell's magic has changed you, granting you the following benefits:\n \u2022 Increase your Intelligence, Wisdom, or Charisma by 1, to a maximum of 20.\n \u2022 You learn the invisibility spell and one 1st-level spell of your choice. The 1st-level spell must be from the illusion or necromancy school of magic. You learn the invisibility spell and one 1st-level spell of your choice. The 1st-level spell must be from the illusion or necromancy school of magic. You can cast each of these spells without expending a spell slot. Once you cast either of these spells in this way, you can't cast that spell in this way again until you finish a long rest. You can also cast these spells using spell slots you have of the appropriate level. The spells' spellcasting ability is the ability increased by this feat.", description : "I learn Invisibility and one 1st level illusion or necromancy spell. I can cast each once per long rest at their lowest level without expending a spell slot, and can cast them if I have a spell slot to do so. My spellcasting ability is the ability I choose to increase when I gain this feat. [+1 Intelligence, Wisdom, or Charisma]", spellcastingBonus : [{ name : "Invisibility", spells : ["invisibility"], selection : ["invisibility"], firstCol : "oncelr+markedbox" }, { name : "1st-level Illus/Necro spell", 'class' : "any", school : ["Illus", "Necro"], level : [1, 1], firstCol : "oncelr+markedbox" }], spellcastingAbility : 4, allowUpCasting : true, choices : ["Intelligence", "Wisdom", "Charisma"], "intelligence" : { description : "I learn Invisibility and one 1st level illusion or necromancy spell. I can cast each once per long rest at their lowest level without expending a spell slot, and can cast them by expending a spell slot as normal. Intelligence is my spellcasting ability for these spells. [+1 Intelligence]", spellcastingAbility : 4, scores : [0, 0, 0, 1, 0, 0] }, "wisdom" : { description : "I learn Invisibility and one 1st level illusion or necromancy spell. I can cast each once per long rest at their lowest level without expending a spell slot, and can cast them by expending a spell slot as normal. Wisdom is my spellcasting ability for these spells. [+1 Wisdom]", spellcastingAbility : 5, scores : [0, 0, 0, 0, 1, 0] }, "charisma" : { description : "I learn Invisibility and one 1st level illusion or necromancy spell. I can cast each once per long rest at their lowest level without expending a spell slot, and can cast them by expending a spell slot as normal. Charisma is my spellcasting ability for these spells. [+1 Charisma]", spellcastingAbility : 6, scores : [0, 0, 0, 0, 0, 1] } }; FeatsList["skill expert"] = { name : "Skill Expert", source : [["T", 80]], descriptionFull : "You have honed your proficiency with particular skills, granting you the following benefits:\n \u2022 Increase one ability score of your choice by 1, to a maximum of 20.\n \u2022 You gain proficiency in one skill of your choice.\n \u2022 Choose one skill in which you have proficiency. You gain expertise with that skill, which means your proficiency bonus is doubled for any ability check you make with it. The skill you choose must be one that isn't already benefiting from a feature, such as Expertise, that doubles your proficiency bonus.", description : "I gain proficiency in one skill and expertise in that same skill or another skill I'm proficient with. [+1 to one ability score of my choice]", skillstxt : "Proficiency with one skill, and\n Expertise with one skill I'm proficient with", scorestxt : "+1 to one ability score of my choice" }; FeatsList["slasher"] = { name : "Slasher", source : [["T", 81], ["UA:F2", 3]], descriptionFull : "You've learned where to cut to have the greatest results, granting you the following benefits:\n \u2022 Increase your Strength or Dexterity by 1, to a maximum of 20.\n \u2022 Once per turn when you hit a creature with an attack that deals slashing damage, you can reduce the speed of the target by 10 feet until the start of your next turn.\n \u2022 When you score a critical hit that deals slashing damage to a creature, you grievously wound it. Until the start of your next turn, the target has disadvantage on all attack rolls.", description : "Once per turn when I deal slashing damage to a target, I can reduce its speed by 10 ft until the start of my next turn. When I score a critical hit that deals slashing damage to a creature, the grievous wound causes it to have disadvantage on all attack rolls until the start of my next turn. [+1 Strength or Dexterity]", scorestxt : "+1 Strength or Dexterity" }; FeatsList["telekinetic"] = { name : "Telekinetic", source : [["T", 81]], descriptionFull : "You learn to move things with your mind, granting you the following benefits:\n \u2022 Increase your Intelligence, Wisdom, or Charisma by 1, to a maximum of 20.\n \u2022 You learn the mage hand cantrip. You can cast it without verbal or somatic components, and you can make the spectral hand invisible. If you already know this spell, its range increases by 30 feet when you cast it. Its spellcasting ability is the ability increased by this feat.\n \u2022 As a bonus action, you can try to telekinetically shove one creature you can see within 30 feet of you. When you do so, the target must succeed on a Strength saving throw (DC 8 + your proficiency bonus + the ability modifier of the score increased by this feat) or be moved 5 feet toward you or away from you. A creature can willingly fail this save.", description : "I know the Mage Hand cantrip, can cast it without components, and the spectral hand can be invisible. As a bonus action, I can shove one creature I can see within 30 ft. It must make a Str save vs. this feat's spell save DC or be moved 5 ft from or towards me. My spellcasting ability is the ability I choose to increase when I gain this feat. [+1 Int, Wis, or Cha]", action : [["bonus action", " Shove"]], spellcastingBonus : [{ name : "Mage Hand", spells : ["mage hand"], selection : ["mage hand"], }], spellcastingAbility : 4, calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { if (spellKey !== "mage hand") return; spellObj.components = ""; if (spellObj.description === SpellsList["mage hand"].description) spellObj.description = "Create (in)visible spectral hand for simple tasks or carry up to 10 lb; 1 a to control; can't have multiple"; var rangeRx = /(\d+)( ?ft| ?m)/i; if (!/^(?=.*telekinetic)(?=.*feat).*$/i.test(CurrentSpells[spName].name) && rangeRx.test(spellObj.range)) { // add the +30 ft range only if not the entry for the feat itself var spRangeM = spellObj.range.match(rangeRx); spellObj.range = spellObj.range.replace(rangeRx, Number(spRangeM[1]) + (What("Unit System") === "metric" ? 9 : 30) + spRangeM[2]); } return true; }, "My Telekinetic feat allows me to cast the Mage Hand cantrip without verbal or somatic components and I can make the spectral hand invisible. If I already know the cantrip from another source, its range is also increased with 30 ft." ] }, choices : ["Intelligence", "Wisdom", "Charisma"], "intelligence" : { description : "I know the Mage Hand cantrip, can cast it without components, and the spectral hand can be invisible. As a bonus action, I can shove one creature I can see within 30 ft. It must make a Str" + (typePF ? "" : "ength") + " save vs. this feat's spell save DC or be moved 5 ft" + (typePF ? "" : " away") + " from or towards me. Intelligence is my spellcasting ability for these. [+1 Intelligence]", spellcastingAbility : 4, scores : [0, 0, 0, 1, 0, 0] }, "wisdom" : { description : "I know the Mage Hand cantrip, can cast it without components, and the spectral hand can be invisible. As a bonus action, I can shove one creature I can see within 30 ft. It must make a Str" + (typePF ? "" : "ength") + " save vs. this feat's spell save DC or be moved 5 ft" + (typePF ? "" : " away") + " from or towards me. Wisdom is my spellcasting ability for these. [+1 Wisdom]", spellcastingAbility : 5, scores : [0, 0, 0, 0, 1, 0] }, "charisma" : { description : "I know the Mage Hand cantrip, can cast it without components, and the spectral hand can be invisible. As a bonus action, I can shove one creature I can see within 30 ft. It must make a Str" + (typePF ? "" : "ength") + " save vs. this feat's spell save DC or be moved 5 ft" + (typePF ? "" : " away") + " from or towards me. Charisma is my spellcasting ability for these. [+1 Charisma]", spellcastingAbility : 6, scores : [0, 0, 0, 0, 0, 1] } }; FeatsList["telepathic"] = { name : "Telepathic", source : [["T", 81]], descriptionFull : "You awaken the ability to mentally connect with others, granting you the following benefits:\n \u2022 Increase your Intelligence, Wisdom, or Charisma by 1, to a maximum of 20.\n \u2022 You can speak telepathically to any creature you can see within 60 feet of you. Your telepathic utterances are in a language you know, and the creature understands you only if it knows that language. Your communication doesn't give the creature the ability to respond to you telepathically.\n \u2022 You can cast the detect thoughts spell, requiring no spell slot or components, and you must finish a long rest before you can cast it this way again. Your spellcasting ability for the spell is the ability increased by this feat. If you have spell slots of 2nd level or higher, you can cast this spell with them.", description : "I can telepathically speak to a creature I can see within 60 ft in a language I know, but it can't respond telepathically. I can cast Detect Thoughts once per long rest at its lowest level, requiring no spell slot or components, and can cast it using a spell slot as normal. My spellcasting ability is the ability I increase with this feat. [+1 Int, Wis, or Cha]", spellcastingBonus : [{ name : "Detect Thoughts", spells : ["detect thoughts"], selection : ["detect thoughts"], firstCol : "oncelr+markedbox" }], spellcastingAbility : 4, allowUpCasting : true, spellChanges : { "detect thoughts" : { components : "(V,S,M)", changes : "My Telepathic feat allows me to cast Detect Thoughts once per long rest without requiring a spell slot or spell components, or by using a spell slot and cast it with components as normal." } }, choices : ["Intelligence", "Wisdom", "Charisma"], "intelligence" : { description : "I can telepathically speak to a creature I can see within 60 ft in a language I know, but it can't respond telepathically. I can cast Detect Thoughts once per long rest at its lowest level, requiring no spell slot or components, and can cast it using a spell slot as normal. Intelligence is my spellcasting ability for this. [+1 Int" + (typePF ? "" : "elligence") + "]", spellcastingAbility : 4, scores : [0, 0, 0, 1, 0, 0] }, "wisdom" : { description : "I can telepathically speak to a creature I can see within 60 ft in a language I know, but it can't respond telepathically. I can cast Detect Thoughts once per long rest at its lowest level, requiring no spell slot or components, and can cast it using a spell slot as normal. Wisdom is my spellcasting ability for this. [+1 Wis" + (typePF ? "" : "dom") + "]", spellcastingAbility : 5, scores : [0, 0, 0, 0, 1, 0] }, "charisma" : { description : "I can telepathically speak to a creature I can see within 60 ft in a language I know, but it can't respond telepathically. I can cast Detect Thoughts once per long rest at its lowest level, requiring no spell slot or components, and can cast it using a spell slot as normal. Charisma is my spellcasting ability for this. [+1 Cha" + (typePF ? "" : "risma") + "]", spellcastingAbility : 6, scores : [0, 0, 0, 0, 0, 1] } }; // >>>>>>>>>>>>>>>>>> // // >>> New Spells >>> // // >>>>>>>>>>>>>>>>>> // SpellsList["dream of the blue veil"] = { name : "Dream of the Blue Veil", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["T", 106]], level : 7, school : "Conj", time : "10 min", range : "20 ft", components : "V,S,M\u0192", compMaterial : "A magic item or a willing creature from the destination world", duration : "6 hours", description : "9 willing crea unconscious for duration, after that travel to origin material plane of magic item or crea", descriptionFull : "You and up to eight willing creatures within range fall unconscious for the spell's duration and experience visions of another world on the Material Plane, such as Oerth, Toril, Krynn, or Eberron. If the spell reaches its full duration, the visions conclude with each of you encountering and pulling back a mysterious blue curtain. The spell then ends with you mentally and physically transported to the world that was in the visions." + "\n To cast this spell, you must have a magic item that originated on the world you wish to reach, and you must be aware of the world's existence, even if you don't know the world's name. Your destination in the other world is a safe location within 1 mile of where the magic item was created. Alternatively, you can cast the spell if one of the affected creatures was born on the other world, which causes your destination to be a safe location within 1 mile of where that creature was born." + "\n The spell ends early on a creature if that creature takes any damage, and the creature isn't transported. If you take any damage, the spell ends for you and all the other creatures, with none of you being transported." }; SpellsList["intellect fortress"] = { name : "Intellect Fortress", classes : ["artificer", "bard", "sorcerer", "warlock", "wizard"], source : [["T", 107]], level : 3, school : "Abjur", time : "1 a", range : "30 ft", components : "V", duration : "Conc, 1 h", description : "1+1/SL crea, each max 30 ft apart, has Psychic damage resistance and adv. on Int, Wis, and Cha saves", descriptionFull : "For the duration, you or one willing creature you can see within range has resistance to psychic damage, as well as advantage on Intelligence, Wisdom, and Charisma saving throws." + AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, you can target one additional creature for each slot level above 3rd. The creatures must be within 30 feet of each other when you target them." }; SpellsList["mind sliver"] = { name : "Mind Sliver", classes : ["sorcerer", "warlock", "wizard"], source : [["T", 108], ["UA:SnW", 4], ["UA:FRnW", 7], ["UA:POR", 7]], level : 0, school : "Ench", time : "1 a", range : "60 ft", components : "V", duration : "1 rnd", save : "Int", description : "1 crea save or 1d6 Psychic dmg, -1d4 on first save before my next turn ends; +1d6 at CL 5, 11, and 17", descriptionShorter : "1 crea save or 1d6 Psychic dmg, -1d4 on 1st save before my next turn end; +1d6 at CL 5/11/17", descriptionCantripDie : "1 crea save or `CD`d6 Psychic dmg and subtract 1d4 from first saving throw before my next turn ends", descriptionFull : "You drive a disorienting spike of psychic energy into the mind of one creature you can see within range. The target must succeed on an Intelligence saving throw or take 1d6 psychic damage and subtract 1d4 from the next saving throw it makes before the end of your next turn." + "\n This spell's damage increases by 1d6 when you reach certain levels: 5th level (2d6), 11th level (3d6), and 17th level (4d6)." }; WeaponsList["mind sliver"] = { regExpSearch : /^(?=.*mind)(?=.*sliver).*$/i, name : "Mind Sliver", source : [["T", 108], ["UA:SnW", 4], ["UA:FRnW", 7], ["UA:POR", 7]], list : "spell", ability : 6, type : "Cantrip", damage : ["C", 6, "psychic"], range : "60 ft", description : "1 creature Int save, success - no damage, fail - also -1d4 on first save before my next turn ends", abilitytodamage : false, dc : true }; SpellsList["spirit shroud"] = { name : "Spirit Shroud", classes : ["cleric", "paladin", "warlock", "wizard"], source : [["T", 108]], level : 3, school : "Necro", time : "1 bns", range : "S:10-ft rad", components : "V,S", duration : "Conc, 1 min", description : "My atks +1d8+1d8/2SL Cold/Necro/Radiant dmg, no heal until next turn; any crea I see -10 ft spd", descriptionShorter : "My atks +1d8+1d8/2SL Cold/Necro/Radiant dmg, no heal 1 rnd; any crea -10 ft spd", descriptionFull : "You call forth spirits of the dead, which flit around you for the spell's duration. The spirits are intangible and invulnerable."+ "\n Until the spell ends, any attack you make deals 1d8 extra damage when you hit a creature within 10 feet of you. This damage is radiant, necrotic, or cold (your choice when you cast the spell). Any creature that takes this damage can't regain hit points until the start of your next turn."+ "\n In addition, any creature of your choice that you can see that starts its turn within 10 feet of you has its speed reduced by 10 feet until the start of your next turn."+ AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d8 for every two slot levels above 3rd.", dynamicDamageBonus : { multipleDmgTypes : { dmgTypes : ["cold", "necrotic", "radiant"], inDescriptionAs : "Cold/Necro/Radiant" } } }; SpellsList["summon aberration"] = { name : "Summon Aberration", classes : ["warlock", "wizard"], source : [["T", 109]], level : 4, school : "Conj", time : "1 a", range : "90 ft", components : "V,S,M\u0192", compMaterial : "A pickled tentacle and an eyeball in a platinum-inlaid vial worth at least 400 gp", duration : "Conc, 1 h", description : "Summon choice of Abberant Spirit; obeys commands; takes turn after mine; vanishes at 0 hp (400gp)", descriptionFull : "You call forth an aberrant spirit. It manifests in an unoccupied space that you can see within range. This corporeal form uses the Aberrant Spirit stat block. When you cast the spell, choose Beholderkin, Slaad, or Star Spawn. The creature resembles an aberration of that kind, which determines certain traits in its stat block. The creature disappears when it drops to 0 hit points or when the spell ends.\n The creature is an ally to you and your companions. In combat, the creature shares your initiative count, but it takes its turn immediately after yours. It obeys your verbal commands (no action required by you). If you don't issue any, it takes the Dodge action and uses its move to avoid danger." + AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, use the higher level wherever the spell's level appears in the stat block." }; SpellsList["summon beast"] = { name : "Summon Beast", classes : ["druid", "ranger"], source : [["T", 109]], level : 2, school : "Conj", time : "1 a", range : "90 ft", components : "V,S,M\u0192", compMaterial : "A feather, tuft of fur, and fish tail inside a gilded acorn worth at least 200 gp", duration : "Conc, 1 h", description : "Summon choice of Bestial Spirit; obeys commands; takes turn after mine; disappears at 0 hp (200gp)", descriptionFull : "You call forth a bestial spirit. It manifests in an unoccupied space that you can see within range. This corporeal form uses the Bestial Spirit stat block. When you cast the spell, choose an environment: Air, Land, or Water. The creature resembles an animal of your choice that is native to the chosen environment, which determines certain traits in its stat block. The creature disappears when it drops to 0 hit points or when the spell ends.\n The creature is an ally to you and your companions. In combat, the creature shares your initiative count, but it takes its turn immediately after yours. It obeys your verbal commands (no action required by you). If you don't issue any, it takes the Dodge action and uses its move to avoid danger." + AtHigherLevels + "When you cast this spell using a spell slot of 3rd level or higher, use the higher level wherever the spell's level appears in the stat block." }; SpellsList["summon celestial"] = { name : "Summon Celestial", classes : ["cleric", "paladin"], source : [["T", 110]], level : 5, school : "Conj", time : "1 a", range : "90 ft", components : "V,S,M\u0192", compMaterial : "A golden reliquary worth at least 500 gp", duration : "Conc, 1 h", description : "Summon choice of Celestial Spirit; obeys commands; takes turn after mine; disappears at 0 hp (500gp)", descriptionFull : "You call forth a celestial spirit. It manifests in an angelic form in an unoccupied space that you can see within range. This corporeal form uses the Celestial Spirit stat block. When you cast the spell, choose Avenger or Defender. Your choice determines the creature's attack in its stat block. The creature disappears when it drops to 0 hit points or when the spell ends.\n The creature is an ally to you and your companions. In combat, the creature shares your initiative count, but it takes its turn immediately after yours. It obeys your verbal commands (no action required by you). If you don't issue any, it takes the Dodge action and uses its move to avoid danger." + AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, use the higher level wherever the spell's level appears in the stat block." }; SpellsList["summon construct"] = { name : "Summon Construct", classes : ["artificer", "wizard"], source : [["T", 111]], level : 4, school : "Conj", time : "1 a", range : "90 ft", components : "V,S,M\u0192", compMaterial : "An ornate stone and metal lockbox worth at least 400 gp", duration : "Conc, 1 h", description : "Summon choice of Construct Spirit; obeys commands; takes turn after mine; vanishes at 0 hp (400gp)", descriptionFull : "You call forth the spirit of a construct. It manifests in an unoccupied space that you can see within range. This corporeal form uses the Construct Spirit stat block. When you cast the spell, choose a material: Clay, Metal, or Stone. The creature resembles a golem or a modron (your choice) made of the chosen material, which determines certain traits in its stat block. The creature disappears when it drops to 0 hit points or when the spell ends.\n The creature is an ally to you and your companions. In combat, the creature shares your initiative count, but it takes its turn immediately after yours. It obeys your verbal commands (no action required by you). If you don't issue any, it takes the Dodge action and uses its move to avoid danger." + AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, use the higher level wherever the spell's level appears in the stat block." }; SpellsList["summon elemental"] = { name : "Summon Elemental", classes : ["druid", "ranger", "wizard"], source : [["T", 111]], level : 4, school : "Conj", time : "1 a", range : "90 ft", components : "V,S,M\u0192", compMaterial : "Air, a pebble, ash, and water inside a gold-inlaid vial worth at least 400 gp", duration : "Conc, 1 h", description : "Summon choice of Elemental Spirit; obeys commands; takes turn after mine; vanishes at 0 hp (400gp)", descriptionFull : "You call forth an elemental spirit. It manifests in an unoccupied space that you can see within range. This corporeal form uses the Elemental Spirit stat block. When you cast the spell, choose an element: Air, Earth, Fire, or Water. The creature resembles a bipedal form wreathed in the chosen element, which determines certain traits in its stat block. The creature disappears when it drops to 0 hit points or when the spell ends.\n The creature is an ally to you and your companions. In combat, the creature shares your initiative count, but it takes its turn immediately after yours. It obeys your verbal commands (no action required by you). If you don't issue any, it takes the Dodge action and uses its move to avoid danger." + AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, use the higher level wherever the spell's level appears in the stat block." }; SpellsList["summon fey"] = { name : "Summon Fey", classes : ["druid", "ranger", "warlock", "wizard"], source : [["T", 112]], level : 3, school : "Conj", time : "1 a", range : "90 ft", components : "V,S,M\u0192", compMaterial : "A gilded flower worth at least 300 gp", duration : "Conc, 1 h", description : "Summon choice of Fey Spirit; obeys commands; takes turn after mine; disappears at 0 hp (300gp)", descriptionFull : "You call forth a fey spirit. It manifests in an unoccupied space that you can see within range. This corporeal form uses the Fey Spirit stat block. When you cast the spell, choose a mood: Fuming, Mirthful, or Tricksy. The creature resembles a fey creature of your choice marked by the chosen mood, which determines one of the traits in its stat block. The creature disappears when it drops to 0 hit points or when the spell ends.\n The creature is an ally to you and your companions. In combat, the creature shares your initiative count, but it takes its turn immediately after yours. It obeys your verbal commands (no action required by you). If you don't issue any, it takes the Dodge action and uses its move to avoid danger." + AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, use the higher level wherever the spell's level appears in the stat block." }; SpellsList["summon fiend"] = { name : "Summon Fiend", classes : ["warlock", "wizard"], source : [["T", 112]], level : 6, school : "Conj", time : "1 a", range : "90 ft", components : "V,S,M\u0192", compMaterial : "Humanoid blood inside a ruby vial worth at least 600 gp", duration : "Conc, 1 h", description : "Summon choice of Fiendish Spirit; obeys commands; takes turn after mine; disappears at 0 hp (600gp)", descriptionFull : "You call forth a fiendish spirit. It manifests in an unoccupied space that you can see within range. This corporeal form uses the Fiendish Spirit stat block. When you cast the spell, choose Demon, Devil, or Yugoloth. The creature resembles a fiend of the chosen type, which determines certain traits in its stat block. The creature disappears when it drops to 0 hit points or when the spell ends.\n The creature is an ally to you and your companions. In combat, the creature shares your initiative count, but it takes its turn immediately after yours. It obeys your verbal commands (no action required by you). If you don't issue any, it takes the Dodge action and uses its move to avoid danger." + AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, use the higher level wherever the spell's level appears in the stat block." }; SpellsList["summon shadowspawn"] = { name : "Summon Shadowspawn", classes : ["warlock", "wizard"], source : [["T", 113]], level : 3, school : "Conj", time : "1 a", range : "90 ft", components : "V,S,M\u0192", compMaterial : "Tears inside a gem worth at least 300 gp", duration : "Conc, 1 h", description : "Summon choice of Shadow Spirit; obeys commands; takes turn after mine; disappears at 0 hp (300gp)", descriptionFull : "You call forth a shadowy spirit. It manifests in an unoccupied space that you can see within range. This corporeal form uses the Shadow Spirit stat block. When you cast the spell, choose an emotion: Fury, Despair, or Fear. The creature resembles a misshapen biped marked by the chosen emotion, which determines certain traits in its stat block. The creature disappears when it drops to 0 hit points or when the spell ends.\n The creature is an ally to you and your companions. In combat, the creature shares your initiative count, but it takes its turn immediately after yours. It obeys your verbal commands (no action required by you). If you don't issue any, it takes the Dodge action and uses its move to avoid danger." + AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, use the higher level wherever the spell's level appears in the stat block." }; SpellsList["summon undead"] = { name : "Summon Undead", classes : ["warlock", "wizard"], source : [["T", 114]], level : 3, school : "Necro", time : "1 a", range : "90 ft", components : "V,S,M\u0192", compMaterial : "A gilded skull worth at least 300 gp", duration : "Conc, 1 h", description : "Summon choice of Undead Spirit; obeys commands; takes turn after mine; disappears at 0 hp (300gp)", descriptionFull : "You call forth an undead spirit. It manifests in an unoccupied space that you can see within range. This corporeal form uses the Undead Spirit stat block. When you cast the spell, choose the creature's form: Ghostly, Putrid, or Skeletal. The spirit resembles an undead creature with the chosen form, which determines certain traits in its stat block. The creature disappears when it drops to 0 hit points or when the spell ends.\n The creature is an ally to you and your companions. In combat, the creature shares your initiative count, but it takes its turn immediately after yours. It obeys your verbal commands (no action required by you). If you don't issue any, it takes the Dodge action and uses its move to avoid danger." + AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, use the higher level wherever the spell's level appears in the stat block." }; SpellsList["tasha's caustic brew"] = { name : "Tasha's Caustic Brew", nameAlt : "Caustic Brew", classes : ["artificer", "sorcerer", "wizard"], source : [["T", 115]], level : 1, school : "Evoc", time : "1 a", range : "S:30-ft line", components : "V,S,M", compMaterial : "A bit of rotten food", duration : "Conc, 1 min", save : "Dex", description : "30-ft long 5-ft wide all save or 2d4+2d4/SL Acid dmg at start of turn; action to clean self or adjacent", descriptionShorter : "30-ft long 5-ft wide all save or 2d4+2d4/SL Acid dmg at turn start; 1 a clean self/adjacent", descriptionFull : "A stream of acid emanates from you in a line 30 feet long and 5 feet wide in a direction you choose. Each creature in the line must succeed on a Dexterity saving throw or be covered in acid for the spell's duration or until a creature uses its action to scrape or wash the acid off itself or another creature. A creature covered in the acid takes 2d4 acid damage at start of each of its turns." + AtHigherLevels + "When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 2d4 for each slot level above 1st." }; SpellsList["tasha's mind whip"] = { name : "Tasha's Mind Whip", nameAlt : "Mind Whip", regExpSearch : /^(?=.*mind)(?=.*(whip|thrust)).*$/i, // "Mind Thrust" in UA:POR classes : ["sorcerer", "wizard"], source : [["T", 115], ["UA:POR", 8]], level : 2, school : "Ench", time : "1 a", range : "90 ft", components : "V", duration : "1 rnd", save : "Int", description : "1+1/SL crea, max 30 ft apart; 3d6 Psychic dmg; no rea; only move, act, or bns; save half, no act limit", descriptionShorter : "1+1/SL crea, max 30 ft apart; 3d6 Psychic dmg; no rea; move, act, or bns; save half, no act limit", descriptionFull : "You psychically lash out at one creature you can see within range. The target must make an Intelligence saving throw. On a failed save, the target takes 3d6 psychic damage, and it can't take a reaction until the end of its next turn. Moreover, on its next turn, it must choose whether it gets a move, an action, or a bonus action; it gets only one of the three. On a successful save, the target takes half as much damage and suffers none of the spell's other effects." + AtHigherLevels + "When you cast this spell using a spell slot of 3rd level or higher, you can target one additional creature for each slot level above 2nd. The creatures must be within 30 feet of each other when you target them." }; SpellsList["tasha's otherworldly guise"] = { name : "Tasha's Otherworldly Guise", nameShort : "T's Otherworldly Guise", nameAlt : "Otherworldly Guise", classes : ["sorcerer", "warlock", "wizard"], source : [["T", 116]], level : 6, school : "Trans", time : "1 bns", range : "Self", components : "V,S,M\u0192", compMaterial : "An object engraved with a symbol of the Outer Planes, worth at least 500 gp", duration : "Conc, 1 min", description : "Fire/Poison or Radiant/Necrotic/Charm immune; 40 ft fly; +2 AC; 2 atks; spellcast. abi atks (500gp)", descriptionFull : "Uttering an incantation, you draw on the magic of the Lower Planes or Upper Planes (your choice) to transform yourself. You gain the following benefits until the spell ends:" + "\n \u2022 You are immune to fire and poison damage (Lower Planes) or radiant and necrotic damage (Upper Planes)." + "\n \u2022 You are immune to the poisoned condition (Lower Planes) or the charmed condition (Upper Planes)." + "\n \u2022 Spectral wings appear on your back, giving you a flying speed of 40 feet." + "\n \u2022 You have a +2 bonus to AC." + "\n \u2022 All your weapon attacks are magical, and when you make a weapon attack, you can use your spellcasting ability modifier, instead of Strength or Dexterity, for the attack and damage rolls." + "\n \u2022 You can attack twice, instead of once, when you take the Attack action on your turn. You ignore this benefit if you already have a feature, like Extra Attack, that lets you attack more than once when you take the Attack action on your turn." }; // >>>>>>>>>>>>>>>>>>> // // >>> Magic Items >>> // // >>>>>>>>>>>>>>>>>>> // // Tattoos var TCoE_magicTattoosDescription = desc([ " >>Tattoo Attunement<<. To attune to this item, you hold the needle to your skin where you want the tattoo to appear, pressing the needle there throughout the attunement process. When the attunement is complete, the needle turns into the ink that becomes the tattoo, which appears on the skin.", " If your attunement to the tattoo ends, the tattoo vanishes, and the needle reappears in your space.", "\n>>Magic Tattoos<< (TCoE 118)", " Blending magic and artistry with ink and needles, magic tattoos imbue their bearers with wondrous abilities. Magic tattoos are initially bound to magic needles, which transfer their magic to a creature.", " Once inscribed on a creature's body, damage or injury doesn't impair the tattoo's function, even if the tattoo is defaced. When applying a magic tattoo, a creature can customize the tattoo's appearance. A magic tattoo can look like a brand, scarification, a birthmark, patterns of scale, or any other cosmetic alteration.", " The rarer a magic tattoo is, the more space it typically occupies on a creature's skin. The table below offers guidelines for how large a given tattoo is.", "\n>>Tattoo Rarity\tArea Covered<<", "Common \tOne hand or foot or a quarter of a limb", "Uncommon \tHalf a limb or the scalp", "Rare\t\tOne limb", "Very Rare \tTwo limbs or the chest or upper back", "Legendary \tTwo limbs and the torso" ], "\n "); magicTattoosTxt = { // a public variable to be used for any magical tattoo that uses these rules base : TCoE_magicTattoosDescription, unicode : TCoE_magicTattoosDescription.replace(/>>(.*?)<>(.*?)<>(.*?)<>Sentience<<. Nepenthe is a sentient, neutral evil weapon with an Intelligence of 10, a Wisdom of 8, and a Charisma of 18. It has hearing and darkvision out to a range of 60 feet. It can read and understand Elvish. It can also speak Elvish, but only through the voice of its wielder, with whom the sword can communicate telepathically.", ">>Personality<<. In its lifetime, the sword has beheaded thousands of criminals, not all of whom were guilty of the crimes for which they were convicted. The sword cannot distinguish the guilty from the innocent. With each beheading, it hungers for more justice and blood. The sword is corrupt and irredeemable." ] MagicItemsList["nepenthe"] = { name : "Nepenthe", source : [["VRGtR", 137]], type : "weapon (any sword)", rarity : "legendary", magicItemTable : "I", attunement : true, prerequisite : "Requires attunement by a paladin", prereqeval : function (v) { return classes.known.paladin ? true : false; }, description : "This sentient holy avenger longsword gives me a +3 bonus to attack and damage rolls. It does +2d10 radiant damage against fiends and undead. While holding the drawn sword, I have a 10-ft radius aura (30-ft if level 17 paladin) that grants me and my allies adv. on saves against spells and magical effects.", descriptionFull : VRGtR_nepentheFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)<>(.*?)<>Sentience<<. Snicker-Snack is a sentient, chaotic good greatsword with an Intelligence of 9, a Wisdom of 14, and a Charisma of 18. It has hearing and darkvision out to a range of 120 feet. It can speak, read, and understand Common, and its voice sounds silvery and melodic. Snicker-Snack craves the destruction of evil Dragons and urges you to seek out these creatures and slay them.", ">>Personality<<. Snicker-Snack has a fickle personality. It ends its attunement to you if you miss on attack rolls with the weapon three times in a row. Each time you finish a long rest after that happens, you can attempt to regain the sword's trust by making a contested Charisma check against Snicker-Snack. If you win the contest, your attunement to the weapon is instantly restored. Your attunement to the weapon can't be restored in any other way." ]; MagicItemsList["snicker-snack"] = { name : "Snicker-Snack", source : [["WBtW", 213]], type : "weapon (greatsword)", rarity : "legendary", attunement : true, prerequisite : "Requires attunement by a non-evil creature", prereqeval : function(v) { return !/evil/i.test(What("Alignment")); }, description : "I have a +3 bonus on attack and damage rolls with this sentient magic greatsword and can use Cha instead of Str. It ignores slashing resistance. On a 20 to hit, it cuts off " + (typePF ? "a head" : "one head, possibly killing it instantly") + ". If the target has legendary actions, no head, too wide neck, or is immune to slashing damage, it takes +6d8 damage instead. See Notes.", descriptionFull : WBtW_Snicker_Snack_Full_Description.join("\n ").replace(/>>(.*?)< What('Str')) { fields.Mod = 6; } }, "I can use my Charisma modifier instead of my Strength modifier for attack and damage rolls made with Snicker-Snack." ] } } var WBtW_Steel_Full_Description = [ "You have a +2 bonus to attack and damage rolls made with this magic weapon.", ">>Revivify<<. You can use an action to cast the revivify spell from the sword. You must touch the target with the sword to cast the spell. Once this property of the weapon is used, it can't be used again until the next dawn.", ">>Sentience<<. Steel is a sentient, lawful good longsword with an Intelligence of 8, a Wisdom of 11, and a Charisma of 15. It can see and hear out to a range of 60 feet. The sword can speak, read, and understand Common and Draconic. It frets over your well-being while you are attuned to it, and it doesn't like to back down from a fight." ]; MagicItemsList["steel"] = { name : "Steel", source : [["WBtW", 214]], type : "weapon (longsword)", rarity : "very rare", attunement : true, prerequisite : "Requires attunement by a good-aligned creature", prereqeval : function(v) { return /good/i.test(What("Alignment")); }, description : "This sentient longsword adds +2 to attack and damage rolls made with it. As an action once per dawn, I can use it to cast Revivify on a target I touch with the sword. Steel is lawful good and frets over my well-being and doesn't like to back down from a fight. It has Int 8, Wis 11, and Cha 15. See Notes page.", descriptionFull : WBtW_Steel_Full_Description.join("\n ").replace(/>>(.*?)<>Magic Weapon<<. In the hands of one who is attuned to it, the vane can be wielded as a magic mace that grants a +3 bonus to attack and damage rolls made with it. In addition, the vane deals an extra 1d8 radiant damage on a hit.", ">>Sense Mood<<. While the vane is inside the perimeter of the Witchlight Carnival, it can sense the mood of every creature in the carnival that has an Intelligence of 4 or higher. As an action, a creature attuned to the vane can use it to pinpoint the location of the happiest creature in the carnival.", "The butterfly shape at the top of the vane spins slowly clockwise when spirits in the carnival are generally high; if the general mood in the carnival is dour, the top of the vane spins slowly counterclockwise.", ">>Sentience<<. The vane is a sentient, chaotic good wondrous item with an Intelligence of 11, a Wisdom of 14, and a Charisma of 14. It has hearing and normal vision out to a range of 30 feet, and it communicates by transmitting emotion to the creature attuned to it. Its purpose is to make sure everyone in the Witchlight Carnival is having a good time.", ">>Additional Properties<<. The vane has the following additional properties:", "\u2022 The creature holding the vane has vulnerability to lightning damage.", "\u2022 The creature attuned to the vane can't be blinded, deafened, petrified, or stunned.", "\u2022 While carrying the vane, the creature attuned to it can cast the dancing lights, polymorph, or ray of frost spell as an action, requiring no spell components and using Charisma as the spellcasting ability. After the vane's polymorph spell is cast, roll a d8; on a roll of 3 or 8, the vane can't be used to cast this spell again until the next dawn." ]; MagicItemsList["witchlight vane"] = { name : "Witchlight Vane", source : [["WBtW", 27]], type : "wondrous item", rarity : "legendary", attunement : true, prerequisite : "Requires attunement by a mister light or his handpicked successor", description : "I can use this sentient ornate rod as a +3 mace that deals an extra 1d8 radiant damage on a hit. It can sense the mood of every creature in the carnival. As an action, I can pinpoint the happiest in the carnival. I can use it to cast spells. I can't be blinded, deafened, petrified, or stunned. See Notes page.", descriptionLong : "This sentient ornate rod is topped by a pair of butterfly wings and incorporates bits of red glass into its length. I can use it as a +3 mace that deals an extra 1d8 radiant damage on a hit. It can sense the mood of every creature in the carnival. As an action, I can use it to pinpoint the happiest in the carnival. I can use it to cast Dancing Light, Ray of Frost, and Polymorph. After I use it to cast Polymorph, roll a d8. On a roll of 3 or 8, the vane can't be used to cast Polymorph again until the next dawn. It makes me vulnerable to lightning damage, but I can't be blinded, deafened, petrified, or stunned. See Notes page.", descriptionFull : WBtW_Witchlight_Vane_Full_Description.join("\n ").replace(/>>(.*?)<>Carnival Setup and Takedown<<. The creature attuned to the watch can use an action to initiate the packing up or the unpacking of the Witchlight Carnival, provided the creature and the carnival are on the same plane of existence. In the span of 1 hour, all objects that are elements of the carnival are magically whisked about until everything is packed up and ready for travel, or unpacked and assembled. The watch has no effect on creatures, which can move about freely and safely while the carnival is being set up or taken down. Once the process of packing up or unpacking the carnival begins, it can't be stopped until the task is complete. When the watch is used to pack up or unpack the carnival, this property cannot be used again until 8 hours have elapsed.", ">>Additional Properties<<. The pocket watch has the following additional properties:", "\u2022 While carrying the watch, the creature attuned to it can cast the fire bolt, invisibility, or message spell as an action, requiring no spell components and using Intelligence as the spellcasting ability. After the watch's invisibility spell is cast, roll a d8; on a roll of 3 or 8, the watch can't be used to cast this spell again until the next dawn.", "\u2022 The creature attuned to the watch gains 30 pounds. This extra weight vanishes when the attunement ends.", "\u2022 The creature attuned to the watch must eat and drink eight times the normal amount each day." ]; MagicItemsList["witchlight watch"] = { name : "Witchlight Watch", source : [["WBtW", 25]], type : "wondrous item", rarity : "legendary", attunement : true, prerequisite : "Requires attunement by a mister witch or his handpicked successor", description : "As an action once per 8 hours, I can use this ornate pocket watch to initiate the (un)packing of the carnival over the next hour. I can use it to cast Fire Bolt, Message, and Invisibility. After it casts Invisibility, I roll a d8. On a roll of 3 or 8, I can't cast this again until the next dawn. See Notes page.", descriptionLong : "This ornate pocket watch is fastened to the end of a gold chain and glows with a faint golden light when opened. As an action once per 8 hours, I can use this ornate pocket watch to initiate the (un)packing of the carnival over the next hour, provided the carnival and I are on the same plane of existence. I can use it to cast Fire Bolt, Message, and Invisibility. After I use it to cast Invisibility, roll a d8. On a roll of 3 or 8, it can't be used to cast Invisibility again until the next dawn. As long as I'm attuned to it, I'm 30 lb heavier and must eat and drink eight times the normal amount each day. See Notes page.", descriptionFull : WBtW_Witchlight_Watch_Full_Description.join("\n ").replace(/>>(.*?)<>TYPE<< Breath Weapon: When I take the Attack action on my turn, I can replace one attack with a breath weapon that deals 1d10 >>type<< damage to all in a 5-ft by 30-ft line, Dex save halves (DC 8 + Con mod + Proficiency Bonus). I can do this my Proficiency Bonus per long rest. The damage increases with +1d10 at 5th, 11th, and 17th level.", "Chromatic Warding: From 5th level, I can protect myself using my draconic energies. As an action once per long rest, I can become immune to >>type<< damage for 1 minute." ], "\n \u2022 "), features : { "chromatic warding" : { name : "Chromatic Warding", source : [["FToD", 10]], minlevel : 5, usages : 1, recovery : "long rest", action : [["action", ""]] } } }, Gem : { regExpSearch : /^(?=.*gem)(?=.*dragonborn).*$/i, source : [["FToD", 11]], variants : [["Amethyst", "Force"], ["Crystal", "Radiant"], ["Emerald", "Psychic"], ["Sapphire", "Thunder"], ["Topaz", "Necrotic"]], breathWeaponShape : "15-ft cone", trait : desc([ ">>TYPE<< Breath Weapon: When I take the Attack action on my turn, I can replace one attack with a breath weapon that deals 1d10 >>type<< damage to all in a 15-ft cone, Dex save halves (DC 8 + Con mod + Prof Bonus). I can do this my Prof" + (typePF ? "iciency" : ".") + " Bonus per long rest.", "Psionic Mind: " + (typePF ? "I can send telepathic messages to any creature I can see within 30 ft that understands at least one language." : "I can telepathically message a creature with a language I can see in 30 ft."), "Gem Flight: From 5th level, I can manifest spectral wings. As a bonus action once per long rest, I can gain, for 1 minute, a flying speed equal to my walking speed and can hover." ], "\n \u2022 "), features : { "gem flight" : { name : "Gem Flight", source : [["FToD", 11]], minlevel : 5, usages : 1, recovery : "long rest", action : [["bonus action", ""]] } } }, Metallic : { regExpSearch : /^(?=.*metallic)(?=.*dragonborn).*$/i, source : [["FToD", 12]], variants : [["Brass", "Fire"], ["Bronze", "Lightning"], ["Copper", "Acid"], ["Gold", "Fire"], ["Silver", "Cold"]], breathWeaponShape : "15-ft cone", trait : desc([ ">>TYPE<< Breath Weapon: When I take the Attack action on my turn, I can replace one attack with a breath weapon that deals 1d10 >>type<< damage to all in a 15-ft cone, Dex save halves (DC 8 + Con mod + Prof" + (typePF ? "iciency" : ".") + " Bonus). I can do this my Prof" + (typePF ? "iciency" : ".") + " Bonus per long rest.", "Metallic Breath Weapon: At 5th level I gain a second breath weapon once per long rest, that works just like the first, but I choose the effect when I use it: Enervating: Con save or incapacitated until my next turn starts. Repulsion: Str save or pushed 20 ft and prone." ], "\n \u2022 "), features : { "metallic breath weapon" : { name : "Metallic Breath Weapon", source : [["FToD", 12]], minlevel : 5, usages : 1, recovery : "long rest", weaponOptions : [{ regExpSearch : /^(?=.*metallic)(?=.*breath)(?=.*weapon).*$/i, name : "Metallic breath weapon", source : [["FToD", 12]], ability : 3, type : 'Natural', damage : ['Enervating', '', 'or Repulsion'], range : "15-ft cone", description : "Repulsion: Str save or pushed 20 ft \u0026 prone; Enervating: Con save or incapacitated till my next turn starts", abilitytodamage : false, dc : true, selectNow : true }] } } } } for (var sDrBrn in objDragonborns) { var sDrBrnLC = sDrBrn.toLowerCase(); var oDrBrn = objDragonborns[sDrBrn]; RaceList[sDrBrnLC + " dragonborn"] = { regExpSearch : oDrBrn.regExpSearch, name : sDrBrn + " Dragonborn", sortname : "Dragonborn, " + sDrBrn, source : oDrBrn.source, plural : sDrBrn + " Dragonborn", size : 3, speed : { walk : { spd : 30, enc : 20 } }, weaponOptions : [{ regExpSearch : /^(?=.*breath)(?=.*weapon).*$/i, name : "Breath weapon", source : oDrBrn.source, ability : 3, type : 'Natural', damage : ['C', 10, 'fire'], range : oDrBrn.breathWeaponShape.replace('by', '\xD7'), description : "Hits all in area; Dex save, success - half damage", abilitytodamage : false, dc : true, dbBreathWeapon : true, selectNow : true }], age : " reach adulthood by 15 and live around 80 years", height : " stand well over 6 feet tall (5'6\" + 2d8\")", weight : " weigh around 240 lb (175 + 2d8 \xD7 2d6 lb)", heightMetric : " stand well over 1,8 metres tall (170 + 5d8 cm)", weightMetric : " weigh around 110 kg (80 + 5d8 \xD7 4d6 / 10 kg)", scoresGeneric : true, trait : sDrBrn + " Dragonborn"+ "\n \u2022 " + sDrBrn + ' Ancestry: Choose a type of dragon using the "Racial Options" button. The damage type of my resistance and my breath weapon are determined by the dragon type chosen.'+ + oDrBrn.trait.replace(/>>type<< /ig, ""), features : { "breath weapon" : { name : "Breath Weapon", minlevel : 1, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", additional : cantripDie.map(function (n) { return n + 'd10'; }), calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.dbBreathWeapon && /dragonborn/i.test(CurrentRace.known) && CurrentRace.dmgres) { fields.Damage_Type = CurrentRace.dmgres[0]; } }, '', 1 ] } } }, variants : [] }; if (oDrBrn.features) { for (var sFea in oDrBrn.features) { RaceList[sDrBrnLC + " dragonborn"].features[sFea] = oDrBrn.features[sFea]; } } for (var i = 0; i < oDrBrn.variants.length; i++) { var sDrBrnVar = oDrBrn.variants[i][0]; var sDrBrnDmg = oDrBrn.variants[i][1]; AddRacialVariant(sDrBrnLC + " dragonborn", sDrBrnVar.toLowerCase(), { regExpSearch : RegExp(sDrBrnVar, "i"), name : sDrBrnVar + " " + sDrBrnLC + " dragonborn", trait : sDrBrnVar + " " + sDrBrnLC + " dragonborn"+ oDrBrn.trait.replace(/>>TYPE<>type<>Slumbering (Uncommon)<<. Whenever you roll a 20 on your attack roll with this weapon, each creature of your choice within 5 feet of the target takes 5 damage of the type dealt by the dragon's breath weapon.", ">>Stirring (Rare)<<. The Stirring weapon has the Slumbering property. In addition, you gain a +1 bonus to attack and damage rolls made using the weapon. On a hit, the weapon deals an extra 1d6 damage of the type dealt by the dragon's breath weapon.", ">>Wakened (Very Rare)<<. The Wakened weapon has the Slumbering property, and it improves on the Stirring property. The bonus to attack and damage rolls increases to +2, and the extra damage dealt by the weapon increases to 2d6.", "As an action, you can unleash a 30-foot cone of destructive energy from the weapon. Each creature in that area must make a DC 16 Dexterity saving throw, taking 8d6 damage of the type dealt by the dragon's breath weapon on a failed save, or half as much damage on a successful one. Once this action is used, it can't be used again until the next dawn.", ">>Ascendant (Legendary)<<. The Ascendant weapon has the Slumbering property, and it improves on the Stirring and Wakened properties. The bonus to attack and damage rolls increases to +3, and the extra damage dealt by the weapon increases to 3d6.", "The cone of destructive energy the weapon creates increases to a 60-foot cone, the save DC increases to 18, and the damage increases to 12d6." ], "dww-slumbering" : { description : "This magic weapon decorated with draconic ornaments has absorbed the energy of >>a dragon<< dragon's breath weapon. Whenever I roll a 20 on an attack roll with it, each creature of my choice within 5 ft of the target takes 5 >>dmg type<< damage.", calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && (v.isMeleeWeapon || v.isRangedWeapon) && /^(?=.*slumbering)(?=.*\b(black|blue|green|red|white|amethyst|crystal|emerald|sapphire|topaz|brass|bronze|copper|gold|silver).(dragon'?s?.wrath|DW)\b).*$/i.test(v.WeaponTextName)) { var sWeaNmLC = v.WeaponTextName.toLowerCase(); var aDragons = [["black", "acid"], ["blue", "lightning"], ["green", "poison"], ["red", "fire"], ["white", "cold"], ["amethyst", "force"], ["crystal", "radiant"], ["emerald", "psychic"], ["sapphire", "thunder"], ["topaz", "necrotic"], ["brass", "fire"], ["bronze", "lightning"], ["copper", "acid"], ["gold", "fire"], ["silver", "cold"]]; var sDmgType = false; for (var i = 0; i < aDragons.length; i++) { if (sWeaNmLC.indexOf(aDragons[i][0]) !== -1) { sDmgType = aDragons[i][1]; break; } } if (!sDmgType) return; v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + 'On 20 to hit: 5 ' + sDmgType + ' damage to chosen in 5 ft of target'; }; }, "If I include the words \"TYPE Dragon's Wrath\" or \"TYPE DW\" (where \"TYPE\" is replaced with a dragon's type like \"Red\") and \"Slumbering\" in the name of a weapon, it will be treated as the magic item Slumbering Dragon's Wrath Weapon (e.g. \"Red DW Longbow (slumbering)\"). Whenever I roll a 20 on an attack roll with a slumbering dragon's wrath weapon, each creature of my choice within 5 ft of the target takes 5 damage of the associated dragon's type. " ] } }, "dww-stirring" : { description : "This dragon decorated weapon has absorbed the energy of >>a dragon<< dragon's breath weapon. I add +1 on attack and damage rolls made with it and it deals +1d6 >>dmg type<< damage. When I roll a 20 on an attack roll with it, each creature of my choice within 5 ft of the target takes 5 >>dmg type<< damage.", calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && (v.isMeleeWeapon || v.isRangedWeapon) && /^(?=.*stirring)(?=.*\b(black|blue|green|red|white|amethyst|crystal|emerald|sapphire|topaz|brass|bronze|copper|gold|silver).(dragon'?s?.wrath|DW)\b).*$/i.test(v.WeaponTextName)) { var sWeaNmLC = v.WeaponTextName.toLowerCase(); var aDragons = [["black", "acid"], ["blue", "lightning"], ["green", "poison"], ["red", "fire"], ["white", "cold"], ["amethyst", "force"], ["crystal", "radiant"], ["emerald", "psychic"], ["sapphire", "thunder"], ["topaz", "necrotic"], ["brass", "fire"], ["bronze", "lightning"], ["copper", "acid"], ["gold", "fire"], ["silver", "cold"]]; var sDmgType = false; for (var i = 0; i < aDragons.length; i++) { if (sWeaNmLC.indexOf(aDragons[i][0]) !== -1) { sDmgType = aDragons[i][1]; break; } } if (!sDmgType) return; v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + '+1d6 ' + sDmgType + ' damage; On 20: 5 ' + sDmgType + ' damage to chosen in 5 ft of target'; }; }, "If I include the words \"TYPE Dragon's Wrath\" or \"TYPE DW\" (where \"TYPE\" is replaced with a dragon's type like \"Red\") and \"Stirring\" in the name of a weapon, it will be treated as the magic item Stirring Dragon's Wrath Weapon (e.g. \"Red DW Longbow (stirring)\"). A stirring dragon's wrath weapon adds +1 to attack and damage rolls made with it. On a hit, the weapon deals an extra +1d6 damage and on a 20 on an attack roll with it, each creature of my choice within 5 ft of the target takes 5 damage. The damage is of the associated dragon's type." ], atkCalc : [ function (fields, v, output) { if (!v.theWea.isMagicWeapon && (v.isMeleeWeapon || v.isRangedWeapon) && /^(?=.*stirring)(?=.*\b(dragon'?s?.wrath|DW)\b).*$/i.test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; output.magic = v.thisWeapon[1] + 1; } }, '' ] } }, "dww-wakened" : { description : "This weapon uses >>dmg type<< of >>a dragon<< dragon. It adds +2 to its attack and damage rolls and deals +2d6 >>dmg type<< damage. On a 20 to hit, any creature of my choice in 5 ft of the target take 5 damage. As an action once per dawn, it can do a 30-ft cone, Dex DC 16 half, 8d6 damage dragon breath.", calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && (v.isMeleeWeapon || v.isRangedWeapon) && /^(?=.*wakened)(?=.*\b(black|blue|green|red|white|amethyst|crystal|emerald|sapphire|topaz|brass|bronze|copper|gold|silver).(dragon'?s?.wrath|DW)\b).*$/i.test(v.WeaponTextName)) { var sWeaNmLC = v.WeaponTextName.toLowerCase(); var aDragons = [["black", "acid"], ["blue", "lightning"], ["green", "poison"], ["red", "fire"], ["white", "cold"], ["amethyst", "force"], ["crystal", "radiant"], ["emerald", "psychic"], ["sapphire", "thunder"], ["topaz", "necrotic"], ["brass", "fire"], ["bronze", "lightning"], ["copper", "acid"], ["gold", "fire"], ["silver", "cold"]]; var sDmgType = false; for (var i = 0; i < aDragons.length; i++) { if (sWeaNmLC.indexOf(aDragons[i][0]) !== -1) { sDmgType = aDragons[i][1]; break; } } if (!sDmgType) return; v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + '+2d6 ' + sDmgType + ' damage; On 20: 5 ' + sDmgType + ' damage to chosen in 5 ft of target'; }; }, "If I include the words \"TYPE Dragon's Wrath\" or \"TYPE DW\" (where \"TYPE\" is replaced with a dragon's type like \"Red\") and \"Wakened\" in the name of a weapon, it will be treated as the magic item Wakened Dragon's Wrath Weapon (e.g. \"Red DW Longbow (wakened)\"). A wakened dragon wrath weapon adds +2 to attack and damage rolls made with it. On a hit, the weapon deals an extra +2d6 damage and on a 20 on an attack roll with it, each creature of my choice within 5 ft of the target takes 5 damage. The damage is of the associated dragon's type." ], atkCalc : [ function (fields, v, output) { if (!v.theWea.isMagicWeapon && (v.isMeleeWeapon || v.isRangedWeapon) && /^(?=.*wakened)(?=.*\b(dragon'?s?.wrath|DW)\b).*$/i.test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; output.magic = v.thisWeapon[1] + 2; } }, '' ] }, usages : 1, recovery : "dawn", limfeaname : ">>dragon<< Dragon's Wrath Breath (wakened)", action : [["action", ""]], weaponOptions : [{ regExpSearch : "^(?=.*wakened)(?=.*>>dragon<< (dragon'?s? wrath|DW))(?=.*breath).*$", name : ">>dragon<< Dragon's Wrath Breath (wakened)", source : [["FToD", 25]], ability : 0, type : "Magic Item", damage : [8, 6, ">>type<<"], range : "30-ft cone", description : "Hits all in area; Dex save, success - half damage; Usable only once per dawn", abilitytodamage : false, dc : true, modifiers : [8, ""], selectNow : true }] }, "dww-ascendant" : { description : "This weapon uses >>dmg type<< of >>a dragon<< dragon. It adds +3 to its attack and damage rolls and deals +3d6 >>dmg type<< damage. On a 20 to hit, any creature of my choice in 5 ft of the target take 5 damage. As an action once per dawn, it can do a 60-ft cone, Dex DC 18 half, 12d6 damage dragon breath.", calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && (v.isMeleeWeapon || v.isRangedWeapon) && /^(?=.*ascendant)(?=.*\b(black|blue|green|red|white|amethyst|crystal|emerald|sapphire|topaz|brass|bronze|copper|gold|silver).(dragon'?s?.wrath|DW)\b).*$/i.test(v.WeaponTextName)) { var sWeaNmLC = v.WeaponTextName.toLowerCase(); var aDragons = [["black", "acid"], ["blue", "lightning"], ["green", "poison"], ["red", "fire"], ["white", "cold"], ["amethyst", "force"], ["crystal", "radiant"], ["emerald", "psychic"], ["sapphire", "thunder"], ["topaz", "necrotic"], ["brass", "fire"], ["bronze", "lightning"], ["copper", "acid"], ["gold", "fire"], ["silver", "cold"]]; var sDmgType = false; for (var i = 0; i < aDragons.length; i++) { if (sWeaNmLC.indexOf(aDragons[i][0]) !== -1) { sDmgType = aDragons[i][1]; break; } } if (!sDmgType) return; v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + '+3d6 ' + sDmgType + ' damage; On 20: 5 ' + sDmgType + ' damage to chosen in 5 ft of target'; }; }, "If I include the words \"TYPE Dragon's Wrath\" or \"TYPE DW\" (where \"TYPE\" is replaced with a dragon's type like \"Red\") and \"Ascendant\" in the name of a weapon, it will be treated as the magic item Ascendant Dragon's Wrath Weapon (e.g. \"Red DW Longbow (ascendant)\"). An ascendant dragon wrath weapon adds +3 to attack and damage rolls made with it. On a hit, the weapon deals an extra +3d6 damage and on a 20 on an attack roll with it, each creature of my choice within 5 ft of the target takes 5 damage. The damage is of the associated dragon's type." ], atkCalc : [ function (fields, v, output) { if (!v.theWea.isMagicWeapon && (v.isMeleeWeapon || v.isRangedWeapon) && /^(?=.*ascendant)(?=.*\b(dragon'?s?.wrath|DW)\b).*$/i.test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; output.magic = v.thisWeapon[1] + 3; } }, '' ] }, usages : 1, recovery : "dawn", limfeaname : ">>dragon<< Dragon's Wrath Breath (ascendant)", action : [["action", "Dragon's Wrath Breath Weapon"]], weaponOptions : [{ regExpSearch : "^(?=.*ascendant)(?=.*>>dragon<< (dragon'?s? wrath|DW))(?=.*breath).*$", name : ">>dragon<< Dragon's Wrath Breath (ascendant)", source : [["FToD", 25]], ability : 0, type : "Magic Item", damage : [12, 6, ">>type<<"], range : "60-ft cone", description : "Hits all in area; Dex save, success - half damage; Usable only once per dawn", abilitytodamage : false, dc : true, modifiers : [10, ""], selectNow : true }] }, dragonsWrathWeaponCreate : function() { var aTypes = [["Slumbering", "uncommon"], ["Stirring", "rare"], ["Wakened", "very rare"], ["Ascendant", "legendary"]]; var aDragons = [["Black", "acid"], ["Blue", "lightning"], ["Green", "poison"], ["Red", "fire"], ["White", "cold"], ["Amethyst", "force"], ["Crystal", "radiant"], ["Emerald", "psychic"], ["Sapphire", "thunder"], ["Topaz", "necrotic"], ["Brass", "fire"], ["Bronze", "lightning"], ["Copper", "acid"], ["Gold", "fire"], ["Silver", "cold"]]; var aVowels = ["a", "e"]; var sDescriptionFull = FToD_HoardItems["dragon's wrath weapon"].join("\n ").replace(/>>(.*?)<>a dragon<>dmg type<< /ig, ""), descriptionFull : sDescriptionFull, toNotesPage : [{ name : "Full Text", note : sNotesDescription }], allowDuplicates : true, choicesNotInMenu : true, choices : [] } for (var sAttr in oDwwObj) { if (/^(description|weaponOptions|limfeaname)$/.test(sAttr)) continue; MagicItemsList[sItemNameLC][sAttr] = oDwwObj[sAttr]; } for (var i = 0; i < aDragons.length; i++) { var sDragon = aDragons[i][0]; var sDragonLC = sDragon.toLowerCase(); var sDmg = aDragons[i][1]; var sNameChoice = sDragon + " dragon (" + sDmg + ")"; var sNameChoiceLC = sNameChoice.toLowerCase(); var sNameTest = sItemType + " " + sDragon + " Dragon's Wrath"; var sAorAnDragon = (aVowels.indexOf(sDragonLC[0]) === -1 ? "a " : "an ") + sDragonLC; MagicItemsList[sItemNameLC].choices.push(sNameChoice); MagicItemsList[sItemNameLC][sNameChoiceLC] = { name : sNameTest + " Weapon", nameTest : sNameTest, description : oDwwObj.description.replace(/>>a dragon<>dmg type<>dragon<>dragon<>dragon<>Slumbering (Uncommon)<<. You have advantage on initiative rolls. While you are holding the focus, it can function as a spellcasting focus for all your spells.", ">>Stirring (Rare)<<. The Stirring focus has the Slumbering property, and it gains an additional property determined by the family of the dragon in whose hoard it became Stirring:", "\u2022 Chromatic. Whenever you use a spell slot to cast a spell that deals acid, cold, fire, lightning, or poison damage, roll a d6, and you gain a bonus equal to the number rolled to one of the spell's damage rolls.", "\u2022 Gem. Whenever you use a spell slot to cast a spell, you can immediately teleport to an unoccupied space you can see within 15 feet of you.", "\u2022 Metallic. When a creature you can see within 30 feet of you makes a saving throw, you can use your reaction to give that creature advantage on the saving throw.", ">>Wakened (Very Rare)<<. The Wakened focus has the Slumbering and Stirring properties, and while you are holding a Wakened focus, you can use it to cast certain spells. Once the item is used to cast a given spell, it can't be used to cast that spell again until the next dawn. The spells are determined by the family of the dragon in whose hoard it became Wakened. An asterisk indicates a new spell that appears earlier in this chapter.", "\u2022 Chromatic. Hold monster, Rime's binding ice", "\u2022 Gem. Rary's telepathic bond, Raulothim's psychic lance", "\u2022 Metallic. Fizban's platinum shield, legend lore", ">>Ascendant (Legendary)<<. The Ascendant focus has the Slumbering, Stirring, and Wakened properties. In addition, when you cast a spell of 1st level or higher while holding this focus, you can treat the spell as if it were cast using a 9th-level spell slot. Once this property is used, it can't be used again until the next dawn." ], dtf_chromatic : { calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { if (CurrentSpells[spName].refType == "class" && !spellObj.psionic && spellObj.level !== 0 && (/(check|checked|marked)box/i.test(spellObj.firstCol) || (spName === "warlock" && !/atwill|sp/i.test(spellObj.firstCol)))) return genericSpellDmgEdit(spellKey, spellObj, "acid|cold|fire|lightning|lightn\\.?|poison", "1d6", true, true); }, "Whenever I use a spell slot to cast a spell that deals acid, cold, fire, lightning, or poison damage, roll a d6, and I gain a bonus equal to the number rolled to one of the spell's damage rolls." ] }, extraLimitedFeatures : [{ name : "Dragon-Touched Focus (Hold Monster)", usages : 1, recovery : "dawn" }, { name : "Dragon-Touched Focus (Rime's Binding Ice)", usages : 1, recovery : "dawn" }], spellcastingBonus : [{ name : "Once per dawn", spells : ["hold monster", "rime's binding ice"], selection : ["hold monster", "rime's binding ice"], firstCol : "oncelr", times : 2 }] }, dtf_gem : { extraLimitedFeatures : [{ name : "Dragon-Touched Focus (Rary's Telepathic Bond)", usages : 1, recovery : "dawn" }, { name : "Dragon-Touched Focus (R's Psychic Lance)", usages : 1, recovery : "dawn" }], spellcastingBonus : [{ name : "Once per dawn", spells : ["rary's telepathic bond", "raulothim's psychic lance"], selection : ["rary's telepathic bond", "raulothim's psychic lance"], firstCol : "oncelr", times : 2 }] }, dtf_metallic : { extraLimitedFeatures : [{ name : "Dragon-Touched Focus (F's Platinum Shield)", usages : 1, recovery : "dawn" }, { name : "Dragon-Touched Focus (Legend Lore)", usages : 1, recovery : "dawn" }], spellcastingBonus : [{ name : "Once per dawn", spells : ["fizban's platinum shield", "legend lore"], selection : ["fizban's platinum shield", "legend lore"], firstCol : "oncelr", times : 2 }] }, dtf_ascendant : { extraLimitedFeatures : [{ name : "Dragon-Touched Focus (upcast to 9th-level)", usages : 1, recovery : "dawn" }] }, "dragon vessel" : [ "This vessel can be a potion bottle, drinking horn, or other container meant to hold a liquid.", ">>Slumbering (Uncommon)<<. As a bonus action, if the vessel is empty, you can speak the command word to fill the vessel with one of the following (your choice): ale, olive oil, a potion of healing, or a potion of climbing. Once this property is used, it can't be used until the next dawn. A potion you create in this way loses its magical properties if it isn't imbibed within 24 hours.", ">>Stirring (Rare)<<. In addition to the options for a Slumbering vessel, you can fill a Stirring vessel with mead, a potion of fire breath, or a potion of healing (greater).", ">>Wakened (Very Rare)<<. In addition to the options for a Slumbering or Stirring vessel, you can fill a Wakened vessel with wine, a potion of flying, or a potion of healing (superior).", ">>Ascendant (Legendary)<<. In addition to the options for other states, you can fill an Ascendant vessel with whiskey, a potion of healing (supreme), or a potion of dragon's majesty (described earlier in this chapter)." ], "scaled ornament" : [ "This ornament can be jewelry, a cloak, or another wearable accessory. It appears to be fashioned from a dragon's scale, tooth, or claw, or it incorporates images in those shapes.", ">>Slumbering (Uncommon)<<. You have advantage on saving throws you make to avoid being charmed or frightened or to end those conditions on you.", ">>Stirring (Rare)<<. You gain a +1 bonus to AC, and you can't be charmed or frightened. Moreover, each creature of your choice within 30 feet of you has advantage on saving throws it makes to avoid being charmed or frightened or to end those conditions on itself.", ">>Wakened (Very Rare)<<. The Wakened ornament has the Stirring property. In addition, when you would take damage of the type dealt by the breath of the dragon in whose hoard the ornament became Wakened, you can use your reaction to take no damage instead, and you regain hit points equal to the damage you would have taken. Once this property is used, it can't be used again until the next dawn.", ">>Ascendant (Legendary)<<. The Ascendant ornament has the Stirring and Wakened properties. In addition, while you are wearing the ornament, you gain a flying speed equal to your walking speed and can hover. While you are flying using this speed, spectral dragon wings appear on your back." ], hoardMagicItems : [ "\n\n\u25C6 Hoard Magic Items (FToD 25)", "Certain magic items can absorb the ambient magic of a dragon's hoard. The mightier the dragon, the more powerful the item becomes when it is steeped in the dragon's hoard. These items, called hoard items, have four states. A hoard item in its Slumbering state has certain base properties, and it gains additional properties when it enters the Stirring (young dragon), Wakened (adult dragon), or Ascendant (ancient dragon) state.", "Ordinarily, a hoard item must steep in a dragon's hoard for 1 year to reach the maximum possible state allowed by the age of the hoard's dragon. For example, a hoard item that steeps in an adult dragon's hoard for 1 year enters its Wakened state.", "When a dragon is slain, the magic surrounding its hoard becomes volatile. This allows a hoard item to steep more quickly in the hoard. A hoard item steeped in a dragon's hoard for 8 hours rises one state, as long as the steeping begins within 1 hour of the dragon's death and occurs within the dragon's lair. Steeping in this way can't raise the state of the item beyond the state associated with the dragon's age.", "Just as hoard items can grow in power by absorbing the ambient magic of a dragon's hoard, so too can these treasures fall back into slumber. If no creature is attuned to a hoard item and that item isn't in a dragon's hoard, the item decreases in power by one state every 30 days until it is Slumbering." ].join("\n "), to1stPerson : function (sDescr) { return desc(sDescr).replace(/\bf(oo|ee)t\b/ig, "ft") .replace(/you are/ig, "I am").replace(/\byou\b/ig, "I") .replace(/(by|of|to|for|on) I\b|\bI to|\bI an?\b/ig, "$1 me") .replace(/\bI (to|a|an)\b/ig, "me $1") .replace(/your/g, "my").replace(/Your/g, "My") .replace(/ >>(.*?)( \(.*?\))?<<. /g, function(a, p1, p2) { return "\n " + p1.toUpperCase() + p2.toLowerCase() + "\n "; })+ FToD_HoardItems.hoardMagicItems; } } FToD_HoardItems.dragonsWrathWeaponCreate(); MagicItemsList["dragon-touched focus"] = { name : "Dragon-Touched Focus", nameTest : /^(?=.*dragon.touched)(?=.*(focus|rod|wand|staff|scepter|orb|amulet|crystal)).*$/i, source : [["FToD", 26]], type : "wondrous item", attunement : true, prerequisite : "Requires attunement by a spellcaster", prereqeval : function(v) { return v.isSpellcaster; }, description : "", descriptionFull : FToD_HoardItems["dragon-touched focus"].join("\n ").replace(/>>(.*?)<>(.*?)<>(.*?)<= 4 && CurrentFeats.known.indexOf("strixhaven initiate") !== -1; }, extraLimitedFeatures : [{ name : "Swap places with Strixhaven Mascot", recovery : "long rest", usages : 1, altResource : "SS 2+" }], spellcastingBonus : [{ name : "Strixhaven Mascot", spells : ["find familiar"], selection : ["find familiar"], firstCol : SpellRitualTag, }], choices : ["Lorehold", "Prismari", "Quandrix", "Silverquill", "Witherbloom"], selfChoosing : function () { var iStrixInit = CurrentFeats.known.indexOf("strixhaven initiate"); if (iStrixInit !== -1 && CurrentFeats.choices[iStrixInit]) { return CurrentFeats.choices[iStrixInit]; } }, "lorehold" : { description : "I can cast Find Familiar as a ritual and it can take the form of a Spirit Statue Mascot. When I take the Attack action on my turn, I can forgo one attack to have it make one attack with its reaction. As an action once per long rest (or 2nd-level spell slot) while its within 60 ft, I can teleport to swap places with it, if there's space.", creaturesAdd : [["Spirit Statue Mascot", true, false, "strixhaven_mascot"]] }, "prismari" : { description : "I can cast Find Familiar as a ritual and it can take the form of an Art Elemental Mascot. When I take the Attack action on my turn, I can forgo one attack to have it make an attack with its reaction. As an action once per long rest (or 2nd-level spell slot) while its within 60 ft, I can teleport to swap places with it, if there's space.", creaturesAdd : [["Art Elemental Mascot", true, false, "strixhaven_mascot"]] }, "quandrix" : { description : "I can cast Find Familiar as a ritual and it can take the form of a Fractal Mascot. When I take the Attack action on my turn, I can forgo one attack to have it make one attack with its reaction. As an action once per long rest (or 2nd-level spell slot) while its within 60 ft, I can teleport to swap places with it, if there's space.", creaturesAdd : [["Fractal Mascot", true, false, "strixhaven_mascot"]] }, "silverquill" : { description : "I can cast Find Familiar as a ritual and it can take the form of an Inkling Mascot. When I take the Attack action on my turn, I can forgo one attack to have it make one attack with its reaction. As an action once per long rest (or 2nd-level spell slot) while its within 60 ft, I can teleport to swap places with it, if there's space.", creaturesAdd : [["Inkling Mascot", true, false, "strixhaven_mascot"]] }, "witherbloom" : { description : "I can cast Find Familiar as a ritual and it can take the form of a Pest Mascot. When I take the Attack action on my turn, I can forgo one attack to have it make one attack with its reaction. As an action once per long rest (or 2nd-level spell slot) while its within 60 ft, I can teleport to swap places with it, if there's space.", creaturesAdd : [["Pest Mascot", true, false, "strixhaven_mascot"]] } }; if (CompanionList.familiar && CompanionList.pact_of_the_chain) { // Needs to be revisited for v24 CompanionList.strixhaven_mascot = { name : "Strixhaven Mascot", nameTooltip : "Strixhaven Mascot (feat)", nameOrigin : "variant of the Find Familiar 1st-level conjuration [ritual] spell", nameMenu : "Strixhaven Mascot familiar (feat)", source : [["SCC", 37]], includeCheck : CompanionList.pact_of_the_chain.includeCheck, action : [["action", "Swap places with Strixhaven Mascot"]].concat(CompanionList.familiar.action), attributesChange : CompanionList.pact_of_the_chain.attributesChange, attributesAdd : CompanionList.familiar.attributesAdd, notes : function() { var a = newObj(CompanionList.pact_of_the_chain.notes); a[0].description = [ "appearing in an unoccupied space within 10 ft", "It assumes a chosen beast or mascot form (can change at every casting), see the spell and feat", "It has the chosen form's statistics, but its type changes from beast to celestial, fey, or fiend", "When the familiar drops to 0 hit points, it disappears, leaving behind no physical form", "It reappears when I cast this spell again (in a new form if so desired)" ].join("\n "); a.push({ name : "As an action while it is within 60 ft, we can teleport", description : [ "swapping places if there is enough space", "I can do this once per long rest, or by expending a 2nd-level or higher spell slot (SS 2+)" ].join("\n "), joinString : ", " }); return a; }() }; } // Spells SpellsList["borrowed knowledge"] = { name : "Borrowed Knowledge", classes : ["bard", "cleric", "warlock", "wizard"], source : [["SCC", 37]], level : 2, school : "Div", time : "1 a", range : "Self", components : "V,S,M\u0192", compMaterial : "A book worth at least 25 gp.", duration : "1 h", description : "Gain proficiency with one skill; ends early if cast again (25gp)", descriptionFull : "You draw on knowledge from spirits of the past. Choose one skill in which you lack proficiency. For the spell's duration, you have proficiency in the chosen skill. The spell ends early if you cast it again." }; SpellsList["kinetic jaunt"] = { name : "Kinetic Jaunt", classes : ["artificer", "bard", "sorcerer", "wizard"], source : [["SCC", 37]], level : 2, school : "Trans", time : "1 bns", range : "Self", components : "S", duration : "Conc, 1 min", description : "+10 ft walk spd; provoke no opportunity atks; move through crea space, counts not as difficult terrain", descriptionFull : "You magically empower your movement with dance-like steps, giving yourself the following benefits for the duration."+ "\n \u2022 Your walking speed increases by 10 feet."+ "\n \u2022 You don't provoke opportunity attacks."+ "\n \u2022 You can move through the space of another creature, and it doesn't count as difficult terrain. If you end your turn in another creature's space, you are shunted to the last unoccupied space you occupied, and you take 1d8 force damage." }; SpellsList["silvery barbs"] = { name : "Silvery Barbs", classes : ["bard", "sorcerer", "wizard"], source : [["SCC", 38]], level : 1, school : "Ench", time : "1 rea", timeFull : "1 reaction, which you take when a creature you can see within 60 feet of yourself succeeds on an attack roll, an ability check, or a saving throw", range : "60 ft", components : "V", duration : "Instantaneous", description : "1 crea reroll d20 and use lowest for atk, check, or save; 1 crea adv. next atk, check, or save in 1 min", descriptionFull : "You magically distract the triggering creature and turn its momentary uncertainty into encouragement for another creature. The triggering creature must reroll the d20 and use the lower roll."+ "\n You can then choose a different creature you can see within range (you can choose yourself). The chosen creature has advantage on the next attack roll, ability check, or saving throw it makes within 1 minute. A creature can be empowered by only one use of this spell at a time." }; SpellsList["vortex warp"] = { name : "Vortex Warp", classes : ["artificer", "sorcerer", "wizard"], source : [["SCC", 38]], level : 2, school : "Conj", time : "1 a", range : "90 ft", components : "V,S", duration : "Instantaneous", save : "Con", description : "1 crea save or teleported to a sufficiently empty space of my choice within range; +30 ft/SL range", descriptionFull : "You magically twist space around another creature you can see within range. The target must succeed on a Constitution saving throw (the target can choose to fail), or the target is teleported to an unoccupied space of your choice that you can see within range. The chosen space must be on a surface or in a liquid that can support the target without the target having to squeeze."+ AtHigherLevels + "When you cast this spell using a spell slot of 3rd level or higher, the range of the spell increases by 30 feet for each slot level above 2nd." }; SpellsList["wither and bloom"] = { name : "Wither and Bloom", classes : ["druid", "sorcerer", "wizard"], source : [["SCC", 38]], level : 2, school : "Necro", time : "1 a", range : "60 ft", components : "V,S,M", compMaterial : "A withered vine twisted into a loop.", duration : "Instantaneous", save : "Con", description : "10-ft rad any crea 2d6+1d6/SL Necrotic dmg, save half; 1 crea can heal using 1+1/SL HD; see B", descriptionFull : "You invoke both death and life upon a 10-foot-radius sphere centered on a point within range. Each creature of your choice in that area must make a Constitution saving throw, taking 2d6 necrotic damage on a failed save, or half as much damage on a successful one. Nonmagical vegetation in that area withers."+ "\n In addition, one creature of your choice in that area can spend and roll one of its unspent Hit Dice and regain a number of hit points equal to the roll plus your spellcasting ability modifier."+ AtHigherLevels + "When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d6 for each slot above the 2nd, and the number of Hit Dice that can be spent and added to the healing roll increases by one for each slot above 2nd." }; // Magic Items MagicItemsList["bottle of boundless coffee"] = { name : "Bottle of Boundless Coffee", source : [["SCC", 38]], type : "wondrous item", rarity : "common", description : "This metal bottle is full with delicious, comfortably warm coffee, but I can't feel the heat. It has a stopper on a little chain. It will accept only the coffee it produces. Each time I drink the coffee, I roll a d20. On a 1, the bottle stops dispensing coffee for 1 hour. Unless drunk, the coffee vanishes when it leaves the bottle.", descriptionFull : "This metal bottle carries delicious, warm coffee. The bottle comes with a stopper, which is attached to the bottle by a little chain. Even when open, the bottle won't accept any liquid other than the coffee it produces. The coffee inside is always comfortably warm, and none of the heat can be felt through the bottle."+ "\n Each time you drink the coffee, roll a d20. On a 1, the bottle refuses to dispense coffee for the next hour. If you pour coffee from the bottle, rather than drinking from it, the coffee vanishes the moment it leaves the bottle." } MagicItemsList["cuddly strixhaven mascot"] = { name : "Cuddly Strixhaven Mascot", source : [["SCC", 38]], type : "wondrous item", rarity : "common", description : "This soft, Tiny, magic toy represents a Strixhaven mascot. As an action, I can press it to my arm, shoulder, or leg, and it attaches there for 1 hour or until I remove it as an action. Once per long rest while this toy is on my person, I can give myself advantage on the save to avoid or end the frightened condition on myself.", descriptionFull : "Representing one of the mascots of Strixhaven, this soft, Tiny, magic toy is perfect for cuddling. If you press it to your arm, shoulder, or leg as an action, the toy stays attached there for 1 hour or until you use an action to remove it."+ "\n The toy can also be used to fight off fear. When you make a saving throw to avoid or end the frightened condition on yourself, you can give yourself advantage on the roll if the toy is on your person. You must decide to do so before rolling the d20. If the save succeeds, you can't use the toy in this way until you finish a long rest.", action : [["action", " (attach/remove)"]], usages : 1, recovery : "long rest" } MagicItemsList["lorehold primer"] = { name : "Lorehold Primer", source : [["SCC", 39]], type : "wondrous item", rarity : "uncommon", attunement : true, prerequisite : "Requires attunement by a spellcaster", prereqeval : function(v) { return v.isSpellcaster; }, description : "This magic textbook has 3 charges, regaining 1d3 used charges at dawn. While holding it, I can use 1 charge to add +1d4 to an History or Religion check, after the d20 roll. If I study it during a long rest, I can pick a 1st-level cleric or wizard spell. I can cast the spell once without a spell slot before my next long rest ends.", descriptionFull : "The Lorehold Primer is a magic textbook created at Strixhaven's Lorehold College. The primer has 3 charges, and it regains 1d3 expended charges daily at dawn. If you make an Intelligence (History) or Intelligence (Religion) check while holding the primer, you can expend 1 charge to give yourself 1d4 bonus to the check, immediately after you roll the d20."+ "\n In addition, if you study the primer at the end of a long rest, you can choose one 1st-level spell from the cleric or wizard spell list. Before you finish your next long rest, you can cast the chosen spell once without a spell slot if you are holding the primer. Your spellcasting ability for this spell is your choice of Intelligence, Wisdom, or Charisma.", extraLimitedFeatures : [{ name : "Lorehold Primer charges (regains 1d3)", usages : 3, recovery : "dawn" }, { name : "Lorehold Primer (cast spell)", usages : 1, recovery : "long rest" }], spellcastingAbility : [4, 5, 6], fCreateSCCPrimerSpellsEntry : function(bAddIt, sName, aClasses) { var sNameLC = sName.toLowerCase(); if (bAddIt) { CurrentSpells[sNameLC] = { name : sName + ' (item)', list : { 'class' : aClasses, level : [1, 1] }, known : { spells : 1 }, bonus : { bon0 : { name : 'Either select a spell', spells : [] }, bon1 : { name : 'or just select "Full List"', spells : [] }, bon2 : { name : 'on the bottom left', spells : [] } }, typeList : 4, refType : "item", allowUpCasting : false, firstCol : "LR" }; } else { delete CurrentSpells[sNameLC]; } SetStringifieds('spells'); CurrentUpdates.types.push('spells'); }, eval : function () { MagicItemsList["lorehold primer"].fCreateSCCPrimerSpellsEntry(true, "Lorehold Primer", ['cleric', 'wizard']); }, removeeval : function () { MagicItemsList["lorehold primer"].fCreateSCCPrimerSpellsEntry(false, "Lorehold Primer"); } } MagicItemsList["prismari primer"] = { name : "Prismari Primer", source : [["SCC", 39]], type : "wondrous item", rarity : "uncommon", attunement : true, prerequisite : "Requires attunement by a spellcaster", prereqeval : function(v) { return v.isSpellcaster; }, description : "This magic textbook has 3 charges, regaining 1d3 used charges at dawn. While holding it, I can use 1 charge to add +1d4 to an Acrobatics or Performance check, after the d20 roll. If I study it in a long rest, I can pick a 1st-level bard or sorcerer spell. I can cast the spell once without a spell slot before my next long rest ends.", descriptionFull : "The Prismari Primer is a magic textbook created at Strixhaven's Prismari College. The primer has 3 charges, and it regains 1d3 expended charges daily at dawn. If you make a Dexterity (Acrobatics) or a Charisma (Performance) check while holding the primer, you can expend 1 charge to give yourself a 1d4 bonus to the check, immediately after you roll the d20."+ "\n In addition, if you study the primer at the end of a long rest, you can choose one 1st-level spell from the bard or sorcerer spell list. Before you finish your next long rest, you can cast the chosen spell once without a spell slot if you are holding the primer. Your spellcasting ability for this spell is your choice of Intelligence, Wisdom, or Charisma.", extraLimitedFeatures : [{ name : "Prismari Primer charges (regains 1d3)", usages : 3, recovery : "dawn" }, { name : "Prismari Primer (cast spell)", usages : 1, recovery : "long rest" }], spellcastingAbility : [4, 5, 6], eval : function () { if (MagicItemsList["lorehold primer"]) MagicItemsList["lorehold primer"].fCreateSCCPrimerSpellsEntry(true, "Prismari Primer", ['bard', 'sorcerer']); }, removeeval : function () { if (MagicItemsList["lorehold primer"]) MagicItemsList["lorehold primer"].fCreateSCCPrimerSpellsEntry(false, "Prismari Primer"); } } MagicItemsList["quandrix primer"] = { name : "Quandrix Primer", source : [["SCC", 39]], type : "wondrous item", rarity : "uncommon", attunement : true, prerequisite : "Requires attunement by a spellcaster", prereqeval : function(v) { return v.isSpellcaster; }, description : "This magic textbook has 3 charges, regaining 1d3 used charges at dawn. While holding it, I can use 1 charge to add +1d4 to an Arcana or Nature check, after the d20 roll. If I study it during a long rest, I can pick a 1st-level druid or wizard spell. I can cast the spell once without a spell slot before my next long rest ends.", descriptionFull : "The Quandrix Primer is a magic textbook created at Strixhaven's Quandrix College. The primer has 3 charges, and it regains 1d3 expended charges daily at dawn. If you make an Intelligence (Arcana) or an Intelligence (Nature) check while holding the primer, you can expend 1 charge to give yourself a 1d4 bonus to the check, immediately after you roll the d20."+ "\n In addition, if you study the primer at the end of a long rest, you can choose one 1st-level spell from the druid or wizard spell list. Before you finish your next long rest, you can cast the chosen spell once without a spell slot if you are holding the primer. Your spellcasting ability for this spell is your choice of Intelligence, Wisdom, or Charisma.", extraLimitedFeatures : [{ name : "Quandrix Primer charges (regains 1d3)", usages : 3, recovery : "dawn" }, { name : "Quandrix Primer (cast spell)", usages : 1, recovery : "long rest" }], spellcastingAbility : [4, 5, 6], eval : function () { if (MagicItemsList["lorehold primer"]) MagicItemsList["lorehold primer"].fCreateSCCPrimerSpellsEntry(true, "Quandrix Primer", ['druid', 'wizard']); }, removeeval : function () { if (MagicItemsList["lorehold primer"]) MagicItemsList["lorehold primer"].fCreateSCCPrimerSpellsEntry(false, "Quandrix Primer"); } } MagicItemsList["silverquill primer"] = { name : "Silverquill Primer", source : [["SCC", 39]], type : "wondrous item", rarity : "uncommon", attunement : true, prerequisite : "Requires attunement by a spellcaster", prereqeval : function(v) { return v.isSpellcaster; }, description : "This magic textbook has 3 charges, regaining 1d3 used charges at dawn. While holding it, I can use 1 charge to add +1d4 to an Intimidation or Persuasion check, after the d20 roll. If I study it in a long rest, I can pick a 1st-level bard or cleric spell. I can cast the spell once without a spell slot before my next long rest ends.", descriptionFull : "The Silverquill Primer is a magic textbook created at Strixhaven's Silverquill College. The primer has 3 charges, and it regains 1d3 expended charges daily at dawn. If you make a Charisma (Intimidation) or a Charisma (Persuasion) check while holding the primer, you can expend 1 charge to give yourself a 1d4 bonus to the check, immediately after you roll the d20."+ "\n In addition, if you study the primer at the end of a long rest, you can choose one 1st-level spell from the bard or cleric spell list. Before you finish your next long rest, you can cast the chosen spell once without a spell slot if you are holding the primer. Your spellcasting ability for this spell is your choice of Intelligence, Wisdom, or Charisma.", extraLimitedFeatures : [{ name : "Silverquill Primer charges (regains 1d3)", usages : 3, recovery : "dawn" }, { name : "Silverquill Primer (cast spell)", usages : 1, recovery : "long rest" }], spellcastingAbility : [4, 5, 6], eval : function () { if (MagicItemsList["lorehold primer"]) MagicItemsList["lorehold primer"].fCreateSCCPrimerSpellsEntry(true, "Silverquill Primer", ['bard', 'cleric']); }, removeeval : function () { if (MagicItemsList["lorehold primer"]) MagicItemsList["lorehold primer"].fCreateSCCPrimerSpellsEntry(false, "Silverquill Primer"); } } MagicItemsList["strixhaven pennant"] = { name : "Strixhaven Pennant", source : [["SCC", 39]], type : "wondrous item", rarity : "common", description : "This magic pennant bears the symbol of Strixhaven or one of its colleges: Lorehold, Prismari, Quandrix, Silverquill, or Witherbloom. While I wave the pennant, the symbol on it glitters, and the pennant sheds bright light in a 10-ft radius and dim light for an additional 10 ft.", descriptionFull : "This magic pennant bears the symbol of Strixhaven or one of its colleges: Lorehold, Prismari, Quandrix, Silverquill, or Witherbloom. While you wave the pennant, the symbol on it glitters, and the pennant sheds bright light in a 10-foot-radius and dim light for an additional 10 feet." } MagicItemsList["witherbloom primer"] = { name : "Witherbloom Primer", source : [["SCC", 39]], type : "wondrous item", rarity : "uncommon", attunement : true, prerequisite : "Requires attunement by a spellcaster", prereqeval : function(v) { return v.isSpellcaster; }, description : "This magic textbook has 3 charges, regaining 1d3 used charges at dawn. While holding it, I can use 1 charge to add +1d4 to a Nature or Survival check, after the d20 roll. If I study it during a long rest, I can pick a 1st-level druid or wizard spell. I can cast the spell once without a spell slot before my next long rest ends.", descriptionFull : "The Witherbloom Primer is a magic textbook created at Strixhaven's Witherbloom College. The primer has 3 charges, and it regains 1d3 expended charges daily at dawn. If you make an Intelligence (Nature) or Wisdom (Survival) check while holding the primer, you can expend 1 charge to give yourself a 1d4 bonus to the check, immediately after you roll the d20."+ "\n In addition, if you study the primer at the end of a long rest, you can choose one 1st-level spell from the druid or wizard spell list. Before you finish your next long rest, you can cast the chosen spell once without a spell slot if you are holding the primer. Your spellcasting ability for this spell is your choice of Intelligence, Wisdom, or Charisma.", extraLimitedFeatures : [{ name : "Witherbloom Primer charges (regains 1d3)", usages : 3, recovery : "dawn" }, { name : "Witherbloom Primer (cast spell)", usages : 1, recovery : "long rest" }], spellcastingAbility : [4, 5, 6], eval : function () { if (MagicItemsList["lorehold primer"]) MagicItemsList["lorehold primer"].fCreateSCCPrimerSpellsEntry(true, "Witherbloom Primer", ['druid', 'wizard']); }, removeeval : function () { if (MagicItemsList["lorehold primer"]) MagicItemsList["lorehold primer"].fCreateSCCPrimerSpellsEntry(false, "Witherbloom Primer"); } } var SCC_Murgaxors_Orb_Full_Description = [ "Roiling green mist fills this glass orb, which the exiled Strixhaven mage Murgaxor once used in foul magical experiments. Murgaxor's spirit has infused the orb, which he uses to spread a terrible curse among Strixhaven's students.", ">>Sentience<<. Murgaxor's orb is a sentient, chaotic evil magic item with the following properties:", "\u2022 The orb has an Intelligence of 20, a Wisdom of 16, and a Charisma of 16, as well as hearing and darkvision out to a range of 30 feet.", "\u2022 The orb can speak, read, and understand Common, and it can communicate telepathically with any creature touching it.", "\u2022 At any time during your turn, the orb can cast the suggestion spell (save DC 17), targeting you or one other creature that touched the orb within the last 24 hours. This isn't a power of the orb that you control.", ">>Curse<<. Any Humanoid you touch while holding the orb must succeed on a DC 10 Wisdom saving throw or become cursed. Each creature cursed by the orb bears an echo of Murgaxor's hateful thoughts, and that creature suffers from headaches that are persistent but not debilitating until the curse ends. On your turn, the orb can use an action to produce one of the following effects, targeting one or more creatures it has cursed:", "\u2022 >>Unconsciousness<<. The cursed creature falls unconscious for 1 hour. The creature is roused if it takes damage or someone uses an action to shake or slap it awake.", "\u2022 >>Visions of Terror<<. The cursed creature sees terrifying visions, causing it to view all creatures that aren't also cursed as dangerous monsters for 10 minutes. The cursed creature must use its action each round to make one attack against the nearest non-cursed creature. If the cursed creature has multiple possible targets, it attacks one at random. This effect ends if the cursed creature is incapacitated.", "After either of these effects ends, the affected creature is no longer cursed. The curse can also be removed from a creature with a remove curse spell or similar magic. All cases of the curse end if Murgaxor's orb is destroyed.", ">>Magical Signature<<. As a side effect of the orb's curse, the spell detect magic reveals an aura of enchantment surrounding creatures bearing the curse. This aura is distinctive, but in a way detect magic offers no further details about.", ">>Destroying the Orb<<. Murgaxor's orb has AC 18; 20 hit points; immunity to necrotic, poison, and psychic damage; and resistance to all other types of damage. If reduced to 0 hit points, the orb shatters." ] MagicItemsList["murgaxor's orb"] = { name : "Murgaxor's Orb", source : [["SCC", 126]], type : "wondrous item", rarity : "legendary", attunement : true, description : "This sentient, chaotic evil orb bears a curse. It can communicate telepathically with any creature touching it. It can cast Suggestion on my turn, possibly on me. I have no control over it. Any Humanoid I touch while holding the orb must make a DC 10 Wisdom save or become cursed. See the Notes page.", descriptionFull : SCC_Murgaxors_Orb_Full_Description.join("\n ").replace(/>>(.*?)<>(.*?)<>(.*?)<<\. /g, function(a, match) { return "\n" + match.toUpperCase() + "\n "; }); } var EGtW_JewelOfThreePrayersFullDescription = [ "The Jewel of Three Prayers is a Vestige of Divergence. In ancient times, Alyxian the Apotheon bore this amulet as a symbol of his covenant with three Prime Deities: Sehanine the Moon Weaver, Avandra the Change Bringer, and Corellon the Arch Heart.[[ When the jewel is found, only Sehanine's power thrums within its dormant heart. The power of the other two deities waits to be reawakened by a hero \u2014 or heroes \u2014 who can follow in Alyxian's footsteps.]]", ">>Dormant<<. In this state, the Jewel of Three Prayers is a glittering golden disk attached to a fine golden chain. The chain magically resizes to function as a necklace for the creature that wears it.", "In its Dormant State, the jewel has the following properties:", "\u2022 You gain a +1 bonus to AC while wearing the jewel.", "\u2022 While wearing or holding the jewel, you can use an action to cause it to shed bright light in a 15-foot radius and dim light for an additional 15 feet. The light lasts until you extinguish it (no action required).", "\u2022 The jewel has 3 charges and regains all its expended charges daily at dawn. While holding the jewel, you can expend 1 charge from it to cast the invisibility spell.", ">>Awakened<<. In this state, the jewel has received the blessing of Avandra the Change Bringer. Three delicate spires unfurl from the jewel's center, like the buds of flowers opening in the spring. Three lapis lazuli stones rest like dewdrops on these spires.", "The following benefits of the jewel improve:", "\u2022 The bonus that the jewel confers to your AC increases to +2.", "\u2022 Its number of charges increases to 5.", "The jewel gains the following additional properties, which you can use while wearing or holding it:", "\u2022 You can expend 1 of the jewel's charges (no action required) to end one of the following conditions on yourself: grappled, paralyzed, or restrained.", "\u2022 When another creature you can see within 60 feet of you fails a saving throw, you can expend 1 of the jewel's charges as a reaction to enable that creature to reroll the saving throw, potentially turning a failure into a success. The creature must use the new roll.", ">>Exalted<<. In this state, the jewel has received the blessing of Corellon the Arch Heart. A gleaming emerald surrounded by a halo of gold appears on the jewel.", "The following benefits of the jewel improve:", "\u2022 The bonus that the jewel confers to your AC increases to +3.", "\u2022 Its number of charges increases to 7.", "The jewel gains the following additional properties, which you can use while wearing or holding it:", "\u2022 You gain the ability to breathe water, and you gain a swimming speed equal to your walking speed.", "\u2022 Each of your allies within 30 feet of you gains the ability to breathe water and gains a swimming speed equal to its walking speed.", "\u2022 As a bonus action, you can expend 1 of the jewel's charges to target yourself or one willing creature you can see within 15 feet of yourself. The target teleports to an unoccupied space of your choice within 15 feet of yourself, along with any equipment the target is wearing or carrying. The target appears in a flash of golden radiance, and each creature of your choice within 5 feet of the target's new location must make a DC 18 Constitution saving throw. On a failed save, the creature takes 4d10 radiant damage and is blinded until the start of your next turn. On a successful save, the creature takes half as much damage and isn't blinded." ]; MagicItemsList["jewel of three prayers"] = { name : "Jewel of Three Prayers", source : [["CotN", 213]], type : "wondrous item", rarity : "legendary", notLegalAL : true, attunement : true, description : "The golden chain of this intricate jewel magically resizes to function as a necklace for the creature that wears it. In ancient times, Alyxian the Apotheon bore this amulet as a symbol of his covenant with three Prime Deities: Sehanine the Moon Weaver, Avandra the Change Bringer, and Corellon the Arch Heart.", descriptionFull : EGtW_JewelOfThreePrayersFullDescription.join("\n ").replace(/>>(.*?)<>Transfer Attunement<<. You can use an action to touch a willing spellcaster. That creature attunes to the spelljamming helm immediately, and your attunement to it ends." ]; MagicItemsList["spelljamming helm"] = { name : "Spelljamming Helm", source : [["S:AiS", 23]], type : "wondrous item", rarity : "rare", attunement : true, prerequisite : "Requires attunement by a spellcaster", prereqeval : function(v) { return v.isSpellcaster; }, description : "While attuned to this ornate chair and sitting in it, I can propel and maneuver the ship on which it has been installed through space, air, or water up to the ship's speed. I need to maintain concentration as if concentrating on a spell to do so. The ship can move faster in space if nothing is nearby. See Notes page.", descriptionFull : SJAAG_SpelljammingHelm.join("\n ").replace(/>>(.*?)<>(.*?)<<\. /g, function(a, match) { return "\n" + match.toUpperCase() + "\n "; }) }] }; MagicItemsList["wildspace orrery"] = { name : "Wildspace Orrery", source : [["S:AiS", 23]], type : "wondrous item", rarity : "uncommon", description : "Inside a Wildspace system, this portable arcane device automatically tracks the positions and movements of all suns, planets, moons, and comets within that system, projecting a display of all these bodies in the space above its current location, marking itself as a white, pulsating pinprick of light.", descriptionFull : "Inside a Wildspace system, this portable arcane device automatically tracks the positions and movements of all suns, planets, moons, and comets within that system, projecting a display of all these bodies in the space above its current location. In that display, a white, pulsating pinprick of light marks the orrery's location." }; // Beasts from Boo's Astral Menagerie CreatureList["space eel"] = { name : "Space Eel", nameAlt : ["Eel, Space"], source : [["S:AiS", 55]], // page number in Boo's Astral Menagerie size : 4, type : "Beast", alignment : "Unaligned", ac : 14, hp : 7, hd : [2, 6], speed : "10 ft, fly 30 ft", scores : [12, 18, 11, 1, 10, 1], senses : "Darkvision 60 ft", passivePerception : 10, challengeRating : "1/2", proficiencyBonus : 2, attacksAction : 2, attacks : [{ name : "Bite", ability : 1, damage : [1, 6, "piercing"], range : "Melee (5 ft)", description : "Attaches on hit; While attached, auto-damage at turn start, but can't make bite attacks", tooltip : "On a hit, the eel attaches to the target. While attached, the eel can't make bite attacks. Instead, the target takes the bite damage at the start of each of the eel's turns. The eel can detach itself as a bonus action. A creature, including the target, can use its action to detach the eel." }, { name : "Tail Spine", ability : 1, damage : [1, 4, "piercing"], range : "Melee (5 ft)", description : "Target DC 10 Con save or poisoned and paralyzed for 1 min (can save as each turn ends)", tooltip : "The target must succeed on a DC 10 Constitution saving throw or be poisoned for 1 minute. Until this poison ends, the target is paralyzed. The target can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success." }], features : [{ name : "Unusual Nature", description : "The eel doesn't require air." }], actions : [{ name : "Multiattack", description : "As an action on its turn if not attached to a creature, the eel can make one Bite and one Tail Spine attack." }, { name : "Attach", description : "If the eel hits with its bite attack, it attaches to the target. While attached, the eel can't make bite attacks. Instead, the target takes the bite damage at the start of each of the eel's turns. The eel can detach itself as a bonus action. A creature, including the target, can use its action to detach the eel." }, { name : "Tail Spine", description : "If the eel hits with its tail spine, the target must succeed on a DC 10 Constitution saving throw or be poisoned for 1 minute. Until this poison ends, the target is paralyzed. The target can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success." }], wildshapeString : [ "##Senses##. Darkvision 60 ft", "##Unusual Nature##. Doesn't require air.", "##Multiattack##. 1 bite and 1 tail spine attack if not attached to a creature.", "##Bite##. Attaches to the target hit by its bite attack, dealing bite damage at the start of each turn. The eel can detach itself as a bonus action. A creature, including the target, can use its action to detach the eel." ].join("\n"), }; CreatureList["space guppy"] = { name : "Space Guppy", nameAlt : ["Guppy, Space"], source : [["S:AiS", 55]], // page number in Boo's Astral Menagerie size : 4, type : "Beast", alignment : "Unaligned", ac : 13, hp : 3, hd : [1, 6], speed : "0 ft, fly 30 ft", scores : [3, 16, 10, 1, 10, 1], senses : "Darkvision 60 ft", passivePerception : 10, challengeRating : "0", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Tail Slap", ability : 2, damage : [1, "", "bludgeoning"], range : "Melee (5 ft)" }], traits : [{ name : "Air Envelope", description : "If it has at least 1 hit point, the guppy can generate an air envelope around itself when in a vacuum. This air envelope can sustain the guppy and one other Tiny creature in its space indefinitely." }, { name : "Flyby", description : "The guppy doesn't provoke opportunity attacks when it flies out of an enemy's reach." }] }; CreatureList["giant space hamster"] = { name : "Giant Space Hamster", nameAlt : ["Hamster, Giant Space"], source : [["S:AiS", 56]], // page number in Boo's Astral Menagerie size : 2, type : "Beast", alignment : "Unaligned", ac : 11, hp : 22, hd : [4, 10], speed : "30 ft, burrow 10 ft", scores : [14, 12, 10, 2, 12, 4], passivePerception : 11, challengeRating : "1/4", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Bite", ability : 1, damage : [2, 4, "piercing"], range : "Melee (5 ft)" }] }; CreatureList["space mollymawk"] = { name : "Space Mollymawk", nameAlt : ["Mollymawk, Space"], source : [["S:AiS", 57]], // page number in Boo's Astral Menagerie size : 4, type : "Beast", alignment : "Unaligned", ac : 12, hp : 3, hd : [1, 6], speed : "10 ft, fly 50 ft", scores : [6, 14, 11, 3, 12, 3], skills : { "perception" : 5 }, passivePerception : 15, challengeRating : "0", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Bite", ability : 2, damage : [1, 4, "piercing"], range : "Melee (5 ft)" }], traits : [{ name : "Flyby", description : "The mollymawk doesn't provoke opportunity attacks when it flies out of an enemy's reach." }, { name : "Hold Breath", description : "The mollymawk can hold its breath for 15 minutes." }] }; CreatureList["space swine"] = { name : "Space Swine", nameAlt : ["Swine, Space"], source : [["S:AiS", 57]], // page number in Boo's Astral Menagerie size : 3, type : "Beast", alignment : "Unaligned", ac : 11, hp : 22, hd : [4, 8], speed : "40 ft, fly 40 ft", scores : [14, 12, 10, 2, 12, 4], skills : { "perception" : 4, "survival" : 4 }, passivePerception : 14, challengeRating : "1/4", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Bite", ability : 1, damage : [1, 6, "piercing"], range : "Melee (5 ft)" }], traits : [{ name : "Barding", description : "Space swine that are trained for battle are typically outfitted with half-plate barding and are referred to as death squealers. This barding gives them an AC of 16." }], wildshapeString : " " // the barding trait is not applicable to wild shapes }; // pub_20221206_Dragonlance.js // This file adds the Character Options content from Dragonlance: Shadow of the Dragon Queen to MPMB's Character Record Sheet SourceList["D:SotDQ"] = { name : "Dragonlance: Shadow of the Dragon Queen", abbreviation : "D:SotDQ", group : "Campaign Sourcebooks", campaignSetting : "Dragonlance", url : "https://dnd.wizards.com/products/dragonlance", date : "2022/12/06" }; RaceList["kender"] = { regExpSearch : /kender/i, name : "Kender", source : [["D:SotDQ", 27]], plural : "Kender", size : 4, speed : { walk : { spd : 30, enc : 20 } }, scoresGeneric : true, savetxt : { adv_vs : ["frightened"]}, skillstxt : "Choose one from Insight, Investigation, Sleight of Hand, Stealth, or Survival", abilitySave : [4, 5, 6], features : { "fearless" : { name : "Fearless", minlevel : 1, usages : 1, recovery : "long rest" }, "taunt" : { name : "Taunt", minlevel : 1, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", action : [["bonus action", ""]] } }, trait : "Kender"+ "\n \u2022 Fearless: I have adv. on saves against the frightened condition. Once per long rest when I fail " + (typePF ? "such a save" : "a save to avoid being frightened") + ", I can choose to succeed" + (typePF ? "." : " instead")+ "\n \u2022 Taunt: As a bonus action, I can taunt a creature within 60 ft of me that can hear and understand me. They must make a Wisdom " + (typePF ? "saving throw or have disadvantage" : "save (DC 8 + Prof B + Int/Wis/Cha mod; one-time choice) or have disadv.") + " on attack rolls not made against me until the start of my next turn. I can do this a number of times per long rest equal to my proficiency bonus." + (typePF ? " The DC equals 8 + my proficiency bonus + Intelligence, Wisdom, or Charisma modifier (one-time choice when selecting this race)." : "") }; BackgroundList["knight of solamnia"] = { regExpSearch : /^(?=.*(knight|champion|warrior))(?=.*solamnia).*$/i, name : "Knight of Solamnia", source : [["D:SotDQ", 0], ["UA:HoKR", 2]], skills : ["Athletics", "Survival"], gold : 10, languageProfs : [2], equipleft : [ ["Insignia of rank", "", ""], ["Deck of cards", "", ""] ], equipright : [ ["Common clothes", "", 3], ["Pouch (with coins)", "", 1] ], feature : "Squire of Solamnia", trait : [ // Kept those from the UA article "I pledge my sword to the greater good. If I must perish in pursuit of that good, so be it.", "My comrades-in-arms are my family. I'll do whatever it takes to keep them safe.", "The protection of innocent people comes first. All other concerns come second.", "I joined the knights for the free meals, but their lessons grew on me over time.", "I wish my deeds to become the stuff of legends\xD7just like those of the knighthood's heroic founders.", "A dishonorable act drove me to become a knight. I have acted with honor ever since." ], extra : [ "Choose a Trinket", "Silver disk, recording my heroics", "Piece of a fallen knight's armor", "Pendant with a crown/rose/sword", "Pommel of my mentor's sword", "Favor from someone I defended", "Locket with silver dragon sketch" ] }; BackgroundFeatureList["squire of solamnia"] = { description : "I gain the Squire of Solamnia feat. In addition, the Knights of Solamnia provide me free, modest lodging and food at any of their fortresses or encampments.", source : [["D:SotDQ", 0], ["UA:HoKR", 2], ["UA:HoK", 3]], featsAdd: ["Squire of Solamnia"], }; BackgroundList["mage of high sorcery"] = { regExpSearch : /^(?=.*(mage|wizard|magus))(?=.*high)(?=.*sorcery).*$/i, name : "Mage of High Sorcery", source : [["D:SotDQ", 0], ["UA:HoKR", 3], ["UA:HoK", 4]], skills : ["Arcana", "History"], gold : 10, languageProfs : [2], equipleft : [ ["Bottle of colored ink", "", ""], ["Ink pen", "", ""] ], equipright : [ ["Common clothes", "", 3], ["Pouch (with coins)", "", 1] ], feature : "Initiate of High Sorcery", trait : [ // Kept those from the UA article "I wish to use my knowledge of magic to better people's lives.", "My study of magic might reveal all manner of secrets.", "Magic is a means to power, and I will use it to pursue my ambitions.", "I learned magic so I'd be able to protect those I care about.", "I use my magic to maintain the balance between all things.", "Whether in the past, present, or future, I will be the greatest mage ever known." ], extra : [ "Choose a Trinket", "Unopened letter from first teacher", "Broken black/red/white wooden wand", "Scroll with incomprehensible formula", "Stone-covered foldable device", "Pouch with triple moon symbol", "Spellbook with triple moon symbol", "Lens to see Nuitari, invisible moon" ] }; BackgroundFeatureList["initiate of high sorcery"] = { description : "I gain the Initiate of High Sorcery feat. In addition, the Mages of High Sorcery provide me with free, modest lodging and food indefinitely at any occupied Tower of High Sorcery and for one night at the home of an organization member.", source : [["D:SotDQ", 0], ["UA:HoKR", 3], ["UA:HoK", 4]], featsAdd: ["Initiate of High Sorcery"], }; // Feats tree for Initiate of High Sorcery FeatsList["initiate of high sorcery"] = { name : "Initiate of High Sorcery", source : [["D:SotDQ", 32], ["UA:HoKR", 4]], description : "I learn a wizard cantrip and two 1st-levels spell from a list depending on my chosen moon. I can cast each spell once per long rest at its lowest levels without expending a spell slot, or by using a spell slot as normal. I can choose Int, Wis, or Cha as my spellcasting ability for this.", descriptionFull : "You've received training from magic-users affiliated with the Mages of High Sorcery."+ "\n Choose one of the three moons of Krynn to influence your magic: the black moon, Nuitari; the red moon, Lunitari; or the white moon, Solinari. You learn one cantrip of your choice from the wizard spell list and two 1st-level spells based on the moon you choose, as specified in the Lunar Spells table."+ "\n\n" + toUni("Lunar Spells")+ "\n" + toUni("Moon\t1st-Level Spell")+ "\nNuitari\tChoose two from dissonant whispers, false life,"+ "\n\thex, and ray of sickness"+ "\nLunitari\tChoose two from color spray, disguise self,"+ "\n\tfeather fall, and longstrider"+ "\nSolinari\tChoose two from comprehend languages, detect"+ "\n\tevil and good, protection from evil and good, and"+ "\n\tshield"+ "\n\n You can cast each of the chosen 1st-level spells without a spell slot, and you must finish a long rest before you can cast them in this way again. You can also cast the spells using any spell slots you have."+ "\n Your spellcasting ability for this feat's spells is Intelligence, Wisdom, or Charisma (choose when you select this feat).", prerequisite : "Dragonlance Campaign, plus Sorcerer, Wizard, or Mage of High Sorcery background", prereqeval : function (v) { return classes.known.wizard || classes.known.sorcerer || CurrentBackground.known.indexOf('mage of high sorcery') !== -1 || /initiate of high sorcery/i.test(What("Background Feature")); }, choices : ["Nuitari", "Lunitari", "Solinari"], "nuitari" : { description : "I learn a wizard cantrip and two 1st-level spells (Dissonant Whispers, False Life, Hex, or Ray of Sickness). I can cast each spell once per long rest at its lowest level without expending a spell slot, or by using a spell slot as normal. I can choose Int, Wis, or Cha as my spellcasting ability for this.", spellcastingAbility : [4,5,6], allowUpCasting : true, spellcastingBonus : [{ name : "Wizard Cantrip", "class" : ["wizard"], level : [0, 0], }, { name : "Nuitari 1st-level spell", spells : ["dissonant whispers", "false life", "hex", "ray of sickness"], firstCol : "oncelr+markedbox", times : 2 }] }, "lunitari" : { description : "I learn a wizard cantrip and two 1st-level spells (Color Spray, Disguise Self, Feather Fall, Longstrider). I can cast each spell once per long rest at its lowest level without expending a spell slot, or by using a spell slot as normal. I can choose Int, Wis, or Cha as my spellcasting ability for this.", spellcastingAbility : [4,5,6], allowUpCasting : true, spellcastingBonus : [{ name : "Wizard Cantrip", "class" : ["wizard"], level : [0, 0], }, { name : "Lunitari 1st-level spell", spells : ["color spray", "disguise self", "feather fall", "longstrider"], firstCol : "oncelr+markedbox", times : 2 }] }, "solinari" : { description : "I learn a wizard cantrip and two 1st-level spells (Comprehend Languages, Detect Evil and Good, Protection from Evil and Good, Shield). I can cast each spell once per long rest at its lowest level without expending a spell slot, or by using a spell slot as normal. I can choose Int, Wis, or Cha as my spellcasting ability for this.", spellcastingAbility : [4,5,6], allowUpCasting : true, spellcastingBonus : [{ name : "Wizard Cantrip", "class" : ["wizard"], level : [0, 0], }, { name : "Solinari 1st-level spell", spells : ["comprehend languages", "detect evil and good", "protection from evil and good", "shield"], firstCol : "oncelr+markedbox", times : 2 }] } }; FeatsList["adept of the black robes"] = { name : "Adept of the Black Robes", source : [["D:SotDQ", 31], ["UA:HoKR", 4]], description : "I learn one 2nd-level Ench or Necro spell, which I can cast once per long rest at its lowest level without a spell slot, or as normal with one. When a creature I can see within 60 ft fails its save vs. my damaging spell, I can expend HD up to the spell's level and add the rolls to the damage of the spell for that one creature.", descriptionFull : "You chose the moon Nuitari to influence your magic, and your ambition and loyalty to the Order of the Black Robes have been recognized, granting you these benefits:"+ "\n " + toUni("Ambitious Magic") + ". You learn one 2nd-level spell of your choice. The 2nd-level spell must be from the evocation or necromancy school of magic. You can cast this feat's 2nd-level spell without a spell slot, and you must finish a long rest before you can cast it in this way again. You can also cast this spell using spell slots you have of the appropriate level. The spell's spellcasting ability is the one chosen when you gain the Initiate of High Sorcery feat."+ "\n " + toUni("Life Channel") + ". You can channel your life force into the power of your magic. When a creature you can see within 60 feet fails on a saving throw against a spell that deals damage that you cast, you can expend a number of Hit Dice equal to the level of the spell. Roll the expended Hit Dice and add them together. The damage that the creature takes increases by an amount equal to that total.", prerequisite : "4th level, Initiate of High Sorcery (Nuitari) feat", prereqeval : function(v) { var iHghSrcyInit = CurrentFeats.known.indexOf("initiate of high sorcery"); return v.characterLevel >= 4 && iHghSrcyInit !== -1 && CurrentFeats.choices[iHghSrcyInit] === 'nuitari'; }, spellcastingBonus : [{ name : "2nd-level Evoc/Necro spell", "class" : "any", school : ["Evoc", "Necro"], level : [2, 2], firstCol : "oncelr+markedbox" }], spellcastingAbility : 'initiate of high sorcery_-_nuitari', allowUpCasting : true }; FeatsList["adept of the red robes"] = { name : "Adept of the Red Robes", source : [["D:SotDQ", 32], ["UA:HoKR", 4]], description : "I learn a 2nd-level Illusion or Transmutation spell, which I can cast once per long rest at its lowest level without a spell slot, or as normal with one. When I roll 9 or lower on the d20 for an attack or ability check, I can treat the roll as a 10. I can do this a number of times per long rest equal to my proficiency bonus.", descriptionFull : "You chose the moon Lunitari to influence your magic, and your dedication to maintaining the balance between all things has been recognized by the Order of the Red Robes, granting you these benefits:"+ "\n " + toUni("Insightful Magic") + ". You learn one 2nd-level spell of your choice. The 2nd-level spell must be from the illusion or transmutation school of magic. You can cast this feat's 2nd-level spell without a spell slot, and you must finish a long rest before you can cast it in this way again. You can also cast this spell using spell slots you have of the appropriate level. The spell's spellcasting ability is the one chosen when you gain the Initiate of High Sorcery feat."+ "\n " + toUni("Magical Balance") + ". When you make an attack roll, an ability check, or a saving throw, and roll a 9 or lower on the d20, you can use your reaction to balance fate and treat the roll as a 10. you can use this reaction a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th level, Initiate of High Sorcery (Lunitari) feat", prereqeval : function(v) { var iHghSrcyInit = CurrentFeats.known.indexOf("initiate of high sorcery"); return v.characterLevel >= 4 && iHghSrcyInit !== -1 && CurrentFeats.choices[iHghSrcyInit] === 'lunitari'; }, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", spellcastingBonus : [{ name : "2nd-level Illus/Trans spell", "class" : "any", school : ["Illus", "Trans"], level : [2, 2], firstCol : "oncelr+markedbox" }], spellcastingAbility : 'initiate of high sorcery_-_lunitari', allowUpCasting : true }; FeatsList["adept of the white robes"] = { name : "Adept of the White Robes", source : [["D:SotDQ", 32], ["UA:HoKR", 4]], description : "I learn one 2nd-level Abjur or Div spell, which I can cast once per long rest at its lowest level without a spell slot, or as normal with one. As a reaction when I or a creature I can see within 30 ft is damaged, I can expend a spell slot and roll d6s equal to its level to reduce the damage by that much + my spellcasting modifier.", descriptionFull : "You chose the moon Solinari to influence your magic, and your oath to use magic to make the world a better place has been recognized by the Order of the White Robes, granting you these benefits:"+ "\n " + toUni("Protective Magic") + ". You learn one 2nd-level spell of you choice. The 2nd-level spell must be from the abjuration or divination school of magic. You can cast this feat's 2nd-level spell without a spell slot, and you must finish a long rest before you can cast it in this way again. You can also cast this spell using spell slots you have of the appropriate level. The spell's spellcasting ability is the one chosen when you gain the Initiate of High Sorcery feat."+ "\n " + toUni("Protective Ward") + ". When you or a creature you can see within 30 feet of you takes damage, you can use your reaction to expend a spell slot and weave protective magic around the target. Roll a number of d6s equal to the level of the spell slot expended and reduce the damage the target takes by the total rolled on those dice + your spellcasting ability modifier.", prerequisite : "4th level, Initiate of High Sorcery (Solinari) feat", prereqeval : function(v) { var iHghSrcyInit = CurrentFeats.known.indexOf("initiate of high sorcery"); return v.characterLevel >= 4 && iHghSrcyInit !== -1 && CurrentFeats.choices[iHghSrcyInit] === 'solinari'; }, action : [["reaction", ""]], spellcastingBonus : [{ name : "2nd-level Abjur/Div spell", "class" : "any", school : ["Abjur", "Div"], level : [2, 2], firstCol : "oncelr+markedbox" }], spellcastingAbility : 'initiate of high sorcery_-_solinari', allowUpCasting : true }; // Feat Divinely Favored FeatsList["divinely favored"] = { name : "Divinely Favored", source : [["D:SotDQ", 32], ["UA:HoKR", 4]], description : "I learn a cleric cantrip, a 1st-level spell based on my alignment, and Augury. I can cast the spells each once per long rest at their lowest level without a spell slot, or by using a spell slot as normal. I can choose Int, Wis, or Cha as my spellcasting ability for this. I can use a holy symbol as a spellcasting focus for any spell that uses the chosen ability.", descriptionFull : "A god chose you to carry a spark of their power."+ "\n You learn one cantrip of your choice from the cleric spell list and one 1st-level spell based on the alignment of your character, as specified in the table below. You also learn the augury spell."+ "\n\n" + toUni("Alignment\t1st-level Spell")+ "\n Evil\t\tChoose one 1st level warlock spell"+ "\n Good\t\tChoose one 1st-level cleric spell"+ "\n Neutral\t\tChoose one 1st-level druid spell"+ "\n\n You can cast the chosen 1st-level spell and the augury spell without a spell slot, and you must finish a long rest before you can cast either of these spells in this way again. You can also cast these spells using spell slots you have of the appropriate level."+ "\n Your spellcasting ability for this feat's spells is Intelligence, Wisdom, or Charisma (choose when you select this feat)."+ "\n\n In addition, you can use a holy symbol as a spellcasting focus for any spell you cast that uses the spellcasting ability you choose when you select this feat.", choices : ["Evil (warlock spell)", "Good (cleric spell)", "Neutral (druid spell)"], "evil (warlock spell)" : { name : "Divinely Favored [Evil]", description : "I learn a cleric cantrip, a 1st-level warlock spell, and Augury. I can cast each spell once per long rest at their lowest level without a spell slot, or by using a spell slot as normal. I choose Int, Wis, or Cha as my spellcasting ability for this. I can use a holy symbol as a spellcasting focus for any spell that uses the chosen ability.", spellcastingAbility : [4,5,6], allowUpCasting : true, spellcastingBonus : [{ name : "Cleric Cantrip", "class" : ["cleric"], level : [0, 0], }, { name : "1st-level Warlock Spell", "class" : ["warlock"], level : [1, 1], firstCol : "oncelr+markedbox" }, { name : "Augury", spells : ["augury"], selection : ["augury"], firstCol : "oncelr+markedbox" }] }, "good (cleric spell)" : { name : "Divinely Favored [Good]", description : "I learn a cleric cantrip, a 1st-level cleric spell, and Augury. I can cast each spell once per long rest at their lowest level without a spell slot, or by using a spell slot as normal. I choose Int, Wis, or Cha as my spellcasting ability for this. I can use a holy symbol as a spellcasting focus for any spell that uses the chosen ability.", spellcastingAbility : [4,5,6], allowUpCasting : true, spellcastingBonus : [{ name : "Cleric Cantrip", "class" : ["cleric"], level : [0, 0], }, { name : "1st-level Cleric Spell", "class" : ["cleric"], level : [1, 1], firstCol : "oncelr+markedbox" }, { name : "Augury", spells : ["augury"], selection : ["augury"], firstCol : "oncelr+markedbox" }] }, "neutral (druid spell)" : { name : "Divinely Favored [Neutral]", description : "I learn a cleric cantrip, a 1st-level druid spell, and Augury. I can cast each spell once per long rest at their lowest level without a spell slot, or by using a spell slot as normal. I choose Int, Wis, or Cha as my spellcasting ability for this. I can use a holy symbol as a spellcasting focus for any spell that uses the chosen ability.", spellcastingAbility : [4,5,6], allowUpCasting : true, spellcastingBonus : [{ name : "Cleric Cantrip", "class" : ["cleric"], level : [0, 0], }, { name : "1st-level Druid Spell", "class" : ["druid"], level : [1, 1], firstCol : "oncelr+markedbox" }, { name : "Augury", spells : ["augury"], selection : ["augury"], firstCol : "oncelr+markedbox" }] } }; // Feats tree for Squire of Solamnia FeatsList["squire of solamnia"] = { name : "Squire of Solamnia", source : [["D:SotDQ", 34]], description : "Mounting or dismounting costs me only 5-ft of movement. Once per turn, I can grant myself advantage on a weapon attack, adding +1d8 to the damage roll if it hits. I can use this benefit my proficiency bonus per long rest, but a use is expended only if the attack hits.", descriptionFull : "Your training in the ways of the Knights of Solamnia grants you these benefits:"+ "\n " + toUni("Mount Up") + ". Mounting or dismounting costs you only 5 feet of movement."+ "\n " + toUni("Precise Strike") + ". Once per turn, when you make a weapon attack roll against a creature, you can cause the attack roll to have advantage. If the attack hits, you roll a d8 and add the number rolled as a bonus to the attack's damage roll. You can use this benefit a number of times equal to your proficiency bonus, but a use is expended only if the attack hits. You regain all expended uses when you finish a long rest.", prerequisite : "Dragonlance Campaign, plus Fighter, Paladin, or Knight of Solamnia background", prereqeval : function (v) { return classes.known.fighter || classes.known.paladin || CurrentBackground.known.indexOf('knight of solamnia') !== -1 || /squire of solamnia/i.test(What("Background Feature")); }, limfeaname : "Precise Strike (Squire of Solamnia)", usages : "Proficiency bonus per ", usagescalc : "event.value = Number(How('Proficiency Bonus'));", recovery : "long rest" }; FeatsList["knight of the crown"] = { name : "Knight of the Crown", source : [["D:SotDQ", 32]], description : "As a bonus action, I can use Commanding Rally on one ally within 30 ft that can see or hear me to immediately make one weapon attack as a reaction. +1d8 is added to the damage roll, if it hits. I can do this my proficiency bonus per long rest. [+1 Strength, Dexterity, or Constitution]", descriptionFull : "You are a Knight of Solamnia aligned with the Order of the Crown, a group that extols the virtues of cooperation, loyalty, and obedience. You excel in group combat and gain these benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase your Strength, Dexterity, or Constitution by 1, to a maximum of 20."+ "\n " + toUni("Commanding Rally") + ". As a bonus action, you can command one ally within 30 feet of yourself to attack. If that ally can see or hear you, they can immediately make one weapon attack as a reaction. If the attack hits, the ally can roll a d8 and add the number rolled as a bonus to the attack's damage roll. You can use this bonus action a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th level, Squire of Solamnia feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("squire of solamnia") !== -1; }, limfeaname : "Commanding Rally (Knight of the Crown)", usages : "Proficiency bonus per ", usagescalc : "event.value = Number(How('Proficiency Bonus'));", recovery : "long rest", action : [["bonus action", ""]], choices : ["Strength", "Dexterity", "Constitution"], "strength" : { description : "As a bonus action, I can use Commanding Rally on one ally within 30 ft that can see or hear me to immediately make one weapon attack as a reaction. +1d8 is added to the damage roll, if it hits. I can do this my proficiency bonus per long rest. [+1 Strength]", scores : [1,0,0,0,0,0] }, "dexterity" : { description : "As a bonus action, I can use Commanding Rally on one ally within 30 ft that can see or hear me to immediately make one weapon attack as a reaction. +1d8 is added to the damage roll, if it hits. I can do this my proficiency bonus per long rest. [+1 Dexterity]", scores : [0,1,0,0,0,0] }, "constitution" : { description : "As a bonus action, I can use Commanding Rally on one ally within 30 ft that can see or hear me to immediately make one weapon attack as a reaction. +1d8 is added to the damage roll, if it hits. I can do this my proficiency bonus per long rest. [+1 Constitution]", scores : [0,0,1,0,0,0] } }; FeatsList["knight of the rose"] = { name : "Knight of the Rose", source : [["D:SotDQ", 33]], description : "As a bonus action, I can use Bolstering Rally on myself or an ally within 30 ft that I can see and can see or hear me. They gain 1d8 + my proficiency bonus + the modifier of the ability chosen to increase temporary hit points. I can do this my proficiency bonus per long rest. [+1 Constitution, Wisdom, or Charisma]", descriptionFull : "You are a Knight of Solamnia aligned with the Order of the Rose, a group known for leadership, justice, and wisdom. Your resolve grants you these benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase your Constitution, Wisdom, or Charisma by 1, to a maximum of 20."+ "\n " + toUni("Bolstering Rally") + ". As a bonus action, you can encourage one creature you can see within 30 feet of yourself (you can choose yourself). If the target can see or hear you, the target gains temporary hit points equal to 1d8 + your proficiency bonus + the ability modifier of the ability score increased by this feat. You can use this bonus action a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th level, Squire of Solamnia feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("squire of solamnia") !== -1; }, limfeaname : "Bolstering Rally (Knight of the Rose)", usages : "Proficiency bonus per ", usagescalc : "event.value = Number(How('Proficiency Bonus'));", recovery : "long rest", action : [["bonus action", ""]], choices : ["Constitution", "Wisdom", "Charisma"], "constitution" : { calculation : 'event.value = "As a bonus action, I can use Bolstering Rally on myself or an ally within 30 ft that I can see and can see or hear me. They gain 1d8 + " + (Number(How("Proficiency Bonus")) + Number(What("Con Mod"))) + " temporary hit points (1d8 + proficiency bonus + Constitution modifier). I can do this my proficiency bonus per long rest. [+1 Constitution]";', scores : [0,0,1,0,0,0] }, "wisdom" : { calculation : 'event.value = "As a bonus action, I can use Bolstering Rally on myself or an ally within 30 ft that I can see and can see or hear me. They gain 1d8 + " + (Number(How("Proficiency Bonus")) + Number(What("Wis Mod"))) + " temporary hit points (1d8 + proficiency bonus + Wisdom modifier). I can do this my proficiency bonus per long rest. [+1 Wisdom]";', scores : [0,0,0,0,1,0] }, "charisma" : { calculation : 'event.value = "As a bonus action, I can use Bolstering Rally on myself or an ally within 30 ft that I can see and can see or hear me. They gain 1d8 + " + (Number(How("Proficiency Bonus")) + Number(What("Cha Mod"))) + " temporary hit points (1d8 + proficiency bonus + Charisma modifier). I can do this my proficiency bonus per long rest. [+1 Charisma]";', scores : [0,0,0,0,0,1] } }; FeatsList["knight of the sword"] = { name : "Knight of the Sword", source : [["D:SotDQ", 33]], description : "Once per turn, when I hit a creature with a weapon attack, I can have it make a Wisdom save DC (8 + Prof Bonus + mod of the ability increased by this feat) or be frightened of me until my next turn ends. On a successful save, the target has disadv. on its next attack before its next turn ends. I can do this my proficiency bonus per long rest. [+1 Int/Wis/Cha]", descriptionFull : "You are a Knight of Solamnia aligned with the Order of the Sword, a group devoted to heroism and courage. Bravery steels your spirit, granting you these benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase your Intelligence, Wisdom, or Charisma by 1, to a maximum of 20."+ "\n " + toUni("Demoralizing Strike") + ". Once per turn, when you hit a creature with a weapon attack roll, you can attempt to frighten that target. The target must make a Wisdom saving throw (DC equals 8 + your proficiency bonus + the ability modifier of the score increased by this feat). On a failed save, the target is frightened of you until the end of your next turn. On a successful save, the target has disadvantage on the next attack roll it makes before the end of its next turn. You can use this benefit a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th level, Squire of Solamnia feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("squire of solamnia") !== -1; }, limfeaname : "Demoralizing Strike (Knight of the Sword)", usages : "Proficiency bonus per ", usagescalc : "event.value = Number(How('Proficiency Bonus'));", recovery : "long rest", choices : ["Intelligence", "Wisdom", "Charisma"], "intelligence" : { calculation : 'event.value = "Once per turn, when I hit a creature with a weapon attack, I can have it make a Wisdom save DC " + (8 + Number(How("Proficiency Bonus")) + Number(What("Int Mod"))) + " (8 + Prof Bonus + Int mod) or be frightened of me until my next turn ends. On a successful save, the target has disadv. on its next attack before its next turn ends. I can do this my proficiency bonus per long rest. [+1 Int]";', scores : [0,0,0,1,0,0] }, "wisdom" : { calculation : 'event.value = "Once per turn, when I hit a creature with a weapon attack, I can have it make a Wisdom save DC " + (8 + Number(How("Proficiency Bonus")) + Number(What("Wis Mod"))) + " (8 + Prof Bonus + Wis mod) or be frightened of me until my next turn ends. On a successful save, the target has disadv. on its next attack before its next turn ends. I can do this my proficiency bonus per long rest. [+1 Wis]";', scores : [0,0,0,0,1,0] }, "charisma" : { calculation : 'event.value = "Once per turn, when I hit a creature with a weapon attack, I can have it make a Wisdom save DC " + (8 + Number(How("Proficiency Bonus")) + Number(What("Cha Mod"))) + " (8 + Prof Bonus + Cha mod) or be frightened of me until my next turn ends. On a successful save, the target has disadv. on its next attack before its next turn ends. I can do this my proficiency bonus per long rest. [+1 Cha]";', scores : [0,0,0,0,0,1] } }; // Subclass AddSubClass("sorcerer", "lunar sorcery", { regExpSearch : /^(?=.*(sorcerer|sorcery|witch))(?=.*(lunar|moon)).*$/i, subname : "Lunar Sorcery", fullname : "Lunar Sorcerer", source : [["D:SotDQ", 0]], features : { "subclassfeature1" : { name : "Lunar Embodiment", source : [["D:SotDQ", 0]], minlevel : 1, additional : levels.map(function (n) { return (n < 3 ? 3 : n < 5 ? 6 : n < 7 ? 9 : n < 9 ? 12 : 15) + " additional spells known"}), spellcastingExtra : [ // full moon "shield", "lesser restoration", "dispel magic", "death ward", "rary's telepathic bond", // new moon "ray of sickness", "blindness/deafness", "vampiric touch", "confusion", "hold monster", // crescent moon "color spray", "alter self", "phantom steed", "hallucinatory terrain", "mislead" ], spellcastingExtraApplyNonconform : true, description : levels.map(function(n) { var phases = { "\u25CB Full: " : ["Shield", "Lesser Restoration", "Dispel Magic", "Death Ward", "Rary's Telepathic Bond"], "\u25CF New: " : ["Ray of Sickness", "Blindness/deafness", "Vampiric Touch", "Confusion", "Hold Monster"], "\u25D6 Crescent: " : ["Color Spray", "Alter Self", "Phantom Steed", "Hallucinatory Terrain", "Mislead"] }; var aReturn = [ "When I finish a long rest, I can choose a lunar phase: Full, New, or Crescent Moon", "I can cast the 1st-level spell of that lunar phase once per long rest without a spell slot" ]; var iSpellsAdd = n < 3 ? 1 : n < 5 ? 2 : n < 7 ? 3 : n < 9 ? 4 : 5; for (var phase in phases) { aReturn.push(phase + phases[phase].slice(0,iSpellsAdd).join(", ")); } //aReturn.push("I know all " + (iSpellsAdd * 3) + " spells above; They don't count towards the number of spells I can know"); return desc(aReturn); }), calcChanges : { spellAdd : [ function (spellKey, spellObj, spName, isDuplicate) { if (spName === "sorcerer" && !isDuplicate && CurrentSpells.sorcerer.extra.indexOf(spellKey) !== -1) { var phases = { "F" : ["shield", "lesser restoration", "dispel magic", "death ward", "rary's telepathic bond"], "N" : ["ray of sickness", "blindness/deafness", "vampiric touch", "confusion", "hold monster"], "C" : ["color spray", "alter self", "phantom steed", "hallucinatory terrain", "mislead"] }; for (var phase in phases) { if (phases[phase].indexOf(spellKey) !== -1) { spellObj.firstCol = phase; return true; } } } }, 'The letters "F", "N", or "C" in the first column are used to indicate that a spell belongs to either the Full Moon, New Moon, or Crescent Moon lunar phase.' ] }, spellFirstColTitle : "Ph", extraLimitedFeatures : [{ name : "1st-level lunar phase spell", usages : 1, recovery : "long rest" }] }, "subclassfeature1.1" : { name : "Moon Fire", source : [["D:SotDQ", 0]], minlevel : 1, description : desc("I know the Sacred Flame cantrip and can use it on 2 creatures within 5 ft of each other"), spellcastingBonus : [{ name : "Moon Fire", spells : ["sacred flame"], selection : ["sacred flame"] }], weaponsAdd : { select : ["Sacred Flame"] }, spellChanges : { "sacred flame" : { description : "Up to 2 creas I see, max 5 ft apart, save or 1d8 Radiant dmg; no cover bonus; +1d8 at CL 5, 11, and 17", descriptionShorter : "Up to 2 creas I see, max 5 ft apart, save or 1d8 Radiant dmg; no cover bonus; +1d8 CL 5/11/17", descriptionCantripDie : "Up to 2 creas I see, max 5 ft apart, save or `CD`d8 Radiant dmg; no bonus for cover on save", changes : "When I cast Sacred Flame, I can target one creature as normal or target two creatures within range that are within 5 feet of each other." } }, calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == 'sacred flame') { fields.Description = fields.Description.replace("1 creature", "up to 2 creatures within 5 ft"); } }, "When I cast Sacred Flame, I can target one creature as normal or target two creatures within range that are within 5 feet of each other." ] } }, "subclassfeature6" : { name : "Lunar Boons", source : [["D:SotDQ", 0]], minlevel : 6, description : desc([ "Each lunar phase is additionally associated with spells of the following schools of magic:", "\u25CB Full: Abjur \u0026 Div\t\t\u25CF New: Ench \u0026 Necro\t" + (typePF ? "\t" : Array(8).join(" ")) + "\u25D6 Crescent: Illus \u0026 Trans", "I can reduce the sorcery point needed for Metamagic of spells of my current phase by 1" ]), usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature6.1" : { name : "Waxing and Waning", source : [["D:SotDQ", 0]], minlevel : 6, additional: "1 sorcery point", description : desc([ "As a bonus action, I can spend 1 sorcery point to change my lunar phase", "I can cast each lunar phase's 1st-level spells once per long rest, if it is my current phase" ]), action : [["bonus action", ""]], extraLimitedFeatures : [{ name : "Shield (in Full lunar phase)", usages : 1, recovery : "long rest" }, { name : "Ray of Sickness (in New lunar phase)", usages : 1, recovery : "long rest" }, { name : "Color Spray (in Crescent lunar phase)", usages : 1, recovery : "long rest" }], eval : function () { RemoveFeature("1st-level lunar phase spell", 0, "", "", "Lunar Sorcerer: Lunar Embodiment"); }, removeeval : function () { AddFeature("1st-level lunar phase spell", 1, "", "long rest", "Lunar Sorcerer: Lunar Embodiment"); } }, "subclassfeature14" : { name : "Lunar Empowerment", source : [["D:SotDQ", 0]], minlevel : 14, description : " [passive benefits for current phase]" + desc([ "\u25CB Full: I shed bright light in a 10-ft radius \u0026 dim light for extra 10 ft", " Myself and creatures I choose in 10 ft have adv. on Investigation and Perception checks", "\u25CF New: I have adv. on Stealth checks; While I'm in darkness, attacks have disadv. vs me", "\u25D6 Crescent: I have resistance to Necrotic and Radiant damage" ]), dmgres : [ ["Necrotic", "Necro. (in crescent)"], ["Radiant", "Rad. (in crescent)"] ] }, "subclassfeature18" : { name : "Lunar Phenomenon", source : [["D:SotDQ", 0]], minlevel : 18, additional: "per phase: 1\xD7 per long rest or 5 SP", description : desc([ "As a bonus action, or as part of changing phase, I can use a power of the (new) phase:", "\u25CB Full: Chosen creatures within 30 ft of me must make a Constitution save or be blinded", " This lasts until their next turn ends; I also heal one creature within 30 ft for 3d8 HP", "\u25CF New: Chosen creatures within 30 ft of me must make a Dexterity save", " If failed, they take 3d10 Necrotic damage and have 0 speed until their next turn ends", " Also, I become invisible until the end of my next turn, or until I attack or cast a spell", "\u25D6 Crescent: I can magically teleport to an unoccupied space I can see within 60 ft", " Both of us gain resistance to all damage until the start of my next turn", "I can use each phase's bonus action 1/LR, or by spending 5 sorcery points to use it again" ]), action : [["bonus action", ""]], extraLimitedFeatures : [{ name : "Lunar Phenomenon (Full)", usages : 1, recovery : "long rest", altResource : "5 SP" }, { name : "Lunar Phenomenon (New)", usages : 1, recovery : "long rest", altResource : "5 SP" }, { name : "Lunar Phenomenon (Crescent)", usages : 1, recovery : "long rest", altResource : "5 SP" }] } } }); // Weapon, Hoopak WeaponsList["hoopak, melee"] = { regExpSearch : /hoopak/i, name : "Hoopak, melee", source : [["D:SotDQ", 0]], list : "melee", ability : 1, type : "Martial", damage : [1, 6, "piercing"], range : "Melee", weight : 2, description : "Finesse, two-handed; Can be used ranged (40/160 ft) with ammo, for 1d4 bludgeoning damage", special : true, abilitytodamage : true }; WeaponsList["hoopak, ranged"] = { regExpSearch : /^(?=.*hoopak)(?=.*ranged).*$/i, name : "Hoopak, ranged", source : [["D:SotDQ", 0]], list : "ranged", ability : 1, type : "Martial", damage : [1, 4, "bludgeoning"], range : "40/160 ft", weight : 2, description : "Ammunition, finesse, two-handed; Can be used in melee without ammo, for 1d6 piercing damage", special : true, abilitytodamage : true }; // Magic Items MagicItemsList["flying citadel helm"] = { name : "Flying Citadel Helm", source : [["D:SotDQ", 190]], type : "wondrous item", rarity : "very rare", attunement : true, prerequisite : "Requires attunement by a spellcaster", prereqeval : function(v) { return v.isSpellcaster; }, description : "This ornate chair allows me to maneuver a flying citadel while concentrating (as if a spell). I can move the citadel through the air 80 ft/round or 8 miles/h, steer it, and see and hear from its highest point as though I was at that location. As an action or bonus action, I can transfer attunement to a willing spellcaster.", descriptionFull : "The function of this ornate chair is to propel and maneuver a flying citadel on which it has been installed. The chair has AC 15, 18 hit points, and immunity to poison and psychic damage. It is destroyed if reduced to 0 hit points."+ "\n The sensation of being attuned to a flying citadel helm is akin to the pins-and-needles effect one experiences after one's arm or leg falls asleep, but not as intense."+ "\n While attuned to a flying citadel helm and sitting in it, you gain the following abilities for as long as you maintain concentration (as if concentrating on a spell):"+ "\n \u2022 You can use the flying citadel helm to move the citadel through the air, up to 80 feet per round, or up to 8 miles per hour."+ "\n \u2022 You can steer the citadel, albeit in a somewhat clumsy fashion, in much the way that a rudder or oars can be used to maneuver a seafaring ship."+ "\n \u2022 At any time, you can see and hear from the highest point outside the citadel as though you were at that location."+ "\n\n If no creature attuned to the helm is maintaining concentration, the citadel remains motionless in its space."+ "\n "+toUni("Transfer Attunement")+". You can use an action or a bonus action to touch a willing spellcaster, whereupon that creature attunes to the flying citadel helm immediately, and your attunement to the flying citadel helm ends."+ "\n "+toUni("Crash")+". Should the flying citadel helm be destroyed, the citadel it is installed on loses power and begins to crumble. If the crumbling citadel is in the air, it descends at a rate of 30 feet per round, or 300 feet per minute. Any creature on the citadel or on the ground within 120 feet of the citadel when it lands must make a DC 20 Dexterity saving throw, taking 39 (6d12) bludgeoning damage on a failed save, or half as much damage on a successful one.", action : [ ["action", " (Transfer Attunement)"], ["bonus action", " (Transfer Attunement)"] ] }; MagicItemsList["kagonesti forest shroud"] = { name : "Kagonesti Forest Shroud", source : [["D:SotDQ", 190]], type : "wondrous item", rarity : "rare", attunement : true, description : "This cloak of autumnal leaves woven together grants me advantage on Dexterity (Stealth) checks. As a bonus action once per dawn, I can use it to magically teleport to an unoccupied space I can see within 30 ft. I then have advantage on the next attack roll I make before the end of the turn.", descriptionFull : "This cloak appears to be made of autumnal leaves woven together. While you wear this cloak, you have advantage on Dexterity (Stealth) checks, and you can use a bonus action to magically teleport, along with any equipment you are wearing or carrying, to an unoccupied space you can see within 30 feet of yourself. You then have advantage on the next attack roll you make before the end of the turn. Once this bonus action is used, it can't be used again until the next dawn.", advantages : [["Stealth", true]], action : [["bonus action", " (teleport)"]], usages : 1, recovery : "Dawn", additional : "teleport" }; MagicItemsList["mirror of reflected pasts"] = { name : "Mirror of Reflected Pasts", source : [["D:SotDQ", 190]], type : "wondrous item", rarity : "very rare", attunement : true, description : "As an action, I can (de)activate this mirror. It can be activated once per dawn, making it hover in the air, can't be moved, and when a non-construct sees its reflection in it while within 30 ft, it must make a DC 15 Wis save. It is paralyzed until the mirror is deactivated. It can retry the save at the end of each of its turns.", descriptionLong : "As an action, I can activate this mirror of elven design once per dawn, or deactive it. While active, it hovers in the air and can't be moved. When a non-construct creature within 30 ft of the mirror sees its reflection in it, the creature must make a DC 15 Wisdom save or become paralyzed. The creature can repeat the save at the end of each of its turns, but is otherwise paralyzed until the mirror is deactivated. A successful save makes a creature immune for 24 hours. While paralyzed by the mirror, the creature sees idealized versions of events from their past reflected in the mirror's glass.", descriptionFull : "This mirror of elven design allows those who stare into it to reflect on positive memories. The 3-foot-tall mirror weighs 25 pounds, and it has AC 11, 10 hit points, and vulnerability to bludgeoning damage. It shatters and is destroyed if reduced to 0 hit points."+ "While holding the mirror upright, you can use an action to speak its command word and activate it. While activated, the mirror hovers in the air, and it can be destroyed but not moved. It remains activated until you use an action to speak the command word again or your attunement to the mirror ends, at which point the mirror harmlessly floats to the ground. Once the mirror has been deactivated, it can't be activated again until the next dawn."+ "If a non-Construct creature other than you sees its reflection in the activated mirror while within 30 feet of it, that creature must succeed on a DC 15 Wisdom saving throw or become paralyzed until the mirror is deactivated or until that creature can no longer see the mirror. A creature paralyzed by the mirror can repeat the saving throw at the end of each of its turns, ending the effect on a success. If a creature's saving throw is successful or the effect ends for it, the creature is immune to this mirror's effect for the next 24 hours."+ "While paralyzed by the mirror, the creature sees events from their past reflected in the mirror's glass. These memories aren't real, but rather idealized versions of those occurrences. Nearby observers can glimpse flashes of these memories if looking indirectly at the mirror.", weight : 25, action : [["action", " [(de)activate]"]], usages : 1, recovery : "Dawn" }; // pub_20230221_KftGV.js // This file adds the magic items from the Keys from the Golden Vault adventure book to MPMB's Character Record Sheet SourceList["KftGV"] = { name : "Keys from the Golden Vault [items]", abbreviation : "KftGV", group : "Adventure Books", url : "https://dnd.wizards.com/products/keys-from-the-golden-vault", date : "2023/02/21" }; var KftGV_ConstantoriPortrait = [ "This painting by famed artist Dkesii Kwan depicts Constantori, a beautiful courtier, who was paid a staggering sum to be Dkesii's model. Whether Constantori's actual appearance matches the painting remains a subject of debate. The portrait is one of several paintings commissioned by the late Daiyani Grysthorn, a crime lord who frequently gave magical paintings as gifts to her most esteemed associates.", ">>Sentience<<. Constantori's Portrait is a sentient, lawful evil item with an Intelligence score of 14, a Wisdom score of 12, and a Charisma score of 8. It can hear within a range of 120 feet and has darkvision within a range of 60 feet, but it can't see anything behind itself.", "The painting can converse in Common, Draconic, and Elvish as if it were a living person, though Constantori's mouth doesn't move. Whenever conversation occurs within the portrait's auditory range, the painting eagerly gathers secrets, the names of secret tellers, significant events, or any political conversations.", ">>Personality<<. Constantori's Portrait is demanding, condescending, and vain. It doesn't like being covered or placed out of sight, and it loudly condemns anyone who tries to remove it from its gold-leaf frame.", ">>Wealth of Information<<. The painting's primary purpose is to observe and recall conversations. Over the past few decades, Constantori's Portrait has quietly observed countless conversations and now possesses an unquantifiable amount of lore\u2014everything from criminal conspiracies to secret passwords. The DM decides what the painting knows and what it doesn't.", "While attuned to the painting, you can take an action to telepathically contact it over any distance, provided the painting and you are on the same plane of existence. The painting can't telepathically contact you, however. Maintaining telepathic contact with the painting requires your concentration (as if concentrating on a spell).", ">>Guardian Portrait<<. While you are attuned to the painting, you can command it to guard its location against one or more creatures you identify as the painting's enemies. The painting performs this function until you command it to stop or until your attunement to the painting ends.", "The painting has 3 charges. When a creature the painting identifies as its enemy starts its turn in a space the painting can see, the painting expends 1 of its charges to cast magic missile (3 missiles), targeting that creature. The painting regains all expended charges daily at dawn.", "The painting is a Small object with AC 12, 20 hit points, and immunity to poison damage. In its gold-leaf frame, the painting weighs 15 pounds. If the painting has at least 1 hit point and is targeted by a mending spell, it regains 2d6 hit points." ]; MagicItemsList["constantori's portrait"] = { name : "Constantori's Portrait", source : [["KftGV", 101]], type : "wondrous item", rarity : "very rare", attunement : true, description : "As an action, I can telepathically contact this sentient painting over any distance while on the same plane. It can't contact me. Maintaining contact requires concentration like on a spell. I can command the painting to guard an area. It can cast Magic Missile 3 times per dawn. See Notes page.", descriptionFull : KftGV_ConstantoriPortrait.join("\n ").replace(/>>(.*?)<>(.*?)<= 4 && iStrikeGiants !== -1 && CurrentFeats.choices[iStrikeGiants] === 'fire strike'; }, descriptionFull : "You've manifested the fiery combat emblematic of fire giants, granting you the following benefits:"+ "\n\n" + toUni("Ability Score Increase") + ". Increase your Strength, Constitution, or Wisdom by 1, to a maximum of 20."+ "\n\n" + toUni("Born of Flame") + ". You have resistance to fire damage."+ "\n" + toUni("Searing Ignition") + ". When you take the Attack action on your turn, you can replace a single attack with a magical burst of flame. Each creature of your choice in a 15-foot-radius sphere centered on you must make a Dexterity saving throw (DC equals 8 + your proficiency bonus + the modifier of the ability increased by this feat). On a failed save, a creature takes fire damage equal to 1d8 + your proficiency bonus, and it has the blinded condition until the start of your next turn. On a successful save, the creature takes half as much damage only. You can use your Searing Ignition a number of times equal to your proficiency bonus (but no more than once per turn), and you regain all expended uses when you finish a long rest.", description : "I get fire resistance. Prof B. per long rest, when I use the Attack action on my turn, I can replace one attack with Searing Ignition: Chosen targets in 15-ft radius sphere on me take 1d8 + Prof B. fire damage, blind until my next turn starts. Dex save DC 8 + Prof B. + Str/Con/Wis mod half damage, not blind. [+1 Str/Con/Wis]", extraLimitedFeatures : [{ name : "Searing Ignition", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }], dmgres : ["Fire"], choices : ["Strength", "Constitution", "Wisdom"], "strength" : { description : "", calculate : "var iProfB = Number(How('Proficiency Bonus')), iMod = Number(What('Str Mod')); event.value = 'I get fire resistance. ' + iProfB + '\xD7 (Prof) per long rest, when I use the Attack action on my turn, I can replace one attack with Searing Ignition: Chosen targets in 15-ft radius sphere on me take 1d8+' + iProfB + ' (Prof B.) fire damage, blinded until my next turn starts. Dex save DC ' + (8 + iProfB + iMod) + ' (8 + Prof B. + Str mod) halves damage, not blinded. [+1 Str]';", weaponOptions : [{ regExpSearch : /^(?=.*searing)(?=.*ignition).*$/i, name : "Searing Ignition", source : [["GotG", 17]], ability : 1, type : 'AlwaysProf', damage : [1, 8, 'fire'], range : "15-ft radius", description : "Affects only chosen targets; Dex save halves, otherwise blinded until my next turn starts", abilitytodamage : false, dc : true, isNotWeapon : true, modifiers : ["", "Prof"], selectNow : true }], scores : [1,0,0,0,0,0] }, "constitution" : { description : "", calculate : "var iProfB = Number(How('Proficiency Bonus')), iMod = Number(What('Con Mod')); event.value = 'I get fire resistance. ' + iProfB + '\xD7 (Prof) per long rest, when I use the Attack action on my turn, I can replace one attack with Searing Ignition: Chosen targets in 15-ft radius sphere on me take 1d8+' + iProfB + ' (Prof B.) fire damage, blinded until my next turn starts. Dex save DC ' + (8 + iProfB + iMod) + ' (8 + Prof B. + Con mod) halves damage, not blinded. [+1 Con]';", weaponOptions : [{ regExpSearch : /^(?=.*searing)(?=.*ignition).*$/i, name : "Searing Ignition", source : [["GotG", 17]], ability : 3, type : 'Magical', damage : [1, 8, 'fire'], range : "15-ft radius", description : "Affects only chosen targets; Dex save halves, otherwise blinded until my next turn starts", abilitytodamage : false, dc : true, isNotWeapon : true, modifiers : ["", "Prof"], selectNow : true }], scores : [0,0,1,0,0,0] }, "wisdom" : { description : "", calculate : "var iProfB = Number(How('Proficiency Bonus')), iMod = Number(What('Wis Mod')); event.value = 'I get fire resistance. ' + iProfB + '\xD7 (Prof) per long rest, when I use the Attack action on my turn, I can replace one attack with Searing Ignition: Chosen targets in 15-ft radius sphere on me take 1d8+' + iProfB + ' (Prof B.) fire damage, blinded until my next turn starts. Dex save DC ' + (8 + iProfB + iMod) + ' (8 + Prof B. + Wis mod) halves damage, not blinded. [+1 Wis]';", weaponOptions : [{ regExpSearch : /^(?=.*searing)(?=.*ignition).*$/i, name : "Searing Ignition", source : [["GotG", 17]], ability : 5, type : 'Magical', damage : [1, 8, 'fire'], range : "15-ft radius", description : "Affects only chosen targets; Dex save halves, otherwise blinded until my next turn starts", abilitytodamage : false, dc : true, isNotWeapon : true, modifiers : ["", "Prof"], selectNow : true }], scores : [0,0,0,0,1,0] } }; FeatsList["fury of the frost giant"] = { name : "Fury of the Frost Giant", source : [["GotG", 17]], prerequisite : "4th level, Strike of the Giants (Frost Strike) feat", prereqeval : function(v) { var iStrikeGiants = CurrentFeats.known.indexOf("strike of the giants"); return v.characterLevel >= 4 && iStrikeGiants !== -1 && CurrentFeats.choices[iStrikeGiants] === 'frost strike'; }, descriptionFull : "You've manifested the icy might emblematic of frost giants, granting you the following benefits:"+ "\n\n" + toUni("Ability Score Increase") + ". Increase your Strength, Constitution, or Wisdom by 1, to a maximum of 20."+ "\n\n" + toUni("Born of Ice") + ". You have resistance to cold damage."+ "\n" + toUni("Frigid Retaliation") + ". Immediately after a creature you can see within 30 feet of you hits you with an attack roll and deals damage, you can use your reaction to retaliate with a conjured blast of ice. The creature must make a Constitution saving throw (DC equals 8 + your proficiency bonus + the modifier of the ability increased by this feat). On a failed save, the creature takes cold damage equal to 1d8 + your proficiency bonus, and its speed is reduced to 0 until the end of its next turn. You can use this reaction a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", description : "I gain cold resistance. As a reaction when a creature I see within 30 ft damages me with an attack, I can, Prof B. times per long rest, use Frigid Retaliation: it must make a Con save DC 8 + Prof B. + Str/Con/Wis mod or take 1d8 + Prof B. cold damage and have speed 0 until its next turn ends. [+1 Str/Con/Wis]", action : [["reaction", "Frigid Retaliation"]], extraLimitedFeatures : [{ name : "Frigid Retaliation", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }], dmgres : ["Cold"], choices : ["Strength", "Constitution", "Wisdom"], "strength" : { description : "", calculate : "var iProfB = Number(How('Proficiency Bonus')), iMod = Number(What('Str Mod')); event.value = 'I gain cold resistance. As a reaction when a creature I see within 30 ft hits me with an attack roll and deals damage, I can, ' + iProfB + ' times (Prof B.) per long rest, use Frigid Retaliation: it must make a Con save DC ' + (8 + iProfB + iMod) + ' (8 + Prof B. + Str mod) or take 1d8+' + iProfB + ' (Prof B.) cold damage and have speed 0 until its next turn ends. [+1 Str]';", weaponOptions : [{ regExpSearch : /^(?=.*frigid)(?=.*retaliation).*$/i, name : "Frigid Retaliation", source : [["GotG", 17]], ability : 1, type : 'Magical', damage : [1, 8, 'cold'], range : "30 ft", description : "Reaction; Con save - success: no damage, fail: also 0 speed until target's next turn ends", abilitytodamage : false, dc : true, isNotWeapon : true, modifiers : ["", "Prof"], selectNow : true }], scores : [1,0,0,0,0,0] }, "constitution" : { description : "", calculate : "var iProfB = Number(How('Proficiency Bonus')), iMod = Number(What('Con Mod')); event.value = 'I gain cold resistance. As a reaction when a creature I see within 30 ft hits me with an attack roll and deals damage, I can, ' + iProfB + ' times (Prof B.) per long rest, use Frigid Retaliation: it must make a Con save DC ' + (8 + iProfB + iMod) + ' (8 + Prof B. + Con mod) or take 1d8+' + iProfB + ' (Prof B.) cold damage and have speed 0 until its next turn ends. [+1 Con]';", weaponOptions : [{ regExpSearch : /^(?=.*frigid)(?=.*retaliation).*$/i, name : "Frigid Retaliation", source : [["GotG", 17]], ability : 3, type : 'Magical', damage : [1, 8, 'cold'], range : "30 ft", description : "Reaction; Con save - success: no damage, fail: also 0 speed until target's next turn ends", abilitytodamage : false, dc : true, isNotWeapon : true, modifiers : ["", "Prof"], selectNow : true }], scores : [0,0,1,0,0,0] }, "wisdom" : { description : "", calculate : "var iProfB = Number(How('Proficiency Bonus')), iMod = Number(What('Wis Mod')); event.value = 'I gain cold resistance. As a reaction when a creature I see within 30 ft hits me with an attack roll and deals damage, I can, ' + iProfB + ' times (Prof B.) per long rest, use Frigid Retaliation: it must make a Con save DC ' + (8 + iProfB + iMod) + ' (8 + Prof B. + Wis mod) or take 1d8+' + iProfB + ' (Prof B.) cold damage and have speed 0 until its next turn ends. [+1 Wis]';", weaponOptions : [{ regExpSearch : /^(?=.*frigid)(?=.*retaliation).*$/i, name : "Frigid Retaliation", source : [["GotG", 17]], ability : 5, type : 'Magical', damage : [1, 8, 'cold'], range : "30 ft", description : "Reaction; Con save - success: no damage, fail: also 0 speed until target's next turn ends", abilitytodamage : false, dc : true, isNotWeapon : true, modifiers : ["", "Prof"], selectNow : true }], scores : [0,0,0,0,1,0] } }; FeatsList["guile of the cloud giant"] = { name : "Guile of the Cloud Giant", source : [["GotG", 18]], prerequisite : "4th level, Strike of the Giants (Cloud Strike) feat", prereqeval : function(v) { var iStrikeGiants = CurrentFeats.known.indexOf("strike of the giants"); return v.characterLevel >= 4 && iStrikeGiants !== -1 && CurrentFeats.choices[iStrikeGiants] === 'cloud strike'; }, descriptionFull : "You've manifested the confounding magic emblematic of cloud giants, granting you the following benefits:"+ "\n\n" + toUni("Ability Score Increase") + ". Increase your Strength, Constitution, or Charisma by 1, to a maximum of 20."+ "\n\n" + toUni("Cloudy Escape") + ". When a creature you can see hits you with an attack roll, you can use your reaction to give yourself resistance to that attack's damage. You then teleport to an unoccupied space that you can see within 30 feet of yourself. You can use this reaction a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", description : "As a reaction when a creature I see within 30 ft hits me with an attack roll, I can give myself resistance to that attack's damage. I then teleport to an unoccupied space that I can see within 30 ft. I can do this reaction my proficiency bonus times per long rest.", action : [["reaction", "Cloudy Escape"]], extraLimitedFeatures : [{ name : "Cloudy Escape", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }], choices : ["Strength", "Constitution", "Charisma"], "strength" : { description : "As a reaction when a creature I see within 30 ft hits me with an attack roll, I can use Cloudy Escape: I give myself resistance to that attack's damage and then I teleport to an unoccupied space that I can see within 30 ft. I can do this Proficiency Bonus per long rest. [+1 Strength]", scores : [1,0,0,0,0,0] }, "constitution" : { description : "As a reaction when a creature I see within 30 ft hits me with an attack roll, I can use Cloudy Escape: I give myself resistance to that attack's damage and then I teleport to an unoccupied space that I can see within 30 ft. I can do this Proficiency Bonus per long rest. [+1 Constitution]", scores : [0,0,1,0,0,0] }, "charisma" : { description : "As a reaction when a creature I see within 30 ft hits me with an attack roll, I can use Cloudy Escape: I give myself resistance to that attack's damage and then I teleport to an unoccupied space that I can see within 30 ft. I can do this Proficiency Bonus per long rest. [+1 Charisma]", scores : [0,0,0,0,0,1] } }; FeatsList["keenness of the stone giant"] = { name : "Keenness of the Stone Giant", source : [["GotG", 18]], prerequisite : "4th level, Strike of the Giants (Stone Strike) feat", prereqeval : function(v) { var iStrikeGiants = CurrentFeats.known.indexOf("strike of the giants"); return v.characterLevel >= 4 && iStrikeGiants !== -1 && CurrentFeats.choices[iStrikeGiants] === 'stone strike'; }, descriptionFull : "You've manifested the physical talents emblematic of stone giants, granting you the following benefits:"+ "\n\n" + toUni("Ability Score Increase") + ". Increase your Strength, Constitution, or Wisdom by 1, to a maximum of 20."+ "\n\n" + toUni("Cavernous Sight") + ". You gain darkvision with a range of 60 feet. If you already have darkvision from another source, its range increases by 60 feet."+ "\n" + toUni("Stone Throw") + ". As a bonus action, you can take a rock and make a magical attack with it. The attack is a ranged spell attack with a range of 60 feet that uses the ability score you increased with this feat as the spellcasting ability. On a hit, the rock deals 1d10 force damage, and the target must succeed on a Strength saving throw (DC equals 8 + your proficiency bonus + the spellcasting ability modifier) or have the prone condition. You can use this bonus action a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", description : "I gain +60 ft Darkvision. As a bonus action, Prof Bonus times per long rest, I can make a magical Stone Throw attack. It is a spell attack with 60 ft range that deals 1d10 force damage and the target hit must make a Str save or be knocked prone. This uses the ability increased as spellcasting ability. [+1 Str/Con/Wis]", vision : [["Darkvision", "fixed 60"], ["Darkvision", "+60"]], action : [["bonus action", "Stone Throw"]], extraLimitedFeatures : [{ name : "Stone Throw", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }], choices : ["Strength", "Constitution", "Wisdom"], "strength" : { description : "", calculate : "var iProfB = Number(How('Proficiency Bonus')), iMod = Number(What('Str Mod')); event.value = 'I gain +60 ft Darkvision. As a bonus action, ' + iProfB + ' (Prof Bonus) times per long rest, I can make a magical Stone Throw attack: a spell attack (+' + (iProfB + iMod) + ') with 60 ft range that deals 1d10 force damage and the target hit must make a Strength save (DC ' + (8 + iProfB + iMod) + ') or be knocked prone. This uses Strength as spellcasting ability. [+1 Strength]';", weaponOptions : [{ regExpSearch : /^(?=.*stone)(?=.*throw).*$/i, name : "Stone Throw", source : [["GotG", 18]], ability : 1, type : 'Spell', damage : [1, 10, 'force'], range : "60 ft", description : "Bonus action; Target Strength save (DC 8 + To Hit) or be knocked prone", abilitytodamage : false, selectNow : true }], scores : [1,0,0,0,0,0] }, "constitution" : { description : "", calculate : "var iProfB = Number(How('Proficiency Bonus')), iMod = Number(What('Con Mod')); event.value = 'I gain +60 ft Darkvision. As a bonus action, ' + iProfB + ' (Prof Bonus) times per long rest, I can make a magical Stone Throw attack: a spell attack (+' + (iProfB + iMod) + ') with 60 ft range that deals 1d10 force damage and the target hit must make a Strength save (DC ' + (8 + iProfB + iMod) + ') or be knocked prone. This uses Constitution as spellcasting ability. [+1 Con]';", weaponOptions : [{ regExpSearch : /^(?=.*stone)(?=.*throw).*$/i, name : "Stone Throw", source : [["GotG", 18]], ability : 3, type : 'Spell', damage : [1, 10, 'force'], range : "60 ft", description : "Bonus action; Target Strength save (DC 8 + To Hit) or be knocked prone", abilitytodamage : false, selectNow : true }], scores : [0,0,1,0,0,0] }, "wisdom" : { description : "", calculate : "var iProfB = Number(How('Proficiency Bonus')), iMod = Number(What('Wis Mod')); event.value = 'I gain +60 ft Darkvision. As a bonus action, ' + iProfB + ' (Prof Bonus) times per long rest, I can make a magical Stone Throw attack: a spell attack (+' + (iProfB + iMod) + ') with 60 ft range that deals 1d10 force damage and the target hit must make a Strength save (DC ' + (8 + iProfB + iMod) + ') or be knocked prone. This uses Wisdom as spellcasting ability. [+1 Wisdom]';", weaponOptions : [{ regExpSearch : /^(?=.*stone)(?=.*throw).*$/i, name : "Stone Throw", source : [["GotG", 18]], ability : 5, type : 'Spell', damage : [1, 10, 'force'], range : "60 ft", description : "Bonus action; Target Strength save (DC 8 + To Hit) or be knocked prone", abilitytodamage : false, selectNow : true }], scores : [0,0,0,0,1,0] } }; FeatsList["soul of the storm giant"] = { name : "Soul of the Storm Giant", source : [["GotG", 19]], prerequisite : "4th level, Strike of the Giants (Storm Strike) feat", prereqeval : function(v) { var iStrikeGiants = CurrentFeats.known.indexOf("strike of the giants"); return v.characterLevel >= 4 && iStrikeGiants !== -1 && CurrentFeats.choices[iStrikeGiants] === 'storm strike'; }, descriptionFull : "You've manifested the tempest magic emblematic of storm giants, granting you the following benefits:"+ "\n\n" + toUni("Ability Score Increase") + ". Increase your Strength, Constitution, or Charisma by 1, to a maximum of 20."+ "\n\n" + toUni("Maelstrom Aura") + ". As a bonus action, you surround yourself with an aura of magical wind and lightning that extends 10 feet from you in every direction but not through total cover. The aura lasts until the start of your next turn or until you are incapacitated. While the aura is active, you have resistance to lightning and thunder damage. In addition, attack rolls against you have disadvantage, and whenever another creature starts its turn within the aura, you can force the creature to make a Strength saving throw (DC equals 8 + your proficiency bonus + the modifier of the ability increased by this feat). On a failed save, the creature's speed is halved until the start of its next turn. You can use this bonus action a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", description : "As a bonus action, Prof B. per long rest, I can make a 10-ft radius Maelstrom Aura until my next turn starts: I get lightning/thunder resistance, attacks vs. me have disadv., I can force those starting their turn inside to a Str save DC 8 + Prof + Str/Con/Cha mod or halve their speed until their next turn starts. [+1 Str/Con/Cha]", action : [["bonus action", "Maelstrom Aura"]], extraLimitedFeatures : [{ name : "Maelstrom Aura", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }], choices : ["Strength", "Constitution", "Charisma"], "strength" : { description : "", calculate : "var iProfB = Number(How('Proficiency Bonus')), iMod = Number(What('Str Mod')); event.value = 'As a bonus action, ' + iProfB + '\xD7 (Prof) per long rest, I can invoke a 10-ft radius Maelstrom Aura until my next turn starts: I get lightning \u0026 thunder resistance, attacks vs. me have disadv., I can force those starting their turn inside to make a Str save DC ' + (8 + iProfB + iMod) + ' (8+Prof+Str mod) or halve their speed until their next turn starts. [+1 Str]';", scores : [1,0,0,0,0,0] }, "constitution" : { description : "", calculate : "var iProfB = Number(How('Proficiency Bonus')), iMod = Number(What('Con Mod')); event.value = 'As a bonus action, ' + iProfB + '\xD7 (Prof) per long rest, I can invoke a 10-ft radius Maelstrom Aura until my next turn starts: I get lightning \u0026 thunder resistance, attacks vs. me have disadv., I can force those starting their turn inside to make a Str save DC ' + (8 + iProfB + iMod) + ' (8+Prof+Con mod) or halve their speed until their next turn starts. [+1 Con]';", scores : [0,0,1,0,0,0] }, "charisma" : { description : "", calculate : "var iProfB = Number(How('Proficiency Bonus')), iMod = Number(What('Cha Mod')); event.value = 'As a bonus action, ' + iProfB + '\xD7 (Prof) per long rest, I can invoke a 10-ft radius Maelstrom Aura until my next turn starts: I get lightning \u0026 thunder resistance, attacks vs. me have disadv., I can force those starting their turn inside to make a Str save DC ' + (8 + iProfB + iMod) + ' (8+Prof+Cha mod) or halve their speed until their next turn starts. [+1 Cha]';", scores : [0,0,0,0,0,1] } }; FeatsList["vigor of the hill giant"] = { name : "Vigor of the Hill Giant", source : [["GotG", 19]], prerequisite : "4th level, Strike of the Giants (Hill Strike) feat", prereqeval : function(v) { var iStrikeGiants = CurrentFeats.known.indexOf("strike of the giants"); return v.characterLevel >= 4 && iStrikeGiants !== -1 && CurrentFeats.choices[iStrikeGiants] === 'hill strike'; }, descriptionFull : "You've manifested the resilience emblematic of hill giants, granting you the following benefits:"+ "\n\n" + toUni("Ability Score Increase") + ". Increase your Strength, Constitution, or Wisdom by 1, to a maximum of 20."+ "\n\n" + toUni("Bulwark") + ". When you are subjected to an effect that would move you at least 5 feet or give you the prone condition, you can use your reaction to steady yourself. You aren't moved and don't have the prone condition."+ "\n" + toUni("Iron Stomach") + ". Whenever you eat food as part of a short rest and spend one or more Hit Dice to regain hit points, you regain additional hit points equal to your Constitution modifier + your proficiency bonus.", description : "Bulwark: When I would be moved or knocked prone I can use my reaction to prevent that. Iron Stomach: Whenever I eat food as part of a short rest and spend HD to regain hit points, I regain additional hp equal to my Constitution modifier + my proficiency bonus. [+1 Strength/Constitution/Wisdom]", action : [["reaction", "Bulwark"]], choices : ["Strength", "Constitution", "Wisdom"], "strength" : { description : "Bulwark: When I would be moved or knocked prone I can use my reaction to prevent that. Iron Stomach: Whenever I eat food as part of a short rest and spend HD to regain hit points, I regain additional hp equal to my Con" + (typePF ? "stitution" : "") + " modifier + my proficiency bonus. [+1 St" + (typePF ? "rength" : "") + "]", scores : [1,0,0,0,0,0] }, "constitution" : { description : "Bulwark: When I would be moved or knocked prone I can use my reaction to prevent that. Iron Stomach: Whenever I eat food as part of a short rest and spend HD to regain hit points, I regain additional hp equal to my Con" + (typePF ? "stitution" : "") + " modifier + my proficiency bonus. [+1 Con" + (typePF ? "stitution" : "") + "]", scores : [0,0,1,0,0,0] }, "wisdom" : { description : "Bulwark: When I would be moved or knocked prone I can use my reaction to prevent that. Iron Stomach: Whenever I eat food as part of a short rest and spend HD to regain hit points, I regain additional hp equal to my Con" + (typePF ? "stitution" : "") + " modifier + my proficiency bonus. [+1 Wis" + (typePF ? "dom" : "") + "]", scores : [0,0,0,0,1,0] } }; // Feats - Rune Shaper var GotG_RuneShaper = [ "You've studied the magic of Giant runes, granting you the following benefits:", ">>Comprehend Languages<<. You learn the comprehend languages spell. You can cast this spell without expending a spell slot, and you must finish a long rest before you can cast it in this way again. You can also cast this spell using any spell slots you have.", ">>Rune Magic<<. You know a number of runes equal to half your proficiency bonus (rounded down), chosen from the Rune Spells table. Whenever you finish a long rest, you can inscribe each rune you know onto one nonmagical weapon, armor, piece of clothing, or other object you touch. You temporarily learn the 1st-level spells that correspond to the runes you inscribed, as specified on the Rune Spells table, and you know those spells until you finish a long rest, when the runes fade. While you are wearing or carrying any rune-marked object, you can cast the spells associated with those runes using any spell slots you have.", "You can also invoke a rune inscribed on an object you are wearing or carrying and cast its associated spell without expending a spell slot or using material components. Once you cast the spell in this way, you can't do so again until you finish a long rest. Your spellcasting ability for this feat is Intelligence, Wisdom, or Charisma (choose when you select this feat).", "Each time you gain a level, you can replace one of the runes you know with another one from the Rune Spells table below.\n", ">>Rune\tSpell<<", "Cloud\tFog Cloud", "Death\tInflict Wounds", "Dragon\tChromatic Orb", "Enemy\tDisguise Self", "Fire\tBurning Hands", "Friend\tSpeak with Animals", "Frost\tArmor of Agathys", "Hill\tGoodberry", "Journey\tLongstrider", "King\tCommand", "Mountain\tEntangle", "Stone\tSanctuary", "Storm\tThunderwave" ]; FeatsList["rune shaper"] = { name : "Rune Shaper", source : [["GotG", 18]], prerequisite : "Spellcasting feature or Rune Carver background", prereqeval : function(v) { return v.isSpellcastingClass || CurrentBackground.known.indexOf('rune carver') !== -1 || /rune shaper/i.test(What("Background Feature")); }, descriptionFull : GotG_RuneShaper.join("\n ").replace(/>>(.*?)<>(.*?)<>Stalwart Song<<. Whenever you make a Charisma check while attuned to the harp, you can treat a roll of 9 or lower on the die as a 10.", ">>Feast of Plenty<<. If you spend 10 minutes playing the harp, you can cast the heroes' feast spell from it. Once this property is used, it can't be used again until 1d10 + 10 days have passed.", ">>Soothing Melody<<. As an action, you can use the harp to cast the calm emotions spell (save DC 19). When the spell is cast using the harp, its duration increases to 1 hour, provided you maintain concentration on the spell. This property can be used five times, and it regains all uses at dawn.", ">>Sentience<<. The harp is a sentient, chaotic good object with an Intelligence of 13, a Wisdom of 15, and a Charisma of 20. It has hearing and darkvision to a range of 120 feet.", "The harp can speak, read, and understand Common and Giant. It can also communicate telepathically with the creature attuned to it.", "The harp has a dramatic and pompous personality, taking extreme pride in the quality of music produced from its strings. If the harp is shorter than 6 feet tall, it bemoans its height." ]; MagicItemsList["harp of gilded plenty"] = { name : "Harp of Gilded Plenty", source : [["GotG", 112]], type : "wondrous item", rarity : "legendary", attunement : true, descriptionFull : GotG_HarpOfGildedPlenty.join("\n ").replace(/>>(.*?)<>(.*?)<= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'lawful outer plane (force, guidance)'; }, scorestxt : "+1 to one ability score of your choice", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }; FeatsList["baleful scion"] = { name : "Baleful Scion", source : [["P:AitM", 10]], description : "Once per turn, when I damage a creature I can see within 60 ft, I can also deal 1d6 + my Proficiency Bonus necrotic damage to it. I then regain a number of hit points equal to this necrotic damage dealt. I can do this a number of times equal to my Proficiency Bonus per long rest. [+1 to any one ability score]", descriptionFull : "You can channel cosmic forces of evil to gain these benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase one ability score of your choice by 1, to a maximum of 20."+ "\n " + toUni("Life-Draining Grasp") + ". Once per turn, when you damage a creature you can see within 60 feet of yourself, you can also deal necrotic damage to it. The necrotic damage equals 1d6 + your proficiency bonus, and you regain a number of hit points equal to this necrotic damage dealt. You can use this benefit a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th-level, Scion of the Outer Planes (Evil Outer Plane) feat", prereqeval : function(v) { var iParentFeat = CurrentFeats.known.indexOf("scion of the outer planes"); return v.characterLevel >= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'evil outer plane (necrotic, chill touch)'; }, scorestxt : "+1 to one ability score of your choice", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }; FeatsList["cohort of chaos"] = { name : "Cohort of Chaos", source : [["P:AitM", 10]], description : "When I roll a 1 or a 20 on an attack roll or save, a the magic of chaos flares up and I roll on the Chaotic Flare table to determine what happens (see notes for table). As a bonus action, my Proficiency Bonus per long rest, I can force a flare to happen. [+1 to any one ability score]", descriptionFull : "You can channel cosmic forces of chaos to gain these benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase one ability score of your choice by 1, to a maximum of 20."+ "\n " + toUni("Chaotic Flare") + ". When you roll a 1 or a 20 on an attack roll or a saving throw, the magic of chaos flows through you. Roll a d4 and consult the table below to determine what happens. A flare lasts until the end of your next turn, and a new flare can't occur until after the first flare ends."+ toUni("\n\nd4\tFlare")+ "\n 1\tBattle Fury: A creature of your choice that you can see is filled with reckless fury. It has advantage on attack rolls and disadvantage on ability checks."+ "\n 2\tDisruption Field: Waves of energy ripple around you. Every creature that starts its turn within 5 feet of you, or that moves into that area for the first time on a turn, takes 1d8 force damage."+ "\n 3\tUnbound: When you move, you can use some or all of your walking speed to teleport yourself once, along with any equipment you're wearing or carrying, up to the distance used to an unoccupied space that you can see."+ "\n 4\tWailing Winds: Winds swirl in a 15-foot-radius sphere centered on you. You and any other creatures in that area have disadvantage on Wisdom saving throws."+ "\n\n You can also forcibly release a chaotic flare as a bonus action, rolling on the table as normal to determine the effects. You can use this bonus action a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th-level, Scion of the Outer Planes (Chaotic Outer Plane) feat", prereqeval : function(v) { var iParentFeat = CurrentFeats.known.indexOf("scion of the outer planes"); return v.characterLevel >= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'chaotic outer plane (poison, minor illusion)'; }, scorestxt : "+1 to one ability score of your choice", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", additional : "force flare", action : [["bonus action", " (force flare)"]], toNotesPage : [{ name : "Chaotic Flare Table", note : [ "When I roll a 1 or a 20 on an attack roll or a saving throw, the magic of chaos flows through Me. I roll a d4 on the table below to determine what happens. A flare lasts until the end of my next turn, and a new flare can't occur until after the first flare ends.", "As a bonus action, I can forcibly release a chaotic flare, rolling on the table as normal to determine the effects. I can use this bonus action a number of times equal to my proficiency bonus, and I regain all expended uses when you finish a long rest.", "\n d4 Flare", "1 Battle Fury: A creature of my choice that I can see is filled with reckless fury. It has advantage on attack rolls and disadvantage on ability checks.", "2 Disruption Field: Waves of energy ripple around me. Every creature that starts its turn within 5 ft of me, or that moves into that area for the first time on a turn, takes 1d8 force damage.", "3 Unbound: When I move, I can use some or all of my walking speed to teleport once, along with any equipment I'm wearing or carrying, up to the distance used to an unoccupied space that I can see.", "4 Wailing Winds: Winds swirl in a 15-ft radius sphere centered on me. Creatures in that area, myself included, have disadvantage on Wisdom saving throws." ] }] }; FeatsList["outlands envoy"] = { name : "Outlands Envoy", source : [["P:AitM", 10]], description : "I can cast Misty Step and Tongues each once per long rest without requiring a spell slot or material components. I can also cast them using a spell slot as normal. My spellcasting ability for these spells is the same as the one for the Scion of the Outer Planes feat. [+1 to any one ability score]", descriptionFull : "You have spent significant time in Sigil or the Outlands, the crossroads of the multiverse. Being steeped in converging planar energies grants you these benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase one ability score of your choice by 1, to a maximum of 20."+ "\n " + toUni("Crossroads Emissary") + ". You learn the misty step and tongues spells. You can cast each spell once using this feat without a spell slot, and you must finish a long rest before you can cast that spell in this way again. When you cast tongues using this feat, you require no material components. You can also cast these spells using spell slots you have of the appropriate level. The spells' spellcasting ability is the one chosen when you gained the Scion of the Outer Planes feat.", prerequisite : "4th-level, Scion of the Outer Planes (the Outlands) feat", prereqeval : function(v) { var iParentFeat = CurrentFeats.known.indexOf("scion of the outer planes"); return v.characterLevel >= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'the outlands (psychic, mage hand)'; }, scorestxt : "+1 to one ability score of your choice", spellcastingAbility : "scion of the outer planes", spellcastingBonus : [{ name : "Crossroads Emissary", spells : ["misty step", "tongues"], selection : ["misty step", "tongues"], firstCol : "oncelr+markedbox", times : 2 }], spellChanges : { "tongues" : { components : SpellsList.tongues.components.replace("M", "M*"), compMaterial : "When using a spell slot: "+SpellsList.tongues.compMaterial, changes : "Using Outlands Envoy, I can cast Tongues once per long rest without expending a spell slot or requiring material components." } } }; FeatsList["planar wanderer"] = { name : "Planar Wanderer", source : [["P:AitM", 11]], description : "After each long rest, I can gain acid, cold, or fire resistance, that lasts until my next long rest ends. I know the direction to the last portal I used while on the same plane as it. As an action, I can try to open or close a portal (portal cracker). As an action once per long rest, I can detect portals (portal sense). See notes.", descriptionFull : "You can draw on the forces of the multiverse to survive cosmic extremes and to traverse its infinite realms, granting you these benefits:"+ "\n " + toUni("Planar Adaptation") + ". When you finish a long rest, you gain resistance to either acid, cold, or fire damage (your choice) until you finish your next long rest."+ "\n " + toUni("Portal Cracker") + ". Your experience with portals allows you to open them without a portal key. As an action, you can concentrate on a portal you're aware of that is within 5 feet of yourself and make a DC 20 Intelligence (Arcana) check. On a failed check, you take 3d8 psychic damage and can't use this benefit on that portal again until you finish a long rest. On a successful check, you can force the portal open or closed for 1 hour. For that duration, the portal doesn't respond to its portal key unless a creature employing the key succeeds on a DC 20 Intelligence (Arcana) check as an action."+ "\n " + toUni("Portal Sense") + ". You know the direction to the last planar portal you used while you and the portal are on the same plane of existence. Moreover, as an action, you can detect the location of any portals within 30 feet of you that aren't behind total cover. Once you detect a portal with this action, you can't use the action again until you finish a long rest.", prerequisite : "4th-level, Scion of the Outer Planes feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("scion of the outer planes") !== -1; }, dmgres : ["Acid/Cold/Fire"], action : [["action", " (Portal Cracker)"], ["action", " (Portal Sense)"]], usages : 1, recovery : "long rest", additional : "Portal Sense", toNotesPage : [{ name : "Portal Cracker", note : [ "My experience with portals allows me to open them without a portal key.", "As an action, I can concentrate on a portal I'm aware of that is within 5 ft of me and make a DC 20 Intelligence (Arcana) check.", "On a failed check, I take 3d8 psychic damage and can't do this on that portal again until I finish a long rest.", "On a successful check, I can force the portal open or closed for 1 hour. For that duration, the portal doesn't respond to its portal key unless a creature employing the key succeeds on a DC 20 Intelligence (Arcana) check as an action." ] }, { name : "Portal Sense", additional : "1\xD7 per long rest", note : [ "I know the direction to the last planar portal I used while I and the portal are on the same plane of existence.", "As an action, I can detect the location of any portals within 30 ft of me that aren't behind total cover.", "Once I detect a portal with this action, I can't use the action again until I finish a long rest." ], amendTo : "Portal Cracker" }] }; FeatsList["righteous heritor"] = { name : "Righteous Heritor", source : [["P:AitM", 11]], description : "As a reaction when I or a creature I can see within 30 ft takes damage, I can reduce the damage taken by 1d10 + my Proficiency Bonus. I can do this a number of times equal to my Proficiency Bonus per long rest. [+1 to any one ability score]", descriptionFull : "You can channel cosmic forces of good to gain these benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase one ability score of your choice by 1, to a maximum of 20."+ "\n " + toUni("Soothe Pain") + ". When you or a creature within 30 feet of you takes damage, you can use your reaction to reduce that damage by 1d10 + your proficiency bonus. You can use this benefit a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th-level, Scion of the Outer Planes (Good Outer Plane) feat", prereqeval : function(v) { var iParentFeat = CurrentFeats.known.indexOf("scion of the outer planes"); return v.characterLevel >= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'good outer plane (radiant, sacred flame)'; }, scorestxt : "+1 to one ability score of your choice", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", action : [["reaction", ""]] }; // Magic Items from Sigil and the Outlands MagicItemsList["mimir"] = { name : "Mimir", source : [["P:AitM", 13]], type : "wondrous item", rarity : "rare", attunement : true, description : "As a bonus action, I can stow or toss this skull-shaped device in the air to activate it, making it float 1d3 ft near me. Once per dawn as an action while active, I can use it to cast Legend Lore. It speaks the revieled lore aloud. While active, it answers questions about the planes of existence I or someone I designate ask it.", descriptionLong : "As a bonus action, I can toss this skull-shaped device covered with planar sigils into the air to activate it, causing it to float 1d3 ft near me but considered worn by me. I can use another bonus action to seize and stow it. It has AC 22, 25 HP, immunity to poison and psychic damage, and resistance to all other damage. Another can use an action to grab it with a successful unarmed strike or DC 22 Acrobatics check. Once per dawn as an action while active, I can use it to cast Legend Lore. It speaks the revealed lore aloud. While active, it answers questions about the planes of existence I or someone I designate ask it.", descriptionFull : "This skull-shaped device is filled with knowledge. The device weighs 5 pounds and is covered with subtle etchings of planar sigils."+ "As a bonus action, you can toss the device into the air, whereupon it floats at a distance of 1d3 feet from you and you can access its properties. While the mimir is floating, a creature other than you can use an action to grasp or net the device, either by making a successful unarmed strike against AC 22 or a successful DC 22 Dexterity (Acrobatics) check. You can use a bonus action to seize and stow the device."+ "The device has AC 22, 25 hit points, immunity to poison and psychic damage, and resistance to all other damage. It is considered to be an object that is being worn while it is floating near you."+ toUni("\n Esoteric Knowledge") + ". While the device is floating, you can use an action to cast legend lore from the device. The device speaks the revealed lore aloud. Once this property has been used, it can't be used again until the next dawn."+ toUni("\n Planar Knowledge") + ". The device knows basic, useful information about the planes of existence. While the device is floating, it verbally answers questions you or anyone you designate poses to it about that topic. It knows the information about the planes in the Dungeon Master's Guide, as well as basic information about the gate-towns of the Outlands (presented in chapter 3 of Sigil and the Outlands).", action : [["bonus action", " (activate/stow)"]], weight : 5, usages : 1, recovery : "dawn", additional : "Legend Lore", spellcastingBonus : [{ name : "once per dawn", spells : ["legend lore"], selection : ["legend lore"], firstCol : "oncelr" }] }; MagicItemsList["portal compass"] = { name : "Portal Compass", source : [["P:AitM", 13]], type : "wondrous item", rarity : "uncommon", description : "This portable arcane instrument points in the direction of the last portal it passed through while it and the portal are on the same plane of existence. If that portal no longer exists, the needle becomes static until the compass passes through a new portal.", descriptionFull : "This portable arcane instrument points in the direction of the last portal it passed through while it and the portal are on the same plane of existence. If that portal no longer exists, the needle becomes static until the compass passes through a new portal." }; MagicItemsList["sensory stone"] = { name : "Sensory Stone", source : [["P:AitM", 13]], type : "wondrous item", rarity : "uncommon", description : "This stone stores a single experience. As an action, one touching the stone can experience it harmlessly. As a reaction, I can replace the experience within with a new, six-second sensation experienced by a creature within 30 ft. As a bonus action, I can destroy it to end the charmed or frightened effect on myself.", descriptionFull : "This small, smooth stone contains the essence of a single experience."+ "As an action, you or a willing creature you designate can touch the stone and experience the sensation as if it happened to the designated creature. The illusory experience is fleeting and harmless, however real it might feel in the moment."+ toUni("\n Record Sensation") + ". You can use your reaction to record a short sensation lasting no longer than 6 seconds experienced by a creature of your choice within 30 feet of yourself, infusing the essence of that experience into the stone. This replaces any sensation already stored within the stone."+ toUni("\n Siphon Sensation") + ". As a bonus action, you can draw on the stone's magic to end the charmed or frightened condition on yourself, destroying the stone in the process.", action : [ ["action", " (experience)"], ["reaction", " (record)"], ["bonus action", " (destroy to end charmed/frightened)"] ] }; // Spells from Sigil and the Outlands SpellsList["gate seal"] = { name : "Gate Seal", classes : ["sorcerer", "warlock", "wizard"], source : [["P:AitM", 12]], level : 4, school : "Abjur", time : "1 a", range : "60 ft", components : "V,S,M\u2020", compMaterial : "A broken portal key, which the spell consumes", duration : "24 h", description : "30-ft cube wherein all portals close and can't be opened, and no planar travel; SL6: until dispelled", descriptionFull : "You fortify the fabric of the planes in a 30-foot cube you can see within range. Within that area, portals close and can't be opened for the duration. Spells and other effects that allow planar travel or open portals, such as gate or plane shift, fail if used to enter or leave the area. The cube is stationary."+ AtHigherLevels + "When you cast this spell using a spell slot of 6th level or higher, the spell lasts until dispelled." }; SpellsList["warp sense"] = { name : "Warp Sense", classes : ["sorcerer", "warlock", "wizard"], source : [["P:AitM", 12]], level : 2, school : "Div", time : "1 a", range : "Self", components : "V,S,M", compMaterial : "A razorvine leaf", duration : "Conc, 1 min", description : "Know presence of portals in 30 ft; 1 a DC 15 spell ability chk to see destination \u0026 portal key, ends spell", descriptionFull : "For the duration, you sense the presence of portals, even inactive ones, within 30 feet of yourself."+ "\n If you detect a portal in this way, you can use your action to study it. Make a DC 15 ability check using your spellcasting ability. On a successful check, you learn the destination plane of the portal and what portal key it requires, then the spell ends. On a failed check, you learn nothing and can't study that portal again using this spell until you cast it again."+ "\n The spell can penetrate most barriers but is blocked by 1 foot of stone, 1 inch of common metal, a thin sheet of lead, or 3 feet of wood or dirt." }; // Beast from Turn of Fortune's Wheel // Whirlwyrm is just a giant crocodile under a different name, it has been added to the SRD code as a `nameAlt` // pub_20231030_CoA.js // This file adds the magic items from the Chains of Asmodeus adventure from Extra Life to MPMB's Character Record Sheet SourceList["CoA"] = { name : "Chains of Asmodeus", abbreviation : "CoA", group : "Extra Life", campaignSetting : "Forgotten Realms", url : "https://www.dmsguild.com/product/457996/Chains-of-Asmodeus", date : "2023/10/30", defaultExcluded : true }; CoA_Corruption = { process : function(bAddRemove, sItem) { // Make a variable to remember the settings for this if (!CurrentVars.CoA_Corruption) { CurrentVars.CoA_Corruption = { items : [], present : false, savedAlert : false }; } var bProcessIt = false; var bItemPresent = CurrentVars.CoA_Corruption.items.indexOf(sItem) !== -1; // If removing, test if present and the triggering item is in the list if (!bAddRemove && bItemPresent) { CurrentVars.CoA_Corruption.items.eject(sItem); if (CurrentVars.CoA_Corruption.items.length !== 0) { // Still items present, so don't change anything return; } else { // Removing note in final step if present bProcessIt = CurrentVars.CoA_Corruption.present ? true : false; // Make pop-up appear at next corrupting item addition CurrentVars.CoA_Corruption.savedAlert = false; } } else if (bAddRemove) { // Adding // Add the item to the list of items processed if (!bItemPresent) CurrentVars.CoA_Corruption.items.push(sItem); if (CurrentVars.CoA_Corruption.savedAlert) { // The state of the alert was saved, so don't prompt and do nothing return; } else if (!CurrentVars.CoA_Corruption.present) { // If not present and dialog state was not saved, ask the user if the rules should be added to a notes page var oMsg = { cTitle : "Show Infernal Item Corruption (DM-only) Rules?", cMsg : 'The cursed infernal item "' + MagicItemsList[sItem].name + '" can cause corruption.\nDo you want to add the Infernal Item Corruption rules intended for the DM to a Notes page on your character sheet for reference?\n\nIMPORTANT: these rules are not intended to be read by players, only by the DM.\n\nThese notes will be automatically removed when you remove all corrupting items.', nIcon : 2, // Question nType : 2, // Yes,No oCheckbox : { cMsg : "Don't ask me again next time I add a corrupting item (unless I have removed all corrupting items)", bInitialValue : true, bAfterValue : false } }; // Add the note if "Yes" was clicked bProcessIt = app.alert(oMsg) === 4; // Save the checkbox state CurrentVars.CoA_Corruption.savedAlert = oMsg.oCheckbox.bAfterValue; } } if (bProcessIt) { CurrentVars.CoA_Corruption.present = bAddRemove; processToNotesPage(bAddRemove, CoA_Corruption.toNotesPage, "items", {}, false, ["Chains of Asmodeus, page 271"]); } SetStringifieds("vars"); // Save the global variable to a field }, toNotesPage : [{ // intentionally doesn't include a source name : "INFERNAL ITEM CORRUPTION", popupName : 'The "Infernal Item Corruption" rules from Chains of Asmodeus (page 271)', note : [ "", "Cursed infernal items can be used by mortals, but they always require attunement. Once attuned, the mortal risks an increasing chance of being corrupted by the item., eventually transforming into a devil.", " Mortals that receive express permission from Asmodeus, or that make an infernal contract to acquire a magic item, don't suffer these corrupting effects.", "", "1. STAGE ONE CORRUPTION: BEGINNINGS", "Once a character has attuned to a cursed infernal magic item or artifact, it begins the infernal corruption process. Each time that character finishes a long rest, they must make a DC 10 Wisdom save (tieflings have advantage on this save). On a success, the character suffers no effects, but the DC increases by 1 the next time they must make this save. On a failure, the character progresses to Stage Two unless Dispel Evil and Good is cast on them before their next long rest.", " While in Stage One, the infernal corruption can be prevented by breaking attunement to the corrupting item. This prevents further Wisdom saves and resets the DC of the save, if the character were to attune to the item again.", "", "2. STAGE TWO CORRUPTION: SUFFERINGS", "While in Stage Two, the character becomes delusional, seeing plots against them where there are none. Additionally, each time they rest, they experience terrifying visions and infernal whispers. Whenever they finish a long rest, they take 1d12 necrotic damage, which ignores resistances and immunities and can't be healed until a Dispel Evil and Good or Remove Curse spell is cast on them. Once the character has taken this damage six times, they progress to Stage Three.", " While in Stage Two, the infernal corruption can be removed with one of the following spells: Divine Word, Heal, Mass Heal, True Polymorph, True Resurrection, or Wish.", "\n3. STAGE THREE CORRUPTION: DEPARTINGS", "While in Stage Three, the character begins to suffer physical transformation, and slowly embraces evil. After they finish their first long rest upon entering Stage Three they must roll on the table below to determine how the infernal curse starts shaping them into a devil. In addition, a part-devil character is rendered infertile and detects as a Fiend to Detect Evil and Good spells and similar magic.", "", " d10\tTransformation", " 1\tTheir fingertips elongate into claws", " 2\tNon-functional leathery wings sprout from their back", " 3\tDevilish horns grow upon their head", " 4\tEach night more and more of their skin burns, leaving charred patches", " 5\tOne eye turns milky white, the other turns yellow", " 6\tTheir spine painfully elongates into a skeletal tail", " 7\tTheir skin starts to calcify, turning portions into bone", " 8\tTheir feet painfully twist to resemble cloven hooves", " 9\tAll their hair falls out, replaced by tiny spikes", " 10\tAll their teeth fall out, with new jagged teeth tearing through the gums each morning", "", "The character begins to experience waking whispers pushing them towards evil and they suffer terrifying visions whenever they rest, breaking their spirit and pushing them further to evil. Each time they finish a short or long rest, they must make a DC 10 Wisdom save. If they performed at least one evil act, such as making a decision that increased the suffering of others, they make the save with disadvantage. When they fail the save, they progress to Stage Four.", " While in Stage Three, the infernal corruption can be ended with one of the following spells: True Polymorph, True Resurrection or Wish.", "", "4. STAGE FOUR CORRUPTION: FINALITIES", "When the character finishes their first long rest after reaching Stage Four, the character's alignment shifts to lawful evil. They're now bound by the devil's code, requiring them to honor any pact made and acquire souls in service of Asmodeus. Lastly, their physical form changes, morphing to resemble a devil (DM's choice).", " Once the character reaches Stage Four, the only two cures are the Wish spell, which counts as beyond the scope of the spell, or by signing an infernal contract with Asmodeus to reclaim their soul." ].join("\n") }], description : "\n " + toUni("Corrupting") + '. This item corrupts. See the "Infernal Item Corruption" rules (CoA 271).' } MagicItemsList["amulet of appearance"] = { name : "Amulet of Appearance", source : [["CoA", 267]], type : "wondrous item", rarity : "rare", attunement : true, description : "My equipment always shines as if just polished and my wounds do not appear to others. I'm immune to being frightened and poisoned. However, whenever I would otherwise be affected by these conditions, a random non-evil humanoid on the material plane whom I have met is affected instead. I know this.", descriptionFull : "Your armor, weapons, and other equipment always shine as if just polished. Even if you're wounded, your wounds do not appear to others. You're immune to the frightened and poisoned conditions, as these would otherwise ruin your elegant appearance. However, whenever you would otherwise have been affected by one of these conditions, a random non-evil Humanoid on the Material Plane whom you have previously met gets the condition instead. You know this.", savetxt : { immune : ["frightened", "poisoned"] } } MagicItemsList["amulet of betrayal"] = { name : "Amulet of Betrayal", source : [["CoA", 267]], type : "wondrous item", rarity : "very rare", attunement : true, description : "As a bonus action, I can move one of the following conditions from myself to an ally within 60 ft: blinded, deafened, frightened, poisoned, stunned, exhaustion. When transferring exhaustion, all my exhaustion levels are moved. If the chosen ally is immune to a transferred condition, the transfer fails.", descriptionFull : "You can use a bonus action to move one of the following conditions from yourself to an ally within 60 feet of you: blinded, deafened, frightened, poisoned, stunned, exhaustion. When transferring exhaustion, move all your exhaustion levels. If the chosen ally is immune to a transferred condition, the transfer fails.", action : [["bonus action", ""]] } MagicItemsList["amulet of duplicity"] = { name : "Amulet of Duplicity", source : [["CoA", 267]], type : "wondrous item", rarity : "very rare", attunement : true, cursed: true, description : "When I die, a copy of my naked corpse is left in my place while I'm brought to an extradimensional space. After 24 hours, I heal 1 hp and am brought back to the place I left, but with a different face. I have disadv. on Persuasion checks to reveal who I am. I can't relay this information and forget it when unattuning.", descriptionLong : "When I die, the amulet leaves a copy of my naked corpse in my place while I'm transported to an extradimensional space, stable at 0 hp. After 24 hours, I regain 1 hp and am returned to the place I left with different facial features. Only a Wish spell can restore my true identity. I have disadvantage on Charisma (Persuasion) checks to reveal myself. The amulet is cursed. Identifying it only shows it prevents death and one can't explain its power once attuned. When unattuned, one immediately forgets what the amulet does. A Remove Curse spell reveals the details of the curse but doesn't lift it from the amulet.", descriptionFull : "When you die, you're transported to an extradimensional space where you're stabilized at 0 hit points and kept in that state. The amulet creates a perfect copy of your corpse and places it where you were just before you died, but without any of your worn or carried items. After 24 hours, you regain 1 hit point and are returned to the location of your near-death. Everything about you is the same, except that your facial features are entirely different from before. Only a Wish spell can restore your true identity."+ "\n Until then, you have disadvantage on any Charisma (Persuasion) checks to attempt to reveal who you really are."+ "\n " + toUni("Curse") + ". An Identify spell or similar reveals only that the amulet can prevent death. Once you attune to the amulet, you can't describe its ability to any other creature, and if unattuned, you immediately forget what the amulet does. A Remove Curse spell reveals the details of the curse but does not remove it from the amulet." } MagicItemsList["bracers of asmodeus"] = { name : "Bracers of Asmodeus", source : [["CoA", 267]], type : "wondrous item", rarity : "rare", attunement : true, cursed: true, description : "These are cursed, corrupting, and give +2 AC while not wearing armor or using a shield. I can't unattune to them. They make me obsessed with scheming, manipulation, and always bartering for better deals, often using blackmail. If I decline an opportunity to make money at another's expense, I take 3d10 necrotic damage.", descriptionFull : "You have a +2 bonus to AC while wearing these bracers, if you do not wear armor or use a shield at the same time."+ "\n " + toUni("Curse") + ". While attuned to the bracers, you become obsessed with plotting, scheming, and manipulation. You always barter for better deals, often using secrets or leveraging other offers in the process. If you ever decline an opportunity to better yourself financially at another's expense, you immediately take 3d10 necrotic damage. Only the Remove Curse spell allows you to end attunement to this item."+ CoA_Corruption.description, eval : function() { CoA_Corruption.process(true, "bracers of asmodeus") }, removeeval : function() { CoA_Corruption.process(false, "bracers of asmodeus") }, extraAC : [{ mod : 2, magic : true, text : "I gain a +2 bonus to AC while I'm not wearing armor or using a shield.", stopeval : function (v) { return v.wearingArmor || v.usingShield; } }] } MagicItemsList["canian fork"] = { name : "Canian Fork", source : [["CoA", 267]], type : "weapon (trident)", rarity : "rare", attunement : true, cursed: true, description : "This magic, cursed, corrupting trident gives me +3 bonus to attack and damage rolls made with. I can't willing to part with it and can't unattune to it without Remove Curse. I'm vulnerable to radiant damage. When I receive magical healing I have to succeed on a DC 15 Con save or the healing has no effect.", descriptionFull : "You have a +3 bonus to attack and damage rolls made with this magic weapon. In addition, you can make one additional attack with it as a bonus action on each of your turns."+ "\n " + toUni("Curse") + ". You're unwilling to part with this weapon while attuned to it. You're also vulnerable to radiant damage and each time you receive magical healing, you must make a DC 15 Constitution saving throw."+ "\n On a failed save, the healing has no effect. Only the Remove Curse spell allows you to end attunement to this item."+ CoA_Corruption.description, eval : function() { CoA_Corruption.process(true, "canian fork") }, removeeval : function() { CoA_Corruption.process(false, "canian fork") }, weight : 4, savetxt : { text : ["Vulnerable to radiant damage"] }, action : [["bonus action", " attack"]], weaponOptions : [{ baseWeapon : "trident", regExpSearch : /^(?=.*canian)(?=.*fork).*$/i, name : "Canian Fork", source : [["CoA", 267]], description : "Thrown, versatile (1d8); Bonus action: 1 attack", modifiers : [3, 3], selectNow : true }] } MagicItemsList["condensed order"] = { name : "Condensed Order", source : [["CoA", 267]], type : "wondrous item", rarity : "uncommon", description : "Once as an action, I can snuff this silvery powder extracted from those of a lawful persuasion, or administer it to another. The consumer is immune to the flesh warping feature of demonic ichor and gains advantage on saves against effects from a demonic source. These benefits last for 8 hours.", descriptionFull : "Condensed Order is a silvery powder that can be extracted from those of a lawful persuasion. Devils bound for the warfronts of Avernus take flasks and snuff boxes of the stuff to fortify themselves against exposure to the raw chaos of demons. Taking the substance requires an action and makes you immune to the flesh warping feature of demonic ichor. It also gives you advantage on saving throws against any effect from a demonic source. These benefits last for 8 hours." } MagicItemsList["demonbone polearm"] = { name : "Demonbone Polearm", nameTest : "Demonbone", source : [["CoA", 268]], type : "weapon (polearm)", rarity : "very rare", attunement : true, cursed: true, description : "As a reaction when damaged by a creature in reach, I can attack it once with this +2 polearm. It is cursed, I can't unattune to it and have disadv. with other weapons. If I take damage, I must make a DC 15 Wis save or go berserk: I attack those near to me until none remain in 60 ft or I'm calmed with a DC 15 Persuasion" + (typePF ? "." : "check."), descriptionLong : "I have a +2 bonus on attack and damage rolls made with this magic quarterstaff. As a reaction when I'm damaged by a creature in this weapon's reach, I can make one melee attack against it. This weapon is cursed, I'm unwilling to part with it, can't unattune to it without Remove Curse, and have disadvantage with other weapons. When I take damage, I must make a DC 15 Wisdom save or go berserk: I attack the nearest creature using this weapon with all my attacks, moving to the next nearest until none remain that I can sea or hear within 60 ft of me. I can also be calmed with a DC 15 Charisma (Persuasion) check.", descriptionFull : "You have a +2 bonus to attack and damage rolls made with this magic weapon. In addition, when you're damaged by a creature in reach, you may use your reaction to make one melee attack against it with this weapon."+ "\n " + toUni("Curse") + ". You're unwilling to part with this weapon while attuned to it. While attuned, you have disadvantage on attack rolls with weapons other than this one."+ "\n Whenever a hostile creature damages you, you must succeed on a DC 15 Wisdom saving throw or go berserk. While berserk, you must use your action on each of your turns to attack the creature nearest to you with the weapon. If you can make extra attacks as part of the Attack action, you use those extra attacks, moving to attack the next nearest creature after you fell your current target. If you have multiple possible targets, you attack one at random."+ "\n You're berserk until you start your turn with no creatures within 60 feet of you that you can see or hear. Alternatively, an ally can use an action to make a DC 15 Charisma (Persuasion) check and if successful, you're no longer berserk. Only the Remove Curse spell allows you to end attunement to this item."+ CoA_Corruption.description, eval : function() { CoA_Corruption.process(true, "demonbone polearm") }, removeeval : function() { CoA_Corruption.process(false, "demonbone polearm") }, chooseGear : { type : "weapon", prefixOrSuffix : "suffix", descriptionChange : ["replace", "polearm"], excludeCheck : function (inObjKey, inObj) { var testRegex = /\b(polearm|glaive|halberd|lance|pike|quarterstaff|spear)\b/i; return !testRegex.test(inObjKey) && (!inObj.baseWeapon || !testRegex.test(inObj.baseWeapon)); } }, calcChanges : { atkCalc : [ function (fields, v, output) { var testRegex = /\b(polearm|glaive|halberd|lance|pike|quarterstaff|spear)\b/i; if (!v.theWea.isMagicWeapon && v.isMeleeWeapon && (/demonbone/i).test(v.WeaponTextName) && (testRegex.test(v.thisWeapon[0]) || ( v.theWea.baseWeapon && testRegex.test(v.theWea.baseWeapon) ))) { output.magic = v.thisWeapon[1] + 2; } }, 'If I include the word "Demonbone" in a the name of a polearm, it will be treated as the magic weapon Demonbone Polearm. It adds +2 to hit and damage, can be used as a reaction when I\'m damaged by a creature within reach to attack them, an is cursed causing me to go beserk when I\'m damaged.' ] }, action : [["reaction", " (when damaged)"]] } MagicItemsList["gauntlets of rage"] = { name : "Gauntlets of Rage", source : [["CoA", 268]], type : "wondrous item", rarity : "rare", attunement : true, prerequisite : "Requires attunement by a bard, sorcerer, warlock, or wizard", prereqeval : function(v) { return classes.known.bard || classes.known.sorcerer || classes.known.warlock || classes.known.wizard ? true : false; }, description : "The first melee weapon attack I make after a short rest sends me into a fury for 1 minute. I can't cast spells or speak, am immune to charmed and frightened, and when I deal damage, I heal 2d8 hp and end this fury or one condition. Also, I can use a spell slot before a melee attack for +1d6 necrotic damage per spell level.", descriptionLong : "I gain the power of never-ending fury. The first melee weapon attack I make after I finish a short or long rest automatically send me into a special fury for 1 minute. While furious, I can't cast spells, can't verbally communicate, and am immune to the charmed and frightened conditions. Each time I deal damage, I regain 2d8 hit points and may immediately remove a condition I currently suffer from or end this fury. Also, while in this fury, I may spend a spell slot before I make a melee attack. Doing so causes the attack to deal an extra 1d6 necrotic damage per level of spell slot expended, if it hits.", descriptionFull : "You gain the power of never-ending fury. After you make a melee weapon attack, you automatically enter a special fury for 1 minute. While furious, you can't cast spells, can't verbally communicate, and are immune to the charmed and frightened conditions. Each time you deal damage, you regain 2d8 hit points and may immediately remove a condition you currently suffer from or end this fury. Additionally, while in this fury, you may spend a spell slot before you make a melee attack. Doing so causes the attack to deal an extra 3 (1d6) necrotic damage per level of spell slot expended, if the attack hits. Once used you may not use this fury again until you finish a short or long rest.", usages : 1, recovery : "short rest", savetxt : { text : ["Immune to charmed and frightened in fury"] } } MagicItemsList["infernal amulet"] = { name : "Infernal Amulet", source : [["CoA", 268]], type : "wondrous item", rarity : "rare", attunement : true, cursed: true, description : "While wearing this amulet, I can use it as a spellcasting focus for my spells, and it grants a +2 bonus to my spell save DC and spell attack bonus. It is cursed and corrupting. I'm unwilling to part with it and require Remove Curse to unattune to it. It gives me disadvantage on Strength saving throws and Strenght checks.", descriptionFull : "While wearing this amulet, you can use it as a spellcasting focus for your spells, and it grants a +2 bonus to your spell save DC and spell attack bonus."+ "\n " + toUni("Curse") + ". You're unwilling to part with this amulet while attuned to it and you wear it always. While wearing the amulet you have disadvantage on Strength saving throws and Strength checks. Only the Remove Curse spell allows you to remove the item and end attunement."+ CoA_Corruption.description, eval : function() { CoA_Corruption.process(true, "infernal amulet") }, removeeval : function() { CoA_Corruption.process(false, "infernal amulet") }, calcChanges : { spellCalc : [ function (type, spellcasters, ability) { if (type != "prepare") return 2; }, "While wearing the Infernal Amulet my spell save DC and spell attack bonus each increase by 2." ] }, advantages : [["Athletics", false], ["Strength", false]] } if (typePF) MagicItemsList["infernal amulet"].savetxt = { text : ["Disadv. on Str saves/checks"] } MagicItemsList["infernal plate armor"] = { name : "Infernal Plate Armor", source : [["CoA", 268]], type : "armor (plate)", rarity : "very rare", attunement : true, cursed: true, description : "While wearing this armor, I gain a +2 bonus to AC. This armor is cursed and corrupting. I can't take it off or unattune to it without Remove Curse. It makes me vulnerable to the following damage types: force, lightning, psychic, radiant, and thunder.", descriptionFull : "While wearing this armor, you gain a +2 bonus to AC."+ "\n " + toUni("Curse") + ". Once you wear this armor, and are attuned to it, you can't remove it. Only the Remove Curse spell allows you to end the attunement and finally doff it. While wearing the armor, you're vulnerable to the following damage types: force, lightning, psychic, radiant, and thunder."+ CoA_Corruption.description, eval : function() { CoA_Corruption.process(true, "infernal plate armor") }, removeeval : function() { CoA_Corruption.process(false, "infernal plate armor") }, weight : 65, armorOptions : [{ regExpSearch : /^(?=.*infernal)(?=.*plate).*$/i, name : "Infernal Plate Armor", source : [["CoA", 268]], type : "heavy", ac : "18+2", stealthdis : true, weight : 65, strReq : 15, selectNow : true }], savetxt : { text : ["Vulnerable to force, lightning, psychic, radiant, and thunder damage"] }, } MagicItemsList["knife of stolen resistance"] = { name : "Knife of Stolen Resistance", source : [["CoA", 268]], type : "weapon (dagger)", rarity : "rare", description : "As an action once per long rest, I can use this knife to carve a single infernal rune into the flesh of an unconscious Beast, Celestial, Dragon, Fey, or Giant. Over the next 10 minutes the creature dies in agony, only Wish can stop this. If the creature has any resistances or immunities, I gain those while its dying.", descriptionFull : "Using an action, you carve a single infernal rune into the flesh of an unconscious Beast, Celestial, Dragon, Fey, or Giant with this knife. Over the next 10 minutes the creature dies an agonizing death that can't be prevented short of the Wish spell. If the creature has any resistances or immunities, you gain those resistances and immunities until the creature dies or a Wish spell is used to save the creature. The knife's power can't be used again until you finish a long rest.", weight : 1, action : [["action", ""]], usages : 1, recovery : "long rest", weaponOptions : [{ baseWeapon : "dagger", regExpSearch : /^(?=.*knife)(?=.*stolen)(?=.*resistance).*$/i, name : "Knife of Stolen Resistance", source : [["CoA", 268]], selectNow : true }] } MagicItemsList["ring of collecting"] = { name : "Ring of Collecting", source : [["CoA", 268]], type : "ring", rarity : "very rare", attunement : true, description : "As an action once per dawn, I can use this ring to cast Tiny Hut. As a bonus action, I can disintegrate an up to Medium sized, nonmagical piece of art within 60 ft. That art now appears inside the tiny hut, vanishing forever if removed from it. For every 1000 gp of art added, the tiny hut get +1 ft radius and lasts +1 hour.", descriptionLong : "As an action once per dawn, I can use this ring to cast Leomund's Tiny Hut. As a bonus action, I can use this ring to disintegrate an up to Medium sized, nonmagical piece of art (drawing, painting, or sculpture) within 60 ft. That art now appears inside the tiny hut, for me to appreciate whenever I desire. If I try to remove this art from the tiny hut, it vanishes forever. I can steadily improve this space, but only by denying such beauty from the rest of the world. For every 1000 gp of art acquired, the tiny hut increases in size by adding +1 ft to its radius and lasts +1 hour.", descriptionFull : "While wearing this ring you can use it to cast the Leomund's Tiny Hut spell as an action. Once this property is used, it can't be used again until the next dawn. Additionally, as a bonus action, you can use the ring to disintegrate any nonmagical piece of art (drawing, painting, or sculpture) within 60 feet that is no larger than Medium-sized. That art now appears inside the tiny hut, for you to appreciate whenever you desire. If you try to remove this art from the tiny hut, it vanishes forever. You can steadily improve this space, but only by denying such beauty to the rest of the world. For every 1,000 gp of art acquired, the tiny hut increases in size by adding another foot to its radius and lasts one additional hour.", spellcastingBonus : [{ name : "Once per dawn", spells : ["leomund's tiny hut"], selection : ["leomund's tiny hut"], firstCol : "oncelr" }], spellChanges : { "leomund's tiny hut" : { time : "1 a", duration : "8h+1h/1k gp", description : "10ft+1ft/1000 gp rad immobile dome of force; 9 Medium crea; blocks magic; ends if I leave; see book", changes : "Using the Ring of Collecting, I can cast Leomund's Tiny Hut as an action instead of taking 1 minute. Once this property is used, it can't be used again until the next dawn. For every 1000 gp of art acquired, the tiny hut increases in size by adding +1 ft to its radius and lasts +1 hour." } }, usages : 1, recovery : "dawn", additional : "Leomund's Tiny Hut", action : [["bonus action", " (steal art)"]] } MagicItemsList["ring of the copycat"] = { name : "Ring of the Copycat", source : [["CoA", 268]], type : "ring", rarity : "legendary", attunement : true, description : "As a reaction when an ally within 60 ft casts a spell, I can cast it as well as long as I can't normally cast it and it requires 10 gp or less material components. The cloned spell uses the original caster's abilities, originates from me and I choose its targets, but my ally can't cast this spell again until they finish a long rest.", descriptionFull : "You gain the ability to channel energy from allies to cast spells, even if you normally can't. When an ally within 60 feet of you casts a spell that you normally can't cast and that requires 10 gp or fewer in material components, you may use a reaction to cast that spell. When cast in this way, the spell is cast using your ally's spellcasting ability, spell save DC, and spell attack bonus, as needed. You decide this cloned spell's target, as specified in the spell's description, and the spell originates from you. After you use this ability, your ally can't cast this spell again until they finish a long rest.", action : [["reaction", ""]] } MagicItemsList["ring of treachery"] = { name : "Ring of Treachery", source : [["CoA", 269]], type : "ring", rarity : "very rare", attunement : true, description : "This ring has 3 charges, which are restored whenever I finish a long rest. As a reaction when I am damaged, I can expend one charge to transfer that damage to a random creature (allies included) within 60 ft of me.", descriptionFull : "This ring has 3 charges. While wearing this ring, when you're damaged, you may use a reaction to expend a charge and transfer that damage to a random creature (which could include an ally) within 60 feet. All charges are restored when you finish a long rest.", action : [["reaction", " (when damaged)"]], usages : 3 } MagicItemsList["sage's mirror"] = { name : "Sage's Mirror", source : [["CoA", 269]], type : "wondrous item", rarity : "rare", description : "This mirror has 3 charges, regaining all at dusk. As an action, I can expend 1 charge to cast either Find the Path or Legend Lore. With each use, it is apparent that the information gleaned from the mirror comes from a chamber in the Nine Hells where sages and scholars are tortured for the answers to each question.", descriptionFull : "This item has 3 charges and regains all charges at dusk. You can use an action and expend 1 of the mirror's charges to cast one of the following spells:"+ "\n \u2022 Find the Path"+ "\n \u2022 Legend Lore"+ "\n With each use, it is apparent that the information gleaned from the mirror comes from a chamber in the Nine Hells where sages and scholars are tortured for the answers to each question.", usages : 3, recovery : "Dusk", spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "1 charge", spells : ["find the path", "legend lore"], selection : ["find the path", "legend lore"], firstCol : 1, times : 2 }], spellChanges : { "find the path" : { time : "1 a", changes : "Using the Sage's Mirror, I can cast Find the Path as an action when I expend one of its charges." }, "legend lore" : { time : "1 a", changes : "Using the Sage's Mirror, I can cast Legend Lore as an action when I expend one of its charges." } } } MagicItemsList["skull of selfish knowledge"] = { name : "Skull of Selfish Knowledge", source : [["CoA", 269]], type : "wondrous item", rarity : "rare", attunement : true, description : "As an action, I can make this magical skull devour a nonmagical book, map, or scroll. Once devoured, the learning is forever available to me, but I can never write the information down or communicate it to others. It is for me alone.", descriptionFull : "You may use an action to make the magical skull devour a nonmagical book, map, or scroll. Once devoured the learning is forever available to you, but you can never write the information down or communicate it to others. It is for you alone.", action : [["action", ""]] } MagicItemsList["stygian spear"] = { name : "Stygian Spear", source : [["CoA", 270]], type : "weapon (spear or javelin)", rarity : "very rare", attunement : true, cursed: true, description : "This +2 weapon deals +1d6 damage when thrown. It returns to my hand immediately after it hits or misses. It is cursed and corrupting. I'm unwilling to part with it, require Remove Curse to unattune, and have disadv. with other weapons. On a 1 to hit, I attack the closest ally with adv. and deal +2d6 poison damage.", descriptionFull : "You have a +2 bonus to attack and damage rolls made with this magic weapon. When you throw it, it deals one extra die of damage on a hit. After you throw it and it hits or misses, it flies back to your hand immediately."+ "\n " + toUni("Curse") + ". You're unwilling to part with this weapon while attuned to it. In addition, you have disadvantage on attack rolls made with weapons other than this one."+ "\n Whenever you roll a 1 on an attack roll using this weapon, your target changes to your closest ally."+ "\n If there are multiple allies, randomly determine which is the target. Make a new attack roll with advantage against your ally. If the attack hits, in addition to the standard damage you deal an extra 2d6 poison damage. Only the Remove Curse spell allows you to end attunement to this item."+ CoA_Corruption.description, eval : function() { CoA_Corruption.process(true, "stygian spear") }, removeeval : function() { CoA_Corruption.process(false, "stygian spear") }, choices : ["Javelin", "Spear"], "javelin" : { name : "Stygian Javelin", description : "This +2 javelin deals +1d6 damage when thrown. It returns to my hand immediately after it hits or misses. It is cursed and corrupting. I'm unwilling to part with it, require Remove Curse to unattune, and have disadv. with other weapons. On a 1 to hit, I attack the closest ally with adv. and deal +2d6 poison damage.", descriptionLong : "I have a +2 bonus to attack and damage rolls made with this magic javelin. When I throw it, it deals one extra die of damage on a hit and it flies back to my hand immediately after it hits or misses. It is cursed and corrupting. I'm unwilling to part with it, require Remove Curse to unattune to it, and gives me disadvantage on attacks with other weapons. Whenever I roll a 1 on an attack roll using this weapon, I instead attack my closest ally. I make a new attack roll with advantage against my ally and if it hits, this weapon deals an extra +2d6 poison damage. If there are multiple allies, randomly determine the target.", weaponOptions : [{ baseWeapon : "javelin", regExpSearch : /^(?=.*stygian)(?=.*javelin).*$/i, name : "Stygian Javelin", source : [["CoA", 270]], description : "Returning, thrown; Thrown: +1d6 damage; On 1: adv. attack ally \u0026 +2d6 poison damage", modifiers : [2, 2], selectNow : true }], weight : 2 }, "spear" : { name : "Stygian\u200A Spear", description : "This +2 spear deals +1d6 damage when thrown. It returns to my hand immediately after it hits or misses. It is cursed and corrupting. I'm unwilling to part with it, require Remove Curse to unattune, and have disadv. with other weapons. On a 1 to hit, I attack the closest ally with adv. and deal +2d6 poison damage.", descriptionLong : "I have a +2 bonus to attack and damage rolls made with this magic spear. When I throw it, it deals one extra die of damage on a hit and it flies back to my hand immediately after it hits or misses. It is cursed and corrupting. I'm unwilling to part with it, require Remove Curse to unattune to it, and gives me disadvantage on attacks with other weapons. Whenever I roll a 1 on an attack roll using this weapon, I instead attack my closest ally. I make a new attack roll with advantage against my ally and if it hits, this weapon deals an extra +2d6 poison damage. If there are multiple allies, randomly determine the target.", weaponOptions : [{ baseWeapon : "spear", regExpSearch : /^(?=.*stygian)(?=.*spear).*$/i, name : "Stygian Spear", source : [["CoA", 270]], description : "Returning, thrown, versatile (1d8); Thrown: +1d6 damage; On 1: adv. attack ally \u0026 +2d6 poison damage", modifiers : [2, 2], selectNow : true }], weight : 3 } } MagicItemsList["sword of retribution"] = { name : "Sword of Retribution", nameTest : "of Retribution", source : [["CoA", 270]], type : "weapon (any sword)", rarity : "very rare", attunement : true, cursed: true, description : "Damage from this +3 sword can be regained only through resting. It is cursed and corrupting. I'm unwilling to part with it, require Remove Curse to unattune, and have disadv. with other weapons. After a long rest, I must make a DC 11 Con save or only get the benefits of a short rest due to nightmares.", descriptionLong : "I gain a +3 bonus to attack and damage rolls made with this sword. Hit points lost to this weapon's damage can be regained only through a short or long rest, rather than by regeneration, magic, or any other means. It is cursed and corrupting. I'm unwilling to part with it, require Remove Curse to unattune to it, and gives me disadvantage on attacks with other weapons. When I sleep, I experience nightmares of the past of the vengeful spirit possessing the sword, culminating in its death. After a long rest, I must make a DC 11 Constitution saving throw or only gain the benefits of a short rest.", descriptionFull : "You gain a +3 bonus to attack and damage rolls made with this sword. Hit points lost to this weapon's damage can be regained only through a short or long rest, rather than by regeneration, magic, or any other means."+ "\n " + toUni("Curse") + ". You're unwilling to part with this weapon while attuned to it. While attuned to this weapon, you also have disadvantage on attack rolls made with weapons other than this one."+ "\n The vengeful spirit possessing the sword shares its history and lust for vengeance with the wielder. After each successful long rest, you experience nightmares of the spirit's past, culminating in its death. When you wake, you must make a DC 11 Constitution saving throw. On a failed save, you only gain the benefits of a short rest. Only the Remove Curse spell allows you to end attunement to this item."+ CoA_Corruption.description, eval : function() { CoA_Corruption.process(true, "sword of retribution") }, removeeval : function() { CoA_Corruption.process(false, "sword of retribution") }, chooseGear : { type : "weapon", prefixOrSuffix : "prefix", descriptionChange : ["replace", "sword"], excludeCheck : function (inObjKey, inObj) { var testRegex = /sword|scimitar|rapier/i; return !(testRegex).test(inObjKey) && (!inObj.baseWeapon || !(testRegex).test(inObj.baseWeapon)); } }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && v.isMeleeWeapon && (/sword|scimitar|rapier/i).test(v.baseWeaponName) && (/of retribution/i).test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + 'Only rest heals this damage; Cursed'; } }, 'If I include the words "of Retribution" in the name of a sword, it will be treated as the magic weapon Sword of Retribution. It gives a +3 bonus to attack and damage. Damage it deals can\'t be healed except by resting, and it also bears a curse.' ], atkCalc : [ function (fields, v, output) { if (v.isMeleeWeapon && (/sword|scimitar|rapier/i).test(v.baseWeaponName) && (/of retribution/i).test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; output.magic = v.thisWeapon[1] + 3; } }, '' ] } } var CoA_VialOfGreed = [ "This small glass vial can stockpile resources for use in the future. Once stored, resources last for 1 century before vanishing. As an action you make the vial store any number of the following resources, which are magically consumed and converted into a violet-colored liquid:", "\u2022 Up to 31 days of food and/or drink. The flavors are lost, instead becoming tasteless.", "\u2022 Up to 7 days of alcohol. The flavors are lost, instead becoming tasteless.", "\u2022 Up to 5 magic scrolls that affect a single creature. The target of the spell is you, and if the spell requires concentration, you can concentrate.", "\u2022 Up to 5 magic potions. No more than 2 duplicate potions can be stored at a time.", "You may have more than one kind of resource in the vial, up to the limits expressed above. You can use a bonus action to consume one day of food (or alcohol) or activate one scroll or magic potion. If activating a magic scroll, the effects of that scroll must end before you can activate another scroll from the Vial of Greed." ]; MagicItemsList["vial of greed"] = { name : "Vial of Greed", source : [["CoA", 270]], type : "wondrous item", rarity : "rare", attunement : true, description : "As an action, I can have this small glass vial magically store: food and drink (up to 31 days), alcohol (up to 7 days), magic scrolls that affect 1 creature (up to 5), and magic potions (up to 5, no 3 can be the same). As a bonus action, I can use or consume one of those stored, but the food, drink and alcohol is tasteless.", descriptionFull : CoA_VialOfGreed.join("\n "), toNotesPage : [{ name : "Vial of Greed Features", note : desc(CoA_VialOfGreed).replace(/is you/ig, "is me").replace(/you /ig, "I ") }], action : [ ["action", "Store in Vial of Greed"], ["bonus action", "Use from Vial of Greed"] ] } MagicItemsList["weapon of agonizing paralysis"] = { name : "Weapon of Agonizing Paralysis", nameTest : "of Agonizing Paralysis", source : [["CoA", 271]], type : "weapon (any melee)", rarity : "very rare", attunement : true, description : "This magic weapon has a +3 bonus to hit and damage. When it reduces a creature to 0 hp, they don't die but are instead healed to 1 hp and paralyzed. While paralyzed, infernal runes appear as if carved into their flesh and at the start of each of their turns they suffer immense pain and gain a level of exhaustion.", descriptionFull : "You have a +3 bonus to attack and damage rolls made with this magic weapon. When this weapon reduces a creature to 0 hit points, the creature doesn't die. Instead, infernal runes appear as if carved into their flesh and they're healed to 1 hit point. They now have the paralyzed condition until the condition is removed by a Lesser Restoration spell or similar magic. When the condition is removed, the runes disappear. At the start of each of their turns while they're paralyzed, the creature suffers immense pain and gains a level of exhaustion.", allowDuplicates : true, chooseGear : { type : "weapon", prefixOrSuffix : "prefix", excludeCheck : function (inObjKey, inObj) { return /melee/i.test(inObj.range); } }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && v.isMeleeWeapon && /^(?=.*agonizing)(?=.*paralysis).*$/i.test(v.baseWeaponName)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + 'At 0 hp: paralyzed not dead'; } }, 'If I include the words "of Agonizing Paralysis" in a the name of a melee weapon, it will be treated as the magic weapon Weapon of Agonizing Paralysis. It has +3 to hit and damage and when it brings a target to 0 hp, they are healed to 1 hp and paralyzed.' ], atkCalc : [ function (fields, v, output) { if (!v.theWea.isMagicWeapon && v.isMeleeWeapon && /^(?=.*agonizing)(?=.*paralysis).*$/i.test(v.baseWeaponName)) { v.theWea.isMagicWeapon = true; output.magic = v.thisWeapon[1] + 3; } }, '' ] } } // pub_20231114_BoMT.js // This file adds the Character Options content from the "The Book of Many Things" book (from the "The Deck of Many Things" set) to MPMB's Character Record Sheet // Define the source SourceList["BoMT"] = { name : "The Book of Many Things", abbreviation : "BoMT", abbreviationSpellsheet : "MT", group : "Primary Sources", url : "https://dndstore.wizards.com/us/en/product/865604/the-deck-of-many-things-digital-plus-physical-bundle", date : "2023/11/14" }; BackgroundList["rewarded"] = { regExpSearch : /rewarded/i, name : "Rewarded", source : [["BoMT", 57]], skills : ["Insight", "Persuasion"], gold : 18, languageProfs : [1], toolProfs : [["Gaming set", 1]], equipleft : [ ["Paper, sheets of", "", 5], ["Ink, 1 ounce bottle of", 1, ""], ["Ink pen", "", ""], ["Gaming set matching my proficiency", "", ""] ], equipright : [ ["Fine clothes", "", 6], ["Signet ring", "", ""], ["Pouch (with coins)", "", 1] ], feature : "Fortune's Favor", trait : [ "A safe home is a foundation on which anything else can be built. (Key, Throne)", "I was elevated to heights I could never otherwise attain, and I won't waste my fortune. (Star, Sun)", "I try to be a source of inspiration and joy to others. Life is never as bad as you think! (Euryale, Jester)", "Courage and boldness can carry the day when all else fails. (Comet, Knight)", "My good fortune means I can lift others up as well. (Gem, Moon)", "Having the right answers is the first step to solving any problem, no matter how dire. (Fates, Sage)" ], extra : [ "Select a Trinket", "Perfumed scarf from admirer", "Crystal glows as candle", "Letter from far-off influential", "Symbol with unknown meaning", "Ever-crisp playing card", "Half a medallion" ] }; BackgroundFeatureList["fortune's favor"] = { description : "I have unexpected good fortune in life, caused by something like a genie who granted me wishes, extraordinary luck during a game, me honing my skills to endure a supernatural trial, or some other force that transformed my life. This boon is reflected in my choice of one free feat: Lucky, Magic Initiate, or Skilled.", source : [["BoMT", 57]], featsAdd: [{ options: [ { key: 'lucky' }, { key: 'magic initiate' }, { key: 'skilled' }, ], }], }; BackgroundList["ruined"] = { regExpSearch : /ruined/i, name : "Ruined", source : [["BoMT", 58]], skills : ["Stealth", "Survival"], gold : 13, languageProfs : [1], toolProfs : [["Gaming set", 1]], equipleft : [ ["Cracked hourglass", "", 1], ["Rusty manacles", "", 6], ["Bottle, glass (half-empty)", "", 2], ["Hunting trap", "", 25], ["Gaming set matching my proficiency", "", ""] ], equipright : [ ["Traveler's clothes", "", 4], ["Pouch (with coins)", "", 1] ], feature : "Still Standing", trait : [ "I've changed from my past, and I work to live up to my new path. (Balance, Throne)", "Every moment is a gift I refuse to squander. (Euryale, Skull)", "Now that I've overcome having nothing, I can survive anything. (Fool, Ruin, Talons)", "I know enemies are set against me, and I always prepare for the worst. (Flames, Rogue)", "I interpret every event as part of a larger pattern I just haven't worked out yet. (Puzzle, Star)", "I must make up for so much time I've already lost. (Donjon, Void)" ], extra : [ "Select a Trinket", "Rusted scrap of family heirloom", "Ancient land deed, lost in obscurity", "Bauble once imbued with powerful magic", "Battered, pierced playing card", "Yellowed whispering humanoid tooth", "Keepsake from friend turned enemy" ] }; BackgroundFeatureList["still standing"] = { description : "I have weathered ruinous misfortune in my life and I possess hidden reserves because of this. Possibly I've had to keep my senses sharp, had to redouble my efforts to reclaim what is mine, had to stoically persevered through it, or experienced something else transformative. How I've dealt with this is reflected in my choice of one free feat: Alert, Skilled, or Tough.", source : [["BoMT", 58]], featsAdd: [{ options: [ { key: 'alert' }, { key: 'skilled' }, { key: 'tough' }, ], }], }; FeatsList["cartomancer"] = { name : "Cartomancer", source : [["BoMT", 49]], description : 'I can use a card deck as a spellcasting focus. I learn and can do stage magic with Prestidigitation. I conceal its components as card tricks when doing so. When I finish a long rest, I can store a spell from my class\' spell list into a card, see "Hidden Ace" notes.', descriptionFull : "You have learned to channel your magic through a deck of cards. You can use a card deck as your spellcasting focus, and you gain the following benefits:"+ "\n " + toUni("Card Tricks") + ". You learn the Prestidigitation cantrip and can use it to create illusions that duplicate the effects of stage magic. When you use Prestidigitation in this way, you can conceal the verbal and somatic components of the spell as ordinary conversation and card handling."+ "\n " + toUni("Hidden Ace") + ". When you finish a long rest, you can choose one spell from your class's spell list and imbue that spell into a card. The chosen spell must have a casting time of 1 action, and it must be a level for which you have spell slots. The card remains imbued with this spell for 8 hours. While the card is imbued with the spell, you can use a bonus action to flourish the card and cast the spell within. The card then immediately loses its magic.", prerequisite : "4th-level, Spellcasting feature", prereqeval : function(v) { return v.characterLevel >= 4 && v.isSpellcastingClass; }, spellcastingBonus : [{ name : "Cartomancer", spells : ["prestidigitation"], selection : ["prestidigitation"], }], spellChanges : { "prestidigitation" : { components : "V,S*", compMaterial : "When I duplicate the effects of stage magic, I can conceal the verbal and somatic components of the spell as ordinary conversation and card handling.", description : "Harmless sensation, illusory image, snuff light, clean/soil/chill/warm/flavor, stage magic (hide comp)", changes : "When I duplicate the effects of stage magic, I can conceal the verbal and somatic components of the spell as ordinary conversation and card handling." } }, action : [["bonus action", "Hidden Ace (use imbued card)"]], toNotesPage : [{ name : "Hidden Ace", page3notes : true, note : [ "When I finish a long rest, I can imbue a spell from my class' spell list into a card for 8 hours", "The spell must have a casting time of 1 action and be a level for which I have spell slots", "As a bonus action, I can flourish the card and cast the spell within; It then loses its magic" ] }] }; var BoMT = { toDescrFull : function (sDescr) { if (typeof sDescr !== "string") sDescr = sDescr.join("\n "); return sDescr.replace(/\[\[.*?\]\]/g, "$1") .replace(/>>(.*?)<>(.*?)( \(.*?\))?<<\. /g, function(a, p1, p2, p3, p4) { if (/\n /.test(p1)) { return "\n\n " + p2.toUpperCase() + p3.toLowerCase() + "\n "; } else { return p1 + p2 + p3 + ": "; } }); }, "voidwalker armor" : "This armor is cursed, and attuning to it extends the curse to you. As long as you remain cursed, you're unwilling to part with the armor. Taking it off fails to end the curse. While cursed in this way, you feel disconnected from your body, continuously hearing whispers that call for you to join them. Whenever you finish a long rest while cursed, you must make a DC 11 Charisma saving throw. On a failed save, your soul is drawn from your body and trapped in an object on a different plane of existence. The object and location of this object are chosen by the DM[[ (but might be the House of Cards; see chapter 18)]]. While your soul is trapped in this way, your body is inert and doesn't age or require sustenance. Destroying the object frees your soul; otherwise, only a Wish spell can restore your soul to your body.", "telescopic transporter" : "This enormous telescope allows you to view distant celestial objects, including stars, Wildspace systems, and Astral Sea phenomena like the cities of deities or the petrified husks of dead gods."+ "\n After spending 1 hour calibrating the telescope, you can attempt to travel to the planet or celestial body at which the telescope is currently pointed. At the end of the hour, you make a DC 17 Intelligence (Arcana) check. On a successful check, you and eight other willing creatures touching the telescope, along with everything all travelers are wearing and carrying, safely teleport to unoccupied spaces at the intended destination. On a failed check, a mishap occurs instead. The DM rolls on the table below to determine the mishap or chooses a mishap that's good for the campaign."+ "\n\nd6\tMishap"+ "\n 1\tThe travelers appear adrift in the Astral Sea."+ "\n 2\tThe travelers appear on a different plane of existence, determined randomly or chosen by the DM."+ "\n 3\tExcess cosmic energy overloads the telescope, causing it to explode. Each creature within 60 feet of the telescope takes 8d6 necrotic damage. Any Humanoid who survives this damage is transformed into a different kind of creature, as if it had been subject to the Reincarnate spell."+ "\n 4\tA creature from the Astral Sea (such as a githyanki knight) appears within 60 feet of the telescope. The DM decides its attitude."+ "\n 5\tThe travelers appear on a different planet or celestial body in the Wildspace system nearest to their target destination."+ "\n 6\tThe travelers arrive at their intended destination, but they each appear coated in harmless slime.", "sage's signet" : { "augury" : { time : "1 a", changes : "Using the Sage's Signet I can cast Augury once per dawn as an action." } }, "shrieking greaves" : "The greaves are cursed, and becoming attuned to them extends the curse to you. You can't remove the greaves or end your attunement to them until you are targeted by a Remove Curse spell or similar magic."+ "\n You have disadvantage on saving throws against the frightened condition. Whenever you start your turn frightened, the greaves release an ear-piercing scream. You and each creature within 10 feet of you must make a DC 15 Constitution saving throw, taking 2d8 thunder damage on a failed save, or half as much damage on a successful one.", "spindle of fate" : [ ">>Battle Foreknowledge<<. When you roll initiative, you can expend 1 charge to add or subtract your proficiency bonus from the total roll.", ">>Doom Foretold<<. As an action, you can expend 2 charges to target a creature within 30 feet of yourself and invoke that creature's doom. While the target is on the same plane of existence as you are, you can sense the direction to its location, and you know the direction of its movement if it's in motion. Additionally, once per turn when you deal damage to the doomed creature, you can roll 1d6 and add the number rolled to the damage roll. These benefits persist for 1 hour or until you target another creature with this effect.", ">>Twist of Fate<<. When a creature within 60 feet of you makes a saving throw or an attack roll, you can use your reaction to expend 3 charges and alter the outcome, turning a failed saving throw into a successful one, a missed attack roll into a hit, or vice versa." ], "starshot crossbow" : [ "This crossbow is crafted from blackened wood, and its limbs bear pearl inlays depicting constellations. You ignore the loading property with this crossbow. If you load no ammunition in the weapon, it produces its own, automatically creating one piece of magic ammunition when you make a ranged attack with it. The ammunition created by the weapon vanishes the instant after it hits or misses a target. The crossbow has 3 charges and regains 1d3 expended charges daily at dawn.", ">>Constellations<<. The crossbow is decorated with three constellations. As a bonus action, you can tap one of the constellations to invoke it, expending 1 charge and producing one of the following effects:", " \u2022 >>Balance<<. The next time you hit a creature with a ranged attack roll using this crossbow before the end of your next turn, you or another creature of your choice within 30 feet of you can regain hit points equal to 1d8 plus your proficiency bonus.", " \u2022 >>Flames<<. Until the end of your next turn, when you hit a creature with a ranged attack roll using this crossbow, the attack deals an additional 2d8 fire damage.", " \u2022 >>Rogue<<. Until the end of your next turn, you have the invisible condition, and anything you are wearing or carrying is also invisible." ], "deck of miscellany" : [ "Playing Card\t\tItem(s)", " [3\u2666] Three of diamonds \tWooden abacus", " [4\u2666] Four of diamonds \tFour vials of perfume", " [5\u2666] Five of diamonds \t5 days' worth of rations", " [6\u2666] Six of diamonds\t\tIron pot", " [7\u2666] Seven of diamonds \tDisguise kit", " [8\u2666] Eight of diamonds \tWindow (up to 5 feet wide and 5 feet high), which you can place on a vertical surface up to 5 feet thick and which allows you to look through the surface", " [9\u2666] Nine of diamonds \tManacles", "[10\u2666] Ten of diamonds \tTen sheets of parchment", " [3\u2665] Three of hearts\t\tThree daggers", " [4\u2665] Four of hearts\t\tFour flasks of oil", " [5\u2665] Five of hearts\t\tFive silk robes", " [6\u2665] Six of hearts\t\tForgery kit", " [7\u2665] Seven of hearts\t\tQuarterstaff", " [8\u2665] Eight of hearts\t\tFishing tackle", " [9\u2665] Nine of hearts\t\tLeather pouch containing 18 gp", "[10\u2665] Ten of hearts\t\t10 crossbow bolt", " [3\u2663] Three of clubs\t\tThree books, written in Common, about random historical events", " [4\u2663] Four of clubs\t\tCanvas tent", " [5\u2663] Five of clubs\t\t50 feet of coiled silk rope", " [6\u2663] Six of clubs\t\tTwo crowbars", " [7\u2663] Seven of clubs\t\tHealer's kit", " [8\u2663] Eight of clubs\t\tEight gems worth 5 gp each", " [9\u2663] Nine of clubs\t\tLamp", "[10\u2663] Ten of clubs\t\t10 feet of iron chain", " [3\u2660] Three of spades\t\tThree spears", " [4\u2660] Four of spades\t\tSteel mirror", " [5\u2660] Five of spades\t\t15-foot wooden pole", " [6\u2660] Six of spades\t\tBurlap sack", " [7\u2660] Seven of spades\t\tTwo sets of fine clothes", " [8\u2660] Eight of spades\t\tShovel", " [9\u2660] Nine of spades\t\tLight hammer", "[10\u2660] Ten of spades\t\tTen arrows" ], "deck of many more things" : { features : [ "Like the Deck of Many Things, the Deck of Many More Things manifests differently on various worlds. While it can include fewer or different cards, it frequently appears with a Deck of Many Things as part of a combined deck of sixty-six illuminated cards. The combined deck is usually protected by a box or pouch. The forty-four cards of the Deck of Many More Things bear similar imagery to those in the Deck of Many Things and have potent magical effects, which are detailed later in this description. Notably, cards from the Deck of Many More Things are more likely to be beneficial, though about a third of them are still dangerous.", "Before you draw a card, you must declare how many cards you intend to draw and then draw them randomly. Unless a card allows you to draw additional cards, any cards drawn exceeding this number have no effect.", "As soon as you draw a card, its magic takes effect. You must draw each card you declared no more than 1 hour after the previous draw. Unless a card states otherwise, if you fail to draw the chosen number, the remaining number of cards fly from the deck and take effect simultaneously.", "Unless it is the Fool or the Jester card, a drawn card immediately takes effect, fades from existence, and reappears in the deck, making it possible to draw the same card multiple times.", "The DM can use the physical cards provided in The Deck of Many Things card set to build a combined Deck of Many Things and Deck of Many More Things, including whichever cards they desire. Alternatively, roll on the Deck of Many More Things table below to randomly determine what cards are drawn.", "\n1d100\tCard"+ "\t\t1d100\tCard", "01\tAberration"+ "\t\t 34\tMine", "02\tBalance*"+ "\t\t 35\tMonstrosity", "03\tBeast"+ "\t\t 36\tMoon*", "04\tBook"+ "\t\t 37\tOoze", "05\tBridge"+ "\t\t 38\tPath", "06\tCampfire"+ "\t\t 39\tPit", "07\tCavern"+ "\t\t 40\tPlant", "08\tCelestial"+ "\t\t 41\tPriest", "09\tComet*"+ "\t\t 42\tPrisoner", "10\tConstruct"+ "\t\t 43\tPuzzle*", "11\tCorpse"+ "\t\t 44\tRing", "12\tCrossroads"+ "\t\t 45\tRogue*", "13\tDonjon*"+ "\t\t 46\tRuin*", "14\tDoor"+ "\t\t 47\tSage*", "15\tDragon"+ "\t\t 48\tShield", "16\tElemental"+ "\t\t 49\tShip", "17\tEuryale*"+ "\t\t 50\tSkull*", "18\tExpert"+ "\t\t 51\tStaff", "19\tFates*"+ "\t\t 52\tStairway", "20\tFey"+ "\t\t 53\tStar*", "21\tFiend"+ "\t\t 54\tStatue", "22\tFlames*"+ "\t\t 55\tSun*", "23\tFool*"+ "\t\t 56\tTalons*", "24\tGem*"+ "\t\t 57\tTavern", "25\tGiant"+ "\t\t 58\tTemple", "26\tHumanoid"+ "\t\t 59\tThrone*", "27\tJester*"+ "\t\t 60\tTomb", "28\tKey*"+ "\t\t 61\tTower", "29\tKnight*"+ "\t\t 62\tTree", "30\tLance"+ "\t\t 63\tUndead", "31\tMage"+ "\t\t 64\tVoid*", "32\tMap"+ "\t\t 65\tWarrior", "33\tMaze"+ "\t\t 66\tWell", "67-00\tRoll again\n", "* Found in the Deck of Many Things as depicted in the Dungeon Master's Guide" ], cards : [ ">>Aberration<<. You gain telepathy within a range of 90 feet.", ">>Beast<<. You immediately transform into a random Beast with a CR of 5 or lower. Your game statistics—including your ability scores, hit points, and possible actions—are replaced by the Beast's game statistics, and any nonmagical equipment you're wearing or carrying melds into your new form and can't be used. Any magic items you're carrying drop in an unoccupied space within 5 feet of your new form."+ "\n You remain transformed in this way for 2d12 days; nothing can alter your form while you're under the effects of this card, but the Wish spell can end the transformation early. When you revert to your normal form, you return to the same state you were in when you initially transformed.", ">>Book<<. You gain the ability to speak, read, and write 1d6 + 2 languages of your choice.", ">>Bridge<<. You gain the ability to cast the Time Stop spell 1d3 times. Use your Intelligence, Wisdom, or Charisma as the spellcasting ability (your choice).", ">>Campfire<<. You immediately gain the benefits of finishing a long rest.", ">>Cavern<<. You gain a climbing speed equal to your walking speed. You also gain the ability to move up, down, across vertical surfaces, and along ceilings, while leaving your hands free.", ">>Celestial<<. You sprout a pair of softly luminescent, feathered wings from your back and gain a flying speed of 30 feet.", ">>Construct<<. A homunculus appears in an unoccupied space within 5 feet of you. The appearance of the homunculus is determined by the DM, and the homunculus treats you as its creator.", ">>Corpse<<. You immediately drop to 0 hit points, have the unconscious condition, and must begin making death saving throws. Spells and other magical effects that restore hit points have no effect on you until you are stabilized. If you fail three death saving throws, you die and can be resurrected only by the Wish spell.", ">>Crossroads<<. Roll a d20. If the roll is even, you age 1d10 years. If the roll is odd, you become younger by 1d10 years, to a minimum of 1 year. This effect can be undone only by the Wish spell, divine intervention, or similar magic.", ">>Door<<. You gain the ability to cast the Gate spell 1d4 times, requiring no material components. Use your Intelligence, Wisdom, or Charisma as the spellcasting ability (your choice).", ">>Dragon<<. A dragon egg appears at your feet and immediately hatches into a dragon wyrmling. The type of dragon is chosen by the DM. The wyrmling views you as its parent and is staunchly loyal to you and your allies.", ">>Elemental<<. You become immune to one of the following damage types (choose immediately upon drawing this card): acid, cold, fire, lightning, or thunder.", ">>Expert<<. Your Dexterity score increases by 2, to a maximum of 22.", ">>Fey<<. A fey crossing opens into the Feywild, and you're immediately pulled through it, disappearing in a flash of rainbow-colored light. You draw no more cards."+ "\n The fey crossing appears as a shimmering fractal of light above the deck, and it remains open for 1 minute after the card is drawn. The precise location in the Feywild to which the fey crossing leads is determined by the DM.", ">>Fiend<<. A powerful Fiend appears in a nearby unoccupied space and offers you a deal.[[ The precise nature of this deal is up to the DM, but usually the Fiend offers some material reward in exchange for you and your allies completing a task for the Fiend.]] The Fiend is indifferent to you and can be bargained with; it keeps its side of any bargain it makes, though it might twist the wording of any agreement to suit its purposes. If attacked, or if negotiations fail and you refuse the Fiend's offer, it returns to its home plane.", ">>Giant<<. You immediately grow 2d10 inches in height, and your hit point maximum and current hit points both increase by 20.", ">>Humanoid<<. You can immediately choose to stop drawing from the deck, regardless of how many cards you initially declared.", ">>Lance<<. All your ability scores increase by 1, to a maximum of 20.", ">>Mage<<. Your Intelligence score increases by 2, to a maximum of 22.", ">>Map<<. At any time you choose within 1 year of drawing this card, you can mentally name or describe an object or individual that is familiar to you. You immediately know the location of the object or individual, as well as the distance between you and the object or individual, even if the object or individual is on a different plane of existence. If you named an individual, you know if they are alive and any conditions they have. If you named an object, you know if it is broken or not. If you named a magic item that has charges, you know how many charges it has remaining.", ">>Maze<<. You gain 1d3 levels of exhaustion.", ">>Mine<<. A pile of 2d6 gems (each worth 5,000 gp) and 1d10 chunks of precious ore (each worth 2,500 gp) appears at your feet." ], cards2 : [ ">>Monstrosity<<. A Large or larger Monstrosity with a challenge rating of 10 or less (chosen by the DM) appears in an unoccupied space within 15 feet of you. The creature is hostile toward you and attacks immediately. The creature disappears when it is killed or when you are reduced to 0 hit points. If there isn't enough space for a Large or larger creature to appear, this card has no effect.", ">>Ooze<<. A gelatinous cube immediately appears in your space and engulfs you. The gelatinous cube is hostile and remains until it is destroyed. If there isn't enough space for the gelatinous cube to appear, this card has no effect.", ">>Path<<. Your walking speed increases by 10 feet.", ">>Pit<<. A pit opens beneath you. You plummet 3d6 \xD7 10 feet, take damage from the fall, and have the prone condition.", ">>Plant<<. You gain the ability to cast Speak with Plants without using a spell slot; you must finish a long rest before you can cast it this way again. If you have spell slots of 3rd level or higher, you can cast this spell using them. Use your Intelligence, Wisdom, or Charisma as the spellcasting ability (your choice).", ">>Priest<<. Your Wisdom score increases by 2, to a maximum of 22.", ">>Prisoner<<. Glowing chains made of magical force appear and wrap around you. You have the restrained condition until the chains are destroyed or you are freed. While you have this condition, you can't cast spells, and any magic items you're wearing or carrying have their properties suppressed. You draw no more cards. The chains are immune to damage and can't be dispelled using the Dispel Magic spell or similar magic. However, a Disintegrate spell destroys the chains instantly, freeing you. Another creature can also free you by succeeding on a DC 30 Dexterity check using thieves' tools.", ">>Ring<<. A rare or rarer magic ring appears on your finger. If you have the attunement slots available, you're automatically attuned to the ring when it appears. The DM chooses the ring.", ">>Shield<<. A rare or rarer suit of magic armor that you are proficient with appears in your hands. The DM chooses the armor. If you lack proficiency with any armor, your base AC instead now equals 12 + your Dexterity modifier while you aren't wearing armor.", ">>Ship<<. You gain proficiency in three skills chosen by the DM.", ">>Staff<<. A rare or rarer magic rod, staff, or wand appears in your hands. The DM chooses the item.", ">>Stairway<<. You can choose to either decrease your number of declared draws by two or receive a rare or rarer wondrous item, which appears in your hands. The DM chooses the item.", ">>Statue<<. You immediately have the petrified condition as your body is transformed into marble. The petrification lasts until you are freed with the Greater Restoration spell or similar magic.", ">>Tavern<<. Your Charisma score increases by 2 to a maximum of 22.", ">>Temple<<. A deity or entity of similar power becomes bound to aid you. At any point in time between drawing the card and when you die, you can use your action to call on this entity for divine intervention, and the entity is bound to answer. The parameters and nature of this intervention are chosen by the DM. If you die without having used this intervention, the deity fulfills its obligation by casting the Resurrection spell on you. Once the entity has answered your call for divine intervention or resurrected you, the entity is no longer bound to aid you.", ">>Tomb<<. At any time you choose within 1 year of drawing this card, you can cast the True Resurrection spell once without expending a spell slot or requiring material components. Use your Intelligence, Wisdom, or Charisma as the spellcasting ability (your choice).", ">>Tower<<. Draw two additional cards beyond your declared number of draws. The magic of these cards doesn't immediately take effect; instead, choose one of the two additional cards to keep, returning the other to the deck. The magic of the card you keep takes effect immediately thereafter.", ">>Tree<<. Your skin immediately becomes rough, like tree bark. Your base AC now equals 15 + your Dexterity modifier while you aren't wearing armor, but you have vulnerability to fire damage. This transformation can be undone only by the Wish spell, divine intervention, or similar magic.", ">>Undead<<. Somewhere on the Material Plane, a revenant rises. This revenant blames you for its existence and relentlessly hunts you to exact its revenge. The revenant exists until either 1 year passes, the revenant kills you, or you use a Wish spell to banish it permanently to the afterlife.", ">>Warrior<<. Your Strength score increases by 2 to a maximum of 22.", ">>Well<<. You learn three cantrips of your choice from any spell list." ] }, "deck of wild cards" : [ "This deck of heavy vellum cards hums with the magic of the Elemental Chaos.", "The magic of the deck functions only if cards are drawn at random (a deck of real-world playing cards can simulate the deck). As an action, you can draw a random card from this deck and throw it to make a ranged spell attack, using Dexterity for the attack roll. The card has a range of 30 feet. On a hit, it deals 1d4 slashing damage and imposes a magical effect determined by its suit, as detailed in the table below. The card immediately returns to the deck after it hits or misses a target.\n", "d4\tSuit\tEffect", " 1\t\u2663 (Rods)\tThe card explodes in a burst of fire. The target and each creature within 5 feet of it must succeed on a DC 15 Dexterity saving throw or take 2d8 fire damage.", " 2\t\u2666 (Coins)\tThe card shoots streaks of lightning. The target must make a DC 15 Dexterity saving throw. On a failed save, the target has the blinded condition until the end of your next turn, and each creature within 10 feet of the target takes 1d6 lightning damage.", " 3\t\u2665 (Cups)\tThe card covers the target in a thick layer of ice. The target takes 1d10 cold damage and must succeed on a DC 15 Constitution saving throw or have the restrained condition until the end of your next turn.", " 4\t\u2660 (Swords)\tThe card unleashes a sharp, concussive blast. The target and each creature within 5 feet of it take 1d6 force damage and must succeed on a DC 15 Strength saving throw or have the prone condition." ], "deck of wonder" : { features : [ "Created in the image of the Deck of Many Things, this deck of ivory or vellum cards bestows an assortment of minor benefits and penalties on those who draw from it. Most (75 percent) of these decks have only thirteen cards, but the rest have twenty-two.", "Before you draw a card, you must declare how many cards you intend to draw, then draw them randomly. Any additional cards drawn have no effect. Unless a card states otherwise, as soon as you draw a card from the deck, its magic takes effect. You must draw each card you declared no more than 1 hour after the previous draw. If you fail to draw the chosen number, the remaining number of cards fly from the deck and take effect simultaneously.", "Unless it is the Mystery card, a drawn card immediately takes effect, fades from existence, and reappears in the deck, making it possible to draw the same card multiple times.", "You can use an altered deck of playing cards to simulate the deck, as shown in the table below.", "\n1d13\t1d22\tPlaying Card\t\tCard", "\t 1\t[A\u2666] Ace of diamonds\t\tChancellor*", "1\t 2\t[K\u2666] King of diamonds\t\tDay", "2\t 3\t[Q\u2666] Queen of diamonds \tNight", "3\t 4\t[J\u2666] Jack of diamonds\t\tDawn", "\t 5\t[2\u2666] Two of diamonds\t\tDusk*", "\t 6\t[A\u2665] Ace of hearts\t\tDestiny*", "4\t 7\t[K\u2665] King of hearts\t\tCrown", "5\t 8\t[Q\u2665] Queen of hearts\t\tLock", "6\t 9\t[J\u2665] Jack of hearts\t\tChampion", "\t 10\t[2\u2665] Two of hearts\t\tCoin*", "\t 11\t[A\u2663] Ace of clubs\t\tVulture*", "7\t 12\t[K\u2663] King of clubs\t\tChaos", "8\t 13\t[Q\u2663] Queen of clubs\t\tOrder", "9\t 14\t[J\u2663] Jack of clubs\t\tBeginning", "\t 15\t[2\u2663] Two of clubs\t\tMystery*", "\t 16\t[A\u2660] Ace of spades\t\tIsolation*", "10\t 17\t[K\u2660] King of spades\t\tEnd", "11\t 18\t[Q\u2660] Queen of spades\t\tMonster", "12\t 19\t[J\u2660] Jack of spades\t\tKnife", "\t 20\t[2\u2660] Two of spades\t\tJustice*", "\t 21\tJoker (with TM)\t\tStudent*", "13\t 22\tJoker (no TM)\t\tMischief\n", "* Found only in a deck with twenty-two cards" ], cards : [ ">>Beginning<<. Your hit point maximum and current hit points increase by 2d10. Your hit point maximum remains increased in this way for the next 8 hours.", ">>Champion<<. You gain a +1 bonus to weapon attack and damage rolls. This bonus lasts for 8 hours.", ">>Chancellor<<. Within 8 hours of drawing this card, you can cast Augury once as an action, requiring no material components. Use your Intelligence, Wisdom, or Charisma as the spellcasting ability (your choice).", ">>Chaos<<. You gain resistance to one of the following damage types (chosen by the DM): acid, cold, fire, lightning, or thunder. This resistance lasts for 1d12 days.", ">>Coin<<. Five pieces of jewelry, each worth 100 gp, or ten gemstones, each worth 50 gp, appear at your feet.", ">>Crown<<. You learn the Friends cantrip. Use your Intelligence, Wisdom, or Charisma as the spellcasting ability (your choice). If you already know this cantrip, the card has no effect.", ">>Dawn<<. This card invigorates you. For the next 8 hours, you can add your proficiency bonus to your initiative rolls.", ">>Day<<. You gain a +1 bonus to saving throws. This benefit lasts until you finish a long rest.", ">>Destiny<<. This card protects you against an untimely demise. The first time after drawing this card that you would drop to 0 hit points from taking damage, you instead drop to 1 hit point.", ">>Dusk<<. This card supernaturally saps your energy. You have disadvantage on initiative rolls. This effect lasts until you finish a long rest, but it can be ended early by a Remove Curse spell or similar magic.", ">>End<<. This card is an omen of death. You take 2d10 necrotic damage, and your hit point maximum is reduced by an amount equal to the damage taken. This effect can't reduce your hit point maximum below 10 hit points. This reduction lasts until you finish a long rest, but it can be ended early by a Remove Curse spell or similar magic.", ">>Isolation<<. You disappear, along with anything you are wearing or carrying, and become trapped in a harmless extradimensional space for 1d4 minutes. You draw no more cards. You then reappear in the space you left or the nearest unoccupied space. When you reappear, you must succeed on a DC 11 Constitution saving throw or have the poisoned condition for 1 hour as your body reels from the extradimensional travel.", ">>Justice<<. You momentarily gain the ability to balance the scales of fate. For the next 8 hours, whenever you or a creature within 60 feet of you is about to roll a d20 with advantage or disadvantage, you can use your reaction to prevent the roll from being affected by advantage or disadvantage.", ">>Knife<<. An uncommon magic weapon you're proficient with appears in your hands. The DM chooses the weapon.", ">>Lock<<. You gain the ability to cast Knock 1d3 times. Use your Intelligence, Wisdom, or Charisma as the spellcasting ability (your choice).", ">>Mischief<<. You receive an uncommon wondrous item (chosen by the DM), or you can draw two additional cards beyond your declared draws.", ">>Monster<<. This card's monstrous visage curses you. While cursed in this way, whenever you make a saving throw, you must roll 1d4 and subtract the number rolled from the total. The curse lasts until you finish a long rest, but it can be ended early with a Remove Curse spell or similar magic.", ">>Mystery<<. You have disadvantage on Intelligence saving throws for 1 hour. Discard this card and draw from the deck again; together, the two draws count as one of your declared draws.", ">>Night<<. You gain darkvision within a range of 300 feet. This darkvision lasts for 8 hours.", ">>Order<<. You gain resistance to one of the following damage types (chosen by the DM): force, necrotic, poison, psychic, or radiant. This resistance lasts for 1d12 days.", ">>Student<<. You gain proficiency in Wisdom saving throws. If you already have this proficiency, you instead gain proficiency in Intelligence or Charisma saving throws (your choice).", ">>Vulture<<. One nonmagical item or piece of equipment in your possession (chosen by the DM) disappears. The item remains nearby but concealed for a short time, so it can be found with a successful DC 15 Wisdom (Perception) check. If the item isn't recovered within 1 hour, it disappears forever." ] } } MagicItemsList["antimagic armor"] = { name : "Antimagic Armor", nameTest : /antimagic.*armou?r/i, source : [["BoMT", 65]], // Chapter 9: Knight type : "armor (light, medium, or heavy)", rarity : "very rare", attunement : true, description : "While wearing this armor, once per dawn I can cast Antimagic Field, requiring no spell components. In addition, as a reaction once per dawn, I can give myself advantage on a saving throw I make against a spell.", descriptionFull : "While wearing this armor, you can use your reaction to give yourself advantage on a saving throw you make against a spell. Once this property is used, it can't be used again until the next dawn."+ "\n In addition, while you wear this armor, you can use it to cast Antimagic Field, requiring no spell components. Once this property is used, it can't be used again until the next dawn.", chooseGear : { type : "armor", prefixOrSuffix : ["between", "Antimagic", "Armor"], descriptionChange : ["prefix", "armor"], itemName1stPage : ["suffix", "Antimagic"] }, action : [["reaction", "Adv. save vs. spell (1\xD7 per dawn)"]], spellcastingBonus : [{ name : "Once per dawn", spells : ["antimagic field"], selection : ["antimagic field"], firstCol : "oncelr" }], extraLimitedFeatures : [{ name : "Adv. save vs. spell (Antimagic Armor)", usages : 1, recovery : "dawn" }, { name : "Antimagic Field (Antimagic Armor)", usages : 1, recovery : "dawn" }], spellChanges : { "antimagic field" : { components : "", compMaterial : "", changes : "While wearing the armor, it requires no components to cast Antimagic Field." } } }; MagicItemsList["armor of fungal spores"] = { name : "Armor of Fungal Spores", nameTest : "of Fungal Spores", source : [["BoMT", 65]], // Chapter 9: Knight type : "armor (medium)", rarity : "uncommon", description : "As a bonus action once per dawn while wearing this armor, I can make it emit poisonous spores. These spores fill a 10-ft radius sphere centered on myself. Each creature in that area must make a DC 15 Constitution save or be poisoned until the end of my next turn.", descriptionFull : "While wearing this armor, you can take a bonus action to make the armor emit poisonous spores, which fill a 10-foot-radius sphere centered on yourself. Each creature in that area must succeed on a DC 15 Constitution saving throw or have the poisoned condition until the end of your next turn. Once this property is used, it can't be used again until the next dawn.", chooseGear : { type : "armor", prefixOrSuffix : "prefix", descriptionChange : ["prefix", "armor"], excludeCheck : function (inObjKey, inObj) { return !/medium/i.test(inObj.type); } }, action : [["bonus action", ""]], usages : 1, recovery : "dawn" }; MagicItemsList["armor of the fallen"] = { name : "Armor of the Fallen", nameTest : "of the Fallen", source : [["BoMT", 65]], // Chapter 9: Knight type : "armor (medium or heavy)", rarity : "uncommon", attunement : true, description : "While wearing this armor, I can use it to cast either Animate Dead or Speak with Dead. Once the armor has cast a spell in this way, it can't cast either spell until the next dawn. My soul keeps this armor together. If I die while attuned to the armor, the armor is destroyed.", descriptionFull : "While wearing this armor, you can use it to cast either Speak with Dead or Animate Dead. Once the armor has cast a spell in this way, it can't cast either spell until the next dawn."+ "\n Your soul keeps this armor together. If you die while you are attuned to the armor, the armor is destroyed.", chooseGear : { type : "armor", prefixOrSuffix : "prefix", descriptionChange : ["prefix", "armor"], excludeCheck : function (inObjKey, inObj) { return !/heavy|medium/i.test(inObj.type); } }, spellcastingBonus : [{ name : "either or", spells : ["animate dead", "speak with dead"], selection : ["animate dead", "speak with dead"], firstCol : "SP", times : 2 }], usages : 1, recovery : "dawn" }; MagicItemsList["armor of weightlessness"] = { name : "Armor of Weightlessness", nameTest : "of Weightlessness", source : [["BoMT", 65]], // Chapter 9: Knight type : "armor (light, medium, or heavy)", rarity : "uncommon", attunement : true, description : "This armor has 5 charges, regaining 1d4+1 expended charges daily at dawn. As a bonus action while wearing it, I can expend 1 or more charges to cast Jump (1 charge) or Levitate (2 charges) on myself.", descriptionFull : "This armor has 5 charges. While you wear it, you can use a bonus action to expend 1 or more charges to cast one of the following spells from the armor, targeting yourself: Jump (1 charge) or Levitate (2 charges)."+ "\n This armor regains 1d4 + 1 expended charges daily at dawn.", chooseGear : { type : "armor", prefixOrSuffix : "prefix", descriptionChange : ["prefix", "armor"] }, usages : 5, recovery : "dawn", additional : "regains 1d4+1", spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "1 charge (self only)", spells : ["jump"], selection : ["jump"], firstCol : 1 }, { name : "2 charges (self only)", spells : ["levitate"], selection : ["levitate"], firstCol : 2 }], spellChanges : { "jump" : { name : "Jump (self only)", time : "1 bns", range : "Self", description : "My jump distance is tripled for the duration", changes : "Using the Armor of Weightlessness, I can cast Jump as a bonus action, but only on myself." }, "levitate" : { name : "Levitate (self only)", time : "1 bns", range : "Self", save : "", description : "I float and move up vertically up to 20 ft; As part of my move each round, I can move up/down 20 ft", changes : "Using the Armor of Weightlessness, I can cast Levitate as a bonus action, but only on myself." } } }; MagicItemsList["baleful talon"] = { name : "Baleful Talon", source : [["BoMT", 34]], // Chapter 5: Gem type : "weapon (dagger)", rarity : "very rare", description : "I gain a +1 bonus to attack and damage rolls made with this hooked, obsidian dagger. When I hit a creature with it and roll a 19 or 20 to hit, the dagger flares with sickly light and deals +6d6 necrotic damage. The creature can make a DC 15 Con save to halve the damage. It turns to dust if this reduces its HP to 0.", descriptionFull : "You gain a +1 bonus to attack and damage rolls made with this hooked, obsidian dagger."+ "\n When you hit a creature with this magic weapon and roll a 19 or 20 on the attack roll, the creature must make a DC 15 Constitution saving throw as the dagger flares with sickly light. The creature takes 6d6 necrotic damage on a failed save, or half as much on a successful one. If this damage reduces the creature to 0 hit points, the creature disintegrates into dust.", weight : 1, weaponOptions : [{ baseWeapon : "dagger", regExpSearch : /^(?=.*baleful)(?=.*talon).*$/i, name : "Baleful Talon", source : [["BoMT", 34]], description : "Finesse, light, thrown; Roll of 19-20: +6d6 necrotic damage, DC 15 Con save halves", modifiers : [1, 1], selectNow : true }] }; MagicItemsList["blasted goggles"] = { name : "Blasted Goggles", source : [["BoMT", 174]], // Chapter 20: Flames type : "wondrous item", rarity : "uncommon", attunement : true, description : "These tinker's goggles have 3 charges, regaining 1d3 daily at dawn. As an action, I can use 1 charge to shoot a beam of light: a creature I can see within 120 ft must make a DC 15 Dexterity save or take 3d6 fire damage. If this is a natural 20, I'm blinded for 24 hours. Cursed: I can't remove these or end attunement.", descriptionFull : "These tinker's goggles have 3 charges. As an action, you can expend 1 charge to shoot a beam of fiery light from the goggles at a creature you can see within 120 feet of yourself. The target must succeed on a DC 15 Dexterity saving throw or take 3d6 fire damage. The goggles regain 1d3 expended charges daily at dawn."+ "\n " + toUni("Cursed") + ". The goggles are cursed, and becoming attuned to them extends the curse to you. You can't remove the goggles or end your attunement to them until you are targeted by a Remove Curse spell or similar magic."+ "\n Whenever you use the goggles' fiery beam and the target rolls a 20 on the d20 for the saving throw, the goggles expose you to a flash of violent bright light. As a result, you have the blinded condition for 24 hours.", usages : 3, recovery : "dawn", additional : "regains 1d3" }; MagicItemsList["bloodrage greataxe"] = { name : "Bloodrage Greataxe", source : [["BoMT", 66]], // Chapter 9: Knight type : "weapon (greataxe)", rarity : "uncommon", description : "I gain a +2 bonus to attack and damage rolls made with this magic greataxe while I have half my hit points or fewer.", descriptionFull : "You gain a +2 bonus to attack and damage rolls made with this magic greataxe while you have half your hit points or fewer.", weight : 7, weaponOptions : [{ baseWeapon : "greataxe", regExpSearch : /^(?=.*bloodrage)(?=.*(great|heavy|weida))(?=.*(axe|\bono|\bfu|masakari)s?\b).*$/i, name : "Bloodrage Greataxe", source : [["BoMT", 66]], description : "Heavy, two-handed; If I'm \u2264 \u00BD HP: +2 to hit \u0026 damage", selectNow : true }] }; MagicItemsList["bloodseeker ammunition"] = { name : "Bloodseeker Ammunition", nameTest : "Bloodseeker", source : [["BoMT", 66]], // Chapter 9: Knight type : "weapon (any ammunition)", rarity : "very rare", description : "Ranged attack rolls made with this magic ammunition have advantage against any creature doesn't have all its hit points.", descriptionFull : "Ranged attack rolls made with this ammunition have advantage against any creature doesn't have all its hit points.", allowDuplicates : true, chooseGear : { type : "ammo", prefixOrSuffix : "suffix", descriptionChange : ["replace", "ammunition"], excludeCheck : function (inObjKey, inObj) { return /vials|flasks/i.test(inObj.icon); } } }; MagicItemsList["boomerang shield"] = { name : "Boomerang Shield", source : [["BoMT", 66]], // Chapter 9: Knight type : "shield", rarity : "uncommon", attunement : true, description : "I can make a ranged weapon attack with this magic shield. It reappears in my hand the instant after it hits or misses a target. It has a range of 20 ft and a long range of 60 ft, uses Strength or Dexterity (my choice), I add my proficiency bonus if I'm proficient with shields, and it deals 1d6 slashing damage.", descriptionFull : "You can make a ranged weapon attack with this magic shield. It has a normal range of 20 feet and a long range of 60 feet, and it uses your Strength or Dexterity for the attack roll (your choice). If you're proficient with shields, you are proficient with attacks made using this shield. On a hit, it deals 1d6 slashing damage. If you throw the shield, it reappears in your hand the instant after it hits or misses a target.", weight : 6, shieldAdd : "Boomerang Shield", weaponOptions : [{ regExpSearch : /^(?=.*boomerang)(?=.*shield).*$/i, name : "Boomerang Shield", source : [["BoMT", 66]], ability : 1, type : "Shield", damage : [1, 6, "slashing"], range : "20/60 ft", weight : 6, description : "Finesse, thrown; Reappears instantly", // Not actually finesse, but easier to code this way and shouldn't cause any issues abilitytodamage : true, selectNow : true }], calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.name === "Boomerang Shield" && tDoc.getField("Proficiency Shields").isBoxChecked(0)) { fields.Proficiency = true; } } ] } }; MagicItemsList["bow of conflagration"] = { name : "Bow of Conflagration", nameTest : "of Conflagration", source : [["BoMT", 66]], // Chapter 9: Knight type : "weapon (any bow)", rarity : "rare", attunement : true, description : "Ammunition fired from this bow blazes brightly. When I hit with an attack roll using this bow, the target takes an extra 1d6 fire damage. If the target is a flammable, nonmagical object, it catches fire, taking 1d6 fire damage at the start of each of my turns until a creature uses an action to extinguish the flames.", descriptionFull : "Ammunition fired from this bow blazes brightly. When you hit with an attack roll using this bow, the target takes an extra 1d6 fire damage. If the target is a flammable, nonmagical object, it catches fire, taking 1d6 fire damage at the start of each of your turns until a creature uses an action to extinguish the flames.", chooseGear : { type : "weapon", prefixOrSuffix : "prefix", descriptionChange : ["replace", "bow"], excludeCheck : function (inObjKey, inObj) { var testRegex = /bow/i; return !testRegex.test(inObjKey) && (!inObj.baseWeapon || !testRegex.test(inObj.baseWeapon)); } }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && v.isRangedWeapon && /bow/i.test(v.baseWeaponName) && /conflagration/i.test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + '+1d6 fire damage; ignites target object'; } }, 'If I include the word "Conflagration" in the name of a bow, it will be treated as the magic weapon Bow of Conflagration. The bow deals an extra 1d6 fire damage. If I target and hit a flammable, nonmagical object, it catches fire, taking 1d6 fire damage at the start of each of my turns until a creature uses an action to extinguish the flames.' ] } }; MagicItemsList["bow of melodies"] = { name : "Bow of Melodies", nameTest : "of Melodies", source : [["BoMT", 66]], // Chapter 9: Knight type : "weapon (any bow)", rarity : "very rare", attunement : true, description : "This bow has multiple strings. I can use these to play one of two melodies on each attack, imbuing it with magic. Melody of Precision: If I'm proficient with Performance, I add +1 (+2 if expertise) to the attack roll. Melody of Reverberation: the attack deals my Charisma modifier in extra thunder damage.", descriptionFull : "This bow has multiple strings and resembles a lyre or small harp. By strumming the strings while setting an arrow to the bow, you imbue the arrow with magic."+ "\n You can play one of the following melodies when you use the bow to make a ranged weapon attack. You must choose to do so before you make the attack roll, and you can play only one melody per attack."+ "\n " + toUni("Melody of Precision") + ". If you're proficient in Performance, you gain a +1 bonus to the attack roll. If you have expertise in Performance, you gain a +2 bonus instead."+ "\n " + toUni("Melody of Reverberation") + ". The melody you strum echoes loudly. On a hit, the target takes extra thunder damage equal to your Charisma modifier.", chooseGear : { type : "weapon", prefixOrSuffix : "prefix", descriptionChange : ["replace", "bow"], excludeCheck : function (inObjKey, inObj) { var testRegex = /bow/i; return !testRegex.test(inObjKey) && (!inObj.baseWeapon || !testRegex.test(inObj.baseWeapon)); } }, calcChanges : { atkAdd : [ function (fields, v) { var chaMod = Number(What('Cha Mod')); // Only add a description if positive Cha Mod and Melody of Precision is not an option or Reverberation is part of the name if (!v.theWea.isMagicWeapon && chaMod > 0 && v.isRangedWeapon && /bow/i.test(v.baseWeaponName) && /^(?=.*melod(ies|y))(?!.*precision).*$/i.test(v.WeaponTextName) && (/reverberation/i.test(v.WeaponTextName) || !hasSkillProf("Performance")[0])) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + '+' + chaMod + ' (Cha mod) thunder damage'; } }, 'If I include the word "Melody" or "Melodies" in the name of a bow, it will be treated as the magic weapon Bow of Melodies. If I also include either "Precision" or "Reverberation" in the name, the respective bonus will be added. if I include neither of those in the name, the bonus will be determined automatically, the Melody of Precision if proficient with Performance (+1 or +2 bonus to hit) or Melody of Reverberation otherwise (+Cha mod thunder damage).' ], atkCalc : [ function (fields, v, output) { // Add to hit bonus if name doesn't include Reverberation. Will be zero if not proficient in Performance if (!v.theWea.isMagicWeapon && v.isRangedWeapon && /bow/i.test(v.baseWeaponName) && /^(?=.*melod(ies|y))(?!.*reverberation).*$/i.test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; var perfProf = hasSkillProf("Performance"); output.extraHit += perfProf[1] ? 2 : perfProf[0] ? 1 : 0; } }, '' ] } }; MagicItemsList["breastplate of balance"] = { name : "Breastplate of Balance", source : [["BoMT", 34]], // Chapter 5: Gem type : "armor (breastplate)", rarity : "rare", attunement : true, description : "This burnished copper breastplate with merchant's scales on the chest has 4 charges, regaining 1d4 at dawn. As a reaction when I or another I can see within 60 ft is about to roll a d20 with (dis)advantage, I can use 1 charge to prevent this (dis)advantage. As a bonus action, I can use 2 charges to cast Lesser Restoration.", descriptionFull : "This burnished copper breastplate looks as if it were made of interlocking gears. Merchant's scales are emblazoned across the chest."+ "\n The armor has 4 charges. You can use the charges in the following ways while wearing the armor:"+ "\n " + toUni("Equalize") + ". When you or a creature you can see within 60 feet of yourself is about to roll a d20 with advantage or disadvantage, you can expend 1 charge and take a reaction to prevent the roll from being affected by advantage or disadvantage."+ "\n " + toUni("Expunge Imbalance") + ". As a bonus action, you can expend 2 charges to cast the Lesser Restoration spell from the armor."+ "\n The armor regains 1d4 expended charges daily at dawn.", weight : 20, action : [["reaction", " (if dis./adv.)"]], usages : 4, recovery : "dawn", additional : "regains 1d4", armorAdd : { select : "Breastplate of Balance", options : ["Breastplate of Balance"] }, spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "2 charges", spells : ["lesser restoration"], selection : ["lesser restoration"], firstCol : 2 }], spellChanges : { "lesser restoration" : { time : "1 bns", changes : "While wearing the armor, I can use 2 of its charges to cast Lesser Restoration as a bonus action." } } }; MagicItemsList["card sharp's deck"] = { name : "Card Sharp's Deck", source : [["BoMT", 40]], // Chapter 6: Rogue type : "wondrous item", rarity : "uncommon", description : 'The cards of this deck shimmer around the edges. As an action, I can throw a card as ranged spell attack using Dexterity. This "Deadly Deal" attack has 120 ft range and deals 1d8 force damage. As an action once per dawn, I can shuffle the deck to cast Spray of Cards at 3rd level with it (save DC 15).', descriptionFull : "The cards of this deck shimmer around the edges. While holding this deck, you can use the following properties:"+ "\n " + toUni("Deadly Deal") + ". As an action, you can use this deck to make a ranged spell attack by throwing a spectral card and using Dexterity for the attack roll. The card has a range of 120 feet and deals 1d8 force damage on a hit."+ "\n " + toUni("Spray of Cards") + ". As an action, you can shuffle the deck and cast the Spray of Cards spell at 3rd level from the deck (spell save DC 15). Once the deck has cast the spell, it can't cast the spell again until the next dawn.", action : [["action", ""]], weaponOptions : [{ regExpSearch : /^(?=.*deadly)(?=.*deal).*$/i, name : "Deadly Deal", source : [["BoMT", 40]], ability : 2, type : "Spell", damage : [1, 8, "force"], range : "120 ft", description : "", abilitytodamage : false, selectNow : true }], usages : 1, recovery : "dawn", additional : "Spray of Cards", spellcastingBonus : [{ name : "Once per dawn", spells : ["spray of cards"], selection : ["spray of cards"], firstCol : "oncelr" }], spellChanges : { "spray of cards" : { description : "All in area 3d10 Force dmg and blinded until their next turn ends; save halves \u0026 not blinded", descriptionShorter : false, changes : "Using Card Sharp's Deck I can cast Spray of Cards at 3rd level once per dawn." } } }; MagicItemsList["clockwork armor"] = { name : "Clockwork Armor", nameTest : /clockwork.*armou?r/i, source : [["BoMT", 67]], // Chapter 9: Knight type : "armor (heavy)", rarity : "very rare", attunement : true, description : "The outside surface and internal joints of this armor whir with interlocking gears, drawing on the magic of the plane of Mechanus. The armor has 4 charges and regains 1d4 used charges daily at dawn. If I make a d20 roll while wearing it, I can expend 1 charge to change the number rolled to a 10.", descriptionFull : "The outside surface and internal joints of this armor whir with interlocking gears, drawing on the orderly magic of the plane of Mechanus."+ "\n The armor has 4 charges. If you make a d20 roll while wearing this armor, you can expend 1 charge to change the number rolled to a 10. The armor regains 1d4 expended charges daily at dawn.", chooseGear : { type : "armor", prefixOrSuffix : ["between", "Clockwork", "Armor"], descriptionChange : ["prefix", "armor"], itemName1stPage : ["suffix", "Clockwork"], excludeCheck : function (inObjKey, inObj) { return !/heavy/i.test(inObj.type); } }, usages : 4, recovery : "dawn", additional : "regains 1d4" }; MagicItemsList["crown of whirling comets"] = { name : "Crown of Whirling Comets", source : [["BoMT", 35]], // Chapter 5: Gem type : "wondrous item", rarity : "very rare", attunement : true, description : "This crown has 6 charges, regaining 1d6 at dawn. As a bonus action, I can use 1 charge to fly my walking speed and hover, for 10 min. I can use 3 charges to cast Ice Storm (DC 16). As an action, I can launch one frigid starlight bolt per charge used, that each deal 2d4 cold damage to a creature I can see within 120 ft.", descriptionLong : "This delicate silver tiara decorated with stellar iconography has gems on the tiara's points that detach and closely orbit my head. It has 6 charges, regaining 1d6 used charges daily at dawn. As a bonus action, I can use 1 charge to gain a flying speed equal to my walking speed and I can hover, for 10 minutes. As an action, I can expend any number of charges to launch one frigid starlight bolt per charge used to a creature I can see within 120 ft. Each bolt automatically hits and deals 2d4 cold damage. Bolts can be used to hit the same or different targets. As an action, I can use 3 charges to cast Ice Storm (save DC 16).", descriptionFull : "This delicate silver tiara is decorated with stellar iconography. While you wear the crown, the gems on the tiara's points detach and closely orbit your head."+ "\n The crown has 6 charges for the following properties, which you can use while wearing the crown:"+ "\n " + toUni("Star Flight") + ". As a bonus action, you can spend 1 charge to gain the power of flight for 10 minutes. For the duration, you gain a flying speed equal to your walking speed, and you can hover. While flying, you glow faintly with starlight."+ "\n " + toUni("Starlight Strike") + ". As an action, you can spend any number of charges to launch bolts of frigid starlight. You launch a number of bolts equal to the number of charges spent, and you can direct the bolts to target one creature or several, so long as all creatures are within 120 feet of you and you can see them. The bolts automatically strike their targets, and each bolt deals 2d4 cold damage."+ "\n " + toUni("Whirling Hail") + ". As an action, you can spend 3 charges and cast the Ice Storm spell (save DC 16)."+ "\n The crown regains 1d6 expended charges daily at dawn.", action : [["bonus action", " (fly)"], ["action", " (bolts)"]], usages : 6, recovery : "dawn", additional : "regains 1d6", fixedDC : 16, spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "3 charges", spells : ["ice storm"], selection : ["ice storm"], firstCol : 3 }] }; MagicItemsList["deck of dimensions"] = { name : "Deck of Dimensions", source : [["BoMT", 40]], // Chapter 6: Rogue type : "wondrous item", rarity : "very rare", attunement : true, description : "This deck has 6 charges, regaining 1d6 used at dawn. As a bonus action, I can use 1 charge to throw a card to an empty spot either within 60 ft and teleport to it, or within 5 ft and teleport to it once in the next 8 hours as an action. I can use 3 charges to cast Arcane Gate, but can't use the deck while the gate is active.", descriptionLong : "These cards are decorated with intricate designs of different planes of existence. The deck has 6 charges, regaining 1d6 used charges daily at dawn. As a bonus action, I can use 1 charge to throw a card to an empty space either within 60 ft and teleport to it now, or within 5 ft and leave it there to use an action within the next 24 hours to speak the card's name and teleport to it. Once I teleport to a card, or 8 hours passed, the card vanishes and returns to the deck. As an action, I can use 3 charges to cast Arcane Gate, but the fluttering cards of the deck make up the gate, rendering the deck useless while it's active.", descriptionFull : "The backs of the cards in this deck are decorated with intricate designs representing different planes of existence. The deck has 6 charges. While holding it, you can expend 1 or more of its charges to use the following properties:"+ "\n " + toUni("Marked Card") + ". As a bonus action, you can expend 1 charge to draw a card from the deck and place it in an unoccupied space within 5 feet of you. The card then becomes marked with an invisible sigil. Once within the next 24 hours, as an action, you can speak the marked card's name and teleport to the card's location, along with any equipment you are wearing or carrying, appearing in the closest unoccupied space to the card. After you teleport in this way, or after 8 hours, the card returns to the deck, and the mark on it fades."+ "\n " + toUni("Riffling Portal") + ". As an action, you can expend 3 charges to cast the Arcane Gate spell from the deck. The deck vanishes, and fluttering cards create the spell's portal rings. When the spell ends, the deck reappears in your possession."+ "\n " + toUni("Shuffling Stride") + ". As a bonus action, you can expend 1 charge to throw a card from the deck to an unoccupied space within 60 feet of yourself and teleport, along with any equipment you're wearing or carrying, to that space. The card then vanishes and returns to the deck."+ "\n The deck regains 1d6 expended charges daily at dawn.", action : [["bonus action", " (throw card)"], ["action", " (teleport back)"]], usages : 6, recovery : "dawn", additional : "regains 1d6", spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "3 charges", spells : ["arcane gate"], selection : ["arcane gate"], firstCol : 3 }] }; MagicItemsList["deck of many more things"] = { name : "Deck of Many More Things", source : [["BoMT", 51]], // Chapter 7: Sage type : "wondrous item", rarity : "legendary", description : "Before drawing cards from this deck, I must declare how many I wish to draw and then draw that number randomly. Any cards drawn in excess have no effect. When a card is drawn, its magic takes effect, it fades from existence, and, unless the card is the Fool or the Jester, reappears in the deck. See Notes page.", descriptionFull : "Over the centuries since the first Deck of Many Things was created, many have sought and failed to replicate it. But some have created new cards. These forty-four additional cards are known collectively as the Deck of Many More Things. (More information on creating new cards for this deck appears in chapter 2.)"+ "\n " + BoMT.toDescrFull(BoMT["deck of many more things"].features) + "\n\n " + BoMT.toDescrFull(BoMT["deck of many more things"].cards) + "\n " + BoMT.toDescrFull(BoMT["deck of many more things"].cards2), toNotesPage : [{ name : "Features and Table", note : BoMT.to1stPerson(BoMT["deck of many more things"].features) }, { name : "Cards and Their Effects, part 1", note : BoMT.to1stPerson(BoMT["deck of many more things"].cards, "\n\u2022 ").replace(/Use my Int/g, "I use my Int").replace(/at my ft/ig, "my feet") }, { name : "Cards and Their Effects, part 2", note : BoMT.to1stPerson(BoMT["deck of many more things"].cards2, "\n\u2022 ").replace(/Use my Int/g, "I use my Int").replace(/I'm not/g, "not") }, { name : "Deck of Many Things' Cards and Effects", source : MagicItemsList["deck of many things"].source, note : MagicItemsList["deck of many things"].toNotesPage[1].note }] }; MagicItemsList["deck of miscellany"] = { name : "Deck of Miscellany", source : [["BoMT", 41]], // Chapter 6: Rogue type : "wondrous item", rarity : "uncommon", description : "Each card of the 32 cards in this wooden box has an illustration of a different item or set of items. As an action, I can pick a card and throw it in an empty space within 5 ft. There it transforms into the item(s) depicted. See the table on the Notes page for the items and the associated real-world playing cards.", descriptionFull : "This wooden box contains a set of thirty-two parchment cards."+ "\n The face of each card bears an illustration of a different item or set of items. As an action, you can draw a card of your choice from the deck and throw it to the ground in an unoccupied space within 5 feet of yourself. When the card hits the ground, the card permanently transforms into the item or set of items depicted on its face. An altered deck of real-world playing cards can simulate the deck, as shown in the table below.\n\n" + BoMT["deck of miscellany"].join("\n"), action : [["action", ""]], toNotesPage : [{ name : "Cards and Their Items", note : "\n This wooden box contains a set of thirty-two parchment cards. The face of each card bears an illustration of a different item or set of items. As an action, I can pick a remaining card and throw it to the ground in an unoccupied space within 5 ft. When the card hits the ground, the card permanently transforms into the item or set of items depicted on its face."+ BoMT.to1stPerson("\nUsed\t" + BoMT["deck of miscellany"].join("\n \u2610\t")) // empty ballet box }] }; MagicItemsList["deck of oracles"] = { name : "Deck of Oracles", source : [["BoMT", 61]], // Chapter 8: Fates type : "wondrous item", rarity : "rare", attunement : true, description : "If I spend 10 minutes consulting this deck of oracle cards when I finish a long rest, I can roll a d20 and record result. Once in the next 8 hours after a creature within 60 ft makes a check, attack roll, or save, I can use my reaction to have it use the number I rolled instead. Once per dawn, I can use these to cast Divination.", descriptionFull : "The illustrations on this deck of oracle cards move or change subtly when viewed indirectly. When you finish a long rest, you can spend 10 minutes consulting the cards for an omen of the coming day. Roll a d20 and record the number rolled. Once in the next 8 hours, immediately after a creature within 60 feet of you makes an ability check, an attack roll, or a saving throw, you can use your reaction to discard the d20 roll; the creature must use the number you rolled in place of its roll."+ "\n Additionally, while holding the cards, you can cast Divination from them. Once this property is used, it can't be used again until the next dawn.", action : [["reaction", ""]], usages : 1, recovery : "dawn", additional : "Divination", spellcastingBonus : [{ name : "Once per dawn", spells : ["divination"], selection : ["divination"], firstCol : "oncelr" }] }; MagicItemsList["deck of wild cards"] = { name : "Deck of Wild Cards", source : [["BoMT", 41]], // Chapter 6: Rogue type : "wondrous item", rarity : "very rare", description : "As an action, I can draw a random card from this deck of heavy vellum cards and throw it. I make a ranged spell attack using Dex with a range of 30 ft, dealing 1d4 slashing damage on a hit and one of four magical effects depending on the card drawn, see Notes page. The thrown card returns to the deck after the attack.", descriptionFull : BoMT.toDescrFull(BoMT["deck of wild cards"]), weaponOptions : [{ regExpSearch : /^(?=.*deck)(?=.*wild)(?=.*cards?).*$/i, name : "Deck of Wild Cards", source : [["BoMT", 41]], ability : 2, type : "Spell", damage : [1, 4, "slashing"], range : "30 ft", description : "Also random effect on hit, see Notes page", abilitytodamage : false, selectNow : true }], toNotesPage : [{ name : "Random Card Effects", note : BoMT.to1stPerson(BoMT["deck of wild cards"]) }] }; MagicItemsList["deck of wonder"] = { name : "Deck of Wonder", source : [["BoMT", 55]], // Chapter 7: Sage type : "wondrous item", rarity : "uncommon", description : "Before drawing cards from this deck, I must declare how many I wish to draw and then draw that number randomly. Any cards drawn in excess have no effect. When a card is drawn, its magic takes effect and then it fades from existence and reappears in the deck. See Notes page.", descriptionFull : BoMT.toDescrFull(BoMT["deck of wonder"].features) + "\n\n " + BoMT.toDescrFull(BoMT["deck of wonder"].cards), toNotesPage : [{ name : "Features and Table", note : BoMT.to1stPerson(BoMT["deck of wonder"].features) }, { name : "Cards and Their Effects", note : BoMT.to1stPerson(BoMT["deck of wonder"].cards, "\n\u2022 ") }] }; MagicItemsList["donjon's sundering sphere"] = { name : "Donjon's Sundering Sphere", source : [["BoMT", 35]], // Chapter 5: Gem type : "wondrous item", rarity : "rare", attunement : true, description : "Attuning to this marble-size crystal sphere includes attaching it to a nonmagical melee weapon, that then becomes magical +1. It grants me adv. on saves vs. being send to another dimension. Once per dawn when I hit a creature, I can have it make a DC 16 Cha save or be stuck in a demiplane until its next turn ends.", descriptionLong : "Attuning to this marble-size crystal sphere includes attaching it to the hilt of a nonmagical melee weapon weapon, that then becomes a magic weapon with a +1 bonus to attack and damage rolls. While wielding it, I have advantage on save against being send to an extradimensional space or another plane of existence. Once per dawn when I hit a creature with this weapon, I can have it make a DC 16 Charisma save or be banished to a harmless demiplane until its next turn ends. It returns to the space it left, or the nearest empty space. When I end my attunement to the sphere, it detaches from the weapon.", descriptionFull : "This marble-size crystal sphere glows with extraplanar energy."+ "\n As part of attuning to this item, you press the crystal sphere to the hilt of a nonmagical melee weapon of your choice, magically attaching the sphere to the weapon. The weapon becomes a magic weapon with a +1 bonus to attack and damage rolls. While wielding this weapon, you gain the following benefits:"+ "\n " + toUni("Dimensional Anchor") + ". You have advantage on saving throws against spells or effects that would send you to an extradimensional space, a demiplane, or another plane of existence against your will."+ "\n " + toUni("Isolating Smite") + ". When you hit a creature with this weapon, you can force the creature to make a DC 16 Charisma saving throw. On a failed save, the creature is banished to a harmless demiplane until the end of its next turn. When the banished creature returns, it reappears in the space it left or the nearest unoccupied space if that space is occupied. Once this property is used, it can't be used again until the next dawn."+ "\n When you end your attunement to the sphere, the sphere harmlessly detaches from the weapon, and the weapon reverts to a nonmagical piece of equipment.", savetxt : { adv_vs : ["being send to other plane/dimension"] }, usages : 1, recovery : "dawn", additional : "Banish", calcChanges : { atkCalc : [ function (fields, v, output) { if (!v.theWea.isMagicWeapon && v.isMeleeWeapon && /\bdonjon'?s\b/i.test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; output.magic = v.thisWeapon[1] + 1; } }, 'If I include the word "Donjon\'s" in the name of a melee weapon, it will be treated as a melee weapon with the Donjon\'s Sundering Sphere attached. It adds a +1 bonus to attack and damage rolls made with it.' ] } }; MagicItemsList["dried leech"] = { name : "Dried Leech", source : [["BoMT", 67]], // Chapter 9: Knight type : "weapon (any ammunition)", rarity : "uncommon", description : "If a creature is hit by this magic ammunition, the leech animates and attaches to the target, dealing 1d4 piercing damage at the start of each of their turns. The leech detaches if it deals at least 10 damage or the target dies. Anyone can use their action to detach a leech. A detached leech dies and turns nonmagical.", descriptionFull : "This leech has been dried and imbued with a mote of animating magic. If you hit a creature with a ranged attack roll using this ammunition, the leech springs to life and sinks its teeth into the target, dealing 1d4 piercing damage at the start of each of the target's turns. If the leech deals at least 10 damage or the target dies, the leech falls off. A creature, including the target, can use its action to detach the leech. Once a leech is no longer attached to its target, the leech dies and is no longer magical.", allowDuplicates : true, chooseGear : { type : "ammo", prefixOrSuffix : "suffix", descriptionChange : ["replace", "ammunition"], excludeCheck : function (inObjKey, inObj) { return /vials|flasks/i.test(inObj.icon); } } }; MagicItemsList["euryale's aegis"] = { name : "Euryale's Aegis", source : [["BoMT", 35]], // Chapter 5: Gem type : "shield", rarity : "legendary", attunement : true, description : "This brass shield grants me poison resistance and petrification immunity. I can use it to cast 3 spells, each once per dawn. As a bonus action once per dawn, a target I can see within 30 ft must make a DC 20 Con save or be restrained until its next turn starts, at which point it must save again or be petrified for 24 hours.", descriptionLong : "This gleaming brass shield bears a relief of the legendary medusa druid Euryale. It grants me poison resistance and immunity to being petrified. I can use it to cast 3 spells, each once per dawn: Lesser Restoration, Locate Creature, and Transport via Plants.\nAs a bonus action once per dawn, I can try to petrify a creature I can see within 30 ft. It must make a DC 20 Constitution save or be restrained while its body turns to stone. When its next turn starts, it must then make a DC 20 Constitution save again or be petrified for 24 hours. On a successful save, the restrained condition ends.", descriptionFull : "This gleaming brass shield bears a relief of the legendary medusa druid Euryale."+ "\n While wielding this shield, you gain the following benefits:"+ "\n " + toUni("Blessing of Euryale") + ". You have resistance to poison damage and are immune to the petrified condition."+ "\n " + toUni("Petrifying Heraldry") + ". As a bonus action, you can make the front of the shield flare with a medusa's petrifying magic, causing the relief's eyes to glow brightly. Choose one creature you can see within 30 feet of you. The creature must succeed on a DC 20 Constitution saving throw, or it has the restrained condition as its body turns to stone. The restrained creature must make another DC 20 Constitution saving throw at the start of its next turn. On a failed save, the creature has the petrified condition for 24 hours. On a successful save, the restrained condition ends. Once this bonus action is used, it can't be used again until the next dawn."+ "\n " + toUni("Spellcasting") + ". While wielding the shield, you can use an action to cast one of the following spells from it: Lesser Restoration, Locate Creature, Transport via Plants. Once you use the shield to cast a spell, the shield can't cast that spell again until the next dawn.", weight : 6, action : [["bonus action", " - Petrify"]], shieldAdd : "Euryale's Aegis", dmgres : ["Poison"], savetxt : { immune : ["petrified"] }, spellcastingBonus : [{ name : "Once per dawn", spells : ["lesser restoration", "locate creature", "transport via plants"], selection : ["lesser restoration", "locate creature", "transport via plants"], firstCol : "oncelr", times : 3 }], extraLimitedFeatures : [{ name : "Euryale's Aegis - Petrify", usages : 1, recovery : "dawn" }, { name : "Euryale's Aegis (each spell once)", usages : 3, recovery : "dawn" }] }; MagicItemsList["fabulist gem"] = { name : "Fabulist Gem", source : [["BoMT", 36]], // Chapter 5: Gem type : "wondrous item", rarity : "uncommon", attunement : true, description : "As a bonus action, I can use this glittering red gem to change the appearance of what I'm wearing, the color, pattern, or to something different entirely. This doesn't pass physical inspection. As an action once per dawn, I can create a pile of coins up to 100 gp on a surface within 10 ft. They last for 1 hour.", descriptionFull : "This glittering red gem is commonly found embedded in a ring or brooch."+ "\n While wearing the gem, you gain the following benefits."+ "\n " + toUni("Counterfeit Coins") + ". You can use your action to magically create a pile of coins, worth no more than 100 gp total, in an unoccupied space within 10 feet of yourself. The pile must appear on a surface that can support it. After 1 hour, the coins vanish, regardless of where they are. Once this action is used, it can't be used again until the next dawn."+ "\n " + toUni("Illusory Fashion") + ". As a bonus action, you can magically change the appearance of your clothing and armor. You can change the style, color, and apparent quality of what you're wearing, or you can make it appear as if you were wearing different garments entirely. In either case, the changes wrought by this magic fail to pass physical inspection.", action : [["action", " - Counterfeit Coins"], ["bonus action", " - Illusory Fashion"]], extraLimitedFeatures : [{ name : "Fabulist Gem - Counterfeit Coins", usages : 1, recovery : "dawn" }], choices : ["Brooch", "Ring"], "brooch" : { name : "Fabulist Gem Brooch", description : "As a bonus action, I can use this brooch's glittering red gem to change the appearance of what I'm wearing, the color, pattern, or to something different entirely. This doesn't pass physical inspection. As an action once per dawn, I can create a pile of coins up to 100 gp on a surface within 10 ft. They last for 1 hour." }, "ring" : { name : "Fabulist Gem Ring", type : "ring", description : "As a bonus action, I can use this ring's glittering red gem to change the appearance of what I'm wearing, the color, pattern, or to something different entirely. This doesn't pass physical inspection. As an action once per dawn, I can create a pile of coins up to 100 gp on a surface within 10 ft. They last for 1 hour." } }; MagicItemsList["fate cutter shears"] = { name : "Fate Cutter Shears", source : [["BoMT", 61]], // Chapter 8: Fates type : "weapon (dagger)", rarity : "very rare", attunement : true, description : "The blades of these pruning shears bear many nicks and dents but still cut cleanly. They function as a magic dagger that deal +1d6 force damage. Once per dawn when I hit a creature with them, I can cut their fate. Until that target finishes a long rest, attack rolls against them score a critical hit on a roll of 19 or 20.", descriptionFull : "The blades of these pruning shears bear many nicks and dents but still cut cleanly. The shears function as a magic dagger. The weapon has the following properties:"+ "\n " + toUni("Ever Sharp") + ". When you hit with an attack using the shears, the target takes an extra 1d6 force damage."+ "\n " + toUni("Sever Threads") + ". When you hit a creature with the shears, you can cut that creature's fate. Until the target finishes a long rest, attack rolls against it score a critical hit on a roll of 19 or 20 on the d20. Once this property is used, it can't be used again until the next dawn.", weight : 1, usages : 1, recovery : "dawn", additional : "Sever Threads", weaponOptions : [{ baseWeapon : "dagger", regExpSearch : /^(?=.*fate)(?=.*cutt(er|ing))(?=.*(shears?|dagger)).*$/i, name : "Fate Cutter Shears", source : [["BoMT", 61]], description : "Finesse, light, thrown; +1d6 force damage", selectNow : true }] }; MagicItemsList["fate dealer's deck"] = { name : "Fate Dealer's Deck", source : [["BoMT", 61]], // Chapter 8: Fates type : "wondrous item", attunement : true, prerequisite : "Requires attunement by a cleric or paladin", prereqeval : function (v) { return classes.known.paladin || classes.known.cleric ? true : false; }, description : "While holding this deck, I can use it as a spellcasting focus and I gain a bonus to my spell attack rolls and spell save DC determined by its rarity: rare (+1), very rare (+2), or legendary (+3). As an action, I can draw a card and expend and roll one HD to heal or deal radiant damage to a creature within 30 ft I can see, equal to the roll and the deck's bonus.", descriptionFull : "The backs of these cards are inscribed with glyphs representing the Inner Planes, the Outer Planes, or the holy symbols of various deities. While holding this deck, you can use it as a spellcasting focus, and you gain a bonus to spell attack rolls and to your spell save DC. The bonus is determined by the deck's rarity: rare (+1), very rare (+2), or legendary (+3)."+ "\n In addition, while you're holding the deck, you can draw a card as an action to expend and roll one of your Hit Dice and add the deck's bonus to the number rolled. One creature you can see within 30 feet of you either takes radiant damage or regains hit points (your choice) equal to the total.", choices : ["+1 Fate Dealer's Deck (rare)", "+2 Fate Dealer's Deck (very rare)", "+3 Fate Dealer's Deck (legendary)"], "+1 fate dealer's deck (rare)" : { name : "Fate Dealer's Deck +1", nameTest : "+1 Fate Dealer's Deck", rarity : "rare", description : "While holding this deck, I can use it as a spellcasting focus and it gives me a +1 bonus to my spell attacks and spell save DC. As an action, I can draw a card from it and expend and roll one of my HD. I then choose a creature within 30 ft that I can see and either heal it or deal it radiant damage equal to the roll +1.", calcChanges : { spellCalc : [ function (type, spellcasters, ability) { if (type !== "prepare") return 1; }, "While holding the Fate Dealer's Deck, I gain a +1 bonus to spell attack rolls and to the saving throw DCs of my spells." ] } }, "+2 fate dealer's deck (very rare)" : { name : "Fate Dealer's Deck +2", nameTest : "+2 Fate Dealer's Deck", rarity : "very rare", description : "While holding this deck, I can use it as a spellcasting focus and it gives me a +2 bonus to my spell attacks and spell save DC. As an action, I can draw a card from it and expend and roll one of my HD. I then choose a creature within 30 ft that I can see and either heal it or deal it radiant damage equal to the roll +2.", calcChanges : { spellCalc : [ function (type, spellcasters, ability) { if (type !== "prepare") return 2; }, "While holding the Fate Dealer's Deck, I gain a +2 bonus to spell attack rolls and to the saving throw DCs of my spells." ] } }, "+3 fate dealer's deck (legendary)" : { name : "Fate Dealer's Deck +3", nameTest : "+3 Fate Dealer's Deck", rarity : "legendary", description : "While holding this deck, I can use it as a spellcasting focus and it gives me a +3 bonus to my spell attacks and spell save DC. As an action, I can draw a card from it and expend and roll one of my HD. I then choose a creature within 30 ft that I can see and either heal it or deal it radiant damage equal to the roll +3.", calcChanges : { spellCalc : [ function (type, spellcasters, ability) { if (type !== "prepare") return 3; }, "While holding the Fate Dealer's Deck, I gain a +3 bonus to spell attack rolls and to the saving throw DCs of my spells." ] } } }; MagicItemsList["feywrought armor"] = { name : "Feywrought Armor", nameTest : /feywrought.*armou?r/i, source : [["BoMT", 67]], // Chapter 9: Knight type : "armor (light, medium, or heavy)", rarity : "rare", attunement : true, description : "While wearing this colorful, flowery armor that was forged in the Feywild, I have advantage on saves to avoid or end the charmed condition on myself. The armor has 3 charges and regains 1d3 used charges daily at dawn. As an action, I can use 1 charge to cast Compulsion (save DC 15) from it.", descriptionFull : "This colorful, flowery armor was forged in the Feywild and is infused with that plane's captivating magic."+ "\n While wearing this armor, you have advantage on saving throws you make to avoid or end the charmed condition on yourself."+ "\n This armor has 3 charges. You can use an action to expend a charge to cast the Compulsion spell (save DC 15) from this armor. The armor regains 1d3 expended charges daily at dawn.", chooseGear : { type : "armor", prefixOrSuffix : ["between", "Feywrought", "Armor"], descriptionChange : ["prefix", "armor"], itemName1stPage : ["suffix", "Feywrought"] }, usages : 3, recovery : "dawn", additional : "regains 1d3", savetxt : { adv_vs : ["charmed"] }, fixedDC : 15, spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "1 charge", spells : ["compulsion"], selection : ["compulsion"], firstCol : 1 }] }; MagicItemsList["fool's blade"] = { name : "Fool's Blade", source : [["BoMT", 36]], // Chapter 5: Gem type : "weapon (any sword)", rarity : "very rare", attunement : true, description : "As a bonus action once per dawn, I can use this weapon +2 to feint a target within 5 ft, giving me adv. on attacks vs. it until my next turn starts. As a reaction once per dawn when a creature within 60 ft attacks me, I can have it make a DC 15 Int save or have it target another of my choice within its reach.", descriptionLong : "This magic weapon appears ordinary, but bears strong illusion magic that allows me to deceive opponents. I have a +2 bonus to attack and damage rolls with it.\nFool's Feint: As a bonus action once per dawn, I can feint a creature within 5 ft, giving me advantage on attack rolls against it until the start of my next turn.\nMisdirect: As a reaction once per dawn when a creature within 60 ft targets me with an attack roll, I can have it make a DC 15 Intelligence save. On a failed save, the attack instead targets another creature of my choice that is within the attacker's reach.", descriptionFull : "This weapon appears ordinary, but it bears strong illusion magic that allows its wielder to skillfully deceive opponents."+ "\n You have a +2 bonus to attack and damage rolls made with this magic weapon. While wielding it, you also gain the following benefits:"+ "\n " + toUni("Fool's Feint") + ". As a bonus action, you can feint, choosing a creature within 5 feet of you as your target. Until the start of your next turn, you have advantage on attack rolls against the target. Once this bonus action is used, it can't be used again until the next dawn."+ "\n " + toUni("Misdirect") + ". When a creature within 60 feet of you targets you with an attack roll, you can use your reaction to require that creature to make a DC 15 Intelligence saving throw. On a failed save, the attack instead targets another creature of your choice that is within the attacker's reach. Once this reaction has been used, it can't be used again until the next dawn.", action : [["bonus action", " - Feint"], ["reaction", " - Misdirect"]], chooseGear : { type : "weapon", prefixOrSuffix : "brackets", descriptionChange : ["replace", "sword"], itemName1stPage : ["suffix", "Fool's"], excludeCheck : function (inObjKey, inObj) { var testRegex = /sword|scimitar|rapier/i; return !testRegex.test(inObjKey) && (!inObj.baseWeapon || !testRegex.test(inObj.baseWeapon)); } }, calcChanges : { atkCalc : [ function (fields, v, output) { if (!v.theWea.isMagicWeapon && v.isMeleeWeapon && /sword|scimitar|rapier/i.test(v.baseWeaponName) && /\bfool'?s\b/i.test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; output.magic = v.thisWeapon[1] + 2; } }, 'If I include the word "Fool\'s" in the name of a sword, it will be treated as the magic weapon Fool\'s Blade. It adds a +2 bonus to attack and damage rolls made with it.' ] } }; MagicItemsList["forcebreaker weapon"] = { name : "Forcebreaker Weapon", nameTest : "Forcebreaker", source : [["BoMT", 67]], // Chapter 9: Knight type : "weapon (any that deals bludgeoning damage)", rarity : "very rare", description : "This magic weapon gives +2 to hit and damage. It was crafted to destroy structures made of magical force, such as a Wall of Force. With one strike with this weapon, I can shatter a Large or smaller structure of magical force, or shatter a 20-ft cube portion of a Huge or larger structure.", descriptionFull : "You gain a +2 bonus to attack and damage rolls made with this magic weapon."+ "\n This weapon was crafted to destroy structures made of force, such as those created by Forcecage or Wall of Force. Striking a Large or smaller structure of magical force with this weapon automatically shatters that structure. If the target is a Huge or larger structure of force, this weapon shatters a 20-foot-cube portion of it.", chooseGear : { type : "weapon", prefixOrSuffix : "suffix", descriptionChange : ["replace", "weapon"], excludeCheck : function (inObjKey, inObj) { var damageArr = inObj.baseWeapon && !inObj.damage ? WeaponsList[inObj.baseWeapon].damage : inObj.damage; return !/bludg(\.|eoning)/i.test(damageArr.toString()); } }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && /forcebreaker/i.test(v.WeaponTextName) && /bludg(\.|eoning)/i.test(fields.Damage_Type)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + 'Shatters magical force'; } }, 'If I include the word "Forcebreaker" in the name of a bludgeoning weapon, it will be treated as the magic weapon Forcebreaker Weapon. It adds a +2 bonus to attack and damage rolls made with it.' ], atkCalc : [ function (fields, v, output) { if (!v.theWea.isMagicWeapon && /forcebreaker/i.test(v.WeaponTextName) && /bludg(\.|eoning)/i.test(fields.Damage_Type)) { v.theWea.isMagicWeapon = true; output.magic = v.thisWeapon[1] + 2; } }, '' ] } }; MagicItemsList["glimmering moonbow"] = { name : "Glimmering Moonbow", nameTest : "Glimmering Moon", source : [["BoMT", 36]], // Chapter 5: Gem type : "weapon (any bow)", rarity : "rare", attunement : true, description : "This silver-and-black bow adds +1 to its to hit and damage rolls, creates its own ammo that lasts until it hits or misses a target, and deals +1d6 radiant damage. As a bonus action once per dawn, I can use it to gain resistance to piercing, bludgeoning, and slashing damage until my next turn starts, ", descriptionFull : "This silver-and-black bow is engraved with the phases of the moon. You gain a +1 bonus to attack and damage rolls made with this magic weapon."+ "\n When you hit with a ranged attack roll using this magic bow, the target takes an extra 1d6 radiant damage. If you load no ammunition in the weapon, it produces its own, automatically creating one piece of magic ammunition when you make a ranged attack with it. The ammunition created by the bow vanishes the instant after it hits or misses a target."+ "\n While wielding this magic bow, you can use a bonus action to enter a semi-incorporeal state until the start of your next turn. While semi-incorporeal, you have resistance to bludgeoning, piercing, and slashing damage. Once this bonus action is used, it can't be used again until the next dawn.", usages : 1, recovery : "dawn", additional : "resistances", action : [["bonus action", " (resistances)"]], chooseGear : { type : "weapon", prefixOrSuffix : "suffix", descriptionChange : ["replace", "bow"], excludeCheck : function (inObjKey, inObj) { var testRegex = /bow/i; return !testRegex.test(inObjKey) && (!inObj.baseWeapon || !testRegex.test(inObj.baseWeapon)); } }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && v.isRangedWeapon && /bow/i.test(v.baseWeaponName) && /^(?=.*glimmering)(?=.*moon).*$/i.test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(;|,)? ?(loading|Counts as magical)/ig, ''); fields.Description += (fields.Description ? '; ' : '') + '+1d6 radiant damage'; } }, 'If I include the words "Glimmering" and "Moon" in the name of a bow, it will be treated as the magic weapon Glimmering Moonbow. It has +1 to hit and damage, deals +1d6 radiant damage, and produces its own ammunition, thus its loading property is removed if it has it.' ], atkCalc : [ function (fields, v, output) { if (!v.theWea.isMagicWeapon && v.isRangedWeapon && /bow/i.test(v.baseWeaponName) && /^(?=.*glimmering)(?=.*moon).*$/i.test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; output.magic = v.thisWeapon[1] + 1; } }, '' ] } }; MagicItemsList["gloomwrought armor"] = { name : "Gloomwrought Armor", nameTest : /gloomwrought.*armou?r/i, source : [["BoMT", 67]], // Chapter 9: Knight type : "armor (light, medium, or heavy)", rarity : "rare", attunement : true, description : "While wearing this intricate grayscale armor forged in the Shadowfell, I have advantage on saves to avoid or end the frightened condition on myself. The armor has 3 charges and regains 1d3 used charges daily at dawn. As an action, I can use 1 charge to cast Calm Emotions (save DC 15) from it.", descriptionFull : "This intricate grayscale armor was forged in the Shadowfell and is infused with that plane's gloom."+ "\n While you're wearing this armor, you have advantage on saving throws you make to avoid or end the frightened condition on yourself."+ "\n This armor has 3 charges. You can expend a charge to cast the Calm Emotions spell (save DC 15) from the armor. This armor regains 1d3 expended charges daily at dawn.", chooseGear : { type : "armor", prefixOrSuffix : ["between", "Gloomwrought", "Armor"], descriptionChange : ["prefix", "armor"], itemName1stPage : ["suffix", "Gloomwrought"] }, usages : 3, recovery : "dawn", additional : "regains 1d3", savetxt : { adv_vs : ["frightened"] }, fixedDC : 15, spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "1 charge", spells : ["calm emotions"], selection : ["calm emotions"], firstCol : 1 }] }; MagicItemsList["grasping whip"] = { name : "Grasping Whip", source : [["BoMT", 67]], // Chapter 9: Knight type : "weapon (whip)", rarity : "rare", description : "I gain a +1 bonus to attack and damage rolls made with this magic whip. When I hit a creature or object that is Large or smaller with this whip, I can pull that creature or object 5 ft toward me instead of dealing damage.", descriptionFull : "You gain a +1 bonus to attack and damage rolls made with this magic whip. When you hit a creature or object that is Large or smaller with this whip, you can pull that creature or object 5 feet toward you instead of dealing damage.", weight : 3, weaponOptions : [{ baseWeapon : "whip", regExpSearch : /^(?=.*grasping)(?=.*whip).*$/i, name : "Grasping Whip", source : [["BoMT", 67]], description : "Finesse, reach; Forgo damage to pull \u2264 Large 5 ft to me", selectNow : true }] }; MagicItemsList["hammer of runic focus"] = { name : "Hammer of Runic Focus", source : [["BoMT", 67]], // Chapter 9: Knight type : "weapon (warhammer)", rarity : "very rare", attunement : true, description : "As a bonus action three times per dawn, I can slam this hammer on the ground, creating a 15-ft radius glowing circle of runes wherein it's a +3 warhammer glowing with matching runes. The rune circle disappears after 1 minute, when I create another, or when I dismiss it as a bonus action.", descriptionFull : "This magic hammer has 3 charges. As a bonus action, you can expend 1 charge and slam this hammer on the ground, creating a 15-foot-radius circle of glowing runes centered on the point of impact. While you're inside that area, your hammer glows with matching runes, and you gain a +3 bonus to attack and damage rolls made with this hammer. The rune circle disappears after 1 minute, when you create another rune circle, or when you dismiss the rune circle as a bonus action. This hammer regains 1d3 expended charges daily at dawn.", weight : 2, action : [["bonus action", " (start/end)"]], usages : 3, recovery : "dawn", weaponOptions : [{ baseWeapon : "warhammer", regExpSearch : /^(?=.*hammer)(?=.*runic)(?=.*focus).*$/i, name : "Hammer of Runic Focus", source : [["BoMT", 67]], description : "Versatile (1d10); +2 to hit/damage while inside its circle", selectNow : true }] }; MagicItemsList["house of cards"] = { name : "House of Cards", source : [["BoMT", 61]], // Chapter 8: Fates type : "wondrous item", rarity : "uncommon", description : "As an action once per dawn, I can have this deck of cards deal themselves into a shelter centered on a point within 30 ft. It can be any shape that fits in a 40-ft cube, with 1 door and up to 4 windows, that only I can open or close. It has 15 AC, 50 HP, and lasts for 24 hours, I dismiss it as an action, or it reaches 0 HP.", descriptionLong : "This deck of cards is decorated with geometric shapes that have a protective motif. As an action once per dawn, I can cause the cards to transform into a shelter made of cards centered on a point within 30 ft. It can be any shaped I want that fits in a 40-ft cube. It has a floor, a roof, one door and up to four windows, and only I can open or close them. It has a comfortable temperature inside, AC 15, 50 HP, and immunity to poison and psychic damage. It lasts for 24 hours, until I dismiss it as an action, or until it is reduced to 0 HP. When the shelter's duration ends, it transforms back into a deck of cards in my hand.", descriptionFull : "This deck of cards is decorated with geometric shapes that have a protective motif. While you're holding the deck, you can use an action to shuffle it and cause the cards to deal themselves out and transform into a shelter made of cards. The shelter can be shaped however you desire, but it must fit in a 40-foot cube centered on a point within 30 feet of you. The shelter has one door and up to four windows, and only you can open or close them. It has a floor and a roof, and it maintains a comfortable temperature inside."+ "\n The shelter has AC 15, 50 hit points, and immunity to poison and psychic damage. The shelter lasts for 24 hours, until you dismiss it as an action, or until it is reduced to 0 hit points. When the shelter's duration ends, it transforms back into a deck of cards and appears in your hand. Once the deck has transformed into a shelter, it can't be used again until the next dawn.", action : [["action", ""]], usages : 1, recovery : "dawn" }; MagicItemsList["jester's mask"] = { name : "Jester's Mask", source : [["BoMT", 36]], // Chapter 5: Gem type : "wondrous item", rarity : "legendary", attunement : true, prerequisite : "Requires attunement by a bard, sorcerer, or warlock", prereqeval : function (v) { return classes.known.bard || classes.known.sorcerer || classes.known.warlock ? true : false; }, description : "I can use this harlequin mask as a spellcasting focus. It adds a +3 bonus to my spell attacks and spell save DCs that use Charisma. Once per dawn when I roll a 1 on a d20, I can change it to a 20. As a reaction once per dawn when I'm hit by an attack roll, I can teleport 30 ft to an empty space I can see, taking no damage.", descriptionLong : "While I'm wearing this colorful, harlequin domino mask edged with pearls, it grants me:"+ "\u2022 Charismatic Focus: I can use it as a spellcasting focus and it grants me a +3 bonus to spell attack rolls and spell saving throw DCs that use Charisma as the spellcasting ability."+ "\u2022 Marvelous Escape: As a reaction once per dawn when a creature hits me with an attack roll, I can teleport in a puff of smoke and sparkles instead of taking damage. I teleport to an empty space I can see within 30 ft, along with anything I'm wearing or carrying."+ "\u2022 Topsy-Turvy: Once per dawn when I roll a 1 on a d20, I can treat it as a 20 instead.", descriptionFull : "This colorful, harlequin domino mask is edged with pearls. While wearing this mask, you gain the following benefits:"+ "\n " + toUni("Charismatic Focus") + ". You can use the mask as a spellcasting focus. You gain a +3 bonus to any spell attack rolls and spell saving throw DCs that use Charisma as the spellcasting ability."+ "\n " + toUni("Marvelous Escape") + ". When a creature hits you with an attack roll, you can use your reaction to disappear in a puff of smoke and colorful sparkles. You take no damage and instead teleport, along with anything you are wearing or carrying, to an unoccupied space you can see within 30 feet of yourself. Once this reaction is used, it can't be used again until the next dawn."+ "\n " + toUni("Topsy-Turvy") + ". When you roll a 1 on a d20, you can treat the roll as if you rolled a 20 instead. Once this property is used, it can't be used again until the next dawn.", action : [["reaction", " (escape)"]], extraLimitedFeatures : [{ name : "Jester's Mask - Marvelous Escape", usages : 1, recovery : "dawn" }, { name : "Jester's Mask - Topsy-Turvy", usages : 1, recovery : "dawn" }], calcChanges : { spellCalc : [ function (type, spellcasters, ability) { if (type !== "prepare" && ability === 6) return 3; }, "While wearing the Jester's Mask, I gain a +3 bonus to any spell attack rolls and spell saving throw DCs that use Charisma as the spellcasting ability." ] } }; MagicItemsList["plate of knight's fellowship"] = { name : "Plate of Knight's Fellowship", source : [["BoMT", 37]], // Chapter 5: Gem type : "armor (plate)", rarity : "uncommon", attunement : true, description : "This gleaming set of silver-and-gold plate armor never tarnishes. As a bonus action once per dawn, I can use it to summon a warrior spirit (knight) to an empty spot within 30 ft. It lasts for 1 minute or until reduced to 0 HP. It is an ally to me, shares my initiative and obeys my commands. See the Companion page.", descriptionFull : "This gleaming set of silver-and-gold plate armor never tarnishes."+ "\n While wearing this armor, you can use a bonus action to summon the spirit of a warrior to your aid. The spirit's corporeal form manifests in an unoccupied space of your choice within 30 feet of you, and it uses the knight stat block. The spirit disappears when it drops to 0 hit points or after 1 minute, whichever comes first."+ "\n The spirit is an ally to you and your companions. In combat, the spirit shares your initiative count but takes its turn immediately after yours. The spirit obeys your commands (no action required by you); if you don't issue any commands, the spirit takes the Dodge action and uses its movement to avoid danger."+ "\n Once this bonus action is used, it can't be used again until the next dawn.", weight : 65, usages : 1, recovery : "dawn", action : [["bonus action", ""]], armorAdd : { select : "Plate of Knight's Fellowship", options : ["Plate of Knight's Fellowship"] }, creaturesAdd : [["Knight"]], creatureOptions : [{ name : "Knight", source : [["SRD", 400], ["M", 347]], eval : function(prefix) { Value(prefix + "Comp.Desc.Name", "Warrior Spirit"); }, size : 3, type : "Humanoid", alignment : "any alignment", ac : 18, hp : 52, hd : [8, 8], speed : "30 ft", scores : [16, 11, 14, 11, 11, 15], saves : ["", "", 4, "", 2, ""], passivePerception : 10, languages : "any one language (usually Common)", challengeRating : "3", proficiencyBonus : 2, attacksAction : 2, attacks : [{ name : "Greatsword", ability : 1, damage : [2, 6, "slashing"], range : "Melee (5 ft)", description : "Heavy, two-handed; Two greatsword attacks as an Attack action" }, { name : "Heavy Crossbow", ability : 2, damage : [1, 10, "piercing"], range : "100/400 ft", description : "Ammunition, heavy, loading, two-handed" }], actions : [{ name : "Multiattack", description : "As an action on its turn, the knight can make two melee attacks." } ,{ name : "Leadership (Recharges after a Short or Long Rest)", description : "As an action, the knight can activate this ability. Then, for 1 minute, the knight can utter a special command or warning whenever a nonhostile creature that it can see within 30 ft of it makes an attack roll or save. The creature can add +1d4 to its roll provided it can hear and understand the knight. A creature can benefit from only one Leadership die at a time. This effect ends if the knight is incapacitated." }, { name : "Parry", description : "As a reaction, the knight can add +2 AC against one melee attack that would hit it. To do so, the knight must see the attacker and be wielding a melee weapon." }], features : [{ name : "Brave", description : "The knight has advantage on saving throws against being frightened." }, { name : "Summoned", description : "The warrior spirit is an ally to you and your companions. It shares your initiative count but takes its turn immediately after yours. The spirit obeys your commands (no action), or takes the Dodge action and uses its movement to avoid danger if issued no commands. The spirit disappears when it drops to 0 hit points or after 1 minute, whichever comes first." }] }] }; MagicItemsList["ring of puzzler's wit"] = { name : "Ring of Puzzler's Wit", source : [["BoMT", 37]], // Chapter 5: Gem type : "ring", rarity : "uncommon", description : "This gold ring bears a fluorite stone and is enchanted to sharpen the wearer's mind. The ring has 3 charges and regains 1d4-1 expended charges daily at dawn. When I make an Intelligence check, I can expend 1 charge to grant myself advantage on the check.", descriptionFull : "This gold ring bears a fluorite stone and is enchanted to sharpen the wearer's mind."+ "\n The ring has 3 charges and regains 1d4 - 1 expended charges daily at dawn. When you make an Intelligence check, you can expend 1 charge to grant yourself advantage on the check.", usages : 3, recovery : "dawn", additional : "regains 1d4-1" }; MagicItemsList["rod of hellish flames"] = { name : "Rod of Hellish Flames", source : [["BoMT", 37]], // Chapter 5: Gem type : "rod", rarity : "very rare", attunement : true, prerequisite : "Requires attunement by a spellcaster", prereqeval : function(v) { return v.isSpellcaster; }, description : "I can use this black iron rod as an arcane focus and it grants me resistance to fire and necrotic damage. Once per dawn I can use it to cast Hellish Rebuke as a 4th-level spell (save DC 16). When I cast a spell that deals fire or necrotic damage, I can once per dawn use it to maximize the damage instead of rolling.", descriptionFull : "Glowing cinders orbit the flanged head of this black iron rod."+ "\n This rod can be used as an arcane focus. While holding this rod, you gain the following benefits:"+ "\n " + toUni("Hellish Resistance") + ". You have resistance to fire and necrotic damage."+ "\n " + toUni("Searing Rebuke") + ". You can cast the Hellish Rebuke spell as a 4th-level spell (save DC 16) from the rod. Once you use the rod to cast the spell, the rod can't cast the spell again until the next dawn."+ "\n " + toUni("Surge of Brimstone") + ". Whenever you cast a spell that deals fire or necrotic damage, you can use the rod to deal the maximum damage instead of rolling. Once this property is used, it can't be used again until the next dawn.", weight : 2, extraLimitedFeatures : [{ name : "Rod of Hellish Flames (Hellish Rebuke)", usages : 1, recovery : "dawn" }, { name : "Rod of Hellish Flames (maximize)", usages : 1, recovery : "dawn" }], dmgres : ["Fire", "Necrotic"], spellcastingBonus : [{ name : "Once per dawn", spells : ["hellish rebuke"], selection : ["hellish rebuke"], firstCol : "oncelr" }], spellChanges : { "hellish rebuke" : { description : "Cast when taking damage, creature that dealt damage takes 5d10 Fire damage; save halves", changes : "Using the Rod of Hellish Flames, I cast Hellish Rebuke as if I'm using a 4th-level spell slot, doing 5d10 damage, once per dawn." } } }; MagicItemsList["rogue's mantle"] = { name : "Rogue's Mantle", source : [["BoMT", 37]], // Chapter 5: Gem type : "wondrous item", rarity : "rare", attunement : true, description : "This dark, hooded mantle of thick cloth gives me +60 ft darkvision. As a bonus action, I can use it to teleport 30 ft from and into dim light or darkness, to an empty space I can see. I then have advantage on my first attack before my turn ends. Also, I can use it to cast Antagonize once per dawn (save DC 15).", descriptionFull : "This dark, hooded mantle of thick cloth is infused with secretive and deceptive magic. While wearing it, you gain the following benefits:"+ "\n " + toUni("Darkvision") + ". You gain darkvision within a range of 60 feet. If you already have darkvision, the mantle increases your darkvision's range by 60 feet instead."+ "\n " + toUni("Move in Shadows") + ". While you are in dim light or darkness, you can use a bonus action to teleport, along with anything you are wearing or carrying, up to 30 feet to an unoccupied space you can see that is also in dim light or darkness. You then have advantage on the first melee attack you make before the end of the turn."+ "\n " + toUni("Willful Enmity") + ". You can cast the Antagonize spell (save DC 15) from the mantle. Once the mantle has cast the spell, it can't cast the spell again until the next dawn.", usages : 1, recovery : "dawn", additional : "Antagonize", vision : [["Darkvision", "fixed 60"], ["Darkvision", "+60"]], action : [["bonus action", " (teleport)"]], fixedDC : 15, spellcastingBonus : [{ name : "Once per dawn", spells : ["antagonize"], selection : ["antagonize"], firstCol : "oncelr" }] }; MagicItemsList["ruinous flail"] = { name : "Ruinous Flail", source : [["BoMT", 37]], // Chapter 5: Gem type : "weapon (flail)", rarity : "rare", attunement : true, description : "This ash-gray, cold to the touch flail +1 deals double damage to objects and structures. Once per dawn, I can have a creature hit by it make a DC 15 Con save or be poisoned for 1 minute and take 2d4 necrotic damage at the start of each of its turns. It can repeat the save at the end of each of its turns to end the effects.", descriptionFull : "This ash-gray flail is cold to the touch. You gain a +1 bonus to attack and damage rolls made with this magic weapon, and it deals double damage to objects and structures."+ "\n Additionally, when you hit a creature with this weapon, you can force the creature to make a DC 15 Constitution saving throw. On a failed save, the creature has the poisoned condition for 1 minute. The poisoned creature takes 2d4 necrotic damage at the start of each of its turns. The creature can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success. Once this property is used in this way, it can't be used again until the next dawn.", weight : 2, usages : 1, recovery : "dawn", weaponOptions : [{ baseWeapon : "flail", regExpSearch : /^(?=.*ruinous)(?=.*flail).*$/i, name : "Ruinous Flail", source : [["BoMT", 37]], description : "Double damage to objects; Once per dawn: target DC 15 Con save or poisoned, see item", modifiers : [1, 1], selectNow : true }] }; MagicItemsList["sage's signet"] = { name : "Sage's Signet", source : [["BoMT", 37]], // Chapter 5: Gem type : "ring", attunement : true, prerequisite : "Requires attunement by a spellcaster", prereqeval : function(v) { return v.isSpellcaster; }, description : "This gilded ring with a beautiful engraving is imbued with powers of keen wisdom and foresight. While wearing this ring, I can cast Augury and two more spells depending on the signet each once per dawn using my Intelligence as the spellcasting ability. Casting Augury using this ring only takes one action.", descriptionFull : "This gilded ring bears a beautiful engraving and is imbued with powers of keen wisdom and foresight. While wearing this ring, you can use an action to cast the Augury spell from the ring. Once you use the ring to cast the spell, the ring can't cast the spell again until the next dawn."+ "\n Six varieties of Sage's Signet rings exist, each with a different signet (see the table below). A ring's signet determines its rarity as well as the additional spells it can cast. While wearing a Sage's Signet, you can cast each of its additional spells once from the ring using your Intelligence as the spellcasting ability. Once you cast each of the additional spells from the ring, it can't cast the spell again until the next dawn."+ "\n\nSignet\tRarity\tSpells"+ "\nBear\tVery rare\tEnlarge/Reduce, Polymorph"+ "\nHart\tVery rare\tAura of Vitality, Mass Cure Wounds"+ "\nLion\tVery rare\tDestructive Wave, Fireball"+ "\nSerpent\tRare\tFear, Hex"+ "\nSongbird\tRare\tCharm Person, Hypnotic Pattern"+ "\nWolf\tVery rare\tFreedom of Movement, Pass without Trace", usages : 3, recovery : "dawn", additional : "each spell once", choices : ["Bear (very rare)", "Hart (very rare)", "Lion (very rare)", "Serpent (rare)", "Songbird (rare)", "Wolf (very rare)"], "bear (very rare)" : { name : "Sage's Signet (Bear)", rarity : "very rare", description : "This gilded ring with a beautiful bear engraving is imbued with powers of keen wisdom and foresight. While wearing this ring, I can cast Augury, Enlarge/Reduce, and Polymorph each once per dawn using my Intelligence as the spellcasting ability. Casting Augury using this ring only takes one action.", spellcastingAbility : 4, spellcastingBonus : [{ name : "Once per dawn", spells : ["augury", "enlarge/reduce", "polymorph"], selection : ["augury", "enlarge/reduce", "polymorph"], firstCol : "oncelr", times : 3 }], spellChanges : BoMT["sage's signet"] }, "hart (very rare)" : { name : "Sage's Signet (Hart)", rarity : "very rare", description : "This gilded ring with a beautiful hart engraving is imbued with powers of keen wisdom and foresight. While wearing this ring, I can cast Augury, Aura of Vitality, and Mass Cure Wounds each once per dawn using my Intelligence as the spellcasting ability. Casting Augury using this ring only takes one action.", spellcastingAbility : 4, spellcastingBonus : [{ name : "Once per dawn", spells : ["augury", "aura of vitality", "mass cure wounds"], selection : ["augury", "aura of vitality", "mass cure wounds"], firstCol : "oncelr", times : 3 }], spellChanges : BoMT["sage's signet"] }, "lion (very rare)" : { name : "Sage's Signet (Lion)", rarity : "very rare", description : "This gilded ring with a beautiful lion engraving is imbued with powers of keen wisdom and foresight. While wearing this ring, I can cast Augury, Destructive Wave, and Fireball each once per dawn using my Intelligence as the spellcasting ability. Casting Augury using this ring only takes one action.", spellcastingAbility : 4, spellcastingBonus : [{ name : "Once per dawn", spells : ["augury", "destructive wave", "fireball"], selection : ["augury", "destructive wave", "fireball"], firstCol : "oncelr", times : 3 }], spellChanges : BoMT["sage's signet"] }, "serpent (rare)" : { name : "Sage's Signet (Serpent)", rarity : "rare", description : "This gilded ring with a beautiful serpent engraving is imbued with powers of keen wisdom and foresight. While wearing this ring, I can cast Augury, Fear, and Hex each once per dawn using my Intelligence as the spellcasting ability. Casting Augury using this ring only takes one action.", spellcastingAbility : 4, spellcastingBonus : [{ name : "Once per dawn", spells : ["augury", "fear", "hex"], selection : ["augury", "fear", "hex"], firstCol : "oncelr", times : 3 }], spellChanges : BoMT["sage's signet"] }, "songbird (rare)" : { name : "Sage's Signet (Songbird)", rarity : "rare", description : "This gilded ring with a beautiful songbird engraving is imbued with powers of keen wisdom and foresight. While wearing this ring, I can cast Augury, Charm Person, and Hypnotic Pattern each once per dawn using my Intelligence as the spellcasting ability. Casting Augury using this ring only takes one action.", spellcastingAbility : 4, spellcastingBonus : [{ name : "Once per dawn", spells : ["augury", "charm person", "hypnotic pattern"], selection : ["augury", "charm person", "hypnotic pattern"], firstCol : "oncelr", times : 3 }], spellChanges : BoMT["sage's signet"] }, "wolf (very rare)" : { name : "Sage's Signet (Wolf)", rarity : "very rare", description : "This gilded ring with a beautiful wolf engraving is imbued with powers of keen wisdom and foresight. While wearing this ring, I can cast Augury, Freedom of Movement, and Pass without Trace each once per dawn using my Intelligence as the spellcasting ability. Casting Augury using this ring only takes one action.", spellcastingAbility : 4, spellcastingBonus : [{ name : "Once per dawn", spells : ["augury", "freedom of movement", "pass without trace"], selection : ["augury", "freedom of movement", "pass without trace"], firstCol : "oncelr", times : 3 }], spellChanges : BoMT["sage's signet"] } }; MagicItemsList["shield of the tortoise"] = { name : "Shield of the Tortoise", source : [["BoMT", 67]], // Chapter 9: Knight type : "shield", rarity : "uncommon", attunement : true, description : "This +1 shield curses me as soon as I attune to it. While I'm cursed by it, I can't discard it, I can't break my attunement to it, and I am sluggish. Sluggish means that my speed is halved and when I roll initiative, I always treat the roll on the d20 as a 1. I can't change my initiative by any means.", descriptionFull : "While you are wielding this shield, you gain a +1 bonus to AC. This bonus is in addition to the shield's normal bonus to AC."+ "\n " + toUni("Curse") + ". This item is cursed. Attuning to it extends the curse to you until you are targeted by a Remove Curse spell or similar magic. You cannot discard the shield, and remain attuned to it, as long as you are cursed. As long as you are cursed, you are sluggish. Your speed is halved. When you roll initiative, treat the roll on your d20 as a 1. You can't change your initiative by any means.", weight : 6, shieldAdd : ["Shield of the Tortoise", 3, 6], speed : { allModes : { bonus : "/2" } } }; MagicItemsList["shrieking greaves"] = { name : "Shrieking Greaves", source : [["BoMT", 174]], // Chapter 20: Flames type : "wondrous item", rarity : "rare", attunement : true, description : "These black leg guards have 3 charges, regaining 1d3 used charges daily at dawn. As a bonus action, I can use 1 charge to gain +30 ft walking speed and adv. on Dex saves for 1 minute. They are cursed, see Notes page. I have disadv. on saves vs. being frightened and they scream if I start my turn frightened.", descriptionLong : "These black leg guards are decorated with monstrous skulls screaming in terror. They have 3 charges, regaining 1d3 used charges daily at dawn. As a bonus action, I can use 1 charge to increase my walking speed by 30 ft, and gain advantage on Dexterity saves. These effects last for 1 minute. The greaves are cursed, and I can't remove or end my attunement to them. They give me disadvantage on saves against being frightened. When I start my turn frightened, they release an ear-piercing scream. I and all within 10 ft of me take 2d8 thunder damage and can make a DC 15 Constitution save to halve this damage.", descriptionFull : "Each of these black leg guards is decorated with a motif of monstrous skulls screaming in terror."+ "\n The greaves have 3 charges. While wearing these greaves, you can use a bonus action to expend 1 charge to increase your walking speed by 30 feet, and you have advantage on Dexterity saving throws. These effects last for 1 minute. The greaves regain 1d3 expended charges daily at dawn."+ "\n " + toUni("Curse") + ". " + BoMT.toDescrFull(BoMT["shrieking greaves"]), action : [["bonus action", ""]], usages : 3, recovery : "dawn", additional : "regains 1d3", toNotesPage : [{ name : "Shrieking Greaves Curse", note : BoMT.to1stPerson([BoMT["shrieking greaves"]]) }] }; MagicItemsList["skull helm"] = { name : "Skull Helm", source : [["BoMT", 38]], // Chapter 5: Gem type : "wondrous item", rarity : "very rare", attunement : true, description : "While wearing this skull-shaped helm, I have resistance to cold, poison, and necrotic damage. Additionally, I can cast Spirit of Death from it without requiring material components. Once I use the helm to cast the spell, it can't cast this spell again until the next dawn.", descriptionFull : "While wearing this skull-shaped helm, you have resistance to cold, poison, and necrotic damage."+ "\n Additionally, while wearing the helm, you can cast Spirit of Death from it without requiring material components. Once you use the helm to cast the spell, the helm can't cast this spell again until the next dawn.", dmgres : ["Cold", "Poison", "Necrotic"], usages : 1, recovery : "dawn", additional : "Spirit of Death", spellcastingBonus : [{ name : "Once per dawn", spells : ["spirit of death"], selection : ["spirit of death"], firstCol : "oncelr" }], spellChanges : { "spirit of death" : { components : "", compMaterial : "", description : "Summon a Reaper Spirit; obeys commands; takes turn after mine; disappears at 0 hp", changes : "While wearing the helmet, it requires no material components to cast Spirit of Death." } } }; MagicItemsList["sling of giant felling"] = { name : "Sling of Giant Felling", source : [["BoMT", 68]], // Chapter 9: Knight type : "weapon (sling)", rarity : "uncommon", description : "When I hit a creature with the Giant type with a ranged attack roll using this magic sling, the creature must succeed on a DC 18 Constitution saving throw or be knocked prone.", descriptionFull : "When you hit a Giant creature with a ranged attack roll using this magic sling, the creature must succeed on a DC 18 Constitution saving throw or have the prone condition.", weaponOptions : [{ baseWeapon : "sling", regExpSearch : /^(?=.*sling)(?=.*giant)(?=.*felling).*$/i, name : "Sling of Giant Felling", source : [["BoMT", 68]], description : "Ammunition; Giants: DC 18 Con save or prone", selectNow : true }] }; MagicItemsList["spindle of fate"] = { name : "Spindle of Fate", source : [["BoMT", 38]], // Chapter 5: Gem type : "wand", rarity : "legendary", attunement : true, description : "This wand has 6 charges, regains 1d6 at dawn. I can use 1 charge to add my Prof Bonus to my initiative after the roll. As an action, I can use 2 charges to invoke a creature's doom. As a reaction when a creature within 60 ft makes an attack or save, I can use 3 charges to change the outcome. See Notes page.", descriptionFull : "This wand is shaped like a drop spindle wrapped in red thread. The wand has 6 charges that can be used for the following properties:"+ "\n " + BoMT.toDescrFull(BoMT["spindle of fate"])+ "\n The wand regains 1d6 expended charges daily at dawn.", descriptionFull : BoMT.toDescrFull(BoMT["spindle of fate"]), action : [["action", " - Doom Foretold"], ["reaction", " - Twist of Fate"]], weight : 1, usages : 6, recovery : "dawn", additional : "regains 1d6", toNotesPage : [{ name : "Features", note : [ "This wand is shaped like a drop spindle wrapped in red thread. The wand has 6 charges, regaining 1d6 expended charges daily at dawn. The charges can be used for the following properties:"+ BoMT.to1stPerson(BoMT["spindle of fate"]) ] }] }; MagicItemsList["starshot crossbow"] = { name : "Starshot Crossbow", nameTest : "Starshot", source : [["BoMT", 38]], // Chapter 5: Gem type : "weapon (any crossbow)", rarity : "rare", attunement : true, description : "This black wooden crossbow has pearl inlays depicting three constellations. It has 3 charges, regaining 1d3 at dawn. It produces its own ammo that lasts until it hits or misses a target. As a bonus action, I can use 1 charge to tap and invoke one of its constellations, see Notes page for the options.", descriptionLong : "This crossbow of blackened wood has pearl inlays depicting three different constellations. It has 3 charges and regains 1d3 used charged daily at dawn. It produces its own ammo that lasts until it hits or misses a target. As a bonus action, I can use 1 charge to tap and invoke one of its constellations, see Notes for full text. Balance: next hit with the crossbow before my next turn ends heals me or another within 30 ft of me for 1d8+my Prof Bonus. Flames: until my next turn ends, the crossbow deals +2d8 fire damage. Rogue: until my next turn ends, I become invisible as well as anything I'm wearing or carrying.", descriptionFull : BoMT.toDescrFull(BoMT["starshot crossbow"]), action : [["bonus action", ""]], usages : 3, recovery : "dawn", additional : "regains 1d3", chooseGear : { type : "weapon", prefixOrSuffix : "suffix", excludeCheck : function (inObjKey, inObj) { var testRegex = /crossbow/i; return !testRegex.test(inObjKey) && (!inObj.baseWeapon || !testRegex.test(inObj.baseWeapon)); } }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && v.isRangedWeapon && /crossbow/i.test(v.baseWeaponName) && /Starshot/i.test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(;|,)? ?(loading|Counts as magical)/ig, ''); } }, 'If I include the word "Starshot" in the name of a crossbow, it will be treated as the magic weapon Starshot Crossbow. It produces its own ammunition, thus its loading property is removed.' ] }, toNotesPage : [{ name : "Features and Constellations", note : BoMT.to1stPerson(BoMT["starshot crossbow"]) }] }; MagicItemsList["stonemaker war pick"] = { name : "Stonemaker War Pick", source : [["BoMT", 68]], // Chapter 9: Knight type : "weapon (war pick)", rarity : "very rare", attunement : true, description : "This war pick adds +1 to attack and damage rolls. I can use it to cast Meld into Stone once per dawn. If I score a critical hit with it against a creature that has 100 HP or fewer, I can use 1 charge to have the target make a DC 15 Con save or be petrified for 8 hours. It has 1d6+1 charges that can't be replenished.", descriptionFull : "You gain a +1 bonus to attack and damage rolls made with this magic war pick. It has the following special properties:"+ "\n " + toUni("Meld into Stone") + ". You can cast the Meld into Stone spell from this war pick. Once this property is used, it can't be used again until the next dawn."+ "\n " + toUni("Petrification") + ". The war pick has 1d6 + 1 charges. If you score a critical hit against a creature that has fewer than 100 hit points, you can expend 1 charge from the war pick to have that creature make a DC 15 Constitution saving throw. On a failed save, the creature has the petrified condition for 8 hours. When the war pick has no charges remaining, it loses this property.", weight : 2, extraLimitedFeatures : [{ name : "Stonemaker War Pick - Meld into Stone", usages : 1, recovery : "dawn" }, { name : "Stonemaker War Pick - Petrification", usages : "1d6+1", recovery : "Never" }], spellcastingBonus : [{ name : "Once per dawn", spells : ["meld into stone"], selection : ["meld into stone"], firstCol : "oncelr" }], weaponOptions : [{ baseWeapon : "war pick", regExpSearch : /^(?=.*stonemaker)(((?=.*pick)(?=.*war))|((?!.*(heavy|great|light))(?=.*\bpicks?\b))).*$|\bkuwas?\b/i, name : "Stonemaker War Pick", source : [["BoMT", 68]], description : "Can petrify on critical hit, see item", modifiers : [1, 1], selectNow : true }] }; MagicItemsList["sun staff"] = { name : "Sun Staff", source : [["BoMT", 39]], // Chapter 5: Gem type : "staff", rarity : "rare", attunement : true, prerequisite : "Requires attunement by a cleric, druid, or wizard", prereqeval : function (v) { return classes.known.cleric || classes.known.druid || classes.known.wizard ? true : false; }, description : "This +1 quarterstaff deals +1d8 fire damage on an attack. I can use it as a spellcasting focus. Once per dawn when I cast a spell using a spell slot, I can reroll my Prof Bonus of fire or radiant damage dice. As a bonus action, I can toggle it glowing with sunlight: 15-ft radius bright light and dim light for another 15 ft.", descriptionFull : "Veins of sunstone run through this wooden staff. This staff can be wielded as a magic quarterstaff that grants a +1 bonus to attack and damage rolls made with it. When you hit with an attack roll using this staff, the target takes an extra 1d8 fire damage."+ "\n " + toUni("Solar Focus") + ". You can use the staff as a spellcasting focus. While holding the staff, you can reroll a number of damage dice up to your proficiency bonus when you use a spell slot to cast a spell that deals fire or radiant damage. You must use the new rolls. Once this property is used, it can't be used again until the next dawn."+ "\n " + toUni("Sunny Glow") + ". As a bonus action, you can cause the staff to glow with sunlight. While glowing, the staff sheds bright light in a 15-foot radius and dim light for an additional 15 feet. The light lasts until you use another bonus action to extinguish it.", weight : 4, action : [["bonus action", " (glow on/off)"]], usages : 1, recovery : "dawn", additional : "reroll damage", weaponOptions : [{ baseWeapon : "quarterstaff", regExpSearch : /^(?=.*sun)(?=.*staff).*$/i, name : "Sun Staff", source : [["BoMT", 39]], description : "Versatile (1d8); +1d8 fire damage", modifiers : [1, 1], selectNow : true }] }; MagicItemsList["sword of the planes"] = { name : "Sword of the Planes", nameTest : "of the Planes", source : [["BoMT", 68]], // Chapter 9: Knight type : "weapon (any sword)", rarity : "legendary", attunement : true, description : "This +3 weapon can tear the fabric of reality. As an action once per dawn, I can slice a rift to a location on another plane in an empty space within 5 ft of me. The rift can be up to 10 ft high and wide. Anything entering the rift is instantly transported. The DM determines where it goes exactly.", descriptionFull : "You gain a +3 bonus to attack and damage rolls made with this magic sword."+ "\n This sword can tear the fabric of reality, creating a temporary rift between planes. You can use your action to choose a different plane of existence from the one you're on and slice through an unoccupied space within 5 feet of yourself, creating a rift to that other plane. The rift can be up to 10 feet high and 10 feet wide, and it lasts for 1 minute. Once this property is used, it can't be used again until the next dawn."+ "\n You can specify a target destination, such as the City of Brass on the Elemental Plane of Fire or the palace of Dispater on the second layer of the Nine Hells, and the rift opens in or near that destination (DM's discretion). If you are trying to reach the City of Brass, for example, the rift might appear on the Street of Steel, before the Gate of Ashes, or facing the city from across the Sea of Fire, at the DM's discretion."+ "\n Anything that enters the rift is instantly transported to the other plane, appearing in the unoccupied space nearest to the rift.", usages : 1, recovery : "dawn", chooseGear : { type : "weapon", prefixOrSuffix : "prefix", descriptionChange : ["replace", "sword"], excludeCheck : function (inObjKey, inObj) { var testRegex = /sword|scimitar|rapier/i; return !testRegex.test(inObjKey) && (!inObj.baseWeapon || !testRegex.test(inObj.baseWeapon)); } }, calcChanges : { atkCalc : [ function (fields, v, output) { if (!v.theWea.isMagicWeapon && v.isMeleeWeapon && /sword|scimitar|rapier/i.test(v.baseWeaponName) && /of the Planes/i.test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; output.magic = v.thisWeapon[1] + 3; } }, 'If I include the words "of the Planes" in a the name of a sword, it will be treated as the magic weapon Sword of the Planes. It has +3 to hit and damage.' ] } }; MagicItemsList["telescopic transporter"] = { name : "Telescopic Transporter", source : [["BoMT", 105]], // Chapter 13: Star type : "wondrous item", rarity : "legendary", description : "This enormous telescope allows me to view distant celestial objects, including stars, Wildspace systems, and Astral Sea phenomena. With 1 hour of calibrating, I can use it to attempt to travel to whatever it is pointed at. With a DC 17 Arcana check me and 8 others teleport, otherwise a mishap, see Notes.", descriptionFull : BoMT.toDescrFull(BoMT["telescopic transporter"]), toNotesPage : [{ name : "Features", note : BoMT.to1stPerson([BoMT["telescopic transporter"]]) }] }; MagicItemsList["tidecaller trident"] = { name : "Tidecaller Trident", source : [["BoMT", 69]], // Chapter 9: Knight type : "weapon (trident)", rarity : "very rare", attunement : true, description : "This magic trident gives a +2 bonus to attack and damage made with it and advantage on attack rolls when used underwater. The trident has 3 charges, regaining 1d3 expended charges daily at dawn. I can expend these charges to cast spells (save DC 15): Control Water (1 charge) or Tsunami (3 charges).", descriptionFull : "You gain a +2 bonus to attack and damage rolls made with this magic trident. You also have advantage on attack rolls made with this weapon while underwater."+ "\n This trident has 3 charges. You can expend 1 charge to cast Control Water (save DC 15) from the trident or 3 charges to cast Tsunami (save DC 15) from it instead. The trident regains 1d3 expended charges daily at dawn.", weight : 4, usages : 3, recovery : "dawn", additional : "regains 1d3", weaponOptions : [{ baseWeapon : "trident", regExpSearch : /^(?=.*tidecaller)(?=.*trident).*$/i, name : "Tidecaller Trident", source : [["BoMT", 69]], description : "Thrown, versatile (1d8); Adv. when underwater", modifiers : [2, 2], selectNow : true }], fixedDC : 15, spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "1 charge", spells : ["control water"], selection : ["control water"], firstCol : 1 }, { name : "3 charges", spells : ["tsunami"], selection : ["tsunami"], firstCol : 3 }] }; MagicItemsList["voidwalker armor"] = { name : "Voidwalker Armor", source : [["BoMT", 39]], // Chapter 5: Gem type : "armor (studded leather)", rarity : "rare", attunement : true, description : "This black studded leather armor bears a red sheen. As a bonus action once per dawn, I can summon a projection of myself in an empty space within 30 ft. It's a translucent copy of me, immune to all damage and conditions, that I can make attacks and cast spells from. The projection disappears at the end of my turn.", descriptionFull : "This black studded leather armor bears a red sheen. While wearing this armor, you can use a bonus action to summon a projection of yourself in an unoccupied space within 30 feet of yourself. The projection is a translucent copy of you that has immunity to all damage and conditions, and you can make attacks and cast spells with a range other than self as if standing in the projection's space. The projection disappears at the end of your turn. Once you use this bonus action, it can't be used again until the next dawn."+ "\n " + toUni("Curse") + ". " + BoMT.toDescrFull(BoMT["voidwalker armor"]), weight : 13, usages : 1, recovery : "dawn", action : [["bonus action", ""]], armorOptions : [{ regExpSearch : /^(?=.*voidwalker)(?=.*armou?r).*$/i, name : "Voidwalker Armor", source : [["BoMT", 39]], type : "light", ac : 12, weight : 13, selectNow : true }], toNotesPage : [{ name : "Voidwalker Curse", note : BoMT.to1stPerson([BoMT["voidwalker armor"]]) }] }; MagicItemsList["warrior's passkey"] = { name : "Warrior's Passkey", source : [["BoMT", 39]], // Chapter 5: Gem type : "wondrous item", rarity : "rare", attunement : true, description : "This silver skeleton key is warm to the touch. I can use it to cast Knock while in its key form. As a bonus action, I can transform it into a magic +1 longsword that deals 1d10 force damage and I'm proficient with. The sword reverts back to a key if it leaves my grasp, I use a bonus action to do so, or my attunement ends.", descriptionFull : "This silver skeleton key is warm to the touch. While holding the key in its key form, you can use an action to cast the Knock spell from the key."+ "\n " + toUni("Transforming the Key") + ". While holding the key, you can use a bonus action to transform it into a magic longsword. You are considered proficient with the sword, and you have a +1 bonus to attack and damage rolls made with it. On a hit, the sword deals 1d10 force damage. The item remains in its sword form until it leaves your grasp or you use another bonus action to revert it to its key form."+ "\n If you end your attunement to the item while it's in its sword form, it automatically reverts to its key form.", action : [["bonus action", " (transform)"]], weaponOptions : [{ baseWeapon : "longsword", regExpSearch : /^(?=.*warrior)(?=.*passkey).*$/i, name : "Warrior's Passkey", source : [["BoMT", 39]], damage : [1, 10, "force"], modifiers : [1, 1], isAlwaysProf : true, description : "", weight : 0, selectNow : true }], spellcastingBonus : [{ name : "At will", spells : ["knock"], selection : ["knock"], firstCol : "atwill" }] }; MagicItemsList["weapon of throne's command"] = { name : "Weapon of Throne's Command", nameTest : "of Throne's Command", source : [["BoMT", 39]], // Chapter 5: Gem type : "weapon (any)", rarity : "very rare", attunement : true, description : "This +1 weapon grants me proficiency with Intimidation and Persuasion. It has 5 charges, regaining 1d4 at dawn. As a bonus action, I can expend charges to cast a spell from it with save DC 16: Command (1 charge), Zone of Truth (2), Compulsion (4), Banishment (4), or Dominate Person (5).", descriptionLong : "This weapon is bedecked in ornate gold filigree and deep-blue and maroon jewels. I gain a +1 bonus to attack and damage rolls made with this weapon. Additionally, I gain proficiency in the Intimidation and Persuasion skills if I don't already have it. The weapon has 5 charges, regaining 1d4 expended charges daily at dawn. As a bonus action, I can expend 1 or more of its charges to cast one of the following spells (save DC 16): Command (1 charge), Zone of Truth (2 charges), Compulsion (4 charges), Banishment (4 charges), or Dominate Person (5 charges).", descriptionFull : "This weapon is bedecked in ornate gold filigree and deep-blue and maroon jewels. You gain a +1 bonus to attack and damage rolls made with this weapon. Additionally, you gain proficiency in the Intimidation and Persuasion skills if you don't already have it."+ "\n " + toUni("Spellcasting") + ". The weapon has 5 charges. You can use a bonus action and expend 1 or more of its charges to cast one of the following spells (save DC 16): Command (1 charge), Zone of Truth (2 charges), Compulsion (4 charges), Banishment (4 charges), or Dominate Person (5 charges)."+ "\n The weapon regains 1d4 expended charges daily at dawn.", skills : ["Intimidation", "Persuasion"], chooseGear : { type : "weapon", prefixOrSuffix : "prefix", descriptionChange : ["replace", "weapon"] }, usages : 5, recovery : "dawn", additional : "regains 1d4", fixedDC : 16, spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "1 charge", spells : ["command"], selection : ["command"], firstCol : 1 }, { name : "2 charges", spells : ["zone of truth"], selection : ["zone of truth"], firstCol : 2 }, { name : "4 charges", spells : ["banishment", "compulsion"], selection : ["banishment", "compulsion"], firstCol : 4, times : 2 }, { name : "5 charges", spells : ["dominate person"], selection : ["dominate person"], firstCol : 5 }], calcChanges : { atkCalc : [ function (fields, v, output) { if (/of throne'?s? command/.test(v.WeaponTextName)) { output.magic = v.thisWeapon[1] + 1; } }, 'If I include the words "of Throne\'s Command" in a the name of a weapon, it will be treated as the magic weapon Weapon of Throne\'s Command. It adds a +1 bonus to attack and damage rolls.' ] }, spellChanges : { "command" : { time : "1 bns", changes : "Using the Weapon of Throne's Command, I can cast Command as a bonus action." }, "zone of truth" : { time : "1 bns", changes : "Using the Weapon of Throne's Command, I can cast Zone of Truth as a bonus action." }, "banishment" : { time : "1 bns", changes : "Using the Weapon of Throne's Command, I can cast Banishment as a bonus action." }, "compulsion" : { time : "1 bns", changes : "Using the Weapon of Throne's Command, I can cast Compulsion as a bonus action." }, "dominate person" : { time : "1 bns", changes : "Using the Weapon of Throne's Command, I can cast Dominate Person as a bonus action." } } }; MagicItemsList["winged ammunition"] = { name : "Winged Ammunition", nameTest : "Winged", source : [["BoMT", 69]], // Chapter 9: Knight type : "weapon (any ammunition)", rarity : "uncommon", description : "Ranged weapon attack rolls made with this magic ammunition ignore half and three-quarters cover. In addition, attacking at long range doesn't impose disadvantage on ranged weapon attack rolls made with this ammunition.", descriptionFull : "Ranged weapon attack rolls made with this ammunition ignore half and three-quarters cover. In addition, attacking at long range doesn't impose disadvantage on ranged weapon attack rolls made with this ammunition.", allowDuplicates : true, chooseGear : { type : "ammo", prefixOrSuffix : "suffix", descriptionChange : ["replace", "ammunition"], excludeCheck : function (inObjKey, inObj) { return /vials|flasks/i.test(inObj.icon); } } }; MagicItemsList["wraps of unarmed prowess"] = { name : "Wraps of Unarmed Prowess, +1, +2, or +3", nameTest : "Wraps of Unarmed Prowess", source : [["BoMT", 69]], // Chapter 9: Knight type : "wondrous item", description : "While wearing these cloth wraps, my unarmed strikes are considered magical for the purpose of overcoming immunity and resistance to nonmagical attacks, and I gain a bonus to their attack and damage rolls. The bonus is determined by rarity: uncommon (+1), rare (+2), or very rare (+3).", descriptionFull : "While you're wearing these cloth wraps, your unarmed strikes are considered magical for the purpose of overcoming immunity and resistance to nonmagical attacks and damage, and you gain a bonus to the attack and damage rolls of your unarmed strikes. The bonus is determined by the wraps' rarity: uncommon (+1), rare (+2), or very rare (+3).", choices : ["+1 Wraps of Unarmed Prowess (uncommon)", "+2 Wraps of Unarmed Prowess (rare)", "+3 Wraps of Unarmed Prowess (very rare)"], "+1 wraps of unarmed prowess (uncommon)" : { name : "Wraps of Unarmed Prowess +1", nameTest : "+1 Wraps of Unarmed Prowess", rarity : "uncommon", description : "While I'm wearing these cloth wraps, I gain a +1 bonus to the attack and damage rolls of my unarmed strikes. My unarmed strikes are considered magical for the purpose of overcoming immunity and resistance to nonmagical attacks and damage.", calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == "unarmed strike" && !/counts as( a)? magical/i.test(fields.Description)) { fields.Description += (fields.Description ? '; ' : '') + 'Counts as magical'; }; }, "My unarmed strikes get a +1 bonus to To Hit and Damage and count as magical for overcoming resistances and immunities.", 700 ], atkCalc : [ function (fields, v, output) { if (v.baseWeaponName == "unarmed strike") { output.magic += 1; } }, '' ] } }, "+2 wraps of unarmed prowess (rare)" : { name : "Wraps of Unarmed Prowess +2", nameTest : "+2 Wraps of Unarmed Prowess", rarity : "rare", description : "While I'm wearing these cloth wraps, I gain a +2 bonus to the attack and damage rolls of my unarmed strikes. My unarmed strikes are considered magical for the purpose of overcoming immunity and resistance to nonmagical attacks and damage.", calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == "unarmed strike" && !/counts as( a)? magical/i.test(fields.Description)) { fields.Description += (fields.Description ? '; ' : '') + 'Counts as magical'; }; }, "My unarmed strikes get a +2 bonus to To Hit and Damage and count as magical for overcoming resistances and immunities.", 700 ], atkCalc : [ function (fields, v, output) { if (v.baseWeaponName == "unarmed strike") { output.magic += 2; } }, '' ] } }, "+3 wraps of unarmed prowess (very rare)" : { name : "Wraps of Unarmed Prowess +3", nameTest : "+3 Wraps of Unarmed Prowess", rarity : "very rare", description : "While I'm wearing these cloth wraps, I gain a +3 bonus to the attack and damage rolls of my unarmed strikes. My unarmed strikes are considered magical for the purpose of overcoming immunity and resistance to nonmagical attacks and damage.", calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == "unarmed strike" && !/counts as( a)? magical/i.test(fields.Description)) { fields.Description += (fields.Description ? '; ' : '') + 'Counts as magical'; }; }, "My unarmed strikes get a +3 bonus to To Hit and Damage and count as magical for overcoming resistances and immunities.", 700 ], atkCalc : [ function (fields, v, output) { if (v.baseWeaponName == "unarmed strike") { output.magic += 3; } }, '' ] } } }; SpellsList["antagonize"] = { name : "Antagonize", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["BoMT", 50]], level : 3, school : "Ench", time : "1 a", range : "30 ft", components : "V,S,M", compMaterial : "A playing card depicting a rogue", duration : "Instantaneous", save : "Wis", description : "1 crea 4d4+1d4/SL Psychic dmg, use rea to melee atk vs. crea I see (or dis. atk 1 rnd); save half, no rea", descriptionShorter : "1 crea 4d4+1d4/SL Psychic dmg, rea melee atk vs. crea I see (or dis. atk 1 rnd); save half, no rea", descriptionFull : "You whisper magical words that antagonize one creature of your choice within range. The target must make a Wisdom saving throw. On a failed save, the target takes 4d4 psychic damage and must immediately use its reaction to make a melee attack against another creature of your choice that you can see. If the target can't make this attack (for example, because there is no one within its reach or because its reaction is unavailable), the target instead has disadvantage on the next attack roll it makes before the start of your next turn. On a successful save, the target takes half as much damage only."+ AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d4 for each slot level above 3rd." }; SpellsList["spirit of death"] = { name : "Spirit of Death", classes : ["sorcerer", "warlock", "wizard"], source : [["BoMT", 50]], level : 4, school : "Necro", time : "1 a", range : "60 ft", components : "V,S,M\u0192", compMaterial : "A gilded playing card worth at least 400 gp and depicting an avatar of death", duration : "Conc, 1 h", description : "Summon a Reaper Spirit; obeys commands; takes turn after mine; disappears at 0 hp (400gp)", descriptionFull : "You call forth a spirit that embodies death. The spirit manifests in an unoccupied space you can see within range and uses the reaper spirit stat block. The spirit disappears when it is reduced to 0 hit points or when the spell ends."+ "\n The spirit is an ally to you and your companions. In combat, the spirit shares your initiative count and takes its turn immediately after yours. It obeys your verbal commands (no action required by you). If you don't issue the spirit any commands, it takes the Dodge action and uses its movement to avoid danger."+ AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, use the higher level wherever the spell's level appears in the reaper spirit stat block." }; SpellsList["spray of cards"] = { name : "Spray of Cards", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["BoMT", 50]], level : 2, school : "Conj", time : "1 a", range : "S:15" + (typePF ? "-" : "") + "ft cone", components : "V,S,M", compMaterial : "A deck of cards", duration : "Instantaneous", save : "Dex", description : "All in area 2d10+1d10/SL Force dmg and blinded until their next turn ends; save halves \u0026 not blinded", descriptionShorter : "All in area 2d10+1d10/SL Force dmg, blinded till their next turn ends; save half \u0026 not blinded", descriptionFull : "You spray a 15-foot cone of spectral cards. Each creature in that area must make a Dexterity saving throw. On a failed save, a creature takes 2d10 force damage and has the blinded condition until the end of its next turn. On a successful save, a creature takes half as much damage only."+ AtHigherLevels + "When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d10 for each slot level above 2nd." }; // pub_20240521_VEoR.js // This file adds the magic item from the Vecna: Eve of Ruin adventure to MPMB's Character Record Sheet // Define the source SourceList["VEoR"] = { name : "Vecna: Eve of Ruin", abbreviation : "VEoR", group : "Adventure Books", url : "https://dndstore.wizards.com/us/en/product/924703/vecna-eve-of-ruin-digital-plus-physical-bundle", date : "2024/05/21" }; MagicItemsList["chime of exile"] = { name : "Chime of Exile", source : [["VEoR", 46]], type : "wondrous item", rarity : "very rare", description : "This silver chime is engraved with delicate magic sigils. As an action once per dawn, I can hold the chime and cast the Banishment spell (save DC 20). If the target of the spell has 50 hit points or fewer, it automatically fails its saving throw.", descriptionFull : "This silver chime is engraved with delicate magic sigils. While holding the chime, you can use an action to cast the Banishment spell (spell save DC 20). If the target of the spell has 50 hit points or fewer, it automatically fails its saving throw. Once the chime has been used to cast the spell, it can't be used this way again until the next dawn.", usages : 1, recovery : "dawn", additional : "Banishment", fixedDC : 20, spellcastingBonus : [{ name : "Once per dawn", spells : ["banishment"], selection : ["banishment"], firstCol : "oncelr" }] }; // pub_20240716_QftIS.js // This file adds the futuristic and magic item from the Quests from the Infinite Staircase adventure anthology to MPMB's Character Record Sheet // Define the source SourceList["QftIS"] = { name : "Quests from the Infinite Staircase", abbreviation : "QftIS", group : "Adventure Books", url : "https://dndstore.wizards.com/us/en/product/928653/quests-from-the-infinite-staircase-digital-plus-physical-bundle", date : "2024/07/16" }; try { var QftIS = { toDescrFull : BoMT.toDescrFull, to1stPerson : BoMT.to1stPerson }; } catch (err) { } QftIS.replaceEnergyCellPlain = ">>Replacing the Energy Cell<<. While the >>THING<< has charges remaining, its energy cell can't be removed. Once the >>THING<< has 0 charges, you can replace the energy cell with a new cell by using an action or a bonus action." QftIS.replaceEnergyCell = "\n " + QftIS.replaceEnergyCellPlain.replace(">>Replacing the Energy Cell<<", toUni("Replacing the Energy Cell")); // Futuristic items added as magic items, but set to be excluded by default MagicItemsList["antigravity belt"] = { name : "Antigravity Belt", source : [["QftIS", 192]], type : "futuristic item", // not really magic items, so these use their own category rarity : "priceless", // as per QftIS page 192 defaultExcluded : true, description : "This belt has 10 charges per energy cell, which can be replaced as a (bonus) action if empty. As a bonus action, I can use charges to activate it for 1 min per charge, causing me to float in place. As a bonus action and when activating it, I can move 20 ft vertically. I can push off to move horizontally at half my speed.", descriptionLong : "Metal tubes ring the lower edge of this wide belt powered by an energy cell stored in a metal case near the buckle. It has 10 charges per energy cell, which can be replaced as a (bonus) action when empty. As a bonus action, I can expend charges to activate the belt for 1 min per charge. While active, I float in place. As a bonus action and as part of activating it, I can ascend or descend up to 20 ft vertically. I can move myself horizontally by being pushed or towed or by scooting myself along a surface at half my walking speed. I can deactivate it as a bonus action; If I'm still levitating when it deactivates, I fall.", descriptionFull : "Metal tubes ring the lower edge of this wide belt. It is powered by an energy cell stored in a metal case near the buckle. Placing a full energy cell in the belt gives the belt 10 charges."+ "\n " + toUni("Activating the Belt") + ". As a bonus action, you can expend any number of the belt's charges to activate it; the belt remains active for 1 minute per charge expended. You can use a bonus action to deactivate the belt early, but doing so doesn't recover any expended charges."+ "\n When you activate the belt, and as a bonus action while it remains active, you can rise or descend vertically up to 20 feet. You remain floating in place while the property is active, and you can move yourself horizontally by being pushed or towed or by scooting yourself along a surface, such as a wall or ceiling, at half your walking speed. If you are still levitating when the belt deactivates, you fall."+ QftIS.replaceEnergyCell.replace(/>>THING<>THING<>THING<>THING<>THING<>Activating the Armor<<. As an action, you can expend any number of the armor's charges to activate it; the armor remains active for 1 hour per charge expended. You can use a bonus action to deactivate the armor early, but doing so doesn't recover any expended charges.", "While the armor is active, you gain the following benefits:"+ "\n \u2022 >>Augmented Physicality<<. You have advantage on Strength checks, and your carrying capacity is doubled."+ "\n \u2022 >>Environmental Adaptation<<. The armor seals airtight and provides its own atmosphere. You can breathe normally in any environment and withstand extreme temperatures, and you're unaffected by harmful gases, as well as contact and inhaled poisons."+ "\n \u2022 >>Force Field<<. When you would take damage, you can use your reaction to expend 1 of the armor's charges to deploy a defensive force field. Roll 3d10 and reduce the damage taken by the total rolled."+ "\n \u2022 >>Propulsion<<. As a bonus action, you can expend 1 of the armor's charges to gain a flying speed equal to your walking speed for 1 minute. If you're airborne when this duration ends, you fall.", QftIS.replaceEnergyCellPlain.replace(/>>THING<>Destroy Devotion<<. Once per turn when you hit a creature with this weapon, you can expend 1 of its charges to attempt to render the target powerless. The target must succeed on a DC 17 Constitution saving throw or have the paralyzed condition until the start of your next turn. Celestials have disadvantage on the save."+ "\n \u2022 >>Faith Hunter<<. While holding the sword, you can use an action to expend 1 or more of its charges to cast one of the following spells from it: Detect Evil and Good (1 charge), Fly (2 charges), or True Seeing (3 charges).", ">>Sentience<<. Heretic is a sentient, chaotic evil weapon with an Intelligence of 17, a Wisdom of 17, and a Charisma of 15. It has hearing and darkvision out to a range of 120 feet.", "The weapon can speak, read, and understand Common and Giant, and it can communicate with its wielder telepathically. Its voice is soft and deep but rises in a wild furor when it's aware Celestials or worshipers of good-aligned deities are present. While you are attuned to it, Heretic also understands every language you know.", ">>Personality<<. Heretic craves the destruction of good-aligned gods and their supporters. The blade is condescending and snobby, especially in the company of priests and other pious folk, at whom it often directs sneering comments. When Heretic identifies its quarry, it erupts in a frenzied need for violence." ]; MagicItemsList["heretic"] = { name : "Heretic", source : [["QftIS", 192]], type : "weapon (longsword)", rarity : "legendary", description : "This sentient longsword adds +3 to hit and damage and has 6 charges, regaining 1d4+1 at dawn. Once per turn on a hit with it, I can use 1 charge to force a DC 17 Con save or paralyze until my next turn. As an action, I can cast spells from it: Detect Evil and Good (1 charge), Fly (2 charges), or True Seeing (3 charges).", descriptionFull : QftIS.toDescrFull(QftIS.heretic), attunement : true, prerequisite : "Requires attunement by a non-good creature", prereqeval : function(v) { return !/good/i.test(What("Alignment")); }, weight : 3, weaponOptions : [{ baseWeapon : "longsword", regExpSearch : /heretic/i, name : "Heretic", source : [["QftIS", 192]], description : "Versatile (1d10); On hit, 1 charge to paralyze (DC 17 Con save)", modifiers : [3, 3], selectNow : true }], toNotesPage : [{ name : "Features", note : QftIS.to1stPerson(QftIS.heretic) + "\n\n" + sentientItemConflictTxt }], usages : 6, recovery : "dawn", additional : "regains 1d4+1", spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "1 charge", spells : ["detect evil and good"], selection : ["detect evil and good"], firstCol : 1 }, { name : "2 charges", spells : ["fly"], selection : ["fly"], firstCol : 2 }, { name : "3 charges", spells : ["true seeing"], selection : ["true seeing"], firstCol : 2 }] } QftIS.staffOfRuling = [ "An ornate carving of a serpent adorned with a coursing river spirals down the length of this redand-gold staff. While you're holding it, you can use an action to produce one of the following effects. Once the staff has produced an effect, it can't produce that effect again until the next dawn.", ">>Orb of Lightning<<. You create a Small orb of lightning in an unoccupied space you can see within 60 feet of yourself. You concentrate on this orb as if concentrating on a spell. As a bonus action, you can move the orb up to 20 feet in any direction.", "When your concentration ends, or when a creature enters the orb's space or starts its turn there, the orb detonates in a 20-foot-radius sphere. Each creature in that area must make a DC 15 Dexterity saving throw, taking lightning damage equal to the total accumulated damage on a failed save, or half as much damage on a successful one; the orb's base damage is 6d6, and if at the end of your turn the orb hasn't detonated, its damage increases by 2d6, to a maximum of 10d6.", ">>Staff to Snake<<. You throw the staff to an unoccupied space within 10 feet of you, and the staff becomes a giant poisonous snake. The snake is under your control and shares your initiative count, but it takes its turn immediately after yours.", "On your turn, you can mentally command the snake if it is within 60 feet of you and you don't have the incapacitated condition. You decide what action the snake takes and where it moves during its turn, or you can issue it a general command, such as to attack your enemies or guard a location.", "If you use a bonus action to speak the command word again, or if the snake is reduced to 0 hit points, the snake reverts to staff form in its current space.", ">>Thunderclap<<. You point the staff skyward, producing a fearsome thunderclap. Each creature of your choice in a 30-foot-radius sphere centered on you must succeed on a DC 15 Constitution saving throw or have the deafened and frightened conditions until the end of your next turn." ]; MagicItemsList["staff of ruling"] = { name : "Staff of Ruling", source : [["QftIS", 192]], type : "staff", rarity : "rare", description : "As an action, I can use this redand-gold staff with an ornate serpent carving to produce one of several effects: Orb of Lightning, Staff to Snake, or Thunderclap. Once the staff has produced an effect, it can't produce that effect again until the next dawn. See Notes page for the effect descriptions.", descriptionFull : QftIS.toDescrFull(QftIS.staffOfRuling), attunement : true, weight : 4, toNotesPage : [{ name : "Features", note : QftIS.to1stPerson(QftIS.staffOfRuling) }], action : [["action", ""]], extraLimitedFeatures : [{ name : "Staff of Ruling: Orb of Lightning", usages : 1, recovery : "dawn" }, { name : "Staff of Ruling: Staff to Snake", usages : 1, recovery : "dawn" }, { name : "Staff of Ruling: Thunderclap", usages : 1, recovery : "dawn" }] } // pub_al_20190917_ALPG-v9.1.js // This file adds the winged aasimar/tiefling from the Adventurers League Player's Guide v9.1: Inglorious Redemption to MPMB's Character Record Sheet // Define the source SourceList["ALPGs9"] = { name : "AL Player's Guide v9.1: Inglorious Redemption", abbreviation : "ALPGs9", group : "Adventurers League", url : "https://www.dropbox.com/s/8r1cwjrk6n2rzyo/AL-Players-Guide-v9.1-Forgotten-Realms.pdf?dl=1", // used to be https://www.dmsguild.com/product/208178 date : "2019/09/17", defaultExcluded : true }; /* Add this source to the Aasimar from VGtM and the Winged Tiefling variant from SCAG Also, add a winged variant to the three Aasimar subraces from VGtM */ [ ["fallen aasimar", false], ["protector aasimar", false], ["scourge aasimar", false], ["tiefling-winged", true], ["feral tiefling-winged", true] ].forEach(function (rac) { var rObj = rac[1] ? RaceSubList[rac[0]] : RaceList[rac[0]]; if (!rObj) return; rObj.source = (isArray(rObj.source[0]) ? rObj.source : [rObj.source]).concat([["ALPGs9", 6]]); if (rac[0].indexOf("aasimar") !== -1) { AddRacialVariant(rac[0], "winged", { regExpSearch : /wing/i, name : "Winged " + rObj.name, source : [["ALPGs9", 6]], plural : "Winged " + rObj.plural, speed : { walk : { spd : 30, enc : 20 }, fly : { spd : 30, enc : 0 } }, trait : "Winged " + rObj.trait.replace(/\)(\r|\n|.)+/, ")\n\nHealing Hands:\n As an action, once per long rest, I can touch to heal for my level in HP.\nWings:\n Once I'm 5th level, I sprout feathered wings from my shoulder blades that give me a flying speed of 30 feet when I'm not wearing heavy armor."), features : { "healing hands" : { name : "Healing Hands", usages : 1, minlevel : 1, recovery : "long rest", additional : levels.map(function (n) { return n + " HP"; }), action : [["action", ""]] } }, abilitySave : "", spellcastingAbility : "", spellcastingBonus : "" }); } }); // ua_20150202_Eberron.js // This file adds the content from the Unearthed Arcana: Eberron article to MPMB's Character Record Sheet // Define the source SourceList["UA:E"] = { name : "Unearthed Arcana: Eberron", abbreviation : "UA:E", group : "Unearthed Arcana", campaignSetting : "Eberron", url : "https://media.wizards.com/2015/downloads/dnd/UA_Eberron_v1.1.pdf", date : "2015/02/02" }; // Adds three races: // Changeling RaceList["changeling-ua"] = { regExpSearch : /changeling/i, name : "Changeling", source : [["UA:E", 1]], plural : "Changelings", size : 3, skills : ["Deception"], speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", 2], age : " reach adulthood in their early teens and live around 80 years", height : " stand between 5 and 6 feet tall (5'1\" + 2d4\")", weight : " weigh around 140 lb (115 + 2d4 \xD7 2d4 lb)", heightMetric : " stand between 1,5 to over 1,8 metres tall (155 + 5d4 cm)", weightMetric : " weigh around 65 kg (52 + 5d4 \xD7 4d4 / 10 kg)", scores : [0, 1, 0, 0, 0, 1], trait : "Changeling (+1 Dexterity, +1 Charisma)\nShapechanger:\n As an action, I can polymorph into any humanoid of my size that I have seen, or back into my true form.\n However, my equipment does not change with me.\n If I die, I revert to my natural appearance.", action : ['action', 'Polymorph'] }; // Warforged RaceList["warforged-ua"] = { regExpSearch : /warforged/i, name : "Warforged", source : [["UA:E", 3]], plural : "Warforged", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", 1], savetxt : { immune : ["disease"] }, age : " are created as adults and will only start to show signs of physical deterioration after 150 years, but have no further aging effects", height : " stand between 6 and 7 feet tall (5'10\" + 2d6\")", weight : " weigh around 300 lb (270 + 2d6 \xD7 4 lb)", heightMetric : " stand between 1,8 and 2,1 metres tall (178 + 5d6 cm)", weightMetric : " weigh around 135 kg (125 + 5d6 \xD7 8 / 10 kg)", scores : [1, 0, 1, 0, 0, 0], trait : "Warforged (+1 Strength, +1 Constitution)\nLiving Construct:\n Even though I was constructed, I am a living creature. I am immune to disease. I do not need to eat or breathe, but I can ingest food and drink if I wish.\n Instead of sleeping, I enter an inactive state for 4 hours each day. I do not dream in this state; I am fully aware of my surroundings and notice approaching enemies and other events as normal. I still need 8 hours for a long rest.", extraAC : { name : "Composite Plating", mod : 1, text : "I gain a +1 bonus to AC." } }; // Shifter and its 6 subraces RaceList["shifter-ua"] = { regExpSearch : /shifter/i, name : "Shifter", source : [["UA:E", 2]], plural : "Shifters", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Sylvan"], vision : [["Darkvision", 60]], age : " reach adulthood at the end of their teens and live around 100 years", height : " range from under 5 to almost 6 feet tall (4'6\" + 2d8\")", weight : " weigh around 135 lb (90 + 2d8 \xD7 2d4 lb)", heightMetric : " range from under 1,5 to 1,8 metres tall (4'6\" + 5d8 cm)", weightMetric : " weigh around 65 kg (40 + 5d8 \xD7 4d4 / 10 kg)", scorestxt : "+1 Dexterity and +1 to other ability score depending on type of shifter", scores : [0, 1, 0, 0, 0, 0], trait : "Shifter (+1 Dexterity and +1 to other ability score depending on type of shifter)\n Use the \"Racial Options\" button to select type of shifter.\nShifting:\n On my turn, I can shift as a bonus action. Shifting lasts for 1 minute or until I end it on my turn as a bonus action. I must finish a short rest before I can shift again.\n While shifted, I gain temporary hit points equal to my level + my Constitution modifier (minimum of 1) and another bonus depending on the type of shifter.", features : { "shift" : { name : "Shift", minlevel : 1, usages : 1, recovery : "short rest", action : [["bonus action", ""]] } } }; AddRacialVariant("shifter-ua", "beasthide", { regExpSearch : /beasthide/i, name : "Beasthide shifter", source : [["UA:E", 2]], plural : "Beasthide shifters", scorestxt : "", scores : [0, 1, 1, 0, 0, 0], trait : "Beasthide Shifter (+1 Dexterity, +1 Constitution)\nShifting:\n On my turn, I can shift as a bonus action. Shifting lasts for 1 minute or until I end it on my turn as a bonus action. I must finish a short rest before I can shift again.\n While shifted, I gain temporary hit points equal to my level + my Constitution modifier (minimum of 1) and I gain a +1 bonus to my AC." }); AddRacialVariant("shifter-ua", "cliffwalk", { regExpSearch : /cliffwalk/i, name : "Cliffwalk shifter", source : [["UA:E", 2]], plural : "Cliffwalk shifters", scorestxt : "", scores : [0, 2, 0, 0, 0, 0], trait : "Cliffwalk Shifter (+2 Dexterity)\nShifting:\n On my turn, I can shift as a bonus action. Shifting lasts for 1 minute or until I end it on my turn as a bonus action. I must finish a short rest before I can shift again.\n While shifted, I gain temporary hit points equal to my level + my Constitution modifier (minimum of 1) and I gain a climb speed of 30 feet." }); AddRacialVariant("shifter-ua", "longstride", { regExpSearch : /longstride/i, name : "Longstride shifter", source : [["UA:E", 2]], plural : "Longstride shifters", scorestxt : "", scores : [0, 2, 0, 0, 0, 0], trait : "Longstride Shifter (+2 Dexterity)\nShifting:\n On my turn, I can shift as a bonus action. Shifting lasts for 1 minute or until I end it on my turn as a bonus action. I must finish a short rest before I can shift again.\n While shifted, I gain temporary hit points equal to my level + my Constitution modifier (minimum of 1) and I can use the Dash action as a bonus action." }); AddRacialVariant("shifter-ua", "longtooth", { regExpSearch : /(longtooth|longteeth)/i, name : "Longtooth shifter", source : [["UA:E", 2]], plural : "Longtooth shifters", weaponOptions : [{ regExpSearch : /\blongtooth\b/i, name : "Longtooth", source : [["UA:E", 2]], ability : 1, type : "Natural", damage : [1, 6, "piercing"], range : "Melee", description : "Only while shifted; Target up to my size is grappled", abilitytodamage : true, selectNow : true }], scorestxt : "", scores : [1, 1, 0, 0, 0, 0], trait : "Longtooth Shifter (+1 Strength, +1 Dexterity)\nShifting: On my turn, I can shift as a bonus action. Shifting lasts for 1 minute or until I end it on my turn as a bonus action. I must finish a short rest before I can shift again. While shifted, I gain temporary hit points equal to my level + my Constitution modifier (minimum of 1) and, as an action, I can make can make a bite attack. This is a melee weapon attack that uses Strength and deals 1d6 piercing damage. If this attack hits a target that is my size or smaller, the target is also grappled." }); AddRacialVariant("shifter-ua", "razorclaw", { regExpSearch : /razorclaw/i, name : "Razorclaw shifter", source : [["UA:E", 2]], plural : "Razorclaw shifters", weaponOptions : [{ baseWeapon : "unarmed strike", regExpSearch : /\brazorclaw\b/i, name : "Razorclaw", source : [["UA:E", 2]], damage : [1, "", "slashing"], description : "Only while shifted, use instead of unarmed strike: Can use as bonus action; Finesse", selectNow : true }], scorestxt : "", scores : [0, 2, 0, 0, 0, 0], trait : "Razorclaw Shifter (+2 Dexterity)\nShifting:\n On my turn, I can shift as a bonus action. Shifting lasts for 1 minute or until I end it on my turn as a bonus action. I must finish a short rest before I can shift again.\n While shifted, I gain temporary hit points equal to my level + my Constitution modifier (minimum of 1) and, as a bonus action, I can make an unarmed strike that can use my Dexterity for the attack roll and damage, dealing slashing damage." }); AddRacialVariant("shifter-ua", "wildhunt", { regExpSearch : /wildhunt/i, name : "Wildhunt shifter", source : [["UA:E", 3]], plural : "Wildhunt shifters", scorestxt : "", scores : [0, 1, 0, 0, 1, 0], trait : "Wildhunt Shifter (+1 Dexterity, +1 Wisdom)\nShifting:\n On my turn, I can shift as a bonus action. Shifting lasts for 1 minute or until I end it on my turn as a bonus action. I must finish a short rest before I can shift again.\n While shifted, I gain temporary hit points equal to my level + my Constitution modifier (minimum of 1) and I gain advantage on all Wisdom-based checks and saving throws." }); // 12 variants of the Dragonmark feat FeatsList["dragonmark-ua"] = { name : "Dragonmark", source : [["UA:E", 6]], description : "Select the type of dragonmark using the little square button in this feat line.", choices : ["Detection", "Finding", "Handling", "Healing", "Hospitality", "Making", "Passage", "Scribing", "Sentinel", "Shadow", "Storm", "Warding"], "detection" : { descriptionFull : "Your have the magical mark of Detection, the dragonmark of House Medani, and are a member of that house.\n You gain the ability to innately cast spells and cantrips, using Wisdom as your spellcasting ability. You cast each spell at its lowest level. Once you cast a given spell this way, you must finish a long rest before you can cast it innately again. You must still expend any material components. Your dragonmark confers the following benefits:\n " + toUni("Least Dragonmark") + ". When you first take this feat, you gain the least dragonmark. You learn the following spells: Detect Magic, Mage Hand\n " + toUni("Lesser Dragonmark") + ". At 5th level and higher, your mark becomes more potent, improving to lesser dragonmark. You learn the following spell: Detect Thoughts\n " + toUni("Greater Dragonmark") + ". At 9th level and higher, your mark's power increases again, becoming a greater dragonmark. You learn the following spell: Clairvoyance", description : "I learn the Mage Hand cantrip. I can also cast Detect Magic, Detect Thoughts (from 5th level onwards), and Clairvoyance (from 9th level onwards), each once per long rest. Wisdom is my spellcasting ability for these.", spellcastingBonus : [{ name : "Dragonmark", spellcastingAbility : 5, spells : ["mage hand", "detect magic", "detect thoughts", "clairvoyance"], selection : ["mage hand", "detect magic", "detect thoughts", "clairvoyance"], times : [2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4], firstCol : 'oncelr' }] }, "finding" : { descriptionFull : "Your have the magical mark of Finding, the dragonmark of House Tharashk, and are a member of that house.\n You gain the ability to innately cast spells and cantrips, using Wisdom as your spellcasting ability. You cast each spell at its lowest level. Once you cast a given spell this way, you must finish a long rest before you can cast it innately again. You must still expend any material components. Your dragonmark confers the following benefits:\n " + toUni("Least Dragonmark") + ". When you first take this feat, you gain the least dragonmark. You learn the following spells: Identify, Mage Hand\n " + toUni("Lesser Dragonmark") + ". At 5th level and higher, your mark becomes more potent, improving to lesser dragonmark. You learn the following spell: Locate Object\n " + toUni("Greater Dragonmark") + ". At 9th level and higher, your mark's power increases again, becoming a greater dragonmark. You learn the following spell: Clairvoyance", description : "I learn the Mage Hand cantrip. I can also cast Identify, Locate Object (from 5th level onwards), and Clairvoyance (from 9th level onwards), each once per long rest. Wisdom is my spellcasting ability for these.", spellcastingBonus : [{ name : "Dragonmark", spellcastingAbility : 5, spells : ["mage hand", "identify", "locate object", "clairvoyance"], selection : ["mage hand", "identify", "locate object", "clairvoyance"], times : [2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4], firstCol : 'oncelr' }] }, "handling" : { descriptionFull : "Your have the magical mark of Handling, the dragonmark of House Vadalis, and are a member of that house.\n You gain the ability to innately cast spells and cantrips, using Wisdom as your spellcasting ability. You cast each spell at its lowest level. Once you cast a given spell this way, you must finish a long rest before you can cast it innately again. You must still expend any material components. Your dragonmark confers the following benefits:\n " + toUni("Least Dragonmark") + ". When you first take this feat, you gain the least dragonmark. You learn the following spells: Druidcraft, Speak with Animals\n " + toUni("Lesser Dragonmark") + ". At 5th level and higher, your mark becomes more potent, improving to lesser dragonmark. You learn the following spell: Beast Sense\n " + toUni("Greater Dragonmark") + ". At 9th level and higher, your mark's power increases again, becoming a greater dragonmark. You learn the following spell: Conjure Animals", description : "I learn the Druidcraft cantrip. I can also cast Speak with Animals, Beast Sense (from 5th level onwards), and Conjure Animals (from 9th level onwards), each once per long rest. Wisdom is my spellcasting ability for these.", spellcastingBonus : [{ name : "Dragonmark", spellcastingAbility : 5, spells : ["druidcraft", "speak with animals", "beast sense", "conjure animals"], selection : ["druidcraft", "speak with animals", "beast sense", "conjure animals"], times : [2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4], firstCol : 'oncelr' }] }, "healing" : { descriptionFull : "Your have the magical mark of Healing, the dragonmark of House Jorasco, and are a member of that house.\n You gain the ability to innately cast spells and cantrips, using Wisdom as your spellcasting ability. You cast each spell at its lowest level. Once you cast a given spell this way, you must finish a long rest before you can cast it innately again. You must still expend any material components. Your dragonmark confers the following benefits:\n " + toUni("Least Dragonmark") + ". When you first take this feat, you gain the least dragonmark. You learn the following spells: Cure Wounds, Spare the Dying\n " + toUni("Lesser Dragonmark") + ". At 5th level and higher, your mark becomes more potent, improving to lesser dragonmark. You learn the following spell: Lesser Restoration\n " + toUni("Greater Dragonmark") + ". At 9th level and higher, your mark's power increases again, becoming a greater dragonmark. You learn the following spell: Revivify", description : "I learn the Spare the Dying cantrip. I can also cast Cure Wounds, Lesser Restoration (from 5th level onwards), and Revivify (from 9th level onwards), each once per long rest. Wisdom is my spellcasting ability for these.", spellcastingBonus : [{ name : "Dragonmark", spellcastingAbility : 5, spells : ["spare the dying", "cure wounds", "lesser restoration", "revivify"], selection : ["spare the dying", "cure wounds", "lesser restoration", "revivify"], times : [2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4], firstCol : 'oncelr' }] }, "hospitality" : { descriptionFull : "Your have the magical mark of Hospitality, the dragonmark of House Ghallanda, and are a member of that house.\n You gain the ability to innately cast spells and cantrips, using Charisma as your spellcasting ability. You cast each spell at its lowest level. Once you cast a given spell this way, you must finish a long rest before you can cast it innately again. You must still expend any material components. Your dragonmark confers the following benefits:\n " + toUni("Least Dragonmark") + ". When you first take this feat, you gain the least dragonmark. You learn the following spells: Friends, Unseen Servant\n " + toUni("Lesser Dragonmark") + ". At 5th level and higher, your mark becomes more potent, improving to lesser dragonmark. You learn the following spell: Rope Trick\n " + toUni("Greater Dragonmark") + ". At 9th level and higher, your mark's power increases again, becoming a greater dragonmark. You learn the following spell: Leomund's Tiny Hut", description : "I learn the Friends cantrip. I can also cast Unseen Servant, Rope Trick (from 5th level onwards), and Leomund's Tiny Hut (from 9th level onwards), each once per long rest. Charisma is my spellcasting ability for these.", spellcastingBonus : [{ name : "Dragonmark", spellcastingAbility : 6, spells : ["friends", "unseen servant", "rope trick", "leomund's tiny hut"], selection : ["friends", "unseen servant", "rope trick", "leomund's tiny hut"], times : [2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4], firstCol : 'oncelr' }] }, "making" : { descriptionFull : "Your have the magical mark of Making, the dragonmark of House Cannith, and are a member of that house.\n You gain the ability to innately cast spells and cantrips, using Intelligence as your spellcasting ability. You cast each spell at its lowest level. Once you cast a given spell this way, you must finish a long rest before you can cast it innately again. You must still expend any material components. Your dragonmark confers the following benefits:\n " + toUni("Least Dragonmark") + ". When you first take this feat, you gain the least dragonmark. You learn the following spells: Identify, Mending\n " + toUni("Lesser Dragonmark") + ". At 5th level and higher, your mark becomes more potent, improving to lesser dragonmark. You learn the following spell: Magic Weapon\n " + toUni("Greater Dragonmark") + ". At 9th level and higher, your mark's power increases again, becoming a greater dragonmark. You learn the following spell: Fabricate", description : "I learn the Mending cantrip. I can also cast Identify, Magic Weapon (from 5th level onwards), and Fabricate (from 9th level onwards), each once per long rest. Intelligence is my spellcasting ability for these.", spellcastingBonus : [{ name : "Dragonmark", spellcastingAbility : 4, spells : ["mending", "identify", "magic weapon", "fabricate"], selection : ["mending", "identify", "magic weapon", "fabricate"], times : [2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4], firstCol : 'oncelr' }] }, "passage" : { descriptionFull : "Your have the magical mark of Passage, the dragonmark of House Orien, and are a member of that house.\n You gain the ability to innately cast spells and cantrips, using Intelligence as your spellcasting ability. You cast each spell at its lowest level. Once you cast a given spell this way, you must finish a long rest before you can cast it innately again. You must still expend any material components. Your dragonmark confers the following benefits:\n " + toUni("Least Dragonmark") + ". When you first take this feat, you gain the least dragonmark. You learn the following spells: Expeditious Retreat, Light\n " + toUni("Lesser Dragonmark") + ". At 5th level and higher, your mark becomes more potent, improving to lesser dragonmark. You learn the following spell: Misty Step\n " + toUni("Greater Dragonmark") + ". At 9th level and higher, your mark's power increases again, becoming a greater dragonmark. You learn the following spell: Teleportation Circle", description : "I learn the Light cantrip. I can also cast Expeditious Retreat, Misty Step (from 5th level onwards), and Teleportation Circle (from 9th level onwards), each once per long rest. Intelligence is my spellcasting ability for these.", spellcastingBonus : [{ name : "Dragonmark", spellcastingAbility : 4, spells : ["light", "expeditious retreat", "misty step", "teleportation circle"], selection : ["light", "expeditious retreat", "misty step", "teleportation Circle"], times : [2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4], firstCol : 'oncelr' }] }, "scribing" : { descriptionFull : "Your have the magical mark of Scribing, the dragonmark of House Sivis, and are a member of that house.\n You gain the ability to innately cast spells and cantrips, using Intelligence as your spellcasting ability. You cast each spell at its lowest level. Once you cast a given spell this way, you must finish a long rest before you can cast it innately again. You must still expend any material components. Your dragonmark confers the following benefits:\n " + toUni("Least Dragonmark") + ". When you first take this feat, you gain the least dragonmark. You learn the following spells: Comprehend Languages, Message\n " + toUni("Lesser Dragonmark") + ". At 5th level and higher, your mark becomes more potent, improving to lesser dragonmark. You learn the following spell: Sending\n " + toUni("Greater Dragonmark") + ". At 9th level and higher, your mark's power increases again, becoming a greater dragonmark. You learn the following spell: Tongues", description : "I learn the Message cantrip. I can also cast Comprehend Languages, Sending (from 5th level onwards), and Tongues (from 9th level onwards), each once per long rest. Intelligence is my spellcasting ability for these.", spellcastingBonus : [{ name : "Dragonmark", spellcastingAbility : 4, spells : ["message", "comprehend languages", "sending", "tongues"], selection : ["message", "comprehend languages", "sending", "tongues"], times : [2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4], firstCol : 'oncelr' }] }, "sentinel" : { descriptionFull : "Your have the magical mark of Sentinel, the dragonmark of House Deneith, and are a member of that house.\n You gain the ability to innately cast spells and cantrips, using Wisdom as your spellcasting ability. You cast each spell at its lowest level. Once you cast a given spell this way, you must finish a long rest before you can cast it innately again. You must still expend any material components. Your dragonmark confers the following benefits:\n " + toUni("Least Dragonmark") + ". When you first take this feat, you gain the least dragonmark. You learn the following spells: Blade Ward, Compelled Duel\n " + toUni("Lesser Dragonmark") + ". At 5th level and higher, your mark becomes more potent, improving to lesser dragonmark. You learn the following spell: Blur\n " + toUni("Greater Dragonmark") + ". At 9th level and higher, your mark's power increases again, becoming a greater dragonmark. You learn the following spell: Protection from Energy", description : "I learn the Blade Ward cantrip. I can also cast Compelled Duel, Blur (from 5th level onwards), and Protection from Energy (from 9th level onwards), each once per long rest. Wisdom is my spellcasting ability for these.", spellcastingBonus : [{ name : "Dragonmark", spellcastingAbility : 5, spells : ["blade ward", "compelled duel", "blur", "protection from energy"], selection : ["blade ward", "compelled duel", "blur", "protection from energy"], times : [2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4], firstCol : 'oncelr' }] }, "shadow" : { descriptionFull : "Your have the magical mark of Shadow, the dragonmark of House Phiarlan and House Thuranni, and are a member of one of those houses.\n You gain the ability to innately cast spells and cantrips, using Charisma as your spellcasting ability. You cast each spell at its lowest level. Once you cast a given spell this way, you must finish a long rest before you can cast it innately again. You must still expend any material components. Your dragonmark confers the following benefits:\n " + toUni("Least Dragonmark") + ". When you first take this feat, you gain the least dragonmark. You learn the following spells: Dancing Lights, Disguise Self\n " + toUni("Lesser Dragonmark") + ". At 5th level and higher, your mark becomes more potent, improving to lesser dragonmark. You learn the following spell: Darkness\n " + toUni("Greater Dragonmark") + ". At 9th level and higher, your mark's power increases again, becoming a greater dragonmark. You learn the following spell: Nondetection", description : "I learn the Dancing Lights cantrip. I can also cast Disguise Self, Darkness (from 5th level onwards), and Nondetection (from 9th level onwards), each once per long rest. Charisma is my spellcasting ability for these.", spellcastingBonus : [{ name : "Dragonmark", spellcastingAbility : 6, spells : ["dancing lights", "disguise self", "darkness", "nondetection"], selection : ["dancing lights", "disguise self", "darkness", "nondetection"], times : [2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4], firstCol : 'oncelr' }] }, "storm" : { descriptionFull : "Your have the magical mark of Storm, the dragonmark of House Lyrander, and are a member of that house.\n You gain the ability to innately cast spells and cantrips, using Intelligence as your spellcasting ability. You cast each spell at its lowest level. Once you cast a given spell this way, you must finish a long rest before you can cast it innately again. You must still expend any material components. Your dragonmark confers the following benefits:\n " + toUni("Least Dragonmark") + ". When you first take this feat, you gain the least dragonmark. You learn the following spells: Fog Cloud, Shocking Grasp\n " + toUni("Lesser Dragonmark") + ". At 5th level and higher, your mark becomes more potent, improving to lesser dragonmark. You learn the following spell: Gust of Wind\n " + toUni("Greater Dragonmark") + ". At 9th level and higher, your mark's power increases again, becoming a greater dragonmark. You learn the following spell: Sleet Storm", description : "I learn the Shocking Grasp cantrip. I can also cast Fog Cloud, Gust of Wind (from 5th level onwards), and Sleet Storm (from 9th level onwards), each once per long rest. Intelligence is my spellcasting ability for these.", spellcastingBonus : [{ name : "Dragonmark", spellcastingAbility : 4, spells : ["shocking grasp", "fog cloud", "gust of wind", "sleet storm"], selection : ["shocking grasp", "fog cloud", "gust of wind", "sleet storm"], times : [2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4], firstCol : 'oncelr' }] }, "warding" : { descriptionFull : "Your have the magical mark of Warding, the dragonmark of House Kundarak, and are a member of that house.\n You gain the ability to innately cast spells and cantrips, using Intelligence as your spellcasting ability. You cast each spell at its lowest level. Once you cast a given spell this way, you must finish a long rest before you can cast it innately again. You must still expend any material components. Your dragonmark confers the following benefits:\n " + toUni("Least Dragonmark") + ". When you first take this feat, you gain the least dragonmark. You learn the following spells: Alarm, Resistance\n " + toUni("Lesser Dragonmark") + ". At 5th level and higher, your mark becomes more potent, improving to lesser dragonmark. You learn the following spell: Arcane Lock\n " + toUni("Greater Dragonmark") + ". At 9th level and higher, your mark's power increases again, becoming a greater dragonmark. You learn the following spell: Magic Circle", description : "I learn the Resistance cantrip. I can also cast Alarm, Arcane Lock (from 5th level onwards), and Magic Circle (from 9th level onwards), each once per long rest. Intelligence is my spellcasting ability for these.", spellcastingBonus : [{ name : "Dragonmark", spellcastingAbility : 4, spells : ["resistance", "alarm", "arcane lock", "magic circle"], selection : ["resistance", "alarm", "arcane lock", "magic circle"], times : [2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4], firstCol : 'oncelr' }] } } // Adds a subclass for the Wizard, called "Tradition of the Artificer" AddSubClass("wizard", "artificer-ua", { regExpSearch : /^((?=.*(wizard|mage|magus))(?=.*artificer))|(?=.*infuser).*$/i, subname : "Tradition of the Artificer", source : [["UA:E", 3]], fullname : "Wizard (Artificer)", features : { "subclassfeature2" : { name : "Infuse Potions", source : [["UA:E", 3]], minlevel : 2, description: desc([ "I can produce magic potions if I spend 10 minutes and expend a spell slot", "I can not regain the spell slot until the potion is consumed or a week has passed", ]), additional : ["", "3 potions", "3 potions", "3 potions", "3 potions", "3 potions", "3 potions", "3 potions", "3 potions", "4 potions", "4 potions", "4 potions", "4 potions", "4 potions", "4 potions", "4 potions", "4 potions", "4 potions", "4 potions", "4 potions"] }, "subclassfeature2.1" : { name : "Infuse Scrolls", source : [["UA:E", 4]], minlevel : 2, description: desc([ "I can produce a scroll after a short rest if I spend 10 minutes and my Arcane Recovery", "I subtract the spell's level from the levels worth of slots I regain using Arcane Recovery", "This reduction applies till the scroll is used and I finish a long rest", ]), additional : ["", "1 scroll", "1 scroll", "1 scroll", "1 scroll", "1 scroll", "1 scroll", "1 scroll", "1 scroll", "2 scrolls", "2 scrolls", "2 scrolls", "2 scrolls", "2 scrolls", "2 scrolls", "2 scrolls", "2 scrolls", "2 scrolls", "2 scrolls", "2 scrolls"] }, "subclassfeature6" : { name : "Infuse Weapons and Armor", source : [["UA:E", 4]], minlevel : 6, description: desc([ "I can spend 10 minutes to produce a magic weapon, armor, a shield, or ammunition", "The item retains its magic for 8 hours and the spell slot I expend is:", "2nd: +1 ammunition (20 pieces), 3rd: +1 weapon or +1 shield, 4th: +1 armor,", "5th: +2 weapon or +2 ammunition (20 pieces), 6th: +3 armor.", ]), additional : ["", "", "", "", "", "1 weapon or armor", "1 weapon or armor", "1 weapon or armor", "1 weapon or armor", "2 weapons or armor", "2 weapons or armor", "2 weapons or armor", "2 weapons or armor", "2 weapons or armor", "2 weapons or armor", "2 weapons or armor", "2 weapons or armor", "2 weapons or armor", "2 weapons or armor", "2 weapons or armor"] }, "subclassfeature10" : { name : "Superior Artificer", source : [["UA:E", 4]], minlevel : 10, description: desc("I can create one additional scroll, potion, weapon, or armor when I use Infuse") }, "subclassfeature14" : { name : "Master Artificer", source : [["UA:E", 4]], minlevel : 14, description: desc([ "I can produce a variety of magic items from Tables A and B from the DMG", "It takes 1 week for such an item and I cannot do it again for a month", ]), usages : 1, recovery : "Month" } } }); // ua_20150406_Modifying-Classes.js // This file adds the content from the Unearthed Arcana: Modifying Classes article to MPMB's Character Record Sheet // Define the source SourceList["UA:MC"] = { name : "Unearthed Arcana: Modifying Classes", abbreviation : "UA:MC", group : "Unearthed Arcana", url : "https://media.wizards.com/2015/downloads/dnd/UA3_ClassDesignVariants.pdf", date : "2015/04/06" }; // Also needs the PHB source, as the spell-less ranger uses stuff from there if (!SourceList.P) { SourceList.P = { name : "Player's Handbook", abbreviation : "PHB", group : "Primary Sources", url : "https://dnd.wizards.com/products/rpg_playershandbook", date : "2014/08/19" }; }; // Adds a subclass for the Sorcerer, called "Favored Soul", but only have it added at the very end, after all cleric subclasses have been defined RunFunctionAtEnd(function() { var SorcererSubclassFavoredSoul = AddSubClass("sorcerer", "favored soul-ua", { regExpSearch : /^(?=.*favou?red)(?=.*soul).*$/i, subname : "Favored Soul", source : [["UA:MC", 8]], fullname : "Favored Soul", attacks : [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], features : { "subclassfeature1" : { name : "Bonus Proficiencies", source : [["UA:MC", 9]], minlevel : 1, description: desc("I gain proficiency with light armor, medium armor, shields, and simple weapons"), armorProfs : [true, true, false, true], weaponProfs : [true, false] }, "subclassfeature1.1" : { name : "Chosen of the Gods", source : [["UA:MC", 8]], minlevel : 1, description: desc([ 'Choose a Cleric Domain using the "Choose Feature" button above', "I add the chosen domain's spells to my known spells, when they are of a level I can cast", "These count as sorcerer spells, but do not count against the number of spells I can know", ]), choices : [] }, "subclassfeature14" : { name : "Divine Wings", source : [["UA:MC", 8]], minlevel : 14, description: desc([ "As a bonus action, I sprout feathered or bat wings from my back unless blocked by armor", "I gain a fly speed equal to my current speed until I dismiss the wings as a bonus action", ]), action : [["bonus action", " (start/stop)"]], speed : { fly : { spd : "walk", enc : "walk" } } }, "subclassfeature18" : { name : "Power of the Chosen", source : [["UA:MC", 8]], minlevel : 18, description: desc([ "When I cast a spell I gained from the Chosen of the Gods class feature, I heal myself", "I regain a number of HP equal to my Charisma modifier (minimum 1) + the spell's level", ]), } } }); // Adding all cleric domain spells to the options of the first level ability "Chosen of the Gods" var FSfeat = ClassSubList[SorcererSubclassFavoredSoul].features["subclassfeature1.1"]; for (var i = 0; i < ClassList.cleric.subclasses[1].length; i++) { var cDomain = ClassSubList[ClassList.cleric.subclasses[1][i]]; if (cDomain && cDomain.spellcastingExtra) { var eSpells = newObj(cDomain.spellcastingExtra); eSpells[100] = "AddToKnown"; var dSource = cDomain.source ? cDomain.source : cDomain.features["subclassfeature1"] && cDomain.features["subclassfeature1"].source ? cDomain.features["subclassfeature1"].source :[["UA:MC", 8]]; var suffix = 1; var entryDoNm = cDomain.subname; while (FSfeat.choices.indexOf(entryDoNm) !== -1) { suffix += 1; entryDoNm = cDomain.subname + " (" + suffix + ")"; }; FSfeat.choices.push(entryDoNm); FSfeat[entryDoNm.toLowerCase()] = { name : "Chosen of the Gods: " + cDomain.subname, source : dSource, spellcastingExtra : eSpells, description: desc([ "I add the " + cDomain.subname.toLowerCase() + " spells to my known spells, if they are of a level I can cast", "These count as sorcerer spells, but do not count against the number of spells I can know", ]), }; }; }; }); // A version of the ranger, the spell-less ranger ClassList["spell-less ranger"] = { regExpSearch : /^(?=.*spell.?less)((?=.*(ranger|strider))|((?=.*(nature|natural))(?=.*(knight|fighter|warrior|warlord|trooper)))).*$/i, name : "Spell-less Ranger", source : [["UA:MC", 6]], primaryAbility : "Dexterity and Wisdom", abilitySave : 1, abilitySaveAlt : 2, prereqs : "Dexterity 13 and Wisdom 13", improvements : [0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5, 5], die : 10, saves : ["Str", "Dex"], skillstxt : { primary : "Choose three from Animal Handling, Athletics, Insight, Investigation, Nature, Perception, Stealth, and Survival", secondary : "Choose one from Animal Handling, Athletics, Insight, Investigation, Nature, Perception, Stealth, and Survival" }, armorProfs : { primary : [true, true, false, true], secondary : [true, true, false, true] }, weaponProfs : { primary : [true, true], secondary : [true, true] }, equipment : "Spell-less Ranger starting equipment:\n \u2022 Scale mail -or- leather armor;\n \u2022 Two shortswords -or- two simple melee weapons;\n \u2022 A dungeoneer's pack -or- an explorer's pack;\n \u2022 A longbow and a quiver of 20 arrows.\n\nAlternatively, choose 5d4 \xD7 10 gp worth of starting equipment instead of both the class' and the background's starting equipment.", subclasses : ["Ranger Archetype", []], subclassGainedLevel : 3, attacks : [1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], features : { "favored enemy" : ClassList.ranger.features["favored enemy"], "natural explorer" : ClassList.ranger.features["natural explorer"], "combat superiority" : { name : "Combat Superiority", source : [["UA:MC", 6]], minlevel : 2, description: desc([ "I gain a number of superiority dice that I can use to fuel special Maneuvers", "I regain all superiority dice after a short rest", ]), additional : "d8", usages : levels.map( function(n) { return n < 2 ? "" : n < 9 ? 4 : n < 17 ? 5 : 6; }), recovery : "short rest" }, "combat maneuvers" : { name : "Combat Maneuvers", source : [["UA:MC", 6]], minlevel : 2, description: desc([ 'Use the "Choose Feature" button above to add a Maneuver to the third page', "I can use a Maneuver by expending a superiority die (only one Maneuver per attack)", ]), additional : levels.map( function(n) { if (n < 2) return ""; return (n < 5 ? 2 : n < 9 ? 3 : n < 13 ? 4 : n < 17 ? 5 : 6) + " maneuvers known"; }), extraname : "Maneuver", extrachoices : ["Commander's Strike", "Disarming Attack", "Distracting Strike", "Evasive Footwork", "Feinting Attack", "Goading Attack", "Lunging Attack", "Maneuvering Attack", "Menacing Attack", "Parry", "Precision Attack", "Pushing Attack", "Rally", "Riposte", "Sweeping Attack", "Trip Attack"], extraTimes : levels.map(function (n) { return n < 2 ? 0 : n < 5 ? 2 : n < 9 ? 3 : n < 13 ? 4 : n < 17 ? 5 : 6; }), "commander's strike" : { name : "Commander's Strike", source : [["P", 74]], description: desc([ "I forgo one attack of my Attack action to use a bonus action to direct an ally I see/hear", "The ally can use a reaction to make an attack, adding the superiority die to damage", ]), action : [["bonus action", " (with Attack action)"]] }, "disarming attack" : { name : "Disarming Attack", source : [["P", 74]], description: desc([ "Use after hitting a creature; I add the superiority die to my attack's damage", "Target makes a Strength save or drops a held object of my choice to its feet", ]), }, "distracting strike" : { name : "Distracting Strike", source : [["P", 74]], description: desc([ "Use after hitting a creature; I add the superiority die to my attack's damage", "The next attack of an ally before my next turn has adv. against the creature", ]), }, "evasive footwork" : { name : "Evasive Footwork", source : [["P", 74]], description: desc("Use when moving; I add the superiority die to my AC until I stop moving") }, "feinting attack" : { name : "Feinting Attack", source : [["P", 74]], description: desc([ "As a bonus action, I can feint to gain adv. on my next attack against a target within 5 ft", "If the attack hits, I add the superiority die to my attack's damage", ]), action : [["bonus action", ""]] }, "goading attack" : { name : "Goading Attack", source : [["P", 74]], description: desc([ "Use after hitting a creature; I add the superiority die to my attack's damage", "Target makes a Wis save or has disadv. vs. other targets until the end of my next turn", ]), }, "lunging attack" : { name : "Lunging Attack", source : [["P", 74]], description: desc([ "I can spend a superiority die to increase the reach of a melee weapon attack by 5 ft", "If the attack hits, I add the superiority die to my attack's damage", ]), }, "maneuvering attack" : { name : "Maneuvering Attack", source : [["P", 74]], description: desc([ "Use after hitting a creature; I add the superiority die to my attack's damage", "Ally can use reaction to move half speed without opportunity attack from the target", ]), }, "menacing attack" : { name : "Menacing Attack", source : [["P", 74]], description: desc([ "Use after hitting a creature; I add the superiority die to my attack's damage", "Target makes a Wisdom save or is frightened of me until the end of my next turn", ]), }, "parry" : { name : "Parry", source : [["P", 74]], description: desc("When damaged in melee, I can use a reaction to reduce it by superiority die + Dex mod"), action : [["reaction", " (when damaged in melee)"]] }, "precision attack" : { name : "Precision Attack", source : [["P", 74]], description: desc("I add the superiority die to my attack roll, either before or after rolling") }, "pushing attack" : { name : "Pushing Attack", source : [["P", 74]], description: desc([ "Use after hitting a creature; I add the superiority die to the attack's damage", "If target is Large or smaller, it must make a Strength save or be pushed up to 15 ft away", ]), }, "rally" : { name : "Rally", source : [["P", 74]], description: desc("Ally that can see/hear me gets temporary HP equal to superiority die + Charisma mod"), action : [["bonus action", ""]] }, "riposte" : { name : "Riposte", source : [["P", 74]], description: desc([ "When missed in melee, I can use my reaction to make one melee attack vs. the attacker", "If the attack hits, I add the superiority die to my attack's damage", ]), action : [["reaction", " (after missed in melee)"]] }, "sweeping attack" : { name : "Sweeping Attack", source : [["P", 74]], description: desc([ "Use after hitting a creature and a second creature is within 5 ft of the first", "If the original attack roll hits this second creature, it takes the superiority die in damage", ]), }, "trip attack" : { name : "Trip Attack", source : [["P", 74]], description: desc([ "Use after hitting a creature; I add the superiority die to the attack's damage", "If target is Large or smaller, it must make a Strength save or be knocked prone", ]), } }, "fighting style" : ClassList.ranger.features["fighting style"], "poultices" : { name : "Poultices", source : [["UA:MC", 7]], minlevel : 3, description : desc([ "In 1 hour, I can create a number of poultices equal to my Wisdom modifier (min 1)", "The number of poultices I can have with me can't exceed my Wisdom modifier (min 1)", "I can applying a poultice in 1 minute, healing a creature; Poultices last for 24 hours" ]), additional : levels.map( function(n) { if (n < 3) return ""; return "heals " + Math.ceil(n/2) + "d6"; }) }, "primeval awareness" : { name : "Primeval Awareness", source : [["UA:MC", 6]], minlevel : 3, description : desc([ "As an action, I can focus my awareness for 1 min, once per short rest", "Out to 1 mile (6 in favored terrain), I sense if certain types of creatures are present", "These types are: aberration, celestial, dragon, elemental, fey, fiend, and undead" ]), action : [["action", ""]], usages : 1, recovery : "short rest" }, "subclassfeature3" : { name : "Ranger Archetype", source : [["UA:MC", 6]], minlevel : 3, description: desc([ 'Choose a Ranger Archetype you strive to emulate and put it in the "Class" field', "Choose either Spell-less Beast Master or Spell-less Hunter", ]), }, "land's stride" : ClassList.ranger.features["land's stride"], "natural antivenom" : { name : "Natural Antivenom", source : [["UA:MC", 7]], minlevel : 9, description : desc([ "I have advantage on saves vs. poison and resistance to poison damage", "When I use a poultice, in addition to healing, I cure one poison effect on the creature" ]), savetxt : { adv_vs : ["poison"] }, dmgres : ["Poison"] }, "hide in plain sight" : ClassList.ranger.features["land's stride"], "call natural allies" : { name : "Call Natural Allies", source : [["UA:MC", 7]], minlevel : 13, description : desc([ "While in an area that is my Favored Terrain, I can call on beasts within 1 mile to help", "The DM determines the beasts: 1\xD7CR 2, 2\xD7CR 1, 4\xD7CR 1/2, or 8\xD7CR 1/4", "They will fight alongside me, are friendly to me and my allies, and help up to 1 hour", "After I use these feature, I can't use it in the same general area again for 24 hours" ]) }, "vanish" : ClassList.ranger.features["vanish"], "relentless" : { name : "Relentless", source : [["UA:MC", 7]], minlevel : 17, description: desc("I regain one superiority die if I have no more remaining when I roll initiative") }, "feral senses" : ClassList.ranger.features["feral senses"], "foe slayer" : ClassList.ranger.features["foe slayer"] } }; // Create the Hunter subclass for the spell-less ranger var UAMC_SLR_Hunter = newObj(ClassSubList["ranger-hunter"]); UAMC_SLR_Hunter.source = ["UA:MC", 6]; delete UAMC_SLR_Hunter.fullname; UAMC_SLR_Hunter.regExpSearch = /^(?=.*spell.?less)(?!.*(monster|barbarian|bard|cleric|druid|fighter|monk|paladin|rogue|sorcerer|warlock|wizard))(?=.*(hunter|huntress|hunts(wo)?m(e|a)n)).*$/i; AddSubClass("spell-less ranger", "hunter-ua", UAMC_SLR_Hunter); // Create the Beast Master subclass for the spell-less ranger if (ClassSubList["ranger-beast master"]) { var UAMC_SLR_Beast_Master = newObj(ClassSubList["ranger-beast master"]); UAMC_SLR_Beast_Master.source = ["UA:MC", 6]; delete UAMC_SLR_Beast_Master.fullname; UAMC_SLR_Beast_Master.regExpSearch = /^(?=.*spell.?less)(?=.*(animal|beast))((?=.*(master|ranger|strider))|((?=.*(nature|natural|green))(?=.*(knight|fighter|warrior|warlord|trooper)))).*$/i; UAMC_SLR_Beast_Master.features["subclassfeature15"] = { name : "Beastly Coordination", source : [["UA:MC", 7]], minlevel : 15, description: desc("My companion can, as a reaction, halve an attack's damage from an attacker that I see") }; AddSubClass("spell-less ranger", "beast master-ua", UAMC_SLR_Beast_Master); }; // ua_20150504_Waterborne-Adventures.js // This file adds the content from the Unearthed Arcana: Waterborne Adventures article to MPMB's Character Record Sheet // Define the source SourceList["UA:WA"] = { name : "Unearthed Arcana: Waterborne Adventures", abbreviation : "UA:WA", group : "Unearthed Arcana", url : "https://media.wizards.com/2015/downloads/dnd/UA_Waterborne_v3.pdf", date : "2015/05/04" }; // New Fighting Style AddFightingStyle(["fighter", "ranger", "paladin"], "Mariner", { // Still valid 2021-09-21 name : "Mariner Fighting Style", source : [["UA:WA", 3]], description: desc([ "While not wearing heavy armor or using a shield, I gain +1 AC and swim/climb speed", "The swimming and climbing speeds are equal to my current walking speed", ]), speed : { climb : { spd : "walk", enc : "walk" }, swim : { spd : "walk", enc : "walk" } }, extraAC : { mod : 1, text : "I gain a +1 bonus to AC while I'm not wearing heavy armor and not using a shield.", stopeval : function (v) { return v.heavyArmor || v.usingShield; } } }); // Add the Minotaur (Krynn) race and its three variants RaceList["minotaur-ua"] = { regExpSearch : /minotaur/i, name : "Minotaur", source : [["UA:WA", 1]], plural : "Minotaurs", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common"], toolProfs : ["Navigator's tools", "Vehicles (water)"], weaponOptions : [{ regExpSearch : /\bhorns?\b/i, name : "Horns", source : [["UA:WA", 1]], ability : 1, type : "Natural", damage : [1, 10, "piercing"], range : "Melee", description : "Advantage on all checks made to shove a creature, but not to avoid being shoved myself", abilitytodamage : true, selectNow : true }], age : " reach adulthood around age 17 and live up to 150 years", height : " are well over 6 feet tall", weight : " weigh around 300 lb", heightMetric : " are well over 1,8 metres tall", weightMetric : " weigh around 135 kg", scorestxt : "+1 Strength, and either +1 Intelligence, +1 Wisdom, or another +1 Strength", scores : [1, 0, 0, 0, 0, 0], trait : "Minotaur (+1 Strength, and either +1 Int, Wis, or Str) use \"Racial Options\" button\nHorns: I am proficient with my horns, a 1d10 piercing damage melee weapon that grant me advantage on shoving a creature, but not to avoid being shoved myself.\nGoring Rush: When taking a Dash action, I can make a horns attack as a bonus action.\nHammering Horns: When taking a melee Attack action, I can attempt to shove with my horns as a bonus action. I cannot use this to knock a creature prone.\nLabyrinthine Recall: I can perfectly recall any path I have travelled.", features : { "goring rush" : { name : "Goring Rush", minlevel : 1, action : [["bonus action", " (with Dash)"]] }, "hammering horns" : { name : "Hammering Horns", minlevel : 1, action : [["bonus action", " (after hit)"]] } } }; AddRacialVariant("minotaur-ua", "cunning", { regExpSearch : /(cunning|wisdom)/i, name : "Minotaur [Cunning]", source : [["UA:WA", 2]], scorestxt : "", scores : [1, 0, 0, 0, 1, 0], trait : "Minotaur [cunning] (+1 Strength, +1 Wisdom)\nHorns: I am proficient with my horns, a 1d10 piercing damage melee weapon that grant me advantage on shoving a creature, but not to avoid being shoved myself.\nGoring Rush: When taking a Dash action, I can make a horns attack as a bonus action.\nHammering Horns: When taking a melee Attack action, I can attempt to shove with my horns as a bonus action. I cannot use this to knock a creature prone.\nLabyrinthine Recall: I can perfectly recall any path I have travelled." }); AddRacialVariant("minotaur-ua", "intellect", { regExpSearch : /(intellect|intelligence)/i, name : "Minotaur [Intellect]", source : [["UA:WA", 2]], scorestxt : "", scores : [1, 0, 0, 1, 0, 0], trait : "Minotaur [intellect] (+1 Strength, +1 Intelligence)\nHorns: I am proficient with my horns, a 1d10 piercing damage melee weapon that grant me advantage on shoving a creature, but not to avoid being shoved myself.\nGoring Rush: When taking a Dash action, I can make a horns attack as a bonus action.\nHammering Horns: When taking a melee Attack action, I can attempt to shove with my horns as a bonus action. I cannot use this to knock a creature prone.\nLabyrinthine Recall: I can perfectly recall any path I have travelled." }); AddRacialVariant("minotaur-ua", "strength", { regExpSearch : /(strength|strong|\bmight\b)/i, name : "Minotaur [Strength]", source : [["UA:WA", 2]], scorestxt : "", scores : [1, 0, 0, 0, 0, 0], trait : "Minotaur [strength] (+2 Strength)\nHorns: I am proficient with my horns, a 1d10 piercing damage melee weapon that grant me advantage on shoving a creature, but not to avoid being shoved myself.\nGoring Rush: When taking a Dash action, I can make a horns attack as a bonus action.\nHammering Horns: When taking a melee Attack action, I can attempt to shove with my horns as a bonus action. I cannot use this to knock a creature prone.\nLabyrinthine Recall: I can perfectly recall any path I have travelled." }); // ua_20150803_Modern-Magic.js // This file adds the content from the Unearthed Arcana: Modern Magic article to MPMB's Character Record Sheet // Define the source SourceList["UA:MM"] = { name : "Unearthed Arcana: Modern Magic", abbreviation : "UA:MM", group : "Unearthed Arcana", campaignSetting : "Modern", url : "https://media.wizards.com/2015/downloads/dnd/UA_ModernMagic.pdf", date : "2015/08/03" }; // A subclass for the Cleric, called "City Domain" AddSubClass("cleric", "city domain-ua", { // Still valid 2021-09-21 regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*(urban|city)).*$/i, subname : "City Domain", source : [["UA:MM", 1]], spellcastingExtra : ["comprehend languages", "remote access-ua", "find vehicle-ua", "heat metal", "lightning bolt", "protection from ballistics-ua", "locate creature", "synchronicity-ua", "commune with city-ua", "shutdown-ua"], features : { "subclassfeature1" : { name : "Bonus Cantrip", source : [["UA:MM", 1]], minlevel : 1, description: desc("I learn the On/Off cantrip if I didn't already know it"), spellcastingBonus : [{ name : "Bonus Cantrip (On/Off)", spells : ["on/off-ua"], selection : ["on/off-ua"] }] }, "subclassfeature1.1" : { name : "Bonus Proficiency", source : [["UA:MM", 1]], minlevel : 1, description: desc("I gain proficiency with sidearms and land vehicles"), weaponProfs : [false, false, ["Sidearms"]], toolProfs : ["Vehicles (land)"] }, "subclassfeature1.2" : { name : "Heart of the City", source : [["UA:MM", 1]], minlevel : 1, description : desc([ "While I'm in a city, I can gain adv. on a Cha (Deception, Intimidation, Persuasion) check", "I'm considered proficient with the appropriate skill for that one check" ]), usages : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest" }, "subclassfeature2" : { name : "Channel Divinity: Spirits of the City", source : [["UA:MM", 1]], minlevel : 2, description : desc([ "As an action, I make all city utilities in 30 ft either stop or work perfectly for 1 min", "Additionally, all hostiles within 30 ft must make a Cha save at the time of use", "If failed, it is either knocked prone or restrained (my choice) by city hazards", "A restrained target can escape with an Athletics or Acrobatics check vs. my spell DC" ]), action : [["action", ""]] }, "subclassfeature6" : { name : "Block Watch", source : [["UA:MM", 2]], minlevel : 6, description: desc("While in an urban environment, I'm proficient and expertise in Insight and Perception") }, "subclassfeature8" : { name : "Divine Strike", source : [["UA:MM", 2]], minlevel : 8, description: desc("Once per turn, when I hit a creature with a weapon attack, I can do extra damage"), additional : levels.map(function (n) { if (n < 8) return ""; return "+" + (n < 14 ? 1 : 2) + "d8 psychic damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && v.isWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.cleric.level < 14 ? 1 : 2) + 'd8 psychic damage'; } }, "Once per turn, I can have one of my weapon attacks that hit do extra psychic damage." ] } }, "subclassfeature17" : { name : "Express Transit", source : [["UA:MM", 2]], minlevel : 17, description : desc([ "As an action, I can teleport from one mass transit site to another in the same city", "This works just like a Teleport spell; Mass transits sites include bus/train/subway stops" ]), usages : 1, recovery : "short rest", action : [["action", ""]] } } }); // A subclass for the Warlock, called "Ghost in the Machine" AddSubClass("warlock", "ghost in the machine-ua", { // Still valid 2021-09-21 regExpSearch : /^(?=.*warlock)(?=.*ghost)(?=.*(machine|computer)).*$/i, subname : "the Ghost in the Machine", source : [["UA:MM", 2]], spellcastingExtra : ["infallible relay-ua", "remote access-ua", "arcane hacking-ua", "digital phantom-ua", "haywire-ua", "invisibility to cameras-ua", "conjure knowbot-ua", "system backdoor-ua", "shutdown-ua", "synchronicity-ua"], features : { "subclassfeature1" : { name : "Bonus Proficiency", source : [["UA:MM", 2]], minlevel : 1, description: desc("I am proficient with hacking tools and know the On/Off cantrip"), toolProfs : ["Hacking tools"], spellcastingBonus : [{ name : "Bonus Cantrip (On/Off)", spells : ["on/off-ua"], selection : ["on/off-ua"] }] }, "subclassfeature1.1" : { name : "Information Surge", source : [["UA:MM", 2]], minlevel : 1, description : desc([ "As an action, I can cause a computerized device within 30 ft to make an Int save", "If the device is held/used by a creature, that creature makes the saving throw", "If the device is not held/used, it makes a save with a +0 modifier and disadvantage", "On a failed save, the device stops functioning until the end of my next turn" ]), usages : 1, recovery : "short rest", action : [["action", ""]] }, "subclassfeature6" : { name : "Wire Walk", source : [["UA:MM", 3]], minlevel : 6, description : desc([ "As a bonus action, I can teleport through a hardwired network to a point I can see", "Both where I start and end must be a device, cable, or socket connected to the network" ]), usages : 1, recovery : "long rest", action : [["bonus action", ""]] }, "subclassfeature10" : { name : "Personal Encryption", source : [["UA:MM", 3]], minlevel : 10, description : desc([ "I have adv. on saves vs. scrying, thought detection, and magics for learning my location", "If the effect doesn't let me a save, the user has disadv. on checks to use it on me, if any" ]) }, "subclassfeature14" : { name : "Technovirus", source : [["UA:MM", 3]], minlevel : 14, description : desc([ "As an action, I make a melee spell attack to infect someone with a techno-organic virus", "The target takes 8d10 psychic damage, or half that with a successful Con save", "If it failed its save, I can use an action to cast Command on it while it remains infected", "It makes its save vs. this Command with disadvantage and I can cast it at any range", "It is infected until my next long rest; The virus can be removed with Lesser Restoration" ]), usages : 1, recovery : "long rest", action : [["action", ""]] } } }); // A subclass for the Wizard, called "Technomancy" (contributed by AKA_Sketch) AddSubClass("wizard", "technomancy-ua", { // Still valid 2021-09-21 regExpSearch : /technomancy|technomancer/i, subname : "Technomancy", source : [["UA:MM", 3]], fullname : "Technomancer", features : { "subclassfeature2": { name : "Bonus Proficiencies", source : [["UA:MM", 3]], minlevel : 2, description: desc("I gain proficiency with sidearms and hacking tools"), weaponProfs : [false, false, ["Sidearms"]], toolProfs : ["Hacking tools"] }, "subclassfeature2.1": { name : "Technological Savant", source : [["UA:MM", 3]], minlevel : 2, description : desc([ "I can use a single tablet computer (or similar) instead of a spellbook", "Spells copied into this device cost half the normal amount of gp" ]) }, "subclassfeature6": { name : "Program Spell", source : [["UA:MM", 4]], minlevel : 6, description : desc([ "I can cast a spell into a device of at least smartphone-level of computing power", "Variables of the spell are chosen at time of casting; I can have only one active at a time", "As an action within the next 48 hours, the spell can be cast from the device", "I can't activate a concentration spell in this way if I am concentrating on another spell" ]), recovery : "long rest", usages : 1 }, "subclassfeature10": { name : "Online Casting", source : [["UA:MM", 4]], minlevel : 10, description : desc([ "I can cast a spell, that is not area-of-effect, through networked electronic devices", "If the spell requires sight/hearing, the audio/visual must be transmitted electronically", "The spell's range is determined from me to my device plus from the target to its device" ]), usages : "Intelligence modifier per ", usagescalc : "event.value = Math.max(1, What('Int Mod'));", recovery : "long rest" }, "subclassfeature14": { name : "Chained Device", source : [["UA:MM", 4]], minlevel : 14, description: desc([ "I can use a held/worn tablet computer to concentrate on a spell I cast instead of me", "If the device is separated from me, turned off, or broken, the effect is lost", ]), recovery : "long rest", usages : 1 } } }); // Add a new Warlock invocation AddWarlockInvocation("Arcane Gunslinger (prereq: Pact of the Blade)", { // Still valid 2021-09-21 name : "Arcane Gunslinger", description : desc([ "My pact weapon can take firearm forms, and I can transform magical firearms into one" ]), source : [["UA:MM", 3]], submenu : "[improves Pact of the Blade]", prereqeval : function(v) { return GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the blade'; }, calcChanges : { atkAdd : [ function (fields, v) { if (v.isRangedWeapon && /firearm/i.test(v.theWea.type + " " + v.theWea.list) && /\bpact\b/i.test(v.WeaponTextName)) { v.pactWeapon = true; } }, "If I include the word 'Pact' in a firearm weapon's name, it gets treated as my Pact Weapon.", 90 ] } }); /* Adds 14 spells that are, according to the article, 'suitable' for the Sorcerer, Warlock, or Wizard spell list. 1 of those is also considered suitable for the Paladin spell list. Strangely enough, adding all these spells to the Warlock spell list makes the Ghost in the Machine's Expanded Spell List class feature completely useless */ SpellsList["arcane hacking-ua"] = { // Still valid 2021-09-21 name : "Arcane Hacking", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:MM", 5]], level : 2, school : "Trans", time : "1 a", range : "Self", components : "V,S,M\u0192", compMaterial : "Hacking tools", duration : "Conc, 1 h", description : "Adv on Int (hacking tools) vs. encryption; Use Int (hacking tools) to remove protective spells; See book", descriptionFull : "[Technomagic]\n You gain advantage on all Intelligence checks using hacking tools to break software encryption or online security when using a foreign system. This spell also allows you to break 2nd-level and lower protective spells such as arcane lock or glyph of warding by making an Intelligence check using hacking tools against the spell save DC of the spell's caster." + AtHigherLevels + "When you cast this spell using a spell slot of 3rd level or higher, you can attempt to counteract a spell set to secure the foreign system if the spell's level is equal to or less than the level of the spell slot you used." }; SpellsList["commune with city-ua"] = { // Still valid 2021-09-21 name : "Commune with City", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:MM", 5]], ritual : true, level : 5, school : "Div", time : "1 min", range : "Self", components : "V,S", duration : "Instantaneous", description : "Learn up to three facts about surrounding city, out to 1 mile above- or 600 ft underground; see B", descriptionFull : "You briefly become one with the city and gain knowledge of the surrounding area. Aboveground, this spell gives you knowledge of the area within 1 mile of you. In sewers and other underground settings, you gain knowledge of the area within 600 feet of you." + "\n " + "You instantly gain knowledge of up to three facts of your choice about any of the following subjects as they relate to the area:" + "\n \u2022 " + "Terrain and bodies of water" + "\n \u2022 " + "Prevalent buildings, plants, animals, or intelligent creatures" + "\n \u2022 " + "Powerful (CR 1 or higher) celestials, fey, fiends, elementals, or undead" + "\n \u2022 " + "Influences from other planes of existence" + "\n \u2022 " + "Electrical currents, wireless signals, and active transit lines and tracks" + "\n\n " + "For example, you could determine the location of powerful undead in the area, the location of major sources of electrical power or interference, and the location of any nearby parks." }; SpellsList["conjure knowbot-ua"] = { // Still valid 2021-09-21 name : "Conjure Knowbot", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:MM", 5]], level : 4, school : "Conj", time : "1 a", range : "500 ft", components : "V,S", duration : "10 min", description : "Create bot in touched device; computer checks 1 bns instead of 1 a for me; SL5: 1 h, 1000 ft, see book", descriptionFull : "[Technomagic]\n You touch a single computerized device or computer system to conjure a knowbot\u2014a partially sentient piece of software imprinted with vestiges of your own skills and computer abilities. For the duration of the spell, you can use a bonus action to have the knowbot execute a computer-related task that would normally require an action. The knowbot makes Intelligence ability checks using your ability score and proficiency bonuses (including your proficiency with hacking tools, if applicable)." + "\n " + "You have a limited telepathic bond with the knowbot, out to a range of 500 feet from the device or system where the knowbot was conjured. If you move beyond this range, the knowbot disappears in 2d4 rounds, as if the duration of the spell had expired. Moving within range again immediately reestablishes the bond. The knowbot is bound to the system in which it was created, and it stays there until it is dismissed or the spell's duration expires." + AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, the spell's duration increases to 1 hour. Additionally, your telepathic bond with the knowbot is effective out to a range of 1,000 feet, and if you leave the range of the bond, the knowbot continues performing its last directed task until the spell expires." }; SpellsList["digital phantom-ua"] = { // Still valid 2021-09-21 name : "Digital Phantom", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:MM", 6]], level : 2, school : "Abjur", time : "1 a", range : "Self", components : "V,S,M", compMaterial : "A small piece of copper wire", duration : "Conc, 1 h", description : "Me and any others in same computer system +10 on Int to avoid detection; leave no trace on exit", descriptionFull : "[Technomagic]\n This spell works to actively hide your presence within a computer system. For the spell's duration, you and any other users you choose on your local network gain a +10 bonus to Intelligence checks to avoid detection by administrators, knowbots, tracking software, and the like. Whenever you and your chosen users leave any computer system you are working in while this spell is in effect, all trace of your previous presence in that system is erased." }; SpellsList["find vehicle-ua"] = { // Still valid 2021-09-21 name : "Find Vehicle", classes : ["paladin", "sorcerer", "warlock", "wizard"], source : [["UA:MM", 6]], level : 2, school : "Conj", time : "10 min", range : "30 ft", components : "V,S", duration : "Conc, 1 h", description : "Gain services of land spirit-vehicle; expertise, share spells with it; SL3: water, SL5: air, SL7: any; see B", descriptionFull : "You summon a spirit that assumes the form of a nonmilitary land vehicle of your choice, appearing in an unoccupied space within range. The vehicle has the statistics of a normal vehicle of its sort, though it is celestial, fey, or fiendish (your choice) in origin. The physical characteristics of the vehicle reflect its origin to some degree. For example, a fiendish SUV might be jet black in color, with tinted windows and a sinister-looking front grille." + "\n " + "You have a supernatural bond with the conjured vehicle that allows you to drive beyond your normal ability. While driving the conjured vehicle, you are considered proficient with vehicles of its type, and you add double your proficiency bonus to ability checks related to driving the vehicle. While driving the vehicle, you can make any spell you cast that targets only you also target the vehicle." + "\n " + "If the vehicle drops to 0 hit points, it disappears, leaving behind no physical form. You can also dismiss the vehicle at any time as an action, causing it to disappear." + "\n " + "You can't have more than one vehicle bonded by this spell at a time. As an action, you can release the vehicle from its bond at any time, causing it to disappear." + AtHigherLevels + "When you cast this spell using a spell slot of 3rd level or higher, you can conjure a nonmilitary water vehicle large enough to carry six Medium creatures. When you cast this spell using a spell slot of 5th level or higher, you can conjure a nonmilitary air vehicle large enough to carry ten Medium creatures. When you cast this spell using a spell slot of 7th level or higher, you can conjure any type of vehicle, subject to the DM's approval." }; SpellsList["haywire-ua"] = { // Still valid 2021-09-21 name : "Haywire", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:MM", 7]], level : 3, school : "Ench", time : "1 a", range : "90 ft", components : "V,S", duration : "Conc, 1 min", save : "Wis", description : "10 ft(+5 ft/SL) rad all electronic devices go haywire, see B; for hold devices, crea gets to save", descriptionFull : "[Technomagic]\n This spell plays havoc with electronic devices, making the use of such devices all but impossible. Each electronic device in a 10-foot-radius sphere centered on a point you choose within range is subject to random behavior while it remains within the area. A device not held by a creature is automatically affected. If an electronic device is held by a creature, that creature must succeed on a Wisdom saving throw or have the device affected by the spell." + "\n " + "At the start of each of your turns, roll a d6 for each affected device to determine its behavior. Except where otherwise indicated, that behavior lasts until the start of your next turn while this spell is in effect." + "\n\n" + toUni("d10") + "\t" + toUni("Behavior") + "\n " + "1\tThe device shuts down and must be restarted. Do not roll again for this device until it is restarted.\n2–4\tThe device does not function." + "\n " + "5\tThe device experiences a power surge, causing an electric shock to the wielder (if any) and one random creature within 5 feet of the device. Each affected creature must make a Dexterity saving throw against your spell save DC, taking 6d6 lightning damage on a failed save, or half as much damage on a successful one." + "\n " + "6\tThe device is usable as normal.\n" + AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, the radius of the sphere affected by the spell increases by 5 feet for each slot level above 3rd." }; SpellsList["infallible relay-ua"] = { // Still valid 2021-09-21 name : "Infallible Relay", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:MM", 7]], level : 1, school : "Div", time : "1 min", range : "Self", components : "V,S,M", compMaterial : "A mobile phone", duration : "Conc, 10 min", save : "Cha", description : "1 known crea save or has to answer my call from phone within 100 ft of it; it has to save to end call", descriptionFull : "[Technomagic]\n With this spell, you can target any creature with whom you have spoken previously, as long as the two of you are on the same plane of existence. When you cast the spell, the nearest functioning telephone or similar communications device within 100 feet of the target begins to ring. If there is no suitable device close enough to the target, the spell fails." + "\n " + "The target must make a successful Charisma saving throw or be compelled to answer your call. Once the connection is established, the call is crystal clear and cannot be dropped until the conversation has ended or the spell's duration ends. You can end the conversation at any time, but a target must succeed on a Charisma saving throw to end the conversation." }; SpellsList["invisibility to cameras-ua"] = { // Still valid 2021-09-21 name : "Invisibility to Cameras", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:MM", 7]], level : 3, school : "Illus", time : "1 a", range : "10 ft", components : "V,S,M", compMaterial : "A scrap of black paper", duration : "Conc, 1 min", description : "Up to 4 crea and anything they are wearing or carrying become undetectable for electornic sensors", descriptionFull : "[Technomagic]\n Four creatures of your choice within range become undetectable to electronic sensors and cameras for the duration of the spell. Anything a target is wearing or carrying is likewise undetectable as long as it is on the target's person. The targets remain visible to vision." }; SpellsList["on/off-ua"] = { // Still valid 2021-09-21 name : "On/Off", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:MM", 7]], level : 0, school : "Trans", time : "1 a", range : "60 ft", components : "V,S", duration : "Instantaneous", description : "Activate or deactivate 1 electornic device that has a way of doing so accessible from the outside of it", descriptionFull : "[Technomagic]\n This cantrip allows you to activate or deactivate any electronic device within range, as long as the device has a clearly defined on or off function that can be easily accessed from the outside of the device. Any device that requires a software- based shutdown sequence to activate or deactivate cannot be affected by on/off." }; SpellsList["protection from ballistics-ua"] = { // Still valid 2021-09-21 name : "Protection from Ballistics", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:MM", 8]], level : 3, school : "Abjur", time : "1 a", range : "Touch", components : "V,S,M", compMaterial : "A shell casing", duration : "Conc, 10 min", description : "1 crea gains resistance to nonmagical ballistic damage", descriptionFull : "This spell enchants the flesh of the target against the impact of bullets. Until the spell ends, the target has resistance to nonmagical ballistic damage." }; SpellsList["remote access-ua"] = { // Still valid 2021-09-21 name : "Remote Access", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:MM", 8]], level : 1, school : "Trans", time : "1 a", range : "120 ft", components : "V,S", duration : "10 min", description : "I can use any electronic device within range as if it were in my hands", descriptionFull : "[Technomagic]\n You can use any electronic device within range as if it were in your hands. This is not a telekinesis effect. Rather, this spell allows you to simulate a device's mechanical functions electronically. You are able to access only functions that a person using the device manually would be able to access. You can use remote access with only one device at a time." }; SpellsList["shutdown-ua"] = { // Still valid 2021-09-21 name : "Shutdown", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:MM", 8]], level : 5, school : "Trans", time : "1 a", range : "120 ft", components : "V,S", duration : "Conc, 1 min", save : "Con", description : "Shut down all electronic devices within range; if controlled/held by crea, it can save to keep active", descriptionFull : "[Technomagic]\n This spell shuts down all electronic devices within range that are not wielded by or under the direct control of a creature. If an electronic device within range is used by a creature, that creature must succeed on a Constitution saving throw to prevent the device from being shut down. While the spell remains active, no electronic device within range can be started or restarted." }; SpellsList["synchronicity-ua"] = { // Still valid 2021-09-21 name : "Synchronicity", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:MM", 8]], level : 4, school : "Ench", time : "1 a", range : "120 ft", components : "V,S", duration : "Conc, 1 h", description : "1 crea not slowed by mundane delays, disadv on opportunity attacks to it, adv to Stealth and driving", descriptionFull : "The creature you touch feels reality subtly shifted to its favor while this spell is in effect." + "\n " + "The target isn't inconvenienced by mundane delays of any sort. Traffic lights are always green, there's always a waiting elevator, and a taxi is always around the corner. The target can run at full speed through dense crowds, and attacks of opportunity provoked by the target's movement are made with disadvantage." + "\n " + "Synchronicity grants advantage to Dexterity (Stealth) checks, since the target always finds a handy piece of cover available. Additionally, the target has advantage on all ability checks made to drive a vehicle." + "\n " + "In the event that two or more creatures under the effect of synchronicity are attempting to avoid being inconvenienced by each other, the creatures engage in a contest of Charisma each time the effects of the spells would oppose each other." }; SpellsList["system backdoor-ua"] = { // Still valid 2021-09-21 name : "System Backdoor", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:MM", 8]], level : 4, school : "Trans", time : "1 min", range : "Self", components : "V,S,M\u0192", compMaterial : "Hacking tools", duration : "Conc, 1 h", description : "Gain admin access to 1 system; defeats 3rd or lower technomancy spells; SL5+: defeats same or lower", descriptionFull : "[Technomagic]\n This spell allows you to bypass system security in order to create a secure login on a foreign system. The login you create allows you administrator-level privileges in any computer system not enhanced through technomagic. The login defeats any technomagic spells of 3rd level or lower." + "\n " + "Once the duration of the spell expires, the login and all privileges are wiped from the system." + "\n " + "System logs still show the activity of the user, but the user identification cannot be found or traced." + AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, you are able to bypass technomagic spells if the spell's level is equal to or less than the level of the spell slot you used." }; // This code was contributed by Lewis Henderson // // Please note that the original .pdf has the hit dice as 2d6 per level. // There isn't any way to implement this, so the hit dice is recorded as a d12. // Also note that there is no automation for the companion page included in this. // // You will have to choose the ranger's animal spirit from the companion race drop-down list and add the Wisdom modifier bonus to attacks and saves manually. // ua_20150909_Ranger.js // This file adds the content from the Unearthed Arcana: Ranger article to MPMB's Character Record Sheet // Define the source SourceList["UA:R"] = { name : "Unearthed Arcana: Ranger", abbreviation : "UA:R", group : "Unearthed Arcana", url : "https://media.wizards.com/2015/downloads/dnd/DX_0907_UA_RangerOptions.pdf", date : "2015/09/09" }; // Define a new class, called "Playtest Ranger" and its 3 subclasses ClassList["ua-playtest-ranger"] = { regExpSearch : /^(?=.*playtest)((?=.*(ranger|strider))|((?=.*(nature|natural))(?=.*(knight|fighter|warrior|warlord|trooper)))).*$/i, name : "Playtest Ranger", source : [["UA:R", 0]], primaryAbility : "Dexterity and Wisdom", prereqs : "Dexterity 13 and Wisdom 13", die : 12, improvements : [0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5, 5], saves : ["Dex", "Wis"], skillstxt : { primary : "Choose three from Animal Handling, Athletics, Insight, Investigation, Nature, Perception, Stealth, and Survival", secondary : "Choose one from Animal Handling, Athletics, Insight, Investigation, Nature, Perception, Stealth, and Survival" }, toolProfs : { primary : ["Herbalism kit"] }, armorProfs : { primary : [true, false, false, true], secondary : [true, false, false, true] }, weaponProfs : { primary : [true, true], secondary : [true, true] }, equipment : "Playtest Ranger starting equipment:\n \u2022 leather armor;\n \u2022 Two shortswords -or- two martial melee weapons -or- a martial weapon and a shield;\n \u2022 A dungeoneer's pack -or- an explorer's pack;\n \u2022 A longbow and a quiver of 20 arrows -or- a martial weapon.", subclasses : ["Ranger Path", []], subclassGainedLevel : 3, attacks : [1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], features : { "ambuscade" : { name : "Ambuscade", source : [["UA:R", 2]], minlevel : 1, description : desc([ "When I roll initiative, I gain a special turn before others can act", "During this bonus turn, I can only use the Attack or Hide action", "I can't be surprised, but if I would be surprised I don't get the bonus turn" ]) }, "natural explorer" : ClassList.ranger.features["natural explorer"], "fighting style" : ClassList.ranger.features["fighting style"], "skirmisher's stealth" : { name : "Skirmisher's Stealth", source : [["UA:R", 3]], minlevel : 2, description : desc([ "At the start of my turn, I can choose a creature I'm hidden from", "During that turn, I remain hidden from it, regardless of my actions", "As a bonus action at the end of my turn, I can use the Hide action" ]), action : [["bonus action", ""]], }, "subclassfeature3" : { name : "Ranger Path", source : [["UA:R", 3]], minlevel : 3, description : desc([ 'Choose a Ranger Path you wish to follow and put it in the "Class" field', "Choose Guardian, Seeker, or Stalker" ]) }, "primeval awareness" : ClassList.ranger.features["primeval awareness"] } }; AddSubClass("ua-playtest-ranger", "guardian-ua", { regExpSearch : /^(?=.*guardian)((?=.*(ranger|strider))|((?=.*(nature|natural))(?=.*(knight|fighter|warrior|warlord|trooper)))).*$/i, subname : "Guardian", source : [["UA:R", 3]], features : { "subclassfeature3" : { name : "Brown Bear Spirit Companion", source : [["UA:R", 3]], minlevel : 3, description : desc([ "As a bonus action, I can have my brown bear spirit animal materialize or dismiss it", "It has all the stats of a brown bear and adds my Wis mod to its attacks and saves", "Its HP is half my ranger level or the total in its stat block, whichever is higher", "It takes it turn right after my initiative and is under my complete control" ]), usages : 1, recovery : "short rest", action : [["bonus action", ""]] }, "subclassfeature3.1" : { name : "Guardian's Shroud", source : [["UA:R", 4]], minlevel : 3, description :"\n " + "When I call my spirit animal, I grant me or an ally I can see 2d6 + Wis mod temp HP" } } }); AddSubClass("ua-playtest-ranger", "seeker-ua", { regExpSearch : /^(?=.*seeker)((?=.*(ranger|strider))|((?=.*(nature|natural))(?=.*(knight|fighter|warrior|warlord|trooper)))).*$/i, subname : "Seeker", source : [["UA:R", 4]], features : { "subclassfeature3" : { name : "Giant Eagle Spirit Companion", source : [["UA:R", 3]], minlevel : 3, description : desc([ "As a bonus action, I can have my giant eagle spirit animal materialize or dismiss it", "It has all the stats of a giant eagle and adds my Wis mod to its attacks and saves", "Its HP is half my ranger level or the total in its stat block, whichever is higher", "It takes it turn right after my initiative and is under my complete control" ]), usages : 1, recovery : "short rest", action : [["bonus action", ""]] }, "subclassfeature3.1" : { name : "Seeker's Eye", source : [["UA:R", 4]], minlevel : 3, description : desc([ "When I call my spirit animal, I can choose a creature that I can see", "Until the end of my next turn, all attacks against the target have advantage" ]) } } }); AddSubClass("ua-playtest-ranger", "stalker-ua", { regExpSearch : /^(?=.*stalker)((?=.*(ranger|strider))|((?=.*(nature|natural))(?=.*(knight|fighter|warrior|warlord|trooper)))).*$/i, subname : "Stalker", source : [["UA:R", 4]], features : { "subclassfeature3" : { name : "Dire Wolf Spirit Companion", source : [["UA:R", 3]], minlevel : 3, description : desc([ "As a bonus action, I can have my dire wolf spirit animal materialize or dismiss it", "It has all the stats of a dire wolf and adds my Wis mod to its attacks and saves", "Its HP is half my ranger level or the total in its stat block, whichever is higher", "It takes it turn right after my initiative and is under my complete control" ]), usages : 1, recovery : "short rest", action : [["bonus action", ""]] }, "subclassfeature3.1" : { name : "Stalker's Fangs", source : [["UA:R", 4]], minlevel : 3, description : desc([ "When I call my spirit animal, I can choose a creature that I can see", "The target's next weapon attack hit deals 2d6 + Wis mod extra slashing damage" ]) } } }); // ua_20151005_Prestige Classes and Rune Magic.js // This file adds the content from the Unearthed Arcana: Prestige Classes and Rune Magic article to MPMB's Character Record Sheet // Define the source SourceList["UA:PCRM"] = { name : "Unearthed Arcana: Prestige Classes and Rune Magic", abbreviation : "UA:PCRM", group : "Unearthed Arcana", url : "https://media.wizards.com/2015/downloads/dnd/UA_Rune_Magic_Prestige_Class.pdf", date : "2015/10/05" }; // Adds a prestige class, called "Rune Scribe" (includes contributions by K.12) ClassList["rune scribe"] = { // Still valid 2021-09-21 regExpSearch : /^(?=.*rune)(?=.*scribe).*$/i, name : "Rune Scribe", source : [["UA:PCRM", 2]], primaryAbility : "Dexterity and Intelligence", prereqs : "\n - Dexterity 13 and Intelligence 13;\n - Proficiency in the Arcana skill\n - Complete a special task: You must find a rune and present it to an NPC rune scribe who accepts it in return for tutoring you in the ways of rune magic", die : 8, improvements : levels.map(function (n) {return 0}), toolProfs : { secondary : ["Calligrapher's Supplies", "Mason's Tools", "Woodcarver's Tools"] }, subclasses : ["", []], subclassGainedLevel : 100, prestigeClassPrereq : 5, attacks : levels.map(function (n) {return 1}), spellcastingFactor : 1, features : { "rune lore" : { name : "Rune Lore", source : [["UA:PCRM", 3]], minlevel : 1, description : desc([ "I learn the basics of scribing runes, and can activate all properties of a master rune", "The first rune I master is the one I found to qualify to become a rune scribe", "To use any features of a master rune, I need to first attune to it just like a magic item", 'Use the "Choose Feature" button above to add master runes to the third page' ]), extraname : "Master Rune", extrachoices : ["Opal of the Ild Rune", "Orb of the Stein Rune", "Pennant of the Vind Rune", "Shard of the Kalt Rune"], "opal of the ild rune" : { name : "Opal of the Ild Rune", source : [["UA:PCRM", 4]], description : " [rare, requires attunement]" + desc([ "- Ignite (simple): As an action, ignite touched flammable object; Fire extends 1 ft from it", "- Fire Tamer (simple): As an action, extinguish touched open flame up to 10-ft radius", " I can expend a spell slot to extend that radius by 20 ft/SL", "- Fire's Friend (simple): While attuned, I have resistance to cold damage", "- Combustion (complex): As an action, I expend spell slot and touch a creature", " The target automatically takes 1d10 + 1d10/SL fire damage", "- Flame Brand (complex): During a short rest, I can augment a weapon, or 20 ammo", " The weapon or ammo deals fire damage; It lasts for 24 hours or until I use this again", " I can expend a spell slot to also give the weapon a magic bonus of slot level dived by 3", "- Flame Stoker (complex): While attuned, I roll any fire damage twice and use the higher" ]), dmgres : ["Cold"], action : ['action', 'Ild Rune (Ignite, Fire Tamer, Combusion)'] }, "orb of the stein rune" : { name : "Orb of the Stein Rune", source : [["UA:PCRM", 5]], description : " [rare, requires attunement]" + desc([ "- Indomitable Stand (simple): As an action, I gain abilities until I move", " I have advantage on all ability checks and saving throws to resist being moved", " Anyone moving within 10 ft makes a DC 12 Str save or has speed 0 until its next turn", "- Stone Soul (simple): While attuned, I cannot be petrified", "- Stone's Secrets (simple): As an action, I learn everybody's current location within 30 ft", " They have to touch the same surface as I'm touching with my hand", "- Crushing Brand (complex): During a short rest, I can augment a bludgeoning weapon", " The weapon's bludgeoning damage ignores resistances and immunities", " If the weapon deals its maximum damage, the target is also knocked prone", " I can expend a spell slot to also give the weapon a magic bonus of slot level dived by 3", " These effects last for 24 hours or until I use Crushing Brand again", "- Earthen Step (complex): I can cast Meld Into Stone as a bonus action once per short rest", "- Overwhelming Bolt (complex): As an action, I expend spell slot and touch a creature", " It takes 2d8+1d8/SL bludg. dmg and is prone; DC 12+SL Str save for half \u0026 not prone" ]), action : [['action', 'Stein Rune (Indomitable Stand, Secrets, Bolt)']], savetxt : { immune : ["petrified"] }, spellcastingBonus : [{ name : "Orb of the Stein Rune", spells : ["meld into stone"], selection : ["meld into stone"], firstCol : 'oncesr' }], spellChanges : { "levitate" : { time : "1 bns", changes : "Using my Orb of the Stein Rune, I can cast Meld Into Stone as a bonus action once per short rest." } }, extraLimitedFeatures : [{ name : "Earthen Step (Orb of the Stein Rune)", usages : 1, recovery : "short rest" }] }, "pennant of the vind rune" : { name : "Pennant of the Vind Rune", source : [["UA:PCRM", 5]], description : " [rare, requires attunement]" + desc([ "- Comforting Wind (simple): While attuned, I can't suffocate or drown", " Also, I gain advantage on saves against inhaled poisons, toxins, and similar effects", "- Wind Step (simple): As an action, I fly 20 ft, after which I fall if I'm still airborne", "- Wind's Grasp (simple): As a reaction when falling, I can take no damage from the fall", "- Howling Brand (complex): During a short rest, I can augment a ranged weapon", " Its range is doubled and attacks with it do not suffer disadvantage due to range", " I can expend a spell slot to also give the weapon a magic bonus of slot level dived by 3", " These effects last for 24 hours or until I use Howling Brand again", "- Shrieking Bolt (complex): As an action, I expend spell slot to target a creature I can see", " It 2d8+1d8/SL bludg. dmg \u0026 pushed 10 ft; DC 12+SL Str save for half \u0026 not pushed", "- Wind Walker (complex): I can cast Levitate as a bonus action once per short rest" ]), action : [['action', 'Vind Rune (Wind Step, Shrieking Bolt)'], ['reaction', "Vind Rune (Wind's Grasp)"]], savetxt : { adv_vs : ["inhaled poison"] }, spellcastingBonus : [{ name : "Pennant of the Vind Rune", spells : ["levitate"], selection : ["levitate"], firstCol : 'oncesr' }], spellChanges : { "levitate" : { time : "1 bns", changes : "Using my Pennant of the Vind Rune, I can cast Levitate as a bonus action once per short rest." } }, extraLimitedFeatures : [{ name : "Wind Walker (Pennant of the Vind Rune)", usages : 1, recovery : "short rest" }] }, "shard of the kalt rune" : { name : "Shard of the Kalt Rune", source : [["UA:PCRM", 6]], description : " [rare, requires attunement]" + desc([ "- Frigid Touch (simple): As an action, I freeze water that I touch a 10-ft radius", "- Frost Friend (simple): While attuned, I have resistance to fire damage", "- Icy Mantle (simple): As an action, me or a creature I touch gains a protective mantle", " The next time taking bludg., slash., pierc. damage, it absorbs the damage and falls apart", "- Freezing Bolt (complex): As an action, I expend spell slot and touch a creature", " It takes 2d8+1d8/SL cold damage and its speed is 0 until the end of my next turn", " If it succeeds on a DC 12+SL Con save, it takes only half damage and has normal speed", "- Ice Brand (complex): During a short rest, I can augment a weapon, or 20 ammo pieces", " The weapon or ammo deals cold damage; It lasts for 24 hours or until I use this again", " I can expend a spell slot to also give the weapon a magic bonus of slot level dived by 3", "- Winter's Howl (complex): I can cast Sleet Storm as an action once per short rest" ]), dmgres : ["Fire"], action : ['action', 'Kalt Rune (Touch, Mantle, Bolt, Howl)'], spellcastingBonus : [{ name : "Shard of the Kalt Rune", spells : ["sleet storm"], selection : ["sleet storm"], firstCol : 'oncesr' }], extraLimitedFeatures : [{ name : "Winter's Howl (Shard of the Kalt Rune)", usages : 1, recovery : "short rest" }] } }, "runic magic" : { name : "Runic Magic", source : [["UA:PCRM", 3]], minlevel : 1, description: desc("I obtain spell slots as if gaining a level in a full spellcasting class, but don't learn spells") }, "runic discovery" : { name : "Runic Discovery", source : [["UA:PCRM", 3]], minlevel : 2, description : desc([ "I know a number of master runes which I can attune to, even if not in my possession", "Attuning or de-attuning in this manner can be done over the course of a short rest" ]), additional : levels.map(function (n) { if (n < 2) return ""; return (n < 3 ? 1 : n < 5 ? 2 : 3) + " known master runes"; }) }, "living rune" : { name : "Living Rune", source : [["UA:PCRM", 3]], minlevel : 4, description : desc([ "I get 2 points that I can add to one or two of my ability scores as I see fit", "When I finish a long rest, I can re-allocate these point(s) from a single score to another" ]) }, "rune mastery" : { name : "Rune Mastery", source : [["UA:PCRM", 3]], minlevel : 5, description: desc("One rune I'm attuned to doesn't count toward the limit of magic items I can attune to") } } }; // ua_20151102_Light,-Dark,-Underdark!.js // This file adds the content from the Unearthed Arcana: Light, Dark, Underdark! article to MPMB's Character Record Sheet // Define the source SourceList["UA:LDU"] = { name : "Unearthed Arcana: Light, Dark, Underdark!", abbreviation : "UA:LDU", group : "Unearthed Arcana", url : "https://media.wizards.com/2015/downloads/dnd/02_UA_Underdark_Characters.pdf", date : "2015/11/02" }; // New Fighting Styles AddFightingStyle(["fighter", "ranger", "paladin"], "Close Quarters Shooter", { // Still valid 2021-09-21 name : "Close Quarters Shooting Fighting Style", source : [["UA:LDU", 1]], description: desc([ "+1 bonus to attack rolls I make with ranged attacks", "I don't have disadvantage when making a ranged attack while within 5 ft of a hostile", "My ranged attacks ignore half and three-quarters cover against targets within 30 ft", ]), calcChanges : { atkCalc : [ function (fields, v, output) { if (v.isRangedWeapon) output.extraHit += 1; }, "My ranged weapons get a +1 bonus on the To Hit." ] } }); AddFightingStyle(["fighter", "ranger", "paladin"], "Tunnel Fighter", { // Still valid 2021-09-21 name : "Tunnel Fighting Style", source : [["UA:LDU", 1]], description: desc([ "As a bonus action, I enter a defensive stance that lasts until the start of my next turn", "While I'm in this defensive stance I gain the following two benefits:", "\u2022 I can make opportunity attacks without using my reaction", "\u2022 I can make a melee attack as a reaction if a hostile moves >5 ft while in my reach", ]), action : [["bonus action", ""]] }); // A subclass for the Ranger, called "Deep Stalker" AddSubClass("ranger", "deep stalker-ua", { regExpSearch : /^(?=.*deep)(?=.*stalker).*$/i, subname : "Deep Stalker", source : [["UA:LDU", 1]], fullname : "Deep Stalker", features : { "subclassfeature3" : { name : "Underdark Scout", source : [["UA:LDU", 1]], minlevel : 3, description: desc([ "In the first turn of combat I have +10 ft speed and +1 attack with the Attack action", "All turns after that, I can take the Hide action as a bonus action at the end of my turn", ]), action : [["bonus action", " (Hide at end of turn)"]] }, "subclassfeature3.1" : { name : "Deep Stalker Magic", source : [["UA:LDU", 2]], minlevel : 3, description: desc([ "I have 90 ft darkvision and add a spell to my known spells at level 3, 5, 9, 13, and 17", "These count as ranger spells, but do not count against the number of spells I can know", ]), spellcastingExtra : ["disguise self", "rope trick", "glyph of warding", "greater invisibility", "seeming"], spellcastingExtraApplyNonconform : true, vision : [["Darkvision", 90]] }, "subclassfeature7" : { name : "Iron Mind", source : [["UA:LDU", 2]], minlevel : 7, description: desc("I am proficient with Wisdom saving throws"), saves : ["Wis"] }, "subclassfeature11" : { name : "Stalker's Flurry", source : [["UA:LDU", 2]], minlevel : 11, description: desc("Once during my turn when I miss an attack, I can immediately make an extra attack") }, "subclassfeature15" : { name : "Stalker's Dodge", source : [["UA:LDU", 2]], minlevel : 15, description: desc("As a reaction when I'm attacked without adv., I can impose disadv. on the attack roll"), action : [["reaction", " (when attacked)"]] } } }); // A subclass for the Sorcerer, called "Shadow" AddSubClass("sorcerer", "shadow sorcerer-ua", { regExpSearch : /^(?=.*(sorcerer|witch))(?=.*shadow).*$/i, subname : "Shadow", source : [["UA:LDU", 2]], fullname : "Shadow Sorcerer", features : { "subclassfeature1" : { name : "Eyes of the Dark", source : [["UA:LDU", 2]], minlevel : 1, description: desc([ "I have 60 ft darkvision and can cast Darkness by spending 1 sorcery point", "I can see through any darkness spell I cast using this ability", ]), additional : "1 sorcery point", vision : [["Darkvision", 60]], action : [["action", " (1 sorcery point)"]], spellcastingBonus : [{ name : "Eyes of the Dark", spells : ["darkness"], selection : ["darkness"], firstCol : 1 }], spellChanges : { "darkness" : { description : "15-ft rad darkness on point/obj; I see normally; darkvision doesn't work; only magical light of SL 3+", changes : "Using my Eyes of the Dark class feature I can cast Darkness by spending 1 sorcery point and I can see through that Darkness without issue." } } }, "subclassfeature1.1" : { name : "Strength of the Grave", source : [["UA:LDU", 2]], minlevel : 1, description: desc([ "When damage reduces me to 0 HP, that isn't radiant damage or a critical hit,", "I can make a Constitution save (DC 5 + damage taken) to drop to 1 HP instead", ]), }, "subclassfeature6" : { name : "Hound of Ill Omen", source : [["UA:LDU", 2]], minlevel : 6, additional : "3 sorcery points", description: desc([ "As a bonus action, I target a creature I can see and summon a hound within 30 ft of it", "The hound has all the stats of a medium sized dire wolf with the following exceptions:", "\u2022 At the start of its turn, it automatically knows where the target is", "\u2022 It can only move towards and make (opportunity) attack against the target", "\u2022 It can move through other creatures and objects as if they were difficult terrain", "\u2022 It takes 5 force damage if it ends its turn inside an object", "The target has disadvantage on saves vs. my spells while the hound is within 5 ft of it", ]), action : [["bonus action", " (3 sorcery points)"]] }, "subclassfeature14" : { name : "Shadow Walk", source : [["UA:LDU", 3]], minlevel : 14, description: desc([ "As a bonus action when I'm in dim light or darkness, I can teleport up to 120 ft", "The destination has to be unoccupied, within line of sight, and in dim light or darkness", ]), action : [["bonus action", ""]] }, "subclassfeature18" : { name : "Shadow Form", source : [["UA:LDU", 3]], minlevel : 18, additional : "3 sorcery points", description: desc([ "As a bonus action, I transform into a shadow form for 1 minute", "While transformed, I have resistance to all damage types except force damage", "Also, I can move through other creatures and objects as if they were difficult terrain", "I take 5 force damage if I end my turn inside an object", ]), action : [["bonus action", " (3 sorcery points)"]] } } }); // A subclass for the Warlock, called "The Undying Light" AddSubClass("warlock", "the undying light-ua", { regExpSearch : /^(?=.*warlock)(?=.*light)(?=.*(immortal|undying|neverending|unending)).*$/i, subname : "the Undying Light", source : [["UA:LDU", 3]], spellcastingExtra : ["burning hands", "flaming sphere", "daylight", "fire shield", "flame strike"], features : { "subclassfeature1" : { name : "Radiant Soul", source : [["UA:LDU", 3]], minlevel : 1, description: desc([ "I add my Cha modifier to cantrips/spells I cast that deal fire or radiant damage", "I have resistance to radiant damage and know the Light and Sacred Flame cantrips", ]), spellcastingBonus : [{ name : "Radiant Soul", spells : ["light"], selection : ["light"] }, { name : "Radiant Soul", spells : ["sacred flame"], selection : ["sacred flame"] }], dmgres : ["Radiant"], calcChanges : { atkCalc : [ function (fields, v, output) { if (v.isSpell && (/fire|radiant/i).test(fields.Damage_Type)) output.extraDmg += What('Cha Mod'); }, "Cantrips and spells that fire or radiant damage get my Charisma modifier added to their damage." ], spellAdd : [ function (spellKey, spellObj, spName) { if (!spellObj.psionic) return genericSpellDmgEdit(spellKey, spellObj, "fire|radiant", "Cha"); }, "Cantrips and spells that fire or radiant damage get my Charisma modifier added to their damage." ] } }, "subclassfeature6" : { name : "Searing Vengeance", source : [["UA:LDU", 3]], minlevel : 6, description: desc([ "When I would make a death saving throw, I can instead spring back to my feet", "I immediately stand up and recover HP equal to half my current HP maximum", "Also, all hostiles within 30 ft of me take 10 + Charisma modifier in radiant damage", "Damaged creatures are blinded until the end of my next turn", ]), usages : 1, recovery : "long rest" }, "subclassfeature10" : { name : "Radiant Resilience", source : [["UA:LDU", 4]], minlevel : 10, description: desc([ "When I finish a short or long rest, I and up to five allies gain temporary hit points", "I get my warlock level + Cha mod, while my allies get half my warlock level + Cha mod", ]), }, "subclassfeature14" : { name : "Healing Light", source : [["UA:LDU", 4]], minlevel : 14, description: desc([ "As a bonus action, I touch a creature and heal it by expending dice from my pool", "I subtract the number of d6's used from my pool; I can expend up to 5d6 at a time", "The target heals HP equal to the roll of the dice; I regain expended uses with a long rest", ]), usages : "15d6 per ", usagescalc : "event.value = '15d6';", recovery : "long rest", action : [["bonus action", ""]] } } }); // ua_20151217_That-Old-Black-Magic.js // This file adds the content from the Unearthed Arcana: That Old Black Magic article to MPMB's Character Record Sheet // Define the source SourceList["UA:TOBM"] = { name : "Unearthed Arcana: That Old Black Magic", abbreviation : "UA:TOBM", group : "Unearthed Arcana", url : "https://media.wizards.com/2015/downloads/dnd/07_UA_That_Old_Black_Magic.pdf", date : "2015/12/17" }; // Adds the Abyssal Tiefling RaceList["abyssal tiefling-ua"] = { regExpSearch : /^(?=.*abyssal)((?=.*tiefling)|(?=.*planetouched)(?=.*(hell|abyss|fiend|devil))).*$/i, name : "Abyssal tiefling", sortname : "Tiefling, Abyssal", source : [["UA:TOBM", 1]], plural : "Abyssal tieflings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Abyssal"], vision : [["Darkvision", 60]], dmgres : ["Fire"], age : " reach adulthood in their late teens and live around 100 years", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 0, 1, 0, 0, 2], trait : "Abyssal Tiefling (+1 Constitution, +2 Charisma)\nAbyssal Fortitude: My HP maximum increases with half the levels I have (min 1). Abyssal Arcana: After each long rest I gain randomly determined spellcasting ability (d6). This is a cantrip, and on both 3rd and 5th level a spell that I can cast once, at 2nd-level.\n1: (Dancing Lights, Burning Hands, Alter Self); 2: (True Strike, Charm Person, Darkness)" + (!typePF ? ";" : " ") + " 3: (Light, Magic Missile, Invisibility); 4: (Spare the Dying, Hideous Laughter, Mirror Image)" + (!typePF ? ";" : " ") + " 5: (Message, Cure Wounds, Levitate); 6: (Prestidigitation, Thunderwave, Spider Climb)", abilitySave : 6, spellcastingAbility : 6, spellcastingBonus : [{ name : "Abyssal Arcana (level 1)", spells : ["dancing lights", "true strike", "light", "message", "spare the dying", "prestidigitation"], firstCol : 'atwill' }], calcChanges : { hp : function (totalHD) { return [Math.max(1, Math.floor(totalHD / 2)), "Abyssal Fortitude"]; } }, features : { "abyssal arcana (level 3)" : { name : "Abyssal Arcana (level 3)", minlevel : 3, usages : 1, recovery : "long rest", action : [["action", ""]], spellcastingBonus : [{ name : "Abyssal Arcana (level 3)", spells : ["burning hands", "charm person", "magic missile", "cure wounds", "tasha's hideous laughter", "thunderwave"], firstCol : 'oncelr' }] }, "abyssal arcana (level 5)" : { name : "Abyssal Arcana (level 5)", minlevel : 5, usages : 1, recovery : "long rest", action : [["action", ""]], spellcastingBonus : [{ name : "Abyssal Arcana (level 5)", spells : ["alter self", "darkness", "invisibility", "levitate", "mirror image", "spider climb"], firstCol : 'oncelr' }] } }, variants : RaceList.tiefling && RaceList.tiefling.variants ? RaceList.tiefling.variants : [] }; //now do the variants var UATOBM_addAbyssalTiefling = function(){ var replaceTraitTxt = ["+1 Intelligence, +2 Charisma", "+1 Constitution, +2 Charisma"]; var replaceNameTxt = ["tiefling", "abyssal tiefling"]; RaceList["abyssal tiefling-ua"].variants.forEach( function(nVar) { if (!RaceSubList["tiefling-" + nVar]) return; RaceSubList["abyssal tiefling-ua-" + nVar] = newObj(RaceSubList["tiefling-" + nVar]); var thisVar = RaceSubList["abyssal tiefling-ua-" + nVar]; thisVar.trait = thisVar.trait.replace(replaceTraitTxt[0], replaceTraitTxt[1]); thisVar.trait = thisVar.trait.replace(replaceNameTxt[0].capitalize(), replaceNameTxt[1].capitalize()); thisVar.name = thisVar.name.replace(replaceNameTxt[0], replaceNameTxt[1]); thisVar.plural = thisVar.plural.replace(replaceNameTxt[0], replaceNameTxt[1]); }); }(); /* Adds 5 spells for summoning fiends to the Sorcerer and the Wizard spell lists This code was contributed by David */ SpellsList["conjure lesser demon-ua"] = { // Still valid 2021-09-21 name : "Conjure Lesser Demon", classes : ["sorcerer", "wizard"], source : [["UA:TOBM", 2]], level : 3, school : "Conj", time : "1 a", range : "60 ft", components : "V,S,M", compMaterial : "A vial of blood from an intelligent humanoid killed within the past 24 hours", duration : "Conc, 1 h", description : "Summon 8 (16 at SL6, 32 at SL8) manes/dretches that are hostile to all non-demons, attacking nearest", descriptionFull : "You summon up to a total of eight manes or dretches that appear in unoccupied spaces you can see within range. A manes or dretch disappears when it drops to 0 hit points or when the spell ends." + "\n " + "The demons are hostile to all creatures. Roll initiative for the summoned demons as a group, which has its own turns. The demons attack the nearest non-demons to the best of their ability." + "\n " + "As part of casting the spell, you can scribe a circle on the ground with the blood used as a material component. The circle is large enough to encompass your space. The summoned demons cannot cross the circle or target anyone in it while the spell lasts. Using the material component in this manner consumes it." + AtHigherLevels + "When you cast this spell using a spell slot of 6th or 7th level, you summon sixteen demons. If you cast it using a spell slot of 8th or 9th level, you summon thirty-two demons." }; SpellsList["conjure barlgura-ua"] = { // Still valid 2021-09-21 name : "Conjure Barlgura", classes : ["sorcerer", "wizard"], source : [["UA:TOBM", 2]], level : 4, school : "Conj", time : "1 a", range : "60 ft", components : "V,S", duration : "10 min", description : "Summon a barlgura that is hostile to all non-demons, attacking the nearest", descriptionFull : "You summon a barlgura that appears in an unoccupied space you can see within range. The barlgura disappears when it drops to 0 hit points or when the spell ends." + "\n " + "The barlgura is hostile to all non-demons. Roll initiative for the barlgura, which has its own turns. At the start of its turn, it moves toward and attacks the nearest non-demon it can perceive. If two or more creatures are equally near, it picks one at random. If it cannot see any potential enemies, the barlgura moves in a random direction in search of foes." + "\n " + "As part of casting the spell, you can scribe a circle on the ground using the blood of an intelligent humanoid slain within the past 24 hours. The circle is large enough to encompass your space. The summoned barlgura cannot cross the circle or target anyone in it while the spell lasts." }; SpellsList["conjure hezrou-ua"] = { // Still valid 2021-09-21 name : "Conjure Hezrou", classes : ["sorcerer", "wizard"], source : [["UA:TOBM", 2]], level : 7, school : "Conj", time : "1 a", range : "60 ft", components : "V,S,M\u2020", compMaterial : "Food worth at least 100 gp, which the spell consumes", duration : "Conc, 1 h", description : "Summon a hezrou that I might control as long as there is food; At half HP it leaves, see B (100gp cons.)", descriptionFull : "You summon a hezrou that appears in an unoccupied space you can see within range. The hezrou disappears when it drops to 0 hit points or when the spell ends." + "\n " + "The hezrou's attitude depends on the value of the food used as a material component for this spell. Roll initiative for the hezrou, which has its own turns. At the start of the hezrou's turn, the DM makes a secret Charisma check on your behalf, with a bonus equal to the food's value divided by 20. The check DC starts at 10 and increases by 2 each round. You can issue orders to the hezrou and have it obey you as long as you succeed on the Charisma check." + "\n " + "If the check fails, the spell no longer requires concentration and the demon is no longer under your control. The hezrou then focuses on devouring any corpses it can see. If there are no such meals at hand, it attacks the nearest creatures and eats anything it kills. If its hit points are reduced to below half its hit point maximum, it returns to the Abyss." + "\n " + "As part of casting the spell, you can scribe a circle on the ground using the blood of an intelligent humanoid slain within the past 24 hours. The circle is large enough to encompass your space. The summoned hezrou cannot cross the circle or target anyone in it while the spell lasts." }; SpellsList["conjure shadow demon-ua"] = { // Still valid 2021-09-21 name : "Conjure Shadow Demon", classes : ["sorcerer", "wizard"], source : [["UA:TOBM", 3]], level : 4, school : "Conj", time : "1 a", range : "60 ft", components : "V,S,M", compMaterial : "A vial of blood from an intelligent humanoid killed within the past 24 hours", duration : "Conc, 1 h", description : "Summon a shadow demon that I control while not in bright light, can attack, and within 100 ft, see B", descriptionFull : "You summon a shadow demon that appears in an unoccupied space you can see within range. The shadow demon disappears when it drops to 0 hit points or when the spell ends." + "\n " + "Roll initiative for the shadow demon, which has its own turns. You can issue orders to the shadow demon, and it obeys you as long as it can attack a creature on each of its turns and does not start its turn in an area of bright light. If either of these conditions is not met, the shadow demon immediately makes a Charisma check contested by your Charisma check. If you fail the check, the spell no longer requires concentration and the demon is no longer under your control. The demon automatically succeeds on the check if it is more than 100 feet away from you." + "\n " + "As part of casting the spell, you can scribe a circle on the ground using the blood of an intelligent humanoid slain within the past 24 hours. The circle is large enough to encompass your space. The summoned shadow demon cannot cross the circle or target anyone in it while the spell lasts." }; SpellsList["conjure vrock-ua"] = { // Still valid 2021-09-21 name : "Conjure Vrock", classes : ["sorcerer", "wizard"], source : [["UA:TOBM", 3]], level : 5, school : "Conj", time : "1 a", range : "60 ft", components : "V,S,M\u2020", compMaterial : "A gem worth at least 100 gp, which the spell consumes", duration : "Conc, 1 h", description : "Summon a vrock that I might control for some rounds, depending on gem value, see B (100gp cons.)", descriptionFull : "You summon a vrock that appears in an unoccupied space you can see within range. The vrock disappears when it drops to 0 hit points or when the spell ends." + "\n " + "The vrock's attitude depends on the value of the gem used as a material component for this spell. Roll initiative for the vrock, which has its own turns. At the start of the vrock's turn, the DM makes a secret Charisma check on your behalf, with a bonus equal to the gem's value divided by 20. The check DC starts at 10 and increases by 2 each round. You can issue orders to the vrock and have it obey you as long as you succeed on the Charisma check." + "\n " + "If the check fails, the spell no longer requires concentration and the vrock is no longer under your control. The vrock takes no actions on its next turn and uses its telepathy to tell any creature it can see that it will fight in exchange for treasure. The creature that gives the vrock the most expensive gem can command it for the next 1d6 rounds. At the end of that time, it offers the bargain again. If no one offers the vrock treasure before its next turn begins, it attacks the nearest creatures for 1d6 rounds before returning to the Abyss." + "\n " + "As part of casting the spell, you can scribe a circle on the ground using the blood of an intelligent humanoid slain within the past 24 hours. The circle is large enough to encompass your space. The summoned vrock cannot cross the circle or target anyone in it while the spell lasts." }; // ua_20160104_Kits-of-Old.js // This file adds the content from the Unearthed Arcana: Kits of Old article to MPMB's Character Record Sheet // Define the source SourceList["UA:KoO"] = { name : "Unearthed Arcana: Kits of Old", abbreviation : "UA:KoO", group : "Unearthed Arcana", url : "https://media.wizards.com/2015/downloads/dnd/04_UA_Classics_Revisited.pdf", date : "2016/01/04" }; // Adds four subclasses, 2 for the bard, 2 for the fighter AddSubClass("bard", "college of swords-ua", { regExpSearch : /^(?=.*(college|bard|minstrel|troubadour|jongleur))(?=.*\bswords?\b).*$/i, subname : "College of Swords", subnameShort: "Swords", source : [["UA:KoO", 1]], attacks : [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], features : { "subclassfeature3" : { name : "Bonus Proficiencies", source : [["UA:KoO", 1]], minlevel : 3, description: desc("I gain proficiency with medium armor and scimitars"), armorProfs : [false, true, false, false], weaponProfs : [false, false, ["scimitar"]] }, "subclassfeature3.1" : function () { var FSfea = newObj(FightingStyles.two_weapon); FSfea.source = ["UA:KoO", 1]; FSfea.minlevel = 3; return FSfea; }(), "subclassfeature3.2" : { name : "Blade Flourish", source : [["UA:KoO", 1]], minlevel : 3, description : desc([ "When I take the Attack action on my turn, I can do one of the following flourishes:", "I have to use a dagger, longsword, rapier, scimitar, or shortsword while doing this", "\u2022 Defensive Flourish [one Bardic Inspiration die]", " As a bonus action, I add the die to my AC until the start of my next turn", "\u2022 Trick Shooter's Flourish [one Bardic Inspiration die]", " As a bonus action with a dagger ranged attack, I add the die to the attack roll", " If the target is an unattended, inanimate object, the result of the die is doubled", "\u2022 Unnerving Flourish [one Bardic Inspiration die]", " As a bonus action when reducing a foe to 0 HP with a melee attack, I leave it alive", " The target stays at 1 HP and is frightened of me for my Cha modifier in minutes", " It must also make a Cha save at a DC of my spell save + the bardic inspiration die", " If failed, it answers truthfully any questions I ask and obeys me while frightened", ]), action : [["bonus action", " (one inspiration die)"]] }, "subclassfeature14" : { name : "Battle Magic", source : [["UA:KoO", 2]], minlevel : 14, description: desc("When I use my action to cast a Bard spell, I can make one bonus action weapon attack"), action : [["bonus action", " (with Bard spell)"]] } } }); AddSubClass("bard", "college of satire-ua", { // Still valid 2021-09-21 regExpSearch : /^(?=.*(college|bard|minstrel|troubadour|jongleur))(?=.*satire).*$/i, subname : "College of Satire", subnameShort: "Satire", source : [["UA:KoO", 2]], features : { "subclassfeature3" : { name : "Bonus Proficiencies", source : [["UA:KoO", 2]], minlevel : 3, description: desc("I gain proficiency with thieves' tools, sleight of hand, and one other skill of my choice"), skills : ["Sleight of Hand"], skillstxt : "Thieves' Tools, Sleight of Hand, and any one other skill", toolProfs : [["Thieves' tools", "Dex"]] }, "subclassfeature3.1" : { name : "Tumbling Fool", source : [["UA:KoO", 2]], minlevel : 3, description: desc([ "As a bonus action, I tumble which gives the benefits of the Dash and Disengage actions", "I also gain a climbing speed at my current speed and half damage from falling", ]), action : [["bonus action", ""]], speed : { climb : { spd : "walk", enc : "walk" } } }, "subclassfeature6" : { name : "Fool's Insight", source : [["UA:KoO", 2]], minlevel : 6, description: desc("I can cast Detect Thoughts, but on a save the target suffers an embarrassing social gaffe"), usages : "Charisma modifier per ", usagescalc : "event.value = Math.max(1, What('Cha Mod'));", recovery : "long rest", spellcastingBonus : [{ name : "Fool's Insight", spells : ["detect thoughts"], selection : ["detect thoughts"], firstCol : "(S)" }], spellChanges : { "detect thoughts" : { description : "1 a read thoughts of visible Int>3 crea or detect invisible in 30 ft; save for probing, social gaffe on save", changes : "I can cast this spell a number of times equal to my Charisma modifier per long rest and when I do so and the target makes its save, it suffers an embarrassing social gaffe." } } }, "subclassfeature14" : { name : "Fool's Luck", source : [["UA:KoO", 3]], minlevel : 14, additional: "one bardic inspiration die", description: desc([ "When I fail an ability check, saving throw, or attack roll, I can add one inspiration die", "If this turns the roll into a success, I have to note down the number rolled", "I can't use this ability again until the DM subtracts the amount from a check or attack", ]), usages : 1, recovery : "reset" } } }); AddSubClass("fighter", "cavalier-ua", { regExpSearch : /cavalier/i, subname : "Cavalier", source : [["UA:KoO", 3]], fullname : "Cavalier", abilitySave : 1, features : { "subclassfeature3" : { name : "Bonus Proficiencies", source : [["UA:KoO", 3]], minlevel : 3, description: desc([ "I gain proficiency with two skills or one skill and any one tool", "For skills I can choose from Animal Handling, Insight, Performance, or Persuasion", ]), choices : ["1 Skill and 1 Tool proficiencies", "2 Skill proficiencies"], "1 skill and 1 tool proficiencies" : { name : "Bonus Proficiencies", description: desc([ "I gain proficiency with one skill and any one tool of my choice", "For the skill, I can choose Animal Handling, Insight, Performance, or Persuasion", ]), skillstxt : "Choose one from: Animal Handling, Insight, Performance, or Persuasion", toolProfs : [["Any tool", 1]] }, "2 skill proficiencies" : { name : "Bonus Proficiencies", description: desc("I gain two skill proficiencies: Animal Handling, Insight, Performance, or Persuasion"), skillstxt : "Choose two from: Animal Handling, Insight, Performance, or Persuasion" } }, "subclassfeature3.1" : { name : "Born in the Saddle", source : [["UA:KoO", 3]], minlevel : 3, description: desc([ "I have advantage on saves to avoid falling off my mount, and land on my feet if I fail", "Mounting or dismounting a creature costs me only 5 ft of movement instead of half", ]), savetxt : { adv_vs : ["falling off my mount"] } }, "subclassfeature3.2" : { name : "Combat Superiority", source : [["UA:KoO", 3]], minlevel : 3, description: desc([ "I gain a number of superiority dice that I can use to fuel special maneuvers (see below)", "I can use only one maneuver per attack; I regain all superiority dice after a short rest", "\u2022 Use after rolling to influence/control an animal; I add the superiority die to the roll", "\u2022 Use after rolling to hit; I add the superiority die to my attack roll", "\u2022 Use on a mount, before rolling to hit with a lance; I add the die to the damage roll", " Also, the target must make a Str save (DC 8 + Prof + Str mod) or be knocked prone", "\u2022 As a reaction when I'm hit or my mount is hit, I add the superiority die to AC", " If the attack still hits, I or my mount only take half damage from it", ]), additional : ["", "", "d8", "d8", "d8", "d8", "d8", "d8", "d8", "d10", "d10", "d10", "d10", "d10", "d10", "d10", "d10", "d12", "d12", "d12"], usages : [0, 0, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6], recovery : "short rest", action : [["reaction", " (if hit/mount hit)"]] }, "subclassfeature7" : { name : "Ferocious Charger", source : [["UA:KoO", 3]], minlevel : 7, usages : 1, recovery : "long rest", description: desc([ "I can use two superiority dice, instead of just one, to increase the damage of my lance", "If doing so, the target has disadvantage on its Str save to avoid being knocked prone", ]), action : [["action", ""]] }, "subclassfeature10" : { name : "Improved Combat Superiority", source : [["UA:KoO", 3]], minlevel : 10, description: desc("My superiority dice turn into d10s at 10th level and into d12s at 18th level") }, "subclassfeature15" : { name : "Relentless", source : [["UA:KoO", 4]], minlevel : 15, description: desc("I regain one superiority die if I have no more remaining when I roll initiative") } } }); AddSubClass("fighter", "scout-ua", { // Still valid 2021-09-21 regExpSearch : /scout/i, subname : "Scout", source : [["UA:KoO", 4]], features : { "subclassfeature3" : { name : "Bonus Proficiencies", source : [["UA:KoO", 4]], minlevel : 3, description: desc([ "I gain proficiency with three skills or two skills and Thieves' Tools; For skills choose from:", "Acrobatics, Athletics, Investigation, Medicine, Nature, Perception, Stealth, and Survival", ]), choices : ["2 Skill proficiencies and Thieves' Tools proficiency", "3 Skill proficiencies"], "2 skill proficiencies and thieves' tools proficiency" : { name : "Bonus Proficiencies", description : desc([ "I gain proficiency with two skills and Thieves' Tools; For skills choose from:", "Acrobatics, Athletics, Investigation, Medicine, Nature, Perception, Stealth, and Survival" ]), skillstxt : "Choose two from: Acrobatics, Athletics, Investigation, Medicine, Nature, Perception, Stealth, or Survival", toolProfs : [["Thieves' tools", "Dex"]] }, "3 skill proficiencies" : { name : "Bonus Proficiencies", description : desc([ "I gain proficiency with three skills, chosen from:", "Acrobatics, Athletics, Investigation, Medicine, Nature, Perception, Stealth, and Survival" ]), skillstxt : "Choose three from: Acrobatics, Athletics, Investigation, Medicine, Nature, Perception, Stealth, or Survival" } }, "subclassfeature3.1" : { name : "Combat Superiority", source : [["UA:KoO", 4]], minlevel : 3, description: desc([ "I gain a number of superiority dice that I can use to fuel special maneuvers (see below)", "I can use only one maneuver per attack; I regain all superiority dice after a short rest", "\u2022 Use after rolling an Athletics, Nature, Perception, Stealth, or Survival check", " I add half the superiority die to the roll (rounding up)", "\u2022 Use after rolling to hit; I add the superiority die to my attack roll", "\u2022 As a reaction when I'm hit while wearing light/medium armor, I add the die to AC", " If the attack still hits, I only take half damage from it", ]), additional : ["", "", "d8", "d8", "d8", "d8", "d8", "d8", "d8", "d10", "d10", "d10", "d10", "d10", "d10", "d10", "d10", "d12", "d12", "d12"], usages : [0, 0, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6], recovery : "short rest", action : [["reaction", " (if hit)"]] }, "subclassfeature3.2" : function () { var NEfea = newObj(ClassList.ranger.features["natural explorer"]); NEfea.source = ["UA:KoO", 4]; NEfea.minlevel = 3; NEfea.additional = ["", "", "1 favored terrain", "1 favored terrain", "1 favored terrain", "1 favored terrains", "2 favored terrains", "2 favored terrains", "2 favored terrains", "2 favored terrains", "2 favored terrains", "2 favored terrains", "2 favored terrains", "2 favored terrains", "3 favored terrains", "3 favored terrains", "3 favored terrains", "3 favored terrains", "3 favored terrains", "3 favored terrains"]; return NEfea; }(), "subclassfeature10" : { name : "Improved Combat Superiority", source : [["UA:KoO", 4]], minlevel : 10, description: desc("My superiority dice turn into d10s at 10th level and into d12s at 18th level") }, "subclassfeature15" : { name : "Relentless", source : [["UA:KoO", 4]], minlevel : 15, description: desc("I regain one superiority die if I have no more remaining when I roll initiative") } } }); // ua_20160404_Gothic-Heroes.js // This file adds the content from the Unearthed Arcana: Gothic Heroes article to MPMB's Character Record Sheet // Define the source SourceList["UA:GH"] = { name : "Unearthed Arcana: Gothic Heroes", abbreviation : "UA:GH", group : "Unearthed Arcana", url : "https://media.dnd.wizards.com/upload/articles/UA%20Gothic%20Characters.pdf", date : "2016/04/04" }; // Adds 8 new races, the Revenant versions of the Aasimar, Dragonborn, Dwarf, Elf, Gnome, Halfling, Human, and Tiefling // All revenants are still valid 2021-09-21 RaceList["aasimar revenant-ua"] = { // Based on the VGtM Aasimar, made with /u/RebelMage's help regExpSearch : /^(?=.*revenant)((?=.*aasimar)|((?=.*planetouched)(?=.*(celestial|angel)))).*$/i, name : "Aasimar Revenant", sortname : "Revenant, Aasimar", source : [["UA:GH", 1]], plural : "Aasimar", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Celestial"], vision : [["Darkvision", 60]], dmgres : ["Necrotic", "Radiant"], age : " reach adulthood in their late teens and live around 160 years", height : " range from barely 5 to well over 6 feet tall (4'8\" + 2d10\")", weight : " weigh around 165 lb (110 + 2d10 \xD7 2d4 lb)", heightMetric : " range from barely 1,5 to well over 1,8 metres tall (145 + 5d10 cm)", weightMetric : " weigh around 75 kg (50 + 5d10 \xD7 4d4 / 10 kg)", scores : [0, 0, 1, 0, 0, 2], trait : "Aasimar Revenant (+1 Constitution, +2 Charisma)" + (typePF ? "\n" : " ") + "Light Bearer: I know the Light cantrip. Healing Hands: As an action, once per long rest, I can touch to heal for my level in HP.\nRelentless Nature: I have returned to life with one goal: avenge my death or finish an unresolved task. I will rest once I fulfill my goal, but until then I can't truly die. Whenever I'm below half my max HP at the start of my turn, I regain 1 HP. If I die, I return to life within 24 hours. If my body was destroyed, it is reformed within 1 mile of where I died. I always know the distance and direction to creatures involved with my goal.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Light Bearer", spells : ["light"], selection : ["light"], firstCol : 'atwill' }], features : { "healing hands" : { name : "Healing Hands", usages : 1, minlevel : 1, recovery : "long rest", additional : ["1 HP", "2 HP", "3 HP", "4 HP", "5 HP", "6 HP", "7 HP", "8 HP", "9 HP", "10 HP", "11 HP", "12 HP", "13 HP", "14 HP", "15 HP", "16 HP", "17 HP", "18 HP", "19 HP", "20 HP"], action : [["action", ""]] } } }; RaceList["dwarf revenant-ua"] = { regExpSearch : /^(?=.*revenant)(?=.*\b(dwarfs?|dwarves|dwarfish|dwarvish|dwarven)\b).*$/i, name : "Dwarf Revenant", sortname : "Revenant, Dwarf", source : [["UA:GH", 1]], plural : "Dwarves", size : 3, speed : { walk : { spd : 25, enc : 25 } }, languageProfs : ["Common", "Dwarvish"], vision : [["Darkvision", 60]], savetxt : { adv_vs : ["poison"] }, dmgres : ["Poison"], weaponProfs : [false, false, ["battleaxe", "handaxe", "warhammer", "light hammer"]], toolProfs : [["Smith, brewer, or mason tools", 1]], age : " are considered young until they are 50 and live about 350 years", height : " stand between 4 and 5 feet tall (4' + 2d4\")", weight : " weigh around 150 lb (130 + 2d4 \xD7 2d6 lb)", heightMetric : " stand between 1,2 and 1,5 metres tall (120 + 5d4 cm)", weightMetric : " weigh around 75 kg (60 + 5d4 \xD7 4d6 / 10 kg)", scores : [0, 0, 3, 0, 0, 0], trait : "Dwarf Revenant (+3 Constitution)\nStonecunning: I have expertise on Int (History) checks related to the origin of stonework.\nRelentless Nature: I have returned to life with one goal: avenge my death or finish an unresolved task. I will rest once I fulfill my goal, but until then I can't truly die. Whenever I'm below half my max HP at the start of my turn, I regain 1 HP. If I die, I return to life within 24 hours. If my body was destroyed, it is reformed within 1 mile of where I died. I always know the distance and direction to creatures involved with my goal." }; RaceList["elf revenant-ua"] = { regExpSearch : /^(?!.*half)(?=.*revenant)(?=.*\b(elfs?|elves|elvish|elven)\b).*$/i, name : "Elf Revenant", sortname : "Revenant, Elf", source : [["UA:GH", 1]], plural : "Elves", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Elvish"], vision : [["Darkvision", 60]], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["charmed"] }, skills : ["Perception"], age : " typically claim adulthood around age 100 and can live to be 750 years old", height : " range from under 5 to over 6 feet tall (4'6\" + 2d10\")", weight : " weigh around 115 lb (90 + 2d10 \xD7 1d4 lb)", heightMetric : " range from under 1,5 to over 1,8 metres tall (140 + 5d10 cm)", weightMetric : " weigh around 55 kg (40 + 5d10 \xD7 2d4 / 10 kg)", scores : [0, 2, 1, 0, 0, 0], trait : "Elf Revenant (+2 Dexterity, +1 Constitution)\nTrance: I don't sleep, but meditate for 4 hours a day, needing only 4 hours for a long rest.\nRelentless Nature: I have returned to life with one goal: avenge my death or finish an unresolved task. I will rest once I fulfill my goal, but until then I can't truly die. Whenever I'm below half my max HP at the start of my turn, I regain 1 HP. If I die, I return to life within 24 hours. If my body was destroyed, it is reformed within 1 mile of where I died. I always know the distance and direction to creatures involved with my goal." }; RaceList["halfling revenant-ua"] = { regExpSearch : /^(?=.*revenant)(?=.*\b(halflings?|hobbits?)\b).*$/i, name : "Halfling Revenant", sortname : "Revenant, Halfling", source : [["UA:GH", 1]], plural : "Halflings", size : 4, speed : { walk : { spd : 25, enc : 15 } }, languageProfs : ["Common", "Halfling"], savetxt : { adv_vs : ["frightened"] }, age : " reach adulthood at age 20 and live around 150 years", height : " average about 3 feet tall (2'7\" + 2d4\")", weight : " weigh around 40 lb (35 + 2d4 lb)", heightMetric : " average about 90 cm tall (80 + 5d4)", weightMetric : " weigh around 18 kg (16 + 5d4 / 10 kg)", scores : [0, 2, 1, 0, 0, 0], trait : "Halfling Revenant (+2 Dexterity, +1 Constitution)" + (typePF ? "\n" : " ") + "Lucky: I reroll 1's on attack/check/save. Halfling Nimbleness: I can move through the space of anybody of a size larger than me.\nRelentless Nature: I have returned to life with one goal: avenge my death or finish an unresolved task. I will rest once I fulfill my goal, but until then I can't truly die. Whenever I'm below half my max HP at the start of my turn, I regain 1 HP. If I die, I return to life within 24 hours. If my body was destroyed, it is reformed within 1 mile of where I died. I always know the distance and direction to creatures involved with my goal." }; RaceList["gnome revenant-ua"] = { regExpSearch : /^(?=.*revenant)(?=.*\bgnomes?\b).*$/i, name : "Gnome Revenant", sortname : "Revenant, Gnome", source : [["UA:GH", 1]], plural : "Gnomes", size : 4, speed : { walk : { spd : 25, enc : 15 } }, languageProfs : ["Common", "Gnomish"], vision : [["Darkvision", 60]], savetxt : { text : ["Adv. on Int/Wis/Cha saves vs. magic"] }, age : " start adult life around age 40 and can live 350 to almost 500 years", height : " are 3 to 4 feet tall (2'11\" + 2d4\")", weight : " weigh around 40 lb (35 + 2d4 lb)", heightMetric : " are 90 to 120 cm tall (2'11\" + 5d4)", weightMetric : " weigh around 18 kg (16 + 5d4 / 10 kg)", scores : [0, 0, 1, 2, 0, 0], trait : "Gnome Revenant (+1 Constitution, +2 Intelligence)\nRelentless Nature: I have returned to life with one goal: avenge my death or finish a critical, unresolved task. I will find rest once I fulfill my goal, but until then I can't truly die. Whenever I'm below half my max HP at the start of my turn, I regain 1 HP. If I die, I return to life within 24 hours. If my body was destroyed, it is reformed within 1 mile of where I died. Any destroyed equipment is not regained. I always know the distance and direction between me and any creature involved with my goal that is on the same plane." }; RaceList["dragonborn revenant-ua"] = { regExpSearch : /^(?=.*dragonborn)(?=.*revenant).*$/i, name : "Dragonborn Revenant", sortname : "Revenant, Dragonborn", source : [["UA:GH", 1]], plural : "Dragonborn", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Draconic"], weaponOptions : [{ regExpSearch : /^(?=.*breath)(?=.*weapon).*$/i, name : "Breath weapon", source : [["UA:GH", 1]], ability : 3, type : "Natural", damage : [2, 6, "necrotic"], range : '5-ft \xD7 30-ft line', description : "Hits all in area; Con save, success - half damage; Usable only once per short rest", abilitytodamage : false, dc : true, dbBreathWeapon : true, selectNow : true }], age : " reach adulthood by 15 and live around 80 years", height : " stand well over 6 feet tall (5'6\" + 2d8\")", weight : " weigh around 240 lb (175 + 2d8 \xD7 2d6 lb)", heightMetric : " stand well over 1,8 metres tall (170 + 5d8 cm)", weightMetric : " weigh around 110 kg (80 + 5d8 \xD7 4d6 / 10 kg)", scores : [1, 0, 1, 0, 0, 1], trait : "Dragonborn Revenant (+1 Strength, +1 Constitution, +1 Charisma)\nBreath Weapon: As an action, 5 ft by 30 ft line, Dex save halves, necrotic damage.\nRelentless Nature: I have returned to life with one goal: avenge my death or finish an unresolved task. I will rest once I fulfill my goal, but until then I can't truly die. Whenever I'm below half my max HP at the start of my turn, I regain 1 HP. If I die, I return to life within 24 hours. If my body was destroyed, it is reformed within 1 mile of where I died. I always know the distance and direction to creatures involved with my goal.", dmgres : ["Necrotic"], features : { "draconic ancestry" : { name : "Draconic Ancestry", limfeaname : "Breath Weapon", minlevel : 1, usages : 1, additional : levels.map(function (n) { return (n < 6 ? 2 : n < 11 ? 3 : n < 16 ? 4 : 5) + 'd6'; }), recovery : "short rest", action : [["action", ""]], calcChanges : { atkCalc : [ function (fields, v, output) { if (v.theWea.dbBreathWeapon && CurrentRace.known === 'dragonborn revenant' && CurrentRace.level > 5) { output.die = output.die.replace('2d6', (CurrentRace.level < 11 ? 3 : CurrentRace.level < 16 ? 4 : 5) + 'd6'); }; } ] } } } }; RaceList["human revenant-ua"] = { regExpSearch : /^(?=.*human)(?=.*revenant).*$/i, name : "Human Revenant", sortname : "Revenant, Human", source : [["UA:GH", 1]], plural : "Humans", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", 1], age : " reach adulthood in their late teens and live less than 100 years", height : " range from barely 5 to well over 6 feet tall (4'8\" + 2d10\")", weight : " weigh around 165 lb (110 + 2d10 \xD7 2d4 lb)", heightMetric : " range from barely 1,5 to well over 1,8 metres tall (145 + 5d10 cm)", weightMetric : " weigh around 75 kg (50 + 5d10 \xD7 4d4 / 10 kg)", scorestxt : "+1 Constitution and +1 to two different ability scores of my choice", scores : [0, 0, 1, 0, 0, 0], trait : "Human Revenant (+1 Constitution and +1 to two different ability scores of my choice)\nRelentless Nature: I have returned to life with one goal: avenge my death or finish a critical, unresolved task. I will find rest once I fulfill my goal, but until then I can't truly die. Whenever I'm below half my max HP at the start of my turn, I regain 1 HP. If I die, I return to life within 24 hours. If my body was destroyed, it is reformed within 1 mile of where I died. Any destroyed equipment is not regained. I always know the distance and direction between me and any creature involved with my goal that is on the same plane." }; RaceList["tiefling revenant-ua"] = { regExpSearch : /^(?=.*revenant)((?=.*tiefling)|(?=.*planetouched)(?=.*(hell|abyss|fiend|devil))).*$/i, name : "Tiefling Revenant", sortname : "Revenant, Tiefling", source : [["UA:GH", 1]], plural : "Tieflings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Infernal"], vision : [["Darkvision", 60]], age : " reach adulthood in their late teens and live around 100 years", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 0, 1, 0, 0, 2], trait : "Tiefling Revenant (+1 Constitution, +2 Charisma)\nRelentless Nature: I have returned to life with one goal: avenge my death or finish a critical, unresolved task. I will find rest once I fulfill my goal, but until then I can't truly die. Whenever I'm below half my max HP at the start of my turn, I regain 1 HP. If I die, I return to life within 24 hours. If my body was destroyed, it is reformed within 1 mile of where I died. Any destroyed equipment is not regained. I always know the distance and direction between me and any creature involved with my goal that is on the same plane." }; // Adds 2 subclasses, 1 for the Fighter and 1 for the rogue AddSubClass("fighter", "monster hunter-ua", { // Still valid 2021-09-21 regExpSearch : /^(?=.*monster)(?=.*hunter).*$/i, subname : "Monster Hunter", source : [["UA:GH", 2]], fullname : "Monster Hunter", features : { "subclassfeature3" : { name : "Bonus Proficiencies", source : [["UA:GH", 2]], minlevel : 3, description: desc([ "I gain proficiency with two skills or one skill and any one tool", "For skills I can choose Arcana, History, Insight, Investigation, Nature, or Perception", ]), choices : ["1 Skill and 1 Tool proficiencies", "2 Skill proficiencies"], "1 skill and 1 tool proficiencies" : { name : "Bonus Proficiencies", description: desc([ "I gain proficiency with one skill and any one tool of my choice", "For the skill, I can choose Arcana, History, Insight, Investigation, Nature, or Perception", ]), skillstxt : "Choose one from: Arcana, History, Insight, Investigation, Nature, or Perception", toolProfs : [["Any tool", 1]] }, "2 skill proficiencies" : { name : "Bonus Proficiencies", description: desc("I gain 2 skill proficiencies: Arcana, History, Insight, Investigation, Nature, or Perception"), skillstxt : "Choose two from: Arcana, History, Insight, Investigation, Nature, and Perception" } }, "subclassfeature3.1" : { name : "Combat Superiority", source : [["UA:GH", 2]], minlevel : 3, description: desc([ "I gain a number of superiority dice that I can use to fuel special maneuvers (see below)", "I can use only one maneuver per attack; I regain all superiority dice after a short rest", "\u2022 Use after rolling to hit; I add the superiority die to my attack roll", "\u2022 Use after damaging a creature; I add the superiority die to the damage roll", " Also, the attack imposes disadvantage on any concentration save resulting from it", "\u2022 Use after Int/Wis/Cha save, before knowing success/fail; add the die to the save total", "\u2022 Use with Wis (Perception) to detect hidden or Wis (Insight) to see if lying to me", " After rolling but before knowing if success/fail; I add the superiority die to the check", ]), additional : ["", "", "d8", "d8", "d8", "d8", "d8", "d8", "d8", "d10", "d10", "d10", "d10", "d10", "d10", "d10", "d10", "d12", "d12", "d12"], usages : [0, 0, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6], recovery : "short rest" }, "subclassfeature3.2" : { name : "Hunter's Mysticism", source : [["UA:GH", 2]], minlevel : 3, usages : 1, recovery : "long rest", description: desc([ "I can cast Detect Magic as a ritual and Protection from Evil & Good once per long rest", "I gain the ability to speak one of the following languages: Abyssal, Celestial, or Infernal", ]), action : [["action", " (Prot vs. Evil/Good)"]], languageProfs : [["Abyssal, Celestial, or Infernal", 1]], spellcastingBonus : [{ name : "Spirit Seeker", spells : ["detect magic"], selection : ["detect magic"], firstCol : SpellRitualTag, spellcastingAbility : 5 }, { name : "Spirit Seeker", spells : ["protection from evil and good"], selection : ["protection from evil and good"], firstCol : "oncelr" }], spellChanges : { "detect magic" : { time : "10 min", changes : "I can cast this spell only as a ritual, thus its casting time is 10 minutes longer." } } }, "subclassfeature7" : { name : "Monster Slayer", source : [["UA:GH", 2]], minlevel : 7, usages : 1, recovery : "long rest", description: desc([ "Whenever I use a superiority die, I can choose to expend two, adding both to the roll", "If the target is an aberration, fey, fiend, or undead, both dice deal maximum damage", ]), action : [["action", ""]] }, "subclassfeature10" : { name : "Improved Combat Superiority", source : [["UA:GH", 2]], minlevel : 10, description: desc("My superiority dice turn into d10s at 10th level and into d12s at 18th level") }, "subclassfeature15" : { name : "Relentless", source : [["UA:GH", 2]], minlevel : 15, description: desc("I regain one superiority die if I have no more remaining when I roll initiative") } } }); AddSubClass("rogue", "inquisitive-ua", { regExpSearch : /^(?=.*(rogue|miscreant))(?=.*inquisitive).*$/i, subname : "Inquisitive", source : [["UA:GH", 3]], features : { "subclassfeature3" : { name : "Ear for Deceit", source : [["UA:GH", 3]], minlevel : 3, description: desc([ "When using Wis (Insight) to sense if someone is lying, I can choose to use a fixed total", "This total is 8 + Wis modifier + proficiency bonus (if proficient, or twice if expertise)", ]), }, "subclassfeature3.1" : { name : "Eye for Detail", source : [["UA:GH", 3]], minlevel : 3, description: desc([ "I can use the bonus action granted by Cunning Action for the following as well:", "\u2022 To make a Wisdom (Perception) check to spot a hidden creature or object", "\u2022 To make an Intelligence (Investigation) check to uncover and decipher clues", "\u2022 To use Insightful Fighting (see below)", ]), }, "subclassfeature3.2" : { name : "Insightful Fighting", source : [["UA:GH", 3]], minlevel : 3, description: desc([ "As an action or bonus action, I can decipher the tactics of an active opponent I can see", "I have to make a Wisdom (Insight) check vs. the target's Charisma (Deception) check", "If I succeed, I can use sneak attack on the target regardless of advantage/disadvantage", "This benefit lasts for 1 minute or until I successfully use Insightful Fighting again", ]), action : [["action", ""]] }, "subclassfeature9" : { name : "Steady Eye", source : [["UA:GH", 3]], minlevel : 9, usages : 1, recovery : "long rest", description: desc("If not moving during my turn, I gain adv. on Wis (Perception) to find hidden things") }, "subclassfeature13" : { name : "Unerring Eye", source : [["UA:GH", 3]], minlevel : 13, description: desc([ "As an action, I can sense magical deceptions within 30 feet of me, but not what it does", "I learn the presence of illusions, shapechanged creatures, or magic designed to deceive", ]), action : [["action", ""]] }, "subclassfeature17" : { name : "Eye for Weakness", source : [["UA:GH", 3]], minlevel : 17, description: desc("While my Insightful Fighting is active, I add 2d6 to sneak attacks against that target") } } }); // ua_20160606_Feats.js // This file adds the content from the Unearthed Arcana: Feats article to MPMB's Character Record Sheet // Define the source SourceList["UA:F"] = { name : "Unearthed Arcana: Feats", abbreviation : "UA:F", group : "Unearthed Arcana", url : "https://media.wizards.com/2016/downloads/DND/UA-Feats-V1.pdf", date : "2016/06/06" }; // Add 8 feats: 4 'weapon mastery' feats and 4 'tool' feats // This doesn't add the "Warhammer Master" feat, as that is only in the article to illustrate how not to design a feat FeatsList["fell handed-ua"] = { name : "Fell Handed", source : [["UA:F", 2], ["UA", 0]], descriptionFull : "You master the handaxe, battleaxe, greataxe, warhammer, and maul. You gain the following benefits when using any of them:\n \u2022 You gain a +1 bonus to attack rolls you make with the weapon.\n \u2022 Whenever you have advantage on a melee attack roll you make with the weapon and hit, you can knock the target prone if the lower of the two d20 rolls would also hit the target.\n \u2022 Whenever you have disadvantage on a melee attack roll you make with the weapon, the target takes bludgeoning damage equal to your Strength modifier (minimum of 0) if the attack misses but the higher of the two d20 rolls would have hit.\n \u2022 If you use the Help action to aid an ally's melee attack while you're wielding the weapon, you knock the target's shield aside momentarily. In addition to the ally gaining advantage on the attack roll, the ally gains a +2 bonus to the roll if the target is using a shield.", description : "With a handaxe, battleaxe, greataxe, warhammer, or maul, I get +1 to hit, knock prone if I have adv. and hit with both rolls, with disadv. still do Str mod in bludg. damage if I miss but the other die would've hit, can use Help to give ally +2 to hit vs. enemy with a shield.", calcChanges : { atkAdd : [ function (fields, v) { if ((/handaxe|battleaxe|greataxe|warhammer|maul/).test(v.baseWeaponName)) { fields.Description += (fields.Description ? '; ' : '') + 'Adv: knock prone if both dice hit; Disadv: Str Mod bludg. damage on miss but 2nd die would hit'; }; }, "With a handaxe, battleaxe, greataxe, warhammer, or maul, I get the following benefits:\n \u2022 +1 to hit;\n \u2022 When attacking with advantage, the target is knocked prone if both die would hit;\n \u2022 When attacking with disadvantage and missing, still do my Strength modifier in bludgeoning damage." ], atkCalc : [ function (fields, v, output) { if ((/handaxe|battleaxe|greataxe|warhammer|maul/).test(v.baseWeaponName)) output.extraHit += 1; }, ""] } }; FeatsList["blade mastery-ua"] = { name : "Blade Mastery", source : [["UA:F", 2], ["UA", 0]], descriptionFull : "You master the shortsword, longsword, scimitar, rapier, and greatsword. You gain the following benefits when using any of them:\n \u2022 You gain a +1 bonus to attack rolls you make with the weapon.\n \u2022 On your turn, you can use your reaction to assume a parrying stance, provided you have the weapon in hand. Doing so grants you a +1 bonus to your AC until the start of your next turn or until you're not holding the weapon.\n \u2022 When you make an opportunity attack with the weapon, you have advantage on the attack roll.", description : "With a shortsword, longsword, greatsword, scimitar, or rapier, I get +1 to hit, advantage on opportunity attacks, and with the weapon in hand I can use my reaction to assume a parrying stance that gives me +1 AC until the start of my next turn.", calcChanges : { atkAdd : [ function (fields, v) { if ((/shortsword|longsword|greatsword|scimitar|rapier/).test(v.baseWeaponName)) { fields.Description += (fields.Description ? '; ' : '') + 'Advantage on opportunity attacks'; }; }, "With a shortsword, longsword, greatsword, scimitar, or rapier, I get the following benefits:\n \u2022 +1 to hit;\n \u2022 Advantage on opportunity attacks." ], atkCalc : [ function (fields, v, output) { if ((/shortsword|longsword|greatsword|scimitar|rapier/).test(v.baseWeaponName)) output.extraHit += 1; }, ""] }, action : [["reaction", " Parrying Stance"]] }; FeatsList["flail mastery-ua"] = { name : "Flail Mastery", source : [["UA:F", 3], ["UA", 0]], descriptionFull : "The flail is a tricky weapon to use, but you have spent countless hours mastering it. You gain the following benefits:\n \u2022 You gain a +1 bonus to attack rolls you make with a flail.\n \u2022 As a bonus action on your turn, you can prepare yourself to extend your flail to sweep over targets' shields. Until the end of this turn, your attack rolls with a flail gain a +2 bonus against any target using a shield.\n \u2022 When you hit with an opportunity attack using a flail, the target must succeed on a Strength saving throw (DC 8 + your proficiency bonus + your Strength modifier) or be knocked prone.", calculate : "event.value = 'With a flail, I get +1 to hit, and enemies hit by an opportunity attack with it have to make a Str save DC ' + (8 + Number(How('Proficiency Bonus')) + What('Str Mod')) + ' (8 + Prof Bonus + Str mod) or be knocked prone. As a bonus action, I can get +2 to hit with my flail vs. targets with shields until the end of my turn.';", calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == 'flail') { fields.Description += (fields.Description ? '; ' : '') + 'On opportunity attack hit, Strength save (DC 8 + Prof Bonus + Str mod) or knocked prone'; }; }, "With a flail, I get the following benefits:\n \u2022 +1 to hit;\n \u2022 Targets hit with it must make a Strength saving throw (DC 8 + proficiency bonus + Strength modifier) or be knocked prone." ], atkCalc : [ function (fields, v, output) { if (v.baseWeaponName == 'flail') output.extraHit += 1; }, ""] }, action : [["bonus action", ""]] }; FeatsList["spear mastery-ua"] = { name : "Spear Mastery", source : [["UA:F", 3], ["UA", 0]], descriptionFull : "Though the spear is a simple weapon to learn, it rewards you for the time you have taken to master it. You gain the following benefits:\n \u2022 You gain a +1 bonus to attack rolls you make with a spear.\n \u2022 When you use a spear, its damage die changes from a d6 to a d8, and from a d8 to a d10 when wielded with two hands. (This benefit has no effect if another feature has already improved the weapon's die.)\n \u2022 You can set your spear to receive a charge. As a bonus action, choose a creature you can see that is at least 20 feet away from you. If that creature moves within your spear's reach on its next turn, you can make a melee attack against it with your spear as a reaction. If the attack hits, the target takes an extra 1d8 piercing damage, or an extra 1d10 piercing damage if you wield the spear with two hands. You can't use this ability if the creature used the Disengage action before moving.\n \u2022 As a bonus action on your turn, you can increase your reach with a spear by 5 feet for the rest of your turn.", description : "With a spear, I get +1 to hit and it does d8 damage (versatile d10). As a bonus action, I select a target at least 20 ft away. If it moves in reach on its next turn, I can attack it as a reaction, extra damage die. As a bonus action, I can increase the spear's reach by 5 ft.", calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == 'spear') { fields.Damage_Die = fields.Damage_Die === '1d6' ? '1d8' : fields.Damage_Die; fields.Description = fields.Description.replace('versatile (1d8)', 'versatile (1d10)'); }; }, "With a spear, I get the following benefits:\n \u2022 +1 to hit;\n \u2022 The spear damage die increases to d8 (versatile d10).", 1 ], atkCalc : [ function (fields, v, output) { if (v.baseWeaponName == 'spear') output.extraHit += 1; }, ""] }, action : [["bonus action", " (set vs. charge)"], ['bonus action', ' (increase reach)']] }; FeatsList["alchemist-ua"] = { name : "Alchemist", source : [["UA:F", 4], ["UA", 0]], descriptionFull : "You have studied the secrets of alchemy and are an expert in its practice, gaining the following benefits:\n \u2022 Increase your Intelligence score by 1, to a maximum of 20.\n \u2022 You gain proficiency with alchemist's supplies. If you are already proficient with them, you add double your proficiency bonus to checks you make with them.\n \u2022 As an action, you can identify one potion within 5 feet of you, as if you had tasted it. You must see the liquid for this benefit to work.\n \u2022 Over the course of any short rest, you can temporarily improve the potency of one potion of healing of any rarity. To use this benefit, you must have alchemist's supplies with you, and the potion must be within reach. If the potion is drunk no more than 1 hour after the short rest ends, the creature drinking the potion can forgo the potion's die roll and regains the maximum number of hit points that the potion can restore.", description : "I gain proficiency with alchemist's supplies, or expertise if already proficient. As an action, I can identify a potion within 5 ft. During a rest with alchemist's supplies, I can enhance a potion of healing, to heal its max. Consuming it within 1 hour maximizes its effects [+1 Int]", scores : [0, 0, 0, 1, 0, 0], action : [["action", " (identify potion)"]], toolProfs : [["Alchemist's supplies", "Int"]], eval : function () { if ((/(alchemist|alchemy).*(supplies|kit)/i).test(What('Too Text'))) { Checkbox('Too Exp', true); }; }, removeeval : function () { if ((/(alchemist|alchemy).*(supplies|kit)/i).test(What('Too Text'))) { Checkbox('Too Exp', false); }; } }; FeatsList["burglar-ua"] = { name : "Burglar", source : [["UA:F", 4], ["UA", 0]], descriptionFull : "You pride yourself on your quickness and your close study of certain clandestine activities. You gain the following benefits:\n \u2022 Increase your Dexterity score by 1, to a maximum of 20.\n \u2022 You gain proficiency with thieves' tools. If you are already proficient with them, you add double your proficiency bonus to checks you make with them.", description : "I gain proficiency with thieves' tools, or expertise with them if I'm already proficient. [+1 Dexterity]", scores : [0, 1, 0, 0, 0, 0], toolProfs : [["Thieves' tools", "Dex"]], eval : function () { if ((/thieve.?s.*tools/i).test(What('Too Text'))) { Checkbox('Too Exp', true); }; }, removeeval : function () { if ((/thieve.?s.*tools/i).test(What('Too Text'))) { Checkbox('Too Exp', false); }; } }; FeatsList["gourmand-ua"] = { name : "Gourmand", source : [["UA:F", 4]], descriptionFull : "You have mastered a variety of special recipes, allowing you to prepare exotic dishes with useful effects. You gain the following benefits:\n \u2022 Increase your Constitution score by 1, to a maximum of 20.\n \u2022 You gain proficiency with cook's utensils. If you are already proficient with them, you add double your proficiency bonus to checks you make with them.\n \u2022 As an action, you can inspect a drink or plate of food within 5 feet of you and determine whether it is poisoned, provided that you can see and smell it.\n \u2022 During a long rest, you can prepare and serve a meal that helps you and your allies recover from the rigors of adventuring, provided you have suitable food, cook's utensils, and other supplies on hand. The meal serves up to six people, and each person who eats it regains two additional Hit Dice at the end of the long rest. In addition, those who partake of the meal have advantage on Constitution saving throws against disease for the next 24 hours.", description : "I gain proficiency with cook's utensils, or expertise if already proficient. As an action, I can detect poison in food within 5 ft. In a long rest with food/supplies, I can have 6 creatures regain 2 extra HD and give them adv. on Con saves vs. disease for 24 hours. [+1 Con]", scores : [0, 0, 1, 0, 0, 0], action : [["action", " (inspect food)"]], toolProfs : [["Cook's utensils", "Int"]], eval : function () { if ((/cook.*utensils/i).test(What('Too Text'))) { Checkbox('Too Exp', true); }; }, removeeval : function () { if ((/cook.*utensils/i).test(What('Too Text'))) { Checkbox('Too Exp', false); }; } }; FeatsList["master of disguise-ua"] = { name : "Master of Disguise", source : [["UA:F", 4], ["UA", 0]], descriptionFull : "You have honed your ability to shape your personality and to read the personalities of others. You gain the following benefits:\n \u2022 Increase your Charisma score by 1, to a maximum of 20.\n \u2022 You gain proficiency with the disguise kit. If you are already proficient with it, you add double your proficiency bonus to checks you make with it.\n \u2022 If you spend 1 hour observing a creature, you can then spend 8 hours crafting a disguise you can quickly don to mimic that creature. Making the disguise requires a disguise kit. You must make checks as normal to disguise yourself, but you can assume the disguise as an action.", description : "I gain proficiency with the disguise kit, or expertise with it if I'm already proficient. After observing a creature for 1 hour, I can craft a disguise to mimic it in 8 hours with a disguise kit. Once finished, I can don this disguise as an action. [+1 Charisma]", scores : [0, 0, 0, 0, 0, 1], action : [["action", " (don disguise)"]], toolProfs : [["Disguise kit", "Cha"]], eval : function () { if ((/disguise.*kit/i).test(What('Too Text'))) { Checkbox('Too Exp', true); }; }, removeeval : function () { if ((/disguise.*kit/i).test(What('Too Text'))) { Checkbox('Too Exp', false); }; } }; // ua_20160801_The-Faithful.js // This file adds the content from the Unearthed Arcana: The Faithful article to MPMB's Character Record Sheet // Define the source SourceList["UA:TF"] = { name : "Unearthed Arcana: The Faithful", abbreviation : "UA:TF", group : "Unearthed Arcana", url : "https://media.wizards.com/2016/dnd/downloads/UA%20Non-Divine%20Faithful%20SFG.pdf", date : "2016/08/01" }; // Adds 2 subclasses, 1 for the Warlock and 1 for the Wizard AddSubClass("warlock", "the seeker-ua", { // Still valid 2021-09-21 regExpSearch : /^(?=.*warlock)(?=.*seeker).*$/i, subname : "the Seeker", source : [["UA:TF", 1]], spellcastingExtra : ["feather fall", "jump", "levitate", "locate object", "clairvoyance", "sending", "arcane eye", "locate creature", "legend lore", "passwall"], features : { "subclassfeature1" : { name : "Shielding Aurora", source : [["UA:TF", 1]], minlevel : 1, description: desc([ "As a bonus action, I create a whirling aurora of brilliant energy around me", "It lasts until the end of my next turn and grants me resistance to all damage", "Any hostile ending its turn in 10 ft of me get Warlock level + Cha mod radiant damage", ]), usages : 1, recovery : "short rest", action : [["bonus action", ""]] }, "subclassfeature6" : { name : "Astral Refuge", source : [["UA:TF", 2]], minlevel : 6, description: desc([ "As an action, I can step into an astral refuge, coming back at the end of the turn", "While in the astral refuge, I can take two actions to cast spells targeting just me", ]), action : [["action", ""]] }, "subclassfeature10" : { name : "Far Wanderer", source : [["UA:TF", 2]], minlevel : 10, description: desc("I no longer need to breathe, and I gain resistance to fire damage and cold damage"), dmgres : ["Cold", "Fire"] }, "subclassfeature14" : { name : "Astral Sequestration", source : [["UA:TF", 2]], minlevel : 14, description: desc([ "With a 5 minutes ritual, I can shift myself and ten willing creatures to the Astral Plane", "While sequestered an Astral Plane, we gain the full benefits of a short rest", "After this rest, we return to the same space as before, without any time having passed", ]), usages : 1, recovery : "long rest" } } }); // Add a Pact Boon option that is only available for "the Seeker" subclass AddFeatureChoice(ClassList.warlock.features["pact boon"], false, "Pact of the Star Chain", { name : "Pact of the Star Chain", source : [["UA:TF", 1]], description : desc([ "My patron grants me an item of power which disappears when I die", "While it is on my person, I can cast Augury as a ritual", "Additionally, once per short rest, I can get advantage on an Intelligence check", "If I lose this item I can perform a 1-hour ceremony to get a replacement" ]), usages : 1, recovery : "short rest", spellcastingBonus : [{ name : "Pact of the Star Chain", spells : ["augury"], selection : ["augury"], firstCol : SpellRitualTag, }], spellChanges : { "augury" : { time : "11 min", changes : "With my Pact of the Star Chain boon I can cast Augury only as a ritual, thus requiring 10 extra minutes to cast it." } }, prereqeval : function(v) { return classes.known.warlock && classes.known.warlock.subclass.indexOf("the seeker") !== -1 ? true : "skip"; } }); RunFunctionAtEnd(function() { var theTheurgySubclass = AddSubClass("wizard", "theurgy-ua", { // Still valid 2021-09-21 regExpSearch : /^((?=.*mystic)(?=.*theurge))|(?=.*(theurgy|theurgist)).*$/i, subname : "Theurgy", source : [["UA:TF", 1], ["UA:WR", 1]], fullname : "Theurgist", features : { "subclassfeature2" : { name : "Arcane Initiate", source : [["UA:TF", 2], ["UA:WR", 1]], minlevel : 2, description: desc([ 'Choose a Cleric Domain using the "Choose Feature" button above', "When I gain a wizard level I can replace one of the spells I would add to my spellbook", "I can replace it with one of the chosen domain spells, if it is of a level I can cast", "If my spellbook has all the domain spells, I can select any cleric spell of a level I can cast", "Other wizards cannot copy cleric spells from my spellbook into their own spellbooks", ]), calcChanges : { spellList : [ function(spList, spName, spType) { if (spName !== "wizard" || spType.indexOf("bonus") !== -1 || !CurrentSpells.wizard.extra || !CurrentSpells.wizard.selectSp || !spList.level || !spList.level[1]) return; var domainSpells = CurrentSpells.wizard.extra; // now stop this function if even one of the domain spells is not already in the spellbook var knownSpells = [].concat(CurrentSpells.wizard.selectSp ? CurrentSpells.wizard.selectSp : []).concat(CurrentSpells.wizard.selectSpSB ? CurrentSpells.wizard.selectSpSB : []); for (var i = 0; i < domainSpells.length; i++) { if (knownSpells.indexOf(domainSpells[i]) == -1) return; } // get all the cleric spells, level 1-9 var clericSpells = CreateSpellList({"class" : "cleric", level : [1,9]}); spList.extraspells = spList.extraspells.concat(clericSpells); }, "When I gain a wizard level after my spellbook already has all the spells of my chosen domain, I can instead select any cleric spell of a level I can cast as one of the spells I gain from levelling up." ] }, choices : [], choiceDependencies : [{ feature : "subclassfeature2.3" }, { feature : "subclassfeature6" }, { feature : "subclassfeature10" }, { feature : "subclassfeature14" }] }, "subclassfeature2.1" : { name : "Channel Arcana", source : [["UA:TF", 2], ["UA:WR", 1]], minlevel : 2, description: desc("I can channel arcane energy from my deity; the save for this is my wizard spell DC"), usages : [0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3], recovery : "short rest" }, "subclassfeature2.2" : { name : "Channel Arcana: Divine Arcana", source : [["UA:TF", 2], ["UA:WR", 1]], minlevel : 2, description: desc([ "As a bonus action, I speak a prayer to control the flow of magic around me", "The next spell I cast gains a +2 bonus to its attack roll or saving throw DC", ]), action : [["bonus action", ""]] }, "subclassfeature2.3" : { name : "Channel Arcana: Domain", source : [["UA:TF", 2], ["UA:WR", 1]], minlevel : 2, description: desc('Use the "Choose Feature" button above to select the domain'), choices : [], choicesNotInMenu : true }, "subclassfeature6" : { name : "Arcane Acolyte", source : [["UA:TF", 3], ["UA:WR", 1]], minlevel : 6, description: desc('Use the "Choose Feature" button above to select the domain'), choices : [], choicesNotInMenu : true }, "subclassfeature10" : { name : "Arcane Priest", source : [["UA:TF", 3], ["UA:WR", 2]], minlevel : 10, description: desc('Use the "Choose Feature" button above to select the domain'), choices : [], choicesNotInMenu : true }, "subclassfeature14" : { name : "Arcane High Priest", source : [["UA:TF", 3], ["UA:WR", 2]], minlevel : 14, description: desc('Use the "Choose Feature" button above to select the domain'), choices : [], choicesNotInMenu : true } } }); var MTfeat = ClassSubList[theTheurgySubclass].features; for (var i = 0; i < ClassList.cleric.subclasses[1].length; i++) { var aDomain = ClassSubList[ClassList.cleric.subclasses[1][i]]; if (!aDomain) continue; var dSource = aDomain.source ? aDomain.source : aDomain.features["subclassfeature1"] && aDomain.features["subclassfeature1"].source ? aDomain.features["subclassfeature1"].source : [["UA:TF", 0], ["UA:WR", 0]]; var suffix = 1; var entryDoNm = aDomain.subname; while (MTfeat["subclassfeature2"].choices.indexOf(entryDoNm) !== -1) { suffix += 1; entryDoNm = aDomain.subname + " (" + suffix + ")"; }; MTfeat["subclassfeature2"].choices.push(entryDoNm); MTfeat["subclassfeature2"][entryDoNm.toLowerCase()] = { name : "Arcane Initiate: " + aDomain.subname, source : dSource, spellcastingExtra : aDomain.spellcastingExtra, description: desc([ "When I gain a wizard level I can replace one of the spells I would add to my spellbook", "I can replace it with one of the " + aDomain.subname.toLowerCase() + " spells, if it is of a level I can cast", "If my spellbook has all the domain spells, I can select any cleric spell of a level I can cast", "Other wizards cannot copy cleric spells from my spellbook into their own spellbooks", ]), }; var AIdomain = MTfeat["subclassfeature2"][entryDoNm.toLowerCase()]; for (var aFea in aDomain.features) { var dFea = aDomain.features[aFea]; if (dFea.minlevel === 2 && (/channel divinity/i).test(dFea.name)) { MTfeat["subclassfeature2.3"].choices.push(entryDoNm); MTfeat["subclassfeature2.3"][entryDoNm.toLowerCase()] = newObj(dFea); MTfeat["subclassfeature2.3"][entryDoNm.toLowerCase()].name = MTfeat["subclassfeature2.3"][entryDoNm.toLowerCase()].name.replace(/channel divinity/i, "Channel Arcana"); }; if (dFea.minlevel === 1 && !dFea.armor && !dFea.weapons && !dFea.armorProfs && !dFea.weaponProfs) { if (MTfeat["subclassfeature6"].choices.indexOf(entryDoNm) === -1) { //if the entry does not exist yet MTfeat["subclassfeature6"].choices.push(entryDoNm); MTfeat["subclassfeature6"][entryDoNm.toLowerCase()] = newObj(dFea); } else { //add to the existing entry var theFea = MTfeat["subclassfeature6"][entryDoNm.toLowerCase()]; theFea.name += " \u0026 " + dFea.name; theFea.description += dFea.description; for (var subFea in dFea) { if (theFea[subFea] === undefined) theFea[subFea] = dFea[subFea]; }; }; }; if (dFea.minlevel === 6 && !dFea.armor && !dFea.weapons && !dFea.armorProfs && !dFea.weaponProfs) { if (MTfeat["subclassfeature10"].choices.indexOf(entryDoNm) === -1) { //if the entry does not exist yet MTfeat["subclassfeature10"].choices.push(entryDoNm); MTfeat["subclassfeature10"][entryDoNm.toLowerCase()] = newObj(dFea); } else { //add to the existing entry var theFea = MTfeat["subclassfeature10"][entryDoNm.toLowerCase()]; theFea.name += " \u0026 " + dFea.name; theFea.description += dFea.description; for (var subFea in dFea) { if (theFea[subFea] === undefined) theFea[subFea] = dFea[subFea]; }; }; }; if (dFea.minlevel === 17 && !dFea.armor && !dFea.weapons && !dFea.armorProfs && !dFea.weaponProfs) { if (MTfeat["subclassfeature14"].choices.indexOf(entryDoNm) === -1) { //if the entry does not exist yet MTfeat["subclassfeature14"].choices.push(entryDoNm); MTfeat["subclassfeature14"][entryDoNm.toLowerCase()] = newObj(dFea); } else { //add to the existing entry var theFea = MTfeat["subclassfeature14"][entryDoNm.toLowerCase()]; theFea.name += " \u0026 " + dFea.name; theFea.description += dFea.description; for (var subFea in dFea) { if (theFea[subFea] === undefined) theFea[subFea] = dFea[subFea]; }; }; }; }; }; }); // ua_20160912_The-Ranger,-Revised.js // This file adds the content from the Unearthed Arcana: The Ranger, Revised article to MPMB's Character Record Sheet // Define the source SourceList["UA:RR"] = { name : "Unearthed Arcana: The Ranger, Revised", abbreviation : "UA:RR", group : "Unearthed Arcana", url : "https://media.wizards.com/2016/dnd/downloads/UA_RevisedRanger.pdf", date : "2016/09/12" }; //adds an alternative ranger class, including three subclasses ClassList.rangerua = { regExpSearch : /^((?=.*(ranger|strider))|((?=.*(nature|natural))(?=.*(knight|fighter|warrior|warlord|trooper)))).*$/i, name : "Ranger", source : [["UA:RR", 2]], primaryAbility : "Dexterity and Wisdom", abilitySave : 5, prereqs : "Dexterity 13 and Wisdom 13", improvements : [0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5, 5], die : 10, saves : ["Str", "Dex"], skillstxt : { primary : "Choose three from Animal Handling, Athletics, Insight, Investigation, Nature, Perception, Stealth, and Survival", secondary : "Choose one from Animal Handling, Athletics, Insight, Investigation, Nature, Perception, Stealth, or Survival" }, armorProfs : { primary : [true, true, false, true], secondary : [true, true, false, true] }, weaponProfs : { primary : [true, true], secondary : [true, true] }, equipment : "Ranger starting equipment:\n \u2022 Scale mail -or- leather armor;\n \u2022 Two shortswords -or- two simple melee weapons;\n \u2022 A dungeoneer's pack -or- an explorer's pack;\n \u2022 A longbow and a quiver of 20 arrows.\n\nAlternatively, choose 5d4 \xD7 10 gp worth of starting equipment instead of both the class' and the background's starting equipment.", subclasses : ["Ranger Conclaves", []], subclassGainedLevel : 3, attacks : [1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], spellcastingFactor : 2, spellcastingList : { "class" : "ranger" }, spellcastingKnown : { spells : [0, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11] }, features : { "favored enemy" : { name : "Favored Enemy", source : [["UA:RR", 2]], minlevel : 1, description: desc([ 'Use the "Choose Feature" button above to select a favored enemy', "Choose from beasts, fey, humanoids, monstrosities, or undead", "I get a bonus to damage rolls with weapon attacks against the chosen favored enemy", "I have adv. on Wis (Survival) to track and Int checks to recall info about them", "I also learn one language of my choice, typically one associated with the favored enemy", ]), additional : levels.map(function (n) { return (n < 6 ? "+2" : "+4") + " weapon attack damage"; }), choices : ["Beasts", "Fey", "Humanoids", "Monstrosities", "Undead"], "beasts" : { name : "Favored Enemy: Beasts", description: desc([ "I get a bonus to damage rolls with weapon attacks against beasts", "I have adv. on Wis (Survival) to track and Int checks to recall info about beasts", "I learn a language, typically one spoken by or associated with beasts", ]), }, "fey" : { name : "Favored Enemy: Fey", description: desc([ "I get a bonus to damage rolls with weapon attacks against fey", "I have adv. on Wis (Survival) to track and Int checks to recall info about fey", "I learn a language, typically one spoken by or associated with fey", ]), }, "humanoids" : { name : "Favored Enemy: Humanoids", description: desc([ "I get a bonus to damage rolls with weapon attacks against humanoids", "I have adv. on Wis (Survival) to track and Int checks to recall info about humanoids", "I learn a language, typically one spoken by or associated with humanoids", ]), }, "monstrosities" : { name : "Favored Enemy: Monstrosities", description: desc([ "I get a bonus to damage rolls with weapon attacks against monstrosities", "I have adv. on Wis (Survival) to track and Int checks to recall info about monstrosities", "I learn a language, typically one spoken by or associated with monstrosities", ]), }, "undead" : { name : "Favored Enemy: Undead", description: desc([ "I get a bonus to damage rolls with weapon attacks against undead", "I have adv. on Wis (Survival) to track and Int checks to recall info about undead", "I learn a language, typically one spoken by or associated with undead", ]), }, languageProfs : [1], calcChanges : { atkCalc : [ function (fields, v, output) { if (!v.isSpell && classes.known.rangerua && classes.known.rangerua.level && (/favou?red.{1,2}enemy/i).test(v.WeaponTextName)) { output.extraDmg += classes.known.rangerua.level < 6 ? 2 : 4; }; }, "If I include the words 'Favored Enemy' in the name or description of a weapon, it gets bonus damage, depending on my Ranger level." ] } }, "natural explorer" : { name : "Natural Explorer", source : [["UA:RR", 3]], minlevel : 1, description: desc([ "On my first turn in combat, I have adv. on attacks against those that did not yet act", "I ignore difficult terrain; I have adv. on Initiative; I have benefits in travel, see page 3", ]), "travel benefits" : { name : "Travel Benefits", extraname : "Natural Explorer", source : [["UA:RR", 3]], description : desc([ "After one hour of traveling in the wilderness I gain the following benefits:", " \u2022 My allies and I are not slowed by difficult terrain and can't get lost except by magic", " \u2022 I am alert to danger even when doing something else; I forage twice as much food", " \u2022 If alone (or alone with animal companion), I can move stealthily at my normal pace", " \u2022 When tracking others, I also learn their exact number, size, and time since passing" ]) }, autoSelectExtrachoices : [{ extrachoice : "travel benefits" }], advantages : [["Initiative", true]] }, "fighting style" : function () { var FSfea = newObj(ClassList.ranger.features["fighting style"]); FSfea.source = ["UA:RR", 3]; return FSfea; }(), "spellcasting" : { name : "Spellcasting", source : [["UA:RR", 3]], minlevel : 2, description: desc("I can cast ranger spells that I know, using Wisdom as my spellcasting ability"), additional : ["", "2 spells known", "3 spells known", "3 spells known", "4 spells known", "4 spells known", "5 spells known", "5 spells known", "6 spells known", "6 spells known", "7 spells known", "7 spells known", "8 spells known", "8 spells known", "9 spells known", "9 spells known", "10 spells known", "10 spells known", "11 spells known", "11 spells known"] }, "primeval awareness" : { name : "Primeval Awareness", source : [["UA:RR", 4]], minlevel : 3, description: desc([ "If I haven't attacked a beast within the last 10 min, I can communicate with it", "As an action, I convey simple ideas, and read mood, intent, emotions, needs, etc.", "By concentrating for 1 min, I know if any of my favored enemies are within 5 miles", "Per group, I sense the number, general direction, distance, and type of favored enemy", ]), action : [["action", " (communicate)"]] }, "subclassfeature3" : { name : "Ranger Conclave", source : [["UA:RR", 4]], minlevel : 3, description: desc([ 'Choose a Ranger Conclave you strive to emulate and put it in the "Class" field', "Choose either Beast Conclave, Deep Stalker Conclave or Hunter Conclave", ]), }, "greater favored enemy" : { name : "Greater Favored Enemy", source : [["UA:RR", 4]], minlevel : 6, description: desc([ 'Use the "Choose Feature" button above to select a greater favored enemy', "Choose from aberrations, celestials, constructs, dragons, elementals, fiends, or giants", "I get all the bonuses from Favored Enemy for this creature type as well", "Additionally, I have adv. on saves vs. spells and abilities of this greater favored enemy", ]), additional : "+4 weapon attack damage", choices : ["Aberrations", "Celestials", "Constructs", "Dragons", "Elementals", "Fiends", "Giants"], "aberrations" : { name : "Greater Favored Enemy: Aberrations", description: desc([ "The bonuses I get from Favored Enemy now also work against aberrations", "Additionally, I have advantage on saves against spells and abilities used by aberrations", ]), savetxt : { adv_vs : ["spells/abilities of aberrations"] } }, "celestials" : { name : "Greater Favored Enemy: Celestials", description: desc([ "The bonuses I get from Favored Enemy now also work against celestials", "Additionally, I have advantage on saves against spells and abilities used by celestials", ]), savetxt : { adv_vs : ["spells/abilities of celestials"] } }, "constructs" : { name : "Greater Favored Enemy: Constructs", description: desc([ "The bonuses I get from Favored Enemy now also work against constructs", "Additionally, I have advantage on saves against spells and abilities used by constructs", ]), savetxt : { adv_vs : ["spells/abilities of constructs"] } }, "dragons" : { name : "Greater Favored Enemy: Dragons", description: desc([ "The bonuses I get from Favored Enemy now also work against dragons", "Additionally, I have advantage on saves against spells and abilities used by dragons", ]), savetxt : { adv_vs : ["spells/abilities of dragons"] } }, "elementals" : { name : "Greater Favored Enemy: Elementals", description: desc([ "The bonuses I get from Favored Enemy now also work against elementals", "Additionally, I have advantage on saves against spells and abilities used by elementals", ]), savetxt : { adv_vs : ["spells/abilities of elementals"] } }, "fiends" : { name : "Greater Favored Enemy: Fiends", description: desc([ "The bonuses I get from Favored Enemy now also work against fiends", "Additionally, I have advantage on saves against spells and abilities used by fiends", ]), savetxt : { adv_vs : ["spells/abilities of fiends"] } }, "giants" : { name : "Greater Favored Enemy: Giants", description: desc([ "The bonuses I get from Favored Enemy now also work against giants", "Additionally, I have advantage on saves against spells and abilities used by giants", ]), savetxt : { adv_vs : ["spells/abilities of giants"] } }, languageProfs : [1] }, "fleet of foot" : { name : "Fleet of Foot", source : [["UA:RR", 4]], minlevel : 8, description: desc("I can take the Dash action as a bonus action"), action : [["bonus action", ""]] }, "hide in plain sight" : { name : "Hide in Plain Sight", source : [["UA:RR", 4]], minlevel : 10, description: desc([ "When I hide on my turn without moving, others take -10 Wis (Perception) to find me", "This lasts until something reveals my presence, or until I (voluntarily) move/fall prone", ]), }, "vanish" : { name : "Vanish", source : [["UA:RR", 5]], minlevel : 14, description: desc("I can't be nonmagically tracked if I don't want to be and can Hide as a bonus action"), action : [["bonus action", ""]] }, "feral senses" : { name : "Feral Senses", source : [["UA:RR", 5]], minlevel : 18, description: desc([ "When not blinded or deafened, I'm aware of invisible, non-hidden creatures in 30 ft", "I don't have disadvantage when attacking creatures I am aware of but can't see", ]), }, "foe slayer" : { name : "Foe Slayer", source : [["UA:RR", 5]], minlevel : 20, description: desc("Once per turn, I can add Wis mod to the attack or damage roll after I see the die roll") } } }; AddSubClass("rangerua", "beast master-ua", { regExpSearch : /^(?=.*(animal|beast))((?=.*(master|ranger|strider))|((?=.*(nature|natural))(?=.*(knight|fighter|warrior|warlord|trooper)))).*$/i, subname : "Beast Conclave", source : [["UA:RR", 5]], attacks : [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], features : { "subclassfeature3" : { name : "Animal Companion", source : [["UA:RR", 5]], minlevel : 3, description: desc("I call an animal by spending 8 hours and 50 gp; I can revive it with 8 hours and 25 gp"), additional : ["", "", "", "+1 HD for companion", "+2 HD for companion", "+3 HD for companion", "+4 HD for companion", "+5 HD for companion", "+6 HD for companion", "+7 HD for companion", "+8 HD for companion", "+9 HD for companion", "+10 HD for companion", "+11 HD for companion", "+12 HD for companion", "+13 HD for companion", "+14 HD for companion", "+15 HD for companion", "+16 HD for companion", "+17 HD for companion"], creaturesAdd : [["Animal Companion", false, function(AddRemove, prefix) { if (!AddRemove) return; var compOptions = ["Ape", "Black Bear", "Boar", "Giant Badger", "Giant Weasel", "Mule", "Panther", "Wolf"]; var selectedRace = AskUserOptions("Select Animal Companion", "Select which beast you would like to have as your animal companion.\nYou can change the beast at any time using the \"Companion Options\" button at the top of the Companion page.", compOptions, "radio", true); ApplyCompRace(selectedRace, prefix, "companionrr"); }]] }, "subclassfeature3.1" : { name : "Companion's Bond", source : [["UA:RR", 5]], minlevel : 3, description: desc("My companion gains several benefits, see the Companion's sheet") }, "subclassfeature5" : { name : "Coordinated Attack", source : [["UA:RR", 6]], minlevel : 5, description: desc("If I take the Attack action, my companion can use its reaction to make a melee attack") }, "subclassfeature7" : { name : "Beast's Defense", source : [["UA:RR", 6]], minlevel : 7, description: desc("While my companion can see me, it has advantage on all saving throws") }, "subclassfeature11" : { name : "Storm of Claws and Fangs", source : [["UA:RR", 6]], minlevel : 11, description: desc("My companion can, as an action, make melee attacks vs. all creatures within 5 ft of it") }, "subclassfeature15" : { name : "Superior Beast's Defense", source : [["UA:RR", 6]], minlevel : 15, description: desc("My companion can, as a reaction, halve an attack's damage from attacker that it sees") } } }); // Add the Beast Conclave's Animal Companion as a companion option CompanionList.companionrr = { name : "Animal Companion", nameTooltip : "Beast Conclave: Animal Companion", nameOrigin : "Beast Conclave 3", nameMenu : "Animal Companion (Beast Conclave feature)", source : [["UA:RR", 5]], includeCheck : function(sCrea, objCrea, iCreaCR) { // Only specific animals return /^(ape|black bear|boar|giant badger|giant weasel|mule|panther|wolf)$/i.test(sCrea); }, attributesAdd : { header : "Companion", minlevelLinked : ["rangerua", "ranger", "spell-less ranger"], attacksAction : 1, proficiencyBonusLinked : true, features : [{ name : "Coordinated Attack", description : "As a reaction when the ranger owner takes the Attack action, the companion can make one melee attack.", minlevel : 5 }, { name : "Storm of Claws and Fangs", description : "As an action, the companion can make a melee attack against each creature that is within 5 ft.", minlevel : 11 }, { name : "Superior Beast's Defense", description : "As a reaction, the companion can halve the damage of an attack from an attacker that it can see.", minlevel : 15 }], hdLinked : function(prefix) { var iTotalHD = CurrentCompRace[prefix] && CurrentCompRace[prefix].hd ? CurrentCompRace[prefix].hd[0] : 0; var bRngLvls = false; ["rangerua", "ranger", "spell-less ranger"].forEach(function (n) { if (classes.known[n]) { bRngLvls = true; iTotalHD += classes.known[n].level > 3 ? classes.known[n].level - 3 : 0; } }) if (!bRngLvls && classes.totallevel > 3) iTotalHD += classes.totallevel - 3; return iTotalHD; } }, notes : [{ name : "Call forth and bond with an animal", description : "from the wilderness by spending 8 hours and 50 gp", joinString : " " }, { name : "I can have one companion at a time", description : "If it dies, I can spend 8 hours and 25 gp to bring it back", joinString : "; " }, { name : "Companion's Bond", description : [ "It obeys my commands as best it can, or acts on its own if I can't command it", "When moving stealthily together with only my companion, we can move at a normal pace", "It uses my Proficiency Bonus instead of its own and adds this to its AC and damage rolls", "My companion gains proficiency with 2 skills of my choice (not automated), as well as all saves", "It gains a HD (and thus HP) for every ranger level I gain after 3rd, and an ASI whenever I do" ].join("\n "), joinString : typePF ? ": " : "\n " }, { name : "In Combat", description : [ "My companion rolls for initiative and takes actions as normal, but can't use Multiattack", "My companion gains a bonus on damage rolls against my favored enemies just like me" ].join("\n "), joinString : typePF ? ": " : ":\n " }, { name : "Coordinated Attack (Beast Conclave 5, UA:RR 6)", description : "When I take the Attack action, my companion can use its reaction to make one melee attack", joinString : "\n ", minlevel : 5 }, { name : "Beast's Defense (Beast Conclave 7, UA:RR 6)", description : "While my companion can see me, it has advantage on all saving throws", joinString : "\n ", minlevel : 7 }, { name : "Storm of Claws and Fangs (Beast Conclave 11, UA:RR 6)", description : "My companion can, as an action, make a melee attack vs. all creatures within 5 ft of it", joinString : "\n ", minlevel : 11 }, { name : "Superior Beast's Defense (Beast Conclave 15, UA:RR 6)", description : "My companion can, as a reaction, halve the damage of an attack from an attacker that it sees", joinString : "\n ", minlevel : 15 }], attributesChange : function(sCrea, objCrea) { // Add Prof to attack damage for (var i = 0; i < objCrea.attacks.length; i++) { var oAtk = objCrea.attacks[i]; if (!oAtk.modifiers) { oAtk.modifiers = ["", "Prof"]; } else { oAtk.modifiers[1] += "+Prof"; } if (oAtk.description) { // Remove multiattack oAtk.description = oAtk.description.replace(/(((One|Two|2).+as an Attack action)|(2 per Attack));? ?/i, ''); } }; // Remove multiattack trait/feature/action ["traits", "features", "actions"].forEach(function (n) { if (!objCrea[n]) return; for (var i = objCrea[n].length - 1; i > -1; i--) { var oN = objCrea[n][i]; if (oN.name && /multiattack/i.test(oN.name)) { objCrea[n].splice(i, 1); } } }) // Proficient with all saving throws var aSaves = objCrea.saves ? objCrea.saves : ["", "", "", "", "", ""]; for (var i = 0; i < aSaves.length; i++) { var iProfSave = Math.round((objCrea.scores[i] - 10.5) * 0.5) + objCrea.proficiencyBonus; if (aSaves[i] === "" || aSaves[i] < iProfSave) { aSaves[i] = iProfSave; } } objCrea.saves = aSaves; }, eval : function(prefix, lvl) { // Set the alignment to be the same as the main character var iAlignInx = tDoc.getField("Alignment").currentValueIndices; if (iAlignInx !== -1) { PickDropdown(prefix + "Comp.Desc.Alignment", iAlignInx); } else { Value(prefix + "Comp.Desc.Alignment", What("Alignment")); } // Set HP to use fixed values var sHPfld = prefix + "Comp.Use.HP.Max"; var aHPsets = How(sHPfld).split(","); aHPsets[3] = "fixed"; AddTooltip(sHPfld, undefined, aHPsets.toString()); // Add Prof to the AC, if not already present AddToModFld(prefix + "Comp.Use.AC", "Prof", false, "Animal Companion", "An beast conclave's animal companion adds its proficiency bonus (Prof) to its AC."); // Alert player of things that have to be done manually app.alert({ cMsg : toUni("Pick Two Skills") + "\nThe Ranger's Animal Companion that you have just added, gains proficiency with two additional skills to those already selected. Because there is no automation for selecting these proficiencies, please do so manually.\n\n" + toUni("Ability Score Improvements") + "\nThe Ranger's Animal Companion gains Ability Score Improvements (ASI) whenever your character gains them. An animal companion can't use these to take feats. There is no automation for adding these ASIs either, so please don't forget to increase the ability scores for the animal companion when you get the reminder pop-up for ASI changes.\nAlso, remember that any DCs for abilities that the beast possesses are based on ability scores modifier and that they might need to be manually changed when increasing ability scores modifiers.\nThe 'Notes' section on the companion page automatically keeps track of how many points you can increase the ability scores with and what the base value of those scores are according to the Monster Manual.", nIcon : 3, cTitle : "Don't forget the Skills and Ability Score Improvements!" }); }, changeeval : function (prefix, lvl) { // Update the string with the number of Ability Score Improvements (ASI) var objCreaFnd = CurrentCompRace[prefix]; if (objCreaFnd.typeFound !== "creature" || !CreatureList[objCreaFnd.known]) return; var objCrea = CreatureList[objCreaFnd.known]; var iASIs = 0; for (var aClass in classes.known) { if (!CurrentClasses[aClass].improvements) continue; var classLvL = Math.min(CurrentClasses[aClass].improvements.length, classes.known[aClass].level); iASIs += 2 * CurrentClasses[aClass].improvements[classLvL - 1]; } var sNote = What(prefix + "Cnote.Left"); var sNoteNew = sNote; if (!iASIs) { sNoteNew = sNote.replace(/[\r\n]? *Currently, \d+ points.*/, ""); } else { var sIncreases = "Currently, " + iASIs + " points to divide " + (objCrea && objCrea.scores ? "(default: " + objCrea.scores[0] + " Str, " + objCrea.scores[1] + " Dex, " + objCrea.scores[2] + " Con, " + objCrea.scores[3] + " Int, " + objCrea.scores[4] + " Wis, " + objCrea.scores[5] + " Cha)" : "among the ability scores"); sNoteNew = sNote.replace(/(ASI.*)([\r\n]? *Currently, \d+ points.*)?/, "$1\r " + sIncreases); } if (sNote !== sNoteNew) Value(prefix + "Cnote.Left", sNoteNew); } } AddSubClass("rangerua", "hunter-ua", { regExpSearch : /^(?!.*(monster|barbarian|bard|cleric|druid|fighter|monk|paladin|rogue|sorcerer|warlock|wizard))(?=.*(hunter|huntress|hunts(wo)?m(e|a)n)).*$/i, subname : "Hunter Conclave", source : [["UA:RR", 7]], features : { "subclassfeature3" : { name : "Hunter's Prey", source : [["UA:RR", 7]], minlevel : 3, description: desc('Choose Colossus Slayer, Giant Killer, or Horde Breaker with the "Choose Feature" button'), choices : ["Colossus Slayer", "Giant killer", "Horde Breaker"], "colossus slayer" : { name : "Hunter's Prey: Colossus Slayer", description: desc("Once per turn, when hitting someone that is below max HP, I do an extra 1d8 damage") }, "giant killer" : { name : "Hunter's Prey: Giant Killer", description: desc("As a reaction, when a Large or larger enemy in 5 ft attacks me, I can attack it once"), action : [["reaction", ""]] }, "horde breaker" : { name : "Hunter's Prey: Horde Breaker", description: desc("Once per turn, when I hit a creature, I can make an attack vs. another within 5 ft of it") } }, "subclassfeature7" : { name : "Defensive Tactics", source : [["UA:RR", 7]], minlevel : 7, description: desc('"Choose Feature" button to choose Escape the Horde, Multiattack Defense, or Steel Will'), choices : ["Escape the Horde", "Multiattack Defense", "Steel Will"], "escape the horde" : { name : "Defensive Tactic: Escape the Horde", description: desc("Creatures attacking me with opportunity attacks have disadvantage on the attack rolls") }, "multiattack defense" : { name : "Defensive Tactic: Multiattack Defense", description: desc("When a creature hits me, I gain +4 AC against that creature for the rest of the turn") }, "steel will" : { name : "Defensive Tactic: Steel Will", description: desc("I have advantage on saves against being frightened"), savetxt : { adv_vs : ["frightened"] } } }, "subclassfeature11" : { name : "Multiattack", source : [["UA:RR", 7]], minlevel : 11, description: desc('Choose Volley or Whirlwind Attack using the "Choose Feature" button above'), choices : ["Volley", "Whirlwind Attack"], "volley" : { name : "Multiattack: Volley", description: desc("As an action, I can make ranged attacks vs. all within a 10-ft radius of a point in range"), action : [["action", ""]] }, "whirlwind attack" : { name : "Multiattack: Whirlwind Attack", description: desc("As an action, I can make melee attacks vs. all creatures within 5 ft of me"), action : [["action", ""]] } }, "subclassfeature15" : { name : "Superior Hunter's Defense", source : [["UA:RR", 7]], minlevel : 15, description: desc('"Choose Feature" button to choose Evasion, Stand Against the Tide, or Uncanny Dodge'), choices : ["Evasion", "Stand Against the Tide", "Uncanny Dodge"], "evasion" : { name : "Evasion", description: desc("My Dexterity saves vs. areas of effect negate damage on success and halve it on failure"), savetxt : { text : ["Dex save vs. area effects: fail \u2015 half dmg, success \u2015 no dmg"] } }, "stand against the tide" : { name : "Stand Against the Tide", description: desc([ "When a creature misses me with a melee attack, I can use my reaction on the attack", "I force the attacker to repeat it vs. another (not attacker) of my choice within range", ]), action : [["reaction", ""]] }, "uncanny dodge" : { name : "Uncanny Dodge", description: desc("As a reaction, I halve the damage of an attack from an attacker that I can see"), action : [["reaction", ""]] } } } }); AddSubClass("rangerua", "deep stalker-ua", { regExpSearch : /^(?=.*deep)(?=.*stalker).*$/i, subname : "Deep Stalker Conclave", source : [["UA:RR", 7]], features : { "subclassfeature3" : { name : "Underdark Scout", source : [["UA:RR", 7]], minlevel : 3, description: desc([ "In the first turn of combat I have +10 ft speed and +1 attack with the Attack action", "When I'm hiding or trying to hide, others gain no benefit from darkvision to detect me", ]), }, "subclassfeature3.1" : { name : "Deep Stalker Magic", source : [["UA:RR", 8]], minlevel : 3, description: desc([ "I have 90 ft darkvision (or +30 ft) and gain extra known spells at level 3, 5, 9, 13, 17", "These count as ranger spells, but do not count against the number of spells I can know", ]), spellcastingExtra : ["disguise self", "rope trick", "glyph of warding", "greater invisibility", "seeming"], spellcastingExtraApplyNonconform : true, vision : [["Darkvision", "fixed 90"], ["Darkvision", "+30"]] }, "subclassfeature7" : { name : "Iron Mind", source : [["UA:RR", 8]], minlevel : 7, description: desc("I am proficient with Wisdom saving throws"), saves : ["Wis"] }, "subclassfeature11" : { name : "Stalker's Flurry", source : [["UA:RR", 8]], minlevel : 11, description: desc("Once during my turn when I miss an attack, I can immediately make an extra attack") }, "subclassfeature15" : { name : "Stalker's Dodge", source : [["UA:RR", 8]], minlevel : 15, description: desc("As a reaction when I'm attacked without adv., I can impose disadv. on the attack roll"), action : [["reaction", " (when attacked)"]] } } }); // By popular demand, the XGtE, TCoE, FToD ranger subclasses, if they exist, are added as an option to the Revised Ranger // Note that there are no rules by WotC that support doing this! var UARR_AddRangerSubclassesToRevisedRanger = function() { var aSources = ["X", "T", "FToD"]; var aRngrSubs = ClassList.ranger.subclasses[1]; for (var i = 0; i < aRngrSubs.length; i++) { var sSub = aRngrSubs[i]; var oSub = ClassSubList[sSub]; if (!oSub || !oSub.source || ClassList.rangerua.subclasses[1].indexOf(sSub) !== -1) continue; var sSubSrc = isArray(oSub.source[0]) ? oSub.source[0][0] : oSub.source[0]; if (aSources.indexOf(sSubSrc) === -1) continue; ClassList.rangerua.subclasses[1].push(sSub); } }(); // ua_20161107_Barbarian-Primal-Paths.js // This file adds the content from the Unearthed Arcana: Barbarian Primal Paths article to MPMB's Character Record Sheet // Define the source SourceList["UA:BPP"] = { name : "Unearthed Arcana: Barbarian Primal Paths", abbreviation : "UA:BPP", group : "Unearthed Arcana", url : "https://media.wizards.com/2016/dnd/downloads/UA_Barbarian.pdf", date : "2016/11/07" }; // A three subclasses for the Barbarian AddSubClass("barbarian", "ancestral guardian-ua", { regExpSearch : /^(?=.*ancestral)(?=.*guardian).*$/i, subname : "Path of the Ancestral Guardian", subnameShort: "Ancestral Guardian", fullname : "Ancestral Guardian", source : [["UA:BPP", 1]], features : { "subclassfeature3" : { name : "Ancestral Protectors", source : [["UA:BPP", 1]], minlevel : 3, description: desc([ "As a bonus action while raging, I can choose a creature within 5 ft of me that I can see", "The creature has disadvantage on attack rolls that don't target me", "If it takes the Disengage action within 5 feet of me, its speed is halved for its turn", "This lasts until the start of my next turn or my rage ends, whichever comes ", ]), action : [["bonus action", " (in Rage)"]] }, "subclassfeature6" : { name : "Ancestral Shield", source : [["UA:BPP", 1]], minlevel : 6, description: desc([ "While I'm raging, I can transfer my resistance to an ally I can see within 30 ft of me", "As a reaction when an ally takes bludgeoning, piercing, or slashing damage", "My ally keeps the resistance, and I lose it, until the start of my next turn", ]), action : [["reaction", ""]] }, "subclassfeature10" : { name : "Consult the Spirits", source : [["UA:BPP", 1]], minlevel : 10, description: desc("I can consult my ancestral spirits to give myself advantage on a Int or Wis check"), usages : 3, recovery : "long rest" }, "subclassfeature14" : { name : "Vengeful Ancestors", source : [["UA:BPP", 1]], minlevel : 14, description: desc([ "While I'm raging, I can have my vengeful ancestors attack for 2d8 force damage", "As a reaction when I or an ally I can see within 30 feet of me is damaged in melee", ]), action : [["reaction", ""]] } } }); AddSubClass("barbarian", "storm herald-ua", { regExpSearch : /^(?=.*storm)(?=.*herald).*$/i, subname : "Path of the Storm Herald", subnameShort: "Storm Herald", fullname : "Storm Herald", source : [["UA:BPP", 2]], abilitySave : 3, features : { "subclassfeature3" : { name : "Storm Aura", source : [["UA:BPP", 2]], minlevel : 3, description: desc([ "While raging, I emanate a 10-ft radius aura that shapes the environment around me", 'Use the "Choose Feature" button above to select the aura', ]), choices : ["Desert", "Sea", "Tundra"], "desert" : { name : "Storm of Fury: Desert", description: desc([ "While raging, I emanate a 10-ft radius aura that shapes the environment around me", "Any enemy that ends its turn in my aura takes fire damage", ]), additional : ["", "", "2 fire damage", "3 fire damage", "3 fire damage", "3 fire damage", "3 fire damage", "4 fire damage", "4 fire damage", "4 fire damage", "4 fire damage", "5 fire damage", "5 fire damage", "5 fire damage", "5 fire damage", "6 fire damage", "6 fire damage", "6 fire damage", "6 fire damage", "7 fire damage"] }, "sea" : { name : "Storm of Fury: Sea", description: desc([ "While raging, I emanate a 10-ft radius aura that shapes the environment around me", "At the end of each of my turns, I can choose a creature in my aura, other than myself", "It must make a Dex save or take lightning damage, or half damage on a successful save", "The DC for this save is 8 + my proficiency bonus + my Constitution modifier", ]), additional : ["", "", "2d6", "2d6", "2d6", "2d6", "2d6", "2d6", "2d6", "3d6", "3d6", "3d6", "3d6", "3d6", "4d6", "4d6", "4d6", "4d6", "4d6", "4d6"], usages : 1, recovery : "turn" }, "tundra" : { name : "Storm of Fury: Tundra", description: desc([ "While raging, I emanate a 10-ft radius aura that shapes the environment around me", "Any enemy that ends its turn in my aura takes cold damage", ]), additional : ["", "", "2 cold damage", "3 cold damage", "3 cold damage", "3 cold damage", "3 cold damage", "4 cold damage", "4 cold damage", "4 cold damage", "4 cold damage", "5 cold damage", "5 cold damage", "5 cold damage", "5 cold damage", "6 cold damage", "6 cold damage", "6 cold damage", "6 cold damage", "7 cold damage"] }, choiceDependencies : [{ feature : "subclassfeature6" }, { feature : "subclassfeature14" }] }, "subclassfeature6" : { name : "Storm Soul", source : [["UA:BPP", 2]], minlevel : 6, description: desc('Use the "Choose Feature" button above to select the effect'), choices : ["desert", "sea", "tundra"], choicesNotInMenu : true, "desert" : { name : "Storm Soul: Desert", description: desc("I have resistance to fire damage and don't suffer the effects of extreme heat"), dmgres : ["Fire"], savetxt : { immune : ["effects of extreme heat"] } }, "sea" : { name : "Storm Soul: Sea", description: desc("I have resistance to lightning damage and can breathe underwater"), dmgres : ["Lightning"] }, "tundra" : { name : "Storm Soul: Tundra", description: desc("I have resistance to cold damage and don't suffer the effects of extreme cold"), dmgres : ["Cold"], savetxt : { immune : ["effects of extreme cold"] } } }, "subclassfeature10" : { name : "Shield of the Storm", source : [["UA:BPP", 2]], minlevel : 10, description: desc("While I'm raging, allies within my aura gain the benefits of my Storm Soul feature") }, "subclassfeature14" : { name : "Raging Storm", source : [["UA:BPP", 2]], minlevel : 14, description: desc('Use the "Choose Feature" button above to select the effect'), choices : ["desert", "sea", "tundra"], choicesNotInMenu : true, "desert" : { name : "Raging Storm: Desert", description: desc([ "Enemy in my aura move more than 5 ft on the ground must make a Strength save", "On a fail, it moves only 5 ft and its speed drops to 0 until the start of its next turn", "The DC for this save is 8 + my proficiency bonus + my Constitution modifier", ]), }, "sea" : { name : "Raging Storm: Sea", description: desc([ "Creatures in my aura hit by my attack must make a Str save or be knocked prone", "The DC for this save is 8 + my proficiency bonus + my Strength modifier", ]), calcChanges : { atkAdd : [ function (fields, v) { if (v.isMeleeWeapon && classes.known.barbarian && classes.known.barbarian.level > 13 && (/\brage\b/i).test(v.WeaponTextName)) { fields.Description += (fields.Description ? '; ' : '') + 'Str save or knocked prone'; }; }, "If I include the word 'Rage' in a melee weapon's name, it will show in its description that it forces targets that are hit to make a Strength saving throw or be knocked prone." ] } }, "tundra" : { name : "Raging Storm: Tundra", description: desc("The area within my aura is difficult terrain for my enemies") } } } }); AddSubClass("barbarian", "zealot-ua", { regExpSearch : /zealot/i, subname : "Path of the Zealot", subnameShort: "Zealot", fullname : "Zealot", source : [["UA:BPP", 2]], features : { "subclassfeature3" : { name : "Divine Fury", source : [["UA:BPP", 2]], minlevel : 3, description: desc([ "While raging, I can become cloaked in an aura of divine power until my rage ends", 'Choose a damage type using the "Choose Feature" button above', ]), additional : ["", "", "1d6+1", "1d6+2", "1d6+2", "1d6+3", "1d6+3", "1d6+4", "1d6+4", "1d6+5", "1d6+5", "1d6+6", "1d6+6", "1d6+7", "1d6+7", "1d6+8", "1d6+8", "1d6+9", "1d6+9", "1d6+10"], usages : 1, recovery : "turn", choices : ["Necrotic Damage", "Radiant Damage"], "necrotic damage" : { name : "Divine Fury: Necrotic", description: desc([ "While raging, I become cloaked in an aura of divine power until my rage ends", "At the end of my turn, each creature within 5 feet of me takes necrotic damage", ]), }, "radiant damage" : { name : "Divine Fury: Radiant", description: desc([ "While raging, I become cloaked in an aura of divine power until my rage ends", "At the end of my turn, each creature within 5 feet of me takes radiant damage", ]), } }, "subclassfeature3.1" : { name : "Warrior of the Gods", source : [["UA:BPP", 2]], minlevel : 3, description: desc("Spells restoring me to life (not undeath or anything else) don't need material comp.") }, "subclassfeature6" : { name : "Zealous Focus", source : [["UA:BPP", 3]], minlevel : 6, description: desc([ "As a reaction when I fail a saving throw while raging, I can instead succeed on it", "Doing so immediately ends my rage and I can't rage again until I finish a short rest", ]), usages : 1, recovery : "short rest", action : [["reaction", " (in Rage)"]] }, "subclassfeature10" : { name : "Zealous Presence", source : [["UA:BPP", 3]], minlevel : 10, description: desc([ "As an action, I howl in fury and unleash a battle cry infused with divine energy", "Allies within 60 ft of me gain adv. on attacks and saves until the start of my next turn", ]), usages : 1, recovery : "long rest", action : [["action", " (allies within 60 feet)"]] }, "subclassfeature14" : { name : "Rage Beyond Death", source : [["UA:BPP", 3]], minlevel : 14, description: desc([ "While raging, having 0 hit points doesn't knock me unconscious", "I still must make death saves, and I suffer the normal effects of taking damage", "However, if I would die due to failing death saves, I don't die until my rage ends", ]), } } }); // ua_20161114_Bard-Colleges.js // This file adds the content from the Unearthed Arcana: Bard Colleges article to MPMB's Character Record Sheet // Define the source SourceList["UA:BC"] = { name : "Unearthed Arcana: Bard Colleges", abbreviation : "UA:BC", group : "Unearthed Arcana", url : "https://media.wizards.com/2016/dnd/downloads/UA_Bard.pdf", date : "2016/11/14" }; // Adds 2 subclasses for the Bard AddSubClass("bard", "college of glamour-ua", { regExpSearch : /^(?=.*(college|bard|minstrel|troubadour|jongleur))(?=.*glamour).*$/i, subname : "College of Glamour", subnameShort: "Glamour", source : [["UA:BC", 1]], features : { "subclassfeature3" : { name : "Mantle of Inspiration", source : [["UA:BC", 1]], minlevel : 3, description: desc([ "As a bonus action, I expend one bardic inspiration die to aid those within 60 ft of me", "A number of allies equal to my Cha mod gain twice the die roll in temporary HP", "They can use a reaction to move their speed toward me, without opportunity attacks", ]), additional : "1 bardic inspiration die", action : [["bonus action", ""]] }, "subclassfeature3.1" : { name : "Enthralling Performance", source : [["UA:BC", 1]], minlevel : 3, recovery : "short rest", usages : 1, description: desc([ "By performing for at least 10 minutes, I can charm humanoids within 60 ft of me", "At the end of the performance, my Cha mod number of targets must make a Wis save", "On a fail, a target is charmed for 1 hour; If success, it doesn't knows I tried to charm it", "While charmed, the target idolizes me, hinders those opposing me, and avoids violence", "This lasts until a target takes damage, I attack it, or if it sees me attacking its allies", ]), }, "subclassfeature6" : { name : "Mantle of Majesty", source : [["UA:BC", 1]], minlevel : 6, recovery : "long rest", usages : 1, action : [["bonus action", ""]], description: desc([ "As a bonus action, I take on an appearance of unearthly beauty for 1 minute", "As a bonus action during this time, I can cast Command without using a spell slot", "Creatures charmed by me automatically fail their saves against these Command spells", ]), spellcastingBonus : [{ name : "Mantle of Majesty", spells : ["command"], selection : ["command"], firstCol : 'oncelr' }], spellChanges : { "command" : { time : "1 bns", description : "1 crea save (fails save if charmed) or follow one word command, e.g. approach, drop, flee, halt", changes : "Using my Mantle of Majesty class feature, I can cast Command as a bonus action once per long rest without using a spell slot, thus only affect a single target." } } }, "subclassfeature14" : { name : "Unbreakable Majesty", source : [["UA:BC", 2]], minlevel : 14, recovery : "short rest", usages : 1, action : [["action", ""]], description: desc([ "As an action, I can cast Sanctuary on myself without using a spell slot", "If a creature fails its save to this, I gain adv. on all Cha checks against it for 1 min", "In addition, the target has disadv. on saves it makes against my spells on my next turn", ]), spellcastingBonus : [{ name : "Unbreakable Majesty", spells : ["sanctuary"], selection : ["sanctuary"], firstCol : 'oncesr' }], spellChanges : { "sanctuary" : { time : "Self", description : "Any trying to atk/target me must save or fail, dis. on save vs. spell I cast next turn, I adv. on Cha vs. it", changes : "Using my Unbreakable Majesty class feature, I can cast Sanctuary once per short rest without using a spell slot, but only on myself." } } } } }); AddSubClass("bard", "college of whispers-ua", { regExpSearch : /^(?=.*(college|bard|minstrel|troubadour|jongleur))(?=.*whispers).*$/i, subname : "College of Whispers", subnameShort: "Whispers", source : [["UA:BC", 2]], features : { "subclassfeature3" : { name : "Venomous Blades", source : [["UA:BC", 2]], minlevel : 3, description: desc([ "When I hit with a weapon attack, I can expend a bardic inspiration die to add damage", "I roll the inspiration die twice, dealing the total in Poison damage to the target", "I can do this no more than once per round on my turn", ]), additional : "1 bardic inspiration die" }, "subclassfeature3.1" : { name : "Venomous Words", source : [["UA:BC", 2]], minlevel : 3, recovery : "short rest", usages : 1, description: desc([ "By speaking in private with a humanoid for at least 10 minutes, I can try to frighten it", "After the conversation, the target must make a Wisdom save or be frightened of me", "If the save is successful, the target doesn't know I try to frighten it", "While frightened, the target avoids the company of others, including its allies", "The target also tries to hide in the most secret, safest place available to it", "This lasts for 1 hour or until it is attacked/damaged, or if it sees me attacking its allies", ]), }, "subclassfeature6" : { name : "Mantle of Whispers", source : [["UA:BC", 2]], minlevel : 6, action : [["reaction", ""]], description: desc([ "As a reaction when a creature dies within 5 ft or by my hand, I can capture its shadow", "I can use shadows of those with the same type and size as me (or Medium if I'm Small)", "I can have only one captured shadow at a time and I can don it as a shadow disguise", ]), "shadow disguise" : { name : "Shadow Disguise", extraname : "Mantle of Whispers", source : [["UA:BC", 2]], action : [["action", " (start)"], ['bonus action', ' (end)']], description: desc([ "As an action, I can don a shadow that I captured as a disguise for 1 hour or until I stop it", "I take on the creature's appearance and I can access its surface memories, but not secrets", "I have access to information that it would would freely share with a casual acquaintance", "This is enough that I can pass myself off as the creature by drawing on its memories", "Anybody can see through the disguise with a Wis (Insight) check vs. my Cha (Deception) +5", "The knowledge disappears when the disguise ends", ]), }, autoSelectExtrachoices : [{ extrachoice : "shadow disguise" }] }, "subclassfeature14" : { name : "Shadow Lore", source : [["UA:BC", 3]], minlevel : 14, recovery : "long rest", usages : 1, action : [["action", ""]], description: desc([ "As an action, I whisper to a creature within 30 ft that can hear and understand me", "Only the target can hear me; It must make a Wisdom save or be charmed by me", "If failed, it thinks I know its most mortifying secret, otherwise it only hears mumbling", "While charmed, the target obeys my commands, but won't risk its life or fight for me", "This lasts for 8 hours or until I or my allies attack or damage it", "When the effect ends, the target has no idea why it was so afraid of me", ]), } } }); // ua_20161121_Cleric-Divine-Domains.js // This file adds the content from the Unearthed Arcana: Cleric Divine Domains article to MPMB's Character Record Sheet // Define the source SourceList["UA:CDD"] = { name : "Unearthed Arcana: Cleric Divine Domains", abbreviation : "UA:CDD", group : "Unearthed Arcana", url : "https://media.wizards.com/2016/dnd/downloads/UA_Cleric.pdf", date : "2016/11/21" }; // Adds 3 subclasses for the Cleric AddSubClass("cleric", "forge domain-ua", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*(forge|forgery|blacksmith)).*$/i, subname : "Forge Domain", source : [["UA:CDD", 1]], spellcastingExtra : ["searing smite", "shield", "heat metal", "magic weapon", "elemental weapon", "protection from energy", "fabricate", "wall of fire", "animate objects", "creation"], features : { "subclassfeature1" : { name : "Bonus Proficiency", source : [["UA:CDD", 1]], minlevel : 1, description: desc("I gain proficiency with heavy armor"), armorProfs : [false, false, true, false] }, "subclassfeature1.1" : { name : "Blessing of the Forge", source : [["UA:CDD", 1]], minlevel : 1, action : [["action", ""]], usages : 1, recovery : "long rest", description: desc([ "At the end of a long rest, I can imbue magic into a nonmagical weapon or armor", "It becomes magical: +1 AC if armor, or +1 to attack and damage rolls if a weapon", "This lasts until the end of my next long rest", ]), }, "subclassfeature2" : { name : "Channel Divinity: Artisan's Blessing", source : [["UA:CDD", 1]], minlevel : 2, description: desc([ "During a short rest, I can conduct a ritual to craft an item that is at least part metal", "The object can be worth up to 100 gp, and I must expend metals of equal value to it", "The item can be an exact duplicate of a nonmagical item if I possess the original", ]), }, "subclassfeature6" : { name : "Soul of the Forge", source : [["UA:CDD", 1]], minlevel : 6, additional : ["", "", "", "", "", "+6 force damage", "+7 force damage", "+8 force damage", "+9 force damage", "+10 force damage", "+11 force damage", "+12 force damage", "+13 force damage", "+14 force damage", "+15 force damage", "+16 force damage", "+17 force damage", "+18 force damage", "+19 force damage", "+20 force damage"], description: desc([ "I gain a +1 AC while wearing medium or heavy armor, and resistance to fire damage", "When I hit a construct with an attack, I deal my cleric level in additional force damage", ]), dmgres : ["Fire"], extraAC : { mod : 1, text : "I gain a +1 bonus to AC while I'm wearing medium or heavy armor.", stopeval : function (v) { return !v.heavyArmor && !v.mediumArmor; } } }, "subclassfeature8" : { name : "Divine Strike", source : [["UA:CDD", 1]], minlevel : 8, description: desc("Once per turn, when I hit a creature with a weapon attack, I can do extra damage"), additional : levels.map(function (n) { if (n < 8) return ""; return "+" + (n < 14 ? 1 : 2) + "d8 fire damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && v.isWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.cleric.level < 14 ? 1 : 2) + 'd8 fire damage'; } }, "Once per turn, I can have one of my weapon attacks that hit do extra fire damage." ] } }, "subclassfeature17" : { name : "Saint of Forge and Fire", source : [["UA:CDD", 1]], minlevel : 17, description: desc([ "I gain immunity to fire damage", "If wearing heavy armor, I'm resistant to nonmagical bludg./piercing/slashing damage", ]), savetxt : { immune : ["fire"] }, dmgres : [["Bludgeoning", "Bludg. (nonmagical)"], ["Piercing", "Pierc. (nonmagical)"], ["Slashing", "Slash. (nonmagical)"]] } } }); AddSubClass("cleric", "grave domain-ua", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*(grave)).*$/i, subname : "Grave Domain", source : [["UA:CDD", 2]], spellcastingExtra : ["bane", "false life", "gentle repose", "ray of enfeeblement", "revivify", "vampiric touch", "blight", "death ward", "antilife shell", "raise dead"], features : { "subclassfeature1" : { name : "Bonus Proficiency", source : [["UA:CDD", 2]], minlevel : 1, description: desc("I gain proficiency with heavy armor"), armorProfs : [false, false, true, false] }, "subclassfeature1.1" : { name : "Circle of Mortality", source : [["UA:CDD", 2]], minlevel : 1, action : [["bonus action", ""]], description: desc([ "Spells I cast to heal a living creature at 0 HP have their dice count as their max result", "As a bonus action, I can cast the Spare the Dying cantrip, if I know it", ]), spellChanges : { "spare the dying" : { time : "1 bns", range : "Touch", changes : "I can cast spare the dying as a bonus action instead of an action." } } }, "subclassfeature1.2" : { name : "Eyes of the Grave", source : [["UA:CDD", 2]], minlevel : 1, usages : 1, recovery : "long rest", description: desc([ "By spending 1 min in uninterrupted contemplation, I sense undead within 1 mile", "I learn their number, distance, and direction from me", "In addition, I know the creature type of the one with the highest CR", ]), }, "subclassfeature2" : { name : "Channel Divinity: Path to the Grave", source : [["UA:CDD", 2]], minlevel : 2, action : [["action", ""]], description: desc([ "As an action, I can touch a creature to make it take extra damage from one attack", "It is vulnerable to all the damage from the next spell or attack from me or an ally", "This only applies to the first time that source inflicts damage, and then ends", "If the creature has resistance or is immune to the damage, it instead loses it", ]), }, "subclassfeature6" : { name : "Sentinel at Death's Door", source : [["UA:CDD", 2]], minlevel : 6, usages : 1, recovery : "short rest", action : [["reaction", ""]], description: desc("As a reaction, I turn a critical hit to me or an ally I see within 30 ft to a normal hit") }, "subclassfeature8" : { name : "Divine Strike", source : [["UA:CDD", 2]], minlevel : 8, description: desc("Once per turn, when I hit a creature with a weapon attack, I can do extra damage"), additional : levels.map(function (n) { if (n < 8) return ""; return "+" + (n < 14 ? 1 : 2) + "d8 necrotic damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && v.isWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.cleric.level < 14 ? 1 : 2) + 'd8 necrotic damage'; } }, "Once per turn, I can have one of my weapon attacks that hit do extra necrotic damage." ] } }, "subclassfeature17" : { name : "Keeper of Souls", source : [["UA:CDD", 2]], minlevel : 17, description: desc([ "Once per round, if I'm not incapacitated, I can manipulate the energy of the dying", "When an enemy I can see dies within 30 ft of me, I or an ally within 30 ft regain HP", "The HP regained is equal to the enemy's number of Hit Dice", ]), } } }); AddSubClass("cleric", "protection domain-ua", { // Still valid 2021-09-21 regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*(protection|protect|defend|defense)).*$/i, subname : "Protection Domain", source : [["UA:CDD", 3]], spellcastingExtra : ["compelled duel", "protection from evil and good", "aid", "protection from poison", "protection from energy", "slow", "guardian of faith", "otiluke's resilient sphere", "antilife shell", "wall of force"], features : { "subclassfeature1" : { name : "Bonus Proficiency", source : [["UA:CDD", 3]], minlevel : 1, description: desc("I gain proficiency with heavy armor"), armorProfs : [false, false, true, false] }, "subclassfeature1.1" : { name : "Shield of the Faithful", source : [["UA:CDD", 3]], minlevel : 1, action : [["reaction", ""]], description: desc([ "As a reaction, when someone within 5 ft of me is attacked, I impose disadv. on the roll", "To do this, I must be able to see both the attacker and the target", ]), }, "subclassfeature2" : { name : "Channel Divinity: Radiant Defense", source : [["UA:CDD", 3]], minlevel : 2, action : [["action", ""]], description: desc([ "As an action, I channel blessed energy into an ally that I can see within 30 ft of me", "The first time the ally is hit within the next minute, the attacker takes radiant damage", ]), additional : ["", "2d10+2", "2d10+3", "2d10+4", "2d10+5", "2d10+6", "2d10+7", "2d10+8", "2d10+9", "2d10+10", "2d10+11", "2d10+12", "2d10+13", "2d10+14", "2d10+15", "2d10+16", "2d10+17", "2d10+18", "2d10+19", "2d10+20"] }, "subclassfeature6" : { name : "Blessed Healer", source : [["UA:CDD", 3]], minlevel : 6, description: desc("When I restore HP to another with a spell, I regain 2 + the spell (slot) level in HP"), calcChanges : { spellAdd : [ // note that several healing spells are not present here because they don't restore hp at casting (only later) function (spellKey, spellObj, spName) { var startDescr = spellObj.description; switch (spellKey) { case "life transference" : spellObj.description = spellObj.description.replace("Necrotic", "Necro").replace(", and", ",") + "; I then regain 2+SL HP"; break; case "mass heal" : spellObj.description = "Heal 700 HP, split over crea in range, each then +11 HP; also cures blind, deaf, diseases; I heal +11 HP"; break; case "power word heal" : spellObj.description = spellObj.description.replace(/heals all.*/i, "full HP; not charmed, frightened, paralyzed, stunned; can stand up as rea; if other, I heal 2+SL"); break; case "regenerate" : spellObj.description = spellObj.description.replace(" for rest of duration", ""); case "heal" : spellObj.description = spellObj.description.replace("all diseases", "diseases"); case "cure wounds" : case "healing word" : case "mass cure wounds" : case "mass healing word" : case "prayer of healing" : spellObj.description = spellObj.description.replace(/creatures?/i, "crea").replace("within", "in").replace("spellcasting ability modifier", "spellcasting ability mod") + "; if other, I heal 2+SL"; } return startDescr !== spellObj.description; }, "When I cast a spell that restores hit points to another creature than myself at the moment of casting, I also heal 2 + the level of the spell slot (or spell slot equivalent) hit points." ] } }, "subclassfeature8" : { name : "Divine Strike", source : [["UA:CDD", 3]], minlevel : 8, description: desc("Once per turn, when I hit a creature with a weapon attack, I can do extra damage"), additional : levels.map(function (n) { if (n < 8) return ""; return "+" + (n < 14 ? 1 : 2) + "d8 radiant damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && v.isWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.cleric.level < 14 ? 1 : 2) + 'd8 radiant damage'; } }, "Once per turn, I can have one of my weapon attacks that hit do extra radiant damage." ] } }, "subclassfeature17" : { name : "Indomitable Defense", source : [["UA:CDD", 3]], minlevel : 17, usages : 1, recovery : "short rest", action : [["action", " (transfer)"], ['bonus action', ' (return)']], description: desc([ "I gain resistance to two of: bludgeoning, necrotic, piercing, radiant, or slashing damage", "Whenever I finish a short or long rest, I can change the damage types chosen", "As an action, I can transfer both resistances to one creature I touch", "As a bonus action, I can transfer the resistances back to myself", "Otherwise, the creature keeps this resistance until the end of my next short or long rest", ]), } } }); // ua_20161128_Druid-Circles.js // This file adds the content from the Unearthed Arcana: Druid Circles article to MPMB's Character Record Sheet // Define the source SourceList["UA:DC"] = { name : "Unearthed Arcana: Druid Circles", abbreviation : "UA:DC", group : "Unearthed Arcana", url : "https://media.wizards.com/2016/dnd/downloads/UA_Druid11272016_CAWS.pdf", date : "2016/11/28" }; // Adds 3 subclasses for the Druid AddSubClass("druid", "circle of dreams-ua", { regExpSearch : /^(?=.*(druid|shaman))(?=.*\bdreams\b).*$/i, subname : "Circle of Dreams", subnameShort: "Dreams", source : [["UA:DC", 1]], features : { "subclassfeature2" : { name : "Balm of the Summer Court", source : [["UA:DC", 1]], minlevel : 2, description : desc([ "I have a pool of fey energy represented by a number of d6s equal to my druid level", "As a bonus action, I can spend dice to heal an ally within 120 ft of me that I can see", "I can spend up to half my druid level worth of dice from the pool at once", "The ally heals an amount equal to the total rolled and gains 1 temp HP per die spent", "In addition, the ally gains +5 ft speed per die spent, which lasts for 1 minute" ]), usages : levels.map(function (n) { return n < 2 ? "" : n + "d6 per "; }), recovery : "long rest", action : [["bonus action", ""]] }, "subclassfeature6" : { name : "Hearth of Moonlight and Shadow", source : [["UA:DC", 1]], minlevel : 6, description : desc([ "At the start of a short or long rest, I can create a warded area of 30-ft radius", "Within this area, my allies and I gain +5 on Wis (Perception) checks to detect creatures", "Also, any light from open flames is not visible from outside the area", "This effect lasts until the end of the rest or when I leave the area" ]) }, "subclassfeature10" : { name : "Hidden Paths", source : [["UA:DC", 1]], minlevel : 10, description : desc([ "On my turn, I can teleport up to 30 ft to where I can see; Moved distance costs speed", "As an action, I can teleport a willing ally I touch up to 30 ft to a spot I can see", "Once I used either option, I can't use this feature again until 1d4 rounds have passed" ]), usages : 1, recovery : "1d4 rounds", action : [["action", " (on ally)"]] }, "subclassfeature14" : { name : "Purifying Light", source : [["UA:DC", 1]], minlevel : 14, description : desc([ "When I use a spell slot with a spell to restores HP, I can use Dispel Magic on the target", "The Dispel Magic counts as if being cast with the same spell slot as the healing spell", "Each creature effected by the Dispel Magic costs as one use of this feature" ]), usages : 3, recovery : "long rest" } } }); AddSubClass("druid", "circle of the shepherd-ua", { regExpSearch : /^(?=.*(druid|shaman))(?=.*shepherd).*$/i, subname : "Circle of the Shepherd", subnameShort: "Shepherd", source : [["UA:DC", 1]], features : { "subclassfeature2" : { name : "Beast Speech", source : [["UA:DC", 2]], minlevel : 2, description: desc([ "I can talk with beasts, they understand me and I them, to the limit of their intelligence", "This doesn't automatically make me friends with all beasts", ]), }, "subclassfeature2.1" : { name : "Spirit Bond", source : [["UA:DC", 2]], minlevel : 2, description: desc([ "As a bonus action, I can summon a spirit to an empty space within 60 ft that I can see", "The Bear, Hawk, or Wolf spirit, creates a 30-ft radius aura and persist for 1 minute", "It doesn't occupy space, is immobile, and counts as neither a creature nor an object", "\u2022 Bear: my allies in the area and I instantly gain 5 + my druid level in temp HP", " While in the aura, my allies and I gain advantage on Strength checks and saves", "\u2022 Hawk: my allies and I gain advantage on attacks against targets in the aura", "\u2022 Wolf: my allies and I gain advantage on ability checks to detect targets in the aura", " If I cast a healing spell with a spell slot, allies in the aura heal my druid level in HP", ]), usages : 1, recovery : "short rest", action : [["bonus action", ""]] }, "subclassfeature6" : { name : "Mighty Summoner", source : [["UA:DC", 2]], minlevel : 6, description: desc("Beast I summon with my spells have +2 HP per HD and their attacks count as magical"), calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { switch (spellKey) { case "conjure animals" : case "conjure fey" : spellObj.description += "; each +2 HP/HD, magical natural attacks"; return true; case "conjure woodland beings" : spellObj.description = spellObj.description.replace(/fey.*/, "fey; obeys commands if its align. agrees; breaks free if break conc.; +2 HP/HD, magic atks"); return true; } }, "When I use a spell that restores hit points, it restores an additional 2 + the level of the spell slot (or spell slot equivalent) used to cast the spell." ] } }, "subclassfeature10" : { name : "Guardian Spirit", source : [["UA:DC", 2]], minlevel : 10, description: desc("Whenever I finish a long rest, I gain the benefits of a Death Ward spell for 24 hours"), spellcastingBonus : [{ name : "Guardian Spirit", spells : ["death ward"], selection : ["death ward"], firstCol : 'oncelr' }], spellChanges : { "death ward" : { range : "Self", components : "", compMaterial : "", description : "Once, when I drops to 0 HP I drops to 1 HP instead; or negates first instantaneous kill effect", duration : "24 h", changes : "Whenever I finish a long rest, I gain the benefits of a Death Ward spell for 24 hours." } } }, "subclassfeature14" : { name : "Faithful Summons", source : [["UA:DC", 2]], minlevel : 14, description: desc([ "When I am reduced to 0 HP or incapacitated against my will, I can summon protectors", "I gain the benefits of a Conjure Animals spell as if cast with a 9th-level spell slot", "It summons 4 beast of my choice with CR 2 or lower within 20 ft of me for 1 hour", "If they receive no commands from me, they protect me from harm and attack foes", ]), usages : 1, recovery : "long rest" } } }); AddSubClass("druid", "circle of twilight-ua", { // Still valid 2021-09-21 regExpSearch : /^(?=.*(druid|shaman))(?=.*twilight).*$/i, subname : "Circle of Twilight", subnameShort: "Twilight", source : [["UA:DC", 2]], features : { "subclassfeature2" : { name : "Harvest's Scythe", source : [["UA:DC", 3]], minlevel : 2, description: desc([ "I have a pool of energy represented by a number of d10s equal to my druid level", "When I roll damage for a spell, I can do extra necrotic damage with dice from the pool", "I can spend up to half my druid level worth of dice from the pool at once", "If I any hostiles die from an augmented spell, I can heal one ally I can see within 30 ft", "The ally regains 2 HP per die spent; or 5 HP per die if one of the slain was undead", ]), usages : ["", "2d10 per ", "3d10 per ", "4d10 per ", "5d10 per ", "6d10 per ", "7d10 per ", "8d10 per ", "9d10 per ", "10d10 per ", "11d10 per ", "12d10 per ", "13d10 per ", "14d10 per ", "15d10 per ", "16d10 per ", "17d10 per ", "18d10 per ", "19d10 per ", "20d10 per "], recovery : "long rest" }, "subclassfeature6" : { name : "Speech Beyond the Grave", source : [["UA:DC", 3]], minlevel : 6, description: desc([ "Once per short rest, I can cast Speak with Dead without spell slots or material comp.", "The target and I can understand each other, regardless of language or intelligence", ]), usages : 1, recovery : "short rest", spellcastingBonus : [{ name : "Speech Beyond the Grave", spells : ["speak with dead"], selection : ["speak with dead"], firstCol : 'oncesr' }], spellChanges : { "speak with dead" : { components : "V,S", compMaterial : "", changes : "I can cast this spell once per short rest without requiring material components." } } }, "subclassfeature10" : { name : "Watcher at the Threshold", source : [["UA:DC", 3]], minlevel : 10, description: desc([ "I gain resistance to necrotic and radiant damage", "While I'm not incapacitated, allies within 30 ft of me gain adv. on their death saves", ]), dmgres : ["Necrotic", "Radiant"] }, "subclassfeature14" : { name : "Paths of the Dead", source : [["UA:DC", 3]], minlevel : 14, description: desc("Once per short rest, I can cast Etherealness without needing a spell slot"), usages : 1, recovery : "short rest", spellcastingBonus : [{ name : "Paths of the Dead", spells : ["etherealness"], selection : ["etherealness"], firstCol : 'oncesr' }], spellChanges : { "etherealness" : { description : "I go to Ethereal Plane; move there, but able to perceive 60 ft into the normal plane", changes : "Using my Paths of the Dead class feature I can cast Etherealness once per short rest without needing a spell slot, thus can only target 1 creature." } } } } }); // ua_20161205_Fighter-Martial-Archetypes.js // This file adds the content from the Unearthed Arcana: Eberron article to MPMB's Character Record Sheet // Define the source SourceList["UA:FMA"] = { name : "Unearthed Arcana: Fighter Martial Archetypes", abbreviation : "UA:FMA", group : "Unearthed Arcana", url : "https://media.wizards.com/2016/dnd/downloads/2016_Fighter_UA_1205_1.pdf", date : "2016/12/05" }; // Adds 4 subclasses for the Fighter AddSubClass("fighter", "arcane archer-ua", { regExpSearch : /^(?=.*arcane)(?=.*archer).*$/i, subname : "Arcane Archer", source : [["UA:FMA", 1]], fullname : "Arcane Archer", features : { "subclassfeature3" : { name : "Arcane Arrow", source : [["UA:FMA", 1]], minlevel : 3, description: desc([ "As a bonus action, I can create one magical arrow that I can fire with a bow", "A shot with the arrow counts as magical and does additional force damage on a hit", "When I create the arrow, I can apply one of my known Arcane Shots on it", "This arrow lasts until the end of my turn or until I hit or miss a target with it", ]), additional : levels.map(function (n) { return n < 3 ? "" : (n < 18 ? "+2" : "+4") + "d6 force damage"; }), usages : 2, recovery : "short rest", action : ['bonus action', 'Create Magical Arrow'], calcChanges : { atkAdd : [ function (fields, v) { if ((/longbow|shortbow/i).test(v.baseWeaponName) && (/^(?=.*arcane)(?=.*arrow).*$/i).test(v.WeaponTextName) && classes.known.fighter && classes.known.fighter.level) { fields.Description += (fields.Description ? '; +' : '+') + (classes.known.fighter.level < 18 ? 2 : 4) + 'd6 force damage'; if (!v.thisWeapon[1] && !v.theWea.isMagicWeapon && !(/counts as magical/i).test(fields.Description)) fields.Description += '; Counts as magical'; }; }, "If I include the words 'Arcane Arrow' in a longbow or shortbow's name, it gets an added description of the damage this Arcane Arrow adds." ] } }, "subclassfeature3.1" : { name : "Arcane Shot", source : [["UA:FMA", 1]], minlevel : 3, description: desc('Use the "Choose Feature" button above to add Arcane Shots to the third page'), additional : levels.map( function(n) { return n < 3 ? "" : (n < 7 ? 2 : n < 10 ? 3 : n < 15 ? 4 : n < 18 ? 5 : 6) + " known"; }), extraname : "Arcane Shot", extrachoices : ["Beguiling Arrow", "Brute Bane Arrow", "Bursting Arrow", "Defending Arrow", "Grasping Arrow", "Piercing Arrow", "Seeking Arrow", "Shadow Arrow"], extraTimes : levels.map(function (n) { return n < 3 ? 0 : n < 7 ? 2 : n < 10 ? 3 : n < 15 ? 4 : n < 18 ? 5 : 6; }), "beguiling arrow" : { name : "Beguiling Arrow", source : [["UA:FMA", 1]], additional: "Enchantment", description: desc([ "If the arrow hits, I choose an ally withing 30 feet of the target", "The target can't attack the chosen ally or include the ally in any harmful area of effects", "This effect stops if the target is immune to charm effects or the ally damages the target", ]), }, "brute bane arrow" : { name : "Brute Bane Arrow", source : [["UA:FMA", 1]], additional: "Necromancy", description: desc([ "If the arrow hits, the target's attacks deal half damage until the end of my next turn", "Only attacks that deal bludgeoning, piercing or slashing damage are halved", ]), }, "bursting arrow" : { name : "Bursting Arrow", source : [["UA:FMA", 2]], additional: "Evocation", description: desc("If the arrow hits, all creatures within 10 ft of the target creature take 2d6 force damage") }, "defending arrow" : { name : "Defending Arrow", source : [["UA:FMA", 2]], additional: "Abjuration", description: desc("If the arrow hits, the target has disadv. on its next attack before the end of my next turn") }, "grasping arrow" : { name : "Grasping Arrow", source : [["UA:FMA", 2]], additional: "Conjuration", description: desc([ "If the arrow hits, the target is wrapped with grasping, thorny brambles for 1 minute", "The target has -10 ft speed; It takes 2d6 slashing damage when moving more than 1 ft", "As an action, the target or a creature can remove the brambles with a DC 10 Str check", ]), }, "piercing arrow" : { name : "Piercing Arrow", source : [["UA:FMA", 2]], additional: "Transmutation", description: desc([ "The arrow transform into an ethereal dart that creates a line of 1 ft wide and 30 ft long", "I then make a separate attack using my Arcane Arrow against each creature in that line", ]), }, "seeking arrow" : { name : "Seeking Arrow", source : [["UA:FMA", 2]], additional: "Divination", description: desc([ "As an action, I can make a ranged attack against a creature I have seen in the last minute", "The seeking arrow moves around corners and obstacles to hit the target", "The attack ignores 1/2 and 3/4 cover and disadvantage from range or being out of sight", "The attack misses if the target is too far away or there is no path for the arrow to travel", "I know if the arrow hits the target, but don't learn the location unless it's in line of sight", ]), action : [["action", ""]] }, "shadow arrow" : { name : "Shadow Arrow", source : [["UA:FMA", 2]], additional: "Illusion", description: desc("If the arrow hits, the target can't see beyond 30 ft until the end of my next turn") } }, "subclassfeature3.2" : { name : "Archer's Lore", source : [["UA:FMA", 1]], minlevel : 3, description: desc([ "I gain proficiency with two skills", "I can choose from: Arcana, Athletics, Nature, Perception, Stealth, or Survival", ]), skillstxt : "Choose two from Arcana, Athletics, Nature, Perception, Stealth, and Survival" }, "subclassfeature7" : { name : "Conjure Arrows", source : [["UA:FMA", 1]], minlevel : 7, description: desc([ "As an action, I can create up to 20 nonmagical arrows that remain for 10 minutes", "The arrows vanish if I use this feature again with 10 minutes", ]), action : [["action", ""]] }, "subclassfeature15" : { name : "Ever-Ready Arrow", source : [["UA:FMA", 1]], minlevel : 15, description: desc("I regain one use of Arcane Arrow one minute after I expend my last remaining use of it") } } }); AddSubClass("fighter", "knight-ua", { // Still valid 2021-09-21 regExpSearch : /^(?!.*(exalted|sacred|holy|divine|nature|natural|purple.*dragon|green|fey|horned))(?=.*knight).*$/i, subname : "Knight", source : [["UA:FMA", 2]], fullname : "Knight", features : { "subclassfeature3" : { name : "Born in the Saddle", source : [["UA:FMA", 2]], minlevel : 3, description: desc([ "Mounting or dismounting a creature costs me only 5 ft of movement", "I have advantage on saving throws made to avoid falling off my mount", "If I fall off my mount for less than 10 ft while not incapacitated, I land on my feet", ]), savetxt : { adv_vs : ["falling off my mount"] } }, "subclassfeature3.1" : { name : "Implacable Mark", source : [["UA:FMA", 2]], minlevel : 3, description: desc([ "If I hit a creature with a melee weapon attack, I mark it until the end of my next turn", "A marked target has disadv. on any attacks vs. those that didn't mark it", "I can attack the target I marked if it is within 5 ft of me and does one of the following:", "\u2022 It moves at least 1 foot on its turn", "\u2022 It makes an attack that it suffers disadv. on from being marked", "This attack uses my reaction, has adv., and adds my fighter level as extra damage", "I can still do this if I already used my reaction this round, but not this turn", ]), recovery : "short rest", usages : 3, additional : levels.map(function (n) { return n < 3 ? "" : "+" + n + " damage"; }), action : [["reaction", ""]], calcChanges : { atkCalc : [ function (fields, v, output) { if (v.isMeleeWeapon && classes.known.fighter && classes.known.fighter.level > 2 && (/\b(implacable.?mark|marked)\b/i).test(v.WeaponTextName)) { output.extraDmg += classes.known.fighter.level; }; }, "If I include the words 'Implacable Mark' or 'Marked' in the name of a melee weapon, it gets my fighter level added to its Damage." ] } }, "subclassfeature7" : { name : "Noble Cavalry", source : [["UA:FMA", 2]], minlevel : 7, description: desc([ "I gain proficiency with two skills or one language", "I can choose the skills from: Animal Handling, History, Insight, Persuasion, and Religion", ]), choices : ["Language proficiency", "2 Skill proficiencies: Animal Handling, History, Insight, Persuasion, or Religion"], "language proficiency" : { name : "Noble Cavalry", description: desc("I learn one language of my choice"), languageProfs : [1] }, "2 skill proficiencies: animal handling, history, insight, persuasion, or religion" : { name : "Noble Cavalry", description: desc("I gain 2 skill proficiencies: Animal Handling, History, Insight, Persuasion, or Religion"), skillstxt : "Choose two from: Animal Handling, History, Insight, Persuasion, or Religion" } }, "subclassfeature10" : { name : "Hold the Line", source : [["UA:FMA", 2]], minlevel : 10, description: desc([ "As a reaction when a creature within 5 ft of me moves at least 1 ft, I can attack it", "This attack is made with a melee weapon attack and deals extra damage on a hit", "If this hits, the attack reduces the target's speed to 0 until the end of this turn", ]), additional : levels.map(function (n) { return n < 10 ? "" : "+" + Math.floor(n / 2) + " damage"; }), action : [["reaction", ""]], calcChanges : { atkCalc : [ function (fields, v, output) { if (v.isMeleeWeapon && classes.known.fighter && classes.known.fighter.level > 9 && (/holds?.the.line/i).test(v.WeaponTextName)) { output.extraDmg += Math.floor(classes.known.fighter.level / 2); }; }, "If I include the words 'Hold the Line' in the name of a melee weapon, it gets half my fighter level added to its Damage." ] } }, "subclassfeature15" : { name : "Rapid Strike", source : [["UA:FMA", 3]], minlevel : 15, description: desc([ "If I have adv. on an attack, I can forgo it to make an extra attack as a bonus action", "This attack has to be with the same weapon against the same target", ]), action : [["bonus action", ""]] }, "subclassfeature18" : { name : "Defender's Blade", source : [["UA:FMA", 3]], minlevel : 18, description: desc([ "I can do opportunity attacks if I already used my reaction this round, but not this turn", "I gain a +1 bonus to AC when I'm wearing heavy armor", ]), extraAC : { mod : 1, text : "I gain a +1 bonus to AC while I'm wearing heavy armor.", stopeval : function (v) { return !v.heavyArmor; } } } } }); AddSubClass("fighter", "samurai-ua", { regExpSearch : /samurai/i, subname : "Samurai", source : [["UA:FMA", 3]], fullname : "Samurai", features : { "subclassfeature3" : { name : "Fighting Spirit", source : [["UA:FMA", 3]], minlevel : 3, description: desc([ "As a bonus action, I can give myself benefits that last until the end of my next turn", "I then gain adv. on my attacks and resistance to bludgeoning/piercing/slashing damage", ]), recovery : "short rest", usages : 3, action : [["bonus action", ""]] }, "subclassfeature7" : { name : "Elegant Courtier", source : [["UA:FMA", 3]], minlevel : 7, description: desc([ "I can add my Wis modifier to any Cha check to persuade anyone of a high social station", "I gain proficiency with either one language or the History, Insight, or Persuasion skill", ]), choices : ["Language proficiency", "Skill proficiency: History, Insight, or Persuasion"], "language proficiency" : { name : "Elegant Courtier", description: desc([ "I can add my Wis modifier to any Cha check to persuade anyone of a high social station", "I gain proficiency with one language of my choice", ]), languageProfs : [1] }, "skill proficiency: history, insight, or persuasion" : { name : "Elegant Courtier", description: desc([ "I can add my Wis modifier to any Cha check to persuade anyone of a high social station", "I gain proficiency with one skill: History, Insight, or Persuasion", ]), skillstxt : "Choose one from: History, Insight, or Persuasion" } }, "subclassfeature10" : { name : "Unbreakable Will", source : [["UA:FMA", 3]], minlevel : 10, description: desc("I gain proficiency with Wis saves, or if I'm already proficient, either Int or Cha saves"), saves : ["Wis"] }, "subclassfeature15" : { name : "Rapid Strike", source : [["UA:FMA", 3]], minlevel : 15, description: desc([ "If I have adv. on an attack, I can forgo it to make an extra attack as a bonus action", "This attack has to be with the same weapon against the same target", ]), action : [["bonus action", ""]] }, "subclassfeature18" : { name : "Strength Before Death", source : [["UA:FMA", 3]], minlevel : 18, description: desc([ "If I take damage that would reduce me to 0 HP, I can delay that damage", "I then immediately take a bonus turn, interrupting the current turn", "I don't take the delayed damage until the bonus turn ends and can affect that damage", ]), recovery : "long rest", usages : 1 } } }); AddSubClass("fighter", "sharpshooter-ua", { // Still valid 2021-09-21 regExpSearch : /sharpshooter/i, subname : "Sharpshooter", source : [["UA:FMA", 3]], fullname : "Sharpshooter", features : { "subclassfeature3" : { name : "Steady Aim", source : [["UA:FMA", 3]], minlevel : 3, description: desc([ "As a bonus action, I can carefully aim my ranged weapon on a target I can see in range", "Until the end of my turn, my attacks with this weapon on that target get to:", "Ignore half and three-quarter cover; Add 2 + half fighter level damage per hit", ]), recovery : "short rest", usages : 3, additional : levels.map(function (n) { return n < 3 ? "" : "+" + (2 + Math.floor(n / 2)) + " damage"; }), action : [["bonus action", ""]], calcChanges : { atkAdd : [ function (fields, v) { if (v.isRangedWeapon && classes.known.fighter && classes.known.fighter.level > 2 && (/steady.{0,3}aim/i).test(v.WeaponTextName)) { fields.Description += (fields.Description ? '; ' : '') + 'Ignores 1/2 and 3/4 cover'; }; }, "If I include the words 'Steady Aim' in the name of a ranged weapon, it gets 2 + half my fighter level added to its Damage, and the fact that it ignores half and three-quarter cover added to its description." ], atkCalc : [ function (fields, v, output) { if (v.isRangedWeapon && classes.known.fighter && classes.known.fighter.level > 2 && (/steady.{0,3}aim/i).test(v.WeaponTextName)) { output.extraDmg += 2 + Math.floor(classes.known.fighter.level / 2); }; }, ""] } }, "subclassfeature7" : { name : "Careful Eyes", source : [["UA:FMA", 4]], minlevel : 7, description: desc([ "As a bonus action, I can take the Search action", "I gain proficiency with one skill, Perception, Investigation, or Survival", ]), skillstxt : "Choose one from: Perception, Investigation, or Survival", action : [["bonus action", ""]] }, "subclassfeature10" : { name : "Close-Quarters Shooting", source : [["UA:FMA", 4]], minlevel : 10, description: desc([ "I don't have disadvantage when making a ranged attack while within 5 ft of a hostile", "A hostile within 5 ft that I hit with a ranged attack on my turn, can't take reactions", "This lasts until the end of my turn", ]), }, "subclassfeature15" : { name : "Rapid Strike", source : [["UA:FMA", 4]], minlevel : 15, description: desc([ "If I have adv. on an attack, I can forgo it to make an extra attack as a bonus action", "This attack has to be with the same weapon against the same target", ]), action : [["bonus action", ""]] }, "subclassfeature18" : { name : "Snap Shot", source : [["UA:FMA", 4]], minlevel : 18, description: desc("I can make one more ranged attack with my Attack action on my first turn of combat") } } }); // ua_20161212_Monk-Monastic-Traditions.js // This file adds the content from the Unearthed Arcana: Monk Monastic Traditions article to MPMB's Character Record Sheet // Define the source SourceList["UA:MMT"] = { name : "Unearthed Arcana: Monk Monastic Traditions", abbreviation : "UA:MMT", group : "Unearthed Arcana", url : "https://media.wizards.com/2016/dnd/downloads/M_2016_UAMonk1_12_12WKWT.pdf", date : "2016/12/12" }; // Adds 2 subclasses for the Monk AddSubClass("monk", "way of the kensei-ua", { regExpSearch : /kensei/i, subname : "Way of the Kensei", subnameShort: "Kensei", source : [["UA:MMT", 1]], features : { "subclassfeature3" : { name : "Path of the Kensei", source : [["UA:MMT", 1]], minlevel : 3, additional: "3 martial weapons proficiencies", description: desc([ "Martial weapons I am proficient with count as kensei weapons for me", "With these, I can use Dex instead of Str and use the Martial Arts damage die", "As a bonus action, my kensei weapon deal +1d4 bludg. damage for an Attack action", ]), action : [["bonus action", " (after hit)"]], calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.monk && classes.known.monk.level > 2 && fields.Proficiency && !v.isSpell && v.baseWeaponName !== 'shortsword' && (/martial/i).test(v.theWea.type)) { var aMonkDie = function (n) { return n < 5 ? 4 : n < 11 ? 6 : n < 17 ? 8 : 10; }(classes.known.monk.level); try { var curDie = eval_ish(fields.Damage_Die.replace('d', '*')); } catch (e) { var curDie = 'x'; }; if (isNaN(curDie) || curDie < aMonkDie) { fields.Damage_Die = '1d' + aMonkDie; }; fields.Mod = v.StrDex; fields.Description += (fields.Description ? '; ' : '') + 'As bonus action with Attack action, +1d4 bludg. damage'; }; }, "I can use either Strength or Dexterity and my Martial Arts damage die in place of the normal damage die for any martial weapons I am proficient with (Kensei Weapons).\n \u2022 If I score a hit with one of these kensei weapons as part of an Attack action, I can take a bonus action to have that hit, and any other hit after that as part of the same action, do +1d4 bludgeoning damage." ] }, "kensei defense" : { name : "Kensei Defense", extraname : "Way of the Kensei 3", source : [["UA:MMT", 1]], description: desc([ "If I make an unarmed strike with an Attack action, I can use my kensei weapon to defend", "Until the start of my next turn, if I'm not incapacitated, I gain +2 AC while holding it", ]), }, autoSelectExtrachoices : [{ extrachoice : "kensei defense" }] }, "ki-empowered strikes" : { name : "One with the Blade", source : [["UA:MMT", 1]], minlevel : 6, description: desc("My unarmed strikes and kensei weapon attacks count as magical"), calcChanges : { atkAdd : [ function (fields, v) { if ((v.baseWeaponName == "unarmed strike" || (!v.isSpell && (/martial/i).test(v.theWea.type) && fields.Proficiency)) && !v.thisWeapon[1] && !v.theWea.isMagicWeapon && !(/counts as magical/i).test(fields.Description)) { fields.Description += (fields.Description ? '; ' : '') + 'Counts as magical'; }; }, "My unarmed strikes and Kensei Weapons count as magical for overcoming resistances and immunities." ] } }, "subclassfeature6" : { name : "Precise Strike", source : [["UA:MMT", 1]], minlevel : 6, description : "As a bonus action, I can focus my attention on one creature I can see within 30 ft" + "\n " + "This turn, I double my proficiency bonus on my next weapon attack against that mark", usages : 1, recovery : "short rest", action : [["bonus action", ""]], calcChanges : { atkCalc : [ function (fields, v, output) { if (!v.isSpell && !v.isDC && (/precise.{0,3}strike/i).test(v.WeaponTextName)) { output.prof *= 2; }; }, "If I include the words 'Precise Strike' in a weapon's name, or description it gets twice my proficiency bonus added to its To Hit instead of only once." ] }, "sharpen the blade" : { name : "Sharpen the Blade", extraname : "Way of the Kensei 11", source : [["UA:MMT", 1]], additional: "1 to 3 ki points", description: desc([ "As a bonus action, I can grant my weapon a bonus to attack and damage rolls", "This bonus is equal to the number of ki points I spend; It lasts for 1 minute", ]), action : [["bonus action", ""]] }, autoSelectExtrachoices : [{ extrachoice : "sharpen the blade", minlevel : 11 }] }, "subclassfeature17" : { name : "Unerring Accuracy", source : [["UA:MMT", 1]], minlevel : 17, description: desc("On each of my turns, I can reroll one weapon attack roll I make that misses") } } }); AddSubClass("monk", "way of tranquility-ua", { // Still valid 2021-09-21 regExpSearch : /^(?=.*tranquility|tranquil|calm|diplomatic|diplomat)((?=.*(monk|monastic))|((?=.*martial)(?=.*(artist|arts)))|((?=.*spiritual)(?=.*warrior))).*$/i, subname : "Way of Tranquility", subnameShort: "Tranquility", source : [["UA:MMT", 2]], features : { "subclassfeature3" : { name : "Path of Tranquility", source : [["UA:MMT", 2]], minlevel : 3, description: desc("I cast Sanctuary on me, no material comp., lasts 8 hours, hostiles must save every hour"), usages : 1, recovery : "1 min", spellcastingBonus : [{ name : "Way of Tranquility", spells : ["sanctuary"], selection : ["sanctuary"] }], spellChanges : { "sanctuary" : { components : "V,S", compMaterial : "", time : "8 h", description : "I'm warded; any who want to attack/target must first make save; doesn't protect vs. area spells", changes : "Using my Path of Tranquility class feature I can cast Sanctuary without requiring material components and lasting for 8 hours, but it only affects myself and hostiles can attempt a new save every hour." } } }, "subclassfeature3.1" : { name : "Healing Hands", source : [["UA:MMT", 2]], minlevel : 3, description: desc([ "As an action, I use points to heal living creature; or 5 points to cure one poison/disease", "With Flurry of Blows, I can replace one unarmed strike with a use of this feature", ]), usages : [0, 0, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200], recovery : "long rest", action : [["action", ""]] }, "subclassfeature6" : { name : "Emissary of Peace", source : [["UA:MMT", 2]], minlevel : 6, description : " [Performance or Persuasion prof]" + "\n " + "I get adv. on Cha checks to calm or counsel peace; not with Deception or Intimidation", skillstxt : "Choose one from: Performance or Persuasion", "douse the flames of war" : { name : "Douse the Flames of War", extraname : "Way of Tranquility 11", source : [["UA:MMT", 1]], description: desc([ "As an action, a creature I touch must make a Wisdom save or have no violent impulses", "If the target is missing any HP it succeeds on the save; The effect lasts for 1 minute", "During this time, it can't attack or cast spells that deal damage or force a saving throw", "This effect ends if the target is attacked, takes damage, or is forced to make a saving throw", "It also ends if the target witnesses any of those things happening to its allies", ]), action : [["action", ""]] }, autoSelectExtrachoices : [{ extrachoice : "douse the flames of war", minlevel : 11 }] }, "subclassfeature17" : { name : "Anger of a Gentle Soul", source : [["UA:MMT", 2]], minlevel : 17, description: desc("As a reaction if another I see goes to 0 HP, I get bonus damage until my next turn ends"), usages : 1, recovery : "short rest", additional : ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "+17", "+18", "+19", "+20"], action : [["reaction", ""]] } } }); // ua_20161219_Paladin-Sacred-Oaths.js // This file adds the content from the Unearthed Arcana: Paladin Sacred Oaths article to MPMB's Character Record Sheet // Define the source SourceList["UA:PSO"] = { name : "Unearthed Arcana: Paladin Sacred Oaths", abbreviation : "UA:PSO", group : "Unearthed Arcana", url : "https://media.wizards.com/2016/dnd/downloads/UAPaladin_SO_20161219_1.pdf", date : "2016/12/19" }; // Adds 2 subclasses for the Paladin AddSubClass("paladin", "oath of conquest-ua", { regExpSearch : /^((?=.*(knight tyrant|iron mongers))|((?=.*(conquest|tyranny|tyrant))(((?=.*paladin)|((?=.*(exalted|sacred|holy|divine))(?=.*(knight|fighter|warrior|warlord|trooper))))))).*$/i, subname : "Oath of Conquest", subnameShort: "Conquest", source : [["UA:PSO", 1]], features : { "subclassfeature3" : { name : "Channel Divinity: Conquering Strike", source : [["UA:PSO", 1]], minlevel : 3, description: desc([ "I can use my channel divinity to break a foe's will that I hit with my melee weapon", "The target must make a Wisdom saving throw or become frightened for 1 minute", "The target can repeat this save at the end of each or its turn to end the effect", ]), spellcastingExtra : ["armor of agathys", "command", "hold person", "spiritual weapon", "bestow curse", "fear", "blight", "dominate beast", "dominate person", "insect plague"] }, "subclassfeature3.1" : { name : "Channel Divinity: Guided Strike", source : [["UA:PSO", 1]], minlevel : 3, description: desc("When I make an attack roll, I can add a +10 bonus to the roll after seeing the d20 roll") }, "subclassfeature7" : { name : "Aura of Conquest", source : [["UA:PSO", 1]], minlevel : 7, description: desc("While I'm not incapacitated, enemies in range have disadv. on saves vs. being frightened"), additional : ["", "", "", "", "", "", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "30-foot aura", "30-foot aura", "30-foot aura"] }, "subclassfeature15" : { name : "Implacable Spirit", source : [["UA:PSO", 1]], minlevel : 15, description: desc("I can't be charmed"), savetxt : { immune : ["charmed"] } }, "subclassfeature20" : { name : "Invincible Conqueror", source : [["UA:PSO", 2]], minlevel : 20, description: desc([ "As an action, I can gain the following benefits for 1 minute:", "\u2022 I have resistance all damage", "\u2022 I can make an additional attack as part of my Attack action", "\u2022 My melee weapons score critical hits on a roll of 19 or 20", ]), recovery : "long rest", usages : 1, action : [["action", ""]] } } }); AddSubClass("paladin", "oath of treachery-ua", { // Still valid 2021-09-21 regExpSearch : /^((?=.*blackguard)|(((?=.*(treachery|tyranny|tyrant))(?=.*paladin))|((?=.*(profane|unholy))(?=.*(knight|fighter|warrior|warlord|trooper))))).*$/i, subname : "Oath of Treachery", subnameShort: "Treachery", source : [["UA:PSO", 2]], features : { "subclassfeature3" : { name : "Channel Divinity: Conjure Duplicate", source : [["UA:PSO", 2]], minlevel : 3, description: desc([ "As an action, I create 1 illusory duplicate of myself within 30 ft of me for 1 min (conc)", "As a bonus action, I can move it up to 30 ft to a space I can see within 120 ft of me", "I can cast spells as though I was in its space, but still have to use my own senses", "I have advantage on attacks if the target is within 5 ft of the duplicate and me", ]), action : [["action", ""], ['bonus action', 'Move Duplicate']], spellcastingExtra : ["charm person", "expeditious retreat", "invisibility", "mirror image", "gaseous form", "haste", "confusion", "greater invisibility", "dominate person", "passwall"] }, "subclassfeature3.1" : { name : "Channel Divinity: Poison Strike", source : [["UA:PSO", 2]], minlevel : 3, description: desc([ "As a bonus action, I imbue one weapon or piece of ammunition with poison upon touch", "This poison lasts for 1 minute and will affect the next time I hit a target with it", "The target takes 2d10 + my paladin level poison damage immediately after the hit", "I automatically roll 20 on the 2d10 if I have advantage on the attack roll", ]), action : [["bonus action", ""]], additional : levels.map(function (n) { return n < 3 ? "" : "2d10+" + n + " damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (!v.isSpell && (/^(?=.*poison)(?=.*strike).*$/i).test(v.WeaponTextName) && classes.known.paladin && classes.known.paladin.level) { fields.Description += (fields.Description ? '; ' : '') + '+2d10+' + classes.known.paladin.level + ' poison damage (or ' + (classes.known.paladin.level + 20) + ' if adv.)'; }; }, "If I include the words 'Poison Strike' in a weapon's name, it gets an added description of the extra 2d10 + paladin level of poison damage it would do. If I have advantage on the attack, I can treat the 2d10 as rolling 20 in total." ] } }, "subclassfeature7" : { name : "Cull the Herd", source : [["UA:PSO", 3]], minlevel : 7, description: desc("I have adv. on melee attacks against creatures that have an ally of it within 5 ft of it") }, "subclassfeature7.1" : { name : "Treacherous Strike", source : [["UA:PSO", 3]], minlevel : 7, description: desc([ "As a reaction when a creature within 5 ft misses me, I can redirect the attack", "If it can be charmed, it rerolls the attack on a target of my choice within 5 ft of it", ]), recovery : "short rest", usages : 3, action : [["reaction", ""]] }, "subclassfeature15" : { name : "Blackguard's Escape", source : [["UA:PSO", 3]], minlevel : 15, description: desc([ "As a reaction after I am hit by an attack, I can teleport up to 60 ft to a spot I can see", "In doing this, I also become invisible (as the spell) until the end of my next turn", ]), recovery : "short rest", usages : 1, action : [["reaction", ""]], "icon of deceit" : { name : "Icon of Deceit", extraname : "Oath of Treachery 20", source : [["UA:PSO", 3]], description: desc([ "As an action, I can gain the following benefits for 1 minute:", "\u2022 I become invisible", "\u2022 If I have adv. on an attack, I do 20 extra damage with it if it hits", "\u2022 If a creature hits me on its turn, it must make a Wis save or I control its next action", " Provided it can be charmed and I am not incapacitated when it takes the action", ]), recovery : "long rest", usages : 1, action : [["action", ""]] }, autoSelectExtrachoices : [{ extrachoice : "icon of deceit", minlevel : 20 }] } } }); // ua_20170116_Ranger-and-Rogue.js // This file adds the content from the Unearthed Arcana: Ranger and Rogue article to MPMB's Character Record Sheet // Define the source SourceList["UA:RnR"] = { name : "Unearthed Arcana: Ranger and Rogue", abbreviation : "UA:RnR", group : "Unearthed Arcana", url : "https://media.wizards.com/2016/dnd/downloads/2017_01_UA_RangerRogue_0117JCMM.pdf", date : "2017/01/16" }; // Adds 3 subclasses: 2 for the Ranger (and the Revised Ranger), and 1 for the Rogue var UARnR_theHorizonWalkerSubclass = { regExpSearch : /^(?=.*horizon)(?=.*walker).*$/i, subname : "Horizon Walker", source : [["UA:RnR", 1]], fullname : "Horizon Walker", features : { "subclassfeature3" : { name : "Planar magic", source : [["UA:RnR", 1]], minlevel : 3, description : desc([ "I add a spell to my known spells at level 3, 5, 9, 13, and 17", "These count as ranger spells, but do not count against the number of spells I can know" ]), spellcastingExtra : ["protection from evil and good", "alter self", "protection from energy", "banishment", "teleportation circle"], spellcastingExtraApplyNonconform : true }, "subclassfeature3.1" : { name : "Planar Walker", source : [["UA:RnR", 1]], minlevel : 3, description : desc([ "As a bonus action, I choose an enemy within 30 ft of me that I can see", "Until the end of this turn, my attack against that enemy ignore damage resistances", "In addition, the first time I hit it this turn, it takes an extra 1d6 force damage" ]), action : [["bonus action", ""]] }, "subclassfeature3.2" : { name : "Portal Lore", source : [["UA:RnR", 1]], minlevel : 3, description : desc([ "As an action, I sense the distance and direction to any planar portals within 1000 ft", "I also sense to which plane the portal leads to; I can't sense details if obscured by magic", "I can use this feature additional times by expending spell slots of 2nd level or higher" ]), usages : 1, recovery : "short rest", action : [["action", ""]] }, "subclassfeature7" : { name : "Ethereal Step", source : [["UA:RnR", 1]], minlevel : 7, description: desc("As a bonus action, I can cast the Etherealness spell, which lasts until the end of the turn"), usages : 1, recovery : "short rest", action : [["bonus action", ""]], spellcastingBonus : [{ name : "Ethereal Step", spells : ["etherealness"], selection : ["etherealness"], firstCol : 'oncesr' }], spellChanges : { "etherealness" : { time : "1 bns", duration : "1 rnd", description : "I go to Ethereal Plane; move there, but able to perceive 60 ft into the normal plane", changes : "Using my Ethereal Step class feature I can cast Etherealness as a bonus action once per short rest, but it only affects myself and lasts until the end of my turn." } } }, "subclassfeature11" : { name : "Distant Strike", source : [["UA:RnR", 1]], minlevel : 11, description : desc([ "With the Attack action, I can teleport 10 ft before each attack, to a place I can see", "If I attack two different creatures with this action, I get an extra attack against a third" ]) }, "subclassfeature15" : { name : "Spectral Defense", source : [["UA:RnR", 1]], minlevel : 15, description: desc("As a reaction when I take damage, I can halve that damage against me"), action : [["reaction", ""]] } } }; AddSubClass("ranger", "horizon walker-ua", UARnR_theHorizonWalkerSubclass); var UARnR_thePrimevalGuardianSubclass = { // Still valid 2021-09-21 regExpSearch : /^(?=.*primeval)(?=.*guardian).*$/i, subname : "Primeval Guardian", source : [["UA:RnR", 2]], features : { "subclassfeature3" : { name : "Guardian magic", source : [["UA:RnR", 2]], minlevel : 3, description: desc("I get bonus spells known, which do not count against the number of spells I can know"), spellcastingExtra : ["entangle", "enhance ability", "conjure animals", "giant insect", "insect plague"], spellcastingExtraApplyNonconform : true }, "subclassfeature3.1" : { name : "Guardian Soul", source : [["UA:RnR", 2]], minlevel : 3, description: desc([ "As a bonus action, I transform to or from a guardian form, changing me as follows:", "\u2022 I grow to Large size, all my movement is reduced to 5 ft, and I get +5 ft reach", "\u2022 I gain half my ranger level in temporary HP at the start of each of my turns", "This ends when I'm incapacitated; When it ends, I lose all temporary HP I got from it", ]), additional : ["", "", "1 temp HP per round", "2 temp HP per round", "2 temp HP per round", "3 temp HP per round", "3 temp HP per round", "4 temp HP per round", "4 temp HP per round", "5 temp HP per round", "5 temp HP per round", "6 temp HP per round", "6 temp HP per round", "7 temp HP per round", "7 temp HP per round", "8 temp HP per round", "8 temp HP per round", "9 temp HP per round", "9 temp HP per round", "10 temp HP per round"], action : [["bonus action", " (start/end)"]] }, "subclassfeature3.2" : { name : "Piercing Thorns", source : [["UA:RnR", 2]], minlevel : 3, description: desc("Once each turn, a hit from my weapon attack can deal 1d6 extra piercing damage"), calcChanges : { atkAdd : [ function (fields, v) { if (!v.isSpell) fields.Description += (fields.Description ? '; ' : '') + 'Once per turn, +1d6 piercing damage'; }, "My weapon attacks can deal 1d6 extra piercing damage once per turn." ] } }, "subclassfeature7" : { name : "Ancient Fortitude", source : [["UA:RnR", 2]], minlevel : 7, description: desc([ "When I assume my guardian form, my HP \u0026 max HP increase by twice my ranger level", "When I leave the form, my max HP reverts back, and any excess HP I have is lost", ]), additional : ["", "", "", "", "", "", "", "+16 max HP", "+18 max HP", "+20 max HP", "+22 max HP", "+24 max HP", "+26 max HP", "+28 max HP", "+30 max HP", "+32 max HP", "+34 max HP", "+36 max HP", "+38 max HP", "+40 max HP"] }, "subclassfeature11" : { name : "Rooted Defense", source : [["UA:RnR", 2]], minlevel : 11, description: desc("While in guardian form, the ground within 30 ft of me is difficult terrain for hostiles") }, "subclassfeature15" : { name : "Guardian Aura", source : [["UA:RnR", 2]], minlevel : 15, description: desc([ "While I'm in my guardian form, I heal allies that start their turn within 30 ft of me", "They heal half my ranger level if they are below half HP and not undead or constructs", ]), additional : ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "Heals 7 HP", "Heals 8 HP", "Heals 8 HP", "Heals 9 HP", "Heals 9 HP", "Heals 10 HP"] } } }; AddSubClass("ranger", "primeval guardian-ua", UARnR_thePrimevalGuardianSubclass); if (ClassList["rangerua"]) { // add them to the Revised Ranger as well, if it is defined var UARnR_theHorizonConclaveSubclass = newObj(UARnR_theHorizonWalkerSubclass); UARnR_theHorizonConclaveSubclass.subname = "Horizon Conclave"; UARnR_theHorizonConclaveSubclass.regExpSearch = /^(?=.*horizon)(?=.*conclave).*$/i delete UARnR_theHorizonConclaveSubclass.fullname; AddSubClass("rangerua", "horizon conclave-ua", UARnR_theHorizonConclaveSubclass); var UARnR_thePrimevalGuardianConclaveSubclass = newObj(UARnR_thePrimevalGuardianSubclass); UARnR_thePrimevalGuardianConclaveSubclass.subname = "Primeval Guardian Conclave"; delete UARnR_thePrimevalGuardianConclaveSubclass.fullname; AddSubClass("rangerua", "primeval guardian conclave-ua", UARnR_thePrimevalGuardianConclaveSubclass); }; AddSubClass("rogue", "scout-ua", { regExpSearch : /scout/i, subname : "Scout", source : [["UA:RnR", 2]], features : { "subclassfeature3" : { name : "Skirmisher", source : [["UA:RnR", 3]], minlevel : 3, description : desc([ "As a reaction when a hostile ends its turn within 5 ft of me, I can move half my speed", "This movement does not provoke attacks of opportunity" ]), action : [["reaction", ""]] }, "subclassfeature3.1" : { name : "Survivalist", source : [["UA:RnR", 3]], minlevel : 3, description: desc("I gain proficiency and expertise with the Nature and Survival skills"), skills : [['Nature', 'full'], ['Survival', 'full']] }, "subclassfeature9" : { name : "Superior Mobility", source : [["UA:RnR", 3]], minlevel : 9, description: desc("I gain +10 ft to my walking speed (and swimming/climbing speed, if applicable)"), speed : { allModes : { bonus : "+10", exclude : ["fly", "burrow"] } } }, "subclassfeature13" : { name : "Ambush Master", source : [["UA:RnR", 3]], minlevel : 13, description: desc([ "As a bonus action in the first combat round with a surprised foe, I can lead the ambush", "If I do so, allies who can see me gets +5 to their initiative roll, up to my initiative value", "Also, each ally gains +10 ft to its speed that lasts until the end their next turn", ]), action : [["bonus action", " (first round)"]] }, "subclassfeature17" : { name : "Sudden Strike", source : [["UA:RnR", 3]], minlevel : 17, description: desc([ "With the Attack action, I can make one additional attack as a bonus action", "This attack can benefit from my Sneak Attack even if I already used it this turn", "However, I still can't use Sneak Attack on a single target more than once per turn", ]), action : [["bonus action", " (with Attack action)"]] } } }); // ua_20170206_Sorcerous-Origins.js // This file adds the content from the Unearthed Arcana: Sorcerous Origins article to MPMB's Character Record Sheet // Define the source SourceList["UA:SO"] = { name : "Unearthed Arcana: Sorcerous Origins", abbreviation : "UA:SO", group : "Unearthed Arcana", url : "https://media.wizards.com/2017/dnd/downloads/26_UASorcererUA020617s.pdf", date : "2017/02/06" }; // Adds 4 subclasses for the Sorcerer //this code includes contributions by /u/SoilentBrad, as well as LamentingDemon on GitHub AddSubClass("sorcerer", "favored soul-ua2", { regExpSearch : /^(?=.*favou?red)(?=.*soul).*$/i, subname : "Favored Soul", source : [["UA:SO", 1]], fullname : "Favored Soul", spellcastingList : { "class" : ["cleric", "sorcerer"] }, features : { "subclassfeature1" : { name : "Divine Magic", source : [["UA:SO", 1]], minlevel : 1, description: desc([ "When I select my 1st level or higher spells, I can also pick spells from the cleric spell list", "These cleric spells count as sorcerer spells for me", ]), }, "subclassfeature1.1" : { name : "Supernatural Resilience", source : [["UA:SO", 1]], minlevel : 1, description: desc("My hit point maximum increases by an amount equal to my sorcerer level"), calcChanges : { hp : function (totalHD) { if (classes.known.sorcerer) { return [classes.known.sorcerer.level, "Supernatural Resilience (sorcerer level)"]; } } } }, "subclassfeature1.2" : { name : "Favored by the Gods", source : [["UA:SO", 1]], minlevel : 1, description: desc("If I fail a saving throw or miss with an attack roll, I can add 2d4 to the total"), recovery : "short rest", usages : 1 }, "subclassfeature6" : { name : "Blessed Countenance", source : [["UA:SO", 1]], minlevel : 6, description: desc([ 'Choose an otherworldly quality using the "Choose Feature" button above', "When my proficiency bonus applies to a Charisma check, I double that bonus", ]), choices : ["Beautiful", "Youthful", "Kind", "Imposing"], "beautiful" : { name : "Beautiful", source : [["UA:SO", 1]], description: desc([ "My appearance takes on an otherworldly quality of beauty", "When my proficiency bonus applies to a Charisma check, I double that bonus", ]), }, "youthful" : { name : "Youthful", source : [["UA:SO", 1]], description: desc([ "My appearance takes on an otherworldly quality of youthfulness", "When my proficiency bonus applies to a Charisma check, I double that bonus", ]), }, "kind" : { name : "Kind", source : [["UA:SO", 1]], description: desc([ "My appearance takes on an otherworldly quality of kindness", "When my proficiency bonus applies to a Charisma check, I double that bonus", ]), }, "imposing" : { name : "Imposing", source : [["UA:SO", 1]], description: desc([ "My appearance takes on an otherworldly quality of imposingness", "When my proficiency bonus applies to a Charisma check, I double that bonus", ]), }, skillstxt : "I gain expertise in any Charisma-based skill I'm proficient with", skills : [["Deception", "only"], ["Intimidation", "only"], ["Performance", "only"], ["Persuasion", "only"]] }, "subclassfeature14" : { name : "Divine Purity", source : [["UA:SO", 1]], minlevel : 14, description: desc("I become immune to disease and poison"), savetxt : { immune : ["poison", "disease"] } }, "subclassfeature18" : { name : "Unearthly Recovery", source : [["UA:SO", 1]], minlevel : 18, description: desc([ "As a bonus action when I have less than half of my max HP, I can heal myself", "I regain a number of HP equal to half my maximum hit points", ]), action : [["bonus action", ""]], recovery : "long rest", usages : 1 } } }); //this code includes contributions by /u/SoilentBrad, as well as Toby L. AddSubClass("sorcerer", "phoenix sorcery-ua", { // Still valid 2021-09-21 regExpSearch : /^(?=.*phoenix)(?=.*(sorcerer|sorcery|witch)).*$/i, subname : "Phoenix Sorcery", source : [["UA:SO", 1]], fullname : "Phoenix Sorcerer", features : { "subclassfeature1" : { name : "Ignite", source : [["UA:SO", 2]], minlevel : 1, description: desc("As an action, I can magically ignite a flammable object by touching it with my hand"), action : [["action", ""]] }, "subclassfeature1.1" : { name : "Mantle of Flame", source : [["UA:SO", 2]], minlevel : 1, description : desc([ "As a bonus action, I can wreathe myself in fire for 1 minute, gaining these benefits:", " - I shed bright light in a 30-ft radius and dim light for an additional 30 ft", " - I deal my Charisma modifier in fire damage to all that touch me", " - I also deal this damage to all that hit me with a melee attack from within 5 ft", " - When I roll for fire damage on my turn, I add my Charisma damage to the result" ]), action : [["bonus action", ""]], recovery : "long rest", usages : 1 }, "subclassfeature6" : { name : "Phoenix Spark", source : [["UA:SO", 2]], minlevel : 6, description : desc([ "As a reaction when I am reduced to 0 HP, I can draw on the phoenix to stay at 1 HP", "All creatures within 10 ft of me take half my sorcerer level + my Cha mod fire damage", "If I have Mantle of Flame active, this damage is my sorcerer level + twice my Cha mod", "If I use this feature, my Mantle of Flame immediately ends" ]), additional : levels.map( function(n) { if (n < 6) return ""; return Math.floor(n / 2) + "+Cha \u007Cor\u007C " + n + "+2\xD7Cha"; }), action : [["reaction", ""]], recovery : "long rest", usages : 1 }, "subclassfeature14" : { name : "Nourishing Fire", source : [["UA:SO", 2]], minlevel : 14, description : desc([ "When I cast a spell using a spell slot that includes a fire damage roll, I regain HP", "The HP regained is equal to the spell slot level + my Charisma modifier" ]) }, "subclassfeature18" : { name : "Form of the Phoenix", source : [["UA:SO", 2]], minlevel : 18, description : desc([ "While my Mantle of Flame is active, I gain the following additional benefits:", "- I have a flying speed of 40 ft and can hover", "- I have resistance to all damage", "- If I use my Phoenix Spark, it deals an extra 20 fire damage to each creature" ]), dmgres : [["All", "All (Mantle of Flame)"]] } } }); //this code includes contributions by /u/SoilentBrad AddSubClass("sorcerer", "sea sorcery-ua", { // Still valid 2021-09-21 regExpSearch : /^(?=.*sea)(?=.*(sorcerer|sorcery|witch)).*$/i, subname : "Sea Sorcery", source : [["UA:SO", 2]], fullname : "Sea Sorcerer", features : { "subclassfeature1" : { name : "Soul of the Sea", source : [["UA:SO", 3]], minlevel : 1, description: desc("I can breathe underwater and I have a swim speed equal to my walking speed"), speed : { swim : { spd : "walk", enc : "walk" } } }, "subclassfeature1.1" : { name : "Curse of the Sea", source : [["UA:SO", 3]], minlevel : 1, description : desc([ "I can curse a target that I hit with a cantrip or that fails its save against my cantrip", "This lasts until the end of my next turn or until I curse another target like this", "Once per turn when I cast a spell, I can trigger an active curse, if a condition is met", " - If spell dealt cold damage to it, its has -15 ft speed until the end of my next turn", " - If the spell dealt lightning damage to it, that damage is increased with my Cha mod", " - If the spell moved the target, it is moved an additional 15 ft", "Only one of these effects can be applied, even if the spell meets multiple conditions", "If the spell triggering the curse is a cantrip, the target stays cursed for another round" ]) }, "subclassfeature6" : { name : "Watery Defense", source : [["UA:SO", 3]], minlevel : 6, description : desc([ "I gain resistance to fire damage", "I can protect myself when an attack deals bludgeoning, piercing, or slashing damage", "As a reaction when that happens, I reduce the damage by my sorcerer level + Charisma", "I can then also move up to 30 ft without provoking opportunity attacks" ]), additional : levels.map( function(n) { if (n < 6) return ""; return n + " + Charisma score"; }), action : [["reaction", ""]], recovery : "short rest", usages : 1, dmgres : ["Fire"] }, "subclassfeature14" : { name : "Shifting Form", source : [["UA:SO", 3]], minlevel : 14, description : desc([ "I gain the ability to enter a liquid state while moving, squeezing through small spaces", "When I move on my turn, I take half damage from opportunity attacks", "I can move through any enemy's space, but can't willingly end my move in that space", "On my turn, I can move through any opening of at least 3 inches in diameter", "I can't end my move in a space smaller than one size category smaller than I am" ]) }, "subclassfeature18" : { name : "Water Soul", source : [["UA:SO", 3]], minlevel : 18, description : desc([ "I no longer need to eat, drink, or sleep; Critical hits against me become normal hits", "I gain resistance to bludgeoning, piercing, and slashing damage" ]), dmgres : ["Bludgeoning", "Piercing", "Slashing"] } } }); //this code includes contributions by /u/SoilentBrad AddSubClass("sorcerer", "stone sorcery-ua", { // Still valid 2021-09-21 regExpSearch : /^(?=.*stone)(?=.*(sorcerer|sorcery|witch)).*$/i, subname : "Stone Sorcery", source : [["UA:SO", 3]], fullname : "Stone Sorcerer", spellcastingExtra : ["compelled duel", "searing smite", "thunderous smite", "wrathful smite", "branding smite", "magic weapon", "blinding smite", "elemental weapon", "staggering smite"], features : { "subclassfeature1" : { name : "Bonus Proficiencies", source : [["UA:SO", 4]], minlevel : 1, description: desc("I gain proficiency with shields, simple weapons and martial weapons"), armorProfs : [false, false, false, true], weaponProfs : [true, true] }, "subclassfeature1.1" : { name : "Metal Magic", source : [["UA:SO", 4]], minlevel : 1, description: desc("My affinity for metal allows me to select from a broader range of spells") }, "subclassfeature1.2" : { name : "Stone's Durability", source : [["UA:SO", 4]], minlevel : 1, description : desc([ "My hit point maximum increases by an amount equal to my sorcerer level", "As an action, I can gain an AC of 13 + Constitution modifier + shield", "This AC lasts until I don armor, I'm incapacitated, or use a bonus action to end it" ]), action : [["action", " (start)"], ['bonus action', " (end)"]], calcChanges : { hp : function (totalHD) { if (classes.known.sorcerer) { return [classes.known.sorcerer.level, "Stone's Durability (sorcerer level)"]; } } }, armorOptions : [{ regExpSearch : /^(?=.*stone)(?=.*durability).*$/i, name : "Stone's Durability", source : [["UA:SO", 4]], ac : "13+Con", dex : -10, affectsWildShape : true, selectNow : true }] }, "subclassfeature6" : { name : "Stone Aegis", source : [["UA:SO", 4]], minlevel : 6, description : desc([ "As a bonus action, I can grant an aegis to an ally I can see within 60 ft of me", "The aegis reduces any bludgeoning, piercing, or slashing damage taken by the target", "This aegis lasts for 1 minute, until I use it again, or until I'm incapacitated", "As a reaction when the protected ally is attacked with a melee attack, I can teleport", "I can do this only if the attacker is within 60 ft of me and I can see it", "I teleport to an empty space next to it and make one melee weapon attack against it", "If this attack hits, the attack deals extra force damage" ]), additional : levels.map( function(n) { if (n < 6) return ""; return (Math.floor(n / 4) + 2) + " damage reduction; +" + (n < 11 ? 1 : n < 17 ? 2 : 3) + "d10 force damage"; }), action : [["bonus action", ""], ['reaction', 'Aegis Teleport']] }, "subclassfeature14" : { name : "Stone's Edge", source : [["UA:SO", 4]], minlevel : 14, description : desc([ "Once per casting of a spell that deals damage, I can choose one creature damaged by it", "That creature takes extra force damage equal to half my sorcerer level" ]), additional : levels.map( function(n) { return n < 14 ? "" : Math.floor(n / 2) + " force damage"; }) }, "subclassfeature18" : { name : "Earth Master's Aegis", source : [["UA:SO", 4]], minlevel : 18, description: desc("My Stone's Aegis can now affect up to three creatures") } } }); // ua_20170213_Warlock-and-Wizard.js // This file adds the content from the Unearthed Arcana: Warlock and Wizard article to MPMB's Character Record Sheet // Define the source SourceList["UA:WnW"] = { name : "Unearthed Arcana: Warlock and Wizard", abbreviation : "UA:WnW", group : "Unearthed Arcana", url : "https://media.wizards.com/2017/dnd/downloads/20170213_Wizrd_Wrlck_UAv2_i48nf.pdf", date : "2017/02/13" }; // Adds 3 subclasses, 2 for the Warlock, and 1 for the Wizard //this code includes contributions by Greg N. AddSubClass("warlock", "the hexblade-ua", { regExpSearch : /^(?=.*hexblade)(?=.*warlock).*$/i, subname : "the Hexblade", source : [["UA:WnW", 1]], spellcastingExtra : ["shield", "wrathful smite", "branding smite", "magic weapon", "blink", "elemental weapon", "phantasmal killer", "staggering smite", "cone of cold", "destructive wave"], features : { "subclassfeature1" : { name : "Hex Warrior", source : [["UA:WnW", 1]], minlevel : 1, description : desc([ "I gain proficiency with medium armor, shields, and martial weapons", "With one-handed melee weapons I can use Charisma instead of Strength or Dexterity" ]), armorProfs : [false, true, false, true], weaponProfs : [false, true], calcChanges : { atkAdd : [ function (fields, v) { if (v.isMeleeWeapon && !(/((^|[^+-]\b)2|\btwo).?hand(ed)?s?\b/i).test(v.WeaponText) && What('Cha Mod') > What(AbilityScores.abbreviations[fields.Mod - 1] + ' Mod')) { fields.Mod = 6; }; }, "For melee weapons that lack the two-handed property, I can use my Charisma instead of Strength or Dexterity." ] } }, "subclassfeature1.1" : { name : "Hexblade's Curse", source : [["UA:WnW", 1]], minlevel : 1, description : desc([ "As a bonus action, I can curse a creature I can see within 30 ft of me for 1 minute", " - I add my proficiency bonus to damage rolls against the cursed target", " - My attack rolls against the curse target score a critical hit on a roll of 19 and 20", " - If the target dies while cursed, I regain HP equal to my warlock level + Cha mod" ]), recovery : "short rest", usages : levels.map( function(n) { return n < 14 ? 1 : ""; }), action : [["bonus action", ""]], calcChanges : { atkAdd : [ function (fields, v) { if (!v.isDC && /hexblade/i.test(v.WeaponTextName) && !v.CritChance) { v.CritChance = 19; fields.Description += (fields.Description ? '; ' : '') + 'Crit on 19-20'; }; }, "If I include the word 'Hexblade' in the name of a weapon, the automation will treat the attack as being against a target of the Hexblade's Curse: adding my proficiency bonus to the damage and adding the increased chance of a critical hit to the description.", 19 ], atkCalc : [ function (fields, v, output) { if ((/hexblade/i).test(v.WeaponTextName)) output.extraDmg += output.prof; }, ""] } }, "subclassfeature6" : { name : "Shadow Hound", source : [["UA:WnW", 1]], minlevel : 6, description : desc([ "My shadow becomes a hound of pure darkness; Truesight reveals its nature", "As a bonus action, I can have it slip into the shadow of another I can see within 60 ft", "I know the distance/direction to the target; I ignore 1/2, 3/4 cover of the target", "My shadow returns to me if I use a bonus action to do so, I become incapacitated, ", "a spell is used to stop it, or if one of us moves to another plane of existence" ]) }, "subclassfeature10" : { name : "Armor of Hexes", source : [["UA:WnW", 2]], minlevel : 10, description: desc("Targets affected by my hexblade's curse have a 50% of missing me with any attack roll") }, "subclassfeature14" : { name : "Master of Hexes", source : [["UA:WnW", 2]], minlevel : 14, description : desc([ "I no longer need to rest to be able to use my Hexblade's Curse again", "However, when I curse a new target, the curse immediately ends on the previous target" ]) } } }); //this code includes contributions by Ben Y. and Wizzard AddSubClass("warlock", "the raven queen-ua", { // Still valid 2021-09-21 regExpSearch : /^(?=.*\braven)(?=.*queen\b).*$/i, subname : "the Raven Queen", source : [["UA:WnW", 2]], spellcastingExtra : ["false life", "sanctuary", "silence", "spiritual weapon", "feign death", "speak with dead", "ice storm", "locate creature", "commune", "cone of cold"], features : { "subclassfeature1" : { name : "Sentinel Raven", source : [["UA:WnW", 2]], minlevel : 1, description : desc([ "I gain the services of a spirit in the form of a raven (using the stats of a raven)", "It always obeys my commands, rolls its own initiative, and can be slain", "While it's within 100 ft, I can telepathically speak with it and see/hear what it does", "While it's on my shoulder, I gain Darkvision 30 ft and add my Cha mod to Perception", "While it's on my shoulder, it can't be targeted, take damage, or take actions", "It vanishes if it is more than 5 miles away from me, it dies, or if I die", "If it dies, I gain advantage on all attack rolls against its killer for 24 hours", "After a short rest, I can recall it to me regardless of its location or if it died" ]), vision : [["Darkvision", 30]], addMod : { type : "skill", field : "Perc", mod : "max(Cha|0)", text : "While my sentinel raven is perched on my shoulder, I can add my Charisma modifier to Perception." }, creaturesAdd : [["Sentinel Raven"]], creatureOptions : [{ name : "Sentinel Raven", source : [["UA:WnW", 2]], size : 5, type : "Beast", alignment : "Unaligned", ac : 12, hp : 1, hd : [1, 4], speed : "10 ft, fly 50 ft", scores : [2, 14, 8, 2, 12, 6], skills : { "perception" : 3 }, passivePerception : 13, challengeRating : "0", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Beak", ability : 2, damage : [1, "", "piercing"], range : "Melee (5 ft)", description : "", abilitytodamage : false }], traits : [{ name : "Mimicry", description : "The raven can mimic simple sounds it has heard, such as a person whispering, a baby crying, or an animal chittering. A creature that hears the sounds can tell they are imitations with a successful DC 10 Wisdom (Insight) check." }, { name : "Sentinel", description : "The raven doesn't require sleep. While it is within 100 feet of me, it can awaken me from sleep as a bonus action." }, { name : "Shoulder Perch", description : "While perched on my shoulder, the raven can't be targeted by any attack or other harmful effect; only I can cast spells on it; it can't take damage; and it is incapacitated. It then also grants me darkvision 30 ft and a bonus to my Wisdom (Perception) equal to my Charisma modifier." }], features : [{ name : "Sent by the Raven Queen", description : "The raven acts independently of me, but it always obeys my commands. In combat, it rolls its own initiative and acts on its own turn, but I control how it acts. If it is slain by a creature, I gain advantage on all attack rolls against the killer for the next 24 hours. While the raven is within 100 ft of me, I can telepathically command it and see through its eyes and hear what it hears.\n The raven vanishes when it dies, if I die, or if we are separated by more than 5 miles. At the end of a short or long rest, I can call the raven back to reappear within 5 ft of me, regardless where it is or if it died." }] }] }, "subclassfeature6" : { name : "Soul of the Raven", source : [["UA:WnW", 2]], minlevel : 6, description : desc([ "As a bonus action, when my raven is perched on my shoulder, I can merge our bodies", "I become tiny and replace my speed with the raven's (10 ft, fly 50 ft)", "I can then use my action only to Dash, Disengage, Dodge, Help, Hide, or Search", "While merged, I still get all the benefits of my raven being perched on my shoulder", "I can end this as an action" ]), action : [["bonus action", " (start)"], ['action', ' (end)']] }, "subclassfeature10" : { name : "Raven's Shield", source : [["UA:WnW", 3]], minlevel : 10, description: desc("I can't be frightened, have advantage on death saves, and resistance to necrotic damage"), savetxt : { immune : ["frightened"], adv_vs : ["death"] }, dmgres : ["Necrotic"] }, "subclassfeature14" : { name : "Queen's Right Hand", source : [["UA:WnW", 3]], minlevel : 14, description: desc("I can cast Finger of Death once per long rest"), usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Queen's Right Hand", spells : ["finger of death"], selection : ["finger of death"], firstCol : "oncelr" }] } } }); //this code includes contributions by /u/magicmanfk AddSubClass("wizard", "lore mastery-ua", { // Still valid 2021-09-21 regExpSearch : /^(?=.*\blore)(?=.*mastery?\b).*$/i, subname : "Lore Mastery", source : [["UA:WnW", 5]], fullname : "Lore Master", features : { "subclassfeature2" : { name : "Lore Master", source : [["UA:WnW", 6]], minlevel : 2, description : desc([ "I can use my Intelligence modifier for initiative instead of my Dexterity modifier", "I get expertise with each Arcana, History, Nature, and Religion, if I'm proficient with it" ]), skills : [["Arcana", "only"], ["History", "only"], ["Nature", "only"], ["Religion", "only"]], addMod : { type : "skill", field : "Init", mod : "max(Int-Dex|0)", text : "I use my Intelligence modifier for initiative rolls instead of Dexterity." } }, "subclassfeature2.1" : { name : "Spell Secrets: Elements", source : [["UA:WnW", 6]], minlevel : 2, description : desc([ "I can change the damage type of spells I cast using spell slots (so not cantrips)", "I can swap out acid, cold, fire, force, lightning, necrotic, radiant, or thunder damage" ]) }, "subclassfeature2.2" : { name : "Spell Secrets: Saves", source : [["UA:WnW", 6]], minlevel : 2, description: desc("I can change the saving throw ability score to another for a spell I cast using a spell slot"), recovery : "short rest", usages : 1 }, "subclassfeature6" : { name : "Alchemical Casting", source : [["UA:WnW", 6]], minlevel : 6, description : desc([ "When I cast a spell with a spell slot, I can expend one additional spell slot to augment it", " - 1st-level slot: one damage roll of the spell adds +2d10 force damage", " - 2nd-level slot: if the range of the spell is at least 30 ft, it becomes 1 mile", " - 3rd-level slot: the spell's save DC increases by 2" ]) }, "subclassfeature10" : { name : "Prodigious Memory", source : [["UA:WnW", 6]], minlevel : 10, description: desc("As a bonus action, I can replace one of my prepared spells with another from my book"), recovery : "short rest", usages : 1, action : [["bonus action", ""]] }, "subclassfeature14" : { name : "Master of Magic", source : [["UA:WnW", 6]], minlevel : 14, description : desc([ "As a bonus action, I can call to mind one spell of my choice from any class' spell list", "This spell must be of a level I have spell slots for and that I don't already have prepared", "I can then cast it using the normal spellcasting rules, including expending a spell slot", "It counts a wizard spell; I can only cast the spell during the same turn I call it to mind" ]), usages : 1, recovery : "long rest", action : [["bonus action", ""]] } } }); // Add many new Warlock invocations // Most probably still valid 2021-09-21, have to check AddWarlockInvocation("Aspect of the Moon (prereq: the Archfey patron)", { name : "Aspect of the Moon", description: desc("I don't need to sleep nor can be magically forced to; I can rest while doing light activity"), source : [["UA:WnW", 3]], prereqeval : function(v) { return (/\barchfey\b/).test(classes.known.warlock.subclass); }, savetxt : { text : ["Nothing can force me to sleep"] } }); AddWarlockInvocation("Burning Hex (prereq: the Hexblade patron)", { name : "Burning Hex", description : desc([ "As a bonus action, I can cause a target affected by my hexblade's curse to take damage", "It immediately takes fire damage equal to my Charisma modifier (min 1)" ]), source : [["UA:WnW", 3]], prereqeval : function(v) { return (/hexblade/).test(classes.known.warlock.subclass); }, action : [["bonus action", ""]] }); AddWarlockInvocation("Caiphon's Beacon (prereq: the Great Old One patron)", { name : "Caiphon's Beacon", description : desc([ "I gain proficiencies with the Deception and Stealth skills", "I have advantage on attack rolls against charmed creatures" ]), source : [["UA:WnW", 3]], prereqeval : function(v) { return (/great old one/).test(classes.known.warlock.subclass); }, skills : ["Deception", "Stealth"] }); AddWarlockInvocation("Chilling Hex (prereq: the Hexblade patron)", { name : "Chilling Hex", description : desc([ "As a bonus action, I can swirl frost around a target affected by my hexblade's curse", "All creatures within 5 ft of the target take cold damage equal to my Cha modifier (min 1)" ]), source : [["UA:WnW", 3]], prereqeval : function(v) { return (/hexblade/).test(classes.known.warlock.subclass); }, action : [["bonus action", ""]] }); AddWarlockInvocation("Chronicle of the Raven Queen (prereq: the Raven Queen patron, Pact of the Tome)", { name : "Chronicle of the Raven Queen", description : desc([ "Within 1 minute of a creature's death, I can use my book of shadows to ask it 1 question", "To do this, I need to put the corpse's hand on the book and speak the question aloud", "Its spirit writes the answer, to the best of its knowledge, in blood in a language I choose" ]), source : [["UA:WnW", 3]], submenu : "[improves Pact of the Tome]", prereqeval : function(v) { return (/raven queen/).test(classes.known.warlock.subclass) && classes.known.warlock.level >= 3 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the tome'; }, action : [["bonus action", ""]] }); AddWarlockInvocation("Claw of Acamar (prereq: the Great Old One patron, Pact of the Blade)", { name : "Claw of Acamar", description : desc([ "As a pact weapon, I can create a black, lead flail with grasping tentacles for a head", "It has reach and can reduce a creature's speed to 0 on a hit until the end of my next turn", "On a hit, I can expend a spell slot to have it do +2d8 necrotic damage per spell slot level" ]), source : [["UA:WnW", 3]], submenu : "[improves Pact of the Blade]", prereqeval : function(v) { return (/great old one/).test(classes.known.warlock.subclass) && classes.known.warlock.level >= 3 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the blade'; }, weaponOptions : [{ baseWeapon : "flail", regExpSearch : /^(?=.*\bclaw\b)(?=.*\bacamar\b).*$/i, name : "Claw of Acamar", source : [["UA:WnW", 3]], pactWeapon : true, description : "Pact weapon, reach; On hit: Reduces speed to 0, Expend spell slot for +2d8 necrotic damage per slot level", selectNow : true }] }); AddWarlockInvocation("Cloak of Baalzebul (prereq: the Fiend patron)", { name : "Cloak of Baalzebul", description : desc([ "As a bonus action, I can conjure or dismiss a swarm of buzzing flies around me", "This gives me adv. on Cha (Intimidation) checks, but disadv. on all other Charisma checks", "Creatures starting their turn within 5 ft of me take poison damage equal to my Cha mod" ]), source : [["UA:WnW", 3]], prereqeval : function(v) { return (/\bfiend\b/).test(classes.known.warlock.subclass); }, action : [["bonus action", " (start/end)"]] }); AddWarlockInvocation("Curse Bringer (prereq: the Hexblade patron, Pact of the Blade)", { name : "Curse Bringer", description : desc([ "As a pact weapon, I can create a silver greatsword with black runes etched in the blade", "If I bring a target of my hexblade's curse to 0 HP with it, I can move the curse to another", "It can reduce a creature's speed to 0 on a hit until the end of my next turn", "On a hit, I can expend a spell slot to have it do +2d8 slashing damage per spell slot level" ]), source : [["UA:WnW", 4]], submenu : "[improves Pact of the Blade]", prereqeval : function(v) { return (/hexblade/).test(classes.known.warlock.subclass) && classes.known.warlock.level >= 3 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the blade'; }, weaponOptions : [{ baseWeapon : "greatsword", regExpSearch : /^(?=.*\bcurse)(?=.*bringer\b).*$/i, name : "Curse Bringer", source : [["UA:WnW", 4]], pactWeapon : true, description : "Pact weapon, heavy, two-handed; On hit: Reduces speed to 0, Expend spell slot for +2d8 slashing damage per slot level", selectNow : true }] }); AddWarlockInvocation("Kiss of Mephistopheles (prereq: level 5 warlock, the Fiend patron, Eldritch Blast cantrip)", { name : "Kiss of Mephistopheles", description : desc([ "As a bonus action when my Eldritch Blast hits, I can cast Fireball using a warlock spell slot", "The origin of the Fireball is the creature that was hit with my Eldritch Blast attack" ]), source : [["UA:WnW", 4]], submenu : "[improves Eldritch Blast]", prereqeval : function(v) { return v.hasEldritchBlast && classes.known.warlock.level >= 5 && (/\bfiend\b/).test(classes.known.warlock.subclass); }, action : [["bonus action", ""]] }); AddWarlockInvocation("Frost Lance (prereq: the Archfey patron, Eldritch Blast cantrip)", { name : "Frost Lance", description : desc([ "When my Eldritch Blast hits a creature once or more, I can reduce its speed by 10 ft", "This speed reduction lasts until the end of my next turn" ]), source : [["UA:WnW", 4]], submenu : "[improves Eldritch Blast]", prereqeval : function(v) { return v.hasEldritchBlast && (/\barchfey\b/).test(classes.known.warlock.subclass); }, calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == 'eldritch blast') fields.Description += '; Target -10 ft speed'; }, "When I hit a creature with my Eldritch Blast cantrip once or more times in a turn, I can reduce its speed by 10 ft until the end of my next turn." ] } }); AddWarlockInvocation("Gaze of Khirad (prereq: level 7 warlock, the Great Old One patron)", { name : "Gaze of Khirad", description : desc([ "As an action, I can see through solid object out to 30 ft until the end of my current turn" ]), source : [["UA:WnW", 4]], submenu : "[warlock level 7+]", prereqeval : function(v) { return (/great old one/).test(classes.known.warlock.subclass) && classes.known.warlock.level >= 7; }, action : [["action", ""]] }); AddWarlockInvocation("Grasp of Hadar (prereq: the Great Old One patron, Eldritch Blast cantrip)", { name : "Grasp of Hadar", description : desc("Once per turn when my Eldritch Blast hits a creature, I can move it 10 ft closer to me"), source : [["UA:WnW", 4]], submenu : "[improves Eldritch Blast]", prereqeval : function(v) { return v.hasEldritchBlast && (/great old one/).test(classes.known.warlock.subclass); }, calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == 'eldritch blast') fields.Description += '; Target moved 10 ft to me'; }, "When I hit a creature with my Eldritch Blast cantrip once or more times in a turn, I can move it in a straight line 10 ft closer to me." ] } }); AddWarlockInvocation("Green Lord's Gift (prereq: the Archfey patron)", { name : "Green Lord's Gift", description : desc([ "When I regain HP, all dice for determining the HP I heal are treated as rolling maximum" ]), source : [["UA:WnW", 4]], prereqeval : function(v) { return (/\barchfey\b/).test(classes.known.warlock.subclass); } }); AddWarlockInvocation("Improved Pact Weapon (prereq: level 5 warlock, Pact of the Blade)", { name : "Improved Pact Weapon", description : desc([ "Any pact weapon I create is a +1 magic weapon, if it isn't already a magic weapon" ]), source : [["UA:WnW", 4]], submenu : "[improves Pact of the Blade]", prereqeval : function(v) { return classes.known.warlock.level >= 5 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the blade'; }, calcChanges : { atkCalc : [ function (fields, v, output) { // Test if this is a pact weapon, has no + bonus from somewhere else, and isn't a magic weapon if (v.pactWeapon && !output.magic && !v.theWea.isMagicWeapon) { v.pactMag = 1; output.magic = 1; }; }, "If my Pact Weapon doesn't already include a magical bonus in its name or gets it from somewhere else and is not a magic weapon, the calculation will add +1 to its To Hit and Damage." ] } }); AddWarlockInvocation("Mace of Dispater (prereq: the Fiend patron, Pact of the Blade)", { name : "Mace of Dispater", description : desc([ "As a pact weapon, I can create an iron mace forged in Dis, the 2nd layer of the Nine Hells", "I can knock a target prone with it on a hit, if the target's size is Huge or smaller", "On a hit, I can expend a spell slot to have it do +2d8 force damage per spell slot level" ]), source : [["UA:WnW", 4]], submenu : "[improves Pact of the Blade]", prereqeval : function(v) { return (/\bfiend\b/).test(classes.known.warlock.subclass) && classes.known.warlock.level >= 3 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the blade'; }, weaponOptions : [{ baseWeapon : "mace", regExpSearch : /^(?=.*\bmace\b)(?=.*\bdispater\b).*$/i, name : "Mace of Dispater", source : [["UA:WnW", 4]], pactWeapon : true, description : "Pact weapon; On hit: knock Huge or smaller prone, Expend spell slot for +2d8 force damage per slot level", selectNow : true }] }); AddWarlockInvocation("Moon Bow (prereq: the Archfey patron, Pact of the Blade)", { name : "Moon Bow", description : desc([ "As a pact weapon, I can create a longbow that creates arrows of white wood when drawn", "Its arrows last for 1 minute; I have advantage on attack rolls against lycanthropes with it", "On a hit, I can expend a spell slot to have it do +2d8 radiant damage per spell slot level" ]), source : [["UA:WnW", 4]], submenu : "[improves Pact of the Blade]", prereqeval : function(v) { return (/\barchfey\b/).test(classes.known.warlock.subclass) && classes.known.warlock.level >= 3 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the blade'; }, weaponOptions : [{ baseWeapon : "longbow", regExpSearch : /^(?=.*\bmoon)(?=.*bow\b).*$/i, name : "Moon Bow", source : [["UA:WnW", 4]], pactWeapon : true, description : "Pact weapon, heavy, two-handed; Adv. vs. lycanthropes; On hit, expend spell slot for +2d8 radiant damage per slot level", selectNow : true }] }); AddWarlockInvocation("Path of the Seeker (prereq: the Seeker patron)", { name : "Path of the Seeker", description : desc([ "I ignore difficult terrain; I have advantage on saving throws against being paralyzed", "I also have advantage on checks to escape a grapple, manacles, or rope bindings" ]), source : [["UA:WnW", 4]], prereqeval : function(v) { return (/\bseeker\b/).test(classes.known.warlock.subclass); }, savetxt : { adv_vs : ["paralyzed"] } }); AddWarlockInvocation("Raven Queen's Blessing (prereq: the Raven Queen patron, Eldritch Blast cantrip)", { name : "Raven Queen's Blessing", description : desc([ "When I score a critical hit with Eldritch Blast, I can choose an ally I can see within 30 ft", "That ally can immediately expend one HD to regain HP, just like after a short rest" ]), source : [["UA:WnW", 5]], submenu : "[improves Eldritch Blast]", prereqeval : function(v) { return v.hasEldritchBlast && (/raven queen/).test(classes.known.warlock.subclass); } }); AddWarlockInvocation("Relentless Hex (prereq: level 5 warlock, the Hexblade patron)", { name : "Relentless Hex", description : desc([ "As a bonus action, I can teleport next to a target affected by my hexblade's curse", "To do so, I must see the target and the space I'm teleporting to, and be within 30 ft of it" ]), source : [["UA:WnW", 5]], submenu : "[warlock level 5+]", prereqeval : function(v) { return (/hexblade/).test(classes.known.warlock.subclass) && classes.known.warlock.level >= 5; }, action : [["bonus action", ""]] }); AddWarlockInvocation("Sea Twins' Gift (prereq: the Archfey patron)", { name : "Sea Twins' Gift", description : desc([ "I can breathe underwater and I have a swim speed equal to my walking speed", "Once per long rest, I can cast Water Breathing using a warlock spell slot (PHB 287)" ]), spellcastingBonus : [{ name : "Sea Twins' Gift", spells : ["water breathing"], selection : ["water breathing"], firstCol : "oncelr" }], source : [["UA:WnW", 5]], prereqeval : function(v) { return (/\barchfey\b/).test(classes.known.warlock.subclass); }, speed : { swim : { spd : "walk", enc : "walk" } } }); AddWarlockInvocation("Seeker's Speech (prereq: the Seeker patron)", { name : "Seeker's Speech", description : desc([ "When I finish a long rest, I pick two languages that I know until I finish my next long rest" ]), source : [["UA:WnW", 5]], prereqeval : function(v) { return (/\bseeker\b/).test(classes.known.warlock.subclass); } }); AddWarlockInvocation("Shroud of Ulban (prereq: level 18 warlock, the Great Old One patron)", { name : "Shroud of Ulban", description : desc([ "As an action, I can turn myself invisible for 1 minute", "If I attack, deal damage, or force a creature to make a save, I become visible again", "However, I only become visible at the end of the current turn" ]), source : [["UA:WnW", 4]], submenu : "[warlock level 18+]", prereqeval : function(v) { return (/great old one/).test(classes.known.warlock.subclass) && classes.known.warlock.level >= 18; }, action : [["action", ""]] }); AddWarlockInvocation("Superior Pact Weapon (prereq: level 9 warlock, Pact of the Blade)", { name : "Superior Pact Weapon", description : desc([ "Any pact weapon I create is a +2 magic weapon, if it isn't already a magic weapon" ]), source : [["UA:WnW", 5]], submenu : "[improves Pact of the Blade]", prereqeval : function(v) { return classes.known.warlock.level >= 9 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the blade'; }, calcChanges : { atkCalc : [ function (fields, v, output) { // Test if this is a pact weapon, has no + bonus in its name, is not a magic weapon, and doesn't already have a improved pact weapon bonus var iPactWeaBonus = 2; if (v.pactWeapon && !v.thisWeapon[1] && !v.theWea.isMagicWeapon && ((!v.pactMag && !output.magic) || (v.pactMag && v.pactMag < iPactWeaBonus))) { if (v.pactMag) output.magic -= v.pactMag; v.pactMag = iPactWeaBonus; output.magic += v.pactMag; }; }, "If my Pact Weapon doesn't already include a magical bonus in its name or gets it from somewhere else and is not a magic weapon, the calculation will add +2 to its To Hit and Damage." ] } }); AddWarlockInvocation("Tomb of Levistus (prereq: the Fiend patron)", { name : "Tomb of Levistus", description : desc([ "As a reaction when I take damage, I can entomb myself in ice until the end of my turn", "I get 10 temp. HP per warlock level, which can be used to absorb the triggering damage", "Until the ice is gone, I have vulnerability to fire damage, 0 speed, and am incapacitated" ]), source : [["UA:WnW", 5]], prereqeval : function(v) { return (/\bfiend\b/).test(classes.known.warlock.subclass); }, recovery : "short rest", usages : 1, action : [["reaction", ""]] }); AddWarlockInvocation("Ultimate Pact Weapon (prereq: level 15 warlock, Pact of the Blade)", { name : "Ultimate Pact Weapon", description : desc([ "Any pact weapon I create is a +3 magic weapon, if it isn't already a magic weapon" ]), source : [["UA:WnW", 5]], submenu : "[improves Pact of the Blade]", prereqeval : function(v) { return classes.known.warlock.level >= 15 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the blade'; }, calcChanges : { atkCalc : [ function (fields, v, output) { // Test if this is a pact weapon, has no + bonus in its name, is not a magic weapon, and doesn't already have a improved pact weapon bonus var iPactWeaBonus = 3; if (v.pactWeapon && !v.thisWeapon[1] && !v.theWea.isMagicWeapon && ((!v.pactMag && !output.magic) || (v.pactMag && v.pactMag < iPactWeaBonus))) { if (v.pactMag) output.magic -= v.pactMag; v.pactMag = iPactWeaBonus; output.magic += v.pactMag; }; }, "If my Pact Weapon doesn't already include a magical bonus in its name or gets it from somewhere else and is not a magic weapon, the calculation will add +3 to its To Hit and Damage." ] } }); // ua_20170313_The-Mystic-Class.js // This file adds the content from the Unearthed Arcana: The Mystic Class article to MPMB's Character Record Sheet // WARNING: there are no published multiclassing rules for Mystic; the ones provided here are extrapolated from other classes // Define the source SourceList["UA:TMC"] = { name : "Unearthed Arcana: The Mystic Class", abbreviation : "UA:TMC", group : "Unearthed Arcana", url : "https://media.wizards.com/2017/dnd/downloads/UAMystic3.pdf", date : "2017/03/13" }; // Add spell schools spellSchoolList["Avatar"] = "avatar"; spellSchoolList["Awake"] = "awakened"; spellSchoolList["Immor"] = "immortal"; spellSchoolList["Nomad"] = "nomad"; spellSchoolList["Wu Jen"] = "wu jen"; // Adds a new class, the Mystic, with 6 subclasses ClassList.mystic = { regExpSearch : /psion\b|mystic/i, name : "Mystic", source : [["UA:TMC", 1]], primaryAbility : "Intelligence", abilitySave : 4, prereqs : "Intelligence 13", improvements : [0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5, 5], die : 8, saves : ["Wis", "Int"], skillstxt : { primary : "Choose two from Arcana, History, Insight, Medicine, Nature, Perception, and Religion" }, armorProfs : { primary : [true, false, false, false] }, weaponProfs : { primary : [true, false] }, equipment : "Mystic starting equipment:\n \u2022 A spear -or- a mace;\n \u2022 Leather mail -or- studded leather armor;\n \u2022 A light crossbow and 20 bolts -or- any simple weapon;\n \u2022 A scholar's pack -or- an explorer's pack.\n\nAlternatively, choose 5d4 \xD7 10 gp worth of starting equipment instead of both the class' and the background's starting equipment.", subclasses : ["Mystic Order", []], subclassGainedLevel : 1, attacks : [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], spellcastingFactor : "psionic0", spellcastingKnown : { cantrips : levels.map(function (n) { return n < 3 ? 1 : n < 10 ? 2 : n < 17 ? 3 : 4; }), spells : levels.map(function (n) { return n < 3 ? 1 : n < 5 ? 2 : n < 7 ? 3 : n < 9 ? 4 : n < 12 ? 5 : n < 15 ? 6 : n < 18 ? 7 : 8; }) }, spellcastingList : { "class" : "mystic", psionic : true }, features : { "psi points" : { name : "Psi Points", source : [["UA:TMC", 3]], minlevel : 1, description : desc([ "I use psi points to fuel my psionic disciplines, up to my psi limit per instance" ]), usages : levels.map(function (n) { return n < 2 ? 4 : n < 3 ? 6 : n < 4 ? 14 : n < 5 ? 17 : n < 6 ? 27 : n < 7 ? 32 : n < 8 ? 38 : n < 9 ? 44 : n < 10 ? 57 : n < 18 ? 64 : 71; }), recovery : "long rest", additional : levels.map(function (n) { return (n < 3 ? 2 : n < 5 ? 3 : n < 7 ? 5 : n < 9 ? 6 : 7) + " psi limit"; }) }, "psionics" : { name : "Psionics", source : [["UA:TMC", 3]], minlevel : 1, description : desc([ "I can use psionic talents/disciplines that I know, using Intelligence as my psionic ability" ]), additional : levels.map(function (n) { var talent = n < 3 ? "1 talent" : (n < 10 ? 2 : n < 17 ? 3 : 4) + " talents"; var discpl = n < 3 ? "1 discipline" : (n < 5 ? 2 : n < 7 ? 3 : n < 9 ? 4 : n < 12 ? 5 : n < 15 ? 6 : n < 18 ? 7 : 8) + " disciplines"; return talent + " \u0026 " + discpl + " known"; }) }, "psychic focus" : { name : "Psychic Focus", source : [["UA:TMC", 3]], minlevel : 1, description : desc([ "As a bonus action, I can choose one of my psionic disciplines and gain its focus benefit", "I can only focus on one at a time; It stays until I focus on another, or I'm incapacitated" ]), action : [["bonus action", ""]] }, "subclassfeature1" : { name : "Mystic Order", source : [["UA:TMC", 4]], minlevel : 1, description : desc('Choose a Mystic Order that shapes the nature of your rage and put it in the "Class" field') }, "mystical recovery" : { name : "Mystical Recovery", source : [["UA:TMC", 4]], minlevel : 2, description : desc([ "As a bonus action after using psi points on a discipline, I can regain HP per point spent" ]), action : [["bonus action", ""]] }, "telepathy" : { name : "Telepathy", source : [["UA:TMC", 4]], minlevel : 2, description : desc([ "I can telepathically speak to creatures I can see within 120 ft, if they know a language" // 'to' not 'with', so one-way ]) }, "strength of mind" : { name : "Strength of Mind", source : [["UA:TMC", 4]], minlevel : 4, description : desc([ "After a short rest, I can change my Wisdom save proficiency to another ability score" ]) }, "potent psionics" : { name : "Potent Psionics", source : [["UA:TMC", 4]], minlevel : 8, description : desc([ "Once per turn, when I hit a creature with a weapon attack, I can do extra damage", "In addition, I add my Intelligence modifier to my psionic talent damage rolls" ]), additional : levels.map(function (n) { if (n < 8) return ""; return "+" + (n < 14 ? 1 : 2) + "d8 psychic damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.mystic && classes.known.mystic.level > 7 && !v.isSpell) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.mystic.level < 14 ? 1 : 2) + 'd8 psychic damage'; }; }, "Once per turn, I can have one of my weapon attacks that hit do extra psychic damage.\n \u2022 My psionic talents get my Intelligence modifier added to their damage roll." ], atkCalc : [ function (fields, v, output) { if (classes.known.mystic && classes.known.mystic.level > 7 && v.thisWeapon[3] && v.thisWeapon[4].indexOf('mystic') !== -1 && SpellsList[v.thisWeapon[3]].level === 0) { output.extraDmg += What('Int Mod'); }; }, "" ], spellAdd : [ function (spellKey, spellObj, spName) { if (spellObj.psionic && spellObj.level == 0) { return genericSpellDmgEdit(spellKey, spellObj, "\\w+|Acid, Cold, Fire, Lightning, or Thunder", "Int", true); } }, "My psionic talents get my Intelligence modifier added to their damage." ] } }, "consumptive power" : { name : "Consumptive Power", source : [["UA:TMC", 5]], minlevel : 10, description : desc([ "Once per long rest, I can use my HP to fuel a psionic discipline instead of psi points", "I lose the HP; My HP max is reduced with the same until I finish my next long rest" ]), usages : 1, recovery : "long rest" }, "psionic mastery" : { name : "Psionic Mastery", source : [["UA:TMC", 5]], minlevel : 11, description : desc([ "As an action, I can gain a pool of special psi points that last until I finish a long rest", "I can use these, without psi limit, for disciplines that require an action or bonus action", "I can use either these or psi points from my normal pool for a discipline, but not both", "I can concentrate on all disciplines that use these special points at the same time", "I lose concentration if I cast a discipline requiring concentration from my normal pool" ]), usages : levels.map(function (n) { if (n < 11) return ""; return n < 13 ? 1 : n < 15 ? 2 : n < 17 ? 3 : 4; }), recovery : "long rest", additional : levels.map(function (n) { if (n < 11) return ""; return "pool of " + (n < 15 ? 9 : 11) + " psi points"; }), action : [["action", ""]] }, "psionic body" : { name : "Psionic Body", source : [["UA:TMC", 5]], minlevel : 20, description : desc([ "I no longer age and I have resistance to bludgeoning, piercing, and slashing damage", "I'm immune to disease, poison damage, and the poisoned condition", "If I die, I have a 55% chance of discorporating instead and returning 1d3 days later" ]), savetxt : { immune : ["poison", "disease"] }, dmgres : ["Bludgeoning", "Piercing", "Slashing"] } } }; // Order of the Avatar subclass for the Mystic AddSubClass("mystic", "avatar-ua", { regExpSearch : /^(?=.*(psion\b|mystic))(?=.*avatar).*$/i, subname : "Order of the Avatar", source : [["UA:TMC", 5]], features : { "subclassfeature1" : { name : "Bonus Disciplines", source : [["UA:TMC", 5]], minlevel : 1, description: desc("I know two additional psionic disciplines, chosen from the avatar disciplines"), spellcastingBonus : [{ name : "Bonus Disciplines", "class" : "mystic", school : ["Avatar"], level : [1, 9], times : 2, psionic : true }] }, "subclassfeature1.1" : { name : "Armor Training", source : [["UA:TMC", 5]], minlevel : 1, description: desc("I gain proficiency with medium armor and shields."), armorProfs : [false, true, false, true] }, "subclassfeature3" : { name : "Avatar of Battle", source : [["UA:TMC", 5]], minlevel : 3, description: desc("Allies within 30 ft of me gain +2 on initiative rolls while I'm not incapacitated") }, "subclassfeature6" : { name : "Avatar of Healing", source : [["UA:TMC", 6]], minlevel : 6, description : desc([ "Allies within 30 ft of me that get healed through a psionic discipline, get extra healing", "They add my Intelligence modifier to the HP regained, as long as I'm not incapacitated" ]), calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { if (!What("Int Mod") || What("Int Mod") <= 0) return; switch (spellKey) { case "pr1-mend wounds" : spellObj.description = spellObj.description.replace("healed for ", "healed for " + What("Int Mod") + "+"); return true; case "pr2-restore health" : spellObj.description = spellObj.description.replace("1 HP", (1 + What("Int Mod")) + " HP"); return true; } }, "I add my Intelligence modifier to the hit points I restore using my psionic disciplines." ] } }, "subclassfeature14" : { name : "Avatar of Speed", source : [["UA:TMC", 6]], minlevel : 14, description: desc("Allies within 30 ft of me can use Dash as a bonus action while I'm not incapacitated") } } }); // Order of the Awakened subclass for the Mystic AddSubClass("mystic", "awakened-ua", { regExpSearch : /^(?=.*(psion\b|mystic))(?=.*awakened).*$/i, subname : "Order of the Awakened", source : [["UA:TMC", 6]], features : { "subclassfeature1" : { name : "Bonus Disciplines", source : [["UA:TMC", 6]], minlevel : 1, description : " [+2 awakened disciplines]", spellcastingBonus : [{ name : "Bonus Disciplines", "class" : "mystic", school : ["Awake"], level : [1, 9], times : 2, psionic : true }] }, "subclassfeature1.1" : { name : "Awakened Talent", source : [["UA:TMC", 6]], minlevel : 1, description : desc([ "I gain proficiency with two skills of my choice, taken from the following list:", "Animal Handling, Deception, Insight, Intimidation, Investigation, Perception, Persuasion" ]), skillstxt : "Choose two from: Animal Handling, Deception, Insight, Intimidation, Investigation, Perception, and Persuasion" }, "subclassfeature3" : { name : "Psionic Investigation", source : [["UA:TMC", 6]], minlevel : 3, description : desc([ "By concentrating on an object I'm holding for 10 minutes, I learn the object's history", "I see/hear its surroundings the previous hour and know who hold it in the last 24 hours", "Also, for the next 24 hours, I can use an action to locate it and see its surroundings" ]), usages : 1, recovery : "short rest" }, "subclassfeature6" : { name : "Psionic Surge", source : [["UA:TMC", 6]], minlevel : 6, description : desc([ "I can end my psychic focus to impose disadv. on a save vs. a discipline or talent I use", "Once I do this, I can't regain psychic focus in any discipline until I can use this again" ]), usages : 1, recovery : "short rest" }, "subclassfeature14" : { name : "Spectral Form", source : [["UA:TMC", 6]], minlevel : 14, description : desc([ "As an action, I can become ghostly and move through objects and creatures for 10 min", "I also have resistance to all damage and move at half speed; I can end it as an action" ]), usages : 1, recovery : "long rest", action : [["action", ""]] } } }); // Order of the Immortal subclass for the Mystic AddSubClass("mystic", "immortal-ua", { regExpSearch : /^(?=.*(psion\b|mystic))(?=.*immortal).*$/i, subname : "Order of the Immortal", source : [["UA:TMC", 6]], features : { "subclassfeature1" : { name : "Bonus Disciplines", source : [["UA:TMC", 7]], minlevel : 1, description: desc("I know two additional psionic disciplines, taken from the immortal disciplines"), spellcastingBonus : [{ name : "Bonus Disciplines", "class" : "mystic", school : ["Immor"], level : [1, 9], times : 2, psionic : true }] }, "subclassfeature1.1" : { name : "Immortal Durability", source : [["UA:TMC", 7]], minlevel : 1, description : desc([ "My hit point maximum increases by an amount equal to my mystic level", "If not wearing armor or wielding a shield, my AC is 10 + my Dex mod + my Con mod" ]), calcChanges : { hp : function (totalHD) { if (classes.known.mystic) { return [classes.known.mystic.level, "Immortal Durability (mystic level)"]; } } }, armorOptions : [{ regExpSearch : /^(?=.*immortal)(?=.*durability).*$/i, name : "Immortal Durability", source : [["UA:TMC", 7]], ac : "10+Con", affectsWildShape : true, selectNow : true }] }, "subclassfeature3" : { name : "Psionic Resilience", source : [["UA:TMC", 7]], minlevel : 3, description : desc([ "At the start of each turn, I gain my Intelligence modifier in temporary HP (min 0)" ]) }, "subclassfeature6" : { name : "Surge of Health", source : [["UA:TMC", 7]], minlevel : 6, description : desc([ "As a reaction when I take damage, I can halve that damage, but end my psychic focus", "Once I do this, I can't regain psychic focus in any discipline until I can use this again" ]), usages : 1, recovery : "short rest", action : [["reaction", ""]] }, "subclassfeature14" : { name : "Immortal Will", source : [["UA:TMC", 7]], minlevel : 14, description : desc([ "If I end my turn at 0 HP, I can use 5 psi points to regain mystic level + Con mod in HP" ]), additional : levels.map(function (n) { if (n < 14) return ""; return "HP: " + n + " + Constitution modifier"; }) } } }); // Order of the Nomad subclass for the Mystic AddSubClass("mystic", "nomad-ua", { regExpSearch : /^(?=.*(psion\b|mystic))(?=.*nomad).*$/i, subname : "Order of the Nomad", source : [["UA:TMC", 7]], features : { "subclassfeature1" : { name : "Bonus Disciplines", source : [["UA:TMC", 7]], minlevel : 1, description: desc("I know two additional psionic disciplines, taken from the nomad disciplines"), spellcastingBonus : [{ name : "Bonus Disciplines", "class" : "mystic", school : ["Nomad"], level : [1, 9], times : 2, psionic : true }] }, "subclassfeature1.1" : { name : "Breadth of Knowledge", source : [["UA:TMC", 7]], minlevel : 1, description : desc([ "After I finish a long rest, I gain two proficiencies in chosen language, tool, or skill", "These proficiencies last until I finish my next long rest" ]) }, "subclassfeature3" : { name : "Memory of One Thousand Steps", source : [["UA:TMC", 7]], minlevel : 3, description : desc([ "As a reaction when hit by an attack, I can teleport away, causing the attack to miss", "I can teleport to any empty space that I had occupied since the start of my last turn" ]), usages : 1, recovery : "short rest", action : [["reaction", ""]] }, "subclassfeature6" : { name : "Superior Teleportation", source : [["UA:TMC", 7]], minlevel : 6, description : desc([ "When I use a psionic discipline to teleport, I can increase its distance by up to 10 ft" ]), calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { switch (spellKey) { case "ns1-step of a dozen paces" : var addDist = What("Unit System") === "metric" ? 3 : 10; spellObj.description = spellObj.description.replace(/(\d+ (ft|m))/i, addDist + "+$1"); return true; case "ns3-defensive step" : case "ns4-there and back again" : var addDist = What("Unit System") === "metric" ? 3 : 10; var theDist = Number(spellObj.description.replace(/.*(\d+) (ft|m).*/i, "$1")); spellObj.description = spellObj.description.replace(/(\d+) (ft|m)/i, (theDist + addDist) + " $2"); return true; } }, "My psionic disciplines that teleport have 10 ft added to the distance of their teleportation." ] } }, "subclassfeature14" : { name : "Effortless Journey", source : [["UA:TMC", 7]], minlevel : 14, description : desc([ "Once during my turn, I can teleport instead of moving, up to my movement speed ", "I subtracting the distance teleported from my remaining speed" ]) } } }); // Order of the Soul Knife subclass for the Mystic AddSubClass("mystic", "soul knife-ua", { regExpSearch : /^(?=.*soul\b)(?=.*\bknife).*$/i, subname : "Order of the Soul Knife", source : [["UA:TMC", 7]], fullname : "Soul Knife", features : { "subclassfeature1" : { name : "Martial Training", source : [["UA:TMC", 7]], minlevel : 1, description: desc("I gain proficiency with medium armor and martial weapons"), armor : [false, true, false, false], weapons : [false, true] }, "subclassfeature1.1" : { name : "Soul Knife", source : [["UA:TMC", 8]], minlevel : 1, description : desc([ "As a bonus action, I can create or dismiss my soul knives on both my fists", "As a bonus action, I can parry with these to get +2 AC until the start of my next turn" ]), action : [["bonus action", " (create/dismiss)"], ['bonus action', ' Parry']], weaponOptions : [{ regExpSearch : /^(?=.*\bsoul)(?=.*(knives|knife|weapon)\b).*$/i, name : "Soul Knife", source : [["UA:TMC", 8]], ability : 1, type : "Martial", damage : [1, 8, "psychic"], range : "Melee", description : "Finesse, light", abilitytodamage : true, selectNow : true }] }, "subclassfeature3" : { name : "Hone the Blade", source : [["UA:TMC", 8]], minlevel : 3, description : desc([ "I can spend psi points to give my soul knives a bonus to attack and damage for 10 min", "2 psi points: +1; 5 psi points: +2; 7 psi points: +4" ]) }, "subclassfeature6" : { name : "Consumptive Knife", source : [["UA:TMC", 8]], minlevel : 6, description : desc([ "Whenever I slay an enemy with a soul knife attack, I immediately regain 2 psi points" ]) }, "subclassfeature14" : { name : "Phantom Knife", source : [["UA:TMC", 8]], minlevel : 14, description : desc([ "As an action, I can make one attack with my soul knife, treating the target's AC as 10" ]), action : [["action", ""]] } } }); // Order of the Wu Jen subclass for the Mystic AddSubClass("mystic", "wu jen-ua", { regExpSearch : /^(?=.*\bwu\b)(?=.*\bjen\b).*$/i, subname : "Order of the Wu Jen", source : [["UA:TMC", 8]], fullname : "Wu Jen", features : { "subclassfeature1" : { name : "Bonus Disciplines", source : [["UA:TMC", 8]], minlevel : 1, description : " [+2 wu jen disciplines]", spellcastingBonus : [{ name : "Bonus Disciplines", "class" : "mystic", school : ["Wu Jen"], level : [1, 9], times : 2, psionic : true }] }, "subclassfeature1.1" : { name : "Hermit's Study", source : [["UA:TMC", 8]], minlevel : 1, description : desc([ "I gain proficiency with two skills of my choice, taken from the following list:", "Animal Handling|Arcana|History|Insight|Medicine|Nature|Perception|Religion|Survival" ]), skillstxt : "Choose two from: Animal Handling, Arcana, History, Insight, Medicine, Nature, Perception, Religion, and Survival" }, "subclassfeature3" : { name : "Elemental Attunement", source : [["UA:TMC", 8]], minlevel : 3, description : desc([ "If a target's resistance reduces damage of one of my psionic disciplines, I can bypass it", "With 1 extra psi point for the discipline (psi limit permitting), the resistance is ignored" ]) }, "subclassfeature6" : { name : "Arcane Dabbler", source : [["UA:TMC", 8]], minlevel : 6, description : desc([ "I know 3 wizard spells (1-3 level); When I gain a mystic level, I can swap one of these", "As a bonus action, I can use psi points to make spell slots; Last until my next long rest", "2 PP: 1st-level; 3 PP: 2nd-level; 5 PP: 3rd-level; 6 PP: 4th-level; 7 PP: 5th-level" ]), spellcastingBonus : [{ name : "Arcane Dabbler", "class" : "wizard", level : [1, 3], times : 3 }] }, "subclassfeature14" : { name : "Elemental Mastery", source : [["UA:TMC", 8]], minlevel : 14, description : desc([ "As a reaction when I take damage to which I have resistance, I can ignore that damage", "I gain immunity to that damage type until the start of my next turn" ]) } } }); // The Psionic Talents for the Mystic (with contributions by rabidknave) PsionicsList["beacon-ua-psy"] = { name : "Beacon", classes : ["mystic"], source : [["UA:TMC", 27]], psionic : true, level : 0, time : "1 bns", range : "Self", duration : "1 h (D)", description : "My body sheds bright light 20-ft rad and dim light 20-ft, in chosen color; dismiss as a bonus action", descriptionFull : "As a bonus action, you cause bright light to radiate from your body in a 20-foot radius and dim light for an additional 20 feet. The light can be colored as you like. The light lasts for 1 hour, and you can extinguish it earlier as a bonus action." }; PsionicsList["blade meld-ua-psy"] = { name : "Blade Meld", classes : ["mystic"], source : [["UA:TMC", 27]], psionic : true, level : 0, time : "1 bns", range : "Self", duration : "1 min", description : "One-handed melee weapon I'm holding merges with hand; it can't be removed for the duration", descriptionFull : "As a bonus action, a one-handed melee weapon you hold becomes one with your hand. For the next minute, you can't let go of the weapon nor can it be forced from your grasp." }; PsionicsList["blind spot-ua-psy"] = { name : "Blind Spot", classes : ["mystic"], source : [["UA:TMC", 27]], psionic : true, level : 0, time : "1 a", range : "120 ft", duration : "Next turn end", save : "Wis", description : "1 creature save or treats me as invisible until the end of my next turn", descriptionFull : "As an action, you erase your image from the mind of one creature you can see within 120 feet of you; the target must succeed on a Wisdom saving throw, or you are invisible to it until the end of your next turn." }; PsionicsList["delusion-ua-psy"] = { name : "Delusion", classes : ["mystic"], source : [["UA:TMC", 27]], psionic : true, level : 0, time : "1 a", range : "60 ft", duration : "1 min", description : "1 crea either hears a sound (whisper-scream), or sees up to 5-ft cube object that disappears on touch", descriptionFull : "As an action, you plant a false belief in the mind of one creature that you can see within 60 feet of you. You can create a sound or an image. Only the target of this talent perceives the sound or image you create." + "\n " + "If you create a sound, its volume can range from a whisper to a scream. It can be your voice, someone else's voice, a creature's roar, a musical instrument, or any other sound you pick. It lasts for 1 minute." + "\n " + "If you create an object, it must fit within a 5-foot cube and can't move or be reflective. The image can't create any effect that influences a sense other than sight. The image lasts for 1 minute, and it disappears if the creature touches it." }; PsionicsList["energy beam-ua-psy"] = { name : "Energy Beam", classes : ["mystic"], source : [["UA:TMC", 27]], psionic : true, level : 0, time : "1 a", range : "90 ft", duration : "Instantaneous", save : "Dex", description : "1 crea save or 1d8 Acid, Cold, Fire, Lightning, or Thunder dmg; +1d8 at CL 5, 11, and 17", descriptionCantripDie : "1 crea save or `CD`d8 Acid, Cold, Fire, Lightning, or Thunder dmg", descriptionFull : "As an action, you target one creature you can see within 90 feet of you. The target must succeed on a Dexterity saving throw or take 1d8 acid, cold, fire, lightning, or thunder damage (your choice)." + "\n " + "The talent's damage increases by 1d8 when you reach 5th level (2d8), 11th level (3d8), and 17th level (4d8)" }; PsionicsList["light step-ua-psy"] = { name : "Light Step", classes : ["mystic"], source : [["UA:TMC", 27]], psionic : true, level : 0, time : "1 bns", range : "Self", duration : "This turn end", description : "My walking speed increases by 10 ft; standing up costs 0 movement, once", descriptionFull : "As a bonus action, you alter your density and weight to improve your mobility. For the rest of your turn, your walking speed increases by 10 feet, and the first time you stand up this turn, you do so without expending any of your movement if your speed is greater than 0." }; PsionicsList["mind meld-ua-psy"] = { name : "Mind Meld", classes : ["mystic"], source : [["UA:TMC", 27]], psionic : true, level : 0, time : "1 bns", range : "120 ft", duration : "This turn end", description : "I communicate telepathically with 1 willing crea (int > 1) and gain access to 1 memory of theirs", descriptionFull : "As a bonus action, you can communicate telepathically with one willing creature you can see within 120 feet of you. The target must have an Intelligence of at least 2, otherwise this talent fails and the action is wasted." + "\n " + "This communication can occur until the end of the current turn. You don't need to share a language with the target for it to understand your telepathic utterances, and it understands you even if it lacks a language. You also gain access to one memory of the target's choice, gaining perfect recall of one thing it saw or did." }; PsionicsList["mind slam-ua-psy"] = { name : "Mind Slam", classes : ["mystic"], source : [["UA:TMC", 28]], psionic : true, level : 0, time : "1 a", range : "60 ft", duration : "Instantaneous", save : "Con", description : "1 crea save or 1d6 Force dmg, and knocked prone if Large or smaller; +1d6 at CL 5, 11, and 17", descriptionCantripDie : "1 crea save or `CD`d6 Force dmg, and knocked prone if Large or smaller", descriptionFull : "As an action, you target one creature you can see within 60 feet of you. The target must succeed on a Constitution saving throw or take 1d6 force damage. If it takes any of this damage and is Large or smaller, it is knocked prone." + "\n " + "The talent's damage increases by 1d6 when you reach 5th level (2d6), 11th level (3d6), and 17th level (4d6)" }; PsionicsList["mind thrust-ua-psy"] = { name : "Mind Thrust", classes : ["mystic"], source : [["UA:TMC", 28]], psionic : true, level : 0, time : "1 a", range : "120 ft", duration : "Instantaneous", save : "Int", description : "1 crea save or 1d10 Psychic dmg; +1d10 at CL 5, 11, and 17", descriptionCantripDie : "1 crea save or `CD`d10 Psychic dmg", descriptionFull : "As an action, you target one creature you can see within 120 feet of you. The target must succeed on an Intelligence saving throw or take 1d10 psychic damage." + "\n " + "The talent's damage increases by 1d10 when you reach 5th level (2d10), 11th level (3d10), and 17th level (4d10)." }; PsionicsList["mystic charm-ua-psy"] = { name : "Mystic Charm", classes : ["mystic"], source : [["UA:TMC", 28]], psionic : true, level : 0, time : "1 a", range : "120 ft", duration : "Next turn end", save : "Cha", description : "1 humanoid save or charmed until end of my next turn", descriptionFull : "As an action, you beguile one humanoid you can see within 120 feet of you. The target must succeed on a Charisma saving throw or be charmed by you until the end of your next turn." }; PsionicsList["mystic hand-ua-psy"] = { name : "Mystic Hand", classes : ["mystic"], source : [["UA:TMC", 28]], psionic : true, level : 0, time : "1 a", range : "30 ft", duration : "This turn end", description : "Move 1 unattended object (up to 10 lbs) up to 30 ft, or manipulate an object", descriptionFull : "You can use your action to manipulate or move one object within 30 feet of you. The object can't weigh more than 10 pounds, and you can't affect an object being worn or carried by another creature. If the object is loose, you can move it up to 30 feet in any direction." + "\n " + "This talent allows you to open an unlocked door, pour out a beer stein, and so on." + "\n " + "The object falls to the ground at the end of your turn if you leave it suspended in midair." }; PsionicsList["psychic hammer-ua-psy"] = { name : "Psychic Hammer", classes : ["mystic"], source : [["UA:TMC", 28]], psionic : true, level : 0, time : "1 a", range : "120 ft", duration : "Instantaneous", save : "Str", description : "1 crea save or 1d6 Force dmg and moved up to 10 ft in chosen direction; +1d6 at CL 5, 11, and 17", descriptionCantripDie : "1 crea save or `CD`d6 Force dmg and moved up to 10 ft in chosen direction", descriptionFull : "As an action, you try to grasp one creature you can see within 120 feet of you, with a hand crafted from telekinetic energy. The target must succeed on a Strength saving throw or take 1d6 force damage. If it takes any of this damage and is Large or smaller, you can move it up to 10 feet in a straight line in a direction of your choice. You can't lift the target off the ground unless it is already airborne or underwater." + "\n " + "The talent's damage increases by 1d6 when you reach 5th level (2d6), 11th level (3d6), and 17th level (4d6)." }; // Psionic Disciplines for the Mystic //the adaptive body discipline PsionicsList["adaptive body-ua-psy"] = { name : "Adaptive Body", classes : ["mystic"], source : [["UA:TMC", 10]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I don't need to eat, breathe, or sleep; I can long rest with 8 hours of light activity, without sleep", descriptionFull : "You can alter your body to match your surroundings, allowing you to withstand punishing environments. With greater psi energy, you can extend this protection to others." + PsychicFocus + "While focused on this discipline, you don't need to eat, breathe, or sleep. To gain the benefits of a long rest, you can spend 8 hours engaged in light activity, rather than sleeping during any of it.", firstCol : "checkbox", dependencies : ["ab1-environmental adaptation", "ab2-adaptive shield", "ab3-energy adaptation", "ab4-energy immunity"] }; PsionicsList["ab1-environmental adaptation"] = { name : "Environmental Adaptation", nameShort : "Environmental Adapt.", source : [["UA:TMC", 10]], psionic : true, level : 1, school : "Immor", time : "1 a", range : "Touch", duration : "1 h", description : "1 creature ignores the effects of extreme heat or cold (but not Fire or Cold damage)", descriptionFull : "As an action, you or a creature you touch ignores the effects of extreme heat or cold (but not cold or fire damage) for the next hour.", firstCol : 2 }; PsionicsList["ab2-adaptive shield"] = { name : "Adaptive Shield", source : [["UA:TMC", 10]], psionic : true, level : 1, school : "Immor", time : "1 rea", timeFull : "1 reaction, which you take when you take acid, cold, fire, lightning, or thunder damage", range : "Self", duration : "Next turn end", description : "If taking Acid, Cold, Fire, Lightning, or Thunder damage, gain resistance to it until end of next turn", descriptionFull : "When you take acid, cold, fire, lightning, or thunder damage, you can use your reaction to gain resistance to damage of that type -including the triggering damage- until the end of your next turn.", firstCol : 3 }; PsionicsList["ab3-energy adaptation"] = { name : "Energy Adaptation", source : [["UA:TMC", 10]], psionic : true, level : 1, school : "Immor", time : "1 a", range : "Touch", duration : "Conc, 1 h", description : "1 creature gains resistance to either Acid, Cold, Fire, Lightning, or Thunder damage", descriptionFull : "As an action, you can touch one creature and give it resistance to acid, cold, fire, lightning, or thunder damage (your choice), which lasts until your concentration ends.", firstCol : 5 }; PsionicsList["ab4-energy immunity"] = { name : "Energy Immunity", source : [["UA:TMC", 10]], psionic : true, level : 1, school : "Immor", time : "1 a", range : "Touch", duration : "Conc, 1 h", description : "1 creature gains immunity to either Acid, Cold, Fire, Lightning, or Thunder damage", descriptionFull : "As an action, you can touch one creature and give it immunity to acid, cold, fire, lightning, or thunder damage (your choice), which lasts until your concentration ends.", firstCol : 7 }; //the aura sight discipline (contributed by Justin W.) PsionicsList["aura sight-ua-psy"] = { name : "Aura Sight", classes : ["mystic"], source : [["UA:TMC", 10]], psionic : true, level : 1, school : "Awake", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain advantage on Wisdom (Insight) checks", descriptionFull : "You refocus your sight to see the energy that surrounds all creatures. You perceive auras, energy signatures that can reveal key elements of a creature's nature." + PsychicFocus + "While focused on this discipline, you have advantage on Wisdom (Insight) checks.", firstCol : "checkbox", dependencies : ["as1-asses foe", "as2-read moods", "as3-view aura", "as4-perceive the unseen"] }; PsionicsList["as1-asses foe"] = { name : "Asses Foe", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Awake", time : "1 bns", range : "Sight", duration : "Instantaneous", description : "Learn one creature's current HP total and all its immunities, resistances, and vulnerabilities", descriptionFull : "As a bonus action, you analyze the aura of one creature you see. You learn its current hit point total and all its immunities, resistances, and vulnerabilities.", firstCol : 2 }; PsionicsList["as2-read moods"] = { name : "Read Moods", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Awake", time : "1 bns", range : "Sight", duration : "Instantaneous", description : "Learn an one-word summary of the emotional state of up to 6 crea", descriptionFull : "As a bonus action, you learn a one-word summary of the emotional state of up to six creatures you can see, such as happy, confused, afraid, or violent.", firstCol : 2 }; PsionicsList["as3-view aura"] = { name : "View Aura", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "Sight", duration : "Conc, 1 h", description : "Monitor 1 crea: current HP, if magic effects it, basic emotional state; adv. on Insight/Cha checks vs. it", descriptionFull : "As an action, you study one creature's aura. Until your concentration ends, while you can see the target, you learn if it's under the effect of any magical or psionic effects, its current hit point total, and its basic emotional state. While this effect lasts, you have advantage on Wisdom (Insight) and Charisma checks you make against it.", firstCol : 3 }; PsionicsList["as4-perceive the unseen"] = { name : "Perceive the Unseen", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Awake", time : "1 bns", range : "Sight", duration : "Conc, 1 min", description : "See all creatures, including hidden and invisible ones, regardless of lighting conditions", descriptionFull : "As a bonus action, you gain the ability to see auras even of invisible or hidden creatures. Until your concentration ends, you can see all creatures, including hidden and invisible ones, regardless of lighting conditions.", firstCol : 5 }; //the bestial form discipline (contributed by rabidknave) PsionicsList["bestial form-ua-psy"] = { name : "Bestial Form", classes : ["mystic"], source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain advantage on Wisdom (Animal Handling) checks", descriptionFull : "You transform your body, gaining traits of different beasts." + PsychicFocus + "While focused on this discipline, you have advantage on Wisdom (Animal Handling) checks.", firstCol : "checkbox", dependencies : ["bf1-bestial claws", "bf2-bestial transformation", "bf3-bt - amphibious", "bf4-bt - climbing", "bf5-bt - flight", "bf6-bt - keen senses", "bf7-bt - perfect senses", "bf8-bt - swimming", "bf9-bt - tough hide"] }; PsionicsList["bf1-bestial claws"] = { name : "Bestial Claws", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "1 a", range : "5 ft", duration : "Instantaneous", description : "Melee weapon attack with manifested claw, dealing 1d10/PP Slashing dmg", descriptionFull : "You manifest long claws for an instant and make a melee weapon attack against one creature within 5 feet of you. On a hit, this attack deals 1d10 slashing damage per psi point spent.", firstCol : "1-7" }; PsionicsList["bf2-bestial transformation"] = { name : "Bestial Transformation", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", duration : "1 hr (D)", description : "Alter physique to gain one or more of following effects; sum PP cost for a single use; end with bns a", descriptionFull : "As a bonus action, you alter your physical form to gain different characteristics. When you use this ability, you can choose one or more of the following effects. Each effect has its own psi point cost. Add them together to determine the total cost. This transformation lasts for 1 hour, until you die, or until you end it as a bonus action.", firstCol : "2-7" }; PsionicsList["bf3-bt - amphibious"] = { name : " - Amphibious", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "", range : "Self", duration : "1 hr (D)", description : "I'm able to breathe air and water by gaining gills", descriptionFull : "You gain gills; you can breathe air and water", firstCol : 2 }; PsionicsList["bf4-bt - climbing"] = { name : " - Climbing", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "", range : "Self", duration : "1 hr (D)", description : "I gain climbing speed equal to my walking speed by growing tiny hooked claws", descriptionFull : "You grow tiny hooked claws that give you gain a climbing speed equal to your walking speed.", firstCol : 2 }; PsionicsList["bf5-bt - flight"] = { name : " - Flight", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "", range : "Self", duration : "1 hr (D)", description : "I gain flying speed equal to my walking speed by sprouting wings", descriptionFull : "Wings sprout from your back. You gain a flying speed equal to your walking speed.", firstCol : 5 }; PsionicsList["bf6-bt - keen senses"] = { name : " - Keen Senses", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "", range : "Self", duration : "1 hr (D)", description : "I gain advantage on Wisdom (Perception) checks through more sensitive eyes and ears", descriptionFull : "Your eyes and ears become more sensitive. You gain advantage on Wisdom (Perception) checks.", firstCol : 2 }; PsionicsList["bf7-bt - perfect senses"] = { name : " - Perfect Senses", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "", range : "Self", duration : "1 hr (D)", description : "I see invisible creatures/objects within 10 ft, even when blinded, through smell", descriptionFull : "You gain a keen sense of smell and an instinct to detect prey. You can see invisible creatures and objects within 10 feet of you, even if you are blinded.", firstCol : 3 }; PsionicsList["bf8-bt - swimming"] = { name : " - Swimming", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "", range : "Self", duration : "1 hr (D)", description : "I gain swimming speed equal to my walking speed by growing fins and webbed feet/hands", descriptionFull : "You gain fins and webbing between your fingers and toes; you gain a swimming speed equal to your walking speed.", firstCol : 2 }; PsionicsList["bf9-bt - tough hide"] = { name : " - Tough Hide", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "", range : "Self", duration : "1 hr (D)", description : "I gain +2 bonus to AC through thicker skin", descriptionFull : "Your skin becomes as tough as leather; you gain a +2 bonus to AC.", firstCol : 2 }; //the brute force discipline (contributed by rabidknave) PsionicsList["brute force-ua-psy"] = { name : "Brute Force", classes : ["mystic"], source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain advantage on Strength (Athletics) checks", descriptionFull : "You augment your natural strength with psionic energy, granting you the ability to achieve incredible feats of might." + PsychicFocus + "While focused on this discipline, you have advantage on Strength (Athletics) checks.", firstCol : "checkbox", dependencies : ["bf1-brute strike", "bf2-knock back", "bf3-mighty leap", "bf4-feat of strength"] }; PsionicsList["bf1-brute strike"] = { name : "Brute Strike", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", duration : "This turn end", description : "My next melee attack during this turn deals +1d6/PP damage, of the same type as the melee attack", descriptionFull : "As a bonus action, you gain a bonus to your next damage roll against a target you hit with a melee attack during the current turn. The bonus equals +1d6 per psi point spent, and the bonus damage is the same type as the attack. If the attack has more than one damage type, you choose which one to use for the bonus damage.", firstCol : "1-7" }; PsionicsList["bf2-knock back"] = { name : "Knock Back", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "1 rea", timeFull : "1 reaction, which you take when you hit a target with a melee attack", range : "Self", duration : "Instantaneous", save : "Str", description : "Use after melee atk hit; crea hit save or move 10 ft/PP away; if it then hits obj, 1d6/PP Bludg. dmg", //added the damage descriptionFull : "When you hit a target with a melee attack, you can activate this ability as a reaction. The target must succeed on a Strength saving throw or be knocked 10 feet away from you per psi point spent. The target moves in a straight line. If it hits an object, this movement immediately ends and the target takes 1d6 bludgeoning damage per psi point spent.", firstCol : "1-7" }; PsionicsList["bf3-mighty leap"] = { name : "Mighty Leap", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "Move", range : "Self", duration : "Instantaneous", description : "As part of my movement, jump 20 ft/PP in any direction", descriptionFull : "As part of your movement, you jump in any direction up to 20 feet per psi point spent.", firstCol : "1-7" }; PsionicsList["bf4-feat of strength"] = { name : "Feat of Strength", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", duration : "Next turn end", description : "I gain +5 bonus to Strength checks until the end of next turn", descriptionFull : "As a bonus action, you gain a +5 bonus to Strength checks until the end of your next turn.", firstCol : 2 }; //the celerity discipline (contributed by rabidknave) PsionicsList["celerity-ua-psy"] = { name : "Celerity", classes : ["mystic"], source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "My walking speed increases by 10 ft", descriptionFull : "You channel psionic power into your body, honing your reflexes and agility to an incredible degree. The world seems to slow down while you continue to move as normal." + PsychicFocus + "While focused on this discipline, your walking speed increases by 10 feet.", firstCol : "checkbox", dependencies : ["c1-rapid step", "c2-agile defense", "c3-blur of motion", "c4-surge of speed", "c5-surge of action"] }; PsionicsList["c1-rapid step"] = { name : "Rapid Step", source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", duration : "This turn end", description : "My walking, swim, and climb speeds increases by 10 ft/PP; doesn't grant new movement modes", descriptionFull : "As a bonus action, you increase your walking speed by 10 feet per psi point spent until the end of the current turn. If you have a climbing or swimming speed, this increase applies to that speed as well.", firstCol : "1-7" }; PsionicsList["c2-agile defense"] = { name : "Agile Defense", source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", duration : "Instantaneous", description : "I can take the Dodge action now, as part of using this power", descriptionFull : "As a bonus action, you take the Dodge action.", firstCol : 2 }; PsionicsList["c3-blur of motion"] = { name : "Blur of Motion", source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Immor", time : "1 a", range : "Self", duration : "This turn end", description : "I'm invisible while moving during the current turn", descriptionFull : "As an action, you cause yourself to be invisible during any of your movement during the current turn.", firstCol : 2 }; PsionicsList["c4-surge of speed"] = { name : "Surge of Speed", source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", duration : "This turn end", description : "I don't provoke opportunity attacks and gain a climbing speed equal to my walking speed", descriptionFull : "As a bonus action, you gain two benefits until the end of the current turn: you don't provoke opportunity attacks, and you have a climbing speed equal to your walking speed.", firstCol : 2 }; PsionicsList["c5-surge of action"] = { name : "Surge of Action", source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", duration : "Instantaneous", description : "I can take either the Dash action or make one weapon attack now, as part of using this power", descriptionFull : "As a bonus action, you can Dash or make one weapon attack.", firstCol : 5 }; //the corrosive metabolism discipline (contributed by rabidknave) PsionicsList["corrosive metabolism-ua-psy"] = { name : "Corrosive Metabolism", classes : ["mystic"], source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain resistance to Acid and Poison damage", descriptionFull : "Your control over your body allows you to deliver acid or poison attacks." + PsychicFocus + "While focused on this discipline, you have resistance to acid and poison damage.", firstCol : "checkbox", dependencies : ["cm1-corrosive touch", "cm2-venom strike", "cm3-acid spray", "cm4-breath of the black dragon", "cm5-breath of the green dragon"] }; PsionicsList["cm1-corrosive touch"] = { name : "Corrosive Touch", source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Immor", time : "1 a", range : "Touch", //use "Touch" instead of "5 ft" when its about reach duration : "Instantaneous", save : "Dex", description : "1 crea 1d10/PP Acid damage; save halves", // use "; save halves" for this kind of situations descriptionFull : "As an action, you deliver a touch of acid to one creature within your reach. The target must make a Dexterity saving throw, taking 1d10 acid damage per psi point spent on a failed save, or half as much damage on a successful one.", firstCol : "1-7" }; PsionicsList["cm2-venom strike"] = { name : "Venom Strike", source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Immor", time : "1 a", range : "30 ft", duration : "Instantaneous", save : "Con", description : "1 crea 1d6/PP Poison damage; save halves; if save failed, poisoned until end of my next turn", descriptionFull : "As an action, you create a poison spray that targets one creature you can see within 30 feet of you. The target must make a Constitution saving throw. On a failed save, it takes 1d6 poison damage per psi point spent and is poisoned until the end of your next turn. On a successful save, the target takes half as much damage and isn't poisoned.", firstCol : "1-7" }; PsionicsList["cm3-acid spray"] = { name : "Acid Spray", source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Immor", time : "1 rea", timeFull : "1 reaction, which you take when you take piercing or slashing damage", range : "5 ft", duration : "Instantaneous", description : "Use after I take Piercing or Slashing damage; all creatures in range take 2d6 Acid damage", descriptionFull : "As a reaction when you take piercing or slashing damage, you cause acid to spray from your wound; each creature within 5 feet of you takes 2d6 acid damage.", firstCol : 2 }; PsionicsList["cm4-breath of the black dragon"] = { name : "Breath of the Black Dragon", nameShort : "Breath o/t Black Dragon", source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Immor", time : "1 a", range : "60-ft line", duration : "Instantaneous", save : "Con", description : "60-ft long 5-ft wide line all creatures 6d6(+1d6/extra PP) Acid dmg; save halves", descriptionFull : "You exhale a wave of acid in a 60-foot line that is 5 feet wide. Each creature in the line must make a Constitution saving throw, taking 6d6 acid damage on a failed save, or half as much on a successful one. You can increase the damage by 1d6 per additional psi point spent on it.", firstCol : "5-7" }; PsionicsList["cm5-breath of the green dragon"] = { name : "Breath of the Green Dragon", nameShort : "Breath o/t Green Dragon", source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Immor", time : "1 a", range : "90-ft cone", duration : "Instantaneous", save : "Con", description : "All creatures 10d6 poison damage; save halves", descriptionFull : "You exhale a cloud of poison in a 90-foot cone. Each creature in the line must make a Constitution saving throw, taking 10d6 poison damage on a failed save, or half as much damage on a successful one.", firstCol : 7 }; //the crown of despair discipline (contributed by rabidknave) PsionicsList["crown of despair-ua-psy"] = { name : "Crown of Despair", classes : ["mystic"], source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "5-ft rad", components : "Psi-F.", duration : "While focused", description : "I gain advantage on Charisma (Intimidation) checks", descriptionFull : "You have learned to harvest seeds of despair in a creature's psyche, wracking it with self-doubt and inaction." + PsychicFocus + "While focused on this discipline, you have advantage on Charisma (Intimidation) checks.", firstCol : "checkbox", dependencies : ["cd1-crowned in sorrow", "cd2-call to inaction", "cd3-visions of despair", "cd4-dolorous mind"] }; PsionicsList["cd1-crowned in sorrow"] = { name : "Crowned in Sorrow", source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "Next turn start", save : "Cha", description : "1 crea 1d8/PP Psychic dmg and can't take reactions; save halves damage and normal reactions", descriptionFull : "As an action, one creature you can see within 60 feet of you must make a Charisma saving throw. On a failed save, it takes 1d8 psychic damage per psi point spent, and it can't take reactions until the start of its next turn. On a successful save, it takes half as much damage.", firstCol : "1-7" }; PsionicsList["cd2-call to inaction"] = { name : "Call to Inaction", source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Avatar", time : "1 min", range : "Self", duration : "Conc, 10 min", save : "Wis", description : "After 1 min conversation, 1 crea save or incapacitated; ends if it or its ally is attacked (charm effect)", descriptionFull : "If you spend 1 minute conversing with a creature, you can attempt to seed it with overwhelming ennui. At the end of the minute, you can use an action to force the creature to make a Wisdom saving throw. The save automatically succeeds if the target is immune to being charmed. On a failed save, it sits and is incapacitated until your concentration ends. This effect immediately ends if the target or any ally it can see is attacked or takes damage. On a successful save, the creature is unaffected and has no inkling of your attempt to bend its will.", firstCol : 2 }; PsionicsList["cd3-visions of despair"] = { name : "Visions of Despair", source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "1 rnd", save : "Cha", description : "1 crea 3d6(+1d6/extra PP) Psychic dmg and speed reduced to 0; save halves and no speed reduction", descriptionFull : "As an action, you force one creature you can see within 60 feet of you to make a Charisma saving throw. On a failed save, it takes 3d6 psychic damage, and its speed is reduced to 0 until the end of its next turn. On a successful save, it takes half as much damage. You can increase the damage by 1d6 per additional psi point spent on it.", firstCol : "3-7" }; PsionicsList["cd4-dolorous mind"] = { name : "Dolorous Mind", source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "Conc, 1 min", save : "Cha", description : "1 crea save or incapacitated and speed 0; save at end of each turn", descriptionFull : "As an action, you choose one creature you can see within 60 feet of you. It must succeed on a Charisma saving throw, or it is incapacitated and has a speed of 0 until your concentration ends. It can repeat this saving throw at the end of each of its turns, ending the effect on itself on a success.", firstCol : 5 }; //the crown of disgust discipline PsionicsList["crown of disgust-ua-psy"] = { name : "Crown of Disgust", classes : ["mystic"], source : [["UA:TMC", 13]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "5-ft rad", components : "Psi-F.", duration : "While focused", description : "5-ft rad around me is difficult terrain for creatures that aren't immune to being frightened", descriptionFull : "You cause a creature to be flooded with emotions of disgust." + PsychicFocus + "While you are focused on this discipline, the area in a 5-foot radius around you is difficult terrain for any enemy that isn't immune to being frightened.", firstCol : "checkbox", dependencies : ["cd1-eye of horror", "cd2-wall of repulsion", "cd3-visions of disgust", "cd4-world of horror"] }; PsionicsList["cd1-eye of horror"] = { name : "Eye of Horror", source : [["UA:TMC", 13]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "Next turn end", save : "Cha", description : "1 crea save or 1d6/PP Psychic damage and can't move closer; save halves and no movement restriction", descriptionFull : "As an action, choose one creature you can see within 60 feet of you. The target must make a Charisma saving throw. On a failed save, it takes 1d6 psychic damage per psi point spent and can't move closer to you until the end of its next turn. On a successful save, it takes half as much damage.", firstCol : "1-7" }; PsionicsList["cd2-wall of repulsion"] = { name : "Wall of Repulsion", source : [["UA:TMC", 13]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "Conc, 10 min", save : "Wis", description : "Up to 30\xD71\xD710 ft (l\xD7w\xD7h) invisible wall of energy; save to move through it, even for unwilling move", description : "Up to 9\xD70,3\xD73 m (l\xD7w\xD7h) invisible wall of energy; save to move through it, even for unwilling move", descriptionFull : "As an action, you create an invisible, insubstantial wall of energy within 60 feet of you that is up to 30 feet long, 10 feet high, and 1 foot thick. The wall lasts until your concentration ends. Any creature attempting to move through it must make a Wisdom saving throw. On a failed save, a creature can't move through the wall until the start of its next turn. On a successful save, the creature can pass through it. A creature must make this save whenever it attempts to pass through the wall, whether willingly or unwillingly.", firstCol : 3 }; PsionicsList["cd3-visions of disgust"] = { name : "Visions of Disgust", source : [["UA:TMC", 13]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "Conc, 1 min", save : "Wis", description : "1 crea save or 5d6 Psychic dmg (half on save) & 1d6 Psychic dmg per crea within 5 ft at its turn end", descriptionFull : "You cause a creature to regard all other beings as horrid, alien entities. As an action, choose one creature you can see within 60 feet of you. The target must make a Wisdom saving throw. On a failed save, it takes 5d6 psychic damage, and until your concentration ends, it takes 1d6 psychic damage per creature within 5 feet of it at the end of each of its turns. On a successful save, the target takes only half the initial damage and suffers none of the other effects.", firstCol : 5 }; PsionicsList["cd4-world of horror"] = { name : "World of Horror", source : [["UA:TMC", 13]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "Conc, 1 min", save : "Cha", description : "6 crea 8d6 Psychic dmg, frightened, \u0026 do only melee atks; save halves, no other effects; save each rnd", descriptionFull : "As an action, choose up to six creatures within 60 feet of you. Each target must make a Charisma saving throw. On a failed save, a target takes 8d6 psychic damage, and it is frightened until your concentration ends. On a successful save, a target takes half as much damage." + "\n " + "While frightened by this effect, a target's speed is reduced to 0, and the target can use its action, and any bonus action it might have, only to make melee attacks. The frightened target can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success.", firstCol : 7 }; //the crown of rage discipline PsionicsList["crown of rage-ua-psy"] = { name : "Crown of Rage", classes : ["mystic"], source : [["UA:TMC", 13]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "5-ft rad", components : "Psi-F.", duration : "While focused", description : "Any crea within range has disadvantage on melee attack rolls against targets other than me", descriptionFull : "You place a mote of pure fury within a creature's mind, causing its bloodlust to overcome its senses and for it to act as you wish it to." + PsychicFocus + "While you are focused on this discipline, any enemy within 5 feet of you that makes a melee attack roll against creatures other than you does so with disadvantage.", firstCol : "checkbox", dependencies : ["cr1-primal fury", "cr2-fighting words", "cr3-mindless courage", "cr4-punishing fury"] }; PsionicsList["cr1-primal fury"] = { name : "Primal Fury", source : [["UA:TMC", 13]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "Instantaneous", save : "Cha", description : "1 crea save or 1d6/PP Psychic dmg, use rea to move its speed toward nearest enemy (charm effect)", descriptionFull : "As an action, choose one creature you can see within 60 feet of you. The target must succeed on a Charisma saving throw or take 1d6 psychic damage per psi point spent on this ability and immediately use its reaction to move its speed in a straight line toward its nearest enemy. The save automatically succeeds if the target is immune to being charmed.", firstCol : "1-7" }; PsionicsList["cr2-fighting words"] = { name : "Fighting Words", source : [["UA:TMC", 13]], psionic : true, level : 1, school : "Avatar", time : "1 min", range : "Self", duration : "Conc, 10 min", save : "Wis", description : "After 1 min conversation, 1 crea save or attack one other, chosen crea for 5 rnds (charm effect)", descriptionFull : "If you spend 1 minute conversing with a creature, you can attempt to leave a simmering violence in its mind. At the end of the minute, you can use an action to force the creature to make a Wisdom saving throw to resist feeling violent urges against one creature you describe to it or name. The save automatically succeeds if the target is immune to being charmed. On a failed save, the target attacks the chosen creature if it sees that creature before your concentration ends, using weapons or spells against a creature it was already hostile toward or unarmed strikes against an ally or a creature it was neutral toward. Once the fight starts, it continues to attack for 5 rounds before this effect ends. This effect immediately ends if the target or any ally it can see is attacked or takes damage from any creature other than the one it has been incited against. On a successful save, the creature is unaffected and has no inkling of your attempt to bend its will.", firstCol : 2 }; PsionicsList["cr3-mindless courage"] = { name : "Mindless Courage", source : [["UA:TMC", 13]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "60 ft", duration : "Next turn end", save : "Wis", description : "1 crea save or it can only move towards the nearest enemy it can see, or not move at all (charm effect)", descriptionFull : "You cause a creature's bloodlust to overcome its sense of preservation. As a bonus action, choose one creature you can see within 60 feet of you. The target must succeed on a Wisdom saving throw or, until the end of your next turn, it can't willingly move unless its movement brings it closer to its nearest enemy that it can see. The save automatically succeeds if the target is immune to being charmed.", firstCol : 2 }; PsionicsList["cr4-punishing fury"] = { name : "Punishing Fury", source : [["UA:TMC", 14]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "60 ft", duration : "Conc, 1 min", save : "Wis", description : "1 crea save or when it makes melee atk, all in 5 ft of it can make melee atk vs. it as rea (charm effect)", descriptionFull : "You cause a creature's rage to grow so hot that it attacks without heeding its own safety. As a bonus action, choose one creature you can see within 60 feet of you. The target must succeed on a Wisdom saving throw or, until your concentration ends, any creature within 5 feet of it can use a reaction to make a melee attack against it whenever the target makes a melee attack. The save automatically succeeds if the target is immune to being charmed.", firstCol : 5 }; //the diminution discipline (contributed by mattohara & TheBob427) PsionicsList["diminution-ua-psy"] = { name : "Diminution", classes : ["mystic"], source : [["UA:TMC", 14]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I have advantage on Dexterity (Stealth) checks", descriptionFull : "You manipulate the matter that composes your body, drastically reducing your size without surrendering any of your might." + PsychicFocus + "While focused on this discipline, you have advantage on Dexterity (Stealth) checks.", firstCol : "checkbox", dependencies : ["d1-miniature form", "d2-toppling shift", "d3-sudden shift", "d4-microscopic form"] }; PsionicsList["d1-miniature form"] = { name : "Miniature Form", source : [["UA:TMC", 14]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", duration : "Conc, 10 min", description : 'Become Tiny, gain +5 to Dex (Stealth) and can fit through gaps of up to 6" without squeezing', descriptionMetric : "Become Tiny, gain +5 to Dex (Stealth) and can fit through gaps of up to 15 cm without squeezing", descriptionFull : "As a bonus action, you become Tiny until your concentration ends. While this size, you gain a +5 bonus to Dexterity (Stealth) checks and can move through gaps up to 6 inches across without squeezing.", firstCol : 2 }; PsionicsList["d2-toppling shift"] = { name : "Toppling Shift", source : [["UA:TMC", 14]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "5 ft", duration : "Instantaneous", save : "Str", description : "1 creature save or be knocked prone", descriptionFull : "As a bonus action, you shift to an incredibly small size and then suddenly return to normal, sending an opponent flying backward. Choose one creature you can see within 5 feet of you. It must succeed on a Strength saving throw or be knocked prone.", firstCol : 2 }; PsionicsList["d3-sudden shift"] = { name : "Sudden Shift", source : [["UA:TMC", 14]], psionic : true, level : 1, school : "Immor", time : "1 rea", timeFull : "1 reaction, which you take when are hit by an attack", range : "Self", duration : "Instantaneous", description : "Use when hit by an attack; it misses, and I move up to 5 ft without provoking opportunity attacks", descriptionFull : "As a reaction when you are hit by an attack, you shift down to minute size to avoid the attack. The attack misses, and you move up to 5 feet without provoking opportunity attacks before returning to normal size.", firstCol : 5 }; PsionicsList["d4-microscopic form"] = { name : "Microscopic Form", source : [["UA:TMC", 14]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", duration : "Conc, 10 min", description : "Become diminutive, gain +5 AC, +10 to Dex (Stealth), can fit through 1\" gaps, but can't use wea atks", descriptionMetric : "Become diminutive, gain +5 AC, +10 to Dex (Stealth), can fit through 2,5 cm gaps, can't use wea atks", descriptionFull : "As a bonus action, you become smaller than Tiny until your concentration ends. While this size, you gain a +10 bonus to Dexterity (Stealth) checks and a +5 bonus to AC, you can move through gaps up to 1 inch across without squeezing, and you can't make weapon attacks.", firstCol : 7 }; //the giant growth discipline (contributed by mattohara & TheBob427) PsionicsList["giant growth-ua-psy"] = { name : "Giant Growth", classes : ["mystic"], source : [["UA:TMC", 14]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Touch", components : "Psi-F.", duration : "While focused", description : "My reach increases by 5 ft", descriptionFull : "You infuse yourself with psionic energy to grow to tremendous size, bolstering your strength and durability." + PsychicFocus + "While focused on this discipline, your reach increases by 5 feet.", firstCol : "checkbox", dependencies : ["gg1-ogre form", "gg2-giant form"] }; PsionicsList["gg1-ogre form"] = { name : "Ogre Form", source : [["UA:TMC", 14]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", duration : "Conc, 1 min", description : "10 temp. HP; for duration: become Large, +5 ft reach, melee attacks deal +1d4 Bludgeoning dmg", descriptionFull : "As a bonus action, you gain 10 temporary hit points. In addition, until your concentration ends, your melee weapon attacks deal an extra 1d4 bludgeoning damage on a hit, and your reach increases by 5 feet. If you're smaller than Large, you also become Large for the duration.", firstCol : 2 }; PsionicsList["gg2-giant form"] = { name : "Giant Form", source : [["UA:TMC", 14]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", duration : "Conc, 1 min", description : "30 temp. HP; for duration: become Huge, +10 ft reach, melee attacks deal +2d6 Bludgeoning dmg", descriptionFull : "As a bonus action, you gain 30 temporary hit points. In addition, until your concentration ends, your melee weapon attacks deal an extra 2d6 bludgeoning damage on a hit, and your reach increases by 10 feet. If you're smaller than Huge, you also become Huge for the duration.", firstCol : 7 }; //the intellect fortress discipline (contributed by TheBob427) PsionicsList["intellect fortress-ua-psy"] = { name : "Intellect Fortress", classes : ["mystic"], source : [["UA:TMC", 14]], psionic : true, level : 1, school : "Awake", time : "1 bns", range : "Self", components : "Psi-F", duration : "While focused", description : "I gain resistance to Psychic damage", descriptionFull : "You forge an indomitable wall of psionic energy around your mind-one that allows you to launch counterattacks against your opponents." + PsychicFocus + "While focused on this discipline, you have resistance to psychic damage.", firstCol : "checkbox", dependencies : ["if1-psychic backlash", "if2-psychic parry", "if3-psychic redoubt"] }; PsionicsList["if1-psychic backlash"] = { name : "Psychic Backlash", source : [["UA:TMC", 14]], psionic : true, level : 1, school : "Awake", time : "1 rea", range : "Sight", duration : "Instantaneous", description : "I impose dis. on an attack roll vs. me; if I'm hit anyway, the attacker takes 2d10 Psychic damage", descriptionFull : "As a reaction, you can impose disadvantage on an attack roll against you if you can see the attacker. If the attack still hits you, the attacker takes 2d10 psychic damage.", firstCol : 2 }; PsionicsList["if2-psychic parry"] = { name : "Psychic Parry", source : [["UA:TMC", 14]], psionic : true, level : 1, school : "Awake", time : "1 rea", timeFull : "1 reaction, which you take when you make an Intelligence, a Wisdom, or a Charisma saving throw", range : "Self", duration : "Instantaneous", description : "Add +1/PP to the result of an Int, Wis, or Cha save; use after rolling, but before knowing if successful", descriptionFull : "As a reaction when you make an Intelligence, a Wisdom, or a Charisma saving throw, you gain a +1 bonus to that saving throw for each psi point you spend on this ability. You can use this ability after rolling the die but before suffering the results.", firstCol : "1-7" }; PsionicsList["if3-psychic redoubt"] = { name : "Psychic Redoubt", source : [["UA:TMC", 14]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "30 ft", duration : "Conc, 10 min", description : "Any creatures in range gain resistance to Psychic damage and advantage on Int, Wis, and Cha saves", descriptionFull : "As an action, you create a field of protective psychic energy. Choose any number of creatures within 30 feet of you. Until your concentration ends, each target has resistance to psychic damage and advantage on Intelligence, Wisdom, and Charisma saving throws.", firstCol : 5 }; //the iron durability discipline (contributed by mattohara) PsionicsList["iron durability-ua-psy"] = { name : "Iron Durability", classes : ["mystic"], source : [["UA:TMC", 15]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain a +1 bonus to AC", descriptionFull : "You transform your body to become a living metal, allowing you to shrug off attacks that would cripple weaker creatures." + PsychicFocus + "While focused on this discipline, you gain a +1 bonus to AC.", firstCol : "checkbox", dependencies : ["id1-iron hide", "id2-steel hide", "id3-iron resistance"] }; PsionicsList["id1-iron hide"] = { name : "Iron Hide", source : [["UA:TMC", 15]], psionic : true, level : 1, school : "Immor", time : "1 rea", timeFull : "1 reaction, which you take when you are hit by an attack", range : "Self", duration : "Next turn end", description : "I gain +1/PP AC; use when hit by attack; bonus works against triggering attack", descriptionFull : "As a reaction when you are hit by an attack, you gain a +1 bonus to AC for each psi point you spend on this ability. The bonus lasts until the end of your next turn. This bonus applies against the triggering attack.", firstCol : "1-7" }; PsionicsList["id2-steel hide"] = { name : "Steel Hide", source : [["UA:TMC", 15]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", duration : "Next turn end", description : "I gain resistance to Bludgeoning, Piercing, and Slashing damage", descriptionFull : "As a bonus action, you gain resistance to bludgeoning, piercing, and slashing damage until the end of your next turn.", firstCol : 2 }; PsionicsList["id3-iron resistance"] = { name : "Iron Resistance", source : [["UA:TMC", 15]], psionic : true, level : 1, school : "Immor", time : "1 a", range : "Self", duration : "Conc, 1 h", description : "I gain resistance to bludgeoning, piercing, or slashing (my choice)", descriptionFull : "As an action, you gain resistance to bludgeoning, piercing, or slashing damage (your choice), which lasts until your concentration ends.", firstCol : 7 }; //the mantle of awe discipline (contributed by mattohara) PsionicsList["mantle of awe-ua-psy"] = { name : "Mantle of Awe", classes : ["mystic"], source : [["UA:TMC", 15]], psionic : true, level : 1, school : "Awake", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain a bonus to Charisma checks, bonus equals half my Intelligence modifier (min 1)", descriptionFull : "You learn to use psionic energy to manipulate others with a subtle combination of psi and your own, natural charm." + PsychicFocus + "While focused on this discipline, you gain a bonus to Charisma checks. The bonus equals half your Intelligence modifier (minimum of +1).", firstCol : "checkbox", dependencies : ["moa1-charming presence", "moa2-center of attention", "moa3-invoke awe"] }; PsionicsList["moa1-charming presence"] = { name : "Charming Presence", source : [["UA:TMC", 15]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "30 ft", duration : "10 min", description : "2d8/PP HP of conscious, not in combat, not immune to charm crea charmed; use HP max, not current", descriptionFull : "As an action, you exert an aura of sympathetic power. Roll 2d8 per psi point spent on this ability; the total is how many hit points worth of creatures this option can affect. Creatures within 30 feet of you are affected in ascending order of their hit point maximums, ignoring incapacitated creatures, creatures immune to being charmed, and creatures engaged in combat." + "\n " + "Starting with the creature that has the lowest hit point maximum, each creature affected by this option is charmed by you for 10 minutes, regarding you as a friendly acquaintance. Subtract each creature's hit point maximum from the total before moving on to the next creature. A creature's hit point maximum must be equal to or less than the remaining total for that creature to be affected.", firstCol : "1-7" }; PsionicsList["moa2-center of attention"] = { name : "Center of Attention", source : [["UA:TMC", 15]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Conc, 1 min", save : "Cha", description : "1 crea save or all other creatures are invisible to it; ends if it leaves my sight/earshot or takes dmg", descriptionFull : "As an action, you exert an aura of power that grabs a creature's attention. Choose one creature you can see within 60 feet of you. It must make a Charisma saving throw. On a failed save, the creature is so thoroughly distracted by you that all other creatures are invisible to it until your concentration ends. This effect ends if the creature can no longer see or hear you or if it takes damage.", firstCol : 2 }; PsionicsList["moa3-invoke awe"] = { name : "Invoke Awe", source : [["UA:TMC", 15]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Conc, 10 min", save : "Int", description : "5 crea save or charmed, obey verbal commands; no self harm; will atk crea that atk me; save each rnd", descriptionFull : "As an action, you exert an aura that inspires awe in others. Choose up to 5 creatures you can see within 60 feet of you. Each target must succeed on an Intelligence saving throw or be charmed by you until your concentration ends. While charmed, the target obeys all your verbal commands to the best of its ability and without doing anything obviously self-destructive. The charmed target will attack only creatures that it has seen attack you since it was charmed or that it was already hostile toward. At the end of each of its turns, it can repeat the saving throw, ending the effect on itself on a success.", firstCol : 7 }; //the mantle of command discipline PsionicsList["mantle of command-ua-psy"] = { name : "Mantle of Command", classes : ["mystic"], source : [["UA:TMC", 15]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "When ending a turn I didn't move in, use my rea to have 1 ally within 30 ft move half its speed", descriptionFull : "You exert an aura of trust and authority, enhancing the coordination among your allies." + PsychicFocus + "While focused on this discipline, when you end your turn and didn't move during it, you can use your reaction to allow one ally you can see within 30 feet of you to move up to half their speed, following a path of your choice. To move in this way, the ally mustn't be incapacitated.", firstCol : "checkbox", dependencies : ["mc1-coordinated movement", "mc2-commander's sight", "mc3-command to strike", "mc4-strategic mind", "mc5-overwhelming attack"] }; PsionicsList["mc1-coordinated movement"] = { name : "Coordinated Movement", source : [["UA:TMC", 15]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "60 ft", duration : "Instantaneous", description : "Up to 5 allies I can see can use their reaction to move half their speed, following a path I choose", descriptionFull : "As a bonus action, choose up to five allies you can see within 60 feet of you. Each of those allies can use their reaction to move up to half their speed, following a path of your choice.", firstCol : 2 }; PsionicsList["mc2-commander's sight"] = { name : "Commander's Sight", source : [["UA:TMC", 15]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "Conc, 1 rnd", description : "I mark 1 crea; until the start of my next turn, my allies have adv. on attacks vs. it", descriptionFull : "As an action, choose one creature you can see within 60 feet of you. Until the start of your next turn, your allies have advantage on attack rolls against that target.", firstCol : 2 }; PsionicsList["mc3-command to strike"] = { name : "Command to Strike", source : [["UA:TMC", 15]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "Instantaneous", description : "1 ally I can see can use their reaction to take the Attack action, with me choosing the targets", descriptionFull : "As an action, choose one ally you can see within 60 feet of you. That ally can use their reaction to immediately take the Attack action. You choose the targets.", firstCol : 3 }; PsionicsList["mc4-strategic mind"] = { name : "Strategic Mind", source : [["UA:TMC", 15]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "Conc, 1 min", description : "1 ally can, on its turn, either add 1d4 to its attack rolls or take Dash or Disengage as a bonus action", descriptionFull : "As an action, you exert an aura of trust and command that unites your allies into a cohesive unit. Until your concentration ends, any ally within 60 feet of you on their turn can, as a bonus action, take the Dash or Disengage action or roll a d4 and add the number rolled to each attack roll they make that turn.", firstCol : 5 }; PsionicsList["mc5-overwhelming attack"] = { name : "Overwhelming Attack", source : [["UA:TMC", 15]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "Instantaneous", description : "Up to 5 allies I see can use their reactions to take the Attack action, with me choosing the targets", descriptionFull : "As an action, choose up to five allies you can see within 60 feet of you. Each of those allies can use their reaction to take the Attack action. You choose the targets of the attacks.", firstCol : 7 }; //the mantle of courage discipline PsionicsList["mantle of courage-ua-psy"] = { name : "Mantle of Courage", classes : ["mystic"], source : [["UA:TMC", 16]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "My and allies within 10 ft that can see me have advantage on saves vs. being frightened", descriptionFull : "You focus your mind on courage, radiating confidence and bravado to your allies." + PsychicFocus + "While focused on this discipline, you and allies within 10 feet of you who can see you have advantage on saving throws against being frightened.", firstCol : "checkbox", dependencies : ["mc1-incite courage", "mc2-aura of victory", "mc3-pillar of confidence"] }; PsionicsList["mc1-incite courage"] = { name : "Incite Courage", source : [["UA:TMC", 16]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "60 ft", duration : "Instantaneous", description : "Up to 6 creatures are no longer frightened", descriptionFull : "As a bonus action, choose up to six creatures you can see within 60 feet of you. If any of those creatures is frightened, that condition ends on that creature.", firstCol : 2 }; PsionicsList["mc2-aura of victory"] = { name : "Aura of Victory", source : [["UA:TMC", 16]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "30 ft", duration : "Conc, 10 min", description : "When an enemy I can see is reduced to 0 HP, me and allies within range gain 2/PP temporary HP", descriptionFull : "As a bonus action, you project psionic energy until your concentration ends. The energy fortifies you and your allies when your enemies are felled; whenever an enemy you can see is reduced to 0 hit points, you and each of your allies within 30 feet of you gain temporary hit points equal to double the psi points spent to activate this effect.", firstCol : "1-7" }; PsionicsList["mc3-pillar of confidence"] = { name : "Pillar of Confidence", source : [["UA:TMC", 16]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "Next turn end", description : "Me \u0026 up to 5 crea gain, on their turn, a special action to either make 1 wea atk, Dash, or Disengage", descriptionFull : "As an action, you and up to five creatures you can see within 60 feet of you each gain one extra action to use on their individual turns. The action goes away if not used before the end of your next turn. the action can be used only to make one weapon attack or to take the Dash or Disengage action.", firstCol : 6 }; //the mantle of fear discipline PsionicsList["mantle of fear-ua-psy"] = { name : "Mantle of Fear", classes : ["mystic"], source : [["UA:TMC", 16]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain advantage on Charisma (Intimidation) checks", descriptionFull : "You tap into a well of primal fear and turn yourself into a beacon of terror to your enemies." + PsychicFocus + "While focused on this discipline, you have advantage on Charisma (Intimidation) checks.", firstCol : "checkbox", dependencies : ["mf1-incite fear", "mf2-unsettling aura", "mf3-incite panic"] }; PsionicsList["mf1-incite fear"] = { name : "Incite Fear", source : [["UA:TMC", 16]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "Conc, 1 min", save : "Wis", description : "1 crea save or be frightened of me; repeat save each turn when out of line of sight", descriptionFull : "As an action, choose one creature you can see within 60 feet of you. The target must succeed on a Wisdom saving throw or become frightened of you until your concentration ends. Whenever the frightened target ends its turn in a location where it can't see you, it can repeat the saving throw, ending the effect on itself on a success.", firstCol : 2 }; PsionicsList["mf2-unsettling aura"] = { name : "Unsettling Aura", source : [["UA:TMC", 16]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "60 ft", duration : "Conc, 1 h", description : "All crea in range that can see me move only half speed when moving towards me (frightening effect)", descriptionFull : "As a bonus action, you cloak yourself in unsettling psychic energy. Until your concentration ends, any enemy within 60 feet of you that can see you must spend 1 extra foot of movement for every foot it moves toward you. A creature ignores this effect if immune to being frightened.", firstCol : 3 }; PsionicsList["mf3-incite panic"] = { name : "Incite Panic", source : [["UA:TMC", 16]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "90 ft", duration : "Conc, 1 min", save : "Wis", description : "8 crea save each rnd or frightened and spend turn on random move or melee atk; 3 saves ends; see B", descriptionFull : "As an action, choose up to eight creatures you can see within 90 feet of you that can see you. At the start of each of a target's turns before your concentration ends, the target must make a Wisdom saving throw. On a failed save, the target is frightened until the start of its next turn, and you roll a die. If you roll an odd number, the frightened target moves half its speed in a random direction and takes no action on that turn, other than to scream in terror. If you roll an even number, the frightened target makes one melee attack against a random target within its reach. If there is no such target, it moves half its speed in a random direction and takes no action on that turn. This effect ends on a target if it succeeds on three saving throws against it.", firstCol : 5 }; //the mantle of fury discipline PsionicsList["mantle of fury-ua-psy"] = { name : "Mantle of Fury", classes : ["mystic"], source : [["UA:TMC", 16]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "Me and allies within 10 ft at start of my turn gain +5 ft walking speed for that turn", descriptionFull : "You allow the primal fury lurking deep within your mind to burst forth, catching you and your allies in an implacable bloodthirst." + PsychicFocus + "While focused on this discipline in combat, you and any ally who starts their turn within 10 feet of you gains a 5-foot increase to their walking speed during that turn.", firstCol : "checkbox", dependencies : ["mf1-incite fury", "mf2-mindless charge", "mf3-aura of bloodletting", "mf4-overwhelming fury"] }; PsionicsList["mf1-incite fury"] = { name : "Incite Fury", source : [["UA:TMC", 16]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "60 ft", duration : "Conc, 1 min", description : "3 creatures can add 1d4 to the damage of melee weapon attacks during the duration", descriptionFull : "As a bonus action, choose up to three allies you can see within 60 feet of you (you can choose yourself in place of one of the allies). Until your concentration ends, each target can roll a d4 when rolling damage for a melee weapon attack and add the number rolled to the damage roll.", firstCol : 2 }; PsionicsList["mf2-mindless charge"] = { name : "Mindless Charge", source : [["UA:TMC", 16]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "60 ft", duration : "Instantaneous", description : "3 creatures can use their reactions to move their speed straight towards the nearest enemy", descriptionFull : "As a bonus action, choose up to three creatures you can see within 60 feet of you. Each target can immediately use its reaction to move up to its speed in a straight line toward its nearest enemy.", firstCol : 2 }; PsionicsList["mf3-aura of bloodletting"] = { name : "Aura of Bloodletting", source : [["UA:TMC", 16]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "60 ft", duration : "Conc, 1 min", description : "Me and all creatures within range during the duration have advantage on melee attack rolls", descriptionFull : "As a bonus action, you unleash an aura of rage. Until your concentration ends, you and any creature within 60 feet of you has advantage on melee attack rolls.", firstCol : 3 }; PsionicsList["mf4-overwhelming fury"] = { name : "Overwhelming Fury", source : [["UA:TMC", 16]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "Conc, 1 min", save : "Cha", description : "1 creature save or it can use its actions only to make melee attacks; save at the end of each of its turns", descriptionFull : "As an action, you flood rage into one creature you can see within 60 feet of you. The target must succeed on a Charisma saving throw, or it can use its actions only to make melee attacks until your concentration ends. It can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success.", firstCol : 5 }; //the mantle of joy discipline PsionicsList["mantle of joy-ua-psy"] = { name : "Mantle of Joy", classes : ["mystic"], source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain advantage on Charisma (Persuasion) checks", descriptionFull : "You tap into the joy within you, radiating it outward in soothing, psychic energy that brings hope and comfort to creatures around you." + PsychicFocus + "While focused on this discipline, you have advantage on Charisma (Persuasion) checks.", firstCol : "checkbox", dependencies : ["mj1-soothing presence", "mj2-comforting aura", "mj3-aura of jubilation", "mj4-beacon of recovery"] }; PsionicsList["mj1-soothing presence"] = { name : "Soothing Presence", source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "60 ft", duration : "Instantaneous", description : "3 creatures gain 3/PP temporary hit points", descriptionFull : "As a bonus action, choose up to three creatures you can see within 60 feet of you. Each target gains 3 temporary hit points per psi point spent on this effect.", firstCol : "1-7" }; PsionicsList["mj2-comforting aura"] = { name : "Comforting Aura", source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "Sight", duration : "Conc, 1 min", description : "3 creatures can add 1d4 on every saving throw during the duration", descriptionFull : "As a bonus action, choose up to three allies you can see (you can choose yourself in place of one of the allies). Until your concentration ends, each target can roll a d4 when making a saving throw and add the number rolled to the total.", firstCol : 2 }; PsionicsList["mj3-aura of jubilation"] = { name : "Aura of Jubilation", source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "60 ft", duration : "Conc, 1 min", description : "All creatures within range that can see me have disadvantage on Perception and Investigation checks", descriptionFull : "As a bonus action, you radiate a distracting mirth until your concentration ends. Each creature within 60 feet of you that can see you suffers disadvantage on any checks using the Perception and Investigation skills.", firstCol : 3 }; PsionicsList["mj4-beacon of recovery"] = { name : "Beacon of Recovery", source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "60 ft", duration : "Instantaneous", description : "Me + 5 allies can make an extra save against every effect that allows a save at the start/end of a turn", descriptionFull : "As a bonus action, you and up to five allies you can see within 60 feet of you can immediately make saving throws against every effect they're suffering that allows a save at the start or end of their turns.", firstCol : 5 }; //the mastery of air discipline (contributed by mattohara) PsionicsList["mastery of air-ua-psy"] = { name : "Mastery of Air", classes : ["mystic"], source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Wu Jen", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I take no falling damage and ignore difficult terrain when walking", descriptionFull : "You become one with the power of elemental air." + PsychicFocus + "While focused on this discipline, you take no falling damage, and you ignore difficult terrain when walking.", firstCol : "checkbox", dependencies : ["ma1-wind step", "ma2-wind stream", "ma3-cloak of air", "ma4-wind form", "ma5-misty form", "ma6-animate air"] }; PsionicsList["ma1-wind step"] = { name : "Wind Step", source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Wu Jen", time : "Move", range : "Self", duration : "This turn end", description : "Fly 20 ft/PP as part of my move this turn; if I end my turn in the air, my fall", descriptionFull : "As part of your move on your turn, you can fly up to 20 feet for each psi point spent. If you end this flight in the air, you fall unless something else holds you aloft.", firstCol : "1-7" }; PsionicsList["ma2-wind stream"] = { name : "Wind Stream", source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "30-ft line", duration : "Instantaneous", save : "Str", description : "30-ft long 5-ft wide all crea 1d8/PP Bludgeoning dmg and knocked prone; save halves and not prone", descriptionFull : "As an action, you create a line of focused air that is 30 feet long and 5 feet wide. Each creature in that area must make a Strength saving throw, taking 1d8 bludgeoning damage per psi point spent and being knocked prone on a failed save, or half as much damage on a successful one.", firstCol : "1-7" }; PsionicsList["ma3-cloak of air"] = { name : "Cloak of Air", source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Wu Jen", time : "1 bns", range : "Self", duration : "Conc, 10 min", description : "Atks vs. me have dis.; when missed by melee atk, use rea to have attacker repeat the attack on itself", descriptionFull : "As a bonus action, you seize control of the air around you to create a protective veil. Until your concentration ends, attack rolls against you have disadvantage, and when a creature you can see misses you with a melee attack, you can use your reaction to force the creature to repeat the attack roll against itself.", firstCol : 3 }; PsionicsList["ma4-wind form"] = { name : "Wind Form", source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Wu Jen", time : "1 bns", range : "Self", duration : "Conc, 10 min", description : "I gain a flying speed of 60 ft", descriptionFull : "As a bonus action, you gain a flying speed of 60 feet, which lasts until your concentration ends.", firstCol : 5 }; PsionicsList["ma5-misty form"] = { name : "Misty Form", source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "Self", duration : "Conc, 1 min", description : 'Gain resistance to Bludgeoning/Piercing/Slashing, can only take Dash actions, fit through 1" opening', descriptionMetric : "Gain resistance to Bludgeoning/Piercing/Slashing, only take Dash actions, fit through 2,5 cm opening", descriptionFull : "As an action, your body becomes like a misty cloud until your concentration ends. In this form, you gain resistance to bludgeoning, piercing, and slashing damage, and you can't take actions other than the Dash action. You can pass through openings that are no more than 1 inch wide without squeezing.", firstCol : 6 }; PsionicsList["ma6-animate air"] = { name : "Animate Air", source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "120 ft", duration : "Conc, 1 h", description : "Summon an air elemental that obeys my verbal commands; See Monster Manual, page 124", descriptionFull : "As an action, you cause an air elemental to appear in an unoccupied space you can see within 120 feet of you. The elemental lasts until your concentration ends, and it obeys your verbal commands. In combat, roll for its initiative, and choose its behavior during its turns. When this effect ends, the elemental disappears. See the Monster Manual for its stat block.", firstCol : 7 }; //the mastery of fire discipline PsionicsList["mastery of fire-ua-psy"] = { name : "Mastery of Fire", classes : ["mystic"], source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Wu Jen", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain resistance to Fire damage and gain a +2 bonus on rolls for Fire damage", descriptionFull : "You align your mind with the energy of elemental fire." + PsychicFocus + "While focused on this discipline, you gain resistance to fire damage, and you gain a +2 bonus to rolls for fire damage.", firstCol : "checkbox", dependencies : ["mf1-combustion", "mf2-rolling flame", "mf3-detonation", "mf4-fire storm", "mf5-animate fire"] }; PsionicsList["mf1-combustion"] = { name : "Combustion", source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "120 ft", duration : "Conc, 1 min", save : "Con", description : "1 crea save or 1d10/PP Fire dmg, on fire: 1d6 Fire dmg/rnd, it can 1 a to end; save half \u0026 not on fire", descriptionFull : "As an action, choose one creature or object you can see within 120 feet of you. The target must make a Constitution save. On a failed save, the target takes 1d10 fire damage per psi point spent, and it catches on fire, taking 1d6 fire damage at the end of each of its turns until your concentration ends or until it or a creature adjacent to it extinguishes the flames with an action. On a successful save, the target takes half as much damage and doesn't catch on fire.", firstCol : "1-7" }; PsionicsList["mf2-rolling flame"] = { name : "Rolling Flame", source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "5 ft", duration : "Conc, 1 min", description : "20-ft cube all 5 Fire damage and any that end their turn in it also 5 Fire damage", descriptionFull : "As an action, you create fire in a 20-foot-by-20-foot cube within 5 feet of you. The fire lasts until your concentration ends. Any creature in that area when you use this ability and any creature that ends its turn there takes 5 fire damage.", firstCol : 3 }; PsionicsList["mf3-detonation"] = { name : "Detonation", source : [["UA:TMC", 18]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "120 ft", duration : "Instantaneous", description : "20-ft rad all creatures save or 7d6 Fire damage and knocked prone; save halves and not prone", save : "Con", descriptionFull : "As an action, you create a fiery explosion at a point you can see within 120 feet of you. Each creature in a 20-foot-radius sphere centered on that point must make a Constitution saving throw, taking 7d6 fire damage and being knocked prone on a failed save, or half as much damage on a successful one.", firstCol : 5 }; PsionicsList["mf4-fire storm"] = { name : "Fire Storm", source : [["UA:TMC", 18]], psionic : true, level : 1, school : "Wu Jen", time : "1 bns", range : "Self", duration : "Conc, 1 min", description : "All creatures that end their turn within 5 ft of me take 3d6 Fire damage", descriptionFull : "As a bonus action, you become wreathed in flames until your concentration ends. Any creature that end its turn within 5 feet of you takes 3d6 fire damage.", firstCol : 5 }; PsionicsList["mf5-animate fire"] = { name : "Animate Fire", source : [["UA:TMC", 18]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "120 ft", duration : "Conc, 1 h", description : "Summon a fire elemental that obeys my verbal commands; See Monster Manual, page 124", descriptionFull : "As an action, you cause a fire elemental to appear in an unoccupied space you can see within 120 feet of you. The elemental lasts until your concentration ends, and it obeys your verbal commands. In combat, roll for its initiative, and choose its behavior during its turns. When this effect ends, the elemental disappears. See the Monster Manual for its stat block.", firstCol : 7 }; //the mastery of force discipline PsionicsList["mastery of force-ua-psy"] = { name : "Mastery of Force", classes : ["mystic"], source : [["UA:TMC", 18]], psionic : true, level : 1, school : "Wu Jen", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain advantage on Strength checks", descriptionFull : "As a student of psionic power, you perceive the potential energy that flows through all things. You reach out with your mind, transforming the potential into the actual. Objects and creatures move at your command." + PsychicFocus + ". While focused on this discipline, you have advantage on Strength checks.", firstCol : "checkbox", dependencies : ["mf1-push", "mf2-move", "mf3-inertial armor", "mf4-telekinetic barrier", "mf5-grasp", "mf6-crush (with grasp)" , "mf7-move (with grasp)"] }; PsionicsList["mf1-push"] = { name : "Push", source : [["UA:TMC", 18]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Instantaneous", save : "Str", description : "1 crea save or 1d8/PP Force dmg and pushed 5 ft/PP straight away; save halves and not pushed", descriptionFull : "As an action, choose one creature you can see within 60 feet of you. The target must make a Strength saving throw. On a failed save, it takes 1d8 force damage per psi point spent and is pushed up to 5 feet per point spent in a straight line away from you. On a successful save, it takes half as much damage.", firstCol : "1-7" }; PsionicsList["mf2-move"] = { name : "Move", source : [["UA:TMC", 18]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Instantaneous", save : "Dex", description : "Move obj 60 ft, after which it falls; crea under obj DC 10 save or 1d6+1d6/PP Bludg. dmg; see book", descriptionFull : "Choose one object you can see within 60 feet of you that isn't being worn or carried by another creature and that isn't secured in place. It can't be larger than 20 feet on a side, and its maximum weight depends on the psi points spent on this ability, as shown below." + "\n " + "As an action, you move the object up to 60 feet, and you must keep the object within sight during this movement. If the object ends this movement in the air, it falls. If the object would fall on a creature, the creature must succeed on a DC 10 Dexterity saving throw or take damage as listed on the table below.\n\n " + toUni("Psi") + "\t" + toUni("Maximum") + " " + toUni("Bludgeoning") + "\n" + toUni("Points") + "\t " + toUni("Weight") + "\t " + toUni("Damage") + "\n 2\t 25 lbs. \t 2d6" + "\n 3\t 50 lbs. \t 4d6" + "\n 5\t 250 lbs. \t 6d6" + "\n 6\t 500 lbs. \t 7d6" + "\n 7\t 1000 lbs. \t 8d6", firstCol : "2-7" }; PsionicsList["mf3-inertial armor"] = { name : "Inertial Armor", source : [["UA:TMC", 18]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "Self", duration : "8 h", description : "I gain AC 14 + Dex modifier and resistance to Force dmg if not wearing armor; ends if don armor", descriptionFull : "As an action, you sheathe yourself in an intangible field of magical force. For 8 hours, your base AC is 14 + your Dexterity modifier, and you gain resistance to force damage. This effect ends if you are wearing or don armor.", firstCol : 2 }; PsionicsList["mf4-telekinetic barrier"] = { name : "Telekinetic Barrier", source : [["UA:TMC", 18]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Conc, 10 min", description : "40-ft long, 10-ft high, 1-inch thick transparent wall of energy; each 10-ft section has AC 10 \u0026 10 HP", descriptionFull : "As an action, you create a transparent wall of telekinetic energy, at least one portion of which must be within 60 feet of you. The wall is 40 feet long, 10 feet high, and 1 inch thick. The wall lasts until your concentration ends. Each 10-foot section of the wall has an AC of 10 and 10 hit points.", firstCol : 3 }; PsionicsList["mf5-grasp"] = { name : "Grasp", source : [["UA:TMC", 18]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Conc, 1 min", description : "1 crea save or grappled; escape Athl./Acro. vs. my spell atk +1/PP; if grappled I can Crush/Move", save : "Str", descriptionFull : "You attempt to grasp a creature in telekinetic energy and hold it captive. As an action, choose one creature you can see within 60 feet of you. The target must succeed on a Strength saving throw or be grappled by you until your concentration ends or until the target leaves your reach, which is 60 feet for this grapple." + "\n " + "The grappled target can escape by succeeding on a Strength (Athletics) or Dexterity (Acrobatics) check contested by your psionic ability plus your proficiency bonus. When a target attempts to escape in this way, you can spend psi points to boost your check, abiding by your psi limit. You gain a +1 bonus per psi point spent." + "\n " + "While a target is grappled in this manner, you create one of the following effects as an action: " + toUni("Crush") + " (1–7 psi) The target takes 1d6 bludgeoning damage per psi point spent." + toUni("Move") + " (1–7 psi) You move the target up to 5 feet per psi point spent. You can move it in the air and hold it there. It falls if the grapple ends.", firstCol : 3 }; PsionicsList["mf6-crush (with grasp)"] = { name : " - Crush (with Grasp)", source : [["UA:TMC", 18]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Instantaneous", description : "1 creature grappled by Grasp takes 1d6/PP Bludgeoning damage", descriptionFull : "While the target is grappled by Grasp from the Mastery of Force discipline, you can use Crush on it as an action:" + "\n " + "The target takes 1d6 bludgeoning damage per psi point spent.", firstCol : "1-7" }; PsionicsList["mf7-move (with grasp)"] = { name : " - Move (with Grasp)", source : [["UA:TMC", 18]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Instantaneous", description : "1 creature grappled by Grasp moved up to 5 ft/PP; can hold it aloft, but it falls when grapple ends", descriptionFull : "While the target is grappled by Grasp from the Mastery of Force discipline, you can use Move on it as an action:" + "\n " + "You move the target up to 5 feet per psi point spent. You can move it in the air and hold it there. It falls if the grapple ends.", firstCol : "1-7" }; //the mastery of ice discipline (contributed by Justin W.) PsionicsList["mastery of ice-ua-psy"] = { name : "Mastery of Ice", classes : ["mystic"], source : [["UA:TMC", 19]], psionic : true, level : 1, school : "Wu Jen", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain resistance to Cold damage", descriptionFull : "You master the power of ice, shaping it to meet you demands." + PsychicFocus + "While focused on this discipline, you have resistance to cold damage.", firstCol : "checkbox", dependencies : ["mi1-ice spike", "mi2-ice sheet", "mi3-frozen sanctuary", "mi4-frozen rain", "mi5-ice barrier"] }; PsionicsList["mi1-ice spike"] = { name : "Ice Spike", source : [["UA:TMC", 19]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "120 ft", duration : "Next turn end", save : "Dex", description : "1 creature save or 1d8/PP Cold damage and speed halved; save halves and normal speed", descriptionFull : "As an action, you hurl a mote of ice at one creature you can see within 120 feet of you. The target must make a Dexterity saving throw. On a failed save, the target takes 1d8 cold damage per psi point spent and has its speed halved until the start of your next turn. On a successful save, the target takes half as much damage.", firstCol : "1-7" }; PsionicsList["mi2-ice sheet"] = { name : "Ice Sheet", source : [["UA:TMC", 19]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "10 min", save : "Dex", description : "Create 20-ft rad of difficult terrain; crea move more than 10 ft save or prone; on slope slide to bottom", descriptionFull : "As an action, choose a point on the ground you can see within 60 feet of you. The ground in a 20-foot radius centered on that point becomes covered in ice for 10 minutes. It is difficult terrain, and any creature that moves more than 10 feet on it must succeed on a Dexterity saving throw or fall prone. If the surface is sloped, a creature that falls prone in the area immediately slides to the bottom of the slope.", firstCol : 2 }; PsionicsList["mi3-frozen sanctuary"] = { name : "Frozen Sanctuary", source : [["UA:TMC", 19]], psionic : true, level : 1, school : "Wu Jen", time : "1 bns", range : "Self", duration : "Instantaneous", description : "I gain 20 temporary hit points", descriptionFull : "As a bonus action, you sheathe yourself with icy resilience. You gain 20 temporary hit points.", firstCol : 3 }; PsionicsList["mi4-frozen rain"] = { name : "Frozen Rain", source : [["UA:TMC", 19]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "120 ft", duration : "Conc, 1 min", save : "Con", description : "20-ft rad all 6d6(+1d6/extra PP) Cold dmg \u0026 spd 0; save half \u0026 no spd 0; 1 a Athl. vs DC for no spd 0", descriptionFull : "As an action, choose a point you can see within 120 feet of you. The air in a 20-foot-radius sphere centered on that point becomes deathly cold and saturated with moisture. Each creature in that area must make a Constitution saving throw. On a failed save, a target takes 6d6 cold damage, and its speed is reduced to 0 until your concentration ends. On a successful save, a target takes half as much damage." + "\n " + "As an action, a target that has its speed reduced can end the effect early if it succeeds on a Strength (Athletics) check with a DC equal to this effect's save DC." + "\n " + "You can increase this effect's damage by 1d6 per each additional psi point spent on it.", firstCol : "5-7" }; PsionicsList["mi5-ice barrier"] = { name : "Ice Barrier", source : [["UA:TMC", 19]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60-ft", duration : "Conc, 10 min", description : "60\xD71\xD715ft (l\xD7w\xD7h) wall; a 10-ft section has AC 12 & 30 HP; melee atks do same as Cold dmg back", descriptionMetric : "20\xD70,3\xD75m (l\xD7w\xD7h) wall; a 3-m section has AC 12 & 30 hp; melee atks do same as Cold dmg back", descriptionFull : "As an action, you create a wall of ice, at least one portion of which must be within 60 feet of you. The wall is 60 feet long, 15 feet high, and 1 foot thick. The wall lasts until your concentration ends. Each 10-foot section of the wall has AC 12 and 30 hit points. A creature that damages the wall with a melee attack takes cold damage equal to the damage the creature dealt to the wall.", firstCol : 6 }; //the mastery of light and darkness discipline (contributed by Justin W.) PsionicsList["mastery of light and darkness-ua-psy"] = { name : "Mastery of Light and Darkness", nameShort : "Mastery of Light \u0026 Dark", classes : ["mystic"], source : [["UA:TMC", 19]], psionic : true, level : 1, school : "Wu Jen", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I can see through natural and magical darkness out to 30 ft", descriptionFull : "You claim dominion over light and darkness with your mind." + PsychicFocus + "While focused on this discipline, natural and magical darkness within 30 feet of you has no effect on your vision.", firstCol : "checkbox", dependencies : ["mld1-darkness", "mld2-light", "mld3-shadow beasts", "mld4-radiant beam"] }; PsionicsList["mld1-darkness"] = { name : "Darkness", source : [["UA:TMC", 19]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Conc, 1 min", description : "10 ft/PP rad darkness from point; darkvision doesn't work; only magical light of SL 3 or higher works", descriptionFull : "As an action, you create an area of magical darkness, which foils darkvision. Choose a spot you can see within 60 feet of you. Magical darkness radiates from that point in a sphere with a 10-foot radius per psi point spent on this ability. The light produced by spells of 2nd level or less is suppressed in this area.", firstCol : "1-7" }; PsionicsList["mld2-light"] = { name : "Light", source : [["UA:TMC", 19]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "Touch", duration : "Conc, 1 min", save : "Dex", description : "1 crea/obj save or sheds bright light 20-ft rad and dim light 20-ft, and can't hide, atks vs. it have adv.", descriptionFull : "As an action, an object you touch radiates light in a 20-foot radius and dim light for an additional 20 feet. The light lasts until your concentration ends. Alternatively, a creature you touch radiates light in the same manner if it fails a Dexterity saving throw. While lit in this manner, it can't hide, and attack rolls against it gain advantage.", firstCol : 2 }; PsionicsList["mld3-shadow beasts"] = { name : "Shadow Beasts", source : [["UA:TMC", 19]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Conc, 1 min", description : "Summon 2 shadows that obeys my verbal commands; See Monster Manual, page 269", descriptionFull : "As an action, you cause two shadows to appear in unoccupied spaces you can see within 60 feet of you. The shadows last until your concentration ends, and they obey your verbal commands. In combat, roll for their initiative, and choose their behavior during their turns. When this effect ends, the shadows disappear. See the Monster Manual for their stat block.", firstCol : 3 }; PsionicsList["mld4-radiant beam"] = { name : "Radiant Beam", source : [["UA:TMC", 19]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Conc, 1 min", save : "Dex", description : "1 crea 6d6(+1d6/extra PP) Radiant dmg, blinded, save each turn to end blind; save halves \u0026 not blind", descriptionFull : "As an action, you project a beam of light at one creature you can see within 60 feet of you. The target must make a Dexterity saving throw. On a failed save, it takes 6d6 radiant damage and is blinded until your concentration ends. On a successful save, it takes half as much damage. A blinded target can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success." + "\n " + "You can increase this effect's damage by 1d6 per each additional psi point spent on it.", firstCol : "5-7" }; //the mastery of water discipline (contributed by Justin W.) PsionicsList["mastery of water-ua-psy"] = { name : "Mastery of Water", classes : ["mystic"], source : [["UA:TMC", 19]], psionic : true, level : 1, school : "Wu Jen", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain a swimming speed equal to my walking speed and I can breathe underwater", descriptionFull : "Your mind becomes one with elemental water, attuning your thoughts to its ebb and flow." + PsychicFocus + "While focused on this discipline, you have a swimming speed equal to your walking speed, and you can breathe underwater.", firstCol : "checkbox", dependencies : ["mwa1-dessicate", "mwa2-watery grasp", "mwa3-water whip", "mwa4-water breathing","mwa5-water sphere","mwa6-animate water"] }; PsionicsList["mwa1-dessicate"] = { name : "Dessicate", source : [["UA:TMC", 20]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Instantaneous", save : "Con", description : "1 creature 1d10/PP Necrotic damage; save halves", descriptionFull : "As an action, choose one creature you can see within 60 feet of you. The target must make a Constitution saving throw, taking 1d10 necrotic damage per psi point spent on this ability, or half as much damage on a successful one.", firstCol : "1-7" }; PsionicsList["mwa2-watery grasp"] = { name : "Watery Grasp", source : [["UA:TMC", 20]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "5 ft", duration : "Instantaneous", save : "Dex", description : "20-ft sq all save or 2d6(+1d6/extra PP) Bludg. dmg, prone, pulled 10 ft to me; save half \u0026 not prone", descriptionFull : "As an action, you unleash a wave that surges forth and then retreats to you like the rising tide. You create a wave in a 20-foot-by-20-foot square. At least some portion of the square's border must be within 5 feet of you. Any creature in that square must make a Strength saving throw. On a failed save, a target takes 2d6 bludgeoning damage, is knocked prone, and is pulled up to 10 feet closer to you. On a successful save, a target takes half as much damage. You can increase this ability's damage by 1d6 per additional psi point spent on it.", firstCol : "2-7" }; PsionicsList["mwa3-water whip"] = { name : "Water Whip", source : [["UA:TMC", 20]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60-ft line", duration : "Instantaneous", save : "Str", description : "60\xD75-ft (l\xD7w) all 3d6(+1d6/extra PP) Bludg. dmg \u0026 move to empty spot on line; save half \u0026 no move", descriptionMetric : "20\xD71,5m (l\xD7w) all 3d6(+1d6/extra PP) Bludg. dmg, move to empty spot on line; save half \u0026 no move", descriptionFull : "As an action, you unleash a jet of water in a line that is 60 feet long and 5 feet wide. Each creature in the line must make a Strength saving throw, taking 3d6 bludgeoning damage on a failed save, or half as much damage on a successful one. In addition, you can move each target that fails its saving throw to any unoccupied space touching the line. You can increase this ability's damage by 1d6 per additional psi point spent on it.", firstCol : "3-7" }; PsionicsList["mwa4-water breathing"] = { name : "Water Breathing", source : [["UA:TMC", 20]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "24 h", description : "Me and up to 10 willing creatures can breathe underwater for the duration", descriptionFull : "As an action, you grant yourself and up to ten willing creatures you can see within 60 feet of you the ability to breathe underwater for the next 24 hours.", firstCol : 5 }; PsionicsList["mwa5-water sphere"] = { name : "Water Sphere", source : [["UA:TMC", 20]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Conc, 1 min", save : "Dex", description : "1 crea save or half speed, dis. on atks, can see only 10 ft, atks vs. it also dis.; save at end of each turn", descriptionFull : "As an action, you cause a sphere of water to form around a creature. Choose one creature you can see within 60 feet of you. The target must make a Dexterity saving throw. On a failed save, it becomes trapped in the sphere of water until your concentration ends. While the target is trapped, its speed is halved, it suffers disadvantage on attack rolls, and it can't see anything more than 10 feet away from it. However, attack rolls against it also suffer disadvantage. The target can repeat the saving throw at the end of each of its turns, ending the effect on itself on a successful one.", firstCol : 6 }; PsionicsList["mwa6-animate water"] = { name : "Animate Water", source : [["UA:TMC", 20]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "120 ft", duration : "Conc, 1 h", description : "Summon a water elemental that obeys my verbal commands; See Monster Manual, page 124", descriptionFull : "As an action, you cause a water elemental to appear in an unoccupied space you can see within 120 feet of you. The elemental lasts until your concentration ends, and it obeys your verbal commands. In combat, roll for its initiative, and choose its behavior during its turns. When this effect ends, the elemental disappears. See the Monster Manual for its stat block.", firstCol : 7 }; //the mastery of weather discipline (contributed by Justin W.) PsionicsList["mastery of weather-ua-psy"] = { name : "Mastery of Weather", classes : ["mystic"], source : [["UA:TMC", 20]], psionic : true, level : 1, school : "Wu Jen", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain resistance to Lightning and Thunder damage", descriptionFull : "Your mind reaches into the sky, reshaping the stuff of storms to serve your needs." + PsychicFocus + "While focused on this discipline, you have resistance to lightning and thunder damage.", firstCol : "checkbox", dependencies : ["mw1-cloud steps", "mw2-hungry lightning", "mw3-wall of clouds", "mw4-whirlwind", "mw5-lightning leap", "mw6-wall of thunder", "mw7-thunder clap"] }; PsionicsList["mw1-cloud steps"] = { name : "Cloud Steps", source : [["UA:TMC", 20]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "Self", duration : "Conc, 10 min", description : "U summon a 10 ft by 10 ft spiral staircase, that reaches 20 ft/PP upward", descriptionFull : "As an action, you conjure forth clouds to create a solid, translucent staircase that lasts until your concentration ends. The stairs form a spiral that fills a 10-foot-by-10-foot area and reaches upward 20 feet per psi point spent.", firstCol : "1-7" }; PsionicsList["mw2-hungry lightning"] = { name : "Hungry Lightning", source : [["UA:TMC", 20]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Instantaneous", save : "Dex", description : "1 creature 1d8/PP Lightning damage; save halves; disadvantage on save if wearing heavy armor", descriptionFull : "As an action, you lash out at one creature you can see within 60 feet of you with tendrils of lightning. The target must make a Dexterity saving throw, with disadvantage if it's wearing heavy armor. The target takes 1d8 lightning damage per psi point spent on a failed save, or half as much damage on a successful one.", firstCol : "1-7" }; PsionicsList["mw3-wall of clouds"] = { name : "Wall of Clouds", source : [["UA:TMC", 20]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Conc, 10 min", description : "I create a 60-ft long, 15-ft high, 1-ft thick wall of clouds that blocks vision; it must start in range", descriptionFull : "As an action, you create a wall of clouds, at least one portion of which must be within 60 feet of you. The wall is 60 feet long, 15 feet high, and 1 foot thick. The wall lasts until your concentration ends. Creatures can pass through it without hindrance, but the wall blocks vision.", firstCol : 2 }; PsionicsList["mw4-whirlwind"] = { name : "Whirlwind", source : [["UA:TMC", 20]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Instantaneous", save : "Str", description : "20-ft rad all crea save or 1d6 Bludg. dmg & moved to chosen empty space in rad; obj moved as well", descriptionFull : "As an action, choose a point you can see within 60 feet of you. Winds howl in a 20-foot-radius sphere centered on that point. Each creature in the sphere must succeed on a Strength saving throw or take 1d6 bludgeoning damage and be moved to an unoccupied space of your choice in the sphere. Any loose object in the sphere is moved to an unoccupied space of your choice within it if the object weighs no more than 100 pounds.", firstCol : 2 }; PsionicsList["mw5-lightning leap"] = { name : "Lightning Leap", source : [["UA:TMC", 20]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60-ft line", duration : "Instantaneous", save : "Dex", description : "60-ft long 5-ft wide all 6d6(+1d6/extra PP) Lightning dmg; save halves; I teleport to spot on line", descriptionFull : "As an action, you let loose a line of lightning that is 60 feet long and 5 feet wide. Each creature in the line must make a Dexterity saving throw, taking 6d6 lightning damage on a failed save, or half as much damage on a successful one. You can then teleport to an unoccupied space touched by the line." + "\n " + "You can increase this ability's damage by 1d6 per additional psi point spent on it.", firstCol : "5-7" }; PsionicsList["mw6-wall of thunder"] = { name : "Wall of Thunder", source : [["UA:TMC", 21]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Conc, 10 min", save : "Str", description : "60\xD71\xD715 ft (l\xD7w\xD7h) wall; diff. terr.; crea start/move in save or 6d6 Thunder dmg, push 30 ft, prone", descriptionMetric : "20\xD70,3\xD75 m (l\xD7w\xD7h) wall; diff. terr.; crea start/move in save or 6d6 Thunder dmg, push 10m, prone", descriptionFull : "As an action, you create a wall of thunder, at least one portion of which must be within 60 feet of you. The wall is 60 feet long, 15 feet high, and 1 foot thick. The wall lasts until your concentration ends. Every foot moved through the wall costs 1 extra foot of movement. When a creature moves into the wall's space for the first time on a turn or starts its turn there, that creature must succeed on a Strength saving throw, or it takes 6d6 thunder damage, is pushed in a straight line up to 30 feet away from the wall, and is knocked prone.", firstCol : 6 }; PsionicsList["mw7-thunder clap"] = { name : "Thunder Clap", source : [["UA:TMC", 21]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Next turn end", save : "Con", description : "20-ft rad all save or 8d6 Thunder dmg and stunned until my next turn ends; save halves \u0026 no stun", descriptionFull : "As an action, choose a point you can see within 60 feet of you. Thunder energy erupts in a 20-foot-radius sphere centered on that point. Each creature in that area must make Constitution saving throw. On a failed save, a target takes 8d6 thunder damage, and it is stunned until the end of your next turn. On a successful save, a target takes half as much damage.", firstCol : 7 }; //the mastery of wood and earth discipline (contributed by Justin W.) PsionicsList["mastery of wood and earth-ua-psy"] = { name : "Mastery of Wood and Earth", nameShort : "Mastery of Wood \u0026 Earth", classes : ["mystic"], source : [["UA:TMC", 21]], psionic : true, level : 1, school : "Wu Jen", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain a +1 bonus to AC", descriptionFull : "You attune your mind to seize control of wood and earth." + PsychicFocus + "While focused on this discipline, you have a +1 bonus to AC.", firstCol : "checkbox", dependencies : ["mwe1-animate weapon", "mwe2-warp weapon", "mwe3-warp armor", "mwe4-wall of wood", "mwe5-armored form", "mwe6-animate earth"] }; PsionicsList["mwe1-animate weapon"] = { name : "Animate Weapon", source : [["UA:TMC", 21]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "30 ft", duration : "Instantaneous", description : "1 crea attacked by my 1-handed melee wea; use discipline score for atk/dmg; +1d10/PP Force dmg", descriptionFull : "As an action, your mind seizes control of a one-handed melee weapon you're holding. The weapon flies toward one creature you can see within 30 feet of you and makes a one-handed melee weapon attack against it, using your discipline attack modifier for the attack and damage rolls. On a hit, the weapon deals its normal damage, plus an extra 1d10 force damage per psi point spent on this ability. The weapon returns to your grasp after it attacks.", firstCol : "1-7" }; PsionicsList["mwe2-warp weapon"] = { name : "Warp Weapon", source : [["UA:TMC", 21]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Next turn end", save : "Str", description : "1 crea save or 1 chosen nonmagical wea it is holding can't be used to attack until my next turn ends", descriptionFull : "As an action, choose one nonmagical weapon held by one creature you can see within 60 feet of you. That creature must succeed on a Strength saving throw, or the chosen weapon can't be used to attack until the end of your next turn.", firstCol : 2 }; PsionicsList["mwe3-warp armor"] = { name : "Warp Armor", source : [["UA:TMC", 21]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Next turn end", save : "Con", description : "1 crea wearing a nonmagical armor save or have AC 10 + its Dex modifier until my next turn ends", descriptionFull : "As an action, choose a nonmagical suit of armor worn by one creature you can see within 60 feet of you. That creature must succeed on a Constitution saving throw, or the creature's AC becomes 10 + its Dexterity modifier until the end of your next turn.", firstCol : 3 }; PsionicsList["mwe4-wall of wood"] = { name : "Wall of Wood", source : [["UA:TMC", 21]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Conc, 1 h", description : "Create 60-ft long, 15-ft high, 1-ft thick wall of solid wood; each 5-ft section has AC 12 and 100 HP", descriptionFull : "As an action, you create a wall of wood at least one portion of which must be within 60 feet of you. The wall is 60 feet long, 15 feet high, and 1 foot thick. The wall lasts until your concentration ends. Each 5-foot wide section of the wall has AC 12 and 100 hit points. Breaking one section creates a 5-foot by 5-foot hole in it, but the wall otherwise remains intact.", firstCol : 3 }; PsionicsList["mwe5-armored form"] = { name : "Armored Form", source : [["UA:TMC", 21]], psionic : true, level : 1, school : "Wu Jen", time : "1 bns", range : "Self", duration : "Conc, 1 min", description : "I gain resistance to Bludgeoning, Piercing, and Slashing damage", descriptionFull : "As a bonus action, you gain resistance to bludgeoning, piercing, and slashing damage, which lasts until your concentration ends.", firstCol : 6 }; PsionicsList["mwe6-animate earth"] = { name : "Animate Earth", source : [["UA:TMC", 21]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "120 ft", duration : "Conc, 1 h", description : "Summon an earth elemental that obeys my verbal commands; See Monster Manual, page 124", descriptionFull : "As an action, you cause an earth elemental to appear in an unoccupied space you can see within 120 feet of you. The elemental lasts until your concentration ends, and it obeys your verbal commands. In combat, roll for its initiative, and choose its behavior during its turns. When this effect ends, the elemental disappears. See the Monster Manual for its stat block.", firstCol : 7 }; //the nomadic arrow discipline (contributed by mattohara) PsionicsList["nomadic arrow-ua-psy"] = { name : "Nomadic Arrow", classes : ["mystic"], source : [["UA:TMC", 21]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "My ranged weapon attacks ignore disadvantage, but can't get adv. if it was subject to dis.", descriptionFull : "You imbue a ranged weapon with a strange semblance of sentience, allowing it to unerringly find its mark." + PsychicFocus + "While you are focused on this discipline, any attack roll you make for a ranged weapon attack ignores disadvantage. If disadvantage would normally apply to the roll, that roll also can't benefit from advantage.", firstCol : "checkbox", dependencies : ["na1-speed dart", "na2-seeking missile", "na3-faithful archer"] }; PsionicsList["na1-speed dart"] = { name : "Speed Dart", source : [["UA:TMC", 21]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "Self", duration : "This turn end", description : "1 ranged weapon gains psionic power; next hit with it deals +1d10/PP Psychic damage", descriptionFull : "As a bonus action, you imbue one ranged weapon you hold with psionic power. The next attack you make with it that hits before the end of the current turn deals an extra 1d10 psychic damage per psi point spent.", firstCol : "1-7" }; PsionicsList["na2-seeking missile"] = { name : "Seeking Missile", source : [["UA:TMC", 21]], psionic : true, level : 1, school : "Nomad", time : "1 rea", timeFull : "1 reaction, which you take when you miss with a ranged weapon attack", range : "Self", duration : "Instantaneous", description : "When I miss with a ranged attack, I can reroll the attack roll against the same target", descriptionFull : "As a reaction when you miss with a ranged weapon attack, you can repeat the attack roll against the same target.", firstCol : 2 }; PsionicsList["na3-faithful archer"] = { name : "Faithful Archer", source : [["UA:TMC", 21]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "Self", duration : "Conc, 1 min", description : "1 ranged weapon gains sentience; free attack with it at the start of each turn; thrown weapons return", descriptionFull : "As a bonus action, you imbue a ranged weapon with a limited sentience. Until your concentration ends, you can make an extra attack with the weapon at the start of each of your turns (no action required). If it is a thrown weapon, it returns to your grasp each time you make any attack with it.", firstCol : 5 }; //the nomadic chameleon discipline (contributed by mattohara) PsionicsList["nomadic chameleon-ua-psy"] = { name : "Nomadic Chameleon", classes : ["mystic"], source : [["UA:TMC", 22]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain advantage on Dexterity (Stealth) checks", descriptionFull : "You create a screen of psychic power that distorts your appearance, allowing you to blend into the background or even turn invisible." + PsychicFocus + "While focused on this discipline, you have advantage on Dexterity (Stealth) checks.", firstCol : "checkbox", dependencies : ["nc1-chameleon", "nc2-step from sight", "nc3-enduring invisibility"] }; PsionicsList["nc1-chameleon"] = { name : "Chameleon", source : [["UA:TMC", 22]], psionic : true, level : 1, school : "Nomad", time : "1 a", range : "Self", duration : "This turn end", description : "I can hide, regardless of requirements; at end of turn, remain hidden only if requirements are met", descriptionFull : "As an action, you can attempt to hide even if you fail to meet the requirements needed to do so. At the end of the current turn, you remain hidden only if you then meet the normal requirements for hiding.", firstCol : 2 }; PsionicsList["nc2-step from sight"] = { name : "Step from Sight", source : [["UA:TMC", 22]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "60 ft", duration : "Conc, 1 min", description : "I (+1 crea/extra PP) become invisible; attacking/targeting/affecting other crea makes a crea visible", descriptionFull : "As a bonus action, cloak yourself from sight. You can target one additional creature for every additional psi point you spend on this ability. The added targets must be visible to you and within 60 feet of you." + "\n " + "Each target turns invisible and remains so until your concentration ends or until immediately after it targets, damages, or otherwise affects any creature with an attack, a spell, or another ability.", firstCol : "3-7" }; PsionicsList["nc3-enduring invisibility"] = { name : "Enduring Invisibility", source : [["UA:TMC", 22]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "Self", duration : "Conc, 1 min", description : "I turn invisible for the duration", descriptionFull : "As a bonus action, you turn invisible and remain so until your concentration ends.", firstCol : 7 }; //the nomadic mind discipline (contributed by mattohara) PsionicsList["nomadic mind-ua-psy"] = { name : "Nomadic Mind", classes : ["mystic"], source : [["UA:TMC", 22]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain proficiency with one skill, tool, or language", descriptionFull : "You dispatch part of your psyche into the noosphere, the collective vista of minds and knowledge possessed by living things." + PsychicFocus + "Whenever you focus on this discipline, you choose one skill or tool and have proficiency with it until your focus ends. Alternatively, you gain the ability to read and write one language of your choice until your focus ends.", firstCol : "checkbox", dependencies : ["nm1-wandering mind", "nm2-find creature", "nm3-item lore", "nm4-psychic speech", "nm5-wandering eye", "nm6-phasing eye"] }; PsionicsList["nm1-wandering mind"] = { name : "Wandering Mind", source : [["UA:TMC", 22]], psionic : true, level : 1, school : "Nomad", time : "10 min", range : "Self", duration : "1 h", description : "Gain prof. with 1 skill/2PP: Animal Hand., History, Medicine, Nature, Performance, Religion, Survival", descriptionFull : "You enter a deep contemplation. If you concentrate for this option's full duration, you then gain proficiency with up to three of the following skills (one skill for every 2 psi points spent): Animal Handling, Arcana, History, Medicine, Nature, Performance, Religion, and Survival. The benefit lasts for 1 hour, no concentration required.", firstCol : "2-6" }; PsionicsList["nm2-find creature"] = { name : "Find Creature", source : [["UA:TMC", 22]], psionic : true, level : 1, school : "Nomad", time : "1 h", range : "Self", duration : "Instantaneous", description : "Learn general location of a creature, within 1-3 miles; if it's on other plane, learn which plane instead", descriptionFull : "You cast your mind about for information about a specific creature. If you concentrate for this option's full duration, you then gain a general understanding of the creature's current location. You learn the region, city, town, village, or district where it is, pinpointing an area between 1 and 3 miles on a side (DM's choice). If the creature is on another plane of existence, you instead learn which plane.", firstCol : 2 }; PsionicsList["nm3-item lore"] = { name : "Item Lore", source : [["UA:TMC", 22]], psionic : true, level : 1, school : "Nomad", time : "1 h", range : "5 ft", duration : "Instantaneous", description : "1 magical item or magic-imbued crea/obj; learn properties, how to use, and spells affecting it", descriptionFull : "You carefully study an item. If you concentrate for this option's full duration while remaining within 5 feet of the item, you then gain the benefits of an identify spell cast on that item.", firstCol : 3 }; PsionicsList["nm4-psychic speech"] = { name : "Psychic Speech", source : [["UA:TMC", 22]], psionic : true, level : 1, school : "Nomad", time : "1 a", range : "Self", duration : "1 h", description : "I understand all spoken/written languages and all with a language can understand what I say", descriptionFull : "As an action, you attune your mind to the psychic imprint of all language. For 1 hour, you gain the ability to understand any language you hear or attempt to read. In addition, when you speak, all creatures that can understand a language understand what you say, regardless of what language you use.", firstCol : 5 }; PsionicsList["nm5-wandering eye"] = { name : "Wandering Eye", source : [["UA:TMC", 22]], psionic : true, level : 1, school : "Nomad", time : "1 a", range : "60 ft", duration : "Conc, 1 h", description : 'Create invisible, moving (unlimited range, 30ft/rnd) 1" magic eye with darkvision I see through', description : "Create invisible, moving (unlimited range, 10m/rnd) 2,5cm magic eye /w darkvision I see through", descriptionFull : "As an action, you create a psychic sensor within 60 feet of you. The sensor lasts until your concentration ends. The sensor is invisible and hovers in the air. You mentally receive visual information from it, which has normal vision and darkvision with a range of 60 feet. The sensor can look in all directions. As an action, you can move the sensor up to 30 feet in any direction. There is no limit to how far away from you the eye can move, but it can't enter another plane of existence. A solid barrier blocks the eye's movement, but the eye can pass through an opening as small as 1 inch in diameter.", firstCol : 6 }; PsionicsList["nm6-phasing eye"] = { name : "Phasing Eye", source : [["UA:TMC", 22]], psionic : true, level : 1, school : "Nomad", time : "1 a", range : "60 ft", duration : "Conc, 1 h", description : "As Wandering Eye above, except the eye can move through objects but can't end its movement in one", descriptionFull : "As Wandering Eye above, except the eye can move through solid objects but can't end its movement in one. If it does so, the effect immediately ends.", firstCol : 7 }; //the nomadic step discipline (contributed by Justin W.) PsionicsList["nomadic step-ua-psy"] = { name : "Nomadic Step", classes : ["mystic"], source : [["UA:TMC", 22]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "1/turn; after I teleport, increase speed by 10 ft until end of my turn", descriptionFull : "You exert your mind on the area around you, twisting the intraplanar pathways you perceive to allow instantaneous travel." + PsychicFocus + "After you teleport on your turn while focused on this discipline, your walking speed increases by 10 feet until the end of the turn, as you are propelled by the magic of your teleportation. You can receive this increase only once per turn.", firstCol : "checkbox", dependencies : ["ns1-step of a dozen paces", "ns2-nomadic anchor", "ns3-defensive step", "ns4-there and back again", "ns5-transposition", "ns6-baleful transposition", "ns7-phantom caravan", "ns8-nomad's gate"] }; PsionicsList["ns1-step of a dozen paces"] = { name : "Step of a Dozen Paces", source : [["UA:TMC", 22]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "Self", duration : "Instantaneous", description : "I teleport up to 20 ft/PP to where I can see, instead of moving this turn; only if not moved yet", descriptionFull : "If you haven't moved yet on your turn, you take a bonus action to teleport up to 20 feet per psi point spent to an unoccupied space you can see, and your speed is reduced to 0 until the end of the turn.", firstCol : "1-7" }; PsionicsList["ns2-nomadic anchor"] = { name : "Nomadic Anchor", source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Nomad", time : "1 a", range : "120 ft", duration : "8 h", description : "Create 5-ft cu teleport anchor; any teleport from this discipline can go to it if within range", descriptionFull : "As an action, you create an invisible, intangible teleportation anchor in a 5-foot cube you can see within 120 feet of you. For the next 8 hours, whenever you use this psionic discipline to teleport, you can instead teleport to the anchor, even if you can't see it, but it must be within range of the teleportation ability.", firstCol : 1 }; PsionicsList["ns3-defensive step"] = { name : "Defensive Step", source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Nomad", time : "1 rea", timeFull : "1 reaction, which you take when you are hit by an attack", range : "Self", duration : "Instantaneous", description : "When hit by an attack, I gain +4 AC, and then teleport 10 ft to a space I can see", descriptionFull : "When you are hit by an attack, you can use your reaction to gain a +4 bonus to AC against that attack, possibly turning it into a miss. You then teleport up to 10 feet to an unoccupied space you can see.", firstCol : 2 }; PsionicsList["ns4-there and back again"] = { name : "There and Back Again", source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "Self", duration : "End of Turn", description : "I teleport 20 ft and move half my speed; I may teleport back to starting spot at end of my turn", descriptionFull : "As a bonus action, you teleport up to 20 feet to an unoccupied space you can see and then move up to half your speed. At the end of your turn, you can teleport back to the spot you occupied before teleporting, unless it is now occupied or on a different plane of existence.", firstCol : 2 }; PsionicsList["ns5-transposition"] = { name : "Transposition", source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "60 ft", duration : "Instantaneous", description : "Willing creature and I teleport, swapping places, instead of moving this turn; only if not moved yet", descriptionFull : "If you haven't moved yet on your turn, choose an ally you can see within 60 feet of you. As a bonus action, you and that creature teleport, swapping places, and your speed is reduced to 0 until the end of the turn. This ability fails and is wasted if either of you can't fit in the destination space.", firstCol : 3 }; PsionicsList["ns6-baleful transposition"] = { name : "Baleful Transposition", source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Nomad", time : "1 a", range : "120 ft", duration : "Instantaneous", save : "Wis", description : "1 creature save or it and I teleport, swapping places", descriptionFull : "As an action, choose one creature you can see within 120 feet of you. That creature must make a Wisdom saving throw. On a failed save, you and that creature teleport, swapping places. This ability fails and is wasted if either of you can't fit in the destination space.", firstCol : 5 }; PsionicsList["ns7-phantom caravan"] = { name : "Phantom Caravan", source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Nomad", time : "1 a", range : "60 ft", duration : "Instantaneous", description : "Me and up to 6 willing creatures teleport up to 1 mile to a spot I can see", descriptionFull : "As an action, you and up to six willing creatures of your choice that you can see within 60 feet of you teleport up to 1 mile to a spot you can see. If there isn't an open space for all the targets to occupy at the arrival point, this ability fails and is wasted.", firstCol : 6 }; PsionicsList["ns8-nomad's gate"] = { name : "Nomad's Gate", source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Nomad", time : "1 a", range : "5 ft", duration : "Conc, 1 h", description : "Create a 5-ft cu in range, and another up to 1 mile away; anyone entering one, teleports to the other", descriptionFull : "As an action, you create a 5-foot cube of dim, gray light within 5 feet of you. You create an identical cube at any point of your choice within 1 mile that you have viewed within the past 24 hours. Until your concentration ends, anyone entering one of the cubes immediately teleports to the other one, appearing in an unoccupied space next to it. The teleportation fails if there is no space for the creature to appear in.", firstCol : 7 }; //the precognition discipline (contributed by Justin W.) PsionicsList["precognition-ua-psy"] = { name : "Precognition", classes : ["mystic"], source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Awake", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain advangage on initiative rolls", descriptionFull : "By analyzing information around you, from subtle hints to seemingly disconnected facts, you learn to weave a string of probabilities in an instant that gives you extraordinary insights." + PsychicFocus + "While focused on this discipline, you have advantage on initiative rolls.", firstCol : "checkbox", dependencies : ["p1-precognitive hunch", "p2-all-around sight", "p3-danger sense", "p4-victory before battle"] }; PsionicsList["p1-precognitive hunch"] = { name : "Precognitive Hunch", source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Awake", time : "1 bns", range : "Self", duration : "Conc, 1 min", description : "I add 1d4 to attack rolls, saving throws, and ability checks", descriptionFull : "As a bonus action, you open yourself to receive momentary insights that improve your odds of success; until your concentration ends, whenever you make an attack roll, a saving throw, or an ability check, you roll a d4 and add it to the total.", firstCol : 2 }; PsionicsList["p2-all-around sight"] = { name : "All-Around Sight", source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Awake", time : "1 rea", timeFull : "1 reaction, which you take when you are hit by an attack", range : "Self", duration : "Instantaneous", description : "After an attack hits me, impose disadvantage on that attack roll", descriptionFull : "In response to an attack hitting you, you use your reaction to impose disadvantage on that attack roll, possibly causing it to miss.", firstCol : 3 }; PsionicsList["p3-danger sense"] = { name : "Danger Sense", source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "Self", duration : "Conc, 8 h", description : "I gain +10 on the initiative roll, can't be surprised, and attacks against me can't gain advantage", descriptionFull : "As an action, you create a psychic model of reality in your mind and set it to show you a few seconds into the future. Until your concentration ends, you can't be surprised, attack rolls against you can't gain advantage, and you gain a +10 bonus to initiative.", firstCol : 5 }; PsionicsList["p4-victory before battle"] = { name : "Victory Before Battle", source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Awake", time : "", range : "60-ft rad", duration : "Instantaneous", description : "Use when rolling initiative; grant myself and up to 5 creatures +10 on the initiative roll", descriptionFull : "When you roll initiative, you can use this ability to grant yourself and up to five creatures of your choice within 60 feet of you a +10 bonus to initiative.", firstCol : 7 }; //the psionic restoration discipline (contributed by Justin W.) PsionicsList["psionic restoration-ua-psy"] = { name : "Psionic Restoration", classes : ["mystic"], source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "While focused, I can touch a creature with 0 HP as a bonus action and stabilize it", descriptionFull : "You wield psionic energy to cure wounds and restore health to yourself and others." + PsychicFocus + "While focused on this discipline, you can use a bonus action to touch a creature that has 0 hit points and stabilize it.", firstCol : "checkbox", dependencies : ["pr1-mend wounds", "pr2-restore health", "pr3-restore life", "pr4-restore vigor"] }; PsionicsList["pr1-mend wounds"] = { name : "Mend Wounds", source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Immor", time : "1 a", range : "Touch", duration : "Instantaneous", description : "1 creature is healed for 1d8/PP HP", descriptionFull : "As an action, you can spend psi points to restore hit points to one creature you touch. The creature regains 1d8 hit points per psi point spent.", firstCol : "1-7" }; PsionicsList["pr2-restore health"] = { name : "Restore Health", source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Immor", time : "1 a", range : "Touch", duration : "Instantaneous", description : "1 creature is cured of either blindness, deafness, paralysis, poison, or 1 disease", descriptionFull : "As an action, you touch one creature and remove one of the following conditions from it: blinded, deafened, paralyzed, or poisoned. Alternatively, you remove one disease from the creature.", firstCol : 3 }; PsionicsList["pr3-restore life"] = { name : "Restore Life", source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Immor", time : "1 a", range : "Touch", duration : "Instantaneous", description : "Resurrects 1 crea that has died in last minute to 1 HP, if not missing vital body parts or died of old age", descriptionFull : "As an action, you touch one creature that has died within the last minute. The creature returns to life with 1 hit point. This ability can't return to life a creature that has died of old age, nor can it restore a creature missing any vital body parts.", firstCol : 5 }; PsionicsList["pr4-restore vigor"] = { name : "Restore Vigor", source : [["UA:TMC", 24]], psionic : true, level : 1, school : "Immor", time : "1 a", range : "Touch", duration : "Instantaneous", description : "1 crea removes either 1 ability score reduction, 1 HP max reduction effect, or 1 level of exhaustion", descriptionFull : "As an action, you can touch one creature and choose one of the following: remove any reductions to one of its ability scores, remove one effect that reduces its hit point maximum, or reduce its exhaustion level by one.", firstCol : 7 }; //the psionic weapon discipline (contributed by Justin W.) PsionicsList["psionic weapon-ua-psy"] = { name : "Psionic Weapon", classes : ["mystic"], source : [["UA:TMC", 24]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "1 weapon or unarmed strike does Psychic dmg and counts as magical; no Str or Dex to dmg until CL6", descriptionFull : "You have learned how to channel psionic energy into your attacks, lending them devastating power." + PsychicFocus + "Whenever you focus on this discipline, choose one weapon you're holding or your unarmed strike. When you attack with it while focused on this discipline, its damage is psychic and magical, rather than its normal damage type. Until you reach 6th level as a mystic, you don't add your Strength or Dexterity modifier to the psychic attack's damage rolls.", firstCol : "checkbox", dependencies : ["pw1-ethereal weapon", "pw2-lethal strike", "pw3-augmented weapon"] }; PsionicsList["pw1-ethereal weapon"] = { name : "Ethereal Weapon", source : [["UA:TMC", 24]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", duration : "Next turn end", description : "1 crea save or auto hit by my next wea/unarmed atk; save halves atk dmg \u0026 negates any side-effects", descriptionFull : "As a bonus action, you temporarily transform one weapon you're holding or your unarmed strike into pure psionic energy. The next attack you make with it before the end of your turn ignores the target's armor, requiring no attack roll. Instead, the target makes a Dexterity saving throw against this discipline. On a failed save, the target takes the attack's normal damage and suffers its additional effects. On a successful save, the target takes half damage from the attack but suffers no additional effects that would normally be imposed on a hit.", firstCol : 1 }; PsionicsList["pw2-lethal strike"] = { name : "Lethal Strike", source : [["UA:TMC", 24]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", duration : "Next turn end", description : "My next weapon or unarmed attack that hits does +1d10/PP Psychic damage", descriptionFull : "As a bonus action, you imbue a weapon you're holding or your unarmed strike with psychic energy. The next time you hit with it before the end of your turn, it deals an extra 1d10 psychic damage per psi point spent.", firstCol : "1-7" }; PsionicsList["pw3-augmented weapon"] = { name : "Augmented Weapon", source : [["UA:TMC", 24]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Touch", duration : "Conc, 10 min", description : "1 weapon becomes a magic weapon with a +3 bonus to its attack and damage rolls", descriptionFull : "As a bonus action, touch one simple or martial weapon. Until your concentration ends, that weapon becomes a magic weapon with a +3 bonus to its attack and damage rolls.", firstCol : 5 }; //the psychic assault discipline PsionicsList["psychic assault-ua-psy"] = { name : "Psychic Assault", classes : ["mystic"], source : [["UA:TMC", 24]], psionic : true, level : 1, school : "Awake", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain a +2 bonus to damage rolls with psionic talents that deal Psychic damage", descriptionFull : "You wield your mind like a weapon, unleashing salvos of psionic energy." + PsychicFocus + "While focused on this discipline, you gain a +2 bonus to damage rolls with psionic talents that deal psychic damage.", firstCol : "checkbox", dependencies : ["pa1-psionic blast", "pa2-ego whip", "pa3-id insinuation", "pa4-psychic blast", "pa5-psychic crush"] }; PsionicsList["pa1-psionic blast"] = { name : "Psionic Blast", source : [["UA:TMC", 24]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Instantaneous", description : "1 creature takes 1d8/PP Psychic damage", descriptionFull : "As an action, choose one creature you can see within 60 feet of you. The target takes 1d8 psychic damage per psi point spent on this ability.", firstCol : "1-7" }; PsionicsList["pa2-ego whip"] = { name : "Ego Whip", source : [["UA:TMC", 24]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Instantaneous", save : "Int", description : "1 crea save or 3d8 Psychic dmg, next turn just Dodge/Disengage/Hide action; save half \u0026 act normal", descriptionFull : "As an action, choose one creature you can see within 60 feet of you. The target must make an Intelligence saving throw. On a failed save, the creature takes 3d8 psychic damage, and it is filled with self-doubt, leaving it able to use its action on its next turn only to take the Dodge, Disengage, or Hide action. On a successful saving throw, it takes half as much damage.", firstCol : 3 }; PsionicsList["pa3-id insinuation"] = { name : "Id Insinuation", source : [["UA:TMC", 24]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Instantaneous", save : "Int", description : "1 crea save or 5d8 Psychic dmg, next turn only Dodge/Attack action; save halves \u0026 act normal", descriptionFull : "As an action, choose one creature you can see within 60 feet of you. The target must make an Intelligence saving throw. On a failed save, the creature takes 5d8 psychic damage, and it goes into a fury, as its id runs rampant. On its next turn, it can use its action only to take the Dodge or Attack action. On a successful save, it takes half as much damage.", firstCol : 5 }; PsionicsList["pa4-psychic blast"] = { name : "Psychic Blast", source : [["UA:TMC", 24]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60-ft cone", duration : "Instantaneous", save : "Int", description : "All creatures 8d8(+2d8/extra PP) Psychic dmg; save halves", descriptionFull : "As an action, you unleash devastating psychic energy in a 60-foot cone. Each creature in that area must make an Intelligence saving throw, taking 8d8 psychic damage on a failed save, or half as much damage on a successful one. You can increase the damage by 2d8 if you spend 1 more psi point on this ability.", firstCol : "6-7" }; PsionicsList["pa5-psychic crush"] = { name : "Psychic Crush", source : [["UA:TMC", 24]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "120 ft", duration : "Instantaneous", save : "Int", description : "20-ft cu all crea save or 8d8 Psychic dmg \u0026 stunned until my next turn ends; save halves \u0026 no stun", descriptionFull : "As an action, you create a 20-foot cube of psychic energy within 120 feet of you. Each creature in that area must make an Intelligence saving throw. On a failed save, a target takes 8d8 psychic damage and is stunned until the end of your next turn. On a successful save, a target takes half as much damage.", firstCol : 7 }; //the psychic disruption discipline (contributed by Justin W.) PsionicsList["psychic disruption-ua-psy"] = { name : "Psychic Disruption", classes : ["mystic"], source : [["UA:TMC", 24]], psionic : true, level : 1, school : "Awake", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I have advantage on Charisma (Deception) checks", descriptionFull : "You create psychic static that disrupts other creatures' ability to think clearly." + PsychicFocus + "While focused on this discipline, you have advantage on Charisma (Deception) checks.", firstCol : "checkbox", dependencies : ["pd1-distracting haze", "pd2-daze", "pd3-mind storm"] }; PsionicsList["pd1-distracting haze"] = { name : "Distracting Haze", source : [["UA:TMC", 24]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Conc, 1 min", save : "Int", description : "1 crea save or 1d10/PP Psychic dmg, can't see more than 10 ft; save halves and see normal", descriptionFull : "As an action, choose one creature you can see within 60 feet of you. That creature must make an Intelligence saving throw. On a failed save, it takes 1d10 psychic damage per psi point spent and can't see anything more than 10 feet from it until your concentration ends. On a successful save, it takes half as much damage.", firstCol : "1-7" }; PsionicsList["pd2-daze"] = { name : "Daze", source : [["UA:TMC", 25]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Next turn end", save : "Int", description : "1 crea save or incapacitated until end of my next turn or it takes any damage", descriptionFull : "As an action, choose one creature you can see within 60 feet of you. That creature must make an Intelligence saving throw. On a failed save, the target is incapacitated until the end of your next turn or until it takes any damage.", firstCol : 3 }; PsionicsList["pd3-mind storm"] = { name : "Mind Storm", source : [["UA:TMC", 25]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Next turn end", save : "Wis", description : "20-ft rad all crea 6d8(+1d6/extra PP) Psychic dmg and dis. on saves; save halves and no dis. on saves", descriptionFull : "As an action, choose a point you can see within 60 feet of you. Each creature in a 20-foot-radius sphere centered on that point must make a Wisdom saving throw. On a failed save, a target takes 6d8 psychic damage and suffers disadvantage on all saving throws until the end of your next turn. On a successful save, a creature takes half as much damage. You can increase the damage by 1d6 per additional psi point spent on this ability.", firstCol : "5-7" }; //the psychic inquisition discipline (contributed by Justin W.) PsionicsList["psychic inquisition-ua-psy"] = { name : "Psychic Inquisition", classes : ["mystic"], source : [["UA:TMC", 25]], psionic : true, level : 1, school : "Awake", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I know when a creature telepathically communicating with me is lying", descriptionFull : "You reach into a creature's mind to uncover information or plant ideas within it." + PsychicFocus + "While focused on this discipline, you know when a creature communicating with you via telepathy is lying.", firstCol : "checkbox", dependencies : ["pi1-hammer of inquisition", "pi2-forceful query", "pi3-ransack mind", "pi4-phantom idea"] }; PsionicsList["pi1-hammer of inquisition"] = { name : "Hammer of Inquisition", source : [["UA:TMC", 25]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Instantaneous", save : "Int", description : "1 crea save or 1d10/PP Psychic dmg, dis. next Wis save before my next turn; save halves \u0026 no effects", descriptionFull : "As an action, choose one creature you can see within 60 feet of you. The target must make an Intelligence saving throw. On a failed save, it takes 1d10 psychic damage per psi point spent and suffers disadvantage on its next Wisdom saving throw before the end of your next turn. On a successful save, it takes half as much damage.", firstCol : "1-7" }; PsionicsList["pi2-forceful query"] = { name : "Forceful Query", source : [["UA:TMC", 25]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "30 ft", duration : "Instantaneous", save : "Int", description : "1 crea save or they must truthfully answer a yes or no question (charm effect)", descriptionFull : "As an action, you ask a question of one creature that can see and hear you within 30 feet of you. The question must be phrased so that it can be answered with a yes or no, otherwise this ability fails. The target must succeed on a Wisdom saving throw, or it replies with a truthful answer. A creature is immune to this ability if it is immune to being charmed.", firstCol : 2 }; PsionicsList["pi3-ransack mind"] = { name : "Ransack Mind", source : [["UA:TMC", 25]], psionic : true, level : 1, school : "Awake", time : "1 h", range : "30 ft", duration : "12/24/48 h", save : "Int", description : "1 crea 3 saves if in range for full duration; learn key memories from 12/24/48 h (1/2/3 failed saves)", descriptionFull : "While you concentrate on this ability, you probe one creature's mind. The creature must remain within 30 feet of you, and you must be able to see it. If you reach the ability's full duration, the target must make three Intelligence saving throws, and you learn information from it based on the number of saving throws it fails." + "\n " + "With one failed saving throw, you learn its key memories from the past 12 hours." + "\n " + "With two failed saving throws, you learn its key memories from the past 24 hours." + "\n " + "With three failed saving throws, you learn its key memories from the past 48 hours.", firstCol : 5 }; PsionicsList["pi4-phantom idea"] = { name : "Phantom Idea", source : [["UA:TMC", 25]], psionic : true, level : 1, school : "Awake", time : "1 h", range : "30 ft", duration : "4/24/48 h", save : "Int", description : "1 crea 3 saves if in range for full duration; implant memory lasting 4/24/48 h (1/2/3 failed saves)", descriptionFull : "While you concentrate on this ability, you probe one creature's mind. The creature must remain within 30 feet of you, and you must be able to see it. If you reach the ability's full duration, the target must make three Intelligence saving throws, and you plant a memory or an idea in it, which lasts for a number of hours based on the number of saving throws it fails. You choose whether the idea or memory is trivial (such as “I had porridge for breakfast” or “Ale is the worst”) or personality-defining (“I failed to save my village from orc marauders and am therefore a coward” or “Magic is a scourge, so I renounce it”)." + "\n " + "With one failed saving throw, the idea or memory lasts for the next 4 hours. With two failed saving throws, it lasts for 24 hours. With three failed saving throws, it lasts for 48 hours.", firstCol : 6 }; //the psychic phantoms discipline (contributed by Justin W.) PsionicsList["psychic phantoms-ua-psy"] = { name : "Psychic Phantoms", classes : ["mystic"], source : [["UA:TMC", 25]], psionic : true, level : 1, school : "Awake", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain advantage on Charisma (Deception) checks", descriptionFull : "Your power reaches into a creature's mind and causes it false perceptions." + PsychicFocus + "While focused on this discipline, you have advantage on Charisma (Deception) checks.", firstCol : "checkbox", dependencies : ["pp1-distracting figment", "pp2-phantom foe", "pp3-phantom betrayal", "pp4-phantom riches"] }; PsionicsList["pp1-distracting figment"] = { name : "Distracting Figment", source : [["UA:TMC", 25]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Next turn end", save : "Int", description : "1 crea save or 1d10/PP Psychic dmg, can't use rea, melee atks vs. it have adv.; save halves \u0026 no effects", descriptionFull : "As an action, choose one creature you can see within 60 feet of you. The target must make an Intelligence saving throw. On a failed save, it takes 1d10 psychic damage per psi point spent and thinks it perceives a threatening creature just out of its sight; until the end of your next turn, it can't use reactions, and melee attack rolls against it have advantage. On a successful save, it takes half as much damage.", firstCol : "1-7" }; PsionicsList["pp2-phantom foe"] = { name : "Phantom Foe", source : [["UA:TMC", 25]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Conc, 1 min", save : "Int", description : "1 crea save or no rea and 1d8(+1d8/extra PP) Psychic dmg at start its turn; save at end of each turn", descriptionFull : "As an action, choose one creature you can see within 60 feet of you. The target must make an Intelligence saving throw. On a failed save, it perceives a horrid creature adjacent to it until your concentration ends. During this time, the target can't take reactions, and it takes 1d8 psychic damage at the start of each of its turns. The target can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success. You can increase the damage by 1d8 for each additional psi point spent on the ability.", firstCol : "3-7" }; PsionicsList["pp3-phantom betrayal"] = { name : "Phantom Betrayal", source : [["UA:TMC", 26]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Conc, 1 min", save : "Int", description : "1 crea save or targets its allies with attacks/damaging effects; save at end of each turn (charm effect)", descriptionFull : "As an action, you plant delusional paranoia in a creature's mind. Choose one creature you can see within 60 feet of you. The target must succeed on an Intelligence saving throw, or until your concentration ends, it must target its allies with attacks and other damaging effects. The target can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success. A creature is immune to this ability if it is immune to being charmed.", firstCol : 5 }; PsionicsList["pp4-phantom riches"] = { name : "Phantom Riches", source : [["UA:TMC", 26]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Conc, 1 min", save : "Int", description : "1 crea save or I move it and it can't act if not taking dmg since last turn; save at end of each turn", descriptionFull : "As an action, you plant the phantom of a greatly desired object in a creature's mind. Choose one creature you can see within 60 feet of you. The target must make an Intelligence saving throw. On a failed save, you gain partial control over the target's behavior until your concentration ends; the target moves as you wish on each of its turns, as it thinks it pursues the phantom object it desires. If it hasn't taken damage since its last turn, it can use its action only to admire the object you created in its perception. The target can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success.", firstCol : 7 }; //the telepathic contact discipline (contributed by Justin W.) PsionicsList["telepathic contact-ua-psy"] = { name : "Telepathic Contact", classes : ["mystic"], source : [["UA:TMC", 26]], psionic : true, level : 1, school : "Awake", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "Use telepathy class feature with up to 6 crea; If no telepathy feature, gain telepathy 120 ft instead", descriptionFull : "By channeling psionic power, you gain the ability to control other creatures by substituting your will for their own." + PsychicFocus + "While focused on this discipline, you gain the ability to use your Telepathy class feature with up to six creatures at once. If you don't have that feature from the mystic class, you instead gain it while focused on this discipline.", firstCol : "checkbox", dependencies : ["tc1-exacting query", "tc2-occluded mind", "tc3-broken will", "tc4-psychic grip", "tc5-psychic domination"] }; PsionicsList["tc1-exacting query"] = { name : "Exacting Query", source : [["UA:TMC", 26]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "120 ft", duration : "Instantaneous", save : "Int", description : "1 crea save or answer 1 telepathically asked question; on save, target is immune until my long rest", descriptionFull : "As an action, you target one creature you can communicate with via telepathy. The target must make an Intelligence saving throw. On a failed save, the target truthfully answers one question you ask it via telepathy. On a successful save, the target is unaffected, and you can't use this ability on it again until you finish a long rest. A creature is immune to this ability if it is immune to being charmed.", firstCol : 2 }; PsionicsList["tc2-occluded mind"] = { name : "Occluded Mind", source : [["UA:TMC", 26]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "120 ft", duration : "5 min", save : "Int", description : "1 crea save or believes telepathic statement; on save, target immune until my long rest (charm effect)", descriptionFull : "As an action, you target one creature you can communicate with via telepathy. The target must make an Intelligence saving throw. On a failed save, the target believes one statement of your choice for the next 5 minutes that you communicate to it via telepathy. The statement can be up to ten words long, and it must describe you or a creature or an object the target can see. On a successful save, the target is unaffected, and you can't use this ability on it again until you finish a long rest. A creature is immune to this ability if it is immune to being charmed.", firstCol : 2 }; PsionicsList["tc3-broken will"] = { name : "Broken Will", source : [["UA:TMC", 26]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "120 ft", duration : "1 rnd", save : "Int", description : "1 crea save or I control it on its next turn; on save, target immune until my long rest (charm effect)", descriptionFull : "As an action, you target one creature you can communicate with via telepathy. The target must make an Intelligence saving throw. On a failed save, you choose the target's movement and action on its next turn. On a successful save, the target is unaffected, and you can't use this ability on it again until you finish a long rest. A creature is immune to this ability if it is immune to being charmed.", firstCol : 5 }; PsionicsList["tc4-psychic grip"] = { name : "Psychic Grip", source : [["UA:TMC", 26]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Conc, 1 min", save : "Int", description : "1 crea save or paralyzed; save at end of each turn, on failure I use rea to have it move half its speed", descriptionFull : "As an action, you target one creature you can see within 60 feet of you. The target must succeed on an Intelligence saving throw, or it is paralyzed until your concentration ends. At the end of each of its turns, it can repeat the saving throw. On a success, this effect ends. On a failure, you can use your reaction to force the target to move up to half its speed, even though it's paralyzed.", firstCol : 6 }; PsionicsList["tc5-psychic domination"] = { name : "Psychic Domination", source : [["UA:TMC", 26]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Conc, 1 min", save : "Int", description : "1 crea save or I direct its actions and move on its turns; save at end of each turn (charm effect)", descriptionFull : "As an action, you target one creature you can see within 60 feet of you. The target must succeed on an Intelligence saving throw, or you choose the creature's actions and movement on its turns until your concentration ends. At the end of each of its turns, it can repeat the saving throw, ending the effect on itself on a success. A creature is immune to this ability if it is immune to being charmed.", firstCol : 7 }; //the third eye discipline (contributed by Justin W.) PsionicsList["third eye-ua-psy"] = { name : "Third Eye", classes : ["mystic"], source : [["UA:TMC", 26]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain darkvision 60 ft; if already darkvision of 60 ft or more, increase range by 10 ft instead", descriptionFull : "You create a third, psychic eye in your mind which you cast out into the world. It channels thoughts and knowledge back to you, greatly enhancing your senses." + PsychicFocus + "While focused on this discipline, you have darkvision with a range of 60 feet. If you already have darkvision with that range or greater, increase its range by 10 feet.", firstCol : "checkbox", dependencies : ["te1-tremorsense", "te2-unwavering eye", "te3-piercing sight", "te4-truesight"] }; PsionicsList["te1-tremorsense"] = { name : "Tremorsense", source : [["UA:TMC", 26]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "Self", duration : "Conc, 1 min", description : "I gain tremorsense with a radius of 30 ft", descriptionFull : "As a bonus action, you gain tremorsense with a radius of 30 feet, which lasts until your concentration ends.", firstCol : 2 }; PsionicsList["te2-unwavering eye"] = { name : "Unwavering Eye", source : [["UA:TMC", 26]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "Self", duration : "1 min", description : "I gain advantage on Wisdom checks", descriptionFull : "As a bonus action, you gain advantage on Wisdom checks for 1 minute", firstCol : 2 }; PsionicsList["te3-piercing sight"] = { name : "Piercing Sight", source : [["UA:TMC", 27]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "Self", duration : "Conc, 1 min", description : "I see through objects that are up to 1 ft thick within 30 ft", descriptionFull : "As a bonus action, you gain the ability to see through objects that are up to 1 foot thick within 30 feet of you. This sight lasts until your concentration ends.", firstCol : 3 }; PsionicsList["te4-truesight"] = { name : "Truesight", source : [["UA:TMC", 27]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "Self", duration : "Conc, 1 min", description : "I gain truesight with a radius of 30 ft", descriptionFull : "As a bonus action, you gain truesight with a radius of 30 feet, which lasts until your concentration ends.", firstCol : 5 }; // Psionic Discipline 'Mastery of Force' power 'Inertial Armour' ArmourList["inertial armor-ua-psy"] = { regExpSearch : /^(?=.*(inertial|psychic|psionic))(?=.*armou?r).*$/i, name : "Inertial armor", source : [["UA:TMC", 18]], ac : 14, list : "magic" }; // Psionic Talents that work like damage cantrips WeaponsList["energy beam-ua-psy"] = { regExpSearch : /^(?=.*\benergy\b)(?=.*\bbeam\b).*$/i, name : "Energy Beam", source : [["UA:TMC", 27]], list : "psionic", ability : 4, type : "Cantrip", damage : ["C", 8, "My choice"], range : "90 ft", description : "Dex save, success - no damage; Acid, cold, fire, lightning, or thunder damage [my choice]", abilitytodamage : false, dc : true }; WeaponsList["mind slam-ua-psy"] = { regExpSearch : /^(?=.*\bmind\b)(?=.*\bslam\b).*$/i, name : "Mind Slam", source : [["UA:TMC", 28]], list : "psionic", ability : 4, type : "Cantrip", damage : ["C", 6, "force"], range : "60 ft", description : "Con save, success - no damage, fail - Large or smaller target also knocked prone", abilitytodamage : false, dc : true }; WeaponsList["mind thrust-ua-psy"] = { regExpSearch : /^(?=.*\bmind\b)(?=.*\bthrust\b).*$/i, name : "Mind Thrust", source : [["UA:TMC", 28]], list : "psionic", ability : 4, type : "Cantrip", damage : ["C", 10, "psychic"], range : "120 ft", description : "Int save, success - no damage", abilitytodamage : false, dc : true }; WeaponsList["psychic hammer-ua-psy"] = { regExpSearch : /^(?=.*\bpsychic\b)(?=.*\bhammer\b).*$/i, name : "Psychic Hammer", source : [["UA:TMC", 28]], list : "psionic", ability : 4, type : "Cantrip", damage : ["C", 6, "force"], range : "120 ft", description : "Str save, success - no damage, fail - also move 10 ft in chosen direction", abilitytodamage : false, dc : true }; // ua_20170320_Wizard-Revisited.js // This file adds the content from the Unearthed Arcana: Wizard Revisited article to MPMB's Character Record Sheet // Define the source SourceList["UA:WR"] = { name : "Unearthed Arcana: Wizard Revisited", abbreviation : "UA:WR", group : "Unearthed Arcana", url : "https://media.wizards.com/2017/dnd/downloads/MJ320UAWizardVF2017.pdf", date : "2017/03/20" }; // Adds 1 new subclass for the Wizard (with contributions by erickrause) AddSubClass("wizard", "war magic-ua", { regExpSearch : /^(?=.*war)(?=.*(magic|mage)).*$/i, subname : "War Magic", source : [["UA:WR", 2]], fullname : "War Mage", features : { "subclassfeature2" : { //has to be identical to a feature named in the ClassList name : "Arcane Deflection", source : [["UA:WR", 2]], minlevel : 2, description : desc([ "As a reaction when I'm hit by an attack, I can gain +2 to my AC against that attack", "As a reaction when I fail a Con save, I can gain +4 bonus to that saving throw", "After I do either, I can't cast spells other than cantrips until the end of my next turn" ]), action : [["reaction", ""]] }, "subclassfeature2.1" : { name : "Tactical Wit", source : [["UA:WR", 2]], minlevel : 2, description : desc([ "I gain a bonus to my initiative rolls equal to my Intelligence modifier" ]), addMod : { type : "skill", field : "Init", mod : "max(Int|0)", text : "I can add my Intelligence modifier to initiative rolls." } }, "subclassfeature6" : { name : "Power Surge", source : [["UA:WR", 2]], minlevel : 6, description : desc([ "When multiple targets have to save vs. one of my spells, I can have it do more damage", "On the turn I cast the spell, I can roll 2 additional damage dice for it" ]), usages : 1, recovery : "short rest" }, "subclassfeature10" : { name : "Durable Magic", source : [["UA:WR", 2]], minlevel : 10, description : desc([ "While I'm maintaining concentration on a spell, I gain +2 to AC and all saving throws" ]) }, "subclassfeature14" : { name : "Deflecting Shroud", source : [["UA:WR", 2]], minlevel : 14, description : desc([ "When I use my Arcane Deflection feature, magical energy arcs from me", "Any creatures of my choice within 10 ft of me take half my level in force damage" ]), additional : levels.map( function(n) { return n < 14 ? "" : Math.floor(n/2) + " force damage"; }) } } }); // ua_20170327_A Trio-of-Subclasses.js // This file adds the content from the Unearthed Arcana: A Trio of Subclasses article to MPMB's Character Record Sheet // Define the source SourceList["UA:AToS"] = { name : "Unearthed Arcana: A Trio of Subclasses", abbreviation : "UA:AToS", group : "Unearthed Arcana", url : "https://media.wizards.com/2017/dnd/downloads/UAThreeSubclasses.pdf", date : "2017/03/27" }; // Adds three subclass: 1 for the Monk, 1 for the Paladin, and 1 for the Ranger AddSubClass("monk", "way of the drunken master-ua", { regExpSearch : /^((?=.*drunken)(?=.*master))|((?=.*drunk)((?=.*(monk|monastic))|((?=.*martial)(?=.*(artist|arts)))|((?=.*spiritual)(?=.*warrior)))).*$/i, subname : "Way of the Drunken Master", subnameShort: "Drunken Master", fullname : "Drunken Master", source : [["UA:AToS", 1]], features : { "subclassfeature3" : { name : "Drunken Technique", source : [["UA:AToS", 1]], minlevel : 3, description : desc([ "I gain proficiency with the Performance skill", "When using Flurry of Blows, I gain the benefits of a Disengage and +10 ft speed this turn" ]), skills : ["Performance"] }, "subclassfeature6" : { name : "Tipsy Sway", source : [["UA:AToS", 1]], minlevel : 6, description: desc("As a reaction when missed in melee, attacker instead hits another I can see within 5 ft"), usages : 1, recovery : "short rest", action : [["reaction", ""]] }, "subclassfeature11" : { name : "Drunkard's Luck", source : [["UA:AToS", 1]], minlevel : 11, description: desc("Before I roll for a save, I can spend 1 ki to give myself advantage on it"), additional : "1 ki point" }, "subclassfeature17" : { name : "Intoxicated Frenzy", source : [["UA:AToS", 1]], minlevel : 17, description: desc("I can make 3 extra attacks with Flurry of Blows if each is used on a different target") } } }); AddSubClass("paladin", "oath of redemption-ua", { regExpSearch : /^((?=.*redeemer)|((?=.*redemption)(((?=.*paladin)|((?=.*(exalted|sacred|holy|divine))(?=.*(knight|fighter|warrior|warlord|trooper))))))).*$/i, subname : "Oath of Redemption", subnameShort: "Redemption", source : [["UA:AToS", 1]], features : { "subclassfeature3" : { name : "Armor of Peace", source : [["UA:AToS", 2]], minlevel : 3, description: desc("When not wearing armor or wielding a shield, my AC is 16 + my Dexterity modifier"), armorOptions : [{ regExpSearch : /^(?=.*armou?r)(?=.*peace).*$/i, name : "Armor of Peace", source : [["UA:AToS", 2]], ac : 16, selectNow : true }], spellcastingExtra : ["shield", "sleep", "hold person", "ray of enfeeblement", "counterspell", "hypnotic pattern", "otiluke's resilient sphere", "stoneskin", "hold monster", "wall of force"] }, "subclassfeature3.1" : { name : "Channel Divinity: Emissary of Peace", source : [["UA:AToS", 2]], minlevel : 3, description: desc("As a bonus action, I gain +5 to my next Charisma (Persuasion) check in the next min"), action : [["bonus action", ""]] }, "subclassfeature3.2" : { name : "Channel Divinity: Rebuke the Violent", source : [["UA:AToS", 2]], minlevel : 3, description : desc([ "As a reaction when a hostile within 10 ft damages another in melee, I can rebuke it", "It takes the same damage as it dealt but as radiant damage, with a Wis save to halve it" ]), action : [["reaction", ""]] }, "subclassfeature3.3" : { name : "Warrior of Reconciliation", source : [["UA:AToS", 2]], minlevel : 3, description : desc([ "I can charm a creature when I reduce it to 0 HP with a simple, bludgeoning weapon", "It is peaceful, docile and only does what I command it to, but it can't cause harm", "For 1 min, until I'm incap., or I or allies attack it or have it save; after it is unconscious" ]) }, "subclassfeature7" : { name : "Aura of the Guardian", source : [["UA:AToS", 2]], minlevel : 7, description : desc([ "As a reaction when an ally within 10 ft takes damage, I instead take the damage", "This damage can't be reduced in any way; Other effects might still apply to my ally" ]), action : [["reaction", ""]] }, "subclassfeature15" : { name : "Protective Spirit", source : [["UA:AToS", 2]], minlevel : 15, description: desc("At the end of my turn when I'm below half HP and not incapacitated, I regain HP"), additional : levels.map(function (n) { return n < 15 ? "" : "1d6+" + Math.floor(n/2) + " HP"; }) }, "subclassfeature20" : { name : "Emissary of Redemption", source : [["UA:AToS", 3]], minlevel : 20, description : desc([ "When taking damage from a creature, I take only half and it takes the other half", "This stops working on any that I attack or force to make a save, until I have a long rest" ]), dmgres : ["All from creatures"] } } }); // Add the Monster Slayer subclass to both the normal and Revised Ranger (if it is defined) var UAAToS_rangerSubclassMonsterSlayerUA = AddSubClass("ranger", "monster slayer-ua", { regExpSearch : /^(?=.*monster)(?=.*slayer).*$/i, subname : "Monster Slayer", source : [["UA:AToS", 3]], fullname : "Monster Slayer", features : { "subclassfeature3" : { name : "Slayer's Mysticism", source : [["UA:AToS", 3]], minlevel : 3, description: desc("I get bonus spells known, which do not count against the number of spells I can know"), spellcastingExtra : ["protection from evil and good", "zone of truth", "magic circle", "banishment", "planar binding"], spellcastingExtraApplyNonconform : true }, "subclassfeature3.1" : { name : "Slayer's Eye", source : [["UA:AToS", 3]], minlevel : 3, description : desc([ "As a bonus action, I can study a creature within 120 ft that I can see", "I learn its vulnerabilities, immunities, resistances, and the effects damaging it can have", "My first weapon hit on it each turn does +1d6 damage, until I study another or rest" ]), action : [["bonus action", ""]] }, "subclassfeature7" : { name : "Supernatural Defense", source : [["UA:AToS", 3]], minlevel : 7, description : desc([ "I add 1d6 to saves I make against abilities of the current target of my Slayer's Eye" ]) }, "subclassfeature11" : { name : "Relentless Slayer", source : [["UA:AToS", 3]], minlevel : 11, description : desc([ "As a reaction, I can stop the target of my Slayer's Eye from escaping, if within 30 ft", "If I win a contested Wis check, it wastes it action to teleport/transform/plane shift" ]), action : [["reaction", ""]] }, "subclassfeature15" : { name : "Slayer's Counter", source : [["UA:AToS", 3]], minlevel : 15, description : desc([ "As a reaction when the target of my Slayer's Eye has me make a save, I can attack it", "I can make one weapon attack; If this hits, I automatically succeed on the saving throw" ]), action : [["reaction", ""]] } } }); if (ClassList.rangerua) { ClassList.rangerua.subclasses[1].push(UAAToS_rangerSubclassMonsterSlayerUA); }; // ua_20170403_Starter-Spells.js // This file adds the content from the Unearthed Arcana: Starter Spells article to MPMB's Character Record Sheet // Define the source SourceList["UA:SS"] = { name : "Unearthed Arcana: Starter Spells", abbreviation : "UA:SS", group : "Unearthed Arcana", url : "https://media.wizards.com/2017/dnd/downloads/UA-Starter-Spells.pdf", date : "2017/04/03" }; /* Adds 17 spells of lower levels to all class' spell lists This code was contributed by SoilentBrad */ SpellsList["cause fear-uass"] = { name : "Cause Fear", classes : ["warlock", "wizard"], source : [["UA:SS", 2]], level : 1, school : "Necro", time : "1 a", range : "60 ft", components : "V,S", duration : "Conc, 1 min", save : "Wis", description : "1 crea save or frightened; crea disadvantage on save if 25 HP or less; no effect on undead/constructs", descriptionFull : "You awaken the sense of mortality in one creature you can see within range. The target must succeed on a Wisdom saving throw or become frightened for the duration. A target with 25 hit points or fewer makes the saving throw with disadvantage. The spell has no effect on constructs or undead." }; SpellsList["ceremony-uass"] = { name : "Ceremony", classes : ["cleric", "paladin"], source : [["UA:SS", 2]], ritual : true, level : 1, school : "Evoc", time : "1 h", range : "Touch", components : "V,S,M\u0192", compMaterial : "25 gp worth of powdered silver", duration : "Instantaneous", description : "Perform religious ceremony on target(s) that are within 10 ft throughout the casting; see book (25gp)", descriptionFull : "You perform one of several religious ceremonies. When you cast the spell, choose one of the following ceremonies, the target of which must be within 10 feet of you throughout the casting." + "\n " + toUni("Atonement") + ": You touch one willing creature whose alignment has changed, and you make a DC 20 Wisdom (Insight) check. On a success, you restore the target to its original alignment." + "\n " + toUni("Bless Water") + ": You touch one vial of water and cause it to become holy water." + "\n " + toUni("Coming of Age") + ": You touch one humanoid old enough to be a young adult. For the next 24 hours, whenever the target makes an ability check, it can roll a d4 and add the number rolled to the ability check. A creature can benefit from this ceremony just once." + "\n " + toUni("Dedication") + ": You touch one humanoid who would willingly convert to your religion or who wishes to be dedicated to your god's service. For the next 24 hours, whenever the target makes a saving throw, it can roll a d4 and add the number rolled to the save. A creature can benefit from this ceremony just once." + "\n " + toUni("Funeral Rite") + ": You bless one corpse within 5 feet of you. For the next 24 hours, the target can't become undead by any means short of a wish spell." + "\n " + toUni("Investiture") + ": You touch one willing humanoid. Choose one 1st-level spell you have prepared and expend a spell slot and any material components as if you were casting that spell. The spell has no effect. Instead, the target can cast this spell once without having to expend a spell slot or use material components. If the target doesn't cast the spell within 1 hour, the invested spell is lost." + "\n " + toUni("Marriage") + ": You touch adult humanoids willing to be bonded together in marriage. For the next 24 hours, each target gains a +2 bonus to AC and saving throws while they are within 30 feet of each other. A creature can benefit from this ceremony just once." }; SpellsList["chaos bolt-uass"] = { name : "Chaos Bolt", classes : ["sorcerer"], source : [["UA:SS", 2]], level : 1, school : "Evoc", time : "1 a", range : "120 ft", components : "V,S", duration : "Instantaneous", description : "Spell atk 2d8+1d6/SL dmg, d8s set dmg type, see B; double on d8s: new atk vs. crea in 30 ft of target", descriptionFull : "You hurl an undulating, warbling mass of chaotic energy at one creature in range. Make a ranged spell attack against the target. On a hit, the target takes 2d8 damage. Choose one of the d8s. The number it rolled determines the type of damage, as shown below." + "\n\n" + toUni("d8") + "\t" + toUni("Damage Type") + "\n 1\tAcid" + "\n 2\tCold" + "\n 3\tFire" + "\n 4\tForce" + "\n 5\tLightning" + "\n 6\tPoison" + "\n 7\tPsychic" + "\n 8\tThunder" + "\n\n " + "If you roll the same number on both d8s, the chaotic energy leaps from the target to a different creature of your choice within 30 feet of it. Make a new attack roll against the new target, and make a new damage roll, which could cause the chaotic energy to leap again." + "\n " + "A creature can be targeted only once by this mass of chaotic energy." + AtHigherLevels + "When you cast this spell using a spell slot of 2nd level or higher, each target takes extra damage of the type rolled. The extra damage equals 1d6 for each slot level above 1st." }; SpellsList["guiding hand-uass"] = { name : "Guiding Hand", classes : ["bard", "cleric", "druid", "wizard"], source : [["UA:SS", 3]], ritual : true, level : 1, school : "Div", time : "1 min", range : "5 ft", components : "V,S", duration : "Conc, 8 h", description : "Tiny incorporeal hand directs me to one major landmark I name that is on the same plane", descriptionFull : "You create a Tiny incorporeal hand of shimmering light in an unoccupied space you can see within range. The hand exists for the duration, but it disappears if you teleport or you travel to a different plane of existence." + "\n " + "When the hand appears, you name one major landmark, such as a city, mountain, castle, or battlefield on the same plane of existence as you. Someone in history must have visited the site and mapped it. If the landmark appears on no map in existence, the spell fails. Otherwise, whenever you move toward the hand, it moves away from you at the same speed you moved, and it moves in the direction of the landmark, always remaining 5 feet away from you." + "\n " + "If you don't move toward the hand, it remains in place until you do and beckons for you to follow once every 1d4 minutes." }; SpellsList["hand of radiance-uass"] = { name : "Hand of Radiance", classes : ["cleric"], source : [["UA:SS", 3]], level : 0, school : "Evoc", time : "1 a", range : "5-ft rad", components : "V,S", duration : "Instantaneous", save : "Con", description : "Any creatures I can see in 5-ft radius save or 1d6 Radiant damage; +1d6 damage at CL 5, 11, and 17", descriptionCantripDie : "Any creatures I can see in 5-ft radius save or `CD`d6 Radiant damage", descriptionFull : "You raise your hand, and burning radiance erupts from it. Each creature of your choice that you can see within 5 feet of you must succeed on a Constitution saving throw or take 1d6 radiant damage." + "\n " + "The spell's damage increases by 1d6 when you reach 5th level (2d6), 11th level (3d6), and 17th level (4d6)." }; SpellsList["healing elixir-uass"] = { name : "Healing Elixir", classes : ["warlock", "wizard"], source : [["UA:SS", 3]], level : 1, school : "Conj", time : "1 min", range : "Self", components : "V,S,M\u0192", compMaterial : "Alchemist's supplies", duration : "24 h", description : "Make vial with alchemist's supplies; heals 2d4+2 HP as an action; if not used, disappears after 24 h", descriptionShorter : "Make vial with alchemist's supplies; 1 a to heal 2d4+2 HP; if not used, disappears after 24 h", descriptionFull : "You create a healing elixir in a simple vial that appears in your hand. The elixir retains its potency for the duration or until it's consumed, at which point the vial vanishes." + "\n " + "As an action, a creature can drink the elixir or administer it to another creature. The drinker regains 2d4 + 2 hit points." }; SpellsList["infestation-uass"] = { name : "Infestation", classes : ["druid", "sorcerer", "warlock", "wizard"], source : [["UA:SS", 3]], level : 0, school : "Conj", time : "1 a", range : "30 ft", components : "V,S,M", compMaterial : "A living flea", duration : "Instantaneous", save : "Con", description : "1 crea save or 1d6 Piercing damage and moved 5 ft in random direction; +1d6 at CL 5, 11, and 17", descriptionCantripDie : "1 crea save or `CD`d6 Piercing damage and moved 5 ft in random direction", descriptionFull : "You cause mites, fleas, and other parasites to appear momentarily on one creature you can see within range. The target must succeed on a Constitution saving throw or take 1d6 piercing damage. If the target takes any of that damage, the target moves 5 feet in a random direction. Roll a d8 for the direction:" + "\n\n" + toUni("d8") + "\t" + toUni("Direction") + "\n 1\tNorth" + "\n 2\tNortheast" + "\n 3\tEast" + "\n 4\tSoutheast" + "\n 5\tSouth" + "\n 6\tSouthwest" + "\n 7\tWest" + "\n 8\tNorthwest" + "\n\n " + "The spell's damage increases by 1d6 when you reach 5th level (2d6), 11th level (3d6), and 17th level (4d6)." }; SpellsList["primal savagery-uass"] = { name : "Primal Savagery", classes : ["druid"], source : [["UA:SS", 3]], level : 0, school : "Trans", time : "1 a", range : "5 ft", components : "S", duration : "Instantaneous", description : "Melee spell attack deals 1d10 Piercing or Slashing dmg (my choice); +1d10 at CL 5, 11, and 17", description : "Melee spell attack deals `CD`d10 Piercing or Slashing dmg (my choice)", descriptionFull : "Your teeth or fingernails lengthen and sharpen. You choose which. Make a melee spell attack against one creature within 5 feet of you. On a hit, the target takes 1d10 piercing or slashing damage (your choice). After you make the attack, your teeth or fingernails return to normal." + "\n " + "The spell's damage increases by 1d10 when you reach 5th level (2d10), 11th level (3d10), and 17th level (4d10)." }; SpellsList["puppet-uass"] = { name : "Puppet", classes : ["bard", "warlock", "wizard"], source : [["UA:SS", 3]], level : 1, school : "Ench", time : "1 a", range : "120 ft", components : "S", duration : "Instantaneous", save : "Con", description : "1 humanoid save or move its speed to where I choose and drop held items, if chosen (charm effect)", descriptionFull : "Your gesture forces one humanoid you can see within range to make a Constitution saving throw. On a failed save, the target must move up to its speed in a direction you choose. In addition, you can cause the target to drop whatever it is holding. This spell has no effect on a humanoid that is immune to being charmed." }; SpellsList["sense emotion-uass"] = { name : "Sense Emotion", classes : ["bard", "warlock", "wizard"], source : [["UA:SS", 4]], level : 1, school : "Div", time : "1 a", range : "30 ft", components : "V,S", duration : "Conc, 10 min", description : "Now and as 1 a for duration, sense emotion of humanoid in range; sense calm if not humanoid/charm", descriptionFull : "You attune your senses to pick up the emotions of others for the duration. When you cast the spell, and as your action on each turn until the spell ends, you can focus your senses on one humanoid you can see within 30 feet of you. You instantly learn the target's prevailing emotion, whether it's love, anger, pain, fear, calm, or something else. If the target isn't actually humanoid or it is immune to being charmed, you sense that it is calm." }; SpellsList["snare-uass"] = { name : "Snare", classes : ["druid", "ranger", "wizard"], source : [["UA:SS", 4]], level : 1, school : "Abjur", time : "1 min", range : "Touch", components : "V,S,M\u2020", compMaterial : "30 feet of cord or rope, which is consumed by the spell", duration : "Dispel/trigger", save : "Dex", description : "5-ft rad magical trap; Int (Inv) to see; save or restrained upside down 3 ft in the air; save/rnd at dis", descriptionFull : "While you cast this spell, you use the cord or rope to create a circle with a 5-foot radius on a flat surface within your reach. When you finish casting, the cord or rope disappears to become a magical trap." + "\n " + "The trap is nearly invisible and requires a successful Intelligence (Investigation) check against your spell save DC to be found." + "\n " + "The trap triggers when a Small creature or larger moves into the area protected by the spell. The triggering creature must succeed on a Dexterity saving throw or fall prone and be hoisted into the air until it hangs upside down 3 feet above the protected surface, where it is restrained." + "\n " + "The restrained creature can make a Dexterity saving throw with disadvantage at the end of each of its turns and ends the restrained effect on a success. Alternatively, another creature that can reach the restrained creature can use an action to make an Intelligence (Arcana) check against your spell save DC. On a success, the restrained effect also ends." }; SpellsList["sudden awakening-uass"] = { name : "Sudden Awakening", classes : ["bard", "ranger", "sorcerer", "wizard"], source : [["UA:SS", 4]], level : 1, school : "Ench", time : "1 bns", range : "10 ft", components : "V", duration : "Instantaneous", description : "Any creatures within range awaken and can then stand up from prone without expending movement", descriptionFull : "Each sleeping creature you choose within range awakens, and then each prone creature within range can stand up without expending any movement." }; SpellsList["unearthly chorus-uass"] = { name : "Unearthly Chorus", classes : ["bard"], source : [["UA:SS", 4]], level : 1, school : "Illus", time : "1 a", range : "30-ft rad", components : "V", duration : "Conc, 10 min", save : "Cha", description : "Use bns a to make 1 crea in range save or be friendly for 1 h; I adv on Cha (Performance) checks", descriptionFull : "Music of a style you choose fills the air around you in a 30-foot radius. The music spreads around corners and can be heard from up to 100 feet away. The music moves with you, centered on you for the duration." + "\n " + "Until the spell ends, you make Charisma (Performance) checks with advantage. In addition, you can use a bonus action on each of your turns to beguile one creature you choose within 30 feet of you that can see you and hear the music. The creature must make a Charisma saving throw. If you or your companions are attacking it, the creature automatically succeeds on the saving throw. On a failure, the creature becomes friendly to you for as long as it can hear the music and for 1 hour thereafter. You make Charisma (Deception) checks and Charisma (Persuasion) checks against creatures made friendly by this spell with advantage." }; SpellsList["virtue-uass"] = { name : "Virtue", classes : ["cleric"], source : [["UA:SS", 5]], level : 0, school : "Abjur", time : "1 a", range : "Touch", components : "V,S", duration : "1 rnd", description : "1 creature that has at least 1 HP gets 1d4 + spellcasting ability modifier in temporary hit points", descriptionFull : "You touch one creature, imbuing it with vitality. If the target has at least 1 hit point, it gains a number of temporary hit points equal to 1d4 + your spellcasting ability modifier. The temporary hit points are lost when the spell ends." }; SpellsList["wild cunning-uass"] = { name : "Wild Cunning", classes : ["druid", "ranger"], source : [["UA:SS", 5]], ritual : true, level : 1, school : "Trans", time : "1 a", range : "120 ft", components : "V,S", duration : "Instantaneous", description : "Call spirits of nature to aid me with finding food, drink, tracks, shelter, or camping; see book", descriptionFull : "You call out to the spirits of nature to aid you. When you cast this spell, choose one of the following effects:" + "\n \u2022 " + "If there are any tracks on the ground within range, you know where they are, and you make Wisdom (Survival) checks to follow these tracks with advantage for 1 hour or until you cast this spell again." + "\n \u2022 " + "If there is edible forage within range, you know it and where to find it." + "\n \u2022 " + "If there is clean drinking water within range, you know it and where to find it." + "\n \u2022 " + "If there is suitable shelter for you and your companions with range, you know it and where to find." + "\n \u2022 " + "Send the spirits to bring back wood for a fire and to set up a campsite in the area using your supplies. The spirits build the fire in a circle of stones, put up tents, unroll bedrolls, and put out any rations and water for consumption." + "\n \u2022 " + "Have the spirits instantly break down a campsite, which includes putting out a fire, taking down tents, packing up bags, and burying any rubbish." }; SpellsList["zephyr strike-uass"] = { // clarification: https://twitter.com/JeremyECrawford/status/849302527069884416 name : "Zephyr Strike", classes : ["ranger"], source : [["UA:SS", 5]], level : 1, school : "Trans", time : "1 bns", range : "Self", components : "V", duration : "Conc, 1 min", description : "Moving doesn't provoke opportunity atks; next wea atk has adv and gives +30 ft speed for that turn", descriptionFull : "You move like the wind. For the duration, your movement doesn't provoke opportunity attacks." + "\n " + "In addition, the first time you make a weapon attack on your turn before the spell ends, you make the attack roll with advantage, and your speed increases by 30 feet until the end of that turn." }; // Weapons (attack cantrips) WeaponsList["hand of radiance-uass"] = { regExpSearch : /^(?=.*hand)(?=.*radiance).*$/i, name : "Hand of Radiance", source : [["UA:SS", 3]], list : "spell", ability : 5, type : "Cantrip", damage : ["C", 6, "radiant"], range : "5-ft radius", description : "Con save, success - no damage; Only chosen creatures I can see are affected", abilitytodamage : false, dc : true }; WeaponsList["infestation-uass"] = { regExpSearch : /infestation/i, name : "Infestation", source : [["UA:SS", 3]], list : "spell", ability : 6, type : "Cantrip", damage : ["C", 6, "piercing"], range : "30 ft", description : "Con save, success - no damage, fail - target also moved 5 ft in random direction", abilitytodamage : false, dc : true }; WeaponsList["primal savagery-uass"] = { regExpSearch : /^(?=.*primal)(?=.*savagery).*$/i, name : "Primal Savagery", source : [["UA:SS", 3]], list : "spell", ability : 5, type : "Cantrip", damage : ["C", 10, "piercing"], range : "Melee (5 ft)", description : "Does either Piercing or Slashing damage (my choice)", abilitytodamage : false }; // ua_20170417_Feats-for-Skills.js // This file adds the content from the Unearthed Arcana: Feats for Skills article to MPMB's Character Record Sheet // Define the source SourceList["UA:FS"] = { name : "Unearthed Arcana: Feats for Skills", abbreviation : "UA:FS", group : "Unearthed Arcana", url : "https://media.wizards.com/2017/dnd/downloads/UA-SkillFeats.pdf", date : "2017/04/17" }; // Add 18 feats, corresponding with the 18 skills FeatsList["acrobat-ua"] = { name : "Acrobat", source : [["UA:FS", 1]], descriptionFull : "You become more nimble, gaining the following benefits:\n \u2022 Increase your Dexterity score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Acrobatics skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 As a bonus action, you can make a DC 15 Dexterity (Acrobatics) check. If you succeed, difficult terrain doesn't cost you extra movement until the end of the current turn.", description : "I gain expertise with Acrobatics, or proficiency if not so already. As a bonus action, I can make a DC 15 Dexterity (Acrobatics) check to have difficult terrain not cost me extra movement for this turn. [+1 Dexterity]", scores : [0, 1, 0, 0, 0, 0], skills : [["Acrobatics", "increment"]], action : [["bonus action", ""]] }; FeatsList["animal handler-ua"] = { name : "Animal Handler", source : [["UA:FS", 1]], descriptionFull : "You master the techniques needed to train and handle animals. You gain the following benefits:\n \u2022 Increase your Wisdom score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Animal Handling skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 You can use a bonus action on your turn to command one friendly beast within 60 feet of you that can hear you and that isn't currently following the command of someone else. You decide now what action the beast will take and where it will move during its next turn, or you issue a general command that lasts for 1 minute, such as to guard a particular area.", description : "I gain expertise with Animal Handling, or proficiency if not so already. As a bonus action, I can command a friendly beast not under another's command within 60 ft. If it hears me, I decide its next turn or give a general command lasting for 1 minute. [+1 Wisdom]", scores : [0, 0, 0, 0, 1, 0], skills : [["Animal Handling", "increment"]], action : [["bonus action", ""]] }; FeatsList["arcanist-ua"] = { name : "Arcanist", source : [["UA:FS", 1]], descriptionFull : "You study the arcane arts, gaining the following benefits:\n \u2022 Increase your Intelligence score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Arcana skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 You learn the Prestidigitation and Detect Magic spells. You can cast detect magic once without expending a spell slot, and you regain the ability to do so when you finish a long rest.", description : "I gain expertise with Arcana, or proficiency if not so already. I learn the Prestidigitation cantrip. I can cast Detect Magic without using a spell slot. Once I do so, I can't do it again until I finish a long rest. [+1 Intelligence]", scores : [0, 0, 0, 1, 0, 0], skills : [["Arcana", "increment"]], spellcastingBonus : [{ name : "Arcanist", spellcastingAbility : 4, spells : ["prestidigitation"], selection : ["prestidigitation"], }, { name : "Arcanist (1x long rest)", spells : ["detect magic"], selection : ["detect magic"], firstCol : "oncelr" }] }; FeatsList["brawny-ua"] = { name : "Brawny", source : [["UA:FS", 1]], descriptionFull : "You become stronger, gaining the following benefits:\n \u2022 Increase your Strength score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Athletics skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 You count as if you were one size larger for the purpose of determining your carrying capacity.", description : "I gain expertise with Athletics, or proficiency if not so already. I count as one size larger when determining my carrying capacity and the weight I can push, drag, or lift. [+1 Strength]", scores : [1, 0, 0, 0, 0, 0], skills : [["Athletics", "increment"]], carryingCapacity : 2 }; FeatsList["diplomat-ua"] = { name : "Diplomat", source : [["UA:FS", 2]], descriptionFull : "You master the arts of diplomacy, gaining the following benefits:\n \u2022 Increase your Charisma score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Persuasion skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 If you spend 1 minute talking to someone who can understand what you say, you can make a Charisma (Persuasion) check contested by the creature's Wisdom (Insight) check. If you or your companions are fighting the creature, your check automatically fails. If your check succeeds, the target is charmed by you as long as it remains within 60 feet of you and for 1 minute thereafter.", description : "I gain expertise with Persuasion, or proficiency if not so already. With a one minute long conversation outside of combat, I can make a Persuasion vs. its Insight. If successful, it is charmed by me as long as it remains within 60 ft and 1 minute after that [+1 Charisma]", scores : [0, 0, 0, 0, 0, 1], skills : [["Persuasion", "increment"]] }; FeatsList["empathic-ua"] = { name : "Empathic", source : [["UA:FS", 2]], descriptionFull : "You possess keen insight into how other people think and feel. You gain the following benefits:\n \u2022 Increase your Wisdom score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Insight skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 You can use your action to try to get uncanny insight about one humanoid you can see within 30 feet of you. Make a Wisdom (Insight) check contested by the target's Charisma (Deception) check. If your check succeeds, you have advantage on attack rolls and ability checks against the target until the end of your next turn.", description : "I gain expertise with Insight, or proficiency if not so already. As an action, a humanoid within 30 ft I can see must make its Deception vs. my Insight or I gain advantage on attacks and ability checks against it until the end of my next turn. [+1 Wisdom]", scores : [0, 0, 0, 0, 1, 0], skills : [["Insight", "increment"]] }; FeatsList["historian-ua"] = { name : "Historian", source : [["UA:FS", 2]], descriptionFull : "Your study of history rewards you with the following benefits:\n \u2022 Increase your Intelligence score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the History skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 When you take the Help action to aid another creature's ability check, you can make a DC 15 Intelligence (History) check. On a success, that creature's check gains a bonus equal to your proficiency bonus, as you share pertinent advice and historical examples. To receive this bonus, the creature must be able to understand what you're saying.", description : "I gain expertise with History, or proficiency if not so already. When I use the Help action to help a creature that can understand me with an ability check, I can make a DC 15 Int (History) check to give a bonus equal to my proficiency bonus. [+1 Intelligence]", scores : [0, 0, 0, 1, 0, 0], skills : [["History", "increment"]], action : [["action", ""]] }; FeatsList["investigator-ua"] = { name : "Investigator", source : [["UA:FS", 2]], descriptionFull : "You have an eye for detail and can pick out the smallest clues. You gain the following benefits:\n \u2022 Increase your Intelligence score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Investigation skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 You can take the Search action as a bonus action.", description : "I gain expertise with Investigation, or proficiency if not so already. As a bonus action, I can take the Search action. [+1 Intelligence]", scores : [0, 0, 0, 1, 0, 0], skills : [["Investigation", "increment"]], action : [["bonus action", " (Search)"]] }; FeatsList["medic-ua"] = { name : "Medic", source : [["UA:FS", 2]], descriptionFull : "You master the physician's arts, gaining the following benefits:\n \u2022 Increase your Wisdom score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Medicine skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 During a short rest, you can clean and bind the wounds of up to six willing beasts and humanoids. Make a DC 15 Wisdom (Medicine) check for each creature. On a success, if a creature spends a Hit Die during this rest, that creature can forgo the roll and instead regain the maximum number of hit points the die can restore. A creature can do so only once per rest, regardless of how many Hit Dice it spends.", description : "I gain expertise with Medicine, or proficiency if not so already. During a short rest, I can attend to the wounds of up to 6 creatures. With a DC 15 Wis (Medicine) check for each creature, that target gets the maximum result on one of its HD that it uses. [+1 Wisdom]", scores : [0, 0, 0, 0, 1, 0], skills : [["Medicine", "increment"]] }; FeatsList["menacing-ua"] = { name : "Menacing", source : [["UA:FS", 2]], descriptionFull : "You become fearsome to others, gaining the following benefits:\n \u2022 Increase your Charisma score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Intimidation skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 When you take the Attack action on your turn, you can replace one attack with an attempt to demoralize one humanoid you can see within 30 feet of you that can see and hear you. Make a Charisma (Intimidation) check contested by the target's Wisdom (Insight) check. If your check succeeds, the target is frightened until the end of your next turn. If your check fails, the target can't be frightened by you in this way for 1 hour.", description : "I gain expertise with Intimidation, or proficiency if not so already. Instead of 1 attack in my Attack action, a humanoid within 30 ft I can see and that can see and hear me must make its Insight vs. my Intimidation or be frightened until end of my next turn. [+1 Cha]", scores : [0, 0, 0, 0, 0, 1], skills : [["Intimidation", "increment"]] }; FeatsList["naturalist-ua"] = { name : "Naturalist", source : [["UA:FS", 3]], descriptionFull : "Your extensive study of nature rewards you with the following benefits:\n \u2022 Increase your Intelligence score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Nature skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 You learn the Druidcraft and Detect Poison and Disease spells. You can cast Detect Poison and Disease once without expending a spell slot, and you regain the ability to do so when you finish a long rest.", description : "I gain expertise with Nature, or proficiency if not so already. I learn the Druidcraft cantrip. I can cast Detect Poison and Disease without using a spell slot. Once I do so, I can't do it again until I finish a long rest. [+1 Intelligence]", scores : [0, 0, 0, 1, 0, 0], skills : [["Nature", "increment"]], spellcastingBonus : [{ name : "Naturalist", spellcastingAbility : 4, spells : ["druidcraft"], selection : ["druidcraft"], }, { name : "Naturalist (1x long rest)", spells : ["detect poison and disease"], selection : ["detect poison and disease"], firstCol : "oncelr" }] }; FeatsList["perceptive-ua"] = { name : "Perceptive", source : [["UA:FS", 3]], descriptionFull : "You hone your senses until they become razor sharp. You gain the following benefits:\n \u2022 Increase your Wisdom score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Perception skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 Being in a lightly obscured area doesn't impose disadvantage on your Wisdom (Perception) checks if you can both see and hear.", description : "I gain expertise with Perception, or proficiency if not so already. I don't have disadvantage on my Perception checks from being in a lightly obscured area (dim light), provided that I can still both see and hear. [+1 Wisdom]", scores : [0, 0, 0, 0, 1, 0], skills : [["Perception", "increment"]], vision : [["No disadv. on Perception in lightly obscured or dim light", 0]] }; FeatsList["performer-ua"] = { name : "Performer", source : [["UA:FS", 3]], descriptionFull : "You master performance so that you can command any stage. You gain the following benefits:\n \u2022 Increase your Charisma score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Performance skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 While performing, you can try to distract one humanoid you can see who can see and hear you. Make a Charisma (Performance) check contested by the humanoid's Wisdom (Insight) check. If your check succeeds, you grab the humanoid's attention enough that it makes Wisdom (Perception) and Intelligence (Investigation) checks with disadvantage until you stop performing.", description : "I gain expertise with Performance, or proficiency if not so already. While performing, I can distract one humanoid. It must make its Insight vs. my Performance or have disadv. on its Perception and Investigation checks until I stop performing. [+1 Charisma]", scores : [0, 0, 0, 0, 0, 1], skills : [["Performance", "increment"]] }; FeatsList["quick-fingered-ua"] = { name : "Quick-Fingered", source : [["UA:FS", 3]], descriptionFull : "Your nimble fingers and agility let you perform sleight of hand. You gain the following benefits:\n \u2022 Increase your Dexterity score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Sleight of Hand skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 As a bonus action, you can make a Dexterity (Sleight of Hand) check to plant something on someone else, conceal an object on a creature, lift a purse, or take something from a pocket.", description : "I gain expertise with Sleight of Hand, or proficiency if not so already. As a bonus action, I can make a Dexterity (Sleight of Hand) check to plant something on someone else, conceal an object on a creature, lift a purse, or take something from a pocket. [+1 Dexterity]", scores : [0, 1, 0, 0, 0, 0], skills : [["Sleight of Hand", "increment"]], action : [["bonus action", ""]] }; FeatsList["silver-tongued-ua"] = { name : "Silver-Tongued", source : [["UA:FS", 3]], descriptionFull : "You develop your conversational skill to better deceive others. You gain the following benefits:\n \u2022 Increase your Charisma score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Deception skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 When you take the Attack action on your turn, you can replace one attack with an attempt to deceive one humanoid you can see within 30 feet of you that can see and hear you. Make a Charisma (Deception) check contested by the target's Wisdom (Insight) check. If your check succeeds, your movement doesn't provoke opportunity attacks from the target and your attack rolls against it have advantage; both benefits last until the end of your next turn or until you use this ability on a different target. If your check fails, the target can't be deceived by you in this way for 1 hour.", description : "I gain expertise with Deception, or proficiency if not so already. Instead of 1 attack in my Attack action, a humanoid within 30 ft makes its Insight vs. my Deception or until end of my next turn, I gain adv. on attacks and don't provoke its opportunity attacks. [+1 Cha]", scores : [0, 0, 0, 0, 0, 1], skills : [["Deception", "increment"]] }; FeatsList["stealthy-ua"] = { name : "Stealthy", source : [["UA:FS", 4]], descriptionFull : "You know how best to hide. You gain the following benefits:\n \u2022 Increase your Dexterity score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Stealth skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 If you are hidden, you can move up to 10 feet in the open without revealing yourself if you end the move in a position where you're not clearly visible.", description : "I gain expertise with Stealth, or proficiency if not so already. When I'm hidden, I can move 10 ft to another position without revealing myself, provided that I won't be clearly visible in this new position either. [+1 Dexterity]", scores : [0, 1, 0, 0, 0, 0], skills : [["Stealth", "increment"]] }; FeatsList["survivalist-ua"] = { name : "Survivalist", source : [["UA:FS", 4]], descriptionFull : "You master wilderness lore, gaining the following benefits:\n \u2022 Increase your Wisdom score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Survival skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 You learn the Alarm spell. You can cast it once without expending a spell slot, and you regain the ability to do so when you finish a long rest.", description : "I gain expertise with Survival, or proficiency if not so already. I can cast Alarm without using a spell slot. Once I do so, I can't do it again until I finish a long rest. [+1 Wisdom]", scores : [0, 0, 0, 0, 1, 0], skills : [["Survival", "increment"]], spellcastingBonus : [{ name : "1x long rest", spellcastingAbility : 5, spells : ["alarm"], selection : ["alarm"], firstCol : "oncelr" }] }; FeatsList["theologian-ua"] = { name : "Theologian", source : [["UA:FS", 4]], descriptionFull : "Your extensive study of religion rewards you with the following benefits:\n \u2022 Increase your Intelligence score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Religion skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 You learn the Thaumaturgy and Detect Evil and Good spells. You can cast Detect Evil and Good once without expending a spell slot, and you regain the ability to do so when you finish a long rest.", description : "I gain expertise with Religion, or proficiency if not so already. I learn the Thaumaturgy cantrip. I can cast Detect Evil and Good without using a spell slot. Once I do so, I can't do it again until I finish a long rest. [+1 Intelligence]", scores : [0, 0, 0, 1, 0, 0], skills : [["Religion", "increment"]], spellcastingBonus : [{ name : "Theologian", spellcastingAbility : 4, spells : ["thaumaturgy"], selection : ["thaumaturgy"], }, { name : "Theologian (1x long rest)", spells : ["detect evil and good"], selection : ["detect evil and good"], firstCol : "oncelr" }] }; // ua_20170424_Feats-for-Races.js // This file adds the content from the Unearthed Arcana: Feats for Races article to MPMB's Character Record Sheet // Define the source SourceList["UA:FR"] = { name : "Unearthed Arcana: Feats for Races", abbreviation : "UA:FR", group : "Unearthed Arcana", url : "https://media.wizards.com/2017/dnd/downloads/RJSJC2017_04UASkillFeats_24v10.pdf", date : "2017/04/24" }; // Adds 46 feats (23 + 13 variants of Grudge-Bearer), all of which have a racial prerequisite FeatsList["barbed hide-ua"] = { name : "Barbed Hide", source : [["UA:FR", 1]], prerequisite : "Being a Tiefling", prereqeval : function(v) { return CurrentRace.known.indexOf('tiefling') !== -1; }, descriptionFull : "One of your ancestors was a barbed devil or other spiky fiend. Barbs protrude from your head. You gain the following benefits:\n \u2022 Increase your Charisma score by 1, to a maximum of 20.\n \u2022 As a bonus action, you can cause small barbs to protrude all over your body or cause them to retract. At the start of each of your turns while the barbs are out, you deal 1d6 piercing damage to any creature grappling you or any creature grappled by you.\n \u2022 You gain proficiency in the Intimidation skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.", description : "I gain expertise with Intimidation, or proficiency if not so already. As a bonus action, I can protrude/retract small barbs from my skin. With them out, at the start of each of my turns I deal 1d6 piercing damage to any I'm grappling or are grappling me. [+1 Cha]", scores : [0, 0, 0, 0, 0, 1], skills : [["Intimidation", "increment"]], action : [["bonus action", ""]] }; FeatsList["bountiful luck-ua"] = { name : "Bountiful Luck", source : [["UA:FR", 1]], prerequisite : "Being a Halfling", prereqeval : function(v) { return CurrentRace.known.indexOf('halfling') !== -1; }, descriptionFull : "Whenever an ally you can see within 30 feet of you rolls a 1 on the d20 for an attack roll, an ability check, or a saving throw, you can use your reaction to let the ally reroll the die. The ally must use the new roll.", description : "Whenever an ally I can see within 30 feet of me rolls a 1 on the d20 for an attack roll, an ability check, or a saving throw, I can use my reaction to let the ally reroll the die. The ally must use the new roll.", action : [["reaction", ""]] }; FeatsList["critter friend-ua"] = { name : "Critter Friend", source : [["UA:FR", 1]], prerequisite : "Being a Forest Gnome", prereqeval : function(v) { return CurrentRace.known.indexOf('forest gnome') !== -1; }, descriptionFull : "Your friendship with animals mystically deepens. You gain the following benefits:\n \u2022 You gain proficiency in the Animal Handling skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 You learn the Speak with Animals spell and can cast it at will, without expending a spell slot. You also learn the Animal Friendship spell, and you can cast it once with this feat, without expending a spell slot. You regain the ability to cast it in this way when you finish a long rest. Intelligence is your spellcasting ability for these spells.", description : "I gain expertise with Animal Handling, or proficiency if I didn't have that already. I can cast Speak With Animals and Animal Friendship without using a spell slot. I can cast each of these spells like this once per long rest. Intelligence is my spellcasting ability for these.", skills : [["Animal Handling", "increment"]], spellcastingBonus : [{ name : "Once per long rest", spellcastingAbility : 4, spells : ["speak with animals"], selection : ["speak with animals"], firstCol : 'oncelr' }, { name : "Once per long rest", spells : ["animal friendship"], selection : ["animal friendship"], firstCol : 'oncelr' }] }; FeatsList["dragon fear-ua"] = { name : "Dragon Fear", source : [["UA:FR", 2]], prerequisite : "Being a Dragonborn", prereqeval : function(v) { return CurrentRace.known.indexOf('dragonborn') !== -1; }, descriptionFull : "When angered, you radiate menace. You gain the following benefits:\n \u2022 Increase your Strength or Charisma score by 1, to a maximum of 20.\n \u2022 Instead of exhaling destructive energy, you can roar and expend a use of your breath weapon to force each creature of your choice within 30 feet of you to make a Wisdom saving throw (DC 8 + your proficiency bonus + your Charisma modifier). A target automatically succeeds if it can't hear or see you. On a failed save, a target becomes frightened for 1 minute. If the frightened target takes any damage, it can repeat the saving throw, ending the effect on itself on a success.", calculate : "event.value = 'I can expend a Breath Weapon use to roar instead. Each creature of my choice within 30 ft that can see and hear me must make a DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Cha Mod'))) + ' Wis save (8 + Prof Bonus + Cha mod) or be frightened for 1 min. It can repeat the save whenever it takes damage. [+1 Str or Cha]';", scorestxt : "+1 Strength or Charisma", action : [['action', 'Breath Weapon or Dragon Fear', 'Breath Weapon']] }; FeatsList["dragon hide-ua"] = { name : "Dragon Hide", source : [["UA:FR", 2]], prerequisite : "Being a Dragonborn", prereqeval : function(v) { return CurrentRace.known.indexOf('dragonborn') !== -1; }, descriptionFull : "You inherited the might and majesty of your dragon ancestors. You gain the following benefits:\n \u2022 Increase your Strength or Charisma score by 1, to a maximum of 20.\n \u2022 You grow retractable claws from the tips of your fingers. Extending or retracting the claws requires no action. The claws are natural weapons, which you can use to make unarmed strikes. If you hit with them, you deal slashing damage equal to 1d4 + your Strength modifier, instead of the bludgeoning damage normal for an unarmed strike.\n \u2022 Your scales harden; you gain a +1 bonus to AC while you aren't wearing armor.", description : "I gain retractable claws that I can retract or extend, requiring no action. While extended, my unarmed strikes deal 1d4 slashing damage. My scales harden, giving me a +1 bonus to AC when I'm not wearing armor. [+1 Strength or Charisma]", scorestxt : "+1 Strength or Charisma", weaponOptions : [{ baseWeapon : "unarmed strike", regExpSearch : /^(?=.*(retractable|dragon))(?=.*claw).*$/i, name : "Retractable Claws", source : [["UA:FR", 2]], damage : [1, 4, "slashing"], selectNow : true }], extraAC : { mod : 1, text : "I gain a +1 bonus to AC while I'm not wearing armor.", stopeval : function (v) { return v.wearingArmor; } } }; FeatsList["dragon wings-ua"] = { name : "Dragon Wings", source : [["UA:FR", 2]], prerequisite : "Being a Dragonborn", prereqeval : function(v) { return CurrentRace.known.indexOf('dragonborn') !== -1; }, descriptionFull : "You sprout draconic wings. With your wings, you have a flying speed of 20 feet if you aren't wearing heavy armor and aren't exceeding your carrying capacity.", description : "I sprout draconic wings. With my wings, I have a flying speed of 20 feet if I am not wearing heavy armor and I am not exceeding my carrying capacity or encumbered.", speed : { fly : { spd : 20, enc : 0 } } }; FeatsList["drow high magic-ua"] = { name : "Drow High Magic", source : [["UA:FR", 2]], prerequisite : "Being a Drow (Dark Elf)", prereqeval : function(v) { return CurrentRace.known.indexOf('dark elf') !== -1; }, descriptionFull : "You learn more of the spells typical for your people. You learn Detect Magic and can cast it at will, without expending a spell slot. You also learn Levitate and Dispel Magic, each of which you can cast once without expending a spell slot. You regain the ability to cast the spell in this way when you finish a long rest. Charisma is your spellcasting ability for these spells.", description : "I can cast Detect Magic at will, without expending a spell slot. I can also cast Levitate and Dispel Magic without expending a spell slot, but each only once per long rest. Charisma is my spellcasting ability for these three spells.", spellcastingBonus : [{ name : "At will", spellcastingAbility : 6, spells : ["detect magic"], selection : ["detect magic"], firstCol : 'atwill' }, { name : "Once per long rest", spells : ["levitate"], selection : ["levitate"], firstCol : 'oncelr' }, { name : "Once per long rest", spells : ["dispel magic"], selection : ["dispel magic"], firstCol : 'oncelr' }] }; FeatsList["dwarf resilience-ua"] = { name : "Dwarf Resilience", source : [["UA:FR", 2]], prerequisite : "Being a Dwarf", prereqeval : function(v) { return CurrentRace.known.indexOf('dwarf') !== -1; }, descriptionFull : "You have the blood of dwarf heroes flowing through your veins. You gain the following benefits:\n \u2022 Increase your Constitution score by 1, to a maximum of 20.\n \u2022 Whenever you take the Dodge action in combat, you can spend one Hit Die to heal yourself. Roll the die, add your Constitution modifier, and regain a number of hit points equal to the total (minimum of 1).", description : "Whenever I take the Dodge action in combat, I can spend one Hit Die to heal myself. I roll the die, add my Constitution modifier, and regain a number of hit points equal to the total (minimum of 1). [+1 Constitution]", scores : [0, 0, 1, 0, 0, 0] }; FeatsList["elven accuracy-ua"] = { name : "Elven Accuracy", source : [["UA:FR", 2]], prerequisite : "Being an Elf or a Half-Elf", prereqeval : function(v) { return (/elf|eladrin|avariel|grugach|shadar-kai/i).test(CurrentRace.known); }, descriptionFull : "You have uncanny aim. You gain the following benefits:\n \u2022 Increase your Dexterity score by 1, to a maximum of 20.\n \u2022 Whenever you have advantage on an attack roll, you can reroll one of the dice once.", description : "Whenever I have advantage on an attack roll, I can reroll one of the dice once. [+1 Dexterity]", scores : [0, 1, 0, 0, 0, 0] }; FeatsList["everybody-ua's friend"] = { name : "Everybody's Friend", source : [["UA:FR", 2]], prerequisite : "Being a Half-Elf", prereqeval : function(v) { return (/^(?=.*half)(?=.*elf).*$/i).test(CurrentRace.known); }, descriptionFull : "You develop your magnetic personality to ease your way through the world. You gain the following benefits:\n \u2022 You gain proficiency in the Deception and Persuasion skills. If you're already proficient in either skill, your proficiency bonus is doubled for any check you make with that skill.", description : "I gain expertise with Deception and Persuasion, or proficiency with them if I didn't have that already. [+1 Charisma]", scores : [0, 0, 0, 0, 0, 1], skills : [["Deception", "increment"], ["Persuasion", "increment"]] }; FeatsList["fade away-ua"] = { name : "Fade Away", source : [["UA:FR", 2]], prerequisite : "Being a Gnome", prereqeval : function(v) { return CurrentRace.known.indexOf('gnome') !== -1; }, descriptionFull : "You can draw on your magical heritage to escape danger. You gain the following benefits:\n \u2022 Increase your Intelligence score by 1, to a maximum of 20.\n \u2022 When you take damage, you can use a reaction to magically become invisible until the end of your next turn or until you attack, deal damage, or force someone to make a saving throw. Once you use this ability, you can't do so again until you finish a short or long rest.", description : "As a reaction when I take damage, I can magically become invisible until the end of my next turn or until I attack, deal damage, or force someone to make a saving throw. Once I do this, I can't do so again until I finish a short rest. [+1 Intelligence]", scores : [0, 0, 0, 1, 0, 0], action : [["reaction", ""]], usages : 1, recovery : "short rest" }; FeatsList["fey teleportation-ua"] = { name : "Fey Teleportation", source : [["UA:FR", 3]], prerequisite : "Being a High Elf", prereqeval : function(v) { return CurrentRace.known.indexOf('high elf') !== -1; }, descriptionFull : "Drawing on your fey ancestry, you have learned how to teleport. You gain the following benefits:\n \u2022 Increase your Intelligence score by 1, to a maximum of 20.\n \u2022 You learn the Misty Step spell and can cast it once without expending a spell slot. You regain the ability to cast it in this way when you finish a short or long rest. Intelligence is your spellcasting ability for this spell.", description : "I can cast Misty Step without using a spell slot. I can do so once per short rest. Intelligence is my spellcasting ability for this spell. [+1 Intelligence]", scores : [0, 0, 0, 1, 0, 0], spellcastingBonus : [{ name : "Once per short rest", spellcastingAbility : 4, spells : ["misty step"], selection : ["misty step"], firstCol : 'oncesr' }], usages : 1, recovery : "short rest" }; FeatsList["flames of phlegethos-ua"] = { name : "Flames of Phlegethos", source : [["UA:FR", 3]], prerequisite : "Being a Tiefling", prereqeval : function(v) { return CurrentRace.known.indexOf('tiefling') !== -1; }, descriptionFull : "You learn to call on hellfire to serve your commands. You gain the following benefits:\n \u2022 Increase your Intelligence or Charisma score by 1, to a maximum of 20.\n \u2022 When you roll fire damage for a spell you cast, you can reroll any roll of 1 on the fire damage dice, but you must use the new roll, even if it is another 1.\n \u2022 Whenever you cast a spell that deals fire damage, you can cause flames to wreathe you until the end of your next turn. The flames don't harm you or your possessions, and they shed bright light out to 30 feet and dim light for an additional 30 feet. While the flames are present, any creature within 5 feet of you that hits you with a melee attack takes 1d4 fire damage.", description : "When I cast a fire damage spell, I can reroll any 1 on fire damage dice. I can then sheathe myself in flame until my next turn ends. These shed bright light in 30 ft, dim light in 30 ft and cause any within 5 ft that hit me in melee take 1d4 fire damage. [+1 Int or Cha]", scorestxt : "+1 Intelligence or Charisma" }; FeatsList["grudge-bearer-ua"] = { name : "Grudge-Bearer", source : [["UA:FR", 3]], prerequisite : "Being a Dwarf", prereqeval : function(v) { return CurrentRace.known.indexOf('dwarf') !== -1; }, descriptionFull : "You have a deep hatred for a particular kind of creature. Choose your foes, a type of creature to bear the burden of your wrath: aberrations, beasts, celestials, constructs, dragons, elementals, fey, fiends, giants, monstrosities, oozes, plants, or undead. Alternatively, you can choose two races of humanoid (such as gnolls and orcs). You gain the following benefits:\n \u2022 Increase your Strength, Constitution, or Wisdom score by 1, to a maximum of 20.\n \u2022 During the first round of any combat against your chosen foes, your attack rolls against any of them have advantage.\n \u2022 When any of your chosen foes makes an opportunity attack against you, it makes the attack roll with disadvantage.\n \u2022 Whenever you make an Intelligence (Arcana, History, Nature, or Religion) check to recall information about your chosen foes, you add double your proficiency bonus to the check, even if you're not normally proficient.", description : "My hatred for a creature type gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana, History, Nature, and Religion checks. [+1 Str, Con, or Wis]", scorestxt : "+1 Strength, Constitution, or Wisdom", choices : ["2 Humanoids", "Aberrations", "Beasts", "Celestials", "Constructs", "Dragons", "Elementals", "Fey", "Fiends", "Giants", "Monstrosities", "Oozes", "Plants", "Undead"], "2 humanoids" : { description : "My hatred for 2 humanoid races gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana/History/Nature/Religion checks. [+1 Str, Con, or Wis]" }, aberrations : { description : "My hatred for aberrations gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana, History, Nature, and Religion checks. [+1 Str, Con, or Wis]" }, beasts : { description : "My hatred for beasts gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana, History, Nature, and Religion checks. [+1 Str, Con, or Wis]" }, celestials : { description : "My hatred for celestials gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana, History, Nature, and Religion checks. [+1 Str, Con, or Wis]" }, constructs : { description : "My hatred for constructs gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana, History, Nature, and Religion checks. [+1 Str, Con, or Wis]" }, dragons : { description : "My hatred for dragons gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana, History, Nature, and Religion checks. [+1 Str, Con, or Wis]" }, elementals : { description : "My hatred for elementals gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana, History, Nature, and Religion checks. [+1 Str, Con, or Wis]" }, fey : { description : "My hatred for fey gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana, History, Nature, and Religion checks. [+1 Str, Con, or Wis]" }, fiends : { description : "My hatred for fiends gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana, History, Nature, and Religion checks. [+1 Str, Con, or Wis]" }, giants : { description : "My hatred for giants gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana, History, Nature, and Religion checks. [+1 Str, Con, or Wis]" }, monstrosities : { description : "My hatred for monstrosities gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana, History, Nature, and Religion checks. [+1 Str, Con, or Wis]" }, oozes : { description : "My hatred for oozes gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana, History, Nature, and Religion checks. [+1 Str, Con, or Wis]" }, plants : { description : "My hatred for plants gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana, History, Nature, and Religion checks. [+1 Str, Con, or Wis]" }, undead : { description : "My hatred for undead gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana, History, Nature, and Religion checks. [+1 Str, Con, or Wis]" } }; FeatsList["human determination-ua"] = { name : "Human Determination", source : [["UA:FR", 3]], prerequisite : "Being a Human", prereqeval : function(v) { return CurrentRace.known.indexOf('human') !== -1; }, descriptionFull : "You are filled with a determination that can draw the unreachable within your reach. You gain the following benefits:\n \u2022 Increase one ability score of your choice by 1, to a maximum of 20.\n \u2022 When you make an attack roll, an ability check, or a saving throw, you can do so with advantage. Once you use this ability, you can't use it again until you finish a short or long rest.", description : "When I make an attack roll, an ability check, or a saving throw, I can do so with advantage. Once I use this ability, I can't do so again until I finish a short rest.\n[+1 to one ability score]", scorestxt : "+1 to one ability score of your choice", usages : 1, recovery : "short rest", additional : "attack/check/save" }; FeatsList["infernal constitution-ua"] = { name : "Infernal Constitution", source : [["UA:FR", 3]], prerequisite : "Being a Tiefling", prereqeval : function(v) { return CurrentRace.known.indexOf('tiefling') !== -1; }, descriptionFull : "Fiendish blood runs strong in you. You gain the following benefits:\n \u2022 Increase your Constitution score by 1, to a maximum of 20.\n \u2022 You have resistance to cold and poison damage.\n \u2022 You have advantage on saving throws against being poisoned.", description : "I have resistance to cold and poison damage and I have advantage on saving throws against being poisoned.\n[+1 Constitution]", scores : [0, 0, 1, 0, 0, 0], dmgres : ["Cold", "Poison"], savetxt : { adv_vs : ["poison"] } }; FeatsList["orcish aggression-ua"] = { name : "Orcish Aggression", source : [["UA:FR", 3]], prerequisite : "Being a Half-Orc", prereqeval : function(v) { return (/^(?=.*half)(?=.*orc).*$/i).test(CurrentRace.known); }, descriptionFull : "As a bonus action, you can move up to your speed toward an enemy of your choice that you can see or hear. You must end this move closer to the enemy than you started.", description : "As a bonus action, I can move up to my speed toward an enemy of my choice that I can see or hear. I must end this move closer to the enemy than I started.", action : [["bonus action", ""]] }; FeatsList["orcish fury-ua"] = { name : "Orcish Fury", source : [["UA:FR", 4]], prerequisite : "Being a Half-Orc", prereqeval : function(v) { return (/^(?=.*half)(?=.*orc).*$/i).test(CurrentRace.known); }, descriptionFull : "Your fury burns tirelessly. You gain the following benefits:\n \u2022 Increase your Strength or Constitution score by 1, to a maximum of 20.\n \u2022 When you hit with an attack made with a simple or martial weapon, you can roll one of the weapon's damage dice an additional time and add it as extra damage of the weapon's damage type. Once you use this ability, you can't use it again until you finish a short or long rest.\n \u2022 Immediately after you use your Relentless Endurance trait, you can use your reaction to make one weapon attack.", description : "Once per short rest, I can roll an extra damage die for an attack with a simple or martial weapon. In addition, Immediately after I use my Relentless Endurance trait, I can use my reaction to make one weapon attack. [+1 Strength or Constitution]", scorestxt : "+1 Strength or Constitution", action : [["reaction", " (after Relentless Endurance)"]], usages : 1, recovery : "short rest", additional : "extra damage" }; FeatsList["prodigy-ua"] = { name : "Prodigy", source : [["UA:FR", 4]], prerequisite : "Being a Half-Elf or a Human", prereqeval : function(v) { return (/human|^(?=.*half)(?=.*elf).*$/i).test(CurrentRace.known); }, descriptionFull : "You have a knack for learning new things. You gain the following benefits:\n \u2022 Increase one ability score of your choice by 1, to a maximum of 20.\n \u2022 You gain one skill proficiency of your choice, one tool proficiency of your choice, and fluency in one language of your choice.", description : "I gain one skill proficiency of my choice, one tool proficiency of my choice, fluency in one language of my choice, and +1 to one ability score of my choice. [+1 to one ability score]", scorestxt : "+1 to one ability score of your choice", skillstxt : "Choose any one skill", languageProfs : [1], toolProfs : [["Any tool", 1]] }; FeatsList["second chance-ua"] = { name : "Second Chance", source : [["UA:FR", 4]], prerequisite : "Being a Halfling", prereqeval : function(v) { return CurrentRace.known.indexOf('halfling') !== -1; }, descriptionFull : "You have a knack for learning new things. You gain the following benefits:\n \u2022 Increase your Dexterity, Constitution, or Charisma score by 1, to a maximum of 20.\n \u2022 When a creature you can see hits you with an attack roll, you can use your reaction to force that creature to reroll. Once you use this ability, you can't do so again until you finish a short or long rest.", description : "When a creature I can see hits me with an attack roll, I can use my reaction to force that creature to reroll. Once I use this ability, I can't do so again until I finish a short rest.\n[+1 Dexterity, Constitution, or Charisma]", scorestxt : "+1 Dexterity, Constitution, or Charisma", action : [["reaction", ""]], usages : 1, recovery : "short rest" }; FeatsList["squat nimbleness-ua"] = { name : "Squat Nimbleness", source : [["UA:FR", 4]], prerequisite : "Being a Dwarf, Gnome, or Halfling", prereqeval : function(v) { return (/dwarf|gnome|halfling/i).test(CurrentRace.known); }, descriptionFull : "You are uncommonly nimble for your race. You gain the following benefits:\n \u2022 Increase your Strength or Dexterity score by 1, to a maximum of 20.\n \u2022 Increase your walking speed by 5 feet.\n \u2022 You gain proficiency in the Acrobatics or Athletics skill. If you're already proficient in the skill, your proficiency bonus is doubled for any check you make with it.", description : "My walking speed increases by 5 ft. I gain proficiency in the Acrobatics or Athletics skill. If I'm already proficient in the chosen skill, I gain expertise with it instead.\n[+1 Strength or Dexterity]", scorestxt : "+1 Strength or Dexterity", skillstxt : "Proficiency with Acrobatics or Athletics; or gain Expertise if already proficient", speed : { walk : {spd : "+5", enc : "+5" } } }; FeatsList["wonder maker-ua"] = { name : "Wonder Maker", source : [["UA:FR", 4]], prerequisite : "Being a Rock Gnome", prereqeval : function(v) { return CurrentRace.known.indexOf('rock gnome') !== -1; }, descriptionFull : "You master the tinker techniques of your people. You gain the following benefits:\n \u2022 When you make a check using your proficiency with tinker's tools, you add double your proficiency bonus to the check.\n \u2022 When you make a device with your Tinker trait, you have the following additional options for what you make:\n \u2022 " + toUni("Alarm") + ". This device senses when a creature moves to within 15 feet of it without speaking aloud a password chosen when you create it. One round after a creature moves into range, the alarm makes a shrill ringing that lasts for 1 minute and can be heard from up to 300 feet away.\n \u2022 " + toUni("Calculator") + ". This device makes doing sums easy.\n \u2022 " + toUni("Lifter") + ". This device can be used as a block and tackle, allowing its user to hoist five times the weight the user can normally lift.\n \u2022 " + toUni("Timekeeper") + ". This pocket watch keeps accurate time.\n \u2022 " + toUni("Weather Sensor") + ". When used as an action, this device predicts weather conditions in a 1-mile radius over the next 4 hours, showing one symbol (clouds, sun/moon, rain, or snow) for each hour.", description : "I gain expertise with Tinker's Tools. I get additional Tinker options: Alarm (audible to 300 ft for 1 min), Calculator, Lifter (as block and tackle that multiplies max lift weight by 5), Timekeeper (pocket watch), Weather Sensor (predict for 1-mile, 4 hours) [+1 Dex or Int]", scorestxt : "+1 Dexterity or Intelligence", eval : function () { if ((/tinker.*tool/i).test(What('Too Text'))) { Checkbox('Too Exp', true); }; }, removeeval : function () { if ((/tinker.*tool/i).test(What('Too Text'))) { Checkbox('Too Exp', false); }; } }; FeatsList["wood elf magic-ua"] = { name : "Wood Elf Magic", source : [["UA:FR", 4]], prerequisite : "Being a Wood Elf", prereqeval : function(v) { return CurrentRace.known.indexOf('wood elf') !== -1; }, descriptionFull : "You learn the magic of the primeval woods. You learn one druid cantrip of your choice. You also learn Longstrider and Pass Without Trace, each of which you can cast once without expending a spell slot. You regain the ability to cast the spell in this way when you finish a long rest. Wisdom is your spellcasting ability for these spells.", description : "I learn a druid cantrip. In addition, I can cast Longstrider and Pass Without Trace, without expending a spell slot, but each only once per long rest. Wisdom is my spellcasting ability for these three spells.", spellcastingBonus : [{ name : "Druid Cantrip", spellcastingAbility : 5, "class" : "druid", level : [0, 0], firstCol : 'atwill' }, { name : "Once per long rest", spells : ["longstrider"], selection : ["longstrider"], firstCol : 'oncelr' }, { name : "Once per long rest", spells : ["pass without trace"], selection : ["pass without trace"], firstCol : 'oncelr' }] }; // ua_20170501_Revised-Subclasses.js // This file adds the content from the Unearthed Arcana: Revised Subclasses article to MPMB's Character Record Sheet // Define the source SourceList["UA:RS"] = { name : "Unearthed Arcana: Revised Subclasses", abbreviation : "UA:RS", group : "Unearthed Arcana", url : "https://media.wizards.com/2017/dnd/downloads/UA-RevisedSubclasses.pdf", date : "2017/05/01" }; // Add 5 subclasses from previous Unearthed Arcana articles: 1 for the Barbarian, 1 for the Bard, 1 for the Fighter, 1 for the Monk, and 1 for the Sorcerer AddSubClass("barbarian", "ancestral guardian2-ua", { regExpSearch : /^(?=.*ancestral)(?=.*guardian).*$/i, subname : "Path of the Ancestral Guardian", subnameShort: "Ancestral Guardian", fullname : "Ancestral Guardian", source : [["UA:RS", 1]], features : { "subclassfeature3" : { name : "Ancestral Protectors", source : [["UA:RS", 1]], minlevel : 3, description : desc([ "While raging, the first creature I hit with an attack on my turn becomes distracted", "While distracted, it has disadvantage on attack rolls that don't target me", "In addition, everybody but me counts as having resistance to all of the target's attacks", "This lasts until the start of my next turn, or until my rage ends" ]) }, "subclassfeature6" : { name : "Spirit Shield", source : [["UA:RS", 1]], minlevel : 6, description : desc([ "As a reaction while raging when an ally I see within 30 ft is damaged, I can reduce it", "My guardian spirits reduce the damage by an amount equal to the roll of the dice" ]), additional : levels.map(function (n) { return n < 6 ? "" : (n < 10 ? 2 : n < 14 ? 3 : 4) + "d8 damage reduced"; }), action : [["reaction", ""]] }, "subclassfeature10" : { name : "Consult the Spirits", source : [["UA:RS", 1]], minlevel : 10, description: desc("Through consulting my ancestral spirits, I can cast Clairvoyance without a spell slot"), spellcastingBonus : [{ name : "Consult the Spirits", spells : ["clairvoyance"], selection : ["clairvoyance"], firstCol : 'oncesr' }], usages : 1, recovery : "short rest" }, "subclassfeature14" : { name : "Vengeful Ancestors", source : [["UA:RS", 1]], minlevel : 14, description: desc("Whenever I use Spirit Shield to reduce damage, the attacker takes the reduced damage") } } }); AddSubClass("bard", "college of swords2-ua", { regExpSearch : /^(?=.*(college|bard|minstrel|troubadour|jongleur))(?=.*\bswords?\b).*$/i, subname : "College of Swords", subnameShort: "Swords", source : [["UA:RS", 1]], features : { "subclassfeature3" : { name : "Bonus Proficiencies", source : [["UA:RS", 2]], minlevel : 3, description : desc([ "I gain proficiency with medium armor and scimitars", "I can use a simple or martial melee weapon that I'm proficient with as spellcasting focus" ]), armorProfs : [false, true, false, false], weaponProfs : [false, false, ["scimitar"]] }, "subclassfeature3.1" : { name : "Fighting Style", source : [["UA:RS", 2]], minlevel : 3, description: desc('Select a Fighting Style for the college of swords using the "Choose Feature" button above'), choices : ["Dueling", "Two-Weapon Fighting"], "dueling" : FightingStyles.dueling, "two-weapon fighting" : FightingStyles.two_weapon }, "subclassfeature3.2" : { name : "Blade Flourish", source : [["UA:RS", 2]], minlevel : 3, description : desc([ "As an action, I can make one melee weapon attack and use one flourish option below", "In addition, I gain +10 ft to my walking speed until the end of the current turn", " - Defensive Flourish [one Bardic Inspiration die]", " I add the result of the die to my AC until the start of my next turn", " - Slashing Flourish [one Bardic Inspiration die]", " If the attack hits, I can use a die to deal damage to creatures next to the target", " All creatures within 5 ft of the target take the result of the die in damage", " - Mobile Flourish [one Bardic Inspiration die]", " If the attack hits, I can use a die to push the target back 5 + the die result in feet", " After this, I can use my reaction to move my speed to a space next to the target" ]), action : [["action", ""]] }, "subclassfeature6" : { name : "Cunning Flourish", source : [["UA:RS", 2]], minlevel : 6, description: desc("When I take the Blade Flourish action, I can attack twice, but still only use one flourish") }, "subclassfeature14" : { name : "Master Flourish", source : [["UA:RS", 2]], minlevel : 14, description: desc("When I do a Blade Flourish, I can use a d6 instead of expending a Bardic Inspiration die") } } }); AddSubClass("fighter", "arcane archer2-ua", { regExpSearch : /^(?=.*arcane)(?=.*archer).*$/i, subname : "Arcane Archer", source : [["UA:RS", 2]], fullname : "Arcane Archer", abilitySave : 4, features : { "subclassfeature3" : { name : "Magic Arrow", source : [["UA:RS", 3]], minlevel : 3, description : desc([ "Whenever I fire a nonmagical arrow from a short- or longbow I can make it magical", "This magical arrow gives a +1 bonus to the attack and damage rolls for the one attack" ]), calcChanges : { atkCalc : [ function (fields, v, output) { if ((/longbow|shortbow/i).test(v.baseWeaponName) && !v.theWea.isMagicWeapon) output.magic += 1; }, "Any longbow or shortbow that doesn't include a magic bonus in its name gets a +1 magical bonus to damage and to hit as any arrows fired with it are automatically made magical." ] } }, "subclassfeature3.1" : { name : "Arcane Shot", source : [["UA:RS", 3]], minlevel : 3, description : desc([ "I can unleash magical effects when I fire a magic arrow from a short- or longbow", "I can use this once per turn as part of the Attack action, after an attack hits", "I know a number of Arcane Shot Options and learn additional at certain levels", 'Use the "Choose Feature" button above to add Arcane Shots Options to the third page' ]), usages : 2, recovery : "short rest", additional : levels.map( function(n) { return n < 3 ? "" : (n < 7 ? 2 : n < 10 ? 3 : n < 15 ? 4 : n < 18 ? 5 : 6) + " options known"; }), extraname : "Arcane Shot Option", extrachoices : ["Banishing Arrow [Abjuration]", "Brute Bane Arrow [Necromancy]", "Bursting Arrow [Evocation]", "Grasping Arrow [Conjuration]", "Mind-Scrambling Arrow [Enchantment]", "Piercing Arrow [Transmutation]", "Seeking Arrow [Divination]", "Shadow Arrow [Illusion]"], extraTimes : levels.map(function (n) { return n < 3 ? 0 : n < 7 ? 2 : n < 10 ? 3 : n < 15 ? 4 : n < 18 ? 5 : 6; }), "banishing arrow [abjuration]" : { name : "Banishing Arrow [Abjuration]", source : [["UA:RS", 3]], description : desc([ "The target makes a Cha save or is banished to the Feywild until the end of its next turn", "While banished, its speed is 0 and is incapacitated; It re-appearing in the same spot", "When I reach 18th level, this Arcane Shot Option also does an extra 2d6 force damage" ]), additional : levels.map( function(n) { return n < 18 ? "" : "+2d6 force damage"; }) }, "brute bane arrow [necromancy]" : { name : "Brute Bane Arrow [Necromancy]", source : [["UA:RS", 3]], description : desc([ "The target takes extra necrotic damage and must make a Constitution save", "If failed, the damage of the target's attacks is halved until the start of my next turn" ]), additional : levels.map( function(n) { return n < 3 ? "" : "+" + (n < 18 ? 2 : 4) + "d6 necrotic damage"; }) }, "bursting arrow [evocation]" : { name : "Bursting Arrow [Evocation]", source : [["UA:RS", 3]], description: desc("The target, in addition to the shot, and all creatures within 10 ft of it take damage"), additional : levels.map( function(n) { return n < 3 ? "" : "+" + (n < 18 ? 2 : 4) + "d6 force damage"; }) }, "grasping arrow [conjuration]" : { name : "Grasping Arrow [Conjuration]", source : [["UA:RS", 3]], description : desc([ "The target takes extra poison damage as brambles wrap around it for 1 minute", "The brambles give it -10 ft speed and do it slashing damage every round it moves", "These can be removed by it or another as an action with Strength (Athletics) vs. my DC" ]), additional : levels.map( function(n) { return n < 3 ? "" : (n < 18 ? 2 : 4) + "d6 poison/slash. damage"; }) }, "mind-scrambling arrow [enchantment]" : { name : "Mind-Scrambling Arrow [Enchantment]", source : [["UA:RS", 4]], description : desc([ "The target takes extra psychic damage and must succeed on a Wisdom save", "If failed, it can't attack or harm one of my allies within 30 ft of it that I choose", "This lasts until the start of my next turn or until the chosen ally harms the target" ]), additional : levels.map( function(n) { return n < 3 ? "" : "+" + (n < 18 ? 2 : 4) + "d6 damage"; }) }, "piercing arrow [transmutation]" : { name : "Piercing Arrow [Transmutation]", source : [["UA:RS", 4]], description : desc([ "With this I don't roll for the attack, but shoot the arrow in a 30-ft long, 1-ft wide line", "It passes through objects, ignoring cover, but all creatures in the area take damage", "The damage is the same as a normal hit from my attack, plus extra piercing damage", "A creature can make a Dexterity save to reduce the damage by half" ]), additional : levels.map( function(n) { return n < 3 ? "" : "+" + (n < 18 ? 1 : 2) + "d6 piercing damage"; }) }, "seeking arrow [divination]" : { name : "Seeking Arrow [Divination]", source : [["UA:RS", 4]], description : desc([ "With this I don't roll for the attack, but I choose a target I have seen in the last minute", "The seeking arrow moves around corners, obstacles, and ignores cover to hit the target", "It is hit if it is within the weapon's range and there is a path for the arrow to get to it", "The target takes the full damage of the attack plus extra force damage", "It can make a Dexterity save to reduce the damage by half; If failed, I know its location" ]), additional : levels.map( function(n) { return n < 3 ? "" : "+" + (n < 18 ? 1 : 2) + "d6 force damage"; }) }, "shadow arrow [illusion]" : { name : "Shadow Arrow [Illusion]", source : [["UA:RS", 4]], description : desc([ "The target takes extra psychic damage and must succeed on a Wisdom save", "If failed, the target can't see anything beyond 5 ft until the end of my next turn" ]), additional : levels.map( function(n) { return n < 3 ? "" : "+" + (n < 18 ? 2 : 4) + "d6 psychic damage"; }) } }, "subclassfeature3.2" : { name : "Arcane Archer's Lore", source : [["UA:RS", 3]], minlevel : 3, description: desc("I gain proficiency with either the Arcana or Nature skill"), skillstxt : "Choose one from: Arcana or Nature" }, "subclassfeature7" : { name : "Curving Shot", source : [["UA:RS", 3]], minlevel : 7, description : desc([ "When I miss with a magic arrow, I can use a bonus action to redirect the attack", "I reroll the attack against a different target within 60 ft of the original target" ]), action : [["bonus action", ""]] }, "subclassfeature15" : { name : "Ever-Ready Shot", source : [["UA:RS", 3]], minlevel : 15, description: desc("I regain one use of Arcane Shot if I have no more remaining when I roll initiative") } } }); AddSubClass("monk", "way of the kensei2-ua", { regExpSearch : /kensei/i, subname : "Way of the Kensei", subnameShort: "Kensei", source : [["UA:RS", 4]], features : { "subclassfeature3" : { name : "Path of the Kensei", source : [["UA:RS", 4]], minlevel : 3, description : desc([ "Some weapons, that don't have the heavy or special property, are kensei weapons for me", "At least one ranged and one melee weapon, more at higher levels (longbow does qualify)", "With these: proficient, count as a monk weapons, special bonuses while holding them:", " - If I do an unarmed strike during an Attack action, +2 AC until my next turn starts", " - As a bonus action, ranged kensei weapon attacks deal +1d4 damage in current turn" ]), action : [["bonus action", " (with ranged)"]], additional : levels.map( function(n) { return n < 3 ? "" : (n < 6 ? 2 : n < 11 ? 3 : n < 17 ? 4 : 5) + " kensei weapons"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.monk && classes.known.monk.level > 2 && !v.isSpell && !v.theWea.monkweapon && (/kensei/i).test(v.WeaponTextName) && !v.theWea.special && (!(/heavy|special/i).test(fields.Description) || v.baseWeaponName === 'longbow')) { v.theWea.monkweapon = true; v.theWea.kenseiweapon = true; if (v.isRangedWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'As bonus action with Attack action, +1d4 damage'; }; fields.Proficiency = true; }; }, "If I include the word 'Kensei' in the name of a weapon that doesn't have the Heavy or Special attribute, or that is a longbow, that weapon gains the same benefits as any other 'Monk Weapon'.\nIn addition, with ranged 'Kensei Weapons', I can take a bonus action to have that hit, and any other hit after that as part of the same action, do +1d4 damage." ] } }, "ki-empowered strikes" : { name : "One with the Blade", source : [["UA:RS", 5]], minlevel : 6, description: desc("My unarmed strikes and kensei weapon attacks count as magical"), calcChanges : { atkAdd : [ function (fields, v) { if (!v.isSpell && !v.thisWeapon[1] && !v.theWea.isMagicWeapon && !(/counts as( a)? magical/i).test(fields.Description) && (v.baseWeaponName === "unarmed strike" || v.theWea.kenseiweapon)) { fields.Description += (fields.Description ? '; ' : '') + 'Counts as magical'; }; }, "My unarmed strikes and any Kensei Weapons count as magical for overcoming resistances and immunities." ] }, "precise strike" : { name : "Precise Strike", extraname : "Way of the Kensei 6", source : [["UA:RS", 5]], description: desc("Once per turn when I hit with a kensei weapon, I can do a martial arts die extra damage"), additional : "1 ki point" }, "sharpen the blade" : { name : "Sharpen the Blade", extraname : "Way of the Kensei 11", source : [["UA:RS", 5]], description : desc([ "As a bonus action, I can grant my kensei weapon a bonus to attack and damage rolls", "This bonus is equal to the number of ki points I spend; It lasts for 1 minute" ]), additional : "1 to 3 ki points", action : [["bonus action", ""]] }, autoSelectExtrachoices : [{ extrachoice : "precise strike" }, { extrachoice : "sharpen the blade", minlevel : 11 }] }, "subclassfeature17" : { name : "Unerring Accuracy", source : [["UA:RS", 5]], minlevel : 17, description: desc("Once per turn, if I miss a monk weapon attack on my turn, I can reroll the attack roll") } } }); AddSubClass("sorcerer", "favoured soul-uars", { regExpSearch : /^(?=.*favou?red)(?=.*soul).*$/i, subname : "Favored Soul", source : [["UA:RS", 5]], fullname : "Favored Soul", spellcastingList : { "class" : ["cleric", "sorcerer"] }, features : { "subclassfeature1" : { name : "Divine Magic", source : [["UA:RS", 5]], minlevel : 1, description : desc([ "When I select my 1st level or higher spells, I can also pick spells from the cleric spell list", "These cleric spells count as sorcerer spells for me", "I also learn Cure Wounds, which doesn't count against my number of spells known" ]), spellcastingBonus : [{ name : "Divine Magic", spells : ["cure wounds"], selection : ["cure wounds"] }] }, "subclassfeature1.2" : { name : "Favored by the Gods", source : [["UA:RS", 5]], minlevel : 1, description: desc("If I fail a saving throw or miss with an attack roll, I can add 2d4 to the total"), recovery : "short rest", usages : 1 }, "subclassfeature6" : { name : "Empowered Healing", source : [["UA:RS", 5]], minlevel : 6, additional: "1 sorcery point", description : desc([ "When I roll dice for healing with one of my sorcerer spells, I can reroll them once", "By spending 1 sorcery point, I can reroll any number of those dice for that spell" ]) }, "subclassfeature14" : { name : "Angelic Form", source : [["UA:RS", 5]], minlevel : 14, description : desc([ 'Choose an otherworldly quality using the "Choose Feature" button above', "As a bonus action, I can manifest a pair of spectral wings that give me 30 ft fly speed", "These wings last until I become incapacitated or I dismiss them as a bonus action" ]), choices : ["Beautiful", "Youthful", "Kind", "Imposing"], "beautiful" : { name : "Angelic Form: Beautiful", description : desc([ "My appearance takes on an otherworldly quality of beauty", "As a bonus action, I can manifest a pair of spectral wings that give me 30 ft fly speed", "These wings last until I become incapacitated or I dismiss them as a bonus action" ]) }, "youthful" : { name : "Angelic Form: Youthful", description : desc([ "My appearance takes on an otherworldly quality of youthfulness", "As a bonus action, I can manifest a pair of spectral wings that give me 30 ft fly speed", "These wings last until I become incapacitated or I dismiss them as a bonus action" ]) }, "kind" : { name : "Angelic Form: Kind", description : desc([ "My appearance takes on an otherworldly quality of kindness", "As a bonus action, I can manifest a pair of spectral wings that give me 30 ft fly speed", "These wings last until I become incapacitated or I dismiss them as a bonus action" ]) }, "imposing" : { name : "Angelic Form: Imposing", description : desc([ "My appearance takes on an otherworldly quality of imposingness", "As a bonus action, I can manifest a pair of spectral wings that give me 30 ft fly speed", "These wings last until I become incapacitated or I dismiss them as a bonus action" ]) }, action : [["bonus action", " Wings"]], speed : { fly : { spd : 30, enc : 20 } } }, "subclassfeature18" : { name : "Unearthly Recovery", source : [["UA:RS", 6]], minlevel : 18, description : desc([ "As a bonus action when I have less than half of my max HP remaining, I can heal myself", "I regain a number of HP equal to half my hit point maximum" ]), action : [["bonus action", ""]], recovery : "long rest", usages : 1 } } }); // ua_20170605_Revised-Class-Options.js // This file adds the content from the Unearthed Arcana: Revised Class Options article to MPMB's Character Record Sheet // Define the source SourceList["UA:RCO"] = { name : "Unearthed Arcana: Revised Class Options", abbreviation : "UA:RCO", group : "Unearthed Arcana", url : "https://media.wizards.com/2017/dnd/downloads/June5UA_RevisedClassOptv1.pdf", date : "2017/06/05" }; // Adds 4 revised subclasses from previous Unearthed Arcana articles: 1 for the Druid, 1 for the Fighter, 1 for the Paladin, and 1 for the Warlock AddSubClass("druid", "circle of the shepherd2-ua", { regExpSearch : /^(?=.*(druid|shaman))(?=.*shepherd).*$/i, subname : "Circle of the Shepherd", subnameShort: "Shepherd", source : [["UA:RCO", 1]], features : { "subclassfeature2" : { name : "Speech of the Woods", source : [["UA:RCO", 1]], minlevel : 2, description : desc([ "I can talk with beasts, they understand me and I them, to the limit of their intelligence", "This doesn't automatically make me friends with all beasts; Additionally, I learn Sylvan" ]), languageProfs : ["Sylvan"] }, "subclassfeature2.1" : { name : "Spirit Totem", source : [["UA:RCO", 1]], minlevel : 2, description : desc([ "As a bonus action, I can summon, or move, a spirit to a point I can see within 60 ft", "The spirit is a Bear, Hawk, or Unicorn (see below), which has a 30-ft radius aura", "It is incorporeal, immobile, doesn't counts as a creature or object, and persists for 1 min", "\u2022 Bear: my allies in the area and I instantly gain 5 + my druid level in temp HP", " While in the aura, my allies and I gain advantage on Strength checks and saves", "\u2022 Hawk: As a reaction, I can grant advantage on an attack vs. a target in the aura", "\u2022 Unicorn: my allies and I gain advantage on ability checks to detect targets in the aura", " If I cast a healing spell with a spell slot, allies in the aura heal my druid level in HP" ]), usages : 1, recovery : "short rest", action : [["bonus action", ""]] }, "subclassfeature6" : { name : "Mighty Summoner", source : [["UA:RCO", 2]], minlevel : 6, description: desc("Beasts or Fey I summon with spells get +2 HP per HD and their attacks count as magical"), calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { switch (spellKey) { case "conjure animals" : case "conjure fey" : spellObj.description += "; each +2 HP/HD, magical natural attacks"; return true; case "conjure woodland beings" : spellObj.description = spellObj.description.replace(/fey.*/, "fey; obeys commands if its align. agrees; breaks free if break conc.; +2 HP/HD, magic atks"); return true; } }, "When I use a spell that restores hit points, it restores an additional 2 + the level of the spell slot (or spell slot equivalent) used to cast the spell." ] } }, "subclassfeature10" : { name : "Guardian Spirit", source : [["UA:RCO", 2]], minlevel : 10, description: desc("When a Beast or Fey that I summoned ends its turn in my Spirit Totem aura, it heals"), additional : levels.map(function (n) { if (n < 10) return ""; return "heals " + Math.floor(n / 2) + " HP"; }) }, "subclassfeature14" : { name : "Faithful Summons", source : [["UA:RCO", 2]], minlevel : 14, description : desc([ "When I am reduced to 0 HP or incapacitated against my will, I can cast Conjure Animals", "This is done as if using a 9th-level spell slot to summon 4 beast of my choice up to CR 2", "They appear within 20 ft of me, last 1 hour, and protect me from harm and attack foes" ]), usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Faithful Summons", spells : ["conjure animals"], selection : ["conjure animals"], firstCol : "oncelr" }], spellChanges : { "conjure animals" : { nameShort : "Conjure Animals (level 9)", range : "20 ft", duration : "1 h", description : "Summon 4 CR 2 beasts; protect me from harm and attack foes", changes : "Using my Faithful Summons class feature when I'm reduced to 0 HP, I can cast Conjure Animals as if using a 9th-level spell slot. This then summons 4 beast of my choice up to CR 2 within 20 ft of me without needing concentration." } } } } }); AddSubClass("fighter", "cavalier2-ua", { regExpSearch : /cavalier/i, subname : "Cavalier", source : [["UA:RCO", 2]], fullname : "Cavalier", abilitySave : 1, features : { "subclassfeature3" : { name : "Bonus Proficiency", source : [["UA:RCO", 2]], minlevel : 3, description : desc([ "I gain proficiency with Animal Handling, History, Insight, Performance, or Persuasion", "Alternatively, I learn one language of my choice" ]), choices : ["Language proficiency", "Skill proficiency: Animal Handling, History, Insight, Performance, or Persuasion"], "language proficiency" : { name : "Bonus Proficiency", description: desc("I learn one language of my choice"), languageProfs : [1] }, "skill proficiency: animal handling, history, insight, performance, or persuasion" : { name : "Bonus Proficiency", description: desc("I gain proficiency with Animal Handling, History, Insight, Performance, or Persuasion"), skillstxt : "Choose one from: Animal Handling, History, Insight, Performance, or Persuasion" } }, "subclassfeature3.1" : { name : "Born in the Saddle", source : [["UA:RCO", 2]], minlevel : 3, description : desc([ "I have advantage on saves to avoid falling off my mount, and land on my feet if I fail", "Mounting or dismounting a creature costs me only 5 ft of movement instead of half" ]), savetxt : { adv_vs : ["falling off my mount"] } }, "subclassfeature3.2" : { name : "Combat Superiority", source : [["UA:RCO", 2]], minlevel : 3, description : desc([ "I gain a number of superiority dice that I can use to fuel special maneuvers (see below)", "I can use only one maneuver per attack; I regain all superiority dice after a short rest", " \u2022 Control Mount (Maneuver, UA:RCO 3)", " Use after rolling Wis (Animal Handling) to influence an animal I or an ally is riding", " I add the superiority die to the result", " \u2022 Precision Attack (Maneuver, UA:RCO 3)", " Use after rolling to hit; I add the superiority die to my attack roll", " \u2022 Trip Attack (Maneuver, UA:RCO 3) [DC 8 + Prof Bonus + Str mod]", " Use after hitting a creature; I add the superiority die to the attack's damage", " If target is Large or smaller, it must make a Strength save or be knocked prone", " \u2022 Warding Maneuver (Maneuver, UA:RCO 3) [only while wielding weapon or shield]", " As a reaction when I or a creature within 5 ft is hit, I add the superiority die to AC", " If the attack still hits, the target counts as having resistance against the attack" ]), additional : ["", "", "d8", "d8", "d8", "d8", "d8", "d8", "d8", "d10", "d10", "d10", "d10", "d10", "d10", "d10", "d10", "d12", "d12", "d12"], usages : [0, 0, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6], recovery : "short rest", action : ['reaction', 'Warding Maneuver'] }, "subclassfeature7" : { name : "Ferocious Charger", source : [["UA:RCO", 3]], minlevel : 7, description : desc([ "I can use two superiority dice, instead of just one, when using the Trip Attack Maneuver", "If doing so, both dice are added to the damage and the target has disadv. on its Str save" ]) }, "subclassfeature10" : { name : "Improved Combat Superiority", source : [["UA:RCO", 3]], minlevel : 10, description: desc("My superiority dice turn into d10s at 10th level and into d12s at 18th level") }, "subclassfeature15" : { name : "Relentless", source : [["UA:RCO", 3]], minlevel : 15, description: desc("I regain one superiority die if I have no more remaining when I roll initiative") } } }); AddSubClass("paladin", "oath of conquest2-ua", { regExpSearch : /^((?=.*(knight tyrant|iron mongers))|((?=.*(conquest|tyranny|tyrant))(((?=.*paladin)|((?=.*(exalted|sacred|holy|divine))(?=.*(knight|fighter|warrior|warlord|trooper))))))).*$/i, subname : "Oath of Conquest", subnameShort: "Conquest", source : [["UA:RCO", 3]], features : { "subclassfeature3" : { name : "Channel Divinity: Conquering Presence", source : [["UA:RCO", 4]], minlevel : 3, description : desc([ "As an action, all creatures of my choice within 30-ft radius must make a Wisdom save", "If failed, a target is frightened for 1 minute; It can save again at the end of each turn" ]), action : [["action", ""]], spellcastingExtra : ["armor of agathys", "command", "hold person", "spiritual weapon", "bestow curse", "fear", "dominate beast", "stoneskin", "cloudkill", "dominate person"] }, "subclassfeature3.1" : { name : "Channel Divinity: Guided Strike", source : [["UA:RCO", 4]], minlevel : 3, description: desc("When I make an attack roll, I can add a +10 bonus to the roll after seeing the d20 roll") }, "subclassfeature7" : { name : "Aura of Conquest", source : [["UA:RCO", 4]], minlevel : 7, description : desc([ "Enemies that are frightened of me have their speed reduced to 0 while in my aura", "They also take psychic damage whenever they start theirs turn within my aura" ]), additional : levels.map(function (n) { if (n < 7) return ""; return (n < 18 ? 10 : 30) + "-foot aura; " + Math.floor(n / 2) + " psychic damage"; }) }, "subclassfeature15" : { name : "Scornful Rebuke", source : [["UA:RCO", 4]], minlevel : 15, description : desc([ "Whenever I'm hit with an attack while I'm not incapacitated, the attacker takes damage", "This is psychic damage equal to my Charisma modifier (minimum of 0)" ]) }, "subclassfeature20" : { name : "Invincible Conqueror", source : [["UA:RCO", 4]], minlevel : 20, description : desc([ "As an action, I can gain the following benefits for 1 minute:", " - I have resistance to all damage", " - I can make an additional attack as part of my Attack action", " - My melee weapons score critical hits on a roll of 19 or 20" ]), recovery : "long rest", usages : 1, action : [["action", ""]] } } }); AddSubClass("warlock", "the celestial-ua", { regExpSearch : /^(?=.*warlock)(?=.*celestial).*$/i, subname : "the Celestial", source : [["UA:RCO", 4]], spellcastingExtra : ["burning hands", "cure wounds", "flaming sphere", "lesser restoration", "daylight", "revivify", "guardian of faith", "wall of fire", "flame strike", "greater restoration"], features : { "subclassfeature1" : { name : "Bonus Cantrips", source : [["UA:RCO", 5]], minlevel : 1, description: desc("I know the Light and Sacred Flame cantrips"), spellcastingBonus : [{ name : "Bonus Cantrips", spells : ["light"], selection : ["light"] }, { name : "Bonus Cantrips", spells : ["sacred flame"], selection : ["sacred flame"] }] }, "subclassfeature1.1" : { name : "Healing Light", source : [["UA:RCO", 5]], minlevel : 1, description : desc([ "As a bonus action, I can heal a creature on touch by expending dice from my pool", "I can expend up to my Charisma modifier (min 1) of dice at a time", "The target heals HP equal to the roll of the dice; I regain all expended dice on a long rest" ]), usages : levels.map(function (n) { return (n + 1) + "d6 per "; }), usagescalc : "event.value = !classes.known.warlock ? '' : (1 + classes.known.warlock.level) + 'd6';", recovery : "long rest", action : [["bonus action", ""]] }, "subclassfeature6" : { name : "Radiant Soul", source : [["UA:RCO", 5]], minlevel : 6, description : desc([ "I add my Cha modifier to cantrips/spells I cast that deal fire or radiant damage", "Additionally, I have resistance to radiant damage" ]), dmgres : ["Radiant"], calcChanges : { atkCalc : [ function (fields, v, output) { if (v.isSpell && (/fire|radiant/i).test(fields.Damage_Type)) { output.extraDmg += What('Cha Mod'); } }, "Cantrips and spells that fire or radiant damage get my Charisma modifier added to their damage." ], spellAdd : [ function (spellKey, spellObj, spName) { if (!spellObj.psionic) return genericSpellDmgEdit(spellKey, spellObj, "fire|radiant", "Cha"); }, "Cantrips and spells that fire or radiant damage get my Charisma modifier added to their damage." ] } }, "subclassfeature10" : { name : "Radiant Resilience", source : [["UA:RCO", 5]], minlevel : 10, description : desc([ "When I finish a short or long rest, I and up to five allies gain temporary hit points", "I get my warlock level + Cha mod, while my allies get half my warlock level + Cha mod" ]), additional : levels.map(function (n) { if (n < 10) return ""; return "Me: " + n + "+Cha mod; Allies: " + Math.floor(n / 2) + "+Cha mod"; }) }, "subclassfeature14" : { name : "Searing Vengeance", source : [["UA:RCO", 5]], minlevel : 14, description : desc([ "At the start of my turn when I would make a death save, I can instead spring back up", "I can stand up and recover HP equal to half my current HP maximum", "Also, creatures of my choice within 30 ft of me take 2d8 + Cha mod in radiant damage", "Damaged creatures are blinded until the end of my current turn" ]), usages : 1, recovery : "long rest" } } }); // Add Warlock invocations, revised versions from previous Unearthed Arcana articles, and new ones // Most probably still valid 2021-09-21, have to check AddWarlockInvocation("Eldritch Smite (prereq: level 5 warlock, Pact of the Blade)", { name : "Eldritch Smite", description : desc([ "Once per turn when I hit a creature with my pact weapon, I can do extra damage", "By expending a warlock spell slot, the creature takes extra damage and is knocked prone", "It takes 1d8 force damage and another 1d8 force damage per level of the spell slot", "If the target takes any of this bonus damage, it is knocked prone if it is Huge or smaller" ]), source : [["UA:RCO", 6]], submenu : "[improves Pact of the Blade]", prereqeval : function(v) { return classes.known.warlock.level >= 5 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the blade'; } }); AddWarlockInvocation("Frost Lance (prereq: Eldritch Blast cantrip)", { // Still valid 2021-09-21 name : "Frost Lance", description : desc([ "Once per turn when my Eldritch Blast hits a creature, I can reduce its speed by 10 ft", "This speed reduction lasts until the end of my next turn" ]), source : [["UA:RCO", 6]], submenu : "[improves Eldritch Blast]", prereqeval : function(v) { return v.hasEldritchBlast; }, calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == 'eldritch blast') fields.Description += '; 1 target -10 ft speed'; }, "When I hit a creature with my Eldritch Blast cantrip once or more times in a turn, I can reduce its speed by 10 ft until the end of my next turn." ] } }); AddWarlockInvocation("Ghostly Gaze (prereq: level 7 warlock)", { name : "Ghostly Gaze", description : desc([ "As an action, I can see through solid objects out to 30 ft, until the end of my current turn", "Objects appear ghostly to me; I also gain 30 ft darkvision for the duration" ]), source : [["UA:RCO", 6]], submenu : "[warlock level 7+]", prereqeval : function(v) { return classes.known.warlock.level >= 7; }, recovery : "short rest", usages : 1, action : [["action", ""]] }); AddWarlockInvocation("Improved Pact Weapon (prereq: Pact of the Blade)", { name : "Improved Pact Weapon", description : desc([ "I can use any pact weapon I create as my spellcasting focus for warlock spells", "Any pact weapon I create is a +1 magic weapon, if it isn't already a +1 magic weapon" ]), source : [["UA:RCO", 6]], submenu : "[improves Pact of the Blade]", prereqeval : function(v) { return GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the blade'; }, calcChanges : { atkCalc : [ function (fields, v, output) { // Test if this is a pact weapon, has no + bonus from somewhere else, and doesn't already have a improved pact weapon bonus if (v.pactWeapon && !output.magic) { var bContinue = true; // Now test if this isn't a weaponOptions addition with a static + bonus set to the modifier fields if (v.theWea.isMagicWeapon && v.theWea.modifiers) { // Test the first two modifiers to see if both offer a +1 or more. Returns `true` if one contains no numbers or is less than the improved pact weapon bonus var bContinue = v.theWea.modifiers.slice(0, 2).some(function (n) { if (!n || !/\d/.test(n)) { var nmbr = 0; } else if (isNaN(n)) { var nmbr = n.match(/(^|\+|-)\d+\b/g); nmbr = !nmbr ? 0 : nmbr.reduce(function(a, b) {return Number(a) + Number(b)}); } else { var nmbr = Number(n); } return nmbr < 1; }); } // if the continue boolean wasn't set to false, we can proceed if (bContinue) { v.pactMag = 1; output.magic = 1; } }; }, "If my Pact Weapon doesn't already include a magical bonus in its name and is not a magic weapon with at least a +1 bonus, the calculation will add +1 to its To Hit and Damage." ] } }); AddWarlockInvocation("Kiss of Mephistopheles (prereq: level 5 warlock, Eldritch Blast cantrip)", { name : "Kiss of Mephistopheles", description : desc([ "As a bonus action when my Eldritch Blast hits, I can cast Fireball using a warlock spell slot", "The origin of the Fireball is the creature that was hit with my Eldritch Blast attack" ]), source : [["UA:RCO", 6]], submenu : "[improves Eldritch Blast]", prereqeval : function(v) { return v.hasEldritchBlast && classes.known.warlock.level >= 5; }, action : [["bonus action", ""]] }); AddWarlockInvocation("Maddening Hex (prereq: level 5 warlock)", { name : "Maddening Hex", description : desc([ "As a bonus action, I cause pain around a target affected by a hex of mine (spell/feature)", "It and any of my choice within 5 ft of it take my Cha mod (min 0) in psychic damage" ]), source : [["UA:RCO", 6]], submenu : "[warlock level 5+]", prereqeval : function(v) { return classes.known.warlock.level >= 5; }, action : [["bonus action", ""]] }); AddWarlockInvocation("Relentless Hex (prereq: level 7 warlock)", { name : "Relentless Hex", description : desc([ "As a bonus action, I can teleport next to a target affected by a hex of mine (spell/feature)", "To do so, I must see the target and the space I'm teleporting to, and be within 30 ft of it" ]), source : [["UA:RCO", 6]], submenu : "[warlock level 7+]", prereqeval : function(v) { return classes.known.warlock.level >= 7; }, action : [["bonus action", ""]] }); // ua_20170911_Eladrin-and-Gith.js // This file adds the content from the Unearthed Arcana: Eladrin and Gith article to MPMB's Character Record Sheet // Define the source SourceList["UA:EnG"] = { name : "Unearthed Arcana: Eladrin and Gith", abbreviation : "UA:EnG", group : "Unearthed Arcana", url : "https://media.wizards.com/2017/dnd/downloads/UA-Eladrin-Gith.pdf", date : "2017/09/11" }; // Adds three races: // Alternative version of the Eladrin RaceList["eladrin-uaeng"] = { regExpSearch : /^(?!.*half)((?=.*eladrin)|((?=.*\b(elfs?|elves|elvish|elven)\b)(?=.*\b(feys?|feywild)\b))).*$/i, name : "Eladrin", sortname : "Elf, Fey (Eladrin)", source : [["UA:EnG", 1]], plural : "Eladrin", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Elvish"], vision : [["Darkvision", 60]], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["charmed"] }, skills : ["Perception"], age : " typically claim adulthood around age 100 and can live to be 750 years old", height : " range from under 5 to over 6 feet tall (4'6\" + 2d12\")", weight : " weigh around 115 lb (90 + 2d12 \xD7 1d4 lb)", heightMetric : " range from under 1,5 to over 1,8 metres tall (140 + 5d12 cm)", weightMetric : " weigh around 55 kg (40 + 5d12 \xD7 2d4 / 10 kg)", scorestxt : "+2 Dexterity, +1 Intelligence or Charisma", scores : [0, 2, 0, 0, 0, 0], trait : "Eladrin (+2 Dexterity, +1 Intelligence or Charisma)\nTrance: Elves don't need to sleep, but meditate semiconsciously, for 4 hours a day. This gives the same benefit as a human gets from 8 hours of sleep (long rest takes only 4 hours).\nFey Step: Once per short rest, as a bonus action, I can magically teleport up to 30 ft to an unoccupied space I can see." + (typePF ? "\n" : " ") + "Shifting Seasons: After a short or long rest, I can align myself with a season, granting me access to a cantrip until my next rest: Friends, Chill Touch, Minor Illusion, or Fire Bolt. My spellcasting ability for this is Int or Cha, whichever is higher.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Shifting Seasons", spells : ["friends", "chill touch", "minor illusion", "fire bolt"], selection : ["friends", "chill touch", "minor illusion", "fire bolt"], firstCol : "checkbox", times : 4 }], features : { "fey step" : { name : "Fey Step", minlevel : 1, usages : 1, recovery : "short rest", action : [["bonus action", ""]] } } }; // Githyanki and its two variants RaceList["githyanki-ua"] = { regExpSearch : /githyanki/i, name : "Githyanki", source : [["UA:EnG", 2]], plural : "Githyanki", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Gith", 1], armorProfs : [true, true, false, false], skillstxt : "Choose any one skill or tool", age : " reach adulthood in their late teens and live for about a century", height : " are more leaner and taller than humans, most are a slender 6 feet tall (5'0\" + 2d12\")", weight : " weigh around 135 lb (100 + 2d12 \xD7 2d4 lb)", heightMetric : " are more leaner and taller than humans, most are a slender 1,8 metres tall (150 + 5d12 cm)", weightMetric : " weigh around 61 kg (45 + 5d10 \xD7 4d4 / 10 kg)", scores : [2, 0, 0, 1, 0, 0], trait : "Githyanki (+2 Strength, +1 Intelligence)\nGithyanki Psionics:" + desc([ "I know the Mage Hand cantrip.", "At 3rd level, I can cast the Jump spell once per long rest.", "At 5th level, I can also cast the Misty Step spell once per long rest.", "Intelligence is my spellcasting ability for these spells.", "I don't require components to cast these spells." ]), spellcastingAbility : 4, spellcastingBonus : [{ name : "Githyanki Psionics (1)", spells : ["mage hand"], selection : ["mage hand"], firstCol : 'atwill' }], features : { "jump" : { name : "Githyanki Psionics (level 3)", limfeaname : "Jump", minlevel : 3, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Githyanki Psionics (3)", spells : ["jump"], selection : ["jump"], firstCol : 'oncelr' }] }, "misty step" : { name : "Githyanki Psionics (level 5)", limfeaname : "Misty Step", minlevel : 5, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Githyanki Psionics (5)", spells : ["misty step"], selection : ["misty step"], firstCol : 'oncelr' }] } } }; AddRacialVariant("githyanki-ua", "tool proficiency", { regExpSearch : /tool proficiency/i, toolProfs : [["Any tool", 1]] }); AddRacialVariant("githyanki-ua", "skill proficiency", { regExpSearch : /skill proficiency/i, skillstxt : "Choose any one skill" }); // Githzerai RaceList["githzerai-ua"] = { regExpSearch : /githzerai/i, name : "Githzerai", source : [["UA:EnG", 3]], plural : "Githzerai", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Gith"], age : " reach adulthood in their late teens and live for about a century", height : " are more leaner and taller than humans, most are a slender 6 feet tall (4'11\" + 2d12\")", weight : " weigh around 115 lb (90 + 2d12 \xD7 1d4 lb)", heightMetric : " are more leaner and taller than humans, most are a slender 1,8 metres tall (150 + 5d12 cm)", weightMetric : " weigh around 55 kg (40 + 5d10 \xD7 2d4 / 10 kg)", scores : [0, 0, 0, 1, 2, 0], trait : "Githzerai (+1 Intelligence, +2 Wisdom)\n" + (typePF ? "\n" : "") + "Monastic Training: I gain a +1 bonus to AC while I'm not wearing medium or heavy armor and not using a shield.\n\nGithzerai Psionics: I know the Mage Hand cantrip. At 3rd level, I can cast the Shield spell once per long rest. At 5th level, I can also cast the Detect Thoughts spell once per long rest. Wisdom is my spellcasting ability for these spells.", spellcastingAbility : 5, spellcastingBonus : [{ name : "Githzerai Psionics (1)", spells : ["mage hand"], selection : ["mage hand"], firstCol : 'atwill' }], features : { "shield" : { name : "Githzerai Psionics (level 3)", limfeaname : "Shield", minlevel : 3, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Githzerai Psionics (3)", spells : ["shield"], selection : ["shield"], firstCol : 'oncelr' }] }, "detect thoughts" : { name : "Githzerai Psionics (level 5)", limfeaname : "Detect Thoughts", minlevel : 5, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Githzerai Psionics (5)", spells : ["detect thoughts"], selection : ["detect thoughts"], firstCol : 'oncelr' }] } }, extraAC : { name : "Monastic Training", mod : 1, text : "I gain a +1 bonus to AC while I'm not wearing medium or heavy armor and not using a shield.", stopeval : function (v) { return v.mediumArmor || v.heavyArmor || v.usingShield; } } }; // ua_20171009_Fiendish-Options.js // This file adds the content from the Unearthed Arcana: Fiendish Options article to MPMB's Character Record Sheet // Define the source SourceList["UA:FO"] = { name : "Unearthed Arcana: Fiendish Options", abbreviation : "UA:FO", group : "Unearthed Arcana", url : "https://media.wizards.com/2017/dnd/downloads/UA_FiendishOptions.pdf", date : "2017/10/09" }; // Adds 8 subraces for the Tiefling, even though it doesn't have any in the PHB/SRD // Much of this code was contributed by Friedrich RaceList["dispater tiefling-ua"] = { regExpSearch : /^(?=.*dispater)(?=.*tiefling|planetouched).*$/i, name : "Dispater tiefling", sortname : "Tiefling, Dispater", source : [["UA:FO", 1]], plural : "Dispater tieflings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Infernal"], vision : [["Darkvision", 60]], dmgres : ["Fire"], age : " reach adulthood in their late teens and live around 100 years", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 1, 0, 0, 0, 2], trait : "Dispater Tiefling (+1 Dexterity, +2 Charisma)\n\nLegacy of Dis:\n I know the Thaumaturgy cantrip.\n At 3rd level, I can cast the Disguise Self spell once per long rest.\n At 5th level, I can also cast the Invisibility spell once per long rest.\n Charisma is my spellcasting ability for these spells.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Legacy of Dis (level 1)", spells : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : 'atwill' }], features : { "disguise self" : { name : "Legacy of Dis (level 3)", limfeaname : "Disguise Self", minlevel : 3, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Legacy of Dis (level 3)", spells : ["disguise self"], selection : ["disguise self"], firstCol : 'oncelr' }] }, "invisibility" : { name : "Legacy of Dis (level 5)", limfeaname : "Invisibility", minlevel : 5, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Legacy of Dis (level 5)", spells : ["invisibility"], selection : ["invisibility"], firstCol : 'oncelr' }] } } }; RaceList["mephistopheles tiefling-ua"] = { regExpSearch : /^(?=.*mephistopheles)(?=.*tiefling|planetouched).*$/i, name : "Mephistopheles tiefling", sortname : "Tiefling, Mephistopheles", source : [["UA:FO", 2]], plural : "Mephistopheles tieflings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Infernal"], vision : [["Darkvision", 60]], dmgres : ["Fire"], age : " reach adulthood in their late teens and live around 100 years", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 0, 0, 1, 0, 2], trait : "Mephistopheles Tiefling (+1 Intelligence, +2 Charisma)\n\nLegacy of Cania:\n I know the Mage Hand cantrip.\n At 3rd level, I can cast the Magic Missile spell once per long rest as a 2nd-level spell.\n At 5th level, I can also cast the Web spell once per long rest.\n Charisma is my spellcasting ability for these spells.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Legacy of Cania (level 1)", spells : ["mage hand"], selection : ["mage hand"], firstCol : 'atwill' }], features : { "magic missile" : { name : "Legacy of Cania (level 3)", limfeaname : "Magic Missile (2 darts)", minlevel : 3, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Legacy of Cania (level 3)", spells : ["magic missile"], selection : ["magic missile"], firstCol : 'oncelr' }], spellChanges : { "magic missile" : { description : "4 darts hit creature(s) I can see for 1d4+1 Force dmg per dart", changes : "Using Legacy of Cania, I cast Magic Missile as if I'm using a 2nd-level spell slot." } } }, "web" : { name : "Legacy of Cania (level 5)", limfeaname : "Web", minlevel : 5, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Legacy of Cania (level 5)", spells : ["web"], selection : ["web"], firstCol : 'oncelr' }] } } }; // ua_20171113_Elf-Subraces.js // This file adds the content from the Unearthed Arcana: Elf Subraces article to MPMB's Character Record Sheet // Define the source SourceList["UA:ES"] = { name : "Unearthed Arcana: Elf Subraces", abbreviation : "UA:ES", group : "Unearthed Arcana", url : "https://media.wizards.com/2017/dnd/downloads/UA-ElfSubraces.pdf", date : "2017/11/13" }; // Adds 4 new subraces for the elf RaceList["avariel-ua"] = { regExpSearch : /^(?!.*half)((?=.*avariel)|((?=.*\b(elfs?|elves|elvish|elven)\b)(?=.*\b(winged?|wings?|flying|air)\b))).*$/i, name : "Avariel", sortname : "Elf, Winged (Avariel)", source : [["UA:ES", 1]], plural : "Avariel", size : 3, speed : { walk : { spd : 30, enc : 20 }, fly : { spd : 30, enc : 0 } }, languageProfs : ["Common", "Elvish", "Auran"], vision : [["Darkvision", 60]], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["charmed"] }, skills : ["Perception"], age : " typically claim adulthood around age 100 and can live to be 750 years old", height : " range from 5 to over 6 feet tall (4'8\" + 2d10\")", weight : " weigh around 115 lb (90 + 2d10 \xD7 1d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d10 cm)", weightMetric : " weigh around 55 kg (40 + 5d10 \xD7 2d4 / 10 kg)", scores : [0, 2, 0, 0, 0, 0], trait : "Avariel (+2 Dexterity)\nTrance: Elves don't need to sleep, but meditate semiconsciously, for 4 hours a day. While meditating, I can dream after a fashion; such dreams are actually mental exercises that have become reflexive through years of practice. After resting in this way, I gain the same benefit that a human does from 8 hours of sleep, thus needing only 4 hours for a long rest.\nFlight: I have a flying speed of 30 feet. To use this speed, I can't be wearing medium or heavy armor." }; RaceList["grugach elf-ua"] = { regExpSearch : /^(?!.*half)((?=.*grugach)|((?=.*\b(elfs?|elves|elvish|elven)\b)(?=.*\b(wilds?|wilderness)\b))).*$/i, name : "Grugach", sortname : "Elf, Wild (Grugach)", source : [["UA:ES", 1]], plural : "Grugach", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Elvish", "Sylvan"], vision : [["Darkvision", 60]], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["charmed"] }, weaponProfs : [false, false, ["spear", "longbow", "shortbow", "net"]], skills : ["Perception"], age : " typically claim adulthood around age 100 and can live to be 750 years old", height : " stand around 5 feet tall (4'5\" + 2d6\")", weight : " weigh around 100 lb (75 + 2d6 \xD7 1d6 lb)", heightMetric : " range from well under to well over 1,5 metres tall (135 + 5d6 cm)", weightMetric : " weigh around 45 kg (35 + 5d6 \xD7 2d6 / 10 kg)", scores : [1, 2, 0, 0, 0, 0], trait : "Grugach (+1 Strength, +2 Dexterity)\nTrance: Elves don't need to sleep, but meditate semiconsciously, for 4 hours a day. While meditating, I can dream after a fashion; such dreams are actually mental exercises that have become reflexive through years of practice. After resting in this way, I gain the same benefit that a human does from 8 hours of sleep, thus needing only 4 hours for a long rest.\nCantrip: I know one cantrip of my choice from the druid spell list. Wisdom is my spellcasting ability for it.", spellcastingAbility : 5, spellcastingBonus : [{ name : "Grugach Cantrip", "class" : "druid", level : [0, 0], firstCol : 'atwill' }], eval : function () { RemoveLangTool('language', 'Common'); } }; // Edit the Wood Elf PHB entry, if available, to not match on Grugach if (RaceList["wood elf"]) { RaceList["wood elf"].regExpSearch = RaceList["wood elf"].regExpSearch.replace(/grugach\|?|wilds\?\|?/g, ""); } RaceList["shadar-kai elf-ua"] = { regExpSearch : /^(?!.*half)((?=.*shadar-kai)|((?=.*\b(elfs?|elves|elvish|elven)\b)(?=.*\b(shadows?|shadowfell)\b))).*$/i, name : "Shadar-kai", sortname : "Elf, Shadow (Shadar-kai)", source : [["UA:ES", 2]], plural : "Shadar-kai", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Elvish"], vision : [["Darkvision", 60]], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["charmed"] }, skills : ["Perception"], age : " typically claim adulthood around age 100 and can live to be 750 years old", height : " range from under 5 to over 6 feet tall (4'8\" + 2d8\")", weight : " weigh around 115 lb (90 + 2d8 \xD7 1d4 lb)", heightMetric : " range from under 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 52 kg (40 + 5d8 \xD7 2d4 / 10 kg)", scores : [0, 2, 0, 0, 0, 1], trait : "Shadar-kai (+2 Dexterity, +1 Charisma)\nTrance: Elves don't need to sleep, but meditate semiconsciously, for 4 hours a day. This gives the same benefit as a human gets from 8 hours of sleep (long rest takes only 4 hours).\nBlessing of the Raven Queen: Once per short rest, as a bonus action, I can magically teleport up to 15 ft to an unoccupied space I can see, and, until the start of my next turn, I have resistance to all damage and appear translucent." + (typePF ? "\n" : " ") + "Cantrip: I know one cantrip: Chill Touch, Spare the Dying, or Thaumaturgy. Charisma is my spellcasting ability for it.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Shadar-kai Cantrip", spells : ["chill touch", "spare the dying", "thaumaturgy"], firstCol : 'atwill' }], features : { "blessing of the raven queen" : { name : "Blessing of the Raven Queen", minlevel : 1, usages : 1, recovery : "short rest", action : [["bonus action", ""]] } } }; // ua_20180108_Three-Subclasses.js // This file adds the content from the Unearthed Arcana: Three Subclasses article to MPMB's Character Record Sheet // Define the source SourceList["UA:TS"] = { name : "Unearthed Arcana: Three Subclasses", abbreviation : "UA:TS", group : "Unearthed Arcana", url : "https://media.wizards.com/2018/dnd/downloads/UA-3Subclasses0108.pdf", date : "2018/01/08" }; // Adds 3 subclasses: 1 for the Druid, 1 for the Fighter, and 1 for the Wizard AddSubClass("druid", "circle of spores-ua", { regExpSearch : /^(?=.*(druid|shaman))(?=.*spores).*$/i, subname : "Circle of Spores", subnameShort: "Spores", source : [["UA:TS", 1]], features : { "subclassfeature2" : { name : "Circle Spells", source : [["UA:TS", 1]], minlevel : 2, description : desc([ "My link to the cycle of life and death gives me with the ability to cast certain spells", "These are always prepared, but don't count against the number of spells I can prepare", "In addition, I learn the Chill Touch cantrip" ]), spellcastingBonus : [{ name : "Circle Spells", spells : ["chill touch"], selection : ["chill touch"], firstCol : 'atwill' }], spellcastingExtra : ["gentle repose", "ray of enfeeblement", "animate dead", "gaseous form", "blight", "confusion", "cloudkill", "contagion"] }, "subclassfeature2.1" : { name : "Halo of Spores", source : [["UA:TS", 1]], minlevel : 2, description: desc("As a reaction on my turn, I can do poison damage to one creature I can see within 10 ft"), additional : levels.map(function (n) { return n < 2 ? "" : (n < 6 ? 3 : n < 10 ? 6 : n < 14 ? 9 : 12) + " poison damage"; }), action : [["reaction", " (on my turn)"]] }, "subclassfeature2.2" : { name : "Symbiotic Entity", source : [["UA:TS", 1]], minlevel : 2, description : desc([ "As an action, I expend a Wild Shape use to boost my spores instead of transforming", "I then gain 3 temporary HP per druid level and my Halo of Spores does double damage", "Also, my melee weapon attacks do +1d6 poison damage with every hit", "This lasts for 10 minutes or until I use Wild Shape again" ]), additional : levels.map(function (n) { return n < 2 ? "" : Math.floor(n*3) + " temp HP; Halo of Spores: " + (n < 6 ? 6 : n < 10 ? 12 : n < 14 ? 18 : 24) + " damage"; }), action : [["action", ""]], calcChanges : { atkAdd : [ function (fields, v) { if (v.isMeleeWeapon && (/\b(spore|symbiotic)\b/i).test(v.WeaponTextName)) { fields.Description += (fields.Description ? '; ' : '') + '+1d6 poison damage'; }; }, "If I include the word 'Spore' or 'Symbiotic' in a melee weapon's name or description, it gets treated as a weapon that is infused by my Symbiotic Entity feature, adding +1d6 poison damage in the description." ] } }, "subclassfeature6" : { name : "Fungal Infestation", source : [["UA:TS", 2]], minlevel : 6, description : desc([ "If I kill a humanoid with my Halo of Spores, it rises as a zombie at the end of my turn", "This zombie has 1 HP, only takes the Attack action, and can only make 1 attack with it", "It follows my mental commands and takes it turn after mine; It lasts for 1 hour" ]) }, "subclassfeature10" : { name : "Spreading Spores", source : [["UA:TS", 2]], minlevel : 10, description : desc([ "As a bonus action, I create a 10-ft cube of fungal spores within 30 ft, lasting for 1 min", "Any creature starting its turn in the cube takes the damage of my Halo of Spores", "The cube ends if I use this again; While the cube persists, I can't use my Halo of Spores" ]), action : [["bonus action", ""]] }, "subclassfeature14" : { name : "Fungal Body", source : [["UA:TS", 2]], minlevel : 14, description: desc("I'm immune to critical hits and to being blinded, deafened, frightened, and poisoned"), savetxt : { immune : ["blinded", "deafened", "frightened", "poisoned", "critical hits"] } } } }); var UATS_fighterBruteSubclassUA = AddSubClass("fighter", "brute-ua", { regExpSearch : /brute/i, subname : "Brute", source : [["UA:TS", 2]], fullname : "Brute", features : { "subclassfeature3" : { name : "Brute Force", source : [["UA:TS", 2]], minlevel : 3, description: desc("I do additional damage with weapons that I'm proficient with"), additional : levels.map(function (n) { return n < 3 ? "" : "+1d" + (n < 10 ? 4 : n < 16 ? 6 : n < 20 ? 8 : 10) + " weapon damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.fighter && classes.known.fighter.level > 2 && !v.isSpell && !v.isNaturalWeapon && fields.Proficiency) { fields.Description += (fields.Description ? '; ' : '') + '+1d' + (classes.known.fighter.level < 10 ? 4 : classes.known.fighter.level < 16 ? 6 : classes.known.fighter.level < 20 ? 8 : 10) + ' damage'; }; }, "I do +1d4 damage with weapons that I'm proficient with. This increases to 1d6 at 10th level, 1d8 at 16th level, and 1d10 at 20th level." ] } }, "subclassfeature7" : { name : "Brutish Durability", source : [["UA:TS", 2]], minlevel : 7, description : desc([ "I add +1d6 to all my saving throws, including death saves", "If the total of a death save is 20 or more, it counts as rolling a 20" ]), savetxt : { text : ["Add 1d6 to all saves"] } }, "subclassfeature15" : { name : "Devastating Critical", source : [["UA:TS", 2]], minlevel : 15, description: desc("Whenever I score a critical hit with a weapon, I add my fighter level to the damage"), additional : levels.map(function (n) { return n < 15 ? "" : "+" + n + " damage on crit"; }) }, "subclassfeature18" : { name : "Survivor", source : [["UA:TS", 2]], minlevel : 18, description : desc([ "If I have less than half my max HP at the start of my turn, I heal myself", "I regain HP equal to 5 + Constitution modifier (min 1); This doesn't work if I'm at 0 HP" ]) } } }); RunFunctionAtEnd(function () { var FSfea = newObj(ClassList.fighter.features["fighting style"]); FSfea.name = "Additional Fighting Style"; FSfea.source = ["UA:TS", 2]; FSfea.minlevel = 10; FSfea.extrachoices = ""; FSfea.description = desc('Choose an Additional Fighting Style using the "Choose Feature" button above'); ClassSubList[UATS_fighterBruteSubclassUA].features.subclassfeature10 = FSfea; }); AddSubClass("wizard", "school of invention-ua", { regExpSearch : /^(?=.*wizard)(?=.*invent(ion|or)).*$/i, subname : "School of Invention", subnameShort: "Invention", fullname : "Wizard (Inventor)", source : [["UA:TS", 2]], features : { "subclassfeature2" : { name : "Tools of the Inventor", source : [["UA:TS", 3]], minlevel : 2, description: desc("I gain proficiency with light armor and two tools of my choice"), toolProfs : [["Any one tool", 2]], armorProfs : [true, false, false, false] }, "subclassfeature2.1" : { name : "Arcanomechanical Armor", source : [["UA:TS", 3]], minlevel : 2, description : desc([ "After a long rest, I can transform a studded leather armor into arcanomechanical armor", "This is a magic light armor that gives AC 12 + Dex mod and force resistance, if attuned", "Only I can attune to it; Creating a new one removes the magic from the previous" ]), dmgres : ["Force"], armorOptions : [{ regExpSearch : /arcanomechanical/i, name : "Arcanomechanical", source : [["UA:TS", 3]], type : "light", ac : 12, weight : 8, invName : "Arcanomechanical armor", selectNow : true }] }, "subclassfeature2.2" : { name : "Reckless Casting", source : [["UA:TS", 3]], minlevel : 2, description : desc([ "As an action, I can attempt to cast a random spell or cantrip by rolling a d10 on a table", "On a roll of 10, I roll again twice on that table and cast both results", "However, if I then roll 10 on either dice, the whole casting fails and the action is wasted", "If I choose cantrip, I roll on the table once and cast the result", "If I choose a spell, I expend a spell slot and roll twice on the table for the slot's level", "I can then choose which of the results I use; Use 5th-level table for spell slots over level 5" ]), toNotesPage : [{ name : "Reckless Casting Tables", note : "\nd10\tCantrip\t\td10\tCantrip" + desc([ " 1\tAcid Splash\t\t 6\tRay of Frost", " 2\tChill Touch\t\t 7\tShocking Grasp", " 3\tFire Bolt\t\t 8\tSacred Flame", " 4\tLight\t\t 9\tThorn Whip", " 5\tPoison Spray\t 10\tRoll twice; Another 10, all is wasted" ]) + "\n\nd10\t1st-Level Spell\td10\t1st-Level Spell" + desc([ " 1\tBurning Hands\t 6\tFog Cloud", " 2\tChromatic Orb\t 7\tJump", " 3\tColor Spray\t\t 8\tMagic Missile", " 4\tFaerie Fire\t\t 9\tThunderwave", " 5\tFalse Life\t\t 10\tRoll twice; Another 10, all is wasted" ]) + "\n\nd10\t2nd-Level Spell\td10\t2nd-Level Spell" + desc([ " 1\tBlur\t\t 6\tLevitate", " 2\tDarkness\t\t 7\tMelf's Acid Arrow", " 3\tEnlarge/Reduce\t 8\tScorching Ray", " 4\tGust of Wind\t 9\tShatter", " 5\tInvisibility\t\t 10\tRoll twice; Another 10, all is wasted" ]) + "\n\nd10\t3rd-Level Spell\td10\t3rd-Level Spell" + desc([ " 1\tBlink\t\t 6\tGaseous Form", " 2\tFear\t\t 7\tLightning Bolt", " 3\tFeign Death \t 8\tSleet Storm", " 4\tFireball\t\t 9\tStinking Cloud", " 5\tFly\t\t 10\tRoll twice; Another 10, all is wasted" ]) + "\n\nd10\t4th-Level Spell\td10\t4th-Level Spell" + desc([ " 1\tBlight\t\t 6\tIce Storm", " 2\tConfusion\t\t 7\tPhantasmal Killer", " 3\tEvard's Black Tentacles\t 8\tStoneskin", " 4\tFire Shield\t\t 9\tWall of Fire", " 5\tGreater Invisibility\t 10\tRoll twice; Another 10, all is wasted" ]) + "\n\nd10\t5th-Level Spell\td10\t5th-Level Spell" + desc([ " 1\tCloudkill\t\t 6\tInsect Plague", " 2\tCone of Cold\t 7\tMass Cure Wounds", " 3\tDestructive Wave\t 8\tWall of Force", " 4\tFlame Strike\t 9\tWall of Stone", " 5\tHold Monster\t 10\tRoll twice; Another 10, all is wasted" ]) }] }, "subclassfeature6" : { name : "Alchemical Casting", source : [["UA:TS", 4]], minlevel : 6, description : desc([ "I can manipulate spells cast while wearing and attuned to my Arcanomechanical Armor", "By expending an additional 1st or 2nd-level spell slot, I do the following:", "\u2022 1st: I can substitute acid, cold, fire, lightning, or thunder damage for another type", "\u2022 2nd: I increase the spells damage, if any, by 2d10 force damage against one target" ]) }, "subclassfeature10" : { name : "Prodigious Inspiration", source : [["UA:TS", 4]], minlevel : 10, description: desc("As a bonus action, I can replace a prepared spell with another from my spellbook"), usages : 1, recovery : "short rest", action : [["bonus action", ""]] }, "subclassfeature14" : { name : "Controlled Chaos", source : [["UA:TS", 4]], minlevel : 14, description : desc([ "When I expend a spell slot to cast a spell using Reckless Casting, it is more powerful", "I can roll on the table that is one level higher than the spell slot expended" ]) } } }); // ua_20180409_Order-Domain.js // This file adds the content from the Unearthed Arcana: Order Domain article to MPMB's Character Record Sheet // Define the source SourceList["UA:OD"] = { name : "Unearthed Arcana: Order Domain", abbreviation : "UA:OD", group : "Unearthed Arcana", url : "https://media.wizards.com/2018/dnd/downloads/UA_OrderDomain.pdf", date : "2018/04/09" }; // New Subclass for Cleric: Order Domain AddSubClass("cleric", "order domain-ua", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*order).*$/i, subname : "Order Domain", source : [["UA:OD", 1]], spellcastingExtra : ["command", "heroism", "enhance ability", "hold person", "mass healing word", "slow", "compulsion", "locate creature", "commune", "dominate person"], features : { "subclassfeature1" : { name : "Bonus Proficiency", source : [["UA:OD", 1]], minlevel : 1, description: desc("I gain proficiency with heavy armor"), armorProfs : [false, false, true, false] }, "subclassfeature1.1" : { name : "Voice of Authority", source : [["UA:OD", 1]], minlevel : 1, description : desc([ "Whenever I use a spell slot to cast a spell on an ally, it can use its reaction to attack", "The ally makes one weapon attack against a target of my choice that I can see", "If the spell targets multiple allies, I can choose which one can make the attack" ]) }, "subclassfeature2" : { name : "Channel Divinity: Order's Demand", source : [["UA:OD", 1]], minlevel : 2, description : desc([ "As an action, all chosen targets in 30 ft that can see or hear me must make a Wis save", "If failed, it is charmed by me until the end of my next turn or it takes any damage", "Also, I can choose to have any of the charmed targets to fall prone on a failed save" ]), action : [["action", ""]] }, "subclassfeature6" : { name : "Order's Dominion", source : [["UA:OD", 2]], minlevel : 6, description : desc([ "When I cast an enchantment spell using a spell slot, I regain one expended spell slot", "The regained slot must be lower level than the one used, and no higher than 5th-level" ]) }, "subclassfeature8" : { name : "Divine Strike", source : [["UA:OD", 2]], minlevel : 8, description: desc("Once per turn, when I hit a creature with a weapon attack, I can do extra damage"), additional : levels.map(function (n) { if (n < 8) return ""; return "+" + (n < 14 ? 1 : 2) + "d8 force damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && v.isWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.cleric.level < 14 ? 1 : 2) + 'd8 force damage'; } }, "Once per turn, I can have one of my weapon attacks that hit do extra force damage." ] } }, "subclassfeature17" : { name : "Order's Wrath", source : [["UA:OD", 2]], minlevel : 17, description : desc([ "If I deal my Divine Strike damage to a creature, it takes extra damage from my allies", "The first time each turn that it is hit with a weapon attack, it takes 2d8 force damage" ]) } } }); // ua_20180514_Centaur-and-Minotaur.js // This file adds the content from the Unearthed Arcana: Centaur and Minotaur article to MPMB's Character Record Sheet // Define the source SourceList["UA:CnM"] = { name : "Unearthed Arcana: Centaur and Minotaur", abbreviation : "UA:CnM", group : "Unearthed Arcana", url : "https://media.wizards.com/2018/dnd/downloads/UA-Centaur.pdf", date : "2018/05/14" }; // Add the Centaur race RaceList["centaur-ua"] = { regExpSearch : /centaur/i, name : "Centaur", sortname : "Centaur", source : [["UA:CnM", 1]], plural : "Centaurs", size : 3, speed : { walk : { spd : 40, enc : 30 } }, languageProfs : ["Common", "Sylvan"], weaponOptions : [{ regExpSearch : /\b(hoofs?|hooves)\b/i, name : "Hooves", source : [["UA:CnM", 2]], ability : 1, type : "Natural", damage : [1, 6, "bludgeoning"], range : "Melee", abilitytodamage : true, selectNow : true }], skills : ["Survival"], age : " reach adulthood in their late teens and live around 100 years", height : " stand between 7 and 8 feet tall (front hooves to their crowns) and 6 to 8 feet long (from their chest to the back of their rumps)", // from 3.5e Races of Faerun weight : " weigh anywhere from 950 to 1200 lb", // from 3.5e Races of Faerun heightMetric : " stand between 2,1 and 2,4 metres tall (front hooves to their crowns) and 1,8 to 2,4 metres long (from their chests to the back of their rumps)", weightMetric : " weigh anywhere from 430 to 550 kg", scores : [2, 0, 0, 0, 1, 0], trait : "Centaur (+2 Strength +1 Wisdom)" + desc([ "Hooves: I can use my hooves in melee (1d6 bludgeoning damage).", "Charge: Once per short rest, if I move 20 ft straight toward a creature and then hit it with a melee weapon attack on the same turn, I can roll the weapon's damage dice twice.", "Equine Build: I count as one size larger for my carrying capacity. While climbing, 1 ft of movement costs me 5 ft. A medium or smaller creature can ride me as a mount.", "Hybrid Nature: I am affected by effects that work on either humanoids or monstrosities." ]), features : { "charge" : { name : "Charge", minlevel : 1, usages : 1, recovery : "short rest" } }, carryingCapacity : 2 }; // Add the Minotaur race RaceList["minotaur-uacnm"] = { regExpSearch : /minotaur/i, name : "Minotaur", sortname : "Minotaur", source : [["UA:CnM", 2]], plural : "Minotaurs", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Minotaur"], weaponOptions : [{ regExpSearch : /\bhorns?\b/i, name : "Horns", source : [["UA:CnM", 2]], ability : 1, type : "Natural", damage : [1, 6, "piercing"], range : "Melee", description : "One horns attack as a bonus action if taking the Dash action", abilitytodamage : true, selectNow : true }], skills : ["Intimidation"], age : " reach adulthood around age 17 and live up to 150 years", height : " are well over 6 feet tall", weight : " weigh around 300 lb", heightMetric : " are well over 1,8 metres tall", weightMetric : " weigh around 135 kg", scores : [2, 0, 1, 0, 0, 0], abilitySave : 1, trait : "Minotaur (+2 Strength +1 Constitution)" + desc([ "Horns: I have horns that I can use in melee (1d6 piercing damage).", "Goring Rush: When taking a Dash action, I can make a horns attack as a bonus action.", "Hammering Horns: As a reaction after I hit a melee attack during my Attack action, I can shove that target with my horns, if it is no more than one size larger than me. It must make a Str save (DC 8 + Str mod + Prof Bonus) or be pushed up to 5 ft away from me.", "Hybrid Nature: I am affected by effects that work on either humanoids or monstrosities." ]), features : { "goring rush" : { name : "Goring Rush", minlevel : 1, action : [["bonus action", " (with Dash)"]] }, "hammering horns" : { name : "Hammering Horns", minlevel : 1, action : [["reaction", " (after hit)"]] } } }; // ua_20180611_Giant-Soul-Sorcerer.js // This file adds the content from the Unearthed Arcana: Giant Soul Sorcerer article to MPMB's Character Record Sheet // Define the source SourceList["UA:GSS"] = { name : "Unearthed Arcana: Giant Soul Sorcerer", abbreviation : "UA:GSS", group : "Unearthed Arcana", url : "https://media.wizards.com/2018/dnd/downloads/UA_GiantSoul.pdf", date : "2018/06/11" }; AddSubClass("sorcerer", "giant soul-ua", { regExpSearch : /^(?=.*giant)(?=.*soul)(?=.*sorcerer).*$/i, subname : "Giant Soul", source : [["UA:GSS", 1]], fullname : "Giant Soul Sorcerer", features : { "subclassfeature1" : { name : "Jotun Resilience", source : [["UA:GSS", 1]], minlevel : 1, description: desc("My hit point maximum increases by an amount equal to my sorcerer level"), calcChanges : { hp : function (totalHD) { if (classes.known.sorcerer) { return [classes.known.sorcerer.level, "Jotun Resilience (sorcerer level)"]; } } } }, "subclassfeature1.1" : { name : "Mark of Ordning", source : [["UA:GSS", 1]], minlevel : 1, description : desc([ 'Choose a giant heritage using the "Choose Feature" button above', "I learn spells based on my giant heritage, which I add to my known spells" ]), choices : ["Cloud Giant", "Fire Giant", "Frost Giant", "Hill Giant", "Stone Giant", "Storm Giant"], "cloud giant" : { name : "Mark of Ordning: Cloud Giant", description : desc([ "I add Minor Illusion, Fog Cloud and Invisibility to my known sorcerer spells", "These do not count against the number of cantrips/spells I can know" ]), spellcastingBonus : [{ name : "Mark of Ordning", spells : ["minor illusion", "fog cloud", "invisibility"], selection : ["minor illusion", "fog cloud", "invisibility"], times : [2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3] }] }, "fire giant" : { name : "Mark of Ordning: Fire Giant", description : desc([ "I add Fire Bolt, Burning Hands, and Flaming Sphere to my known sorcerer spells", "These do not count against the number of cantrips/spells I can know" ]), spellcastingBonus : [{ name : "Mark of Ordning", spells : ["fire bolt", "burning hands", "flaming sphere"], selection : ["fire bolt", "burning hands", "flaming sphere"], times : [2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3] }] }, "frost giant" : { name : "Mark of Ordning: Frost Giant", description : desc([ "I add Ray of Frost, Armor of Agathys, and Hold Person to my known sorcerer spells", "These do not count against the number of cantrips/spells I can know" ]), spellcastingBonus : [{ name : "Mark of Ordning", spells : ["ray of frost", "armor of agathys", "hold person"], selection : ["ray of frost", "armor of agathys", "hold person"], times : [2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3] }] }, "hill giant" : { name : "Mark of Ordning: Hill Giant", description : desc([ "I add Shillelagh, Heroism, and Enlarge/Reduce to my known sorcerer spells", "These do not count against the number of cantrips/spells I can know" ]), spellcastingBonus : [{ name : "Mark of Ordning", spells : ["shillelagh", "heroism", "enlarge/reduce"], selection : ["shillelagh", "heroism", "enlarge/reduce"], times : [2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3] }] }, "stone giant" : { name : "Mark of Ordning: Stone Giant", description : desc([ "I add Resistance, Entangle, and Spike Growth to my known sorcerer spells", "These do not count against the number of cantrips/spells I can know" ]), spellcastingBonus : [{ name : "Mark of Ordning", spells : ["resistance", "entangle", "spike growth"], selection : ["resistance", "entangle", "spike growth"], times : [2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3] }] }, "storm giant" : { name : "Mark of Ordning: Storm Giant", description : desc([ "I add Thunderwave, Shocking Grasp, and Gust of Wind to my known sorcerer spells", "These do not count against the number of cantrips/spells I can know" ]), spellcastingBonus : [{ name : "Mark of Ordning", spells : ["thunderwave", "shocking grasp", "gust of wind"], selection : ["thunderwave", "shocking grasp", "gust of wind"], times : [2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3] }] }, choiceDependencies : [{ feature : "subclassfeature6" }] }, "subclassfeature6" : { name : "Soul of Lost Ostoria", source : [["UA:GSS", 1]], minlevel : 6, description: desc('Use the "Choose Feature" button above to select the giant heritage'), choices : ["Cloud Giant", "Fire Giant", "Frost Giant", "Hill Giant", "Stone Giant", "Storm Giant"], choicesNotInMenu : true, "cloud giant" : { name : "Soul of Lost Ostoria: Cloud Giant", description : desc([ "As a bonus action after casting any of my Mark of Ordning spells, I can teleport", "I teleport to an unoccupied space that I can see up to my Con mod + 10 ft away" ]), action : [["bonus action", ""]] }, "fire giant" : { name : "Soul of Lost Ostoria: Fire Giant", description: desc("I add my Constitution modifier (min 1) to the damage of my Mark of Ordning spells"), calcChanges : { atkCalc : [ function (fields, v, output) { if (v.baseWeaponName == 'fire bolt') output.extraDmg += Math.max(What('Con Mod'), 1); }, "I add my Constitution modifier (min 1) to the damage of my Mark of Ordning spells: Fire Bolt, Burning Hands, and Flaming Sphere" ], spellAdd : [ function (spellKey, spellObj, spName) { if (spName == "sorcerer" && (/^(fire bolt|burning hands|flaming sphere)$/i).test(spellKey)) { spellObj.description = spellObj.description.replace(/d(6|10)/, "d$1+" + Math.max(1, What("Con Mod"))); return true; }; }, "I add my Constitution modifier (min 1) to the damage of my Mark of Ordning spells: Fire Bolt, Burning Hands, and Flaming Sphere" ] } }, "frost giant" : { name : "Soul of Lost Ostoria: Frost Giant", description : desc([ "Immediately after casting any of my Mark of Ordning spells, I gain temporary HP", "I gain my Con mod in temporary HP (min 1) and its added to that of the spell (if any)" ]) }, "hill giant" : { name : "Soul of Lost Ostoria: Hill Giant", source : [["UA:GSS", 2]], description : desc([ "Immediately after casting any of my Mark of Ordning spells, I can magically push others", "I can select up to two creatures within 5 ft of me that each have to make a Str save", "If failed, it is pushed my Con mod (min 1) + 5 ft away from me; It can choose to fail" ]) }, "stone giant" : { name : "Soul of Lost Ostoria: Stone Giant", source : [["UA:GSS", 2]], description : desc([ "Immediately after casting any of my Mark of Ordning spells, I gain a bonus to AC", "My AC increases with my Constitution modifier (min +1) until the end of my next turn" ]) }, "storm giant" : { name : "Soul of Lost Ostoria: Storm Giant", source : [["UA:GSS", 2]], description : desc([ "Immediately after casting any of my Mark of Ordning spells, I shoot lightning", "Up to 3 targets in 30 ft that I can see take my Con mod (min 1) in lightning damage" ]) } }, "subclassfeature14" : { name : "Rage of Fallen Ostoria", source : [["UA:GSS", 2]], minlevel : 14, description : desc([ "When I start casting a sorcerer spell using a spell slot on my turn, I can grow in size", "It lasts for 1 min or until I die or am incapacitated; I can activate it only once per turn", "While it lasts, I enjoy the following benefits (which are cumulative, except the damage):", "\u2022 I increase size by one category (from Medium to Large, for example)", "\u2022 My current HP and maximum HP increase by a number equal to my sorcerer level", "\u2022 My reach and walking speed both increase by 5 ft", "\u2022 I gain advantage on Strength checks and Strength saving throws", "\u2022 I add my Constitution modifier to the damage of my melee weapon attacks (min +1)" ]), additional : levels.map(function(n) { return n < 14 ? "" : "+" + n + " HP"; }), usages : levels.map(function(n) { return n < 14 ? "" : n < 18 ? 1 : 2; }), recovery : "short rest" }, "subclassfeature18" : { name : "Blessing of the All Father", source : [["UA:GSS", 2]], minlevel : 18, description: desc("I add +2 to my Constitution and its maximums increases to 22"), scores : [0, 0, 2, 0, 0, 0], scoresMaximum : [0, 0, 22, 0, 0, 0] } } }); // ua_20180723_Races-of-Eberron.js // This file adds the content from the Unearthed Arcana: Races of Eberron article to MPMB's Character Record Sheet // Note that this content also appears in the script for Wayfinder's Guide to Eberron and thus both sources are included for all things here // Define the sources SourceList["UA:RoE"] = { name : "Unearthed Arcana: Races of Eberron", abbreviation : "UA:RoE", group : "Unearthed Arcana", campaignSetting : "Eberron", url : "https://media.wizards.com/2018/dnd/downloads/723UA_EberronRaces7232018.pdf", date : "2018/07/23" }; // The changeling RaceList["changeling-ua2"] = { regExpSearch : /changeling/i, name : "Changeling", source : [["WGtE", 61], ["UA:RoE", 2]], plural : "Changelings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, skillstxt : "Choose two from Deception, Intimidation, Insight, and Persuasion", languageProfs : ["Common", 2], toolProfs : [["Any tool", 1]], age : " reach adulthood in their early teens and live around 80 years", height : " stand between 5 and 6 feet tall (5'1\" + 2d4\")", weight : " weigh around 140 lb (115 + 2d4 \xD7 2d4 lb)", heightMetric : " stand between 1,5 to over 1,8 metres tall (155 + 5d4 cm)", weightMetric : " weigh around 65 kg (52 + 5d4 \xD7 4d4 / 10 kg)", scorestxt : "+2 Charisma, and +1 Dexterity or +1 Intelligence", scores : [0, 0, 0, 0, 0, 2], trait : "Changeling (+2 Charisma, and +1 Dexterity or +1 Intelligence)\nChange Appearance: As an action, I can polymorph to or from a humanoid form of my size I have seen, not changing my equipment. I revert back if I die and have adv. on Deception.\nUnsettling Visage: As a reaction once per short rest when I'm attacked by a seen attacker, I can impose disadv. Doing this reveals my shapeshifting nature to all within 30 ft.\nDivergent Persona: I have proficiency with one tool, and an alternate persona. While in the alternate form, my proficiency bonus with that tool is doubled.", action : [["action", "Change Appearance"]], features : { "unsettling visage" : { name : "Unsettling Visage", minlevel : 1, usages : 1, recovery : "short rest", action : [["reaction", ""]] } } }; // The kalashtar RaceList["kalashtar-ua"] = { //this code includes contributions by /u/SoilentBrad regExpSearch : /kalashtar/i, name : "Kalashtar", source : [["WGtE", 63], ["UA:RoE", 4]], plural : "Kalashtar", size : 3, speed : { walk : { spd : 30, enc : 20 } }, skillstxt : "Advantage with either Insight, Intimidation, Performance, or Persuasion", languageProfs : ["Common", "Quori", 1], savetxt : { immune : ["effects that require me to dream"] }, dmgres : ["Psychic"], age : " reach adulthood in their late teens and live less than 100 years", height : " range from 5 and a half to well over 6 feet tall (5'4\" + 2d6\")", weight : " weigh around 145 lb (110 + 2d6 \xD7 1d6 lb)", heightMetric : " range from 1,7 to 1,9 metres tall (160 + 5d6 cm)", weightMetric : " weigh around 65 kg (50 + 5d6 \xD7 2d6 / 10 kg)", scorestxt : "+1 Wisdom, +1 Charisma, and +1 to one other ability score of my choice", scores : [0, 0, 0, 0, 1, 1], trait : "Kalashtar (+1 Wisdom, +1 Charisma, and +1 to one other" + (typePF ? "" : " ability score of my choice") + ")\nDual Mind: As a reaction after I roll a Wis" + (typePF ? " save, I can gain adv." : "dom saving throw, I can gain advantage") + " on it.\nMind Link: I can speak telepathically to any creature I can see within 60 ft, as long as it can speak at least one language. As a bonus action, I can give that creature the ability to speak telepathically back to me until the start of my next turn.\nPsychic Glamour: I have adv. on Insight, Intimidation, Performance, or Persuasion checks.\nSevered from Dreams: I don't dream and thus immune to spells that affect dreams.", action : [['bonus action', 'Mind Link'], ['reaction', 'Dual Mind']] }; // The four subraces of the shifter RaceList["beasthide shifter-ua"] = { regExpSearch : /^(?=.*shifter)(?=.*beast)(?=.*hide).*$/i, name : "Beasthide shifter", sortname : "Shifter, Beasthide", source : [["WGtE", 66], ["UA:RoE", 6]], plural : "Beasthide shifters", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common"], vision : [["Darkvision", 60]], skills : ["Athletics", "Perception"], age : " reach young adulthood at age 10 and rarely live over 70", height : " range from under 5 to almost 6 feet tall (4'6\" + 2d8\")", weight : " weigh around 135 lb (90 + 2d8 \xD7 2d4 lb)", heightMetric : " range from under 1,5 to 1,8 metres tall (4'6\" + 5d8 cm)", weightMetric : " weigh around 65 kg (40 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 1, 2, 0, 0, 0], trait : "Beasthide Shifter: (+1 Dexterity, +2 Constitution)\n\nShifting: As a bonus action once per short rest, I can assume a more bestial appearance.\nThis transformation lasts for 1 minute, until I die, or until I revert back as a bonus action.\nWhen I shift, I gain temporary HP equal to 1d6 + my level + my Constitution modifier (minimum 1 temporary hit point).\nWhile transformed like this, I have a +1 bonus to AC", features : { "shift" : { name : "Shift", minlevel : 1, usages : 1, recovery : "short rest", action : [["bonus action", " (start/end)"]] } } }; RaceList["longtooth shifter-ua"] = { regExpSearch : /^(?=.*shifter)(?=.*long)(?=.*(tooth|teeth)).*$/i, name : "Longtooth shifter", sortname : "Shifter, Longtooth", source : [["WGtE", 66], ["UA:RoE", 6]], plural : "Longtooth shifters", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common"], weaponOptions : [{ baseWeapon : "unarmed strike", regExpSearch : /^(?=.*fangs?)(?=.*long)(?=.*(tooth|teeth)).*$/i, name : "Longtooth Fangs", source : [["WGtE", 66], ["UA:RoE", 6]], damage : [1, 6, "piercing"], description : "Only while shifted; One attack as bonus action", selectNow : true }], vision : [["Darkvision", 60]], skills : ["Intimidation", "Perception"], age : " reach young adulthood at age 10 and rarely live over 70", height : " range from under 5 to almost 6 feet tall (4'6\" + 2d8\")", weight : " weigh around 135 lb (90 + 2d8 \xD7 2d4 lb)", heightMetric : " range from under 1,5 to 1,8 metres tall (4'6\" + 5d8 cm)", weightMetric : " weigh around 65 kg (40 + 5d8 \xD7 4d4 / 10 kg)", scores : [2, 1, 0, 0, 0, 0], trait : "Longtooth Shifter: (+2 Strength, +1 Dexterity)\nShifting: As a bonus action once per short rest, I can assume a more bestial appearance.\nThis transformation lasts for 1 minute, until I die, or until I revert back as a bonus action.\nWhen I shift, I gain temporary HP equal to my level + my Constitution modifier (minimum 1 temporary hit point).\nWhile transformed like this, I use my elongated fangs to make unarmed strikes, dealing 1d6 piercing damage. As a bonus action, I can maken one attack with my fangs.", action : ['bonus action', 'Attack with Longtooth Fangs'], features : { "shift" : { name : "Shift", minlevel : 1, usages : 1, recovery : "short rest", action : [["bonus action", " (start/end)"]] } } }; RaceList["swiftstride shifter-ua"] = { regExpSearch : /^(?=.*shifter)(?=.*swift)(?=.*stride).*$/i, name : "Swiftstride shifter", sortname : "Shifter, Swiftstride", source : [["WGtE", 66], ["UA:RoE", 6]], plural : "Swiftstride shifters", size : 3, speed : { walk : { spd : 35, enc : 25 } }, languageProfs : ["Common"], vision : [["Darkvision", 60]], skills : ["Acrobatics", "Perception"], age : " reach young adulthood at age 10 and rarely live over 70", height : " range from under 5 to almost 6 feet tall (4'6\" + 2d8\")", weight : " weigh around 135 lb (90 + 2d8 \xD7 2d4 lb)", heightMetric : " range from under 1,5 to 1,8 metres tall (4'6\" + 5d8 cm)", weightMetric : " weigh around 65 kg (40 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 2, 0, 0, 0, 1], trait : "Swiftstride Shifter: (+2 Dexterity, +1 Charisma)\nShifting: As a bonus action once per short rest, I can assume a more bestial appearance.\nThis transformation lasts for 1 minute, until I die, or until I revert back as a bonus action.\nWhen I shift, I gain temporary HP equal to my level + my Con" + (typePF ? "stitution modifier (minimum 1 temporary hit point" : " mod (minimum 1 temp HP") + ").\nWhile transformed like this, my walking speed increases with 5 ft.\nAs a reaction when an enemy ends its turn within 5 ft of me while I'm shifted, I can move 10 ft without provoking opportunity attacks.", action : ['reaction', 'Stride (while shifted)'], features : { "shift" : { name : "Shift", minlevel : 1, usages : 1, recovery : "short rest", action : [["bonus action", " (start/end)"]] } } }; RaceList["wildhunt shifter-ua"] = { regExpSearch : /^(?=.*shifter)(?=.*wild)(?=.*hunt).*$/i, name : "Wildhunt shifter", sortname : "Shifter, Wildhunt", source : [["WGtE", 66], ["UA:RoE", 6]], plural : "Wildhunt shifters", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common"], vision : [["Darkvision", 60]], skills : ["Perception", "Survival"], age : " reach young adulthood at age 10 and rarely live over 70", height : " range from under 5 to almost 6 feet tall (4'6\" + 2d8\")", weight : " weigh around 135 lb (90 + 2d8 \xD7 2d4 lb)", heightMetric : " range from under 1,5 to 1,8 metres tall (4'6\" + 5d8 cm)", weightMetric : " weigh around 65 kg (40 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 1, 0, 0, 2, 0], trait : "Wildhunt Shifter: (+1 Dexterity, +2 Wisdom)\nShifting: As a bonus action once per short rest, I can transform and get adv. on Wis checks." + (typePF ? " " : "\n") + "This transformation lasts for 1 minute, until I die, or until I revert back as a bonus action.\nWhen I shift, I gain temporary HP equal to my level + my Con" + (typePF ? "stitution modifier (minimum 1 temporary hit point" : " mod (minimum 1 temp HP") + ").\nMark the Scent: As a bonus action once per short rest, I can mark a creature that I can see within 10 ft. Until the end of my next long rest, my proficiency bonus is doubled for checks to find this target, and I always know its location if it is within 60 ft of me.", features : { "shift" : { name : "Shift", minlevel : 1, usages : 1, recovery : "short rest", action : [["bonus action", " (start/end)"]] }, "mark the scent" : { name : "Mark the Scent", minlevel : 1, usages : 1, recovery : "short rest", action : [["bonus action", ""]] } } }; // The three subraces of the warforged RaceList["envoy warforged-ua"] = { regExpSearch : /^(?=.*warforged)(?=.*envoy).*$/i, name : "Envoy warforged", sortname : "Warforged, Envoy", source : [["WGtE", 69], ["UA:RoE", 9]], plural : "Envoy warforged", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", 1], toolProfs : [["Any tool", 1]], skillstxt : "Choose any one skill, any one tool, and expertise with any one tool I'm proficient with", savetxt : { text : ["Magic can't put me to sleep"], immune : ["disease", "exhaustion from lack of rest"], adv_vs : ["poison"] }, dmgres : ["Poison"], age : " are created as adults and will only start to show signs of physical deterioration after 150 years, but have no further aging effects", height : " stand between 6 and 7 feet tall (5'10\" + 2d6\")", weight : " weigh around 300 lb (270 + 2d6 \xD7 4 lb)", heightMetric : " stand between 1,8 and 2,1 metres tall (178 + 5d6 cm)", weightMetric : " weigh around 135 kg (125 + 5d6 \xD7 8 / 10 kg)", scorestxt : "+1 Constitution and +1 to two other ability scores of my choice", scores : [0, 0, 1, 0, 0, 0], trait : "Envoy Warforged (+1 Constitution and +1 to two other abilit" + (typePF ? "ies" : "y scores of my choice") + ")\nWarforged Resilience: I do not need to sleep, eat, drink, or breathe.\nSentry's Rest: To benefit from a long rest, I need to enter an inactive state for 6 hours, during which I am not rendered unconscious and can see and hear as normal.\nIntegrated Protection: My AC depends on armor proficiency: none (11+Dex), light (11+Dex+Prof B.), medium (13+Dex+Prof B.), heavy (16+Prof B.; Stealth disadv.). I can use a shield.\nIntegrated Tool: I have expertise with one tool and it is integrated into my body.", eval : function() { var lightProf = tDoc.getField('Proficiency Armor Light').isBoxChecked(0); if (tDoc.getField('Proficiency Armor Heavy').isBoxChecked(0)) { CurrentRace.armorAdd.select = 'Heavy Plating'; } else if (tDoc.getField('Proficiency Armor Medium').isBoxChecked(0) && ((What('Dex') < 18 && lightProf) || !lightProf)) { CurrentRace.armorAdd.select = 'Composite Plating'; } else { CurrentRace.armorAdd.select = 'Darkwood Core' + (lightProf ? " (Prof)" : ""); }; }, removeeval : function () { if ((/darkwood core|composite plating|heavy plating/).test(CurrentArmour.known)) { tDoc.resetForm(['AC Armor Description']); }; }, armorAdd : { select : "" }, armorOptions : [{ regExpSearch : /^(?=.*darkwood)(?=.*core).*$/i, name : "Darkwood core", source : [["WGtE", 69], ["UA:RoE", 9]], ac : 11 }, { regExpSearch : /^(?=.*darkwood)(?=.*core)(?=.*prof).*$/i, name : "Darkwood core (Prof)", source : [["WGtE", 69], ["UA:RoE", 9]], ac : "11+Prof" }, { regExpSearch : /^(?=.*composite)(?=.*plating).*$/i, name : "Composite plating", source : [["WGtE", 69], ["UA:RoE", 9]], type : "medium", ac : "13+Prof", dex : 2 }, { regExpSearch : /^(?=.*heavy)(?=.*plating).*$/i, name : "Heavy plating", source : [["WGtE", 69], ["UA:RoE", 9]], type : "heavy", ac : "16+Prof", stealthdis : true }] }; RaceList["juggernaut warforged-ua"] = { regExpSearch : /^(?=.*warforged)(?=.*juggernaut).*$/i, name : "Juggernaut warforged", sortname : "Warforged, Juggernaut", source : [["WGtE", 70], ["UA:RoE", 9]], plural : "Juggernaut warforged", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common"], weaponOptions : [{ baseWeapon : "unarmed strike", regExpSearch : /^(?=.*warforged)(?=.*iron)(?=.*fists?).*$/i, name : "Warforged Iron Fists", source : [["WGtE", 70], ["UA:RoE", 9]], damage : [1, 4, "bludgeoning"], selectNow : true }], savetxt : { text : ["Magic can't put me to sleep"], immune : ["disease", "exhaustion from lack of rest"], adv_vs : ["poison"] }, dmgres : ["Poison"], age : " are created as adults and will only start to show signs of physical deterioration after 150 years, but have no further aging effects", height : " stand between 6 and 7 feet tall (5'10\" + 2d6\")", weight : " weigh around 300 lb (270 + 2d6 \xD7 4 lb)", heightMetric : " stand between 1,8 and 2,1 metres tall (178 + 5d6 cm)", weightMetric : " weigh around 135 kg (125 + 5d6 \xD7 8 / 10 kg)", scores : [2, 0, 1, 0, 0, 0], trait : "Juggernaut Warforged (+2 Strength, +1 Constitution)" + (typePF ? "" : " Iron Fists: unarmed strikes do 1d4.") + "\nWarforged Resilience: I do not need to sleep, eat, drink, or breathe.\nSentry's Rest: To benefit from a long rest, I need to enter an inactive state for 6 hours, during which I am not rendered unconscious and can see and hear as normal.\nIntegrated Protection: My AC depends on armor proficiency: none (11+Dex), light (11+Dex+Prof B.), medium (13+Dex+Prof B.), heavy (16+Prof B.; Stealth disadv.). I can use a shield.\nPowerful Build: I count as one size larger for my carrying capacity, push, drag, and lift." + (typePF ? " Iron Fists: My unarmed strikes do 1d4 damage." : ""), carryingCapacity : 2, eval : function() { var lightProf = tDoc.getField('Proficiency Armor Light').isBoxChecked(0); if (tDoc.getField('Proficiency Armor Heavy').isBoxChecked(0)) { CurrentRace.armorAdd.select = 'Heavy Plating'; } else if (tDoc.getField('Proficiency Armor Medium').isBoxChecked(0) && ((What('Dex') < 18 && lightProf) || !lightProf)) { CurrentRace.armorAdd.select = 'Composite Plating'; } else { CurrentRace.armorAdd.select = 'Darkwood Core' + (lightProf ? " (Prof)" : ""); }; }, removeeval : function () { if ((/darkwood core|composite plating|heavy plating/).test(CurrentArmour.known)) { tDoc.resetForm(['AC Armor Description']); }; }, armorAdd : { select : "" }, armorOptions : [{ regExpSearch : /^(?=.*darkwood)(?=.*core).*$/i, name : "Darkwood core", source : [["WGtE", 69], ["UA:RoE", 9]], ac : 11 }, { regExpSearch : /^(?=.*darkwood)(?=.*core)(?=.*prof).*$/i, name : "Darkwood core (Prof)", source : [["WGtE", 69], ["UA:RoE", 9]], ac : "11+Prof" }, { regExpSearch : /^(?=.*composite)(?=.*plating).*$/i, name : "Composite plating", source : [["WGtE", 69], ["UA:RoE", 9]], type : "medium", ac : "13+Prof", dex : 2 }, { regExpSearch : /^(?=.*heavy)(?=.*plating).*$/i, name : "Heavy plating", source : [["WGtE", 69], ["UA:RoE", 9]], type : "heavy", ac : "16+Prof", stealthdis : true }] }; RaceList["skirmisher warforged-ua"] = { regExpSearch : /^(?=.*warforged)(?=.*skirmisher).*$/i, name : "Skirmisher warforged", sortname : "Warforged, Skirmisher", source : [["WGtE", 70], ["UA:RoE", 9]], plural : "Skirmisher warforged", size : 3, speed : { walk : { spd : 35, enc : 25 } }, languageProfs : ["Common"], savetxt : { text : ["Magic can't put me to sleep"], immune : ["disease", "exhaustion from lack of rest"], adv_vs : ["poison"] }, dmgres : ["Poison"], age : " are created as adults and will only start to show signs of physical deterioration after 150 years, but have no further aging effects", height : " stand between 6 and 7 feet tall (5'10\" + 2d6\")", weight : " weigh around 300 lb (270 + 2d6 \xD7 4 lb)", heightMetric : " stand between 1,8 and 2,1 metres tall (178 + 5d6 cm)", weightMetric : " weigh around 135 kg (125 + 5d6 \xD7 8 / 10 kg)", scores : [0, 2, 1, 0, 0, 0], trait : "Skirmisher Warforged (+2 Dexterity, +1 Constitution)\nWarforged Resilience: I do not need to sleep, eat, drink, or breathe.\nSentry's Rest: To benefit from a long rest, I need to enter an inactive state for 6 hours, during which I am not rendered unconscious and can see and hear as normal.\nIntegrated Protection: My AC depends on armor proficiency: none (11+Dex), light (11+Dex+Prof B.), medium (13+Dex+Prof B.), heavy (16+Prof B.; Stealth disadv.). I can use a shield.\nLight Step: If I travel alone for an hour or more, I can move stealthily at a normal pace.", eval : function() { var lightProf = tDoc.getField('Proficiency Armor Light').isBoxChecked(0); if (tDoc.getField('Proficiency Armor Heavy').isBoxChecked(0)) { CurrentRace.armorAdd.select = 'Heavy Plating'; } else if (tDoc.getField('Proficiency Armor Medium').isBoxChecked(0) && ((What('Dex') < 18 && lightProf) || !lightProf)) { CurrentRace.armorAdd.select = 'Composite Plating'; } else { CurrentRace.armorAdd.select = 'Darkwood Core' + (lightProf ? " (Prof)" : ""); }; }, removeeval : function () { if ((/darkwood core|composite plating|heavy plating/).test(CurrentArmour.known)) { tDoc.resetForm(['AC Armor Description']); }; }, armorAdd : { select : "" }, armorOptions : [{ regExpSearch : /^(?=.*darkwood)(?=.*core).*$/i, name : "Darkwood core", source : [["WGtE", 69], ["UA:RoE", 9]], ac : 11 }, { regExpSearch : /^(?=.*darkwood)(?=.*core)(?=.*prof).*$/i, name : "Darkwood core (Prof)", source : [["WGtE", 69], ["UA:RoE", 9]], ac : "11+Prof" }, { regExpSearch : /^(?=.*composite)(?=.*plating).*$/i, name : "Composite plating", source : [["WGtE", 69], ["UA:RoE", 9]], type : "medium", ac : "13+Prof", dex : 2 }, { regExpSearch : /^(?=.*heavy)(?=.*plating).*$/i, name : "Heavy plating", source : [["WGtE", 69], ["UA:RoE", 9]], type : "heavy", ac : "16+Prof", stealthdis : true }] }; // ua_20180810_Magic-Items-of-Eberron.js // This file adds the content from the Unearthed Arcana: Magic Items of Eberron to MPMB's Character Record Sheet // Note that this content also appears in the script for Wayfinder's Guide to Eberron and thus both sources are included for all things here // Define the sources SourceList["UA:MIoE"] = { name : "Unearthed Arcana: Magic Items of Eberron", abbreviation : "UA:MIoE", group : "Unearthed Arcana", campaignSetting : "Eberron", url : "https://media.wizards.com/2018/dnd/downloads/UA_Magic_Items_of_Eberron.pdf", date : "2018/08/10" }; // Different or not available in Eberron: Rising from the Last War MagicItemsList["band of loyalty-ua"] = { name : "Band of Loyalty", source : [["WGtE", 115], ["UA:MIoE", 2]], type : "ring", rarity : "common", description : "If I'm reduced to zero hit points while attuned to this ring, I instantly die. These rings are favored by spies who can't afford to fall into enemy hands.", descriptionFull : "If you are reduced to zero hit points while attuned to a band of loyalty, you instantly die. These rings are favored by spies who can't afford to fall into enemy hands.", attunement : true } var UAMIoE_docentFullDescription = [ "A docent is a small metal sphere, approximately 2 inches across, studded with dragonshards. Despite a strong magical aura, it has no obvious abilities. When you attune to a docent, the sphere becomes embedded in your chest and comes to life\u2014literally.", ">>Sentience<<. A docent is a sentient neutral item with an Intelligence of 16, a Wisdom of 14, and a Charisma of 14. It can perceive the world through your senses.", "A docent communicates telepathically with its wielder and can speak, read, and understand Common and Giant.", ">>Personality<<. A docent is designed to advise and assist the warforged it's attached to. One of the simple functions of a docent is to serve as a translator. The docent's properties are under its control, and if you have a bad relationship with your docent it may refuse to assist you… or simply lie about information that it obtains. However, if you treat your docent well it could serve as a useful ally.", "The origin of docents is a great mystery. House Cannith created the first warforged thirty years ago. But the docents come from the distant land of Xen'drik and appear to be thousands of years old. Were they created to interface with some other form of construct? Or are the modern warforged a new interpretation of an ancient design? The docents claim to have forgotten their creators… but this is a mystery waiting to be unraveled. While all docents come from Xen'drik, some have been brought to Khorvaire by explorers and it's possible to encounter them in the Five Nations.", ">>Languages<<. All docents understand Common and Giant, but a docent knows up to four additional languages. Elvish and Draconic are common options. If a docent knows less than six languages in total, it can add new languages to its repertoire after encountering them. So a docent found in Xen'drik may have never encountered a dwarf before… but after spending some time in Khorvaire studying dwarves, it could pick up the Dwarvish language.", ">>Properties<<. A docent possesses up to three of the following properties:", "\u2022 The docent can cast the detect magic spell at will.", "\u2022 The docent can cast the detect evil and good spell at will.", "\u2022 The docent can detect any form of divination or scrying targeting it and its warforged host.", "\u2022 The docent has a +7 bonus to Intelligence (Arcana) checks.", "\u2022 The docent has a +7 bonus to Intelligence (History) checks.", "\u2022 The docent has a +7 bonus to Intelligence (Investigation) checks.", "\u2022 The docent has a +7 bonus to Intelligence (Nature) checks.", "\u2022 The docent has a +6 bonus to Wisdom (Insight) checks.", "\u2022 The docent has a +6 bonus to Wisdom (Perception) checks.", "\u2022 The docent has a +6 bonus to Wisdom (Medicine) checks targeting its warforged host. If the host is rendered unconscious, the docent will automatically attempt to stabilize them once each turn.", "You can use a bonus action on your turn to request that the docent use one of its properties on your behalf." ]; MagicItemsList["docent-ua"] = { name : "Docent", source : [["WGtE", 121], ["UA:MIoE", 3]], type : "wondrous item", rarity : "rare", description : "I can embed this sentient small metal sphere studded with dragonshards into my chest. I can communicate telepathically with it. It can serve me as an advisor and a translator, as it knowns 6 languages. It also knows spells and/or skills that I can have it use as a bonus action. See Notes page.", descriptionFull : UAMIoE_docentFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)< 7 && (/^(?=.*dragonmark)(?=.*detection).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Charisma or Intelligence score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells See Invisibility and True Seeing, each of which you can cast once without expending a spell slot or using a material component. Intelligence is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a long rest before you can do so again.", description : "My Intuition Die increases with one step (d4 to d6, for example). I can cast See Invisibility and True Seeing each once per long rest without using spell slots or requiring material components. Intelligence is my spellcasting ability for these. [+1 Charisma or Intelligence]", scorestxt : "+1 Charisma or Intelligence", spellcastingBonus : [{ name : "1\xD7 per long", spells : ["see invisibility", "true seeing"], selection : ["see invisibility", "true seeing"], spellcastingAbility : 4, firstCol : 'oncelr', times : 2 }], spellChanges : { "see invisibility" : { components : "V,S", compMaterial : "", changes : "Spells cast through my Greater Dragonmark don't require material components." }, "true seeing" : { components : "V,S", compMaterial : "", description : "1 willing crea gains truesight 120 ft; see through illusions, hidden doors, ethereal plane", changes : "Spells cast through my Greater Dragonmark don't require material components." } } }, "finding" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Finding", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*finding).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Dexterity, Strength, or Wisdom score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells Locate Creature and Find the Path, each of which you can cast once without expending a spell slot or using a material component. Wisdom is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a long rest before you can do so again.", description : "My Intuition Die increases with one step (d4 to d6, for example). I can cast Locate Creature and Find the Path each once per long rest without using spell slots or requiring material components. Wisdom is my spellcasting ability for these. [+1 " + (typePF ? "Strength, Dexterity, or Wisdom]" : "Str, Dex, or Wis]"), scorestxt : "+1 Strength, Dexterity, or Wisdom", spellcastingBonus : [{ name : "1\xD7 per long", spells : ["locate creature", "find the path"], selection : ["locate creature", "find the path"], spellcastingAbility : 5, firstCol : 'oncelr', times : 2 }], spellChanges : { "locate creature" : { components : "V,S", compMaterial : "", changes : "Spells cast through my Greater Dragonmark don't require material components." }, "find the path" : { components : "V,S", compMaterial : "", description : "Know the shortest route to a location I am familiar with and are on the same plane with", changes : "Spells cast through my Greater Dragonmark don't require material components." } } }, "handling" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Handling", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*handling).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Dexterity or Wisdom score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells Beast Sense and Dominate Beast, each of which you can cast once without expending a spell slot or using a material component. Wisdom is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a long rest before you can do so again.", description : "My Intuition Die increases with one step (d4 to d6, for example). I can cast Beast Sense and Dominate Beast each once per long rest without using spell slots or requiring material components. Wisdom is my spellcasting ability for these. [+1 Dexterity or Wisdom]", scorestxt : "+1 Dexterity or Wisdom", spellcastingBonus : [{ name : "1\xD7 per long", spells : ["beast sense", "dominate beast"], selection : ["beast sense", "dominate beast"], spellcastingAbility : 5, firstCol : 'oncelr', times : 2 }] }, "healing" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Healing", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*healing).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Dexterity or Wisdom score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells Mass Healing Word and Greater Restoration, each of which you can cast once without expending a spell slot or using a material component. Wisdom is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a long rest before you can do so again.", description : "My Intuition Die increases with one step (d4 to d6, for example). I can cast Mass Healing Word and Greater Restoration each once per long rest without using spell slots or requiring material components. Wisdom is my spellcasting ability for these. [+1 Dexterity or Wisdom]", scorestxt : "+1 Dexterity or Wisdom", spellcastingBonus : [{ name : "1\xD7 per long", spells : ["mass healing word", "greater restoration"], selection : ["mass healing word", "greater restoration"], spellcastingAbility : 5, firstCol : 'oncelr', times : 2 }], spellChanges : { "greater restoration" : { components : "V,S", compMaterial : "", description : "Reduce exhaustion or end charm, petrify, curse, stat or max HP reduction", changes : "Spells cast through my Greater Dragonmark don't require material components." } } }, "hospitality" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Hospitality", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*hospitality).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Dexterity or Charisma score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells Sanctuary and Mordenkainen's Magnificent Mansion, each of which you can cast once without expending a spell slot or using a material component. Charisma is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a long rest before you can do so again.", description : "My Intuition Die increases with one step (d4 to d6, for example). I can cast Sanctuary and " + (typePF ? "Mordenkainen's " : "") + "Magnificent Mansion each once per long rest without using spell slots or requiring material components. Charisma is my spellcasting ability for these. [+1 Dexterity or Charisma]", scorestxt : "+1 Dexterity or Charisma", spellcastingBonus : [{ name : "1\xD7 per long", spells : ["sanctuary", "mordenkainen's magnificent mansion"], selection : ["sanctuary", "mordenkainen's magnificent mansion"], spellcastingAbility : 6, firstCol : 'oncelr', times : 2 }], spellChanges : { "sanctuary" : { components : "V,S", compMaterial : "", changes : "Spells cast through my Greater Dragonmark don't require material components." }, "mordenkainen's magnificent mansion" : { components : "V,S", compMaterial : "", description : "Create extradimensional mansion with rooms, food and servants to serve 100 people; see book", changes : "Spells cast through my Greater Dragonmark don't require material components." } } }, "making" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Making", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*making).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Dexterity or Intelligence score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells Fabricate and Creation, each of which you can cast once without expending a spell slot or using a material component. Intelligence is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a long rest before you can do so again.", description : "My Intuition Die increases with one step (d4 to d6, for example). I can cast Fabricate and Creation each once per long rest without using spell slots or requiring material components. Intelligence is my spellcasting ability for these. [+1 Dexterity or Intelligence]", scorestxt : "+1 Dexterity or Intelligence", spellcastingBonus : [{ name : "1\xD7 per long", spells : ["fabricate", "creation"], selection : ["fabricate", "creation"], spellcastingAbility : 4, firstCol : 'oncelr', times : 2 }], spellChanges : { "creation" : { components : "V,S", compMaterial : "", changes : "Spells cast through my Greater Dragonmark don't require material components." } } }, "passage" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Passage", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*passage).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Dexterity or Constitution score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells Blink and Teleportation Circle, each of which you can cast once without expending a spell slot or using a material component. Constitution is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a long rest before you can do so again.", description : "My Intuition Die increases with one step (d4 to d6, for example). I can cast Blink and Teleportation Circle each once per long rest without using spell slots or requiring material components. Constitution is my spellcasting ability for these. [+1 Dexterity or Constitution]", scorestxt : "+1 Dexterity or Constitution", spellcastingBonus : [{ name : "1\xD7 per long", spells : ["blink", "teleportation circle"], selection : ["blink", "teleportation circle"], spellcastingAbility : 3, firstCol : 'oncelr', times : 2 }], spellChanges : { "teleportation circle" : { components : "V,S", compMaterial : "", description : "Create a circle to teleport to another teleportation circle on same plane; see book", changes : "Spells cast through my Greater Dragonmark don't require material components." } } }, "scribing" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Scribing", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*scribing).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Intelligence or Charisma score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells Sending and Tongues, each of which you can cast once without expending a spell slot or using a material component. Intelligence is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a short or long rest before you can do so again.", description : "My Intuition Die increases with one step (d4 to d6, for example). I can cast Sending and Tongues each once per short rest without using spell slots or requiring material components. Intelligence is my spellcasting ability for these. [+1 Intelligence or Charisma]", scorestxt : "+1 Intelligence or Charisma", spellcastingBonus : [{ name : "1\xD7 per short", spells : ["sending", "tongues"], selection : ["sending", "tongues"], spellcastingAbility : 4, firstCol : 'oncesr', times : 2 }], spellChanges : { "sending" : { components : "V,S", compMaterial : "", changes : "Spells cast through my Greater Dragonmark don't require material components." }, "tongues" : { components : "V,S", compMaterial : "", changes : "Spells cast through my Greater Dragonmark don't require material components." } } }, "sentinel" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Sentinel", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*sentinel).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Strength or Wisdom score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells Compelled Duel, Warding Bond, each of which you can cast once without expending a spell slot or using a material component. Wisdom is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a short or long rest before you can do so again.", description : "My Intuition Die increases with one step (d4 to d6, for example). I can cast Compelled Duel and Warding Bond each once per short rest without using spell slots or requiring material components. Wisdom is my spellcasting ability for these. [+1 Strength or Wisdom]", scorestxt : "+1 Strength or Wisdom", spellcastingBonus : [{ name : "1\xD7 per short", spells : ["compelled duel", "warding bond"], selection : ["compelled duel", "warding bond"], spellcastingAbility : 5, firstCol : 'oncesr', times : 2 }], spellChanges : { "warding bond" : { components : "V,S", compMaterial : "", description : "1 crea +1 AC, +1 saves, resistance all dmg; if it takes dmg I take same dmg; ends if >60 ft away", changes : "Spells cast through my Greater Dragonmark don't require material components." } } }, "shadow" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Shadow", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*shadow).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Dexterity or Charisma score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells Nondetection and Mislead, each of which you can cast once without expending a spell slot or using a material component. Charisma is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a long rest before you can do so again.", description : "My Intuition Die increases with one step (d4 to d6, for example). I can cast Nondetection and Mislead each once per long rest without using spell slots or requiring material components. Charisma is my spellcasting ability for these. [+1 Dexterity or Charisma]", scorestxt : "+1 Dexterity or Charisma", spellcastingBonus : [{ name : "1\xD7 per long", spells : ["nondetection", "mislead"], selection : ["nondetection", "mislead"], spellcastingAbility : 6, firstCol : 'oncelr', times : 2 }], spellChanges : { "nondetection" : { components : "V,S", compMaterial : "", description : "1 crea or object up to 10 cu ft hidden from all divination magic", changes : "Spells cast through my Greater Dragonmark don't require material components." } } }, "storm" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Storm", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*storm).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Dexterity or Charisma score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells Control Water and Control Winds, each of which you can cast once without expending a spell slot or using a material component. Charisma is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a long rest before you can do so again.", description : "My Intuition Die increases with one step (d4 to d6, for example). I can cast Control Water and Control Winds each once per long rest without using spell slots or requiring material components. Charisma is my spellcasting ability for these. [+1 Dexterity or Charisma]", scorestxt : "+1 Dexterity or Charisma", spellcastingBonus : [{ name : "1\xD7 per long", spells : ["control water", "control winds"], selection : ["control water", "control winds"], spellcastingAbility : 6, firstCol : 'oncelr', times : 2 }], spellChanges : { "control water" : { components : "V,S", compMaterial : "", changes : "Spells cast through my Greater Dragonmark don't require material components." } } }, "warding" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Warding", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*warding).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Dexterity or Intelligence score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells Knock, Glyph of Warding and Leomund's Secret Chest*, each of which you can cast once without expending a spell slot or using a material component. Intelligence is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a long rest before you can do so again.\n\n* To cast Leomund's Secret Chest using this feat, you must have a Siberys dragonshard with a value of at least 100 gp. While you have this dragonshard in hand, it serves as the spell's focus, and you can use it to summon and dismiss the chest.", description : "My Intuition Die increases one step. I can cast Knock, Secret Chest, and Glyph of Warding each once per long rest without spell slot or material component. Secret Chest requires a 100 gp Siberys dragonshard as a focus. These use Int as spellcasting ability. [+1 Dex or Int]", scorestxt : "+1 Dexterity or Intelligence", spellcastingBonus : [{ name : "1\xD7 per long", spells : ["knock", "glyph of warding"], selection : ["knock", "glyph of warding"], spellcastingAbility : 4, firstCol : 'oncelr', times : 2 }, { name : "with Siberys dragonshard", spells : ["leomund's secret chest"], selection : ["leomund's secret chest"], firstCol : 'oncelr' }], spellChanges : { "glyph of warding" : { components : "V,S", compMaterial : "", description : "Create a glyph that triggers on set condition; Int(Investigation) vs. Spell DC; see book", changes : "Spells cast through my Greater Dragonmark don't require material components." }, "leomund's secret chest" : { compMaterial : "A Siberys dragonshard with a value of at least 100 gp", description : "Hide chest with content in Ethereal Plane for 60 days, after that chance of loss; 1 a reappear (100gp)", changes : "Leomund's Secret Chest cast through my Greater Dragonmark of Warding requires a Siberys dragonshard as a focus instead of an exquisite chest and its tiny replica." } } } }; // Aberrant Dragonmark feat FeatsList["aberrant dragonmark-ua"] = { name : "Aberrant Dragonmark", source : [["WGtE", 112], ["UA:D", 9]], prerequisite : "Not having a dragonmark", prereqeval : function(v) { return !(/dragonmark/i).test(CurrentRace.known); }, descriptionFull : "You have manifested an aberrant dragonmark. Determine its appearance and the flaw associated with it (see the table below for examples). You gain the following benefits:\n \u2022 Increase your Constitution score by 1, to a maximum of 20.\n \u2022 You learn a cantrip from the sorcerer spell list. In addition, choose a 1st-level spell from the sorcerer spell list. You learn that spell and can cast it at its lowest level. Once you cast it, you must finish a long rest before you can cast it again. Constitution is your spellcasting ability for these spells.\n \u2022 You can increase the power of your aberrant spells at the risk of your own vitality. When you cast a spell with your aberrant mark, you can use one of your Hit Dice to increase the spell's level by 1. Immediately after you cast the spell, roll the Hit Die. You take damage equal to the number rolled.\n\n" + toUni("1d8") + "\t" + toUni("Aberrant Mark Flaw") + "\n1\tYour mark is a source of constant physical pain.\n2\tYour mark whispers to you, though you may not understand what it says.\n3\tIn times of stress, your mark may trigger a cantrip effect involuntarily.\n4\tThe skin around your mark has an unusual appearance: burned, scaly, withered, etc.\n5\tMundane animals become uneasy around you.\n6\tYou have dramatic mood swings any time you use your mark.\n7\tYour appearance changes in a minor way every time you use your mark.\n8\tYou have horrific nightmares after you use your mark.", description : "I learn a sorcerer cantrip and a 1st-level sorcerer spell, using Con as my spellcasting ability. I can cast the spell once per long rest without a spell slot. I can use a Hit Die when casting the spell, casting it as if with a level 2 spell slot and taking the HD as damage. [+1 Con]", scores : [0, 0, 1, 0, 0, 0], spellcastingAbility : 3, spellcastingBonus : [{ name : "Sorcerer cantrip", 'class' : 'sorcerer', level : [0, 0], firstCol : 'atwill' }, { name : "Sorcerer 1st-level spell", 'class' : 'sorcerer', level : [1, 1], firstCol : 'oncelr' }] }; // ua_20190815_Barbarian-and-Monk.js // This file adds the content from the Unearthed Arcana: Barbarian and Monk article to MPMB's Character Record Sheet // Define the source SourceList["UA:BnM"] = { name : "Unearthed Arcana: Barbarian and Monk", abbreviation : "UA:BnM", group : "Unearthed Arcana", url : "https://media.wizards.com/2019/dnd/downloads/UA-WildAstral.pdf", date : "2019/08/15" }; // Add a subclasses for the Barbarian and one for the Monk AddSubClass("barbarian", "path of the wild soul-ua", { regExpSearch : /^(?=.*\bwild\b)(?=.*\bsoul\b).*$/i, subname : "Path of the Wild Soul", subnameShort: "Wild Soul", fullname : "Wild Soul", source : [["UA:BnM", 1]], abilitySave : 3, features : { "subclassfeature3" : { name : "Lingering Magic", source : [["UA:BnM", 1]], minlevel : 3, description : desc([ "I can cast Detect Magic without spell slots or components, using Con for spellcasting", "When I do so, I faintly glow a color corresponding to the school of magic I detect" ]), usages : "Con mod (min 1) per ", usagescalc : "event.value = Math.max(1, What('Con Mod'));", recovery : "long rest", spellcastingBonus : [{ name : "Lingering Magic", spells : ["detect magic"], selection : ["detect magic"] }], spellChanges : { "detect magic" : { components : "", ritual : false, changes : "Using my Path of the Wild Soul class feature I can cast Detect Magic without requiring components or spell slots." } } }, "subclassfeature3.1" : { name : "Wild Surge", source : [["UA:BnM", 1]], minlevel : 3, description: desc("Whenever I enter my rage, I have to roll on the Wild Surge table (see Notes page)"), toNotesPage : [{ name : "Wild Surge Table", source : [["UA:BnM", 1]], note : [ "Magic erupts from me while I rage. Whenever I enter my rage, I have to roll on the table below to see what happens.", "If the effect calls for a saving throw, the DC is equal to 8 + my proficiency bonus + my Constitution modifier.\n", "d8\tEFFECT", " 1\tNecrotic energy bursts from me. Each creature within 30 ft of me takes 1d10 necrotic damage, and I gain temporary HP equal to the sum of the necrotic damage dealt to the creatures.", " 2\tI teleport up to 20 ft to an unoccupied space I can see. Until my rage ends, I can activate this effect again on each of my turns as a bonus action.", " 3\tI conjure 1d4 intangible spirits that look like flumphs in unoccupied spaces within 30 ft of me. Each spirit immediately flies 30 ft in a random direction. At the end of my turn, all spirits explode and each creature within 5 ft of one or more of them must succeed on a Dexterity saving throw or take 2d8 force damage.", " 4\tArcane energy enshrouds me. Until my rage ends, I gain a +2 bonus to AC, and whenever a creature within 10 ft of me hits me with an attack, that creature takes force damage equal to my Constitution modifier.", " 5\tPlant life temporarily grows around me: until my rage ends, the ground within 10 ft of me is difficult terrain.", " 6\tArcane energy taps into the minds of those around me. Each creature within 30 ft of me must succeed on a Wisdom saving throw or I see a glimpse of the creature's thoughts, learning how it plans to attack me. As a result, the creature has disadvantage on attack rolls against me until the start of my next turn.", " 7\tShadows weave around a weapon of my choice I am holding. Until my rage ends, my weapon deals psychic damage instead of its bludgeoning, slashing, or piercing damage, and it gains the light and thrown properties with a normal range of 20 ft and a long range of 60 ft. If I drop the weapon or throw it, the weapon dissipates and reappears in my hand at the end of my turn.", " 8\tA beam of brilliant light lances from my chest in a 5-ft-wide, 60-ft-long line. Each creature in the line must succeed on a Constitution saving throw or take 2d8 radiant damage and be blinded until the start of my next turn." ] }] }, "subclassfeature6" : { name : "Magic Reserves", source : [["UA:BnM", 2]], minlevel : 6, description : desc([ "As an action, I can touch a creature and roll a die to channel magic into it", "The target regains an expended spell slot of a level equal to or less then the die roll", "If it has no expended spell slots of that level, it gains 5\xD7 the die roll in temp HP instead", "Regardless of what happens, I take force damage equal to five times the die roll" ]), additional : levels.map(function (n) { return n < 6 ? "" : n < 14 ? "1d4" : "1d6"; }), action : [["action", ""]] }, "subclassfeature10" : { name : "Arcane Rebuke", source : [["UA:BnM", 2]], minlevel : 10, description : desc([ "As a reaction when I have to make a save while raging, the magic in my soul lashes out", "This causes the creature forcing me to make the save, if any, to take 3d6 force damage" ]), action : [["reaction", " (in Rage after save)"]] }, "subclassfeature14" : { name : "Chaotic Fury", source : [["UA:BnM", 2]], minlevel : 14, description : desc([ "As a bonus action while raging, I can reroll the effect on the Wild Surge table", "This replaces the current wild surge effect with a new one" ]), action : [["bonus action", " (in Rage)"]] } } }); AddSubClass("monk", "way of the astral self-ua", { regExpSearch : /^(?=.*astral)(?=.*(self|projection|travel))((?=.*(monk|monastic))|((?=.*martial)(?=.*(artist|arts)))|((?=.*spiritual)(?=.*warrior))).*$/i, subname : "Way of the Astral Self", subnameShort: "Astral Self", source : [["UA:BnM", 2]], features : { "subclassfeature3" : { name : "Arms of the Astral Self", source : [["UA:BnM", 2]], minlevel : 3, description: desc("My ki mastery allows me to summon portions of my astral self; See 3rd page notes"), action : [["bonus action", "Summon Astral Arms"], ["bonus action", "Astral Arm Attacks (after Attack action)"]], weaponOptions : [{ regExpSearch : /^(?=.*\bastral\b)(?=.*\barms?\b).*$/i, name : "Astral Arms", source : [["UA:BnM", 2]], ability : 5, type : "Natural", damage : [1, "", typePF ? "Necrotic/Radiant" : "necrotic|radiant"], range : "Melee", description : "10 ft reach; Uses Str, Dex, or Wis; Deals necrotic or radiant damage", monkweapon : true, abilitytodamage : true, selectNow : true }], "astral arms" : { name : "Astral Arms", extraname : "Way of the Astral Self 3", source : [["UA:BnM", 2]], description : desc([ "As a bonus action, I can summon my astral arms for 10 minutes; I choose their appearance", "While they are summoned, I can use Wisdom instead of Strength for Strength checks/saves", "The arms are melee monk weapons with 10 ft reach that can use Wis instead of Str/Dex", "I can choose to have them deal either radiant or necrotic damage", "After I use them in my Attack action, I can use them for more attacks as a bonus action" ]), additional : levels.map(function (n) { return n < 3 ? "" : "2 ki points; " + (n < 11 ? 1 : n < 17 ? 2 : 3) + " bonus action attack" + (n < 11 ? "" : "s"); }) }, autoSelectExtrachoices : [{ extrachoice : "astral arms" }] }, "subclassfeature6" : { name : "Visage of the Astral Self", source : [["UA:BnM", 3]], minlevel : 6, description: desc("I can now also summon the visage of my astral self; See third page notes section"), action : [["bonus action", "Summon Astral Arms and/or Visage", "Summon Astral Arms"]], "astral visage" : { name : "Astral Visage", extraname : "Way of the Astral Self 6", source : [["UA:BnM", 3]], additional: "1 ki point", description : desc([ "As a bonus action (or when summoning my astral arms), I can summon my astral visage", "It covers my face like a helmet or mask and I choose its appearance; It lasts for 10 minutes", "It grants adv. on Insight \u0026 Intimidation, and the ability to see 120 ft in (magical) darkness" ]) }, autoSelectExtrachoices : [{ extrachoice : "astral visage" }] }, "subclassfeature11" : { name : "Awakening of the Astral Self", source : [["UA:BnM", 3]], minlevel : 11, description: desc("While having both astral arms and visage summoned, I gain extra benefits, see 3rd page"), "deflect energy" : { name : "Deflect Energy", extraname : "Awakening of the Astral Self", source : [["UA:BnM", 3]], description : " [if both astral arms \u0026 visage]" + desc([ "As a reaction when I take acid, cold, fire, force, or lightning damage, I can deflect it", "By doing so, the damage is reduced by 1d10 + my Wisdom modifier + my Monk level" ]) }, "empowered arms" : { name : "Empowered Arms", extraname : "Awakening of the Astral Self", source : [["UA:BnM", 3]], description : " [if both astral arms \u0026 visage]" + desc([ "Once per turn when I hit an astral arms attack, I can add a martial arts die to its damage" ]) }, "word of the spirit" : { name : "Word of the Spirit", extraname : "Awakening of the Astral Self", source : [["UA:BnM", 3]], description : " [if both astral arms \u0026 visage]" + desc([ "I can direct my words to a creature I can see within 30 ft so that only it can hear me", "Alternatively, I can amplify my voice so that it is heard by all within 600 ft of me" ]) }, autoSelectExtrachoices : [ { extrachoice : "deflect energy" }, { extrachoice : "empowered arms" }, { extrachoice : "word of the spirit" } ] }, "subclassfeature17" : { name : "Complete Astral Self", source : [["UA:BnM", 3]], minlevel : 17, description : desc([ "I can now also summon the body of my astral self; See third page notes section", "This spectral body covers my physique like armor, connecting with the arms and visage" ]), action : [["bonus action", "Summon Astral Arms and/or Visage, or Complete", "Summon Astral Arms and/or Visage"], ["reaction", "Ki Consumption (Complete Astral Self)"]], "astral body" : { name : "Astral Body", extraname : "Way of the Astral Self 17", source : [["UA:BnM", 3]], additional: "10 ki points", description : desc([ "As a bonus action, I can summon the arms, visage, and body of my astral self for 10 min", "This gives me the arms, visage, +2 bonus to AC while not incapacitated, and as follows:", "When I take the Attack action I can choose to make 3 attacks with my astral arms instead", "As a reaction when a creature in 10 ft is reduced to 0 HP, I can regain my Wis mod in ki" ]) }, autoSelectExtrachoices : [{ extrachoice : "astral body" }] } } }); // ua_20190905_Sorcerer-and-Warlock.js // This file adds the content from the Unearthed Arcana: Sorcerer and Warlock article to MPMB's Character Record Sheet // Define the source SourceList["UA:SnW"] = { name : "Unearthed Arcana: Sorcerer and Warlock", abbreviation : "UA:SnW", group : "Unearthed Arcana", url : "https://media.wizards.com/2019/dnd/downloads/UA-AberrantLurk.pdf", date : "2019/09/05" }; // Add a subclasses for the Sorcerer and one for the Warlock // Both contain work by /u/KaydeArcane var UASnW_abberantMindExtraSpell = ["arms of hadar", "dissonant whispers", "calm emotions", "detect thoughts", "hunger of hadar", "sending", "compulsion", "evard's black tentacles", "modify memory", "rary's telepathic bond"]; AddSubClass("sorcerer", "aberrant mind-ua", { regExpSearch : /^(?=.*aberrant)(?=.*mind).*$/i, subname : "Aberrant Mind", source : [["UA:SnW", 1]], spellcastingExtra : UASnW_abberantMindExtraSpell, spellcastingExtraApplyNonconform : true, features : { "subclassfeature1" : { name : "Invasive Thoughts", source : [["UA:SnW", 1]], minlevel : 1, description : desc([ "As a bonus action, I can telepathic link myself with a creature within 30 ft that I can see", "This lasts for 10 minutes, until I'm incapacitated or die, or I use this ability again", "I can telepathically talk with the target; It can speak back if it understands a language" ]), action : [["bonus action", ""]] }, "subclassfeature1.1" : { name : "Psionic Spells", source : [["UA:SnW", 1]], minlevel : 1, description: desc("I learn additional spells, which do not count towards the number of spell I can know") }, "subclassfeature1.2" : { name : "Warped Being", source : [["UA:SnW", 1]], minlevel : 1, description: desc("My aberrant origin gives me an AC of 13 + my Dex mod when I am not wearing armor"), armorOptions : [{ regExpSearch : /^(?=.*warped)(?=.*being).*$/i, name : "Warped Being", source : [["UA:SnW", 1]], ac : 13, selectNow : true }] }, "subclassfeature6" : { name : "Psionic Sorcery", source : [["UA:SnW", 2]], minlevel : 6, description : desc([ "I can expend sorcery points instead of a spell slot to cast a spell from my Psionic Spells", "This costs the spell's level in sorcery points, but the spell requires no other components" ]), spellFirstColTitle : "SP", spellChanges : function () { var fullReObj = {}; UASnW_abberantMindExtraSpell.map(function (s) { var spObj = SpellsList[s] ? SpellsList[s] : { level : 1 }; fullReObj[s] = { firstCol : spObj.level, compMaterial : (spObj.compMaterial ? spObj.compMaterial + "\n" : "") + "If I cast this spell by expending Sorcery Points, it doesn't require any components", changes : "I can cast this spell by expending a number of Sorcery Points equal to its level instead of expending a spell slot. When I do so, the spell doesn't require any components." } }) return fullReObj; }() }, "subclassfeature6.1" : { name : "Psychic Defenses", source : [["UA:SnW", 2]], minlevel : 6, description: desc("I gain resistance to psychic damage and adv. on saves vs. being charmed or frightened"), dmgres : ["Psychic"], savetxt : { adv_vs : ["charmed", "frightened"] } }, "subclassfeature14" : { name : "Revelation in Flesh", source : [["UA:SnW", 2]], minlevel : 14, description : desc([ "As a bonus action, I can expend 1 or more sorcery points to transform for 1 minute", "For each sorcery point used, I gain one of the following benefits of my choice:", "\u2022 I gain a swimming speed equal to my walking speed and the ability to breathe water", "\u2022 I gain a flying speed equal to my walking speed and I can hover", "\u2022 I can move, with equipment, through any space as narrow as 1 inch without squeezing", " I can spend 5 ft of movement to escape form a grapple or from nonmagical restraints", "\u2022 I am aware of the location of any hidden/invisible creatures within 60 ft of me" ]), action : [["bonus action", ""]], additional : "1+ sorcery points" }, "subclassfeature18" : { name : "Warp Reality", source : [["UA:SnW", 2]], minlevel : 18, description : desc([ "As an action, I can radiate a 20-ft radius aura of difficult terrain for 1 minute", "Creatures that start their turn within the aura take 2d10 psychic damage", "When creating it, I can choose any creatures I can see to be unaffected by this aura", "As a bonus action, I can end this aura to teleport myself and others away", "I teleport myself and any creature in the aura to a location I can see within 1 mile", "An unwilling creature can succeed on a Charisma saving throw to avoid being teleported" ]), action : [["action", " (create)"], ["bonus action", " (end)"]], recovery : "long rest", usages : 1 } } }); AddSubClass("warlock", "the lurker in the deep-ua", { regExpSearch : /^(?=.*warlock)(?=.*lurker)(?=.*(deep|depth)).*$/i, subname : "the Lurker in the Deep", source : [["UA:SnW", 2]], spellcastingExtra : ["create or destroy water", "thunderwave", "gust of wind", "shatter", "lightning bolt", "sleet storm", "control water", "evard's black tentacles", "commune with nature", "cone of cold"], features : { "subclassfeature1" : { name : "Grasp of the Deep", source : [["UA:SnW", 3]], minlevel : 1, description : desc([ "As a bonus action, I can summon or move a spectral tentacle and make an attack with it", "I can summon it to a space within 60 ft that I can see or move an existing one 30 ft", "I make melee spell attacks with 10 ft reach with it that deal cold or lightning damage", "Creatures hit by the tentacle suffer 10 ft speed reduction until the start of my next turn", "The 10-ft long tentacle lasts for 1 minute or until I summon another" ]), action : [["bonus action", " (summon/move)"]], recovery : "long rest", additional : levels.map(function (n) { return (n < 10 ? 1 : 2) + "d8"; }), usages : "Cha mod per ", usagescalc : "event.value = Math.max(1, What('Cha Mod'));", weaponOptions : [{ regExpSearch : /^((?=.*grasp)(?=.*deep)|(?=.*spectral)(?=.*tentacle)).*$/i, name : "Grasp of the Deep", source : [["UA:SnW", 3]], ability : 6, type : "Spell", damage : [1, 8, "Cold/Lightning"], range : "Melee (10 ft)", description : "My choice of cold or lightning damage; Target -10 ft speed until my next turn starts", abilitytodamage : false, litdGraspOfTheDeep : true, selectNow : true }], calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.litdGraspOfTheDeep && classes.known.warlock.level >= 10) { fields.Damage_Die = '2d8'; }; } ] } }, "subclassfeature1.1" : { name : "Scion of the Deep", source : [["UA:SnW", 3]], minlevel : 1, description : desc([ "I can communicate telepathically with any aberration, beast, elemental, or monstrosity", "The creature must be within 120 ft of me and have an innate swimming speed" ]) }, "subclassfeature6" : { name : "Fathomless Soul", source : [["UA:SnW", 3]], minlevel : 6, description : " [cold resistance]\n I have a swimming speed equal to my walking speed; I can breathe both air and water", dmgres : ["Cold"], speed : { swim : { spd : "walk", enc : "walk" } } }, "subclassfeature6.1" : { name : "Guardian Grasp", source : [["UA:SnW", 3]], minlevel : 6, description : desc([ "As a reaction when a creature in 10 ft of my tentacle takes damage, I can have it help", "One creature takes only half damage and my spectral tentacle vanishes" ]), action : [["reaction", ""]] }, "subclassfeature10" : { name : "Devouring Maw", source : [["UA:SnW", 3]], minlevel : 10, description : desc([ "As an action, I can summon a 10-ft radius translucent maw within 60 ft for 1 minute", "Creatures in the maw as it appear must Str save or be restrained, can repeat as action", "Creatures starting their turn in the maw take 3d6 cold or lightning damage (my choice)", "If a creature is in the maw at the start of my turn, I gain my warlock level in temp HP" ]), action : [["action", ""]], additional : levels.map(function (n) { return n < 10 ? "" : n + " temp HP"; }), recovery : "short rest", usages : 1 }, "subclassfeature14" : { name : "Unleash the Depths", source : [["UA:SnW", 4]], minlevel : 14, description : desc([ "As an action, I can choose one of the following effects to occur within 30 ft of me:", "\u2022 Teleport myself and up to 5 willing creatures I can see within 30 ft of the chosen point", " The destination must be within 100 miles and visited by me within the last 24 hours", "\u2022 5 creatures within 30 ft of the chosen point that I can see are attacked by tentacles", " The targets take 6d10 cold or lightning damage (my choice) and are knocked prone", " Each can make a Dexterity save to halve the damage and avoid being knocked prone" ]), action : [["action", ""]], recovery : "long rest", usages : 1 } } }); // ua_20190918_Bard-and-Paladin.js // This file adds the content from the Unearthed Arcana: Bard and Paladin article to MPMB's Character Record Sheet // Define the source SourceList["UA:BnP"] = { name : "Unearthed Arcana: Bard and Paladin", abbreviation : "UA:BnP", group : "Unearthed Arcana", url : "https://media.wizards.com/2019/dnd/downloads/UA-EloquentHeroics.pdf", date : "2019/09/18" }; // Add a subclasses for the bard and one for the paladin AddSubClass("bard", "college of eloquence-ua", { regExpSearch : /^(?=.*(college|bard|minstrel|troubadour|jongleur))(?=.*eloquence).*$/i, subname : "College of Eloquence", subnameShort: "Eloquence", source : [["UA:BnP", 1]], features : { "subclassfeature3" : { name : "Universal Speech", source : [["UA:BnP", 1]], minlevel : 3, description : desc([ "As a bonus action, I can expend one bardic inspiration die to make me understood by all", "I roll the die, that many creatures I can see within 60 ft of me are affected for 10 min", "Those affected magically understand me and I gain adv. on Cha checks to influence them" ]), additional : "1 bardic inspiration die", action : [["bonus action", ""]] }, "subclassfeature3.1" : { name : "Soothing Words", source : [["UA:BnP", 1]], minlevel : 3, description: desc("I can cast Calm Emotions without expending a spell slot"), spellcastingBonus : [{ name : "Soothing Words", spells : ["calm emotions"], selection : ["calm emotions"], firstCol : 'Sp' }], usages : "Charisma modifier per ", usagescalc : "event.value = Math.max(1, What('Cha Mod'));", recovery : "long rest" }, "subclassfeature6" : { name : "Undeniable Logic", source : [["UA:BnP", 1]], minlevel : 6, description : desc([ "As a bonus action, I can expend one bardic inspiration die to encourage or befuddle", "One creature I can see within 60 ft that can hear me gets one of the following effects:", " \u2022 It heals HP equal to the die roll and has adv. on its next save before my next turn ends", " \u2022 It suffers psychic damage equal to the die roll and must make an Intelligence save", " On a failed save, it also suffers disadv. on its next save before the end of my next turn" ]), additional : "1 bardic inspiration die", action : [["bonus action", ""]] }, "subclassfeature14" : { name : "Infectious Inspiration", source : [["UA:BnP", 2]], minlevel : 14, description : desc([ "My bardic inspiration dice are not lost if the check, attack, or save it was added to fails", "As a reaction when the same thing happens but the roll succeeds, I can inspire another", "I give a creature within 60 ft that can hear me an inspiration die without expending any", "I can use this reaction a number of times per long rest equal to my Cha mod (min 1)" ]), action : [["reaction", ""]], usages : "Cha mod per ", usagescalc : "event.value = Math.max(1, What('Cha Mod'));", recovery : "long rest" } } }); AddSubClass("paladin", "oath of heroism-ua", { regExpSearch : /^(?=.*\bhero)((?=.*paladin)|((?=.*(exalted|sacred|holy|divine))(?=.*(knight|fighter|warrior|warlord|trooper)))).*$/i, subname : "Oath of Heroism", subnameShort: "Heroism", source : [["UA:BnP", 2]], features : { "subclassfeature3" : { name : "Channel Divinity: Peerless Athlete", source : [["UA:BnP", 2]], minlevel : 3, description: desc("As a bonus action, I gain adv. on Str (Athletics) and Dex (Acrobatics) checks for 10 min"), action : [["bonus action", ""]], spellcastingExtra : ["expeditious retreat", "guiding bolt", "enhance ability", "enthrall", "haste", "protection from energy", "compulsion", "freedom of movement", "commune", "conjure volley"] }, "subclassfeature3.1" : { name : "Channel Divinity: Legendary Strike", source : [["UA:BnP", 2]], minlevel : 3, description: desc("As a bonus action, my weapon attacks score a critical hit on a roll of 19 or 20 for 1 min"), action : [["bonus action", ""]] }, "subclassfeature7" : { name : "Mighty Deed", source : [["UA:BnP", 2]], minlevel : 7, description : desc([ "When I score a critical hit or reduce a target to 0 HP, I can bolster morale or demoralize", "Up to my Cha mod (min 1) of creatures I can see in 30 ft suffer the same chosen effect:", " \u2022 All creatures gain temp HP equal to 1d6 + my Charisma modifier (min 1 temp HP)", " \u2022 All creatures must make a Wis save or be frightened of me until my next turn starts" ]), recovery : "Round", usages : 1 }, "subclassfeature15" : { name : "Glorious Defense", source : [["UA:BnP", 2]], minlevel : 15, description : desc([ "As a reaction when a creature I can see hits me with an attack roll, I can gain bonus AC", "I add my Cha mod (min 1) to my AC for that attack, potentially causing it to miss me", "If it misses, I can make one weapon attack against the attacker as part of this reaction" ]), action : [["reaction", ""]] }, "subclassfeature20" : { name : "Living Myth", source : [["UA:BnP", 3]], minlevel : 20, description : desc([ "As a bonus action, I can gain the following benefits for 1 minute:", " \u2022 I have advantage on all Charisma checks", " \u2022 Once on each of my turns when I miss with a weapon attack, I can cause it to hit", " \u2022 As a reaction when I fail a saving throw, I can choose to succeed instead" ]), recovery : "long rest", usages : 1, action : [["bonus action", ""]] } } }); // ua_20191003_Cleric-Druid-and-Wizard.js // This file adds the content from the Unearthed Arcana: Cleric, Druid, and Wizard article to MPMB's Character Record Sheet // Define the source SourceList["UA:CDnW"] = { name : "Unearthed Arcana: Cleric, Druid, and Wizard", abbreviation : "UA:CDnW", group : "Unearthed Arcana", url : "https://media.wizards.com/2019/dnd/downloads/UA-TwilightFireNames.pdf", date : "2019/10/03" }; // Add a subclass for the Cleric AddSubClass("cleric", "twilight domain-ua", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*(twilight|transition)).*$/i, subname : "Twilight Domain", source : [["UA:CDnW", 1]], spellcastingExtra : ["faerie fire", "sleep", "darkness", "invisibility", "aura of vitality", "leomund's tiny hut", "aura of life", "greater invisibility", "circle of power", "dream"], features : { "subclassfeature1" : { name : "Bonus Proficiency", source : [["UA:CDnW", 1]], minlevel : 1, description: desc("I gain proficiency with martial weapons and heavy armor"), armorProfs : [false, false, true, false], weaponProfs : [false, true] }, "subclassfeature1.1" : { name : "Eyes of Night", source : [["UA:CDnW", 1]], minlevel : 1, description : desc([ "I gain Darkvision with unlimited range and can give this benefit to allies", "As an action, I can grant this to chosen creatures I can see within 10 ft for 10 minutes" ]), vision : [["Darkvision", "unlimited"]], additional : "extend to others", usages : "Wis mod per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest", action : [["action", ""]] }, "subclassfeature1.2" : { name : "Vigilant Blessing", source : [["UA:CDnW", 1]], minlevel : 1, description : desc([ "As an action, I can grant myself or a creature I touch adv. on the next initiative roll", "This benefit ends immediately after the roll or when I use this feature again" ]), action : [["action", ""]] }, "subclassfeature2" : { name : "Channel Divinity: Twilight Sanctuary", source : [["UA:CDnW", 1]], minlevel : 2, description : desc([ "As an action, I can use my holy symbol to create a 30-ft radius sphere around myself", "It moves with me, is filled with dim light, and lasts for 1 min or until I'm incapacitated", "When a creature, including me, ends its turn inside the sphere, I can grant it a benefit", "It either gains 1d8 temp HP or one effect causing it to be charmed or frightened ends" ]), action : [["action", ""]] }, "subclassfeature6" : { name : "Steps of the Brave", source : [["UA:CDnW", 2]], minlevel : 6, description : desc([ "I have adv. on saves against being frightened", "As a bonus action while I'm in dim light or darkness, I can give myself a fly speed", "This fly speed is equal to my walking speed and lasts until the end of my next turn" ]), action : [["bonus action", ""]] }, "subclassfeature8" : { name : "Divine Strike", source : [["UA:CDnW", 1]], minlevel : 8, description: desc("Once per turn, when I hit a creature with a weapon attack, I can do extra damage"), additional : levels.map(function (n) { if (n < 8) return ""; return "+" + (n < 14 ? 1 : 2) + "d8 psychic damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && v.isWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.cleric.level < 14 ? 1 : 2) + 'd8 psychic damage'; } }, "Once per turn, I can have one of my weapon attacks that hit do extra psychic damage." ] } }, "subclassfeature17" : { name : "Midnight Shroud", source : [["UA:CDnW", 2]], minlevel : 17, description : desc([ "When I use a spell slot to cast Darkness, I can choose my Wis mod of creatures I can see", "The chosen creatures can see through the Darkness; I can be one of the chosen creatures" ]), calcChanges : { spellAdd : [ // note that several healing spells are not present here because they don't restore hp at casting (only later) function (spellKey, spellObj, spName) { if (spellKey == "darkness" && (!spellObj.fistCol || spellObj.fistCol == "markedbox")) { spellObj.description = "15-ft rad darkness on point/obj; no darkvision; only magic light SL 3+ works; Wis mod of crea can see"; return true; } }, "When I cast Darkness using a spell slot, I can choose a number of creatures that I can see (myself included) equal to my Wisdom modifier (minimum 1).The chosen creatures can see through the Darkness." ] } } } }); // Add a subclass for the Druid AddSubClass("druid", "circle of wildfire-ua", { regExpSearch : /^(?=.*(druid|shaman))(?=.*wild.{0,1}fire).*$/i, subname : "Circle of Wildfire", subnameShort: "Wildfire", source : [["UA:CDnW", 2]], features : { "subclassfeature2" : { name : "Circle Spells", source : [["UA:CDnW", 2]], minlevel : 2, description : desc([ "My mystical bond with a wildfire spirit gives me the ability to cast certain spells", "These are always prepared, but don't count against the number of spells I can prepare", "In addition, I learn the Fire Bolt cantrip" ]), spellcastingBonus : [{ name : "Circle Spells", spells : ["fire bolt"], selection : ["fire bolt"], firstCol : "atwill" }], spellcastingExtra : ["locate animals or plants", "scorching ray", "fireball", "plant growth", "aura of life", "fire shield", "flame strike", "raise dead"] }, "subclassfeature2.1" : { name : "Summon Wildfire", source : [["UA:CDnW", 2]], minlevel : 2, description : desc([ "As an action, I can expend a use of wild shape to summon a wildfire spirit within 30 ft", "All within 10 ft of where it manifests must make a Dex save or take 2d10 fire damage", "It disappears after 1 hour, when it is reduced to 0 HP, or I summon another", "It obeys my commands, is friendly to my allies and I, and acts on my initiative, after me", "Unless I use a bonus action to command it, it only takes the Dodge action on its turn", "Its HP maximum is equal to its Con mod + my Wis mod + five times my druid level" ]), action : [["action", ""], ["bonus action", "Command Wildfire"]], creaturesAdd : [["Wildfire Spirit"]], creatureOptions : [{ name : "Wildfire Spirit", source : [["UA:CDnW", 3]], size : 4, type : "Elemental", alignment : "Chaotic", ac : 13, hp : 12, hd : [2, 6], speed : "20 ft, fly 30 ft (hover)", scores : [10, 14, 14, 13, 15, 11], saves : ["", 4, 4, "", 4, ""], skills : { "nature" : 4 }, damage_immunities : "fire", condition_immunities : "charmed, frightened, grappled, prone, restrained", senses : "Darkvision 60 ft", passivePerception : 12, languages : "understands the languages of its creator", challengeRating : "0", proficiencyBonus : 2, proficiencyBonusLinked : true, attacksAction : 1, attacks : [{ name : "Flame Seed", ability : 2, damage : [1, 6, "fire"], range : "30 ft", description : "Ranged weapon attack", modifiers : ["", "Prof"], abilitytodamage : false }, { name : "Fiery Teleportation", ability : 5, damage : [1, 6, "fire"], range : "10 ft", description : "Dex save for all within 10 ft of teleportation origin, success - no damage; See traits", dc : true, modifiers : ["", "Prof"], abilitytodamage : false, useSpellMod : "druid" }, { name : "Fiery Manifestation", ability : 5, damage : [2, 10, "fire"], range : "10 ft", description : "Dex save for all within 10 ft where spirit is summoned, success - no damage", dc : true, abilitytodamage : false, useSpellMod : "druid" }], features : [{ name : "Creator", description : "The spirit obeys the commands of its creator and has the same proficiency bonus. It takes its turn immediately after its creator, on the same initiative count. It only takes the Dodge action, unless its creator takes a bonus action to command to do otherwise, in which case it can only take the Flame Seed, Fiery Teleportation, Dash, Disengage, Help, or Hide action." }], actions : [{ name : "Fiery Teleportation (1\xD7 per short rest)", description : "The spirit and each willing creature of its creator's choice within 5 ft of it teleport up to 30 ft to unoccupied spaces its creator can see. Each creature within 10 ft of the space that the spirit left must succeed on a Dexterity saving throw against its creator's spell save DC or take fire damage equal to 1d6 + its proficiency bonus." }], header : "Wildfire", calcChanges : { hp : function (totalHD, HDobj, prefix) { if (!classes.known.druid) return; var wisMod = Number(What('Wis Mod')); var drdLvl = classes.known.druid.level; var drdLvl5 = 5 * drdLvl; HDobj.alt.push(HDobj.conMod + wisMod + drdLvl5); HDobj.altStr.push(" = " + HDobj.conMod + " from its Constitution modifier\n + " + wisMod + " from its creator's Intelligence modifier\n + 5 \xD7 " + drdLvl + " from five times its creator's druid level (" + drdLvl5 + ")"); }, setAltHp : true, hpForceRecalc : true } }] }, "subclassfeature6" : { name : "Enhanced Bond", source : [["UA:CDnW", 3]], minlevel : 6, description : desc([ "While my wildfire spirit is present, I can have my spells originate from it (no range 'self')", "Also, I can then add 1d8 to a single roll of my spells that restore HP or deal fire damage" ]) }, "subclassfeature10" : { name : "Flames of Life", source : [["UA:CDnW", 3]], minlevel : 10, description : desc([ "As a reaction when a creature dies in 30 ft of me/wildfire spirit, I can have flames erupt", "The creature has to be Small or larger; The flames last for 1 minute or until touched", "When I see someone touch the flames, it heals or takes fire damage for 2d10 + Wis mod" ]), action : [["reaction", ""]], usages : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest" }, "subclassfeature14" : { name : "Blazing Endurance", source : [["UA:CDnW", 3]], minlevel : 14, description : desc([ "If I drop to 0 HP and don't die, I can stay at 1 HP instead with 5\xD7 druid level temp HP", "Also, all chosen creatures that I can see within 30 ft take 2d10 + druid level fire damage" ]), usages : 1, recovery : "long rest" } } }); // Add a subclass for the Wizard AddSubClass("wizard", "onomancy-ua", { regExpSearch : /onomancy|onomancer/i, subname : "Onomancy", source : [["UA:CDnW", 4]], fullname : "Onomancer", features : { "subclassfeature2" : { name : "Bonus Proficiencies", source : [["UA:CDnW", 4]], minlevel : 2, description: desc("I learn a language of my choice and gain proficiency with calligrapher's tools"), toolProfs : ["Calligrapher's tools"], languageProfs : [1] }, "subclassfeature2.1" : { name : "Extract Name", source : [["UA:CDnW", 4]], minlevel : 2, description : desc([ "As a bonus action, I can have a creature I can see within 60 ft make a Wisdom save", "If failed, it is charmed by me until my next turn ends and I mentally learn its true name", "If successful, I know that my magic failed and can't use this feature again on it" ]), usages : "Intelligence modifier per ", usagescalc : "event.value = Math.max(1, What('Int Mod'));", recovery : "long rest", action : [["bonus action", ""]] }, "subclassfeature2.2" : { name : "Fateful Naming", source : [["UA:CDnW", 4]], minlevel : 2, description : desc([ "I add Bane and Bless to my spellbook and they count as wizard spells for me", "These are always prepared, but don't count against the number of spells I can prepare", "I can cast either spell without using a spell slot by speaking the true name of a target" ]), spellcastingBonus : [{ name : "Fateful Naming", spells : ["bane", "bless"], selection : ["bane", "bless"], times : 2, firstCol : "markedbox" }], additional : "with true name", usages : "Int mod per ", usagescalc : "event.value = Math.max(1, What('Int Mod'));", recovery : "long rest", }, "subclassfeature6" : { name : "Resonants", source : [["UA:CDnW", 4]], minlevel : 6, description : desc([ 'Use the "Choose Feature" button above to add Resonants to the third page', "Whenever I gain a wizard level, I can replace a Resonant I know with another" ]), additional : levels.map(function (n) { return n < 6 ? "" : (n < 10 ? 2 : 4) + " resonants known"; }), extraTimes : levels.map(function (n) { return n < 6 ? 0 : n < 10 ? 2 : 4; }), extraname : "Resonant", extrachoices : ["Absorption", "Devastation", "Dissolution", "Nullification", "Puppetry", "Sympathy"], "absorption" : { name : "Absorption", source : [["UA:CDnW", 5]], description: desc("When the spell deals damage to the named target, I gain a number of temporary hit points"), additional : levels.map(function (n) { return (n < 10 ? 3 : n < 14 ? 4 : 5) + "d6 temporary hit points"; }) }, "devastation" : { name : "Devastation", source : [["UA:CDnW", 5]], description: desc("The named creature has disadvantage on its first saving throw against the spell") }, "dissolution" : { name : "Dissolution", source : [["UA:CDnW", 5]], description: desc("The first time the named creature takes damage from the spell, it takes extra damage"), additional : levels.map(function (n) { return "+" + (n < 10 ? 2 : n < 14 ? 3 : 4) + "d8 force damage"; }) }, "nullification" : { name : "Nullification", source : [["UA:CDnW", 5]], description : desc([ "If the named creature is affected by any other spells, I know what those spells are", "In addition, I can try to end one of my choice with an Int check (DC 10 + spell level)" ]) }, "puppetry" : { name : "Puppetry", source : [["UA:CDnW", 5]], description : desc([ "The first time the named creature takes damage from the spell, it is moved as well", "I choose to knock it prone or move it up to 10 ft directly towards me or away from me" ]) }, "sympathy" : { name : "Sympathy", source : [["UA:CDnW", 5]], description: desc("I can target the named creature with the spell even if I can't see it or it is has total cover") } }, "subclassfeature6.1" : { name : "Resonant Utterance", source : [["UA:CDnW", 4]], minlevel : 6, description : desc([ "When I use a spell slot to cast a wizard spell, I can use one resonant that I know", "The resonant will only work if I speak the true name of a creature targeted by the spell" ]), usages : "half wizard level per ", usagescalc : "event.value = classes.known.wizard ? Math.floor(classes.known.wizard.level / 2) : 0;", recovery : "long rest" }, "subclassfeature14" : { name : "Relentless Naming", source : [["UA:CDnW", 5]], minlevel : 14, description : desc([ "When I speak the true name of a creature when I cast a damage dealing spell at it,", "I can have that spell deal force or psychic damage instead of its normal damage type" ]) } } }); // ua_20191017_Fighter-Ranger-and-Rogue.js // This file adds the content from the Unearthed Arcana: Fighter, Ranger, and Rogue article to MPMB's Character Record Sheet // Define the source SourceList["UA:FRnR"] = { name : "Unearthed Arcana: Fighter, Ranger, and Rogue", abbreviation : "UA:FRnR", group : "Unearthed Arcana", url : "https://media.wizards.com/2019/dnd/downloads/UA-RuneSwarmRevived.pdf", date : "2019/10/17" }; // Add a subclass for the Fighter AddSubClass("fighter", "rune knight-ua", { regExpSearch : /^(?=.*rune)(?=.*knight).*$/i, subname : "Rune Knight", source : [["UA:FRnR", 1]], fullname : "Rune Knight", abilitySave : 4, features : { "subclassfeature3" : { name : "Bonus Proficiencies", source : [["UA:FRnR", 1]], minlevel : 3, description: desc("I gain proficiency with smith's tools and I learn to speak, read, and write Giant"), toolProfs : ["Smith's tools"], languageProfs : ["Giant"] }, "subclassfeature3.1" : { name : "Rune Magic", source : [["UA:FRnR", 1]], minlevel : 3, description : desc([ "I learn how to use runes to enhance my weapons, armor, and shields", 'Use the "Choose Feature" button above to select a rune and add it to the third page', "When I finish a long rest, I can inscribe each rune I know upon a different item I touch", "Each item can hold only one rune and remains there until I finish a long rest", "Runes inscribed on a carried object grant both a passive and a limited-use active effect", "Whenever I gain a fighter level, I can swap a rune I know for another", "The DC for a rune's abilities is 8 + my Proficiency bonus + my Intelligence modifier" ]), additional : levels.map(function (n){ return n < 3 ? "" : (n < 7 ? 2 : n < 10 ? 3 : n < 15 ? 4 : 5) + " runes known" }), extraTimes : levels.map(function (n) { return n < 3 ? 0 : n < 7 ? 2 : n < 10 ? 3 : n < 15 ? 4 : 5; }), extraname : "Rune", extrachoices : ["Haug (Hill Rune)", "Ild (Fire Rune)", "Ise (Frost Rune)", "Skye (Cloud Rune)", "Stein (Stone Rune)", "Uvar (Storm Rune)"], "haug (hill rune)" : { name : "Haug", source : [["UA:FRnR", 1]], description : desc([ "While I wear an object inscribed with this rune, I gain a resilience reminiscent of hill giants", "I always gain advantage on saves against being poisoned and resistance to poison damage", "As a bonus action, I can invoke it to gain resistance to bludg/slash/pierc damage for 1 min" ]), action : [["bonus action", " (invoke)"]], limfeaname : "Haug Rune", additional : "invoke", usages : ["", "", 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2], recovery : "short rest", dmgres : ["Poison"], savetxt : { adv_vs : ["poison"] } }, "ild (fire rune)" : { name : "Ild", source : [["UA:FRnR", 1]], description : desc([ "While I wear an object inscribed with this, I gain craftsmanship reminiscent of fire giants", "I always double my proficiency bonus when making an ability check with a tool", "When I hit a creature with a weapon attack, I can invoke it to summon fiery shackles", "It must make a Str save or be restrained for 1 min; Repeat save at end of each of its turns", "While restrained, the creature takes 2d6 fire damage at the start of each of its turns" ]), limfeaname : "Ild Rune", additional : "invoke", usages : ["", "", 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2], recovery : "short rest", skillstxt : "expertise with all tools I am proficient with", eval : function () { Checkbox('Too Exp', true); }, removeeval : function () { Checkbox('Too Exp', false); } }, "ise (frost rune)" : { name : "Ise", source : [["UA:FRnR", 2]], description : desc([ "While I wear an object inscribed with this, I gain a stoic calm reminiscent of frost giants", "I always gain advantage on Wisdom (Animal Handling) and Charisma (Intimidation) checks", "As a bonus action, I can invoke this rune to gain +2 Strength (max 30) for 10 minutes" ]), action : [["bonus action", " (invoke)"]], limfeaname : "Ise Rune", additional : "invoke", usages : ["", "", 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2], recovery : "short rest", advantages : [ ["Animal Handling", true], ["Intimidation", true] ] }, "skye (cloud rune)" : { name : "Skye", source : [["UA:FRnR", 2]], description : desc([ "While I wear an object inscribed with this, I gain a deceptiveness reminiscent of cloud giants", "I always gain advantage on Dexterity (Sleight of Hand) and Charisma (Deception) checks", "As a reaction when I or a target I see get hit by an attack within 30 ft, I can invoke this", "This causes the attack to target another within 30 ft with the same roll (ignore range)" ]), action : [["reaction", " (invoke)"]], limfeaname : "Skye Rune", additional : "invoke", usages : ["", "", 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2], recovery : "short rest", advantages : [ ["Sleight of Hand", true], ["Deception", true] ] }, "stein (stone rune)" : { name : "Stein", source : [["UA:FRnR", 2]], description : desc([ "While I wear an object inscribed with this, I gain insightfulness reminiscent of stone giants", "I always gain adv. on Wisdom (Insight) checks and I gain darkvision 60 ft (or +30 ft)", "As a reaction when a creature I can see ends it turn within 30 ft, I can invoke this rune", "This causes the creature to make a Wisdom save or be charmed by me for 1 minute", "While charmed, it descends into a dreamy stupor, becoming incapacitated and has speed 0", "This ends early if it takes damage or someone uses an action to shake it out of this state" ]), action : [["reaction", " (invoke)"]], limfeaname : "Stein Rune", additional : "invoke", usages : ["", "", 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2], recovery : "short rest", vision : [["Darkvision", "fixed 60"], ["Darkvision", "+30"]], advantages : [ ["Insight", true] ] }, "uvar (storm rune)" : { name : "Uvar", source : [["UA:FRnR", 2]], description : desc([ "While I wear an object inscribed with this rune, I can glimpse the future like storm giants", "I always gain adv. on Int (Arcana) checks and I can't be surprised while not incapacitated", "As a bonus action, I can invoke it to enter a prophetic state for 1 min or till incapacitated", "While in this state, I can use a reaction to cause a roll to gain advantage or disadvantage", "I can do this for attacks, saves, and checks of myself or others I can see within 60 ft of me" ]), action : [["bonus action", " (invoke)"]], limfeaname : "Uvar Rune", additional : "invoke", usages : ["", "", 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2], recovery : "short rest", advantages : [ ["Arcana", true] ], savetxt : { immune : ["surprised"] }, } }, "subclassfeature3.2" : { name : "Giant Might", source : [["UA:FRnR", 2]], minlevel : 3, description : desc([ "As a bonus action, I can imbue myself with giant magic for 1 minute and gain benefits:", " \u2022 Space permitted, I grow to Large size along with everything I'm wearing", " \u2022 Advantage on Strength check and saves; My weapon attacks deal extra damage" ]), usages : 2, recovery : "long rest", additional : levels.map(function (n){ return n < 3 ? "" : "+1d" + (n < 10 ? 6 : 8) + " weapon damage" }), action : [["bonus action", ""]], savetxt : { text : ["Adv. on Str saves in giant might"] } }, "subclassfeature7" : { name : "Defensive Runes", source : [["UA:FRnR", 2]], minlevel : 7, description : desc([ "As a reaction when I see a creature get hit by an attack within 60 ft, I can grant it AC", "The creature adds 1 + my Int mod (min 2) to its AC for the attack; I learn another rune" ]), action : [["reaction", ""]] }, "subclassfeature10" : { name : "Great Stature", source : [["UA:FRnR", 2]], minlevel : 10, description : desc([ "My runes permanently make me grow; I add 3d4 inches to my length", "In addition, my Giant Might adds more weapon damage and I learn another rune" ]) }, "subclassfeature15" : { name : "Rune Magic Mastery", source : [["UA:FRnR", 3]], minlevel : 15, description : " \n I can use each of my runes twice instead of once per short rest and I learn another rune" }, "subclassfeature18" : { name : "Blessing of the All Father", source : [["UA:FRnR", 3]], minlevel : 18, description: desc("When I use Giant Might, I can have it also affect a willing ally that I can see within 60 ft") } } }); // Add a subclass for the Ranger (and also to the Revised Ranger) var UAFRnR_rangerSubclassSwarmkeeperUA = AddSubClass("ranger", "swarmkeeper-ua", { regExpSearch : /swarmkeeper/i, subname : "Swarmkeeper", source : [["UA:FRnR", 3]], fullname : "Swarmkeeper", features : { "subclassfeature3" : { name : "Swarmkeeper Magic", source : [["UA:FRnR", 3]], minlevel : 3, description : desc([ "I learn Mage Hand; When I cast it, the hand takes the form of swarming nature spirits", "I get bonus spells known, which do not count against the number of spells I can know" ]), spellcastingBonus : [{ name : "Swarmkeeper Magic", spells : ["mage hand"], selection : ["mage hand"], firstCol : "atwill" }], spellcastingExtra : ["faerie fire", "web", "gaseous form", "giant insect", "insect plague"], spellcastingExtraApplyNonconform : true }, "subclassfeature3.1" : { name : "Gathered Swarm", source : [["UA:FRnR", 3]], minlevel : 3, description : desc([ "I constantly have a swarm of fey spirits crawling in my space, they look like Tiny beasts", "As a bonus action, I can agitate that swarm for 1 minute, empowering my attacks", "Once per turn when I hit with a weapon attack, I can have it deal extra force damage", "In addition, the creature hit is moved 5 ft towards or away from me (my choice)" ]), action : [["bonus action", ""]], additional : levels.map(function (n) { return n < 3 ? "" : "+" + (n < 11 ? 1 : 2) + "d6 force dmg"; }), usages : "Wis mod per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest", }, "subclassfeature7" : { name : "Writhing Tide", source : [["UA:FRnR", 3]], minlevel : 7, description : desc([ "Whenever I activate Gathered Swarm, I gain one additional benefit of my choice:", " \u2022 I gain +10 ft walking speed and I can take the Disengage action as a bonus action", " \u2022 I gain climb speed equal to walk speed & need no check for difficult surfaces or ceilings", " \u2022 I gain a 10 ft fly speed and I can hover" ]), autoSelectExtrachoices : [{ extrachoice : "scuttling eyes", minlevel : 11 }, { extrachoice : "storm of minions", minlevel : 15 }], "scuttling eyes" : { name : "Scuttling Eyes", extraname : "Swarmkeeper 11", source : [["UA:FRnR", 4]], description : desc([ "As an action, I can from a spirit of my swarm into a Tiny beast of my choice for 1 hour", "It has AC 18, my senses, and 40 ft speed it can use to walk, climb, fly, or swim", "It telepathically relays what it sees and hears to me and I can speak through it", "During my turn, I can telepathically command it and it can hide using my Stealth", "If it is damaged, I must make a Wis save (DC 10 or half damage if higher) or it vanishes", "As an action, I can dismiss it early and I can teleport to an empty space within 5 ft of it", "I can also invoke this ability by spending a spell slot of 3rd level or higher" ]), action : [["action", " (summon/dismiss)"]], additional : "or level 3 spell slot", usages : 1, recovery : "long rest", }, "storm of minions" : { name : "Storm of Minions", extraname : "Swarmkeeper 15", source : [["UA:FRnR", 4]], description : desc([ "As an action, I can create a 10-ft radius swarm-filled sphere on a point within 120 ft", "I can choose any number of creatures that I can see to be unaffected by it", "It lasts minute, is difficult terrain for others, and I can move it 30 ft as a bonus action", "Others that start their turn in it take 2d8 necrotic damage and must make a Con save", "On a success, they take half damage, but if failed, are blinded until their next turn starts", "At the start of my turn, if a Small or larger creature was damaged by it, I heal 1d8 HP", "I can also invoke this ability by spending a spell slot of 4th level or higher" ]), action : [["action", ""]], additional : "or level 4 spell slot", usages : 1, recovery : "long rest" } } } }); if (ClassList.rangerua) { ClassList.rangerua.subclasses[1].push(UAFRnR_rangerSubclassSwarmkeeperUA); }; // Add a subclass for the Rogue AddSubClass("rogue", "the revived-ua", { regExpSearch : /^(?=.*(rogue|miscreant))(?=.*revived).*$/i, subname : "the Revived", source : [["UA:FRnR", 4]], features : { "subclassfeature3" : { name : "Tokens of Past Lives", source : [["UA:FRnR", 4]], minlevel : 3, description: desc("I gain a chosen skill or tool proficiency and can change it whenever I finish a long rest"), skillstxt : "Choose one skill or tool; I can change the choice whenever I finish a long rest" }, "subclassfeature3.1" : { name : "Revived Nature", source : [["UA:FRnR", 4]], minlevel : 3, description : desc([ "I have resistance to poison damage and adv. on saves against disease and being poisoned", "I don't need to eat, drink, breathe, or sleep; I must spend 4 hours inactive for a long rest", "I'm motionless during this inactive state, remain semiconscious, and can hear as normal" ]), dmgres : ["Poison"], savetxt : { adv_vs : ["disease", "poison"] } }, "subclassfeature3.2" : { name : "Bolts from the Grave", source : [["UA:FRnR", 5]], minlevel : 3, description : desc([ "Immediately after I use my cunning action, I can unleash bolts of necrotic energy", "This is a ranged spell attack with 30 ft range, which I'm proficient with, using Dexterity", "If it hits, it deals my sneak attack damage, provided I didn't use sneak attack this turn" ]), weaponOptions : [{ regExpSearch : /^(?=.*bolts?)(?=.*grave).*$/i, name : "Bolts from the Grave", source : [["UA:FRnR", 5]], ability : 2, type : "Spell", damage : [1, 6, "necrotic"], range : "30 ft", description : "Immediately after using cunning action; Only if I not yet used sneak attack this turn", abilitytodamage : true, isBoltsFromTheGrave : true, selectNow : true }], calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.rogue && classes.known.rogue.level && v.theWea.isBoltsFromTheGrave) { fields.Damage_Die = Math.ceil(classes.known.rogue.level / 2) + 'd6'; }; } ] } }, "subclassfeature9" : { name : "Connect with the Dead", source : [["UA:FRnR", 5]], minlevel : 9, description : desc([ "I can cast Speak with Dead without a spell slot or material components using Intelligence", "Doing this gives me a random proficiency (roll 1d3) that lasts until I finish my next rest:", "[1] language of my choice; [2] skill or tool of my choice; [3] saving throw of my choice" ]), spellcastingBonus : [{ name : "Connect with the Dead", spells : ["speak with dead"], selection : ["speak with dead"], firstCol : "oncesr", spellcastingAbility : 4 }], spellChanges : { "speak with dead" : { components : "V,S", compMaterial : "", changes : "Using Connect with the Dead, I can cast Speak with Dead once per short rest without using a spell slot or material component." } }, usages : 1, recovery : "short rest" }, "subclassfeature13" : { name : "Audience with Death", source : [["UA:FRnR", 5]], minlevel : 13, description : desc([ "I have adv. on death saves; Whenever I make one, I can ask a question to a death entity", 'It answers truthfully with "yes", "no", or "unknown", using the knowledge of all that died', "When at 0 HP and healed or stabilized, I can change any of my traits/ideals/bonds/flaws" ]), savetxt : { text : ["Adv. on death saves"] }, autoSelectExtrachoices : [{ extrachoice : "ethereal jaunt", minlevel : 17 }], "ethereal jaunt" : { name : "Ethereal Jaunt", source : [["UA:FRnR", 5]], extraname : "the Revived 17", description : desc([ "I can now use my cunning action to teleport to an unoccupied space within 30 ft", "I don't need to see where I'm going, but it fails if I'd go through a magical force effect", "I'm shunted if I appear in an occupied space and take force damage of 2\xD7 the ft moved" ]) } } } }); // ua_20191104_Class-Feature-Variants.js // This file adds the content from the Unearthed Arcana: Class Feature Variants article to MPMB's Character Record Sheet // Define the source SourceList["UA:CFV"] = { name : "Unearthed Arcana: Class Feature Variants", abbreviation : "UA:CFV", group : "Unearthed Arcana", url : "https://media.wizards.com/2019/dnd/downloads/UA_ClassFeatures.pdf", date : "2019/11/04" }; // Proficiency Versatility is not something governed by import automation, thus skipped // Barbarian alternative class features CreateClassFeatureVariant("barbarian", "danger sense", "Survival Instincts (ua)", { name : "Survival Instincts", source : [["UA:CFV", 1]], description : desc([ "I gain proficiency and expertise with two skills of my choice", "I can choose from Animal Handling, Medicine, Nature, Perception, and Survival" ]), skillstxt : "Proficiency and expertise with two from Animal Handling, Medicine, Nature, Perception, and Survival" }); CreateClassFeatureVariant("barbarian", "fast movement", "Instinctive Pounce (ua)", { name : "Instinctive Pounce", source : [["UA:CFV", 1]], description : desc([ "As a reaction when a creature ends it move within 15 ft of me, I can move towards it", "I move up to half my speed closer to it; This move doesn't provoke opportunity attacks" ]), action : [["reaction", ""]] }); // Bard alternative class features enhancements AddFeatureChoice(ClassList.bard.features.spellcasting, true, "Expanded Spell List (ua)", { name : "Expanded Bard Spell List", extraname : "Optional Bard 1", source : [["UA:CFV", 3]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "bard" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["cause fear", "color spray", "command", "aid", "enlarge/reduce", "mind spike", "mirror image", "phantasmal force", "mass healing word", "slow", "tiny servant", "phantasmal killer", "contact other plane", "rary's telepathic bond", "heroes' feast", "mental prison", "scatter", "tenser's transformation", "power word pain", "prismatic spray", "antipathy/sympathy", "maze", "prismatic wall"]); }, "This alternative class feature enhancement expands the spell list of the bard class with the following spells (spell level in brackets): Cause Fear (1), Color Spray (1), Command (1), Aid (2), Enlarge/Reduce (2), Mind Spike (2), Mirror Image (2), Phantasmal Force (2), Mass Healing Word (3), Slow (3), Tiny Servant (3), Phantasmal Killer (4), Contact Other Plane (5), Rary's Telepathic Bond (5), Heroes' Feast (6), Mental Prison (6), Scatter (6), Tenser's Transformation (6), Power Word Pain (7), Prismatic Spray (7), Antipathy/Sympathy (8), Maze (8), and Prismatic Wall (9)." ] } }, "Optional 1st-level bard features"); AddFeatureChoice(ClassList.bard.features.spellcasting, true, "Magical Inspiration (ua)", { name : "Magical Inspiration", extraname : "Optional Bard 1", source : [["UA:CFV", 3]], description : desc([ "A bardic inspiration die recipient can also use it when casting a damaging or healing spell", "They can expend the die and add its result to one damage or healing roll of the spell" ]) }, "Optional 1st-level bard features"); AddFeatureChoice(ClassList.bard.features.spellcasting, true, "Spell Versatility (ua)", { name : "Spell Versatility", extraname : "Optional Bard 1", source : [["UA:CFV", 3]], description: desc("After a long rest, I can swap a bard cantrip or spell I know for another of the same level") }, "Optional 1st-level bard features"); // Cleric alternative class features and enhancements AddFeatureChoice(ClassList.cleric.features.spellcasting, true, "Cantrip Versatility (ua)", { name : "Cantrip Versatility", extraname : "Optional Cleric 1", source : [["UA:CFV", 3]], description: desc("Whenever I gain a cleric level, I can replace a cleric cantrip I know with another") }, "Optional 1st-level cleric features"); AddFeatureChoice(ClassList.cleric.features.spellcasting, true, "Expanded Spell List (ua)", { name : "Expanded Cleric Spell List", extraname : "Optional Cleric 1", source : [["UA:CFV", 3]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "cleric" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["cause fear", "wrathful smite", "branding smite", "aura of vitality", "aura of life", "aura of purity", "skill empowerment", "wall of light", "power word heal"]); }, "This alternative class feature enhancement expands the spell list of the cleric class with the following spells (spell level in brackets): Cause Fear (1), Wrathful Smite (1), Branding Smite (2), Aura of Vitality (3), Aura of Life (4), Aura of Purity (4), Skill Empowerment (5), Wall of Light (5), and Power Word Heal (9)." ] } }, "Optional 1st-level cleric features"); AddFeatureChoice(ClassList.cleric.features["channel divinity"], true, "Harness Divine Power (ua)", { name : "Channel Divinity:\xA0Harness Divine Power", source : [["UA:CFV", 4]], description: desc("As a bonus action, I can use my holy symbol and a prayer to regain 1 used level 1 spell slot"), action : [["bonus action", ""]] }, "Optional 2nd-level cleric features"); // Cleric subclass alternative feature, so only run this after we are sure all subclasses have been added RunFunctionAtEnd(function() { for (var i = 0; i < ClassList.cleric.subclasses[1].length; i++) { var domain = ClassList.cleric.subclasses[1][i]; var objDomain = ClassSubList[domain]; if (!objDomain || !objDomain.features.subclassfeature8 || !(/divine strike|potent spellcasting/i).test(objDomain.features.subclassfeature8.name)) continue; CreateClassFeatureVariant(domain, "subclassfeature8", "Blessed Strikes (ua)", { name : "Blessed Strikes", source : [["UA:CFV", 4]], description : desc([ "When a creature is damaged by my weapon attack/spell, I can do +1d8 radiant damage", "Once I deal this extra damage, I can't do so again until the start of my next turn" ]), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && (v.isWeapon || (v.thisWeapon[3] && SpellsList[v.thisWeapon[3]].level === 0)) && /\d/.test(fields.Damage_Die)) { fields.Description += (fields.Description ? '; ' : '') + 'Once per round +1d8 radiant damage'; } }, "Once per turn when a creature takes damage from one of my spell or weapon attacks, I can also deal 1d8 radiant damage to the target." ] } }); } }); // Druid alternative class features and enhancements AddFeatureChoice(ClassList.druid.features.spellcasting, true, "Cantrip Versatility (ua)", { name : "Cantrip Versatility", extraname : "Optional Druid 1", source : [["UA:CFV", 4]], description: desc("Whenever I gain a druid level, I can replace a druid cantrip I know with another") }, "Optional 1st-level druid features"); AddFeatureChoice(ClassList.druid.features.spellcasting, true, "Expanded Spell List (ua)", { name : "Expanded Druid Spell List", extraname : "Optional Druid 1", source : [["UA:CFV", 4]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "druid" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["ceremony", "protection from evil and good", "augury", "continual flame", "enlarge/reduce", "aura of vitality", "elemental weapon", "revivify", "thunder step", "wall of sand", "divination", "fire shield", "cone of cold", "dawn", "immolation", "flesh to stone", "symbol", "incendiary cloud", "mass polymorph", "power word heal"]); }, "This alternative class feature enhancement expands the spell list of the druid class with the following spells (spell level in brackets): Ceremony (1), Protection from Evil and Good (1), Augury (2), Continual Flame (2), Enlarge/Reduce (2), Aura of Vitality (3), Elemental Weapon (3), Revivify (3), Thunder Step (3), Wall of Sand (3), Divination (4), Fire Shield (4), Cone of Cold (5), Dawn (5), Immolation (5), Flesh to Stone (6), Symbol (7), Incendiary Cloud (8), Mass Polymorph (9), and Power Word Heal (9)." ] } }, "Optional 1st-level druid features"); // The enhancement option for fighting styles has to be added to each class separately AddFeatureChoice(ClassList.fighter.features["fighting style"], true, "Martial Versatility (ua)", { name : "Martial Versatility", extraname : "Optional Fighter 1", source : [["UA:CFV", 12]], description: desc("Whenever I gain a fighter level, I can swap a fighting style I know for another I'm allowed") }, "Optional 1st-level fighter features"); // All the other fighting styles are available for all three classes, fighter, paladin, and ranger, so add them to all three here AddFightingStyle(["fighter", "ranger", "paladin"], "Blind Fighting (ua)", { name : "Blind Fighting Style", source : [["UA:CFV", 12]], description : desc([ "Being unable to see a creature doesn't impose disadvantage on my attack rolls against it", "However, this doesn't help me if the creature is hidden from me" ]) }); AddFightingStyle(["ranger"], "Interception", { // different for the Ranger, doesn't get this in TCoE name : "Interception Fighting Style", source : [["UA:CFV", 12]], description : desc([ "As a reaction when a creature I can see hits a target within 5 ft of me, I can intercept", "I reduce the damage the target takes by 1d10 + my Proficiency Bonus (min 0 damage)", "I can only do this while wielding a shield or a simple or martial weapon" ]), action : [["reaction", ""]] }); AddFightingStyle(["fighter", "ranger", "paladin"], "Thrown Weapon Fighting (ua)", { name : "Thrown Weapon Fighting Style", source : [["UA:CFV", 13]], description : desc([ "I can draw a weapon with the thrown property as part of the attack I make with it", "In addition, my ranged attacks made with thrown weapons deal +1 damage" ]), calcChanges : { atkAdd : [ function (fields, v) { if (v.isThrownWeapon && v.isMeleeWeapon) { fields.Description += (fields.Description ? '; ' : '') + '+1 damage when thrown'; }; }, "I deal +1 damage when I hit a ranged attack made with a thrown weapon." ], atkCalc : [ function (fields, v, output) { if (v.isThrownWeapon && !v.isMeleeWeapon) { output.extraDmg += 1; }; }, "" ] } }); AddFightingStyle(["fighter", "ranger", "paladin"], "Unarmed Fighting (ua)", { name : "Unarmed Fighting Style", source : [["UA:CFV", 13]], description : desc([ "My unarmed strikes deal 1d6 damage, or 1d8 damage when I have both hands free", "When I successfully start a grapple, I can deal 1d4 bludgeoning damage to the target", "Until the grapple ends, I can also deal this damage whenever I hit it with a melee attack" ]), calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == "unarmed strike") { if (fields.Damage_Die == 1 || fields.Damage_Die == "1d4") fields.Damage_Die = '1d6'; fields.Description += (fields.Description ? '; ' : '') + 'Versatile (d8)'; }; }, "My unarmed strikes deal 1d6 damage instead of 1, which increases to 1d8 if I have both hands free to make an unarmed strike with.", 2 ] } }); if (ClassSubList["fighter-battle master"]) { // Fighter alternative class features and enhancements (only if Battle Master subclass exists) AddFeatureChoice(ClassSubList["fighter-battle master"].features["subclassfeature3.1"], true, "Maneuver Versatility (ua)", { name : "Maneuver Versatility", extraname : "Optional Battle Master 3", source : [["UA:CFV", 5]], description: desc("Whenever I finish a long rest, I can replace a Maneuver I know with another") }, "Optional 3rd-level battle master features"); // New Maneuver options AddFeatureChoice(ClassSubList["fighter-battle master"].features["subclassfeature3.1"], true, "Bait and Switch (ua)", { name : "Bait and Switch", source : [["UA:CFV", 5]], description : desc([ "On my turn, I can expend a superiority die to swap places with an ally within 5 ft", "Doing this costs me 5 ft of movement, but this doesn't provoke opportunity attacks", "The ally then adds the superiority die to its AC until the start of my next turn" ]) }); AddFeatureChoice(ClassSubList["fighter-battle master"].features["subclassfeature3.1"], true, "Brace (ua)", { name : "Brace", source : [["UA:CFV", 5]], description : desc([ "As a reaction when a creature I can see moves within 5 of me, I can attack it", "I expend a superiority die and make one weapon attack, adding the die to the damage" ]), limfeaname : "Brace\xA0", action : [["reaction", ""]] }); AddFeatureChoice(ClassSubList["fighter-battle master"].features["subclassfeature3.1"], true, "Restraining Strike", { name : "Restraining Strike", source : [["UA:CFV", 5]], description : desc([ "Immediately after hitting with a melee weapon attack, I can use a bonus action to grapple", "I add the superiority die to the Str (Athletics) check; I can only do this on my own turn", "The target is also restrained while grappled in this way" ]), action : [["bonus action", " (after melee weapon hit)"]] }); AddFeatureChoice(ClassSubList["fighter-battle master"].features["subclassfeature3.1"], true, "Silver Tongue", { name : "Silver Tongue", source : [["UA:CFV", 5]], description: desc("When I make a Cha (Deception) or Cha (Persuasion) check, I can add a superiority die to it") }); AddFeatureChoice(ClassSubList["fighter-battle master"].features["subclassfeature3.1"], true, "Snipe", { name : "Snipe", source : [["UA:CFV", 5]], description : desc([ "As a bonus action, I can expend a superiority die and make a ranged weapon attack", "I can draw a thrown weapon as part of making this attack; I add the die to the damage" ]), action : [["bonus action", ""]] }); AddFeatureChoice(ClassSubList["fighter-battle master"].features["subclassfeature3.1"], true, "Studious Eye", { name : "Studious Eye", source : [["UA:CFV", 5]], description: desc("When I make a Wis (Insight) or Int (Investigation) check, I can add a superiority die to it") }); } // Monk class features enhancements // Add the monk weapon options as extrachoices RunFunctionAtEnd(function () { var UACFV_Monk_Weapon = { name : "Martial Arts Weapons", extraname : "Monk Weapon", extrachoices : [], source : [["UA:CFV", 6]], description : desc([ "Unarmed strike \u0026 5 + Wis mod simple/martial weapons (not two-handed/heavy/special)", "With these monk weapons, I can use Dex instead of Str and the Martial Arts damage die", "When taking an Attack action with these, I get one unarmed strike as a bonus action" ]), calcChanges : { atkAdd : [ function (fields, v) { var monkWeapons = ["unarmed strike"].concat(GetFeatureChoice("classes", "monk", "martial arts", true)); if (classes.known.monk && classes.known.monk.level && (monkWeapons.indexOf(v.baseWeaponName) != -1 || (/monk weapon/i).test(v.WeaponTextName))) { var aMonkDie = function (n) { return n < 5 ? 4 : n < 11 ? 6 : n < 17 ? 8 : 10; }(classes.known.monk.level); try { var curDie = eval_ish(fields.Damage_Die.replace('d', '*')); } catch (e) { var curDie = 'x'; }; if (isNaN(curDie) || curDie < aMonkDie) { fields.Damage_Die = '1d' + aMonkDie; }; if (fields.Mod === 1 || fields.Mod === 2 || What(AbilityScores.abbreviations[fields.Mod - 1] + " Mod") < What(AbilityScores.abbreviations[v.StrDex - 1] + " Mod")) { fields.Mod = v.StrDex; } }; }, "I can use either Strength or Dexterity and my Martial Arts damage die in place of the normal damage die for any 'Monk Weapons', which include unarmed strike and 5 + my Wisdom modifier of simple or martial weapons of my choice that I'm proficient with and that don't have the two-handed, heavy, or special property.\n I can select these weapon using the \"Choose Feature\" button on the 2nd page, or have them count as such by including the words \"Monk Weapon\" in the name of the weapon.", 1 ] } }; for (var weapon in WeaponsList) { var aWea = WeaponsList[weapon]; // skip attacks that are not simple or martial weapons, that have the heavy, two-handed, or special property, are magic weapons, or those that are spells or cantrips if (aWea.isMagicWeapon || !(/simple|martial/i).test(aWea.type) || (/heavy|special|((^|[^+-]\b)2|\btwo).?hand(ed)?s?/i).test(aWea.description) || aWea.special || (/spell|cantrip/i).test(aWea.list)) continue; UACFV_Monk_Weapon.extrachoices.push(aWea.name); UACFV_Monk_Weapon[aWea.name.toLowerCase()] = { name : aWea.name, description : "", source : aWea.source, weaponsAdd : { select : [aWea.name] }, submenu : ((/simple/i).test(aWea.type) ? "\x1BSimple weapon, " : "Martial weapon, ") + ((/^(?!.*melee).*\d+.*$/i).test(aWea.range) ? "ranged" : "melee"), prereqeval : 'testSource("' + weapon + '", WeaponsList["' + weapon + '"], "weapExcl") ? "skip" : isProficientWithWeapon("' + weapon + '", WeaponsList["' + weapon + '"]);' } } CreateClassFeatureVariant("monk", "martial arts", "Choose Monk Weapons", UACFV_Monk_Weapon); // Move some stuff around, because the original Martial Arts feature was moved into a choice, but we want to keep its original "additional", "action", "eval", "removeeval" attributes var UACFV_Martial_Arts = ClassList.monk.features["martial arts"]; var UACFV_Martial_Arts_Original = UACFV_Martial_Arts["\x1B[original] martial arts"]; if (UACFV_Martial_Arts_Original) { ["additional", "action", "eval", "removeeval"].forEach(function (n) { if (!UACFV_Martial_Arts_Original[n]) return; UACFV_Martial_Arts[n] = UACFV_Martial_Arts_Original[n]; delete UACFV_Martial_Arts_Original[n]; }); } }); // Ki enhancements AddFeatureChoice(ClassList.monk.features.ki, true, "Ki-Fueled Strike (ua)", { name : "Ki-Fueled Strike", extraname : "Optional Monk 2", source : [["UA:CFV", 6]], description: desc("If I spend any ki points during my action, I can make an unarmed strike as a bonus action"), action : [["bonus action", ""]] }, "Optional 2nd-level monk features"); AddFeatureChoice(ClassList.monk.features.ki, true, "Distant Eye (1 ki point) (ua)", { name : "Distant Eye", extraname : "Optional Monk 2", source : [["UA:CFV", 6]], description : " [1 ki point]\n My ranged weapon attacks during this turn ignore the disadvantage from long range" }, "Optional 2nd-level monk features"); AddFeatureChoice(ClassList.monk.features.ki, true, "Quickened Healing (2 ki points) (ua)", { name : "Quickened Healing", extraname : "Optional Monk 2", source : [["UA:CFV", 6]], description : " [2 ki points]\n As an action, I can regain a number of hit points equal to the roll of my martial arts die", action : [["action", ""]] }, "Optional 2nd-level monk features"); // Paladin alternative class features and enhancements // The enhancement option for fighting styles has to be added to each class separately AddFeatureChoice(ClassList.paladin.features.spellcasting, true, "Martial Versatility (ua)", { name : "Martial Versatility", extraname : "Optional Paladin 2", source : [["UA:CFV", 12]], description: desc("Whenever I gain a paladin level, I can swap a fighting style I know for another I'm allowed") }, "Optional 2nd-level paladin features"); AddFeatureChoice(ClassList.paladin.features.spellcasting, true, "Expanded Spell List (ua)", { name : "Expanded Paladin Spell List", extraname : "Optional Paladin 2", source : [["UA:CFV", 6]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "paladin" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["gentle repose", "prayer of healing", "warding bond", "life transference", "spirit guardians", "dawn", "flame strike"]); }, "This alternative class feature enhancement expands the spell list of the paladin class with the following spells (spell level in brackets): Gentle Repose (2), Prayer of Healing (2), Warding Bond (2), Life Transference (3), Spirit Guardians (3), Dawn (5), and Flame Strike (5)." ] } }, "Optional 2nd-level paladin features"); AddFeatureChoice(ClassList.paladin.features["subclassfeature3.0-channel divinity"], true, "Harness Divine Power (ua)", { name : "Channel Divinity:\xA0Harness Divine Power", extraname : "Optional Paladin 3", source : [["UA:CFV", 6]], description: desc("As a bonus action, I can use my holy symbol and a prayer to regain 1 used level 1 spell slot"), action : [["bonus action", ""]] }, "Optional 3rd-level paladin features"); // Ranger alternative class features and enhancements var UACFV_Deft_Explorer = { name : "Deft Explorer", source : [["UA:CFV", 7]], description : desc('Use the "Choose Feature" button above to add a deft explorer benefit to the third page'), additional : levels.map(function (n) { return n < 6 ? "1 benefit" : (n < 10 ? 2 : 3) + " benefits"; }), extraTimes : levels.map(function (n) { return n < 6 ? 1 : n < 10 ? 2 : 3; }), extraname : "Deft Explorer Benefit", extrachoices : ["Canny", "Roving", "Tireless"], "canny" : { name : "Canny", source : [["UA:CFV", 7]], description : desc([ "I learn two language of my choice, and proficiency and expertise with one skill of my choice", "The skill I have to choose from: Animal Handling, Athletics, History, Insight, Investigation,", "Medicine, Nature, Perception, Stealth, or Survival" ]), languageProfs : [2], skillstxt : "Proficiency and expertise with one from Animal Handling, Athletics, History, Insight, Investigation, Medicine, Nature, Perception, Stealth, or Survival" }, "roving" : { name : "Roving", source : [["UA:CFV", 7]], description: desc("I gain +5 ft walking speed and climbing and swimming speed equal to my walking speed"), speed : { walk : { spd : "+5", enc : "+5" }, climb : { spd : "walk", enc : "walk" }, swim : { spd : "walk", enc : "walk" } } }, "tireless" : { name : "Tireless", source : [["UA:CFV", 7]], description : desc([ "Whenever I finish a short or long rest, I reduce my exhaustion level, if any, by 1", "As an action a number of times per day, I can give myself temp HP of 1d10 + Wis mod" ]), action : [["action", ""]], usages : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest" }, autoSelectExtrachoices : [] } CreateClassFeatureVariant("ranger", "natural explorer", "Deft Explorer (ua)", UACFV_Deft_Explorer); var UACFV_Favored_Foe = { name : "Favored Foe", source : [["UA:CFV", 7]], description : desc([ "I know Hunter's Mark and it doesn't count against the number of spells I can know", "I can cast it a number of times without using a spell slot or requiring concentration", "I can also use a spell slot to cast it as normal, but then it does require concentration" ]), spellcastingBonus : [{ name : "Favored Foe", spells : ["hunter's mark"], selection : ["hunter's mark"], firstCol : "Sp" }], usages : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest", calcChanges : { spellList : [ function(spList, spName, spType) { if ((spName === "ranger" || spName === "rangerua") && spType.indexOf("bonus") === -1) { if (!spList.notspells) spList.notspells = []; spList.notspells = spList.notspells.concat(["hunter's mark"]); } } ] } }; CreateClassFeatureVariant("ranger", "favored enemy", "Favored Foe (ua)", UACFV_Favored_Foe); // Now some easier alternatives/enhancements // The enhancement option for fighting styles has to be added to each class separately var UACFV_Ranger_Martial_Versatility = { name : "Martial Versatility", extraname : "Optional Ranger 2", source : [["UA:CFV", 12]], description: desc("Whenever I gain a ranger level, I can swap a fighting style I know for another I'm allowed") }; AddFeatureChoice(ClassList.ranger.features.spellcasting, true, "Martial Versatility (ua)", UACFV_Ranger_Martial_Versatility, "Optional 2nd-level ranger features"); var UACFV_Ranger_Expanded_Spell_List = { name : "Expanded Ranger Spell List", extraname : "Optional Ranger 2", source : [["UA:CFV", 7]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if ((spName !== "ranger" && spName !== "rangerua") || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["entangle", "searing smite", "aid", "enhance ability", "gust of wind", "magic weapon", "warding bond", "blinding smite", "meld into stone", "revivify", "tongues", "death ward", "dominate beast", "awaken", "greater restoration"]); }, "This alternative class feature enhancement expands the spell list of the ranger class with the following spells (spell level in brackets): Entangle (1), Searing Smite (1), Aid (2), Enhance Ability (2), Gust of Wind (2), Magic Weapon (2), Warding Bond (2), Blinding Smite (3), Meld into Stone (3), Revivify (3), Tongues (3), Death Ward (4), Dominate Beast (4), Awaken (5), and Greater Restoration (5)." ] } }; AddFeatureChoice(ClassList.ranger.features.spellcasting, true, "Expanded Spell List (ua)", UACFV_Ranger_Expanded_Spell_List, "Optional 2nd-level ranger features"); var UACFV_Ranger_Spell_Versatility = { name : "Spell Versatility", extraname : "Optional Ranger 2", source : [["UA:CFV", 8]], description: desc("When I finish a long rest, I can replace a ranger spell I know with another of the same level") }; AddFeatureChoice(ClassList.ranger.features.spellcasting, true, "Spell Versatility (ua)", UACFV_Ranger_Spell_Versatility, "Optional 2nd-level ranger features"); var UACFV_Primal_Awareness = { name : "Primal Awareness", source : [["UA:CFV", 8]], description : desc([ "I get bonus spells known, which do not count against the number of spells I can know", "In addition, I can cast each once per long rest without expending a spell slot" ]), calcChanges : { spellList : [ function(spList, spName, spType) { // Remove the bonus spells from the normally selectable list if ((spName === "ranger" || spName === "rangerua") && spType.indexOf("bonus") === -1) { if (!spList.notspells) spList.notspells = []; spList.notspells = spList.notspells.concat(["detect magic", "speak with animals", "beast sense", "locate animals or plants", "speak with plants", "locate creature", "commune with nature"]); } }, "I know the following spells, without them counting towards the maximum number of spells I can know: Detect Magic, Speak with Animals, Beast Sense, Locate Animals or Plants, Speak with Plants, Locate Creature, and Commune with Nature." ] }, spellcastingBonus : [{ name : "Primal Awareness", spells : ["detect magic", "speak with animals", "beast sense", "locate animals or plants", "speak with plants", "locate creature", "commune with nature"], selection : ["detect magic", "speak with animals", "beast sense", "locate animals or plants", "speak with plants", "locate creature", "commune with nature"], firstCol : "oncelr+markedbox", times : levels.map(function (n) { return n < 5 ? 2 : n < 9 ? 4 : n < 13 ? 5 : n < 17 ? 6 : 7; }) }] }; CreateClassFeatureVariant("ranger", "primeval awareness", "Primal Awareness (ua)", UACFV_Primal_Awareness); var UACFV_Fade_Away = { name : "Fade Away", source : [["UA:CFV", 8]], description : desc([ "As a bonus action, I can become invisible along with any equipment I'm wearing/carrying", "This invisibility lasts until the start of my next turn" ]), action : [["bonus action", ""]], usages : 1, recovery : "short rest" }; CreateClassFeatureVariant("ranger", "hide in plain sight", "Fade Away (ua)", UACFV_Fade_Away); if (ClassSubList["ranger-beast master"]) { AddFeatureChoice(ClassSubList["ranger-beast master"].features["subclassfeature3"], true, "Beast of the Air/Earth (ua)", { name : "Beast of the Air/Earth", extraname : "Optional Beast Master 3", source : [["UA:CFV", 8]], description : desc([ "My ranger's companion can be a primal beast whose lineage stretches back to the beginning", "This beast of the air or earth takes the form of a regular animal, but has different abilities", "Its hit points total is equal to its Con mod + my Wis mod + 5 times my ranger level", "As a bonus action, I can command it to make one attack or take the Hide action", "If it dies, I can revive it within 1 hour as an action where I expend a spell slot and touch it", "It then returns to life with all its hit points after 1 minute" ]), action : [["bonus action", "Command Beast of the Air/Earth"], ["action", "Revive Beast of the Air/Earth"]], creaturesAdd : [["Beast of the Air", true], ["Beast of the Earth", true]], creatureOptions : [{ name : "Beast of the Air", source : [["UA:CFV", 8]], size : 4, type : "Beast", alignment : "Neutral", ac : 13, hp : 6, hd : [1, 6], hdLinked : ["ranger", "spell-less ranger"], speed : "10 ft, fly 60 ft", scores : [6, 16, 13, 8, 14, 11], saves : ["", 5, 3, "", 4, ""], skills : { "perception" : 4, "stealth" : 5 }, senses : "Darkvision 60 ft", passivePerception : 14, languages : "understands the languages of its master (me)", challengeRating : "1/4", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Shred", ability : 2, damage : [1, 6, "slashing"], range : "Melee (5 ft)" }], features : [{ name : "Ready Companion", description : "As a bonus action, I can command the beast to make its shred attack or to Hide." }, { name : "Primal Rebirth", description : "If the beast has died within the last hour, I can use my action to touch it and expend a spell slot of 1st level or higher. The beast returns to life after 1 minute with all its hit points restored." }], traits : [{ name : "Flyby", description : "The beast doesn't provoke opportunity attacks when it flies out of an enemy's reach." }], calcChanges : { hp : function (totalHD, HDobj, prefix) { if (!classes.known.ranger && !classes.known["spell-less ranger"]) return; var wisMod = Number(What('Wis Mod')); var rngrLvl = classes.known.ranger ? classes.known.ranger.level : classes.known["spell-less ranger"].level; var rngrLvl5 = 5 * rngrLvl; HDobj.alt.push(HDobj.conMod + wisMod + rngrLvl5); HDobj.altStr.push(" = " + HDobj.conMod + " from its Constitution modifier\n + " + wisMod + " from its master's Wisdom modifier\n + 5 \xD7 " + rngrLvl + " from five times its master's ranger level (" + rngrLvl5 + ")"); }, setAltHp : true, hpForceRecalc : true }, companionApply : "companion" }, { name : "Beast of the Earth", source : [["UA:CFV", 9]], size : 3, type : "Beast", alignment : "Neutral", ac : 12, hp : 7, hd : [1, 8], hdLinked : ["ranger", "spell-less ranger"], speed : "40 ft, climb or swim 40 ft", scores : [14, 14, 15, 8, 14, 11], saves : ["", 4, 4, "", 4, ""], skills : { "perception" : 4, "stealth" : 4 }, senses : "Darkvision 60 ft", passivePerception : 14, languages : "understands the languages of its master (me)", challengeRating : "1/4", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Maul", ability : 1, damage : [1, 6, "slashing"], range : "Melee (5 ft)", description : "If used after moving 20 ft straight in the same round, see Charge trait" }], features : [{ name : "Movement Mode", description : "When I bond with the beast, I choose wether it has a climb speed or a swim speed." }, { name : "Ready Companion", description : "As a bonus action, I can command the beast to make its shred attack or to Hide." }, { name : "Primal Rebirth", description : "If the beast has died within the last hour, I can use my action to touch it and expend a spell slot of 1st level or higher. The beast returns to life after 1 minute with all its hit points restored." }], traits : [{ name : "Charge", description : "If the beast moves at least 20 ft straight toward a target and then hits it with a maul attack on the same turn, the target takes an extra 1d6 slashing damage. If the target is a creature, it must succeed on a Strength saving throw against my spell save DC or be knocked prone." }], calcChanges : { hp : function (totalHD, HDobj, prefix) { if (!classes.known.ranger && !classes.known["spell-less ranger"]) return; var wisMod = Number(What('Wis Mod')); var rngrLvl = classes.known.ranger ? classes.known.ranger.level : classes.known["spell-less ranger"].level; var rngrLvl5 = 5 * rngrLvl; HDobj.alt.push(HDobj.conMod + wisMod + rngrLvl5); HDobj.altStr.push(" = " + HDobj.conMod + " from its Constitution modifier\n + " + wisMod + " from its master's Wisdom modifier\n + 5 \xD7 " + rngrLvl + " from five times its master's ranger level (" + rngrLvl5 + ")"); }, setAltHp : true, hpForceRecalc : true }, companionApply : "companion" }] }, "Optional 3rd-level beast master features"); } // Add the Ranger alternative class features also to the Revised Ranger, if it exists if (ClassList["rangerua"]) { CreateClassFeatureVariant("rangerua", "natural explorer", "Deft Explorer (ua)", UACFV_Deft_Explorer); // Add Favored Foe as an alternative choice (can't be done by automation because of choices) and add "Favored Foe" variant option // Move some attributes from the main object to the favored enemy choice objects ['additional', 'languageProfs', 'calcChanges'].forEach( function(attr) { var fea = ClassList.rangerua.features["favored enemy"]; if (!fea[attr]) return; // Move the attribute to each of the choices for (var i = 0; i < fea.choices.length; i++) { var aCh = fea[fea.choices[i].toLowerCase()]; if (aCh.source) continue; // don't do options that are not part of the original entry (which don't have a source) aCh[attr] = fea[attr]; } // Now delete the attributes from the parent object delete fea[attr]; }); // Now add the alternative class feature as another choice AddFeatureChoice(ClassList.rangerua.features["favored enemy"], false, "[alternative feature] Favored Foe (ua)", UACFV_Favored_Foe); // The enhancement option for fighting styles has to be added to each class separately AddFeatureChoice(ClassList.rangerua.features.spellcasting, true, "Martial Versatility (ua)", UACFV_Ranger_Martial_Versatility, "Optional 2nd-level ranger features"); AddFeatureChoice(ClassList.rangerua.features.spellcasting, true, "Expanded Spell List (ua)", UACFV_Ranger_Expanded_Spell_List, "Optional 2nd-level ranger features"); AddFeatureChoice(ClassList.rangerua.features.spellcasting, true, "Spell Versatility (ua)", UACFV_Ranger_Spell_Versatility, "Optional 2nd-level ranger features"); CreateClassFeatureVariant("rangerua", "primeval awareness", "Primal Awareness (ua)", UACFV_Primal_Awareness); CreateClassFeatureVariant("rangerua", "hide in plain sight", "Fade Away (ua)", UACFV_Fade_Away); } // Rogue alternative class feature enhancement AddFeatureChoice(ClassList.rogue.features["cunning action"], true, "Cunning Action: Aim (ua)", { name : "Cunning Action: Aim", extraname : "Optional Rogue 2", source : [["UA:CFV", 9]], description : desc([ "I can also use my cunning action bonus action to carefully aim my next attack", "If I don't move in my turn, I give myself adv. on my next attack in the current turn", "After I use cunning action to aim, my speed is 0 until the end of the current turn" ]) }, "Optional 2nd-level rogue features"); // Sorcerer alternative class features and enhancements AddFeatureChoice(ClassList.sorcerer.features.spellcasting, true, "Expanded Spell List (ua)", { name : "Expanded Sorcerer Spell List", extraname : "Optional Sorcerer 1", source : [["UA:CFV", 9]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "sorcerer" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["primal savagery", "grease", "protection from evil and good", "flame blade", "flaming sphere", "vampiric touch", "fire shield", "flesh to stone", "demiplane", "foresight"]); }, "This alternative class feature enhancement expands the spell list of the sorcerer class with the following spells (spell level in brackets): Primal Savagery (cantrip), Grease (1), Protection from Evil and Good (1), Flame Blade (2), Flaming Sphere (2), Vampiric Touch (3), Fire Shield (4), Flesh to Stone (6), Demiplane (8), and Foresight (9)." ] } }, "Optional sorcerer features"); AddFeatureChoice(ClassList.sorcerer.features.spellcasting, true, "Spell Versatility (ua)", { name : "Spell Versatility", extraname : "Optional Sorcerer 1", source : [["UA:CFV", 10]], description: desc("After a long rest, I can swap a sorcerer cantrip/spell I know for another of the same level") }, "Optional sorcerer features"); // Font of Magic options AddFeatureChoice(ClassList.sorcerer.features["font of magic"], true, "Empowering Reserves", { name : "Empowering Reserves", extraname : "Optional Sorcerer 2", source : [["UA:CFV", 10]], description : " [2 sorcery points]\n When I make an ability check on my turn, I can gain advantage on the check" }, "Optional 2nd-level sorcerer features"); AddFeatureChoice(ClassList.sorcerer.features["font of magic"], true, "Imbuing Touch", { name : "Imbuing Touch", extraname : "Optional Sorcerer 2", source : [["UA:CFV", 10]], description : " [2 sorcery points]\n As an action, I can touch a nonmagical weapon and make it count as magical for 1 minute", action : [["action", " (2 sorcery points)"]] }, "Optional 2nd-level sorcerer features"); AddFeatureChoice(ClassList.sorcerer.features["font of magic"], true, "Sorcerous Fortitude (ua)", { name : "Sorcerous Fortitude", extraname : "Optional Sorcerer 2", source : [["UA:CFV", 10]], description : " [1+ sorcery points]\n As an action, I can gain 1d4 temporary hit points per sorcery point I spend", action : [["action", " (1+ sorcery points)"]] }, "Optional 2nd-level sorcerer features"); // Metamagic options AddFeatureChoice(ClassList.sorcerer.features["metamagic"], true, "Elemental Spell (ua)", { name : "Elemental Spell", source : [["UA:CFV", 10]], additional: "1 sorcery point", description : desc([ "If the spell deals one of the below damage types, I can change it to another on the list", "These damage types are: acid, cold, fire, lightning, or thunder" ]) }); AddFeatureChoice(ClassList.sorcerer.features["metamagic"], true, "Seeking Spell (ua)", { name : "Seeking\xA0Spell", source : [["UA:CFV", 10]], additional: "1 sorcery point", description : desc([ "I can ignore half- and three-quarters cover for the one spell I'm casting", "This applies both to my spell attack rolls as to the Dexterity saving throws of the targets" ]) }); AddFeatureChoice(ClassList.sorcerer.features["metamagic"], true, "Unerring Spell (ua)", { name : "Unerring Spell", source : [["UA:CFV", 10]], additional: "2 sorcery points", description : desc([ "If I make an attack roll for a spell and miss, I can use this to reroll the attack once", "I can use unerring spell even if I already used another metamagic option for the spell" ]) }); // Warlock alternative class features and enhancements AddFeatureChoice(ClassList.warlock.features["pact magic"], true, "Spell Versatility (ua)", { name : "Spell Versatility", extraname : "Optional Warlock 1", source : [["UA:CFV", 10]], description: desc("After a long rest, I can swap a warlock cantrip or spell I know for another of the same level") }, "Optional 1st-level warlock features"); AddFeatureChoice(ClassList.warlock.features["pact magic"], true, "Expanded Spell List (ua)", { name : "Expanded Warlock Spell List", extraname : "Optional Warlock 1", source : [["UA:CFV", 10]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "warlock" || (spType.indexOf("bonus") !== -1 && (!spList["class"] || spList["class"] !== "warlock"))) return; spList.extraspells = spList.extraspells.concat(["thunderwave", "knock", "animate dead", "life transference", "greater invisibility", "phantasmal killer", "mislead", "modify memory", "planar binding", "teleportation circle", "create homunculus", "magic jar", "project image", "abi-dalzim's horrid wilting", "gate", "shapechange", "weird"]); }, "This alternative class feature enhancement expands the spell list of the warlock class with the following spells (spell level in brackets): Thunderwave (1), Knock (2), Animate Dead (3), Life Transference (3), Greater Invisibility (4), Phantasmal Killer (4), Mislead (5), Modify Memory (5), Planar Binding (5), Teleportation Circle (5), Create Homunculus (6), Magic Jar (6), Project Image (7), Abi-Dalzim's Horrid Wilting (8), Gate (9), Shapechange (9), and Weird (9)." ] } }, "Optional 1st-level warlock features"); // New Eldritch Invocations AddWarlockInvocation("Bond of the Talisman (prereq: level 12 warlock, Pact of the Talisman) (ua)", { name : "Bond of the\xA0Talisman", source : [["UA:CFV", 11]], submenu : "[improves Pact of the Talisman]", description : desc([ "As an action, I can teleport to the unoccupied space closest to the wearer of my talisman", "The talisman's wearer can do the same to teleport to me; Only works if both on same plane" ]), prereqeval : function(v) { return classes.known.warlock.level >= 12 && GetFeatureChoice('class', 'warlock', 'pact boon').indexOf("pact of the talisman") !== -1; }, action : [["action", ""]] }); AddWarlockInvocation("Chain Master's Fury (prereq: level 9 warlock, Pact of the Chain)", { name : "Chain Master's Fury", source : [["UA:CFV", 11]], submenu : "[improves Pact of the Chain]", description: desc("As a bonus action, I can command my familiar to make one attack"), prereqeval : function(v) { return classes.known.warlock.level >= 9 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the chain'; }, action : [["bonus action", ""]] }); AddWarlockInvocation("Eldritch Armor (prereq: Pact of the Blade)", { name : "Eldritch Armor", source : [["UA:CFV", 11]], submenu : "[improves Pact of the Blade]", description : desc([ "As an action, I can touch an unattended suit of armor and instantly don it", "I am proficient with this suit of armor until it is removed" ]), prereqeval : function(v) { return GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the blade'; }, action : [["action", ""]] }); AddWarlockInvocation("Eldritch Mind (prereq: Pact of the Tome)", { name : "Eldritch Mind", source : [["UA:CFV", 11]], submenu : "[improves Pact of the Tome]", description: desc("I have advantage on my Constitution saving throws to maintain concentration on a spell"), prereqeval : function(v) { return GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the tome'; }, savetxt : { text : "Adv. on Con (Concentration) saves" } }); AddWarlockInvocation("Far Scribe (prereq: level 5 warlock, Pact of the Tome) (ua)", { name : "Far\xA0Scribe", source : [["UA:CFV", 11]], submenu : "[improves Pact of the Tome]", description : desc([ "My book of shadows has a new page; As an action, a creature can write its name on it", "This page can hold my Cha mod (min 1) in creature names; I can remove one as an action", "I can cast Sending without a spell slot or material components, targeting one on the page", "Instead of saying the message, I write it on the page and any reply appears there as well", "This writing disappears after 1 minute; The target still hears the message in their mind" ]), prereqeval : function(v) { return classes.known.warlock.level >= 5 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the tome'; }, action : [["action", " (erase name)"]], spellcastingBonus : [{ name : "Far Scribe", spells : ["sending"], selection : ["sending"], firstCol : "atwill" }], spellChanges : { "sending" : { components : "V,S", compMaterial : "", description : "Send 25 word message to crea named in book of shadows; it recognizes me and can respond 25 words", changes : "By using Far Scribe, I can cast Sending without using a spell slot or material components, but only to target one of the creatures that wrote their name in my book of shadows. Instead of speaking the message, I write it in my book and any response appears there as well, lasting for 1 minute. The target still hears the message in their mind." } } }); AddWarlockInvocation("Gift of the Protectors (prereq: level 9 warlock, Pact of the Tome) (ua)", { name : "Gift of the\xA0Protectors", source : [["UA:CFV", 11]], submenu : "[improves Pact of the Tome]", description : desc([ "My book of shadows has a new page; As an action, a creature can write its name on it", "This page can hold my Cha mod (min 1) in creature names; I can remove one as an action", "If a creature whose name is on the page drops to 0 HP, it magically drops to 1 HP instead", "This doesn't work if the creature would be killed outright" ]), prereqeval : function(v) { return classes.known.warlock.level >= 9 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the tome'; }, action : [["action", " (erase name)"]], usages : 1, recovery : "long rest" }); AddWarlockInvocation("Investment of the Chain Master (prereq: Pact of the Chain) (ua)", { name : "Investment of the Chain\xA0Master", source : [["UA:CFV", 11]], submenu : "[improves Pact of the Chain]", description : desc([ "When I cast Find Familiar, the summoned create has additional benefits:", "\u2022 It gains a flying or swimming speed of 40 ft (my choice at casting)", "\u2022 It no longer needs to breathe", "\u2022 Its weapon attacks are considered magical for overcoming immunities and resistances", "\u2022 If it forces a creature to make a saving throw, it uses my spell save DC" ]), prereqeval : function(v) { return GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the chain'; }, calcChanges : { companionCallback : [function(prefix, oCrea, bAdd, sCompType) { if (sCompType !== "pact_of_the_chain") return; var strFea = "##\u25C6 Investment of the Chain Master (UA:CFV 11)##.: The familiar gains 40 ft fly or swim speed (my choice), doesn't need to breathe, its attacks are considered magical, and it can use my spell save DC instead of its own DC's (if any)."; var strSpd = "fly or swim 40 ft"; if (What("Unit System") === "metric") { strFea = ConvertToMetric(strFea, 0.5); strSpd = ConvertToMetric(strSpd, 0.5); } var aFnc = bAdd ? AddString : RemoveString; aFnc(prefix + "Comp.Use.Features", strFea, true); aFnc(prefix + "Comp.Use.Speed", strSpd, typePF ? ",\n" : ", "); for (var i = 1; i <= 3; i++) { var baseFld = prefix + "Comp.Use.Attack." + i; var weaDescrFld = baseFld + ".Description"; var strWeaDescr = What(weaDescrFld); if (bAdd && What(baseFld + ".Weapon Selection") && !(/(,|;)? ?counts as magical/i).test(strWeaDescr)) { AddString(weaDescrFld, "Counts as magical", "; "); } else if (!bAdd) { Value(weaDescrFld, strWeaDescr.replace(/(,|;)? ?counts as magical/i, '')); } } }, "My pact of the chain familiars gain an extra feature listing the extra bonuses they gain."] } }); AddWarlockInvocation("Protection of the Talisman (prereq: level 9 warlock, Pact of the Talisman) (ua)", { name : "Protection of the\xA0Talisman", source : [["UA:CFV", 12]], submenu : "[improves Pact of the Talisman]", description: desc("The wearer of my talisman adds 1d4 to saving throw rolls in which they lack proficiency"), prereqeval : function(v) { return classes.known.warlock.level >= 9 && GetFeatureChoice('class', 'warlock', 'pact boon').indexOf("pact of the talisman") !== -1; }, savetxt : { text : ["+1d4 to nonproficient saves"] } }); AddWarlockInvocation("Rebuke of the Talisman (prereq: Pact of the Talisman) (ua)", { name : "Rebuke of the\xA0Talisman", source : [["UA:CFV", 12]], submenu : "[improves Pact of the Talisman]", description : desc([ "As a reaction when the wearer of my talisman is hit, I deal damage and push the attacker", "To be able to do this, I have to see the attacker and it has to be within 30 ft of me", "I deal it my Cha mod in psychic damage (min 1) and push it 10 ft away from the talisman" ]), prereqeval : function(v) { return GetFeatureChoice('class', 'warlock', 'pact boon').indexOf("pact of the talisman") !== -1; }, action : [["reaction", ""]] }); // Pact Boon option AddWarlockPactBoon("Pact of the Talisman (ua)", { name : "Pact of the\xA0Talisman", source : [["UA:CFV", 12]], description : desc([ "The wearer of this amulet adds 1d4 to checks with skills in which they lack proficiency", "I can give the talisman to others to use; The talisman turns to ash when I die", "If I lose my talisman, I can perform a 1-hour ceremony to gain a replacement", "This ceremony destroys the previous amulet and can be done during a short or long rest" ]) }); // Wizard alternative class features and enhancements AddFeatureChoice(ClassList.wizard.features.spellcasting, true, "Cantrip Versatility (ua)", { name : "Cantrip Versatility", extraname : "Optional Wizard 1", source : [["UA:CFV", 12]], description: desc("Whenever I gain a wizard level, I can replace a wizard cantrip I know with another") }, "Optional 1st-level wizard features"); AddFeatureChoice(ClassList.wizard.features.spellcasting, true, "Expanded Spell List (ua)", { name : "Expanded Wizard Spell List", extraname : "Optional Wizard 1", source : [["UA:CFV", 12]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "wizard" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["augury", "enhance ability", "speak with dead", "divination"]); }, "This alternative class feature enhancement expands the spell list of the wizard class with the following spells (spell level in brackets): Augury (2), Enhance Ability (2), Speak with Dead (3), and Divination (4)." ] } }, "Optional 1st-level wizard features"); // ua_20191125_Fighter-Rogue-and-Wizard.js // This file adds the content from the Unearthed Arcana: Fighter, Rogue, and Wizard (psionics) article to MPMB's Character Record Sheet // Define the source SourceList["UA:FRnW"] = { name : "Unearthed Arcana: Fighter, Rogue, and Wizard", abbreviation : "UA:FRnW", group : "Unearthed Arcana", url : "https://media.wizards.com/2019/dnd/downloads/UA-PsychicSoulPsionics.pdf", date : "2019/11/25" }; // Add a subclass for the Fighter AddSubClass("fighter", "psychic warrior-ua", { regExpSearch : /^(?=.*psychic)(?=.*warrior).*$/i, subname : "Psychic Warrior", source : [["UA:FRnW", 1]], fullname : "Psychic Warrior", abilitySave : 4, features : { "subclassfeature3" : { name : "Psionic Armament", source : [["UA:FRnW", 1]], minlevel : 3, description : function () { var a = desc([ "When I finish a long rest, I can choose to augment my defenses or strikes until the next", " \u2022 As a reaction, augmented defenses allow me to reduce the damage taken by 1d10", " I can reduce the damage taken by myself or by a creature that I can see within 30 ft", " \u2022 Once per turn, augmented strikes adds +1d4 psychic damage to my weapon attack" ]); return levels.map(function (n) { return n < 10 ? a : a.replace('1d10', '1d12').replace('1d4', '1d6'); }); }(), additional : levels.map(function (n) { return n < 3 ? "" : n < 10 ? "1d10 defense; 1d4 offense" : "1d12 defense; 1d6 offense"; }), action : [["reaction", "Augmented Defenses"]] }, "subclassfeature3.1" : { name : "Telekinetic Hand", source : [["UA:FRnW", 1]], minlevel : 3, description: desc("I learn the Mage Hand cantrip, can cast it without components, and can make it invisible"), spellcastingBonus : [{ name : "Telekinetic Hand", spells : ["mage hand"], selection : ["mage hand"], firstCol : "atwill" }], spellChanges : { "mage hand" : { components : "", description : "Create invisible spectral hand for simple tasks or carry up to 10 lb; 1 a to control; can't have multiples", changes : "My Telekinetic Hand class feature allows me to cast Mage Hand without components and I can make the spectral hand invisible." } } }, "subclassfeature7" : { name : "Strength of Mind", source : [["UA:FRnW", 1]], minlevel : 7, description : desc([ "As a bonus action, I can have a creature I can see within 20 ft make a Strength save", "It takes 2d6 + Int mod psychic damage \u0026 moves 15 ft away or towards me (my choice)", "If its save succeeds, it takes half damage and isn't moved; DC 8 + Prof Bonus + Int mod" ]), action : [["bonus action", ""]], usages : "Intelligence modifier per ", usagescalc : "event.value = Math.max(1, What('Int Mod'));", recovery : "long rest" }, "subclassfeature10" : { name : "Telekinetic Bulwark", source : [["UA:FRnW", 1]], minlevel : 10, description : desc([ "When I take the Attack action, I can forgo one of the attacks to project psionic power", "Myself and my allies within 10 ft of me gain half cover and adv. on Strength saves", "This 10-ft radius bastion around me lasts for 1 minute or until I'm incapacitated", "I regain the usage of this feature after I use my second wind feature" ]), recovery : "long rest", usages : 1, limfeaname : "Telekinetic Bulwark [Second Wind regains]" }, "subclassfeature15" : { name : "Agonizing Strikes", source : [["UA:FRnW", 2]], minlevel : 15, description : desc([ "When I hit a creature with a weapon attack, I can deal an extra +2d10 psychic damage", "The target also has to make a Constitution save (DC 8 + my Prof Bonus + my Int mod)", "If it fails, it falls prone and has disadv. on its next ability check until my next turn starts" ]), usages : "Intelligence modifier per ", usagescalc : "event.value = Math.max(1, What('Int Mod'));", recovery : "long rest" }, "subclassfeature18" : { name : "Psychic Dreadnaught", source : [["UA:FRnW", 2]], minlevel : 18, description : desc([ "As a reaction when I take damage, I can give myself the following benefits for 1 minute:", " \u2022 At the start of each of my turns, I regain 10 hit points", " \u2022 My walking speed increases by +10 ft", " \u2022 If I'm prone, I can stand up by spending 5 ft of movement", "These benefits also end when I'm incapacitated" ]), recovery : "long rest", usages : 1, action : [["reaction", ""]] } } }); // Add a subclass for the Rogue AddSubClass("rogue", "soulknife-ua", { regExpSearch : /soulknife/i, subname : "Soulknife", source : [["UA:FRnW", 2]], fullname : "Soulknife", abilitySave : 4, features : { "subclassfeature3" : { name : "Psychic Blade", source : [["UA:FRnW", 2]], minlevel : 3, description : desc([ "As a bonus action, I can create a magical blade from one or both of my hands", "Disappear if I'm incapacitated, leave my hand (not thrown), or I dismiss it (no action)" ]), action : [["bonus action", " (create)"]], weaponOptions : [{ regExpSearch : /^(?=.*soulknife)(?=.*psychic)(?=.*blade).*$/i, name : "Soulknife's Psychic Blade", source : [["UA:FRnW", 2]], ability : 1, type : "Simple", damage : [1, 6, "psychic"], range : "Melee, 30/60 ft", description : "Finesse, light, thrown", abilitytodamage : true, isSoulknifePsychicBlade : true, selectNow : true }] }, "subclassfeature3.1" : { name : "Psionic Enhancement", source : [["UA:FRnW", 2]], minlevel : 3, description : desc([ "When I finish a long rest, I can choose one of these benefits until my next long rest:", " \u2022 Talk telepathically with those I can see in 30 ft; Can respond if they know a language", " \u2022 Increase my walking speed by 5 ft", " \u2022 Increase my maximum and current HP with my Intelligence modifier plus rogue level" ]) }, "subclassfeature9" : { name : "Terrifying Blade", source : [["UA:FRnW", 3]], minlevel : 9, description : desc([ "When I damage a creature with my psychic blade, it must make a Wisdom saving throw", "If it fails, it is frightened of me until my the start of my next turn", "If it succeeds, it is immune to this for 24 hours; DC 8 + my Prof Bonus + my Int mod" ]), calcChanges : { atkAdd : [ function (fields, v) { if (v.isSoulknifePsychicBlade) { fields.Description += (fields.Description ? '; ' : '') + 'Wis save or frightened for 1 round'; }; } ] } }, "subclassfeature13" : { name : "Psychic Veil", source : [["UA:FRnW", 3]], minlevel : 13, description : desc([ "As an action, I can become invisible along with everything I'm wearing or carrying", "This ends after 10 minutes, if I make an attack, or if I force a creature to make a save" ]), action : [["action", ""]], usages : "Intelligence modifier per ", usagescalc : "event.value = Math.max(1, What('Int Mod'));", recovery : "long rest" }, "subclassfeature17" : { name : "Rend Mind", source : [["UA:FRnW", 3]], minlevel : 17, description : desc([ "As an action, I can deal 12d6 psychic damage to a creature I can see within 30 ft", "It also makes an Int save or is stunned until my next turn starts; Half damage on success", "It has disadv. on the save if I'm hidden from it; DC 10 + my Prof Bonus + my Int mod", "I must have a psychic blade manifested to do so and one vanishes when I use this feature" ]), action : [["action", ""]], usages : "Intelligence modifier per ", usagescalc : "event.value = Math.max(1, What('Int Mod'));", recovery : "long rest" } } }); // Add a subclass for the Wizard AddSubClass("wizard", "psionics-ua", { regExpSearch : /^((?=.*(wizard|mage|magus))(?=.*psionics)|(?=.*(psionicist|mentalist)))(?!.*(wild mage|\bpsion\b|mystic)).*$/i, subname : "Psionics", source : [["UA:FRnW", 3]], fullname : "Psionicist", features : { "subclassfeature2" : { name : "Psionic Focus", source : [["UA:FRnW", 3]], minlevel : 2, description : desc([ "I learn to channel psionic energy through an object special to me, my psionic focus", "It allows me to reroll a roll of 1 on any psychic or force damage die for my wizard spells", "I can use this as my spellcasting focus; If lost, I can recreate it by meditating for 1 hour" ]) }, "subclassfeature2.1" : { name : "Psionic Devotion", source : [["UA:FRnW", 4]], minlevel : 2, description : desc([ 'I learn one cantrip: Friends, Mage Hand, or Message; Use "Choose Feature" button above', "While my psionic focus is on me, I can cast it as a bonus action without components" ]), choices : ["Friends", "Mage Hand", "Message"], "friends" : { name : "Psionic Devotion: Friends", description : desc([ "I learn the Friends cantrip and while my psionic focus in on me, I am better at casting it", "I can cast it as a bonus action without components and the target doesn't become hostile" ]), spellcastingBonus : [{ name : "Psionic Devotion", spells : ["friends"], selection : ["friends"], firstCol : "atwill" }], spellChanges : { "friends" : { time : "1 bns", components : "", compMaterial : "", description : "Adv. on Cha checks vs. 1 crea currently not hostile; when spell ends, crea realizes I used magic", changes : "While my psionic focus is on my person, I can cast Friends as a bonus action without requiring any components and when the spell ends, the target doesn't become hostile to me." } } }, "mage hand" : { name : "Psionic Devotion: Mage Hand", description : desc([ "I learn Mage Hand and while my psionic focus in on me, I am better at casting it", "I can then cast it as a bonus action without components and can make the hand invisible", "Also, I can control the hand as a bonus action instead of an action" ]), spellcastingBonus : [{ name : "Psionic Devotion", spells : ["mage hand"], selection : ["mage hand"], firstCol : "atwill" }], spellChanges : { "mage hand" : { time : "1 bns", components : "", description : "Create invisible hand for simple tasks or carry up to 10 lb; 1 bns action to control; can't have multiples", changes : "While my psionic focus is on my person, I can cast Mage Hand as a bonus action without requiring any components, can make the hand invisible, and controlling the hand is a bonus action for me." } } }, "message" : { name : "Psionic Devotion: Message", description : desc([ "I learn the Message cantrip and while my psionic focus in on me, I'm better at casting it", "I can then cast it as a bonus action without components", "Also, I don't need to point at the target or whisper the message out loud" ]), spellcastingBonus : [{ name : "Psionic Devotion", spells : ["message"], selection : ["message"], firstCol : "atwill" }], spellChanges : { "message" : { time : "1 bns", components : "", compMaterial : "", description : "1 crea hears message I think; can reply with a whisper; nobody can overhear; needs no straight line", changes : "While my psionic focus is on my person, I can cast Message as a bonus action without requiring any components, don't need to point toward the target, and I don't need to whisper my message out loud." } } } }, "subclassfeature6" : { name : "Thought Form", source : [["UA:FRnW", 4]], minlevel : 6, description : desc([ "As a bonus action, I can use my psionic focus to transform my body into luminous energy", "I chose the shape (my size); It sheds 5-ft radius dim light; My equipment melds into it", "My psionic focus hovers within the energy; In this form, I have the following benefits:", " \u2022 Spells I cast require no verbal, somatic, or material components without a gold cost", " \u2022 I have resistance to psychic and nonmagical bludgeoning/piercing/slashing damage", "This lasts for 10 minutes or until I'm incapacitated, die, or use a bonus action to end it" ]), action : [["bonus action", ""]], usages : "Intelligence modifier per ", usagescalc : "event.value = Math.max(1, What('Int Mod'));", recovery : "long rest" }, "subclassfeature10" : { name : "Mental Discipline", source : [["UA:FRnW", 4]], minlevel : 10, description : desc([ 'I learn one spell: Dominate Person, Scrying, or Telekinesis; Use "Choose Feature" button', "I can cast the spell without a spell slot once per long rest (and normally with a spell slot)" ]), usages : 1, recovery : "long rest", choices : ["Dominate Person", "Scrying", "Telekinesis"], "dominate person" : { name : "Mental Discipline: Dominate Person", description : desc([ "I add Dominate Person to my spellbook and can cast it without requiring components", "Once per long rest, I can cast it without using a spell slot; I can also prepare it as normal" ]), limfeaname : "Dominate Person (without spell slot)", spellcastingBonus : [{ name : "Mental Discipline", spells : ["dominate person"], selection : ["dominate person"] }], spellChanges : { "dominate person" : { components : "", changes : "I can cast Dominate Person without requiring any components. Once per long rest, I can cast it without using a spell slot. I can also cast it by using spell slots as normal." } } }, "scrying" : { name : "Mental Discipline: Scrying", description : desc([ "I add Scrying to my spellbook and can cast it without requiring components", "Once per long rest, I can cast it without using a spell slot; I can also prepare it as normal" ]), limfeaname : "Scrying (without spell slot)", spellcastingBonus : [{ name : "Mental Discipline", spells : ["scrying"], selection : ["scrying"] }], spellChanges : { "scrying" : { components : "", compMaterial : "", changes : "I can cast Scrying without requiring any components. Once per long rest, I can cast it without using a spell slot. I can also cast it by using spell slots as normal." } } }, "telekinesis" : { name : "Mental Discipline: Telekinesis", description : desc([ "I add Telekinesis to my spellbook and can cast it without requiring components", "Once per long rest, I can cast it without using a spell slot; I can also prepare it as normal" ]), limfeaname : "Telekinesis (without spell slot)", spellcastingBonus : [{ name : "Mental Discipline", spells : ["telekinesis"], selection : ["telekinesis"] }], spellChanges : { "telekinesis" : { components : "", changes : "I can cast Telekinesis without requiring any components. Once per long rest, I can cast it without using a spell slot. I can also cast it by using spell slots as normal." } } } }, "subclassfeature10.1" : { name : "Empowered Psionics", source : [["UA:FRnW", 5]], minlevel : 10, description: desc("I add my Int modifier to one target of my wizard spells that do psychic or force damage"), calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { if (spName.indexOf("wizard") != -1) { return genericSpellDmgEdit(spellKey, spellObj, "force|psychic", "Int", true); } }, "When I deal psychic or force damage with a wizard spell, I can add my Intelligence modifier to the damage against one of the spell's targets." ] } }, "subclassfeature14" : { name : "Thought Travel", source : [["UA:FRnW", 5]], minlevel : 14, description : desc([ "While in my thought form, I gain a fly speed equal to my walking speed and I can hover", "I can then also move through creatures and objects as if they were difficult terrain", "I take 1d10 force damage if I end my turn inside an object", "If I end my thought form while inside an object, I'm shunted to the nearest empty space", "I then take 1d10 force damage for every 5 ft traveled" ]) } } }); // The new spells SpellsList["ego whip-ua"] = { name : "Ego Whip", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["UA:FRnW", 7]], level : 4, school : "Ench", time : "1 a", range : "30 ft", components : "V", duration : "Conc, 1 min", save : "Int", description : "1 crea save or can't cast spells and disadv. on atks, checks, and saves; save end of each turn to end", descriptionFull : "You lash the mind of one creature you can see within range, filling it with despair. The target must succeed on an Intelligence saving throw or suffer disadvantage on attack rolls, ability checks, and saving throws, and it can't cast spells. At the end of each of its turns, the target can make another Intelligence saving throw. On a success, the spell ends on the target." }; SpellsList["id insinuation-ua"] = { name : "Id Insinuation", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["UA:FRnW", 7]], level : 1, school : "Ench", time : "1 a", range : "60 ft", components : "V,S", duration : "Conc, 1 min", save : "Wis", description : "1 crea save or incapacitated and end of each turn 1d12 Psychic damage, after which it can save to end", descriptionShorter : "1 crea save or incapacitated \u0026 end of each turn 1d12 Psychic damage, can save to end after", descriptionFull : "You unleash a torrent of conflicting desires in the mind of one creature you can see within range, impairing its ability to make decisions. The target must succeed on a Wisdom saving throw or be incapacitated. At the end of each of its turns, it takes 1d12 psychic damage, and it can then make another Wisdom saving throw. On a success, the spell ends on the target." }; SpellsList["intellect fortress-ua_frnw"] = { // completely different than later iterations in UA:POR and TCoE name : "Intellect Fortress", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["UA:FRnW", 7]], level : 5, school : "Abjur", time : "1 a", range : "Self", components : "V,S", duration : "Conc, 10 min", description : "I have advantage on all saves and I can use my reaction to have a creature in 30 ft reroll a failed save", descriptionFull : "You create a faintly shimmering barrier of protective psychic power around you. For the duration, you have advantage on all saving throws.\n When another creature that you can see within 30 feet of you fails a saving throw, you can use your reaction to allow them to reroll the save. They must use the new roll." }; SpellsList["mental barrier-ua"] = { name : "Mental Barrier", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["UA:FRnW", 7]], level : 2, school : "Abjur", time : "1 rea", timeFull : "1 reaction, which you take when you are forced to make an Intelligence, a Wisdom, or a Charisma saving throw", range : "Self", components : "V", duration : "1 rnd", description : "I have Psychic damage resistance and adv. on Int, Wis, and Cha saves until the start of my next turn", descriptionFull : "You protect your mind with a wall of looping, repetitive thought. Until the start of your next turn, you have advantage on Intelligence, Wisdom, and Charisma saving throws, and you have resistance to psychic damage." }; SpellsList["mind thrust-ua"] = { // rather different than later iterations in UA:POR and TCoE name : "Mind Thrust", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["UA:FRnW", 7]], level : 2, school : "Ench", time : "1 bns", range : "60 ft", components : "V,S", duration : "1 rnd", save : "Int", description : "1+1/SL crea, all max 30 ft apart, 3d6 Psychic dmg, only Dash/Diseng. next turn; save half, any action", descriptionFull : "You propel a lance of psionic disruption into the mind of one creature you can see within range. The target must make an Intelligence saving throw. On a failed save, the target takes 3d6 psychic damage, and it can use its action only to Dash or Disengage on its next turn. On a successful save, the target takes half as much damage, and this spell doesn't limit its action options." + AtHigherLevels + "When you cast this spell using a spell slot of 3rd level or higher, you can target one additional creature for each slot level above 2nd. The creatures must be within 30 feet of each other when you target them." }; SpellsList["psionic blast-ua"] = { name : "Psionic Blast", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["UA:FRnW", 8]], level : 3, school : "Evoc", time : "1 a", range : "30-ft cone", components : "V", duration : "Instantaneous", save : "Dex", description : "All crea 5d8+1d8/SL Force dmg, 20 ft pushed away, knocked prone; save half, not pushed or prone", descriptionShorter : "All 5d8+1d8/SL Force dmg, 20 ft pushed away, knocked prone; save half, not pushed or prone", descriptionFull : "You unleash a destructive wave of mental power in a 30-foot cone. Each creature in the area must make a Dexterity saving throw. On a failed save, a target takes 5d8 force damage, is pushed 20 feet directly away from you, and is knocked prone. On a successful save, a target takes half as much damage and isn't pushed or knocked prone." + AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d8 for each slot level above 3rd." }; SpellsList["psychic crush-ua"] = { name : "Psychic Crush", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["UA:FRnW", 8]], level : 6, school : "Ench", time : "1 a", range : "60 ft", components : "V,S", duration : "1 min", save : "Int", description : "1 crea 12d6 Psychic damage and stunned for 1 min; save half, not stunned; save at turn end to stop", descriptionFull : "You overload the mind of one creature you can see within range, filling its psyche with discordant emotions. The target must make an Intelligence saving throw. On a failed save, the target takes 12d6 psychic damage and is stunned for 1 minute. On a successful save, the target takes half as much damage and isn't stunned.\n The stunned target can make an Intelligence saving throw at the end of each of its turns. On a successful save, the spell ends on the target.", dynamicDamageBonus : { multipleDmgMoments : false } }; SpellsList["thought shield-ua"] = { name : "Thought Shield", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["UA:FRnW", 8]], level : 2, school : "Abjur", time : "1 a", range : "Touch", components : "V,S", duration : "8 h", description : "1 crea's mind can't be read/detected, telepathy only if wanted, adv. on saves vs. lie detecting effects", descriptionFull : "You weave a clouding veil over the mind of one creature you touch. For the duration, the target's mind can't be read or detected, creatures can't telepathically communicate with the target unless the target allows it, and the target has advantage on saving throws against any effect that would determine whether it is telling the truth." }; // Add the two psionic-themed feats FeatsList["telekinetic-ua"] = { name : "Telekinetic", source : [["UA:FRnW", 8]], descriptionFull : "You learn to move things with your mind. You gain the following benefits:\n \u2022 Increase your Intelligence score by 1, to a maximum of 20.\n \u2022 You learn the mage hand cantrip. You can cast it without verbal or somatic components, and you can make the spectral hand invisible.\n \u2022 As a bonus action, you can try to shove one creature you can see within 5 feet of the spectral hand created by your mage hand spell. When you do so, the target must succeed on a Strength saving throw (DC 8 + your proficiency bonus + your Intelligence modifier) or be pushed 5 feet away from you.", description : "I learn the Mage Hand cantrip, can cast it without components, and can make it invisible. As a bonus action, I can use it to try and shove a creature I can see within 5 ft of it. The target must make a Str save (Int based) or be shoved 5 ft away from me. [+1 Intelligence]", scores : [0, 0, 0, 1, 0, 0], spellcastingBonus : [{ name : "Telekinetic", spellcastingAbility : 4, spells : ["mage hand"], selection : ["mage hand"], firstCol : "atwill" }], spellChanges : { "mage hand" : { components : "", save : "Str", description : "Invisible hand, simple tasks, carries 10 lb; 1 a to control; not multiple; 1 bns 1 crea save or shove 5 ft", changes : "My Telekinetic feat allows me to cast Mage Hand without verbal or somatic components and I can make the spectral hand invisible." } } }; FeatsList["telepathic-ua"] = { name : "Telepathic", source : [["UA:FRnW", 8]], descriptionFull : "You awaken the ability to mentally connect with others. You gain the following benefits:\n \u2022 Increase your Intelligence score by 1, to a maximum of 20.\n \u2022 You gain proficiency in one skill of your choice from the following list: Deception, Insight, Intimidation, or Persuasion.\n \u2022 You can communicate telepathically with any creature you can see within 30 feet of you. If it understands at least one language, it can respond to you telepathically.", description : "I gain proficiency with one skill chosen from Deception, Insight, Intimidation, or Persuasion. I can communicate telepathically with any creature I can see within 30 feet of me. If it understands at least one language, it can respond to me telepathically. [+1 Intelligence]", scores : [0, 0, 0, 1, 0, 0], choices : ["Deception", "Insight", "Intimidation", "Persuasion"], "deception" : { description : "I gain proficiency with Deception. I can communicate telepathically with any creature I can see within 30 ft of me. If the creature understands at least one language, it can respond to me telepathically. [+1 Intelligence]", skills : ["Deception"] }, "insight" : { description : "I gain proficiency with Insight. I can communicate telepathically with any creature I can see within 30 ft of me. If the creature understands at least one language, it can respond to me telepathically. [+1 Intelligence]", skills : ["Insight"] }, "intimidation" : { description : "I gain proficiency with Intimidation. I can communicate telepathically with any creature I can see within 30 ft of me. If the creature understands at least one language, it can respond to me telepathically. [+1 Intelligence]", skills : ["Intimidation"] }, "persuasion" : { description : "I gain proficiency with Persuasion. I can communicate telepathically with any creature I can see within 30 ft of me. If the creature understands at least one language, it can respond to me telepathically. [+1 Intelligence]", skills : ["Persuasion"] } }; // ua_20200114_Subclasses-Part-1.js // This file adds the content from the Unearthed Arcana 2020: Subclasses, Part 1 article to MPMB's Character Record Sheet // Define the source SourceList["UA:SP1"] = { name : "Unearthed Arcana: Subclasses, Part 1", abbreviation : "UA:SP1", group : "Unearthed Arcana", url : "https://media.wizards.com/2020/dnd/downloads/UA2020-Subclasses01.pdf", date : "2020/01/14" }; // Add a subclasses for the Barbarian, Monk, Paladin, and Warlock AddSubClass("barbarian", "path of the beast-ua", { regExpSearch : /^(?=.*\bbeast\b)(?=.*(warrior|marauder|barbarian|viking|(norse|tribes?|clans?)(wo)?m(a|e)n)).*$/i, subname : "Path of the Beast", subnameShort: "Beast", source : [["UA:SP1", 1]], abilitySave : 3, features : { "subclassfeature3" : { name : "Form of the Beast", source : [["UA:SP1", 1]], minlevel : 3, description : desc([ "When I enter my rage, I can transform to gain a bite, tail, or claws attack for that rage", "The bite attack allows me to regain my Con mod in HP on a hit once on my turn", "The claws attack allows me to make one extra attack when I use it in my Attack action" ]), weaponOptions : [{ regExpSearch : /^(?=.*(bestial|beast))(?=.*bite).*$/i, name : "Bestial Bite", source : [["UA:SP1", 1]], ability : 1, type : "Natural", damage : [1, 8, "piercing"], range : "Melee", description : "Only in rage; On a hit once on my turn, regain Con mod in HP", abilitytodamage : true, bestialNaturalWeapon : true, selectNow : true }, { regExpSearch : /^(?=.*(bestial|beast))(?=.*claws?).*$/i, name : "Bestial Claws", source : [["UA:SP1", 1]], ability : 1, type : "Natural", damage : [1, 6, "slashing"], range : "Melee", description : "Only in rage; Extra attack if used as part of Attack action", abilitytodamage : true, bestialNaturalWeapon : true, selectNow : true }, { regExpSearch : /^(?=.*(bestial|beast))(?=.*tail).*$/i, name : "Bestial Tail", source : [["UA:SP1", 1]], ability : 1, type : "Natural", damage : [1, 12, "piercing"], range : "Melee", description : "Reach; Only in rage", abilitytodamage : true, bestialNaturalWeapon : true, selectNow : true }], additional : levels.map(function(n) { return n < 6 ? "" : "chosen weapon counts as magical"; }) }, "subclassfeature6" : { name : "Bestial Soul", source : [["UA:SP1", 1]], minlevel : 6, description : desc([ "When I finish a short rest, I can choose one of the following benefits until my next rest:", " \u2022 Swimming speed equal to my walking speed and I can breathe underwater", " \u2022 Climb speed (same as walking) and no check to climb difficult surfaces or upside down", " \u2022 Once per turn when I jump, I can extend it by the result of an Athletics check in feet" ]), calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.bestialNaturalWeapon && !v.thisWeapon[1] && !v.theWea.isMagicWeapon && !(/counts as( a)? magical/i).test(fields.Description)) { fields.Description += (fields.Description ? '; ' : '') + 'Counts as magical'; }; }, "The natural melee weapon that I gain from Form of the Beast count as magical for the purpose of overcoming resistance and immunity to nonmagical attacks and damage." ] } }, "subclassfeature10" : { name : "Infectious Fury", source : [["UA:SP1", 2]], minlevel : 10, description : desc([ "In rage, when I hit a creature with my natural weapon, I can have it make a Wis save", "If it fails (DC 8 + my Prof Bonus + my Con mod) it suffers one effect of my choice:", " \u2022 It uses its reaction to make a melee attack against one creature I can see of my choice", " \u2022 It takes 2d12 psychic damage" ]), usages : "Constitution modifier per ", usagescalc : "event.value = Math.max(1, What('Con Mod'));", recovery : "long rest" }, "subclassfeature14" : { name : "Call the Hunt", source : [["UA:SP1", 2]], minlevel : 14, description : desc([ "When I enter rage, I can choose my Con mod of willing creatures I can see within 30 ft", "The targets gain the Reckless Attack feature and I have adv. on saves vs. being frightened", "I also gain 5 temporary hit points per creature that accepts this benefit" ]), usages : "Constitution modifier per ", usagescalc : "event.value = Math.max(1, What('Con Mod'));", recovery : "long rest" } } }); AddSubClass("monk", "way of mercy-ua", { regExpSearch : /^(?=.*mercy)((?=.*(monk|monastic))|((?=.*martial)(?=.*(artist|arts)))|((?=.*spiritual)(?=.*warrior))).*$/i, subname : "Way of Mercy", subnameShort: "Mercy", source : [["UA:SP1", 2]], features : { "subclassfeature3" : { name : "Implements of Mercy", source : [["UA:SP1", 2]], minlevel : 3, description : desc([ "I gain proficiency with the herbalism and poisoner's kit, and either Insight or Medicine", 'Use the "Choose Feature" button above to select the skill proficiency, Insight or Medicine' ]), toolProfs : ["Herbalism kit", "Poisoner's kit"], choices : ["proficiency with Insight", "proficiency with Medicine"], "proficiency with insight" : { name : "Implements of Mercy - Insight", source : [["UA:SP1", 2]], description: desc("I gain proficiency in the Insight skill and with the herbalism kit and the poisoner's kit"), skills : ["Insight"] }, "proficiency with medicine" : { name : "Implements of Mercy - Medicine", source : [["UA:SP1", 2]], description: desc("I gain proficiency in the Medicine skill and with the herbalism kit and the poisoner's kit"), skills : ["Medicine"] }, "hands of healing" : { name : "Hands of Healing", extraname : "Way of Mercy 3", source : [["UA:SP1", 2]], description : levels.map(function (n) { var a = "As an action, I can spend 1 ki point to touch a creature and restore a number of its HP"; var b6 = "It also recovers from one disease or the blinded, deafened, paralyzed, or poisoned condition"; var c = "When I use Flurry of Blows, I can do this instead of one unarmed strike (no extra ki cost)"; return desc( n < 6 ? [a, c] : [a, b6, n < 11 ? c : c.replace("one", "each")] ); }), action : [["action", ""]], additional : levels.map(function (n) { return n < 3 ? "" : "1 ki point; heal 1d" + (n < 5 ? 4 : n < 11 ? 6 : n < 17 ? 8 : 10) + " + Wisdom modifier"; }) }, "hands of harm" : { name : "Hands of Harm", extraname : "Way of Mercy 3", source : [["UA:SP1", 3]], description : desc([ "When I hit a creature with an unarmed strike, I can spend 1 ki point to deal extra damage", "Only once per turn; If the target is incapacitated or poisoned, I roll the damage die 3 times" ]), additional : levels.map(function (n) { return n < 3 ? "" : "1 ki point; 1d" + (n < 5 ? 4 : n < 11 ? 6 : n < 17 ? 8 : 10) + " necrotic damage"; }) }, autoSelectExtrachoices : [{ extrachoice : "hands of healing" }, { extrachoice : "hands of harm" }] }, "subclassfeature6" : { name : "Noxious Aura", source : [["UA:SP1", 3]], minlevel : 6, additional: "1 ki point", description : desc([ "As a bonus action, I can spend 1 ki point to gain a 5-ft radius toxic aura for 1 minute", "While active, ranged attacks have disadv. vs. me; It ends if I'm incapacitated or dismiss it", "Others who start their turn in it must make a Con save or be poisoned and take damage", "They take my Wis mod in poison damage (min 0); Poisoned lasts until my next turn ends" ]), action : [["bonus action", ""]] }, "subclassfeature11" : { name : "Healing Technique", source : [["UA:SP1", 3]], minlevel : 11, description: desc("With hands of healing I can also end: 1 disease, blinded, deafened, paralyzed, or poisoned"), "hand of mercy" : { name : "Hand of Mercy", extraname : "Way of Mercy 17", source : [["UA:SP1", 3]], description : desc([ "As an action, I can use 4 ki to have a touched creature make a Con save (can fail willingly)", "If failed, it becomes paralyzed in a state of suspended animation for my monk level in days", "It also has immunity to all damage, and curses, diseases, poisons affecting it are suspended", "The creature appears dead to all inspection and to spells used to determine its status", "I can end the effect at will (no action required); I can have only one affected at a time" ]), action : [["action", ""]], additional : levels.map(function (n) { return n < 17 ? "" : "4 ki points; " + n + " days"; }) }, autoSelectExtrachoices : [{ extrachoice : "hand of mercy", minlevel : 17 }] } } }); AddSubClass("paladin", "oath of the watchers-ua", { regExpSearch : /^(?=.*watchers)((?=.*paladin)|((?=.*(exalted|sacred|holy|divine))(?=.*(knight|fighter|warrior|warlord|trooper)))).*$/i, subname : "Oath of the Watchers", subnameShort: "Watchers", source : [["UA:SP1", 3]], features : { "subclassfeature3" : { name : "Channel Divinity: Watcher's Will", source : [["UA:SP1", 4]], minlevel : 3, description: desc("As an action, Cha mod of creatures I see in 30 ft adv. on Int/Wis/Cha saves for 1 min"), action : [["action", ""]], spellcastingExtra : ["alarm", "chromatic orb", "augury", "moonbeam", "counterspell", "nondetection", "aura of purity", "banishment", "hold monster", "hallow"] }, "subclassfeature3.1" : { name : "Channel Divinity: Abjure the Extraplanar", source : [["UA:SP1", 4]], minlevel : 3, description : desc([ "As an action, elementals, fey, fiends, and aberrations within 30 ft must make a Wis save", "Succeeds if it can't hear me; On fail, turned for 1 minute or until it takes any damage", "Turned: move away, never within 30 ft of me, no reactions or actions other than Dash", "Turned: may Dodge instead of Dash when nowhere to move and unable to escape bonds" ]), action : [["action", ""]] }, "subclassfeature7" : { name : "Aura of the Sentinel", source : [["UA:SP1", 4]], minlevel : 7, description: desc("If I'm not incapacitated, chosen creatures in range and I add my Cha mod to Initiative"), additional : levels.map(function (n) { return n < 7 ? "" : (n < 18 ? 10 : 30) + "-foot aura"; }), addMod : [{ type : "skill", field : "Init", mod : "max(Cha|1)", text : "I can add my Charisma modifier (min +1) to initiative rolls." }] }, "subclassfeature15" : { name : "Vigilant Rebuke", source : [["UA:SP1", 4]], minlevel : 15, description : desc([ "As a reaction when I or another I can see saves against a spell, I can damage the caster", "Has to succeed save within 30 ft of me vs. unwanted spell; 2d8 + Cha mod force damage" ]), action : [["reaction", ""]] }, "subclassfeature20" : { name : "Mortal Bulwark", source : [["UA:SP1", 4]], minlevel : 20, description : desc([ "As a bonus action, I can gain the following benefits for 1 minute:", " \u2022 Truesight out to 120 ft and adv. on attacks vs. elementals, fey, fiends, and aberrations", " \u2022 I can force creatures I hit and damage with an attack to make a Charisma save", " If failed, the target is banished to its native plane of existence if it's not currently there", " If successful, the creature can't be banished by this feature for 24 hours" ]), recovery : "long rest", usages : 1, action : [["bonus action", ""]] } } }); AddSubClass("warlock", "the noble genie-ua", { regExpSearch : /^(?=.*warlock)(?=.*noble)(?=.*\b(genie|djinni|dao|efreeti)\b).*$/i, subname : "the Noble Genie", source : [["UA:SP1", 4]], spellcastingExtra : ["fog cloud", "sleep", "enlarge/reduce", "phantasmal force", "create food and water", "protection from energy", "polymorph", "phantasmal killer", "bigby's hand", "creation"], features : { "subclassfeature1" : { name : "Collector's Vessel", source : [["UA:SP1", 5]], minlevel : 1, description : desc([ "My patron gives me a magical vessel, a Tiny object which I can use as a spellcasting focus", "If I lose it, I can perform a 1-hour ceremony during a rest to receive a replacement", "As an action while holding it, I can create a tether to a willing target I can see in 100 ft", "This lasts for 1 hour, until I do this again, or the tethered target is reduced to 0 HP", "It also ends when the tethered target ends its turn further than 100 ft from me", "While the tether lasts, I add my Cha mod (min +1) to my Wis (Perception) checks", "Also, I can have spells I cast originate from the tethered creature's space" ]), action : [["action", ""]], usages : "Charisma modifier per ", usagescalc : "event.value = Math.max(1, What('Cha Mod'));", recovery : "long rest" }, "subclassfeature6" : { name : "Elemental Resistance", source : [["UA:SP1", 5]], minlevel : 6, description : desc([ "When I finish a long rest, I can gain acid, cold, fire, or lightning resistance (my choice)", "This lasts until I finish my next long rest; A creature tethered to my vessel also gains this" ]) }, "subclassfeature10" : { name : "Protective Wish", source : [["UA:SP1", 5]], minlevel : 10, description : desc([ "As a reaction when I or my tethered creature is hit by an attack, we can swap places", "As we both teleport to each others location, the one hit by the attack switches as well" ]), action : [["reaction", ""]] }, "subclassfeature10.1" : { name : "Genie's Entertainment", source : [["UA:SP1", 6]], minlevel : 10, description : desc([ "As an action, I can have a creature I can see within 90 ft make a Charisma save", "If failed, it is drawn into my vessel and teleported to my patron's court for 1 minute", "In there it is stunned but unharmed; At the end of each of its turns it can save to return" ]), recovery : "long rest", usages : 1 }, "subclassfeature14" : { name : "Collector's Call", source : [["UA:SP1", 6]], minlevel : 14, description : desc([ "As an action, I can implore my patron if I make a Persuasion check vs. my spell save DC", "If I fail, the use is wasted; If I succeed, I can choose one of the following effects:", " \u2022 A creature I can see in 60 ft heals 8d6 HP and 1 disease or condition affecting it ends", " This condition can be blinded, charmed, deafened, frightened, paralyzed, or poisoned", " \u2022 A creature I can see in 60 ft has disadv. on attacks \u0026 saves until my next turn starts", " \u2022 I can cast Legend Lore without using material components", "I can regain a use of this by sacrificing 500 gp of nonmagical treasure to my patron" ]), action : [["action", ""]], recovery : "long rest", usages : 1, spellcastingBonus : [{ name : "Collector's Call", spells : ["legend lore"], selection : ["legend lore"], firstCol : 'Sp' }], spellChanges : { "legend lore" : { components : "V,S", compMaterial : "", description : "Learn summary of lore of named or described person, place, or object", changes : "When I use my Collector's Call feature to cast Legend Lore, it doesn't require any material components." } } } } }); // ua_20200206_Subclasses-Part-2.js // This file adds the content from the Unearthed Arcana 2020: Subclasses, Part 2 article to MPMB's Character Record Sheet // Define the source SourceList["UA:SP2"] = { name : "Unearthed Arcana: Subclasses, Part 2", abbreviation : "UA:SP2", group : "Unearthed Arcana", url : "https://media.wizards.com/2020/dnd/downloads/UA2020_02_06_Subclasses2.pdf", date : "2020/02/06" }; // Add a subclass for the Bard and the functionality for its Dancing Item AddSubClass("bard", "college of creation-ua", { regExpSearch : /^(?=.*(college|bard|minstrel|troubadour|jongleur))(?=.*creation).*$/i, subname : "College of Creation", subnameShort: "Creation", source : [["UA:SP2", 1]], features : { "subclassfeature3" : { name : "Note of Potential", source : [["UA:SP2", 1]], minlevel : 3, description : desc([ "I can also grant a note of potential to whomever I give a bardic inspiration die", "This tiny, invulnerable object orbits in 5 ft; It enhances the use of the inspiration die:", "\u2022 Note of Destruction (used for attack roll): others within 5 ft must make a Con save", " If failed, they take the die roll in thunder damage; This uses my spell save DC", "\u2022 Note of Protection (used for save): Grants temp HP equal to the roll + my Cha mod", "\u2022 Note of Ingenuity (used for check): Roll the die twice and choose which result to use" ]) }, "subclassfeature6" : { name : "Animating Performance", source : [["UA:SP2", 1]], minlevel : 6, description : desc([ "As an action, I can animate a Large or smaller nonmagical item I can see within 30 ft", "It lasts for 1 hour or until it has 0 HP; I control it and it acts on my initiative, after me", "Unless I use a bonus action to command it, it only takes the Dodge action on its turn", "When I use bardic inspiration, I can command the item as part of the same bonus action", "I can't have multiple at once; Select \"Dancing Item\" on a companion page for its stats", "I can do this once per long rest, or by expending a 3rd-level or higher spell slot (SS 3+)" ]), action : [["action", ""], ["bonus action", "Command Dancing Item"]], usages : 1, recovery : "long rest", altResource : "SS 3+", creaturesAdd : [["Dancing Item"]], creatureOptions : [{ name : "Dancing Item", source : [["UA:SP2", 2]], size : 4, type : "Construct", alignment : "Neutral", ac : 16, hp : 33, hd : [], speed : "40 ft", scores : [18, 12, 16, 4, 10, 6], damage_immunities : "poison", condition_immunities : "charmed, exhaustion, poisoned, frightened", passivePerception : 10, senses : "Darkvision 60 ft", languages : "understands the languages of its creator but can't speak", challengeRating : "1", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Force-Empowered Slam", ability : 6, damage : [1, 10, "force"], range : "Melee (5 ft)", modifiers : ["", "oCha"], abilitytodamage : false, useSpellMod : "bard" }], features : [{ name : "Creator", description : "The item obeys the commands of its creator and uses its creator's spell attack modifier for its attack rolls. It takes its turn immediately after its creator, on the same initiative count. It can move and take reactions on its own, but only takes the Dodge action on its turn unless its creator takes a bonus action to command to do otherwise, in which case it can only take the Dash, Force-Empowered Slam (and possibly Endless Waltz), Disengage, Help, Hide, or Search action." }], actions : [{ name : "Immutable Form", description : "The item is immune to any spell or effect that would alter its form." }, { name : "Endless Waltz", description : "Immediately after the item makes a slam attack, it can take the Dodge action as a bonus action." }], header : 'Animated', calcChanges : { hp : function (totalHD, HDobj, prefix) { if (!classes.known.bard) return; var chaMod = Number(What('Cha Mod')); var brdLvl = classes.known.bard.level; var brdLvl5 = 5 * brdLvl; HDobj.alt.push(HDobj.conMod + chaMod + brdLvl5); HDobj.altStr.push(" = " + HDobj.conMod + " from its Constitution modifier\n + " + chaMod + " from its creator's Charisma modifier\n + 5 \xD7 " + brdLvl + " from five times its creator's bard level (" + brdLvl5 + ")"); }, setAltHp : true, hpForceRecalc : true } }] }, "subclassfeature14" : { name : "Performance of Creation", source : [["UA:SP2", 2]], minlevel : 14, description : levels.map(function (n) { return desc([ "As an action, I create a Large or smaller nonmagical item in an empty space in 10 ft", "Max " + (20 * n) + " gp value; I can't have multiple, creating more makes the first one vanish", "It vanishes when my next turn ends, unless I use my action to extend its life 1 extra turn", "If I sustain it for 1 minute this way, it continues to exists for my bard level in hours", "I can do this once per long rest, or by expending a 5th-level or higher spell slot (SS 5+)" ]); }), action : [["action", ""]], usages : 1, recovery : "long rest", altResource : "SS 5+" } } }); // Add a subclass for the Cleric AddSubClass("cleric", "unity domain-ua", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*unity).*$/i, subname : "Unity Domain", source : [["UA:SP2", 2]], spellcastingExtra : ["heroism", "shield of faith", "aid", "warding bond", "beacon of hope", "sending", "aura of purity", "guardian of faith", "greater restoration", "rary's telepathic bond"], features : { "subclassfeature1" : { name : "Emboldening Bond", source : [["UA:SP2", 3]], minlevel : 1, description : function () { var descr = desc([ "As an action, I can magically bond two willing targets I can see in 30 ft (can be me)", "While within 30 ft of the other, a bonded target can add +d4 to a save, attack, or check", "This can only be added once per turn; The bond lasts for 1 hour or until I use this again", "I can do this once per long rest, after which I can do so by expending a spell slot (SS 1+)" ]); var descr17 = descr.replace('While within 30 ft of the other', 'While on the same plane'); return levels.map(function (n) { return n < 17 ? descr : descr17; }); }(), action : [["action", ""]], usages : 1, recovery : "long rest", altResource : "SS 1+" }, "subclassfeature2" : { name : "Channel Divinity: Shared Burden", source : [["UA:SP2", 3]], minlevel : 2, description : desc([ "As a reaction when a creature I can see in 30 ft takes damage, I can divide that damage", "I then choose a number of willing creatures that I can see equal to my Wis mod (min 1)", "I distribute the damage over these and the original target, each taking at least 1 damage", "Damage resistances and vulnerabilities are only applied after the damage is distributed" ]), action : [["reaction", ""]] }, "subclassfeature6" : { name : "Protective Bond", source : [["UA:SP2", 3]], minlevel : 6, description : desc([ "My emboldening bond now also allows the two bonded to shield each other of damage", "When the other takes damage, one can use its reaction to give it resistance to all damage", "This resistance lasts until the end of the current turn" ]), additional : levels.map(function (n) { return n < 6 ? "" : n < 17 ? "the bonded must be within 30 ft" : "the bonded must be on the same plane"; }) }, "subclassfeature8" : { name : "Potent Spellcasting", source : [["UA:SP2", 3]], minlevel : 8, description : desc("I add my Wisdom modifier to the damage I deal with my cleric cantrips"), calcChanges : GenericClassFeatures["potent spellcasting"].calcChanges }, "subclassfeature17" : { name : "Enduring Unity", source : [["UA:SP2", 3]], minlevel : 17, description : desc([ "The 30 ft restriction no longer applies to my emboldening and protective bond features", "My emboldening bond now also empowers a bonded if the other is reduced to 0 HP", "If that happens, the bonded creature above 0 HP gains the following benefits:", " \u2022 Advantage on attack rolls, ability checks, and saving throws; Resistance to all damage", " \u2022 As an action, it can touch its bonded partner to expend and roll HD to heal", "These benefits lasts for 1 minute or until the downed creature regains at least 1 HP" ]) } } }); // Add a subclass for the Sorcerer AddSubClass("sorcerer", "clockwork soul-ua", { regExpSearch : /^((?=.*(sorcerer|witch))(?=.*mechanus)|(?=.*clockwork)(?=.*soul)).*$/i, subname : "Clockwork Soul", source : [["UA:SP2", 4]], fullname : "Clockwork Soul", spellcastingExtra : ["alarm", "protection from evil and good", "find traps", "heat metal", "counterspell", "glyph of warding", "arcane eye", "otiluke's resilient sphere", "animate objects", "wall of force"], spellcastingExtraApplyNonconform : true, features : { "subclassfeature1" : { name : "Clockwork Magic", source : [["UA:SP2", 4]], minlevel : 1, description: desc("I learn additional spells, which do not count towards the number of spell I can know") }, "subclassfeature1.1" : { name : "Restore Balance", source : [["UA:SP2", 4]], minlevel : 1, description : desc([ "As a reaction when a creature I can see in 60 ft is about to roll a d20 with adv./disadv.,", "I can prevent that roll from being affected by advantage and disadvantage." ]), usages : "Charisma modifier per ", usagescalc : "event.value = Math.max(1, What('Cha Mod'));", recovery : "long rest", action : [["reaction", ""]] }, "subclassfeature6" : { name : "Bulwark of Law", source : [["UA:SP2", 4]], minlevel : 6, description : desc([ "As an action, I can imbue a creature I can see within 30 ft with a magical ward", "I grant it a number of d8s equal to the number of sorcery points I expend when I do this", "When it takes damage, it can use its reaction to spend and roll any number of those dice", "The dice roll reduces the damage; The ward lasts until I finish a long rest or do this again" ]), additional : "1-5 sorcery points; 1d8 per point", action : [["action", ""]] }, "subclassfeature14" : { name : "Trance of Order", source : [["UA:SP2", 4]], minlevel : 14, description : desc([ "As a bonus action, I can enter a state of clockwork consciousness for 1 minute", "While in this state, attack rolls against me can't benefit from advantage", "Also, I can then treat a d20 roll below 9 as a 10 for my attack rolls, checks, and saves", "I can do this once per long rest, or by expending a 5 sorcery points (5 SP)" ]), action : [["bonus action", ""]], usages : 1, recovery : "long rest", altResource : "5 SP" }, "subclassfeature18" : { name : "Clockwork Cavalcade", source : [["UA:SP2", 5]], minlevel : 18, description : desc([ "As an action, I can call spirits to bring balance in a 30-ft cube originating from me", "Inside the cube, the intangible spirits do all the following before vanishing:", " \u2022 Restore up to 100 HP, divided among the creatures in the cube as I see fit", " \u2022 Repair all damaged objects in the cube", " \u2022 End spells of my choice of 6th-level or lower on objects or creatures in the cube", "I can do this once per long rest, or by expending a 7 sorcery points (7 SP)" ]), action : [["action", ""]], usages : 1, recovery : "long rest", altResource : "7 SP" } } }); // ua_20200206_Subclasses-Part-3.js // This file adds the content from the Unearthed Arcana 2020: Subclasses, Part 3 article to MPMB's Character Record Sheet // Define the source SourceList["UA:SP3"] = { name : "Unearthed Arcana: Subclasses, Part 3", abbreviation : "UA:SP3", group : "Unearthed Arcana", url : "https://media.wizards.com/2020/dnd/downloads/UA2020-Subclasses03_0224.pdf", date : "2020/02/24" }; // Add a subclass for the Artificer (but after all other scripts, so that all armour options are present) RunFunctionAtEnd(function () { if (!ClassList.artificer) { return; }; var UASP3_artificerSubclassArmorerUA = AddSubClass("artificer", "armorer-ua", { regExpSearch : /^(?=.*armou?rer)(?!.*wizard).*$/i, subname : "Armorer", fullname : "Armorer", source : [["UA:SP3", 1]], attacks : [1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], features : { "subclassfeature3" : { name : "Tools of the Trade", source : [["UA:SP3", 1]], minlevel : 3, description : " [proficient with heavy armor \u0026 smith's tools]", toolProfs : ["Smith's tools"], armorProfs : [false, false, true, false], spellcastingExtra : ["magic missile", "shield", "mirror image", "shatter", "hypnotic pattern", "lightning bolt", "fire shield", "greater invisibility", "passwall", "wall of force"] }, "subclassfeature3.1" : { name : "Power Armor", source : [["UA:SP3", 1]], minlevel : 3, description : desc([ "As an action, I can use smith's tool to turn a suit of heavy armor into power armor", "It continues to be power armor until I doff it, don another armor, or I die", "It can't be removed against my will, covers all my limbs, and even replaces missing limbs", "I ignore the Strength requirement of power armor and can use it as a spellcasting focus" ]), action : [["action", ""]] }, "subclassfeature3.2" : { name : "Armor Model", source : [["UA:SP3", 2]], minlevel : 3, description : desc([ "When I finish a rest, I can use smith's tools to change the model of my arcane armor", 'Select a model using the "Choose Feature" button; See "Notes" page for features of each' ]), additional : "also see notes page", toNotesPage : [{ name : "Power Armor Model Features", note : desc([ "I can customize my power armor to the guardian or infiltrator model whenever I finish a short or long rest, provided I have smith's tools in hand.", "Each model includes a special weapon. When I attack with that weapon, I can use my Intelligence modifier, instead of Strength or Dexterity, for the attack and damage rolls." ]) + "\n\n\u25C6 Guardian Power Armor (Armorer 3, UA:SP3 2)" + desc([ "\u2022 Thunder Gauntlets: The armored fists of the guardian power armor each count as a simple melee weapon, and each deals 1d8 thunder damage on a hit. A creature hit by the gauntlet has disadvantage on attack rolls against targets other than me until the start of me next turn, as the armor magically emits a distracting pulse when the creature attacks someone else.", "\u2022 Defensive Field: As a bonus action, I can gain temporary hit points equal to my artificer level, replacing any temporary hit points I already have. I lose these temporary hit points if I doff the armor." ]) + "\n\n\u25C6 Infiltrator Power Armor (Armorer 3, UA:SP3 2)" + desc([ "\u2022 Lightning Launcher: A gemlike node on one of the armored fists or on the chest (my choice) counts as a simple ranged weapon, with a normal range of 90 ft and a long range of 300 ft. It deals 1d6 lightning damage on a hit. Once on each of my turns when I hit a creature with it, I can deal an extra 1d6 lightning damage to that target.", "\u2022 Powered Steps: My walking speed increases by 5 feet.", "\u2022 Second Skin: The armor's weight is negligible, and it becomes formfitting and wearable under clothing. If the armor normally imposes disadvantage on Dexterity (Stealth) checks, the power armor doesn't." ]) }], choices : [], choiceDependencies : [{ feature : "subclassfeature15", choiceAttribute : true }], weaponOptions : [{ regExpSearch : /^(?=.*thunder)(?=.*gauntlet).*$/i, name : "Thunder Gauntlets", source : [["UA:SP3", 2]], ability : 4, type : "Simple", damage : [1, 8, "thunder"], range : "Melee", description : "Target hit disadv. on attacks vs. others than me until my next turn starts", abilitytodamage : true, monkweapon : true }, { regExpSearch : /^(?=.*lightning)(?=.*launcher).*$/i, name : "Lightning Launcher", source : [["UA:SP3", 2]], ability : 4, type : "Simple", damage : [1, 6, "lightning"], range : "90/300 ft", description : "Once per turn on hit, +1d6 lightning damage", abilitytodamage : true }], // Do this in the parent object, so that it is always visible and people printing the sheet can more easily switch between the two models action : [["bonus action", "Defensive Field (Guardian Model)"]] }, "subclassfeature9" : { name : "Armor Modifications", source : [["UA:SP3", 2]], minlevel : 9, description : desc([ "Power armor now counts as armor, boots, bracers, and a weapon for holding infusions", "I can infuse two of those after a rest without counting towards the number of items" ]), additional : "+2 infused items, if used on power armor" }, "subclassfeature15" : { name : "Perfected Armor", source : [["UA:SP3", 2]], minlevel : 15, description : desc([ 'My armor gets additional features, based on the model; Use "Choose Feature" to select it', "The guardian gets the ability to pull a creature closer as a reaction and make an attack", "The infiltrator gets an upgrade to its lightning launcher weapon attack" ]), toNotesPage : [{ name : "Guardian Perfected Armor Features", popupName : "Perfected Armor: Model Features", note : desc([ "Tinkering with my armor's energy system leads me to discover a powerful pulling force.", "As a reaction when a creature I can see ends its turn within 30 ft of me, I can force the creature to succeed on a Strength saving throw against my spell save DC or be pulled up to 30 ft toward me to an unoccupied space. If I pull the target to space within 5 ft of me, I can make a melee weapon attack against it as part of this reaction.", "I can use this reaction a number of times equal to my Intelligence modifier (min 1). I regain all expended uses of it when I finish a long rest." ]) + "\n\n\u25C6 Infiltrator Perfected Armor Features (Armorer 15, UA:SP3 2)" + desc([ "Any creature that takes lightning damage from my Lightning Launcher glimmers with light until the start of my next turn.", "The glimmering creature sheds dim light in a 5-ft radius, and the next attack roll against it by a creature other than me has advantage. If that attack hits, it deals an extra 1d6 lightning damage." ]), amendTo : "Power Armor Model Features" }], choices : ["guardian", "infiltrator"], choicesNotInMenu : true, "guardian" : { name : "Perfected Armor: Guardian", additional: "Intelligence modifier per long rest", description : desc([ "As a reaction when a creature I can see ends its turn in 30 ft, I have it make a Str save", "If it fails, I pull it up to 30 ft towards me to an empty space", "If I pull it within 5 ft, I can make a melee weapon attack vs. it as part of this reaction" ]) }, "infiltrator" : { name : "Perfected Armor: Infiltrator", description : desc([ "Those hit by my lightning launcher shed 5-ft radius dim light until my next turn starts", "Also, the next attack roll made by another than me vs. the target has advantage", "If that attack hits, it deals an extra 1d6 lightning damage" ]) }, // Do these in the parent object, so that they are always visible and people printing the sheet can more easily switch between the two models // Also, the armor model can be changed on a short rest, but the limited feature only resets on a long rest, so shouldn't be removed action : [["reaction", "Perfected Armor: Guardian"]], extraLimitedFeatures : [{ name : "Perfected Armor: Guardian", usages : "Intelligence modifier per ", recovery : "long rest", usagescalc : "event.value = Math.max(1, What('Int Mod'));" }] } } }); if (!UASP3_artificerSubclassArmorerUA || !ClassSubList[UASP3_artificerSubclassArmorerUA]) return; var itsFea = ClassSubList[UASP3_artificerSubclassArmorerUA].features["subclassfeature3.2"]; var guardianTxt = desc([ "Both fists are Thunder Gauntlets, simple melee weapons that distract those hit by it", "As a bonus action, I can activate a defensive shield to gain my artificer level in temp HP" ]) var guardianAdditional = levels.map(function (n) { return n + " temp HP; see notes page"; }) var infiltratorTxt = desc([ "+5 ft walking speed; Gemlike node in fist/chest is a ranged weapon, Lightning Launcher", "The power armor is formfitting, has negligible weight, and doesn't give disadv. on Stealth" ]) var prereqFunc = function(v) { var sParsed = ParseArmor(v.choice.replace(/(Guardian|Infiltrator) arcane /i, '')); return sParsed && testSource(sParsed, ArmourList[sParsed], "armorExcl") ? "skip" : true; }; for (var armor in ArmourList) { var anArm = ArmourList[armor]; if (anArm.type != "heavy" || anArm.isMagicArmor || !anArm.weight || (CurrentVars.extraArmour && CurrentVars.extraArmour[armor])) continue; // Add the Guardian variant of the armor var gArmName = "Guardian Power " + anArm.name; itsFea[gArmName.toLowerCase()] = { name : (typePF || anArm.name.length < 16 ? "Armor " : "") + "Model: Guardian " + anArm.name, submenu : "Guardian Power Armor", description : guardianTxt, additional : guardianAdditional, armorAdd : { select : gArmName, options : [gArmName] }, weaponsAdd : { select : ["Thunder Gauntlets"] }, prereqeval : prereqFunc, dependentChoices : "guardian" } // And now add the Infiltrator variant of the armor var iArm = newObj(anArm); iArm.name = "Infiltrator Power " + anArm.name; iArm.weight = 0; iArm.stealthdis = false; iArm.strReq = 0; iArm.selectNow = true; if (iArm.regExpSearch.indexOf(".*$/") == -1) { iArm.regExpSearch = iArm.regExpSearch.replace(/^/, "infiltrator.*"); } else { iArm.regExpSearch = iArm.regExpSearch.replace(/\.\*\$$/, "(?=.infiltrator).*$"); }; itsFea[iArm.name.toLowerCase()] = { name : "Armor Model: Infiltrator " + anArm.name, submenu : "Infiltrator Power Armor", description : infiltratorTxt, speed : { walk : {spd : "+5", enc : "+5" } }, weaponsAdd : { select : ["Lightning Launcher"] }, prereqeval : prereqFunc, armorOptions : [iArm], dependentChoices : "infiltrator" } // Lastly push both choices to the array itsFea.choices.push(gArmName, iArm.name); } }); // Add the new Artificer infusions if (ClassList.artificer && ClassList.artificer.features["infuse item"]) { AddFeatureChoice(ClassList.artificer.features["infuse item"], true, "Armor of Magical Strength (ua) (prereq: level 10 artificer)", { name : "Armor of Magical Strength", source : [["UA:SP3", 3]], description : desc([ "The wearer of the armor can use its Int mod instead of its Str mod for Str checks/saves", "The armor has 4 charges, regaining 1d4 expended charges daily at dawn", "As a reaction when being knocked prone, the wearer can use 1 charge to not be prone" ]), additional : "suit of armor; requires attunement", prereqeval : function(v) { return classes.known.artificer.level >= 10; }, magicitemsAdd : ["Armor of Magical Strength (UA)"] }); MagicItemsList["armor of magical strength-ua"] = { name : "Armor of Magical Strength (UA)", nameTest : "of Magical Strength (UA)", source : [["UA:SP3", 3]], type : "armor (light, medium, or heavy)", description : "This armor has 4 charges and regains 1d4 charges daily at dawn. As a reaction when I would be knocked prone, I can expend 1 charge to not be knocked prone. It allows me to use my Intelligence modifier instead of my Strength modifier when making Strength checks or Strength saves.", descriptionFull : "While wearing this armor, a creature can use its Intelligence modifier in place of its Strength modifier when making Strength checks and Strength saving throws.\n The armor has 4 charges. As a reaction when it would be knocked prone, the wearer can expend 1 charge to not be knocked prone. The armor regains 1d4 expended charges daily at dawn.", attunement : true, action : [["reaction", ""]], chooseGear : { type : "armor", prefixOrSuffix : "prefix" }, usages : 4, recovery : "dawn", additional : "regains 1d4", addMod : [{ type : "save", field : "Str", mod : "max(Int-Str|0)", text : "While attuned to the Armor of Magical Strength (UA), I can use my Intelligence modifier instead of my Strength modifier for Strength saving throws." }, { type : "skill", field : "Athletics", mod : "max(Int-Str|0)", text : "While attuned to the Armor of Magical Strength (UA), I can use my Intelligence modifier instead of my Strength modifier for Strength checks." }] }; AddFeatureChoice(ClassList.artificer.features["infuse item"], true, "Armor of Tools", { name : "Armor of Tools", source : [["UA:SP3", 3]], description : desc([ "The armor can have a set of artisan's or thieves' tools integrated into it as an action", "The tools remain integrated for 8 hours, or until removed as an action", "The wearer can add its Intelligence modifier to checks made with the integrated tools" ]), additional : "suit of armor", magicitemsAdd : ["Armor of Tools"] }); MagicItemsList["armor of tools-ua"] = { name : "Armor of Tools", source : [["UA:SP3", 3]], type : "armor (light, medium, or heavy)", description : "As an action, I can integrate a set of artisan's or thieves' tools into this magic studded leather armor, which can hold only one set at a time. The tools remain integrated for 8 hours or until I remove them as an action. I can add my Intelligence modifier as a bonus to any ability checks I make with the integrated tools.", descriptionFull : "As an action, a creature wearing this infused armor can integrate into it artisan's tools or thieves' tools. The tools remain integrated in the armor for 8 hours or until the wearer removes the tools as an action. The armor can have only one tool integrated at a time.\n The wearer can add its Intelligence modifier to any ability checks it makes with the integrated tool. The wearer must have a hand free to use the tool.", action : [["action", ""]] }; AddFeatureChoice(ClassList.artificer.features["infuse item"], true, "Mind Sharpener (ua)", { name : "Mind Sharpener", source : [["UA:SP3", 3]], description: desc("The wearer can use its reaction to ignore a failed Con save to maintain concentration"), additional : "suit of armor or robes", magicitemsAdd : ["Mind Sharpener (UA)"] }); MagicItemsList["mind sharpener-ua"] = { name : "Mind Sharpener (UA)", source : [["UA:SP3", 3]], description : "This magic armor or robes can send a jolt to refocus my mind. Whenever I fail a Constitution saving throw to maintain concentration on a spell, I can use my reaction to succeed instead.", descriptionFull : "The infused item can send a jolt to the wearer to refocus their mind. While wearing this infused item, whenever the creature fails a Constitution saving throw to maintain concentration on a spell, it can use its reaction to succeed instead.", action : [["reaction", ""]], choices : ["Mind Sharpener Armor", "Mind Sharpener Robes"], "mind sharpener armor" : { name : "Mind\u200A Sharpener (UA)", type : "armor (light, medium, or heavy)", description : "This magic armor can send a jolt to refocus my mind. Whenever I fail a Constitution saving throw to maintain concentration on a spell, I can use my reaction to succeed instead.", chooseGear : { type : "armor", prefixOrSuffix : "brackets", itemName1stPage : ["suffix", "Mind Sharpener"], descriptionChange : ["prefix", "armor"] } }, "mind sharpener robes" : { name : "Mind Sharpener (UA) (Robes)", type : "wondrous item", description : "These magic robes can send a jolt to refocus my mind. Whenever I fail a Constitution saving throw to maintain concentration on a spell, I can use my reaction to succeed instead." } }; AddFeatureChoice(ClassList.artificer.features["infuse item"], true, "Spell-Refueling Ring (ua) (prereq: level 6 artificer)", { name : "Spell-Refueling Ring", source : [["UA:SP3", 3]], description : desc([ "As an action once per dawn, the wearer of this ring can recover one expended spell slot", "The maximum level of the spell slot is equal to the number of magic items it is attuned to" ]), additional : "ring; requires attunement", prereqeval : function(v) { return classes.known.artificer.level >= 6; }, magicitemsAdd : ["Spell-Refueling Ring (UA)"] }); MagicItemsList["spell-refueling ring-ua"] = { name : "Spell-Refueling Ring (UA)", source : [["UA:SP3", 3]], type : "ring", description : "As an action, I can activate this magic ring to recover one expended spell slot. The maximum level of the recovered slot is equal to the number of magic items I am attuned to when I activate this ring. Once used, the ring can't be used again until the next dawn.", descriptionFull : "While wearing this ring, the creature can recover one expended spell slot as an action. The maximum level of the recovered slot is equal to the number of magic items the wearer is currently attuned to. Once used, the ring can't be used again until the next dawn.", attunement : true, action : [["action", ""]], usages : 1, recovery : "dawn" }; } AddSubClass("druid", "circle of the stars-ua", { regExpSearch : /^(?=.*(druid|shaman))(?=.*circle)(?=.*stars).*$/i, subname : "Circle of the Stars", subnameShort: "Stars", source : [["UA:SP3", 3]], features : { "subclassfeature2" : { name : "Star Map", source : [["UA:SP3", 3]], minlevel : 2, description : desc([ "I've created a star map, a Tiny object which I can use as my spellcasting focus", "If I lose it, I can perform a 1-hour ceremony during a rest to create a replacement", "I can use it to cast Augury or Guiding Bolt, even unprepared, without using a spell slot" ]), spellcastingBonus : [{ name : "Star Map", spells : ["guiding bolt", "augury"], selection : ["guiding bolt", "augury"], firstCol : "Sp", times : 2 }], usages : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest" }, "subclassfeature2.1" : { name : "Starry Form", source : [["UA:SP3", 3]], minlevel : 2, description : desc([ "As an action, I can expend a use of wild shape to take on a starry form for 10 minutes", "In that form I shed bright light in a 10-ft radius and dim light for an extra 10-ft radius", "When I do so, I choose one constellation below to grant me benefits in my starry form:", "\u2022 Chalice: When I use a spell slot to cast a healing spell, I also heal a creature in 30 ft", " This can be myself or the original target; I restore 1d8 + half my druid level in HP", "\u2022 Archer: As a bonus action, I can make a ranged spell attack to hurl a luminous arrow", " This has a range of 60 ft and deals radiant damage equal to 1d8 + my Wisdom mod", "\u2022 Dragon: I can treat a roll below 10 as a 10 for Int/Wis checks and concentration saves" ]), action : [["bonus action", " (Archer Constellation)"]], additional : levels.map(function (n) { return n < 2 ? "" : "Chalice: heals 1d8+" + Math.floor(n/2) + " HP"; }), weaponOptions : [{ regExpSearch : /^(?=.*luminous)(?=.*arrow).*$/i, name : "Luminous Arrow", source : [["UA:SP3", 3]], ability : 5, type : "Spell", damage : [1, 8, "radiant"], range : "60 ft", description : "Use as bonus action", abilitytodamage : true, selectNow : true }] }, "subclassfeature6" : { name : "Cosmic Omen", source : [["UA:SP3", 3]], minlevel : 6, description : desc([ "When I finish a long rest, I can roll a die to gain an omen based on the result (odd/even)", "As a reaction when a creature I can see in 30 ft makes an attack, check, or save, I can:", "\u2022 Weal (even): add 1d6 to the number rolled for the attack, check, or save", "\u2022 Woe (odd): subtract 1d6 from the number rolled for the attack, check, or save" ]), action : [["reaction", ""]], usages : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest" }, "subclassfeature10" : { name : "Full of Stars", source : [["UA:SP3", 3]], minlevel : 10, description: desc("While in my starry form, I have resistance to bludgeoning, piercing, and slashing damage"), dmgres : [ ["Bludgeoning", "Bludgeon. (in form)"], ["Piercing", "Piercing (in form)"], ["Slashing", "Slashing (in form)"] ], "star flare" : { name : "Star Flare", extraname : "Circle of the Stars 14", source : [["UA:SP3", 3]], description : desc([ "As an action, I conjure a 30-ft radius sphere of light on a point within 120 ft I can see", "I then teleport each willing creature in that sphere to an empty space within 30 ft of it", "Creatures left within the sphere must make a Con save or take 4d10 radiant damage", "Those that failed the save are also blinded until the end of my next turn", "I can do this once per long rest, or by expending a 5th-level or higher spell slot (SS 5+)" ]), action : [["action", ""]], usages : 1, recovery : "long rest", altResource : "SS 5+" }, autoSelectExtrachoices : [{ extrachoice : "star flare", minlevel : 14 }] } } }); var UASP3_rangerSubclassFeyWandererUA = AddSubClass("ranger", "fey wanderer-ua", { regExpSearch : /^(?=.*fey)(?=.*wanderer).*$/i, subname : "Fey Wanderer", source : [["UA:SP3", 5]], fullname : "Fey Wanderer", features : { "subclassfeature3" : { name : "Fey Wanderer Magic", source : [["UA:SP3", 5]], minlevel : 3, description: desc("I get bonus spells known, which do not count against the number of spells I can know"), spellcastingExtra : ["charm person", "misty step", "dispel magic", "banishment", "mislead"], spellcastingExtraApplyNonconform : true }, "subclassfeature3.1" : { name : "Cunning Will", source : [["UA:SP3", 5]], minlevel : 3, description: desc("Adv. on saves vs. charm/frightened; Proficiency in Deception, Performance, or Persuasion"), skillstxt : "Choose one from: Deception, Performance, or Persuasion", savetxt : { adv_vs : ["charmed", "frightened"] } }, "subclassfeature3.2" : { name : "Dreadful Strikes", source : [["UA:SP3", 5]], minlevel : 3, description : desc([ "As a bonus action, I can imbue the weapons I'm holding with magic until my turn ends", "They count as magical and deal +1d6 psychic damage, but only once to a single creature", "I can also do this as part of the same bonus action as making an off-hand attack" ]), action : [["bonus action", ""]] }, "subclassfeature7" : { name : "Blessings of the Courts", source : [["UA:SP3", 5]], minlevel : 7, description : desc([ "Once per turn when I hit a weapon attack, I can expend a spell slot for extra damage", "The target takes +3d6 psychic damage and must make a Wis save or be frightened of me", "This lasts until the end of my next turn; In addition, I add my Wis mod to Cha checks" ]), addMod : ["Deception", "Intimidation", "Performance", "Persuasion"].map(function(skill){return {type : "skill", field : skill, mod : "Wis", text : "I add my Wisdom modifier to my Charisma checks"};}) }, "subclassfeature11" : { name : "Beguiling Twist", source : [["UA:SP3", 6]], minlevel : 11, description : desc([ "As a reaction when a creature I can see in 120 ft succeeds a save vs. charmed/frightened", "I can have another I can see in 120 ft make a Wis save or suffer one effect of my choice:", " \u2022 For 1 min, it's frightened of me or charmed; It can save again at the end of its turns", " \u2022 It takes 3d10 psychic damage" ]), action : [["reaction", ""]], "misty presence" : { name : "Misty Presence", extraname : "Fey Wanderer 15", source : [["UA:SP3", 6]], description : desc([ "As a bonus action, I can have a creature I can see within 30 ft make a Wisdom save", "On a failed save, it cannot see or hear me for 24 hours or until I use this feature again", "The target can repeat its save if I hit it with an attack, force it to save, or deal it damage", "On a successful save, the creature is immune to my use of this feature for 7 days", "I can do this once per long rest, or by expending a 4th-level or higher spell slot (SS 4+)" ]), action : [["bonus action", ""]], usages : 1, recovery : "long rest", altResource : "SS 4+" }, autoSelectExtrachoices : [{ extrachoice : "misty presence", minlevel : 15 }] } } }); if (ClassList.rangerua) { ClassList.rangerua.subclasses[1].push(UASP3_rangerSubclassFeyWandererUA); }; // ua_20200512_Subclasses-Revisited.js // This file adds the content from the Unearthed Arcana: Fighter, Ranger, and Rogue article to MPMB's Character Record Sheet // This file contains contributions by Undrhil and Metacomet10 SourceList["UA:SR"] = { name : "Unearthed Arcana: Subclasses Revisited", abbreviation : "UA:SR", group : "Unearthed Arcana", url : "https://media.wizards.com/2020/dnd/downloads/UA2020_SubclassesRevisited_0512.pdf", date : "2020/05/12" }; AddSubClass("rogue", "phantom-ua", { regExpSearch : /^(?!.*(barbarian|bard|cleric|druid|fighter|monk|paladin|ranger|sorcerer|warlock|wizard))(?=.*phantom).*$/i, subname : "Phantom", source : [["UA:SR", 1]], fullname : "Phantom", features : { "subclassfeature3" : { name : "Whispers of the Dead", source : [["UA:SR", 1]], minlevel : 3, description : desc([ "Whenever I finish a short or long rest, I can gain one skill or tool proficiency of my choice", "This proficiency lasts until I use this feature again to gain a different proficiency" ]), skillstxt : "Choose one skill or tool; I can change the choice whenever I finish a short or long rest" }, "subclassfeature3.1" : { name : "Wails from the Grave", source : [["UA:SR", 1]], minlevel : 3, description : levels.map(function (n) { var a = [ "Directly after I deal sneak attack damage to a creature on my turn, I " + (n < 17 ? "can" : "also") + " harm another", n < 17 ? "I then deal half my sneak attack in psychic damage to a creature I can see within 30 ft" : "I deal half my sneak attack in psychic damage to both it and another I can see in 30 ft" ]; return desc(a); }), usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", additional : levels.map(function (n) { return Math.ceil(n / 4) + "d6"; }), }, "subclassfeature9" : { name : "Tokens of the Departed", source : [["UA:SR", 2]], minlevel : 9, description : " [max Proficiency Bonus of soul trinkets]" + desc([ "As a reaction when I see a creature within 30 ft die, I can create a Tiny soul trinket", "The token of its life essence appears in my free hand; The DM determines its appearance", "While a soul trinket is on my person, I have advantage on death and Constitution saves", "As an action, I can destroy one of my soul trinkets and ask its associated spirit a question", "Its spirit appears and answers concisely in a language it knew; Trinket can be anywhere" ]), action : [ ["reaction", "Create Soul Trinket"], ["action", "Destroy Soul Trinket"] ], extraLimitedFeatures : [{ name : "Soul Trinkets (max Prof Bonus)", usages : "", recovery : "Special" }], savetxt : { text : ["While soul trinket is on me, Adv. on Con and death saves"] } }, "subclassfeature13" : { name : "Ghost Walk", source : [["UA:SR", 2]], minlevel : 13, description : desc([ "As a bonus action, I can assume a spectral form with 10 ft flying speed and can hover", "Attacks vs. me have disadv.; I can move through creatures and objects as difficult terrain", "This lasts 10 min; I take 1d10 force damage if I end my turn inside a creature or object", "I can assume this form once per long rest, or by destroying one of my soul trinkets (ST)" ]), action : [["bonus action", " (start/end)"]], usages : 1, recovery : "long rest", altResource : "ST" }, "subclassfeature17" : { name : "Death Knoll", source : [["UA:SR", 2]], minlevel : 17, description : desc([ "Wails from the Grave now also deals damage to the target of the original sneak attack" ]) } } }); /* This UA version of Order of Scribes is not done yet AddSubClass("wizard","order of scribes-ua", { regExpSearch : /^(?=.*wizard)(?=.*order)(?=.*scribes?).*$|scrivener/i, subname : "Order of Scribes", source : [["UA:SR", 4]], features : { "subclassfeature2" : { name : "Wizardly Quill", source : [["UA:SR", 4]], minlevel : 2, description : desc([ "As a bonus action, I can magically create a Tiny quill with the following properties:", " \u2022 It doesn't require ink and produces ink in the color of my choice when writing with it", " \u2022 The gold and time required to transcribe spells into my spellbook with it are halved", " \u2022 As a bonus action, I can use it to erase a text written with it if within 5 ft of the text", "The quill disappear if I create another or if I die" ]), action : [["bonus action", " (create/erase)"]] }, "subclassfeature2.1" : { name : "Awakened Spellbook", source : [["UA:SR", 4]], minlevel : 2, description : desc ([ "My spellbook gains sentience and grants me the following benefits while I am holding it:", " \u2022 I can use the book as a spellcasting focus for my wizard spells", " \u2022 When I cast a wizard spell using a spell slot, I can temporarily replace its damage type", " The new damage type must appear in another spell in my awakened spellbook", " \u2022 Once per long rest, I can ritual cast a wizard spell without 10 min extra casting time", "I can replace it over a short rest, transferring its spells and sentience to a blank book" ]), additional : "fast ritual cast", usages : 1, recovery : "long rest" }, "subclassfeature6" : { name : "Master Scrivener", source : [["UA:SR", 4]], minlevel : 6, description : desc([ "When I finish a long rest, I can write a spell in my awakened spellbook on a blank paper", "It must be a level 1 or 2 spell with 1 action casting time; My spellbook must be in 5 ft", "As an action, I can use this scroll to cast the spell on it at one higher level than normal", "Only I can use the scroll; The scroll turns blank again when I use it or finish a long rest", "Also, using my Wizardly Quill, the gold and time I need to craft spell scrolls is halved" ]), action : [["action", " (cast scroll)"]], usages : 1, recovery : "long rest" }, // Finished until here "subclassfeature10" : { name : "Manifest Mind", source : [["UA:SR", 5]], minlevel : 10, description : desc('As a bonus action, I can cause my Awakened Spellbook to manifest. See "Note" page'), toNotesPage : [{ name : "Manifest Mind", source : [["UA:SR", 5]], page3notes : false, note : desc (["As a bonus action with my Awakened Spellbook on my person, I can cause the mind to", "manifest as a Tiny spectral construct, hovering in an unoccupied space of my choice within", "60 ft. It is intangible and doesn't occupy its space, and it sheds dim light in a 10 ft radius.", "It looks like a ghostly tome, a cascade of text, or a scholar from the past \(my choice.\).", "\(See Companion Page for statistics for this construct.\)", "While manifested, it can hear and see and has darkvision with a range of 60 ft. As an", "action, I can hear and see using its senses instead of my own, until my concentration", "ends \(as if concentrating on a spell\).", "Whenever I cast a wizard spell on my turn, I can cast it as if I were in the spectral mind's", "space, using its senses. I can do this a number of times per day equal to my proficiency", "bonus, and I regain all uses when I finish a long rest.", "As a bonus action, I can cause it to hover up to 30 ft to an unoccupied space that I or it", "can see. It can pass through creatures but not objects. It stops manifesting if it is ever", "more than 300 ft away from me, if it drops to 0 hit points, if I die, or if I dismiss it as", "a bonus action." ]) }], eval : function() { var companionFunctions = ClassList.artificer ? ClassList.artificer.artificerCompFunc : ClassList.wizard.artificer.CompFunc; companionFunctions.add("Manifest Mind"); ClassList.wizard.wizardCompFunc.update(10, What('Int mod'),What('AC'),What('Str mod'),What('Dex mod'),What('Con mod'),What('Wis mod'),What('Cha mod')); }, removeeval : function() { var companionFunctions = ClassList.artificer ? ClassList.artificer.artificerCompFunc : ClassList.wizard.artificerCompFunc; companionFunctions.remove("Manifest Mind"); }, action : [["bonus action",""],["bonus action","Hover spellbook 30ft"],["bonus action","dismiss Manifestation"]], usages : "Prof Bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature14" : { name : "One with the Word", source : [["UA:SR", 5]], minlevel : 14, description : desc([ "While I am holding my Awakened Spellbook and it is manifest, I can take an action to", "swap places with the manifestation. I can do this a number of times equal to my", "proficiency bonus and I regain all expended uses when I finish a long rest.", "If I die but at least one spell remains in my Awakened Spellbook, I can return to", "life after 1 minute within 5 ft of the book. I revive with 1 hit point. I then roll", "3d6 and the spellbook loses spells of my choice that have a combined spell level", "equal to that roll or higher. I am incapable of casting the lost spells, even if I", "find them on a scroll or in another spellbook. I can only restore my ability to cast", "one of these spells with the wish spell, which will restore one spell per casting." ]), action : [["action","Swap places with spellbook"]], usages : "Prof Bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" } } }); */ // ua_20200713_Feats-2020.js // This file adds the content from the Unearthed Arcana 2020: Feats article to MPMB's Character Record Sheet // All content in this file contains contributions by AelarTheElfRogue // Define the source SourceList["UA:F2"] = { name : "Unearthed Arcana: Feats 2020", abbreviation : "UA:F2", group : "Unearthed Arcana", url : "https://media.wizards.com/2020/dnd/downloads/UA2020_Feats.pdf", date : "2020/07/13" }; FeatsList["crusher-ua"] = { name : "Crusher", source : [["UA:F2", 1]], descriptionFull : "You are practiced in the art of crushing your enemies, granting you the following benefits:\n \u2022 Increase your Strength or Dexterity by 1, to a maximum of 20.\n \u2022 Once per turn, when you hit a creature with an attack that deals bludgeoning damage, you can move it 5 feet to an unoccupied space, provided the target is no more than one size larger than you.\n \u2022 When you score a critical hit that deals bludgeoning damage to a creature, attack rolls against that creature are made with advantage until the end of your next turn.", description : "Once per turn, when I hit a creature no more than one size larger than me with an attack that deals bludgeoning damage, I can move it 5 ft to an unoccupied space. If I score a critical hit that deals bludgeoning damage, attacks against the creature hit gain advantage until the start of my next turn. [+1 " + (typePF ? "Str or Dex" : "Strength or Dexterity") + "]", scorestxt : "+1 Strength or Dexterity" }; FeatsList["practiced expert-ua"] = { name : "Practiced Expert", source : [["UA:F2", 3]], descriptionFull : "You have honed your proficiency with particular skills or tools, gaining the following benefits:\n \u2022 Increase one ability score of your choice by 1, to a maximum of 20.\n \u2022 You gain proficiency with one skill or tool of your choice.\n \u2022 Choose one of your skill or tool proficiencies. Your proficiency bonus is doubled for any ability check you make that uses the chosen proficiency.", description : "I gain proficiency in one skill or tool, and expertise in that same skill or tool, or another skill or tool I'm proficient with. [+1 to one ability score of my choice]", skillstxt : "Proficiency with one skill or tool, and\n Expertise with one skill or tool I'm proficient with", scorestxt : "+1 to one ability score of my choice" }; FeatsList["shadow touched-ua"] = { name : "Shadow Touched", source : [["UA:F2", 3]], descriptionFull : "You learn how to bend shadows from your experience with the Shadowfell. You gain the following benefits:\n \u2022 Increase your Intelligence, Wisdom, or Charisma score by 1, to a maximum of 20.\n \u2022 You learn the darkness spell and one 1st-level spell of your choice. The 1st-level spell must be from the illusion or necromancy school of magic. You can cast each of these spells without expending a spell slot. Once you cast either of these spells in this way, you can't cast that spell in this way again until you finish a long rest. You can also cast these spells using spell slots you have of the appropriate level. The spells' spellcasting ability is the ability increased by this feat.", description : "I learn Darkness and one 1st level illusion or necromancy spell. I can cast each once per long rest at their lowest level without expending a spell slot, and can cast them if I have a spell slot to do so. My spellcasting ability is the ability I choose to increase when I gain this feat. [+1 Intelligence, Wisdom, or Charisma]", spellcastingBonus : [{ name : "Darkness", spells : ["darkness"], selection : ["darkness"], firstCol : "oncelr+markedbox" }, { name : "1st-level Illus/Necro spell", 'class' : "any", school : ["Illus", "Necro"], level : [1, 1], firstCol : "oncelr+markedbox" }], spellcastingAbility : 4, allowUpCasting : true, choices : ["Intelligence", "Wisdom", "Charisma"], "intelligence" : { description : "I learn Darkness and one 1st level illusion or necromancy spell. I can cast each once per long rest at their lowest level without expending a spell slot, and can cast them by expending a spell slot as normal. Intelligence is my spellcasting ability for these spells. [+1 Intelligence]", spellcastingAbility : 4, scores : [0, 0, 0, 1, 0, 0] }, "wisdom" : { description : "I learn Darkness and one 1st level illusion or necromancy spell. I can cast each once per long rest at their lowest level without expending a spell slot, and can cast them by expending a spell slot as normal. Wisdom is my spellcasting ability for these spells. [+1 Wisdom]", spellcastingAbility : 5, scores : [0, 0, 0, 0, 1, 0] }, "charisma" : { description : "I learn Darkness and one 1st level illusion or necromancy spell. I can cast each once per long rest at their lowest level without expending a spell slot, and can cast them by expending a spell slot as normal. Charisma is my spellcasting ability for these spells. [+1 Charisma]", spellcastingAbility : 6, scores : [0, 0, 0, 0, 0, 1] } }; FeatsList["shield training-ua"] = { name : "Shield Training", source : [["UA:F2", 3]], descriptionFull : "You've trained in the effective use of shields. You gain the following benefits:\n \u2022 Increase your Strength, Dexterity, or Constitution score by 1, to a maximum of 20.\n \u2022 You gain proficiency with shields.\n \u2022 In combat, you can don or doff a shield as the free object interaction on your turn.\n \u2022 If you have the Spellcasting or Pact Magic feature, you can use a shield as a spellcasting focus.", description : "I gain proficiency with shields. I can don or doff a shield as the free object interaction on my turn. If I have the Spellcasting or Pact Magic feature, I can use my shield as a spellcasting focus. [+1 Strength, Dexterity, or Constitution]", scorestxt : "+1 Strength, Dexterity, or Constitution", armorProfs : [false, false, false, true] }; FeatsList["tandem tactician-ua"] = { name : "Tandem Tactician", source : [["UA:F2", 3]], descriptionFull : "Your presence in a scrap tends to elevate your comrades. You gain the following benefits:\n \u2022 You can use the Help action as a bonus action.\n \u2022 When you use the Help action to aid an ally in attacking a creature, increase the range of the Help action by 10 feet. Additionally, you can help two allies targeting the same creature within range when you use the Help action this way.", description : "I can use the Help action as a bonus action. When I use the Help action to aid an ally in attacking a creature, the range of the Help action increases with 10 ft. I can help two allies targeting the same creature within range when I use the Help action this way.", action : [["bonus action", ""]] }; FeatsList["tracker-ua"] = { name : "Tracker", source : [["UA:F2", 3]], descriptionFull : "You have spent time hunting creatures and honed your skills, gaining the following benefits:\n \u2022 Increase your Wisdom score by 1, to a maximum of 20.\n \u2022 You learn the hunter's mark spell. You can cast it once without expending a spell slot, and you must finish a long rest before you can cast it in this way again. You can also cast the spell using any spell slots you have. Wisdom is your spellcasting ability for this spell.\n \u2022 You have advantage on Wisdom (Survival) checks to track creatures.", description : "I can cast Hunter's Mark once per long rest at its lowest level without expending a spell slot, and can cast it by expending a spell slot as normal. Wisdom is my spellcasting ability for this. I have advantage on Wisdom (Survival) checks to track creatures. [+1 Wisdom]", scores : [0, 0, 0, 0, 1, 0], spellcastingBonus : [{ name : "1\xD7/LR \u0026 spell slot", spellcastingAbility : 5, allowUpCasting : true, spells : ["hunter's mark"], selection : ["hunter's mark"], firstCol : "oncelr+markedbox" }] }; // ua_20200805_Subclasses-Part-4.js // This file adds the content from the Unearthed Arcana 2020: Subclasses, Part 4 article to MPMB's Character Record Sheet // This file contains contributions by AelarTheElfRogue // Define the source SourceList["UA:SP4"] = { name : "Unearthed Arcana: Subclasses, Part 4", abbreviation : "UA:SP4", group : "Unearthed Arcana", url : "https://media.wizards.com/2020/dnd/downloads/UA2020_Subclasses04.pdf", date : "2020/08/05" }; AddSubClass("bard", "college of spirits-ua",{ regExpSearch : /^(?=.*(college|bard|minstrel|troubadour|jongleur))(?=.*spirits?).*$/i, subname : "College of Spirits", subnameShort: "Spirits", source : [["UA:SP4", 1]], features : { "subclassfeature3" : { name : "Guiding Whispers", source : [["UA:SP4", 1]], minlevel : 3, description : desc([ "I learn the Guidance cantrip and can cast it with a range of 60 ft" ]), spellcastingBonus : [{ name : "Guiding Whispers", spells : ["guidance"], selection : ["guidance"], firstCol : "atwill" }], spellChanges : { "guidance" : { range : "60 ft", changes : "I can cast Guidance with a range of 60 ft." } } }, "subclassfeature3.1" : { name : "Spiritual Focus", source : [["UA:SP4", 1]], minlevel : 3, description : " [only for bard spells]" + desc([ "I can use a candle, crystal ball, skull, spirit board, or tarokka deck as a spellcasting focus" ]) }, "subclassfeature3.2" : { name : "Tales from Beyond", source : [["UA:SP4", 1]], minlevel : 3, description : desc([ "As a bonus action, I can expend a bardic inspiration die to roll on the Spirits' Tales table", "I retain the rolled tale in my mind until I bestow its effects or finish a short or long rest", "I can only retain one tale at a time; I need to hold a spiritual focus to roll on the table", "As an action, I can choose a creature I see in 30 ft or myself to bestow the tale's effect", "The tales use my spell save DC; See the Notes page for the Spirits' Tales table" ]), action : [["bonus action", " (roll on table)"], ["action", " (use effect)"]], toNotesPage : [{ name : "Spirits' Tales Table", note : desc([ "As a bonus action while I'm holding my spiritual focus, I can reach out to spirits who tell their tales through me. I expend one use of my Bardic Inspiration and roll on the table below using my Bardic Inspiration die to determine the tale. I retain the tale in mind until I bestow the tale's effect or finish a short or long rest.", "I can retain only one of these tales in mind at a time, and rolling on the table immediately ends the effect of the previous tale.", "As an action, I can choose myself or one creature I can see within 30 ft to be the target of the tale's effect. If the tale requires a saving throw, the DC equals my spell save DC.", "\nRoll " + (typePF ? "" : " ") + "Tale" ])+ desc([ " 1 Beast: I recite the tale of a clever animal. For 1 minute, the target has advantage on Wisdom (Perception) checks and advantage on attack rolls against a creature if another enemy is within 5 ft of it, and that enemy isn't incapacitated.", " 2 Warrior: I recount the story of a renowned duelist. Make a melee spell attack against the target as an attacking spectral warrior briefly appears in a unoccupied space within 5 ft of the target before vanishing. On a hit, the target takes force damage equal to two rolls of my Bardic Inspiration die + my Charisma modifier.", " 3 Friends: I recite the tale of friends who found each other in the afterlife. The target and another creature of its choice it can see within 5 ft of it regains hit points equal to a roll of my Bardic Inspiration die + my Charisma modifier.", " 4 Runaway: I tell the tale of an adventurer that could escape any confinement. The target can immediately use its reaction to teleport up to 30 ft to an unoccupied space it can see. When the target teleports, it can choose a number of creatures it can see within 30 ft of it up to my Charisma modifier (minimum of 1) to immediately use the same reaction.", " 5 Avenger: I recount the tale of an avenging knight. For 1 minute, whenever a creature the target can see within 30 ft of it is damaged by a creature, the target can use its reaction to deal force damage equal to a roll of my Bardic Inspiration die to the attacker.", " 6 Hero: I speak the tale of an epic hero. The target gains temporary hit points equal to a roll of my Bardic Inspiration die + my bard level. While it has these temporary hit points, the target's walking speed increases by 10 ft.", " 7 Fey: I recount the tale of a mischievous fey. The target must succeed on a Wisdom saving throw or become charmed by me until the end of its next turn. The charmed target must use its action to make a melee attack against a creature other than itself that I mentally choose. The target can act normally on its turn if I choose no other creature.", " 8 Dark Spirit: I speak a dreadful tale of a slayer in the dark. The target becomes invisible until the end of its next turn or until it hits a creature with an attack. If it hits a creature with an attack during this invisibility, that creature takes necrotic damage equal to a roll of my Bardic Inspiration die and is frightened of the target until the end of its next turn.", " 9 Giant: I speak of the deeds of a mighty giant. Each creature of the target's choice it can see within 30 ft of it must make a Strength saving throw, taking force damage equal to two rolls of my Bardic Inspiration die on a failed save and is knocked prone. A creature that succeeds on its saving throw takes half as much damage and isn't knocked prone.", " 10 Dragon: I breathe a poem of a wrathful dragon. The target magically spews fire from their mouth in a 30-ft cone. Each creature in that area must make a Dexterity saving throw, taking fire damage equal to three rolls of my Bardic Inspiration die on a failed save, or half as much damage on a successful one.", " 11 Celestial: I speak of the exalted deeds of a celestial. The target regains hit points equal to two rolls of my Bardic Inspiration die + my bard level, and I end one disease or a condition from the following list affecting the target: blinded, deafened, paralyzed, petrified, or poisoned.", " 12 Unknown: I utter an incomprehensible fable from a being beyond the stars. The target must succeed on an Intelligence saving throw or take psychic damage equal to three rolls of my Bardic Inspiration die, and the target is unable to speak any language for 1 minute." ], "\n") }] }, "subclassfeature6" : { name : "Spiritual Focus: Improve spells", source : [["UA:SP4", 2]], minlevel : 6, description : desc([ "While holding a spiritual focus, I can add 1d6 to one damage or healing roll of bard spells" ]), calcChanges : { atkAdd : [ function (fields, v, output) { if (v.thisWeapon[3] && SpellsList[v.thisWeapon[3]] && v.thisWeapon[4].indexOf("bard") !== -1) { // If RAW is selected, first test if this spell is eligible to use with a spellcasting focus var isRAW = GetFeatureChoice("classes", "bard", "subclassfeature6") === "raw: only +1d6 for spells with non-costly material components"; var spellObj = SpellsList[v.thisWeapon[3]]; if (isRAW && (!spellObj.components || !/\bM\b/.test(spellObj.components) || /M\u0192|M\u2020/.test(spellObj.components))) return; fields.Damage_Die = fields.Damage_Die.replace(/D/g, 'd'); var d6Regex = /(\d+)d6/; if (fields.Damage_Die.indexOf('Bd6') != -1) { fields.Damage_Die = fields.Damage_Die.replace('Bd6', 'Cd6'); } else if (fields.Damage_Die.indexOf('Cd6') != -1) { fields.Damage_Die = fields.Damage_Die.replace('Cd6', 'Qd6'); } else if (d6Regex.test(fields.Damage_Die)) { fields.Damage_Die = fields.Damage_Die.replace(d6Regex, Number(fields.Damage_Die.replace(d6Regex, '$1')) + 1 + 'd6'); } else if (v.thisWeapon[3] == "eldritch blast") { fields.Description += (fields.Description ? '; ' : '') + "One ray +1d6 dmg"; } else { fields.Damage_Die += '+1d6'; } } }, 'When I cast a bard spell, I can use my spiritual focus to add 1d6 to one damage roll or roll to restore hit points.\n Going by rules as written (RAW), the spiritual focus has to be used as a spellcasting focus for this bonus to be added. This means that it can only be used on spells with a non-costly material component. Most DMs will forgo this technicality and that is why this sheet will add the 1d6 to any damage/healing spell by default. You can enable to use the stricter rules as written with the "Choose Feature" button on the second page.' ], spellAdd : [ function (spellKey, spellObj, spName) { // Do not process if a psionic, not a bard spell, or, if RAW is selected, not eligible to use with a spellcasting focus var isRAW = GetFeatureChoice("classes", "bard", "subclassfeature6") === "raw: only +1d6 for spells with non-costly material components"; if (spellObj.psionic || spName !== "bard" || (isRAW && (!spellObj.components || !/\bM\b/.test(spellObj.components) || /M\u0192|M\u2020/.test(spellObj.components)))) return; if (genericSpellDmgEdit(spellKey, spellObj, "\\w+\\.?", "1d6", true, true) || genericSpellDmgEdit(spellKey, spellObj, "heal", "1d6", true, true)) { return true; } }, 'When I cast a bard spell, I can use my spiritual focus to add 1d6 to one damage roll or roll to restore hit points.\n Going by rules as written (RAW), the spiritual focus has to be used as a spellcasting focus for this bonus to be added. This means that it can only be used on spells with a non-costly material component. Most DMs will forgo this technicality and that is why this sheet will add the 1d6 to any damage/healing spell by default. You can enable to use the stricter rules as written with the "Choose Feature" button on the second page.' ] }, choices : ["RAW: only +1d6 for spells with non-costly material components", "Allow +1d6 for any bard spell"], "raw: only +1d6 for spells with non-costly material components" : { name : "Spiritual Focus: Improve spells", description : desc([ "If I use a spiritual focus to cast a bard spell, I can add 1d6 to one damage or healing roll" ]) }, "allow +1d6 for any bard spell" : { name : "Spiritual Focus: Improve spells", description : desc([ "While holding a spiritual focus, I can add 1d6 to one damage or healing roll of bard spells" ]) }, defaultChoice : "allow +1d6 for any bard spell" }, "subclassfeature6.1" : { name : "Spirit Session", source : [["UA:SP4", 2]], minlevel : 6, description : desc([ "Using my spiritual focus, I can conduct a hour-long ritual to channel spirit during a rest", "The number of willing participants, me included, can be up to my Proficiency Bonus", "At the end, I learn a divination or necromancy spell of my choice until I start a long rest", "The spell can't be higher level than the number of participants and of a level I can cast" ]), usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Spirit Session", school : ["Div", "Necro"], firstCol : "SS" }] }, "subclassfeature14" : { name : "Mystical Connection", source : [["UA:SP4", 3]], minlevel : 14, description : desc([ "I can roll a d6 instead of expending a bardic inspiration die when I do Tales from Beyond", "Even if I roll a d6, I still roll my bardic inspiration die for the effect, but not expend it" ]) } } }); AddSubClass("warlock", "the undead-ua",{ regExpSearch : /^(?=.*undead)(?=.*warlock).*$/i, subname : "the Undead", source : [["UA:SP4", 1]], spellcastingExtra : ["bane", "false life", "blindness/deafness", "phantasmal force", "phantom steed", "speak with dead", "death ward", "greater invisibility", "antilife shell", "cloudkill"], features : { "subclassfeature1" : { name : "Form of Dread", source : [["UA:SP4", 3]], minlevel : 1, description : desc([ "As a bonus action, I can transform for 1 minute and gain the following benefits:", " \u2022 I gain temporary hit points equal to 1d10 + my warlock level", " \u2022 I am immune to the frightened condition", " \u2022 Once per turns when I hit an attack, I can force the target to make a Wis save", " If the target fails this save, it is frightened of me until the end of my next turn" ]), additional : levels.map(function (n) { return "1d10+" + n + " temp HP"; }), usages : "Prof Bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", action : [["bonus action", ""]], savetxt : { immune : ["frightened (Form of Dread)"] } }, "subclassfeature6" : { name : "Grave Touched", source : [["UA:SP4", 3]], minlevel : 3, description : desc([ "I no longer need to eat, drink, or breathe", "When I damage a creature with an attack, I can change the damage type to necrotic", "While I'm in my Form of Dread, I can roll one extra damage die for this necrotic damage" ]) }, "subclassfeature10" : { name : "Mortal Husk", source : [["UA:SP4", 4]], minlevel : 10, description : desc([ "I have resistance to necrotic damage, or immunity while I'm in my Form of Dread", "When I'm reduced to 0 HP, I can cause my body to explode and I revive with 1 HP after", "Each creature of my choice within 30 ft takes 2d10 + my warlock level necrotic damage", "After this, I gain 1 level of exhaustion and must complete 1d4 long rests to do so again" ]), additional : levels.map(function (n) { return n < 10 ? "" : "2d10+" + n + " damage, 1\xD7 per 1d4 long rests" }), dmgres : [["Necrotic"]], savetxt : { immune : ["necrotic (Form of Dread)"] }, extraLimitedFeatures : [{ name : "Mortal Husk (revive)", usages : 1, recovery : "1d4 LR" }] }, "subclassfeature14" : { name : "Spirit Projection", source : [["UA:SP4", 4]], minlevel : 14, description : desc([ "As an action, I can project my spirit from my body, leaving it suspended and unconscious", "This lasts 1 hour or until my concentration is broken; Damage and effects affect both", "When it ends, I can have my spirit return to my body or my body teleport to my spirit", "My spirit has my abilities, but no gear; While projecting I gain the following benefits:", " \u2022 My spirit and body gain resistance to bludgeoning, piercing, and slashing damage", " \u2022 My conjuration/necromancy spells need no verbal, somatic, non-costly material comp.", " \u2022 I gain a flying speed equal to my walking speed and can hover", " \u2022 Move through creatures/objects as difficult terrain; 1d10 force damage if end turn in", " \u2022 While in my Form of Dread, once per turns when I deal necrotic damage, I can heal", " I regain hit points equal to half the amount of necrotic damage dealt" ]), usages : 1, recovery : "long rest", action : [["action", ""]] } } }); // ua_20201026_Subclasses-Part-5.js // This file adds the content from the Unearthed Arcana 2020: Subclasses, Part 5 article to MPMB's Character Record Sheet // This file contains contributions by WondrousLittleWizard // Define the source SourceList["UA:SP5"] = { name : "Unearthed Arcana: Subclasses, Part 5", abbreviation : "UA:SP5", group : "Unearthed Arcana", url : "https://media.wizards.com/2020/dnd/downloads/UA2020_102620_Subclasses05.pdf", date : "2020/10/26" }; AddSubClass("monk", "ascendant dragon-ua", { regExpSearch : /^(?=.*ascendant)(?=.*(dragon|draconic))((?=.*(monk|monastic))|((?=.*martial)(?=.*(artist|arts)))|((?=.*spiritual)(?=.*warrior))).*$/i, subname : "Way of the Ascendant Dragon", subnameShort: "Ascendant Dragon", source : [["UA:SP5", 1]], features : { "subclassfeature3" : { name : "Draconic Disciple", source : [["UA:SP5", 1]], minlevel : 3, description : desc([ "I can change the damage type of my unarmed strikes to acid, cold, fire, lightning, poison", "As a reaction when I fail an Intimidation or Persuasion check, I can reroll the check", "If this turns it into a success, I can't do so again until I finish a long rest; I learn Draconic" ]), languageProfs : ["Draconic"], action : [["reaction", " (reroll check)"]], usages : 1, recovery : "long rest", additional : "reroll", calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName === "unarmed strike") { fields.Description += (fields.Description ? '; ' : '') + "Change type to acid/cold/fire/lightning/poison"; }; }, "When I damage a target with an unarmed strike, I can change the damage type to acid, cold, fire, lightning or poison." ] }, "breath of the dragon" : { name : "Breath of the Dragon", extraname : "Ascendant Dragon 3", source : [["UA:SP5", 1]], description : levels.map(function (n) { var iMonkDie = n < 5 ? 4 : n < 11 ? 6 : n < 17 ? 8 : 10;; var aDesc = [ "When I take the Attack action on my turn, I can replace one attack with a breath weapon", "This deals " + (n < 11 ? 2 : 3) + "d" + iMonkDie + " acid, cold, fire, lightning, or poison (my choice) damage to all in the area", "The area can be a 20-ft cone or a 5-ft wide, 30-ft line; Dex save to halve the damage", "I can do this my Proficiency Bonus times per long rest, or by expending 1 ki point" ]; if (n < 17) return desc(aDesc); var aDesc17 = [ "From 17th-level, the energy clings to those damaged by this, hurting them every turn", "At the start of each of their turns, they take 1d" + iMonkDie + " damage of the chosen type", "At the end of each of their turns, they can repeat the save to end this effect on themselves" ]; return desc(aDesc.concat(aDesc17)); }), usages : "Prof B. per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", altResource : "1 ki", additional : levels.map(function (n) { return n < 3 ? "" : (n < 11 ? 2 : 3) + "d" + (n < 5 ? 4 : n < 11 ? 6 : n < 17 ? 8 : 10); }), weaponOptions : [{ regExpSearch : /^(?=.*breath)(?=.*dragon).*$/i, name : "Breath of the Dragon", source : [["UA:SP5", 1]], ability : 5, type : "Natural", damage : [2, 4, "My choice"], range : "5-ft \xD7 30-ft line", description : "All in area; Dex save for half damage; Alt: 20-ft cone; Type: acid/cold/fire/lightning/poison", dc : true, monkweapon : false, abilitytodamage : false, UA_WotAD_BreathWeapon : true, selectNow : true }], calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.monk && classes.known.monk.level && v.theWea.UA_WotAD_BreathWeapon) { var n = classes.known.monk.level; var aMonkDie = n < 5 ? 4 : n < 11 ? 6 : n < 17 ? 8 : 10;; fields.Damage_Die = (n < 11 ? 2 : 3) + "d" + aMonkDie; if (n >= 17) fields.Description += (fields.Description ? '; ' : '') + 'Clings to targets'; }; }, "My Breath of the Dragon deals damage equal to two rolls of my Martials Arts die. At 11th level, this increases to three rolls of my Martial Arts die. At 17th level, the energy clings to the target. At the start of each of a target's turns, it takes damage of the type the breath dealt equal to one roll of my Martial Arts die. At the end of its turn, the creature can repeat the save, ending the effect on itself on a success." ] } }, autoSelectExtrachoices : [{ extrachoice : "breath of the dragon" }] }, "subclassfeature6" : { name : "Wings Unfurled", source : [["UA:SP5", 2]], minlevel : 6, additional: "Prof B. / long rest or 1 ki", description : desc([ "When I use Step of the Wind, I can gain a flying speed equal to my walking speed", "I can do this Prof Bonus per long rest, or by using 2 ki points to use Step of the Wind" ]), extraLimitedFeatures : [{ name : "Wings Unfurled", usages : "Proficiency bonus per ", recovery : "long rest", usagescalc : "event.value = How('Proficiency Bonus');", altResource : "1 ki" }], "aspect of the wyrm" : { name : "Aspect of the Wyrm", extraname : "Ascendant Dragon 11", source : [["UA:SP5", 2]], description : levels.map(function (n) { var aDesc = [ "As a bonus action, I can activate a 30 ft aura of draconic power that lasts for 1 minute", "I choose acid, cold, fire, lightning, or poison damage when I activate this aura", "From 17th-level, all creatures of my choosing in the aura take 4d10 damage of this type", "My allies in the aura and myself gain resistance to the chosen damage type", "When an attack hits one of us, the one hit can use their reaction to damage the attacker", "This damage is of the chosen damage type, equal to one roll of my martial arts", "I can activate this aura once per long rest, or by expending 4 ki points" ]; if (n < 17) aDesc.splice(2,1); return desc(aDesc); }), usages : 1, recovery : "long rest", altResource : "4 ki", additional : levels.map(function (n) { return n < 11 ? "" : "1d" + (n < 17 ? 8 : 10); }), action : [["bonus action", " (activate)"], ["reaction", " (if active)"]] }, autoSelectExtrachoices : [{ extrachoice : "aspect of the wyrm", minlevel : 11 }] }, "subclassfeature17" : { name : "Ascendant Aspect", source : [["UA:SP5", 2]], minlevel : 17, description: desc("I gain 30 ft blindsight and both Breath of the Dragon and Aspect of the Wyrm improve"), vision : [["blindsight", 30]] } } }); var UASP5_Ranger_Subclass_Drakewarden = AddSubClass("ranger", "drakewarden-ua", { regExpSearch : /^(?=.*(drake|dragon|draconic))(?=.*(warden|ranger|trainer)).*$/i, subname : "Drakewarden", source : [["UA:SP5", 2]], fullname : "Drakewarden", features : { "subclassfeature3" : { name : "Draconic Gift", source : [["UA:SP5", 3]], minlevel : 3, description : desc([ "I learn the Draconic language and the Thaumaturgy cantrip" ]), languageProfs : ["Draconic"], spellcastingBonus : [{ name : "Draconic Gift", spells : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : "atwill" }] }, "subclassfeature3.1" : { name : "Drake Companion", source : [["UA:SP5", 3]], minlevel : 3, description : desc([ "As an action, I can summon my drake to an empty space within 30 ft that I can see", 'Select a "Drake Companion" on the companion page for its stats and rules', "I can do this once per long rest, or by expending a 1st-level or higher spell slot (SS 1+)" ]), usages : 1, recovery : "long rest", altResource : "SS 1+", action : [["action", " (summon)"], ["bonus action", " (command)"]], creaturesAdd : [["Drake Companion", true]], creatureOptions : [{ name : "Drake Companion", source : [["UA:SP5", 3]], size : 4, type : "Dragon", alignment : "Unaligned", ac : "14+Prof", hp : 20, hd : [3, 10], hdLinked : ["ranger", "rangerua"], minlevelLinked : ["ranger", "rangerua"], speed : "40 ft", scores : [16, 12, 15, 8, 14, 8], saves : ["", 3, "", "", 4, ""], damage_immunities : "the chosen Draconic Essence damage type", senses : "Darkvision 60 ft", passivePerception : 12, languages : "Draconic", challengeRating : "0", proficiencyBonus : 2, proficiencyBonusLinked : true, attacksAction : 1, attacks : [{ name : "Bite", ability : 1, damage : [1, 6, "piercing"], modifiers : ["", "Prof"], range : "Melee (5 ft)", description : "Only 1d6 is piercing damage, the rest is of the chosen Draconic Essence damage type", abilitytodamage : false }], features : [{ name : "Warden", description : "The drake obeys the commands of its warden and shares its proficiency bonus. It takes its turn immediately after that of its warden, on the same initiative. It can move and take reactions on its own, but only takes the Dodge action on its turn unless its warden takes a bonus action to command it to take another action. If its warden is incapacitated, the drake can take any action, not just Dodge. The drake vanishes after a number of hours equal to its proficiency bonus, when it is reduced to 0 hit points, when its warden summons another drake, or when its warden dies." }], traits : [{ name : "Draconic Essence", description : "When the drake is summoned, choose a damage type: acid, cold, fire, lightning, or poison." }, { name : "Infused Strikes", description : "As a reaction when another creature within 30 ft of the drake that it can see hits with a weapon attack, the drake can infuse the strike with its essence, causing the attack to deal an extra 1d6 damage of its chosen Draconic Essence damage type" }, { name : "Bond of Fang and Scale (Drakewarden 7)", minlevel : 7, description : "When the drake is summoned, it gains either a 40 ft swimming speed and can breathe underwater, or a 40 ft flying speed and has wings. The drake's bite deals an extra 1d6 damage of its chosen Draconic Essence type.", addMod : [{ type : "", field : "BlueText.Comp.Use.Attack.1.Damage Die", mod : "1d6", text : "The drake's bite attack deals an extra 1d6 damage of the type chosen for its Draconic Essence." }], eval : function(prefix, lvl) { var sMoveStr = (typePF ? ",\n" : ", ") + "fly/swim 40 ft"; if (What("Unit System") === "metric") sMoveStr = ConvertToMetric(sMoveStr, 0.5); tDoc.getField(prefix + "Comp.Use.Speed").value += sMoveStr; }, removeeval : function(prefix, lvl) { var sMoveStr = (typePF ? ",\n" : ", ") + "fly/swim 40 ft"; if (What("Unit System") === "metric") sMoveStr = ConvertToMetric(sMoveStr, 0.5); Value(prefix + "Comp.Use.Speed", What(prefix + "Comp.Use.Speed").replace(sMoveStr, "")); } }, { name : "Perfected Bond (Drakewarden 15)", minlevel : 15, description : "The drake's size is now Large and its bite attack deals an extra 1d6 damage (for a total of +2d6) of its chosen Draconic Essence type.", addMod : [{ type : "", field : "BlueText.Comp.Use.Attack.1.Damage Die", mod : "1d6", text : "The drake's bite attack deals another extra 1d6 damage (for a total of +2d6) of the type chosen for its Draconic Essence." }], eval : function(prefix, lvl) { PickDropdown(prefix + "Comp.Desc.Size", 2); // Large }, removeeval : function(prefix, lvl) { PickDropdown(prefix + "Comp.Desc.Size", 4); // Small } }], calcChanges : { hp : function (totalHD, HDobj, prefix) { if (!classes.known.ranger && !classes.known.rangerua) return; var rngrLvl = classes.known.ranger ? classes.known.ranger.level : classes.known.rangerua.level; var rngrLvlM = 5 * rngrLvl; HDobj.alt.push(5 + rngrLvlM); HDobj.altStr.push(" = 5 as a base\n + 5 \xD7 " + rngrLvl + " from five times its warden's ranger level (" + rngrLvlM + ")"); }, setAltHp : true } }] }, "subclassfeature7" : { name : "Bond of Fang and Scale", source : [["UA:SP5", 4]], minlevel : 7, description : desc([ "When I summon my drake I can choose for it to have 40 ft flying or swimming speed", "If I choose swimming, it also gains the ability to breathe underwater", "The drake's bite attack deals an extra 1d6 damage chosen by its Draconic Essense", "While it is summoned, I gain resistance to the damage type of its Draconic Essense" ]), dmgres : ["(See Drake)"] }, "subclassfeature11" : { name : "Drake's Breath", source : [["UA:SP5", 4]], minlevel : 11, description : desc([ "As an action, I can cause my drake or myself to exhale a 30-ft cone breath weapon", "Its damage type is acid, cold, fire, lightning, or poison; Dex save to halve the damage", "I can do this once per long rest, or by expending a 3rd-level or higher spell slot (SS 3+)" ]), additional : levels.map(function (n) { return n < 11 ? "" : (n < 15 ? 6 : 8) + "d6 damage"; }), action : [["action", ""]], usages : 1, recovery : "long rest", altResource : "SS 3+", weaponOptions : [{ regExpSearch : /^(?=.*drake)(?=.*breath).*$/i, name : "Drake's Breath", source : [["UA:SP5", 4]], ability : 5, type : "Natural", damage : [6, 6, "My choice"], range : "30-ft cone", description : "Hits all in area; Dex save for half damage; Damage type: acid, cold, fire, lightning, or poison", abilitytodamage : false, dc : true, useSpellMod : ["ranger", "rangerua"], DrakewardenDrakeBreath : true, selectNow : true }], calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.DrakewardenDrakeBreath && (classes.known.rangerua || classes.known.ranger)) { var rngrLvl = classes.known.ranger ? classes.known.ranger.level : classes.known.rangerua.level; fields.Damage_Die = (rngrLvl < 15 ? 6 : 8) + 'd6'; }; }, "", 1 ] } }, "subclassfeature15" : { name : "Perfected Bond", source : [["UA:SP5", 4]], minlevel : 15, description : desc([ "My drake is now Large and its bite deals +1d6 damage chosen by its Draconic Essence", "As a reaction when the drake or I take damage while within 30 ft of each other,", "I can give myself or the drake resistance to that instance of damage", ]), action : [["reaction", ""]] } } }); if (ClassList.rangerua) { ClassList.rangerua.subclasses[1].push(UASP5_Ranger_Subclass_Drakewarden); }; // ua_20210126_Gothic-Lineages.js // This file adds the content from the Unearthed Arcana 2021: Gothic Lineages article to MPMB's Character Record Sheet // This file contains contributions by Metacomet10, MarvinTheParanoidAndroid, and CountVladmir SourceList["UA:GL"] = { name : "Unearthed Arcana: Gothic Lineages", abbreviation : "UA:GL", group : "Unearthed Arcana", campaignSetting : "Ravenloft", url : "https://media.wizards.com/2021/dnd/downloads/UA2021_GothicLineages.pdf", date : "2021/01/26" }; RaceList["dhampir-ua"] = { regExpSearch : /dhampir/i, name : "Dhampir", source : [["UA:GL", 2]], plural : "Dhampirs", size : [3, 4], speed : { walk : { spd : 35, enc : 25 }, climb : { spd : "walk", enc : "walk" } }, languageProfs : ["Common", 1], vision : [["Darkvision", 60]], weaponOptions : [{ regExpSearch : /^(?=.*vampiric)(?=.*bite).*$/i, name : "Vampiric Bite", source : [["VRGtR", 17]], ability : 3, type : "Simple", damage : [1, 4, "piercing"], range : "Melee", description : "Adv. while at or below half HP; Can empower myself on hit", isAlwaysProf : true, abilitytodamage : true, monkweapon : true, selectNow : true }], extraLimitedFeatures : [{ name : "Vampiric Bite", additional : "empower myself", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus')", recovery : "long rest" }], scorestxt : "+2 to one ability score, and +1 to a different score of my choice", trait : "Dhampir" + (typePF ? "\n " : "\t") + "\u2022 Type: My creature type is both Humanoid and Undead." + "\n \u2022 Spider Climb: Climbing speed equal to walking speed. At 3rd level, I can move up, down, and across vertical surfaces and upside down along ceilings, while leaving my hands free." + "\n \u2022 Vampiric Bite: Uses Constitution and has adv. on the attack roll if I'm at or below half HP. My Proficiency Bonus per long rest, when I hit a creature other than a construct or undead, I can empower myself. I either regain HP or gain a bonus on my next ability check or attack roll. The bonus is equal to the piercing damage dealt." }; RaceList["hexblood-ua"] = { regExpSearch : /hexblood/i, name : "Hexblood", source : [["UA:GL", 4]], plural : "Hexbloods", size : [3, 4], speed : { walk : { spd : 30, enc : 20 } }, scorestxt : "+2 to one ability score, and +1 to a different score of my choice", trait : "Hexblood" + (typePF ? "\n " : "\t") + "\u2022 Fey Resilience: I'm both Humanoid and Fey. I have adv. on saves vs. charms." + "\n \u2022 Magic Token: As an action once per long rest, I can harmlessly remove a lock of my hair, one of my nails or teeth and imbue this token with magic until I finish a long rest. While the token is imbued in this way, I can telepathically speak to a creature holding it or see and hear around it. See the Notes page for more information." + "\n \u2022 Hex Magic: I known Disguise Self and Hex. I can cast each spell once per long rest without using a spell slot, or by using a spell slot.", toNotesPage : [{ name : "Hexblood's Magic Token", note : ["As an action, I can harmlessly pull out one of my nails, a tooth, or a lock of hair. This token is imbued with magic until I finish a long rest.", "While the token is imbued in this way, I can use an action to send a telepathic message to the creature holding or carrying the token, as long as I'm on the same plane of existence and are within 10 miles of it. The message can contain up to twenty-five words.", "In addition, while I'm within 10 miles of the token, I can use an action to enter a trance for 1 minute, during which I can see and hear from the token as if I was located where it is. While I'm using my senses at the token's location, I'm blinded and deafened in regard to my own surroundings. Afterward, the token is harmlessly destroyed.", "Once I create a token using this feature, I can't do so again until I finish a long rest, at which point my missing part regrows."] }], savetxt : { adv_vs : ["charmed"] }, languageProfs : ["Common", 1], vision : [["Darkvision", 60]], action : [["action", "Magic Token"]], extraLimitedFeatures : [{ name : "Magic Token", usages : 1, recovery : "long rest" }], spellcastingAbility : [4, 5, 6], features : { "hex magic" : { name : "Hex Magic", minlevel : 1, spellcastingBonus : [{ name : "Hex Magic", spells : ["disguise self", "hex"], selection : ["disguise self", "hex"], firstCol : 'oncelr+markedbox', times : 2, allowUpCasting : true }], } } }; RaceList["reborn-ua"] = { regExpSearch : /reborn/i, name : "Reborn", source : [["UA:GL", 5]], plural : "Reborns", size : 3, speed : { walk : { spd : 30, enc : 20 } }, scoresGeneric : true, trait : "Reborn" + (typePF ? "\n " : " ") + "\u2022 Type: My creature type is Humanoid, as well as Construct or Undead (my choice)." + "\n \u2022 Deathless Nature: I don't need to sleep, eat, drink, or breathe. I have adv. on saves vs. disease, poison, and death saves. I have resistance to poison damage. Magic can't put me to sleep and I can finish a long rest in 4 hours if I spend it inactive and motionless." + "\n \u2022 Knowledge from a Past Life: When I make an ability check that uses a skill, I can add +1d6 to the roll after seeing the d20 result. I can do this a number of times equal to my Proficiency Bonus and regain all expended uses when I finish a long rest.", vision : [["Darkvision", 60]], dmgres : ["Poison"], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["disease", "poison", "death saves"], }, extraLimitedFeatures : [{ name : "Knowledge from a Past Life", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus')", recovery : "long rest" }], useFromPreviousRace : { message : "If you replace a race with the Reborn lineage, you can keep the following elements of that race:"+ desc(["its size,", "any skill proficiencies you gained from it,", "any climbing, flying, or swimming speed you gained from it, and", "any languages it knows and gain no new languages."], "\n \u2022 ")+ "\n\nIf you don't keep any of those elements or you choose this lineage at character creation, you instead:"+ desc(["are size Medium or Small (your choice),", "gain proficiency in two skills of your choice, and", "can speak, read, and write Common and one other language that you and your DM agree is appropriate."], "\n \u2022 "), defaultTraits : { size : [3, 4], skillstxt : "Choose any two skills" }, gainTraits : ["size", "age", "height", "weight", "heightMetric", "weightMetric", "languageProfs", "skillstxt", "skills", "speed.climb", "speed.fly", "speed.swim"], updateName : "suffix" } }; AddRacialVariant("reborn-ua", "undead", { regExpSearch : /undead/i, source : [["UA:GL", 5]], trait : RaceList["reborn-ua"].trait.replace("Humanoid, as well as Construct or Undead (my choice)", "both Humanoid and Undead").replace(" ", "\t") }); AddRacialVariant("reborn-ua", "construct", { regExpSearch : /construct/i, source : [["UA:GL", 5]], trait : RaceList["reborn-ua"].trait.replace("Humanoid, as well as Construct or Undead (my choice)", "both Humanoid and Construct").replace(" ", "\t") }); // ua_20210311_Folk-of-the-Feywild.js // This file adds the content from the Unearthed Arcana 2021: Folk of the Feywild article to MPMB's Character Record Sheet // This file contains contributions by CountVladmir and othercrow SourceList["UA:FotF"] = { name : "Unearthed Arcana: Folk of the Feywild", abbreviation : "UA:FotF", group : "Unearthed Arcana", url : "https://media.wizards.com/2021/dnd/downloads/UA2021_FeyFolk.pdf", date : "2021/03/11" }; RaceList["fairy-ua"] = { regExpSearch : /fairy/i, name : "Fairy", source : [["UA:FotF", 2]], plural : "Fairies", size : 4, speed : { walk : { spd : 30, enc : 20 }, fly : { spd : "walk", enc : "walk" } }, languageProfs : ["Common", 1], scorestxt : "+2 to one ability score and +1 to a different score of my choice, -or- +1 to three different scores of my choice", spellcastingAbility : [4, 5, 6], spellcastingBonus : [{ name : "Fairy Magic", spells : ["druidcraft"], selection : ["druidcraft"], firstCol : "atwill" }], features : { "fairy magic" : { name : "Fairy Magic", minlevel : 1, spellcastingBonus : [{ name : "Fairy Magic", spells : ["faerie fire"], selection : ["faerie fire"], firstCol : 'oncelr', allowUpCasting : true }], extraLimitedFeatures : [{ name : "Faerie Fire", usages : 1, recovery : "long rest", altResource : "SS 1+" }] } }, trait : "Fairy"+ "\n \u2022 Fey: My creature type is fey, rather than humanoid."+ "\n \u2022 Fairy Flight: I have a magical flying speed equal to my walking speed and can hover."+ "\n \u2022 Fairy Magic: I know the Druidcraft and Faerie Fire spells, and can cast the latter without using a spell slot once per long rest, as well as using slots as normal."+ "\n \u2022 Fey Passage: I can squeeze through a space as narrow as 1 inch wide." }; RaceList["feywild hobgoblin-ua"] = { regExpSearch : /^(?=.*feywild)(?=.*hobgoblin).*$/i, name : "Feywild hobgoblin", sortname : "Hobgoblin, Feywild", source : [["UA:FotF", 2]], plural : "Feywild hobgoblins", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", 1], scorestxt : "+2 to one ability score and +1 to a different score of my choice, -or- +1 to three different scores of my choice", vision : [["Darkvision", 60]], savetxt : { adv_vs : ["charmed"] }, features : { "fey gift" : { name : "Fey Gift", minlevel : 1, usages : "Proficiency bonus per ", action : [["bonus action", " (Help action)"]], usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "fortune from the many" : { name : "Fortune from the Many", minlevel : 1, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "fey gift - additional effect" : { name : "Fey Gifts - Additional Effects", minlevel : 3, toNotesPage : [{ name : "Fey Gifts - Additional Effects", page3notes : true, note : [ "Whenever I take the Help action, I can choose one of the following effects:", " \u2022 Hospitality: The target and I each gain 1d6 + my Proficiency Bonus in temporary HP", " \u2022 Passage: The target and I gain +10 ft walking speed until my next turn starts", " \u2022 Spite: Enhances the first attack by the target or me that hits before my next turn starts", " The creature hit has disadvantage on its next attack roll it makes within the next minute" ] }] } }, trait : "Feywild hobgoblin"+ "\n \u2022 Fey Gift: I can take the Help action as a bonus action my Proficiency Bonus per long rest."+ "\n \u2022 Fortune from the Many: When I miss an attack or fail an ability check or a save, I can gain a bonus to the roll equal to the number of allies I can see within 30 ft of me (max +5). I can do this a number of times per long rest equal to my Proficiency Bonus."+ '\n \u2022 From 3rd-level onwards, whenever I take the Help action, I can choose to produce an additional effect: Hospitality, Passage, or Spite. See the 3rd page "Notes" section.' }; RaceList["owlfolk-ua"] = { regExpSearch : /owlfolk/i, name : "Owlfolk", source : [["UA:FotF", 3]], plural : "Owlfolk", size : [3, 4], speed : { walk : { spd : 30, enc : 20 }, fly : { spd : "walk", enc : "walk" } }, skills : ["Stealth"], vision : [["Darkvision", 90]], languageProfs : ["Common", 1], scorestxt : "+2 to one ability score and +1 to a different score of my choice, -or- +1 to three different scores of my choice", spellcastingAbility : [4, 5, 6], spellcastingBonus : [{ name : "Magic Sight", spells : ["detect magic"], selection : ["detect magic"] }], action : [["reaction", "Nimble Flight"]], trait : "Owlfolk"+ "\n \u2022 Magic Sight: I know the spell Detect Magic and can cast as a ritual or by using spell slots as normal."+ "\n \u2022 Nimble Flight: My wings give me a flying speed equal to my walking speed. As a reaction when I fall, I can make a Dexterity saving throw (DC 10) to stop falling and fly in place until the start of my next turn."+ "\n \u2022 Silent Feathers: I have proficiency in the Stealth skill." }; RaceList["rabbitfolk-ua"] = { regExpSearch : /rabbitfolk/i, name : "Rabbitfolk", source : [["UA:FotF", 3]], plural : "Rabbitfolk", size : [3, 4], speed : { walk : { spd : 30, enc : 20 }, }, skills : ["Perception"], addMod : [{ type : "skill", field : "Init", mod : "Prof", text : "I can add my proficiency bonus to initiative rolls." }], languageProfs : ["Common", 1], scorestxt : "+2 to one ability score and +1 to a different score of my choice, -or- +1 to three different scores of my choice", action : [["reaction", "Lucky Footwork"]], trait : "Rabbitfolk"+ "\n \u2022 Hare-Trigger: I add my proficiency bonus to initiative rolls."+ "\n \u2022 Leporine Senses: I have proficiency in the Perception skill."+ "\n \u2022 Lucky Footwork: As a reaction when I fail a Dexterity saving throw, I can add +1d4 to the result, potentially making it a success."+ "\n \u2022 Rabbit Hop: Once during each of my turns when I walk at least 5 ft, I can hop an extra 1d12 ft without it costing any extra movement. I can only do this if my speed isn't 0." }; // ua_20210414_Draconic-Options.js // This file adds the content from the Unearthed Arcana 2021: Draconic Options article to MPMB's Character Record Sheet // Define the source SourceList["UA:DO"] = { name : "Unearthed Arcana: Draconic Options", abbreviation : "UA:DO", group : "Unearthed Arcana", url : "https://media.wizards.com/2021/downloads/Unearthed-Arcana-2021-Draconic-Options.pdf", date : "2021/04/14" }; // Draconic Races var UADO_dragonborns_add = function () { // New dragonborn variants var objDragonborns = { Chromatic : { regExpSearch : /^(?=.*chromatic)(?=.*dragonborn).*$/i, source : [["UA:DO", 2]], variants : [["Black", "Acid"], ["Blue", "Lightning"], ["Green", "Poison"], ["Red", "Fire"], ["White", "Cold"]], breathWeaponShape : "5-ft by 30-ft line", trait : desc([ ">>TYPE<< Breath Weapon: When I take the Attack action, I can replace one attack with a breath weapon that deals 2d8 >>type<< damage to all in a 5-ft by 30-ft line, Dex save halves (DC 8 + Con mod + Proficiency Bonus). I can do this my Proficiency Bonus per long rest. The damage increases to 3d8 at 5th level, 4d8 at 11th level, and 5d8 at 17th level.", "Chromatic Warding: From 3rd level, I can protect myself using my draconic energies. As an action once per long rest, I can become immune to >>type<< damage for 10 minutes." ], "\n \u2022 "), features : { "chromatic warding" : { name : "Chromatic Warding", source : [["UA:DO", 2]], minlevel : 3, usages : 1, recovery : "long rest", action : [["action", ""]] } } }, Metallic : { regExpSearch : /^(?=.*metallic)(?=.*dragonborn).*$/i, source : [["UA:DO", 2]], variants : [["Brass", "Fire"], ["Bronze", "Lightning"], ["Copper", "Acid"], ["Gold", "Fire"], ["Silver", "Cold"]], breathWeaponShape : "15-ft cone", trait : desc([ ">>TYPE<< Breath Weapon: When I take the Attack action, I can replace one attack with a breath weapon that deals 2d8 >>type<< damage to all in a 15-ft cone, Dex save halves (DC 8 + Con mod + Proficiency Bonus). I can do this my Proficiency Bonus per long rest.", "Metallic Breath Weapon: At 3rd level I gain a second breath weapon once per long rest, that works just like the first. It doesn't deal damage, but I can choose one effect: Str save or pushed 20 ft and prone, or Con save or incapacitated until my next turn starts." ], "\n \u2022 "), features : { "metallic breath weapon" : { name : "Metallic Breath Weapon", source : [["UA:DO", 3]], minlevel : 3, usages : 1, recovery : "long rest", weaponOptions : [{ regExpSearch : /^(?=.*metallic)(?=.*breath)(?=.*weapon).*$/i, name : "Metallic breath weapon", source : [["UA:DO", 3]], ability : 3, type : 'Natural', damage : ['Str save or', '', 'Con save'], range : "15-ft cone", description : "Str save or pushed 20 ft and knocked prone -or- Con save or incapacitated until my next turn starts", abilitytodamage : false, dc : true, selectNow : true }] } } }, Gem : { regExpSearch : /^(?=.*gem)(?=.*dragonborn).*$/i, source : [["UA:DO", 3]], variants : [["Amethyst", "Force"], ["Crystal", "Radiant"], ["Emerald", "Psychic"], ["Sapphire", "Thunder"], ["Topaz", "Necrotic"]], breathWeaponShape : "15-ft cone", trait : desc([ ">>TYPE<< Breath Weapon: When I take the Attack action, I can replace one attack with a breath weapon that deals 2d8 >>type<< damage to all in a 15-ft cone, Dex save halves (DC 8 + Con mod + Proficiency Bonus). I can do this my Proficiency Bonus per long rest.", "Psionic Mind: I can speak telepathically to " + (typePF ? "any creature I can see within 30 ft that understands a language but it can't respond." : "a creature with a language I can see in 30 ft."), "Gem Flight: From 3rd level, I can temporarily fly. As a bonus action once per long rest, I can gain a flying speed equal to my walking speed and can hover. This lasts for 1 minute." ], "\n \u2022 "), features : { "gem flight" : { name : "Gem Flight", source : [["UA:DO", 3]], minlevel : 3, usages : 1, recovery : "long rest" } } } } for (var sDrBrn in objDragonborns) { var sDrBrnLC = sDrBrn.toLowerCase(); var oDrBrn = objDragonborns[sDrBrn]; RaceList[sDrBrnLC + " dragonborn-ua"] = { regExpSearch : oDrBrn.regExpSearch, name : sDrBrn + " Dragonborn", sortname : "Dragonborn, " + sDrBrn, source : oDrBrn.source, plural : sDrBrn + " Dragonborn", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", 1], weaponOptions : [{ regExpSearch : /^(?=.*breath)(?=.*weapon).*$/i, name : "Breath weapon", source : oDrBrn.source, ability : 3, type : 'Natural', damage : ['Q', 8, 'fire'], range : oDrBrn.breathWeaponShape.replace('by', '\xD7'), description : "Hits all in area; Dex save, success - half damage", abilitytodamage : false, dc : true, dbBreathWeapon : true, selectNow : true }], age : " reach adulthood by 15 and live around 80 years", height : " stand well over 6 feet tall (5'6\" + 2d8\")", weight : " weigh around 240 lb (175 + 2d8 \xD7 2d6 lb)", heightMetric : " stand well over 1,8 metres tall (170 + 5d8 cm)", weightMetric : " weigh around 110 kg (80 + 5d8 \xD7 4d6 / 10 kg)", scorestxt : "+2 to one ability score and +1 to a different score of my choice, -or- +1 to three different scores of my choice", trait : sDrBrn + " Dragonborn"+ "\n \u2022 " + sDrBrn + ' Ancestry: Choose a type of dragon using the "Racial Options" button. The damage type of my resistance and my breath weapon are determined by the dragon type chosen.'+ + oDrBrn.trait.replace(/>>type<< /ig, ""), features : { "breath weapon" : { name : "Breath Weapon", minlevel : 1, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", additional : levels.map(function (n) { return (n < 5 ? 2 : n < 11 ? 3 : n < 17 ? 4 : 5) + 'd8'; }), calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.dbBreathWeapon && (/dragonborn/i).test(CurrentRace.known) && CurrentRace.variant) { fields.Damage_Type = CurrentRace.dmgres[0]; } }, '', 1 ] } } }, variants : [] }; if (oDrBrn.features) { for (var sFea in oDrBrn.features) { RaceList[sDrBrnLC + " dragonborn-ua"].features[sFea] = oDrBrn.features[sFea]; } } for (var i = 0; i < oDrBrn.variants.length; i++) { var sDrBrnVar = oDrBrn.variants[i][0]; var sDrBrnDmg = oDrBrn.variants[i][1]; AddRacialVariant(sDrBrnLC + " dragonborn-ua", sDrBrnVar.toLowerCase(), { regExpSearch : RegExp(sDrBrnVar, "i"), name : sDrBrnVar + " " + sDrBrnLC + " dragonborn", trait : sDrBrnVar + " " + sDrBrnLC + " dragonborn"+ oDrBrn.trait.replace(/>>TYPE<>type<= 4 && CurrentFeats.known.indexOf("initiate of high sorcery-ua") !== -1 && !(/good/i).test(What("Alignment")); }, spellcastingBonus : [{ name : "2nd-level Evoc/Necro spell", "class" : "any", school : ["Evoc", "Necro"], level : [2, 2], firstCol : "oncelr+markedbox" }], spellcastingAbility : 4, allowUpCasting : true, choices : ["Intelligence", "Wisdom", "Charisma"], selfChoosing : function () { var iHghSrcyInit = CurrentFeats.known.indexOf("initiate of high sorcery-ua"); if (iHghSrcyInit !== -1 && CurrentFeats.choices[iHghSrcyInit]) { return CurrentFeats.choices[iHghSrcyInit].toString().split(" ")[0].charAt(0).toUpperCase() + CurrentFeats.choices[iHghSrcyInit].toString().split(" ")[0].slice(1); } }, "intelligence" : { description : "I learn one 2nd-level Evoc or Necro spell. I can cast this spell 1/LR w/out using a spell slot, and can cast it normally. Int is my ability for this spell. If creature I can see within 60 ft fails a save vs my spell I can spend HD equal to spell's level. I roll half that many HD and the creature takes that much additional damage.", spellcastingAbility : 4 }, "wisdom" : { description : "I learn one 2nd-level Evoc or Necro spell. I can cast this spell 1/LR w/out using a spell slot, and can cast it normally. Wis is my ability for this spell. If creature I can see within 60 ft fails a save vs my spell I can spend HD equal to spell's level. I roll half that many HD and the creature takes that much additional damage.", spellcastingAbility : 5 }, "charisma" : { description : "I learn one 2nd-level Evoc or Necro spell. I can cast this spell 1/LR w/out using a spell slot, and can cast it normally. Cha is my ability for this spell. If creature I can see within 60 ft fails a save vs my spell I can spend HD equal to spell's level. I roll half that many HD and the creature takes that much additional damage.", spellcastingAbility : 6 } }; FeatsList["adept of the red robes-ua"] = { name : "Adept of the Red Robes", source : [["UA:HoK", 5]], description : "I learn one 2nd-level Div or Trans spell. I can cast this spell 1/LR w/out using a spell slot, and can cast it normally. Int is my ability for this spell. If I roll less than a 10 on an atk, check, or save, I can use my reaction to treat it as a 10. I can do this a number of times equal to my proficiency bonus per long rest.", descriptionFull : "Your pursuit of truth and dedication to maintaining the balance between all things has been recognized by the Order of the Red Robes, granting you these benefits:\n" + toUni("Insightful Magic.") + " You learn one 2nd-level spell of your choice. The 2nd-level spell must be from the divination or transmutation school of magic. You can cast this feat's 2nd-level spell without a spell slot, and you must finish a long rest before you can cast it in this way again. You can also cast this spell using spell slots you have of the appropriate level. The spell's spellcasting ability is the one chosen when you gain the Initiate of High Sorcery feat.\n" + toUni("Magical Balance.") + " When you make an attack roll, an ability check, or a saving throw, and roll a 9 or lower on the d20, you can use your reaction to balance fate and treat the roll as a 10. you can use this reaction a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th level, Initiate of High Sorcery feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("initiate of high sorcery-ua") !== -1; }, spellcastingBonus : [{ name : "2nd-level Div/Trans spell", "class" : "any", school : ["Div", "Trans"], level : [2, 2], firstCol : "oncelr+markedbox" }], action : [["reaction", "Magical Balance"]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", spellcastingAbility : 4, allowUpCasting : true, choices : ["Intelligence", "Wisdom", "Charisma"], selfChoosing : function () { var iHghSrcyInit = CurrentFeats.known.indexOf("initiate of high sorcery-ua"); if (iHghSrcyInit !== -1 && CurrentFeats.choices[iHghSrcyInit]) { return CurrentFeats.choices[iHghSrcyInit].toString().split(" ")[0].charAt(0).toUpperCase() + CurrentFeats.choices[iHghSrcyInit].toString().split(" ")[0].slice(1); } }, "intelligence" : { description : "I learn one 2nd-level Div or Trans spell. I can cast this spell 1/LR w/out using a spell slot, and can cast it normally. Int is my ability for this spell. If I roll less than a 10 on an atk, check, or save, I can use my reaction to treat it as a 10. I can do this a number of times equal to my proficiency bonus per long rest.", spellcastingAbility : 4 }, "wisdom" : { description : "I learn one 2nd-level Div or Trans spell. I can cast this spell 1/LR w/out using a spell slot, and can cast it normally. Wis is my ability for this spell. If I roll less than a 10 on an atk, check, or save, I can use my reaction to treat it as a 10. I can do this a number of times equal to my proficiency bonus per long rest.", spellcastingAbility : 5 }, "charisma" : { description : "I learn one 2nd-level Div or Trans spell. I can cast this spell 1/LR w/out using a spell slot, and can cast it normally. Cha is my ability for this spell. If I roll less than a 10 on an atk, check, or save, I can use my reaction to treat it as a 10. I can do this a number of times equal to my proficiency bonus per long rest.", spellcastingAbility : 6 } }; FeatsList["adept of the white robes-ua"] = { name : "Adept of the White Robes", source : [["UA:HoK", 5]], description : "I learn one 2nd-level Abjur or Conj spell. I can cast this spell 1/LR w/out using a spell slot, and can cast it normally. Choose an ability for this spell. When a creature w/in 30 ft takes damage I can use a reaction to expend a spell slot and roll d4s equal to the spell's level and reduce the damage by that much + my SC ability mod.", descriptionFull : "Your oath to use magic to make the world a better place has been recognized by the Order of the White Robes, granting you these benefits:\n" + toUni("Protective Magic.") + " You learn one 2nd-level spell of you choice. The 2nd-level spell must be from the abjuration or conjuration school of magic. You can cast this feat's 2nd-level spell without a spell slot, and you must finish a long rest before you can cast it in this way again. You can also cast this spell using spell slots you have of the appropriate level. The spell's spellcasting ability is the one chosen when you gain the Initiate of High Sorcery feat.\n" + toUni("Protective Ward.") + " When you or a creature you can see within 30 feet of you takes damage, you can use your reaction to expend a spell slot and weave protective magic around the target. Roll a number of d4s equal to the level of the spell slot expended and reduce the damage the target takes by the total rolled on those dice + your spellcasting ability modifier.", prerequisite : "4th level, Initiate of High Sorcery feat, Any Non-Evil Alignment", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("initiate of high sorcery-ua") !== -1 && !(/evil/i).test(What("Alignment")); }, spellcastingBonus : [{ name : "2nd-level Abjur/Conj spell", "class" : "any", school : ["Abjur", "Conj"], level : [2, 2], firstCol : "oncelr+markedbox" }], spellcastingAbility : 4, allowUpCasting : true, choices : ["Intelligence", "Wisdom", "Charisma"], selfChoosing : function () { var iHghSrcyInit = CurrentFeats.known.indexOf("initiate of high sorcery-ua"); if (iHghSrcyInit !== -1 && CurrentFeats.choices[iHghSrcyInit]) { return CurrentFeats.choices[iHghSrcyInit].toString().split(" ")[0].charAt(0).toUpperCase() + CurrentFeats.choices[iHghSrcyInit].toString().split(" ")[0].slice(1); } }, "intelligence" : { description : "I learn one 2nd-level Abjur or Conj spell. I can cast this spell 1/LR w/out using a spell slot, and can cast it normally. Int is my ability for this spell. When a creature w/in 30 ft takes damage I can use a reaction to expend a spell slot and roll d4s equal to the spell's level and reduce the damage by that much + my SC ability mod.", spellcastingAbility : 4 }, "wisdom" : { description : "I learn one 2nd-level Abjur or Conj spell. I can cast this spell 1/LR w/out using a spell slot, and can cast it normally. Wis is my ability for this spell. When a crea w/in 30 ft takes dmg I can use a reaction to expend a spell slot and roll d4s equal to the spell's level and reduce the dmg by that much + my SC ability mod.", spellcastingAbility : 5 }, "charisma" : { description : "I learn one 2nd-level Abjur or Conj spell. I can cast this spell 1/LR w/out using a spell slot, and can cast it normally. Cha is my ability for this spell. When a crea w/in 30 ft takes dmg I can use a reaction to expend a spell slot and roll d4s equal to the spell's level and reduce the dmg by that much + my SC ability mod.", spellcastingAbility : 6 } }; // Feat tree for Divinely Favored FeatsList["divinely favored-ua"] = { name : "Divinely Favored", source : [["UA:HoK", 5]], description : "I learn Thaumaturgy and one 1st-level spell based on my alignment. I can cast the 1st level spell once per long rest without a spell slot, and I can cast it normally. I choose Int, Wis, or Cha as my spellcasting ability for this. I can use a holy symbol as a spellcasting focus for any spells that use the chosen ability.", descriptionFull : "A god has chosen you to carry a spark of their divine power.\n You learn the thaumaturgy cantrip and one 1st-level spell based on the alignment of your character, as specified in the Alignment Spells table.\n You can cast the chosen 1st-level spell without a spell slot, and you must finish a long rest before you can cast it in this way again. You can also cast the spell using any spell slots you have.\n Your spellcasting ability for this feat's spells is Intelligence, Wisdom, or Charisma (choose when you select this feat).\n\n" + toUni("Alignment Spells") + "\n" + toUni("Alignment") + " " + toUni("1st-level Spell") + "\nEvil\t Choose one 1st level warlock or wizard spell.\nGood\t Choose one 1st-level cleric or wizard spell.\nNeutral\t Choose one 1st-level druid or wizard spell.\n\n In addition, you can use a holy symbol as a spellcasting focus for any spell you cast that uses the spellcasting ability you choose when you select this feat.", choices : ["Intelligence - Good", "Intelligence - Neutral", "Intelligence - Evil", "Wisdom - Good", "Wisdom - Neutral", "Wisdom - Evil", "Charisma - Good", "Charisma - Neutral", "Charisma - Evil"], // nine choices, one for each alignment and ability pair "intelligence - good" : { description : "I learn Thaumaturgy and one 1st-level cleric or wizard spell. I can cast the 1st level spell once per long rest without a spell slot, and I can cast it normally. Intelligence is my spellcasting ability for these spells. I can use a holy symbol as a spellcasting focus for all my spells that use Intelligence.", allowUpCasting : true, spellcastingAbility : 4, spellcastingBonus : [{ name : "Thaumaturgy", spells : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : "atwill" }, { name : "1st-level Cleric/Wizard Spell", "class" : ["cleric", "wizard"], level : [1, 1], firstCol : "oncelr+markedbox" }] }, "intelligence - neutral" : { description : "I learn Thaumaturgy and one 1st-level druid or wizard spell. I can cast the 1st level spell once per long rest without a spell slot, and I can cast it normally. Intelligence is my spellcasting ability for these spells. I can use a holy symbol as a spellcasting focus for all my spells that use Intelligence.", allowUpCasting : true, spellcastingAbility : 4, spellcastingBonus : [{ name : "Thaumaturgy", spells : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : "atwill" }, { name : "1st-level Druid/Wizard Spell", "class" : ["druid", "wizard"], level : [1, 1], firstCol : "oncelr+markedbox" }] }, "intelligence - evil" : { description : "I learn Thaumaturgy and one 1st-level warlock or wizard spell. I can cast the 1st level spell once per long rest without a spell slot, and I can cast it normally. Intelligence is my spellcasting ability for these spells. I can use a holy symbol as a spellcasting focus for all my spells that use Intelligence.", allowUpCasting : true, spellcastingAbility : 4, spellcastingBonus : [{ name : "Thaumaturgy", spells : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : "atwill" }, { name : "1st-level Warlock/Wizard Spell", "class" : ["warlock", "wizard"], level : [1, 1], firstCol : "oncelr+markedbox" }] }, "wisdom - good" : { description : "I learn Thaumaturgy and one 1st-level cleric or wizard spell. I can cast the 1st level spell once per long rest without a spell slot, and I can cast it normally. Wisdom is my spellcasting ability for these spells. I can use a holy symbol as a spellcasting focus for all my spells that use Wisdom.", allowUpCasting : true, spellcastingAbility : 5, spellcastingBonus : [{ name : "Thaumaturgy", spells : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : "atwill" }, { name : "1st-level Cleric/Wizard Spell", "class" : ["cleric", "wizard"], level : [1, 1], firstCol : "oncelr+markedbox" }] }, "wisdom - neutral" : { description : "I learn Thaumaturgy and one 1st-level druid or wizard spell. I can cast the 1st level spell once per long rest without a spell slot, and I can cast it normally. Wisdom is my spellcasting ability for these spells. I can use a holy symbol as a spellcasting focus for all my spells that use Wisdom.", allowUpCasting : true, spellcastingAbility : 5, spellcastingBonus : [{ name : "Thaumaturgy", spells : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : "atwill" }, { name : "1st-level Druid/Wizard Spell", "class" : ["druid", "wizard"], level : [1, 1], firstCol : "oncelr+markedbox" }] }, "wisdom - evil" : { description : "I learn Thaumaturgy and one 1st-level warlock or wizard spell. I can cast the 1st level spell once per long rest without a spell slot, and I can cast it normally. Wisdom is my spellcasting ability for these spells. I can use a holy symbol as a spellcasting focus for all my spells that use Wisdom.", allowUpCasting : true, spellcastingAbility : 5, spellcastingBonus : [{ name : "Thaumaturgy", spells : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : "atwill" }, { name : "1st-level Warlock/Wizard Spell", "class" : ["warlock", "wizard"], level : [1, 1], firstCol : "oncelr+markedbox" }] }, "charisma - good" : { description : "I learn Thaumaturgy and one 1st-level cleric or wizard spell. I can cast the 1st level spell once per long rest without a spell slot, and I can cast it normally. Charisma is my spellcasting ability for these spells. I can use a holy symbol as a spellcasting focus for all my spells that use Charisma.", allowUpCasting : true, spellcastingAbility : 6, spellcastingBonus : [{ name : "Thaumaturgy", spells : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : "atwill" }, { name : "1st-level Cleric/Wizard Spell", "class" : ["cleric", "wizard"], level : [1, 1], firstCol : "oncelr+markedbox" }] }, "charisma - neutral" : { description : "I learn Thaumaturgy and one 1st-level druid or wizard spell. I can cast the 1st level spell once per long rest without a spell slot, and I can cast it normally. Charisma is my spellcasting ability for these spells. I can use a holy symbol as a spellcasting focus for all my spells that use Charisma.", allowUpCasting : true, spellcastingAbility : 6, spellcastingBonus : [{ name : "Thaumaturgy", spells : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : "atwill" }, { name : "1st-level Druid/Wizard Spell", "class" : ["druid", "wizard"], level : [1, 1], firstCol : "oncelr+markedbox" }] }, "charisma - evil" : { description : "I learn Thaumaturgy and one 1st-level warlock or wizard spell. I can cast the 1st level spell once per long rest without a spell slot, and I can cast it normally. Charisma is my spellcasting ability for these spells. I can use a holy symbol as a spellcasting focus for all my spells that use Charisma.", allowUpCasting : true, spellcastingAbility : 6, spellcastingBonus : [{ name : "Thaumaturgy", spells : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : "atwill" }, { name : "1st-level Warlock/Wizard Spell", "class" : ["warlock", "wizard"], level : [1, 1], firstCol : "oncelr+markedbox" }] } }; FeatsList["divine communications-ua"] = { name : "Divine Communications", source : [["UA:HoK", 5]], description : "I learn Augury and Commune. I can cast these spells without a spell slot, then must wait 1d4 long rests before doing so again, and I can cast it normally. My chosen ability from Divinely Favored is my spellcasting ability for these spells", descriptionFull : "Your connection to your god deepens, granting you these benefits:\n" + toUni("Ability Score Increase.") + " Increase the ability score of the spellcasting ability chosen when you gained the Divinely Favored feat by 1, to a maximum of 20.\n" + toUni("Celestial Tongues.") + " You learn to speak, read, and write Celestial, and two other languages of your choice.\n" + toUni("Divine Omens.") + " You can cast the augury and commune spell without a spell slot, and you must finish 1d4 long rests before you can cast it in this way again. You can also cast the spell using the spell slots you have of the appropriate level. The spell's spellcasting ability is the one chosen when you gained the Divinely Favored feat.", prerequisite : "4th level, Divinely Favored feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("divinely favored-ua") !== -1; }, languageProfs : ["Celestial", 2], spellcastingBonus : [{ name : "Augury and Commune", spells : ["augury", "commune"], selection : ["augury", "commune"], times : 2 }], choices : ["Intelligence", "Wisdom", "Charisma"], selfChoosing : function () { // extract just the ability from the divinely favored choices var iDvnFav = CurrentFeats.known.indexOf("divinely favored-ua"); if (iDvnFav !== -1 && CurrentFeats.choices[iDvnFav]) { return CurrentFeats.choices[iDvnFav].toString().split(" ")[0].charAt(0).toUpperCase() + CurrentFeats.choices[iDvnFav].toString().split(" ")[0].slice(1); } }, "intelligence" : { description : "I learn Augury and Commune. I can cast these spells without a spell slot, then must wait 1d4 long rests before doing so again, and I can cast it normally. Intelligence is my spellcasting ability for these spells", spellcastingAbility : 4, scores : [0, 0, 0, 1, 0, 0] }, "wisdom" : { description : "I learn Augury and Commune. I can cast these spells without a spell slot, then must wait 1d4 long rests before doing so again, and I can cast it normally. Wisdom is my spellcasting ability for these spells", spellcastingAbility : 5, scores : [0, 0, 0, 0, 1, 0] }, "charisma" : { description : "I learn Augury and Commune. I can cast these spells without a spell slot, then must wait 1d4 long rests before doing so again, and I can cast it normally. Charisma is my spellcasting ability for these spells", spellcastingAbility : 6, scores : [0, 0, 0, 0, 0, 1] } }; // Feats tree for Squire of Solamnia FeatsList["squire of solamnia-ua"] = { name : "Squire of Solamnia", source : [["UA:HoK", 6]], description : "As a reaction once per long rest when I see another creature 30 ft make a save, I can give them advantage if they can hear and understand me. I gain proficiency with with medium armor and martial weapons. I have advantage on saves to avoid falling off a mount.", descriptionFull : "Your training in the ways of the Knights of Solamnia grants you these benefits:\n" + toUni("Martial Training.") + " You gain proficiency with medium armor and martial weapons.\n" + toUni("Defensive Rider.") + " You have advantage on saving throws made to avoid falling off a mount.\n" + toUni("Encouraging Rally.") + " When another creature you can see within 30 feet of you makes a saving throw, you can use your reaction to inspire them. If the target can hear you and understands you, it gains advantage on the saving throw. Once you use this reaction, you can't do so again until you finish a long rest.", prerequisite : "Squireship in the Knights of Solamnia", armorProfs : [false, true, false, false], weaponProfs : [false, true], savetxt : { adv_vs : ["falling off a mount"]}, action : [["reaction", "Encouraging Rally (Squire of Solamnia)"]], extraLimitedFeatures : [{ name : "Encouraging Rally (Squire of Solamnia)", usages : 1, recovery : "long rest" }] }; FeatsList["knight of the crown-ua"] = { name : "Knight of the Crown", source : [["UA:HoK", 6]], description : "When a creature within 30 ft makes an attack roll against another creature within 5 ft, I can use my reaction to grant advantage on the attack roll. I can do this a number of times equal to my Proficiency Bonus and regain all expended uses when I finish a long rest.", descriptionFull : "You are a Knight of Solamnia aligned with the Order of the Crown, a group that extols the virtues of cooperation, loyalty, and obedience. You excel in group combat and gain these benefits:\n" + toUni("Ability Score Increase.") + " Increase your Strength or Dexterity score by 1, to a maximum of 20.\n" + toUni("Tactical Teamwork.") + " When a creature you can see within 30 feet of you makes an attack roll against another creature that is within 5 feet of you, you can use your reaction to grant advantage on the attack roll. You can use this reaction a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th level, Squire of Solamnia feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("squire of solamnia-ua") !== -1; }, scorestxt : "+1 Strength or Dexterity", action : [["reaction", "Tactical Teamwork (Knight of the Crown)"]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }; FeatsList["knight of the sword-ua"] = { name : "Knight of the Sword", source : [["UA:HoK", 6]], description : "I gain proficiency in the chosen ability saving throw. After I or a creature I can see within 30 feet fails an Int, Wis, or Cha save, I can expend a HD. I roll that die and increase the save by that much. Once I change a fail into a success, I can't do so again until a long rest.", descriptionFull : "You are a Knight of Solamnia aligned with the Order of the Sword, a group devoted to heroism and courage. Bravery steels your spirit, granting you these benefits:\n" + toUni("Disciplined Spirit.") + " You gain proficiency in Intelligence, Wisdom, or Charisma saving throws (your choice when you take this feat).\n" + toUni("Willpower.") + " Immediately after you or a creature you can see within 30 feet of you fail an Intelligence, Wisdom, or Charisma saving throw, you can expend a Hit Die. The saving throw increases by an amount equal to a roll of that Hit Die, potentially turning a failure into a success. Once you turn a failed saving throw into a successful one using this feat, you can't do so again until you finish a long rest.", prerequisite : "4th level, Squire of Solamnia feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("squire of solamnia-ua") !== -1; }, choices : ["Intelligence", "Wisdom", "Charisma"], "intelligence" : { saves : ["Int"] }, "wisdom" : { saves : ["Wis"] }, "charisma" : { saves : ["Cha"] }, usages : 1, recovery : "long rest" }; FeatsList["knight of the rose-ua"] = { name : "Knight of the Rose", source : [["UA:HoK", 6]], description : "When I roll initiative I can choose up to 3 other creatures I can see within 30 ft. They gain temp HP equal to a roll of my HD + my proficiency bonus + the modifier of the score increased by this feat. I can do this a number of times equal to my Proficiency Bonus and regain all expended uses when I finish a long rest.", descriptionFull : "You are a Knight of Solamnia aligned with the Order of the Rose, a group known for leadership, justice, and wisdom. Your resolve grants you these benefits:\n" + toUni("Ability Score Increase.") + " Increase your Constitution or Charisma score by 1, to a maximum of 20.\n" + toUni("Bolstering Rally.") + " When you roll initiative, you can choose up to three other creatures you can see within 30 feet of you. Each creature can gain temporary hit points equal to a roll of your Hit Die + your proficiency bonus + the ability modifier of the ability score increased by this feat. You can use this feature a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th level, Squire of Solamnia feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("squire of solamnia-ua") !== -1; }, scorestxt : "+1 Constitution or Charisma", choices : ["Constitution", "Charisma"], "constitution" : { description : "When I roll initiative I can choose up to 3 other creatures I can see within 30 ft. They gain temp HP equal to a roll of my HD + my proficiency bonus + my Constitution modifier. I can do this a number of times equal to my Proficiency Bonus and regain all expended uses when I finish a long rest.", scores : [0, 0, 1, 0, 0, 0] }, "charisma" : { description : "When I roll initiative I can choose up to 3 other creatures I can see within 30 ft. They gain temp HP equal to a roll of my HD + my proficiency bonus + my Charisma modifier. I can do this a number of times equal to my Proficiency Bonus and regain all expended uses when I finish a long rest.", scores : [0, 0, 0, 0, 0, 1] }, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }; // This file adds the content from the Unearthed Arcana 2022: Heroes of Krynn Revisited article to MPMB's Character Record Sheet // Contains contributions by Thravieus Windhelm / PoetOfGod (GitHub) / @PoetOfGod#6077 (Discord) // ua_20220425_Heroes-of-Krynn-Revisited.js SourceList["UA:HoKR"] = { name : "Unearthed Arcana: Heroes of Krynn Revisited", abbreviation : "UA:HoKR", group : "Unearthed Arcana", url : "https://media.wizards.com/2022/dnd/downloads/UA2022-HeroesofKrynnRevisited.pdf", date : "2022/04/25" }; RaceList["kender-ua2"] = { regExpSearch : /kender/i, name : "Kender", source : [["UA:HoKR", 1]], plural : "Kender", size : 4, speed : { walk : { spd : 30, enc : 20 } }, scoresGeneric : true, savetxt : { immune : ["frightened"]}, skillstxt : "Choose one from Insight, Investigation, Sleight of Hand, Stealth, or Survival", abilitySave : [4, 5, 6], features : { "taunt" : { name : "Taunt", minlevel : 1, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", action : [["bonus action", ""]] } }, trait : "Kender"+ "\n \u2022 Fearless: I am immune to the frightened condition."+ "\n \u2022 Taunt: As a bonus action, I can taunt a creature within 60 ft of me that can hear and understand me. They must make a Wisdom saving throw or have disadvantage on attack rolls not made against me until the start of my next turn. I can do this a number of times per long rest equal to my proficiency bonus. The DC equals 8 + proficiency bonus + Intelligence, Wisdom, or Charisma modifier (one-time choice)." }; // Feats tree for Squire of Solamnia var UA_HoKR_KnightlyManeuvers_Notes = function (n) { // Get the name, source, and description from the maneuver of the Battle Master subclass, if that subclass is present if (ClassSubList["fighter-battle master"] && ClassSubList["fighter-battle master"].features["subclassfeature3.1"] && ClassSubList["fighter-battle master"].features["subclassfeature3.1"][n]) { var sourceObj = ClassSubList["fighter-battle master"].features["subclassfeature3.1"][n]; } else { // Subclass or maneuver not found, thus only add the name var sourceObj = { name : n.capitalize(), source : [["P", 74]], description : "" }; } return { name : sourceObj.name, source : sourceObj.source, note : sourceObj.description, page3notes : true, additional : "Knightly Maneuver" }; }; FeatsList["squire of solamnia-ua2"] = { name : "Squire of Solamnia", source : [["UA:HoKR", 5]], description : "Mounting/dismounting costs a 5-ft move. I learn one Knightly Maneuver: Lunging Attack, Precision Attack, or Pushing Attack. I can change which I know after each long rest. The DC is 8 + Prof B + Str or Dex mod (my choice). I gain Prof Bonus of Superiority Dice (d6) to use with these, regaining them after a long rest.", calculate : "event.value = 'Mounting/dismounting costs a 5-ft move. I learn one Knightly Maneuver: Lunging Attack, Precision Attack, or Pushing Attack. DC is ' + (8 + Number(How('Proficiency Bonus')) + Math.max(Number(What('Str Mod')), Number(What('Dex Mod')))) + ' (8 + Prof Bonus + Str/Dex mod). I can change which I know after each long rest. I gain Prof Bonus of Superiority Dice (d6) to use with these, regaining them after a long rest.';", descriptionFull : "Your training in the ways of the Knights of Solamnia grants you these benefits:"+ "\n " + toUni("Mount Up") + ". Mounting or dismounting costs you only 5 feet of movement."+ "\n " + toUni("Squire Maneuvers") + ". You learn the Lunging Attack, Precision Attack, or Pushing Attack maneuver from the Battle Master subclass of the fighter in the Player's Handbook (choose the maneuver when you gain this feat). If the maneuver requires a saving throw, the save's DC equals 8 + your proficiency bonus + your Strength or Dexterity modifier (your choice). Whenever you finish a long rest, you can replace the maneuver you learned from this feat with another one from the list above."+ "\n " + toUni("Superiority Dice") + ". You gain a number of superiority dice equal to your proficiency bonus. These dice are d6s, and you can use them only with the maneuver you gain from this feat and with any maneuvers you gain from feats that have this feat as a prerequisite. A superiority die is expended when you use it, and you regain all expended superiority dice when you finish a long rest.", prerequisite : "Fighter or Paladin Class or Knight of Solamnia Background", prereqeval : function (v) { return classes.known.fighter || classes.known.paladin || CurrentBackground.known.indexOf('knight of solamnia') !== -1; }, limfeaname : "Knightly Superiority Dice", usages : "Proficiency bonus per ", usagescalc : "var total = CurrentFeats.known.indexOf('squire of solamnia-ua2') === -1 ? 0 : Number(How('Proficiency Bonus')); for (var i = 0; i < CurrentFeats.known.length; i++) { var oFeat = FeatsList[CurrentFeats.known[i]]; if (oFeat && oFeat.knightlySuperiority && oFeat.knightlySuperiority.use) { total += oFeat.knightlySuperiority.use; }; }; event.value = total;", // complex because it works for all feats recovery : "long rest", additional : 'd6', knightlySuperiority : { die : 6, prereq : true }, toNotesPage : ["lunging attack", "precision attack", "pushing attack"].map(UA_HoKR_KnightlyManeuvers_Notes) }; FeatsList["knight of the crown-ua2"] = { name : "Knight of the Crown", source : [["UA:HoKR", 5]], description : "I learn one extra Knightly Maneuver: Distracting Strike or Goading Attack. I can change which one of these I know after each long rest. I gain two extra Knightly Superiority Dice and the dice become d8s. [+1 Strength or Dexterity]", descriptionFull : "You are a Knight of Solamnia aligned with the Order of the Crown, a group that extols the virtues of cooperation, loyalty, and obedience. You excel in group combat and gain these benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase your Strength or Dexterity score by 1, to a maximum of 20."+ "\n " + toUni("Crown Maneuvers") + ". You learn the Distracting Strike or the Goading Attack maneuver from the Battle Master subclass of the fighter in the Player's Handbook (choose the maneuver when you gain this feat). If the maneuver requires a saving throw, the save's DC equals 8 + your proficiency bonus + your Strength or Dexterity modifier (your choice). Whenever you finish a long rest, you can replace the maneuver you learned from this feat with the other maneuver offered by it."+ "\n " + toUni("Superiority Dice") + ". You gain two superiority dice, which you add to the dice you have from the Squire of Solamnia feat. All the dice are now d8s.", prerequisite : "4th level, Squire of Solamnia feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("squire of solamnia-ua2") !== -1; }, scorestxt : "+1 Strength or Dexterity", knightlySuperiority : { die : 8, use : 2 }, toNotesPage : ["distracting strike", "goading attack"].map(UA_HoKR_KnightlyManeuvers_Notes) }; FeatsList["knight of the sword-ua2"] = { name : "Knight of the Sword", source : [["UA:HoKR", 5]], description : "I learn one extra Knightly Maneuver: Maneuvering Attack or Menacing Attack. I can change which one of these I know after each long rest. I gain two extra Knightly Superiority Dice and the dice become d8s. [+1 Intelligence, Wisdom, or Charisma]", descriptionFull : "You are a Knight of Solamnia aligned with the Order of the Sword, a group devoted to heroism and courage. Bravery steels your spirit, granting you these benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase your Intelligence, Wisdom, or Charisma score by 1, to a maximum of 20."+ "\n " + toUni("Sword Maneuvers") + ". You learn the Maneuvering Attack or the Menacing Attack maneuver from the Battle Master subclass of the fighter in the Player's Handbook (choose the maneuver when you gain this feat). If the maneuver requires a saving throw, the save's DC equals 8 + your proficiency bonus + your Strength or Dexterity modifier (your choice). Whenever you finish a long rest, you can replace the maneuver you learned from this feat with the other maneuver offered by it."+ "\n " + toUni("Superiority Dice") + ". You gain two superiority dice, which you add to the dice you have from the Squire of Solamnia feat. All the dice are now d8s.", prerequisite : "4th level, Squire of Solamnia feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("squire of solamnia-ua2") !== -1; }, scorestxt : "+1 Intelligence, Wisdom, or Charisma", knightlySuperiority : { die : 8, use : 2 }, toNotesPage : ["maneuvering attack", "menacing attack"].map(UA_HoKR_KnightlyManeuvers_Notes) }; FeatsList["knight of the rose-ua2"] = { name : "Knight of the Rose", source : [["UA:HoKR", 5]], description : "I learn one extra Knightly Maneuver: Commander's Strike or Rally. I can change which one of these I know after each long rest. I gain two extra Knightly Superiority Dice and the dice become d8s. [+1 Constitution or Charisma]", descriptionFull : "You are a Knight of Solamnia aligned with the Order of the Rose, a group known for leadership, justice, and wisdom. Your resolve grants you these benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase your Constitution or Charisma score by 1, to a maximum of 20."+ "\n " + toUni("Rose Maneuvers") + ". You learn the Commander's Strike or Rally maneuver from the Battle Master subclass of the fighter in the Player's Handbook (choose the maneuver when you gain this feat). Whenever you finish a long rest, you can replace the maneuver you learned from this feat with the other maneuver offered by it."+ "\n " + toUni("Superiority Dice") + ". You gain two superiority dice, which you add to the dice you have from the Squire of Solamnia feat. All the dice are now d8s.", prerequisite : "4th level, Squire of Solamnia feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("squire of solamnia-ua2") !== -1; }, scorestxt : "+1 Constitution or Charisma", knightlySuperiority : { die : 8, use : 2 }, action : [ ["bonus action", "Commander's Strike (with Attack action)"], ["bonus action", "Rally"] ], toNotesPage : ["commander's strike", "rally"].map(UA_HoKR_KnightlyManeuvers_Notes) }; // This file adds the content from the Unearthed Arcana 2022: Giant Options article to MPMB's Character Record Sheet // Contains contributions by Thravieus Windhelm / PoetOfGod (GitHub) / @PoetOfGod#6077 (Discord) // ua_20220523_Giant-Options.js SourceList["UA:GO"] = { name : "Unearthed Arcana: Giant Options", abbreviation : "UA:GO", group : "Unearthed Arcana", url : "https://media.wizards.com/2022/dnd/downloads/UA2022-drjwf73f8n.pdf", date : "2022/05/23" }; AddSubClass("barbarian", "giant-ua", { regExpSearch : /^((?=.*(marauder|barbarian|viking|(norse|tribes?|clans?)(wo)?m(a|e)n))|((?=.*(warrior|fighter))(?=.*(feral|tribal))))(?=.*giant).*$/i, subname : "Path of the Giant", subnameShort: "Giant", source : [["UA:GO", 1]], abilitySave : 1, spellcastingAbility : 5, features : { "subclassfeature3" : { name : "Giant Power", source : [["UA:GO", 1]], minlevel : 3, description : desc("I learn Giant, and the Druidcraft or Thaumaturgy cantrip with Wis as spellcasting ability"), languageProfs : ["Giant"], spellcastingBonus : [{ name : "Giant Power", spells : ["druidcraft", "thaumaturgy"], firstCol : "atwill" }] }, "subclassfeature3.1" : { name : "Giant's Havoc", source : [["UA:GO", 1]], minlevel : 3, description : levels.map(function (n) { return desc([ "While raging, I add the bonus damage to ranged thrown weapon attacks that use Str,", "I gain +" + (n < 14 ? 5 : 10) + " ft reach, and I become " + (n < 14 ? 'Large' : 'Huge') + " along with what I'm wearing, if there is room" ]); }) }, "subclassfeature6" : { name : "Elemental Cleaver", source : [["UA:GO", 1]], minlevel : 6, description : levels.map(function (n) { return desc([ "When I rage, I can infuse a weapon I'm holding with acid, cold, fire, thunder, or lightning", "While raging, its damage type changes to the chosen type and it deals +" + (n < 14 ? 1 : 2) + "d6 damage,", "it gains the thrown (20/60 ft) property, and reappears instantly after a thrown attack", "As a bonus action, I can change the chosen type; The bonuses only function for me" ]); }), action : [["bonus action", " (change type)"]], calcChanges : { atkAdd : [ function (fields, v) { if ((v.isMeleeWeapon || v.isRangedWeapon) && classes.known.barbarian && classes.known.barbarian.level && /^(?=.*elemental)(?=.*cleaver).*$/i.test(v.WeaponTextName)) { fields.Damage_Type = "Varies"; var isThrownWeapon = /\bthrown\b/i.test(v.WeaponText); var extraDmg = classes.known.barbarian.level < 14 ? '+1d6 damage' : '+2d6 damage'; var extraProp = v.isRangedWeapon && !isThrownWeapon ? 'Thrown (20/60 ft), returning; ' : isThrownWeapon ? 'Returning; ' : 'Thrown, returning; '; var hasRange = /\d+ ?(f.{0,2}t|m)/i.test(fields.Range); if (!hasRange) { fields.Range += ', 20/60 ft'; } else if ((!v.isRangedWeapon || isThrownWeapon) && hasRange) { var rangeNmbr = fields.Range.match(/\d+([.,]\d+)?/g); if (rangeNmbr.length === 1) { var longRange = Number(rangeNmbr[0].replace(',', '.')); if (longRange < 60) tempRange = fields.Range.replace(longRange,"long_range"); } else { var shortRange = Number(rangeNmbr[0].replace(',', '.')); var longRange = Number(rangeNmbr[1].replace(',', '.')); tempRange = fields.Range; if (shortRange < 20) tempRange = tempRange.replace(shortRange,"short_range"); if (longRange < 60) tempRange = tempRange.replace(longRange,"long_range"); } fields.Range = tempRange.replace("short_range", 20).replace("long_range", 60); } fields.Description += (fields.Description ? '; ' : '') + extraProp + extraDmg; } }, "If I include the words 'Elemental Cleaver' in a weapon's name, the Elemental Cleaver infused weapon properties will be added to it and its damage type will be set to 'Acid'. Also, my Rage's bonus damage will be added to it if it is a melee weapon that uses Strength." ], atkCalc : [ function (fields, v, output) { if (v.isMeleeWeapon && fields.Mod === 1 && classes.known.barbarian && classes.known.barbarian.level && /^(?!.*\brage\b)(?=.*elemental)(?=.*cleaver).*$/i.test(v.WeaponTextName)) { output.extraDmg += classes.known.barbarian.level < 9 ? 2 : classes.known.barbarian.level < 16 ? 3 : 4; } }, "" ] } }, "subclassfeature10" : { name : "Mighty Impel", source : [["UA:GO", 1]], minlevel : 10, description : levels.map(function (n) { return " [DC 8 + Prof Bonus + Str mod]" + desc([ "As a bonus action while raging, I can hurl a " + (n < 14 ? 'Medium' : 'Large') + " or smaller creature within my reach", "I move it to an empty space I can see within 30 ft; Unwilling can save to avoid this", "If it doesn't end this movement on a surface that can support it, it falls and lands prone" ]); }), action : [["bonus action", ""]] }, "subclassfeature14" : { name : "Demiurgic Colossus", source : [["UA:GO", 1]], minlevel : 14, description : desc([ "While raging, my reach increases by 10 ft, and my size can increase to Huge", "Mighty Impel works on Large creatures; Elemental Cleaver increases to +2d6 damage", ]) } } }); AddSubClass("druid", "circle of the primeval-ua", { regExpSearch : /^(?=.*(druid|shaman))(?=.*(primeval|behemoth)).*$/i, subname : "Circle of the Primeval", subnameShort: "Primeval", source : [["UA:GO", 2]], features : { "subclassfeature2" : { name : "Keeper of Old", source : [["UA:GO", 2]], minlevel : 2, description : desc("I gain proficiency in History; I can add d4 to my Intelligence (History) checks"), skills : ["History"] }, "subclassfeature2.1" : { name : "Primeval Companion", source : [["UA:GO", 2]], minlevel : 2, description : desc([ "As an action, I can expend a use of wild shape to summon a primeval companion", "The companion appears in an empty spot within 30 ft with the appearance of my choice", "It vanishes when reduced to 0 hit points, when I die, and when I summon another one" ]), action : [ ["action", "Summon Primeval Companion"], ["bonus action", "Command Primeval Companion"] ], creaturesAdd : [["Primeval Companion", true]], creatureOptions : [{ name : "Primeval Companion", source : [["UA:GO", 2]], size : 3, type : "Beast", alignment : "Neutral", ac : "11+Dex+Prof", hp : 20, hd : [2, 10], hdLinked : ["druid"], minlevelLinked : ["druid"], speed : "30 ft", scores : [15, 15, 17, 6, 12, 8], saves : ["", 4, 5, "", "", ""], senses : "Darkvision 60 ft", passivePerception : 11, languages : "Understands the languages of its summoner", challengeRating : "0", proficiencyBonus : 2, proficiencyBonusLinked : true, attacksAction : 1, attacks : [{ name : "Strike", ability : 1, damage : [1, 8, "bludgeoning"], modifiers : ["", "Prof"], range : "Melee (5 ft)", description : "My choice of bludgeoning, piercing, or slashing damage", abilitytodamage : false }], features : [{ name : "Primeval Companion", description : "The primeval companion obeys the commands of its summoner and shares its proficiency bonus. It takes its turn immediately after that of its summoner, on the same initiative. It can move and take reactions on its own, but only takes the Dodge action on its turn unless its summoner takes a bonus action to command it to take another action. If its summoner is incapacitated, the companion can take any action, not just Dodge. The companion vanishes when it is reduced to 0 hit points, when its summoner summons another companion, or when its summoner dies." }], traits : [{ name : "Intercept attack", description : "As a reaction when a creature the companion can see hits a target within 5 ft of the companion with an attack, the target instead takes half the damage. The companion takes the remainder of the damage" }, { name : "Prehistoric Conduit (Circle of the Primeval 6)", minlevel : 6, description : "Spells cast by the companion's summoner with a range other than self can originate from the companion instead. Also, the companion has advantage on saving throws against spells cast by its summoner. If the companion would normally take half damage on a successful save against these spells, instead, it takes no damage on a success and half and no other effects on a fail." }, { name : "Titanic Bond (Circle of the Primeval 10)", minlevel : 10, description : "The companion's size is now Large and it gains either a swimming or climbing speed equal to its walking speed.", eval : function(prefix, lvl) { PickDropdown(prefix + "Comp.Desc.Size", 2); // Large var sMoveStr = (typePF ? ",\n" : ", ") + "swim/climb 30 ft"; if (What("Unit System") === "metric") sMoveStr = ConvertToMetric(sMoveStr, 0.5); tDoc.getField(prefix + "Comp.Use.Speed").value += sMoveStr; }, removeeval : function(prefix, lvl) { PickDropdown(prefix + "Comp.Desc.Size", 3); // Medium var sMoveStr = (typePF ? ",\n" : ", ") + "swim or climb 30 ft"; if (What("Unit System") === "metric") sMoveStr = ConvertToMetric(sMoveStr, 0.5); Value(prefix + "Comp.Use.Speed", What(prefix + "Comp.Use.Speed").replace(sMoveStr, "")); } }], calcChanges : { hp : function (totalHD, HDobj, prefix) { if (!classes.known.druid) return; var drdLvl = classes.known.druid.level; var drdLvlM = 5 * drdLvl; HDobj.alt.push(10 + drdLvlM); HDobj.altStr.push(" = 10 as a base\n + 5 \xD7 " + drdLvl + " from five times its summoner's druid level (" + drdLvlM + ")"); }, setAltHp : true } }] }, "subclassfeature6" : { name : "Prehistoric Conduit", source : [["UA:GO", 2]], minlevel : 6, description : desc([ "Spells I cast with the range of touch can originate from my primeval companion", "The primeval companion has advantage on saving throws against my spells", "If the companion would take half damage on a successful save against a spell I cast,", "it instead takes no damage on a success and half damage and no other effects on a fail" ]) }, "subclassfeature10" : { name : "Titanic Bond", source : [["UA:GO", 2]], minlevel : 10, description : desc([ "My companion grows to Large; it gains a climb or swim speed equal to its walking speed", "When I hit an attack or spell damage a creature I can see, I can have it make a Wis save", "If failed, the target is frightened of me until the end of my next turn", "I can do this only while my primeval companion is summoned, and only once per turn" ]) }, "subclassfeature14" : { name : "Scourge of the Ancients", source : [["UA:GO", 3]], minlevel : 14, description : desc([ "When I use a bonus action to command my companion, I can expend a spell slot so that:", " \u2022 It becomes Huge if there is room, and gains 10 times the spell slot level in temp HP", " \u2022 On a hit, the companion's Strike deals an extra 1d8 + the spell slot level damage", " \u2022 Its walking (and climbing or swimming) speed increases with 5 ft per spell slot level", "These benefits last for 1 hour, until the companion vanishes, or until I use this again" ]) } } }); AddSubClass("wizard", "runecrafter-ua", { regExpSearch : /runecrafting|runecrafter/i, subname : "Tradition of Runecrafting", subnameShort: "Runecrafting", fullname : "Runecrafter", source : [["UA:GO", 3]], features : { "subclassfeature2" : { name : "Runes of Understanding", source : [["UA:GO", 3]], minlevel : 2, description : desc([ "I always have Comprehend Languages prepared and can cast it without using a spell slot", "It doesn't count against the number of spells I can prepare" ]), spellcastingBonus : [{ name : "Runes of Understanding", spells : ["comprehend languages"], selection : ["comprehend languages"], firstCol : "atwill" }] }, "subclassfeature2.1" : { name : "Runic Empowerment", source : [["UA:GO", 3]], minlevel : 2, description : desc([ "When I cast a spell using a spell slot, I can invoke one of the following runes:", " \u2022 Life Rune: Me or a creature I can see within 30 ft gains 5 temp HP per spell slot level", " \u2022 War Rune: A creature I can see within 30 ft is marked until the end of my next turn", " Attack rolls against it gain a bonus equal to half the spell slot level, rounded up", " \u2022 Wind Rune: Until my next turn starts, my speed increases by 5 ft per spell slot level", " Additionally, my movement doesn't provoke opportunity attacks" ]), usages : "Prof Bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature6" : { name : "Sigils of Warding", source : [["UA:GO", 3]], minlevel : 6, description : desc([ "As a reaction when I fail a Strength, Dexterity, or Constitution save, I can call on a rune", "I expend a use of my Runic Empowerment feature and succeed on the save instead" ]), action : [["reaction", ""]] }, "subclassfeature10" : { name : "Rune Maven", source : [["UA:GO", 3]], minlevel : 10, description : desc([ "Whenever I use Arcane Recovery, I also regain uses of Runic Empowerment", "I regain a number of uses equal to half my Intelligence modifier, rounded up (min 1)" ]) }, "subclassfeature14" : { name : "Engraved Enmity", source : [["UA:GO", 3]], minlevel : 14, description : desc([ "As a bonus action, I can have a creature I can see within 60 ft make a Wisdom save", "If failed, it is marked by an enmity rune for 1 min, or until I lose my concentration", "A glowing energy mote hovers over the marked and it suffers the following effects:", " \u2022 The marked has disadvantage on saving throws against spells I cast", " \u2022 The glow makes the marked visible even if invisible, and they can't become invisible", " \u2022 When marking and as a bonus action on subsequent turns, I can curse the creature", " The next time an ally hits the cursed with an attack, it also takes 1d8 force damage", "I can do this once per long rest, or by expending a 3rd-level or higher spell slot (SS 3+)" ]), recovery : "long rest", usages : 1, altResource : "SS 3+", action : [["bonus action", ""]] } } }); /* Feats All the below feats are the work of PoetOfGod and have not been double-checked by Safety-Orange, because the "Revised" article "Wonders of the Multiverse" has already been published, superseding all these feats with newer versions. */ FeatsList["elemental touched-ua"] = { name : "Elemental Touched", source : [["UA:GO", 4]], descriptionFull : "You've been exposed to the primordial magic of the Elemental Planes, granting you a measure of control over the natural world around you. You learn either the druidcraft or thaumaturgy cantrip, using Intelligence, Wisdom, or Charisma as the spellcasting ability (choose when you gain this feat).\n Whenever you finish a long rest, you can choose which element you are attuned to: Air, Earth, Fire, or Water. Depending on your choice, you can use a bonus action to cause one of the following effects:"+ "\n\n" + toUni("Air") + ". You gain a fly speed equal to your walking speed until the end of your turn. If you are airborne at the end of your turn after using this movement and aren't held aloft by other means, you fall."+ "\n" + toUni("Earth") + ". You cause the ground within 30 feet of you to become difficult terrain for 1 minute or until you create this effect again. During that time, you can move across ground that is difficult terrain without spending extra movement."+ "\n" + toUni("Fire") + ". You surround yourself in a cloud of ash and smoke. Until the end of your turn, your movement doesn't provoke opportunity attacks."+ "\n" + toUni("Water") + ". You can create a forceful surge of water directed at a creature within 15 feet of you that you can see. The creature must succeed on a Strength saving throw (which it can choose to fail) against a DC equal to 8 + your spellcasting ability modifier + your proficiency bonus or be pushed up to 10 feet away from you. The water vanishes immediately after the creature succeeds or fails."+ "\n\nYou can create this effect a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", description : "I learn druidcraft or thaumaturgy. End of a LR pick Air, Earth, Fire, Water, as a bns action: Air. Gain fly spd = to walk spd, fall at end of turn; Earth. 30 ft rad diff terr for 1 min, move freely through diff terr; Fire. No opp atks this turn; Water. 1 visible crea w/in 15 ft Str save DC 8 + SC mod + Prof or pushed 10 ft away. Prof Uses / LR.", spellcastingAbility : [4, 5, 6], action : [["bonus action", ""]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", choices : ["Druidcraft", "Thaumaturgy"], "druidcraft" : { description : "I learn druidcraft. End of a LR pick Air, Earth, Fire, Water, as a bns action: Air. Gain fly spd = to walk spd, fall at end of turn; Earth. 30 ft rad diff terr for 1 min, move freely through diff terr; Fire. No opp atks this turn; Water. 1 visible crea w/in 15 ft Str save DC 8 + SC mod + Prof or pushed 10 ft away. Prof Uses / LR.", spellcastingBonus : [{ name : "Elemental Touched", spells : ["druidcraft"], selection : ["druidcraft"] }] }, "thaumaturgy" : { description : "I learn thaumaturgy. End of a LR pick Air, Earth, Fire, Water, as a bns action: Air. Gain fly spd = to walk spd, fall at end of turn; Earth. 30 ft rad diff terr for 1 min, move freely through diff terr; Fire. No opp atks this turn; Water. 1 visible crea w/in 15 ft Str save DC 8 + SC mod + Prof or pushed 10 ft away. Prof Uses / LR.", spellcastingBonus : [{ name : "Elemental Touched", spells : ["thaumaturgy"], selection : ["thaumaturgy"] }] } }; FeatsList["outsized might-ua"] = { name : "Outsized Might", source : [["UA:GO", 5]], descriptionFull : "You have absorbed primeval magic that allows you, despite your relatively small stature, to embody the might of titanic creatures. This grants you the following benefits:"+ "\n\n" + toUni("Little but Mighty") + ". You gain proficiency in either the Athletics or Acrobatics skill."+ "\n" + toUni("Powerful Build") + ". You count as one size larger when determining your carrying capacity and the amount you can push, drag, or lift."+ "\n" + toUni("Stalwart") + ". You have advantage on saving throws against being moved or knocked prone.", description : "I gain proficiency in Athletics or Acrobatics. I count as one size larger when determining my carrying capacity and the amount I can push, drag, or lift. I have advantage on saving throws against being moved or knocked prone.", skillstxt : "Choose Athletics or Acrobatics", carryingCapacity : 2, savetxt : { adv_vs : ["moved", "prone"]} }; // X of the X Giant feats FeatsList["ember of the fire giant-ua"] = { name : "Ember of the Fire Giant", source : [["UA:GO", 4]], prerequisite : "8th level", prereqeval : function(v) { return v.characterLevel >= 8; }, descriptionFull : "You've manifested the fiery combat emblematic of fire giants, granting you the following benefits:"+ "\n\n" + toUni("Born of Flame") + ". You have resistance to fire damage."+ "\n" + toUni("Searing Ignition") + ". When you take the Attack action on your turn, you can replace one of your attacks with a magical burst of flame. Each creature of your choice within 15 feet of you that can see you must make a Dexterity saving throw (DC equals 8 + your proficiency bonus + your Constitution modifier). On a failed save, a creature takes fire damage equal to 2d6 + your proficiency bonus and is blinded until the start of your next turn; on a successful save, the creature takes half as much damage with no additional effects. You can use your Searing Ignition a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", description : "I gain resistance to fire damage. When I take the Attack action on my turn I can use an attack to instead make each creature I choose within 15 ft roll a Dex save DC 8 + Prof + Con mod. On a fail they take 2d6 + Prof Fire dmg, blinded until the start of my next turn. Success halves and no other effect. Prof Uses / LR.", action : [["action", "Searing Ignition (as Attack action)"]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", dmgres : ["Fire"] }; FeatsList["fury of the frost giant-ua"] = { name : "Fury of the Frost Giant", source : [["UA:GO", 4]], prerequisite : "4th level", prereqeval : function(v) { return v.characterLevel >= 4; }, descriptionFull : "You've manifested the icy might emblematic of frost giants, granting you the following benefits:"+ "\n\n" + toUni("Born of Ice") + ". You have resistance to cold damage."+ "\n" + toUni("Frigid Vengeance") + ". When a creature hits you with an attack roll, you can use your reaction to retaliate with a burst of magical ire. The creature must succeed on a Wisdom saving throw (DC equals 8 + your proficiency bonus + your Consitution modifier) or be frightened of you until the start of its next turn. You can use your reaction in this way a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", description : "I gain resistance to cold damage. When I am hit with an attack roll I can use my reaction to make them roll a Wis save DC 8 + Prof + Con mod. On a failure they are frightened until the start of their next turn. Prof Uses / LR.", action : [["reaction", "Frigid Vengeance"]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", dmgres : ["Cold"] }; FeatsList["guile of the cloud giant-ua"] = { name : "Guile of the Cloud Giant", source : [["UA:GO", 4]], prerequisite : "8th level", prereqeval : function(v) { return v.characterLevel >= 8; }, descriptionFull : "You've manifested the airy speech and magic emblematic of cloud giants, granting you the following benefits:"+ "\n\n" + toUni("Misty Form") + ". You can cast the blur spell without using a spell slot or material components. When you cast the spell in this way, the spell doesn't require you to maintain concentration on it. Once you cast the spell in this way, you can't do so again until you finish a long rest. You can also cast this spell in the normal way using spell slots you have of appropriate level."+ "\nIntelligence, Wisdom, or Charisma is your spellcasting ability for this feature (choose when you gain this feat)."+ "\n" + toUni("Silver Tongue") + ". You gain proficiency in either the Deception or Persuasion skill. Your proficiency bonus is doubled for any ability check you make using this skill.", description : "I gain proficiency and expertise in Deception or Persuasion. Once per long rest I can cast Blur without using a spell slot, material components, or concentration. I can also cast it normally with spell slots.", skillstxt : "Choose Deception or Persuasion. You also gain expertise with that skill", spellcastingAbility : [4, 5, 6], spellcastingBonus : [{ name : "Guile of the Cloud Giant", spells : ["blur"], selection : ["blur"], firstCol : "oncelr+markedbox", allowUpCasting : true }] }; FeatsList["keenness of the stone giant-ua"] = { name : "Keenness of the Stone Giant", source : [["UA:GO", 5]], prerequisite : "4th level", prereqeval : function(v) { return v.characterLevel >= 4; }, descriptionFull : "You've manifested the protection and spellcasting emblematic of stone giants, granting you the following benefits:"+ "\n\n" + toUni("Dreamer's Magic") + " You learn the detect thoughts spell and one 1st-level spell of your choice. The 1st-level spell must be from the abjuration or the divination school of magic. You can cast each of these spells without expending a spell slot. Once you cast either of these spells in this way, you can't cast that spell in this way again until you finish a long rest. You can also cast these spells using spell slots you have of the appropriate level."+ "\nIntelligence, Wisdom, or Charisma is your spellcasting ability for this feature (choose when you gain this feat)."+ "\n" + toUni("Mountain Sight") + ". You gain darkvision out to a range of 60 feet. If you already have darkvision from another source, its range increases by 30 feet", description : "I learn detect thoughts and a 1st level Abjur or Div spell. I can cast these without a spell slot once per long rest, or as normal. I gain 60 ft of Darkvision or if I already have darkvision I get an extra 30 feet of Darkvision.", spellcastingAbility : [4, 5, 6], spellcastingBonus : [{ name : "Keenness of the Stone Giant", spells : ["detect thoughts"], selection : ["detect thoughts"], firstCol : "oncelr+markedbox", allowUpCasting : true }, { name : "1st-level Abjur/Div spell", "class" : "any", school : ["Abjur", "Div"], level : [1, 1], firstCol : "oncelr+markedbox", allowUpCasting : true }], vision : [["Darkvision", "fixed 60"], ["Darkvision", "+30"]] }; FeatsList["soul of the storm giant-ua"] = { name : "Soul of the Storm Giant", source : [["UA:GO", 5]], prerequisite : "8th level", prereqeval : function(v) { return v.characterLevel >= 8; }, descriptionFull : "You've manifested divination abilities and tempest magic emblematic of storm giants, granting you the following benefits:"+ "\n\n" + toUni("Maelstrom Aura") + ". As a bonus action, you surround yourself in an aura of magical wind and lightning that extends 10 feet from you in every direction but not through total cover. The aura lasts for 1 minute or until you are incapacitated. While the aura is active, attack rolls against you have disadvantage, and whenever a creature starts its turn within the sphere, you can force the creature's speed to be halved until the start of its next turn. Once you use this bonus action, you can't do so again until you finish a long rest."+ "\n" + toUni("Storm's Oracle") + ". You can cast the divination spell as a ritual, without needing amterial components.\n Intelligence, Wisdom, or Charisma is your spellcasting ability for this feature (choose when you gain this feat). Once you cast the spell in this way, you can't do so again until you finish a long rest.", description : "I learn Divination and can cast it once per long rest as a ritual without using a spell slot or materials. Once per long rest as a bonus action I create a 10 ft rad that lasts for 1 min or until I am incapacitated. Atks against me have disadv, when creas start their turn in the area I can halve their spd until their next turn.", action : [["bonus action", "Maelstrom Aura"]], usages : 1, recovery : "long rest", spellcastingAbility : [4, 5, 6], spellcastingBonus : [{ name : "Storm's Oracle", spells : ["divination"], selection : ["divination"], firstCol : "oncelr" }], spellChanges : { "divination" : { components : "V,S", compMaterial : "" } } }; FeatsList["vigor of the hill giant-ua"] = { name : "Vigor of the Hill Giant", source : [["UA:GO", 5]], prerequisite : "4th level", prereqeval : function(v) { return v.characterLevel >= 4; }, descriptionFull : "You've manifested the resilience emblematic of hill giants, granting you the following benefits:"+ "\n\n" + toUni("Bulwark") + ". When you are subjected to an effect that would move you at least 5 feet or knock you prone, you can use your reaction to steady yourself. You are then neither moved nor knocked prone."+ "\n" + toUni("Hearty Health") + ". When you are subjected to a spell that restores your hit points, you can regain additional hit points equal to your Constitution modifier. You can regain these additional hit points a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", description : "When I would be moved or knocked prone I can use my reaction to not. When I would restore hit points from a spell I can regain an additional Con mod hit points, I can regain hit points this way Prof Uses / LR.", action : [["reaction", "Bulwark"]] }; // Rune Carver Apprentice feat tree FeatsList["rune carver apprentice-ua"] = { name : "Rune Carver Apprentice", source : [["UA:GO", 5]], descriptionFull : "You've begun studying the art of runecraft, which allows you to temporarily mark your items and imbue them with magic."+ "\n Whenever you finish a long rest, you can mark one nonmagical weapon, armor, piece of clothing, or other object you can touch with a rune of your choice. You temporarily learn one 1st-level spell based on the rune you choose, as specified in the table below, and you know the spell until you finish a long rest, when the rune fades."+ "\n\n" + toUni("Rune\tSpell")+ "\nBlood\tFalse life"+ "\nCloud\tFog cloud"+ "\nDeath\tRay of sickness"+ "\nDragon\tChromatic orb"+ "\nEnemy\tBane"+ "\nFire\tBurning hands"+ "\nFriend\tBless"+ "\nFrost\tArmor of Agathys"+ "\nHill\tGoodberry"+ "\nJourney\tLongstrider"+ "\nKing\tCommand"+ "\nLight\tGuiding bolt"+ "\nLife\tCure wounds"+ "\nMountain\tJump"+ "\nShield\tShield"+ "\nStone\tSanctuary"+ "\nStorm\tThunderwave"+ "\nWar\tHeroism"+ "\nWind\tFeather fall"+ "\n\nWhile you are wearing or carrying the rune-marked object, you can cast the chosen spell associated with the rune once without using a spell slot or material components, and you can also cast the spell using any spell slots you have."+ "\n Your spellcasting ability for this feat is Intelligence, Wisdom, or Charisma (choose when you gain this feat).", description : "At the end of a long rest, I can mark a nonmagical object I can touch with a rune. I learn a 1st-level spell until I finish a long rest when the rune fades. While wearing or carrying the object I can cast the spell once without using a spell slot or material components, or as normal.", spellcastingAbility : [4, 5, 6], spellcastingBonus : [{ name : "Rune Carver", spells : ["false life", "fog cloud", "ray of sickness", "chromatic orb", "bane", "burning hands", "bless", "armor of agathys", "goodberry", "longstrider", "command", "guiding bolt", "cure wounds", "jump", "shield", "sanctuary", "thunderwave", "heroism", "feather fall"], selection : ["false life", "fog cloud", "ray of sickness", "chromatic orb", "bane", "burning hands", "bless", "armor of agathys", "goodberry", "longstrider", "command", "guiding bolt", "cure wounds", "jump", "shield", "sanctuary", "thunderwave", "heroism", "feather fall"], times : 19, firstCol : "R", allowUpCasting : true }] }; FeatsList["rune carver adept-ua"] = { name : "Rune Carver Adept", source : [["UA:GO", 5]], prerequisite : "4th level, Rune Carver Apprentice feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("rune carver apprentice") !== -1; }, descriptionFull : "Your skill with the art of runecraft has increased.\n Whenever you finish a long rest, you can now mark a number of objects equal to your proficiency bonus with a rune from the Rune Carver Apprentice feat. An object can have only one rune at a time, and you must inscribe a different rune on each object.", description : "At the end of a long rest, when using the Rune Carver apprentice feat, I can now inscribe a number of objects up to my Proficiency Bonus. Each object can only have one rune, and each rune must be different." }; // This file adds the content from the Unearthed Arcana 2022: Wonders of the Multiverse article to MPMB's Character Record Sheet // ua_20220718_Wonders-of-the-Multiverse.js SourceList["UA:WotM"] = { name : "Unearthed Arcana: Wonders of the Multiverse", abbreviation : "UA:WotM", group : "Unearthed Arcana", url : "https://media.wizards.com/2022/dnd/downloads/UA2022-WondersoftheMultiverse.pdf", date : "2022/07/18" }; // Race RaceList["glitchling-ua"] = { regExpSearch : /glitchling/i, name : "Glitchling", source : [["UA:WotM", 2]], plural : "Glitchlings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, scoresGeneric : true, savetxt : { adv_vs : ["charmed"] }, armorOptions : [{ regExpSearch : /^(?=.*armou?red)(?=.*plating).*$/i, name : "Armored Plating", source : [["UA:WotM", 2]], ac : 14, selectNow : true }], features : { "balance chaos" : { name : "Balance Chaos", minlevel : 1, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "vestigial wings" : { name : "Vestigial Wings", minlevel : 1, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" } }, trait : "Glitchling (my type is Construct)"+ "\n \u2022 Armored Plating: My base AC is 14 + my Dexterity modifier."+ "\n \u2022 Living Construct: Life preserving spells that normally don't affect constructs work on me." + (typePF ? " (e.g. Cure Wounds, Spare the Dying)." : "")+ "\n \u2022 Ordered Mind: I have adv. on Wis (Insight) checks and on saves against being charmed."+ "\n \u2022 Balance Chaos: " + (typePF ? "My proficiency bonus per long rest, I can treat an attack roll or save roll of 9 or lower as a 10 instead." : "Prof Bonus per long rest, I can treat a save/attack roll below 10 as a 10.")+ "\n \u2022 Vestigial Wings: Prof Bonus per long rest, I can gain a flying speed equal to my walking speed for 1 turn, but fall if I end my turn aloft." }; // Subclass AddSubClass("cleric", "fate-ua", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*(fate|destiny)).*$/i, subname : "Fate Domain", source : [["UA:WotM", 2]], spellcastingExtra : ["dissonant whispers", "heroism", "see invisibility", "warding bond", "beacon of hope", "clairvoyance", "death ward", "divination", "commune", "geas"], features : { "subclassfeature1" : { name : "Omens and Portents", source : [["UA:WotM", 2]], minlevel : 1, description : desc([ "I can cast Augury once per long rest without using a spell slot or requiring components", "Once I do, my divination spells have -25% of no/random answer until I finish a long rest" ]), usages : 1, recovery : "long rest", additional : "Augury", spellcastingBonus : [{ name : "Omens and Portents", spells : ["augury"], selection : ["augury"], firstCol : 'oncelr' }], spellChanges : { "augury" : { components : "", compMaterial : "", changes : "Using Omens and Portents, I can cast Augury once per long rest without expending a spell slot or requiring components." } } }, "subclassfeature1.1" : { name : "Thies That Bind", source : [["UA:WotM", 2]], minlevel : 1, description : desc([ "As an action, I can magically tie my fate to a creature or object I touch for 1 hour", "Unwilling creatures can make a Wisdom save to resist; It ends early if I do this again", "I know the direction to a bound target's location and the direction of its movement", "Once per turn, a spell I cast on the target using a spell slot gets +1d6 damage or healing" ]), action : [["action", ""]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature2" : { name : "Channel Divinity: Strands of Fate", source : [["UA:WotM", 3]], minlevel : 2, description : desc([ "As a bonus action, I can manipulate the strands of fate for 1 minute while concentrating", "As a reaction when a creature I see makes a check or attack, I can impose adv. or disadv." ]), action : [["bonus action", " (activate)"], ["reaction", " (if active)"]] }, "subclassfeature6" : { name : "Insightful Striking", source : [["UA:WotM", 3]], minlevel : 6, description : desc([ "As a bonus action, I can gain a brief vision of the defenses of a creature I see within 30 ft", "Until the end of my next turn, I gain one of the following effects:", " \u2022 I add 1d6 to my next attack roll against the target ", " \u2022 The target subtracts 1d6 from the next saving throw it makes against a spell I cast" ]), action : [["bonus action", ""]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature8" : { name : "Potent Spellcasting", source : [["UA:WotM", 3]], minlevel : 8, description : desc("I add my Wisdom modifier to the damage I deal with my cleric cantrips"), calcChanges : GenericClassFeatures["potent spellcasting"].calcChanges }, "subclassfeature17" : { name : "Visions of the Future", source : [["UA:WotM", 3]], minlevel : 17, description : desc(["Once per long rest, I can cast Foresight without a spell slot with a duration of 1 minute"]), usages : 1, recovery : "long rest", limfeaname : "Visions of the Future (Foresight)", spellcastingBonus : [{ name : "Visions of the Future", spells : ["foresight"], selection : ["foresight"], firstCol : 'oncelr' }], spellChanges : { "foresight" : { duration : "1 min", changes : "Using Visions of the Future, I can cast Foresight once per long rest without expending a spell slot; when I cast the spell in this way, the spell's duration is 1 minute for that casting." } } } } }); // Backgrounds, first those not reprinted exactly as in this UA BackgroundList["giant foundling-ua"] = { regExpSearch : /^(?=.*giant)(?=.*foundling).*$/i, name : "Giant Foundling", source : [["UA:WotM", 4]], skills : ["Intimidation", "Survival"], gold : 10, languageProfs : [2], equipleft : [ ["Backpack", "", 5], ["Small stone/sprig reminding of home", "", ""] ], equipright : [ ["Traveler's clothes", "", 4], ["Pouch (with coins)", "", 1] ], feature : "Strike of the Giants", trait : [ "What I lack in stature, I make up for with sheer spite.", "Sometimes size does matter, okay? If I see a beast bigger than me, I'm immediately running away.", "Crowded spaces make me uncomfortable. I'd much rather be in a wide-open field than a bustling tavern.", "I like being small. It helps me stay unnoticed\u2014and underestimated.", "Size is just half the story. Every avalanche begins as a single pebble.", "The world always feels too big, and I'm afraid I'll never find my place in it." ], extra : [ "Select an Origin Story", "Found as a baby" + (typePF ? "": " by nomadic giants"), "Rescued from mountain crag" + (typePF ? "": " by stone giants"), "Found as a child lost in a jungle" + (typePF ? "": " by a frost giant"), "Home/family killed by warring giants" ] }; BackgroundList["planar philosopher-ua"] = { regExpSearch : /^(?=.*planar)(?=.*philosopher).*$/i, name : "Planar Philosopher", source : [["UA:WotM", 4]], skills : ["Arcana", "Persuasion"], gold : 10, languageProfs : [2], equipright : [ ["Common clothes", "", 3], ["Pouch (with coins from different planes)", "", 1] ], feature : "Conviction", trait : [ "I don't venerate any gods; we can be as powerful or greater than them.", "Experience is everything, live in the moment.", "When things crumble, I find meaning in the ashes.", "Life thrives through order; I won't tolerate disruptions.", "When others make plans, the multiverse laughs and so do I.", "I know what's right, and no one will stand in my way." ], extra : [ "Select a Trinket", "Inscribed locket with image of mentor", "Bleached rat skull with glass eyes", "Torn parchment with half a puzzle", "Bracelet of twisted razorvine stems", "Fragment of verdigris bronze blade", "Smooth stone with holy symbols" ] }; BackgroundList["rune carver-ua"] = { regExpSearch : /^(?=.*rune)(?=.*carver).*$/i, name : "Rune Carver", source : [["UA:WotM", 5]], skills : ["History", "Perception"], gold : 10, languageProfs : ["Giant", 1], equipleft : [ ["Set of artisan's tools", "", ""], ["Small knife", "", 0.5], ["Whetstone", "", 1] ], equipright : [ ["Common clothes", "", 3], ["Pouch (with coins)", "", 1] ], feature : "Rune Carver Apprentice", trait : [ "Is it practical to learn an ancient language that is rarely used in everyday speech? No. But is it fun? Very.", "I learned one of my ancestors was a lauded rune carver whose story was lost to time. I seek to rekindle that legacy.", "The old, traditional markings of runecraft look so boring. Why not give your runes some flair?", "In my studies of runes, I strive to understand how great civilizations of the past fell, so that I may prevent it from happening to societies of the present.", "Life may be a whirlwind of chaos around me, but whenever I create my runes, I feel at peace.", "My brain struggles to process ink words written on paper, but the tactile feeling of carved runes makes my mind sing." ], extra : [ "Select a Rune Style", "Use fine metal needle to inscribe", "On small wooden figurines", "On glass beads in necklace/bracelet", "Stitched into the hems of clothing", "Carved on set of animal bones", "Drawn into candles" ] }; BackgroundFeatureList["rune carver apprentice"] = { description : "I've dedicated my life to studying the practice of runecraft. Whether I was personally taught by a master rune carver or learned by poring over engravings in ancient ruins, I understand how to tap into the supernatural power held within runes. Also, I gain the Rune Carver Apprentice feat.", source : [["UA:WotM", 5]], featsAdd: ["Rune Carver Apprentice"], }; // Then the backgrounds that haven't been altered in the book // Feats FeatsList["cartomancer-ua"] = { name : "Cartomancer", source : [["UA:WotM", 6]], description : 'I can use a deck of cards as a spellcasting focus. When doing so, Prof Bonus per long rest I can add +1d4 to the damage of one target of a spell I cast. I know Prestidigitation and can also cast it to do stage magic, concealing its components. When I finish a long rest, I can store a spell into a card, see "Hidden Ace" notes.', descriptionFull : "You have learned to channel your magic through a deck of playing cards, granting you these benefits:"+ "\n " + toUni("Card Focus") + ". You can use a deck of cards as your spellcasting focus. When you use the deck as a focus to cast a spell that deals damage, roll a d4. You gain a bonus to one damage roll of the spell equal to the number rolled. This bonus applies to one creature of your choice that you can see damaged by the spell; you can use this benefit a number of times equal to your proficiency bonus, and you regain all expended uses of it when you finish a long rest."+ "\n " + toUni("Card Tricks") + ". You learn the prestidigitation cantrip and can use it to create illusions that duplicate the effects of stage magic. When you use prestidigitation in this way, you can conceal the verbal and somatic components of the spell as mundane conversation and card-handling."+ "\n " + toUni("Hidden Ace") + ". When you finish a long rest, you can choose one spell you know and imbue it into a card; the chosen spell must have a casting time of 1 action, and its level must be less than or equal to your proficiency bonus. While the card is imbued with the spell, you can use your bonus action to flourish the card and cast the spell within. The card then immediately loses its magic.", prerequisite : "4th-level; Sorcerer, Warlock, or Wizard Class", prereqeval : function (v) { return v.characterLevel >= 4 && (classes.known.wizard || classes.known.warlock || classes.known.sorcerer); }, extraLimitedFeatures : [{ name : "Cartomancer (+1d4 spell damage)", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }], action : [["bonus action", "Hidden Ace (use imbued card)"]], toNotesPage : [{ name : "Hidden Ace", page3notes : true, note : [ "Whenever I finish a long rest, I can imbue a spell I know into a card until I flourish the card", "The spell must have a casting time of 1 action and a level no more than my Prof Bonus", "As a bonus action, I can flourish the card to cast the stored spell, ousting it from the card" ] }] }; // Scion of the Outer Planes feat tree FeatsList["scion of the outer planes-ua"] = { name : "Scion of the Outer Planes", source : [["UA:WotM", 9]], description : "I am adept at navigating planar pathways and the strange realities of the outer planes. I can select a plane and gain resistance to a damage type and learn a cantrip associated with that plane. I can cast the cantrip without material components. I can choose Int, Wis, or Cha as my spellcasting ability for this.", descriptionFull : "You are influenced by and adept at navigating planar pathways and the strange realities of the Outer Planes."+ "\n Whether planar essence infuses you or you have extraplanar ancestry, your connection to a plane infuses you with the energies found there. Choose a type of plane listed in the table below. Your choice gives you resistance to a damage type and the ability to cast a cantrip, as specified in the table. You can cast this cantrip without material components, and your spellcasting ability for it is Intelligence, Wisdom, or Charisma (choose when you select this feat)."+ toUni("\n\nPlane\t\tResistance\tCantrip")+ "\nAstral\t\tPsychic\t\tMessage"+ "\nChaotic Outer\tNecrotic\t\tMinor Illusion"+ "\nEvil Outer \tNecrotic\t\tChill Touch"+ "\nGood Outer \tRadiant\t\tSacred Flame"+ "\nLawful Outer\tRadiant\t\tGuidance"+ "\nThe Outlands\tPsychic\t\tMage Hand", spellcastingAbility : [4,5,6], choices : ['Astral Plane (Psychic, Message)', 'Chaotic Outer Plane (Necrotic, Minor Illusion)', 'Evil Outer Plane (Necrotic, Chill Touch)', 'Good Outer Plane (Radiant, Sacred Flame)', 'Lawful Outer Plane (Radiant, Guidance)', 'The Outlands (Psychic, Mage Hand)'], 'astral plane (psychic, message)' : { name : "Scion of the Outer Planes (Astral Plane)", description : "I am adept at navigating planar pathways and the strange realities of the outer planes. My connection to the astral plane gives me resistance to psychic damage and I know the Message cantrip, which I can cast without material components. I can choose Int, Wis, or Cha as my spellcasting ability for this.", spellcastingAbility : [4,5,6], allowUpCasting : true, spellcastingBonus : [{ name : "Astral Plane", spell : ["message"], selection : ["message"], firstCol : "atwill" }], dmgres : ["Psychic"], spellChanges : { "message" : { components : "V,S", compMaterial : "", changes : "Using Scion of the Outer Planes, I can cast Message without material components." } } }, 'chaotic outer plane (necrotic, minor illusion)' : { name : "Scion of the Outer Planes (Chaotic Outer Plane)", description : "I am adept at navigating planar pathways and the strange realities of the outer planes. My connection to a chaotic outer plane gives me resistance to necrotic damage and I know the Minor Illusion cantrip, which requires no material components. I can choose Int, Wis, or Cha as my spellcasting ability for this.", spellcastingAbility : [4,5,6], allowUpCasting : true, spellcastingBonus : [{ name : "Chaotic Outer Plane", spells : ["minor illusion"], selection : ["minor illusion"], firstCol : "atwill" }], dmgres : ["Necrotic"], spellChanges : { "minor illusion" : { components : "S", compMaterial : "", changes : "Using Scion of the Outer Planes, I can cast Minor Illusion without material components." } } }, 'evil outer plane (necrotic, chill touch)' : { name : "Scion of the Outer Planes (Evil Outer Plane)", description : "I am adept at navigating planar pathways and the strange realities of the outer planes. I'm infused with or have ancestry from an evil outer plane. This connection gives me resistance to necrotic damage and I know the Chill Touch cantrip. I can choose Int, Wis, or Cha as my spellcasting ability for this.", spellcastingAbility : [4,5,6], allowUpCasting : true, spellcastingBonus : [{ name : "Evil Outer Plane", spells : ["chill touch"], selection : ["chill touch"], firstCol : "atwill" }], dmgres : ["Necrotic"] }, 'good outer plane (radiant, sacred flame)' : { name : "Scion of the Outer Planes (Good Outer Plane)", description : "I am adept at navigating planar pathways and the strange realities of the outer planes. I'm infused with or have ancestry from an good outer plane. This connection gives me resistance to radiant damage and I know the Sacred Flame cantrip. I can choose Int, Wis, or Cha as my spellcasting ability for this.", spellcastingAbility : [4,5,6], allowUpCasting : true, spellcastingBonus : [{ name : "Good Outer Plane", spells : ["sacred flame"], selection : ["sacred flame"], firstCol : "atwill" }], dmgres : ["Radiant"] }, 'lawful outer plane (radiant, guidance)' : { name : "Scion of the Outer Planes (Lawful Outer Plane)", description : "I am adept at navigating planar pathways and the strange realities of the outer planes. I'm infused with or have ancestry from an lawful outer plane. This connection gives me resistance to radiant damage and I know the Guidance cantrip. I can choose Int, Wis, or Cha as my spellcasting ability for this.", spellcastingAbility : [4,5,6], allowUpCasting : true, spellcastingBonus : [{ name : "Lawful Outer Plane", spells : ["guidance"], selection : ["guidance"], firstCol : "atwill" }], dmgres : ["Radiant"] }, 'the outlands (psychic, mage hand)' : { name : "Scion of the Outer Planes (The Outlands)", description : "I am adept at navigating planar pathways and the strange realities of the outer planes. I'm infused with or have ancestry from a plane of the outlands. This gives me resistance to psychic damage and I know the Mage Hand cantrip. I can choose Int, Wis, or Cha as my spellcasting ability for this.", spellcastingAbility : [4,5,6], allowUpCasting : true, spellcastingBonus : [{ name : "The Outlands", spells : ["mage hand"], selection : ["mage hand"], firstCol : "atwill" }], dmgres : ["Psychic"] } }; FeatsList["agent of order-ua"] = { name : "Agent of Order", source : [["UA:WotM", 6]], description : "Once per turn when I damage a creature I see within 60 ft, I can deal +1d8 force damage to it, and it must succeed on a Wis save (DC 8 + Prof Bonus + the modifier of the ability score increased by this feat) or be restrained until my next turn starts. I can do this a number of times equal to my Prof Bonus per long rest.", descriptionFull : "You can channel cosmic forces of order that lock the multiverse into patterns. Your actions are your own to choose, but these forces grant you the following benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase an ability score of your choice by 1, to a maximum of 20."+ "\n " + toUni("Stasis Strike") + ". Once per turn when you damage a creature you can see within 60 feet of yourself, you can deal an extra 1d8 force damage to the target, and it must succeed on a Wisdom saving throw (DC equal to 8 + your proficiency bonus + the modifier of the ability score increased by this feat) or be restrained by spectral bindings until the start of your next turn. These bindings manifest as chains, gears, encasing stone, or some other symbol of stasis. You can use this benefit a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th-level, Scion of the Outer Planes (Lawful Outer Plane) feat", prereqeval : function(v) { var iParentFeat = CurrentFeats.known.indexOf("scion of the outer planes-ua"); return v.characterLevel >= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'lawful outer plane (radiant, guidance)'; }, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", choices : ["Strength", "Dexterity", "Constitution", "Intelligence", "Wisdom", "Charisma"], "strength" : { calculate : "event.value = 'Once per turn when I damage a creature I see within 60 ft, I can deal +1d8 force damage to it, and it must succeed on a Wis save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Str Mod'))) + ' (8 + Prof Bonus + Str mod) or be restrained until my next turn starts. I can do this a number of times equal to my Prof Bonus per long rest. [+1 Strength]';", scores : [1, 0, 0, 0, 0, 0] }, "dexterity" : { calculate : "event.value = 'Once per turn when I damage a creature I see within 60 ft, I can deal +1d8 force damage to it, and it must succeed on a Wis save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Dex Mod'))) + ' (8 + Prof Bonus + Dex mod) or be restrained until my next turn starts. I can do this a number of times equal to my Prof Bonus per long rest. [+1 Dexterity]';", scores : [0, 1, 0, 0, 0, 0] }, "constitution" : { calculate : "event.value = 'Once per turn when I damage a creature I see within 60 ft, I can deal +1d8 force damage to it, and it must succeed on a Wis save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Con Mod'))) + ' (8 + Prof Bonus + Con mod) or be restrained until my next turn starts. I can do this a number of times equal to my Prof Bonus per long rest. [+1 Constitution]';", scores : [0, 0, 1, 0, 0, 0] }, "intelligence" : { calculate : "event.value = 'Once per turn when I damage a creature I see within 60 ft, I can deal +1d8 force damage to it, and it must succeed on a Wis save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Int Mod'))) + ' (8 + Prof Bonus + Int mod) or be restrained until my next turn starts. I can do this a number of times equal to my Prof Bonus per long rest. [+1 Intelligence]';", scores : [0, 0, 0, 1, 0, 0] }, "wisdom" : { calculate : "event.value = 'Once per turn when I damage a creature I see within 60 ft, I can deal +1d8 force damage to it, and it must succeed on a Wis save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Wis Mod'))) + ' (8 + Prof Bonus + Wis mod) or be restrained until my next turn starts. I can do this a number of times equal to my Prof Bonus per long rest. [+1 Wisdom]';", scores : [0, 0, 0, 0, 1, 0] }, "charisma" : { calculate : "event.value = 'Once per turn when I damage a creature I see within 60 ft, I can deal +1d8 force damage to it, and it must succeed on a Wis save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Cha Mod'))) + ' (8 + Prof Bonus + Cha mod) or be restrained until my next turn starts. I can do this a number of times equal to my Prof Bonus per long rest. [+1 Charisma]';", scores : [0, 0, 0, 0, 0, 1] } }; FeatsList["baleful scion-ua"] = { name : "Baleful Scion", source : [["UA:WotM", 6]], description : "Once per turn, when I hit a creature with a melee weapon attack, I can also deal 1d6 + my Proficiency Bonus necrotic damage to it. I then regain a number of hit points equal to this necrotic damage dealt. I can do this a number of times equal to my Proficiency Bonus per long rest. [+1 to any one ability score]", descriptionFull : "You can channel cosmic forces of evil that cause pain but invigorate your being. You can choose your own actions despite this malign connection. You gain the following benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase an ability score of your choice by 1, to a maximum of 20."+ "\n " + toUni("Life-Draining Grasp") + ". Once per turn, when you hit a creature with a melee weapon attack, you can also deal necrotic damage to it. The damage equals 1d6 + your proficiency bonus, and you regain a number of hit points equal to this necrotic damage dealt. You can use this feature a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th-level, Scion of the Outer Planes (Evil Outer Plane) feat", prereqeval : function(v) { var iParentFeat = CurrentFeats.known.indexOf("scion of the outer planes-ua"); return v.characterLevel >= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'evil outer plane (necrotic, chill touch)'; }, scorestxt : "+1 to one ability score of your choice", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }; FeatsList["cohort of chaos-ua"] = { name : "Cohort of Chaos", source : [["UA:WotM", 6]], description : "When I roll a 1 or a 20 on an attack roll or save, a the magic of chaos flares up and I roll on the Chaotic Flare table to determine what happens (see notes for table). As a bonus action, my Proficiency Bonus per long rest, I can force a flare to happen. [+1 to any one ability score]", descriptionFull : "You can channel the cosmic forces of chaos that drive the multiverse toward both freedom and disarray. Your actions are still yours to choose, but you gain these benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase an ability score of your choice by 1, to a maximum of 20."+ "\n " + toUni("Chaotic Flare") + ". When you roll a 1 or a 20 on an attack roll or a saving throw, the magic of chaos flows through you. Roll on the table below to determine what happens. A flare lasts until the end of your next turn, and a new flare can't occur until after the first flare ends."+ toUni("\n\nd4\tFlare")+ "\n 1\tDisruption Field: Waves of energy ripple in a 10-foot sphere centered on you. Every creature other than you that starts its turn in that area, or that moves into that area for the first time on a turn, takes 1d8 force damage."+ "\n 2\tBattle Fury: A creature of your choice that you can see is filled with reckless fury. The creature has advantage on attack rolls and disadvantage on ability checks."+ "\n 3\tUnbound: When you move, you can use some or all of your walking speed to teleport once, along with any equipment you're wearing or carrying, up to the distance used to an unoccupied space that you can see."+ "\n 4\tWailing Winds: Howling winds swirl around you in a 60-foot radius. You and any creature in that radius has disadvantage on Wisdom saving throws."+ "\n\n You can also forcibly release a chaotic flare as a bonus action, rolling on the table as normal to determine the effects. You can use this bonus action a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th-level, Scion of the Outer Planes (Chaotic Outer Plane) feat", prereqeval : function(v) { var iParentFeat = CurrentFeats.known.indexOf("scion of the outer planes-ua"); return v.characterLevel >= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'chaotic outer plane (necrotic, minor illusion)'; }, scorestxt : "+1 to one ability score of your choice", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", additional : "force flare", action : [["bonus action", " (force flare)"]], toNotesPage : [{ name : "Chaotic Flare Table", note : [ "When I roll a 1 or a 20 on an attack roll or a saving throw, the magic of chaos flows through me. I roll on the table below to determine what happens. A flare lasts until the end of my next turn, and a new flare can't occur until after the first flare ends.", "As a bonus action, I can forcibly release a chaotic flare, rolling on the table as normal to determine the effects. I can use this bonus action a number of times equal to my proficiency bonus, and I regain all expended uses when you finish a long rest.", "\n d4 Flare", "1 Disruption Field: Waves of energy ripple in a 10-ft sphere centered on me. Every creature other than me that starts its turn in that area, or that moves into that area for the first time on a turn, takes 1d8 force damage.", "2 Battle Fury: A creature of my choice that I can see is filled with reckless fury. The creature has advantage on attack rolls and disadvantage on ability checks.", "3 Unbound: When I move, I can use some or all of my walking speed to teleport once, along with any equipment I'm wearing or carrying, up to the distance used to an unoccupied space that I can see.", "4 Wailing Winds: Howling winds swirl around me in a 60-ft radius. I and any creature in that radius have disadvantage on Wisdom saving throws." ] }] }; FeatsList["outlands envoy-ua"] = { name : "Outlands Envoy", source : [["UA:WotM", 7]], description : "I can cast Misty Step and Tongues each once per long rest without requiring a spell slot or material components. I can also cast them using a spell slot as normal. My spellcasting ability for these spells is the same as the one for the Scion of the Outer Planes feat. [+1 to any one ability score]", descriptionFull : "You have spent significant time in Sigil or elsewhere in the Outlands, the crossroads of the multiverse. Being steeped in converging planar energies grants you these benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase an ability score of your choice by 1, to a maximum of 20."+ "\n " + toUni("Crossroads Emissary") + ". You learn the misty step and tongues spells. You can cast each spell once using this feat without a spell slot, and you must finish a long rest before you can cast that spell in this way again. When you cast tongues using this feat, you require no material components. You can also cast these spells using spell slots you have of the appropriate level. The spell's spellcasting ability is the one chosen when you gained the Scion of the Outer Planes feat.", prerequisite : "4th-level, Scion of the Outer Planes feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("scion of the outer planes-ua") !== -1; }, scorestxt : "+1 to one ability score of your choice", spellcastingAbility : "scion of the outer planes-ua", spellcastingBonus : [{ name : "Crossroads Emissary", spells : ["misty step", "tongues"], selection : ["misty step", "tongues"], firstCol : "oncelr+markedbox", times : 2 }], spellChanges : { "tongues" : { components : SpellsList.tongues.components.replace("M", "M*"), compMaterial : "When using a spell slot: "+SpellsList.tongues.compMaterial, changes : "Using Outlands Envoy, I can cast Tongues once per long rest without expending a spell slot or requiring material components." } } }; FeatsList["planar wanderer-ua"] = { name : "Planar Wanderer", source : [["UA:WotM", 7]], description : "After each long rest, I can gain acid, cold, or fire resistance, that lasts until my next long rest ends. I know the direction to the last portal I used while on the same plane as it. As an action, I can try to open or close a portal (portal cracker). As an action once per long rest, I can detect portals (portal sense). See notes.", descriptionFull : "You can draw on the forces of the multiverse to survive cosmic extremes and to traverse its infinite realms. You gain these benefits:"+ "\n " + toUni("Planar Adaptation") + ". When you finish a long rest, you gain resistance to either acid, cold, or fire damage (your choice) until you finish your next long rest."+ "\n " + toUni("Portal Cracker") + ". Your experience with portals allows you to operate them without the proper portal key. As an action, you can concentrate on a portal you're aware of that is within 5 feet of you and make a DC 20 Wisdom (Survival) check. On a failure, you take 3d8 force damage and you can't use this feature on that portal again until you finish a long rest. On a success, you can force the portal open or closed for 1 hour. For that duration, a portal closed in this way doesn't respond to its portal key unless a creature employing the key succeeds on a DC 20 Intelligence (Arcana) check as an action."+ "\n " + toUni("Portal Sense") + ". You know the direction to the last planar portal you used while you and the portal are on the same plane. Moreover, as an action, you can detect the location of any portals within 30 feet of you that aren't behind total cover. Once you detect a portal with this action, you can't use the action again until you finish a long rest.", prerequisite : "4th-level, Scion of the Outer Planes feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("scion of the outer planes-ua") !== -1; }, dmgres : ["Acid/Cold/Fire"], action : [["action", " (Portal Cracker)"], ["action", " (Portal Sense)"]], usages : 1, recovery : "long rest", additional : "Portal Sense", toNotesPage : [{ name : "Portal Cracker", note : [ "My experience with portals allows me to operate them without the proper portal key.", "As an action, I can concentrate on a portal I'm aware of that is within 5 ft of me and make a DC 20 Wisdom (Survival) check.", "On a failure, I take 3d8 force damage and I can't use this feature on that portal again until I finish a long rest.", "On a success, I can force the portal open or closed for 1 hour. For that duration, a portal closed in this way doesn't respond to its portal key unless a creature employing the key succeeds on a DC 20 Intelligence (Arcana) check as an action." ] }, { name : "Portal Sense", additional : "1\xD7 per long rest", note : [ "I know the direction to the last planar portal I used while I and the portal are on the same plane.", "As an action, I can detect the location of any portals within 30 ft of me that aren't behind total cover.", "Once I detect a portal with this action, I can't use the action again until I finish a long rest." ], amendTo : "Portal Cracker" }] }; FeatsList["righteous heritor-ua"] = { name : "Righteous Heritor", source : [["UA:WotM", 8]], description : "As a reaction when I or a creature I can see within 30 ft takes damage, I can reduce the damage taken by 1d10 + my Proficiency Bonus. I can do this a number of times equal to my Proficiency Bonus per long rest. [+1 to any one ability score]", descriptionFull : "You can channel the cosmic forces of good that foster serenity and fellowship. You are still free to choose your own actions, but gain these benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase an ability score of your choice by 1, to a maximum of 20."+ "\n " + toUni("Soothe Pain") + ". When you or a creature you can see within 30 feet of you takes damage, you can use your reaction to dull its suffering and reduce the damage it takes by 1d10 + your proficiency bonus. You can use this benefit a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th-level, Scion of the Outer Planes (Good Outer Plane) feat", prereqeval : function(v) { var iParentFeat = CurrentFeats.known.indexOf("scion of the outer planes-ua"); return v.characterLevel >= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'good outer plane (radiant, sacred flame)'; }, scorestxt : "+1 to one ability score of your choice", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", action : [["reaction", ""]] }; // Strike of the Giants feat tree FeatsList["strike of the giants-ua"] = { name : "Strike of the Giants", source : [["UA:WotM", 9]], description : "As a bonus action, I can call on the power of my giant magic to imbue my attacks with additional power. The next time I hit a target with a melee or thrown weapon attack within the next minute, the attack has an additional effect depending on the origin of my giant magic (hill, stone, frost, fire, cloud or storm).", descriptionFull : "You have absorbed primeval magic that gives you an echo of the might of giants. Choose one of the kinds of giants listed below. As a bonus action, you can call on the power of your giant magic to imbue your attacks with additional power. The next time you hit a target with a melee or thrown weapon attack within the next minute, the attack has an additional effect depending on the origin of your giant magic:"+ desc([ toUni("Hill Giant") + ". The target takes an extra 1d6 damage of the weapon's type. If the target is a creature, it must succeed on a Strength saving throw or be knocked prone.", toUni("Stone Giant") + ". The target takes an extra 1d6 force damage. If the target is a creature, it must succeed on a Strength saving throw or be pushed 10 feet away from you in a straight line.", toUni("Frost Giant") + ". The target takes an extra 1d6 cold damage. If the target is a creature, it must succeed on a Constitution saving throw, or its speed is reduced to 0 until the start of your next turn.", toUni("Fire Giant") + ". The target takes an extra 1d8 fire damage.", toUni("Cloud Giant") + ". The target takes an extra 1d4 thunder damage. If the target is a creature, it must succeed on a Wisdom saving throw, or you become invisible to it until the start of your next turn.", toUni("Storm Giant") + ". The target takes an extra 1d6 lightning damage. If the target is a creature, it must succeed on a Constitution saving throw, or it has disadvantage on attack rolls until the start of your next turn.\n", "The saving throw DC for these effects equals 8 + your proficiency bonus + your Strength or Constitution modifier.", "You can use this bonus action a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest." ]), usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", action : [["bonus action", ""]], choices : ["Hill Giant", "Stone Giant", "Frost Giant", "Fire Giant", "Cloud Giant", "Storm Giant"], "hill giant" : { calculate : "event.value = 'As a bonus action my Prof Bonus per long rest, I can call on the might of hill giants. The next time I hit with a melee or thrown weapon attack within the next minute, it deals +1d6 damage and if the target is a creature, it must make a Strength save DC ' + (8 + Number(How('Proficiency Bonus')) + Math.max(Number(What('Str Mod')), Number(What('Con Mod')))) + ' (8 + Prof Bonus + Str/Con mod) or be knocked prone.';" }, "stone giant" : { calculate : "event.value = 'As a bonus action my Prof Bonus per long rest, I can call on the might of stone giants. My next hit in the next minute with a melee or thrown weapon attack deals +1d6 force damage and the target must make a Strength save DC ' + (8 + Number(How('Proficiency Bonus')) + Math.max(Number(What('Str Mod')), Number(What('Con Mod')))) + ' (8 + Prof Bonus + Str/Con mod) or be pushed 10 ft away from me in a straight line.';" }, "frost giant" : { calculate : "event.value = 'As a bonus action my Prof Bonus per long rest, I can call on the might of frost giants. The next hit with my melee or thrown weapon attack within 1 minute deals +1d6 cold damage, and if the target is a creature, it must make a Con save DC ' + (8 + Number(How('Proficiency Bonus')) + Math.max(Number(What('Str Mod')), Number(What('Con Mod')))) + ' (8 + Prof Bonus + Str/Con mod) or its speed is 0 until my next turn starts.';" }, "fire giant" : { description : "I have absorbed primeval magic that gives me an echo of the might of fire giants. As a bonus action, I can call on this power and the next time I hit a target with a melee or thrown weapon attack within the next minute, that attack deals +1d8 fire damage. I can do this my Proficiency Bonus per long rest." }, "cloud giant" : { calculate : "event.value = 'As a bonus action my Prof Bonus per long rest, I can call on the might of cloud giants. My next hit within 1 minute with a melee or thrown weapon attack deals +1d4 thunder damage, and the target must make a Wisdom save DC ' + (8 + Number(How('Proficiency Bonus')) + Math.max(Number(What('Str Mod')), Number(What('Con Mod')))) + ' (8 + Prof Bonus + Str/Con mod) or I become invisible to it until my next turn starts.';" }, "storm giant" : { calculate : "event.value = 'As a bonus action my Prof Bonus per long rest, I can call on the might of storm giants. My next hit within 1 minute with a melee or thrown weapon attack deals +1d6 lightning damage, and the target must make a Con save DC ' + (8 + Number(How('Proficiency Bonus')) + Math.max(Number(What('Str Mod')), Number(What('Con Mod')))) + ' (8 + Prof Bonus + Str/Con mod) or it has disadv. on attack rolls until my next turn starts.';" } }; FeatsList["ember of the fire giant-ua2"] = { name : "Fury of the Fire Giant", source : [["UA:WotM", 7]], description : "I have fire resistance. My Prof Bonus per long rest, I can replace one attack of an Attack action on my turn with Searing Ignition: Chosen creatures I can see within 15 ft take 1d8+Prof Bonus fire damage & are blinded until my next turn starts. Dex save (8 + Prof B. + Str/Con/Wis mod) for half damage & not blinded.", descriptionFull : "You've manifested the fiery combat emblematic of fire giants, granting you the following benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase your Strength, Constitution, or Wisdom score by 1, to a maximum of 20."+ "\n " + toUni("Born of Flame") + ". You have resistance to fire damage."+ "\n " + toUni("Searing Ignition") + ". When you take the Attack action on your turn, you can replace a single attack with a magical burst of flame. Each creature of your choice within 15 feet of you that can see you must make a Dexterity saving throw (DC equals 8 + your proficiency bonus + the modifier of the ability increased by this feat). On a failed save, a creature takes fire damage equal to 1d8 + your proficiency bonus, and it is blinded until the start of your next turn. On a successful save, the creature takes half as much damage and isn't blinded. You can use your Searing Ignition a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th-level, Strike of the Giants (Fire Giant) feat", prereqeval : function(v) { var iParentFeat = CurrentFeats.known.indexOf("strike of the giants-ua"); return v.characterLevel >= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'fire giant'; }, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", dmgres : ["Fire"], choices : ["Strength", "Constitution", "Wisdom"], "strength" : { calculate : "event.value = 'I have fire resistance. My Prof Bonus per long rest, I can replace one attack of an Attack action on my turn with Searing Ignition: Chosen creatures I can see within 15 ft take 1d8+' + How('Proficiency Bonus') + ' (Prof B.) fire damage \u0026 are blinded until my next turn starts. Dex save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Str Mod'))) + ' (8 + Prof B. + Str mod) for half damage \u0026 not blinded. [+1 Str]';", scores : [1, 0, 0, 0, 0, 0], weaponOptions : [{ regExpSearch : /^(?=.*searing)(?=.*ignition).*$/i, name : "Searing Ignition", source : [["UA:WotM", 7]], ability : 1, type : "Spell", damage : [1, 8, "fire"], range : "15-ft radius", description : "Hits all of my choice in range; Dex save for half damage; Failed - blinded until my next turn starts", dc : true, abilitytodamage : false, modifiers : ["", "Prof"], selectNow : true }] }, "constitution" : { calculate : "event.value = 'I have fire resistance. My Prof Bonus per long rest, I can replace one attack of an Attack action on my turn with Searing Ignition: Chosen creatures I can see within 15 ft take 1d8+' + How('Proficiency Bonus') + ' (Prof B.) fire damage \u0026 are blinded until my next turn starts. Dex save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Con Mod'))) + ' (8 + Prof B.+ Con mod) for half damage \u0026 not blinded. [+1 Con]';", scores : [0, 0, 1, 0, 0, 0], weaponOptions : [{ regExpSearch : /^(?=.*searing)(?=.*ignition).*$/i, name : "Searing Ignition", source : [["UA:WotM", 7]], ability : 3, type : "Spell", damage : [1, 8, "fire"], range : "15-ft radius", description : "Hits all of my choice in range; Dex save for half damage; Failed - blinded until my next turn starts", dc : true, abilitytodamage : false, modifiers : ["", "Prof"], selectNow : true }] }, "wisdom" : { calculate : "event.value = 'I have fire resistance. My Prof Bonus per long rest, I can replace one attack of an Attack action on my turn with Searing Ignition: Chosen creatures I can see within 15 ft take 1d8+' + How('Proficiency Bonus') + ' (Prof B.) fire damage \u0026 are blinded until my next turn starts. Dex save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Wis Mod'))) + ' (8 + Prof B. + Wis mod) for half damage \u0026 not blinded. [+1 Wis]';", scores : [0, 0, 0, 0, 1, 0], weaponOptions : [{ regExpSearch : /^(?=.*searing)(?=.*ignition).*$/i, name : "Searing Ignition", source : [["UA:WotM", 7]], ability : 5, type : "Spell", damage : [1, 8, "fire"], range : "15-ft radius", description : "Hits all of my choice in range; Dex save for half damage; Failed - blinded until my next turn starts", dc : true, abilitytodamage : false, modifiers : ["", "Prof"], selectNow : true }] } }; FeatsList["fury of the frost giant-ua2"] = { name : "Fury of the Frost Giant", source : [["UA:WotM", 7]], description : "I have cold resistance. As a reaction my Prof Bonus per long rest, when a creature I can see within 30 ft hits and deals damage with an attack, I can have it make a Con save (DC 8 + Prof B. + Str/Con/Wis mod) or take 1d8 + Prof Bonus cold damage and have its speed reduced by half until my next turn ends.", descriptionFull : "You've manifested the icy might emblematic of frost giants, granting you the following benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase your Strength, Constitution, or Wisdom score by 1, to a maximum of 20."+ "\n " + toUni("Born of Ice") + ". You have resistance to cold damage."+ "\n " + toUni("Frigid Retaliation") + ". Immediately after a creature you can see within 30 feet of you hits you with an attack roll and deals damage, you can use your reaction to retaliate with a conjured blast of ice. The creature must make a Constitution saving throw (DC equals 8 + your proficiency bonus + the modifier of the ability increased by this feat). On a failed save, it takes 1d8 + your proficiency bonus cold damage, and its speed is halved until the end of its next turn. You can use this reaction a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th-level, Strike of the Giants (Frost Giant) feat", prereqeval : function(v) { var iParentFeat = CurrentFeats.known.indexOf("strike of the giants-ua"); return v.characterLevel >= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'frost giant'; }, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", dmgres : ["Cold"], action : [["reaction", ""]], choices : ["Strength", "Constitution", "Wisdom"], "strength" : { calculate : "event.value = 'I have cold resistance. As a reaction my Prof Bonus per long rest, when a creature I can see within 30 ft hits and deals damage with an attack, I can have it make a Constitution save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Str Mod'))) + ' (8 + Prof B. + Str mod) or take 1d8+' + How('Proficiency Bonus') + ' (Prof Bonus) cold damage and have its speed reduced by half until my next turn ends. [+1 Str]';", scores : [1, 0, 0, 0, 0, 0] }, "constitution" : { calculate : "event.value = 'I have cold resistance. As a reaction my Prof Bonus per long rest, when a creature I can see within 30 ft hits and deals damage with an attack, I can have it make a Constitution save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Con Mod'))) + ' (8 + Prof B. + Con mod) or take 1d8+' + How('Proficiency Bonus') + ' (Prof B.) cold damage and have its speed reduced by half until my next turn ends. [+1 Con]';", scores : [0, 0, 1, 0, 0, 0] }, "wisdom" : { calculate : "event.value = 'I have cold resistance. As a reaction my Prof Bonus per long rest, when a creature I can see within 30 ft hits and deals damage with an attack, I can have it make a Constitution save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Wis Mod'))) + ' (8 + Prof B. + Wis mod) or take 1d8+' + How('Proficiency Bonus') + ' (Prof Bonus) cold damage and have its speed reduced by half until my next turn ends. [+1 Wis]';", scores : [0, 0, 0, 0, 1, 0] } }; FeatsList["guile of the cloud giant-ua2"] = { name : "Guile of the Cloud Giant", source : [["UA:WotM", 7]], description : "As a reaction when a creature I can see hits me with an attack roll, I can give myself resistance to that attack's damage. I then teleport to an unoccupied space that I can see within 30 ft. I can do this a number of times equal to half my Proficiency Bonus (rounded up) per long rest. [+1 Dex, Con, or Cha]", descriptionFull : "You've manifested the airy speech and magic emblematic of cloud giants, granting you the following benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase your Dexterity, Constitution, or Charisma score by 1, to a maximum of 20."+ "\n " + toUni("Cloudy Escape") + ". When a creature you can see hits you with an attack roll, you can use your reaction to give yourself resistance to that attack's damage. You then teleport to an unoccupied space that you can see within 30 feet of yourself. You can use this reaction a number of times equal to half your proficiency bonus (rounded up), and you regain all expended uses when you finish a long rest.", prerequisite : "4th-level, Strike of the Giants (Cloud Giant) feat", prereqeval : function(v) { var iParentFeat = CurrentFeats.known.indexOf("strike of the giants-ua"); return v.characterLevel >= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'cloud giant'; }, scorestxt : "+1 Dexterity, Constitution, or Charisma", usages : "Half proficiency bonus (rounded up) per ", usagescalc : "event.value = Math.ceil(Number(How('Proficiency Bonus'))/2);", recovery : "long rest", action : [["reaction", ""]] }; FeatsList["keenness of the stone giant-ua2"] = { name : "Keenness of the Stone Giant", source : [["UA:WotM", 8]], description : "I gain +60 ft darkvision. As a bonus action my Prof Bonus per long rest, I can imbue a rock with magic until I finish a long rest or hit with it. I can use it as a proficient thrown weapon, 60/180 ft, 1d10 bludgeoning damage. Target hit must make a Str save DC 10 (8 + Prof B. + Str/Con/Wis mod) or be knocked prone.", descriptionFull : "You've manifested the physical talents emblematic of stone giants, granting you the following benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase your Strength, Constitution, or Wisdom score by 1, to a maximum of 20."+ "\n " + toUni("Stone Throw") + ". As a bonus action, you can touch a rock that can fit in the palm of your hand and imbue it with magic. While the rock is imbued with magic and you are wielding it, the rock is a magic ranged weapon with which you're proficient, and it has the thrown property with a normal range of 60 feet and a long range of 180 feet. On a hit, the rock deals 1d10 bludgeoning damage, and if the target is a creature, it must succeed on a Strength saving throw (DC equals 8 + your proficiency bonus + the modifier of the ability increased by this feat) or be knocked prone. The magic remains in the rock until you hit with it or finish a long rest. You can imbue a number of rocks equal to your proficiency bonus with this bonus action, and you regain all expended uses when you finish a long rest."+ "\n " + toUni("Cavernous Sight") + ". You gain darkvision out to a range of 60 feet. If you already have darkvision from another source, its range increases by 60 feet.", prerequisite : "4th-level, Strike of the Giants (Stone Giant) feat", prereqeval : function(v) { var iParentFeat = CurrentFeats.known.indexOf("strike of the giants-ua"); return v.characterLevel >= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'stone giant'; }, vision : [["Darkvision", "fixed 60"], ["Darkvision", "+60"]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", additional : "Imbue Stone", action : [["bonus action", " (Imbue Stone)"]], choices : ["Strength", "Constitution", "Wisdom"], "strength" : { calculate : "event.value = 'I gain +60 ft darkvision. As a bonus action my Prof Bonus per long rest, I can imbue a rock with magic until I finish a long rest or hit with it. I can use it as a proficient thrown weapon, ' + (What('Unit System') === 'metric' ? '18/54 m' : '60/180 ft') + ', 1d10 bludgeoning damage. Target hit must make a Str save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Str Mod'))) + ' (8 + Prof B. + Str mod) or be knocked prone. [+1 Str]';", scores : [1, 0, 0, 0, 0, 0], weaponOptions : [{ regExpSearch : /^(?=.*stone)(?=.*giant)(?=.*throw).*$/i, name : "Stone Giant's Stone Throw", source : [["UA:WotM", 8]], ability : 1, type : "AlwaysProf", damage : [1, 10, "bludgeoning"], range : "60/180 ft", description : "Thrown; On hit: Str save (DC 8 + To Hit) or knocked prone; Counts as magical", abilitytodamage : true, isMagicWeapon : true, selectNow : true }] }, "constitution" : { calculate : "event.value = 'I gain +60 ft darkvision. As a bonus action my Prof Bonus per long rest, I can imbue a rock with magic until I finish a long rest or hit with it. I can use it as a proficient thrown weapon, ' + (What('Unit System') === 'metric' ? '18/54 m' : '60/180 ft') + ', 1d10 bludgeoning damage. Target hit must make a Str save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Con Mod'))) + ' (8 + Prof B. + Con mod) or be knocked prone. [+1 Con]';", scores : [0, 0, 1, 0, 0, 0], weaponOptions : [{ regExpSearch : /^(?=.*stone)(?=.*giant)(?=.*throw).*$/i, name : "Stone Giant's Stone Throw", source : [["UA:WotM", 8]], ability : 3, type : "AlwaysProf", damage : [1, 10, "bludgeoning"], range : "60/180 ft", description : "Thrown; On hit: Str save (DC 8 + To Hit) or knocked prone; Counts as magical", abilitytodamage : true, selectNow : true }] }, "wisdom" : { calculate : "event.value = 'I gain +60 ft darkvision. As a bonus action my Prof Bonus per long rest, I can imbue a rock with magic until I finish a long rest or hit with it. I can use it as a proficient thrown weapon, ' + (What('Unit System') === 'metric' ? '18/54 m' : '60/180 ft') + ', 1d10 bludgeoning damage. Target hit must make a Str save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Wis Mod'))) + ' (8 + Prof B. + Wis mod) or be knocked prone. [+1 Wis]';", scores : [0, 0, 0, 0, 1, 0], weaponOptions : [{ regExpSearch : /^(?=.*stone)(?=.*giant)(?=.*throw).*$/i, name : "Stone Giant's Stone Throw", source : [["UA:WotM", 8]], ability : 5, type : "AlwaysProf", damage : [1, 10, "bludgeoning"], range : "60/180 ft", description : "Thrown; On hit: Str save (DC 8 + To Hit) or knocked prone; Counts as magical", abilitytodamage : true, selectNow : true }] } }; FeatsList["soul of the storm giant-ua2"] = { name : "Soul of the Storm Giant", source : [["UA:WotM", 9]], description : "As an action my Prof Bonus per long rest, I can give myself a 10-ft radius magical aura until my next turn starts. This imposes disadv. on attacks against me and when a creature starts its turn within, I can have it make a Str save (DC 8 + Prof Bonus + Int/Wis/Cha mod) or halve its speed until my next turn starts.", descriptionFull : "You've manifested divination abilities and tempest magic emblematic of storm giants, granting you the following benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase your Intelligence, Wisdom, or Charisma score by 1, to a maximum of 20."+ "\n " + toUni("Maelstrom Aura") + ". As a bonus action, you surround yourself in an aura of magical wind and lightning that extends 10 feet from you in every direction but not through total cover. The aura lasts until the start of your next turn or until you are incapacitated. While the aura is active, attack rolls against you have disadvantage, and whenever a creature starts its turn within the aura, you can force the creature to make a Strength saving throw (DC equals 8 + your proficiency bonus + the ability modifier of the score increased by this feat). On a failed save, the creature's speed is halved until the start of its next turn. You can use this bonus action a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th-level, Strike of the Giants (Storm Giant) feat", prereqeval : function(v) { var iParentFeat = CurrentFeats.known.indexOf("strike of the giants-ua"); return v.characterLevel >= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'storm giant'; }, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", action : [["action", ""]], choices : ["Intelligence", "Wisdom", "Charisma"], "intelligence" : { calculate : "event.value = 'As an action my Prof Bonus per long rest, I can give myself a 10-ft radius magical aura until my next turn starts. This imposes disadv. on attacks against me and when a creature starts its turn within, I can have it make a Str save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Int Mod'))) + ' (8 + Prof Bonus + Int mod) or halve its speed until my next turn starts. [+1 Int]';", scores : [0, 0, 0, 1, 0, 0] }, "wisdom" : { calculate : "event.value = 'As an action my Prof Bonus per long rest, I can give myself a 10-ft radius magical aura until my next turn starts. This imposes disadv. on attacks against me and when a creature starts its turn within, I can have it make a Str save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Wis Mod'))) + ' (8 + Prof Bonus + Wis mod) or halve its speed until my next turn starts. [+1 Wis]';", scores : [0, 0, 0, 0, 1, 0] }, "charisma" : { calculate : "event.value = 'As an action my Prof Bonus per long rest, I can give myself a 10-ft radius magical aura until my next turn starts. This imposes disadv. on attacks against me and when a creature starts its turn within, I can have it make a Str save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Cha Mod'))) + ' (8 + Prof Bonus + Cha mod) or halve its speed until my next turn starts. [+1 Cha]';", scores : [0, 0, 0, 0, 0, 1] } }; FeatsList["vigor of the hill giant-ua2"] = { name : "Vigor of the Hill Giant", source : [["UA:WotM", 10]], description : "When I'm subjected to an effect that would move me at least 5 ft or knock me prone, I can use my reaction to steady myself and stop this from happening. Whenever I eat food as part of a short rest and spend one or more HD to regain HP, I regain additional HP equal to my Con mod + my Proficiency Bonus. [+1 Con]", descriptionFull : "You've manifested the resilience emblematic of hill giants, granting you the following benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase your Constitution score by 1, to a maximum of 20."+ "\n " + toUni("Bulwark") + ". When you are subjected to an effect that would move you at least 5 feet or knock you prone, you can use your reaction to steady yourself. You are then neither moved nor knocked prone."+ "\n " + toUni("Iron Stomach") + ". Whenever you eat food as part of a short rest and spend one or more Hit Dice to regain hit points, you regain additional hit points equal to your Constitution modifier + your proficiency bonus.", prerequisite : "4th-level, Strike of the Giants (Hill Giant) feat", prereqeval : function(v) { var iParentFeat = CurrentFeats.known.indexOf("strike of the giants-ua"); return v.characterLevel >= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'hill giant'; }, scores : [0, 0, 1, 0, 0, 0], action : [["reaction", ""]] }; // Rune Carver Apprentice feat tree FeatsList["rune carver apprentice-ua2"] = { name : "Rune Carver Apprentice", source : [["UA:WotM", 8]], description : "I know Comprehend Languages and cast it once per long rest without a spell slot. I know two runes, which I can inscribe and use to cast their associated spell once per long rest without a spell slot or material components. I can also cast all three spells with spell slots as normal. See notes page.", descriptionFull : "You've begun studying the art of runecraft." + desc([ "You learn the comprehend languages spell. You can cast this spell without expending a spell slot, and you must finish a long rest before you can cast it in this way again. You can also cast this spell using any spell slots you have.", "You know two runes of your choice from the Rune Spells table. Whenever you finish a long rest, you can mark one nonmagical weapon, armor, piece of clothing, or other object you touch with a rune you know. You temporarily learn one 1st-level spell based on the rune you inscribed, as specified in the Rune Spells table, and you know the spell until you finish a long rest, when the rune fades.\n", toUni("Rune\t\tSpell"), "Death\t\tRay of sickness", "Dragon\t\tChromatic orb", "Enemy\t\tDisguise self", "Friend\t\tSpeak with animals", "Journey \tLongstrider", "King\t\tCommand", "Mountain\tEntangle", "Sacred\t\tSanctuary\n", "While you are wearing or carrying the rune-marked object, you can cast the spell associated with the chosen rune once without using a spell slot or material components, and you can also cast the spell using any spell slots you have.", "Your spellcasting ability for this feat is Intelligence, Wisdom, or Charisma (choose when you select this feat).", "Each time you gain a level, you can replace one of the runes you know with a different one from the Rune Spells table." ]), spellcastingAbility : [4,5,6], spellcastingBonus : [{ name : "Once per long rest", spells : ["comprehend languages"], selection : ["comprehend languages"], firstCol : "oncelr+markedbox" }, { name : "Select Rune Spell", spells : ["ray of sickness", "chromatic orb", "disguise self", "speak with animals", "longstrider", "command", "entangle", "sanctuary"], firstCol : "oncelr+markedbox", times : 2, allowUpCasting : true }], calcChanges : { spellAdd : [ function (spellKey, spellObj, spName, isDuplicate) { if (spName === "rune carver apprentice-ua2" && spellKey !== "comprehend languages") { spellObj.components = spellObj.components.replace(/M(\u0192)?/, "M*"); spellObj.description = spellObj.description.replace(/(\d+) ?gp/, "$1*gp"); spellObj.ritual = false; return true; } }, "If the rune spells that I know are inscribed on something in my possession, I can cast each once per long rest without without using a spell slot or material components, or I can cast them using spell slots as normal." ] }, toNotesPage : [{ name : "Features", note : [ "I know Comprehend Languages and can cast it without expending a spell slot once per long rest. I can also cast this spell using any spell slots I have.", "I know two runes of my choice from the list below. Whenever I finish a long rest, I can mark one nonmagical weapon, armor, piece of clothing, or other object I touch with a rune I know. I temporarily learn one 1st-level spell based on the rune I inscribed and I know the spell until I finish a long rest, when the rune fades.", "While I'm wearing or carrying the rune-marked object, I can cast its associated spell once per long rest without using a spell slot or material components. I can also cast the spell using any spell slots I have.", "My spellcasting ability for this is Intelligence, Wisdom, or Charisma (choose when selecting this feat).", "Each time I gain a level, I can replace one of the runes I know with a different one from the list.\n", "RUNE\t\tSPELL\t\tSCHOOL", "Death\t\tRay of Sickness\tNecromancy", "Dragon\t\tChromatic Orb\tEvocation", "Enemy\t\tDisguise Self \tIllusion", "Friend\t\tSpeak With Animals\tDivination", "Journey\t\tLongstrider\t\tTransmutation", "King\t\tCommand\t\tEnchantment", "Mountain\t\tEntangle\t\tConjuration", "Sacred\t\tSanctuary\t\tAbjuration" ] }] }; FeatsList["rune carver adept-ua2"] = { name : "Rune Carver Adept", source : [["UA:WotM", 8]], description : "My Prof Bonus per long rest, whenever I cast a spell of a school that one of my runes belongs to, I can grant a creature I can see within 30 ft a benefit: \u2022 +10 ft walking speed and its movement provokes no opportunity attacks until its turn ends, \u2022 my level in temp HP, or \u2022 adv. on its next attack until its turn ends.", descriptionFull : "Your ability to draw out power from runes has grown." + desc([ "Increase the ability score of the spellcasting ability chosen when you gained the Rune Carver Apprentice feat by 1, to a maximum of 20.", "Whenever you cast a spell from the Rune Spells table, or a spell of a school of magic associated with the spell you marked on an object from your Rune Carver Apprentice feat, you can invoke runic power, granting you one of these benefits of your choice:", toUni("Battle Runes") + ". Choose one creature you can see within 30 feet of yourself. Until the end of that creature's next turn, it has advantage on the next attack roll it makes.", toUni("Healing Runes") + ". Choose one creature you can see within 30 feet of yourself. That creature gains temporary hit points equal to your level.", toUni("Runic Winds") + ". Choose one creature you can see within 30 feet of yourself. Until the end of that creature's turn, its movement doesn't provoke opportunity attacks, and its walking speed increases by 10 feet.", "You can invoke runic power a number of times equal to your proficiency bonus, but no more than once per spell you cast. You regain all expended uses when you finish a long rest." ]), prerequisite : "4th-level, Rune Carver Apprentice feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("rune carver apprentice-ua2") !== -1; }, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", selfChoosing : function() { if (CurrentSpells["rune carver apprentice-ua2"] && !isNaN(CurrentSpells["rune carver apprentice-ua2"].ability)) { return AbilityScores.names[CurrentSpells["rune carver apprentice-ua2"].ability - 1].toLowerCase(); } }, choices : ["Intelligence", "Wisdom", "Charisma"], "intelligence" : { description : "My Prof Bonus per long rest, whenever I cast a spell of a school that one of my runes belongs to, I can grant a creature I can see within 30 ft a benefit: \u2022 +10 ft walking speed and its movement provokes no opportunity attacks until its turn ends, \u2022 my level in temp HP, or \u2022 adv. on its next attack until its turn ends. [+1 Int]';", scores : [0, 0, 0, 1, 0, 0], scorestxt : "+1 to the ability score of the spellcasting ability chosen for the Rune Carver Apprentice feat (Intelligence)" }, "wisdom" : { description : "My Prof Bonus per long rest, whenever I cast a spell of a school that one of my runes belongs to, I can grant a creature I can see within 30 ft a benefit: \u2022 +10 ft walking speed and its movement provokes no opportunity attacks until its turn ends, \u2022 my level in temp HP, or \u2022 adv. on its next attack until its turn ends. [+1 Wis]';", scores : [0, 0, 0, 0, 1, 0], scorestxt : "+1 to the ability score of the spellcasting ability chosen for the Rune Carver Apprentice feat (Wisdom)" }, "charisma" : { description : "My Prof Bonus per long rest, whenever I cast a spell of a school that one of my runes belongs to, I can grant a creature I can see within 30 ft a benefit: \u2022 +10 ft walking speed and its movement provokes no opportunity attacks until its turn ends, \u2022 my level in temp HP, or \u2022 adv. on its next attack until its turn ends. [+1 Cha]';", scores : [0, 0, 0, 0, 0, 1], scorestxt : "+1 to the ability score of the spellcasting ability chosen for the Rune Carver Apprentice feat (Charisma)" } }; // Scion of Elemental X FeatsList["scion of elemental air-ua"] = { name : "Scion of Elemental Air", source : [["UA:WotM", 8]], description : "I know the Minor Illusion cantrip (choice of Int, Wis, or Cha spellcasting ability). As a bonus action, I can gain a flying speed equal to my walking speed until my turn ends, but fall after this movement if I'm airborne and not held aloft by other means. I can do this bonus action my Proficiency Bonus per long rest.", descriptionFull : "You've been exposed to the primordial magic of the Elemental Plane of Air, granting you the following benefits:"+ "\n " + toUni("Elemental Magic") + ". You learn the minor illusion cantrip, using Intelligence, Wisdom, or Charisma as the spellcasting ability (choose when you select this feat)."+ "\n " + toUni("Wind's Glide") + ". You can use a bonus action to gain a flying speed equal to your walking speed until the end of your turn. If you are airborne at the end of your turn after using this movement and aren't held aloft by other means, you fall. You can use this bonus action a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", spellcastingAbility : [4,5,6], spellcastingBonus : [{ name : "Elemental Magic", spell : ["minor illusion"], selection : ["minor illusion"], firstCol : "atwill" }], action : [["bonus action", ""]] }; FeatsList["scion of elemental earth-ua"] = { name : "Scion of Elemental Earth", source : [["UA:WotM", 8]], description : "I know the Druidcraft cantrip (choice of Int, Wis, or Cha spellcasting ability). As a bonus action, I can conjure a bulwark of earth that provides half cover to me or a creature of my choice within 30 ft of myself, until the start of my next turn. I can create this bulwark my Proficiency Bonus per long rest.", descriptionFull : "You've been exposed to the primordial magic of the Elemental Plane of Earth, granting you the following benefits:"+ "\n " + toUni("Elemental Magic") + ". You learn the druidcraft cantrip, using Intelligence, Wisdom, or Charisma as the spellcasting ability (choose when you select this feat)."+ "\n " + toUni("Earthen Shield") + ". You can use a bonus action to conjure a bulwark of earth that provides half cover to you or a creature of your choice within 30 feet of yourself. The bulwark remains until the start of your next turn. You can create this bulwark a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", spellcastingAbility : [4,5,6], spellcastingBonus : [{ name : "Elemental Magic", spell : ["druidcraft"], selection : ["druidcraft"], firstCol : "atwill" }], action : [["bonus action", ""]] }; FeatsList["scion of elemental fire-ua"] = { name : "Scion of Elemental Fire", source : [["UA:WotM", 9]], description : "I know the Dancing Lights and Produce Flame cantrips. I can choose Int, Wis, or Cha as my spellcasting ability for this.. I can cast Produce Flame as normal, and I can also cast it as a bonus action a number of times equal to my Proficiency Bonus, regaining all expended uses when I finish a long rest.", descriptionFull : "You've been exposed to the primordial magic of the Elemental Plane of Fire, granting you the following benefits:"+ "\n " + toUni("Elemental Magic") + ". You learn the dancing lights cantrip, using Intelligence, Wisdom, or Charisma as the spellcasting ability (choose when you select this feat)."+ "\n " + toUni("Fervent Blaze") + ". You learn the produce flame cantrip, using the same spellcasting ability chosen for this feat's Elemental Magic benefit. You can cast produce flame as normal, and you can also cast it as a bonus action a number of times equal to your proficiency bonus, regaining all expended uses when you finish a long rest.", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", spellcastingAbility : [4,5,6], spellcastingBonus : [{ name : "Elemental Magic", spell : ["dancing lights"], selection : ["dancing lights"], firstCol : "atwill" }, { name : "Fervent Blaze", spell : ["produce flame"], selection : ["produce flame"] }, { name : "Fervent Blaze (bonus action)", spell : ["produce flame"], selection : ["produce flame"] }], calcChanges : { spellAdd : [ function (spellKey, spellObj, spName, isDuplicate) { if (spName === "scion of elemental fire-ua" && spellKey === "produce flame") { if (isDuplicate) { spellObj.firstCol = "SP"; spellObj.time = "1 bns"; return true; } else { spellObj.firstCol = "atwill"; } } }, "I can cast Produce Flame as a bonus action a number of times equal to my proficiency bonus, regaining all expended uses when I finish a long rest." ] } }; FeatsList["scion of elemental water-ua"] = { name : "Scion of Elemental Water", source : [["UA:WotM", 9]], description : "", descriptionFull : "You've been exposed to the primordial magic of the Elemental Plane of Water, granting you the following benefits:"+ "\n " + toUni("Elemental Magic") + ". You learn the thaumaturgy cantrip, using Intelligence, Wisdom, or Charisma as the spellcasting ability (choose when you select this feat)."+ "\n " + toUni("Wave Surge") + ". You can use a bonus action to create a forceful surge of water directed at a creature within 15 feet of you that you can see. The target must make a Strength saving throw; the DC for this save is equal to 8 + your proficiency bonus + the spellcasting ability modifier chosen for this feat, and a creature can choose to fail this saving throw. On a failure, the target is pushed up to 10 feet away from you or pulled up to 10 feet toward you (your choice). The water vanishes immediately after the creature succeeds or fails. You can create this effect a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", spellcastingBonus : [{ name : "Elemental Magic", spell : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : "atwill" }], action : [["bonus action", ""]], choices : ["Intelligence", "Wisdom", "Charisma"], "intelligence" : { calculate : "event.value = 'I know the Thaumaturgy cantrip using Int as spellcasting ability. As a bonus action my Proficiency Bonus per long rest, I can have a creature within 15 ft that I can see make a Str save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Int Mod'))) + ' (8 + Prof Bonus + Int mod) or be pushed away from me or pulled towards me for up to 10 ft (my choice). The target can opt to fail.';", spellcastingBonus : [{ name : "Elemental Magic", spell : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : "atwill" }], spellcastingAbility : 4 }, "wisdom" : { calculate : "event.value = 'I know the Thaumaturgy cantrip using Wis as spellcasting ability. As a bonus action my Proficiency Bonus per long rest, I can have a creature within 15 ft that I can see make a Str save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Wis Mod'))) + ' (8 + Prof Bonus + Wis mod) or be pushed away from me or pulled towards me for up to 10 ft (my choice). The target can opt to fail.';", spellcastingBonus : [{ name : "Elemental Magic", spell : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : "atwill" }], spellcastingAbility : 5 }, "charisma" : { calculate : "event.value = 'I know the Thaumaturgy cantrip using Cha as spellcasting ability. As a bonus action my Proficiency Bonus per long rest, I can have a creature within 15 ft that I can see make a Str save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Cha Mod'))) + ' (8 + Prof Bonus + Cha mod) or be pushed away from me or pulled towards me for up to 10 ft (my choice). The target can opt to fail.';", spellcastingBonus : [{ name : "Elemental Magic", spell : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : "atwill" }], spellcastingAbility : 6 } }; // Spells SpellsList["antagonize-ua"] = { name : "Antagonize", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["UA:WotM", 10]], level : 3, school : "Ench", time : "1 a", range : "30 ft", components : "V,S,M", compMaterial : "A playing card depicting a rogue", duration : "Instantaneous", save : "Wis", description : "1 crea save or 4d4+1d4/SL Psychic dmg & melee atk vs. chosen crea; if none in range, dis. on next atk", descriptionShorter : "1 crea save or 4d4+1d4/SL Psychic dmg & melee atk vs. chosen crea; if no in range, dis. next atk", descriptionFull : "You whisper magical words that antagonize one creature of your choice within range. The target must make a Wisdom saving throw. On a failed save, it takes 4d4 psychic damage and must immediately use its reaction, if available, to make a melee attack against another creature of your choice that you can see. If no other creature is within range, the target has disadvantage on the next attack roll it makes before the start of your next turn."+ AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d4 for each slot level above 4th." }; SpellsList["house of cards-ua"] = { name : "House of Cards", classes : ["artificer", "bard", "sorcerer", "wizard"], source : [["UA:WotM", 10]], level : 3, school : "Conj", time : "1 min", range : "Touch", components : "V,S,M\u0192", compMaterial : "A deck of cards", duration : "24 h", description : "30-ft high tower, lifts up; 3 floors, 10-ft sq top floor; 5\xD710 ft card: AC 10, 1 HP; all in half cover (5 sp)", descriptionMetric : "10-m high tower, lifts up; 3 floors, 3-m sq top floor; 1,5\xD73m card: AC 10, 1 HP; all in half cover (5 sp)", descriptionFull : "You touch the ground and conjure forth a defensive structure made of enormous playing cards. The structure rises with you at its center, harmlessly lifting you and any creatures in the area. The house of cards has a square base that is 30 feet on each side, and it has three floors with 10-foot-high ceilings. The second floor is 20 feet on each side, and the top floor is 10 feet on each side\u2014both centered above the bottom floor. Ramps connect the interior of each floor, and empty doorframes connect the interior and exterior of each level. Creatures inside or on top of the structure have half cover."+ "\n Each card that comprises the house is 5 feet wide and 10 feet tall and is very fragile. A card has AC 10 and 1 hit point. The cards are immune to poison and psychic damage. Reducing a card to 0 hit points destroys it. Every time a card is destroyed, roll 1d6. If you roll a 5 or a 6, the house collapses, ending the spell."+ "\n The house and all its cards vanish when the spell ends." }; SpellsList["spirit of death-ua"] = { name : "Spirit of Death", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:WotM", 10]], level : 4, school : "Necro", time : "1 a", range : "60 ft", components : "V,S,M\u0192", compMaterial : "A gilded playing card depicting an avatar of death worth at least 400 gp", duration : "Conc, 1 min", description : "Summon spirit to atk 1 crea; obeys commands; takes turn after me; ends if it or target at 0 hp (400gp)", descriptionFull : "You call forth a spirit that embodies death itself. Choose a creature you can see within range. The spirit manifests in an unoccupied space that you can see within 10 feet of the target, and the target becomes haunted by the spirit. The spirit uses the Reaper Spirit stat block. The spirit disappears when it or the haunted creature is reduced to 0 hit points, or when the spell ends."+ "\n The reaper spirit is an ally to you and your companions. In combat, the spirit shares your initiative count, but it takes its turn immediately after yours. It obeys your verbal commands (no action required by you), but it will only attack the haunted creature. If you don't issue the spirit any commands, it takes the Dodge action and uses its move to avoid danger."+ AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, use the higher level wherever the spell's level appears in the stat block." }; SpellsList["spray of cards-ua"] = { name : "Spray of Cards", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["UA:WotM", 11]], level : 2, school : "Conj", time : "1 a", range : "15-ft cone", components : "V,S,M\u0192", compMaterial : "A deck of cards", duration : "Instantaneous", save : typePF ? "W/D" : "W/d", description : "All in area either: Wis save or blinded 1 rnd; or 2d10+1d10/2SL Force dmg, Dex save halves (5sp)", descriptionFull : "You spray spectral cards from your hands or sleeve; the cards blind or slash at your enemies, and then vanish. Choose one of the following effects for the cards."+ "\n " + toUni("Blinding Cards") + ". Each creature in a 15-foot cone must succeed on a Wisdom saving throw or be blinded until the end of their next turn."+ "\n " + toUni("Cutting Cards") + ". Each creature in a 15-foot cone must make a Dexterity saving throw. A creature takes 2d10 force damage on a failed save or half as much damage on a successful one."+ AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, the damage of cutting cards increases by 1d10 for every two slot levels above 2nd." }; SpellsList["summon warrior spirit-ua"] = { name : "Summon Warrior Spirit", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:WotM", 11]], level : 3, school : "Conj", time : "1 a", range : "90 ft", components : "V,S,M\u0192", compMaterial : "A gilded playing card depicting a knight worth at least 300 gp", duration : "Conc, 1 h", description : "Summon choice of Warrior Spirit; obeys commands; takes turn after mine; disappears at 0 hp (300gp)", descriptionFull : "You call forth a warrior spirit from the legendary Deck of Many Things. It manifests in an unoccupied space that you can see within range. This corporeal form uses the Warrior Spirit stat block. When you cast the spell, choose a type of warrior: barbarian, fighter, or monk. The warrior resembles a humanoid armed appropriately to the chosen class, which determines certain traits in its stat block. The warrior disappears when it drops to 0 hit points or when the spell ends."+ "\n The warrior is an ally to you and your companions. In combat, the warrior shares your initiative count, but it takes its turn immediately after yours. It obeys your verbal commands (no action required by you). If you don't issue any, it takes the Dodge action and uses its move to avoid danger."+ AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, the creature assumes the higher level for that casting wherever it uses the spell's level in its stat block." }; ================================================ FILE: WotC material/all_WotC_published.js ================================================ if (sheetVersion < 14000006) { throw "This add-on script was made for a newer version of the sheet (v14.0.6-beta). Please use this required version or a later version (but lower than v15.0.0) and try again.\n\nYou can get the different versions at www.flapkan.com.\n\nFrom v24.0.0 onwards, the sheet uses the 2024 (5.5e) rules, while lower versions use the 5e (2014) rules."; }; if (sheetVersion >= 15000000) { throw "This add-on script was made for a lower version of the sheet (one before v15.0.0). Please use the required version (v14.0.6-beta) or a later version and try again.\n\nYou can get the different versions at www.flapkan.com.\n\nFrom v24.0.0 onwards, the sheet uses the 2024 (5.5e) rules, while lower versions use the 5e (2014) rules."; }; var iFileName = "all_WotC_published.js"; RequiredSheetVersion("14.0.6-beta", "15.0.0"); // pub_20140715_LMoP.js // This file adds the magic items from the Lost Mines of Phandelver adventure from the D&D 5e starter set to MPMB's Character Record Sheet // Define the source SourceList["LMoP"] = { name : "Lost Mines of Phandelver [items]", abbreviation : "LMoP", group : "Adventure Books", campaignSetting : "Forgotten Realms", url : "https://www.dndbeyond.com/sources/lmop", date : "2014/07/15" }; // Magic Items MagicItemsList["dragonguard"] = { name : "Dragonguard", source : [["LMoP", 48], ["PaBTSO", 72]], type : "armor (breastplate)", rarity : "rare", magicItemTable : "G", description : "This +1 breastplate has a gold dragon motif worked into its design. It grants its wearer advantage on saving throws against the breath weapons of creatures that have the dragon type.", descriptionFull : "This +1 breastplate has a gold dragon motif worked into its design. Created for a human hero of Neverwinter named Tergon, it grants its wearer advantage on saving throws against the breath weapons of creatures that have the dragon type.", weight : 20, armorOptions : [{ regExpSearch : /dragonguard/i, name : "Dragonguard", source : [["LMoP", 48], ["PaBTSO", 72]], type : "medium", ac : "14+1", weight : 20, selectNow : true }], savetxt : { adv_vs : ["breath weapons of dragons"] } } MagicItemsList["hew"] = { name : "Hew", source : [["LMoP", 33], ["PaBTSO", 54]], type : "weapon (battleaxe)", rarity : "uncommon", magicItemTable : "F", description : 'Dwarvish runes on the head of this rusty battleaxe read "Hew". It adds a +1 bonus to attack and damage rolls made with it and deals maximum damage against plant creatures or objects made of wood. While carrying it, I feel uneasy when I travel through a forest, as its creator was a dwarf smith who feuded with dryads.', descriptionFull : 'This rusty old battleaxe of dwarven manufacture has runes in Dwarvish on the axe head which read "Hew". Hew is a +1 battleaxe that deals maximum damage when the wielder hits a plant creature or an object made of wood. The axe\'s creator was a dwarf smith who feuded with the dryads of a forest where he used it for protection while he cut firewood. Whoever carries the axe feels uneasy whenever he or she travels through a forest.', weight : 4, weaponOptions : [{ baseWeapon : "battleaxe", regExpSearch : /\bhew\b/i, name : '"Hew"', source : [["LMoP", 33], ["PaBTSO", 54]], description : "Versatile (1d10); Max damage against plant creatures and wooden objects", modifiers : [1, 1], selectNow : true }] } MagicItemsList["lightbringer"] = { name : "Lightbringer", source : [["LMoP", 48], ["PaBTSO", 54]], type : "weapon (mace)", rarity : "uncommon", magicItemTable : "F", description : "This mace adds a +1 bonus to attack and damage rolls made with it. It is made for a cleric of the god of dawn, with its head shaped like a sunburst and made of solid brass. I can command it to glow as bright as a torch. While glowing, the mace deals an extra 1d6 radiant damage to undead creatures.", descriptionFull : "This +1 mace was made for a cleric of Lathander, the god of dawn. The head of the mace is shaped like a sunburst and is made of solid brass. Named Lightbringer, this weapon glows as bright as a torch when its wielder commands. While glowing, the mace deals an extra 1d6 radiant damage to undead creatures.", weight : 4, weaponOptions : [{ baseWeapon : "mace", regExpSearch : /lightbringer/i, name : "Lightbringer", source : [["LMoP", 48], ["PaBTSO", 54]], description : "Command to glow as torch and deal +1d6 radiant damage to undead", modifiers : [1, 1], selectNow : true }] } MagicItemsList["spider staff"] = { // changed to the new version introduced in Phandelver and Below: The Shattered Obelisk with the prerequisite name : "Spider Staff", source : [["LMoP", 53], ["PaBTSO", 220]], type : "staff", rarity : "rare", magicItemTable : "G", description : "Attacks with this black adamantine quarterstaff topped with a spider deal +1d6 poison damage on a hit. It has 10 charges and regains 1d6+4 expended charges at dawn. If I use its last charge, roll a d20. On a 1, it is destroyed. I can use its charges to cast Spider Climb (1 charge) or Web (2 charges, spell save DC 15).", descriptionFull : "The top of this black, adamantine staff is shaped like a spider. The staff weighs 6 pounds. You must be attuned to the staff to gain its benefits and cast its spells. The staff can be wielded as a quarterstaff. It deals 1d6 extra poison damage on a hit when used to make a weapon attack.\n The staff has 10 charges, which are used to fuel the spells within it. With the staff in hand, you can use your action to cast one of the following spells from the staff if the spell is on your class's spell list: Spider Climb (1 charge) or Web (2 charges, spell save DC 15). No components are required.\n The staff regains 1d6+4 expended charges each day at dusk. If you expend the staff's last charge, roll a d20. On a 1, the staff crumbles to dust and is destroyed.", attunement : true, prerequisite : "Requires attunement by a bard, sorcerer, warlock, or wizard", prereqeval : function(v) { return classes.known.bard || classes.known.sorcerer || classes.known.warlock || classes.known.wizard ? true : false; }, weight : 6, // kept to the original weight usages : 10, recovery : "dawn", additional : "regains 1d6+4", weaponOptions : [{ baseWeapon : "quarterstaff", regExpSearch : /^(?=.*spider)(?=.*staff).*$/i, name : "Spider Staff", source : [["LMoP", 53], ["PaBTSO", 220]], description : "Versatile (1d8); +1d6 poison damage", selectNow : true }], fixedDC : 15, spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "1 charge", spells : ["spider climb"], selection : ["spider climb"], firstCol : 1 }, { name : "2 charges", spells : ["web"], selection : ["web"], firstCol : 2 }] } MagicItemsList["staff of defense"] = { // changed to the new version introduced in Phandelver and Below: The Shattered Obelisk with the prerequisite name : "Staff of Defense", source : [["LMoP", 53]], type : "staff", rarity : "rare", magicItemTable : "G", description : "This slender, hollow staff is made of glass yet is as strong as oak. While holding it, I gain a +1 bonus to AC. It has 10 charges and regains 1d6+4 expended charges at dawn. If I use its last charge, roll a d20. On a 1, it is destroyed. I can use its charges to cast Mage Armor (1 charge) or Shield (2 charges) as an action.", descriptionFull : "This slender, hollow staff is made of glass yet is as strong as oak. It weighs 3 pounds. You must be attuned to the staff to gain its benefits and cast its spells.\n While holding the staff, you have a +1 bonus to your Armor Class.\n The staff has 10 charges, which are used to fuel the spells within it. With the staff in hand, you can use your action to cast one of the following spells from the staff if the spell is on your class's spell list: Mage Armor (1 charge) or Shield (2 charges). No components are required.\n The staff regains 1d6+4 expended charges each day at dawn. If you expend the staff's last charge, roll a d20. On a 1, the staff shatters and is destroyed.", attunement : true, prerequisite : "Requires attunement by a bard, sorcerer, warlock, or wizard", prereqeval : function(v) { return classes.known.bard || classes.known.sorcerer || classes.known.warlock || classes.known.wizard ? true : false; }, weight : 3, usages : 10, recovery : "dawn", additional : "regains 1d6+4", spellcastingAbility : "class", spellFirstColTitle : "Ch", weaponsAdd : { options : ["Staff of Defense"] }, spellcastingBonus : [{ name : "1 charge", spells : ["mage armor"], selection : ["mage armor"], firstCol : 1 }, { name : "2 charges", spells : ["shield"], selection : ["shield"], firstCol : 2 }], spellChanges : { "shield" : { time : "1 a", changes : "Cast as an action." } }, extraAC : [{name : "Staff of Defense", mod : 1, magic : true, text : "I gain a +1 bonus to AC while holding the Staff of Defense."}], } // pub_20140818_PHB.js // This file adds all material from the Player's Handbook to MPMB's Character Record Sheet // Define the source SourceList.P={ name : "Player's Handbook", abbreviation : "PHB", abbreviationSpellsheet : "P", group : "Core Sources", url : "https://dnd.wizards.com/products/rpg_playershandbook", date : "2014/08/19" }; // (sub)Races that are not in the SRD RaceList["mountain dwarf"] = { regExpSearch : /^((?=.*(hylar|daewar))|((?=.*\b(dwarfs?|dwarves|dwarfish|dwarvish|dwarven)\b)(?=.*\b(mountain|shield)\b))).*$/i, name : "Mountain dwarf", sortname : "Dwarf, Mountain", source : [["P", 20]], plural : "Mountain dwarves", size : 3, speed : { walk : { spd : 25, enc : 25 } }, languageProfs : ["Common", "Dwarvish"], vision : [["Darkvision", 60]], savetxt : { adv_vs : ["poison"] }, dmgres : ["Poison"], weaponProfs : [false, false, ["battleaxe", "handaxe", "warhammer", "light hammer"]], armorProfs : [true, true, false, false], toolProfs : [["Smith, brewer, or mason tools", 1]], age : " are considered young until they are 50 and live about 350 years", height : " stand between 4 and 5 feet tall (4' + 2d4\")", weight : " weigh around 150 lb (130 + 2d4 \xD7 2d6 lb)", heightMetric : " stand between 1,2 and 1,5 metres tall (120 + 5d4 cm)", weightMetric : " weigh around 75 kg (60 + 5d4 \xD7 4d6 / 10 kg)", scores : [2, 0, 2, 0, 0, 0], trait : "Mountain Dwarf (+2 Strength, +2 Constitution)\n\nStonecunning:\n Whenever I make an Intelligence (History) check related to the origin of stonework, I am considered proficient in the History skill and add double my proficiency bonus to the check, instead of my normal proficiency bonus." }; RaceList["dark elf"] = { regExpSearch : /^(?!.*half)((?=.*drow)|((?=.*\b(elfs?|elves|elvish|elven)\b)(?=.*\b(dark|underdarks?|deep|depths?)\b))).*$/i, name : "Drow", sortname : "Elf, Dark (Drow)", source : [["P", 24]], plural : "Drow", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Elvish"], vision : [["Darkvision", 120], ["Sunlight Sensitivity", 0]], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["charmed"] }, weaponProfs : [false, false, ["rapier", "shortsword", "hand crossbow"]], skills : ["Perception"], age : " typically claim adulthood around age 100 and can live to be 750 years old", height : " range from under 5 to 5 1/2 feet tall (4'5\" + 2d6\")", weight : " weigh around 100 lb (75 + 2d6 \xD7 1d6 lb)", heightMetric : " range from under 1,5 to 1,7 metres tall (135 + 5d6 cm)", weightMetric : " weigh around 45 kg (35 + 5d6 \xD7 2d6 / 10 kg)", scores : [0, 2, 0, 0, 0, 1], trait : "Drow (+2 Dexterity, +1 Charisma)\nTrance: Elves don't need to sleep, but meditate semiconsciously, for 4 hours a day. This gives the same benefit as a human gets from 8 hours of sleep (long rest takes only 4 hours).\nSunlight Sensitivity: Disadvantage on attack rolls and Wisdom (Perception) checks that rely on sight when I or what I am trying to attack/perceive is in direct sunlight.\nDrow Magic: 1st level: Dancing Lights cantrip; 3rd level: Faerie Fire; 5th level: Darkness. Both spells can be used once per long rest. Charisma is my spellcasting ability for these.", // errata to specify once per day is long rest spellcastingAbility : 6, spellcastingBonus : [{ name : "Drow Magic (level 1)", spells : ["dancing lights"], selection : ["dancing lights"], }], features : { "faerie fire" : { name : "Drow Magic (level 3)", limfeaname : "Faerie Fire", minlevel : 3, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Drow Magic (level 3)", spells : ["faerie fire"], selection : ["faerie fire"], firstCol : "oncelr" }] }, "darkness" : { name : "Drow Magic (level 5)", limfeaname : "Darkness", minlevel : 5, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Drow Magic (level 5)", spells : ["darkness"], selection : ["darkness"], firstCol : "oncelr" }] } } }; RaceList["wood elf"] = { regExpSearch : /^(?!.*half)((?=.*(grugach|kagonesti|silhana))|((?=.*\b(elfs?|elves|elvish|elven)\b)(?=.*\b(woodlands?|woods?|forests?|wilds?|green)\b))).*$/i, name : "Wood elf", sortname : "Elf, Wood", source : [["P", 24]], plural : "Wood elves", size : 3, speed : { walk : { spd : 35, enc : 25 } }, languageProfs : ["Common", "Elvish"], vision : [["Darkvision", 60]], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["charmed"] }, weaponProfs : [false, false, ["longsword", "shortsword", "longbow", "shortbow"]], skills : ["Perception"], age : " typically claim adulthood around age 100 and can live to be 750 years old", height : " range from under 5 to over 6 feet tall (4'6\" + 2d10\")", weight : " weigh around 125 lb (100 + 2d10 \xD7 1d4 lb)", heightMetric : " range from under 1,5 to over 1,8 metres tall (140 + 5d10 cm)", weightMetric : " weigh around 60 kg (45 + 5d10 \xD7 2d4 / 10 kg)", scores : [0, 2, 0, 0, 1, 0], trait : "Wood Elf (+2 Dexterity, +1 Wisdom)\nTrance: Elves don't need to sleep, but meditate semiconsciously, for 4 hours a day. While meditating, I can dream after a fashion; such dreams are actually mental exercises that have become reflexive through years of practice. After resting in this way, I gain the same benefit that a human does from 8 hours of sleep, thus needing only 4 hours for a long rest.\nMask of the Wild: I can attempt to hide even when I am only lightly obscured by foliage, heavy rain, falling snow, mist, and other natural phenomena." }; RaceList["forest gnome"] = { regExpSearch : /^((?=.*\bgnomes?\b)(?=.*\b(woods?|forests?|wilds?|green)\b)).*$/i, name : "Forest gnome", sortname : "Gnome, Forest", source : [["P", 37]], plural : "Forest gnomes", size : 4, speed : { walk : { spd : 25, enc : 15 } }, languageProfs : ["Common", "Gnomish"], vision : [["Darkvision", 60]], savetxt : { text : ["Adv. on Int/Wis/Cha saves vs. magic"] }, age : " start adult life around age 40 and can live 350 to almost 500 years", height : " are 3 to 4 feet tall (2'11\" + 2d4\")", weight : " weigh around 40 lb (35 + 2d4 lb)", heightMetric : " are 90 to 120 cm tall (2'11\" + 5d4)", weightMetric : " weigh around 18 kg (16 + 5d4 / 10 kg)", scores : [0, 1, 0, 2, 0, 0], trait : "Forest Gnome (+1 Dexterity, +2 Intelligence)" + (typePF ? "\n" : " ") + "\nNatural Illusionist:\n I know the Minor Illusion cantrip. Intelligence is my spellcasting ability for it.\n\nSpeak with Small Beasts:\n Through sounds and gestures, I can communicate simple ideas with Small or smaller beasts.", spellcastingAbility : 4, spellcastingBonus : [{ name : "Natural Illusionist", spells : ["minor illusion"], selection : ["minor illusion"], }] }; RaceList["stout halfling"] = { regExpSearch : /^(?=.*\b(halflings?|hobbits?)\b)(?=.*stout).*$/i, name : "Stout halfling", sortname : "Halfling, Stout", source : [["P", 28]], plural : "Stout halflings", size : 4, speed : { walk : { spd : 25, enc : 15 } }, languageProfs : ["Common", "Halfling"], savetxt : { adv_vs : ["frightened", "poison"] }, dmgres : ["Poison"], age : " reach adulthood at age 20 and live around 150 years", height : " average about 3 feet tall (2'7\" + 2d4\")", weight : " weigh around 40 lb (35 + 2d4 lb)", heightMetric : " average about 90 cm tall (80 + 5d4)", weightMetric : " weigh around 18 kg (16 + 5d4 / 10 kg)", scores : [0, 2, 1, 0, 0, 0], trait : "Stout Halfling (+2 Dexterity, +1 Constitution)\n\nLucky: When I roll a 1 on an attack roll, ability check, or saving throw, I can reroll the die and must use the new roll.\n\nHalfling Nimbleness: I can move through the space of any creature that is of a size larger than me." }; // Add racial variants that are not part of the SRD AddRacialVariant("human", "variant", { regExpSearch : /variant/i, source : [["P", 31]], skillstxt : "Choose any one skill", scorestxt : "+1 to two different ability scores of my choice", scores : [0, 0, 0, 0, 0, 0], trait : "Human (+1 to two different ability scores of my choice)\n\nSkills: I gain proficiency in one skill of my choice.\n\nFeat: I gain one feat of my choice.", featsAdd: [{ type: /^(?!.*(blessing|boon|gift|fighting style)).*$/i }], }); // Add the subclasses that are not in the SRD AddSubClass("barbarian", "totem warrior", { regExpSearch : /^(?=.*totem)(?=.*(warrior|fighter|marauder|barbarian|viking|(norse|tribes?|clans?)(wo)?m(a|e)n)).*$/i, subname : "Path of the Totem Warrior", fullname : "Totem Warrior", source : [["P", 50]], features : { "subclassfeature3" : { name : "Spirit Seeker", source : [["P", 50]], minlevel : 3, description: desc("I can cast Beast Sense and Speak with Animals as rituals (PHB 217 \u0026 277)"), spellcastingBonus : [{ name : "Spirit Seeker", spells : ["beast sense", "speak with animals"], selection : ["beast sense", "speak with animals"], firstCol : SpellRitualTag, times : 2 }], spellChanges : { "beast sense" : { time : "10 min", changes : "I can cast this spell only as a ritual, thus its casting time is 10 minutes longer." }, "speak with animals" : { time : "10 min", changes : "I can cast this spell only as a ritual, thus its casting time is 10 minutes longer." } } }, "subclassfeature3.1" : { name : "Totem Spirit", source : [["P", 50]], minlevel : 3, description: desc('Choose Bear, Eagle, Elk, Wolf, or Tiger Spirit using the "Choose Feature" button above'), choices : ["Bear", "Eagle", "Wolf"], "bear" : { name : "Bear Spirit", description: desc("While raging, I have resistance to all damage types except psychic"), dmgres : [["All -Psychic", "All -Psychic (rage)"]], eval : function() { processResistance(false, 'Barbarian: Rage', ClassList.barbarian.features.rage.dmgres); }, removeeval : function() { processResistance(true, 'Barbarian: Rage', ClassList.barbarian.features.rage.dmgres); } }, "eagle" : { name : "Eagle Spirit", description: desc([ "While raging without heavy armor, others have disadv. on opportunity attacks vs. me", "I can use the Dash action as a bonus action", ]), action : [["bonus action", " (Dash)"]] }, "wolf" : { name : "Wolf Spirit", description: desc("While raging, friends have advantage on melee attacks vs. hostiles within 5 ft of me") } }, "subclassfeature6" : { name : "Aspect of the Beast", source : [["P", 50]], minlevel : 6, description: desc('Choose Bear, Eagle, Elk, Wolf, or Tiger Aspect using the "Choose Feature" button above'), choices : ["Bear", "Eagle", "Wolf"], "bear" : { name : "Aspect of the Bear", description: desc("Advantage on Strength checks to push/pull/lift/break; Carrying capacity is doubled"), carryingCapacity : 2 }, "eagle" : { name : "Aspect of the Eagle", description: desc("I can see up to 1 mile away perfectly; No disadvantage on Perception from dim light") }, "wolf" : { name : "Aspect of the Wolf", description: desc("I can track while traveling at a fast pace; I can move stealthily at a normal pace") } }, "subclassfeature10" : { name : "Spirit Walker", source : [["P", 50]], minlevel : 10, description: desc("I can cast Commune with Nature as a ritual"), spellcastingBonus : [{ name : "Spirit Walker", spells : ["commune with nature"], selection : ["commune with nature"], firstCol : SpellRitualTag, }], spellChanges : { "commune with nature" : { time : "11 min", changes : "I can cast this spell only as a ritual, thus its casting time is 10 minutes longer." } } }, "subclassfeature14" : { name : "Totemic Attunement", source : [["P", 50]], minlevel : 14, description: desc('Choose Bear, Eagle, Elk, Wolf, or Tiger Attunement using the "Choose Feature" button'), choices : ["Bear", "Eagle", "Wolf"], "bear" : { name : "Bear Attunement", description: desc([ "While raging, any creature that sees me within 5 ft has disadv. on attacks vs. others", "Enemies that can't perceive me or be frightened are immune", ]), }, "eagle" : { name : "Eagle Attunement", description: desc("While raging, I can fly at my current speed, but I can only stay aloft during my turn") }, "wolf" : { name : "Wolf Attunement", description: desc("If my melee attack hits while raging, I can knock prone as a bonus action (up to Large)"), action : [["bonus action", " (raging: knock prone)"]] } } } }); AddSubClass("bard", "college of valor", { regExpSearch : /^(?=.*(college|bard|minstrel|troubadour|jongleur))(?=.*valor).*$/i, subname : "College of Valor", subnameshort: "Valor", source : [["P", 55]], attacks : [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], features : { "subclassfeature3" : { name : "Bonus Proficiencies", source : [["P", 55]], minlevel : 3, description: desc("I gain proficiency with medium armor, shields, and martial weapons"), armorProfs : [false, true, false, true], weaponProfs : [false, true] }, "subclassfeature3.1" : { name : "Combat Inspiration", source : [["P", 55]], minlevel : 3, description: desc([ "My Bardic Inspiration can also be used to add the die to a weapon damage roll", "Alternatively, it can be used as a reaction to add the die to AC against one attack", ]), }, "subclassfeature14" : { name : "Battle Magic", source : [["P", 55]], minlevel : 14, description: desc("As a bonus action when I use my action to cast a bard spell, I can make a weapon attack"), action : [["bonus action", " (with Bard spell)"]] } } }); AddSubClass("cleric", "knowledge domain", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*(knowledge|wisdom|learning)).*$/i, subname : "Knowledge Domain", subnameshort: "Knowledge", source : [["P", 59]], spellcastingExtra : ["command", "identify", "augury", "suggestion", "nondetection", "speak with dead", "arcane eye", "confusion", "legend lore", "scrying"], features : { "subclassfeature1" : { name : "Blessings of Knowledge", source : [["P", 59]], minlevel : 1, description: desc([ "I learn two languages and gain proficiency and expertise with two skills", "I can choose from the following: Arcana, History, Nature, or Religion", ]), skillstxt : "Choose two from Arcana, History, Nature, and Religion. You also gain expertise with these skills", languageProfs : [2] }, "subclassfeature2" : { name : "Channel Divinity: Knowledge of Ages", source : [["P", 59]], minlevel : 2, description: desc("As an action, I gain proficiency with a chosen skill or tool for 10 minutes"), action : [["action", ""]] }, "subclassfeature6" : { name : "Channel Divinity: Read Thoughts", source : [["P", 59]], minlevel : 6, description: desc([ "As an action, one creature within 60 ft I can see must make a Wisdom save", "If it fails, I can read its surface thoughts for 1 min, as long as it's within 60 ft of me", "As an action, I can end this and cast Suggestion on it (it fails its save automatically)", "If it succeeded on its save, I can't use this feature again on it until I finish a long rest", ]), action : [["action", ""]] }, "subclassfeature8" : { name : "Potent Spellcasting", source : [["P", 60]], minlevel : 8, description : desc("I add my Wisdom modifier to the damage I deal with my cleric cantrips"), calcChanges : GenericClassFeatures["potent spellcasting"].calcChanges }, "subclassfeature17" : { name : "Visions of the Past", source : [["P", 60]], minlevel : 17, description : desc([ "I can see recent events of an object or area by concentrating and praying for 1 min", "I can meditate this way for up to a number of minutes equal to my Wisdom score", "\u2022 Object Reading (after meditating for 1 minute per owner):", " If an owner owned it in the last Wis score in days, I learn how that owner got/lost it", " I also learn the most recent significant event involving the object and the owner", "\u2022 Area Reading (my immediate surroundings, up to a 50-foot cube):", " Going back my Wisdom score in days, per minute I meditate, I learn about one event", " This starts with the most recent event; It can be significant or just important to me" ]), usages : 1, recovery : "short rest" } } }); AddSubClass("cleric", "light domain", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*\b(light|sun|shining)\b).*$/i, subname : "Light Domain", source : [["P", 61]], spellcastingExtra : ["burning hands", "faerie fire", "flaming sphere", "scorching ray", "daylight", "fireball", "guardian of faith", "wall of fire", "flame strike", "scrying"], features : { "subclassfeature1" : { name : "Bonus Cantrip", source : [["P", 61]], minlevel : 1, description: desc("I learn the Light cantrip if I didn't already know it"), spellcastingBonus : [{ name : "Bonus Cantrip (Light)", spells : ["light"], selection : ["light"] }] }, "subclassfeature1.1" : { name : "Warding Flare", source : [["P", 61]], minlevel : 1, description : desc([ "When a creature within 30 ft attacks me and I can see it, I can interpose divine light", "As a reaction, I impose disadv. on the attacker's attack roll (unless it can't be blinded)" ]), usages : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest", action : [["reaction", ""]] }, "subclassfeature2" : { name : "Channel Divinity: Radiance of the Dawn", source : [["P", 61]], minlevel : 2, description: desc([ "As an action, in 30 ft, magical darkness is dispelled and hostiles must make a Con save", "Each takes radiant damage, saves for half, and negates with total cover", ]), additional : ["", "2d10 + 2 damage", "2d10 + 3 damage", "2d10 + 4 damage", "2d10 + 5 damage", "2d10 + 6 damage", "2d10 + 7 damage", "2d10 + 8 damage", "2d10 + 9 damage", "2d10 + 10 dmg", "2d10 + 11 dmg", "2d10 + 12 dmg", "2d10 + 13 dmg", "2d10 + 14 dmg", "2d10 + 15 dmg", "2d10 + 16 dmg", "2d10 + 17 dmg", "2d10 + 18 dmg", "2d10 + 19 dmg", "2d10 + 20 dmg"], action : [["action", ""]] }, "subclassfeature6" : { name : "Improved Flare", source : [["P", 61]], minlevel : 6, description: desc("I can also use my Warding Flare if another is attacked by a creature within 30 ft of me") }, "subclassfeature8" : { name : "Potent Spellcasting", source : [["P", 61]], minlevel : 8, description : desc("I add my Wisdom modifier to the damage I deal with my cleric cantrips"), calcChanges : GenericClassFeatures["potent spellcasting"].calcChanges }, "subclassfeature17" : { name : "Corona of Light", source : [["P", 61]], minlevel : 17, description: desc([ "As an action, I have an aura of 60 ft sunlight and 30 ft dim light for 1 min", "Enemies in the sunlight have disadv. on saves vs. spells that deal fire or radiant damage", ]), action : [["action", " (start/stop)"]] } } }); AddSubClass("cleric", "nature domain", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*\b(nature|natural|animal|element(s|al)?)\b).*$/i, subname : "Nature Domain", source : [["P", 62]], spellcastingExtra : ["animal friendship", "speak with animals", "barkskin", "spike growth", "plant growth", "wind wall", "dominate beast", "grasping vine", "insect plague", "tree stride"], features : { "subclassfeature1" : { name : "Bonus Proficiency", source : [["P", 62]], minlevel : 1, description: desc("I gain proficiency with heavy armor"), armorProfs : [false, false, true, false] }, "subclassfeature1.1" : { name : "Acolyte of Nature", source : [["P", 62]], minlevel : 1, description: desc("I learn a druid cantrip and proficiency with a skill: Animal Handling, Nature, Survival"), skillstxt : "Choose one from Animal Handling, Nature, or Survival", spellcastingBonus : [{ name : "Acolyte of Nature", "class" : "druid", level : [0, 0] }] }, "subclassfeature2" : { name : "Channel Divinity: Charm Animals and Plants", source : [["P", 62]], minlevel : 2, description: desc([ "As an action, all beasts and plants within 30 ft that I can see must make a Wis save", "If failed, each is charmed and friendly to allies and me for 1 min or until damaged", ]), action : [["action", ""]] }, "subclassfeature6" : { name : "Dampen Elements", source : [["P", 62]], minlevel : 6, description: desc([ "As a reaction, if an ally in 30 ft or I takes acid/cold/fire/lightning/thunder damage,", "I can grant resistance against that instance of damage", ]), action : [["reaction", ""]] }, "subclassfeature8" : { name : "Divine Strike", source : [["P", 62]], minlevel : 8, description: desc("Once per turn, when I hit a creature with a weapon attack, I can do extra damage"), additional : levels.map(function (n) { return n < 8 ? "" : "+" + (n < 14 ? 1 : 2) + "d8 cold/fire/lightning damage (choice)"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && v.isWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.cleric.level < 14 ? 1 : 2) + 'd8 cold/fire/lightning damage'; } }, "Once per turn, I can have one of my weapon attacks that hit do extra cold, fire, or lightning damage (my choice)." ] } }, "subclassfeature17" : { name : "Master of Nature", source : [["P", 62]], minlevel : 17, description: desc("As a bonus action, I can command creatures that are charmed by my Channel Divinity"), action : [["bonus action", ""]] } } }); AddSubClass("cleric", "tempest domain", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*\b(tempest|destruction|storm)\b).*$/i, subname : "Tempest Domain", source : [["P", 62]], spellcastingExtra : ["fog cloud", "thunderwave", "gust of wind", "shatter", "call lightning", "sleet storm", "control water", "ice storm", "destructive wave", "insect plague"], features : { "subclassfeature1" : { name : "Bonus Proficiency", source : [["P", 62]], minlevel : 1, description: desc("I gain proficiency with martial weapons and heavy armor"), armorProfs : [false, false, true, false], weaponProfs : [false, true] }, "subclassfeature1.1" : { name : "Wrath of the Storm", source : [["P", 62]], minlevel : 1, description: desc([ "As a reaction, when a creature I can see within 5 ft hits me, I can thunderously rebuke", "It takes 2d8 lightning or thunder damage (my choice) that a Dex save can halve", ]), usages : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest", action : [["reaction", ""]] }, "subclassfeature2" : { name : "Channel Divinity: Destructive Wrath", source : [["P", 62]], minlevel : 2, description: desc("Instead of rolling, I can do maximum damage when I do lightning or thunder damage") }, "subclassfeature6" : { name : "Thunderbolt Strike", source : [["P", 62]], minlevel : 6, description: desc("When I deal lightning damage to a Large or smaller foe, I can push it up to 10 ft away") }, "subclassfeature8" : { name : "Divine Strike", source : [["P", 62]], minlevel : 8, description: desc("Once per turn, when I hit a creature with a weapon attack, I can do extra damage"), additional : levels.map(function (n) { if (n < 8) return ""; return "+" + (n < 14 ? 1 : 2) + "d8 thunder damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && v.isWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.cleric.level < 14 ? 1 : 2) + 'd8 thunder damage'; } }, "Once per turn, I can have one of my weapon attacks that hit do extra thunder damage." ] } }, "subclassfeature17" : { name : "Stormborn", source : [["P", 62]], minlevel : 17, description: desc("Whenever I'm not underground or indoors, I have a fly speed equal to my current speed"), speed : { fly : { spd : "walk", enc : "walk" } } } } }); AddSubClass("cleric", "trickery domain", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*(trickery|trickster|illusion)).*$/i, subname : "Trickery Domain", subnameshort: "Trickery", source : [["P", 63]], spellcastingExtra : ["charm person", "disguise self", "mirror image", "pass without trace", "blink", "dispel magic", "dimension door", "polymorph", "dominate person", "modify memory"], features : { "subclassfeature1" : { name : "Blessing of the Trickster", source : [["P", 63]], minlevel : 1, description: desc([ "As an action, a willing creature I touch (not me) has adv. on Dex (Stealth) checks", "This lasts for 1 hour or until I use it again", ]), action : [["action", ""]] }, "subclassfeature2" : { name : "Channel Divinity: Invoke Duplicity", source : [["P", 63]], minlevel : 2, description : desc([ "As an action, I create illusory duplicates of myself within 30 ft of me for 1 min (conc)", "As a bonus action, I can move them 30 ft to space(s) I can see within 120 ft of me", "I can cast spells as though I were in a duplicate's space, using my own senses", "I have advantage on attacks if the target is within 5 ft of a duplicate and me" ]), additional : levels.map(function (n) { return n < 2 ? "" : (n < 17 ? 1 : 2) + " illusory duplicate" + (n < 17 ? "" : "s"); }), action : [["action", ""], ["bonus action", "Move Duplicate(s)"]] }, "subclassfeature6" : { name : "Channel Divinity: Cloak of Shadows", source : [["P", 63]], minlevel : 6, description: desc("As an action, I become invisible until the end of my next turn or I attack/cast a spell"), action : [["action", ""]] }, "subclassfeature8" : { name : "Divine Strike", source : [["P", 63]], minlevel : 8, description: desc("Once per turn, when I hit a creature with a weapon attack, I can do extra damage"), additional : levels.map(function (n) { return n < 8 ? "" : "+" + (n < 14 ? 1 : 2) + "d8 poison damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && v.isWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.cleric.level < 14 ? 1 : 2) + 'd8 poison damage'; } }, "Once per turn, I can have one of my weapon attacks that hit do extra poison damage." ] } }, "subclassfeature17" : { name : "Improved Duplicity", source : [["P", 63]], minlevel : 17, description : desc([ "When I use Invoke Duplicity, I make four illusory duplicates instead of one", "I can move any number of the illusory duplicates as part of the same bonus action" ]) } } }); AddSubClass("cleric", "war domain", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*\b(war|fighting|conflict)\b).*$/i, subname : "War Domain", source : [["P", 63]], spellcastingExtra : ["divine favor", "shield of faith", "magic weapon", "spiritual weapon", "crusader's mantle", "spirit guardians", "freedom of movement", "stoneskin", "flame strike", "hold monster"], features : { "subclassfeature1" : { name : "Bonus Proficiency", source : [["P", 63]], minlevel : 1, description: desc("I gain proficiency with martial weapons and heavy armor"), armorProfs : [false, false, true, false], weaponProfs : [false, true] }, "subclassfeature1.1" : { name : "War Priest", source : [["P", 63]], minlevel : 1, description: desc("When I use the Attack action, I can make a weapon attack as a bonus action"), usages : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest", action : [["bonus action", " (with Attack action)"]] }, "subclassfeature2" : { name : "Channel Divinity: Guided Strike", source : [["P", 63]], minlevel : 2, description: desc("When I make an attack roll, I can add a +10 bonus to the roll after seeing the d20 roll") }, "subclassfeature6" : { name : "Channel Divinity: War God's Blessing", source : [["P", 63]], minlevel : 6, description : desc([ "As a reaction, when a creature within 30 ft makes an attack roll, I can bless its attack", "The creature then adds a +10 bonus to the roll; I can do this after seeing the d20 roll" ]), action : [["reaction", ""]] }, "subclassfeature8" : { name : "Divine Strike", source : [["P", 63]], minlevel : 8, description: desc("Once per turn, when I hit a creature with a weapon attack, I can do extra damage"), additional : levels.map(function (n) { if (n < 8) return ""; return "+" + (n < 14 ? 1 : 2) + "d8 damage of the weapon's type"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && v.isWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.cleric.level < 14 ? 1 : 2) + 'd8 damage'; } }, "Once per turn, I can have one of my weapon attacks that hit do extra damage." ] } }, "subclassfeature17" : { name : "Avatar of Battle", source : [["P", 63]], minlevel : 17, description: desc("I have resistance to bludgeoning/piercing/slashing damage from nonmagical weapons"), dmgres : [["Bludgeoning", "Bludg. (nonmagical)"], ["Piercing", "Pierc. (nonmagical)"], ["Slashing", "Slash. (nonmagical)"]] } } }); AddSubClass("druid", "circle of the moon", { regExpSearch : /^(?=.*(druid|shaman))((?=.*\bmoon\b)|((?=.*\bmany\b)(?=.*\bforms?\b))).*$/i, subname : "Circle of the Moon", subnameshort: "Moon", source : [["P", 69]], features : { "subclassfeature2" : { name : "Circle Forms", source : [["P", 69]], minlevel : 2, description: desc("I am able to transform into more dangerous animal forms when using Wild Shape") }, "subclassfeature2.wild shape" : { name : "Wild Shape", source : [["P", 66]], minlevel : 2, description : desc([ "As a bonus action, I assume the shape of a beast I have seen before with these rules:", " \u2022 I gain all its game statistics except Intelligence, Wisdom, or Charisma", " \u2022 I get its skill/saving throw prof. while keeping my own, using whichever is higher", " \u2022 I assume the beast's HP and HD; I get mine back when I revert back", " \u2022 I can't cast spells in beast form, but transforming doesn't break concentration", " \u2022 I retain features from class, race, etc., but I don't retain special senses", " \u2022 I can choose whether equipment falls to the ground, merges, or stays worn", " \u2022 I revert if out of time or unconscious; if KOd by damage, excess damage carries over" ]), usages : ClassList.druid.features["subclassfeature2.wild shape"].usages, recovery : "short rest", additional : levels.map(function (n) { if (n < 2) return ""; var cr = Math.max(1, Math.floor(n/3)); var hr = Math.floor(n/2); var limits = n < 4 ? ", no fly/swim" : n < 8 ? ", no fly" : ""; return "CR " + cr + limits + "; " + hr + (limits.length ? " h" : " hours"); }), action : [["bonus action", " (start/stop)"]], eval : function() { processActions(false, "Druid: Wild Shape", ClassList.druid.features["subclassfeature2.wild shape"].action, "Wild Shape"); }, wildshapePageInfo: { uses: ClassList.druid.features["subclassfeature2.wild shape"].wildshapePageInfo.uses, duration: ClassList.druid.features["subclassfeature2.wild shape"].wildshapePageInfo.duration, limitations: levels.map(function (n) { var CR = Math.max(1, Math.floor(n/3)); var limits = n < 4 ? ", no fly/swim" : ", no fly speed"; return n < 8 ? "max CR " + CR + limits : "CR " + CR + "or lower"; }), }, }, "subclassfeature2.1" : { name : "Combat Wild Shape", source : [["P", 69]], minlevel : 2, description: desc([ "As a bonus action while in Wild Shape, I can expend spell slots to heal myself", "I regain 1d8 HP per expended spell slot level; I can use Wild Shape as a bonus action", ]), action : [["bonus action", " (heal)"]], removeeval : function() { processActions(true, "Druid: Wild Shape", ClassList.druid.features["subclassfeature2.wild shape"].action, "Wild Shape"); } }, "subclassfeature6" : { name : "Primal Strike", source : [["P", 69]], minlevel : 6, description: desc("My attacks count as magical while in Wild Shape") }, "subclassfeature10" : { name : "Elemental Wild Shape", source : [["P", 69]], minlevel : 10, description: desc("I can transform into an air/earth/fire/water elemental by expending 2 Wild Shape uses") }, "subclassfeature14" : { name : "Thousand Forms", source : [["P", 69]], minlevel : 14, description: desc("I can cast Alter Self at will without using a spell slot"), spellcastingBonus : [{ name : "Thousand Forms", spells : ["alter self"], selection : ["alter self"], firstCol : "atwill", }] } } }); AddSubClass("fighter", "battle master", { regExpSearch : /^(?=.*(war|fighter|battle|martial))(?=.*master).*$/i, subname : "Battle Master", fullname : "Battle Master", source : [["P", 73]], abilitySave : 1, abilitySaveAlt : 2, features : { "subclassfeature3" : { name : "Combat Superiority", source : [["P", 73]], minlevel : 3, description: desc([ "I gain a number of superiority dice that I can use to fuel special Maneuvers", "I regain all superiority dice after a short rest", ]), additional : ["", "", "d8", "d8", "d8", "d8", "d8", "d8", "d8", "d10", "d10", "d10", "d10", "d10", "d10", "d10", "d10", "d12", "d12", "d12"], usages : [0, 0, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6], recovery : "short rest" }, "subclassfeature3.1" : { name : "Maneuvers", source : [["P", 73]], minlevel : 3, description: desc([ 'Use the "Choose Feature" button above to add a Maneuver to the third page', "I can use a Maneuver by expending a superiority die (only one Maneuver per attack)", ]), additional : levels.map(function (n) { return n < 3 ? "" : (n < 7 ? 3 : n < 10 ? 5 : n < 15 ? 7 : 9) + " known"; }), extraname : "Maneuver", extrachoices : ["Commander's Strike", "Disarming Attack", "Distracting Strike", "Evasive Footwork", "Feinting Attack", "Goading Attack", "Lunging Attack", "Maneuvering Attack", "Menacing Attack", "Parry", "Precision Attack", "Pushing Attack", "Rally", "Riposte", "Sweeping Attack", "Trip Attack"], extraTimes : levels.map(function (n) { return n < 3 ? 0 : n < 7 ? 3 : n < 10 ? 5 : n < 15 ? 7 : 9; }), "commander's strike" : { name : "Commander's Strike", source : [["P", 74]], description: desc([ "I forgo one attack of my Attack action to use a bonus action to direct an ally I see/hear", "The ally can use a reaction to make an attack, adding the superiority die to damage", ]), action : [["bonus action", " (with Attack action)"]] }, "disarming attack" : { name : "Disarming Attack", source : [["P", 74]], description: desc([ "Use after hitting a creature; I add the superiority die to my attack's damage", "Target makes a Strength save or drops a held object of my choice to its feet", ]), }, "distracting strike" : { name : "Distracting Strike", source : [["P", 74]], description: desc([ "Use after hitting a creature; I add the superiority die to my attack's damage", "The next attack of an ally before my next turn has adv. against the creature", ]), }, "evasive footwork" : { name : "Evasive Footwork", source : [["P", 74]], description: desc("Use when moving; I add the superiority die to my AC until I stop moving") }, "feinting attack" : { name : "Feinting Attack", source : [["P", 74]], description: desc([ "As a bonus action, I can feint to gain adv. on my next attack this turn vs. a target in 5 ft", "If the attack hits, I add the superiority die to my attack's damage", ]), action : [["bonus action", ""]] }, "goading attack" : { name : "Goading Attack", source : [["P", 74]], description: desc([ "Use after hitting a creature; I add the superiority die to my attack's damage", "Target makes a Wis save or has disadv. vs. other targets until the end of my next turn", ]), }, "lunging attack" : { name : "Lunging Attack", source : [["P", 74]], description: desc([ "I can spend a superiority die to increase the reach of a melee weapon attack by 5 ft", "If the attack hits, I add the superiority die to my attack's damage", ]), }, "maneuvering attack" : { name : "Maneuvering Attack", source : [["P", 74]], description: desc([ "Use after hitting a creature; I add the superiority die to my attack's damage", "Ally can use reaction to move half speed without opportunity attack from the target", ]), }, "menacing attack" : { name : "Menacing Attack", source : [["P", 74]], description: desc([ "Use after hitting a creature; I add the superiority die to my attack's damage", "Target makes a Wisdom save or is frightened of me until the end of my next turn", ]), }, "parry" : { name : "Parry", source : [["P", 74]], description: desc("When damaged in melee, I can use a reaction to reduce it by superiority die + Dex mod"), action : [["reaction", " (when damaged in melee)"]] }, "precision attack" : { name : "Precision Attack", source : [["P", 74]], description: desc("I add the superiority die to my attack roll, either before or after rolling") }, "pushing attack" : { name : "Pushing Attack", source : [["P", 74]], description: desc([ "Use after hitting a creature; I add the superiority die to the attack's damage", "If target is Large or smaller, it must make a Strength save or be pushed up to 15 ft away", ]), }, "rally" : { name : "Rally", source : [["P", 74]], description: desc("Ally that can see/hear me gets temporary HP equal to superiority die + Charisma mod"), action : [["bonus action", ""]] }, "riposte" : { name : "Riposte", source : [["P", 74]], description: desc([ "When missed in melee, I can use my reaction to make one melee attack vs. the attacker", "If the attack hits, I add the superiority die to my attack's damage", ]), action : [["reaction", " (after missed in melee)"]] }, "sweeping attack" : { name : "Sweeping Attack", source : [["P", 74]], description: desc([ "Use after hitting a creature and a second creature is within 5 ft of the first", "If the original attack roll hits this second creature, it takes the superiority die in damage", ]), }, "trip attack" : { name : "Trip Attack", source : [["P", 74]], description: desc([ "Use after hitting a creature; I add the superiority die to the attack's damage", "If target is Large or smaller, it must make a Strength save or be knocked prone", ]), } }, "subclassfeature3.2" : { name : "Student of War", source : [["P", 73]], minlevel : 3, description: desc("I have proficiency with one artisan's tool set of my choice"), toolProfs : [["Artisan's tools", 1]] }, "subclassfeature7" : { name : "Know Your Enemy", source : [["P", 73]], minlevel : 7, description: desc("If I spend 1 min studying someone, the DM will tell me info about him/her") }, "subclassfeature10" : { name : "Improved Combat Superiority", source : [["P", 74]], minlevel : 10, description: desc("My superiority dice turn into d10s at 10th level and into d12s at 18th level") }, "subclassfeature15" : { name : "Relentless", source : [["P", 74]], minlevel : 15, description: desc("I regain one superiority die if I have no more remaining when I roll initiative") } } }); AddSubClass("fighter", "eldritch knight", { regExpSearch : /^(?!.*(exalted|sacred|holy|divine|nature|natural|purple.*dragon|green|arcane archer))(?=.*(knight|fighter|warrior|militant|warlord|phalanx|gladiator|trooper))(?=.*\b(eldritch|arcane|magic|mage|witch)\b).*$/i, subname : "Eldritch Knight", fullname : "Eldritch Knight", source : [["P", 75]], abilitySave : 4, spellcastingFactor : 3, spellcastingList : { "class" : "wizard", school : ["Evoc", "Abjur"], level : [0, 4] }, spellcastingKnown : { cantrips : [0, 0, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3], spells : [0, 0, 2, 3, 3, 3, 4, 4, 4, 5, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9] }, features : { "action surge" : { name : "Action Surge", source : [["P", 72]], minlevel : 2, description: desc("I can take one additional action on my turn on top of my normally allowed actions"), usages : [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2], recovery : "short rest", additional : ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "30 ft teleport", "30 ft teleport", "30 ft teleport", "30 ft teleport", "30 ft teleport", "30 ft teleport"] }, "subclassfeature3" : { name : "Spellcasting", source : [["P", 75]], minlevel : 3, description: desc("I can cast known wizard cantrips/spells, using Intelligence as my spellcasting ability"), additional : ["", "", "2 cantrips \u0026 3 spells known", "2 cantrips \u0026 4 spells known", "2 cantrips \u0026 4 spells known", "2 cantrips \u0026 4 spells known", "2 cantrips \u0026 5 spells known", "2 cantrips \u0026 6 spells known", "2 cantrips \u0026 6 spells known", "3 cantrips \u0026 7 spells known", "3 cantrips \u0026 8 spells known", "3 cantrips \u0026 8 spells known", "3 cantrips \u0026 9 spells known", "3 cantrips \u0026 10 spells known", "3 cantrips \u0026 10 spells known", "3 cantrips \u0026 11 spells known", "3 cantrips \u0026 11 spells known", "3 cantrips \u0026 11 spells known", "3 cantrips \u0026 12 spells known", "3 cantrips \u0026 13 spells known"], spellcastingBonus : [{ // the spells gained at level 3, 8, 14, 20 name : "From any school", "class" : "wizard", times : [0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4], level : [1, 4] }] }, "subclassfeature3.1" : { name : "Weapon Bond", source : [["P", 75]], minlevel : 3, description: desc([ "I can bond with up to two weapons by spending a short rest with each", "I can't be disarmed of a bonded weapon and I can summon one as a bonus action", ]), action : [["bonus action", ""]] }, "subclassfeature7" : { name : "War Magic", source : [["P", 75]], minlevel : 7, description: desc("When I use my action to cast a cantrip, I can make a weapon attack as a bonus action"), action : [["bonus action", ""]] }, "subclassfeature10" : { name : "Eldritch Strike", source : [["P", 75]], minlevel : 10, description: desc([ "A creature hit by my weapon attack has disadv. on the save vs. the next spell I cast", "This lasts until the end of my next turn", ]), }, "subclassfeature15" : { name : "Arcane Charge", source : [["P", 75]], minlevel : 15, description: desc([ "When I use Action Surge, I can also teleport up to 30 ft to an empty space I can see", "I can do so before or after the extra action", ]), }, "subclassfeature18" : { name : "Improved War Magic", source : [["P", 75]], minlevel : 18, description: desc("When I use my action to cast a spell, I can make a weapon attack as a bonus action"), action : [["bonus action", ""]] } } }); AddSubClass("monk", "way of the four elements", { regExpSearch : /^(?=.*\b(four|4)\b)((?=.*elements?)|((?=.*earth)|(?=.*(wind|air))|(?=.*fire)|(?=.*water)))((?=.*(monk|monastic))|(((?=.*martial)(?=.*(artist|arts)))|((?=.*spiritual)(?=.*warrior)))).*$/i, subname : "Way of the Four Elements", subnameshort: "Four Elements", source : [["P", 80]], features : { "subclassfeature3" : { name : "Disciple of the Elements", source : [["P", 80]], minlevel : 3, description: desc([ "I know Elemental Attunement and additional Elemental Disciplines, depending on level", 'Use the "Choose Feature" button above to add Elemental Disciplines to the third page', "From 5th level onward, I can use additional ki points to increase their spell slot level", "I can trade known Elemental Disciplines for others when I gain new ones", ]), additional : levels.map(function (n) { return n < 3 ? "" : ((n < 6 ? 2 : n < 11 ? 3 : n < 17 ? 4 : 5) + " known; ") + (n < 5 ? 2 : n < 9 ? 3 : n < 13 ? 4 : n < 17 ? 5 : 6) + " max ki"; }), extraname : "Elemental Discipline", extrachoices : ["Breath of Winter (prereq: level 17 monk)", "Clench of the North Wind (prereq: level 6 monk)", "Elemental Attunement", "Eternal Mountain Defense (prereq: level 17 monk)", "Fangs of the Fire Snake", "Fist of Four Thunders", "Fist of Unbroken Air", "Flames of the Phoenix (prereq: level 11 monk)", "Gong of the Summit (prereq: level 6 monk)", "Mist Stance (prereq: level 11 monk)", "Ride the Wind (prereq: level 11 monk)", "River of Hungry Flame (prereq: level 17 monk)", "Rush of the Gale Spirits", "Shape the Flowing River", "Sweeping Cinder Strike", "Water Whip", "Wave of Rolling Earth (prereq: level 17 monk)"], extraTimes : levels.map(function (n) { return n < 3 ? 0 : n < 6 ? 2 : n < 11 ? 3 : n < 17 ? 4 : 5; }), autoSelectExtrachoices : [{ extrachoice : "elemental attunement" }], "elemental attunement" : { name : "Elemental Attunement", source : [["P", 81]], description: desc([ "As an action, I can briefly control elemental forces within 30 ft of me", "I can make a harmless sensory effect, light/snuff light, chill/warm 1 lb for 1 hour,", "or I cause earth/fire/water/mist in a 1 ft cube to shape itself into a form for 1 minute", ]), action : [["action", ""]] }, "breath of winter (prereq: level 17 monk)" : { name : "Breath of Winter", source : [["P", 81]], additional: "6 ki points", description: desc("As an action, I can cast Cone of Cold without material components"), spellcastingBonus : [{ name : "Breath of Winter", spells : ["cone of cold"], selection : ["cone of cold"], firstCol : 6 }], spellFirstColTitle : "Ki", prereqeval : function(v) { return classes.known.monk.level >= 17; }, spellChanges : { "cone of cold" : { components : "V,S", compMaterial : "", allowUpCasting : false, changes : "With the Breath of Winter discipline, I can cast Cone of Cold without a material component." } } }, "clench of the north wind (prereq: level 6 monk)" : { name : "Clench of the North Wind", source : [["P", 81]], additional: "3 ki points", description: desc("As an action, I can cast Hold Person without material components"), spellcastingBonus : [{ name : "Clench of the North Wind", spells : ["hold person"], selection : ["hold person"], firstCol : 3 }], spellFirstColTitle : "Ki", prereqeval : function(v) { return classes.known.monk.level >= 6; }, spellChanges : { "hold person" : { components : "V,S", compMaterial : "", allowUpCasting : false, changes : "With the Clench of the North Wind discipline, I can cast Hold Person without a material component." } } }, "eternal mountain defense (prereq: level 17 monk)" : { // errata from level 11 to level 17 name : "Eternal Mountain Defense", source : [["P", 81]], additional: "5 ki points", description: desc("As an action, I can cast Stoneskin on myself without material components"), spellcastingBonus : [{ name : "Eternal Mountain Defense", spells : ["stoneskin"], selection : ["stoneskin"], firstCol : 5 }], spellFirstColTitle : "Ki", prereqeval : function(v) { return classes.known.monk.level >= 17; }, spellChanges : { "stoneskin" : { range : "Self", components : "V,S", compMaterial : "", description : "I gain resistance to nonmagical Bludgeoning, Piercing, and Slashing damage", changes : "With the Eternal Mountain Defense discipline, I can cast Stoneskin without a material component but only on myself." } } }, "fangs of the fire snake" : { name : "Fangs of the Fire Snake", source : [["P", 81]], additional: "1 ki point", description: desc([ "With Attack action, my unarmed strikes +10 ft reach and deal fire damage this turn", "Also, I can spent an additional 1 ki point to cause an attack to deal +1d10 fire damage", ]), calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == "unarmed strike" && (/^(?=.*fire)(?=.*snake).*$/i).test(v.WeaponTextName)) { fields.Description += (fields.Description ? '; ' : '') + 'After hit, spend 1 ki point for +1d10 fire damage'; fields.Range = 'Melee (15 ft reach)'; fields.Damage_Type = 'fire'; }; }, "If I include the words 'Fire Snake' in the name of an unarmed strike, it gets +10 ft reach, does fire damage, and gains the option to deal +1d10 fire damage by spending 1 additional ki point." ] } }, "fist of four thunders" : { name : "Fist of Four Thunders", source : [["P", 81]], additional: "2 ki points", description: desc("As an action, I can cast Thunderwave"), spellcastingBonus : [{ name : "Fist of Four Thunders", spells : ["thunderwave"], selection : ["thunderwave"], firstCol : 2 }], spellFirstColTitle : "Ki", spellChanges : { "thunderwave" : { allowUpCasting : false, changes : "With the Fist of Four Thunders discipline, I can cast Thunderwave." } } }, "fist of unbroken air" : { name : "Fist of Unbroken Air", source : [["P", 81]], additional: "2 ki points; +1d10/extra ki point", description: desc([ "As an action, target within 30 ft takes 3d10 bludgeoning damage (spend ki for more)", "It is also pushed up to 20 ft away from me and knocked prone", "It can make a Strength save to halve damage and avoid being pushed and knocked prone", ]), action : [["action", ""]] }, "flames of the phoenix (prereq: level 11 monk)" : { name : "Flames of the Phoenix", source : [["P", 81]], additional: "4 ki points", description: desc("As an action, I can cast Fireball without material components"), spellcastingBonus : [{ name : "Flames of the Phoenix", spells : ["fireball"], selection : ["fireball"], firstCol : 4 }], spellFirstColTitle : "Ki", prereqeval : function(v) { return classes.known.monk.level >= 11; }, spellChanges : { "fireball" : { components : "V,S", compMaterial : "", allowUpCasting : false, changes : "With the Flames of the Phoenix discipline, I can cast Fireball without a material component." } } }, "gong of the summit (prereq: level 6 monk)" : { name : "Gong of the Summit", source : [["P", 81]], additional: "3 ki points", description: desc("As an action, I can cast Shatter without material components"), spellcastingBonus : [{ name : "Gong of the Summit", spells : ["shatter"], selection : ["shatter"], firstCol : 3 }], spellFirstColTitle : "Ki", prereqeval : function(v) { return classes.known.monk.level >= 6; }, spellChanges : { "shatter" : { components : "V,S", compMaterial : "", allowUpCasting : false, changes : "With the Gong of the Summit discipline, I can cast Shatter without a material component." } } }, "mist stance (prereq: level 11 monk)" : { name : "Mist Stance", source : [["P", 81]], additional: "4 ki points", description: desc("As an action, I can cast Gaseous Form on myself without material components"), spellcastingBonus : [{ name : "Mist Stance", spells : ["gaseous form"], selection : ["gaseous form"], firstCol : 4 }], spellFirstColTitle : "Ki", prereqeval : function(v) { return classes.known.monk.level >= 11; }, spellChanges : { "gaseous form" : { range : "Self", components : "V,S", compMaterial : "", description : "I turn into a misty cloud with fly 10 ft, resist. to nonmagical dmg, adv. on Str/Dex/saves", changes : "With the Mist Stance discipline, I can cast Gaseous Form without a material component, but only on myself." } } }, "ride the wind (prereq: level 11 monk)" : { name : "Ride the Wind", source : [["P", 81]], additional: "4 ki points", description: desc("As an action, I can cast Fly on myself without material components"), spellcastingBonus : [{ name : "Ride the Wind", spells : ["fly"], selection : ["fly"], firstCol : 4 }], spellFirstColTitle : "Ki", prereqeval : function(v) { return classes.known.monk.level >= 11; }, spellChanges : { "fly" : { range : "Self", components : "V,S", compMaterial : "", description : "I gain 60 ft flying speed", changes : "With the Ride the Wind discipline, I can cast Fly without a material component but only on myself." } } }, "river of hungry flame (prereq: level 17 monk)" : { name : "River of Hungry Flame", source : [["P", 81]], additional: "5 ki points", description: desc("As an action, I can cast Wall of Fire without material components"), spellcastingBonus : [{ name : "River of Hungry Flame", spells : ["wall of fire"], selection : ["wall of fire"], firstCol : 5 }], spellFirstColTitle : "Ki", prereqeval : function(v) { return classes.known.monk.level >= 17; }, spellChanges : { "wall of fire" : { components : "V,S", compMaterial : "", allowUpCasting : false, changes : "With the River of Hungry Flame discipline, I can cast Wall of Fire without a material component." } } }, "rush of the gale spirits" : { name : "Rush of the Gale Spirits", source : [["P", 81]], additional: "2 ki points", description: desc("As an action, I can cast Gust of Wind without material components"), spellcastingBonus : [{ name : "Rush of the Gale Spirits", spells : ["gust of wind"], selection : ["gust of wind"], firstCol : 2 }], spellFirstColTitle : "Ki", spellChanges : { "gust of wind" : { components : "V,S", compMaterial : "", changes : "With the Rush of the Gale Spirits discipline, I can cast Gust of Wind without a material component." } } }, "shape the flowing river" : { name : "Shape the Flowing River", source : [["P", 81]], additional: "1 ki point", description: desc([ "As an action, I can affect ice/water up to a 30-foot cube within 120 ft", "I can switch it between water/ice states and reshape ice up to half its largest dimension", ]), action : [["action", ""]] }, "sweeping cinder strike" : { name : "Sweeping Cinder Strike", source : [["P", 81]], additional: "2 ki points", description: desc("As an action, I can cast Burning Hands"), spellcastingBonus : [{ name : "Sweeping Cinder Strike", spells : ["burning hands"], selection : ["burning hands"], firstCol : 2 }], spellFirstColTitle : "Ki", spellChanges : { "burning hands" : { components : "V,S", compMaterial : "", allowUpCasting : false, changes : "With the Sweeping Cinder Strike discipline, I can cast Burning Hands." } } }, "water whip" : { name : "Water Whip", source : [["P", 81]], additional: "2 ki points; +1d10/extra ki point", description: desc([ "As an action, a creature within 30 ft takes 3d10 bludgeoning damage (spend ki for more)", "It is also knocked prone or pulled up to 25 ft closer to me (my choice)", "It can make a Dexterity save to halve damage and avoid being pulled or knocked prone", ]), action : [["action", ""]] }, "wave of rolling earth (prereq: level 17 monk)" : { name : "Wave of Rolling Earth", source : [["P", 81]], additional: "6 ki points", description: desc("As an action, I can cast Wall of Stone without material components"), spellcastingBonus : [{ name : "Wave of Rolling Earth", spells : ["wall of stone"], selection : ["wall of stone"], firstCol : 6 }], spellFirstColTitle : "Ki", prereqeval : function(v) { return classes.known.monk.level >= 17; }, spellChanges : { "wall of stone" : { components : "V,S", compMaterial : "", changes : "With the Wave of Rolling Earth discipline, I can cast Wall of Stone without a material component." } } } } } }); AddSubClass("monk", "way of shadow", { regExpSearch : /^(?=.*shadow)((?=.*(monk|monastic))|(((?=.*martial)(?=.*(artist|arts)))|((?=.*spiritual)(?=.*warrior)))).*$/i, subname : "Way of Shadow", subnameshort: "Shadow", source : [["P", 80]], features : { "subclassfeature3" : { name : "Shadow Arts", source : [["P", 80]], minlevel : 3, description: desc("I know the Minor Illusion cantrip and can cast certain spells by using ki (see page 3)"), spellcastingBonus : [{ name : "Shadow Arts", spells : ["minor illusion"], selection : ["minor illusion"], }], spellFirstColTitle : "Ki", "shadow spells" : { name : "Shadow Spells", extraname : "Shadow Arts", source : [["P", 80]], additional: "2 ki points", description: desc([ "As an action, I can cast Darkness, Darkvision, Pass Without Trace, or Silence", "I don't require spell slots or material components to cast these spells like this, just ki points", ]), action : [["action", ""]], spellcastingBonus : [{ name : "Shadow Arts", spells : ["darkness", "darkvision", "pass without trace", "silence"], selection : ["darkness", "darkvision", "pass without trace", "silence"], firstCol : 2, times : 4 }] }, autoSelectExtrachoices : [{ extrachoice : "shadow spells" }], spellChanges : { "darkness" : { components : "V", compMaterial : "", changes : "Spell cast with my Shadow Arts don't require material components." }, "darkvision" : { components : "V,S", compMaterial : "", changes : "Spell cast with my Shadow Arts don't require material components." }, "pass without trace" : { components : "V,S", compMaterial : "", changes : "Spell cast with my Shadow Arts don't require material components." } } }, "subclassfeature6" : { name : "Shadow Step", source : [["P", 80]], minlevel : 6, description: desc([ "As a bonus action, I can teleport from and into dim light or darkness within 60 ft", "After I do this, I have adv. on the next melee attack I make before the end of my turn", ]), action : [["bonus action", ""]] }, "subclassfeature11" : { name : "Cloak of Shadows", source : [["P", 80]], minlevel : 11, description: desc("As an action, I can become invisible in dim light or darkness until I attack/cast"), action : [["action", ""]] }, "subclassfeature17" : { name : "Opportunist", source : [["P", 80]], minlevel : 17, description: desc("As a reaction, if a creature in 5 ft is hit by another, I can make a melee attack vs. it"), action : [["reaction", ""]] } } }); AddSubClass("paladin", "oath of the ancients", { regExpSearch : /^(((?=.*(ancient|nature|natural|green|fey|horned))((?=.*paladin)|((?=.*(exalted|sacred|holy|divine))(?=.*(knight|fighter|warrior|warlord|trooper)))))|((?=.*(green|fey|horned))(?=.*(knight|fighter|warrior|warlord|trooper)))).*$/i, subname : "Oath of the Ancients", subnameshort: "Ancients", source : [["P", 87]], features : { "subclassfeature3" : { name : "Channel Divinity: Nature's Wrath", source : [["P", 87]], minlevel : 3, description: desc([ "As an action, a creature I can see within 10 ft must make a Str/Dex save (its choice)", "If it fails this save, it is restrained until it succeeds on a save at the end of its turn", ]), action : [["action", ""]], spellcastingExtra : ["ensnaring strike", "speak with animals", "moonbeam", "misty step", "plant growth", "protection from energy", "ice storm", "stoneskin", "commune with nature", "tree stride"] }, "subclassfeature3.1" : { name : "Channel Divinity: Turn the Faithless", source : [["P", 87]], minlevel : 3, description: desc([ "As an action, all fey/fiends within 30 ft that can hear me must make a Wisdom save", "If one fails, it is turned for 1 minute or until it takes damage and must show true form", "Turned: move away, never within 30 ft of me, no reactions or actions other than Dash", "Turned: may Dodge instead of Dash when nowhere to move and unable to escape bonds", ]), action : [["action", ""]] }, "subclassfeature7" : { name : "Aura of Warding", source : [["P", 87]], minlevel : 7, description: desc("Allies within range and I have resistance to damage from spells"), additional : ["", "", "", "", "", "", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "30-foot aura", "30-foot aura", "30-foot aura"], dmgres : ["Spells"] }, "subclassfeature15" : { name : "Undying Sentinel", source : [["P", 87]], minlevel : 15, description: desc([ "If dropped to 0 hit points and not killed outright, I can choose to stay at 1 hit point", "Additionally, I suffer no drawbacks of old age and can't be aged magically", ]), recovery : "long rest", usages : 1 }, "subclassfeature20" : { name : "Elder Champion", source : [["P", 87]], minlevel : 20, description : desc([ "As an action, I assume the form of a force of nature for 1 minute and gain benefits:", " \u2022 At the start of each of my turns, I regain 10 hit points", " \u2022 I can cast paladin spells with a casting time of 1 action as a bonus action instead", " \u2022 Enemies within 10 ft have disadv. on saves vs. my paladin spells and channel divinity" ]), recovery : "long rest", usages : 1, action : [["action", ""]] } } }); AddSubClass("paladin", "oath of vengeance", { regExpSearch : /^(((?=.*(vengeance|wrath|justice))((?=.*paladin)|((?=.*(exalted|sacred|holy|divine))(?=.*(knight|fighter|warrior|warlord|trooper)))))|((?=.*dark)(?=.*knight))|(?=.*avenger)).*$/i, subname : "Oath of Vengeance", subnameshort: "Vengeance", source : [["P", 88]], features : { "subclassfeature3" : { name : "Channel Divinity: Abjure Enemy", source : [["P", 88]], minlevel : 3, description: desc([ "As an action, one creature within 60 ft that I can see me must make a Wisdom save", "If failed, it is frightened and its speed is 0 despite bonuses; if success, its speed is halved", "This lasts for 1 minute or until it takes damage; Undead/fiends have disadv. on save", ]), action : [["action", ""]], spellcastingExtra : ["bane", "hunter's mark", "hold person", "misty step", "haste", "protection from energy", "banishment", "dimension door", "hold monster", "scrying"] }, "subclassfeature3.1" : { name : "Channel Divinity: Vow of Enmity", source : [["P", 88]], minlevel : 3, description: desc([ "As a bonus action, I utter a vow against a creature I can see within 10 ft", "I get adv. on attacks against it for 1 minute or until it drops to 0 HP or falls unconscious", ]), action : [["bonus action", ""]] }, "subclassfeature7" : { name : "Relentless Avenger", source : [["P", 88]], minlevel : 7, description: desc([ "After I hit with an opportunity attack, I can move 1/2 my speed in the same reaction", "This movement doesn't provoke opportunity attacks", ]), }, "subclassfeature15" : { name : "Soul of Vengeance", source : [["P", 88]], minlevel : 15, description: desc([ "When an enemy I have an active Vow of Enmity against makes an attack, I can react", "As a reaction, I can make a melee weapon attack against it if it is within range", ]), action : [["reaction", " (with Vow of Enmity)"]] }, "subclassfeature20" : { name : "Avenging Angel", source : [["P", 88]], minlevel : 20, description : desc([ "As an action, I gain a flying speed of 60 ft and a 30 ft aura of menace for 1 hour", "When a creature first enters or starts its turn in the aura, it must make a Wis save", "If failed, for 1 min or until it takes damage, it is frightened and attacks vs. it have adv." ]), recovery : "long rest", usages : 1, action : [["action", ""]] } } }); AddSubClass("ranger", "beast master", { regExpSearch : /^(?=.*(animal|beast))((?=.*(master|ranger|strider))|((?=.*(nature|natural|green))(?=.*(knight|fighter|warrior|warlord|trooper)))).*$/i, subname : "Beast Master", fullname : "Beast Master", source : [["P", 93]], features : { "subclassfeature3" : { name : "Ranger's Companion", source : [["P", 93]], minlevel : 3, description : desc([ "It adds my proficiency bonus to AC, attacks, damage, and save/skill proficiencies", "Its hit point maximum equals four times my ranger level if higher than its normal HP", "It takes a turn on my initiative; It takes the Dodge action unless I command it otherwise", "As an action, I can have it take the Attack, Dash, Disengage, or Help action on its turn", "I can still use Extra Attack while commanding it to Attack; No action to order to move" ]), additional : "Beast \u2264Medium and CR \u22641/4", creaturesAdd : [["Ranger's Companion", false, function(AddRemove, prefix) { if (!AddRemove) return; var cObj = MakeCompMenu_CompOptions(prefix, "justCompanions"); if (!cObj.companion || !cObj.companion.length) { var selectedRace = "Wolf"; } else { var compOptions = cObj.companion.map(function(n) { return n[0] }); var selectedRace = AskUserOptions("Select Ranger's Companion", "Select which beast you would like to have as your ranger's companion.\nThis can be any beast that is no larger than Medium and that has a challenge rating of 1/4 or lower.\nYou can change the beast at any time using the \"Companion Options\" button at the top of the Companion page.", compOptions, "radio", true); } ApplyCompRace(selectedRace, prefix, "companion"); }]] }, "subclassfeature7" : { name : "Exceptional Training", source : [["P", 93]], minlevel : 7, description : desc([ "My beast's attacks count as magical for overcoming resistances and immunities", "As a bonus action, I can command it to take the Dash/Disengage/Help action on its turn" ]) }, "subclassfeature11" : { name : "Bestial Fury", source : [["P", 93]], minlevel : 11, description: desc("When I command my beast to use the Attack action, it can attack twice on its turn") }, "subclassfeature15" : { name : "Share Spells", source : [["P", 93]], minlevel : 15, description: desc("When I cast a spell on myself, I can have it also affect my beast if it is within 30 ft") } } }); AddSubClass("rogue", "arcane trickster", { regExpSearch : /^(?=.*(trickster|rogue|miscreant))(?=.*\b(eldritch|arcane|magic|mage|witch)\b).*$/i, subname : "Arcane Trickster", fullname : "Arcane Trickster", source : [["P", 98]], abilitySave : 4, spellcastingFactor : 3, spellcastingList : { "class" : "wizard", school : ["Ench", "Illus"], level : [0, 4] }, spellcastingKnown : { cantrips : [0, 0, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3], spells : [0, 0, 2, 3, 3, 3, 4, 4, 4, 5, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9] }, features : { "subclassfeature3" : { name : "Spellcasting", source : [["P", 98]], minlevel : 3, description: desc("I can cast known wizard cantrips/spells, using Intelligence as my spellcasting ability"), additional : ["", "", "3 cantrips \u0026 3 spells known", "3 cantrips \u0026 4 spells known", "3 cantrips \u0026 4 spells known", "3 cantrips \u0026 4 spells known", "3 cantrips \u0026 5 spells known", "3 cantrips \u0026 6 spells known", "3 cantrips \u0026 6 spells known", "4 cantrips \u0026 7 spells known", "4 cantrips \u0026 8 spells known", "4 cantrips \u0026 8 spells known", "4 cantrips \u0026 9 spells known", "4 cantrips \u0026 10 spells known", "4 cantrips \u0026 10 spells known", "4 cantrips \u0026 11 spells known", "4 cantrips \u0026 11 spells known", "4 cantrips \u0026 11 spells known", "4 cantrips \u0026 12 spells known", "4 cantrips \u0026 13 spells known"], spellcastingBonus : [{ name : "Mage Hand cantrip", // the Mage Hand cantrip gained at level 1 spells : ["mage hand"], selection : ["mage hand"] }, { name : "From any school", // the spells gained at level 3, 8, 14, 20 "class" : "wizard", times : [0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4], level : [1, 4] }] }, "subclassfeature3.1" : { name : "Mage Hand Legerdemain", source : [["P", 98]], minlevel : 3, description : desc([ "As a bonus action, I can direct my Mage Hand", "With a Dex (Sleight of Hand) vs. Wis (Perception) checks, I can do so discreetly", "I can make it invisible and perform the following tasks:", " \u2022 Stow/retrieve an object the hand is holding in a container worn/carried by another", " \u2022 Use thieves' tools to pick locks and disarm traps at range" ]), action : [["bonus action", ""]], spellChanges : { "mage hand" : { description : "Invisible hand, carries 10 lb; 1 bns to control, use thieves' tools, or stow/retrieve obj; only 1 instance", changes : "My Mage Hand Legerdemain class feature expands my use of the Mage Hand cantrip and makes the spectral hand invisible." } } }, "subclassfeature9" : { name : "Magical Ambush", source : [["P", 98]], minlevel : 9, description: desc("When I cast a spell while hidden, the target(s) have disadvantage against that spell") }, "subclassfeature13" : { name : "Versatile Trickster", source : [["P", 98]], minlevel : 13, description: desc("As a bonus action, gain adv. on attacks this turn on creature within 5 ft of Mage Hand"), action : [["bonus action", ""]] }, "subclassfeature17" : { name : "Spell Thief", source : [["P", 98]], minlevel : 17, description: desc([ "As a reaction, after a spell is cast at me, I can try to negate and steal it", "The caster makes a save against my spell DC with his/her spellcasting ability", "On failure, the caster forgets how to cast that spell for eight hours", "If I have a spell slot of a high enough level for it, I learn how to cast it during this time", ]), action : [["reaction", ""]], recovery : "long rest", usages : 1 } } }); AddSubClass("rogue", "assassin", { regExpSearch : /^(?!.*(barbarian|bard|cleric|druid|fighter|monk|paladin|ranger|sorcerer|warlock|wizard))(?=.*assassin).*$/i, subname : "Assassin", fullname : "Assassin", source : [["P", 97]], abilitySave : 2, features : { "subclassfeature3" : { name : "Bonus Proficiencies", source : [["P", 97]], minlevel : 3, description: desc("I am proficient with disguise kits and poisoner's kits"), toolProfs : ["Disguise kit", "Poisoner's kit"] }, "subclassfeature3.1" : { name : "Assassinate", source : [["P", 97]], minlevel : 3, description: desc([ "I have adv. on attack rolls against creatures that have not taken a turn in combat yet", "Any hit I score against a creature that is surprised is a critical hit", ]), }, "subclassfeature9" : { name : "Infiltration Expertise", source : [["P", 97]], minlevel : 9, description: desc("I can create false identities in 7 days for 25 gp") }, "subclassfeature13" : { name : "Imposter", source : [["P", 97]], minlevel : 13, description: desc([ "After 3 hours of studying a person, I can mimic speech, writing, and behavior", "I have advantage on Charisma (Deception) checks to maintain this ruse", ]), }, "subclassfeature17" : { name : "Death Strike", source : [["P", 97]], minlevel : 17, description: desc("When I hit a surprised creature, it must make a Con save or take double damage"), additional : "Save DC: 8 + Dex mod + Proficiency bonus" } } }); AddSubClass("sorcerer", "wild magic", { regExpSearch : /^(?=.*(mage|magus|sorcerer|witch))(?=.*(wild|chaos|chaotic|limbo)).*$/i, subname : "Wild Magic", fullname : "Wild Mage", source : [["P", 103]], features : { "subclassfeature1" : { name : "Wild Magic Surge", source : [["P", 103]], minlevel : 1, description : desc([ "Wild Magic Surges can happen 5% of the time that I cast a sorcerer spell", "This doesn't happen with cantrips and I only take this chance if the DM tells me to", "Metamagic can't affect spells cast because of the surge, but they require no concentration", '"See the "Notes" page for the table"', ]), toNotesPage : [{ name : "Wild Magic Surge Table", source : [["P", 104]], popupName : "Wild Mage's Wild Magic Surge Table, part 1", additional : "results 01-50", note : [ "My spellcasting can unleash surges of untamed magic. Immediately after I cast a sorcerer spell of 1st level or higher, the DM can have me roll a d20. If I roll a 1, a Wild Magic Surge happens. Roll on the table below to create a random magical effect. A surge can happen only once per turn.", "If a Wild Magic effect is a spell, it's too wild to be affected by Metamagic. If it normally requires concentration, it doesn't require concentration in this case; the spell lasts for its full duration.", "d100 Effect", "01-02 Roll on this table at the start of each of your turns for the next minute, ignoring this result on subsequent rolls.", "03-04 For the next minute, you can see any invisible creature if you have line of sight to it.", "05-06 A modron chosen and controlled by the DM appears in an unoccupied space within 5 ft of you, then disappears 1 minute later.", "07-08 You cast fireball as a 3rd-level spell centered on yourself.", "09-10 You cast magic missile as a 5th-level spell.", "11-12 Roll a d10. Your height changes by a number of inches equal to the roll. If the roll is odd, you shrink. If the roll is even, you grow.", "13-14 You cast confusion centered on yourself.", "15-16 For the next minute, you regain 5 hit points at the start of each of your turns.", "17-18 You grow a long beard made of feathers that remains until you sneeze, at which point the feathers explode out from your face.", "19-20 You cast grease centered on yourself.", "21-22 Creatures have disadvantage on saving throws against the next spell you cast in the next minute that involves a saving throw.", "23-24 Your skin turns a vibrant shade of blue. A remove curse spell can end this effect.", "25-26 An eye appears on your forehead for the next minute.", "27-28 For the next minute, all your spells with a casting time feet of 1 action have a casting time of 1 bonus action.", "29-30 You teleport up to 60 ft to an unoccupied space of your choice that you can see.", "31-32 You are transported to the Astral Plane until the end of your next turn, after which time you return to the space you previously occupied or the nearest unoccupied space if that space is occupied.", "33-34 Maximize the damage of the next damaging spell you cast within the next minute.", "35-36 Roll a d10. Your age changes by a number of years equal to the roll. If the roll is odd, you get younger (minimum 1 year old). If the roll is even, you get older.", "37-38 1d6 flumphs controlled by the DM appear in unoccupied spaces within 60 ft of you and are frightened of you. They vanish after 1 minute.", "39-40 You regain 2d10 hit points.", "41-42 You turn into a potted plant until the start of your next turn. While a plant, you are incapacitated and have vulnerability to all damage. If you drop to 0 hit points, your pot breaks, and your form reverts.", "43-44 For the next minute, you can teleport up to 20 ft as a bonus action on each of your turns.", "45-46 You cast levitate on yourself.", "47-48 A unicorn controlled by the DM appears in a space within 5 ft of you, then disappears 1 minute later.", "49-50 You can't speak for the next minute. Whenever you try, pink bubbles float out of your mouth." ] }, { name : "Wild Magic Surge Table", source : [["P", 104]], popupName : "Wild Mage's Wild Magic Surge Table, part 2", additional : "results 51-100", note : [ "d100 Effect", "51-52 A spectral shield hovers near you for the next minute, granting you a +2 bonus to AC and immunity to magic missile.", "53-54 You are immune to being intoxicated by alcohol for the next 5d6 days.", "55-56 Your hair falls out but grows back within 24 hours.", "57-58 For the next minute, any flammable object you touch that isn't being worn or carried by another creature bursts into flame.", "59-60 You regain your lowest-level expended spell slot.", "61-62 For the next minute, you must shout when you speak.", "63-64 You cast fog cloud centered on yourself.", "65-66 Up to three creatures you choose within 30 ft of you take 4d10 lightning damage.", "67-68 You are frightened by the nearest creature until the end of your next turn.", "69-70 Each creature within 30 ft of you becomes invisible for the next minute. The invisibility ends on a creature when it attacks or casts a spell.", "71-72 You gain resistance to all damage for the next minute.", "73-74 A random creature within 60 ft of you becomes poisoned for 1d4 hours.", "75-76 You glow with bright light in a 30-ft radius for the next minute. Any creature that ends its turn within 5 ft of you is blinded until the end of its next turn.", "79-80 Illusory butterflies and flower petals flutter in the air within 10 ft of you for the next minute.", "77-78 You cast polymorph on yourself. If you fail the saving throw, you turn into a sheep for the spell's duration.", "81-82 You can take one additional action immediately.", "83-84 Each creature within 30 ft of you takes 1d10 necrotic damage. You regain hit points equal to the sum of the necrotic damage dealt.", "85-86 You cast mirror image.", "87-88 You cast fly on a random creature within 60 ft of you.", "89-90 You become invisible for the next minute. During that time, other creatures can't hear you. The invisibility ends if you attack or cast a spell.", "91-92 If you die within the next minute, you immediately come back to life as if by the reincarnate spell.", "93-94 Your size increases by one size category for the next minute.", "95-96 You and all creatures within 30 ft of you gain vulnerability to piercing damage for the next minute.", "97-98 You are surrounded by faint, ethereal music for the next minute.", "99-100 You regain all expended sorcery points." ] }] }, "subclassfeature1.1" : { name : "Tides of Chaos", source : [["P", 103]], minlevel : 1, description: desc([ "I can gain advantage on either one attack roll, ability check, or saving throw", "After I cast a 1st-level or higher sorcerer spell, the DM can impose a Wild Magic Surge", "After I roll on the Wild Magic Surge table, I regain my use of Tides of Chaos", ]), recovery : "long rest", usages : 1 }, "subclassfeature6" : { name : "Bend Luck", source : [["P", 103]], minlevel : 6, description: desc("As a reaction, I can add/subtract 1d4 from another's attack roll, ability check, or save"), action : [["reaction", " (2 sorcery points)"]], additional : "2 sorcery points" }, "subclassfeature14" : { name : "Controlled Chaos", source : [["P", 103]], minlevel : 14, description: desc("Whenever I roll on the Wild Magic Surge table, I can roll twice and use either result") }, "subclassfeature18" : { name : "Spell Bombardment", source : [["P", 103]], minlevel : 18, description: desc([ "Once per turn, when I roll spell damage, I can take one damage die that rolled max", "I can then roll this die again and add it to the spell's damage", ]), } } }); AddSubClass("warlock", "the archfey", { regExpSearch : /^(?=.*fey)(?=.*warlock).*$/i, subname : "the Archfey", source : [["P", 109]], spellcastingExtra : ["faerie fire", "sleep", "calm emotions", "phantasmal force", "blink", "plant growth", "dominate beast", "greater invisibility", "dominate person", "seeming"], features : { "subclassfeature1" : { name : "Fey Presence", source : [["P", 109]], minlevel : 1, description: desc([ "As an action, all creatures in a 10-ft cube around me must make a Wisdom save", "If failed, they're all charmed or frightened (my choice) until the end of my next turn", ]), recovery : "short rest", usages : 1, action : [["action", ""]] }, "subclassfeature6" : { name : "Misty Escape", source : [["P", 109]], minlevel : 6, description: desc([ "As a reaction, when I take damage, I can turn invisible and teleport up to 60 ft", "I stay invisible until the start of my next turn or until I attack or cast a spell", ]), action : [["reaction", " (taking damage)"]], recovery : "short rest", usages : 1 }, "subclassfeature10" : { name : "Beguiling Defenses", source : [["P", 109]], minlevel : 10, description: desc([ "As a reaction, when a creature tries to charm me, I can turn the charm back on it", "It must make a Wis save or be charmed by me for 1 minute or until taking damage", "I am immune to being charmed", ]), action : [["reaction", " (when charmed)"]], savetxt : { immune : ["charmed"] } }, "subclassfeature14" : { name : "Dark Delirium", source : [["P", 109]], minlevel : 14, description: desc([ "As an action, a creature within 60 ft must make a Wis save or be charmed/frightened", "This lasts for 1 minute or until my concentration is broken or it takes damage", "During this time, it can't see or hear anything but the illusion, me, and itself", ]), recovery : "short rest", usages : 1, action : [["action", ""]] } } }); AddSubClass("warlock", "the great old one", { regExpSearch : /^(((?=.*(tharizdun|cthulhu))(?=.*warlock))|((?=.*(great|dread))(?=.*(ancient|old))(?=.*\b(one|entity)\b))).*$/i, subname : "the Great Old One", source : [["P", 110]], spellcastingExtra : ["dissonant whispers", "tasha's hideous laughter", "detect thoughts", "phantasmal force", "clairvoyance", "sending", "dominate beast", "evard's black tentacles", "dominate person", "telekinesis"], features : { "subclassfeature1" : { name : "Awakened Mind", source : [["P", 110]], minlevel : 1, description: desc("I can telepathically speak to creatures I can see within 30 ft if they know a language"), // 'to' not 'with', so one-way }, "subclassfeature6" : { name : "Entropic Ward", source : [["P", 110]], minlevel : 6, description: desc([ "As a reaction, when I'm attacked, I can impose disadvantage to that attack roll", "If it misses me, I have adv. on my next attack vs. the attacker during my next turn", ]), action : [["reaction", " (when attacked)"]], recovery : "short rest", usages : 1 }, "subclassfeature10" : { name : "Thought Shield", source : [["P", 110]], minlevel : 10, description: desc([ "No one can read my mind unless I allow it; I have resistance to psychic damage", "When I take psychic damage, the dealer of the psychic damage takes the same amount", ]), dmgres : ["Psychic"] }, "subclassfeature14" : { name : "Create Thrall", source : [["P", 110]], minlevel : 14, description: desc([ "As an action, I can charm an incapacitated humanoid by touch", "While it is charmed, I can communicate with it telepathically if it is on the same plane", "This lasts until the charm is removed (can be by Remove Curse) or I use this again", ]), action : [["action", ""]] } } }); AddSubClass("wizard", "abjuration", { regExpSearch : /abjuration|abjurer/i, subname : "School of Abjuration", subnameshort: "Abjuration", fullname : "Abjurer", source : [["P", 115]], features : { "subclassfeature2" : { name : "Abjuration Savant", source : [["P", 115]], minlevel : 2, description: desc("I halve the gp and time needed to copy abjuration spells into my spellbook") }, "subclassfeature2.1" : { name : "Arcane Ward", source : [["P", 115]], minlevel : 2, description: desc([ "Whenever I cast an 1st-level or higher abjuration spell, I make/heal a ward", "I make it at max HP; When I cast again, it heals two HP per spell level", "It stays active at 0 HP and doesn't go away until my next long rest", "If I take damage, the ward takes the damage instead, but excess damage carries over", ]), additional : levels.map( function(n) { return n < 2 ? "" : "Ward max HP: " + (n * 2) + "+Int mod"; }), usages : 1, recovery : "long rest" }, "subclassfeature6" : { name : "Projected Ward", source : [["P", 115]], minlevel : 6, description: desc("As a reaction, my Arcane Ward can absorb damage done to a creature within 30 ft"), action : [["reaction", ""]] }, "subclassfeature10" : { name : "Improved Abjuration", source : [["P", 115]], minlevel : 10, description: desc("When I cast an abjuration spell requiring an ability check, I add my proficiency bonus"), calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { if (spellKey === "dispel magic" || spellKey === "counterspell") { var profB = Number(How("Proficiency Bonus")); var checkStr = "(" + AbilityScores.names.join("|") + "|spell(casting)?( ability )?) check"; var checkRx = RegExp(checkStr + " \\(([+-]?\\d+)\\)", "i"); var theBonus = profB; if (checkRx.test(spellObj.description)) { var theMatch = spellObj.description.match(checkRx); theBonus += Number(theMatch[2]); if (tDoc.getField("Remarkable Athlete").isBoxChecked(0) === 1 && theMatch[1].test(/Str|Dex|Con/i)) { theBonus -= Math.ceil(profB/2); } else if (tDoc.getField("Jack of All Trades").isBoxChecked(0) === 1) { theBonus -= Math.floor(profB/2); } } else { var theMatch = spellObj.description.match(RegExp(checkStr, "i")); } spellObj.description = spellObj.description.replace(theMatch[0], theMatch[1] + " check (" + (theBonus >= 0 ? "+" : "") + theBonus + ")"); return true; }; }, "I add my proficiency bonus to ability checks required by abjuration spells. This is shown on the spell sheet by a lowered DC or higher bonus on the check." ] } }, "subclassfeature14" : { name : "Spell Resistance", source : [["P", 116]], minlevel : 14, description: desc("I have adv. on spell saves and resistance to damaging spells"), dmgres : ["Spells"], savetxt : { adv_vs : ["spells"] } } } }); AddSubClass("wizard", "conjuration", { regExpSearch : /conjuration|conjurer/i, subname : "School of Conjuration", subnameshort: "Conjuration", fullname : "Conjurer", source : [["P", 116]], features : { "subclassfeature2" : { name : "Conjuration Savant", source : [["P", 116]], minlevel : 2, description: desc("I halve the gp and time needed to copy conjuration spells into my spellbook") }, "subclassfeature2.1" : { name : "Minor Conjuration", source : [["P", 116]], minlevel : 2, description: desc([ "As an action, I can conjure an object up to 3 ft on each side and no more than 10 lbs", "It must be of a form of a nonmagical object I have seen and is created within 10 ft", "The object disappears after 1 hour, if it takes or deals damage, or when I use this again", ]), action : [["action", ""]] }, "subclassfeature6" : { name : "Benign Transposition", source : [["P", 116]], minlevel : 6, description: desc([ "As an action, I can teleport to a place within 30 ft that I can see", "Instead, I can swap places with a willing Small/Medium creature in 30 ft that I can see", "I can do this again after a long rest or casting a 1st-level or higher conjuration spell", ]), usages : 1, recovery : "long rest", action : [["action", ""]] }, "subclassfeature10" : { name : "Focused Conjuration", source : [["P", 116]], minlevel : 10, description: desc("While I am concentrating on a conjuration spell, it can't be broken by taking damage") }, "subclassfeature14" : { name : "Durable Summons", source : [["P", 116]], minlevel : 14, description: desc("Any creature I summon or create with a conjuration spell has 30 temporary hit points"), calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { if (spellKey.indexOf("conjure") !== -1 && !(/barrage|volley|knowbot/i).test(spellKey)) { spellObj.description = spellObj.description.replace(/verbal commands/i, "command").replace(/^summon /i, '') + "; +30 temp hp"; return true; } else if ((/find (greater )?(steed|familiar)/i).test(spellKey)) { spellObj.description = spellObj.description.replace(/Gain the services of a ([^;]+)/i, "A $1 (+30 temp hp)"); return true; } }, "Any creature I summon or create with a conjuration spell gains 30 temporary hit points." ] } } } }); AddSubClass("wizard", "divination", { regExpSearch : /divination|diviner|divinator/i, subname : "School of Divination", subnameshort: "Divination", fullname : "Diviner", source : [["P", 116]], features : { "subclassfeature2" : { name : "Divination Savant", source : [["P", 116]], minlevel : 2, description: desc("I halve the gp and time needed to copy divination spells into my spellbook") }, "subclassfeature2.1" : { name : "Portent", source : [["P", 116]], minlevel : 2, description : desc([ "After a long rest, I roll dice and keep the results to be used before my next long rest", "A result can replace an attack/save/ability check made by me or a creature I can see", "I choose to switch them before the dice to be replaced are rolled; Max once per turn" ]), additional : levels.map( function(n) { return n < 2 ? "" : (n < 14 ? 2 : 3) + "d20 after a long rest"; }) }, "subclassfeature6" : { name : "Expert Divination", source : [["P", 116]], minlevel : 6, description: desc("When I cast a divination spell, I recover a spell slot of a lower level than the one I cast"), additional : "Spell slot < 6th-level" }, "subclassfeature10" : { name : "The Third Eye", source : [["P", 116]], minlevel : 10, description: desc([ "As an action, I gain one of the following until my next short or long rest:", "Darkvision 60ft, see the Ethereal Plane 60ft, read any language, or see invisibility 10ft", ]), recovery : "short rest", usages : 1, action : [["action", ""]] }, "subclassfeature14" : { name : "Greater Portent", source : [["P", 117]], minlevel : 14, description: desc("I can roll 3d20 instead of 2d20 when using my Portent feature") } } }); AddSubClass("wizard", "enchantment", { regExpSearch : /enchantment|enchanter/i, subname : "School of Enchantment", subnameshort: "Enchantment", fullname : "Enchanter", source : [["P", 117]], features : { "subclassfeature2" : { name : "Enchantment Savant", source : [["P", 117]], minlevel : 2, description: desc("I halve the gp and time needed to copy enchantment spells into my spellbook") }, "subclassfeature2.1" : { name : "Hypnotic Gaze", source : [["P", 117]], minlevel : 2, description: desc([ "As an action, a seen enemy within 5 ft must make a Wis save or be charmed", "This doesn't work if it can't see/hear me; It's also incapacitated and reduced to 0 speed", "This lasts until the end of my next turn, but I can use an action to extend the duration", "It also ends if it takes damage, can't see or hear me, or is more than 5 ft from me", "On success or once it ends, I can't use this on it again until after a long rest", ]), action : [["action", ""]], usages : 1, recovery : "long rest" }, "subclassfeature6" : { name : "Instinctive Charm", source : [["P", 117]], minlevel : 6, description: desc([ "As a reaction, when someone I can see in 30 ft attacks me, it must make a Wis save", "If failed, it must instead attack the closest creature within range (not me or self)", "On a success, the target is immune to this until after my long rest; This is a charm effect", ]), action : [["reaction", " (when attacked)"]] }, "subclassfeature10" : { name : "Split Enchantment", source : [["P", 117]], minlevel : 10, description: desc([ "When I cast an enchantment spell with only one target, I can target a second in range", "This does not apply to cantrips", ]), calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { if (spellObj.psionic || !spellObj.level || spellObj.school !== "Ench") return; var startDescr = spellObj.description; switch(spellKey) { case "animal messenger" : spellObj.description = spellObj.description.replace("Tiny beast delivers", "2 tiny beasts deliver single"); break; case "antipathy/sympathy" : spellObj.description = spellObj.description.replace("Creature,", "2 crea, 1"); break; case "heroism" : case "command" : spellObj.description = spellObj.description.replace(/, halt| as spell lasts/i, ""); default : spellObj.description = spellObj.description.replace("1+1/SL", "2 or 1+1/SL").replace(/1 (crea(ture)?|beast|humanoid)/i, "2 $1s").replace(/creas\b/gi, "crea"); } return startDescr !== spellObj.description; }, "My enchantment, single-target 1st-level or higher spells can affect two targets instead of only one." ] } }, "subclassfeature14" : { name : "Alter Memories", source : [["P", 117]], minlevel : 14, description: desc([ "When I cast an enchantment spell that charms, I can have one target be unaware of it", "Also, once before that spell ends, I can have that target forget time while affected", "It must make an Intelligence save or lose up to 1 + Charisma modifier hours of memory", ]), } } }); AddSubClass("wizard", "illusion", { regExpSearch : /illusion|illusionist|illusionary/i, subname : "School of Illusion", subnameshort: "Illusion", fullname : "Illusionist", source : [["P", 118]], features : { "subclassfeature2" : { name : "Illusion Savant", source : [["P", 118]], minlevel : 2, description: desc("I halve the gp and time needed to copy illusion spells into my spellbook") }, "subclassfeature2.1" : { name : "Improved Minor Illusion", source : [["P", 118]], minlevel : 2, description: desc([ "I gain the knowledge of the Minor Illusion cantrip (or another if I already knew it)", "When I cast it, I can create both a sound and an image with a single casting", ]), spellcastingBonus : [{ name : "Minor Illusion cantrip", spells : ["minor illusion"], selection : ["minor illusion"] }], spellChanges : { "minor illusion" : { description : "5-ft cube illusion includes visible and audible; Int(Investigation) check vs. Spell DC; see book", changes : "My Improved Minor Illusion class feature allows me to make both a sound and an image with a single casting." } } }, "subclassfeature6" : { name : "Malleable Illusion", source : [["P", 118]], minlevel : 6, description: desc("After I cast an illusion spell that lasts 1 min or longer, I can use an action to change it"), action : [["action", ""]] }, "subclassfeature10" : { name : "Illusory Self", source : [["P", 118]], minlevel : 10, description: desc("As a reaction, when I'm attacked, I can impose an illusion that makes the attack miss"), action : [["reaction", ""]], recovery : "short rest", usages : 1 }, "subclassfeature14" : { name : "Illusory Reality", source : [["P", 118]], minlevel : 14, description: desc([ "As a bonus action, after I cast a 1st-level or higher illusion spell, I can make it real", "One inanimate, nonmagical object that is part of the illusion becomes real for 1 minute", "The object can't be something that directly harms someone", ]), action : [["bonus action", ""]] } } }); AddSubClass("wizard", "necromancy", { regExpSearch : /necromancy|necromancer|necromantic/i, subname : "School of Necromancy", subnameshort: "Necromancy", fullname : "Necromancer", source : [["P", 118]], features : { "subclassfeature2" : { name : "Necromancy Savant", source : [["P", 118]], minlevel : 2, description: desc("I halve the gp and time needed to copy necromancy spells into my spellbook"), }, "subclassfeature2.1" : { name : "Grim Harvest", source : [["P", 118]], minlevel : 2, description: desc([ "Once per turn, when I kill something with a 1st-level or higher spell, I regain hit points", "The number of hit points regained is 2\xD7 the spell's level (or 3\xD7 with necromancy spells)", "This doesn't occur for constructs/undead", ]), }, "subclassfeature6" : { name : "Undead Thralls", source : [["P", 119]], minlevel : 6, description: desc([ "I add Animate Dead to my spellbook and can have an additional target when casting it", "Undead created by my necromancy spells have the following benefits:", "They add my proficiency bonus to damage and my wizard level to their HP maximums", ]), spellcastingBonus : [{ name : "Undead Thralls", spells : ["animate dead"], selection : ["animate dead"], }], spellChanges : { "animate dead" : { description : "Turn corpses into 2+2/SL Skeletons or Zombies; control for 24h; bns a command within 60 ft", changes : "My Undead Thralls class feature allows me to animate one more corpse than normal with Animate Dead.", }, }, }, "subclassfeature10" : { name : "Inured to Undead", source : [["P", 119]], minlevel : 10, description: desc("I have resistance to necrotic damage and my hit point maximum can't be reduced"), dmgres : ["Necrotic"] }, "subclassfeature14" : { name : "Command Undead", source : [["P", 11]], minlevel : 14, description: desc([ "As an action, an undead within 60 ft that I can see must make a Charisma save", "If its Int is > 7, it has adv. on the save; If its Int is > 11, it repeats the save every hour", "If failed, it becomes friendly to me and obeys my commands until I use this on another", "On success, it becomes permanently immune to my further attempts", ]), action : [["action", ""]] } } }); AddSubClass("wizard", "transmutation", { regExpSearch : /transmutation|transmuter/i, subname : "School of Transmutation", subnameshort: "Transmutation", fullname : "Transmuter", source : [["P", 119]], features : { "subclassfeature2" : { name : "Transmutation Savant", source : [["P", 119]], minlevel : 2, description: desc("I halve the gp and time needed to copy transmutation spells into my spellbook") }, "subclassfeature2.1" : { name : "Minor Alchemy", source : [["P", 119]], minlevel : 2, description: desc([ "I can transform an object of wood/stone/iron/copper/silver into another of those", "For each 10 min I spend, I can transform up to 1 cubic foot of the material", "It reverts back when I lose concentration or after 1 hour", ]), }, "subclassfeature6" : { name : "Transmuter's Stone", source : [["P", 119]], minlevel : 6, description : desc([ "In 8 hours, I can create a transmuter's stone that gives its wielder one of the following:", " \u2022 Darkvision 60 ft", " \u2022 10 ft increase to speed while unencumbered", " \u2022 Proficiency in Constitution saving throws", " \u2022 Resistance to either acid, cold, fire, lightning, or thunder damage", "The benefit is chosen at creation; I can have only one active stone at a time", "I can change the benefit when I cast a 1st-level or higher transmutation spell with it" ]) }, "subclassfeature10" : { name : "Shapechanger", source : [["P", 119]], minlevel : 10, description: desc([ "I add Polymorph to my spellbook; I can cast it on myself without using a spell slot", "When I do that, I can only transform into a beast with a challenge rating of 1 or lower", ]), recovery : "short rest", usages : 1, spellcastingBonus : [{ name : "Add to spellbook", spells : ["polymorph"], selection : ["polymorph"] }, { name : "1/SR no spell slot", spells : ["polymorph"], selection : ["polymorph"], firstCol : "oncesr" }], spellChanges : { "polymorph" : { name : "Polymorph (special)", range : "Self", description : "I transformed into a beast of my choice with a CR 1 or lower; see book", changes : "Using my Shapechanger class feature, I can cast Polymorph once per short rest without using a spell slot, but when I do so I can only cast it on myself and transform into a beast." } } }, "subclassfeature14" : { name : "Master Transmuter", source : [["P", 119]], minlevel : 14, description: desc([ "As an action, I can destroy my transmuter's stone and do one of the four following:", "##\u2022 Major Transformation##.", " In 10 minutes, I transmute one nonmagical object up to 5 cubic foot into another", " This new, nonmagical object must be of similar size and mass and equal or less value", "##\u2022 Panacea##.", " One touched has all curses, diseases, and poisons removed and is healed to max HP", "##\u2022 Restore Life##.", " I cast Raise Dead without using spell slots or needing to have it in my spellbook", "##\u2022 Restore Youth##.", " A touched creature's apparent age is reduced by 3d10 years (to a minimum of 13)", ]), action : [["action", ""]] } } }); // Companions CompanionList["undead_thrall"] = { name: "Undead Thralls", nameOrigin: "School of Necromancy 6", nameMenu : "Undead Thrall (School of Necromancy feature)", source: [["P", 119]], includeCheck: function(sCrea, objCrea, iCreaCR, bIsAL) { return /undead/i.test(objCrea.type); }, attributesChange: function(sCrea, objCrea) { objCrea.hp += classes.known.wizard ? classes.known.wizard.level : classes.totallevel; if (!objCrea.attacks) return; objCrea.attacks = objCrea.attacks.map(function(oAtk) { if (oAtk.abilitytodamage !== false && !oAtk.dc) { if (!oAtk.modifiers) { oAtk.modifiers = ["", "oProf"]; } else { oAtk.modifiers[1] += "+oProf"; } } return oAtk; }); }, calcChanges: { hp: function (totalHD, HDobj, prefix) { if (classes.known.wizard) { return [classes.known.wizard.level, "Undead Thralls (wizard level)"]; } else { return [classes.totallevel, "Undead Thralls (character level)"]; } }, }, notes: [{ name: "Undead I create with a necromancy spell", description: "add my wizard level to their hit point maximum and add my proficiency bonus to their weapon damage rolls.", joinString: " ", }], eval: function(prefix, lvl) { // Set HP to use average value, so that the level bonus is automatically included var sHPfld = prefix + "Comp.Use.HP.Max"; var aHPsets = How(sHPfld).split(","); aHPsets[3] = "average"; AddTooltip(sHPfld, undefined, aHPsets.toString()); }, }; // Add the backgrounds that are not in the SRD BackgroundList["charlatan"] = { regExpSearch : /charlatan/i, name : "Charlatan", source : [["P", 128], ["ALbackground", 0]], skills : ["Deception", "Sleight of Hand"], gold : 15, equipleft : [ ["Disguise kit", "", 3], ["Tools for chosen con", "", ""] ], equipright : [ ["Fine clothes", "", 6], ["Belt pouch (with coins)", "", 1] ], feature : "False Identity", trait : [ "I fall in and out of love easily, and am always pursuing someone.", "I have a joke for every occasion, especially occasions where humor is inappropriate.", "Flattery is my preferred trick for getting what I want.", "I'm a born gambler who can't resist taking a risk for a potential payoff.", "I lie about almost everything, even when there's no good reason to.", "Sarcasm and insults are my weapons of choice.", "I keep multiple holy symbols on me and invoke whatever deity might come in useful at any given moment.", "I pocket anything I see that might have some value." ], ideal : [ ["Independence", "Independence: I am a free spirit \u2015 no one tells me what to do. (Chaotic)" ], ["Fairness", "Fairness: I never target people who can't afford to lose a few coins. (Lawful)" ], ["Charity", "Charity: I distribute the money I acquire to the people who really need it. (Good)" ], ["Creativity", "Creativity: I never run the same con twice. (Chaotic)" ], ["Friendship", "Friendship: Material goods come and go. Bonds of friendship last forever. (Good)" ], ["Aspiration", "Aspiration: I'm determined to make something of myself. (Any)" ] ], bond : [ "I fleeced the wrong person and must work to ensure that this individual never crosses paths with me or those I care about.", "I owe everything to my mentor \u2015 a horrible person who's probably rotting in jail somewhere.", "Somewhere out there, I have a child who doesn't know me. I'm making the world better for him or her.", "I come from a noble family, and one day I'll reclaim my lands and title from those who stole them from me.", "A powerful person killed someone I love. Someday soon, I'll have my revenge.", "I swindled and ruined a person who didn't deserve it. I seek to atone for my misdeeds but might never be able to forgive myself." ], flaw : [ "I can't resist a pretty face.", "I'm always in debt. I spend my ill-gotten gains on decadent luxuries faster than I bring them in.", "I'm convinced that no one could ever fool me the way I fool others.", "I'm too greedy for my own good. I can't resist taking a risk if there's money involved.", "I can't resist swindling people who are more powerful than me.", "I hate to admit it and will hate myself for it, but I'll run and preserve my own hide if the going gets tough." ], extra : [ "Select a Favorite Scheme", "Cheat at games of chance", "Shave coins, forge documents", "User/manipulator", "Change identity", "Sleight-of-hand cons", "Sell junk as expensive necessities" ], toolProfs : ["Disguise kit", "Forgery kit"], lifestyle : "comfortable" }; BackgroundList["criminal"] = { regExpSearch : /criminal/i, name : "Criminal", source : [["P", 129], ["ALbackground", 0]], skills : ["Deception", "Stealth"], gold : 15, equipright : [ ["Dark, common clothes with hood", "", 3], ["Crowbar", "", 5], ["Belt pouch (with coins)", "", 1] ], feature : "Criminal Contact", trait : [ "I always have a plan for what to do when things go wrong.", "I am always calm, no matter the situation. I never raise my voice or let my emotions control me.", "The first thing I do in a new place is note the locations of everything valuable \u2015 or where such things could be hidden.", "I would rather make a new friend than a new enemy.", "I am incredibly slow to trust. Those who seem the fairest often have the most to hide.", "I don't pay attention to the risks in a situation. Never tell me the odds.", "The best way to get me to do something is to tell me I can't do it.", "I blow up at the slightest insult." ], ideal : [ ["Honor", "Honor: I don't steal from others in the trade. (Lawful)" ], ["Freedom", "Freedom: Chains are meant to be broken, as are those who would forge them. (Chaotic)" ], ["Charity", "Charity: I steal from the wealthy so that I can help people in need. (Good)" ], ["Greed", "Greed: I will do whatever it takes to become wealthy. (Evil)" ], ["People", "People: I'm loyal to my friends, not to any ideals, and everyone else can take a trip down the Styx for all I care. (Neutral)" ], ["Redemption", "Redemption: There's a spark of good in everyone. (Good)" ] ], bond : [ "I'm trying to pay off an old debt I owe to a generous benefactor.", "My ill-gotten gains go to support my family.", "Something important was taken from me, and I aim to steal it back.", "I will become the greatest thief that ever lived.", "I'm guilty of a terrible crime. I hope I can redeem myself for it.", "Someone I loved died because of a mistake I made. That will never happen again." ], flaw : [ "When I see something valuable, I can't think about anything but how to steal it.", "When faced with a choice between money and my friends, I usually choose the money.", "If there's a plan, I'll forget it. If I don't forget it, I'll ignore it.", "I have a \"tell\" that reveals when I'm lying.", "I turn tail and run when things look bad.", "An innocent person is in prison for a crime that I committed. I'm okay with that." ], extra : [ "Select a Criminal Specialty", "Blackmailer", "Burglar", "Enforcer", "Fence", "Highway robber", "Hired killer", "Pickpocket", "Smuggler", "Spy" ], toolProfs : [["Gaming set", 1], ["Thieves' tools", "Dex"]], lifestyle : "poor" }; BackgroundList["entertainer"] = { regExpSearch : /(entertainer|actor|dancer|fire.?eater|jester|juggler|instrumentalist|poet|singer|storyteller|tumbler)/i, name : "Entertainer", source : [["P", 130], ["ALbackground", 0]], skills : ["Acrobatics", "Performance"], gold : 15, equipright : [ ["Costume", "", 4], ["Favor of an admirer", "", ""], ["Belt pouch (with coins)", "", 1], ["Musical instrument of my choice", "", ""] ], feature : "By Popular Demand", trait : [ "I know a story relevant to almost every situation.", "Whenever I come to a new place, I collect local rumors and spread gossip.", "I'm a hopeless romantic, always searching for that 'special someone'.", "Nobody stays angry at me or around me for long, since I can defuse any amount of tension.", "I love a good insult, even one directed at me.", "I get bitter if I'm not the center of attention.", "I'll settle for nothing less than perfection.", "I change my mood or my mind as quickly as I change key in a song." ], ideal : [ ["Beauty", "Beauty: When I perform, I make the world better than it was. (Good)" ], ["Tradition", "Tradition: The stories, legends, and songs of the past must never be forgotten, for they teach us who we are. (Lawful)" ], ["Creativity", "Creativity: The world is in need of new ideas and bold action. (Chaotic)" ], ["Greed", "Greed: I'm only in it for the money and fame. [Evil]" ], ["People", "People: I like seeing the smiles on people's faces when I perform. That's all that matters. (Neutral)" ], ["Honesty", "Honesty: Art should reflect the soul; it should come from within and reveal who we really are. (Any)" ] ], bond : [ "My instrument is my most treasured possession, and it reminds me of someone I love.", "Someone stole my precious instrument, and someday I'll get it back.", "I want to be famous, whatever it takes.", "I idolize a hero of the old tales and measure my deeds against that person's.", "I will do anything to prove myself superior to my hated rival.", "I would do anything for the other members of my old troupe." ], flaw : [ "I'll do anything to win fame and renown.", "I'm a sucker for a pretty face.", "A scandal prevents me from ever going home again. That kind of trouble seems to follow me around.", "I once satirized a noble who still wants my head. It was a mistake that I will likely repeat.", "I have trouble keeping my true feelings hidden. My sharp tongue lands me in trouble.", "Despite my best efforts, I am unreliable to my friends." ], extra : [ "Select an Entertainer Routine", "Actor", "Dancer", "Fire-eater", "Jester", "Juggler", "Instrumentalist", "Poet", "Singer", "Storyteller", "Tumbler" ], toolProfs : ["Disguise kit", ["Musical instrument", 1]], lifestyle : "modest" }; BackgroundList["folk hero"] = { regExpSearch : /^(?=.*folk)(?=.*hero).*$/i, name : "Folk Hero", source : [["P", 131], ["ALbackground", 0]], skills : ["Animal Handling", "Survival"], gold : 10, equipleft : [ ["Set of artisan's tools", "", ""], ["Shovel", "", 5], ["Iron pot", "", 10] ], equipright : [ ["Common clothes", "", 3], ["Belt pouch (with coins)", "", 1] ], feature : "Rustic Hospitality", trait : [ "I judge people by their actions, not their words.", "If someone is in trouble, I'm always ready to lend help.", "When I set my mind to something, I follow through no matter what gets in my way.", "I have a strong sense of fair play and always try to find the most equitable solution to arguments.", "I'm confident in my own abilities and do what I can to instill confidence in others.", "Thinking is for other people. I prefer action.", "I misuse long words in an attempt to sound smarter.", "I get bored easily. When am I going to get on with my destiny?" ], ideal : [ ["Respect", "Respect: People deserve to be treated with dignity and respect. (Good)" ], ["Fairness", "Fairness: No one should get preferential treatment before the law, and no one is above the law. (Lawful)" ], ["Freedom", "Freedom: Tyrants must not be allowed to oppress the people. (Chaotic)" ], ["Might", "Might: If I become strong, I can take what I want\u2015 what I deserve. (Evil)" ], ["Sincerity", "Sincerity: There's no good in pretending to be something I'm not. (Neutral)" ], ["Destiny", "Destiny: Nothing and no one can steer me away from my higher calling. (Any)" ] ], bond : [ "I have a family, but I have no idea where they are. One day, I hope to see them again.", "I worked the land, I love the land, and I will protect the land.", "A proud noble once gave me a horrible beating, and I will take my revenge on any bully I encounter.", "My tools are symbols of my past life, and I carry them so that I will never forget my roots.", "I protect those who cannot protect themselves.", "I wish my childhood sweetheart had come with me to pursue my destiny." ], flaw : [ "The tyrant who rules my land will stop at nothing to see me killed.", "I'm convinced of the significance of my destiny, and blind to my shortcomings and the risk of failure.", "The people who knew me when I was young know my shameful secret, so I can never go home again.", "I have a weakness for the vices of the city, especially hard drink.", "Secretly, I believe that things would be better if I were a tyrant lording over the land.", "I have trouble trusting in my allies." ], extra : [ "Select a Defining Event", "I stood up to a tyrant's agents", "I saved people during a natural disaster", "I stood alone against a terrible monster", "I stole from a corrupt merchant for the poor", "I led a militia to fight off an invading army", "I stole weapons from a tyrant to arm the people", "I trained peasantry to fight a tyrant with farm tools", "A decree was rescinded after I led a protest against it", "A magical creature gave me a blessing or insight", "I rose to leadership in a lord's army" ], toolProfs : [["Artisan's tools", 1], "Vehicles (land)"], lifestyle : "modest" }; BackgroundList["guild artisan"] = { regExpSearch : /^(?=.*guild)(?=.*artisan).*$/i, name : "Guild Artisan", source : [["P", 132], ["ALbackground", 0]], skills : ["Insight", "Persuasion"], gold : 15, equipleft : [ ["Set of artisan's tools", "", ""], ["Letter of introduction from guild", "", ""] ], equipright : [ ["Traveler's clothes", "", 4], ["Belt pouch (with coins)", "", 1] ], feature : "Guild Membership", trait : [ "I believe that anything worth doing is worth doing right. I can't help it\u2015 I'm a perfectionist.", "I'm a snob who looks down on those who can't appreciate fine art.", "I always want to know how things work and what makes people tick.", "I'm full of witty aphorisms and have a proverb for every occasion.", "I'm rude to people who lack my commitment to hard work and fair play.", "I like to talk at length about my profession.", "I don't part with my money easily and will haggle tirelessly to get the best deal possible.", "I'm well known for my work, and I want to make sure everyone appreciates it. I'm always taken aback when people haven't heard of me." ], ideal : [ ["Community", "Community: It is the duty of all civilized people to strengthen the bonds of community and the security of civilization. (Lawful)" ], ["Generosity", "Generosity: My talents were given to me so that I could use them to benefit the world. (Good)" ], ["Freedom", "Freedom: Everyone should be free to pursue his or her own livelihood. (Chaotic)" ], ["Greed", "Greed: I'm only in it for the money. (Evil)" ], ["People", "People: I'm committed to the people I care about, not to ideals. (Neutral)" ], ["Aspiration", "Aspiration: I work hard to be the best there is at my craft. (Any)" ] ], bond : [ "The workshop where I learned my trade is the most important place in the world to me.", "I created a great work for someone, and then found them unworthy to receive it. I'm still looking for someone worthy.", "I owe my guild a great debt for forging me into the person I am today.", "I pursue wealth to secure someone's love.", "One day I will return to my guild and prove that I am the greatest artisan of them all.", "I will get revenge on the evil forces that destroyed my place of business and ruined my livelihood." ], flaw : [ "I'll do anything to get my hands on something rare or priceless.", "I'm quick to assume that someone is trying to cheat me.", "No one must ever learn that I once stole money from guild coffers.", "I'm never satisfied with what I have\u2015 I always want more.", "I would kill to acquire a noble title.", "I'm horribly jealous of anyone who can outshine my handiwork. Everywhere I go, I'm surrounded by rivals." ], extra : [ "Select a Guild Business", "Alchemists and apothecaries", "Armorers, locksmiths, and finesmiths", "Brewers, distillers, and vintners", "Calligraphers, scribes, and scriveners", "Carpenters, roofers, and plasterers", "Cartographers, surveyors, and chart-makers", "Cobblers and shoemakers", "Cooks and bakers", "Glassblowers and glaziers", "Jewelers and gemcutters", "Leatherworkers, skinners, and tanners", "Masons and stonecutters", "Painters, limners, and sign-makers", "Potters and tile-makers", "Shipwrights and sailmakers", "Smiths and metal-forgers", "Tinkers, pewterers, and casters", "Wagon-makers and wheelwrights", "Weavers and dyers", "Woodcarvers, coopers, and bowyers" ], toolProfs : [["Artisan's tools", 1]], languageProfs : [1], lifestyle : "comfortable" }; BackgroundList["hermit"] = { regExpSearch : /hermit/i, name : "Hermit", source : [["P", 134], ["ALbackground", 0]], skills : ["Medicine", "Religion"], gold : 5, equipleft : [ ["Winter blanket", "", 3], ["Herbalism kit", "", 3] ], equipright : [ ["Common clothes", "", 3], ["Scroll case with notes", "", 1] ], feature : "Discovery", trait : [ "I've been isolated for so long that I rarely speak, preferring gestures and the occasional grunt.", "I am utterly serene, even in the face of disaster.", "The leader of my community had something wise to say on every topic, and I am eager to share that wisdom.", "I feel tremendous empathy for all who suffer.", "I'm oblivious to etiquette and social expectations.", "I connect everything that happens to me to a grand, cosmic plan.", "I often get lost in my own thoughts and contemplation, becoming oblivious to my surroundings.", "I am working on a grand philosophical theory and love sharing my ideas." ], ideal : [ ["Greater Good", "Greater Good: My gifts are meant to be shared with all, not used for my own benefit. (Good)" ], ["Logic", "Logic: Emotions must not cloud our sense of what is right and true, or our logical thinking. (Lawful)" ], ["Free Thinking", "Free Thinking: Inquiry and curiosity are the pillars of progress. (Chaotic)" ], ["Power", "Power: Solitude and contemplation are paths toward mystical or magical power. (Evil)" ], ["Live and Let Live", "Live and Let Live: Meddling in the affairs of others only causes trouble. (Neutral)" ], ["Self-Knowledge", "Self-Knowledge: If you know yourself, there's nothing left to know. (Any)" ] ], bond : [ "Nothing is more important than the other members of my hermitage, order, or association.", "I entered seclusion to hide from the ones who might still be hunting me. I must someday confront them.", "I'm still seeking the enlightenment I pursued in my seclusion, and it still eludes me.", "I entered seclusion because I loved someone I could not have.", "Should my discovery come to light, it could bring ruin to the world.", "My isolation gave me great insight into a great evil that only I can destroy." ], flaw : [ "Now that I've returned to the world, I enjoy its delights a little too much.", "I harbor dark, bloodthirsty thoughts that my isolation and meditation failed to quell.", "I am dogmatic in my thoughts and philosophy.", "I let my need to win arguments overshadow friendships and harmony.", "I'd risk too much to uncover a lost bit of knowledge.", "I like keeping secrets and won't share them with anyone." ], extra : [ "Select a Life of Seclusion", "Searching for spiritual enlightenment", "Living in accordance with a religious order", "Exiled for a crime I didn't commit", "Retreated from society after a life-altering event", "Worked on my art, literature, music, or manifesto", "Commune with nature, far from civilization", "Caretaker of an ancient ruin or relic", "Pilgrim in search of a thing of spiritual significance" ], toolProfs : ["Herbalism kit"], languageProfs : [1], lifestyle : "poor" }; BackgroundList["noble"] = { regExpSearch : /^(?!.*(waterdhavian|waterdeep|knight))(?=.*noble).*$/i, name : "Noble", source : [["P", 135], ["ALbackground", 0]], skills : ["History", "Persuasion"], gold : 25, equipleft : [ ["Scroll of pedigree", "", ""] ], equipright : [ ["Fine clothes", "", 6], ["Signet ring", "", ""], ["Purse (with coins)", "", 1] ], feature : "Position of Privilege", trait : [ "My eloquent flattery makes everyone I talk to feel like the most wonderful and important person in the world.", "The common folk love me for my kindness and generosity.", "No one could doubt by looking at my regal bearing that I am a cut above the unwashed masses.", "I take great pains to always look my best and follow the latest fashions.", "I don't like to get my hands dirty, and I won't be caught dead in unsuitable accommodations.", "Despite my noble birth, I do not place myself above other folk. We all have the same blood.", "My favor, once lost, is lost forever.", "If you do me an injury, I will crush you, ruin your name, and salt your fields." ], ideal : [ ["Respect", "Respect: Respect is due to me because of my position, but all people regardless of station deserve to be treated with dignity. (Good)" ], ["Responsibility", "Responsibility: It is my duty to respect the authority of those above me, just as those below me must respect mine. (Lawful)" ], ["Independence", "Independence: I must prove that I can handle myself without the coddling of my family. (Chaotic)" ], ["Power", "Power: If I can attain more power, no one will tell me what to do. (Evil)" ], ["Family", "Family: Blood runs thicker than water. (Any)" ], ["Noble Obligation", "Noble Obligation: It is my duty to protect and care for the people beneath me. (Good)" ] ], bond : [ "I will face any challenge to win the approval of my family.", "My house's alliance with another noble family must be sustained at all costs.", "Nothing is more important than the other members of my family.", "I am in love with the heir of a family that my family despises.", "My loyalty to my sovereign is unwavering.", "The common folk must see me as a hero of the people." ], flaw : [ "I secretly believe that everyone is beneath me.", "I hide a truly scandalous secret that could ruin my family forever.", "I too often hear veiled insults and threats in every word addressed to me, and I'm quick to anger.", "I have an insatiable desire for carnal pleasures.", "In fact, the world does revolve around me.", "By my words and actions, I often bring shame to my family." ], toolProfs : [["Gaming set", 1]], languageProfs : [1], lifestyle : "wealthy" }; BackgroundList["outlander"] = { regExpSearch : /^(?!.*urban)(?=.*(outlander|forester|trapper|homesteader|guide|exile|outcast|bounty.?hunter|tribal nomad|hunter-gatherer|tribal.?marauder)).*$/i, name : "Outlander", source : [["P", 136], ["ALbackground", 0]], skills : ["Athletics", "Survival"], gold : 10, equipright : [ ["Traveler's clothes", "", 4], ["Staff", "", 4], ["Hunting trap", "", 25], ["Trophy from animal", "", ""], ["Belt pouch (with coins)", "", 1] ], feature : "Wanderer", trait : [ "I'm driven by a wanderlust that led me away from home.", "I watch over my friends as if they were a litter of newborn pups.", "I once ran twenty-five miles without stopping to warn to my clan of an approaching orc horde. I'd do it again if I had to.", "I have a lesson for every situation, drawn from observing nature.", "I place no stock in wealthy or well-mannered folk. Money and manners won't save you from a hungry owlbear.", "I'm always picking things up, absently fiddling with them, and sometimes accidentally breaking them.", "I feel far more comfortable around animals than people.", "I was, in fact, raised by wolves." ], ideal : [ ["Change", "Change: Life is like the seasons, in constant change, and we must change with it. (Chaotic)" ], ["Greater Good", "Greater Good: It is each person's responsibility to make the most happiness for the whole tribe. (Good)" ], ["Honor", "Honor: If I dishonor myself, I dishonor my whole clan. (Lawful)" ], ["Might", "Might: The strongest are meant to rule. (Evil)" ], ["Nature", "Nature: The natural world is more important than all the constructs of civilization. (Neutral)" ], ["Glory", "Glory: I must earn glory in battle, for myself and my clan. (Any)" ] ], bond : [ "My family, clan, or tribe is the most important thing in my life, even when they are far from me.", "An injury to the unspoiled wilderness of my home is an injury to me.", "I will bring terrible wrath down on the evildoers who destroyed my homeland.", "I am the last of my tribe, and it is up to me to ensure their names enter legend.", "I suffer awful visions of a coming disaster and will do anything to prevent it.", "It is my duty to provide children to sustain my tribe." ], flaw : [ "I am too enamored of ale, wine, and other intoxicants.", "There's no room for caution in a life lived to the fullest.", "I remember every insult I've received and nurse a silent resentment toward anyone who's ever wronged me.", "I am slow to trust members of other races, tribes, and societies.", "Violence is my answer to almost any challenge.", "Don't expect me to save those who can't save themselves. It is nature's way that the strong thrive and the weak perish." ], extra : ["Select an Origin", "Forester", "Trapper", "Homesteader", "Guide", "Exile or outcast", "Bounty hunter", "Pilgrim", "Tribal nomad", "Hunter-gatherer", "Tribal marauder" ], toolProfs : [["Musical instrument", 1]], languageProfs : [1], lifestyle : "poor" }; BackgroundList["sage"] = { regExpSearch : /(sage|alchemist|astronomer|academic|librarian|professor|researcher|apprentice|scribe)/i, name : "Sage", source : [["P", 137], ["ALbackground", 0]], skills : ["Arcana", "History"], gold : 10, equipleft : [ ["Ink, 1 ounce bottle of", 1, ""], ["Ink pen (quill)", "", ""], ["Small knife", "", 0.5], ["Letter from dead colleague", "", ""] ], equipright : [ ["Common clothes", "", 3], ["Belt pouch (with coins)", "", 1] ], feature : "Researcher", trait : [ "I use polysyllabic words that convey the impression of great erudition.", "I've read every book in the world's greatest libraries\u2015 or I like to boast that I have.", "I'm used to helping out those who aren't as smart as I am, and I patiently explain anything and everything to others.", "There's nothing I like more than a good mystery.", "I'm willing to listen to every side of an argument before I make my own judgment.", "I . . . speak . . . slowly . . . when talking . . . to idiots, . . . which . . . almost. . . everyone . . . is . . . compared . . . to me.", "I am horribly, horribly awkward in social situations.", "I'm convinced that people are always trying to steal my secrets." ], ideal : [ ["Knowledge", "Knowledge: The path to power and self-improvement is through knowledge. (Neutral)" ], ["Beauty", "Beauty: What is beautiful points us beyond itself toward what is true. (Good)" ], ["Logic", "Logic: Emotions must not cloud our logical thinking. (Lawful)" ], ["No Limits", "No Limits: Nothing should fetter the infinite possibility inherent in all existence. (Chaotic)" ], ["Power", "Power: Knowledge is the path to power and domination. (Evil)" ], ["Self-Improvement", "Self-Improvement: The goal of a life of study is the betterment of oneself. (Any)" ] ], bond : [ "It is my duty to protect my students.", "I have an ancient text that holds terrible secrets that must not fall into the wrong hands.", "I work to preserve a library, university, scriptorium, or monastery.", "My life's work is a series of tomes related to a specific field of lore.", "I've been searching my whole life for the answer to a certain question.", "I sold my soul for knowledge. I hope to do great deeds and win it back." ], flaw : [ "I am easily distracted by the promise of information.", "Most people scream and run when they see a demon. I stop and take notes on its anatomy.", "Unlocking an ancient mystery is worth the price of a civilization.", "I overlook obvious solutions in favor of complicated ones.", "I speak without really thinking through my words, invariably insulting others.", "I can't keep a secret to save my life, or anyone else's." ], extra : ["Select a Specialty", "Alchemist", "Astronomer", "Discredited academic", "Librarian", "Professor", "Researcher", "Wizard's apprentice", "Scribe" ], languageProfs : [2], lifestyle : "modest" }; BackgroundList["sailor"] = { regExpSearch : /sailor/i, name : "Sailor", source : [["P", 139], ["ALbackground", 0]], skills : ["Athletics", "Perception"], gold : 10, equipleft : [ ["Silk rope, feet of", 50, 0.1] ], equipright : [ ["Common clothes", "", 3], ["Belaying pin (club)", "", 2], ["Lucky charm", "", ""], ["Belt pouch (with coins)", "", 1] ], feature : "Ship's Passage", trait : [ "My friends know they can rely on me, no matter what.", "I work hard so that I can play hard when the work is done.", "I enjoy sailing into new ports and making new friends over a flagon of ale.", "I stretch the truth for the sake of a good story.", "To me, a tavern brawl is a nice way to get to know a new city.", "I never pass up a friendly wager.", "My language is as foul as an otyugh nest.", "I like a job well done, especially if I can convince someone else to do it." ], ideal : [ ["Respect", "Respect: The thing that keeps a ship together is mutual respect between captain and crew. (Good)" ], ["Fairness", "Fairness: We all do the work, so we all share in the rewards. (Lawful)" ], ["Freedom", "Freedom: The sea is freedom\u2015 the freedom to go anywhere and do anything. (Chaotic)" ], ["Mastery", "Mastery: I'm a predator, and the other ships on the sea are my prey. (Evil)" ], ["People", "People: I'm committed to my crewmates, not to ideals. (Neutral)" ], ["Aspiration", "Aspiration: Someday I'll own my own ship and chart my own destiny. (Any)" ] ], bond : [ "I'm loyal to my captain first, everything else second.", "The ship is most important\u2015 crewmates and captains come and go.", "I'll always remember my first ship.", "In a harbor town, I have a paramour whose eyes nearly stole me from the sea.", "I was cheated out of my fair share of the profits, and I want to get my due.", "Ruthless pirates murdered my captain and crewmates, plundered our ship, and left me to die. Vengeance will be mine." ], flaw : [ "I follow orders, even if I think they're wrong.", "I'll say anything to avoid having to do extra work.", "Once someone questions my courage, I never back down no matter how dangerous the situation.", "Once I start drinking, it's hard for me to stop.", "I can't help but pocket loose coins and other trinkets I come across.", "My pride will probably lead to my destruction." ], toolProfs : ["Navigator's tools", "Vehicles (water)"], lifestyle : "modest", }; BackgroundList["soldier"] = { regExpSearch : /^(?!.*mercenary)(?=.*soldier).*$/i, name : "Soldier", source : [["P", 140], ["ALbackground", 0]], skills : ["Athletics", "Intimidation"], gold : 10, equipright : [ ["Common clothes", "", 3], ["Insignia of rank", "", ""], ["Trophy from fallen enemy", "", ""], ["Bone dice or playing cards", "", ""], ["Belt pouch (with coins)", "", 1] ], feature : "Military Rank", trait : [ "I'm always respectful and polite.", "I'm haunted by memories of war. I can't get the violent images out of my mind.", "I'm slow to make new friends, because I've lost too many old ones.", "I'm full of inspiring and cautionary tales from my military experience with some relevance to almost every type of combat situation.", "I can stare down an owlbear without flinching.", "I enjoy my strength and like to break things.", "I have a rough sense of humor.", "I approach problems head-on. A simple, direct course is the best path to a solution." ], ideal : [ ["Greater Good", "Greater Good: Our fate is to give our lives in the defense of others. (Good)" ], ["Responsibility", "Responsibility: I do what I have to and follow just authority. (Lawful)" ], ["Independence", "Independence: When people obey orders blindly, they affirm a kind of tyranny. (Chaotic)" ], ["Might", "Might: In life as in war, the mightier force prevails. (Evil)" ], ["Live and Let Live", "Live and Let Live: Ideals aren't worth killing over or going to war for. (Neutral)" ], ["Nation", "Nation: My city, state, or people are the only things that matter. (Any)" ] ], bond : [ "I would still give my life for the people I have served with.", "Someone saved my life on the battlefield. Even now, I would never leave a friend behind.", "My honor is my life.", "I'll never forget the crushing defeat my company endured or the foes who inflicted it.", "Those who fight with me are those worth laying down my life for.", "I fight for those who cannot fight for themselves." ], flaw : [ "The atrocious enemy we faced in battle still leaves me trembling with fear.", "I have little respect for those who are not a tested warrior.", "A disastrous mistake I made in battle cost many lives\u2015 I will do anything to keep that mistake a secret.", "My hatred of my foes is blind and unreasoning. ", "I uphold the law, even if the law causes suffering.", "I'd rather eat my weapon than admit when I'm wrong." ], extra : ["Select a Specialty", "Officer", "Scout", "Infantry", "Cavalry", "Healer", "Quartermaster", "Standard-bearer", "Support staff" ], toolProfs : [["Gaming set", 1], "Vehicles (land)"], lifestyle : "modest" }; BackgroundList["urchin"] = { regExpSearch : /urchin/i, name : "Urchin", source : [["P", 141], ["ALbackground", 0]], skills : ["Sleight of Hand", "Stealth"], gold : 10, equipleft : [ ["Map of the city", "", ""], ["Small knife", "", 0.5] ], equipright : [ ["Common clothes", "", 3], ["Token from my parents", "", ""], ["Pet mouse", "", 0.1], ["Belt pouch (with coins)", "", 1] ], feature : "City Secrets", trait : [ "I keep scraps of food and trinkets hidden away in my pockets.", "I ask questions all the time.", "I like to squeeze into compact places where nobody can harm me.", "I sleep with my back to solid surface, with all that I own embraced tightly in my arms.", "I have bad manners and eat like a pig.", "I expect that anybody who's nice to me is hiding malicious intent.", "I eschew bathing.", "I say, without reserve, what other people are implying or masking." ], ideal : [ ["Respect", "Respect: Everybody, no matter their riches, deserves respect. (Good)" ], ["Community", "Community: We have to take look out for each other, because nobody else will do it for us. (Lawful)" ], ["Change", "Change: The low rise up, and the high and mighty come down. Change is natural. (Chaotic)" ], ["Retribution", "Retribution: The rich need to be shown how it is to live and die in the poor quarters. (Evil)" ], ["People", "People: I help those who help me\u2015 that is what lets us stay alive. (Neutral)" ], ["Aspiration", "Aspiration: I'm going to prove that I'm worthy of a better life. (Any)" ] ], bond : [ "My town or city is my home, and I'll battle those that threaten it.", "I'm the benefactor of an orphanage so others may be kept from enduring what I was forced to endure.", "I owe my life to another urchin who taught me the ways of living in the gutters.", "I owe a debt I can never repay to the person who showed me sympathy.", "I got away from my life of poverty by robbing an influential person, and I'm wanted for it.", "No one else should have to suffer the difficulties I've been through." ], flaw : [ "I will run away from a fight if I'm outnumbered.", "A gold piece already has a lot of value to me, and I'll do just about anything for more of it.", "I will never completely trust another. I only trust myself.", "I would rather use an unfair advantage than fight honorably.", "It's not theft if I have more use for it than someone else.", "People who are incapable of taking care of themselves get what they deserve." ], toolProfs : ["Disguise kit", ["Thieves' tools", "Dex"]], lifestyle : "modest" }; // Add the background variants AddBackgroundVariant("entertainer", "gladiator", { regExpSearch : /gladiator/i, name : "Gladiator", source : [["P", 131], ["ALbackground", 0]], equipright : [ ["Costume", "", 4], ["Favor of an admirer", "", ""], ["Belt pouch (with coins)", "", 1], ["Inexpensive, unusual weapon", "", ""] ], feature : "Are You Entertained?", extra : "" }); AddBackgroundVariant("guild artisan", "guild merchant", { regExpSearch : /^(?=.*guild)(?=.*merchant).*$/i, name : "Guild Merchant", source : [["P", 133], ["ALbackground", 0]], equipleft : [ ["Letter of introduction from guild", "", ""] ], equipright : [ ["Traveler's clothes", "", 4], ["Belt pouch (with coins)", "", 1], ["Cart", "", ""], ["Mule", "", ""] ], extra : [ "Select a Guild Business", "Traders", "Caravan masters", "Shopkeepers" ], toolProfs : ["Navigator's tools (or language)"] }); AddBackgroundVariant("noble", "knight", { regExpSearch : /^(?!.*order)(?=.*knight).*$/i, name : "Knight", source : [["P", 136], ["ALbackground", 0]], equipright : [ ["Fine clothes", "", 6], ["Signet ring", "", ""], ["Purse (with coins)", "", 1], ["Banner or token from devoted love", "", ""] ], feature : "Retainers" }); AddBackgroundVariant("sailor", "pirate", { regExpSearch : /pirate/i, name : "Pirate", source : [["P", 139], ["ALbackground", 0]], feature : "Bad Reputation" }); // Add the backgrounds features that are not in the SRD BackgroundFeatureList["are you entertained?"] = { description : "I can always find a place to perform (arena/pit fight), where I receive free lodging and food of a modest or comfortable standard, as long as I perform each night. In addition, my performance makes me something of a local figure. When strangers recognize me in a town where I have performed, they typically take a liking to me.", source : [["P", 131], ["ALbackground", 0]] }; BackgroundFeatureList["bad reputation"] = { description : "No matter where I go, people are afraid of me due to my reputation. When I am in a civilized settlement, I can get away with minor criminal offenses, such as refusing to pay for food at a tavern or breaking down doors at a local shop, since most people will not report my activity to the authorities.", source : [["P", 139], ["ALbackground", 0]] }; BackgroundFeatureList["by popular demand"] = { description : "I can always find a place to perform (inn/tavern/circus/etc.), where I receive free lodging and food of a modest or comfortable standard, as long as I perform each night. In addition, my performance makes me something of a local figure. When strangers recognize me in a town where I have performed, they typically take a liking to me.", source : [["P", 130], ["ALbackground", 0]] }; BackgroundFeatureList["city secrets"] = { description : "I know the secret patterns and flow to cities and can find passages through the urban sprawl that others would miss. When I am not in combat, I (and companions I lead) can travel between any two locations in the city twice as fast as my speed would normally allow.", source : [["P", 141], ["ALbackground", 0]] }; BackgroundFeatureList["criminal contact"] = { description : "I have a reliable and trustworthy contact who acts as my liaison to a network of other criminals. I know how to get messages to and from my contact, even over great distances; specifically, I know the local messengers, corrupt caravan masters, and seedy sailors who can deliver my messages.", source : [["P", 129], ["ALbackground", 0]] }; BackgroundFeatureList["discovery"] = { description : "The quiet seclusion of my extended hermitage gave me access to a unique and powerful discovery. The exact nature of this revelation depends on the nature of my seclusion. It might be a great truth, a hidden site, a long forgotten fact, or unearthed some relic of the past that could rewrite history.", source : [["P", 134], ["ALbackground", 0]] }; BackgroundFeatureList["false identity"] = { description : "I have created a second identity that includes documentation, established acquaintances, and disguises that allow me to assume that persona. Additionally, I can forge documents, including official papers and personal letters, as long as I have seen an example of the kind of document or the handwriting I am trying to copy.", source : [["P", 128], ["ALbackground", 0]] }; BackgroundFeatureList["guild membership"] = { description : "5 gp membership fees per month: The guild offers lodging if possible. In case of being accused of a crime, the guild will support me if a good case can be made for my innocence or the crime is justifiable. I can also gain access to powerful political figures through the guild, as long as I'm in good standing and the guild is paid enough.", source : [["P", 133], ["ALbackground", 0]] }; BackgroundFeatureList["military rank"] = { description : "I have a military rank from my career as a soldier. Soldiers loyal to my former military organization still recognize my authority and influence. I can invoke my rank to influence soldiers and temporarily requisition simple equipment or horses. I can usually gain access to friendly military encampments and fortresses where my rank is recognized.", source : [["P", 140], ["ALbackground", 0]], }; BackgroundFeatureList["position of privilege"] = { description : "I am welcome in high society, and people assume I have the right to be wherever I am. The common folk make every effort to accommodate me and avoid my displeasure, and other people of high birth treat me as a member of the same social sphere. I can secure an audience with a local noble if I need to.", source : [["P", 135], ["ALbackground", 0]] }; BackgroundFeatureList["researcher"] = { description : "When I attempt to learn or recall a piece of lore, if I do not know that information, I often know where and from whom I can obtain it. Usually, this information comes from a library, scriptorium, university, or a sage or other learned person or creature. Unearthing the deepest secrets of the multiverse can require an adventure or even a whole campaign.", source : [["P", 138], ["ALbackground", 0]] }; BackgroundFeatureList["retainers"] = { description : "I have the service of three retainers loyal to my family, one of whom is another noble and my squire. My other retainers are commoners who can perform mundane tasks for me, but they do not fight for me, will not follow me into obviously dangerous areas (such as dungeons), and will leave if they are frequently endangered or abused.", source : [["P", 136], ["ALbackground", 0]] }; BackgroundFeatureList["rustic hospitality"] = { description : "Since I come from the ranks of the common folk, I fit in among them with ease. I can find a place to hide, rest, or recuperate among other commoners, unless I have shown myself to be a danger to them. They will shield me from the law or anyone else searching for me, though they will not risk their lives for me.", source : [["P", 131], ["ALbackground", 0]] }; BackgroundFeatureList["ship's passage"] = { description : "When I need to, I can secure free passage on a sailing ship for myself and my companions. I might sail on the ship I served on, or another ship I have good relations with. Because I'm calling in a favor, I can't be certain of a schedule or route that will meet my every need. My companions and I are expected to assist the crew during the voyage.", source : [["P", 139], ["ALbackground", 0]] }; BackgroundFeatureList["wanderer"] = { description : "I have an excellent memory for maps and geography, and I can always recall the general layout of terrain, settlements, and other features around me. In addition, I can find food and fresh water for myself and up to five other people each day, provided that the land offers berries, small game, water, and so forth.", source : [["P", 136], ["ALbackground", 0]] }; // Add the feats that are not in the SRD FeatsList["actor"] = { name : "Actor", source : [["P", 165]], descriptionFull : "Skilled at mimicry and dramatics, you gain the following benefits:\n \u2022 Increase your Charisma score by 1, to a maximum of 20.\n \u2022 You have advantage on Charisma (Deception) and Charisma (Performance) checks when trying to pass yourself off as a different person.\n \u2022 You can mimic the speech of another person or the sounds made by other creatures. You must have heard the person speaking, or heard the creature make the sound, for at least 1 minute. A successful Wisdom (Insight) check contested by your Charisma (Deception) check allows a listener to determine that the effect is faked.", description : "Advantage on Charisma (Deception) and (Performance) if trying to pass as another. I can mimic a person's speech or other creature's sounds if I've heard it for at least 1 minute. Wisdom (Insight) vs. Charisma (Deception) to determine the sound is faked. [+1 Charisma]", scores : [0, 0, 0, 0, 0, 1] }; FeatsList["alert"] = { name : "Alert", source : [["P", 165]], descriptionFull : "Always on the lookout for danger, you gain the following benefits:\n \u2022 You gain a +5 bonus to initiative.\n \u2022 You can't be surprised while you are conscious.\n \u2022 Other creatures don't gain advantage on attack rolls against you as a result of being unseen by you.", description : "I can't be surprised while I'm conscious. I have a +5 bonus on initiative rolls. Other creatures don't gain advantage on attack rolls against me as a result of being hidden from me.", addMod : { type : "skill", field : "Init", mod : 5, text : "I have a +5 bonus on initiative rolls." } }; FeatsList["athlete"] = { name : "Athlete", source : [["P", 165]], descriptionFull : "You have undergone extensive physical training to gain the following benefits:\n \u2022 Increase your Strength or Dexterity score by 1, to a maximum of 20.\n \u2022 When you are prone, standing up uses only 5 feet of your movement.\n \u2022 Climbing doesn't cost you extra movement.\n \u2022 You can make a running long jump or a running high jump after moving only 5 feet on foot, rather than 10 feet.", description : "Standing up from prone uses only 5 ft of movement. Climbing doesn't cost me extra movement. I can make a running long jump or a running high jump after moving only 5 feet on foot, rather than 10 feet. [+1 Strength or Dexterity]", scorestxt : "+1 Strength or Dexterity" }; FeatsList["charger"] = { name : "Charger", source : [["P", 165]], descriptionFull : "When you use your action to Dash, you can use a bonus action to make one melee weapon attack or to shove a creature.\n If you move at least 10 feet in a straight line immediately before taking this bonus action, you either gain a +5 bonus to the attack's damage roll (if you chose to make a melee attack and hit) or push the target up to 10 feet away from you (if you chose to shove and you succeed).", description : "As a bonus action after taking the Dash action, I can make one melee weapon attack or shove a creature. If I move at least 10 ft in a straight line before this bonus action, I add +5 damage to the attack or increase the distance up to 10 ft for the shove.", action : [["bonus action", " (after Dash action)"]] }; FeatsList["crossbow expert"] = { name : "Crossbow Expert", source : [["P", 165]], descriptionFull : "Thanks to extensive practice with the crossbow, you gain the following benefits:\n \u2022 You ignore the loading quality of crossbows with which you are proficient.\n \u2022 Being within 5 feet of a hostile creature doesn't impose disadvantage on your ranged attack rolls.\n \u2022 When you use the Attack action and attack with a one-handed weapon, you can use a bonus action to attack with a hand crossbow you are holding.", description : "I ignore the loading quality of crossbows I'm proficient with. I don't suffer disadv. on ranged attack rolls for being within 5 ft of a hostile. When I attack with a one-handed weapon in my Attack action, I can use a bonus action to attack with a hand crossbow I'm holding.", action : [["bonus action", " (with Attack action)"]], calcChanges : { atkAdd : [ function (fields, v) { if (/crossbow/i.test(v.baseWeaponName) && fields.Proficiency) { fields.Description = fields.Description.replace(/(,? ?loading|loading,? ?)/i, ''); }; }, "I ignore the loading quality of crossbows I'm proficient with." ] } }; FeatsList["defensive duelist"] = { name : "Defensive Duelist", source : [["P", 165]], descriptionFull : "When you are wielding a finesse weapon with which you are proficient and another creature hits you with a melee attack, you can use your reaction to add your proficiency bonus to your AC for that attack, potentially causing the attack to miss you.", description : "When wielding a finesse weapon with which I am proficient and another creature hits me with a melee attack, I can use my reaction to add my proficiency bonus to my AC for that attack, potentially causing the attack to miss me.", prerequisite : "Dexterity 13 or higher", prereqeval : function(v) { return What('Dex') >= 13; }, action : [["reaction", " (when hit in melee)"]] }; FeatsList["dual wielder"] = { name : "Dual Wielder", source : [["P", 165]], descriptionFull : "You master fighting with two weapons, gaining the following benefits:\n \u2022 You gain a +1 bonus to AC while you are wielding a separate melee weapon in each hand.\n \u2022 You can use two-weapon fighting even when the one-handed melee weapons you are wielding aren't light.\n \u2022 You can draw or stow two one-handed weapons when you would normally be able to draw or stow only one.", description : "I can use two-weapon fighting even when the one-handed melee weapons I'm wielding aren't light. I can draw or stow two one-handed weapons when I would normally be able to draw or stow only one. +1 AC while wielding separate melee weapons in each hand.", extraAC : { mod : 1, text : "I gain a +1 bonus to AC when holding a melee weapon in each hand.", stopeval : function (v) { return v.usingShield && !(/animated/i).test(What("AC Shield Bonus Description")); } } }; FeatsList["dungeon delver"] = { name : "Dungeon Delver", source : [["P", 166]], descriptionFull : "Alert to the hidden traps and secret doors found in many dungeons, you gain the following benefits:\n \u2022 You have advantage on Wisdom (Perception) and Intelligence (Investigation) checks made to detect the presence of secret doors.\n \u2022 You have advantage on saving throws made to avoid or resist traps.\n \u2022 You have resistance to the damage dealt by traps.\n \u2022 Traveling at a fast pace doesn't impose the normal -5 penalty on your passive Wisdom (Perception) score.", description : "I have adv. on Wis (Perception) and Int (Investigation) checks made to detect the presence of secret doors. I have resistance to damage dealt by traps and advantage on saves to avoid or resist traps. Travelling at a fast pace doesn't impose -5 on my passive Perception.", dmgres : ["Traps"], savetxt : { adv_vs : ["traps"] }, vision : [["Adv. on Perception and Investigation for secret doors", 0], ["No -5 for travelling at fast pace", 0]] }; FeatsList["durable"] = { name : "Durable", source : [["P", 166]], descriptionFull : "Hardy and resilient, you gain the following benefits:\n \u2022 Increase your Constitution score by 1, to a maximum of 20.\n \u2022 When you roll a Hit Die to regain hit points, the minimum number of hit points you regain from the roll equals twice your Constitution modifier (minimum of 2).", description : "When I roll a hit die to regain hit points, the minimum number of hit points I regain from the roll equals twice my Constitution modifier (minimum of 2). [+1 Constitution]", scores : [0, 0, 1, 0, 0, 0] }; FeatsList["elemental adept"] = { name : "Elemental Adept", source : [["P", 166]], descriptionFull : "When you gain this feat, choose one of the following damage types: acid, cold, fire, lightning, or thunder.\n Spells you cast ignore resistance to damage of the chosen type. In addition, when you roll damage for a spell you cast that deals damage of that type, you can treat any 1 on a damage die as a 2.\n\nYou can select this feat multiple times. Each time you do so, you must choose a different damage type.", description : "Choose one of the damage types: acid, cold, fire, lightning, or thunder. Spells I cast ignore resistance to damage from this damage type. For any spell I cast that deals this damage type, I can treat any 1 on a damage die as a 2.", prerequisite : "The ability to cast at least one spell", prereqeval : function(v) { return v.isSpellcaster; }, allowDuplicates : true, choices : ["acid", "cold", "fire", "lightning", "thunder"], "acid" : { description : "Spells I cast ignore resistance to acid damage. For any spell I cast that deals acid damage, I can treat any 1 on a damage die as a 2." }, "cold" : { description : "Spells I cast ignore resistance to cold damage. For any spell I cast that deals cold damage, I can treat any 1 on a damage die as a 2." }, "fire" : { description : "Spells I cast ignore resistance to fire damage. For any spell I cast that deals fire damage, I can treat any 1 on a damage die as a 2." }, "lightning" : { description : "Spells I cast ignore resistance to lightning damage. For any spell I cast that deals lightning damage, I can treat any 1 on a damage die as a 2." }, "thunder" : { description : "Spells I cast ignore resistance to thunder damage. For any spell I cast that deals thunder damage, I can treat any 1 on a damage die as a 2." } }; FeatsList["great weapon master"] = { name : "Great Weapon Master", source : [["P", 167]], descriptionFull : "You've learned to put the weight of a weapon to your advantage, letting its momentum empower your strikes. You gain the following benefits:\n \u2022 On your turn, when you score a critical hit with a melee weapon or reduce a creature to 0 hit points with one, you can make one melee weapon attack as a bonus action.\n \u2022 Before you make a melee attack with a heavy weapon that you are proficient with, you can choose to take a -5 penalty to the attack roll. If the attack hits, you add +10 to the attack's damage.", description : "If I score a critical hit or reduce a creature to 0 hit points with a melee weapon in my turn, I can make one melee weapon attack as a bonus action. With a heavy melee weapon, I can choose to take a -5 penalty on the attack roll for +10 on the attack's damage.", action : [["bonus action", " (after crit or take-down)"]], calcChanges : { atkCalc : [ function (fields, v, output) { if (v.isMeleeWeapon && (/heavy/i).test(fields.Description) && (/\bgwm\b|power.{0,3}attack|great.{0,3}weapon.{0,3}master/i).test(v.WeaponText)) { output.extraDmg += 10; output.extraHit -= 5; }; }, "If I include the words 'Power Attack', 'Great Weapon Master', or just 'GWM' in a heavy melee weapon's name or description, the calculation will put a -5 penalty on the attack's To Hit and +10 on its Damage." ] } }; FeatsList["healer"] = { name : "Healer", source : [["P", 167]], descriptionFull : "You are an able physician, allowing you to mend wounds quickly and get your allies back in the fight. You gain the following benefits:\n \u2022 When you use a healer's kit to stabilize a dying creature, that creature also regains 1 hit point.\n \u2022 As an action, you can spend one use of a healer's kit to tend to a creature and restore 1d6+4 hit points to it, plus additional hit points equal to the creature's maximum number of Hit Dice. The creature can't regain hit points from this feat again until it finishes a short or long rest.", description : "Using a healer's kit to stabilize someone gives them 1 hit point as well. As an action, I can spend one use of a healer's kit to restore 1d6 + 4 + (creature's HD) hit points. After that, the creature can't gain hit points from this feat again until it finishes a short rest.", action : [["action", " (1d6+4+HD with healing kit)"]] }; FeatsList["heavily armored"] = { name : "Heavily Armored", source : [["P", 167]], descriptionFull : "You have trained to master the use of heavy armor, gaining the following benefits:\n \u2022 Increase your Strength score by 1, to a maximum of 20.\n \u2022 You gain proficiency with heavy armor.", description : "I gain proficiency with heavy armor. [+1 Strength]", prerequisite : "Proficiency with medium armor", prereqeval : function(v) { return v.mediumArmorProf; }, scores : [1, 0, 0, 0, 0, 0], armorProfs : [false, false, true, false] }; FeatsList["heavy armor master"] = { name : "Heavy Armor Master", source : [["P", 167]], descriptionFull : "You can use your armor to deflect strikes that would kill others. You gain the following benefits:\n \u2022 While you are wearing heavy armor, bludgeoning, piercing, and slashing damage that you take from nonmagical weapons is reduced by 3.", description : "While wearing heavy armor, bludgeoning, piercing, and slashing damage taken from nonmagical weapons is reduced by 3. [+1 Strength]", prerequisite : "Proficiency with heavy armor", prereqeval : function(v) { return v.heavyArmorProf; }, scores : [1, 0, 0, 0, 0, 0] }; FeatsList["inspiring leader"] = { name : "Inspiring Leader", source : [["P", 167]], descriptionFull : "You can spend 10 minutes inspiring your companions, shoring up their resolve to fight. When you do so, choose up to six friendly creatures (which can include yourself) within 30 feet of you who can see or hear you and who can understand you. Each creature can gain temporary hit points equal to your level + your Charisma modifier. A creature can't gain temporary hit points from this feat again until it has finished a short or long rest.", calculate : "event.value = 'I can spend 10 minutes inspiring up to 6 friendly creatures within 30 feet who can see or hear and can understand me. Each gains lvl (' + What('Character Level') + ') + Cha mod (' + What('Cha Mod') + \") temporary hit points. One can't gain temporary hit points from this feat again until after a short rest.\";", prerequisite : "Charisma 13 or higher", prereqeval : function(v) { return What('Cha') >= 13; } }; FeatsList["keen mind"] = { name : "Keen Mind", source : [["P", 167]], descriptionFull : "You have a mind that can track time, direction, and detail with uncanny precision. You gain the following benefits:\n \u2022 Increase your Intelligence score by 1, to a maximum of 20.\n \u2022 You always know which way is north.\n \u2022 You always know the number of hours left before the next sunrise or sunset.\n \u2022 You can accurately recall anything you have seen or heard within the past month.", description : "I always know which way is north and the number of hours left before the next sunrise or sunset. I can accurately recall anything I have seen or heard within the past month. [+1 Intelligence]", scores : [0, 0, 0, 1, 0, 0] }; FeatsList["lightly armored"] = { name : "Lightly Armored", source : [["P", 167]], descriptionFull : "You have trained to master the use of light armor, gaining the following benefits:\n \u2022 Increase your Strength or Dexterity score by 1, to a maximum of 20.\n \u2022 You gain proficiency with light armor.", description : "I gain proficiency with light armor. [+1 Strength or Dexterity]", scorestxt : "+1 Strength or Dexterity", armorProfs : [true, false, false, false] }; FeatsList["linguist"] = { name : "Linguist", source : [["P", 167]], descriptionFull : "You have studied languages and codes, gaining the following benefits:\n \u2022 Increase your Intelligence score by 1, to a maximum of 20.\n \u2022 You learn three languages of your choice.\n \u2022 You can ably create written ciphers. Others can't decipher a code you create unless you teach them, they succeed on an Intelligence check (DC equal to your Intelligence score + your proficiency bonus), or they use magic to decipher it.", calculate : "event.value = \"I can ably create written ciphers that others can't decipher unless I teach them, they succeed on an Intelligence check DC \" + (Number(What('Int')) + Number(How('Proficiency Bonus'))) + ' (Intelligence score + proficiency bonus), or they use magic to decipher it. I learn three languages of my choice. [+1 Intelligence]';", scores : [0, 0, 0, 1, 0, 0], languageProfs : [3] }; FeatsList["lucky"] = { name : "Lucky", source : [["P", 167]], descriptionFull : "You have inexplicable luck that seems to kick in at just the right moment.\n You have 3 luck points. Whenever you make an attack roll, an ability check, or a saving throw, you can spend one luck point to roll an additional d20. You can choose to spend one of your luck points after you roll the die, but before the outcome is determined. You choose which of the d20s is used for the attack roll, ability check, or saving throw.\n You can also spend one luck point when an attack roll is made against you. Roll a d20, and then choose whether the attack uses the attacker's roll or yours. If more than one creature spends a luck point to influence the outcome of a roll, the points cancel each other out; no additional dice are rolled.\n You regain your expended luck points when you finish a long rest.", description : "Use one of three luck points to roll an extra d20 for attacking, being attacked, an ability check, or a saving throw before the outcome is determined. If more than one creature uses luck, no extra dice are rolled. I regain expended luck points when I finish a long rest.", usages : 3, recovery : "long rest", additional : "attack/check/save" }; FeatsList["mage slayer"] = { name : "Mage Slayer", source : [["P", 168]], descriptionFull : "You have practiced techniques useful in melee combat against spellcasters, gaining the following benefits:\n \u2022 When a creature within 5 feet of you casts a spell, you can use your reaction to make a melee weapon attack against that creature.\n \u2022 When you damage a creature that is concentrating on a spell, that creature has disadvantage on the saving throw it makes to maintain its concentration.\n \u2022 You have advantage on saving throws against spells cast by creatures within 5 feet of you.", description : "As a reaction, I can make a melee weapon attack on a creature within 5 ft of me that casts a spell. Concentration checks from damage from me are made with disadvantage. I have advantage on saving throws against spells cast by creatures within 5 feet of me.", savetxt : { adv_vs : ["spells cast within 5 ft"] }, action : [["reaction", "Melee weapon attack (if spell cast in 5 ft)"]] }; FeatsList["magic initiate"] = { name : "Magic Initiate", source : [["P", 168]], descriptionFull : "Choose a class: bard, cleric, druid, sorcerer, warlock, or wizard. You learn two cantrips of your choice from that class's spell list.\n In addition, choose one 1st-level spell to learn from that same list. Using this feat, you can cast the spell once at its lowest level, and you must finish a long rest before you can cast it in this way again.\n Your spellcasting ability for these spells depends on the class you chose: Charisma for bard, sorcerer, or warlock; Wisdom for cleric or druid: or Intelligence for wizard.", description : "Select a spellcasting class using the square button on this feat line. I learn two cantrips and one 1st-level spell of my choice from that class' spell list. I can cast the 1st-level spell at its lowest level once per long rest without using a spell slot.", calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { if (spName.indexOf("magic initiate") === 0 && spellObj.level > 0) { // test if levels in same class var casterClass = spName.replace(/magic initiate[_-]*/i, ''); if (classes.known[casterClass]) { spellObj.firstCol = "oncelr+markedbox"; } } } ] }, choices : ["Bard", "Cleric", "Druid", "Sorcerer", "Warlock", "Wizard"], "bard" : { description : "I learn two cantrips and one 1st-level spell of my choice from the bard's spell list. I can cast the 1st-level spell at its lowest level once per long rest without using a spell slot. If I'm a bard, I can also cast the 1st-level spell by expending a spell slot as normal. Charisma is my spellcasting ability for these spells.", spellcastingBonus : [{ name : "Bard cantrip", spellcastingAbility : 6, 'class' : 'bard', level : [0, 0], times : 2, }, { name : "Bard 1st-level spell", 'class' : 'bard', level : [1, 1], firstCol : "oncelr", }] }, "cleric" : { description : "I learn two cantrips and one 1st-level spell of my choice from the cleric's spell list. I can cast the 1st-level spell at its lowest level once per long rest without using a spell slot. If I'm a cleric, I can also cast the 1st-level spell by expending a spell slot as normal. Wisdom is my spellcasting ability for these spells.", spellcastingBonus : [{ name : "Cleric cantrip", spellcastingAbility : 5, 'class' : 'cleric', level : [0, 0], times : 2, }, { name : "Cleric 1st-level spell", 'class' : 'cleric', level : [1, 1], firstCol : "oncelr", }] }, "druid" : { description : "I learn two cantrips and one 1st-level spell of my choice from the druid's spell list. I can cast the 1st-level spell at its lowest level once per long rest without using a spell slot. If I'm a druid, I can also cast the 1st-level spell by expending a spell slot as normal. Wisdom is my spellcasting ability for these spells.", spellcastingBonus : [{ name : "Druid cantrip", spellcastingAbility : 5, 'class' : 'druid', level : [0, 0], times : 2, }, { name : "Druid 1st-level spell", 'class' : 'druid', level : [1, 1], firstCol : "oncelr", }] }, "sorcerer" : { description : "I learn two cantrips and one 1st-level spell of my choice from the sorcerer's spell list. I can cast the 1st-level spell at its lowest level once per long rest without using a spell slot. If I'm a sorcerer, I can also cast the 1st-level spell by expending a spell slot as normal. Charisma is my spellcasting ability for these spells.", spellcastingBonus : [{ name : "Sorcerer cantrip", spellcastingAbility : 6, 'class' : 'sorcerer', level : [0, 0], times : 2, }, { name : "Sorcerer 1st-level spell", 'class' : 'sorcerer', level : [1, 1], firstCol : "oncelr", }] }, "warlock" : { description : "I learn two cantrips and one 1st-level spell of my choice from the warlock's spell list. I can cast the 1st-level spell at its lowest level once per long rest without using a spell slot. If I'm a warlock, I can also cast the 1st-level spell by expending a spell slot as normal. Charisma is my spellcasting ability for these spells.", spellcastingBonus : [{ name : "Warlock cantrip", spellcastingAbility : 6, 'class' : 'warlock', level : [0, 0], times : 2, }, { name : "Warlock 1st-level spell", 'class' : 'warlock', level : [1, 1], firstCol : "oncelr", }] }, "wizard" : { description : "I learn two cantrips and one 1st-level spell of my choice from the wizard's spell list. I can cast the 1st-level spell at its lowest level once per long rest without using a spell slot. If I'm a wizard, I can also cast the 1st-level spell by expending a spell slot as normal. Intelligence is my spellcasting ability for these spells.", spellcastingBonus : [{ name : "Wizard cantrip", spellcastingAbility : 4, 'class' : 'wizard', level : [0, 0], times : 2, }, { name : "Wizard 1st-level spell", 'class' : 'wizard', level : [1, 1], firstCol : "oncelr", }] } }; FeatsList["martial adept"] = { name : "Martial Adept", source : [["P", 168]], descriptionFull : "You have martial training that allows you to perform special combat maneuvers. You gain the following benefits:\n \u2022 You learn two maneuvers of your choice from among those available to the Battle Master archetype in the fighter class. If a maneuver you use requires your target to make a saving throw to resist the maneuver's effects, the saving throw DC equals 8 + your proficiency bonus + your Strength or Dexterity modifier (your choice).\n \u2022 You gain one superiority die, which is a d6 (this die is added to any superiority dice you have from another source). This die is used to fuel your maneuvers. A superiority die is expended when you use it. You regain your expended superiority dice when you finish a short or long rest.", description : "", calculate : "event.value = 'I learn two maneuvers of my choice from those available to the Battle Master (2nd page \"Choose Feature\" button). The saving throw DC for this is ' + (8 + Number(How('Proficiency Bonus')) + Math.max(Number(What('Str Mod')), Number(What('Dex Mod')))) + ' (8 + proficiency bonus + Str/Dex mod). I gain one superiority die (d6), which I regain when I finish a short rest.';", bonusClassExtrachoices : [{ "class" : "fighter", "subclass" : "fighter-battle master", "feature" : "subclassfeature3.1", "bonus" : 2 }], extraLimitedFeatures : [{ name : "Combat Superiority", usages : 1, additional : 'd6', recovery : "short rest", addToExisting : true }] }; FeatsList["medium armor master"] = { name : "Medium Armor Master", source : [["P", 168]], descriptionFull : "You have practiced moving in medium armor to gain the following benefits:\n \u2022 Wearing medium armor doesn't impose disadvantage on your Dexterity (Stealth) checks.\n \u2022 When you wear medium armor, you can add 3, rather than 2, to your AC if you have a Dexterity of 16 or higher.", description : "Wearing medium armor doesn't impose disadvantage on my Dexterity (Stealth) checks. When I wear medium armor, I can add up to 3, rather than 2, to my AC if my Dexterity is 16 or higher.", prerequisite : "Proficiency with medium armor", prereqeval : function(v) { return v.mediumArmorProf; }, eval : function () { Value('Medium Armor Max Mod', 3); ApplyArmor(What("AC Armor Description")); }, removeeval : function () { tDoc.resetForm(['Medium Armor Max Mod']); ApplyArmor(What("AC Armor Description")); } }; FeatsList["mobile"] = { name : "Mobile", source : [["P", 168]], descriptionFull : "You are exceptionally speedy and agile. You gain the following benefits:\n \u2022 Your speed increases by 10 feet.\n \u2022 When you use the Dash action, difficult terrain doesn't cost you extra movement on that turn.\n \u2022 When you make a melee attack against a creature, you don't provoke opportunity attacks from that creature for the rest of the turn, whether you hit or not.", description : "When I use the Dash action, difficult terrain doesn't cost me extra movement that turn. When I make a melee attack against a creature, I don't provoke opportunity attacks from that creature for the rest of the turn, whether I hit or not. [+10 ft speed]", speed : { allModes : { bonus : "+10" } } }; FeatsList["moderately armored"] = { name : "Moderately Armored", source : [["P", 168]], descriptionFull : "You have trained to master the use of medium armor and shields, gaining the following benefits:\n \u2022 Increase your Strength or Dexterity score by 1, to a maximum of 20.\n \u2022 You gain proficiency with medium armor and shields.", description : "I gain proficiency with medium armor and shields. [+1 Strength or Dexterity]", prerequisite : "Proficiency with light armor", prereqeval : function(v) { return v.lightArmorProf; }, scorestxt : "+1 Strength or Dexterity", armorProfs : [false, true, false, true] }; FeatsList["mounted combatant"] = { name : "Mounted Combatant", source : [["P", 168]], descriptionFull : "You are a dangerous foe to face while mounted. While you are mounted and aren't incapacitated, you gain the following benefits:\n \u2022 You have advantage on melee attack rolls against any unmounted creature that is smaller than your mount.\n \u2022 You can force an attack targeted at your mount to target you instead.\n \u2022 If your mount is subjected to an effect that allows it to make a Dexterity saving throw to take only half damage, it instead takes no damage if it succeeds on the saving throw, and only half damage if it fails.", description : "I have advantage on melee attack rolls against unmounted creatures smaller than my mount. I can force attacks targeting my mount to target me instead. When a Dex save would halve damage, my mount takes no damage on success and half damage on failure." }; FeatsList["observant"] = { name : "Observant", source : [["P", 168]], descriptionFull : "Quick to notice details of your environment, you gain the following benefits:\n \u2022 Increase your Intelligence or Wisdom score by 1, to a maximum of 20.\n \u2022 If you can see a creature's mouth while it is speaking a language you understand, you can interpret what it's saying by reading its lips.\n \u2022 You have a +5 bonus to your passive Wisdom (Perception) and passive Intelligence (Investigation) scores.", description : "If I can see a creature's mouth while it is speaking a language I understand, I can interpret what it's saying by reading its lips. I have a +5 bonus to passive Wisdom (Perception) and passive Intelligence (Investigation) scores. [+1 Intelligence or Wisdom]", scorestxt : "+1 Intelligence or Wisdom", addMod : { type : "skill", field : "passive perception", mod : 5, text : "I have a +5 bonus to passive Wisdom (Perception)." } }; FeatsList["polearm master"] = { name : "Polearm Master", source : [["P", 168]], descriptionFull : "You can keep your enemies at bay with reach weapons. You gain the following benefits:\n \u2022 When you take the Attack action and attack with only a glaive, halberd, quarterstaff, or spear, you can use a bonus action to make a melee attack with the opposite end of the weapon; this attack uses the same ability modifier as the primary attack. The weapon's damage die for this attack is a d4, and the attack deals bludgeoning damage.\n \u2022 While you are wielding a glaive, halberd, pike, quarterstaff, or spear, other creatures provoke an opportunity attack from you when they enter your reach.", description : "As a bonus action when I do the Attack action with a glaive/" + (typePF ? " " : "") + "halberd/quarterstaff/spear, I can make a 1d4 bludgeoning attack with its butt end." + (typePF ? "\n" : " ") + "While wielding a glaive/halberd/" + (typePF ? "" : " ") + "pike/quarterstaff/spear, I get an opportunity attack when a creature enters my reach.", weaponOptions : [{ regExpSearch : /^(?=.*(polearm|(glaive|guandao|bisento|naginata)|(halberd|\bji\b|kamayari)|(quarterstaff|\bstaff\b|\bbo\b)|(spear|qiang|\byaris?\b)))(?=.*butt)(?=.*end).*$/i, name : "Polearm Butt End", source : [["P", 168]], ability : 1, type : "polearm butt end", damage : [1, 4, "bludgeoning"], range : "Melee", description : "As bonus action after Attack action with only a glaive, halberd, spear, or quarterstaff", abilitytodamage : true, selectNow : true }], action : ['bonus action', 'Butt End Attack (after attack with polearm)'], weaponProfs : [false, false, ["polearm butt end"]] }; FeatsList["resilient"] = { name : "Resilient", source : [["P", 168]], descriptionFull : "Choose one ability score. You gain the following benefits:\n \u2022 Increase the chosen ability score by 1, to a maximum of 20.\n \u2022 You gain proficiency in saving throws using the chosen ability.", description : "Select an ability score using the square button on this feat line. I gain proficiency with the saving throw of that ability score and a +1 added to it.", choices : ["Strength", "Dexterity", "Constitution", "Intelligence", "Wisdom", "Charisma"], "strength" : { description : "I gain proficiency with Strength saving throws. [+1 Strength]", scores : [1, 0, 0, 0, 0, 0], saves : ["Str"] }, "dexterity" : { description : "I gain proficiency with Dexterity saving throws. [+1 Dexterity]", scores : [0, 1, 0, 0, 0, 0], saves : ["Dex"] }, "constitution" : { description : "I gain proficiency with Constitution saving throws. [+1 Constitution]", scores : [0, 0, 1, 0, 0, 0], saves : ["Con"] }, "intelligence" : { description : "I gain proficiency with Intelligence saving throws. [+1 Intelligence]", scores : [0, 0, 0, 1, 0, 0], saves : ["Int"] }, "wisdom" : { description : "I gain proficiency with Wisdom saving throws. [+1 Wisdom]", scores : [0, 0, 0, 0, 1, 0], saves : ["Wis"] }, "charisma" : { description : "I gain proficiency with Charisma saving throws. [+1 Charisma]", scores : [0, 0, 0, 0, 0, 1], saves : ["Cha"] } }; FeatsList["ritual caster"] = { name : "Ritual Caster", source : [["P", 169]], descriptionFull : "You have learned a number of spells that you can cast as rituals. These spells are written in a ritual book, which you must have in hand while casting one of them.\n When you choose this feat, you acquire a ritual book holding two 1st-level spells of your choice. Choose one of the following classes: bard, cleric, druid, sorcerer, warlock, or wizard. You must choose your spells from that class's spell list, and the spells you choose must have the ritual tag. The class you choose also determines your spellcasting ability for these spells: Charisma for bard, sorcerer, or warlock; Wisdom for cleric or druid; or Intelligence for wizard.\n If you come across a spell in written form, such as a magical spell scroll or a wizard's spellbook, you might be able to add it to your ritual book. The spell must be on the spell list for the class you chose, the spell's level can be no higher than half your level (rounded up), and it must have the ritual tag. The process of copying the spell into your ritual book takes 2 hours per level of the spell, and costs 50 gp per level. The cost represents material components you expend as you experiment with the spell to master it, as well as the fine inks you need to record it.", description : "Select a spellcasting class using the square button on this feat line. I gain a book with two 1st-level ritual spells from that class' spell list. I can transcribe more ritual spells into this book and cast them as rituals only.", prerequisite : "Intelligence or Wisdom 13 or higher", prereqeval : function(v) { return What('Int') >= 13 || What('Wis') >= 13; }, commoneval : function(chc, spellAbility) { if (!chc) return; CurrentSpells['ritual caster ' + chc] = { name : 'Ritual Book [' + chc.capitalize() + ']', ability : spellAbility, list : {"class" : chc, ritual : true}, known : {spells : 'book'}, refType : "feat" }; SetStringifieds('spells'); CurrentUpdates.types.push('spells'); }, commonremoveeval : function(chc) { if (!chc) return; delete CurrentSpells['ritual caster ' + chc]; SetStringifieds('spells'); CurrentUpdates.types.push('spells'); }, calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { if (!spellObj.ritualCasterFeatChange && spName.indexOf("ritual caster ") !== -1) { spellObj.ritualCasterFeatChange = true; spellObj.firstCol = SpellRitualTag; if (!(/.*(\d+ ?h\b|special|see b).*/i).test(spellObj.time)) { var numMinutes = Number(spellObj.time.replace(/(\d+) ?min.*/, "$1")); if (isNaN(numMinutes)) numMinutes = 0; spellObj.time = (numMinutes + 10) + " min"; } return true; }; }, "By the Ritual Caster feat, I can cast ritual spells from my Ritual Book. Casting a spell as a ritual means adding 10 minutes to its casting time." ] }, choices : ["Bard", "Cleric", "Druid", "Sorcerer", "Warlock", "Wizard"], "bard" : { description : "I can cast spells in my ritual book as rituals only. I gain two 1st-level ritual bard spells.\nI can copy ritual bard spells that I find into my book if they are not more than half my level (2 hours and 50 gp per spell level). Charisma is my spellcasting ability for these.", eval : function(lvl, chc) { FeatsList["ritual caster"].commoneval(chc[1], 6); }, removeeval : function(lvl, chc) { FeatsList["ritual caster"].commonremoveeval(chc[0]); } }, "cleric" : { description : "I can cast spells in my ritual book as rituals only. I gain two 1st-level ritual cleric spells.\nI can copy ritual cleric spells that I find into my book if they are not more than half my level (2 hours and 50 gp per spell level). Wisdom is my spellcasting ability for these.", eval : function(lvl, chc) { FeatsList["ritual caster"].commoneval(chc[1], 5); }, removeeval : function(lvl, chc) { FeatsList["ritual caster"].commonremoveeval(chc[0]); } }, "druid" : { description : "I can cast spells in my ritual book as rituals only. I gain two 1st-level ritual druid spells.\nI can copy ritual druid spells that I find into my book if they are not more than half my level (2 hours and 50 gp per spell level). Wisdom is my spellcasting ability for these.", eval : function(lvl, chc) { FeatsList["ritual caster"].commoneval(chc[1], 5); }, removeeval : function(lvl, chc) { FeatsList["ritual caster"].commonremoveeval(chc[0]); } }, "sorcerer" : { description : "I can cast spells in my ritual book as rituals only. I gain two 1st-level ritual sorcerer spells.\nI can copy ritual sorcerer spells that I find into my book if they are not more than half my level (2 hours and 50 gp per spell level). Charisma is my spellcasting ability for these.", eval : function(lvl, chc) { FeatsList["ritual caster"].commoneval(chc[1], 6); }, removeeval : function(lvl, chc) { FeatsList["ritual caster"].commonremoveeval(chc[0]); } }, "warlock" : { description : "I can cast spells in my ritual book as rituals only. I gain two 1st-level ritual warlock spells.\nI can copy ritual warlock spells that I find into my book if they are not more than half my level (2 hours and 50 gp per spell level). Charisma is my spellcasting ability for these.", eval : function(lvl, chc) { FeatsList["ritual caster"].commoneval(chc[1], 6); }, removeeval : function(lvl, chc) { FeatsList["ritual caster"].commonremoveeval(chc[0]); } }, "wizard" : { description : "I can cast spells in my ritual book as rituals only. I gain two 1st-level ritual wizard spells.\nI can copy ritual wizard spells that I find into my book if they are not more than half my level (2 hours and 50 gp per spell level). Intelligence is my spellcasting ability for these.", eval : function(lvl, chc) { FeatsList["ritual caster"].commoneval(chc[1], 4); }, removeeval : function(lvl, chc) { FeatsList["ritual caster"].commonremoveeval(chc[0]); } } }; FeatsList["savage attacker"] = { name : "Savage Attacker", source : [["P", 169]], descriptionFull : "Once per turn when you roll damage for a melee weapon attack, you can reroll the weapon's damage dice and use either total.", description : "Once per turn, when I roll damage for a melee weapon attack, I can reroll the weapon's damage dice and use either total." }; FeatsList["sentinel"] = { name : "Sentinel", source : [["P", 169]], descriptionFull : "You have mastered techniques to take advantage of every drop in any enemy's guard, gaining the following benefits:\n \u2022 When you hit a creature with an opportunity attack, the creature's speed becomes 0 for the rest of the turn.\n \u2022 Creatures provoke opportunity attacks from you even if they take the Disengage action before leaving your reach.\n \u2022 When a creature within 5 feet of you makes an attack against a target other than you (and that target doesn't have this feat), you can use your reaction to make a melee weapon attack against the attacking creature.", description : "Creatures I hit with opportunity attacks have 0 speed for this turn. The Disengage action doesn't work on me. When a creature within 5 ft makes an attack against a target other than me, I can use my reaction to make a melee weapon attack against the attacker.", action : [["reaction", " (after attack on ally)"]] }; FeatsList["sharpshooter"] = { name : "Sharpshooter", source : [["P", 170]], descriptionFull : "You have mastered ranged weapons and can make shots that others find impossible. You gain the following benefits:\n \u2022 Attacking at long range doesn't impose disadvantage on your ranged weapon attack rolls.\n \u2022 Your ranged weapon attacks ignore half cover and three-quarters cover.\n \u2022 Before you make an attack with a ranged weapon that you are proficient with, you can choose to take a -5 penalty to the attack roll. If the attack hits, you add +10 to the attack's damage.", description : "My ranged weapon attacks don't have disadvantage on long range and ignore half cover and three-quarters cover. With a ranged weapon that I am proficient with, I can choose to take a -5 penalty on the attack roll for +10 on the attack's damage.", calcChanges : { atkAdd : [ function (fields, v) { if (v.isRangedWeapon || v.isThrownWeapon) { fields.Description += (fields.Description ? '; ' : '') + "No disadv. at long range; Ignore \u00BD and \u00BE cover"; }; }, "My ranged weapon attacks suffer no disadvantage for long range and ignore half cover and three-quarters cover. This includes thrown weapons.\n \u2022 If I include the words 'Power Attack', 'Sharpshooter', or 'Sharpshot' in the name or description of a ranged weapon that I'm proficient with, the calculation will put a -5 penalty on the attack's To Hit and a +10 bonus to its Damage. This does not work with thrown weapons." ], atkCalc : [ function (fields, v, output) { if (v.isRangedWeapon && fields.Proficiency && /power.{0,3}attack|sharp.{0,3}shoo?t/i.test(v.WeaponText)) { output.extraDmg += 10; output.extraHit -= 5; }; }, '' ] } }; FeatsList["shield master"] = { name : "Shield Master", source : [["P", 170]], descriptionFull : "You use shields not just for protection but also for offense. You gain the following benefits while you are wielding a shield:\n \u2022 If you take the Attack action on your turn, you can use a bonus action to try to shove a creature within 5 feet of you with your shield.\n \u2022 If you aren't incapacitated, you can add your shield's AC bonus to any Dexterity saving throw you make against a spell or other harmful effect that targets only you.\n \u2022 If you are subjected to an effect that allows you to make a Dexterity saving throw to take only half damage, you can use your reaction to take no damage if you succeed on the saving throw, interposing your shield between yourself and the source of the effect.", description : "As a bonus action, when I use the Attack action, I can shove someone within 5 ft with my shield. I add my shield's AC bonus to Dex saves vs. effects targeting only me. As a reaction, if I succeed on a Dex save for half damage, I can interpose my shield to avoid the damage.", action : [['bonus action', 'Shove with shield (with Attack action)'], ['reaction', 'Interpose shield (if Dex save half dmg)']] }; FeatsList["skilled"] = { name : "Skilled", source : [["P", 170]], descriptionFull : "You gain proficiency in any combination of three skills or tools of your choice.", description : "I gain proficiency with any combination of three skills or tools of my choice.", skillstxt : "Choose three skills or tools" }; FeatsList["skulker"] = { name : "Skulker", source : [["P", 170]], descriptionFull : "You are expert at slinking through shadows. You gain the following benefits:\n \u2022 You can try to hide when you are lightly obscured from the creature from which you are hiding.\n \u2022 When you are hidden from a creature and miss it with a ranged weapon attack, making the attack doesn't reveal your position.\n \u2022 Dim light doesn't impose disadvantage on your Wisdom (Perception) checks relying on sight.", description : "I can try to hide when I am lightly obscured. My position is not revealed when I am hidden from a creature and miss it with a ranged weapon attack. Dim light doesn't impose disadvantage on my Wisdom (Perception) checks relying on sight.", prerequisite : "Dexterity 13 or higher", prereqeval : function(v) { return What('Dex') >= 13; }, vision : [["No disadv. on Perception in dim light", 0]] }; FeatsList["spell sniper"] = { name : "Spell Sniper", source : [["P", 170]], descriptionFull : "You have learned techniques to enhance your attacks with certain kinds of spells, gaining the following benefits:\n \u2022 When you cast a spell that requires you to make an attack roll, the spell's range is doubled.\n \u2022 Your ranged spell attacks ignore half cover and three-quarters cover.\n \u2022 You learn one cantrip that requires an attack roll. Choose the cantrip from the bard, cleric, druid, sorcerer, warlock, or wizard spell list. Your spellcasting ability for this cantrip depends on the spell list you chose from: Charisma for bard, sorcerer, or warlock; Wisdom for cleric or druid; or Intelligence for wizard.", description : "Select a spellcasting class using the square button on this feat line. I learn one cantrip requiring an attack roll from the spell list of the chosen class. Any spell I cast requiring an attack roll has its range doubled and ignores half and 3/4 cover.", prerequisite : "The ability to cast at least one spell", prereqeval : function(v) { return v.isSpellcaster; }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.spellSniper && !v.isDC && v.isSpell && (/\d+ ?(f.{0,2}t|m)/i).test(fields.Range)) { v.spellSniper = true; var rangeNmbr = fields.Range.match(/\d+([.,]\d+)?/g); var notNmbrs = fields.Range.split(RegExp(rangeNmbr.join('|'))); fields.Range = ''; rangeNmbr.forEach(function (dR, idx) { fields.Range += (notNmbrs[idx] ? notNmbrs[idx] : '') + (parseFloat(dR.toString().replace(',', '.') * 2)); }); if (notNmbrs.length > rangeNmbr.length) { fields.Range += notNmbrs[notNmbrs.length - 1]; }; if (!v.rangeM) { v.rangeM = 2; } else { v.rangeM *= 2; } }; }, "My spells and cantrips that require an attack roll have their range doubled.", 700 ], spellAdd : [ function (spellKey, spellObj, spName) { if ( !spellObj.spellSniper && !spellObj.psionic && (/spell attack/i).test(spellObj.description + spellObj.descriptionFull) && (/^(?!.*(S:|rad|touch|self|cone|cube)).*\d+([.,]\d+)?[\- ]?(f.{0,2}t|m).*$/i).test(spellObj.range) ) { spellObj.spellSniper = true; var rangeNmbr = spellObj.range.match(/\d+([.,]\d+)?/g); var notNmbrs = spellObj.range.split(RegExp(rangeNmbr.join('|'))); spellObj.range = ''; rangeNmbr.forEach(function (dR, idx) { spellObj.range += (notNmbrs[idx] ? notNmbrs[idx] : '') + (parseFloat(dR.toString().replace(',', '.') * 2)); }); if (notNmbrs.length > rangeNmbr.length) { spellObj.range += notNmbrs[notNmbrs.length - 1]; }; if (!spellObj.rangeM) { spellObj.rangeM = 2; } else { spellObj.rangeM *= 2; } return true; }; }, "My spells and cantrips that require an attack roll have their range doubled.", 700 ] }, choices : ["Bard", "Cleric", "Druid", "Sorcerer", "Warlock", "Wizard"], "bard" : { description : "Any spell that I cast that requires an attack roll has its range doubled. My ranged spell attacks ignore half cover and three-quarters cover. I learn one bard cantrip that requires an attack roll. Charisma is my spellcasting ability for this.", spellcastingBonus : [{ name : "Spell Attack Cantrip", spellcastingAbility : 6, 'class' : 'bard', level : [0, 0], attackOnly : true, }] }, "cleric" : { description : "Any spell that I cast that requires an attack roll has its range doubled. My ranged spell attacks ignore half cover and three-quarters cover. I learn one cleric cantrip that requires an attack roll. Wisdom is my spellcasting ability for this.", spellcastingBonus : [{ name : "Spell Attack Cantrip", spellcastingAbility : 5, 'class' : 'cleric', level : [0, 0], attackOnly : true, }] }, "druid" : { description : "Any spell that I cast that requires an attack roll has its range doubled. My ranged spell attacks ignore half cover and three-quarters cover. I learn one druid cantrip that requires an attack roll. Wisdom is my spellcasting ability for this.", spellcastingBonus : [{ name : "Spell Attack Cantrip", spellcastingAbility : 5, 'class' : 'druid', level : [0, 0], attackOnly : true, }] }, "sorcerer" : { description : "Any spell that I cast that requires an attack roll has its range doubled. My ranged spell attacks ignore half cover and three-quarters cover. I learn one sorcerer cantrip that requires an attack roll. Charisma is my spellcasting ability for this.", spellcastingBonus : [{ name : "Spell Attack Cantrip", spellcastingAbility : 6, 'class' : 'sorcerer', level : [0, 0], attackOnly : true, }] }, "warlock" : { description : "Any spell that I cast that requires an attack roll has its range doubled. My ranged spell attacks ignore half cover and three-quarters cover. I learn one warlock cantrip that requires an attack roll. Charisma is my spellcasting ability for this.", spellcastingBonus : [{ name : "Spell Attack Cantrip", spellcastingAbility : 6, 'class' : 'warlock', level : [0, 0], attackOnly : true, }] }, "wizard" : { description : "Any spell that I cast that requires an attack roll has its range doubled. My ranged spell attacks ignore half cover and three-quarters cover. I learn one wizard cantrip that requires an attack roll. Intelligence is my spellcasting ability for this.", spellcastingBonus : [{ name : "Spell Attack Cantrip", spellcastingAbility : 4, 'class' : 'wizard', level : [0, 0], attackOnly : true, }] } }; FeatsList["tavern brawler"] = { name : "Tavern Brawler", source : [["P", 170]], descriptionFull : "Accustomed to rough-and-tumble fighting using whatever weapons happen to be at hand, you gain the following benefits:\n \u2022 Increase your Strength or Constitution score by 1, to a maximum of 20.\n \u2022 You are proficient with improvised weapons.\n \u2022 Your unarmed strike uses a d4 for damage.\n \u2022 When you hit a creature with an unarmed strike or an improvised weapon on your turn, you can use a bonus action to attempt to grapple the target.", description : "I am proficient with improvised weapons. My unarmed strike does 1d4 damage. When I hit a creature with an unarmed strike or improvised weapon on my turn, I can attempt to grapple the target as a bonus action. [+1 Strength or Constitution]", scorestxt : "+1 Strength or Constitution", action : ['bonus action', 'Grapple (on hit with unarmed/improv.)'], weaponProfs : [false, false, ["Improvised weapons"]], calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == "unarmed strike" || v.baseWeaponName == "improvised weapon" || /improvised/i.test(v.WeaponName + v.baseWeaponName) || /improvised weapon/i.test(v.theWea.type)) { fields.Proficiency = true; if (v.isMeleeWeapon) fields.Description += (fields.Description ? '; ' : '') + 'After hit, can attempt to grapple as a bonus action'; }; if (v.baseWeaponName == "unarmed strike" && fields.Damage_Die == 1) { fields.Damage_Die = '1d4'; }; }, "My unarmed strikes deal 1d4 damage instead of 1.\n \u2022 After hitting a creature with an unarmed strike or improvised weapon in melee, I can attempt to start a grapple as a bonus action." ] } }; FeatsList["tough"] = { name : "Tough", source : [["P", 170]], descriptionFull : "Your hit point maximum increases by an amount equal to twice your level when you gain this feat. Whenever you gain a level thereafter, your hit point maximum increases by an additional 2 hit points.", description : "My hit point maximum increases by an amount equal to twice my character level.", calcChanges : { hp : function (totalHD) { return [totalHD * 2, '\n + ' + totalHD + ' \xD7 2 from the Tough feat (' + (totalHD * 2) + ')', true]; } } }; FeatsList["war caster"] = { name : "War Caster", source : [["P", 170]], prerequisite : "The ability to cast at least one spell", prereqeval : function(v) { return v.isSpellcaster; }, descriptionFull : "You have practiced casting spells in the midst of combat, learning techniques that grant you the following benefits:\n \u2022 You have advantage on Constitution saving throws that you make to maintain your concentration on a spell when you take damage.\n \u2022 You can perform the somatic components of spells even when you have weapons or a shield in one or both hands.\n \u2022 When a hostile creature's movement provokes an opportunity attack from you, you can use your reaction to cast a spell at the creature, rather than making an opportunity attack. The spell must have a casting time of 1 action and must target only that creature.", description : "Advantage on Con saves to maintain concentration on spells when damaged. Perform somatic components even when holding weapons or shield in one or both hands. Cast spell of 1 action casting time that targets only one creature instead of an opportunity attack.", action : [["reaction", " - Opportunity Spell"]], savetxt : { text : "Adv. on Con (Concentration) saves when damaged" } }; FeatsList["weapon master"] = { name : "Weapon Master", source : [["P", 170]], descriptionFull : "You have practiced extensively with a variety of weapons, gaining the following benefits:\n \u2022 Increase your Strength or Dexterity score by 1, to a maximum of 20.\n \u2022 You gain proficiency with four simple or martial weapons of your choice.", description : "I gain proficiency with four simple or martial weapons of my choice.\n[+1 Strength or Dexterity]", scorestxt : "+1 Strength or Dexterity" }; // Add attack entry that is not in the SRD WeaponsList["thorn whip"] = { regExpSearch : /^(?=.*thorn)(?=.*whip).*$/i, name : "Thorn Whip", source : [["P", 282]], list : "spell", ability : 5, type : "Cantrip", damage : ["C", 6, "piercing"], range : "Melee, 30 ft", description : "Melee spell attack, pull target up to 10 ft closer", abilitytodamage : false }; // Add spells that are not in the SRD SpellsList["arcane gate"] = { name : "Arcane Gate", classes : ["sorcerer", "warlock", "wizard"], source : [["P", 214]], level : 6, school : "Conj", time : "1 a", range : "500 ft", components : "V,S", duration : "Conc, 10 min", description : "Two portals, up to 500 ft apart, teleport any to other side; portals are filled with opaque mist", descriptionFull : "You create linked teleportation portals that remain open for the duration. Choose two points on the ground that you can see, one point within 10 feet of you and one point within 500 feet of you. A circular portal, 10 feet in diameter, opens over each point. If the portal would open in the space occupied by a creature, the spell fails, and the casting is lost." + "\n " + "The portals are two-dimensional glowing rings filled with mist, hovering inches from the ground and perpendicular to it at the points you choose. A ring is visible only from one side (your choice), which is the side that functions as a portal." + "\n " + "Any creature or object entering the portal exits from the other portal as if the two were adjacent to each other, passing through a portal from the non-portal side has no effect. The mist that fills each portal is opaque and blocks vision through it. On your turn, you can rotate the rings as a bonus action so that the active side faces in a different direction." }; SpellsList["armor of agathys"] = { name : "Armor of Agathys", classes : ["warlock"], source : [["P", 215]], level : 1, school : "Abjur", time : "1 a", range : "Self", components : "V,S,M", compMaterial : "A cup of water", duration : "1 h", description : "5+5/SL temp HP; as long as temp HP last any crea that hits in melee takes 5+5/SL Cold dmg", descriptionFull : "A protective magical force surrounds you, manifesting as a spectral frost that covers you and your gear. You gain 5 temporary hit points for the duration. If a creature hits you with a melee attack while you have these hit points, the creature takes 5 cold damage." + AtHigherLevels + "When you cast this spell using a spell slot of 2nd level or higher, both the temporary hit points and the cold damage increase by 5 for each slot level above 1st." }; SpellsList["arms of hadar"] = { name : "Arms of Hadar", classes : ["warlock"], source : [["P", 215]], level : 1, school : "Conj", time : "1 a", range : "S:10-ft rad", components : "V,S", duration : "Instantaneous", save : "Str", description : "2d6+1d6/SL Necrotic dmg; save halves; on failed save no reactions until next turn", descriptionFull : "You invoke the power of Hadar, the Dark Hunger. Tendrils of dark energy erupt from you and batter all creatures within 10 feet of you. Each creature in that area must make a Strength saving throw. On a failed save, a target takes 2d6 necrotic damage and can't take reactions until its next turn. On a successful save, the creature takes half damage, but suffers no other effect." + AtHigherLevels + "When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d6 for each slot level above 1st." }; SpellsList["aura of life"] = { name : "Aura of Life", classes : ["paladin"], source : [["P", 216]], level : 4, school : "Abjur", time : "1 a", range : "S:30-ft rad", components : "V", duration : "Conc, 10 min", description : "Me + any crea while in area Necrotic dmg resist.; at turn start, 0 HP living in area heal 1 HP", descriptionFull : "Life-preserving energy radiates from you in an aura with a 30-foot radius. Until the spell ends, the aura moves with you, centered on you. Each non-hostile creature in the aura (including you) has resistance to necrotic damage, and its hit point maximum can't be reduced. In addition, a non-hostile, living creature regains 1 hit point when it starts its turn in the aura with 0 hit points." }; SpellsList["aura of purity"] = { name : "Aura of Purity", classes : ["paladin"], source : [["P", 216]], level : 4, school : "Abjur", time : "1 a", range : "S:30-ft rad", components : "V", duration : "Conc, 10 min", description : "Me + any crea while in area Poison dmg resist., immune to disease, adv. on saves vs. conditions", descriptionFull : "Purifying energy radiates from you in an aura with a 30-foot radius. Until the spell ends, the aura moves with you, centered on you. Each non-hostile creature in the aura (including you) can't become diseased, has resistance to poison damage, and has advantage on saving throws against effects that cause any of the following conditions - blinded, charmed, deafened, frightened, paralyzed, poisoned, and stunned." }; SpellsList["aura of vitality"] = { name : "Aura of Vitality", classes : ["paladin"], source : [["P", 216]], level : 3, school : "Evoc", time : "1 a", range : "S:30-ft rad", components : "V", duration : "Conc, 1 min", description : "As a bonus action for the duration, I can heal 2d6 HP to 1 creature in range (can be me)", descriptionFull : "Healing energy radiates from you in an aura with a 30-foot radius. Until the spell ends, the aura moves with you, centered on you. You can use a bonus action to cause one creature in the aura (including you) to regain 2d6 hit points." }; SpellsList["banishing smite"] = { name : "Banishing Smite", classes : ["paladin"], source : [["P", 216]], level : 5, school : "Abjur", time : "1 bns", range : "Self", components : "V", duration : "Conc, 1 min", description : "Next weapon hit +5d10 Force dmg; if this brings target HP<50, I banish it until spell ends", descriptionFull : "The next time you hit a creature with a weapon attack before this spell ends, your weapon crackles with force, and the attack deals an extra 5d10 force damage to the target. Additionally, if this attack reduces the target to 50 hit points of fewer, you banish it. If the target is native to a different plane of existence than the one you're on, the target disappears, returning to its home plane. If the target is native to the plane you're on, the creature vanishes into a harmless demiplane. While there, the target is incapacitated. It remains there until the spell ends, at which point the tart reappears in the space it left or in the nearest unoccupied space if that space is occupied." }; SpellsList["beast sense"] = { name : "Beast Sense", classes : ["druid", "ranger"], source : [["P", 217]], ritual : true, level : 2, school : "Div", time : "1 a", range : "Touch", components : "S", duration : "Conc, 1 h", description : "Use 1 willing beast's senses; I'm blinded and deafened while doing so", descriptionFull : "You touch a willing beast. For the duration of the spell, you can use your action to see through the beast's eyes and hear what it hears, and continue to do so until you use your action to return to your normal senses. While perceiving through the beast's senses, you gain the benefits of any special senses possessed by that creature, though you are blinded and deafened to your own surroundings." }; SpellsList["blade ward"] = { name : "Blade Ward", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["P", 218]], level : 0, school : "Abjur", time : "1 a", range : "Self", components : "V,S", duration : "1 rnd", description : "Until the end of my next turn, Bludgeoning, Piercing, and Slashing dmg resist. vs. weapons", descriptionFull : "You extend your hand and trace a sigil of warding in the air. Until the end of your next turn, you have resistance against bludgeoning, piercing, and slashing damage dealt by weapon attacks." }; SpellsList["blinding smite"] = { name : "Blinding Smite", classes : ["paladin"], source : [["P", 219]], level : 3, school : "Evoc", time : "1 bns", range : "Self", components : "V", duration : "Conc, 1 min", save : "Con", description : "Next melee weapon hit +3d8 Radiant dmg; save or blinded; extra save at end of every turn", descriptionFull : "The next time you hit a creature with a melee weapon attack during this spell's duration, you weapon flares with a bright light, and the attack deals an extra 3d8 radiant damage to the target. Additionally, the target must succeed on a Constitution saving throw or be blinded until the spell ends." + "\n " + "A creature blinded by this spell makes another Constitution saving throw at the end of each of its turns. On a successful save, it is no longer blinded." }; SpellsList["chromatic orb"] = { name : "Chromatic Orb", classes : ["sorcerer", "wizard"], source : [["P", 221]], level : 1, school : "Evoc", time : "1 a", range : "90 ft", components : "V,S,M\u0192", compMaterial : "A diamond worth at least 50 gp", duration : "Instantaneous", description : "Spell attack for 3d8+1d8/SL Acid, Cold, Fire, Lightning, Poison or Thunder dmg (50gp)", descriptionFull : "You hurl a 4-inch-diameter sphere of energy at a creature that you can see within range. You choose acid, cold, fire, lightning, poison, or thunder for the type of orb you create, and then make a ranged spell attack against the target. If the attack hits, the creature takes 3d8 damage of the type you chose." + AtHigherLevels + "When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d8 for each slot level above 1st.", dynamicDamageBonus : { multipleDmgTypes : { dmgTypes : ["acid", "cold", "fire", "lightning", "poison", "thunder"], inDescriptionAs :"Acid, Cold, Fire, Lightning, Poison or Thunder" } } }; SpellsList["circle of power"] = { name : "Circle of Power", classes : ["paladin"], source : [["P", 221]], level : 5, school : "Abjur", time : "1 a", range : "S:30-ft rad", components : "V", duration : "Conc, 10 min", description : "Any crea while in area adv. on saves vs. magical effects; if save would half dmg it takes no dmg", descriptionFull : "Divine energy radiates from you, distorting and diffusing magical energy within 30 feet of you. Until the spell ends, the sphere moves with you, centered on you. For the duration, each friendly creature in the area (including you) has advantage on saving throws against spells and other magical effects. Additionally, when an affected creature succeeds on a saving throw made against a spell or magical effect that allows it to make a saving throw to take only half damage, it instead takes no damage if it succeeds on the saving throw." }; SpellsList["cloud of daggers"] = { name : "Cloud of Daggers", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["P", 222]], level : 2, school : "Conj", time : "1 a", range : "60 ft", components : "V,S,M", compMaterial : "A sliver of glass", duration : "Conc, 1 min", description : "5-ft cube 4d4+2d4/SL Slashing dmg to all that enter or start turn in area", descriptionFull : "You fill the air with spinning daggers in a cube 5 feet on each side, centered on a point you choose within range. A creature takes 4d4 slashing damage when it enters the spell's area for the first time on a turn or starts its turn there." + AtHigherLevels + "when you cast this spell using a spell slot of 3rd level or higher, the damage increases by 2d4 for each slot level above 2nd." }; SpellsList["compelled duel"] = { name : "Compelled Duel", classes : ["paladin"], source : [["P", 224]], level : 1, school : "Ench", time : "1 bns", range : "30 ft", components : "V", duration : "Conc, 1 min", save : "Wis", description : "1 crea save or dis. on attacks vs. not-me and save if moving more than 30 ft away", descriptionFull : "You attempt to compel a creature into a duel. One creature that you can see within range must make a Wisdom saving throw. On a failed save, the creature is drawn to you, compelled by your divine demand. For the duration, it has disadvantage on attack rolls against creatures other than you, and must make a Wisdom saving throw each time it attempts to move to a space that is more than 30 feet away from you, if it succeeds on this saving throw, this spell doesn't restrict the target's movement for that turn." + "\n " + "The spell ends if you attack any other creature, if you cast a spell that targets a hostile creature other than the target, if a creature friendly to you damages the target or casts a harmful spell on it, or if you end your turn more than 30 feet away from the target." }; SpellsList["conjure barrage"] = { name : "Conjure Barrage", classes : ["ranger"], source : [["P", 225]], level : 3, school : "Conj", time : "1 a", range : "S:60" + (typePF ? "-" : "") + "ft cone", components : "V,S,M", compMaterial : "One piece of ammunition or a thrown weapon", duration : "Instantaneous", save : "Dex", description : "Throw weapon or ammo; copies rain down for 3d8 dmg; dmg type as weapon; save halves", descriptionFull : "You throw a nonmagical weapon or fire a piece of nonmagical ammunition into the air to create a cone of identical weapons that shoot forward and then disappear. Each creature in a 60-foot cone must succeed on a Dexterity saving throw. A creature takes 3d8 damage on a failed save, or half as much damage on a successful one. The damage type is the same as that of the weapon or ammunition used as a component." }; SpellsList["conjure volley"] = { name : "Conjure Volley", classes : ["ranger"], source : [["P", 226]], level : 5, school : "Conj", time : "1 a", range : "150 ft", components : "V,S,M", compMaterial : "One piece of ammunition or one thrown weapon", duration : "Instantaneous", save : "Dex", description : "Turn ammo/thrown wea into volley; 40-ft rad 20-ft high 8d8 dmg; dmg type as weapon; save halves", descriptionFull : "You fire a piece of nonmagical ammunition from a ranged weapon or throw a nonmagical weapon into the air and choose a point within range. Hundreds of duplicates of the ammunition or weapon fall in a volley from above and then disappear. Each creature in a 40-foot-radius. 20-foot-high cylinder centered on that point must make a Dexterity saving throw. A creature takes 8d8 damage on a failed save, or half as much damage on a successful one. The damage type is the same as that of the ammunition or weapon." }; SpellsList["cordon of arrows"] = { name : "Cordon of Arrows", classes : ["ranger"], source : [["P", 228]], level : 2, school : "Trans", time : "1 a", range : "5 ft", components : "V,S,M", compMaterial : "Four or more arrows or bolts", duration : "8 h", save : "Dex", description : "4+2/SL arrows/bolts attack first crea in 30 ft one at a time for 1d6 Piercing dmg; save halves", descriptionFull : "You plant four pieces of nonmagical ammunition - arrows or crossbow bolts - in the ground within range and lay magic upon them to protect an area. Until the spell ends, whenever a creature other than you comes within 30 feet of the ammunition for the first time on a turn or ends its turn there, one piece of ammunition flies up to strike it. The creature must succeed on a Dexterity saving throw or take 1d6 piercing damage. The piece of ammunition is then destroyed. The spell ends when no ammunition remains." + "\n " + "When you cast this spell, you can designate any creatures you choose, and the spell ignores them." + AtHigherLevels + "When you cast this spell using a spell slot of 3rd level or higher, the amount of ammunition that can be affected increases by two for each slot level above 2nd." }; SpellsList["crown of madness"] = { name : "Crown of Madness", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["P", 229]], level : 2, school : "Ench", time : "1 a", range : "120 ft", components : "V,S", duration : "Conc, 1 min", save : "Wis", description : "1 humanoid save or charmed and must melee attack against crea chosen by me; extra save/rnd", descriptionFull : "One humanoid of your choice that you can see within range must succeed on a Wisdom saving throw or become charmed by you for the duration. While the target is charmed in this way, a twisted crown of jagged iron appears on its head, and a madness glows in its eyes." + "\n " + "The charmed target must use its action before moving on each of its turns to make a melee attack against a creature other than itself that you mentally choose. The target can act normally on its turn if you choose no creature or if none are within its reach." + "\n " + "On your subsequent turns, you must use your action to maintain control over the target, or the spell ends. Also, the target can make a Wisdom saving throw at the end of each of its turns. On a success, the spell ends." }; SpellsList["crusader's mantle"] = { name : "Crusader's Mantle", classes : ["paladin"], source : [["P", 230]], level : 3, school : "Evoc", time : "1 a", range : "S:30-ft rad", components : "V", duration : "Conc, 1 min", description : "Me and allies in range deal extra 1d4 Radiant dmg with weapon attacks", descriptionFull : "Holy power radiates from you in an aura with a 30-foot radius, awakening boldness in friendly creatures. Until the spell ends, the aura moves with you, centered on you. While in the aura, each non-hostile creature in the aura (including you) deals an extra 1d4 radiant damage when it hits with a weapon attack." }; SpellsList["destructive wave"] = { name : "Destructive Wave", classes : ["paladin"], source : [["P", 231]], level : 5, school : "Evoc", time : "1 a", range : "S:30-ft rad", components : "V", duration : "Instantaneous", save : "Con", description : "Any crea 5d6 Thunder dmg \u0026 5d6 Radiant or Necrotic dmg \u0026 knocked prone; save halves, not prone", descriptionShorter : "Any crea 5d6 Thunder dmg \u0026 5d6 Radiant or Necrotic dmg \u0026 prone; save half, not prone", descriptionFull : "You strike the ground, creating a burst of divine energy that ripples outward from you. Each creature you choose within 30 feet of you must succeed on a Constitution saving throw or take 5d6 thunder damage, as well as 5d6 radiant or necrotic damage (your choice), and be knocked prone. A creature that succeeds on its saving throw takes half as much damage and isn't knocked prone.", dynamicDamageBonus : { allDmgTypesSingleMoment : true, multipleDmgTypes : { dmgTypes : ["radiant", "necrotic"], inDescriptionAs : "Radiant or Necrotic" } } }; SpellsList["dissonant whispers"] = { name : "Dissonant Whispers", classes : ["bard"], source : [["P", 234]], level : 1, school : "Ench", time : "1 a", range : "60 ft", components : "V", duration : "Instantaneous", save : "Wis", description : "1 crea 3d6+1d6/SL Psychic dmg and flee; save halves and no fleeing; deaf crea are immune", descriptionFull : "You whisper a discordant melody that only one creature of your choice within range can hear, wracking it with terrible pain. The target must make a Wisdom saving throw. On a failed save, it takes 3d6 psychic damage and must immediately use its reaction, if available, to move as far as its speed allows away from you. The creature doesn't move into obviously dangerous ground, such as a fire or a pit. On a successful save, the target takes half as much damage and doesn't have to move away. A deafened creature automatically succeeds on the save." + AtHigherLevels + "When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d6 for each slot level above 1st." }; SpellsList["elemental weapon"] = { name : "Elemental Weapon", classes : ["artificer", "paladin"], source : [["P", 237]], level : 3, school : "Trans", time : "1 a", range : "Touch", components : "V,S", duration : "Conc, 1 h", description : "+1 magical weapon; +1d4 Acid, Cold, Fire, Lightning, or Thunder dmg; SL5: +2/+2d4, SL7: +3/+3d4", descriptionShorter : "+1 wea; +1d4 Acid/Cold/Fire/Lightning/Thunder dmg; SL5: +2/+2d4, SL7: +3/+3d4", descriptionFull : "A nonmagical weapon you touch becomes a magic weapon. Choose one of the following damage types - acid, cold, fire, lightning, or thunder. For the duration, the weapon has a +1 bonus to attack rolls and deals an extra 1d4 damage of the chosen type when it hits." + AtHigherLevels + "When you cast this spell using a spell slot of 5th or 6th level, the bonus to attack rolls increases to +2 and the extra damage increases to 2d4. When you use a spell slot of 7th level or higher, the bonus increases to +3 and the extra damage increases to 3d4.", dynamicDamageBonus : { multipleDmgTypes : { dmgTypes : ["acid", "cold", "fire", "lightning", "thunder"], inDescriptionAs : "Acid, Cold, Fire, Lightning, or Thunder|Acid/Cold/Fire/Lightning/Thunder" } } }; SpellsList["ensnaring strike"] = { name : "Ensnaring Strike", classes : ["ranger"], source : [["P", 237]], level : 1, school : "Conj", time : "1 bns", range : "Self", components : "V", duration : "Conc, 1 min", save : "Str", description : "Next crea hit save (Large adv.) or restrained, 1d6+1d6/SL Piercing dmg/rnd; Str check to escape", descriptionShorter : "Next crea hit save (Large adv.) or restrained, 1d6+1d6/SL Piercing dmg/rnd; Str chk escape", descriptionFull : "The next time you hit a creature with a weapon attack before this spell ends, a writhing mass of thorny vines appears at the point of impact, and the target must succeed on a Strength saving throw or be restrained by the magical vines until the spell ends. A Large or larger creature has advantage on this saving throw. If the target succeeds on the save, the vines shrivel away." + "\n " + "While restrained by this spell, the target takes 1d6 piercing damage at the start of each of its turns. A creature restrained by the vines or one that can touch the creature can use its action to make a Strength check against your spell save DC. On a success, the target is freed." + AtHigherLevels + "If you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d6 for each slot level above 1st." }; SpellsList["feign death"] = { name : "Feign Death", classes : ["bard", "cleric", "druid", "wizard"], source : [["P", 240]], ritual : true, level : 3, school : "Necro", time : "1 a", range : "Touch", components : "V,S,M", compMaterial : "A pinch of graveyard dirt", duration : "1 h (D)", description : "Willing creature appears dead; it is blinded, incapacitated, has dmg resist. all but Psychic, and speed 0", descriptionFull : "You touch a willing creature and put it into a cataleptic state that is indistinguishable from death." + "\n " + "For the spell's duration, or until you use an action to touch the target and dismiss the spell, the target appears dead to all outward inspection and to spells used to determine the target's status. The target is blinded and incapacitated, and its speed drops to 0. The target has resistance to all damage except psychic damage. If the target is diseased or poisoned when you cast the spell, or becomes diseased or poisoned while under the spell's effect, the disease and poison have no effect until the spell ends." }; SpellsList["friends"] = { name : "Friends", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["P", 244]], level : 0, school : "Ench", time : "1 a", range : "Self", components : "S,M", compMaterial : "A small amount of makeup applied to the face as this spell is cast", duration : "Conc, 1 min", description : "Adv. on Cha checks vs. 1 crea currently not hostile; when spell ends, crea knows and becomes hostile", descriptionFull : "For the duration, you have advantage on all Charisma checks directed at one creature of your choice that isn't hostile toward you. When the spell ends, the creature realizes that you used magic to influence its mood and becomes hostile toward you. A creature prone to violence might attack you. Another creature might seek retribution in other ways (at the DM's discretion), depending on the nature of your interaction with it." }; SpellsList["grasping vine"] = { name : "Grasping Vine", classes : ["druid", "ranger"], source : [["P", 246]], level : 4, school : "Conj", time : "1 bns", range : "30 ft", components : "V,S", duration : "Conc, 1 min", save : "Dex", description : "Conjure vine with 30 ft reach; bns a to direct to 1 crea save or pulled 20 ft to vine", descriptionFull : "You conjure a vine that sprouts from the ground in an unoccupied space of your choice that you can see within range. When you cast this spell, you can direct the vine to lash out at a creature within 30 feet of it that you can see. That creature must succeed on a Dexterity saving throw or be pulled 20 feet directly toward the vine." + "\n " + "Until the spell ends, you can direct the vine to lash out at the same creature or another one as a bonus action on each of your turns." }; SpellsList["hail of thorns"] = { name : "Hail of Thorns", classes : ["ranger"], source : [["P", 249]], level : 1, school : "Conj", time : "1 bns", range : "Self", components : "V", duration : "Conc, 1 min", save : "Dex", description : "Next ranged weapon hit, all within 5 ft of target 1d10+1d10/SL Piercing dmg; save halves", descriptionFull : "The next time you hit a creature with a ranged weapon attack before the spell ends, this spell creates a rain of thorns that sprouts from your ranged weapon or ammunition. In addition to the normal effect of the attack, the target of the attack and each creature within 5 feet of it must make a Dexterity saving throw. A creature takes 1d10 piercing damage on a failed save, or half as much damage on a successful one." + AtHigherLevels + "If you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d10 for each slot level above 1st (to a maximum of 6d10).", dynamicDamageBonus : { multipleDmgMoments : false } }; SpellsList["hex"] = { name : "Hex", classes : ["warlock"], source : [["P", 251]], level : 1, school : "Ench", time : "1 bns", range : "90 ft", components : "V,S,M", compMaterial : "The petrified eye of a newt", duration : "Conc, 1 h", description : "1 crea +1d6 Necrotic dmg from my atks; dis. on chosen ability checks; SL3: conc, 8h; SL5: conc, 24h", descriptionShorter : "1 crea +1d6 Necrotic dmg from my atks; dis. chosen abi chks; SL3: conc, 8h; SL5: conc, 24h", descriptionFull : "You place a curse on a creature that you can see within range. Until the spell ends, you deal an extra 1d6 necrotic damage to the target whenever you hit it with an attack. Also, choose one ability when you cast the spell. The target has disadvantage on ability checks made with the chosen ability." + "\n " + "If the target drops to 0 hit points before this spell ends, you can use a bonus action on a subsequent turn of yours to curse a new creature." + "\n " + "A remove curse cast on the target ends this spell early." + AtHigherLevels + "When you cast this spell using a spell slot of 3rd or 4th level, you can maintain your concentration on the spell for up to 8 hours. When you use a spell slot of 5th level or higher, you can maintain your concentration on the spell for up to 24 hours." }; SpellsList["hunger of hadar"] = { name : "Hunger of Hadar", classes : ["warlock"], source : [["P", 251]], level : 3, school : "Conj", time : "1 a", range : "150 ft", components : "V,S,M", compMaterial : "A pickled octopus tentacle", duration : "Conc, 1 min", save : "Dex", description : "20-ft rad all: blind while in, start turn in 2d6 Cold dmg, end turn in save or 2d6 Acid dmg", descriptionFull : "You open a gateway to the dark between the stars, a region infested with unknown horrors. A 20-foot-radius sphere of blackness and bitter cold appears, centered on a point with range and lasting for the duration. This void is filled with a cacophony of soft whispers and slurping noises that can be heard up to 30 feet away. No light, magical or otherwise, can illuminate the area, and creatures fully within the area are blinded." + "\n " + "The void creates a warp in the fabric of space, and the area is difficult terrain. Any creature that starts its turn in the area takes 2d6 cold damage. Any creature that ends its turn in the area must succeed on a Dexterity saving throw or take 2d6 acid damage as milky, otherworldly tentacles rub against it." }; SpellsList["lightning arrow"] = { name : "Lightning Arrow", classes : ["ranger"], source : [["P", 255]], level : 3, school : "Trans", time : "1 bns", range : "Self", components : "V,S", duration : "Conc, 1 min", save : "Dex", description : "Next rngd wea atk 4d8+1d8/SL Lightn. dmg, miss half; 10 ft all 2d8+1d8/SL Lightn. dmg, save half", descriptionShorter : "Next atk 4d8+1d8/SL Lightn. dmg, miss h" + (typePF ? "a" : "") + "lf; 10 ft all 2d8+1d8/SL Lightn. dmg, save half", descriptionFull : "The next time you make a ranged weapon attack during the spell's duration, the weapon's ammunition, or the weapon itself if it's a thrown weapon, transforms into a bolt of lightning. Make the attack roll as normal. The target takes 4d8 lightning damage on a hit, or half as much damage on a miss, instead of the weapon's normal damage." + "\n " + "Whether you hit or miss, each creature within 10 feet of the target must make a Dexterity saving throw. Each of these creatures takes 2d8 lightning damage on a failed save, or half as much damage on a successful one." + "\n " + "The piece of ammunition or weapon then returns to its normal form." + AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, the damage for both effects of the spell increases by 1d8 for each slot level above 3rd.", dynamicDamageBonus : { multipleDmgMoments : false, skipDmgGroupIfNotMultiple : /(atk .*?lightn\. dmg.*?)/i } }; SpellsList["phantasmal force"] = { name : "Phantasmal Force", classes : ["bard", "sorcerer", "wizard"], source : [["P", 264]], level : 2, school : "Illus", time : "1 a", range : "60 ft", components : "V,S,M", compMaterial : "A bit of fleece", duration : "Conc, 1 min", save : "Int", description : "1 crea save or sees 10 ft cube illusion that does 1d6 Psychic dmg/rnd; Int(Investigation) vs. spell DC", descriptionShorter : "1 crea save or sees 10 ft cube illusion that does 1d6 Psychic dmg/rnd; Investigation vs. DC", descriptionFull : "You craft an illusion that takes root in the mind of a creature that you can see within range. The target must make an Intelligence saving throw. On a failed save, you create a phantasmal object, creature, or other visible phenomenon of your choice that is no larger than a 10-foot cube and that is perceivable only to the target for the duration. This spell has no effect on undead or constructs." + "\n " + "The phantasm includes sound, temperature, and other stimuli, also evident only to the creature." + "\n " + "The target can use its action to examine the phantasm with an Intelligence (Investigation) check against your spell save DC. If the check succeeds, the target realizes that the phantasm is an illusion, and the spell ends." + "\n " + "While a target is affected by the spell, the target treats the phantasm as if it were real. The target rationalizes any illogical outcomes from interacting with the phantasm. For example, a target attempting to walk across a phantasmal bridge that spans a chasm falls once it steps onto the bridge. If the target survives the fall, it still believes that the bridge exists and comes up with some other explanation for its fall - it was pushed, it slipped, or a strong wind might have knocked it off." + "\n " + "An affected target is so convinced of the phantasm's reality that it can even take damage from the illusion. A phantasm created to appear as a creature can attack the target. Similarly, a phantasm created to appear as fire, a pool of acid, or lava can burn the target. Each round on your turn, the phantasm can deal 1d6 psychic damage to the target if it is in the phantasm's area or within 5 feet of the phantasm, provided that the illusion is of a creature or hazard that could logically deal damage, such as by attacking. The target perceives the damage as a type appropriate to the illusion." }; SpellsList["power word heal"] = { name : "Power Word Heal", classes : ["bard"], source : [["P", 266]], level : 9, school : "Evoc", time : "1 a", range : "Touch", components : "V,S", duration : "Instantaneous", description : "1 crea heals all HP and stops being charmed, frightened, paralyzed, stunned; it can use rea to stand up", descriptionShorter : "1 crea heals all HP, not charmed, frightened, paralyzed, stunned; rea to stand up", descriptionFull : "A wave of healing energy washes over the creature you touch. The target regains all its hit points. If the creature is charmed, frightened, paralyzed, or stunned, the condition ends. If the creature is prone, it can use its reaction to stand up. This spell has no effect on undead or constructs." }; SpellsList["ray of sickness"] = { name : "Ray of Sickness", classes : ["sorcerer", "wizard"], source : [["P", 271]], level : 1, school : "Necro", time : "1 a", range : "60 ft", components : "V,S", duration : "Instantaneous", save : "Con", description : "Spell attack for 2d8+1d8/SL Poison dmg; save or also poisoned until end of my next turn", descriptionFull : "A ray of sickening greenish energy lashes out toward a creature within range. Make a ranged spell attack against the target. On a hit, the target takes 2d8 poison damage and must make a Constitution saving throw. On a failed save, it is also poisoned until the end of your next turn." + AtHigherLevels + "When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d8 for each slot level above 1st." }; SpellsList["searing smite"] = { name : "Searing Smite", classes : ["paladin"], source : [["P", 274]], level : 1, school : "Evoc", time : "1 bns", range : "Self", components : "V", duration : "Conc, 1 min", save : "Con", description : "Next melee weapon hit +1d6+1d6/SL Fire dmg and target ignites: start of turn save to end or 1d6 dmg", descriptionShorter : "Next melee wea hit +1d6+1d6/SL Fire dmg \u0026 ignites: start of turn save to end or 1d6 dmg", descriptionFull : "The next time you hit a creature with a melee weapon attack during the spell's duration, your weapon flares with white-hot intensity, and the attack deals an extra 1d6 fire damage to the target and causes the target to ignite in flames. At the start of each of its turns until the spell ends, the target must make a Constitution saving throw. On a failed save, it takes 1d6 fire damage. On a successful save, the spell ends. If the target or a creature within 5 feet of it uses an action to put out the flames, or if some other effect douses the flames (such as the target being submerged in water), the spell ends." + AtHigherLevels + "When you cast this spell using a spell slot of 2nd level or higher, the initial extra damage dealt by the attack increases by 1d6 for each slot above the 1st.", dynamicDamageBonus : { extraDmgGroupsSameType : /(end or )((?:\+?\d+d?\d*)+)/i } }; SpellsList["staggering smite"] = { name : "Staggering Smite", classes : ["paladin"], source : [["P", 278]], level : 4, school : "Evoc", time : "1 bns", range : "Self", components : "V", duration : "Conc, 1 min", save : "Wis", description : "Next melee weapon hit +4d6 Psychic dmg and save or dis. on atks/chks, no rea, until end next turn", descriptionFull : "The next time you hit a creature with a melee weapon attack during this spell's duration, your weapon pierces both body and mind, and the attack deals an extra 4d6 psychic damage to the target. The target must make a Wisdom saving throw. On a failed save, it has disadvantage on attack rolls and ability checks, and can't take reactions, until the end of its next turn." }; SpellsList["swift quiver"] = { name : "Swift Quiver", classes : ["ranger"], source : [["P", 279]], level : 5, school : "Trans", time : "1 bns", range : "Touch", components : "V,S,M", compMaterial : "A quiver containing at least one piece of ammunition", duration : "Conc, 1 min", description : "Quiver gives nonmagical ammo; bns a to make 2 atks with weapon that uses ammo from that quiver", descriptionFull : "You transmute your quiver so it produces an endless supply of nonmagical ammunition, which seems to leap into your hand when you reach for it." + "\n " + "On each of your turns until the spell ends, you can use a bonus action to make two attacks with a weapon that uses ammunition from the quiver. Each time you make such a ranged attack, your quiver magically replaces the piece of ammunition you used with a similar piece of nonmagical ammunition. Any pieces of ammunition created by this spell disintegrate when the spell ends. If the quiver leaves your possession, the spell ends." }; SpellsList["telepathy"] = { name : "Telepathy", classes : ["wizard"], source : [["P", 281]], level : 8, school : "Evoc", time : "1 a", range : "Unlimited", components : "V,S,M", compMaterial : "A pair of linked silver rings", duration : "24 h", description : "1 willing crea Int>0 and I telepathic link; share words, sensory information if on same plane", descriptionFull : "You create a telepathic link between yourself and a willing creature with which you are familiar. The creature can be anywhere on the same plane of existence as you. The spell ends if you or the target are no longer on the same plane." + "\n " + "Until the spell ends, you and the target can instantaneously share words, images, sounds, and other sensory messages with one another through the link, and the target recognizes you as the creature it is communicating with. The spell enables a creature with an Intelligence score of at least 1 to understand the meaning of your words and take in the scope of any sensory messages you send to it." }; SpellsList["thorn whip"] = { name : "Thorn Whip", classes : ["artificer", "druid"], source : [["P", 282]], level : 0, school : "Trans", time : "1 a", range : "30 ft", components : "V,S,M", compMaterial : "The stem of a plant with thorns", duration : "Instantaneous", description : "Melee spell atk for 1d6 Piercing dmg and pull crea up to 10 ft towards me; +1d6 at CL 5, 11, and 17", descriptionCantripDie : "Melee spell attack for `CD`d6 Piercing dmg and pull crea up to 10 ft towards me", descriptionFull : "You create a long, vine-like whip covered in thorns that lashes out at your command toward a creature in range. Make a melee spell attack against the target. If the attack hits, the creature takes 1d6 piercing damage, and if the creature is Large or smaller, you pull the creature up to 10 feet closer to you." + "\n " + "This spell's damage increases by 1d6 when you reach 5th level (2d6), 11th level (3d6), and 17th level (4d6)." }; SpellsList["thunderous smite"] = { name : "Thunderous Smite", classes : ["paladin"], source : [["P", 282]], level : 1, school : "Evoc", time : "1 bns", range : "Self", components : "V", duration : "Conc, 1 min", save : "Str", description : "Next melee weapon hit +2d6 Thunder dmg and save or 10 ft push and prone; audible in 300 ft", descriptionFull : "The first time you hit with a melee weapon attack during this spell's duration, your weapon rings with thunder that is audible within 300 feet of you, and the attack deals an extra 2d6 thunder damage to the target. Additionally, if the target is a creature, it must succeed on a Strength saving throw or be pushed 10 feet away from you and knocked prone." }; SpellsList["tsunami"] = { name : "Tsunami", classes : ["druid"], source : [["P", 284]], level : 8, school : "Conj", time : "1 min", range : "Sight", components : "V,S", duration : "Conc, 6 rnds", save : "Str", description : "300\xD750\xD7300ft (l\xD7w\xD7h) wall of water moves away at 50 ft/rnd; 6d10 Bludg. dmg; save halves; see B", descriptionShorter : "300\xD750\xD7300ft (l\xD7w\xD7h) wave moves away at 50 ft/rnd; 6d10 Bludg. dmg; save half; see B", descriptionMetric : "90\xD715\xD790m (l\xD7w\xD7h) wall of water moves away at 15 m/rnd; 6d10 Bludg. dmg; save halves; see B", descriptionShorterMetric : "90\xD715\xD790m (l\xD7w\xD7h) wave moves away at 15 m/rnd; 6d10 Bludg. dmg; save half; see B", descriptionFull : "A wall of water springs into existence at a point you choose within range. You can make the wall up to 300 feet long, 300 feet high, and 50 feet thick. The wall lasts for the duration." + "\n " + "When the wall appears, each creature within its area must make a Strength saving throw. On a failed save, a creature takes 6d10 bludgeoning damage, or half as much damage on a successful save." + "\n " + "At the start of each of your turns after the wall appears, the wall, along with any creatures in it, moves 50 feet away from you. Any Huge or smaller creature inside the wall or whose space the wall enters when it moves must succeed on a Strength saving throw or take 5d10 bludgeoning damage. A creature can take this damage only once per round. At the end of the turn, the wall's height is reduced by 50 feet, and the damage creatures take from the spell on subsequent rounds is reduced by 1d10. When the wall reaches 0 feet in height, the spell ends." + "\n " + "A creature caught in the wall can move by swimming. Because of the force of the wave, though, the creature must make a successful Strength (Athletics) check against your spell save DC in order to move at all. If it fails the check, it can't move. A creature that moves out of the area falls to the ground." }; SpellsList["witch bolt"] = { name : "Witch Bolt", classes : ["sorcerer", "warlock", "wizard"], source : [["P", 289]], level : 1, school : "Evoc", time : "1 a", range : "30 ft", components : "V,S,M", compMaterial : "A twig from a tree that has been struck by lightning", duration : "Conc, 1 min", description : "Rngd spell atk 1d12+1d12/SL Lightn. dmg; 1 a 1d12 Lightn. dmg; ends if out of range or I do other a", descriptionShorter : "Rngd atk 1d12+1d12/SL Lightn. dmg; 1 a 1d12 Lightn. dmg; end: out of range/do other a", descriptionFull : "A beam of crackling, blue energy lances out toward a creature within range, forming a sustained arc of lightning between you and the target. Make a ranged spell attack against that creature. On a hit, the target takes 1d12 lightning damage, and on each of your turns for the duration, you can use your action to deal 1d12 lightning damage to the target automatically. The spell ends if you use your action to do anything else. The spell also ends if the target is ever outside the spell's range or if it has total cover from you." + AtHigherLevels + "When you cast this spell using a spell slot of 2nd level or higher, the initial damage increases by 1d12 for each slot level above 1st.", dynamicDamageBonus : { multipleDmgMoments : false, extraDmgGroupsSameType : /(1 a )(.*?)( Lightn. dmg)/i } }; SpellsList["wrathful smite"] = { name : "Wrathful Smite", classes : ["paladin"], source : [["P", 289]], level : 1, school : "Evoc", time : "1 bns", range : "Self", components : "V", duration : "Conc, 1 min", save : "Wis", description : "Next melee weapon hit +1d6 Psychic dmg and save or frightened; it can take 1 a for extra save", descriptionFull : "The next time you hit with a melee weapon attack during this spell's duration, your attack deals an extra 1d6 psychic damage. Additionally, if the target is a creature, it must make a Wisdom saving throw or be frightened of you until the spell ends. As an action, the creature can make a Wisdom check against your spell save DC to steel its resolve and end this spell." }; // pub_20140819_HotDQ+20141104_RoT.js // This file adds the background features and magic items from the Hoard of the Dragon Queen and Rise of Tiamat adventure books to MPMB's Character Record Sheet // Define the source SourceList.HotDQ={ name : "Hoard of the Dragon Queen [background features, items]", abbreviation : "HotDQ", group : "Adventure Books", campaignSetting : "Forgotten Realms", url : "https://wpn.wizards.com/en/products/tyranny-of-dragons", date : "2014/08/19" }; SourceList.RoT = { name : "Rise of Tiamat [items]", abbreviation : "RoT", group : "Adventure Books", campaignSetting : "Forgotten Realms", url : "https://wpn.wizards.com/en/products/tyranny-of-dragons", date : "2014/11/04" }; // Background features BackgroundFeatureList["cult of the dragon infiltrator"] = { description : "I have infiltrated the ranks of the Cult of the Dragon. Having spied on the organization for quite some time, I am familiar with its inner workings and customs. I have a second identity as an initiate of the cult, enough of a facade to blend in as a simple grunt or servant.", source : [["HotDQ", 87], ["ALbackground", 0]] }; BackgroundFeatureList["dragon scholar"] = { description : "I have studied dragons and their lore for many years. I can automatically identify locations built or used by dragons, and I can identify dragon eggs and scales by sight. If I fail an Intelligence check to recall lore relating to dragons, I know someone or some book that I can consult for the answer unless the DM rules that the lore is unknown.", source : [["HotDQ", 87], ["ALbackground", 0]] }; // Magic Items // The magic cauldron on page 79 is omitted as its only magic is that it functions as the material component for the Augury spell. Not something an adventurer is likely to use, with it being 50 lb. MagicItemsList["dragongleam"] = { name : "Dragongleam", source : [["HotDQ", 69]], type : "weapon (spear)", rarity : "rare", magicItemTable : "F", description : "This rusty spear is engraved with draconic runes on its crossguard which read \"Tiamat's Eyes Shine\". The spear has 10 charges. As an action while holding it, I can say this command and expend 1 charge to cast Daylight. The spear loses its magic once all charges are expended.", descriptionFull : "This rusty spear is engraved with draconic runes on its crossguard which read \"Tiamat's Eyes Shine\". The spear has 10 charges. While holding it, you can say the command and expend 1 charge as an action to cast the Daylight spell. The spear loses this property if it has no charges left.", weight : 3, usages : 10, recovery : "Never", spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "1 charge", spells : ["daylight"], selection : ["daylight"], firstCol : 1 }], spellChanges : { "daylight" : { component : "V,M\u0192" } }, weaponOptions : [{ baseWeapon : "spear", regExpSearch : /dragongleam/i, name : "Dragongleam", source : [["HotDQ", 69]], selectNow : true }] } MagicItemsList["tankard of plenty"] = { name : "Tankard of Plenty", source : [["HotDQ", 74]], type : "wondrous item", rarity : "uncommon", magicItemTable : "A", description : 'This golden stein is decorated with dancing dwarves and grain patterns. Speaking the command word "Illefarn" while grasping the handle fills the tankard with three pints of rich dwarven ale. This power can be used up to three times per day.', descriptionFull : 'This golden stein is decorated with dancing dwarves and grain patterns. Speaking the command word ("Illefarn") while grasping the handle fills the tankard with three pints of rich dwarven ale. This power can be used up to three times per day.', usages : 3, recovery : "Day" } var HotDQ_tempDragonMaskNoteTxt = [ desc([ toUni("Damage Absorption") + ". You have resistance against DTYPE damage. If you already have resistance to DTYPE damage from another source, you instead have immunity to DTYPE damage. If you already have immunity to DTYPE damage from another source, whenever you are subjected to DTYPE damage, you take none of that damage and regain a number of hit points equal to half the damage dealt of that type.", toUni("Draconic Majesty") + ". While you are wearing no armor, you can add your Charisma bonus to your Armor Class.", toUni("Dragon Breath") + ". If you have a breath weapon that requires rest to recharge, it gains a recharge of 6.", toUni("Dragon Sight") + ". You gain darkvision out to 60 feet, or to an additional 60 feet if you already have that sense. Once per day, you can gain blindsight out to 30 feet for 5 minutes.", toUni("Dragon Tongue") + ". You can speak and understand Draconic. You also have advantage on any Charisma check you make against DCOLOUR dragons.", toUni("Legendary Resistance (1/Day)") + ". If you fail a saving throw, you can choose to succeed instead." ]), [ " It reshapes to fit my face and head when I attuned to it. While I'm wearing a dragon mask and attuned to it, it grants me the following benefits.", "\u2022 Damage Absorption. I have resistance against DTYPE damage. If I already have resistance to DTYPE damage from another source, I instead gain immunity to DTYPE damage. If I already have immunity to DTYPE damage from another source, whenever I am subjected to DTYPE damage, I take none of that damage and instead regain a number of hit points equal to half the DTYPE damage dealt.", "\u2022 Draconic Majesty. While I am wearing no armor, I can add my Charisma bonus to my Armor Class.", "\u2022 Dragon Breath. If I have a breath weapon that requires rest to recharge, it gains a recharge of 6.", "\u2022 Dragon Sight. I gain darkvision out to 60 ft, or to an additional 60 ft if I already have that sense. Once per day, I can gain blindsight out to 30 ft for 5 minutes.", "\u2022 Dragon Tongue. I can speak and understand Draconic. I also have advantage on any Charisma check I make against DCOLOUR dragons.", "\u2022 Legendary Resistance. Once per day when I fail a saving throw, I can choose to succeed instead." ].join("\n ") ]; MagicItemsList["dragon mask"] = { name : "Dragon Mask", source : [["HotDQ", 94]], type : "wondrous item", rarity : "legendary", storyItemAL : true, description : "This mask reshapes to fit my head. It grants me the ability to absorb associated damage type, darkvision 60 ft, blindsight 30 ft (1/day), Legendary Resistance (1/day), adv. on Cha checks vs. a dragon type, the ability speak Draconic, and lets me add my Cha mod to AC while not wearing armor, see Notes page.", descriptionFull : "Each dragon mask is a legendary wondrous item that reshapes to fit the face and head of a wearer attuned to it. While you are wearing any dragon mask and attuned to it, you gain the following benefits." + HotDQ_tempDragonMaskNoteTxt[0].replace(/You have resistance against DTYPE damage.*?\n/, "You have resistance against the mask's damage type. If you already have resistance to that damage type from another source, you instead have immunity to that damage type. If you already have immunity to that damage type from another source, whenever you are subjected to damage of that type, you take none of that damage and regain a number of hit points equal to half the damage dealt of that type.\n").replace("DCOLOUR dragons", "dragons that share the mask's color"), attunement : true, languageProfs : ["Draconic"], vision : [["Darkvision", "fixed 60"], ["Darkvision", "+60"]], usages : 1, recovery : "Day", additional : "Legendary Resistance", extraLimitedFeatures : [{ name : "Dragon Mask (Blindsight 30 ft, 5 min)", usages : 1, recovery : "Day" }], extraAC : [{ mod : "Cha", magic : true, text : "I add my Charisma modifier to AC while I'm not wearing armor.", stopeval : function (v) { return v.wearingArmor; } }], calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.dbBreathWeapon || (/^(?=.*breath)(?=.*weapon).*$/i).test(v.theWea.name)) { fields.Description = fields.Description.replace(/(Us(e|able)( only)? )?once per (short|long) rest/i, 'Recharge 6'); }; } ] }, incrementDamageRes : function (dType, dRes) { SetProf( "savetxt", CurrentProfs.resistance[dRes] && CurrentProfs.resistance[dRes].src.length > 1, { immune : [dRes] }, !dType ? "Mask of the Dragon Queen (magic item)" : dType + " Dragon Mask (magic item)" ); }, choices : ["Black", "Blue", "Green", "Red", "White", "Mask of the Dragon Queen"], choicesNotInMenu : true, "black" : { name : "Black Dragon Mask", description : "This mask reshapes to fit my head. It grants me the ability to absorb acid damage, darkvision 60 ft, blindsight 30 ft (1/day), Legendary Resistance (1/day), adv. on Cha checks vs. black dragons, the ability speak Draconic, and lets me add my Cha mod to AC while not wearing armor, and more, see Notes page.", descriptionLong : "This horned mask of glossy ebony has horns and a skull-like mien. The mask reshapes to fit my face and head when I attuned to it. It grants me the ability to absorb acid damage, depending on how resistant I'm to it already. Additionally, it gives me darkvision 60 ft (or +60 ft) and blindsight 30 ft once per day for 5 min, the ability speak Draconic, advantage on Charisma checks against black dragons, lets me add my Charisma modifier to AC while I'm not wearing armor, and water breathing. Once per day when I fail a saving throw, I can use the mask to succeed on it instead. See Notes page.", descriptionFull : "This horned mask of glossy ebony has horns and a skull-like mien. The mask reshapes to fit a wearer attuned to it. While you are wearing the mask and attuned to it, you can access the following properties." + HotDQ_tempDragonMaskNoteTxt[0].replace(/DTYPE/g, "acid").replace("DCOLOUR", "black") + "\n " + toUni("Water Breathing") + ". You can breathe underwater.", dmgres : ["Acid"], changeeval : function () { MagicItemsList["dragon mask"].incrementDamageRes("Black", "acid"); }, toNotesPage : [{ name : "Features", note : "\n This horned mask of glossy ebony has horns and a skull-like mien." + HotDQ_tempDragonMaskNoteTxt[1].replace(/DTYPE/g, "acid").replace("DCOLOUR", "black") + "\n Water Breathing. I can breathe underwater." }] }, /* Although the adventure book only includes the Black Dragon Mask, this code also includes the Blue, Green, Red, and White Dragon Masks. The rules for these are found in the Rise of Tiamat Online Supplement, here: https://media.wizards.com/2014/downloads/dnd/RiseTiamatSupplementv0.2_Printer.pdf */ "blue" : { name : "Blue Dragon Mask", source : [["HotDQ", 0], ["RoTOS", 4]], description : "This mask reshapes to fit my head. It grants me the ability to absorb lightning damage, darkvision 60 ft, blindsight 30 ft (1/day), Legendary Resistance (1/day), adv. Cha checks vs. blue dragons, the ability speak Draconic, and lets me add my Cha mod to AC while not wearing armor, and more, see Notes page.", descriptionLong : "This mask of glossy azure has spikes around its edges and a ridged horn in its center. The mask reshapes to fit my face and head when I attuned to it. It grants me the ability to absorb lightning damage, depending on how resistant I'm to it already. Additionally, it gives me darkvision 60 ft (or +60 ft) and blindsight 30 ft once per day for 5 min, the ability speak Draconic, advantage on Charisma checks against blue dragons, lets me add my Charisma modifier to AC while I'm not wearing armor, and Lingering Shock. Once per day when I fail a saving throw, I can use the mask to succeed on it instead. See Notes page.", descriptionFull : "This mask of glossy azure has spikes around its edges and a ridged horn in its center. The mask reshapes to fit a wearer attuned to it. While you are wearing the mask and attuned to it, you can access the following properties." + HotDQ_tempDragonMaskNoteTxt[0].replace(/DTYPE/g, "lightning").replace("DCOLOUR", "blue") + "\n " + toUni("Lingering Shock") + ". If you deal lightning damage to a creature, it can't take reactions until its next turn.", dmgres : ["Lightning"], changeeval : function () { MagicItemsList["dragon mask"].incrementDamageRes("Blue", "lightning"); }, toNotesPage : [{ name : "Features", note : "\n This mask of glossy azure has spikes around its edges and a ridged horn in its center." + HotDQ_tempDragonMaskNoteTxt[1].replace(/DTYPE/g, "lightning").replace("DCOLOUR", "blue") + "\n Lingering Shock. If I deal lightning damage to a creature, it can't take reactions until its next turn." }] }, "green" : { name : "Green Dragon Mask", source : [["HotDQ", 0], ["RoTOS", 4]], description : "This mask reshapes to fit my head. It grants me the ability to absorb poison damage, darkvision 60 ft, blindsight 30 ft (1/day), Legendary Resistance (1/day), adv. on Cha checks vs. green dragons, the ability speak Draconic, and lets me add my Cha mod to AC while not wearing armor, and more, see Notes page.", descriptionLong : "This mottled green mask is surmounted by a frilled crest and has spikes along its jaw. The mask reshapes to fit my face and head when I attuned to it. It grants me the ability to absorb poison damage, depending on how resistant I'm to it already. Additionally, it gives me darkvision 60 ft (or +60 ft) and blindsight 30 ft once per day for 5 min, the ability speak Draconic, advantage on Charisma checks against green dragons, lets me add my Charisma modifier to AC while I'm not wearing armor, and water breathing. Once per day when I fail a saving throw, I can use the mask to succeed on it instead. See Notes page.", descriptionFull : "This mottled green mask is surmounted by a frilled crest and has leathery spiked plates along its jaw. The mask reshapes to fit a wearer attuned to it. While you are wearing the mask and attuned to it, you can access the following properties." + HotDQ_tempDragonMaskNoteTxt[0].replace(/DTYPE/g, "poison").replace("DCOLOUR", "green") + "\n " + toUni("Water Breathing") + ". You can breathe underwater.", dmgres : ["Poison"], changeeval : function () { MagicItemsList["dragon mask"].incrementDamageRes("Green", "poison"); }, toNotesPage : [{ name : "Features", note : "\n This mottled green mask is surmounted by a frilled crest and has leathery spiked plates along its jaw." + HotDQ_tempDragonMaskNoteTxt[1].replace(/DTYPE/g, "poison").replace("DCOLOUR", "green") + "\n Water Breathing. I can breathe underwater." }] }, "red" : { name : "Red Dragon Mask", source : [["HotDQ", 0], ["RoTOS", 4]], description : "This mask reshapes to fit my head. It grants me the ability to absorb fire damage, darkvision 60 ft, blindsight 30 ft (1/day), Legendary Resistance (1/day), adv. on Cha checks vs. red dragons, the ability speak Draconic, and lets me add my Cha mod to AC while not wearing armor, and more, see Notes page.", descriptionLong : "This mask of glossy crimson has swept-back horns and spiked cheek ridges. The mask reshapes to fit my face and head when I attuned to it. It grants me the ability to absorb fire damage, depending on how resistant I'm to it already. Additionally, it gives me darkvision 60 ft (or +60 ft) and blindsight 30 ft once per day for 5 min, the ability speak Draconic, advantage on Charisma checks against red dragons, lets me add my Charisma modifier to AC while I'm not wearing armor, and Dragon Fire. Once per day when I fail a saving throw, I can use the mask to succeed on it instead. See Notes page.", descriptionFull : "This mask of glossy crimson has swept-back horns and spiked cheek ridges. The mask reshapes to fit a wearer attuned to it. While you are wearing the mask and attuned to it, you can access the following properties." + HotDQ_tempDragonMaskNoteTxt[0].replace(/DTYPE/g, "fire").replace("DCOLOUR", "red") + "\n " + toUni("Dragon Fire") + ". If you deal fire damage to a creature or flammable object, it starts burning. At the start of each of its turns, a creature burning in this way takes 1d6 fire damage. A creature that can reach the burning target can use an action to extinguish the fire.", dmgres : ["Fire"], changeeval : function () { MagicItemsList["dragon mask"].incrementDamageRes("red", "fire"); }, toNotesPage : [{ name : "Features", note : "\n This mask of glossy crimson has swept-back horns and spiked cheek ridges." + HotDQ_tempDragonMaskNoteTxt[1].replace(/DTYPE/g, "fire").replace("DCOLOUR", "red") + "\n Dragon Fire. If I deal fire damage to a creature or flammable object, it starts burning. At the start of each of its turns, a creature burning in this way takes 1d6 fire damage. A creature that can reach the burning target can use an action to extinguish the fire." }] }, "white" : { name : "White Dragon Mask", source : [["HotDQ", 0], ["RoTOS", 4]], description : "This mask reshapes to fit my head. It grants me the ability to absorb cold damage, darkvision 60 ft, blindsight 30 ft (1/day), Legendary Resistance (1/day), adv. on Cha checks vs. white dragons, the ability speak Draconic, and lets me add my Cha mod to AC while not wearing armor, and more, see Notes page.", descriptionLong : "This gleaming mask is white with highlights of pale blue and is topped by a spined crest. The mask reshapes to fit my face and head when I attuned to it. It grants me the ability to absorb cold damage, depending on how resistant I'm to it already. Additionally, it gives me darkvision 60 ft (or +60 ft) and blindsight 30 ft once per day for 5 min, the ability speak Draconic, advantage on Charisma checks against white dragons, lets me add my Charisma modifier to AC while I'm not wearing armor, and Winter's Fury. Once per day when I fail a saving throw, I can use the mask to succeed on it instead. See Notes page.", descriptionFull : "This gleaming mask is white with highlights of pale blue and is topped by a spined crest. The mask reshapes to fit a wearer attuned to it. While you are wearing the mask and attuned to it, you can access the following properties." + HotDQ_tempDragonMaskNoteTxt[0].replace(/DTYPE/g, "cold").replace("DCOLOUR", "white") + "\n " + toUni("Winter's Fury") + ". While your current hit points are equal to or less than half your hit point maximum, you deal an extra 1d8 cold damage with your melee attacks.", dmgres : ["Cold"], changeeval : function () { MagicItemsList["dragon mask"].incrementDamageRes("white", "cold"); }, toNotesPage : [{ name : "Features", note : "\n This gleaming mask is white with highlights of pale blue and is topped by a spined crest." + HotDQ_tempDragonMaskNoteTxt[1].replace(/DTYPE/g, "cold").replace("DCOLOUR", "white") + "\n Winter's Fury. While my current hit points are equal to or less than half my hit point maximum, I deal an extra 1d8 cold damage with my melee attacks." }] }, "mask of the dragon queen" : { name : "Mask of the Dragon Queen", source : [["RoT", 94]], description : "This mask reshapes to fit my head. It allows to absorb acid, cold, fire, lightning, and poison damage, darkvision 60 ft, blindsight 30 ft (1/day), Legendary Resistance (5/day), adv. on Cha checks vs. dragons, the ability speak Draconic, and lets me add my Cha mod to AC while not wearing armor, and more, see Notes page.", descriptionLong : "This mask gives me a draconic visage and covers my face, neck, and shoulders. The mask reshapes to fit my face and head when I attuned to it. It grants me the ability to absorb acid, cold, fire, lightning, and poison damage, depending on how resistant I'm already. Additionally, it gives me darkvision 60 ft (or +60 ft) and blindsight 30 ft once per day for 5 min, the ability speak Draconic, advantage on Charisma checks against dragons, lets me add my Charisma modifier to AC while not wearing armor, and more. 5 times per day when I fail a saving throw, I can use the mask to succeed on it instead. See Notes page.", descriptionFull : "When two or more of the dragon masks are assembled they magically transform into the Mask of the Dragon Queen. Each mask shrinks to become the modeled head of a chromatic dragon, appearing to roar its devotion to Tiamat where all the masks brought together are arranged crown-like on the wearer's head. Below the five masks, a new mask shapes itself, granting the wearer a draconic visage that covers the face, neck, and shoulders. The mask reshapes to fit a wearer attuned to it. While you are wearing the mask and attuned to it, you can access the following properties." + HotDQ_tempDragonMaskNoteTxt[0].replace(/You have resistance against DTYPE damage.*?\n/, "You have resistance against acid, cold, fire, lightning, and poison damage. If you already have resistance to a damage type from another source, you instead have immunity to that damage type. If you already have immunity to a damage type from another source, whenever you are subjected to that damage type, you take none of that damage and regain a number of hit points equal to half the damage dealt of that type.\n").replace("DCOLOUR ", "").replace(toUni("(1/Day)"), toUni("(5/Day)")) + "\n\n It can have the properties of any one of the colored masks, but only can have one active at a time. These are the following:\n " + toUni("Water Breathing (black and green)") + ". You can breathe underwater.\n " + toUni("Lingering Shock (blue)") + ". If you deal lightning damage to a creature, it can't take reactions until its next turn.\n " + toUni("Dragon Fire (red)") + ". If you deal fire damage to a creature or flammable object, it starts burning. At the start of each of its turns, a creature burning in this way takes 1d6 fire damage. A creature that can reach the burning target can use an action to extinguish the fire.\n " + toUni("Winter's Fury (white)") + ". While your current hit points are equal to or less than half your hit point maximum, you deal an extra 1d8 cold damage with your melee attacks.", dmgres : ["Acid", "Cold", "Fire", "Lightning", "Poison"], changeeval : function () { MagicItemsList["dragon mask"].incrementDamageRes("", "acid"); MagicItemsList["dragon mask"].incrementDamageRes("", "cold"); MagicItemsList["dragon mask"].incrementDamageRes("", "fire"); MagicItemsList["dragon mask"].incrementDamageRes("", "lightning"); MagicItemsList["dragon mask"].incrementDamageRes("", "poison"); }, toNotesPage : [{ name : "Features", note : "\n When two or more of the dragon masks are assembled they magically transform into the Mask of the Dragon Queen. Each mask shrinks to become the modeled head of a chromatic dragon, appearing to roar its devotion to Tiamat where all the masks brought together are arranged crown-like on the wearer's head. Below the five masks, a new mask shapes itself, granting the wearer a draconic visage that covers the face, neck, and shoulders." + HotDQ_tempDragonMaskNoteTxt[1].replace(/Damage Absorption.*?\n/, "Damage Absorption. I have resistance to acid, cold, fire, lightning, and poison damage. If I already have resistance to a damage type from another source, I instead have immunity to that damage type. If I already have immunity to a damage type from another source, whenever I am subjected to that damage type, I take none of that damage and regain a number of hit points equal to half the damage dealt of that type.\n").replace("DCOLOUR ", "").replace("Once per day when", "Five times per day when") + "\n \u2022 Special Properties. I can access the properties of any one of the colored masks, but only can have one active at a time. These are the following:"+ "\n \u25E6 Water Breathing (black and green). I can breathe underwater."+ "\n \u25E6 Lingering Shock (blue). If I deal lightning damage to a creature, it can't take reactions until its next turn."+ "\n \u25E6 Dragon Fire (red). If I deal fire damage to a creature or flammable object, it starts burning. At the start of each of its turns, a creature burning in this way takes 1d6 fire damage. A creature that can reach the burning target can use an action to extinguish the fire."+ "\n \u25E6 Winter's Fury (white). While my current hit points are equal to or less than half my hit point maximum, I deal an extra 1d8 cold damage with my melee attacks." }], usages : 5, recovery : "Day", additional : "Legendary Resistance" } } MagicItemsList["hazirawn"] = { name : "Hazirawn", source : [["HotDQ", 94]], type : "weapon (greatsword)", rarity : "legendary", storyItemAL : true, description : "This sentient, neutral evil, greatsword functions depend on whether you are attuned to it or not.", descriptionFull : "A sentient (neutral evil) greatsword, Hazirawn is capable of speech in Common and Netherese. Even if you aren't attuned to the sword, you gain a +1 bonus on attack and damage rolls made with this weapon and you deal an extra 1d6 necrotic damage when you hit with the weapon.\n " + toUni("Increased Potency") + ". While you are attuned to this weapon, its bonus on attack and damage rolls increases to +2, and a hit deals an extra 2d6 necrotic damage (instead of 1d6).\n " + toUni("Spells") + ". Hazirawn has 4 charges to cast spells. As long as the sword is attuned to you and you are holding it in your hand, you can cast Detect Magic (1 charge), Detect Evil and Good (1 charge), or Detect Thoughts (2 charges). Each night at midnight, Hazirawn regains 1d4 expended charges.\n " + toUni("Wounding") + ". While you are attuned to the weapon, any creature that you hit with Hazirawn can't regain hit points for 1 minute. The target can make a DC 15 Constitution saving throw at the end of each of its turns, ending this effect early on a success.", weight : 6, choices : ["not attuned", "attuned"], "not attuned" : { name : "Hazirawn\u200A", description : "A sentient (neutral evil) greatsword, Hazirawn is capable of speech in Common and Netherese. While I'm not attuned to the sword, I gain a +1 bonus on attack and damage rolls made with it. It also deals an extra 1d6 necrotic damage on attacks made with the sword.", weaponOptions : [{ baseWeapon : "greatsword", regExpSearch : /hazirawn/i, name : "Hazirawn", source : [["HotDQ", 94]], description : "Heavy, two-handed; +1d6 necrotic damage", modifiers : [1, 1], selectNow : true }] }, "attuned" : { name : "Hazirawn\u200A\u200A", attunement : true, description : "This sentient, neutral evil, greatsword adds +2 to damage and to hit rolls, deals +2d6 necrotic damage, and those hit with it can't regain HP for 1 min, but can make a DC 15 Con save at the end of each turn to stop this effect. It has 4 charges to cast spells, regaining 1d4 at midnight. It speaks Common and Netherese.", extraLimitedFeatures : [{ name : "Hazirawn (regains 1d4)", usages : 4, recovery : "Midnight" }], weaponOptions : [{ baseWeapon : "greatsword", regExpSearch : /hazirawn/i, name : "Hazirawn", source : [["HotDQ", 94]], description : "Heavy, two-handed; +2d6 necrotic damage; Wounding (can't regain HP for 1 min, DC 15 Con save to stop)", modifiers : [2, 2], selectNow : true }], spellcastingBonus : [{ name : "1 charge", spells : ["detect evil and good", "detect magic"], selection : ["detect evil and good", "detect magic"], firstCol : 1, times : 2 }, { name : "2 charges", spells : ["detect thoughts"], selection : ["detect thoughts"], firstCol : 2 }], fixedDC : 15, // assumed from the fact that its Wounding property has DC 15 spellFirstColTitle : "Ch" } } MagicItemsList["insignia of claws"] = { name : "Insignia of Claws", source : [["HotDQ", 94]], type : "wondrous item", rarity : "uncommon", magicItemTable : "F", description : "The jewels in the insignia flare with purple light when I enter combat, empowering my fists. While wearing the insignia, I gain a +1 bonus to the attack rolls and the damage rolls of my unarmed strikes and natural weapons. Such attacks are considered to be magical.", descriptionFull : "The jewels in the insignia of the Cult of the Dragon flare with purple light when you enter combat, empowering your natural fists or natural weapons.\n While wearing the insignia you gain a +1 bonus to the attack rolls and the damage rolls you make with unarmed strikes and natural weapons. Such attacks are considered to be magical.", calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == "unarmed strike" && !(/counts as( a)? magical/i).test(fields.Description)) { fields.Description += (fields.Description ? '; ' : '') + 'Counts as magical'; }; }, "My unarmed strikes gain a +1 bonus to their attack and damage rolls, and count as magical." ], atkCalc : [ function (fields, v, output) { if (v.baseWeaponName == "unarmed strike") { output.magic += 1; } }, '' ] } } MagicItemsList["wand of winter"] = { name : "Wand of Winter", source : [["HotDQ", 94]], type : "wand", rarity : "rare", attunement : true, magicItemTable : "G", description : "This wand looks and feels like an icicle and has 7 charges, regaining 1d6+1 expended charges at dawn. If I use its last charge, roll a d20. On a 20, it melts away. I can use its charges to cast spells with DC 15/+5 to hit: Ray of Frost (0 charges: 1d8, 1 charge: 2d8), Sleet Storm (3 charges), or Ice Storm (4 charges).", descriptionFull : "This wand looks and feels like an icicle. You must be attuned to the wand to use it.\n The wand has 7 charges, which are used to fuel the spells within it. With the wand in hand, you can use your action to cast one of the following spells from the wand, even if you are incapable of casting spells: Ray of Frost (no charges, or 1 charge to cast at 5th level; +5 to hit with ranged spell attack), Sleet Storm (3 charges; spell save DC 15), or Ice Storm (4 charges; spell save DC 15). No components are required. The wand regains 1d6+1 expended charges each day at dawn. If you expend the wand's last charge, roll a d20. On a 20, the wand melts away, forever destroyed.", weight : 1, usages : 7, recovery : "dawn", additional : "regains 1d6+1", fixedDC : 15, fixedSpAttack : 5, spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "1 charge", spells : ["ray of frost"], selection : ["ray of frost"], firstCol : 1 }, { name : "0 charges (at will)", spells : ["ray of frost"], selection : ["ray of frost"], firstCol : "atwill" }, { name : "3 charges", spells : ["sleet storm"], selection : ["sleet storm"], firstCol : 3 }, { name : "4 charges", spells : ["ice storm"], selection : ["ice storm"], firstCol : 4 }], calcChanges : { spellAdd : [ function (spellKey, spellObj, spName, isDuplicate) { if (spellKey == "ray of frost" && spName == "wand of winter") { if (isDuplicate) { spellObj.firstCol = "1"; spellObj.description = "Spell attack for 2d8 Cold dmg and -10 ft speed until start of my next turn"; } else { spellObj.description = "Spell attack for 1d8 Cold dmg and -10 ft speed until start of my next turn"; } return true; }; }, "" ] } } MagicItemsList["dragontooth dagger"] = { name : "Dragontooth Dagger", source : [["RoT", 94]], type : "weapon (dagger)", rarity : "rare", magicItemTable : "H", description : "This dagger is fashioned from the tooth of a dragon. Its handle is its leather wrapped root and there is no crossguard. It adds a +1 bonus to attack and damage rolls made with it and deals +1d6 acid damage on a hit. Against the enemies of the Cult of the Dragon this increases to a +2 bonus and +2d6 acid damage.", descriptionFull : "A dagger fashioned from the tooth of a dragon. While the blade is obviously a fang or predator's tooth, the handle is leather wrapped around the root of the tooth, and there is no crossguard.\n You gain a +1 bonus to attack and damage rolls made with this weapon. On a hit with this weapon, the target takes an extra 1d6 acid damage.\n " + toUni("Draconic Potency") + ". Against enemies of the Cult of the Dragon, the dagger's bonus to attack and damage rolls increases to 2, and the extra acid damage increases to 2d6.", weight : 1, weaponOptions : [{ baseWeapon : "dagger", regExpSearch : /^(?=.*dragontooth)(?=.*dagger).*$/i, name : "Dragontooth Dagger", source : [["RoT", 94]], description : "Finesse, light, thrown; +1d6 acid damage; Vs. Cult of the Dragon enemies: +2 magic \u0026 +2d6 acid damage", modifiers : [1, 1], selectNow : true }] } // Beast // Sled dog is just a wolf under a different name, it has been added to the SRD code as a `nameAlt` // pub_20140930_MM.js // This file adds all the player-material from the Monster Manual to MPMB's Character Record Sheet // Define the source SourceList.M={ name : "Monster Manual", abbreviation : "MM", group : "Core Sources", url : "https://dnd.wizards.com/products/monster-manual", date : "2014/09/30" }; // Dinosaurs not in the SRD CreatureList["allosaurus"] = { name : "Allosaurus", source : [["M", 79]], size : 2, //Large type : "Beast", alignment : "Unaligned", ac : 13, hp : 51, hd : [6, 10], //[#, die] speed : "60 ft", scores : [19, 13, 17, 2, 12, 5], //[Str, Dex, Con, Int, Wis, Cha] skills : { "perception" : 5 }, passivePerception : 15, challengeRating : "2", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Claw", ability : 1, damage : [1, 8, "slashing"], //[#, die, type] "" for die is allowed range : "Melee (5 ft)", description : "If used after moving 30 ft straight in the same round, see Pounce trait" }, { name : "Bite", ability : 1, damage : [2, 10, "piercing"], //[#, die, type] "" for die is allowed range : "Melee (5 ft)", description : "Can be used in combination with claw while pouncing (see Pounce trait)" }], traits : [{ name : "Pounce", description : "If the allosaurus moves at least 30 ft straight toward a creature and then hits it with a claw attack on the same turn, that target must succeed on a DC 13 Strength saving throw or be knocked prone. If the target is prone, the allosaurus can make one bite attack against it as a bonus action." }] }; CreatureList["ankylosaurus"] = { name : "Ankylosaurus", source : [["M", 79]], size : 1, //Huge type : "Beast", alignment : "Unaligned", ac : 15, hp : 68, hd : [8, 12], //[#, die] speed : "30 ft", scores : [19, 11, 15, 2, 12, 5], //[Str, Dex, Con, Int, Wis, Cha] passivePerception : 11, challengeRating : "3", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Tail", ability : 1, damage : [4, 6, "bludgeoning"], //[#, die, type] "" for die is allowed range : "Melee (10 ft)", description : "Target must succeed on a DC 14 Strength saving throw or be knocked prone", modifiers : [1, ""] }] }; CreatureList["pteranodon"] = { name : "Pteranodon", source : [["M", 79]], size : 3, //Medium type : "Beast", alignment : "Unaligned", ac : 13, hp : 13, hd : [3, 8], //[#, die] speed : "10 ft, fly 60 ft", scores : [12, 15, 10, 2, 9, 5], //[Str, Dex, Con, Int, Wis, Cha] skills : { "perception" : 1 }, passivePerception : 11, challengeRating : "1/4", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Bite", ability : 1, damage : [1, 6, "piercing"], //[#, die, type] "" for die is allowed range : "Melee (5 ft)", description : "" }], traits : [{ name : "Flyby", description : "The pteranodon doesn't provoke opportunity attacks when it flies out of an enemy's reach." }] }; // Special familiars not in the SRD CreatureList["faerie dragon"] = { // With contributions by Patrick O. name : "Faerie Dragon", nameAlt : ["Dragon, Faerie"], source : [["M", 133]], size : 5, //Tiny type : "Dragon", alignment : "Chaotic Good", ac : 15, hp : 14, hd : [4, 4], speed : "10 ft, fly 60 ft", scores : [3, 20, 13, 14, 12, 16], //[Str, Dex, Con, Int, Wis, Cha] skills : { "arcana" : 4, "perception" : 3, "stealth" : 7 }, senses : "Darkvision 60 ft", passivePerception : 13, languages : "Draconic, Sylvan", challengeRating : "1", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Bite", ability : 2, damage : [1, "", "piercing"], range : "Melee (5 ft)", description : "", abilitytodamage : false }, { name : "Euphoria Breath (Recharge 5-6)", ability : 3, damage : ["Wis save", "", "Euphoria"], range : "5 ft", description : "For 1 min, target rolls d6 at turn start: 1-4 move random (no actions), 5-6 save again (no actions/move)", dc : true, abilitytodamage : false, tooltip : "The dragon exhales a puff of euphoria gas at one creature within 5 feet of it. The target must succeed on a DC 11 Wisdom saving throw, or for 1 minute, the target can't take reactions and must roll a d6 at the start of each of its turns to determine its behavior during the turn: 1-4 - the target takes no action or bonus action and uses all its movement to move in a random direction. 5-6 - the target doesn't move, and the only thing it can do on its turn is make a DC 11 Wisdom saving throw, ending the effect on itself on a success." }], traits : [{ name : "Superior Invisibility", description : "As a bonus action, the dragon can magically turn invisible until its concentration ends (as with a spell). Anything it wears or carries is invisible with it." }, { name : "Limited Telepathy", description : "Using telepathy, the dragon can magically communicate with any other faerie dragon within 60 feet of it." }, { name : "Magic Resistance", description : "The dragon has advantage on saves against spells and magical effects." }, { name : "Euphoria Breath (Recharge 5-6)", description : "Exhale a puff of euphoria gas at a creature within 5 ft. It must succeed on a DC 11 Wisdom save, or for 1 minute, it can't take reactions and must roll a d6 at the start of each of its turns:\n 1-4 - No action or bonus action, using all movment to move in a random direction.\n 5-6 - The target does nothing except attempt another save to try end the effect on itself." }], features : [{ name : "Innate Spellcasting", description : "Cast spells using Charisma (save DC 13), requiring no material components. The spells it knows depends on its age (and stack):\n Red: 1/day - Dancing Lights, Mage Hand, Minor Illusion\n Orange (6-10 years): 1/day - Color Spray\n Yellow (11-20 years): 1/day - Mirror Image\n Green (21-30 years): 1/day - Suggestion\n Blue (31-40 years): 1/day - Major Image\n Indigo (41-50 years): 1/day - Hallucinatory Terrain\n Violet (51+ years): 1/day - Polymorph" }] }; CreatureList["crawling claw"] = { name : "Crawling Claw", source : [["M", 44]], size : 5, //Tiny type : "Undead", companion : "familiar_not_al", alignment : "Neutral Evil", ac : 12, hp : 2, hd : [1, 4], //[#, die] speed : "20 ft, climb 20 ft", scores : [13, 14, 11, 5, 10, 4], //[Str, Dex, Con, Int, Wis, Cha] senses : "Blindsight 30 ft (blind beyond this radius)", damage_immunities : "poison", condition_immunities : "charmed, exhaustion, poisoned", passivePerception : 10, languages : "understands Common but can't speak", challengeRating : "0", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Claw", ability : 1, damage : [1, 4, "bludgeoning"], //[#, die, type] "" for die is allowed range : "Melee (5 ft)", description : "Does bludgeoning or slashing damage (claw's choice)" }], traits : [{ name : "Turn Immunity", description : "The claw is immune to effects that turn undead." }] }; CreatureList["peryton"] = { name : "Peryton", source : [["M", 251]], size : 3, //Medium type : "Monstrosity", companion : "steed", alignment : "Chaotic Evil", ac : 13, hp : 33, hd : [6, 8], //[#, die] speed : "20 ft, fly 60 ft", scores : [16, 12, 13, 9, 12, 10], //[Str, Dex, Con, Int, Wis, Cha] skills : { "perception" : 5 }, senses : "Adv. on Wis (Perception) checks using sight/smell", passivePerception : 16, languages : "understands Common and Elvish, but can't speak", challengeRating : "2", proficiencyBonus : 2, attacksAction : 2, attacks : [{ name : "Gore", ability : 1, damage : [1, 8, "piercing"], //[#, die, type] "" for die is allowed range : "Melee (5 ft)", description : "One gore and one talons attack as an Attack action; +2d8 after 30 ft dive straight down" }, { name : "Talons", ability : 1, damage : [2, 4, "piercing"], //[#, die, type] "" for die is allowed range : "Melee (5 ft)", description : "One talons and one gore attack as an Attack action; +2d8 after 30 ft dive straight down" }], actions : [{ name : "Multiattack", description : "As an action on its turn, the peryton can make one Gore and one Talon attack." }], traits : [{ name : "Dive Attack", description : "If the peryton is flying and dives at least 30 ft. straight toward a target and then hits it with a melee weapon attack, the attack deals an extra 9 (2d8) damage to the target." }, { name : "Flyby", description : "The peryton doesn't provoke an opportunity attack when it flies out of an enemy's reach." }, { name : "Keen Sight and Smell", description : "The peryton has advantage on Wisdom (Perception) checks that rely on sight or smell." }] }; // Blights and spores CreatureList["needle blight"] = { name : "Needle Blight", nameAlt : ["Blight, Needle"], source : [["M", 32]], size : 3, //Medium type : "Plant", alignment : "Neutral Evil", ac : 12, hp : 11, hd : [2, 8], //[#, die] speed : "30 ft", scores : [12, 12, 13, 4, 8, 3], //[Str, Dex, Con, Int, Wis, Cha] condition_immunities : "blinded, deafened", senses : "Blindsight 60 ft (blind beyond this radius).", passivePerception : 9, languages : "understands Common but can't speak", challengeRating : "1/4", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Claws", ability : 2, damage : [2, 4, "piercing"], //[#, die, type] "" for die is allowed range : "Melee (5 ft)", description : "" }, { name : "Needles", ability : 2, damage : [2, 6, "piercing"], //[#, die, type] "" for die is allowed range : "30/60 ft", description : "" }] }; CreatureList["twig blight"] = { name : "Twig Blight", nameAlt : ["Blight, Twig"], source : [["M", 32]], size : 4, //Small type : "Plant", alignment : "Neutral Evil", ac : 13, hp : 4, hd : [1, 6], //[#, die] speed : "20 ft", scores : [6, 13, 12, 4, 8, 3], //[Str, Dex, Con, Int, Wis, Cha] damage_vulnerabilities : "fire", condition_immunities : "blinded, deafened", senses : "Blindsight 60 ft (blind beyond this radius).", passivePerception : 9, languages : "understands Common but can't speak", challengeRating : "1/8", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Claws", ability : 2, damage : [1, 4, "piercing"], //[#, die, type] "" for die is allowed range : "Melee (5 ft)", description : "" }], traits : [{ name : "False Appearance", description : "While the blight remains motionless, it is indistinguishable from a dead shrub." }] }; CreatureList["vine blight"] = { name : "Vine Blight", nameAlt : ["Blight, Vine"], source : [["M", 32]], size : 3, //Medium type : "Plant", alignment : "Neutral Evil", ac : 12, hp : 26, hd : [4, 8], //[#, die] speed : "10 ft", scores : [15, 8, 14, 5, 10, 3], //[Str, Dex, Con, Int, Wis, Cha] skills : { "stealth" : 1 }, condition_immunities : "blinded, deafened", senses : "Blindsight 60 ft (blind beyond this radius).", passivePerception : 9, languages : "Common", challengeRating : "1/2", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Constrict", ability : 1, damage : [2, 6, "bludgeoning"], //[#, die, type] "" for die is allowed range : "Melee (10 ft)", description : "Large or smaller target is grappled and restrained (escape DC 12); Can't use constrict again until grapple ends" }], traits : [{ name : "False Appearance", description : "While the blight remains motionless, it is indistinguishable from a tangle of vines." }], actions : [{ name : "Entangling Plants (Recharge 5-6)", description : "As an action, grasping roots and vines sprout in a 15-ft radius centered on the blight, withering away after 1 minute. For the duration, that area is difficult terrain for nonplant creatures. In addition, each creature of the blight's choice in that area when the plants appear must succeed on a DC 12 Strength saving throw or become restrained. A creature can use its action to make a DC 12 Strength check, freeing it self or another entangled creature within reach on a success." }], wildshapeString : [ (typePF ? "##Senses##. " : "") + "Blindsight 60 ft (blind beyond).", "##Immunities##. Blinded, deafened.", "##Entangling Plants (Recharge 5-6)##. As an action, 15-ft radius is difficult terrain for nonplant creatures for 1 min. Chosen creatures in it must make a DC 12 Str save or become restrained. A creature can use its action to free itself or another within reach with a DC 12 Str check.", "##False Appearance##. While motionless, it's indistinguishable from a tangle of vines.", ].join(typePF ? "\n" : " "), }; CreatureList["gas spore"] = { name : "Gas Spore", source : [["M", 138]], size : 2, //Large type : "Plant", alignment : "Unaligned", ac : 5, hp : 1, hd : [1, 10], //[#, die] speed : "fly 10 ft (hover)", scores : [5, 1, 3, 1, 1, 1], //[Str, Dex, Con, Int, Wis, Cha] condition_immunities : "blinded, deafened, frightened", senses : "Blindsight 30 ft (blind beyond this radius).", passivePerception : 5, challengeRating : "1/2", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Touch", ability : 1, damage : [1, "", "poison"], //[#, die, type] "" for die is allowed range : "Melee (5 ft)", description : "DC 10 Con save or infected with Death Burst disease, see traits", modifiers : [1, ""], abilitytodamage : false }], traits : [{ name : "Death Burst", description : "The gas spore explodes when it drops to 0 hit points. Each creature within 20 feet of it must succeed on a DC 15 Constitution saving throw or take 10 (3d6) poison damage and become infected with a disease on a failed save. Creatures immune to the poisoned condition are immune to this disease.\n Spores invade an infected creature's system, killing the creature in a number of hours equal to 1d12+the creature's Constitution score, unless the disease is removed. In half that time, the creature becomes poisoned for the rest of the duration. After the creature dies, it sprouts 2d4 Tiny gas spores that grow to full size in 7 days." }, { name : "Eerie Resemblance", description : "The gas spore resembles a beholder. A creature that can see the gas spore can discern its true nature with a successful DC 15 Intelligence (Nature) check." }], wildshapeString : [ (typePF ? "##Senses##. " : "") + "Blindsight 30 ft (blind beyond).", "##Immunities##. Blinded, deafened, frightened.", "##Eerie Resemblance##. Distinguishable form a beholder only with a DC 15 Nature check. ##Death Burst##. Explodes at 0 HP: all within 20 ft DC 15 Con save or 3d6 poison damage and infected with disease that kills a creature in 1d12+its Con score of hours. After half that, it's poisoned for the remainder. When dies, sprouts 2d4 Tiny gas spores that grow to full size in 7 days.", ].join(typePF ? "\n" : " "), }; // Even though the shield guardian is in the SRD, the description for its control amulet is only found in the Monster Manual MagicItemsList["shield guardian amulet"] = { name : "Shield Guardian Amulet", source : [["M", 271], ["RotF", 149]], type : "wondrous item", rarity : "rare", attunement : true, notLegalAL : true, prerequisite : "Requires attunement by a humanoid", prereqeval : function(v) { return !CurrentRace.known || !RaceList[CurrentRace.known] || !/creature type/i.test(RaceList[CurrentRace.known].trait); }, description : "A shield guardian is magically linked to this amulet. It has AC 10, 10 HP, and immunity to poison and psychic damage. I know the distance and direction of the guardian while I'm wearing the amulet and I'm on the same plane as it. While within 10 ft of it, I can use the amulet to reactivate it with a DC 20 Arcana check.", descriptionFull : "The amulet is a 4-inch-wide disk composed of silver-framed wood, with a rune carved into its face. A detect magic spell reveals a magical aura of enchantment around the amulet."+ "\n Every shield guardian has an amulet magically linked to it. A shield guardian can have only one corresponding amulet, and if that amulet is destroyed, the shield guardian is incapacitated until a replacement amulet is created."+ "\n A shield guardian's amulet is subject to direct attack if it isn't being worn or carried. It has AC 10, 10 hit points, and immunity to poison and psychic damage. Crafting an amulet requires 1 week and costs 1,000 gp in components."+ "\n A shield guardian's solitary focus is to protect the amulet's wearer. The amulet's wearer can command the guardian to attack its enemies or to guard the wielder against attack. If an attack threatens to injure the wearer, the construct can magically absorb the blow into its own body, even at a distance."+ "\n A humanoid that attunes to this amulet knows the distance and direction of the shield guardian, provided the amulet and the guardian are on the same plane of existence. As an action, the amulet's attuned wearer can try to reactivate the shield guardian, doing so with a successful DC 20 Intelligence (Arcana) check. Reactivation can only be attempted while the amulet and guardian are within 10 feet of each other.", creaturesAdd : [["Shield Guardian"]] }; // Player characters as Lycanthropes race - even though they are in the SRD, the rules for applying their abilities to player characters are not (added in v13.1.13) /* Gains: - speed in non-humanoid form - damage immunities - traits - actions that don't involve equipment P.S. multiattack is a weird one, going with the interpretation here: https://rpg.stackexchange.com/questions/70694 */ var MM_lycanthrope = { createDefaultTraits : function(sLycanName, sLycanPlural) { // the traits of a human var obj = { name : "Human " + sLycanName, plural : "Human " + sLycanPlural, languageProfs : ["Common", 1], age : " reach adulthood in their late teens and live less than 100 years", height : " range from barely 5 to well over 6 feet tall (4'8\" + 2d10\")", weight : " weigh around 165 lb (110 + 2d10 \xD7 2d4 lb)", heightMetric : " range from barely 1,5 to well over 1,8 metres tall (145 + 5d10 cm)", weightMetric : " weigh around 75 kg (50 + 5d10 \xD7 4d4 / 10 kg)", scorestxt : "+1 to all ability scores", scores : [1, 1, 1, 1, 1, 1, 1] } return obj; }, createMessage : function(sLycanName, aOtherGains) { var aGained = [ "Its speed in nonhumanoid form.", "Natural attacks in nonhumanoid form (e.g. bite/claw).", "Damage immunity to bludgeoning, piercing, and slashing from nonmagical attacks that aren't silvered.", "Shapechanger trait." ].concat(aOtherGains); return "The lycanthrope races are template races. All features and traits of the base race are retained and all the " + sLycanName + "'s features are added to it."+ "\nIf you choose not to use a previous race as the base race or you selected a " + sLycanName + " at character creation, a human (non-variant) will be used as the base race."+ "\nThe " + sLycanName + "'s features added to the base race are:"+ desc(aGained, "\n \u2022 ")+ "\n\nThe possible alignment change and moon-related limitations of lycanthrope are not mentioned in this race. Discuss with your DM how they want to handle lycanthrope." }, }; RaceList["lycanthrope-werebear"] = { regExpSearch : /were.?bear|^(?=.*lycanthrope)(?=.*bear).*$/i, name : "Werebear", source : [["M", 208]], plural : "Werebears", size : 3, speed : { walk : { spd : 30, enc : 20 } }, trait : "Human Werebear (+1 to all ability scores; min 19 Str)" + desc([ "Shapechanger: As an action, I can polymorph into a Large bear-hybrid, into a Large bear, or back. In those forms, I gain 40 ft walking speed, 30 ft climb speed, +1 AC, and a bite and claw attack. My stats don't otherwise change when transformed, but my equipment doesn't change and I revert back when I die. Humanoids hit by my bite must save or be cursed with werebear lycanthrope.", "Keen Smell: I have adv. on Wis (Perception) checks using smell." ], "\n \u2022 "), features : { lycanthrope_features : { name : "Lycanthrope", source : [["M", 208]], minlevel : 1, toNotesPage : [{ name : "Lycanthrope", note : [ "My Strength score increases to 19 unless it was already higher", "As an action, I can polymorph into a Large bear-hybrid, into a Large bear, or back", "In my bear and hybrid forms, I gain 40 ft walking speed, 30 ft climb speed, and +1 AC", "In these forms I also gain a bite and claw attack, but can't use bite as part of a multiattack", "My stats don't otherwise change, my equipment doesn't transform and I revert back if I die", "Humanoids hit by my bite must make a Con save or be cursed with werebear lycanthrope", "The DC to avoid this curse is 8 + my Proficiency bonus + my Constitution modifier" ], page3notes : true }, { name : "Multiattack", note : [ "As an action, I can make two attacks, none of which can be with my werebear bite" ], page3notes : true }], action : [ ["action", "Shapechange (bear/hybrid/back)"], ["action", "Multiattack (2 attacks, no bite)"] ], scoresOverride : [19, 0, 0, 0, 0, 0], savetxt : { immune : ["bludgeoning, piercing, and slashing damage unless from magic/silver"] }, weaponOptions : [{ name : "Werebear Bite", regExpSearch : /^(?=.*(werebear|lycanthrope))(?=.*bite).*$/i, source : [["M", 208]], ability : 1, type : "Natural", damage : [2, 10, "piercing"], range : "Melee", description : "Bear and Hybrid form only; Humanoids Con save or cursed", abilitytodamage : true, selectNow : true }, { name : "Werebear Claw", regExpSearch : /^(?=.*(werebear|lycanthrope))(?=.*\bclaws?\b).*$/i, source : [["M", 208]], ability : 1, type : "Natural", damage : [2, 8, "slashing"], range : "Melee", description : "Bear and Hybrid form only", abilitytodamage : true, selectNow : true }], extraAC : [{ name : "+1 in bear/hybrid form", mod : 0, text : "I gain a +1 bonus to AC while I'm in my bear or bear-hybrid form. This bonus is not added by default, it has to be added/removed manually when changing form." }] }, lycanthrope_keen_senses : { name : "Keen Smell", source : [["M", 208]], minlevel : 1, toNotesPage : [{ name : "Keen Smell", note : [ "I have advantage on Wisdom (Perception) checks that rely on smell" ], page3notes : true }], vision : [["Keen Smell", 0]] } }, useFromPreviousRace : { updateName : "prefix", // e.g. "Drow Werebear" message : MM_lycanthrope.createMessage("werebear", [ "Strength increase to 19 unless it was already higher.", "Keen Smell trait." ]), defaultTraits : MM_lycanthrope.createDefaultTraits("Werebear", "Werebears"), gainTraits : ["everything"] } }; RaceList["lycanthrope-wereboar"] = { regExpSearch : /were.?boar|^(?=.*lycanthrope)(?=.*boar).*$/i, name : "Wereboar", source : [["M", 209]], plural : "Wereboars", size : 3, speed : { walk : { spd : 30, enc : 20 } }, trait : "Human Wereboar (+1 to all ability scores; min 17 Str)" + desc([ "Shapechanger: As an action, I can polymorph into a boar-" + (typePF ? "" : "humanoid ") + "hybrid, into a boar, or back. In those forms, I gain 40 ft walking speed, +1 AC, and a tusks attack. My stats don't otherwise change when transformed, but my equipment doesn't change and I revert back when I die. Humanoids hit by my tusks must save or be cursed" + (typePF ? "." : " with lycanthrope."), "Relentless: If I'm reduced to 0 HP by 14 damage or less, I can instead drop to 1 HP.", "Charge: If I move 15 ft straight before a tusks hit, +2d6 damage and Str save or prone." ], "\n \u2022 "), features : { lycanthrope_features : { name : "Lycanthrope", source : [["M", 209]], minlevel : 1, toNotesPage : [{ name : "Lycanthrope", note : [ "My Strength score increases to 17 unless it was already higher", "As an action, I can polymorph into a boar-humanoid hybrid, into a boar, or back", "In my boar and hybrid forms, I gain 40 ft walking speed, a tusks attack, and +1 AC", "I also gain a bite and claw attack; As an action, I can make two claw attacks (multiattack)", "My stats don't otherwise change, my equipment doesn't transform and I revert back if I die", "Humanoids hit by my bite must make a Con save or be cursed with wereboar lycanthrope", "The DC to avoid this curse is 8 + my Proficiency bonus + my Constitution modifier" ], page3notes : true }, { name : "Multiattack", note : [ "As an action, I can make two attacks, only one of which can be with my wereboar tusks" ], page3notes : true, additional : "in humanoid or hybrid form only" }], action : [ ["action", "Shapechange (boar/hybrid/back)"], ["action", "Multiattack (2 attacks, max 1 tusks)"] ], scoresOverride : [17, 0, 0, 0, 0, 0], savetxt : { immune : ["bludgeoning, piercing, and slashing damage unless from magic/silver"] }, weaponOptions : [{ name : "Wereboar Tusks", regExpSearch : /^(?=.*(wereboar|lycanthrope))(?=.*tusks).*$/i, source : [["M", 209]], ability : 1, type : "Natural", damage : [2, 6, "slashing"], range : "Melee", description : "Boar/hybrid form only; Humanoids Con save or cursed; Charge for +2d6 damage", abilitytodamage : true, selectNow : true }], extraAC : [{ name : "+1 in boar/hybrid form", mod : 0, text : "I gain a +1 bonus to AC while I'm in my boar or boar-hybrid form. This bonus is not added by default, it has to be added/removed manually when changing form." }] }, wereboar_relentless : { name : "Relentless", source : [["M", 209]], minlevel : 1, toNotesPage : [{ name : "Relentless", note : [ "If I'm reduced to 0 HP by an affect dealing 14 damage or less, I can instead drop to 1 HP" ], page3notes : true, additional : "in boar or hybrid form only" }], usages : 1, recovery : "short rest" }, wereboar_charge : { name : "Charge", source : [["M", 209]], minlevel : 1, toNotesPage : [{ name : "Charge", note : [ "If, in one turn, I move straight for 15 ft and then hit with my tusks, I deal +2d6 damage", "Those hit like this must make a Str save or be knocked prone (DC 8 + Prof B. + Str mod)" ], page3notes : true, additional : "in boar or hybrid form only" }] } }, useFromPreviousRace : { updateName : "prefix", // e.g. "High Elf Wereboar" message : MM_lycanthrope.createMessage("wereboar", [ "Strength increase to 17 unless it was already higher.", "Relentless and Charge traits." ]), defaultTraits : MM_lycanthrope.createDefaultTraits("Wereboar", "Wereboars"), gainTraits : ["everything"] }, abilitySave : 1 // for charge trait }; RaceList["lycanthrope-wererat"] = { regExpSearch : /were.?rat|^(?=.*lycanthrope)(?=.*rat).*$/i, name : "Wererat", source : [["M", 209]], plural : "Wererats", size : 3, speed : { walk : { spd : 30, enc : 20 } }, trait : "Human Wererat (+1 to all ability scores; min 15 Dex)" + desc([ "Shapechanger: As an action, I can transform into a rat-humanoid hybrid, into a giant rat, or back. In those forms, I gain a bite attack, which can use Strength or Dexterity. In my giant rat form, I also become small and gain Darkvision 60 ft My stats don't otherwise change when transformed, but my equipment doesn't change and I revert back when I die. Humanoids hit by my bite must save or be cursed with wererat lycanthrope.", "Keen Smell: I have adv. on Wis (Perception) checks using smell." ], "\n \u2022 "), features : { lycanthrope_features : { name : "Lycanthrope", source : [["M", 209]], minlevel : 1, toNotesPage : [{ name : "Lycanthrope", note : [ "My Dexterity score increases to 15 unless it was already higher", "As an action, I can transform into a rat-humanoid hybrid, into a giant rat (Small), or back", "In my rat and hybrid forms, I gain a bite attack that can use either Strength or Dexterity", "In my giant rat form, I also become small and gain Darkvision 60 ft", "My stats don't otherwise change, my equipment doesn't transform and I revert back if I die", "Humanoids hit by my bite must make a Con save or be cursed with wererat lycanthrope", "The DC to avoid this curse is 8 + my Proficiency bonus + my Constitution modifier" ], page3notes : true }, { name : "Multiattack", note : [ "As an action, I can make two attacks, only one of which can be with my wererat bite" ], page3notes : true, additional : "in humanoid or hybrid form only" }], action : [ ["action", "Shapechange (giant rat/hybrid/back)"], ["action", "Multiattack (2 attacks, max 1 bite)"] ], scoresOverride : [0, 15, 0, 0, 0, 0], savetxt : { immune : ["bludgeoning, piercing, and slashing damage unless from magic/silver"] }, weaponOptions : [{ name : "Wererat Bite", regExpSearch : /^(?=.*(wererat|lycanthrope))(?=.*bite).*$/i, source : [["M", 209]], ability : 2, type : "Natural", damage : [1, 4, "piercing"], range : "Melee", description : "Rat and Hybrid form only; Humanoids Con save or cursed", abilitytodamage : true, isWereratBite : true, // for calcChanges.atkAdd selectNow : true }], calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.isWereratBite) fields.Mod = v.StrDex; }, 'I can use Strength or Dexterity for my Wererat Bite, whichever is higher.' ] } }, lycanthrope_keen_senses : { name : "Keen Smell", source : [["M", 209]], minlevel : 1, toNotesPage : [{ name : "Keen Smell", note : [ "I have advantage on Wisdom (Perception) checks that rely on smell" ], page3notes : true }], vision : [["Keen Smell", 0]] } }, useFromPreviousRace : { updateName : "prefix", // e.g. "Lizardfolk Wererat" message : MM_lycanthrope.createMessage("wererat", [ "Dexterity increase to 15 unless it was already higher.", "Keen Smell trait." ]), defaultTraits : MM_lycanthrope.createDefaultTraits("Wererat", "Wererats"), gainTraits : ["everything"] } }; RaceList["lycanthrope-weretiger"] = { regExpSearch : /were.?tiger|^(?=.*lycanthrope)(?=.*tiger).*$/i, name : "Weretiger", source : [["M", 210]], plural : "Weretigers", size : 3, speed : { walk : { spd : 30, enc : 20 } }, trait : "Human Weretiger (+1 to all ability scores; min 15 Str)" + desc([ "Shapechanger: As an action, I can polymorph into a tiger-humanoid hybrid, into a Large tiger, or back. In those forms, I gain 40 ft walking speed, a bite attack, and a claw attack. My stats don't otherwise change when transformed, but my equipment doesn't transform and I revert back when I die. Humanoids hit by my bite must save or be cursed with weretiger lycanthrope."+ (typePF ? "\n \u2022 Pounce: " : " ") + "I can pounce in my tiger and hybrid form, see notes.", "Keen Hearing and Smell: I have adv. on Wis (Perception) checks using hearing or smell." ], "\n \u2022 "), features : { lycanthrope_features : { name : "Lycanthrope", source : [["M", 210]], minlevel : 1, toNotesPage : [{ name : "Lycanthrope", note : [ "My Strength score increases to 17 unless it was already higher; I gain 60 ft darkvision", "As an action, I can polymorph into a tiger-humanoid hybrid, into a Large tiger, or back", "In my tiger and hybrid forms, I gain 40 ft walking speed, a bite attack, and a claw attack", "My stats don't otherwise change, my equipment doesn't transform and I revert back if I die", "Humanoids hit by my bite must make a Con save or be cursed with weretiger lycanthrope", "The DC to avoid this curse is 8 + my Proficiency bonus + my Constitution modifier" ], page3notes : true }, { name : "Multiattack", note : [ "As an action, I can make two attacks, none of which can be with my weretiger bite" ], page3notes : true, additional : "in humanoid or hybrid form only" }], action : [ ["action", "Shapechange (tiger/hybrid/back)"], ["action", "Multiattack (2 attacks, no bite)"] ], scoresOverride : [17, 0, 0, 0, 0, 0], savetxt : { immune : ["bludgeoning, piercing, and slashing damage unless from magic/silver"] }, weaponOptions : [{ name : "Weretiger Bite", regExpSearch : /^(?=.*(weretiger|lycanthrope))(?=.*bite).*$/i, source : [["M", 210]], ability : 1, type : "Natural", damage : [1, 10, "piercing"], range : "Melee", description : "Tiger and Hybrid form only; Humanoids Con save or cursed", abilitytodamage : true, selectNow : true }, { name : "Weretiger Claw", regExpSearch : /^(?=.*(weretiger|lycanthrope))(?=.*\bclaws?\b).*$/i, source : [["M", 210]], ability : 1, type : "Natural", damage : [1, 8, "slashing"], range : "Melee", description : "Tiger and Hybrid form only; Can be use to pounce", abilitytodamage : true, selectNow : true }], vision : [["Darkvision", 60]] }, lycanthrope_keen_senses : { name : "Keen Hearing and Smell", source : [["M", 210]], minlevel : 1, toNotesPage : [{ name : "Keen Hearing and Smell", note : [ "I have advantage on Wisdom (Perception) checks that rely on hearing or smell" ], page3notes : true }], vision : [["Keen Hearing and Smell", 0]] }, weretiger_pounce : { name : "Pounce", source : [["M", 210]], minlevel : 1, toNotesPage : [{ name : "Pounce", note : [ "If, in one turn, I move straight for 15 ft and then hit with my claw, I can pounce a target", "The creature must make a Str save or be knocked prone (DC 8 + Prof Bonus + Str mod)", "If I knocked someone prone, I can then make a bite attack against them as a bonus action" ], page3notes : true, additional : "in tiger or hybrid form only" }], action : [["bonus action", "Bite after successful Pounce"]] } }, useFromPreviousRace : { updateName : "prefix", // e.g. "Mountain Dwarf Weretiger" message : MM_lycanthrope.createMessage("weretiger", [ "Strength increase to 17 unless it was already higher.", "Keen Hearing and Smell trait." ]), defaultTraits : MM_lycanthrope.createDefaultTraits("Weretiger", "Weretigers"), gainTraits : ["everything"] }, abilitySave : 1 // for pounce trait }; RaceList["lycanthrope-werewolf"] = { regExpSearch : /were.?wol(f|ve)|^(?=.*lycanthrope)(?=.*wol(f|ve)).*$/i, name : "Werewolf", source : [["M", 211]], plural : "Werewolves", size : 3, speed : { walk : { spd : 30, enc : 20 } }, trait : "Human Werewolf (+1 to all ability scores; min 15 Str)" + desc([ "Shapechanger: As an action, I can polymorph into a wolf-humanoid hybrid, into a wolf, or back. In those forms, I gain 40 ft walking speed, a bite attack, and +1 AC. In my hybrid form, I also gain a claws attack. My stats don't otherwise change when transformed, but my equipment doesn't transform and I revert back when I die. Humanoids hit by my bite must save or be cursed with werewolf lycanthrope.", "Keen Hearing and Smell: I have adv. on Wis (Perception) checks using hearing or smell." ], "\n \u2022 "), features : { lycanthrope_features : { name : "Lycanthrope", source : [["M", 211]], minlevel : 1, toNotesPage : [{ name : "Lycanthrope", note : [ "My Strength score increases to 15 unless it was already higher", "As an action, I can polymorph into a wolf-humanoid hybrid, into a wolf, or back", "In my wolf and hybrid forms, I gain 40 ft walking speed, a bite attack, and +1 AC", "In my hybrid form, I also gain a claws attack", "My stats don't otherwise change, my equipment doesn't transform and I revert back if I die", "Humanoids hit by my bite must make a Con save or be cursed with werewolf lycanthrope", "The DC to avoid this curse is 8 + my Proficiency bonus + my Constitution modifier" ], page3notes : true }, { name : "Multiattack", note : [ "As an action, I can make two attacks, only one of which can be with my werewolf bite" ], page3notes : true, additional : "in humanoid or hybrid form only" }], action : [ ["action", "Shapechange (wolf/hybrid/back)"], ["action", "Multiattack (2 attacks, max 1 bite)"] ], scoresOverride : [15, 0, 0, 0, 0, 0], savetxt : { immune : ["bludgeoning, piercing, and slashing damage unless from magic/silver"] }, weaponOptions : [{ name : "Werewolf Bite", regExpSearch : /^(?=.*(werewolf|lycanthrope))(?=.*bite).*$/i, source : [["M", 211]], ability : 1, type : "Natural", damage : [1, 8, "piercing"], range : "Melee", description : "Wolf and Hybrid form only; Humanoids Con save or cursed", abilitytodamage : true, selectNow : true }, { name : "Wolf-hybrid Claws", regExpSearch : /^(?=.*wolf)(?=.*hybrid)(?=.*\bclaws?\b).*$/i, source : [["M", 211]], ability : 1, type : "Natural", damage : [2, 4, "slashing"], range : "Melee", description : "Hybrid form only", abilitytodamage : true, selectNow : true }], extraAC : [{ name : "+1 in wolf/hybrid form", mod : 0, text : "I gain a +1 bonus to AC while I'm in my wolf or wolf-hybrid form. This bonus is not added by default, it has to be added/removed manually when changing form." }] }, lycanthrope_keen_senses : { name : "Keen Hearing and Smell", source : [["M", 211]], minlevel : 1, toNotesPage : [{ name : "Keen Hearing and Smell", note : [ "I have advantage on Wisdom (Perception) checks that rely on hearing or smell" ], page3notes : true }], vision : [["Keen Hearing and Smell", 0]] } }, useFromPreviousRace : { updateName : "prefix", // e.g. "Rock Gnome Werewolf" message : MM_lycanthrope.createMessage("werewolf", [ "Strength increase to 15 unless it was already higher.", "Keen Hearing and Smell trait." ]), defaultTraits : MM_lycanthrope.createDefaultTraits("Werewolf", "Werewolves"), gainTraits : ["everything"] } }; // pub_20141209_DMG.js // This file adds all the player-material from the Dungeon Master's Guide to MPMB's Character Record Sheet // Define the source SourceList.D={ name : "Dungeon Master's Guide", abbreviation : "DMG", group : "Core Sources", url : "https://dnd.wizards.com/products/dungeon-masters-guide", date : "2014/12/09" }; // Races RaceList["aasimar"] = { regExpSearch : /^(?!.*(fallen|protector|scourge))((?=.*aasimar)|((?=.*planetouched)(?=.*(celestial|angel)))).*$/i, name : "Aasimar", source : [["D", 286]], plural : "Aasimar", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Celestial"], vision : [["Darkvision", 60]], dmgres : ["Necrotic", "Radiant"], age : " reach adulthood in their late teens and live around 160 years", height : " range from barely 5 to well over 6 feet tall (4'8\" + 2d10\")", weight : " weigh around 165 lb (110 + 2d10 \xD7 2d4 lb)", heightMetric : " range from barely 1,5 to well over 1,8 metres tall (145 + 5d10 cm)", weightMetric : " weigh around 75 kg (50 + 5d10 \xD7 4d4 / 10 kg)", scores : [0, 0, 0, 0, 1, 2], trait : "Aasimar (+1 Wisdom, +2 Charisma)\n\nCelestial Legacy:\n I know the Light cantrip.\n Once I reach 3rd level, I can cast the Lesser Restoration spell once per long rest.\n Once I reach 5th level, I can cast the Daylight spell once per long rest.\n Charisma is my spellcasting ability for these spells.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Celestial Legacy (level 1)", spells : ["light"], selection : ["light"], firstCol : 'atwill' }], features : { "lesser restoration" : { name : "Celestial Legacy (level 3)", limfeaname : "Lesser Restoration", usages : 1, minlevel : 3, recovery : "long rest", spellcastingBonus : [{ name : "Celestial Legacy (level 3)", spells : ["lesser restoration"], selection : ["lesser restoration"], firstCol : 'oncelr' }] }, "daylight" : { name : "Celestial Legacy (level 5)", limfeaname : "Daylight", usages : 1, minlevel : 5, recovery : "long rest", spellcastingBonus : [{ name : "Celestial Legacy (level 5)", spells : ["daylight"], selection : ["daylight"], firstCol : 'oncelr' }] } } }; RaceList["eladrin"] = { regExpSearch : /^(?!.*half)((?=.*eladrin)|((?=.*\b(elfs?|elves|elvish|elven)\b)(?=.*\b(feys?|feywild)\b))).*$/i, name : "Eladrin", sortname : "Elf, Fey (Eladrin)", source : [["D", 286]], plural : "Eladrin", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Elvish"], vision : [["Darkvision", 60]], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["charmed"] }, weaponProfs : [false, false, ["longsword", "shortsword", "longbow", "shortbow"]], skills : ["Perception"], age : " typically claim adulthood around age 100 and can live to be 750 years old", height : " range from under 5 to over 6 feet tall (4'6\" + 2d12\")", weight : " weigh around 115 lb (90 + 2d12 \xD7 1d4 lb)", heightMetric : " range from under 1,5 to over 1,8 metres tall (140 + 5d12 cm)", weightMetric : " weigh around 55 kg (40 + 5d12 \xD7 2d4 / 10 kg)", scores : [0, 2, 0, 1, 0, 0], trait : "Eladrin (+2 Dexterity, +1 Intelligence)\nTrance: Elves don't need to sleep, but meditate semiconsciously, for 4 hours a day. While meditating, I can dream after a fashion; such dreams are actually mental exercises that have become reflexive through years of practice. After resting in this way, I gain the same benefit that a human does from 8 hours of sleep, thus needing only 4 hours for a long rest.\nFey Step: I can cast the Misty Step spell once using this trait. I regain the ability to do so when I finish a short rest.", spellcastingAbility : 4, features : { "fey step" : { name : "Fey Step", limfeaname : "Misty Step", minlevel : 1, usages : 1, recovery : "short rest", spellcastingBonus : [{ name : "Fey Step", spells : ["misty step"], selection : ["misty step"], firstCol : 'oncesr' }] } } }; // Subclasses AddSubClass("cleric", "death domain", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*(death|dead|dying)).*$/i, subname : "Death Domain", source : [["D", 96]], spellcastingExtra : ["false life", "ray of sickness", "blindness/deafness", "ray of enfeeblement", "animate dead", "vampiric touch", "blight", "death ward", "antilife shell", "cloudkill"], features : { "subclassfeature1" : { name : "Bonus Proficiency", source : [["D", 96]], minlevel : 1, description: desc("I gain proficiency with martial weapons"), weaponProfs : [false, true] }, "subclassfeature1.1" : { name : "Reaper", source : [["D", 96]], minlevel : 1, description: desc([ "I learn one necromancy cantrip of my choice from any spell list", "My necromancy, single-target cantrips can affect two targets within 5 ft of each other", ]), spellcastingBonus : [{ name : "Reaper", "class" : "any", school : ["Necro"], level : [0, 0] }], calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { if (spellObj.school == "Necro" && spellObj.level === 0) { var startDescr = spellObj.description; switch (spellKey) { case "chill touch" : spellObj.description = spellObj.description.replace("Spell attack", "2 crea in 5 ft spell atk").replace("Necrotic", "Necro.").replace("at CL 5, 11, and 17", "CL 5/11/17"); break; case "spare the dying" : spellObj.description = spellObj.description.replace("1 living creature", "1 living creature (or 2 within 5 ft of each other)"); break; case "toll the dead" : default : spellObj.description = spellObj.description.replace(/1 crea(ture)?/i, "2 crea in 5 ft").replace("disadvantage", "disadv.").replace("save halves", "save half"); } return startDescr !== spellObj.description; }; }, "My necromancy, single-target cantrips can affect two targets within 5 ft of each other." ] } }, "subclassfeature2" : { name : "Channel Divinity: Touch of Death", source : [["D", 97]], minlevel : 2, description: desc("When I hit a creature with a melee attack, I can deal extra necrotic damage"), additional : ["", "+9 damage", "+11 damage", "+13 damage", "+15 damage", "+17 damage", "+19 damage", "+21 damage", "+23 damage", "+25 damage", "+27 damage", "+29 damage", "+31 damage", "+33 damage", "+35 damage", "+37 damage", "+39 damage", "+41 damage", "+43 damage", "+45 damage"] }, "subclassfeature6" : { name : "Inescapable Destruction", source : [["D", 97]], minlevel : 6, description: desc("When I deal necrotic damage with spells or Channel Divinity, I ignore resistance to it") }, "subclassfeature8" : { name : "Divine Strike", source : [["D", 97]], minlevel : 8, description: desc("Once per turn, when I hit a creature with a weapon attack, I can do extra damage"), additional : levels.map(function (n) { if (n < 8) return ""; return "+" + (n < 14 ? 1 : 2) + "d8 necrotic damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && v.isWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.cleric.level < 14 ? 1 : 2) + 'd8 necrotic damage'; } }, "Once per turn, I can have one of my weapon attacks that hit do extra necrotic damage." ] } }, "subclassfeature17" : { name : "Improved Reaper", source : [["D", 97]], minlevel : 17, description: desc([ "If I cast a 5th-level or lower necromancy spell that has one target, I can target two", "They need to be within 5 ft of each other; I have to provide material comp. for both", ]), calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { if (spellObj.school == "Necro" && spellObj.level && spellObj.level < 6) { var startDescr = spellObj.description; switch (spellKey) { case "blindness/deafness" : // only 2 target if not cast at higher SL spellObj.description = "2 crea in 5 ft or " + spellObj.description; break; case "contagion" : case "inflict wounds" : case "ray of enfeeblement" : spellObj.description = spellObj.description.replace(/(Melee )?spell attack/i, "2 " + "$1".toLowerCase() + "spell atk in 5 ft").replace("spell ends", "ends"); break; case "cause fear" : spellObj.description = "2 crea in 5 ft or 1+1/SL crea max 30 ft apart (no constr/undead), save or frightened; save end of turn"; break; case "feign death" : spellObj.description = "2 willing crea in 5 ft appear dead; Are blinded, incapacitated, dmg resist. all but Psychic, speed 0"; break; case "gentle repose" : spellObj.description = spellObj.description.replace("1 corpse protected from", "2 corpses in 5 ft suffer no"); break; case "raise dead" : case "revivify" : spellObj.description = spellObj.description.replace("a creature's body that has", "body of 2 crea in 5 ft that").replace("cons.)", "cons. \xD72)"); spellObj.compMaterial += " (once for each target)"; break; case "speak with dead" : spellObj.description = spellObj.description.replace("1 corpse with mouth answers 5 questions", "2 corpses in 5 ft answer 5 questions each"); break; case "enervation" : spellObj.description = spellObj.description.replace("action", "1 a").replace("see book", "see B"); case "bestow curse" : case "blight" : case "cause fear-uass" : case "life transference" : case "negative energy flood" : default : spellObj.description = spellObj.description.replace(/1 crea(ture)?/i, "2 crea in 5 ft").replace("disadvantage", "disadv.").replace("save halves", "save half"); } return startDescr !== spellObj.description; }; }, "My necromancy, single-target 5th-level or lower spells can affect two targets within 5 ft of each other if both are within range of the spell. The spells still require material components for each target separately." ] } } } }); AddSubClass("paladin", "oathbreaker", { regExpSearch : /^((?=.*blackguard)|((?=.*(oath.*breaker|breaker.*oath))((?=.*paladin)|((?=.*(exalted|sacred|holy|divine))(?=.*(knight|fighter|warrior|warlord|trooper)))))).*$/i, subname : "Oathbreaker", source : [["D", 97]], features : { "subclassfeature3" : { name : "Channel Divinity: Control Undead", source : [["D", 97]], minlevel : 3, description: desc([ "As an action, one undead (CR < paladin level) I can see in 30 ft must make a Wis save", "If failed, it must obey my commands for 24 hours or until I use this on another", ]), action : [["action", ""]], spellcastingExtra : ["hellish rebuke", "inflict wounds", "crown of madness", "darkness", "animate dead", "bestow curse", "blight", "confusion", "contagion", "dominate person"] }, "subclassfeature3.1" : { name : "Channel Divinity: Dreadful Aspect", source : [["D", 97]], minlevel : 3, description: desc([ "As an action, anyone I choose within 30 ft that can see me must make a Wisdom save", "If failed, it is frightened for 1 min or until it succeeds a save at the end of its turns", "It can't save at the end of its turn if it's still within 30 ft of me", ]), action : [["action", ""]] }, "subclassfeature7" : { name : "Aura of Hate", source : [["D", 97]], minlevel : 7, description: desc([ "Fiends/undead within range and I add my Cha mod as bonus on melee weapon damage", "Multiple Auras of Hate don't stack; only the strongest applies", ]), additional : ["", "", "", "", "", "", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "30-foot aura", "30-foot aura", "30-foot aura"], calcChanges : { atkAdd : [ function (fields, v) { if (v.isMeleeWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Cha mod added to damage'; } }, "I add my Charisma modifier to my melee weapon damage." ], atkCalc : [ function (fields, v, output) { if (v.isMeleeWeapon) { output.extraDmg += Number(What("Cha Mod")); }; } ] } }, "subclassfeature15" : { name : "Supernatural Resistance", source : [["D", 97]], minlevel : 15, description: desc("I have resistance to bludgeoning/piercing/slashing damage from nonmagical weapons"), dmgres : [["Bludgeoning", "Bludg. (nonmagical)"], ["Piercing", "Pierc. (nonmagical)"], ["Slashing", "Slash. (nonmagical)"]] }, "subclassfeature20" : { name : "Dread Lord", source : [["D", 97]], minlevel : 20, description: desc([ "As an action, I gain a 30-ft aura of gloom that reduces bright light to dim for 1 min", "If frightened of me, foes starting their turn in the aura take 4d10 psychic damage", "Attacks vs. my allies and me inside the aura have disadvantage if attackers need sight", "As a bonus action, I can make a melee spell attack vs. a target inside the aura", "If this attack hits, it does 3d10 + Charisma modifier necrotic damage", ]), recovery : "long rest", usages : 1, action : [["action", ""]] } } }); // Magic Items not found in the SRD MagicItemsList["alchemy jug"] = { name : "Alchemy Jug", source : [["D", 150]], type : "wondrous item", rarity : "uncommon", magicItemTable : "B", description : "As an action, command the jug to produce liquid; or an action to uncorked it and pour 2 gal/min. After producing, it only makes the same up to its max, until next dawn. Oil (1 qt), acid (8 fl oz), basic poison (1/2 fl oz), beer (4 gal), honey/wine (1 gal), fresh water (8 gal), mayonnaise/vinegar (2 gal), salt water (12 gal).", descriptionLong : "A heavy ceramic jug. As an action, the jug can be commanded to hold a chosen liquid. With another action, I can uncork the jug and pour the liquid out at 2 gallons per minute. Once commanded to produce a liquid, it can't produce a different one or more than the maximum of one, until the next dawn.\rLiquids (with maximum): acid (8 fl. oz.), basic poison (1/2 fl. oz.), beer (4 gallons), honey (1 gallon), mayonnaise (2 gallons), oil (1 quart), vinegar (2 gallons), fresh water (8 gallons), salt water (12 gallons), wine (1 gallon).", descriptionFull : "This ceramic jug appears to be able to hold a gallon of liquid and weighs 12 pounds whether full or empty. Sloshing sounds can be heard from within the jug when it is shaken, even if the jug is empty."+ "\n You can use an action and name one liquid from the table below to cause the jug to produce the chosen liquid. Afterward, you can uncork the jug as an action and pour that liquid out, up to 2 gallons per minute. The maximum amount of liquid the jug can produce depends on the liquid you named."+ "\n Once the jug starts producing a liquid, it can't produce a different one, or more of one that has reached its maximum, until the next dawn.\n\n"+ toUni("Max \tLiquid\t\tMax \tLiquid")+ "\n8 ounces \tAcid\t\t1 quart \tOil"+ "\n1/2 ounce\tBasic poison\t2 gallons \tVinegar"+ "\n4 gallons \tBeer\t\t8 gallons \tWater, fresh"+ "\n1 gallon \tHoney\t\t12 gallons\tWater, salt"+ "\n2 gallons \tMayonnaise\t1 gallon \tWine", weight : 12 } MagicItemsList["cap of water breathing"] = { name : "Cap of Water Breathing", source : [["D", 157]], type : "wondrous item", rarity : "uncommon", magicItemTable : "B", description : "While wearing this cap underwater, I can speak its command word as an action to create a bubble of air around my head. It allows me to breathe normally underwater. This bubble stays with me until I speak the command word again, the cap is removed, or I am no longer underwater.", descriptionFull : "While wearing this cap underwater, you can speak its command word as an action to create a bubble of air around your head. It allows you to breathe normally underwater. This bubble stays with you until you speak the command word again, the cap is removed, or you are no longer underwater.", action : [["action", ""]] } MagicItemsList["cloak of invisibility"] = { name : "Cloak of Invisibility", source : [["D", 158]], type : "wondrous item", rarity : "legendary", magicItemTable : "I", description : "As an action, I can pull the hood of this cloak down or up over my head, making myself invisible (down) or visible again (up). While invisible, anything I carry or wear is invisible as well. It functions for 2 hours, usable in increments of 1 minute. It regains 1 hour of duration for every 12 hours not being used.", descriptionFull : "While wearing this cloak, you can pull its hood over your head to cause yourself to become invisible. While you are invisible, anything you are carrying or wearing is invisible with you. You become visible when you cease wearing the hood. Pulling the hood up or down requires an action.\n Deduct the time you are invisible, in increments of 1 minute, from the cloak's maximum duration of 2 hours. After 2 hours of use, the cloak ceases to function. For every uninterrupted period of 12 hours the cloak goes unused, it regains 1 hour of duration.", attunement : true, action : [["action", " (hood up/down)"]], usages : "120 min", recovery : "Special", additional : "regain 1h/12h" } MagicItemsList["driftglobe"] = { name : "Driftglobe", source : [["D", 166]], type : "wondrous item", rarity : "uncommon", magicItemTable : ["A", "B"], description : "By speaking its command word while within 60 ft, this glass sphere casts Light or Daylight on itself. Daylight only works once per dawn. While lit up, I can use an action to speak another command word to make it hover 5 ft off the ground and follow me at a distance of 60 ft. It stops hovering when grasped.", descriptionFull : "This small sphere of thick glass weighs 1 pound. If you are within 60 feet of it, you can speak its command word and cause it to emanate the Light or Daylight spell. Once used, the Daylight effect can't be used again until the next dawn.\n You can speak another command word as an action to make the illuminated globe rise into the air and float no more than 5 feet off the ground. The globe hovers in this way until you or another creature grasps it. If you move more than 60 feet from the hovering globe, it follows you until it is within 60 feet of you. It takes the shortest route to do so. If prevented from moving, the globe sinks gently to the ground and becomes inactive, and its light winks out.", weight : 1, action : [["action", " (hover)"]], usages : 1, recovery : "dawn", additional : "Daylight", spellcastingBonus : [{ name : "On globe", spells : ["light"], selection : ["light"], firstCol : "atwill" }, { name : "On globe", spells : ["daylight"], selection : ["daylight"], firstCol : "oncelr" }], spellChanges : { "light" : { range : "Globe", description : "Driftglobe sheds bright light in a 20-ft radius and dim light in an additional 20-ft radius", changes : "The spell can only affect the globe." }, "daylight" : { range : "Globe", description : "Driftglobe shed 60-ft rad bright light + 60-ft dim light; only magical darkness of SL 4+ works in it", changes : "The spell can only affect the globe." } } } MagicItemsList["efreeti chain"] = { name : "Efreeti Chain", source : [["D", 167]], type : "armor (chain mail)", rarity : "legendary", magicItemTable : "I", description : "While wearing this armor, I gain a +3 bonus to AC, I am immune to fire damage, and I can understand and speak Primordial. In addition, I can stand on and walk across molten rock as if it were solid ground.", descriptionFull : "While wearing this armor, you gain a +3 bonus to AC, you are immune to fire damage, and you can understand and speak Primordial. In addition, you can stand on and walk across molten rock as if it were solid ground.", attunement : true, weight : 55, languageProfs : ["Primordial"], savetxt : { immune : ["fire"] }, armorOptions : [{ regExpSearch : /^(?=.*efreeti)(?=.*chain).*$/i, name : "Efreeti Chain", source : [["D", 167]], type : "heavy", ac : "16+3", stealthdis : true, weight : 55, strReq : 13, selectNow : true }] } MagicItemsList["elixir of health"] = { name : "Elixir of Health", source : [["D", 168]], type : "potion", rarity : "rare", magicItemTable : "C", description : "Once as an action, I can drink this potion or administer it to another to cure any disease, and removing the blinded, deafened, paralyzed, and poisoned conditions. The potion's clear red liquid has tiny bubbles of light in it.", descriptionFull : "When you drink this potion, it cures any disease afflicting you, and it removes the blinded, deafened, paralyzed, and poisoned conditions. The clear red liquid has tiny bubbles of light in it.", weight : 0.5 } MagicItemsList["gloves of thievery"] = { name : "Gloves of Thievery", source : [["D", 172]], type : "wondrous item", rarity : "uncommon", magicItemTable : "F", description : "These gloves are invisible while worn. While wearing them, I gain a +5 bonus to Dexterity (Sleight of Hand) checks and Dexterity checks made to pick locks.", descriptionFull : "These gloves are invisible while worn. While wearing them, you gain a +5 bonus to Dexterity (Sleight of Hand) checks and Dexterity checks made to pick locks.", addMod : [{ type: "skill", field : "Sleight of Hand", mod : 5, text : "I gain a +5 bonus to Dexterity (Sleight of Hand) checks while wearing Gloves of Thievery." }] } MagicItemsList["instrument of the bards"] = { name : "Instrument of the Bards", source : [["D", 176]], type : "wondrous item (instrument)", description : "If I play this exquisite, magical instruments while casting a spell that has a somatic or material component and charms on a failed save, it imposes disadvantage on that save. I can also use it to cast a set of spells, each once per dawn, using my spellcasting ability and spell save DC.", descriptionFull : "An instrument of the bards is an exquisite example of its kind, superior to an ordinary instrument in every way. Seven types of these instruments exist, each named after a legendary bard college. A creature that attempts to play the instrument without being attuned to it must succeed on a DC 15 Wisdom saving throw or take 2d4 psychic damage.\n You can use an action to play the instrument and cast one of its spells. Once the instrument has been used to cast a spell, it can't be used to cast that spell again until the next dawn. The spells use your spellcasting ability and spell save DC.\n You can play the instrument while casting a spell that causes any of its targets to be charmed on a failed saving throw, thereby imposing disadvantage on the save. This effect applies only if the spell has a somatic or a material component.\n All instruments of the bards can be used to cast the following spells: Fly, Invisibility, Levitate, and Protection from Evil and Good.", attunement : true, weight : 3, // Magic of Faerûn (2001) page 161 prerequisite : "Requires attunement by a bard", prereqeval : function(v) { return classes.known.bard ? true : false; }, choices : ["Anstruth Harp (very rare)", "Canaith Mandolin (rare)", "Cli Lyre (rare)", "Doss Lute (uncommon)", "Fochlucan Bandore (uncommon)", "Mac-Fuirmidh Cittern (uncommon)", "Ollamh Harp (legendary)"], "anstruth harp (very rare)" : { name : "Anstruth Harp [Instrument of the Bards]", sortname : "Instrument of the Bards, Anstruth Harp", rarity : "very rare", magicItemTable : "H", descriptionFull : "An instrument of the bards is an exquisite example of its kind, superior to an ordinary instrument in every way. Seven types of these instruments exist, each named after a legendary bard college. A creature that attempts to play the instrument without being attuned to it must succeed on a DC 15 Wisdom saving throw or take 2d4 psychic damage.\n You can use an action to play the instrument and cast one of its spells. Once the instrument has been used to cast a spell, it can't be used to cast that spell again until the next dawn. The spells use your spellcasting ability and spell save DC.\n You can play the instrument while casting a spell that causes any of its targets to be charmed on a failed saving throw, thereby imposing disadvantage on the save. This effect applies only if the spell has a somatic or a material component.\n All instruments of the bards can be used to cast the following spells: Fly, Invisibility, Levitate, and Protection from Evil and Good.\n In addition, the Anstruth harp can be used to cast Control Weather, Cure Wounds (5th level), and Wall of Thorns.", spellcastingBonus : [{ name : "Once per long rest", spells : ["fly", "invisibility", "levitate", "protection from evil and good", "control weather", "cure wounds", "wall of thorns"], selection : ["fly", "invisibility", "levitate", "protection from evil and good", "control weather", "cure wounds", "wall of thorns"], firstCol : "oncelr", times : 7, spellcastingAbility : "class" }], spellChanges : { "cure wounds" : { description : "1 living creature heals 5d8+spellcasting ability modifier HP", changes : "When using the Anstruth Harp to cast Cure Wounds, it is cast at 5th-level." }, "control weather" : { time : "1 a", changes : "Casting time is only an action." } } }, "canaith mandolin (rare)" : { name : "Canaith Mandolin [Instrument of the Bards]", sortname : "Instrument of the Bards, Canaith Mandolin", rarity : "rare", magicItemTable : "G", descriptionFull : "An instrument of the bards is an exquisite example of its kind, superior to an ordinary instrument in every way. Seven types of these instruments exist, each named after a legendary bard college. A creature that attempts to play the instrument without being attuned to it must succeed on a DC 15 Wisdom saving throw or take 2d4 psychic damage.\n You can use an action to play the instrument and cast one of its spells. Once the instrument has been used to cast a spell, it can't be used to cast that spell again until the next dawn. The spells use your spellcasting ability and spell save DC.\n You can play the instrument while casting a spell that causes any of its targets to be charmed on a failed saving throw, thereby imposing disadvantage on the save. This effect applies only if the spell has a somatic or a material component.\n All instruments of the bards can be used to cast the following spells: Fly, Invisibility, Levitate, and Protection from Evil and Good.\n In addition, the Canaith mandolin can be used to cast Cure Wounds (3rd level), Dispel Magic, and Protection from Energy (lightning only).", spellcastingBonus : [{ name : "Once per long rest", spells : ["fly", "invisibility", "levitate", "protection from evil and good", "cure wounds", "dispel magic", "protection from energy"], selection : ["fly", "invisibility", "levitate", "protection from evil and good", "cure wounds", "dispel magic", "protection from energy"], firstCol : "oncelr", times : 7, spellcastingAbility : "class" }], spellChanges : { "cure wounds" : { description : "1 living creature heals 3d8+spellcasting ability modifier HP", changes : "When using the Canaith Mandolin to cast Cure Wounds, it is cast at 3rd-level." }, "protection from energy" : { description : "1 creature gains resistance to Lightning damage for the duration", changes : "When using the Canaith Mandolin to cast Protection from Energy, it can only grant resistance to lightning damage." } } }, "cli lyre (rare)" : { name : "Cli Lyre [Instrument of the Bards]", sortname : "Instrument of the Bards, Cli Lyre", rarity : "rare", magicItemTable : "G", descriptionFull : "An instrument of the bards is an exquisite example of its kind, superior to an ordinary instrument in every way. Seven types of these instruments exist, each named after a legendary bard college. A creature that attempts to play the instrument without being attuned to it must succeed on a DC 15 Wisdom saving throw or take 2d4 psychic damage.\n You can use an action to play the instrument and cast one of its spells. Once the instrument has been used to cast a spell, it can't be used to cast that spell again until the next dawn. The spells use your spellcasting ability and spell save DC.\n You can play the instrument while casting a spell that causes any of its targets to be charmed on a failed saving throw, thereby imposing disadvantage on the save. This effect applies only if the spell has a somatic or a material component.\n All instruments of the bards can be used to cast the following spells: Fly, Invisibility, Levitate, and Protection from Evil and Good.\n In addition, the Cli lyre can be used to cast Stone Shape, Wall of Fire, and Wind Wall.", spellcastingBonus : [{ name : "Once per long rest", spells : ["fly", "invisibility", "levitate", "protection from evil and good", "stone shape", "wall of fire", "wind wall"], selection : ["fly", "invisibility", "levitate", "protection from evil and good", "stone shape", "wall of fire", "wind wall"], firstCol : "oncelr", times : 7, spellcastingAbility : "class" }] }, "doss lute (uncommon)" : { name : "Doss Lute [Instrument of the Bards]", sortname : "Instrument of the Bards, Doss Lute", rarity : "uncommon", magicItemTable : "F", descriptionFull : "An instrument of the bards is an exquisite example of its kind, superior to an ordinary instrument in every way. Seven types of these instruments exist, each named after a legendary bard college. A creature that attempts to play the instrument without being attuned to it must succeed on a DC 15 Wisdom saving throw or take 2d4 psychic damage.\n You can use an action to play the instrument and cast one of its spells. Once the instrument has been used to cast a spell, it can't be used to cast that spell again until the next dawn. The spells use your spellcasting ability and spell save DC.\n You can play the instrument while casting a spell that causes any of its targets to be charmed on a failed saving throw, thereby imposing disadvantage on the save. This effect applies only if the spell has a somatic or a material component.\n All instruments of the bards can be used to cast the following spells: Fly, Invisibility, Levitate, and Protection from Evil and Good.\n In addition, the Doss lute can be used to cast Animal Friendship, Protection from Energy (fire only), and Protection from Poison.", spellcastingBonus : [{ name : "Once per long rest", spells : ["fly", "invisibility", "levitate", "protection from evil and good", "animal friendship", "protection from energy", "protection from poison"], selection : ["fly", "invisibility", "levitate", "protection from evil and good", "animal friendship", "protection from energy", "protection from poison"], firstCol : "oncelr", times : 7, spellcastingAbility : "class" }], spellChanges : { "protection from energy" : { description : "1 creature gains resistance to Fire damage for the duration", changes : "When using the Doss Lute to cast Protection from Energy, it can only grant resistance to fire damage." } } }, "fochlucan bandore (uncommon)" : { name : "Fochlucan Bandore [Instrument of the Bards]", sortname : "Instrument of the Bards, Fochlucan Bandore", rarity : "uncommon", magicItemTable : "F", descriptionFull : "An instrument of the bards is an exquisite example of its kind, superior to an ordinary instrument in every way. Seven types of these instruments exist, each named after a legendary bard college. A creature that attempts to play the instrument without being attuned to it must succeed on a DC 15 Wisdom saving throw or take 2d4 psychic damage.\n You can use an action to play the instrument and cast one of its spells. Once the instrument has been used to cast a spell, it can't be used to cast that spell again until the next dawn. The spells use your spellcasting ability and spell save DC.\n You can play the instrument while casting a spell that causes any of its targets to be charmed on a failed saving throw, thereby imposing disadvantage on the save. This effect applies only if the spell has a somatic or a material component.\n All instruments of the bards can be used to cast the following spells: Fly, Invisibility, Levitate, and Protection from Evil and Good.\n In addition, the Fochlucan bandore can be used to cast Entangle, Faerie Fire, Shillelagh, and Speak with Animals.", spellcastingBonus : [{ name : "Once per long rest", spells : ["fly", "invisibility", "levitate", "protection from evil and good", "entangle", "faerie fire", "shillelagh", "speak with animals"], selection : ["fly", "invisibility", "levitate", "protection from evil and good", "entangle", "faerie fire", "shillelagh", "speak with animals"], firstCol : "oncelr", times : 8, spellcastingAbility : "class" }] }, "mac-fuirmidh cittern (uncommon)" : { name : "Mac-Fuirmidh Cittern [Instrument of the Bards]", sortname : "Instrument of the Bards, Mac-Fuirmidh Cittern", rarity : "uncommon", magicItemTable : "F", descriptionFull : "An instrument of the bards is an exquisite example of its kind, superior to an ordinary instrument in every way. Seven types of these instruments exist, each named after a legendary bard college. A creature that attempts to play the instrument without being attuned to it must succeed on a DC 15 Wisdom saving throw or take 2d4 psychic damage.\n You can use an action to play the instrument and cast one of its spells. Once the instrument has been used to cast a spell, it can't be used to cast that spell again until the next dawn. The spells use your spellcasting ability and spell save DC.\n You can play the instrument while casting a spell that causes any of its targets to be charmed on a failed saving throw, thereby imposing disadvantage on the save. This effect applies only if the spell has a somatic or a material component.\n All instruments of the bards can be used to cast the following spells: Fly, Invisibility, Levitate, and Protection from Evil and Good.\n In addition, the Mac-Fuirmidh cittern can be used to cast Barkskin, Cure Wounds, and Fog Cloud.", spellcastingBonus : [{ name : "Once per long rest", spells : ["fly", "invisibility", "levitate", "protection from evil and good", "barkskin", "cure wounds", "fog cloud"], selection : ["fly", "invisibility", "levitate", "protection from evil and good", "barkskin", "cure wounds", "fog cloud"], firstCol : "oncelr", times : 7, spellcastingAbility : "class" }] }, "ollamh harp (legendary)" : { name : "Ollamh Harp [Instrument of the Bards]", sortname : "Instrument of the Bards, Ollamh Harp", rarity : "legendary", magicItemTable : "I", descriptionFull : "An instrument of the bards is an exquisite example of its kind, superior to an ordinary instrument in every way. Seven types of these instruments exist, each named after a legendary bard college. A creature that attempts to play the instrument without being attuned to it must succeed on a DC 15 Wisdom saving throw or take 2d4 psychic damage.\n You can use an action to play the instrument and cast one of its spells. Once the instrument has been used to cast a spell, it can't be used to cast that spell again until the next dawn. The spells use your spellcasting ability and spell save DC.\n You can play the instrument while casting a spell that causes any of its targets to be charmed on a failed saving throw, thereby imposing disadvantage on the save. This effect applies only if the spell has a somatic or a material component.\n All instruments of the bards can be used to cast the following spells: Fly, Invisibility, Levitate, and Protection from Evil and Good.\n In addition, the Ollamh harp can be used to cast Confusion, Control Weather, and Fire Storm.", spellcastingBonus : [{ name : "Once per long rest", spells : ["fly", "invisibility", "levitate", "protection from evil and good", "confusion", "control weather", "fire storm"], selection : ["fly", "invisibility", "levitate", "protection from evil and good", "confusion", "control weather", "fire storm"], firstCol : "oncelr", times : 7, spellcastingAbility : "class" }], spellChanges : { "control weather" : { time : "1 a", changes : "Casting time is only an action." } } } } MagicItemsList["mariner's armor"] = { name : "Mariner's Armor", nameTest : "Mariner's", source : [["D", 188]], type : "armor (light, medium, or heavy)", rarity : "uncommon", magicItemTable : "B", description : "While wearing this armor, I have a swimming speed equal to my walking speed. In addition, whenever I start my turn underwater with 0 hit points, the armor causes me to rise 60 ft toward the surface. The armor is decorated with fish and shell motifs.", descriptionFull : "While wearing this armor, you have a swimming speed equal to your walking speed. In addition, whenever you start your turn underwater with 0 hit points, the armor causes you to rise 60 feet toward the surface. The armor is decorated with fish and shell motifs.", allowDuplicates : true, chooseGear : { type : "armor", prefixOrSuffix : "suffix", descriptionChange : ["prefix", "armor"] }, speed : { swim : { spd : "walk", enc : "walk" } } } MagicItemsList["potion of fire breath"] = { name : "Potion of Fire Breath", source : [["D", 187]], type : "potion", rarity : "uncommon", magicItemTable : "B", description : "Once as an action, I can drink this potion or administer it to another to, for 1 hour, use a bonus action to do 4d6 fire damage at a target within 30 ft, Dex save DC 13 halves. This can be done 3 times. This potion's orange liquid flickers, and smoke fills the top of the container and wafts out whenever it is opened.", descriptionFull : "After drinking this potion, you can use a bonus action to exhale fire at a target within 30 feet of you. The target must make a DC 13 Dexterity saving throw, taking 4d6 fire damage on a failed save, or half as much damage on a successful one. The effect ends after you exhale the fire three times or when 1 hour has passed. This potion's orange liquid flickers, and smoke fills the top of the container and wafts out whenever it is opened.", weight : 0.5 } MagicItemsList["potion of invulnerability"] = { name : "Potion of Invulnerability", source : [["D", 188]], type : "potion", rarity : "rare", magicItemTable : "C", description : "Once as an action, I can drink this potion or administer it to another to have resistance to all damage for 1 minute. The potion's syrupy liquid looks like liquefied iron.", descriptionFull : "For 1 minute after you drink this potion, you have resistance to all damage. The potion's syrupy liquid looks like liquefied iron.", weight : 0.5 } MagicItemsList["potion of longevity"] = { name : "Potion of Longevity", source : [["D", 188]], type : "potion", rarity : "very rare", magicItemTable : "D", description : "Once as an action, I can drink this potion or administer it to another to reduce the consumer's physical age is by 1d6+6 years, to a minimum of 13 years. Subsequent consumptions of this type of potion have a 10% cumulative chance to instead age the consumer by 1d6+6 years.", descriptionLong : "Once as an action, I can drink this potion or administer it to another to reduce the consumer's physical age is by 1d6+6 years, to a minimum of 13 years. Subsequent consumptions of this type of potion have a 10% cumulative chance to instead age the consumer by 1d6+6 years. Suspended in this amber liquid are a scorpion's tail, an adder's fang, a dead spider, and a tiny heart that, against all reason, is still beating. These ingredients vanish when the potion is opened.", descriptionFull : "When you drink this potion, your physical age is reduced by 1d6+6 years, to a minimum of 13 years. Each time you subsequently drink a potion of longevity, there is 10 percent cumulative chance that you instead age by 1d6+6 years. Suspended in this amber liquid are a scorpion's tail, an adder's fang, a dead spider, and a tiny heart that, against all reason, is still beating. These ingredients vanish when the potion is opened.", weight : 0.5 } MagicItemsList["potion of vitality"] = { name : "Potion of Vitality", source : [["D", 188]], type : "potion", rarity : "very rare", magicItemTable : "D", description : "Once as an action, I can drink this potion or administer it to another to remove any exhaustion, disease, and poison affecting the consumer. For the next 24 hours, the consumer regains the maximum number of HP for any HD used. The potion's crimson liquid regularly pulses with dull light, calling to mind a heartbeat.", descriptionFull : "When you drink this potion, it removes any exhaustion you are suffering and cures any disease or poison affecting you. For the next 24 hours, you regain the maximum number of hit points for any Hit Die you spend. The potion's crimson liquid regularly pulses with dull light, calling to mind a heartbeat.", weight : 0.5 } MagicItemsList["rod of resurrection"] = { name : "Rod of Resurrection", source : [["D", 197]], type : "rod", rarity : "legendary", magicItemTable : "I", description : "This rod has 5 charges and regains 1 expended charge daily at dawn. While I hold it, I can use an action to expend 1 charge and cast Heal from it, or expend 5 charges and cast Resurrection from it. If the rod is reduced to 0 charges, roll a d20. On a 1, the rod disappears in a burst of radiance.", descriptionFull : "The rod has 5 charges. While you hold it, you can use an action to cast one of the following spells from it: Heal (expends 1 charge) or Resurrection (expends 5 charges).\n The rod regains 1 expended charge daily at dawn. If the rod is reduced to 0 charges, roll a d20. On a 1, the rod disappears in a burst of radiance.", attunement : true, weight : 2, prerequisite : "Requires attunement by a cleric, druid, or paladin", prereqeval : function(v) { return classes.known.cleric || classes.known.druid || classes.known.paladin ? true : false; }, usages : 5, recovery : "dawn", additional : "regains 1", spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "1 charge", spells : ["heal"], selection : ["heal"], firstCol : 1 }, { name : "5 charges", spells : ["resurrection"], selection : ["resurrection"], firstCol : 5 }], spellChanges : { "resurrection" : { time : "1 a", changes : "Casting time is only 1 action instead of 1 hour." } } } MagicItemsList["rod of the pact keeper, +1, +2, or +3"] = { name : "Rod of the Pact Keeper, +1, +2, or +3", source : [["D", 197]], type : "rod", description : "While holding this rod, I gain a bonus to spell attack rolls and to the saving throw DCs of my warlock spells, determined by the rod's rarity: uncommon (+1), rare (+2), or very rare (+3). As an action once per long rest, I can regain one warlock spell slot while holding the rod.", descriptionFull : "While holding this rod, you gain a bonus to spell attack rolls and to the saving throw DCs of your warlock spells. The bonus is determined by the rod's rarity: uncommon (+1), rare (+2), or very rare (+3).\n In addition, you can regain one warlock spell slot as an action while holding the rod. You can't use this property again until you finish a long rest.", attunement : true, weight : 2, prerequisite : "Requires attunement by a warlock", prereqeval : function(v) { return classes.known.warlock; }, usages : 1, recovery : "long rest", limfeaname : "Rod of the Pact Keeper (warlock spell slot)", action : [["action", ""]], allowDuplicates : true, choices : ["+1 Rod (uncommon)", "+2 Rod (rare)", "+3 Rod (very rare)"], "+1 rod (uncommon)" : { name : "Rod of the Pact Keeper +1", rarity : "uncommon", magicItemTable : "F", description : "While holding this rod, I gain a +1 bonus to spell attack rolls and to the saving throw DCs of my warlock spells. As an action once per long rest, I can regain one warlock spell slot while holding the rod.", calcChanges : { spellCalc : [ function (type, spellcasters, ability) { if (type !== "prepare" && spellcasters.indexOf('warlock') !== -1) return 1; }, "While holding the Rod of the Pact Keeper, I gain a +1 bonus to spell attack rolls and to the saving throw DCs of my warlock spells." ] } }, "+2 rod (rare)" : { name : "Rod of the Pact Keeper +2", rarity : "rare", magicItemTable : "G", description : "While holding this rod, I gain a +2 bonus to spell attack rolls and to the saving throw DCs of my warlock spells. As an action once per long rest, I can regain one warlock spell slot while holding the rod.", calcChanges : { spellCalc : [ function (type, spellcasters, ability) { if (type !== "prepare" && spellcasters.indexOf('warlock') !== -1) return 2; }, "While holding the Rod of the Pact Keeper, I gain a +2 bonus to spell attack rolls and to the saving throw DCs of my warlock spells." ] } }, "+3 rod (very rare)" : { name : "Rod of the Pact Keeper +3", rarity : "very rare", magicItemTable : "H", description : "While holding this rod, I gain a +3 bonus to spell attack rolls and to the saving throw DCs of my warlock spells. As an action once per long rest, I can regain one warlock spell slot while holding the rod.", calcChanges : { spellCalc : [ function (type, spellcasters, ability) { if (type !== "prepare" && spellcasters.indexOf('warlock') !== -1) return 3; }, "While holding the Rod of the Pact Keeper, I gain a +3 bonus to spell attack rolls and to the saving throw DCs of my warlock spells." ] } } } MagicItemsList["saddle of the cavalier"] = { name : "Saddle of the Cavalier", source : [["D", 199]], type : "wondrous item", rarity : "uncommon", magicItemTable : "B", description : "While in this saddle on a mount, I can't be dismounted against my will if I am conscious, and attack rolls against the mount have disadvantage.", descriptionFull : "While in this saddle on a mount, you can't be dismounted against your will if you're conscious, and attack rolls against the mount have disadvantage.", weight : 25 } MagicItemsList["scroll of protection"] = { name : "Scroll of Protection", source : [["D", 199]], type : "scroll", rarity : "rare", magicItemTable : "C", description : "Once as an action, I can use this to make a 5-ft radius, 10-ft high invisible barrier around myself for 5 min that moves with me and stops a creature type from entering or affecting anything within. As an action, a creature can make a DC 15 Cha check to stop being affected.", descriptionFull : "Each scroll of protection works against a specific type of creature chosen by the DM or determined randomly by rolling on the following table.\n\n" + [ toUni("d100\tCreature Type\td100\tCreature Type"), "01-10\tAberrations\t41-50\tFey", "11-20\tBeasts\t\t51-75\tFiends", "21-30\tCelestials \t76-80\tPlants", "31-40\tElementals\t81-00\tUndead", ].join("\n") + "\nUsing an action to read the scroll encloses you in an invisible barrier that extends from you to form a 5-foot-radius, 10-foot-high cylinder. For 5 minutes, this barrier prevents creatures of the specified type from entering or affecting anything within the cylinder.\n The cylinder moves with you and remains centered on you. However, if you move in such a way that an aberration would be inside the cylinder, the effect ends.\n A creature can attempt to overcome the barrier by using an action to make a DC 15 Charisma check. On a success, the creature ceases to be affected by the barrier.", choices : ["Aberrations", "Beasts", "Celestials", "Elementals", "Fey", "Fiends", "Plants", "Undead"], "aberrations" : { name : "Scroll of Protection from Aberrations", description : "Once as an action, I can use this to make a 5-ft radius, 10-ft high invisible barrier around myself for 5 min that moves with me and stops aberrations from entering or affecting anything within. As an action, a creature can make a DC 15 Cha check to stop being affected. If I move so the barrier includes an aberration, it ends." }, "beasts" : { name : "Scroll of Protection from Beasts", description : "Once as an action, I can use this to make a 5-ft radius, 10-ft high invisible barrier around myself for 5 minutes that moves with me and stops beasts from entering or affecting anything within. As an action, a creature can make a DC 15 Charisma check to stop being affected. If I move so the barrier includes a beast, it ends." }, "celestials" : { name : "Scroll of Protection from Celestials", description : "Once as an action, I can use this to make a 5-ft radius, 10-ft high invisible barrier around myself for 5 min that moves with me and stops celestials from entering or affecting anything within. As an action, a creature can make a DC 15 Cha check to stop being affected. If I move so the barrier includes a celestial, it ends." }, "elementals" : { name : "Scroll of Protection from Elementals", description : "Once as an action, I can use this to make a 5-ft radius, 10-ft high invisible barrier around myself for 5 min that moves with me and stops elementals from entering or affecting anything within. As an action, a creature can make a DC 15 Cha check to stop being affected. If I move so the barrier includes an elemental, it ends." }, "fey" : { name : "Scroll of Protection from Fey", description : "Once as an action, I can use this to make a 5-ft radius, 10-ft high invisible barrier around myself for 5 minutes that moves with me and stops fey from entering or affecting anything within. As an action, a creature can make a DC 15 Charisma check to stop being affected. If I move so the barrier includes a fey, it ends." }, "fiends" : { name : "Scroll of Protection from Fiends", description : "Once as an action, I can use this to make a 5-ft radius, 10-ft high invisible barrier around myself for 5 minutes that moves with me and stops fiends from entering or affecting anything within. As an action, a creature can make a DC 15 Charisma check to stop being affected. If I move so the barrier includes a fiend, it ends." }, "plants" : { name : "Scroll of Protection from Plants", description : "Once as an action, I can use this to make a 5-ft radius, 10-ft high invisible barrier around myself for 5 minutes that moves with me and stops plants from entering or affecting anything within. As an action, a creature can make a DC 15 Charisma check to stop being affected. If I move so the barrier includes a plant, it ends." }, "undead" : { name : "Scroll of Protection from Undead", description : "Once as an action, I can use this to make a 5-ft radius, 10-ft high invisible barrier around myself for 5 minutes that moves with me and stops undead from entering or affecting anything within. As an action, a creature can make a DC 15 Cha check to stop being affected. If I move so the barrier includes a undead, it ends." } } MagicItemsList["sending stones"] = { name : "Sending Stones", source : [["D", 199]], type : "wondrous item", rarity : "uncommon", magicItemTable : "C", description : "While I touch one of this pair of stones, I can use an action to cast Sending, targeting the bearer of the other stone. If no creature has the other stone, the spell won't cast. Once it is cast, neither stone can be used again until the next dawn. Sending allows each bearer to communicate up to 25 words.", descriptionFull : "Sending stones come in pairs, with each smooth stone carved to match the other so the pairing is easily recognized. While you touch one stone, you can use an action to cast the Sending spell from it. The target is the bearer of the other stone. If no creature bears the other stone, you know that fact as soon as you use the stone and don't cast the spell.\n Once Sending is cast through the stones, they can't be used again until the next dawn. If one of the stones in a pair is destroyed, the other one becomes nonmagical.", spellcastingBonus : [{ name : "To other stone bearer only", spells : ["sending"], selection : ["sending"], firstCol : "oncelr" }], usages : 1, recovery : "dawn", spellChanges : { "sending" : { description : "Send a 25 word message to the bearer of the other Sending Stone, who can respond with 25 words", changes : "Using one stone of a pair of Sending Stones, the spell can only target the bearer of the other stone of the pair." } } } MagicItemsList["sentinel shield"] = { name : "Sentinel Shield", source : [["D", 199]], type : "shield", rarity : "uncommon", magicItemTable : "F", description : "While holding this shield, I have advantage on initiative rolls and Wisdom (Perception) checks. The shield is emblazoned with a symbol of an eye.", descriptionFull : "While holding this shield, you have advantage on initiative rolls and Wisdom (Perception) checks. The shield is emblazoned with a symbol of an eye.", weight : 6, shieldAdd : "Sentinel Shield", advantages : [["Initiative", true], ["Perception", true]], vision : [["Adv. on Perception checks", 0]] } MagicItemsList["staff of the adder"] = { name : "Staff of the Adder", source : [["D", 203]], type : "staff", rarity : "uncommon", magicItemTable : "F", description : "As a bonus action, I can speak this staff's command word to animate its snake head for 1 minute or make it inanimate again. While animated, I can use it in melee (1d6 piercing + DC 15 Con save or 3d6 poison), but it can be attacked and has AC 15 and 20 HP (full every time). If it reaches 0 HP, the staff is destroyed.", descriptionFull : "You can use a bonus action to speak this staff's command word and make the head of the staff become that of an animate poisonous snake for 1 minute. By using another bonus action to speak the command word again, you return the staff to its normal inanimate form.\n You can make a melee attack using the snake head, which has a reach of 5 feet. Your proficiency bonus applies to the attack roll. On a hit, the target takes 1d6 piercing damage and must succeed on a DC 15 Constitution saving throw or take 3d6 poison damage.\n The snake head can be attacked while it is animate. It has an Armor Class of 15 and 20 hit points. If the head drops to 0 hit points, the staff is destroyed. As long as it's not destroyed, the staff regains all lost hit points when it reverts to its inanimate form.", attunement : true, weight : 4, prerequisite : "Requires attunement by a cleric, druid, or warlock", prereqeval : function(v) { return classes.known.cleric || classes.known.druid || classes.known.warlock ? true : false; }, action : [["bonus action", " (animate/end)"]], weaponOptions : [{ regExpSearch : /^(?=.*snake)(?=.*head)(?=.*staff)(?=.*adder).*$/i, name : "Animated Snake Head from Staff of the Adder", source : [["D", 203]], list : "melee", ability : 1, type : "Natural", damage : [1, 6, "piercing"], range : "Melee", weight : 4, description : "DC 15 Constitution save or 3d6 poison damage", abilitytodamage : false, selectNow : true }] } MagicItemsList["sword of answering"] = { name : "Sword of Answering", source : [["D", 206]], type : "weapon (longsword)", rarity : "legendary", magicItemTable : "I", description : "I gain a +3 bonus to attack and damage rolls made with this magical longsword that has a gem set in its pommel. As a reaction when a creature within my reach damages me, I can make one melee attack with this sword with advantage. This attack ignores damage immunities and resistances of the target.", descriptionFull : 'In the world of Greyhawk, only nine of these blades are known to exist. Each is patterned after the legendary sword Fragarach, which is variously translated as "Final Word." Each of the nine swords has its own name and alignment, and each bears a different gem in its pommel.\n You gain a +3 bonus to attack and damage rolls made with this sword. In addition, while you hold the sword, you can use your reaction to make one melee attack with it against any creature in your reach that deals damage to you. You have advantage on the attack roll, and any damage dealt with this special attack ignores any damage immunity or resistance the target has.\n\n' + [ toUni("Name\t\tAlignment\tGem"), "Answerer \tChaotic good\tEmerald", "Back Talker\tChaotic evil\tJet", "Concluder \tLawful neutral\tAmethyst", "Last Quip \tChaotic neutral\tTourmaline", "Rebutter\t\tNeutral good\tTopaz", "Replier\t\tNeutral\t\tPeridot", "Retorter\t\tLawful good\tAquamarine", "Scather\t\tLawful evil\tGarnet", "Squelcher \tNeutral evil\tSpinel" ].join("\n"), attunement : true, weight : 3, action : [["reaction", ""]], weaponOptions : [{ baseWeapon : "longsword", regExpSearch : /^(?=.*sword)(?=.*answering).*$/i, name : "Sword of Answering", source : [["D", 206]], modifiers : [3, 3], selectNow : true }], choices : ["Answerer (chaotic good)", "Back Talker (chaotic evil)", "Concluder (lawful neutral)", "Last Quip (chaotic neutral)", "Rebutter (neutral good)", "Replier (neutral)", "Retorter (lawful good)", "Scather (lawful evil)", "Squelcher (neutral evil)"], "answerer (chaotic good)" : { name : "Sword of Answering [Answerer]", prerequisite : "Requires attunement by a creature with the chaotic good alignment", prereqeval : function(v) { return (/^(?=.*chaotic)(?=.*good).*$/i).test(What("Alignment")); }, description : "I gain a +3 bonus to attack and damage rolls made with this magical longsword that has an emerald set in its pommel. As a reaction when a creature within my reach damages me, I can make one melee attack with this sword with advantage. This attack ignores damage immunities and resistances of the target." }, "back talker (chaotic evil)" : { name : "Sword of Answering [Back Talker]", prerequisite : "Requires attunement by a creature with the chaotic evil alignment", prereqeval : function(v) { return (/^(?=.*chaotic)(?=.*evil).*$/i).test(What("Alignment")); }, description : "I gain a +3 bonus to attack and damage rolls made with this magical longsword that has jet set in its pommel. As a reaction when a creature within my reach damages me, I can make one melee attack with this sword with advantage. This attack ignores damage immunities and resistances of the target." }, "concluder (lawful neutral)" : { name : "Sword of Answering [Concluder]", prerequisite : "Requires attunement by a creature with the lawful neutral alignment", prereqeval : function(v) { return (/^(?=.*lawful)(?=.*neutral).*$/i).test(What("Alignment")); }, description : "I gain a +3 bonus to attack and damage rolls made with this magical longsword that has an amethyst set in its pommel. As a reaction when a creature within my reach damages me, I can make one melee attack with this sword with advantage. This attack ignores damage immunities and resistances of the target." }, "last quip (chaotic neutral)" : { name : "Sword of Answering [Last Quip]", prerequisite : "Requires attunement by a creature with the chaotic neutral alignment", prereqeval : function(v) { return (/^(?=.*chaotic)(?=.*neutral).*$/i).test(What("Alignment")); }, description : "I gain a +3 bonus to attack and damage rolls made with this magical longsword that has a tourmaline set in its pommel. As a reaction when a creature within my reach damages me, I can make one melee attack with this sword with advantage. This attack ignores damage immunities and resistances of the target." }, "rebutter (neutral good)" : { name : "Sword of Answering [Rebutter]", prerequisite : "Requires attunement by a creature with the neutral good alignment", prereqeval : function(v) { return (/^(?=.*neutral)(?=.*good).*$/i).test(What("Alignment")); }, description : "I gain a +3 bonus to attack and damage rolls made with this magical longsword that has a topaz set in its pommel. As a reaction when a creature within my reach damages me, I can make one melee attack with this sword with advantage. This attack ignores damage immunities and resistances of the target." }, "replier (neutral)" : { name : "Sword of Answering [Replier]", prerequisite : "Requires attunement by a creature with the neutral alignment", prereqeval : function(v) { return (/^(?=.*neutral)(?!.*(chaotic|lawful|evil|good)).*$/i).test(What("Alignment")); }, description : "I gain a +3 bonus to attack and damage rolls made with this magical longsword that has a peridot set in its pommel. As a reaction when a creature within my reach damages me, I can make one melee attack with this sword with advantage. This attack ignores damage immunities and resistances of the target." }, "retorter (lawful good)" : { name : "Sword of Answering [Retorter]", prerequisite : "Requires attunement by a creature with the lawful good alignment", prereqeval : function(v) { return (/^(?=.*lawful)(?=.*good).*$/i).test(What("Alignment")); }, description : "I gain a +3 bonus to attack and damage rolls made with this magical longsword that has an aquamarine set in its pommel. As a reaction when a creature within my reach damages me, I can make one melee attack with this sword with advantage. This attack ignores damage immunities and resistances of the target." }, "scather (lawful evil)" : { name : "Sword of Answering [Scather]", prerequisite : "Requires attunement by a creature with the lawful evil alignment", prereqeval : function(v) { return (/^(?=.*lawful)(?=.*evil).*$/i).test(What("Alignment")); }, description : "I gain a +3 bonus to attack and damage rolls made with this magical longsword that has a garnet set in its pommel. As a reaction when a creature within my reach damages me, I can make one melee attack with this sword with advantage. This attack ignores damage immunities and resistances of the target." }, "squelcher (neutral evil)" : { name : "Sword of Answering [Squelcher]", prerequisite : "Requires attunement by a creature with the neutral evil alignment", prereqeval : function(v) { return (/^(?=.*neutral)(?=.*evil).*$/i).test(What("Alignment")); }, description : "I gain a +3 bonus to attack and damage rolls made with this magical longsword that has a spinel set in its pommel. As a reaction when a creature within my reach damages me, I can make one melee attack with this sword with advantage. This attack ignores damage immunities and resistances of the target." } } MagicItemsList["sword of vengeance"] = { name : "Sword of Vengeance", nameTest : "of Vengeance", source : [["D", 206]], type : "weapon (any sword)", rarity : "uncommon", magicItemTable : "F", attunement : true, description : "This sword gives +1 to hit and damage and is cursed. I can't part with this sword and have disadv. on attacks with other weapons. If I take damage in combat, I must make a DC 15 Wis save or I will attack the attacker until it drops to 0 HP or I can't attack it in melee anymore.", descriptionFull : "You gain a +1 bonus to attack and damage rolls made with this magic weapon.\n " + toUni("Curse") + ". This sword is cursed and possessed by a vengeful spirit. Becoming attuned to it extends the curse to you. As long as you remain cursed, you are unwilling to part with the sword, keeping it on your person at all times. While attuned to this weapon, you have disadvantage on attack rolls made with weapons other than this one.\n In addition, while the sword is on your person, you must succeed on a DC 15 Wisdom saving throw whenever you take damage in combat. On a failed save you must attack the creature that damaged you until you drop to 0 hit points or it does, or until you can't reach the creature to make a melee attack against it.\n You can break the curse in the usual ways. Alternatively, casting banishment on the sword forces the vengeful spirit to leave it. The sword then becomes a +1 weapon with no other properties.", chooseGear : { type : "weapon", prefixOrSuffix : "prefix", descriptionChange : ["replace", "sword"], excludeCheck : function (inObjKey, inObj) { var testRegex = /sword|scimitar|rapier/i; return !(testRegex).test(inObjKey) && (!inObj.baseWeapon || !(testRegex).test(inObj.baseWeapon)); } }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && v.isMeleeWeapon && (/sword|scimitar|rapier/i).test(v.baseWeaponName) && (/of vengeance/i).test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + 'Cursed'; } }, 'If I include the words "of Vengeance" in the name of a sword, it will be treated as the magic weapon Sword of Vengeance. It has +1 to hit and damage, but also bears a curse.' ], atkCalc : [ function (fields, v, output) { if (v.isMeleeWeapon && (/sword|scimitar|rapier/i).test(v.baseWeaponName) && (/of vengeance/i).test(v.WeaponTextName)) { output.magic = v.thisWeapon[1] + 1; } }, '' ] } } MagicItemsList["tentacle rod"] = { name : "Tentacle Rod", source : [["D", 208]], type : "rod", rarity : "rare", magicItemTable : "G", description : "As an action, all 3 tentacles of this rod attack with 15 ft reach, +9 to hit, dealing 1d6 bludgeoning damage. If a target is hit by all 3 it must make a DC 15 Con save or have half speed, disadv. on Dex saves, no reactions, and do action or bonus action, not both, for 1 min. It can repeat the save at the end of each of its turns.", descriptionLong : "As an action while holding the rod, I can direct each of its three tentacles to attack a creature I can see within 15 ft. Each tentacle makes a melee attack roll, +9 to hit, dealing 1d6 bludgeoning damage. If a target is hit by all three tentacles, it must make a DC 15 Constitution saving throw. On a failure, the creature's speed is halved, it has disadvantage on Dexterity saving throws, and it can't use reactions for 1 minute. Moreover, on each of its turns, it can take either an action or a bonus action, but not both. At the end of each of its turns, it can repeat the saving throw, ending the effect on itself on a success.", descriptionFull : "Made by the drow, this rod is a magic weapon that ends in three rubbery tentacles. While holding the rod, you can use an action to direct each tentacle to attack a creature you can see within 15 feet of you. Each tentacle makes a melee attack roll with a +9 bonus. On a hit, the tentacle deals 1d6 bludgeoning damage. If you hit a target with all three tentacles, it must make a DC 15 Constitution saving throw. On a failure, the creature's speed is halved, it has disadvantage on Dexterity saving throws, and it can't use reactions for 1 minute. Moreover, on each of its turns, it can take either an action or a bonus action, but not both. At the end of each of its turns, it can repeat the saving throw, ending the effect on itself on a success.", attunement : true, weight : 2, action : [["action", ""]], weaponOptions : [{ regExpSearch : /^(?=.*tentacle)(?=.*rod).*$/i, name : "Tentacle Rod", source : [["D", 208]], ability : 0, type : "Magic Item", damage : [1, 6, "bludgeoning"], range : "Melee (15 ft)", description : "Action to use, 3 attacks; If all 3 hit same target, it DC 15 Con save, see magic item", abilitytodamage : false, modifiers : [9, ""], weight : 2, isAlwaysProf : false, selectNow : true }] } MagicItemsList["tome of the stilled tongue"] = { name : "Tome of the Stilled Tongue", source : [["D", 208]], type : "wondrous item", rarity : "legendary", magicItemTable : "I", description : "I can use this thick leather-bound tome as a spellbook and an arcane focus. Once per dawn while holding it, I can use a bonus action to cast a spell I have written in it, without expending a spell slot or using any verbal or somatic components. Removing the tongue on the cover erases all spells within.", descriptionLong : "The first few pages of this thick leather-bound tome are filled with indecipherable scrawls. The remaining pages are blank and pristine. I can use it as a spellbook and an arcane focus. Once per dawn while holding it, I can use a bonus action to cast a spell I have written in the tome, without expending a spell slot or using any verbal or somatic components. While attuned to the book, I can remove the tongue from the book's cover, permanently erasing all spells within. Vecna watches the user or this tome and sometimes has cryptic messages appear in it at midnight and fade away after they are read.", descriptionFull : "This thick leather-bound volume has a desiccated tongue pinned to the front cover. Five of these tomes exist, and it's unknown which one is the original. The grisly cover decoration on the first tome of the stilled tongue once belonged to a treacherous former servant of the lich-god Vecna, keeper of secrets. The tongues pinned to the covers of the four copies came from other spellcasters who crossed Vecna. The first few pages of each tome are filled with indecipherable scrawls. The remaining pages are blank and pristine.\n If you can attune to this item, you can use it as a spellbook and an arcane focus. In addition, while holding the tome, you can use a bonus action to cast a spell you have written in this tome, without expending a spell slot or using any verbal or somatic components. Once used, this property of the tome can't be used again until the next dawn.\n While attuned to the book, you can remove the tongue from the book's cover. If you do so, all spells written in the book are permanently erased.\n Vecna watches anyone using this tome. He can also write cryptic messages in the book. These messages appear at midnight and fade away after they are read.", attunement : true, weight : 5, prerequisite : "Requires attunement by a wizard", prereqeval : function(v) { return classes.known.wizard ? true : false; }, action : [["bonus action", ""]], usages : 1, recovery : "dawn" } MagicItemsList["weapon of warning"] = { name : "Weapon of Warning", nameTest : "of Warning", source : [["D", 213]], type : "weapon (any)", rarity : "uncommon", magicItemTable : "F", description : "While this magic weapon is on my person, I have advantage on initiative rolls. In addition, both me and my allies within 30 ft of me can't be surprised and the weapon magically awakens us when combat starts, except those incapacitated by something other than nonmagical sleep.", descriptionFull : "This magic weapon warns you of danger. While the weapon is on your person, you have advantage on initiative rolls. In addition, you and any of your companions within 30 feet of you can't be surprised, except when incapacitated by something other than nonmagical sleep. The weapon magically awakens you and your companions within range if any of you are sleeping naturally when combat begins.", attunement : true, chooseGear : { type : "weapon", prefixOrSuffix : "prefix", descriptionChange : ["replace", "weapon"] }, advantages : [["Initiative", true]], calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && !v.isSpell && (/warning/i).test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); } }, 'If I include the word "Warning" in the name of a weapon, it will be treated as the magic weapon Weapon of Warning.' ] }, savetxt : { immune : ["surprised"] } } // Sentient Items var DMG_blackrazorFullDescription = [ "Hidden in the dungeon of White Plume Mountain, Blackrazor shines like a piece of night sky filled with stars. Its black scabbard is decorated with pieces of cut obsidian.", "You gain a +3 bonus to attack and damage rolls made with this magic weapon. It has the following additional properties.", ">>Devour Soul<<. Whenever you use it to reduce a creature to 0 hit points, the sword slays the creature devours its soul, unless it is a construct or an undead. A creature whose soul has been devoured by Blackrazor can be restored to life only by a Wish spell.", "When it devours a soul, Blackrazor grants you temporary hit points equal to the slain creature's hit point maximum. These hit points fade after 24 hours. As long as these temporary hit points last and you keep Blackrazor in hand, you have advantage on attack rolls, saving throws, and ability checks.", "If you hit an undead with this weapon, you take 1d10 necrotic damage and the target regains 1d10 hit points. If this necrotic damage reduces you to 0 hit points, Blackrazor devours your soul.", ">>Soul Hunter<<. While you hold the weapon, you are aware of the presence of Tiny or larger creatures within 60 feet of you that aren't constructs or undead. You also can't be charmed or frightened.", "Blackrazor can cast the Haste spell on you once per day. It decides when to cast the spell and maintains concentration on it so that you don't have to.", ">>Sentience<<. Blackrazor is a sentient chaotic neutral weapon with an Intelligence of 17, a Wisdom of 10, and a Charisma of 19. It has hearing and darkvision out to a range of 120 feet.", "The weapon can speak, read, and understand Common, and can communicate with its wielder telepathically. Its voice is deep and echoing. While you are attuned to it, Blackrazor also understands every language you know.", ">>Personality<<. Blackrazor speaks with an imperious tone, as though accustomed to being obeyed.", "The sword's purpose is to consume souls. It doesn't care whose souls it eats, including the wielder's. The sword believes that all matter and energy sprang from a void of negative energy and will one day return to it. Blackrazor is meant to hurry that process along.", "Despite its nihilism, Blackrazor feels a strange kinship to Wave and Whelm, two other weapons locked away under White Plume Mountain. It wants the three weapons to be united again and wielded together in combat, even though it violently disagrees with Whelm and finds Wave tedious.", "Blackrazor's hunger for souls must be regularly fed. If the sword goes three days or more without consuming a soul, a conflict between it and its wielder occurs at the next sunset." ]; MagicItemsList["blackrazor"] = { name : "Blackrazor", source : [["D", 216]], type : "weapon (greatsword)", rarity : "legendary", notLegalAL : true, description : "This sentient greatsword adds +3 to hit and damage and makes me immune to being charmed or frightened. Once per day it can cast Haste on me as it sees fit. If I use it to bring a creature to 0 HP, it devours the creature's soul, granting me temporary HP equal to the creature's max HP for 24 hours. See Notes page.", descriptionFull : DMG_blackrazorFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)<>Sentience<<. Wave is a sentient weapon of neutral alignment, with an Intelligence of 14, a Wisdom of 10, and a Charisma of 18. It has hearing and darkvision out to a range of 120 feet.", "The weapon communicates telepathically with its wielder and can speak, read, and understand Aquan. It can also speak with aquatic animals as if using a Speak with Animals spell, using telepathy to involve its wielder in the conversation.", ">>Personality<<. When it grows restless, Wave has a habit of humming tunes that vary from sea chanteys to sacred hymns of the sea gods.", "Wave zealously desires to convert mortals to the worship of one or more sea gods, or else to consign the faithless to death. Conflict arises if the wielder fails to further the weapon's objectives in the world. The trident has a nostalgic attachment to the place where it was forged, a desolate island called Thunderforge. A sea god imprisoned a family of storm giants there, and the giants forged Wave in an act of devotion to\u2014or rebellion against\u2014that god.", "Wave harbors a secret doubt about its own nature and purpose. For all its devotion to the sea gods, Wave fears that it was intended to bring about a particular sea god's demise. This destiny is something Wave might not be able to avert." ]; if (MagicItemsList["trident of fish command"] && MagicItemsList["weapon of warning"] && MagicItemsList["cap of water breathing"] && MagicItemsList["cube of force"]) { MagicItemsList["wave"] = { name : "Wave", source : [["D", 218]], type : "weapon (trident)", rarity : "legendary", notLegalAL : true, description : "This sentient trident adds +3 to hit and damage and if I score a critical hit with it, the target takes extra necrotic damage equal to half its max HP. It also functions as a trident of fish command, a weapon of warning, cap of water breathing while I hold it, and I can use it as a cube of force. See Notes page.", descriptionFull : DMG_waveFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)<>Thrown Weapon<<. Whelm has the thrown property, with a normal range of 20 feet and a long range of 60 feet. When you hit with a ranged weapon attack using it, the target takes an extra 1d8 bludgeoning damage, or an extra 2d8 bludgeoning damage if the target is a giant. Each time you throw the weapon, it flies back to your hand after the attack. If you don't have a hand free, the weapon lands at your feet.", ">>Shock Wave<<. You can use an action to strike the ground with Whelm and send a shock wave out from the point of impact. Each creature of your choice on the ground within 60 feet of that point must succeed on a DC 15 Constitution saving throw or become stunned for 1 minute. A creature can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success. Once used, this property can't be used again until the next dawn.", ">>Supernatural Awareness<<. While you are holding the weapon, it alerts you to the location of any secret or concealed doors within 30 feet of you. In addition, you can use an action to cast Detect Evil and Good or Locate Object from the weapon. Once you cast either spell, you can't cast it from the weapon again until the next dawn.", ">>Sentience<<. Whelm is a sentient lawful neutral weapon with an Intelligence of 15, a Wisdom of 12, and a Charisma of 15. It has hearing and darkvision out to a range of 120 feet.", "The weapon communicates telepathically with its wielder and can speak, read, and understand Dwarvish. Giant, and Goblin. It shouts battle cries in Dwarvish when used in combat.", ">>Personality<<. Whelm's purpose is to slaughter giants and goblinoids. It also seeks to protect dwarves against all enemies. Conflict arises if the wielder fails to destroy goblins and giants or to protect dwarves. Whelm has ties to the dwarf clan that created it, variously called the Dankil or the Mightyhammer clan. It longs to be returned to that clan. It would do anything to protect those dwarves from harm. The hammer also carries a secret shame. Centuries ago, a dwarf named Ctenmiir wielded it valiantly for a time. But Ctenmiir was turned into a vampire. His will was strong enough that he bent Whelm to his evil purposes, even killing members of his own clan." ]; MagicItemsList["whelm"] = { name : "Whelm", source : [["D", 218]], type : "weapon (warhammer)", rarity : "legendary", notLegalAL : true, description : "This sentient warhammer adds +3 to hit and damage, has the thrown property, deals extra damage when thrown, and returns to my hand when thrown. I can use it to create a shock wave. It makes me afraid of the outdoors, so while I can see the daytime sky, I have disadv. on attacks, saves, and checks. See Notes page.", descriptionFull : DMG_whelmFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)< 2 && (/\brage\b/i).test(v.WeaponTextName)) { var theDMG = GetFeatureChoice('class', 'barbarian', 'subclassfeature3'); if (!theDMG) return; fields.Description += (fields.Description ? '; ' : '') + '+1d6+' + Math.floor(classes.known.barbarian.level / 2) + ' ' + GetFeatureChoice('class', 'barbarian', 'subclassfeature3') + ' on first hit each turn'; }; }, "If I include the word 'Rage' in a melee weapon's name, it will show in its description that its first hit does extra damage." ] } }, "subclassfeature3.1" : { name : "Warrior of the Gods", source : [["X", 11]], minlevel : 3, description : desc("Spells restoring me to life (not undeath or anything else) don't require material comp.") }, "subclassfeature6" : { name : "Fanatical Focus", source : [["X", 11]], minlevel : 6, description : desc([ "When I fail a saving throw while raging, I can reroll it and must use the new roll", "I can use this ability only once per rage" ]), usages : 1, recovery : "rage" }, "subclassfeature10" : { name : "Zealous Presence", source : [["X", 11]], minlevel : 10, description : desc([ "As a bonus action, I choose up to 10 creatures within 60 ft that can hear my battle cry", "These creatures gain adv. on attacks and saves until the start of my next turn" ]), usages : 1, recovery : "long rest", action : [["bonus action", ""]] }, "subclassfeature14" : { name : "Rage Beyond Death", source : [["X", 11]], minlevel : 14, description : desc([ "While raging, having 0 hit points doesn't knock me unconscious", "I still must make death saves, and I suffer the normal effects of taking damage", "I only die due to failed death saves if my rage ends while I'm at 0 HP" ]) } } }); // Add 3 subclasses for the Bard AddSubClass("bard", "college of glamour", { regExpSearch : /^(?=.*(college|bard|minstrel|troubadour|jongleur))(?=.*glamour).*$/i, subname : "College of Glamour", subnameShort: "Glamour", source : [["X", 14]], features : { "subclassfeature3" : { name : "Mantle of Inspiration", source : [["X", 14]], minlevel : 3, description : desc([ "As a bonus action, I expend one Bardic Inspiration die to aid those within 60 ft of me", "My Cha mod (min 1) of creatures that I can see and can see me gain temporary HP", "They can immediately use a reaction to move their speed, without opportunity attacks" ]), additional : levels.map(function (n) { return n < 3 ? "" : "1 inspiration die; " + (n < 5 ? 5 : n < 10 ? 8 : n < 15 ? 11 : 14) + " temp HP"; }), action : [["bonus action", ""]] }, "subclassfeature3.1" : { name : "Enthralling Performance", source : [["X", 14]], minlevel : 3, recovery : "short rest", usages : 1, description : desc([ "By performing for at least 1 minute, I can charm humanoids within 60 ft of me", "After the performance, my Cha mod (min 1) number of targets must make a Wis save", "On a fail, a target is charmed for 1 hour; If success, it doesn't knows I tried to charm it", "While charmed, the target idolizes me, hinders those opposing me, and avoids violence", "This lasts until a target takes damage, I attack it, or if it sees me attacking its allies" ]) }, "subclassfeature6" : { name : "Mantle of Majesty", source : [["X", 14]], minlevel : 6, recovery : "long rest", usages : 1, action : [["bonus action", ""]], description : desc([ "As a bonus action, I appear unearthly beautiful while I concentrate, up to 1 minute", "At the same time, and as a bonus action during, I can cast Command without a spell slot", "Creatures charmed by me automatically fail their saves against these Command spells" ]), spellcastingBonus : [{ name : "Mantle of Majesty", spells : ["command"], selection : ["command"], firstCol : 'oncelr' }], spellChanges : { "command" : { time : "1 bns", description : "1 crea save or follow one word command, e.g. approach, drop, flee, halt", changes : "Using my Mantle of Majesty class feature, I can cast Command as a bonus action once per long rest without using a spell slot, thus only affect a single target." } } }, "subclassfeature14" : { name : "Unbreakable Majesty", source : [["X", 14]], minlevel : 14, recovery : "short rest", usages : 1, action : [["bonus action", ""]], description : desc([ "As a bonus action, I gain a magically majestic presence for 1 min or until incapacitated", "During this, the first time a creature attacks me each turn they must make a Cha save", "If failed, it can't attack me this turn and must choose another target or lose its attack", "If successful, it can attack, but has disadv. on all saves against my spells on my next turn" ]) } } }); AddSubClass("bard", "college of swords", { regExpSearch : /^(?=.*(college|bard|minstrel|troubadour|jongleur))(?=.*\bswords?\b).*$/i, subname : "College of Swords", subnameShort: "Swords", source : [["X", 15]], attacks : [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], features : { "subclassfeature3" : { name : "Bonus Proficiencies", source : [["X", 15]], minlevel : 3, description : desc([ "I gain proficiency with medium armor and scimitars", "My bardic spellcasting focus can be any simple or martial weapon I'm proficient with" ]), armorProfs : [false, true, false, false], weaponProfs : [false, false, ["scimitar"]] }, "subclassfeature3.1" : { name : "Fighting Style", source : [["X", 15]], minlevel : 3, description : desc('Select a Fighting Style for the college of swords using the "Choose Feature" button above'), choices : ["Dueling", "Two-Weapon Fighting"], "dueling" : FightingStyles.dueling, "two-weapon fighting" : FightingStyles.two_weapon }, "subclassfeature3.2" : { name : "Blade Flourish", source : [["X", 15]], minlevel : 3, description : desc([ "When I take the Attack action on my turn, I gain bonus speed and special attack options", "I gain +10 ft to my walking speed until the end of the current turn", "Once per turn when I hit with a weapon attack, I can expend a Bardic Inspiration die", "The roll of that die is added to the weapon's damage, in addition to one of the following:", "\u2022 Defensive Flourish: the result is also added to my AC until the start of my next turn", "\u2022 Slashing Flourish: the extra damage is also dealt to any of my choosing in 5 ft of me", "\u2022 Mobile Flourish: the target is also pushed 5 plus the die result in feet away from me", " As a reaction after this push, I can move my speed to a space within 5 ft of the target" ]) }, "subclassfeature14" : { name : "Master Flourish", source : [["X", 16]], minlevel : 14, description : desc("When I do a Blade Flourish, I can use a d6 instead of expending a Bardic Inspiration die") } } }); AddSubClass("bard", "college of whispers", { regExpSearch : /^(?=.*(college|bard|minstrel|troubadour|jongleur))(?=.*whispers).*$/i, subname : "College of Whispers", subnameShort: "Whispers", source : [["X", 16]], features : { "subclassfeature3" : { name : "Psychic Blades", source : [["X", 16]], minlevel : 3, description : desc([ "When I hit a creature with a weapon attack, I can expend one use of Bardic Inspiration", "If so, the attack does extra psychic damage; I can do so only once per round, on my turn" ]), additional : levels.map(function (n) { return n < 3 ? "" : "1 Bardic Inspiration for +" + (n < 5 ? 2 : n < 10 ? 3 : n < 15 ? 5 : 8) + "d6 damage"; }) }, "subclassfeature3.1" : { name : "Words of Terror", source : [["X", 16]], minlevel : 3, recovery : "short rest", usages : 1, description : desc([ "By speaking privately with a humanoid for at least 1 minute, I can try to inspire terror", "After the talk, it must make a Wis save or be frightened of me or someone of my choice", "If the save is successful, the target doesn't know I tried to frighten it", "This lasts for 1 hour, or until it sees its allies or itself being attacked or damaged" ]) }, "subclassfeature6" : { name : "Mantle of Whispers", source : [["X", 16]], minlevel : 6, recovery : "short rest", usages : 1, action : [["reaction", ""]], description : desc([ "As a reaction when a humanoid dies within 30 ft of me, I can capture its shadow", "As an action, I can use it to make me look just like the dead person did while it was alive", "While disguised, I know general information about it and its memories, but not its secrets", "Others can see through the disguise with a Wis (Insight) check vs. my Cha (Deception) +5", "A shadow lasts until used or next long rest; The disguise ends as a bonus action or 1 hour" ]), action : [['action', 'Shadow Disguise (start)'], ['bonus action', 'Shadow Disguise (end)']] }, "subclassfeature14" : { name : "Shadow Lore", source : [["X", 16]], minlevel : 14, recovery : "long rest", usages : 1, action : [["action", ""]], description : desc([ "As an action, I whisper to a creature within 30 ft that can hear and understand me", "Only the target can hear me; It must make a Wis save or be charmed by me for 8 hours", "If failed, it thinks I know its most mortifying secret, otherwise it only hears mumbling", "While charmed, the target obeys my commands, but won't fight or risk its life for me", "This lasts for 8 hours, or until I or my allies attack it, damage it, or have it make a save" //"When the effect ends, the target has no idea why it was so afraid of me" ]) } } }); // Add 2 subclasses for the Cleric AddSubClass("cleric", "forge domain", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*(forge|forgery|blacksmith)).*$/i, subname : "Forge Domain", source : [["X", 18]], spellcastingExtra : ["identify", "searing smite", "heat metal", "magic weapon", "elemental weapon", "protection from energy", "fabricate", "wall of fire", "animate objects", "creation"], features : { "subclassfeature1" : { name : "Bonus Proficiency", source : [["X", 19]], minlevel : 1, description : desc("I gain proficiency with heavy armor and smith's tools"), armorProfs : [false, false, true, false], toolProfs : ["Smith's tools"] }, "subclassfeature1.1" : { name : "Blessing of the Forge", source : [["X", 19]], minlevel : 1, action : [["action", ""]], usages : 1, recovery : "long rest", description : desc([ "At the end of a long rest, I can imbue magic into a nonmagical weapon or armor", "It becomes magical: +1 AC if armor, or +1 to attack and damage rolls if a weapon", "This lasts until the end of my next long rest or until I die" ]) }, "subclassfeature2" : { name : "Channel Divinity: Artisan's Blessing", source : [["X", 19]], minlevel : 2, description : desc([ "With an hour-long ritual, I can craft a nonmagical item that is at least part metal", "Including: suit of armor, simple or martial weapon, set of tools, 10 pieces of ammunition", "The creation can be worth up to 100 gp, and I must expend metals of equal value to it", "The metals irretrievably coalesce into the new item, forming even nonmetal parts of it", "The item can be an exact duplicate of a nonmagical item if I possess the original", "The item comes into existence at the end of the hour in an unoccupied space within 5 ft" ]) }, "subclassfeature6" : { name : "Soul of the Forge", source : [["X", 19]], minlevel : 6, description : desc("I gain resistance to fire damage and +1 to AC while wearing medium or heavy armor"), dmgres : ["Fire"], extraAC : { mod : 1, text : "I gain a +1 bonus to AC while wearing Medium or Heavy armor.", stopeval : function (v) { return !v.mediumArmor && !v.heavyArmor; } } }, "subclassfeature8" : { name : "Divine Strike", source : [["X", 19]], minlevel : 8, description : desc("Once per turn, when I hit a creature with a weapon attack, I can do extra damage"), additional : levels.map(function (n) { if (n < 8) return ""; return "+" + (n < 14 ? 1 : 2) + "d8 fire damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && v.isWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.cleric.level < 14 ? 1 : 2) + 'd8 fire damage'; } }, "Once per turn, I can have one of my weapon attacks that hit do extra fire damage." ] } }, "subclassfeature17" : { name : "Saint of Forge and Fire", source : [["X", 19]], minlevel : 17, description : desc([ "I gain immunity to fire damage", "When wearing heavy armor, I'm resistant to nonmagical bludg./piercing/slashing damage" ]), savetxt : { immune : ["fire"] }, dmgres : [["Bludgeoning", "Bludg. (nonmagical)"], ["Piercing", "Pierc. (nonmagical)"], ["Slashing", "Slash. (nonmagical)"]] } } }); AddSubClass("cleric", "grave domain", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*grave).*$/i, subname : "Grave Domain", source : [["X", 19]], spellcastingExtra : ["bane", "false life", "gentle repose", "ray of enfeeblement", "revivify", "vampiric touch", "blight", "death ward", "antilife shell", "raise dead"], features : { "subclassfeature1" : { name : "Circle of Mortality", source : [["X", 20]], minlevel : 1, action : [["bonus action", ""]], description : desc([ "Spells I cast to heal a living creature at 0 HP have their dice count as their max result", "I learn Spare the Dying, which I can cast as a bonus action with a range of 30 ft" ]), spellcastingBonus : [{ name : "Circle of Mortality", spells : ["spare the dying"], selection : ["spare the dying"], firstCol : 'atwill' }], spellChanges : { "spare the dying" : { time : "1 bns", range : "30 ft", changes : "I can cast Spare the Dying as a bonus action instead of an action, and it has a range of 30 ft instead of touch." } } }, "subclassfeature1.1" : { name : "Eyes of the Grave", source : [["X", 20]], minlevel : 1, usages : typePF ? "Wisdom mod per " : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest", description : desc([ "As an action, I sense undead within 60 ft that aren't protected from divination magic", "Until the end of my next turn, I sense the location of any undead not behind total cover" ]) }, "subclassfeature2" : { name : "Channel Divinity: Path to the Grave", source : [["X", 20]], minlevel : 2, action : [["action", ""]], description : desc([ "As an action, I can curse a creature within 30 ft until the end of my next turn", "It is vulnerable to all the damage from the next attack by me or my allies that hits it" ]) }, "subclassfeature6" : { name : "Sentinel at Death's Door", source : [["X", 20]], minlevel : 6, usages : typePF ? "Wisdom mod per " : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest", action : [["reaction", ""]], description : desc("As a reaction, I turn a critical hit to me or an ally I see within 30 ft to a normal hit") }, "subclassfeature8" : { name : "Potent Spellcasting", source : [["X", 20]], minlevel : 8, description : desc("I add my Wisdom modifier to the damage I deal with my cleric cantrips"), calcChanges : GenericClassFeatures["potent spellcasting"].calcChanges }, "subclassfeature17" : { name : "Keeper of Souls", source : [["X", 20]], minlevel : 17, description : desc([ "Once per round, if I'm not incapacitated, I can manipulate the energy of the dying", "When an enemy I can see dies within 60 ft of me, I or an ally within 60 ft regain HP", "The HP regained is equal to the enemy's number of Hit Dice" ]) } } }); // Add 2 subclasses for the Druid AddSubClass("druid", "circle of dreams", { regExpSearch : /^(?=.*(druid|shaman))(?=.*\bdreams\b).*$/i, subname : "Circle of Dreams", subnameShort: "Dreams", source : [["X", 22]], features : { "subclassfeature2" : { name : "Balm of the Summer Court", source : [["X", 22]], minlevel : 2, description : desc([ "I have a pool of fey energy represented by a number of d6s equal to my druid level", "As a bonus action, I can spend dice to heal an ally within 120 ft of me that I can see", "I can spend up to half my druid level worth of dice from the pool at once", "The ally heals an amount equal to the total rolled and gains 1 temp HP per die spent" ]), usages : levels.map(function (n) { return n < 2 ? "" : n + "d6 per "; }), recovery : "long rest", action : [["bonus action", ""]] }, "subclassfeature6" : { name : "Hearth of Moonlight and Shadow", source : [["X", 22]], minlevel : 6, description : desc([ "At the start of a rest, I can create a 30-ft radius invisible magical sphere", "The sphere extends from a point in space I touch, but doesn't extend through total cover", "Within this area, my allies and I gain +5 on Wis (Perception) and Dex (Stealth) checks", "Also, any light from open flames that are in the sphere is invisible from outside the area", "This effect lasts until the end of the rest or when I leave the sphere" ]) }, "subclassfeature10" : { name : "Hidden Paths", source : [["X", 22]], minlevel : 10, description : desc([ "As a bonus action, I can teleport myself up to 60 ft to a spot I can see", "As an action, I can teleport a willing ally I touch up to 30 ft to a spot I can see" ]), usages : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest", action : [["bonus action", ""], ['action', ' (on ally)']] }, "subclassfeature14" : { name : "Walker in Dreams", source : [["X", 23]], minlevel : 14, usages : 1, recovery : "long rest", description : desc([ "When I finish a short rest, I can cast either Dream, Scrying, or Teleportation Circle", "This doesn't require a spell slot or material components; Dream uses me as the messenger", "Teleportation Circle connects to the last place I finished a long rest, if on the same plane" ]), spellcastingBonus : [{ name : "Walker in Dreams", spells : ["dream"], selection : ["dream"], firstCol : 'oncelr' }, { name : "Walker in Dreams", spells : ["scrying"], selection : ["scrying"], firstCol : 'oncelr' }, { name : "Walker in Dreams", spells : ["teleportation circle"], selection : ["teleportation circle"], firstCol : 'oncelr' }], spellChanges : { "dream" : { components : "V,S", compMaterial : "", changes : "Using Walker in Dreams, I can cast either Dream, Scrying, or Teleportation Circle once per long rest without requiring material components." }, "scrying" : { components : "V,S", compMaterial : "", description : "1 crea save or sensor follows it around; or create sensor in familiar location; see book", changes : "Using Walker in Dreams, I can cast either Dream, Scrying, or Teleportation Circle once per long rest without requiring material components." }, "teleportation circle" : { components : "V", compMaterial : "", description : "Create a circle to teleport to the place where I finished my last long rest, if on the same plane; see book", changes : "Using Walker in Dreams, I can cast either Dream, Scrying, or Teleportation Circle once per long rest without requiring material components.\n \u2022 The teleportation circle brings me back to the place where I finished my last long rest." } } } } }); AddSubClass("druid", "circle of the shepherd", { regExpSearch : /^(?=.*(druid|shaman))(?=.*shepherd).*$/i, subname : "Circle of the Shepherd", subnameShort: "Shepherd", source : [["X", 23]], features : { "subclassfeature2" : { name : "Speech of the Woods", source : [["X", 23]], minlevel : 2, description : desc([ "I can talk with beasts, they understand me and I them, to the limit of their intelligence", "This doesn't automatically make me friends with all beasts; Additionally, I learn Sylvan" ]), languageProfs : ["Sylvan"] }, "subclassfeature2.1" : { name : "Spirit Totem", source : [["X", 23]], minlevel : 2, description : desc([ "As a bonus action, I can summon, or move, a spirit to a point I can see within 60 ft", "It is a spectral form of a Bear, Hawk, or Unicorn (my choice), with a 30-ft radius aura", "It is incorporeal, immobile, doesn't counts as a creature or object, and persists for 1 min", "The spirit persists for 1 minute or until I'm incapacitated", "\u2022 Bear: my allies and I, if in the aura, immediately gain 5 + my druid level in temp HP", " While in the aura, my allies and I gain advantage on Strength checks and saves", "\u2022 Hawk: As a reaction, I can grant advantage on an attack vs. a target in the aura", " While in the aura, my allies and I gain advantage on Wisdom (Perception) checks", "\u2022 Unicorn: my allies and I gain advantage on ability checks to detect targets in the aura", " When I cast a healing spell with a spell slot, allies in the aura heal my druid level in HP" ]), usages : 1, recovery : "short rest", action : [["bonus action", ""]] }, "subclassfeature6" : { name : "Mighty Summoner", source : [["X", 24]], minlevel : 6, description : desc("Beasts or Fey I summon with spells get +2 HP per HD and their attacks count as magical"), calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { switch (spellKey) { case "conjure animals" : case "conjure fey" : spellObj.description += "; each +2 HP/HD, magical natural attacks"; return true; case "conjure woodland beings" : spellObj.description = spellObj.description.replace(/fey.*/, "fey; obeys commands if its align. agrees; breaks free if break conc.; +2 HP/HD, magic atks"); return true; } }, "When I use a spell that summons beast or fey creatures, those summons have +2 HP per HD and their attacks count as magical." ] } }, "subclassfeature10" : { name : "Guardian Spirit", source : [["X", 24]], minlevel : 10, description : desc("When a Beast or Fey that I summoned ends its turn in my Spirit Totem aura, it heals"), additional : levels.map(function (n) { return n < 10 ? "" : "heals " + Math.floor(n / 2) + " HP"; }) }, "subclassfeature14" : { name : "Faithful Summons", source : [["X", 24]], minlevel : 14, description : desc([ "When I am reduced to 0 HP or incapacitated against my will, I can cast Conjure Animals", "This is done as if using a 9th-level spell slot to summon 4 beast of my choice up to CR 2", "They appear within 20 ft of me, last 1 hour, and protect me from harm and attack foes" ]), usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Faithful Summons", spells : ["conjure animals"], selection : ["conjure animals"], firstCol : "oncelr" }], spellChanges : { "conjure animals" : { nameShort : "Conjure Animals (level 9)", range : "20 ft", duration : "1 h", description : "Summon 4 CR 2 beasts; protect me from harm and attack foes", changes : "Using my Faithful Summons class feature when I'm reduced to 0 HP, I can cast Conjure Animals as if using a 9th-level spell slot. This then summons 4 beast of my choice up to CR 2 within 20 ft of me without needing concentration." } } } } }); // Add 3 subclasses for the Fighter AddSubClass("fighter", "arcane archer", { regExpSearch : /^(?=.*arcane)(?=.*archer).*$/i, subname : "Arcane Archer", source : [["X", 28]], fullname : "Arcane Archer", abilitySave : 4, features : { "subclassfeature3" : { name : "Arcane Archer's Lore", source : [["X", 28]], minlevel : 3, description : desc([ "I gain proficiency with either the Arcana or Nature skill", "I also learn either the Prestidigitation or the Druidcraft cantrip" ]), skillstxt : "Arcana or Nature", spellcastingBonus : [{ name : "Arcane Archer's Lore", spells : ["druidcraft", "prestidigitation"] }] }, "subclassfeature3.1" : { name : "Arcane Shot", source : [["X", 28]], minlevel : 3, description : desc([ "I can unleash magical effects when I fire an arrow from a short- or longbow", "I can use this once per turn as part of the Attack action, after an attack hits", "I know a number of Arcane Shot Options and learn additional at certain levels", 'Use the "Choose Feature" button above to add Arcane Shots Options to the third page' ]), usages : 2, recovery : "short rest", additional : levels.map( function(n) { return n < 3 ? "" : (n < 7 ? 2 : n < 10 ? 3 : n < 15 ? 4 : n < 18 ? 5 : 6) + " options known"; }), extraname : "Arcane Shot Option", extrachoices : ["Banishing Arrow [Abjuration]", "Beguiling Arrow [Enchantment]", "Bursting Arrow [Evocation]", "Enfeebling Arrow [Necromancy]", "Grasping Arrow [Conjuration]", "Piercing Arrow [Transmutation]", "Seeking Arrow [Divination]", "Shadow Arrow [Illusion]"], extraTimes : levels.map(function (n) { return n < 3 ? 0 : n < 7 ? 2 : n < 10 ? 3 : n < 15 ? 4 : n < 18 ? 5 : 6; }), "banishing arrow [abjuration]" : { name : "Banishing Arrow [Abjuration]", source : [["X", 29]], description : desc([ "The target makes a Cha save or is banished to the Feywild until the end of its next turn", "While banished, its speed is 0 and is incapacitated; It re-appearing in the same spot", "When I reach 18th level, this Arcane Shot Option also does an extra 2d6 force damage" ]), additional : levels.map( function(n) { return n < 18 ? "" : "+2d6 force damage"; }) }, "beguiling arrow [enchantment]" : { name : "Beguiling Arrow [Enchantment]", source : [["X", 29]], description : desc([ "The target takes extra psychic damage and must succeed on a Wisdom save", "If failed, it is charmed by one of my allies within 30 ft of it that I choose", "This lasts until my next turn starts or until the chosen ally attacks the target in any way" ]), additional : levels.map( function(n) { return n < 3 ? "" : "+" + (n < 18 ? 2 : 4) + "d6 damage"; }) }, "bursting arrow [evocation]" : { name : "Bursting Arrow [Evocation]", source : [["X", 29]], description : desc("The target, in addition to the shot, and all creatures within 10 ft of it take damage"), additional : levels.map( function(n) { return n < 3 ? "" : "+" + (n < 18 ? 2 : 4) + "d6 force damage"; }) }, "enfeebling arrow [necromancy]" : { name : "Enfeebling Arrow [Necromancy]", source : [["X", 29]], description : desc([ "The target takes extra necrotic damage and must make a Constitution save", "If failed, the damage of the target's attacks are halved until the start of my next turn" ]), additional : levels.map( function(n) { return n < 3 ? "" : "+" + (n < 18 ? 2 : 4) + "d6 necrotic damage"; }) }, "grasping arrow [conjuration]" : { name : "Grasping Arrow [Conjuration]", source : [["X", 29]], description : desc([ "The target takes extra poison damage as brambles wrap around it for 1 minute", "The brambles give it -10 ft speed and do it slashing damage every round it moves", "These can be removed by it or another as an action with Strength (Athletics) vs. my DC" ]), additional : levels.map( function(n) { return n < 3 ? "" : (n < 18 ? 2 : 4) + "d6 poison/slash. damage"; }) }, "piercing arrow [transmutation]" : { name : "Piercing Arrow [Transmutation]", source : [["X", 29]], description : desc([ "With this I don't roll for the attack, but shoot the arrow in a 30-ft long, 1-ft wide line", "It passes through objects, ignoring cover, but all creatures in the area take damage", "The damage is the same as a normal hit from my attack, plus extra piercing damage", "A creature can make a Dexterity save to reduce the damage by half" ]), additional : levels.map( function(n) { return n < 3 ? "" : "+" + (n < 18 ? 1 : 2) + "d6 piercing damage"; }) }, "seeking arrow [divination]" : { name : "Seeking Arrow [Divination]", source : [["X", 30]], description : desc([ "With this I don't roll for the attack, but I choose a target I have seen in the last minute", "The seeking arrow moves around corners, obstacles, and ignores cover to hit the target", "It is hit if it is within the weapon's range and there is a path for the arrow to get to it", "The target takes the full damage of the attack plus extra force damage", "It can make a Dexterity save to reduce the damage by half; If failed, I know its location" ]), additional : levels.map( function(n) { return n < 3 ? "" : "+" + (n < 18 ? 1 : 2) + "d6 force damage"; }) }, "shadow arrow [illusion]" : { name : "Shadow Arrow [Illusion]", source : [["X", 30]], description : desc([ "The target takes extra psychic damage and must succeed on a Wisdom save", "If failed, the target can't see anything beyond 5 ft until the end of my next turn" ]), additional : levels.map( function(n) { return n < 3 ? "" : "+" + (n < 18 ? 2 : 4) + "d6 psychic damage"; }) } }, "subclassfeature7" : { name : "Magic Arrow", source : [["X", 28]], minlevel : 7, description : desc("Whenever I fire a nonmagical arrow from a short- or longbow, I can make it magical") }, "subclassfeature7.1" : { name : "Curving Shot", source : [["X", 28]], minlevel : 7, description : desc([ "Once per turn when I miss with a magic arrow, I can use a bonus action to redirect it", "I reroll the attack against a different target within 60 ft of the original target" ]), action : [["bonus action", ""]] }, "subclassfeature15" : { name : "Ever-Ready Shot", source : [["X", 28]], minlevel : 15, description : desc("I regain one use of Arcane Shot if I have no more remaining when I roll initiative") } } }); AddSubClass("fighter", "cavalier", { regExpSearch : /cavalier/i, subname : "Cavalier", source : [["X", 30]], fullname : "Cavalier", abilitySave : 1, features : { "subclassfeature3" : { name : "Bonus Proficiency", source : [["X", 30]], minlevel : 3, description : desc([ "I gain proficiency with Animal Handling, History, Insight, Performance, or Persuasion", 'Alternatively, I learn one language; Use the "Choose Feature" button above for this' ]), choices : ["Language proficiency", "Skill proficiency: Animal Handling, History, Insight, Performance, or Persuasion"], "language proficiency" : { name : "Bonus Proficiency", description : desc("I learn one language of my choice"), languageProfs : [1] }, "skill proficiency: animal handling, history, insight, performance, or persuasion" : { name : "Bonus Proficiency", description : desc("I gain proficiency with Animal Handling, History, Insight, Performance, or Persuasion"), skillstxt : "Choose one from: Animal Handling, History, Insight, Performance, or Persuasion" } }, "subclassfeature3.1" : { name : "Born in the Saddle", source : [["X", 30]], minlevel : 3, description : desc([ "I have advantage on saves to avoid falling off my mount, and land on my feet if I fail", "Mounting or dismounting a creature costs me only 5 ft of movement instead of half" ]), savetxt : { adv_vs : ["falling off my mount"] } }, "subclassfeature3.2" : { name : "Unwavering Mark", source : [["X", 30]], minlevel : 3, description : desc([ "If I hit a creature with a melee weapon attack, I mark it until the end of my next turn", "While it is within 5 ft of me, a marked target has disadv. on attacks not directed at me", "If it damages anybody but me, I can make a special melee attack vs. it in my next turn", "This takes a bonus action, but has adv. and adds half my fighter level to the damage", "A mark ends early if I'm incapacitated, die, or somebody else marks the target" ]), usages : "Strength modifier per ", usagescalc : "event.value = Math.max(1, What('Str Mod'));", recovery : "long rest", additional : levels.map(function (n) { return n < 3 ? "" : "+" + Math.floor(n/2) + " damage"; }), calcChanges : { atkCalc : [ function (fields, v, output) { if (v.isMeleeWeapon && classes.known.fighter && classes.known.fighter.level > 2 && (/\b(unwavering.?mark|marked)\b/i).test(v.WeaponTextName)) { output.extraDmg += Math.floor(classes.known.fighter.level / 2); }; }, "If I include the words 'Unwavering Mark' or 'Marked' in the name of a melee weapon, it gets half my fighter level added to its Damage." ] } }, "subclassfeature7" : { name : "Warding Maneuver", source : [["X", 30]], minlevel : 7, description : desc([ "As a reaction when I or a creature within 5 ft is hit, I can try to fend off the strike", "I add 1d8 to the target's AC; If the attack still hits, the target has resistance against it", "I can only do this while wielding a melee weapon or a shield" ]), usages : "Constitution modifier per ", usagescalc : "event.value = Math.max(1, What('Con Mod'));", recovery : "long rest", action : [["reaction", ""]], }, "subclassfeature10" : { name : "Hold the Line", source : [["X", 30]], minlevel : 10, description : desc([ "Creatures provoke opportunity attacks when moving 5 ft or more while within my reach", "If I hit an opportunity attack, the target's speed is reduced to 0 until the end of the turn" ]) }, "subclassfeature15" : { name : "Ferocious Charger", source : [["X", 31]], minlevel : 15, description : desc([ "If I hit a creature after moving 10 ft in a straight line, it must make a Strength save", "If failed, the target is knocked prone; I can do this only once per turn" ]) }, "subclassfeature18" : { name : "Vigilant Defender", source : [["X", 31]], minlevel : 18, description : desc([ "I can make opportunity attacks without using my reaction", "I can do this only once on every creature's turn, except on my own turn", "I can't do this on the same turn that I use my normal reaction" ]) } } }); AddSubClass("fighter", "samurai", { regExpSearch : /samurai/i, subname : "Samurai", source : [["X", 31]], fullname : "Samurai", features : { "subclassfeature3" : { name : "Bonus Proficiency", source : [["X", 31]], minlevel : 3, description : desc([ "I gain proficiency with History, Insight, Performance, or Persuasion", 'Alternatively, I learn one language; Use the "Choose Feature" button above for this' ]), choices : ["Language proficiency", "Skill proficiency: History, Insight, Performance, or Persuasion"], "language proficiency" : { name : "Bonus Proficiency", description : desc("I learn one language of my choice"), languageProfs : [1] }, "skill proficiency: history, insight, performance, or persuasion" : { name : "Bonus Proficiency", description : desc("I gain proficiency with History, Insight, Performance, or Persuasion"), skillstxt : "Choose one from: History, Insight, Performance, or Persuasion" } }, "subclassfeature3.1" : { name : "Fighting Spirit", source : [["X", 31]], minlevel : 3, description : desc([ "As a bonus action, I can give myself advantage on weapon attacks and temporary HP", "This advantage on weapon attack rolls lasts until the end of my current turn" ]), recovery : "long rest", usages : 3, additional : levels.map(function (n) { return n < 3 ? "" : (n < 10 ? 5 : n < 15 ? 10 : 15) + " temporary HP"; }), action : [["bonus action", ""]] }, "subclassfeature7" : { name : "Elegant Courtier", source : [["X", 31]], minlevel : 7, description : desc([ "I can add my Wisdom modifier to any Charisma (Persuasion) checks I make", "I gain proficiency with Wis saves, or if I'm already proficient, either Int or Cha saves" ]), saves : ["Wis"], addMod : { type : "skill", field : "Pers", mod : "max(Wis|0)", text : "I can add my Wisdom modifier to any Charisma (Persuasion) checks I make." } }, "subclassfeature10" : { name : "Tireless Spirit", source : [["X", 31]], minlevel : 10, description : desc("I regain one use of Fighting Spirit if I have no more remaining when I roll initiative") }, "subclassfeature15" : { name : "Rapid Strike", source : [["X", 31]], minlevel : 15, description : desc([ "With the Attack action, I can forgo advantage on one attack to make one extra attack", "This extra attack is part of the same action; I can do this only once per turn" ]) }, "subclassfeature18" : { name : "Strength Before Death", source : [["X", 31]], minlevel : 18, description : desc([ "If I'm reduced to 0 HP but not killed outright, I can delay falling unconscious", "I then immediately take a bonus turn, interrupting the current turn", "While I'm at 0 HP, I suffer damage normally and die if I have 3 failed death saves", "If I'm still at 0 HP at the end of this bonus turn, I fall unconscious" ]), recovery : "long rest", usages : 1 } } }); // Add 3 subclasses for the Monk AddSubClass("monk", "way of the drunken master", { regExpSearch : /^((?=.*drunken)(?=.*master))|((?=.*drunk)((?=.*(monk|monastic))|((?=.*martial)(?=.*(artist|arts)))|((?=.*spiritual)(?=.*warrior)))).*$/i, subname : "Way of the Drunken Master", subnameShort: "Drunken Master", fullname : "Drunken Master", source : [["X", 33]], features : { "subclassfeature3" : { name : "Bonus Proficiencies", source : [["X", 34]], minlevel : 3, description : desc("I gain proficiency with the Performance skill and brewer's supplies"), skills : ["Performance"], toolProfs : ["Brewer's supplies"] }, "subclassfeature3.1" : { name : "Drunken Technique", source : [["X", 34]], minlevel : 3, description : desc("When using Flurry of Blows, I gain the benefits of a Disengage and +10 ft speed this turn") }, "subclassfeature6" : { name : "Tipsy Sway", source : [["X", 34]], minlevel : 6, description : desc("1 ki point: as a reaction if missed in melee, attacker instead hits other I see within 5 ft"), additional : "Standing up from prone costs only 5 ft", action : [["reaction", ""]] }, "subclassfeature11" : { name : "Drunkard's Luck", source : [["X", 34]], minlevel : 11, description : desc("By spending 2 ki points, I can remove disadv. from an ability check, attack roll, or save"), additional : "2 ki points" }, "subclassfeature17" : { name : "Intoxicated Frenzy", source : [["X", 34]], minlevel : 17, description : desc("I can make 3 extra attacks with Flurry of Blows if each is used on a different target") } } }); // Create the Kensei and its weapon options last, so we benefit of all possible weapons that were added RunFunctionAtEnd(function () { var theKenseiSubclassName = AddSubClass("monk", "way of the kensei", { regExpSearch : /kensei/i, subname : "Way of the Kensei", subnameShort: "Kensei", fullname : "Kensei", source : [["X", 34]], features : { "subclassfeature3" : { name : "Path of the Kensei", source : [["X", 34]], minlevel : 3, description : desc([ "I gain proficiency with either calligrapher's supplies or painter's supplies", "Some weapons, that don't have the heavy or special property, are kensei weapons for me", "At least one ranged and one melee weapon, more at higher levels (longbow does qualify)", "With these: proficient, count as a monk weapons, special bonuses depending on type held:", "\u2022 Melee: if I do unarmed strike during an Attack action, +2 AC until my next turn starts", "\u2022 Ranged: as a bonus action, ranged weapon attacks deal +1d4 damage in current turn" ]), action : [["bonus action", " (with ranged)"]], additional : levels.map( function(n) { return n < 3 ? "" : (n < 6 ? 2 : n < 11 ? 3 : n < 17 ? 4 : 5) + " kensei weapons"; }), toolProfs : ["calligrapher's or painter's supplies"], extraname : "Kensei Weapon", extrachoices : [], // add these dynamically, see below extraTimes : levels.map( function(n) { return n < 3 ? 0 : n < 6 ? 2 : n < 11 ? 3 : n < 17 ? 4 : 5; }), calcChanges : { atkAdd : [ function (fields, v) { var theKenseiWeapons = GetFeatureChoice("class", "monk", "subclassfeature3", true); if (theKenseiWeapons.indexOf(v.baseWeaponName) != -1 || ((/kensei/i).test(v.WeaponTextName) && !v.theWea.special && (!(/heavy|special/i).test(fields.Description) || v.baseWeaponName === 'longbow'))) { v.theWea.monkweapon = true; v.theWea.kenseiweapon = true; if (v.isRangedWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'As bonus action with Attack action, +1d4 damage'; }; fields.Proficiency = true; }; }, "For the weapons that I select using the \"Choose Feature\" button on the second page or when I include the word 'Kensei' in the name of a weapon that doesn't have the Heavy or Special attribute, or that is a longbow, that weapon gains the same benefits as any other 'Monk Weapon'.\nIn addition, with ranged 'Kensei Weapons', I can take a bonus action to have that hit, and any other hit after that as part of the same action, do +1d4 damage.", 1 ] } }, "ki-empowered strikes" : { name : "One with the Blade", source : [["X", 34]], minlevel : 6, description : desc("My unarmed strikes and kensei weapon attacks count as magical"), calcChanges : { atkAdd : [ function (fields, v) { if (!v.isSpell && !v.thisWeapon[1] && !v.theWea.isMagicWeapon && !(/counts as( a)? magical/i).test(fields.Description) && (v.baseWeaponName === "unarmed strike" || v.theWea.kenseiweapon)) { fields.Description += (fields.Description ? '; ' : '') + 'Counts as magical'; }; }, "My unarmed strikes and any Kensei Weapons count as magical for overcoming resistances and immunities." ] }, "deft strike" : { name : "Deft Strike", extraname : "Way of the Kensei 6", source : [["X", 35]], description : desc("Once per turn when I hit with a kensei weapon, I can do a martial arts die extra damage"), additional : "1 ki point" }, "sharpen the blade" : { name : "Sharpen the Blade", extraname : "Way of the Kensei 11", source : [["X", 35]], description : desc([ "As a bonus action, I can grant my kensei weapon a bonus to attack and damage rolls", "This bonus is equal to the number of ki points I spend and doesn't stack with magic", "This lasts for 1 minute or until I use this feature again" ]), additional : "1 to 3 ki points", action : [["bonus action", ""]] }, autoSelectExtrachoices : [{ extrachoice : "deft strike" }, { extrachoice : "sharpen the blade", minlevel : 11 }] }, "subclassfeature17" : { name : "Unerring Accuracy", source : [["X", 35]], minlevel : 17, description : desc("Once per turn, if I miss a monk weapon attack on my turn, I can reroll the attack roll") } } }); var itsFea = ClassSubList[theKenseiSubclassName].features.subclassfeature3; for (var weapon in WeaponsList) { var aWea = WeaponsList[weapon]; // skip attacks that are not simple or martial weapons, that have the heavy or special property, are magic weapons, or those that are spells or cantrips if (weapon !== "longbow" && (aWea.isMagicWeapon || !(/simple|martial/i).test(aWea.type) || (/heavy|special/i).test(aWea.description) || aWea.special || (/improvised|gear|spell|cantrip/i).test(aWea.list))) continue; itsFea.extrachoices.push(aWea.name); itsFea[aWea.name.toLowerCase()] = { name : aWea.name, description : "", source : aWea.source, weaponProfs : [false, false, [weapon]], weaponsAdd : { select : [aWea.name] }, submenu : ((/simple/i).test(aWea.type) ? "\x1BSimple weapon, " : "Martial weapon, ") + ((/^(?!.*melee).*\d+.*$/i).test(aWea.range) ? "ranged" : "melee"), prereqeval : 'testSource("' + weapon + '", WeaponsList["' + weapon + '"], "weapExcl") ? "skip" : true;' } } }); // Add 2 subclasses for the Paladin AddSubClass("paladin", "oath of conquest", { regExpSearch : /^((?=.*(knight tyrant|iron mongers))|((?=.*(conquest|tyranny|tyrant))(((?=.*paladin)|((?=.*(exalted|sacred|holy|divine))(?=.*(knight|fighter|warrior|warlord|trooper))))))).*$/i, subname : "Oath of Conquest", subnameShort: "Conquest", source : [["X", 37]], features : { "subclassfeature3" : { name : "Channel Divinity: Conquering Presence", source : [["X", 38]], minlevel : 3, description : desc([ "As an action, all creatures of my choice within a 30-ft radius must make a Wisdom save", "If failed, a target is frightened for 1 minute; It can save again at the end of each turn" ]), action : [["action", ""]], spellcastingExtra : ["armor of agathys", "command", "hold person", "spiritual weapon", "bestow curse", "fear", "dominate beast", "stoneskin", "cloudkill", "dominate person"] }, "subclassfeature3.1" : { name : "Channel Divinity: Guided Strike", source : [["X", 38]], minlevel : 3, description : desc("When I make an attack roll, I can add a +10 bonus to the roll after seeing the d20 roll") }, "subclassfeature7" : { name : "Aura of Conquest", source : [["X", 38]], minlevel : 7, description : desc([ "Creatures that are frightened of me have their speed reduced to 0 while in my aura", "They also take psychic damage whenever they start theirs turn within my aura" ]), additional : levels.map(function (n) { if (n < 7) return ""; return (n < 18 ? 10 : 30) + "-foot aura; " + Math.floor(n / 2) + " psychic damage"; }) }, "subclassfeature15" : { name : "Scornful Rebuke", source : [["X", 38]], minlevel : 15, description : desc([ "Whenever I'm hit with an attack while I'm not incapacitated, the attacker takes damage", "This is psychic damage equal to my Charisma modifier (minimum of 1)" ]) }, "subclassfeature20" : { name : "Invincible Conqueror", source : [["X", 38]], minlevel : 20, description : desc([ "As an action, I can gain the following benefits for 1 minute:", " - I have resistance to all damage", " - I can make an additional attack as part of my Attack action", " - My melee weapons score critical hits on a roll of 19 or 20" ]), recovery : "long rest", usages : 1, action : [["action", ""]] } } }); AddSubClass("paladin", "oath of redemption", { regExpSearch : /^((?=.*redeemer)|((?=.*redemption)(((?=.*paladin)|((?=.*(exalted|sacred|holy|divine))(?=.*(knight|fighter|warrior|warlord|trooper))))))).*$/i, subname : "Oath of Redemption", subnameShort: "Redemption", source : [["X", 38]], features : { "subclassfeature3" : { name : "Channel Divinity: Emissary of Peace", source : [["X", 39]], minlevel : 3, description : desc("As a bonus action, I grant myself +5 on Charisma (Persuasion) checks for 10 minutes"), action : [["bonus action", ""]], spellcastingExtra : ["sanctuary", "sleep", "calm emotions", "hold person", "counterspell", "hypnotic pattern", "otiluke's resilient sphere", "stoneskin", "hold monster", "wall of force"] }, "subclassfeature3.1" : { name : "Channel Divinity: Rebuke the Violent", source : [["X", 39]], minlevel : 3, description : desc([ "As a reaction after a creature within 30 ft attacks and damages another, I can rebuke it", "It takes the same damage as it dealt but as radiant damage, with a Wis save to halve it" ]), action : [["reaction", ""]] }, "subclassfeature7" : { name : "Aura of the Guardian", source : [["X", 39]], minlevel : 7, description : desc([ "As a reaction when an ally within my aura takes damage, I instead take the damage", "This damage can't be reduced in any way; Other effects might still apply to my ally" ]), additional : levels.map(function (n) { return n < 7 ? "" : (n < 18 ? 10 : 30) + "-foot aura"; }), action : [["reaction", ""]] }, "subclassfeature15" : { name : "Protective Spirit", source : [["X", 39]], minlevel : 15, description : desc("At the end of my turn when I'm below half HP and not incapacitated, I regain HP"), additional : levels.map(function (n) { return n < 15 ? "" : "1d6+" + Math.floor(n/2) + " HP"; }) }, "subclassfeature20" : { name : "Emissary of Redemption", source : [["X", 39]], minlevel : 20, description : desc([ "When taking damage from a creature, I take only half and it takes the other half", "This stops working on any that I attack or force to make a save, until I have a long rest" ]), dmgres : ["All from creatures"] } } }); // Add 3 subclasses for the Ranger var XGtE_Ranger_Subclass_Gloom_Stalker = AddSubClass("ranger", "gloom stalker", { regExpSearch : /^(?=.*gloom)(?=.*stalker).*$/i, subname : "Gloom Stalker", source : [["X", 41]], fullname : "Gloom Stalker", features : { "subclassfeature3" : { name : "Dread Ambusher", source : [["X", 42]], minlevel : 3, description : desc([ "I can add my Wisdom modifier to my initiative rolls", "In the first turn of combat I get +10 ft speed and an extra attack with the Attack action", "If I take the Attack action and that extra attack hits, it does +1d8 damage" ]), addMod : { type : "skill", field : "Init", mod : "max(Wis|0)", text : "I can add my Wisdom modifier to my initiative rolls." } }, "subclassfeature3.1" : { name : "Gloom Stalker Magic", source : [["X", 42]], minlevel : 3, description : desc([ "I add a spell to my known spells at level 3, 5, 9, 13, and 17", "These count as ranger spells, but do not count against the number of spells I can know" ]), spellcastingExtra : ["disguise self", "rope trick", "fear", "greater invisibility", "seeming"], spellcastingExtraApplyNonconform : true }, "subclassfeature3.2" : { name : "Umbral Sight", source : [["X", 42]], minlevel : 3, description : desc([ "I gain 60 ft darkvision, or add 30 ft to darkvision if I already had it because of my race", "When I'm in darkness, others gain no benefit from darkvision to detect me" ]), vision : [["Darkvision", "fixed 60"], ["Darkvision", "+30"]] }, "subclassfeature7" : { name : "Iron Mind", source : [["X", 42]], minlevel : 7, description : desc("I gain proficiency with Wis saves, or if I'm already proficient, either Int or Cha saves"), saves : ["Wis"] }, "subclassfeature11" : { name : "Stalker's Flurry", source : [["X", 42]], minlevel : 11, description : desc("Once on each of my turns when I miss a weapon attack, I can make an extra attack") }, "subclassfeature15" : { name : "Shadowy Dodge", source : [["X", 42]], minlevel : 15, description : desc("As a reaction when I'm attacked without adv., I can impose disadv. on the attack roll"), action : [["reaction", " (when attacked)"]] } } }); var XGtE_Ranger_Subclass_Horizon_Walker = AddSubClass("ranger", "horizon walker", { regExpSearch : /^(?=.*horizon)(?=.*walker).*$/i, subname : "Horizon Walker", source : [["X", 42]], fullname : "Horizon Walker", features : { "subclassfeature3" : { name : "Detect Portal", source : [["X", 42]], minlevel : 3, description : desc("As an action, I sense the distance and direction to the closest planar portal within 1 mile"), usages : 1, recovery : "short rest", action : [["action", ""]] }, "subclassfeature3.1" : { name : "Horizon Walker Magic", source : [["X", 42]], minlevel : 3, description : desc([ "I add a spell to my known spells at level 3, 5, 9, 13, and 17", "These count as ranger spells, but do not count against the number of spells I can know" ]), spellcastingExtra : ["protection from evil and good", "misty step", "haste", "banishment", "teleportation circle"], spellcastingExtraApplyNonconform : true }, "subclassfeature3.2" : { name : "Planar Warrior", source : [["X", 42]], minlevel : 3, description : desc([ "As a bonus action, I choose one creature that I can see within 30 ft of me", "All damage from my first weapon attack that hits it on this turn becomes force damage", "In addition, that first hit does extra damage" ]), additional : levels.map(function (n) { return n < 3 ? "" : "+" + (n < 11 ? 1 : 2) + "d8 force damage"; }), action : [["bonus action", ""]] }, "subclassfeature7" : { name : "Ethereal Step", source : [["X", 43]], minlevel : 7, description : desc("As a bonus action, I can cast the Etherealness spell, which lasts until the end of my turn"), usages : 1, recovery : "short rest", spellcastingBonus : [{ name : "Ethereal Step", spells : ["etherealness"], selection : ["etherealness"], firstCol : 'oncesr' }], spellChanges : { "etherealness" : { time : "1 bns", duration : "1 rnd", description : "I go to Ethereal Plane; move there, but able to perceive 60 ft into the normal plane", changes : "Using my Ethereal Step class feature I can cast Etherealness as a bonus action once per short rest, but it only affects myself and lasts until the end of my turn." } } }, "subclassfeature11" : { name : "Distant Strike", source : [["X", 43]], minlevel : 11, description : desc([ "With the Attack action, I can teleport 10 ft before each attack, to a place I can see", "If I attack two different creatures with this action, I get an extra attack against a third" ]) }, "subclassfeature15" : { name : "Spectral Defense", source : [["X", 43]], minlevel : 15, description : desc("As a reaction when an attack damages me, I can give myself resistance vs. that attack"), action : [["reaction", ""]] } } }); var XGtE_Ranger_Subclass_Monster_Slayer = AddSubClass("ranger", "monster slayer", { regExpSearch : /^(?=.*monster)(?=.*slayer).*$/i, subname : "Monster Slayer", source : [["X", 43]], fullname : "Monster Slayer", features : { "subclassfeature3" : { name : "Hunter's Sense", source : [["X", 43]], minlevel : 3, description : desc([ "As an action, I learn vulnerabilities/immunities/resistances of a target I see within 60 ft", "If it is protected from divination magic, I sense it has none of these" ]), action : [["action", ""]], usages : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest" }, "subclassfeature3.1" : { name : "Monster Slayer Magic", source : [["X", 43]], minlevel : 3, description : desc("I get bonus spells known, which do not count against the number of spells I can know"), spellcastingExtra : ["protection from evil and good", "zone of truth", "magic circle", "banishment", "hold monster"], spellcastingExtraApplyNonconform : true }, "subclassfeature3.2" : { name : "Slayer's Prey", source : [["X", 43]], minlevel : 3, description : desc([ "As a bonus action, I designate a creature I see within 60 ft; This lasts until I do this again", "My first hit to the target with a weapon attack on each of my turns does +1d6 damage" ]), action : [["bonus action", ""]] }, "subclassfeature7" : { name : "Supernatural Defense", source : [["X", 43]], minlevel : 7, description : desc([ "I add 1d6 to saving throws the current target of my Slayer's Prey forces me to make", "In addition, I also add 1d6 to checks to escape that target's grapple" ]) }, "subclassfeature11" : { name : "Magic-User's Nemesis", source : [["X", 43]], minlevel : 11, description : desc([ "As a reaction when I see someone within 60 ft casting a spell or teleporting, I can foil it", "The target must make a Wisdom save or have its spell or teleport fail and be wasted" ]), action : [["reaction", ""]], usages : 1, recovery : "short rest" }, "subclassfeature15" : { name : "Slayer's Counter", source : [["X", 43]], minlevel : 15, description : desc([ "As a reaction when the target of my Slayer's Prey has me make a save, I can attack it", "I can make one weapon attack; If this hits, I automatically succeed on the saving throw" ]), action : [["reaction", ""]] } } }); // Add all three subclasses to the revised ranger as well, if it exists if (ClassList.rangerua) { ClassList.rangerua.subclasses[1].push(XGtE_Ranger_Subclass_Gloom_Stalker, XGtE_Ranger_Subclass_Horizon_Walker, XGtE_Ranger_Subclass_Monster_Slayer); }; // Add 4 subclasses for the Rogue AddSubClass("rogue", "inquisitive", { regExpSearch : /^(?=.*(rogue|miscreant))(?=.*inquisitive).*$/i, subname : "Inquisitive", source : [["X", 45]], features : { "subclassfeature3" : { name : "Ear for Deceit", source : [["X", 45]], minlevel : 3, description : desc("For Wis (Insight) to sense if another is lying, I can treat a die roll of 7 or lower as an 8") }, "subclassfeature3.1" : { name : "Eye for Detail", source : [["X", 46]], minlevel : 3, description : desc([ "As a bonus action, I can do either of the following:", "\u2022 Make a Wisdom (Perception) check to spot a hidden creature or object", "\u2022 Make an Intelligence (Investigation) check to uncover or decipher clues" ]), action : [["bonus action", ""]] }, "subclassfeature3.2" : { name : "Insightful Fighting", source : [["X", 46]], minlevel : 3, description : desc([ "As a bonus action, I can decipher the tactics of another I can see that's not incapacitated", "I have to make a Wisdom (Insight) check vs. the target's Charisma (Deception) check", "If I succeed, I can use my sneak attack on it even if I don't have adv. (but not if disadv.)", "This benefit lasts for 1 minute or until I successfully use Insightful Fighting again" ]), action : [["bonus action", ""]] }, "subclassfeature9" : { name : "Steady Eye", source : [["X", 46]], minlevel : 9, description : desc([ "I'm more perceptive when I don't move more than half my speed in the same turn", "If so, I gain adv. on Wis (Perception) and Int (Investigation) checks during that turn" ]) }, "subclassfeature13" : { name : "Unerring Eye", source : [["X", 46]], minlevel : 13, description : desc([ "As an action, I can sense magical deceptions within 30 feet of me, but not what it does", "I learn the presence of illusions, shapechanged creatures, or magic designed to deceive" ]), action : [["action", ""]], usages : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest" }, "subclassfeature17" : { name : "Eye for Weakness", source : [["X", 46]], minlevel : 17, description : desc("While my Insightful Fighting is active, I add 3d6 to sneak attacks against that target") } } }); AddSubClass("rogue", "scout", { regExpSearch : /scout/i, subname : "Scout", source : [["X", 47]], features : { "subclassfeature3" : { name : "Skirmisher", source : [["X", 47]], minlevel : 3, description : desc([ "As a reaction when a hostile ends its turn within 5 ft of me, I can move half my speed", "This movement does not provoke attacks of opportunity" ]), action : [["reaction", ""]] }, "subclassfeature3.1" : { name : "Survivalist", source : [["X", 47]], minlevel : 3, description : desc("I gain proficiency and expertise with the Nature and Survival skills"), skills : [['Nature', 'full'], ['Survival', 'full']] }, "subclassfeature9" : { name : "Superior Mobility", source : [["X", 47]], minlevel : 9, description : desc("I gain +10 ft to my walking speed (and swimming/climbing speed, if applicable)"), speed : { allModes : { bonus : "+10", exclude : ["fly", "burrow"] } } }, "subclassfeature13" : { name : "Ambush Master", source : [["X", 47]], minlevel : 13, description : desc([ "I gain advantage on Initiative rolls", "The first creature I hit in the first round of combat becomes an easy target", "Until the start of my next turn, all attacks against the target have advantage" ]), advantages : [["Initiative", true]] }, "subclassfeature17" : { name : "Sudden Strike", source : [["X", 47]], minlevel : 17, description : desc([ "With the Attack action, I can make one additional attack as a bonus action", "This attack can benefit from my Sneak Attack even if I already used it this turn", "However, I still can't use Sneak Attack on a single target more than once per turn" ]), action : [["bonus action", " (with Attack action)"]] } } }); // Add 3 subclasses for the Sorcerer AddSubClass("sorcerer", "divine soul", { // this code includes contributions by SoilentBrad regExpSearch : /^(?=.*divine)(?=.*soul).*$/i, subname : "Divine Soul", source : [["X", 50]], fullname : "Divine Soul", spellcastingList : { "class" : ["cleric", "sorcerer"] }, features : { "subclassfeature1" : { name : "Divine Magic", source : [["X", 50]], minlevel : 1, description : desc([ "When I learn spells/cantrips or replace known, I can also pick from the cleric spell list", "These cleric spells count as sorcerer spells for me", 'I also learn a spell based on my affinity, use the "Choose Feature" button above for this' ]), choices : ["Good", "Evil", "Law", "Chaos", "Neutrality"], "good" : { name : "Divine Magic: Good", description : desc([ "When I learn spells/cantrips or replace known, I can also pick from the cleric spell list", "I also learn Cure Wounds, which doesn't count against my number of spells known", "These count as sorcerer spells for me; I can only replace the bonus spell with a cleric spell" ]), spellcastingBonus : [{ name : "Divine Magic (Good)", "class" : "cleric", level : [1,9], selection : ["cure wounds"] }], dependentChoices : "eagle" }, "evil" : { name : "Divine Magic: Evil", description : desc([ "When I learn spells/cantrips or replace known, I can also pick from the cleric spell list", "I also learn Inflict Wounds, which doesn't count against my number of spells known", "These count as sorcerer spells for me; I can only replace the bonus spell with a cleric spell" ]), spellcastingBonus : [{ name : "Divine Magic (Evil)", "class" : "cleric", level : [1,9], selection : ["inflict wounds"] }], dependentChoices : "bat" }, "law" : { name : "Divine Magic: Law", description : desc([ "When I learn spells/cantrips or replace known, I can also pick from the cleric spell list", "I also learn Bless, which doesn't count against my number of spells known", "These count as sorcerer spells for me; I can only replace the bonus spell with a cleric spell" ]), spellcastingBonus : [{ name : "Divine Magic (Law)", "class" : "cleric", level : [1,9], selection : ["bless"] }], dependentChoices : "eagle" }, "chaos" : { name : "Divine Magic: Chaos", description : desc([ "When I learn spells/cantrips or replace known, I can also pick from the cleric spell list", "I also learn Bane, which doesn't count against my number of spells known", "These count as sorcerer spells for me; I can only replace the bonus spell with a cleric spell" ]), spellcastingBonus : [{ name : "Divine Magic (Chaos)", "class" : "cleric", level : [1,9], selection : ["bane"] }], dependentChoices : "bat" }, "neutrality" : { name : "Divine Magic: Neutrality", description : desc([ "When I learn spells/cantrips or replace known, I can also pick from the cleric spell list", "I learn Protection from Evil \xD7 Good; It doesn't count against my number of spells known", "These count as sorcerer spells for me; I can only replace the bonus spell with a cleric spell" ]), spellcastingBonus : [{ name : "Divine Magic (Neutrality)", "class" : "cleric", level : [1,9], selection : ["protection from evil and good"] }], dependentChoices : "dragonfly" }, choiceDependencies : [{ feature : "subclassfeature14", choiceAttribute : true }] }, "subclassfeature1.2" : { name : "Favored by the Gods", source : [["X", 50]], minlevel : 1, description : desc("If I fail a saving throw or miss with an attack roll, I can add 2d4 to the total"), recovery : "short rest", usages : 1 }, "subclassfeature6" : { name : "Empowered Healing", source : [["X", 50]], minlevel : 6, description : desc([ "Once per turn, when I or an ally in 5 ft roll dice to healing with a spell, I can reroll dice", "By spending 1 sorcery point; I can reroll any number of those dice for that spell once" ]), additional : "1 sorcery point" }, "subclassfeature14" : { name : "Otherworldy Wings", source : [["X", 50]], minlevel : 14, description : desc([ "As a bonus action, I can manifest a pair of spectral wings that give me 30 ft fly speed", "These wings last until I become incapacitated or I dismiss them as a bonus action" ]), choices : ["eagle", "bat", "dragonfly"], choicesNotInMenu : true, "eagle" : { name : "Otherworldy Wings", description : desc([ "As a bonus action, I manifest a pair of spectral eagle wings, giving me 30 ft fly speed", "These wings last until I become incapacitated or I dismiss them as a bonus action" ]) }, "bat" : { name : "Otherworldy Wings", description : desc([ "As a bonus action, I manifest a pair of spectral bat wings, giving me 30 ft fly speed", "These wings last until I become incapacitated or I dismiss them as a bonus action" ]) }, "dragonfly" : { name : "Otherworldy Wings", description : desc([ "As a bonus action, I create a pair of spectral dragonfly wings, giving me 30 ft fly speed", "These wings last until I become incapacitated or I dismiss them as a bonus action" ]) }, action : [["bonus action", ""]], speed : { fly : { spd : 30, enc : 20 } } }, "subclassfeature18" : { name : "Unearthly Recovery", source : [["X", 50]], minlevel : 18, description : desc([ "As a bonus action when I have less than half of my max HP remaining, I can heal myself", "I regain a number of HP equal to half my hit point maximum" ]), action : [["bonus action", ""]], recovery : "long rest", usages : 1 } } }); AddSubClass("sorcerer", "shadow magic", { regExpSearch : /^(?=.*(sorcerer|witch))(?=.*shadow).*$/i, subname : "Shadow Magic", source : [["X", 50]], fullname : "Shadow Sorcerer", features : { "subclassfeature1" : { name : "Eyes of the Dark", source : [["X", 51]], minlevel : 1, description : desc("I gain 120 ft darkvision"), vision : [["Darkvision", 120]] }, "subclassfeature1.1" : { name : "Strength of the Grave", source : [["X", 51]], minlevel : 1, description : desc([ "When damage reduces me to 0 HP, that isn't radiant damage or a critical hit,", "I can make a Charisma save (DC 5 + damage taken) to drop to 1 HP instead" ]), usages : 1, recovery : "long rest" }, "subclassfeature3" : { name : "Darkness", source : [["X", 51]], minlevel : 3, description : desc([ "I learn Darkness, which doesn't count against my number of spells known", "I can also cast it by spending 2 sorcery points and then I can see through it normally" ]), additional : "2 sorcery points", action : [["action", " (2 sorcery points)"]], spellcastingBonus : [{ name : "Eyes of the Dark", spells : ["darkness"], selection : ["darkness"] }] }, "subclassfeature6" : { name : "Hound of Ill Omen", source : [["X", 51]], minlevel : 6, description : desc([ "As a bonus action, I summon a hound within 30 ft of a creature I see within 120 ft", "The hound has all the stats of a dire wolf with the following exceptions:", "\u2022 It is medium size and counts as a monstrosity not a beast", "\u2022 It starts with a number of temporary hit points equal to half my sorcerer level", "\u2022 At the start of its turn, it automatically knows where the (hidden) target is", "\u2022 It can only move towards and make (opportunity) attack against the target", "\u2022 It can move through other creatures and objects as if they were difficult terrain", "\u2022 It takes 5 force damage if it ends its turn inside an object", "The target has disadvantage on saves vs. my spells while the hound is within 5 ft of it", "It disappears if reduced to 0 HP, if the target is reduced to 0 HP, or after 5 minutes" ]), additional : levels.map(function (n) { return n < 6 ? "" : "3 sorcery points; " + Math.floor(n/2) + " temporary HP"; }), action : [["bonus action", " (3 sorcery points)"]], creaturesAdd : [["Hound of Ill Omen", true]], creatureOptions : [{ name : "Hound of Ill Omen", source : [["X", 51]], size : 3, type : "Monstrosity", alignment : "Unaligned", ac : 14, hp : 37, hd : [5, 10], speed : "50 ft", scores : [17, 15, 15, 3, 12, 7], skills : { "perception" : 3, "stealth" : 4 }, senses : "Adv. on Wis (Perception) checks using hearing/smell;\nAt the start of each turn, knows where the target is", passivePerception : 13, challengeRating : "1", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Bite", ability : 1, damage : [2, 6, "piercing"], range : "Melee (5 ft)", description : "Target must succeed on a DC 13 Strength saving throw or be knocked prone" }], traits : [{ name : "Keen Hearing and Smell", description : "The hound has advantage on Wisdom (Perception) checks that rely on hearing or smell." }, { name : "Pack Tactics", description : "The hound has advantage on an attack roll against a creature if at least one of the hound's allies is within 5 ft of the creature and the ally isn't incapacitated." }], features : [{ name : "Actions", description : "The hound can only move towards its targets and make attacks or opportunity attacks against its target." }, { name : "Temporary Hit Points", description : "When the hound is summoned, it gains temporary HP equal to half my sorcerer level." }, { name : "Shadowy Form", description : "The hound can move through other creatures and objects as if they were difficult terrain. It takes 5 force damage if it ends its turn inside an object." }, { name : "Sign of Ill Omen", description : "While the hound is within 5 ft of its target, that target has disadvantage on saving throws versus my spells." }], header : "Summoned", eval : function(prefix, lvl) { AddTooltip(prefix + 'Comp.Use.HP.Temp', "The hound of ill omen gains half my sorcerer level as temporary HP when created."); }, removeeval : function(prefix, lvl) { AddTooltip(prefix + 'Comp.Use.HP.Temp', ""); }, changeeval : function (prefix, lvl) { if (!classes.known.sorcerer) return; Value(prefix + 'Comp.Use.HP.Temp', Math.floor(classes.known.sorcerer.level / 2)); } }] }, "subclassfeature14" : { name : "Shadow Walk", source : [["X", 51]], minlevel : 14, description : desc([ "As a bonus action when I'm in dim light or darkness, I can teleport up to 120 ft", "The destination has to be unoccupied, within line of sight, and in dim light or darkness" ]), action : [["bonus action", ""]] }, "subclassfeature18" : { name : "Umbral Form", source : [["X", 51]], minlevel : 18, additional : "6 sorcery points", description : desc([ "As a bonus action, I transform into a shadow form for 1 minute", "While transformed, I have resistance to all damage except force and radiant damage", "Also, I can move through other creatures and objects as if they were difficult terrain", "I take 5 force damage if I end my turn inside an object", "This ends early if I end it as a bonus action, I die, or I'm incapacitated" ]), action : [["bonus action", " (6 sorcery points)"]] } } }); // Add 2 subclasses for the Warlock AddSubClass("warlock", "the celestial", { regExpSearch : /^(?=.*warlock)(?=.*celestial).*$/i, subname : "the Celestial", source : [["X", 54]], spellcastingExtra : ["cure wounds", "guiding bolt", "flaming sphere", "lesser restoration", "daylight", "revivify", "guardian of faith", "wall of fire", "flame strike", "greater restoration"], features : { "subclassfeature1" : { name : "Bonus Cantrips", source : [["X", 54]], minlevel : 1, description : desc("I learn the Light and Sacred Flame cantrips, not counting for the number I can know"), spellcastingBonus : [{ name : "Bonus Cantrips", spells : ["light"], selection : ["light"] }, { name : "Bonus Cantrips", spells : ["sacred flame"], selection : ["sacred flame"] }] }, "subclassfeature1.1" : { name : "Healing Light", source : [["X", 54]], minlevel : 1, description : desc([ "As a bonus action, I can heal a creature I can see within 60 ft by expending dice", "I can expend up to my Charisma modifier (min 1) of dice from my pool at a time", "The target heals HP equal to the roll of the dice; I regain all expended dice on a long rest" ]), usages : levels.map(function (n) { return (n + 1) + "d6 per "; }), usagescalc : "event.value = !classes.known.warlock ? '' : (1 + classes.known.warlock.level) + 'd6';", recovery : "long rest", action : [["bonus action", ""]] }, "subclassfeature6" : { name : "Radiant Soul", source : [["X", 55]], minlevel : 6, description : desc([ "I add my Cha modifier once to the fire or radiant damage of cantrips and spells I cast", "This bonus only applies to one target; Also, I have resistance to radiant damage" ]), dmgres : ["Radiant"], calcChanges : { atkCalc : [ function (fields, v, output) { if (v.isSpell && (/fire|radiant/i).test(fields.Damage_Type)) { output.extraDmg += What('Cha Mod'); }; }, "Cantrips and spells that fire or radiant damage get my Charisma modifier added to their damage to one target." ], spellAdd : [ function (spellKey, spellObj, spName) { if (!spellObj.psionic) return genericSpellDmgEdit(spellKey, spellObj, "fire|radiant", "Cha", true); }, "Cantrips and spells that fire or radiant damage get my Charisma modifier added to their damage to one target." ] } }, "subclassfeature10" : { name : "Celestial Resilience", source : [["X", 55]], minlevel : 10, description : desc([ "When I finish a short or long rest, I and up to five allies gain temporary hit points", "I get my warlock level + Cha mod, while my allies get half my warlock level + Cha mod" ]), additional : levels.map(function (n) { return n < 10 ? "" : "Me: " + n + "+Cha mod; Allies: " + Math.floor(n / 2) + "+Cha mod"; }) }, "subclassfeature14" : { name : "Searing Vengeance", source : [["X", 55]], minlevel : 14, description : desc([ "At the start of my turn when I would make a death save, I can instead spring back up", "I recover HP equal to half my current HP maximum, and can then stand up if I choose", "When I do, creatures of my choice within 30 ft take 2d8 + Cha mod in radiant damage", "Damaged creatures are blinded until the end of my current turn" ]), usages : 1, recovery : "long rest" } } }); AddSubClass("warlock", "the hexblade", { // this code includes contributions by SoilentBrad regExpSearch : /^(?=.*hexblade)(?=.*warlock).*$/i, subname : "the Hexblade", source : [["X", 55]], spellcastingExtra : ["shield", "wrathful smite", "blur", "branding smite", "blink", "elemental weapon", "phantasmal killer", "staggering smite", "banishing smite", "cone of cold"], features : { "subclassfeature1" : { name : "Hexblade's Curse", source : [["X", 55]], minlevel : 1, description : desc([ "As a bonus action, I can curse a creature I can see within 30 ft of me for 1 minute", "\u2022 I add my proficiency bonus to damage rolls against the cursed target", "\u2022 My attack rolls against the curse target score a critical hit on a roll of 19 and 20", "\u2022 If the target dies while cursed, I regain HP equal to my warlock level + Cha mod", "The curse ends after 1 minute, when the target dies, I die, or I'm incapacitated" ]), recovery : "short rest", usages : 1, action : [["bonus action", ""]], calcChanges : { atkAdd : [ function (fields, v) { if (!v.isDC && /curse/i.test(v.WeaponTextName) && !v.CritChance) { v.CritChance = 19; fields.Description += (fields.Description ? '; ' : '') + 'Crit on 19-20'; } }, "If I include the word 'Curse' in the name of a weapon, the automation will treat the attack as being against a target of the Hexblade's Curse: adding my proficiency bonus to the damage and adding the increased chance of a critical hit to the description.", 19 ], atkCalc : [ function (fields, v, output) { if ((/curse/i).test(v.WeaponTextName)) output.extraDmg += output.prof; }, ""] } }, "subclassfeature1.1" : { name : "Hex Warrior", source : [["X", 55]], minlevel : 1, description : desc([ "I gain proficiency with medium armor, shields, and martial weapons", "When I finish a long rest, I can imbue one weapon I touch with my will", "Until my next long rest, I can use it with Charisma instead of Strength or Dexterity", "I have to be proficient with the weapon and it can't have the two-handed property", "This benefit also works with every weapon from Pact of the Blade, with no restriction" ]), armorProfs : [false, true, false, true], weaponProfs : [false, true], calcChanges : { atkAdd : [ function (fields, v) { if (What('Cha Mod') > What(AbilityScores.abbreviations[fields.Mod - 1] + ' Mod') && (v.pactWeapon || v.theWea.pactWeapon || /^(?=.*hexblade)(?!.*((^|[^+-]\b)2|\btwo).?hand(ed)?s?\b).*$/i.test(v.WeaponText))) { fields.Mod = 6; }; }, "If I include the word 'Hexblade' in the name of a weapon that is not two-handed, it gets treated as the weapon I imbued to use Charisma instead of Strength or Dexterity, if my Charisma modifier is higher than the ability it would otherwise use. Alternatively, if I have the Pact of the Blade feature, this will also work for any weapons set to be my Pact Weapon." ] } }, "subclassfeature6" : { name : "Accursed Specter", source : [["X", 56]], minlevel : 6, description : desc([ "When I slay a humanoid, I can curse its soul and have it rise as a specter from its corpse", "It has the stats of a specter with temporary hit points equal to half my warlock level", "It rolls initiative and has its own turns, obeying my verbal commands", "It gains a bonus to attack rolls equal to my Charisma modifier (min +0)", "The specter remains until the end of my next long rest, at which point it vanishes" ]), additional : levels.map( function(n) { return n < 6 ? "" : Math.floor(n/2) + " temp HP"; }), usages : 1, recovery : "long rest", creaturesAdd : [["Accursed Specter", true]], creatureOptions : [{ name : "Accursed Specter", nameAlt : ["Accursed Spectre"], source : [["X", 56]], size : 3, type : "Undead", alignment : "Chaotic Evil", ac : 12, hp : 22, hd : [5, 8], speed : "fly 50 ft (hover)", scores : [1, 14, 11, 10, 10, 12], damage_resistances : "acid; cold; fire; lightning; thunder; bludgeoning, piercing, and slashing from nonmagical weapons", damage_immunities : "necrotic, poison", condition_immunities : "charmed, exhaustion, grappled, paralyzed, petrified, poisoned, prone, restrained, unconscious", senses : "Darkvision 60 ft; While in sunlight, disadv. on Wis (Perception) checks using sight", passivePerception : 10, languages : "all languages it knew in life, but can't speak", challengeRating : "1", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Life Drain", ability : 2, damage : [3, 6, "necrotic"], range : "Melee (5 ft)", description : "DC 10 Con save or HP max reduced by same as damage taken until a long rest", modifiers : ["max(oCha|0)", ""], abilitytodamage : false, tooltip : "A target of the specter's life drain must succeed on a DC 10 Constitution saving throw or its hit point maximum is reduced by an amount equal to the damage taken. This reduction lasts until the creature finishes a long rest. The target dies if this effect reduces its hit point maximum to 0." }], traits : [{ name : "Incorporeal Movement", description : "The specter can move through other creatures and objects as if they were difficult terrain. It takes 5 (1d10) force damage if it ends its turn inside an object." }, { name : "Sunlight Sensitivity", description : "While in sunlight, the specter has disadvantage on attack rolls, as well as on Wisdom (Perception) checks that rely on sight." }, { name : "Life Drain", description : "A target of the specter's life drain must succeed on a DC 10 Constitution saving throw or its hit point maximum is reduced by an amount equal to the damage taken. This reduction lasts until the creature finishes a long rest. The target dies if this effect reduces its hit point maximum to 0." }], features : [{ name : "Bound Spirit", description : "The specter obeys my verbal commands and remains in my service until the end of my next long rest, at which point it vanishes to the afterlife. It acts on its own turn with its own initiative." }], header : "Bound Spirit", eval : function(prefix) { AddTooltip(prefix + 'Comp.Use.HP.Temp', "The accursed specter gains half my warlock level as temporary HP when created."); }, removeeval : function(prefix) { AddTooltip(prefix + 'Comp.Use.HP.Temp', ""); }, changeeval : function (prefix, newLvl) { if (!classes.known.warlock) return; Value(prefix + 'Comp.Use.HP.Temp', Math.floor(classes.known.warlock.level / 2)); } }] }, "subclassfeature10" : { name : "Armor of Hexes", source : [["X", 56]], minlevel : 10, description : desc([ "As a reaction when a Hexblade's Curse recipient hits me with an attack, I can roll a d6", "On a result of 4 or higher, the attacks misses me instead, regardless of its d20 roll" ]) }, "subclassfeature14" : { name : "Master of Hexes", source : [["X", 56]], minlevel : 14, description : desc([ "When the target of my Hexblade's Curse dies, I can curse another I can see within 30 ft", "I can't do this while incapacitated and I don't regain HP from the death of the previous" ]) } } }); // Add Warlock Invocations AddWarlockInvocation("Aspect of the Moon (prereq: Pact of the Tome)", { name : "Aspect of the Moon", description : desc("I don't need sleep nor can be forced to by any means; I can rest while doing light activity"), source : [["X", 56], ["UA:RCO", 5]], submenu : "[improves Pact of the Tome]", prereqeval : function(v) { return GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the tome'; }, savetxt : { text : ["Nothing can force me to sleep"] } }); AddWarlockInvocation("Cloak of Flies (prereq: level 5 warlock)", { name : "Cloak of Flies", description : desc([ "As a bonus action, I can surround myself with a 5-ft radius magical aura of buzzing flies", "It lasts until I'm incapacitated or dismiss it as a bonus action; Total cover block the aura", "The aura grants me adv. on Cha (Intimidation), but disadv. on all other Cha checks", "Creatures starting their turn in the aura take my Cha mod (min 0) in poison damage" ]), source : [["X", 56], ["UA:RCO", 5]], submenu : "[warlock level 5+]", prereqeval : function(v) { return classes.known.warlock.level >= 5; }, recovery : "short rest", usages : 1, action : [["bonus action", " (start/stop)"]] }); AddWarlockInvocation("Eldritch Smite (prereq: level 5 warlock, Pact of the Blade)", { name : "Eldritch Smite", description : desc([ "Once per turn when I hit a creature with my pact weapon, I can empower the strike", "By expending a warlock spell slot, the creature takes extra damage and is knocked prone", "It takes 1d8 force damage and another 1d8 force damage per level of the spell slot", "The target is only knocked prone if it is Huge or smaller" ]), source : [["X", 56]], submenu : "[improves Pact of the Blade]", prereqeval : function(v) { return classes.known.warlock.level >= 5 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the blade'; } }); AddWarlockInvocation("Ghostly Gaze (prereq: level 7 warlock)", { name : "Ghostly Gaze", description : desc([ "As an action, I can gain darkvision, and the ability to see through solid objects, out to 30 ft", "Objects appear ghostly to me; This lasts up to 1 minute, while I'm concentrating on this" ]), source : [["X", 56]], submenu : "[warlock level 7+]", prereqeval : function(v) { return classes.known.warlock.level >= 7; }, recovery : "short rest", usages : 1, action : [["action", ""]] }); AddWarlockInvocation("Gift of the Depths (prereq: level 5 warlock)", { name : "Gift of the Depths", description : desc([ "I can breathe underwater and I have a swim speed equal to my walking speed", "Once per long rest, I can cast Water Breathing without using a spell slot (PHB 287)" ]), source : [["X", 57], ["UA:RCO", 6]], submenu : "[warlock level 5+]", spellcastingBonus : [{ name : "Gift of the Depths", spells : ["water breathing"], selection : ["water breathing"], firstCol : 'oncelr' }], prereqeval : function(v) { return classes.known.warlock.level >= 5; }, speed : { swim : { spd : "walk", enc : "walk" } } }); AddWarlockInvocation("Gift of the Ever-Living Ones (prereq: Pact of the Chain)", { name : "Gift of the Ever-Living Ones", description : desc("When I regain HP while my familiar is within 100 ft, I regain the max the dice can roll"), source : [["X", 57], ["UA:RCO", 6]], submenu : "[improves Pact of the Chain]", prereqeval : function(v) { return GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the chain'; } }); AddWarlockInvocation("Grasp of Hadar (prereq: Eldritch Blast cantrip)", { name : "Grasp of Hadar", description : desc("Once per turn when my Eldritch Blast hits a creature, I can move it 10 ft closer to me"), source : [["X", 57], ["UA:RCO", 6]], submenu : "[improves Eldritch Blast]", prereqeval : function(v) { return v.hasEldritchBlast; }, calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == 'eldritch blast') fields.Description += '; Target moved 10 ft to me'; }, "When I hit a creature with my Eldritch Blast cantrip once or more times in a turn, I can move it in a straight line 10 ft closer to me." ] } }); AddWarlockInvocation("Improved Pact Weapon (prereq: Pact of the Blade)", { name : "Improved Pact Weapon", description : desc([ "I can use any pact weapon I create as my spellcasting focus for warlock spells", "Any pact weapon I create is a +1 magic weapon, if it isn't already a +1 magic weapon", "I can now also conjure a shortbow, longbow, or light or heavy crossbow as my pact weapon" ]), source : [["X", 57]], submenu : "[improves Pact of the Blade]", prereqeval : function(v) { return GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the blade'; }, calcChanges : { atkCalc : [ function (fields, v, output) { if ((/^(shortbow|longbow|light crossbow|heavy crossbow)$/).test(v.baseWeaponName) && (/\bpact\b/i).test(v.WeaponTextName)) { v.pactWeapon = true; } // Test if this is a pact weapon, has no + bonus from somewhere else, and doesn't already have a improved pact weapon bonus if (v.pactWeapon && !output.magic) { var bContinue = true; // Now test if this isn't a weaponOptions addition with a static + bonus set to the modifier fields if (v.theWea.isMagicWeapon && v.theWea.modifiers) { // Test the first two modifiers to see if both offer a +1 or more. Returns `true` if one contains no numbers or is less than the improved pact weapon bonus var bContinue = v.theWea.modifiers.slice(0, 2).some(function (n) { if (!n || !/\d/.test(n)) { var nmbr = 0; } else if (isNaN(n)) { var nmbr = n.match(/(^|\+|-)\d+\b/g); nmbr = !nmbr ? 0 : nmbr.reduce(function(a, b) {return Number(a) + Number(b)}); } else { var nmbr = Number(n); } return nmbr < 1; }); } // if the continue boolean wasn't set to false, we can proceed if (bContinue) { v.pactMag = 1; output.magic = 1; } }; }, "If I include the word 'Pact' in a the name of a melee weapon, shortbow, longbow, light crossbow, or heavy crossbow, it will be treated as my Pact Weapon.\n \u2022 If my Pact Weapon doesn't already include a magical bonus in its name and is not a magic weapon with at least a +1 bonus, the calculation will add +1 to its To Hit and Damage.", 290 ], atkAdd : [ function (fields, v) { if ((/^(shortbow|longbow|light crossbow|heavy crossbow)$/).test(v.baseWeaponName) && (/\bpact\b/i).test(v.WeaponTextName)) { v.pactWeapon = true; }; }, "", 90] } }); AddWarlockInvocation("Lance of Lethargy (prereq: Eldritch Blast cantrip)", { name : "Lance of Lethargy", description : desc([ "Once per turn when my Eldritch Blast hits a creature, I can reduce its speed by 10 ft", "This speed reduction lasts until the end of my next turn" ]), source : [["X", 57]], submenu : "[improves Eldritch Blast]", prereqeval : function(v) { return v.hasEldritchBlast; }, calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == 'eldritch blast') fields.Description += '; 1 target -10 ft speed'; }, "Once on each of my turns when I hit a creature with my Eldritch Blast cantrip, I can reduce its speed by 10 ft until the end of my next turn." ] } }); AddWarlockInvocation("Maddening Hex (prereq: level 5 warlock, Hex spell or warlock feature that curses)", { name : "Maddening Hex", description : desc([ "As a bonus action, I cause pain around a target hexed by me that I can see within 30 ft", "It and any of my choice I can see in 5 ft of it take my Cha mod (min 1) in psychic damage", "The Hex spell and all of my warlock features that curse are considered a hex for this" ]), source : [["X", 57]], submenu : "[improves Hex spell or warlock feature that curses]", prereqeval : function(v) { return classes.known.warlock.level >= 5 && (isSpellUsed('hex', true) || (/hexblade/).test(classes.known.warlock.subclass)); }, action : [["bonus action", ""]] }); AddWarlockInvocation("Relentless Hex (prereq: level 7 warlock, Hex spell or warlock feature that curses)", { name : "Relentless Hex", description : desc([ "As a bonus action, I can teleport to a target hexed by me that I can see within 30 ft", "I teleport up to 30 ft to an unoccupied space that I can see within 5 ft of the target" ]), source : [["X", 57]], submenu : "[improves Hex spell or warlock feature that curses]", prereqeval : function(v) { return classes.known.warlock.level >= 7 && (isSpellUsed('hex', true) || (/hexblade/).test(classes.known.warlock.subclass)); }, action : [["bonus action", ""]] }); AddWarlockInvocation("Shroud of Shadow (prereq: level 15 warlock)", { name : "Shroud of Shadow", description : desc("I can cast Invisibility at will, without using spell slots (PHB 254)"), source : [["X", 57], ["UA:RCO", 6]], submenu : "[warlock level 15+]", spellcastingBonus : [{ name : "Shroud of Shadow", spells : ["invisibility"], selection : ["invisibility"], firstCol : 'atwill' }], prereqeval : function(v) { return classes.known.warlock.level >= 15; }, spellChanges : { "invisibility" : { description : "1 crea invisible; attacking/casting makes the crea visible; anything worn/carried also invisible", changes : "With the Shroud of Shadow invocation I can cast Invisibility at will, but when I do so I am unable to cast it using a higher level spell slot." } } }); AddWarlockInvocation("Tomb of Levistus (prereq: level 5 warlock)", { name : "Tomb of Levistus", description : desc([ "As a reaction when I take damage, I can entomb myself in ice until the end of my turn", "During, I get 10 temp. HP per warlock level, which I use to absorb the triggering damage", "After, till the ice is gone, I also get vulnerability to fire, 0 speed, and am incapacitated" ]), source : [["X", 57], ["UA:RCO", 6]], submenu : "[warlock level 5+]", prereqeval : function(v) { return classes.known.warlock.level >= 5; }, recovery : "short rest", usages : 1, action : [["reaction", ""]], additional : levels.map( function(n) { return (n * 10) + " temp HP"; }) }); AddWarlockInvocation("Trickster's Escape (prereq: level 7 warlock)", { name : "Trickster's Escape", description : desc("Once per long rest, I can cast Freedom of Movement on myself without using a spell slot"), source : [["X", 57], ["UA:RCO", 7]], submenu : "[warlock level 7+]", spellcastingBonus : [{ name : "Trickster's Escape", spells : ["freedom of movement"], selection : ["freedom of movement"], firstCol : 'oncelr' }], prereqeval : function(v) { return classes.known.warlock.level >= 7; }, spellChanges : { "freedom of movement" : { range : "Self", description : "Magic can't reduce my speed, paralyze or restrain me; I can use 5 ft to escape nonmagical restrains", changes : "With the Trickster's Escape invocation I can cast Freedom of Movement, but only on myself." } } }); // Add 1 subclass for the Wizard AddSubClass("wizard", "war magic", { regExpSearch : /^(?=.*war)(?=.*(wizard|magic|mage)).*$/i, subname : "War Magic", fullname : "War Mage", source : [["X", 59]], features : { "subclassfeature2" : { //has to be identical to a feature named in the ClassList name : "Arcane Deflection", source : [["X", 59]], minlevel : 2, description : desc([ "As a reaction when I'm hit by an attack, I can gain +2 to my AC against that attack", "As a reaction when I fail a save, I can gain +4 bonus to that saving throw", "After I do either, I can't cast spells other than cantrips until the end of my next turn" ]), action : [["reaction", ""]] }, "subclassfeature2.1" : { name : "Tactical Wit", source : [["X", 60]], minlevel : 2, description : desc("I gain a bonus to my initiative rolls equal to my Intelligence modifier"), addMod : { type : "skill", field : "Init", mod : "max(Int|0)", text : "I can add my Intelligence modifier to initiative rolls." } }, "subclassfeature6" : { name : "Power Surge", source : [["X", 60]], minlevel : 6, description : desc([ "I have a pool of stored power surges that I can use to empower my damaging spells", "I gain a power surge whenever I successfully end a spell with Dispel Magic or Counterspell", "This pool can store a number of power surges equal to my Intelligence modifier (min 1)", "It resets to 1 power surge after a long rest or when I have 0 surges left after a short rest", "When I deal damage with a wizard spell, I can spend a power surge to do extra damage", "One target takes half my wizard level in force damage; I can do this only once per turn" ]), usages : "Resets to 1 after ", usagescalc : "event.value = !event.value || event.value == 'Resets to 1 after ' ? 1 : event.value;", recovery : "long rest", additional : levels.map( function(n) { return n < 6 ? "" : "+" + Math.floor(n/2) + " force damage"; }) }, "subclassfeature10" : { name : "Durable Magic", source : [["X", 60]], minlevel : 10, description : desc("While I'm maintaining concentration on a spell, I gain +2 to AC and all saving throws") }, "subclassfeature14" : { name : "Deflecting Shroud", source : [["X", 60]], minlevel : 14, description : desc([ "When I use my Arcane Deflection feature, magical energy arcs from me to creatures", "Up to 3 targets I can see within 60 ft of me take half my wizard level in force damage" ]), additional : levels.map( function(n) { return n < 14 ? "" : Math.floor(n/2) + " force damage"; }) } } }); // Add feats FeatsList["bountiful luck"] = { name : "Bountiful Luck", source : [["X", 73]], prerequisite : "Being a Halfling", prereqeval : function(v) { return CurrentRace.known.indexOf('halfling') !== -1; }, descriptionFull : "Your people have extraordinary luck, which you have learned to mystically lend to your companions when you see them falter. You're not sure how you do it; you just wish it, and it happens. Surely a sign of fortune's favor!\n When an ally you can see within 30 feet of you rolls a 1 on the d20 for an attack roll, an ability check, or a saving throw, you can use your reaction to let the ally reroll the die. The ally must use the new roll\n When you use this ability, you can't use your Lucky racial trait before the end of your next turn.", description : "When an ally I can see within 30 ft of me rolls a 1 on an attack roll, an ability check, or a saving throw, I can use my reaction to let the ally reroll the die. The ally must use the new roll. When I use this, I can't use my racial Lucky trait until the end of my next turn.", action : [["reaction", ""]] }; FeatsList["dragon fear"] = { name : "Dragon Fear", source : [["X", 74]], prerequisite : "Being a Dragonborn", prereqeval : function(v) { return CurrentRace.known.indexOf('dragonborn') !== -1; }, descriptionFull : "When angered, you radiate menace. You gain the following benefits:\n \u2022 Increase your Strength, Constitution, or Charisma score by 1, to a maximum of 20.\n \u2022 Instead of exhaling destructive energy, you can expend a use of your Breath Weapon trait to roar, forcing each creature of your choice within 30 feet of you to make a Wisdom saving throw (DC 8 + your proficiency bonus + your Charisma modifier). A target automatically succeeds on the save if it can't hear or see you. On a failed save, a target becomes frightened of you for 1 minute. If the frightened target takes any damage, it can repeat the saving throw, ending the effect on itself on a success.", calculate : "event.value = 'I can use my Breath Weapon to roar instead. Chosen creatures within 30 ft that see and hear me must make a DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Cha Mod'))) + ' Wis save (8 + Prof Bonus + Cha mod) or be frightened of me for 1 min. A target can repeat the save whenever it takes damage. [+1 Str, Con, or Cha]';", scorestxt : "+1 Strength, Constitution, or Charisma", action : [['action', 'Breath Weapon or Dragon Fear', 'Breath Weapon']] }; FeatsList["dragon hide"] = { name : "Dragon Hide", source : [["X", 74]], prerequisite : "Being a Dragonborn", prereqeval : function(v) { return CurrentRace.known.indexOf('dragonborn') !== -1; }, descriptionFull : "You manifest scales and claws reminiscent of your draconic ancestors. You gain the following benefits:\n \u2022 Increase your Strength, Constitution, or Charisma score by 1, to a maximum of 20.\n \u2022 Your scales harden. While you aren't wearing armor, you can calculate your AC as 13 + your Dexterity modifier. You can use a shield and still gain this benefit.\n \u2022 You grow retractable claws from the tips of your fingers. Extending or retracting the claws requires no action. The claws are natural weapons, which you can use to make unarmed strikes. If you hit with them, you deal slashing damage equal to 1d4 + your Strength modifier, instead of the normal bludgeoning damage for an unarmed strike.", description : "I gain retractable claws that I can retract or extend, requiring no action. While extended, my unarmed strikes deal 1d4 slashing damage. My scales harden, giving me an AC of 13 + Dexterity modifier + shield when I'm not wearing armor. [+1 Str, Con, or Cha]", scorestxt : "+1 Strength, Constitution, or Charisma", weaponOptions : [{ baseWeapon : "unarmed strike", regExpSearch : /^(?=.*(retractable|dragon))(?=.*claw).*$/i, name : "Retractable Claws", source : [["X", 74]], damage : [1, 4, "slashing"], selectNow : true }], armorOptions : [{ regExpSearch : /^(?=.*(dragon|draconic|scaly))(?=.*(hide|skin|scales|resilience)).*$/i, name : "Dragon Hide", source : [["X", 74]], ac : 13, selectNow : true }] }; FeatsList["drow high magic"] = { name : "Drow High Magic", source : [["X", 74]], prerequisite : "Being a Drow (Dark Elf)", prereqeval : function(v) { return CurrentRace.known.indexOf('dark elf') !== -1; }, descriptionFull : "You learn more of the magic typical of dark elves. You learn the Detect Magic spell and can cast it at will, without expending a spell slot. You also learn Levitate and Dispel Magic, each of which you can cast once without expending a spell slot. You regain the ability to cast those two spells in this way when you finish a long rest. Charisma is your spellcasting ability for all three spells.", description : "I can cast Detect Magic at will, without expending a spell slot. I can also cast Levitate and Dispel Magic without expending a spell slot, but each only once per long rest. Charisma is my spellcasting ability for these three spells.", spellcastingBonus : [{ name : "At will", spellcastingAbility : 6, spells : ["detect magic"], selection : ["detect magic"], firstCol : 'atwill' }, { name : "Once per long rest", spells : ["levitate"], selection : ["levitate"], firstCol : 'oncelr' }, { name : "Once per long rest", spells : ["dispel magic"], selection : ["dispel magic"], firstCol : 'oncelr' }] }; FeatsList["dwarven fortitude"] = { name : "Dwarven Fortitude", source : [["X", 74]], prerequisite : "Being a Dwarf", prereqeval : function(v) { return CurrentRace.known.indexOf('dwarf') !== -1; }, descriptionFull : "You have the blood of dwarf heroes flowing through your veins. You gain the following benefits:\n \u2022 Increase your Constitution score by 1, to a maximum of 20.\n \u2022 Whenever you take the Dodge action in combat, you can spend one Hit Die to heal yourself. Roll the die, add your Constitution modifier, and regain a number of hit points equal to the total (minimum of 1).", description : "Whenever I take the Dodge action in combat, I can spend one Hit Die to heal myself. I roll the die, add my Constitution modifier, and regain a number of hit points equal to the total (minimum of 1). [+1 Constitution]", scores : [0, 0, 1, 0, 0, 0] }; FeatsList["elven accuracy"] = { name : "Elven Accuracy", source : [["X", 74]], prerequisite : "Being an Elf or a Half-Elf", prereqeval : function(v) { return (/elf|eladrin|avariel|grugach|shadar-kai/i).test(CurrentRace.known); }, descriptionFull : "The accuracy of elves is legendary, especially that of elf archers and spellcasters. You have uncanny aim with attacks that rely on precision rather than brute force. You gain the following benefits:\n \u2022 Increase your Dexterity, Intelligence, Wisdom, or Charisma score by 1, to a maximum of 20.\n \u2022 Whenever you have advantage on an attack roll using Dexterity, Intelligence, Wisdom, or Charisma, you can reroll one of the dice once.", description : "Whenever I have advantage on an attack roll that uses Dexterity, Intelligence, Wisdom, or Charisma, I can reroll one of the dice once. [+1 Dexterity, Intelligence, Wisdom, or Charisma]", scorestxt : "+1 Dexterity, Intelligence, Wisdom, or Charisma" }; FeatsList["fade away"] = { name : "Fade Away", source : [["X", 74]], prerequisite : "Being a Gnome", prereqeval : function(v) { return CurrentRace.known.indexOf('gnome') !== -1; }, descriptionFull : "Your people are clever, with a knack for illusion magic. You have learned a magical trick for fading away when you suffer harm. You gain the following benefits:\n \u2022 Increase your Dexterity or Intelligence score by 1, to a maximum of 20.\n \u2022 Immediately after you take damage, you can use a reaction to magically become invisible until the end of your next turn or until you attack, deal damage, or force someone to make a saving throw. Once you use this ability, you can't do so again until you finish a short or long rest.", description : "As a reaction when I take damage, I can magically become invisible until the end of my next turn or until I attack, deal damage, or force someone to make a saving throw. Once I do this, I can't do so again until I finish a short rest. [+1 Dexterity or Intelligence]", scorestxt : "+1 Dexterity or Intelligence", action : [["reaction", ""]], usages : 1, recovery : "short rest" }; FeatsList["fey teleportation"] = { // this code includes contributions by SoilentBrad name : "Fey Teleportation", source : [["X", 74]], prerequisite : "Being a High Elf", prereqeval : function(v) { return CurrentRace.known.indexOf('high elf') !== -1; }, descriptionFull : "Your study of high elven lore has unlocked fey power that few other elves possess, except your eladrin cousins. Drawing on your fey ancestry, you can momentarily stride through the Feywild to shorten your path from one place to another. You gain the following benefits:\n \u2022 Increase your Intelligence or Charisma score by 1, to a maximum of 20.\n \u2022 You learn to speak, read, and write Sylvan.\n \u2022 You learn the Misty Step spell and can cast it once without expending a spell slot. You regain the ability to cast it in this way when you finish a short or long rest. Intelligence is your spellcasting ability for this spell.", description : "I can cast Misty Step without using a spell slot. I can do so once per short rest. Intelligence is my spellcasting ability for this spell. I also learn to speak, read, and write Sylvan. [+1 Intelligence or Charisma]", scorestxt : "+1 Intelligence or Charisma", spellcastingBonus : [{ name : "Once per short rest", spellcastingAbility : 4, spells : ["misty step"], selection : ["misty step"], firstCol : 'oncesr' }], languageProfs : ["Sylvan"], usages : 1, recovery : "short rest" }; FeatsList["flames of phlegethos"] = { name : "Flames of Phlegethos", source : [["X", 74]], prerequisite : "Being a Tiefling", prereqeval : function(v) { return CurrentRace.known.indexOf('tiefling') !== -1; }, descriptionFull : "You learn to call on hellfire to serve your commands. You gain the following benefits:\n \u2022 Increase your Intelligence or Charisma score by 1, to a maximum of 20.\n \u2022 When you roll fire damage for a spell you cast, you can reroll any roll of 1 on the fire damage dice, but you must use the new roll, even if it is another 1.\n \u2022 Whenever you cast a spell that deals fire damage, you can cause flames to wreathe you until the end of your next turn. The flames don't harm you or your possessions, and they shed bright light out to 30 feet and dim light for an additional 30 feet. While the flames are present, any creature within 5 feet of you that hits you with a melee attack takes 1d4 fire damage.", description : "When I cast a fire damage spell, I can reroll any 1 on fire damage dice once. I then sheathe myself in flame until my next turn ends. These shed bright light in 30 ft, dim light in 30 ft and cause any within 5 ft that hit me in melee to take 1d4 fire damage. [+1 Int or Cha]", scorestxt : "+1 Intelligence or Charisma" }; FeatsList["infernal constitution"] = { name : "Infernal Constitution", source : [["X", 75]], prerequisite : "Being a Tiefling", prereqeval : function(v) { return CurrentRace.known.indexOf('tiefling') !== -1; }, descriptionFull : "Fiendish blood runs strong in you, unlocking a resilience akin to that possessed by some fiends. You gain the following benefits:\n \u2022 Increase your Constitution score by 1, to a maximum of 20.\n \u2022 You have resistance to cold and poison damage.\n \u2022 You have advantage on saving throws against being poisoned.", description : "I have resistance to cold and poison damage and I have advantage on saving throws against being poisoned.\n[+1 Constitution]", scores : [0, 0, 1, 0, 0, 0], dmgres : ["Cold", "Poison"], savetxt : { adv_vs : ["poison"] } }; FeatsList["orcish fury"] = { name : "Orcish Fury", source : [["X", 75]], prerequisite : "Being a Half-Orc", prereqeval : function(v) { return (/^(?=.*half)(?=.*orc).*$/i).test(CurrentRace.known); }, descriptionFull : "Your fury burns tirelessly. You gain the following benefits:\n \u2022 Increase your Strength or Constitution score by 1, to a maximum of 20.\n \u2022 When you hit with an attack using a simple or martial weapon, you can roll one of the weapon's damage dice an additional time and add it as extra damage of the weapon's damage type. Once you use this ability, you can't use it again until you finish a short or long rest.\n \u2022 Immediately after you use your Relentless Endurance trait, you can use your reaction to make one weapon attack.", description : "Once per short rest, I can roll an extra damage die for an attack with a simple or martial weapon. In addition, Immediately after I use my Relentless Endurance trait, I can use my reaction to make one weapon attack. [+1 Strength or Constitution]", scorestxt : "+1 Strength or Constitution", action : [["reaction", " (after Relentless Endurance)"]], usages : 1, recovery : "short rest", additional : "extra damage" }; FeatsList["prodigy"] = { name : "Prodigy", source : [["X", 75]], prerequisite : "Being a Half-Elf, Half-Orc, or Human", prereqeval : function(v) { return (/human|^(?=.*half)(?=.*(elf|orc)).*$/i).test(CurrentRace.known); }, descriptionFull : "You have a knack for learning new things. You gain the following benefits:\n \u2022 You gain one skill proficiency of your choice, one tool proficiency of your choice, and fluency in one language of your choice.\n \u2022 Choose one skill in which you have proficiency. You gain expertise with that skill, which means your proficiency bonus is doubled for any ability check you make with it. The skill you choose must be one that isn't already benefiting from a feature, such as Expertise, that doubles your proficiency bonus.", description : "I gain proficiency with one skill of my choice and expertise with it, or expertise with another skill of my choice that I'm already proficient with. I also gain proficiency with one tool of my choice and fluency in one language of my choice.", skillstxt : "Proficiency with any one skill and Expertise with any one skill that you are already proficient with", languageProfs : [1], toolProfs : [["Any tool", 1]] }; FeatsList["second chance"] = { name : "Second Chance", source : [["X", 75]], prerequisite : "Being a Halfling", prereqeval : function(v) { return CurrentRace.known.indexOf('halfling') !== -1; }, descriptionFull : "Fortune favors you when someone tries to strike you. You gain the following benefits:\n \u2022 Increase your Dexterity, Constitution, or Charisma score by 1, to a maximum of 20.\n \u2022 When a creature you can see hits you with an attack roll, you can use your reaction to force that creature to reroll. Once you use this ability, you can't use it again until you roll initiative at the start of combat or until you finish a short or long rest.", description : "When a creature I can see hits me with an attack roll, I can use my reaction to force that creature to reroll. Once I use this ability, I can't do so again until I roll initiative at the start of combat or I finish a short rest. [+1 Dexterity, Constitution, or Charisma]", scorestxt : "+1 Dexterity, Constitution, or Charisma", action : [["reaction", ""]], usages : 1, recovery : "Combat" }; FeatsList["squat nimbleness"] = { name : "Squat Nimbleness", source : [["X", 75]], prerequisite : "Being a Dwarf or a small race", prereqeval : function(v) { return (/dwarf/i).test(CurrentRace.known) || tDoc.getField('Size Category').currentValueIndices === 4; }, descriptionFull : "You are uncommonly nimble for your race. You gain the following benefits:\n \u2022 Increase your Strength or Dexterity score by 1, to a maximum of 20.\n \u2022 Increase your walking speed by 5 feet.\n \u2022 You gain proficiency in the Acrobatics or Athletics skill (your choice).\n \u2022 You have advantage on any Strength (Athletics) or Dexterity (Acrobatics) check you make to escape from being grappled.", description : "My walking speed increases by 5 ft. I gain proficiency in either the Acrobatics or the Athletics skill. I have advantage on Dexterity (Acrobatics) and Strength (Athletics) checks I make to escape from being grappled. [+1 Strength or Dexterity]", scorestxt : "+1 Strength or Dexterity", skillstxt : "Acrobatics or Athletics", speed : { walk : {spd : "+5", enc : "+5" } } }; FeatsList["wood elf magic"] = { name : "Wood Elf Magic", source : [["X", 75]], prerequisite : "Being a Wood Elf", prereqeval : function(v) { return CurrentRace.known.indexOf('wood elf') !== -1; }, descriptionFull : "You learn the magic of the primeval woods, which are revered and protected by your people. You learn one druid cantrip of your choice. You also learn the Longstrider and Pass Without Trace spells, each of which you can cast once without expending a spell slot. You regain the ability to cast these two spells in this way when you finish a long rest. Wisdom is your spellcasting ability for all three spells.", description : "I learn a druid cantrip. In addition, I can cast Longstrider and Pass Without Trace, without expending a spell slot, but each only once per long rest. Wisdom is my spellcasting ability for these three spells.", spellcastingBonus : [{ name : "Druid Cantrip", spellcastingAbility : 5, "class" : "druid", level : [0, 0], firstCol : 'atwill' }, { name : "Once per long rest", spells : ["longstrider"], selection : ["longstrider"], firstCol : 'oncelr' }, { name : "Once per long rest", spells : ["pass without trace"], selection : ["pass without trace"], firstCol : 'oncelr' }] }; // Then add the new spells from XGtE (contains contributions by SoilentBrad) SpellsList["catnap"] = { name : "Catnap", classes : ["artificer", "bard", "sorcerer", "wizard"], source : [["X", 151]], level : 3, school : "Ench", time : "1 a", range : "30 ft", components : "S,M", compMaterial : "A pinch of sand", duration : "10 min", description : "3+1/SL willing crea unconscious for 10 min to gain benefits of short rest; Ends if dmg or 1 a to wake", descriptionFull : "You make a calming gesture, and up to three willing creatures of your choice that you can see within range fall unconscious for the spell's duration. The spell ends on a target early if it takes damage or someone uses an action to shake or slap it awake. If a target remains unconscious for the full duration, that target gains the benefit of a short rest, and it can't be affected by this spell again until it finishes a long rest." + AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, you can target one additional willing creature for each slot level above 3rd." }; SpellsList["cause fear"] = { name : "Cause Fear", classes : ["warlock", "wizard"], source : [["X", 151]], level : 1, school : "Necro", time : "1 a", range : "60 ft", components : "V", duration : "Conc, 1 min", save : "Wis", description : "1+1/SL crea (not construct/undead), each max 30 ft apart, save or frightened; save end of each turn", descriptionFull : "You awaken the sense of mortality in one creature you can see within range. A construct or an undead is immune to this effect. The target must succeed on a Wisdom saving throw or become frightened of you until the spell ends. The frightened target can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success." + AtHigherLevels + "When you cast this spell using a spell slot of 2nd level or higher, you can target one additional creature for each slot level above 1st. The creatures must be within 30 feet of each other when you target them." }; SpellsList["ceremony"] = { name : "Ceremony", classes : ["cleric", "paladin"], source : [["X", 151]], ritual : true, level : 1, school : "Abjur", time : "1 h", range : "Touch", components : "V,S,M\u2020", compMaterial : "25 gp worth of powdered silver, which the spell consumes", duration : "Instantaneous", description : "Perform religious ceremony on target(s) within 10 ft throughout the casting; see book (25gp cons.)", descriptionFull : "You perform a special religious ceremony that is infused with magic. When you cast the spell, choose one of the following rites, the target of which must be within 10 feet of you throughout the casting." + "\n " + toUni("Atonement") + ": You touch one willing creature whose alignment has changed, and you make a DC 20 Wisdom (Insight) check. On a successful check, you restore the target to its original alignment." + "\n " + toUni("Bless Water") + ": You touch one vial of water and cause it to become holy water." + "\n " + toUni("Coming of Age") + ": You touch one humanoid who is a young adult. For the next 24 hours, whenever the target makes an ability check, it can roll a d4 and add the number rolled to the ability check. A creature can benefit from this rite only once." + "\n " + toUni("Dedication") + ": You touch one humanoid who wishes to be dedicated to your god's service. For the next 24 hours, whenever the target makes a saving throw, it can roll a d4 and add the number rolled to the save. A creature can benefit from this rite only once." + "\n " + toUni("Funeral Rite") + ": You touch one corpse, and for the next 7 days, the target can't become undead by any means short of a wish spell." + "\n " + toUni("Wedding") + ": You touch adult humanoids willing to be bonded together in marriage. For the next 7 days, each target gains a +2 bonus to AC while they are within 30 feet of each other. A creature can benefit from this rite again only if widowed." }; SpellsList["chaos bolt"] = { name : "Chaos Bolt", classes : ["sorcerer"], source : [["X", 151], ["G", 67]], level : 1, school : "Evoc", time : "1 a", range : "120 ft", components : "V,S", duration : "Instantaneous", description : "Spell atk 2d8+1d6+1d6/SL dmg, d8s set dmg type, see B; double on d8s: new atk vs. crea in 30 ft", descriptionShorter : "Spell atk 2d8+1d6+1d6/SL dmg, d8s set type, see B; double on d8s: new atk vs. crea in 30 ft", descriptionFull : "You hurl an undulating, warbling mass of chaotic energy at one creature in range. Make a ranged spell attack against the target. On a hit, the target takes 2d8 + 1d6 damage. Choose one of the d8s. The number rolled on that die determines the attack's damage type, as shown below." + "\n\n" + toUni("d8") + "\t" + toUni("Damage Type") + "\n 1\tAcid" + "\n 2\tCold" + "\n 3\tFire" + "\n 4\tForce" + "\n 5\tLightning" + "\n 6\tPoison" + "\n 7\tPsychic" + "\n 8\tThunder" + "\n\n " + "If you roll the same number on both d8s, the chaotic energy leaps from the target to a different creature of your choice within 30 feet of it. Make a new attack roll against the new target, and make a new damage roll, which could cause the chaotic energy to leap again." + "\n " + "A creature can be targeted only once by each casting of this spell." + AtHigherLevels + "When you cast this spell using a spell slot of 2nd level or higher, each target takes 1d6 extra damage of the type rolled for each slot level above 1st.", dynamicDamageBonus : { multipleDmgTypes : { dmgTypes : ["acid", "cold", "fire", "force", "lightning", "poison", "psychic", "thunder"], inDescriptionAs : '' } } }; SpellsList["charm monster"] = { name : "Charm Monster", classes : ["bard", "druid", "sorcerer", "warlock", "wizard"], source : [["X", 151]], level : 4, school : "Ench", time : "1 a", range : "30 ft", components : "V,S", duration : "1 h", save : "Wis", description : "1+1/SL creatures, each max 30 ft apart, save or charmed; adv. on save if me/ally is fighting it", descriptionFull : "You attempt to charm a creature you can see within range. It must make a Wisdom saving throw, and it does so with advantage if you or your companions are fighting it. If it fails the saving throw, it is charmed by you until the spell ends or until you or your companions do anything harmful to it. The charmed creature is friendly to you. When the spell ends, the creature knows it was charmed by you." + AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, you can target one additional creature for each slot level above 4th. The creatures must be within 30 feet of each other when you target them." }; SpellsList["create homunculus"] = { name : "Create Homunculus", classes : ["wizard"], source : [["X", 152]], level : 6, school : "Trans", time : "1 h", range : "Touch", components : "V,S,M\u0192", compMaterial : "Clay, ash, and mandrake root, all of which the spell consumes, and a jewel-encrusted dagger worth at least 1,000 gp", duration : "Instantaneous", description : "I take 2d4 piercing dmg to create a homunculus as my faithful companion; see book (1000gp)", descriptionFull : "While speaking an intricate incantation, you cut yourself with a jewel-encrusted dagger, taking 2d4 piercing damage that can't be reduced in any way. You then drip your blood on the spell's other components and touch them, transforming them into a special construct called a homunculus." + "\n " + "The statistics of the homunculus are in the Monster Manual. It is your faithful companion, and it dies if you die. Whenever you finish a long rest, you can spend up to half your Hit Dice if the homunculus is on the same plane of existence as you. When you do so, roll each die and add your Constitution modifier to it. Your hit point maximum is reduced by the total, and the homunculus's hit point maximum and current hit points are both increased by it. This process can reduce you to no lower than 1 hit point, and the change to your and the homunculus's hit points ends when you finish your next long rest. The reduction to your hit point maximum can't be removed by any means before then, except by the homunculus's death." + "\n " + "You can have only one homunculus at a time. If you cast this spell while your homunculus lives, the spell fails.", dynamicDamageBonus : { doNotProcess : true } // You don't want to do yourself more damage do you? }; SpellsList["crown of stars"] = { name : "Crown of Stars", classes : ["sorcerer", "warlock", "wizard"], source : [["X", 152]], level : 7, school : "Evoc", time : "1 a", range : "Self", components : "V,S", duration : "1 h", description : "7+2/SL motes shed 30-ft light; bonus action to fire one as 120 ft ranged atk for 4d12 Radiant dmg", descriptionShorter : "7+2/SL motes shed 30-ft light; bns a to fire one as 120 ft ranged atk for 4d12 Radiant dmg", descriptionFull : "Seven star-like motes of light appear and orbit your head until the spell ends. You can use a bonus action to send one of the motes streaking toward one creature or object within 120 feet of you. When you do so, make a ranged spell attack. On a hit, the target takes 4d12 radiant damage. Whether you hit or miss, the mote is expended. The spell ends early if you expend the last mote." + "\n " + "If you have four or more motes remaining, they shed bright light in a 30-foot radius and dim light for an additional 30 feet. If you have one to three motes remaining, they shed dim light in a 30-foot radius." + AtHigherLevels + "When you cast this spell using a spell slot of 8th level or higher, the number of motes created increases by two for each slot level above 7th." }; SpellsList["danse macabre"] = { name : "Danse Macabre", classes : ["warlock", "wizard"], source : [["X", 153]], level : 5, school : "Necro", time : "1 a", range : "60 ft", components : "V,S", duration : "Conc, 1 h", description : "5+2/SL small/medium corpses as zombie/skeleton; spellc. mod to atk/dmg; bns a command in 60 ft", descriptionFull : "Threads of dark power leap from your fingers to pierce up to five Small or Medium corpses you can see within range. Each corpse immediately stands up and becomes undead. You decide whether it is a zombie or a skeleton (the statistics for zombies and skeletons are in the Monster Manual), and it gains a bonus to its attack and damage rolls equal to your spellcasting ability modifier." + "\n " + "You can use a bonus action to mentally command the creatures you make with this spell, issuing the same command to all of them. To receive the command, a creature must be within 60 feet of you. You decide what action the creatures will take and where they will move during their next turn, or you can issue a general command, such as to guard a chamber or passageway against your foes. If you issue no commands, the creatures do nothing except defend themselves against hostile creatures. Once given an order, the creatures continue to follow it until their task is complete." + "\n " + "The creatures are under your control until the spell ends, after which they become inanimate once more" + AtHigherLevels + "When you cast this spell using a spell slot of 6th level or higher, you animate up to two additional corpses for each slot level above 5th." }; SpellsList["dawn"] = { name : "Dawn", classes : ["cleric", "wizard"], source : [["X", 153]], level : 5, school : "Evoc", time : "1 a", range : "60 ft", components : "V,S,M\u0192", compMaterial : "A sunburst pendant worth at least 100 gp", duration : "Conc, 1 min", save : "Con", description : "30-ft rad 40-ft high all crea 4d10 Radiant dmg at cast/end turn; bns a move it 60 ft (100gp)", descriptionFull : "The light of dawn shines down on a location you specify within range. Until the spell ends, a 30-foot-radius, 40-foot-high cylinder of bright light glimmers there. This light is sunlight." + "\n " + "When the cylinder appears, each creature in it must make a Constitution saving throw, taking 4d10 radiant damage on a failed save, or half as much damage on a successful one. A creature must also make this saving throw whenever it ends its turn in the cylinder." + "\n " + "If you're within 60 feet of the cylinder, you can move it up to 60 feet as a bonus action on your turn." }; SpellsList["dragon's breath"] = { name : "Dragon's Breath", classes : ["sorcerer", "wizard"], source : [["X", 154]], level : 2, school : "Trans", time : "1 bns", range : "Touch", components : "V,S,M", compMaterial : "A hot pepper", duration : "Conc, 1 min", save : "Dex", description : "1 willing crea: 1 a breathe 15-ft cone all 3d6+1d6/SL Acid/Cold/Fire/Lightn./Poison dmg; save half", descriptionShorter : "1 willing crea: 1 a 15-ft cone 3d6+1d6/SL Acid/Cold/Fire/Lightn/Poison dmg; save half", descriptionFull : "You touch one willing creature and imbue it with the power to spew magical energy from its mouth, provided it has one. Choose acid, cold, fire, lightning, or poison. Until the spell ends, the creature can use an action to exhale energy of the chosen type in a 15-foot cone. Each creature in that area must make a Dexterity saving throw, taking 3d6 damage of the chosen type on a failed save, or half as much damage on a successful one." + AtHigherLevels + "When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d6 for each slot level above 2nd.", dynamicDamageBonus : { multipleDmgTypes : { dmgTypes : ["acid", "cold", "fire", "lightning", "poison"], inDescriptionAs : "Acid/Cold/Fire/Lightn.?/Poison" } } }; SpellsList["druid grove"] = { name : "Druid Grove", classes : ["druid"], source : [["X", 154]], level : 6, school : "Abjur", time : "10 min", range : "Touch", components : "V,S,M\u2020", compMaterial : "Mistletoe, which the spell consumes, that was harvested with a golden sickle under the light of a full moon", duration : "24 h", description : "Protect 30-ft to 90-ft cube outdoors or underground; see book for effects", descriptionFull : "You invoke the spirits of nature to protect an area outdoors or underground. The area can be as small as a 30-foot cube or as large as a 90-foot cube. Buildings and other structures are excluded from the affected area. If you cast this spell in the same area every day for a year, the spell lasts until dispelled." + "\n " + "The spell creates the following effects within the area. When you cast this spell, you can specify creatures as friends who are immune to the effects. You can also specify a password that, when spoken aloud, makes the speaker immune to these effects." + "\n " + "The entire warded area radiates magic. A dispel magic cast on the area, if successful, removes only one of the following effects, not the entire area. That spell's caster chooses which effect to end. Only when all its effects are gone is this spell dispelled." + "\n " + toUni("Solid Fog") + ": You can fill any number of 5-foot squares on the ground with thick fog, making them heavily obscured. The fog reaches 10 feet high. In addition, every foot of movement through the fog costs 2 extra feet. To a creature immune to this effect, the fog obscures nothing and looks like soft mist, with motes of green light floating in the air." + "\n " + toUni("Grasping Undergrowth") + ": You can fill any number of 5-foot squares on the ground that aren't filled with fog with grasping weeds and vines, as if they were affected by an entangle spell. To a creature immune to this effect, the weeds and vines feel soft and reshape themselves to serve as temporary seats or beds." + "\n " + toUni("Grove Guardians") + ": You can animate up to four trees in the area, causing them to uproot themselves from the ground. These trees have the same statistics as an awakened tree, which appears in the Monster Manual, except they can't speak, and their bark is covered with druidic symbols. If any creature not immune to this effect enters the warded area, the grove guardians fight until they have driven off or slain the intruders. The grove guardians also obey your spoken commands (no action required by you) that you issue while in the area. If you don't give them commands and no intruders are present, the grove guardians do nothing. The grove guardians can't leave the warded area. When the spell ends, the magic animating them disappears, and the trees take root again if possible." + "\n " + toUni("Additional Spell Effects") + ": You can place your choice of one of the following magical effects within the warded area:" + "\n \u2022 " + "A constant gust of wind in two locations of your choice" + "\n \u2022 " + "Spike growth in one location of your choice" + "\n \u2022 " + "Wind wall in two locations of your choice" + "\n " + "To a creature immune to this effect, the winds are a fragrant, gentle breeze, and the area of spike growth is harmless." }; SpellsList["enemies abound"] = { name : "Enemies Abound", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["X", 155]], level : 3, school : "Ench", time : "1 a", range : "120 ft", components : "V,S", duration : "Conc, 1 min", save : "Int", description : "1 crea save or regard all creatures it can see as enemies, random targeting; save when damaged to end", descriptionFull : "You reach into the mind of one creature you can see and force it to make an Intelligence saving throw. A creature automatically succeeds if it is immune to being frightened. On a failed save, the target loses the ability to distinguish friend from foe, regarding all creatures it can see as enemies until the spell ends. Each time the target takes damage, it can repeat the saving throw, ending the effect on itself on a success." + "\n " + "Whenever the affected creature chooses another creature as a target, it must choose the target at random from among the creatures it can see within range of the attack, spell, or other ability it's using. If an enemy provokes an opportunity attack from the affected creature, the creature must make that attack if it is able to." }; SpellsList["enervation"] = { name : "Enervation", classes : ["sorcerer", "warlock", "wizard"], source : [["X", 155]], level : 5, school : "Necro", time : "1 a", range : "60 ft", components : "V,S", duration : "Conc, 1 min", save : "Dex", description : "1 crea 2d8+1d8/SL Necrotic dmg, saved: ends; fail: +2d8 dmg and Act to repeat; I heal half; see B", descriptionShorter : "1 crea 2d8+1d8/SL Necro. dmg, save: ends; fail: +2d8 dmg & Act repeat; I heal half; see B", descriptionFull : "A tendril of inky darkness reaches out from you, touching a creature you can see within range to drain life from it. The target must make a Dexterity saving throw. On a successful save, the target takes 2d8 necrotic damage, and the spell ends. On a failed save, the target takes 4d8 necrotic damage, and until the spell ends, you can use your action on each of your turns to automatically deal 4d8 necrotic damage to the target. The spell ends if you use your action to do anything else, if the target is ever outside the spell's range, or if the target has total cover from you." + "\n " + "Whenever the spell deals damage to a target, you regain hit points equal to half the amount of necrotic damage the target takes." + AtHigherLevels + "When you cast this spell using a spell slot of 6th level or higher, the damage increases by 1d8 for each slot level above 5th.", }; SpellsList["far step"] = { name : "Far Step", classes : ["sorcerer", "warlock", "wizard"], source : [["X", 155]], level : 5, school : "Conj", time : "1 bns", range : "Self", components : "V", duration : "Conc, 1 min", description : "At casting and as bonus action for duration, I can teleport 60 ft to a space I can see", descriptionFull : "You teleport up to 60 feet to an unoccupied space you can see. On each of your turns before the spell ends, you can use a bonus action to teleport in this way again." }; SpellsList["find greater steed"] = { name : "Find Greater Steed", classes : ["paladin"], source : [["X", 156]], level : 4, school : "Conj", time : "10 min", range : "30 ft", components : "V,S", duration : "Instantaneous", description : "Gain the services of a steed; can communicate with it telepathically; can share spells with it; see book", descriptionFull : "You summon a spirit that assumes the form of a loyal, majestic mount. Appearing in an unoccupied space within range, the spirit takes on a form you choose: a griffon, a pegasus, a peryton, a dire wolf, a rhinoceros, or a saber-toothed tiger. The creature has the statistics provided in the Monster Manual for the chosen form, though it is a celestial, a fey, or a fiend (your choice) instead of its normal creature type. Additionally, if it has an Intelligence score of 5 or lower, its Intelligence becomes 6, and it gains the ability to understand one language of your choice that you speak." + "\n " + "You control the mount in combat. While the mount is within 1 mile of you, you can communicate with it telepathically. While mounted on it, you can make any spell you cast that targets only you also target the mount." + "\n " + "The mount disappears temporarily when it drops to 0 hit points or when you dismiss it as an action. Casting this spell again re-summons the bonded mount, with all its hit points restored and any conditions removed." + "\n " + "You can't have more than one mount bonded by this spell or find steed at the same time. As an action, you can release a mount from its bond, causing it to disappear permanently." + "\n " + "Whenever the mount disappears, it leaves behind any objects it was wearing or carrying." }; SpellsList["guardian of nature"] = { name : "Guardian of Nature", classes : ["druid", "ranger"], source : [["X", 157]], level : 4, school : "Trans", time : "1 bns", range : "Self", components : "V", duration : "Conc, 1 min", description : "I transform into a Primal Beast (offensive bonuses) or a Great Tree (defensive bonuses); see book", descriptionFull : "A nature spirit answers your call and transforms you into a powerful guardian. The transformation lasts until the spell ends. You choose one of the following forms to assume: Primal Beast or Great Tree." + "\n\n" + toUni("Primal Beast") + ": Bestial fur covers your body, your facial features become feral, and you gain the following benefits:" + "\n \u2022 " + "Your walking speed increases by 10 feet." + "\n \u2022 " + "You gain darkvision with a range of 120 feet." + "\n \u2022 " + "You make Strength-based attack rolls with advantage." + "\n \u2022 " + "Your melee weapon attacks deal an extra 1d6 force damage on a hit." + "\n\n" + toUni("Great Tree") + ": Your skin appears barky, leaves sprout from your hair, and you gain the following benefits:" + "\n \u2022 " + "You gain 10 temporary hit points." + "\n \u2022 " + "You make Constitution saving throws with advantage." + "\n \u2022 " + "You make Dexterity- and Wisdom-based attack rolls with advantage." + "\n \u2022 " + "While you are on the ground, the ground within 15 feet of you is difficult terrain for your enemies." }; SpellsList["healing spirit"] = { // limited usages (https://media.wizards.com/2020/dnd/downloads/XGtE-Errata.pdf) name : "Healing Spirit", classes : ["druid", "ranger"], source : [["X", 157]], level : 2, school : "Conj", time : "1 bns", range : "60 ft", components : "V,S", duration : "Conc, 1 min", description : "5-ft cube; any living crea I see start/enter heals 1d6+1d6/SL HP; 1+spell mod uses; bns a move it 30 ft", descriptionShorter : "5-ft cube; any living start/enter heals 1d6+1d6/SL HP; 1+spell mod uses; bns a move 30 ft", descriptionFull : "You call forth a nature spirit to soothe the wounded. The intangible spirit appears in a space that is a 5-foot cube you can see within range. The spirit looks like a transparent beast or fey (your choice)." + "\n " + "Until the spell ends, whenever you or a creature you can see moves into the spirit's space for the first time on a turn or starts its turn there, you can cause the spirit to restore 1d6 hit points to that creature (no action required). The spirit can't heal constructs or undead. The spirit can heal a number of times equal to 1 + your spellcasting ability modifier (minimum of twice). After healing that number of times, the spirit disappears." + "\n " + "As a bonus action on your turn, you can move the spirit up to 30 feet to a space you can see." + AtHigherLevels + "When you cast this spell using a spell slot of 3rd level or higher, the healing increases by 1d6 for each slot level above 2nd." }; SpellsList["holy weapon"] = { name : "Holy Weapon", classes : ["cleric", "paladin"], source : [["X", 157]], level : 5, school : "Evoc", time : "1 bns", range : "Touch", components : "V,S", duration : "Conc, 1 h", save : "Con", description : "Wea +2d8 Radiant dmg; bns a end spell: 30-ft rad all crea 4d8 Radiant dmg, blind; save half, no blind", descriptionShorter : "wea +2d8 Radiant dmg; bns a end: 30-ft rad all 4d8 Radiant dmg, blind; save half, no blind", descriptionFull : "You imbue a weapon you touch with holy power. Until the spell ends, the weapon emits bright light in a 30-foot radius and dim light for an additional 30 feet. In addition, weapon attacks made with it deal an extra 2d8 radiant damage on a hit. If the weapon isn't already a magic weapon, it becomes one for the duration." + "\n " + "As a bonus action on your turn, you can dismiss this spell and cause the weapon to emit a burst of radiance. Each creature of your choice that you can see within 30 feet of the weapon must make a Constitution saving throw. On a failed save, a creature takes 4d8 radiant damage, and it is blinded for 1 minute. On a successful save, a creature takes half as much damage and isn't blinded. At the end of each of its turns, a blinded creature can make a Constitution saving throw, ending the effect on itself on a success.", dynamicDamageBonus : { multipleDmgMoments : false, skipDmgGroupIfNotMultiple : /(wea .*?radiant dmg.*?)/i } }; SpellsList["illusory dragon"] = { name : "Illusory Dragon", classes : ["wizard"], source : [["X", 157]], level : 8, school : "Illus", time : "1 a", range : "120 ft", components : "S", duration : "Conc, 1 min", save : "W/I", description : "Huge shadowy dragon; see: Wis save or fright.; bns a move 60 ft \u0026 breath wea 7d6 dmg; Int save half", descriptionShorter : "Huge illus.; see: Wis save or fright.; bns a move 60 ft \u0026 breath wea 7d6 dmg; Int save half", descriptionFull : "By gathering threads of shadow material from the Shadowfell, you create a Huge shadowy dragon in an unoccupied space that you can see within range. The illusion lasts for the spell's duration and occupies its space, as if it were a creature." + "\n " + "When the illusion appears, any of your enemies that can see it must succeed on a Wisdom saving throw or become frightened of it for 1 minute. If a frightened creature ends its turn in a location where it doesn't have line of sight to the illusion, it can repeat the saving throw, ending the effect on itself on a success." + "\n " + "As a bonus action on your turn, you can move the illusion up to 60 feet. At any point during its movement, you can cause it to exhale a blast of energy in a 60-foot cone originating from its space. When you create the dragon, choose a damage type: acid, cold, fire, lightning, necrotic, or poison. Each creature in the cone must make an Intelligence saving throw, taking 7d6 damage of the chosen damage type on a failed save, or half as much damage on a successful one." + "\n " + "The illusion is tangible because of the shadow stuff used to create it, but attacks miss it automatically, it succeeds on all saving throws, and it is immune to all damage and conditions. A creature that uses an action to examine the dragon can determine that it is an illusion by succeeding on an Intelligence (Investigation) check against your spell save DC. If a creature discerns the illusion for what it is, the creature can see through it and has advantage on saving throws against its breath.", dynamicDamageBonus : { multipleDmgTypes : { dmgTypes : ["radiant", "necrotic"], inDescriptionAs : '' } } }; SpellsList["infernal calling"] = { name : "Infernal Calling", classes : ["warlock", "wizard"], source : [["X", 158]], level : 5, school : "Conj", time : "1 min", range : "90 ft", components : "V,S,M\u0192", compMaterial : "A ruby worth at least 999 gp", duration : "Conc, 1 h", description : "Summon 1 devil of CR 6+1/SL; hostile to all, obeys my command if to its liking or Cha check; see B", descriptionFull : "Uttering a dark incantation, you summon a devil from the Nine Hells. You choose the devil's type, which must be one of challenge rating 6 or lower, such as a barbed devil or a bearded devil. The devil appears in an unoccupied space that you can see within range. The devil disappears when it drops to 0 hit points or when the spell ends." + "\n " + "The devil is unfriendly toward you and your companions. Roll initiative for the devil, which has its own turns. It is under the Dungeon Master's control and acts according to its nature on each of its turns, which might result in its attacking you if it thinks it can prevail, or trying to tempt you to undertake an evil act in exchange for limited service. The DM has the creature's statistics." + "\n " + "On each of your turns, you can try to issue a verbal command to the devil (no action required by you). It obeys the command if the likely outcome is in accordance with its desires, especially if the result would draw you toward evil. Otherwise, you must make a Charisma (Deception, Intimidation, or Persuasion) check contested by its Wisdom (Insight) check. You make the check with advantage if you say the devil's true name. If your check fails, the devil becomes immune to your verbal commands for the duration of the spell, though it can still carry out your commands if it chooses. If your check succeeds, the devil carries out your command \u2014 such as “attack my enemies,” “explore the room ahead,” or “bear this message to the queen” \u2014 until it completes the activity, at which point it returns to you to report having done so." + "\n " + "If your concentration ends before the spell reaches its full duration, the devil doesn't disappear if it has become immune to your verbal commands. Instead, it acts in whatever manner it chooses for 3d6 minutes, and then it disappears." + "\n " + "If you possess an individual devil's talisman, you can summon that devil if it is of the appropriate challenge rating plus 1, and it obeys all your commands, with no Charisma checks required." + AtHigherLevels + "When you cast this spell using a spell slot of 6th level or higher, the challenge rating increases by 1 for each slot level above 5th." }; SpellsList["infestation"] = { name : "Infestation", classes : ["druid", "sorcerer", "warlock", "wizard"], source : [["X", 158]], level : 0, school : "Conj", time : "1 a", range : "30 ft", components : "V,S,M", compMaterial : "A living flea", duration : "Instantaneous", save : "Con", description : "1 crea save or 1d6 Poison dmg and moved 5 ft in random direction; +1d6 at CL 5, 11, and 17", descriptionCantripDie : "1 crea save or `CD`d6 Poison dmg and moved 5 ft in random direction", descriptionFull : "You cause a cloud of mites, fleas, and other parasites to appear momentarily on one creature you can see within range. The target must succeed on a Constitution saving throw, or it takes 1d6 poison damage and moves 5 feet in a random direction if it can move and its speed is at least 5 feet. Roll a d4 for the direction:" + "\n\n" + toUni("d4") + "\t" + toUni("Direction") + "\n 1\tNorth" + "\n 2\tSouth" + "\n 3\tEast" + "\n 4\tWest" + "\n\n " + "This movement doesn't provoke opportunity attacks, and if the direction rolled is blocked, the target doesn't move." + "\n " + "The spell's damage increases by 1d6 when you reach 5th level (2d6), 11th level (3d6), and 17th level (4d6)." }; SpellsList["invulnerability"] = { name : "Invulnerability", classes : ["wizard"], source : [["X", 160]], level : 9, school : "Abjur", time : "1 a", range : "Self", components : "V,S,M\u2020", compMaterial : "A small piece of adamantine worth at least 500 gp, which the spell consumes", duration : "Conc, 10 min", description : "Immune to all damage until the spell ends (500gp cons.)", descriptionFull : "You are immune to all damage until the spell ends." }; SpellsList["life transference"] = { // can't reduce damage taken (https://media.wizards.com/2020/dnd/downloads/XGtE-Errata.pdf) name : "Life Transference", classes : ["cleric", "wizard"], source : [["X", 160]], level : 3, school : "Necro", time : "1 a", range : "30 ft", components : "V,S", duration : "Instantaneous", description : "I take 4d8+1d8/SL Necrotic dmg (in full) and 1 crea in range I can see heals twice that in HP", descriptionFull : "You sacrifice some of your health to mend another creature's injuries. You take 4d8 necrotic damage, which can't be reduced in any way, and one creature of your choice that you can see within range regains a number of hit points equal to twice the necrotic damage you take." + AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d8 for each slot level above 3rd." }; SpellsList["maddening darkness"] = { name : "Maddening Darkness", classes : ["warlock", "wizard"], source : [["X", 160]], level : 8, school : "Evoc", time : "1 a", range : "150 ft", components : "V,M", compMaterial : "A drop of pitch mixed with a drop of mercury", duration : "Conc, 10 min", save : "Wis", description : "60-ft rad darkness; darkvision, no light works; all crea starting turn in 8d8 Psychic dmg, save halves", descriptionShorter : "60-ft rad darkness; darkvision, no light works; all start turn in 8d8 Psychic dmg, save half", descriptionFull : "Magical darkness spreads from a point you choose within range to fill a 60-foot-radius sphere until the spell ends. The darkness spreads around corners. A creature with darkvision can't see through this darkness. Nonmagical light, as well as light created by spells of 8th level or lower, can't illuminate the area." + "\n " + "Shrieks, gibbering, and mad laughter can be heard within the sphere. Whenever a creature starts its turn in the sphere, it must make a Wisdom saving throw, taking 8d8 psychic damage on a failed save, or half as much damage on a successful one." }; SpellsList["mass polymorph"] = { name : "Mass Polymorph", classes : ["bard", "sorcerer", "wizard"], source : [["X", 160]], level : 9, school : "Trans", time : "1 a", range : "120 ft", components : "V,S,M", compMaterial : "A caterpillar cocoon", duration : "Conc, 1 h", save : "Wis", description : "10 crea save or take chosen beast form of CR \u2264 its CR or half its char. level; can only act as beast; see B", descriptionFull : "You transform up to ten creatures of your choice that you can see within range. An unwilling target must succeed on a Wisdom saving throw to resist the transformation. An unwilling shapechanger automatically succeeds on the save." + "\n " + "Each target assumes a beast form of your choice, and you can choose the same form or different ones for each target. The new form can be any beast you have seen whose challenge rating is equal to or less than the target's (or half the target's level, if the target doesn't have a challenge rating). The target's game statistics, including mental ability scores, are replaced by the statistics of the chosen beast, but the target retains its hit points, alignment, and personality." + "\n " + "Each target gains a number of temporary hit points equal to the hit points of its new form. These temporary hit points can't be replaced by temporary hit points from another source. A target reverts to its normal form when it has no more temporary hit points or it dies. If the spell ends before then, the creature loses all its temporary hit points and reverts to its normal form." + "\n " + "The creature is limited in the actions it can perform by the nature of its new form. It can't speak, cast spells, or do anything else that requires hands or speech." + "\n " + "The target's gear melds into the new form. The target can't activate, use, wield, or otherwise benefit from any of its equipment." }; SpellsList["mental prison"] = { name : "Mental Prison", classes : ["sorcerer", "warlock", "wizard"], source : [["X", 161]], level : 6, school : "Illus", time : "1 a", range : "60 ft", components : "S", duration : "Conc, 1 min", save : "Int", description : "1 crea 5d10 Psychic dmg; save or restrained, blind, deaf, and if moved: 10d10 dmg, ends; charm effect", descriptionShorter : "1 crea 5d10 Psychic dmg; save or restrained, blind, deaf, if move: 10d10 dmg, ends; charm", descriptionFull : "You attempt to bind a creature within an illusory cell that only it perceives. One creature you can see within range must make an Intelligence saving throw. The target succeeds automatically if it is immune to being charmed. On a successful save, the target takes 5d10 psychic damage, and the spell ends. On a failed save, the target takes 5d10 psychic damage, and you make the area immediately around the target's space appear dangerous to it in some way. You might cause the target to perceive itself as being surrounded by fire, floating razors, or hideous maws filled with dripping teeth. Whatever form the illusion takes, the target can't see or hear anything beyond it and is restrained for the spell's duration. If the target is moved out of the illusion, makes a melee attack through it, or reaches any part of its body through it, the target takes 10d10 psychic damage, and the spell ends.", dynamicDamageBonus : { multipleDmgMoments : false, extraDmgGroupsSameType : /(if moved?: )((?:\+?\d+d?\d*)+)/i } }; SpellsList["mighty fortress"] = { name : "Mighty Fortress", classes : ["wizard"], source : [["X", 161]], level : 8, school : "Conj", time : "1 min", range : "1 mile", components : "V,S,M\u2020", compMaterial : "A diamond worth at least 500 gp, which the spell consumes", duration : "Instantaneous", description : "Create a stone fortress 120 ft on a side for 7 days; see book for effects (500gp cons.)", descriptionFull : "A fortress of stone erupts from a square area of ground of your choice that you can see within range. The area is 120 feet on each side, and it must not have any buildings or other structures on it. Any creatures in the area are harmlessly lifted up as the fortress rises." + "\n " + "The fortress has four turrets with square bases, each one 20 feet on a side and 30 feet tall, with one turret on each corner. The turrets are connected to each other by stone walls that are each 80 feet long, creating an enclosed area. Each wall is 1 foot thick and is composed of panels that are 10 feet wide and 20 feet tall. Each panel is contiguous with two other panels or one other panel and a turret. You can place up to four stone doors in the fortress's outer wall." + "\n " + "A small keep stands inside the enclosed area. The keep has a square base that is 50 feet on each side, and it has three floors with 10-foot-high ceilings. Each of the floors can be divided into as many rooms as you like, provided each room is at least 5 feet on each side. The floors of the keep are connected by stone staircases, its walls are 6 inches thick, and interior rooms can have stone doors or open archways as you choose. The keep is furnished and decorated however you like, and it contains sufficient food to serve a nine-course banquet for up to 100 people each day. Furnishings, food, and other objects created by this spell crumble to dust if removed from the fortress." + "\n " + "A staff of one hundred invisible servants obeys any command given to them by creatures you designate when you cast the spell. Each servant functions as if created by the unseen servant spell." + "\n " + "The walls, turrets, and keep are all made of stone that can be damaged. Each 10-foot-by-10-foot section of stone has AC 15 and 30 hit points per inch of thickness. It is immune to poison and psychic damage. Reducing a section of stone to 0 hit points destroys it and might cause connected sections to buckle and collapse at the DM's discretion." + "\n " + "After 7 days or when you cast this spell somewhere else, the fortress harmlessly crumbles and sinks back into the ground, leaving any creatures that were inside it safely on the ground." + "\n " + "Casting this spell on the same spot once every 7 days for a year makes the fortress permanent." }; SpellsList["mind spike"] = { // +1d8 at higher levels errata (https://media.wizards.com/2020/dnd/downloads/XGtE-Errata.pdf) name : "Mind Spike", classes : ["sorcerer", "warlock", "wizard"], source : [["X", 162]], level : 2, school : "Div", time : "1 a", range : "60 ft", components : "S", duration : "Conc, 1 h", save : "Wis", description : "1 crea 3d8+1d8/SL Psychic dmg, know its location, can't be invis for me; save half, no other benefits", descriptionShorter : "1 crea 3d8+1d8/SL Psychic dmg, know its location, can't be invis for me; save half, not rest", descriptionFull : "You reach into the mind of one creature you can see within range. The target must make a Wisdom saving throw, taking 3d8 psychic damage on a failed save, or half as much damage on a successful one. On a failed save, you also always know the target's location until the spell ends, but only while the two of you are on the same plane of existence. While you have this knowledge, the target can't become hidden from you, and if it's invisible, it gains no benefit from that condition against you." + AtHigherLevels + "When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d8 for each slot level above 2nd.", dynamicDamageBonus : { multipleDmgMoments : false } }; SpellsList["negative energy flood"] = { name : "Negative Energy Flood", classes : ["warlock", "wizard"], source : [["X", 163]], level : 5, school : "Necro", time : "1 a", range : "60 ft", components : "V,M", compMaterial : "A broken bone and a square of black silk", duration : "Instantaneous", save : "Con", description : "1 crea: living 5d12 Necrotic dmg, save halves, rises as zombie if killed; undead 5d12/2 temp HP", descriptionFull : "You send ribbons of negative energy at one creature you can see within range. Unless the target is undead, it must make a Constitution saving throw, taking 5d12 necrotic damage on a failed save, or half as much damage on a successful one. A target killed by this damage rises up as a zombie at the start of your next turn. The zombie pursues whatever creature it can see that is closest to it. Statistics for the zombie are in the Monster Manual." + "\n " + "If you target an undead with this spell, the target doesn't make a saving throw. Instead, roll 5d12. The target gains half the total as temporary hit points." }; SpellsList["power word pain"] = { name : "Power Word Pain", classes : ["sorcerer", "warlock", "wizard"], source : [["X", 163]], level : 7, school : "Ench", time : "1 a", range : "60 ft", components : "V", duration : "Instantaneous", description : "1 crea with 100 HP or less disadv. atk/check/save, conc. save to cast; save/rnd to end; charm effect", descriptionFull : "You speak a word of power that causes waves of intense pain to assail one creature you can see within range. If the target has 100 hit points or fewer, it is subject to crippling pain. Otherwise, the spell has no effect on it. A target is also unaffected if it is immune to being charmed." + "\n " + "While the target is affected by crippling pain, any speed it has can be no higher than 10 feet. The target also has disadvantage on attack rolls, ability checks, and saving throws, other than Constitution saving throws. Finally, if the target tries to cast a spell, it must first succeed on a Constitution saving throw, or the casting fails and the spell is wasted." + "\n " + "A target suffering this pain can make a Constitution saving throw at the end of each of its turns. On a successful save, the pain ends." }; SpellsList["primal savagery"] = { name : "Primal Savagery", classes : ["druid"], source : [["X", 163]], level : 0, school : "Trans", time : "1 a", range : "Self", components : "S", duration : "Instantaneous", description : "Melee spell attack, 5 ft range, for 1d10 Acid dmg; +1d10 at CL 5, 11, and 17", descriptionCantripDie : "Melee spell attack, 5 ft range, for `CD`d10 Acid dmg", descriptionFull : "You channel primal magic to cause your teeth or fingernails to sharpen, ready to deliver a corrosive attack. Make a melee spell attack against one creature within 5 feet of you. On a hit, the target takes 1d10 acid damage. After you make the attack, your teeth or fingernails return to normal." + "\n " + "The spell's damage increases by 1d10 when you reach 5th level (2d10), 11th level (3d10), and 17th level (4d10)." }; SpellsList["psychic scream"] = { name : "Psychic Scream", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["X", 163]], level : 9, school : "Ench", time : "1 a", range : "90 ft", components : "S", duration : "Instantaneous", save : "Int", description : "10 crea Int>2 save or 14d6 Psychic dmg and stunned; save halves, no stun; end of turn save to stop", descriptionFull : "You unleash the power of your mind to blast the intellect of up to ten creatures of your choice that you can see within range. Creatures that have an Intelligence score of 2 or lower are unaffected." + "\n " + "Each target must make an Intelligence saving throw. On a failed save, a target takes 14d6 psychic damage and is stunned. On a successful save, a target takes half as much damage and isn't stunned. If a target is killed by this damage, its head explodes, assuming it has one." + "\n " + "A stunned target can make an Intelligence saving throw at the end of each of its turns. On a successful save, the stunning effect ends." }; SpellsList["scatter"] = { name : "Scatter", classes : ["sorcerer", "warlock", "wizard"], source : [["X", 164]], level : 6, school : "Conj", time : "1 a", range : "30 ft", components : "V", duration : "Instantaneous", save : "Wis", description : "Up to 5 creatures in range, save or teleported 120 ft to a different space I can see on the ground", descriptionFull : "The air quivers around up to five creatures of your choice that you can see within range. An unwilling creature must succeed on a Wisdom saving throw to resist this spell. You teleport each affected target to an unoccupied space that you can see within 120 feet of you. That space must be on the ground or on a floor." }; SpellsList["shadow blade"] = { name : "Shadow Blade", classes : ["sorcerer", "warlock", "wizard"], source : [["X", 164]], level : 2, school : "Illus", time : "1 bns", range : "Self", components : "V,S", duration : "Conc, 1 min", description : "Sword 2d8 Psychic dmg, finesse, light, thrown (20/60 ft), adv. if target in dim/dark; +1d8 at SL3/5/7", descriptionMetric : "Sword: 2d8 Psychic dmg, finesse, light, thrown (6/18 m), adv. if target in dim/dark; +1d8 at SL3/5/7", descriptionShorter : "Sword 2d8 Psychic dmg, finesse, light, thrown (20/60ft), adv. in dim/dark; +1d8 SL3/5/7", descriptionShorterMetric : "Sword 2d8 Psychic dmg, finesse, light, thrown (6/18 m), adv. in dim/dark; +1d8 SL3/5/7", descriptionFull : "You weave together threads of shadow to create a sword of solidified gloom in your hand. This magic sword lasts until the spell ends. It counts as a simple melee weapon with which you are proficient. It deals 2d8 psychic damage on a hit and has the finesse, light, and thrown properties (range 20/60). In addition, when you use the sword to attack a target that is in dim light or darkness, you make the attack roll with advantage." + "\n " + "If you drop the weapon or throw it, it dissipates at the end of the turn. Thereafter, while the spell persists, you can use a bonus action to cause the sword to reappear in your hand." + AtHigherLevels + "When you cast this spell using a 3rd- or 4th-level spell slot, the damage increases to 3d8. When you cast it using a 5th- or 6th-level spell slot, the damage increases to 4d8. When you cast it using a spell slot of 7th level or higher, the damage increases to 5d8." }; WeaponsList["shadow blade"] = { regExpSearch : /(?=.*shadow)(?=.*blade).*$/i, name : "Shadow Blade", source : [["X", 164]], list : "spell", ability : 1, type : "Simple", damage : [2, 8, "psychic"], range : "Melee, 20/60 ft", description : "Finesse, light, thrown; +1d8 at SL3/5/7; Adv. if target in dim light/darkness", abilitytodamage : true, isAlwaysProf : true, useSpellcastingAbility : false }; SpellsList["shadow of moil"] = { name : "Shadow of Moil", classes : ["warlock"], source : [["X", 164]], level : 4, school : "Necro", time : "1 a", range : "Self", components : "V,S,M\u0192", compMaterial : "An undead eyeball encased in a gem worth at least 150 gp", duration : "Conc, 1 min", description : "Me: heavy obsc., Radiant resistance; 10-ft rad: 1 step darker, hit vs. me get 2d8 Necrotic dmg (150gp)", descriptionShorter : "Me: hvy obsc., Radiant resist; 10-ft rad: 1 step darker, hit vs. me 2d8 Necrotic dmg (150gp)", descriptionFull : "Flame-like shadows wreathe your body until the spell ends, causing you to become heavily obscured to others. The shadows turn dim light within 10 feet of you into darkness, and bright light in the same area to dim light." + "\n " + "Until the spell ends, you have resistance to radiant damage. In addition, whenever a creature within 10 feet of you hits you with an attack, the shadows lash out at that creature, dealing it 2d8 necrotic damage." }; SpellsList["sickening radiance"] = { name : "Sickening Radiance", classes : ["sorcerer", "warlock", "wizard"], source : [["X", 164]], level : 4, school : "Evoc", time : "1 a", range : "120 ft", components : "V,S", duration : "Conc, 10 min", save : "Con", description : "30-ft rad all enter/start turn save or 4d10 Radiant dmg, 1 level of exhaustion, and emit 5-ft rad light", descriptionShorter : "30-ft rad all enter/start turn save or 4d10 Radiant dmg, 1 lvl exhaust., emit 5-ft rad light", descriptionFull : "Dim, greenish light spreads within a 30-foot-radius sphere centered on a point you choose within range. The light spreads around corners, and it lasts until the spell ends." + "\n " + "When a creature moves into the spell's area for the first time on a turn or starts its turn there, that creature must succeed on a Constitution saving throw or take 4d10 radiant damage, and it suffers one level of exhaustion and emits a dim, greenish light in a 5-foot radius. This light makes it impossible for the creature to benefit from being invisible. The light and any levels of exhaustion caused by this spell go away when the spell ends." }; SpellsList["skill empowerment"] = { name : "Skill Empowerment", classes : ["artificer", "bard", "sorcerer", "wizard"], source : [["X", 165]], level : 5, school : "Trans", time : "1 a", range : "Touch", components : "V,S", duration : "Conc, 1 h", description : "1 willing creature gains expertise in one skill of my choice that it is proficient with for the duration", descriptionFull : "Your magic deepens a creature's understanding of its own talent. You touch one willing creature and give it expertise in one skill of your choice; until the spell ends, the creature doubles its proficiency bonus for ability checks it makes that use the chosen skill." + "\n " + "You must choose a skill in which the target is proficient and that isn't already benefiting from an effect, such as Expertise, that doubles its proficiency bonus." }; SpellsList["snare"] = { name : "Snare", classes : ["artificer", "druid", "ranger", "wizard"], source : [["X", 165]], level : 1, school : "Abjur", time : "1 min", range : "Touch", components : "S,M\u2020", compMaterial : "25 feet of rope, which the spell consumes", duration : "8 h, till trigger", save : "Dex", description : "5-ft rad trap; Investigation vs spell DC to see; save or restrained 3 ft in the air; save each rnd (5sp)", descriptionFull : "As you cast this spell, you use the rope to create a circle with a 5-foot radius on the ground or the floor. When you finish casting, the rope disappears and the circle becomes a magic trap." + "\n " + "This trap is nearly invisible, requiring a successful Intelligence (Investigation) check against your spell save DC to be discerned." + "\n " + "The trap triggers when a Small, Medium, or Large creature moves onto the ground or the floor in the spell's radius. That creature must succeed on a Dexterity saving throw or be magically hoisted into the air, leaving it hanging upside down 3 feet above the ground or the floor. The creature is restrained there until the spell ends." + "\n " + "A restrained creature can make a Dexterity saving throw at the end of each of its turns, ending the effect on itself on a success. Alternatively, the creature or someone else who can reach it can use an action to make an Intelligence (Arcana) check against your spell save DC. On a success, the restrained effect ends." + "\n " + "After the trap is triggered, the spell ends when no creature is restrained by it." }; SpellsList["soul cage"] = { name : "Soul Cage", classes : ["warlock", "wizard"], source : [["X", 165]], level : 6, school : "Necro", time : "1 rea", timeFull : "1 reaction, which you take when a humanoid you can see within 60 feet of you dies", range : "60 ft", components : "V,S,M\u0192", compMaterial : "A tiny silver cage worth 100 gp", duration : "8 h", description : "As a reaction when humanoid in range dies, I capture their soul in a tiny cage; see book (100gp)", descriptionFull : "This spell snatches the soul of a humanoid as it dies and traps it inside the tiny cage you use for the material component. A stolen soul remains inside the cage until the spell ends or until you destroy the cage, which ends the spell. While you have a soul inside the cage, you can exploit it in any of the ways described below. You can use a trapped soul up to six times. Once you exploit a soul for the sixth time, it is released, and the spell ends. While a soul is trapped, the dead humanoid it came from can't be revived." + "\n " + toUni("Steal Life") + ": You can use a bonus action to drain vigor from the soul and regain 2d8 hit points." + "\n " + toUni("Query Soul") + ": You ask the soul a question (no action required) and receive a brief telepathic answer, which you can understand regardless of the language used. The soul knows only what it knew in life, but it must answer you truthfully and to the best of its ability. The answer is no more than a sentence or two and might be cryptic." + "\n " + toUni("Borrow Experience") + ": You can use a bonus action to bolster yourself with the soul's life experience, making your next attack roll, ability check, or saving throw with advantage. If you don't use this benefit before the start of your next turn, it is lost." + "\n " + toUni("Eyes of the Dead") + ": You can use an action to name a place the humanoid saw in life, which creates an invisible sensor somewhere in that place if it is on the plane of existence you're currently on. The sensor remains for as long as you concentrate, up to 10 minutes (as if you were concentrating on a spell). You receive visual and auditory information from the sensor as if you were in its space using your senses" + "\n " + "A creature that can see the sensor (such as one using see invisibility or truesight) sees a translucent image of the tormented humanoid whose soul you caged." }; SpellsList["steel wind strike"] = { name : "Steel Wind Strike", classes : ["ranger", "wizard"], source : [["X", 166]], level : 5, school : "Conj", time : "1 a", range : "30 ft", components : "S,M\u0192", compMaterial : "A melee weapon worth at least 1 sp", duration : "Instantaneous", description : "Melee spell attack vs. 5 crea in range; 6d10 Force dmg on hit; after, I teleport next to one target", descriptionFull : "You flourish the weapon used in the casting and then vanish to strike like the wind. Choose up to five creatures you can see within range. Make a melee spell attack against each target. On a hit, a target takes 6d10 force damage." + "\n " + "You can then teleport to an unoccupied space you can see within 5 feet of one of the targets you hit or missed." }; SpellsList["summon greater demon"] = { name : "Summon Greater Demon", classes : ["warlock", "wizard"], source : [["X", 166]], level : 4, school : "Conj", time : "1 a", range : "60 ft", components : "V,S,M", compMaterial : "A vial of blood from a humanoid killed within the past 24 hours", duration : "Conc, 1 h", save : "Cha", description : "Summon 1 demon of CR 5+1/SL that obeys me; end of each of its turn, save to break free; see book", descriptionFull : "You utter foul words, summoning one demon from the chaos of the Abyss. You choose the demon's type, which must be one of challenge rating 5 or lower, such as a shadow demon or a barlgura. The demon appears in an unoccupied space you can see within range, and the demon disappears when it drops to 0 hit points or when the spell ends." + "\n " + "Roll initiative for the demon, which has its own turns. When you summon it and on each of your turns thereafter, you can issue a verbal command to it (requiring no action on your part), telling it what it must do on its next turn. If you issue no command, it spends its turn attacking any creature within reach that has attacked it." + "\n " + "At the end of each of the demon's turns, it makes a Charisma saving throw. The demon has disadvantage on this saving throw if you say its true name. On a failed save, the demon continues to obey you. On a successful save, your control of the demon ends for the rest of the duration, and the demon spends its turns pursuing and attacking the nearest non-demons to the best of its ability. If you stop concentrating on the spell before it reaches its full duration, an uncontrolled demon doesn't disappear for 1d6 rounds if it still has hit points." + "\n " + "As part of casting the spell, you can form a circle on the ground with the blood used as a material component. The circle is large enough to encompass your space. While the spell lasts, the summoned demon can't cross the circle or harm it, and it can't target anyone within it. Using the material component in this manner consumes it when the spell ends." + AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, the challenge rating increases by 1 for each slot level above 4th." }; SpellsList["summon lesser demons"] = { name : "Summon Lesser Demons", classes : ["warlock", "wizard"], source : [["X", 167]], level : 3, school : "Conj", time : "1 a", range : "60 ft", components : "V,S,M", compMaterial : "A vial of blood from a humanoid killed within the past 24 hours", duration : "Conc, 1 h", description : "Summon up to 8 (16 at SL6, 24 at SL8) CR \u22641 1 demons, DM choice; attack nearest non-demons", descriptionFull : "You utter foul words, summoning demons from the chaos of the Abyss. Roll on the following table to determine what appears." + "\n\n " + toUni("d6") + "\t" + toUni("Demons Summoned") + "\n 1-2\tTwo demons of challenge rating 1 or lower" + "\n 3-4\tFour demons of challenge rating 1/2 or lower" + "\n 5-6\tEight demons of challenge rating 1/4 or lower" + "\n\n " + "The DM chooses the demons, such as manes or dretches, and you choose the unoccupied spaces you can see within range where they appear. A summoned demon disappears when it drops to 0 hit points or when the spell ends." + "\n " + "The demons are hostile to all creatures, including you. Roll initiative for the summoned demons as a group, which has its own turns. The demons pursue and attack the nearest non-demons to the best of their ability." + "\n " + "As part of casting the spell, you can form a circle on the ground with the blood used as a material component. The circle is large enough to encompass your space. While the spell lasts, the summoned demons can't cross the circle or harm it, and they can't target anyone within it. Using the material component in this manner consumes it when the spell ends." + AtHigherLevels + "When you cast this spell using a spell slot of 6th or 7th level, you summon twice as many demons. If you cast it using a spell slot of 8th or 9th level, you summon three times as many demons." }; SpellsList["synaptic static"] = { name : "Synaptic Static", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["X", 167]], level : 5, school : "Ench", time : "1 a", range : "120 ft", components : "V,S", duration : "Instant, 1 min", save : "Int", description : "20-ft rad all crea Int>2 save or 8d6 Psychic dmg, -1d6 on atks/check/conc. save; save half, no -1d6", descriptionShorter : "20-ft rad all crea Int>2 save or 8d6 Psychic dmg, -1d6 on atk/chk/conc save; save half, no -1d6", descriptionFull : "You choose a point within range and cause psychic energy to explode there. Each creature in a 20-foot-radius sphere centered on that point must make an Intelligence saving throw. A creature with an Intelligence score of 2 or lower can't be affected by this spell. A target takes 8d6 psychic damage on a failed save, or half as much damage on a successful one." + "\n " + "After a failed save, a target has muddled thoughts for 1 minute. During that time, it rolls a d6 and subtracts the number rolled from all its attack rolls and ability checks, as well as its Constitution saving throws to maintain concentration. The target can make an Intelligence saving throw at the end of each of its turns, ending the effect on itself on a success." }; SpellsList["temple of the gods"] = { name : "Temple of the Gods", classes : ["cleric"], source : [["X", 167]], level : 7, school : "Conj", time : "1 h", range : "120 ft", components : "V,S,M\u0192", compMaterial : "A holy symbol worth at least 5 gp", duration : "24 h", description : "Create a temple 120 ft on a side to the deity of a holy symbol used; see book for effects", descriptionFull : "You cause a temple to shimmer into existence on ground you can see within range. The temple must fit within an unoccupied cube of space, up to 120 feet on each side. The temple remains until the spell ends. It is dedicated to whatever god, pantheon, or philosophy is represented by the holy symbol used in the casting." + "\n " + "You make all decisions about the temple's appearance. The interior is enclosed by a floor, walls, and a roof, with one door granting access to the interior and as many windows as you wish. Only you and any creatures you designate when you cast the spell can open or close the door." + "\n " + "The temple's interior is an open space with an idol or altar at one end. You decide whether the temple is illuminated and whether that illumination is bright light or dim light. The smell of burning incense fills the air within, and the temperature is mild." + "\n " + "The temple opposes types of creatures you choose when you cast this spell. Choose one or more of the following: celestials, elementals, fey, fiends, or undead. If a creature of the chosen type attempts to enter the temple, that creature must make a Charisma saving throw. On a failed save, it can't enter the temple for 24 hours. Even if the creature can enter the temple, the magic there hinders it; whenever it makes an attack roll, an ability check, or a saving throw inside the temple, it must roll a d4 and subtract the number rolled from the d20 roll." + "\n " + "In addition, the sensors created by divination spells can't appear inside the temple, and creatures within can't be targeted by divination spells." + "\n " + "Finally, whenever any creature in the temple regains hit points from a spell of 1st level or higher, the creature regains additional hit points equal to your Wisdom modifier (minimum 1 hit point)." + "\n " + "The temple is made from opaque magical force that extends into the Ethereal Plane, thus blocking ethereal travel into the temple's interior. Nothing can physically pass through the temple's exterior. It can't be dispelled by dispel magic, and antimagic field has no effect on it. A disintegrate spell destroys the temple instantly." + "\n " + "Casting this spell on the same spot once every 7 days for a year makes this effect permanent." }; SpellsList["tenser's transformation"] = { name : "Tenser's Transformation", classes : ["wizard"], source : [["X", 168]], level : 6, school : "Trans", time : "1 a", range : "Self", components : "V,S,M", compMaterial : "A few hairs from a bull", duration : "Conc, 10 min", description : "50 temp HP; prof Str/Con save, all wea/arm; extra atk; adv., wea atks +2d12 Force dmg; no spellc.", descriptionShorter : "50 temp HP; prof Str/Con save, wea/arm; +1 atk; adv, wea atks +2d12 Force dmg; no spellc", descriptionFull : "You endow yourself with endurance and martial prowess fueled by magic. Until the spell ends, you can't cast spells, and you gain the following benefits:" + "\n \u2022 " + "You gain 50 temporary hit points. If any of these remain when the spell ends, they are lost." + "\n \u2022 " + "You have advantage on attack rolls that you make with simple and martial weapons." + "\n \u2022 " + "When you hit a target with a weapon attack, that target takes an extra 2d12 force damage." + "\n \u2022 " + "You have proficiency with all armor, shields, simple weapons, and martial weapons." + "\n \u2022 " + "You have proficiency in Strength and Constitution saving throws." + "\n \u2022 " + "You can attack twice, instead of once, when you take the Attack action on your turn. You ignore this benefit if you already have a feature, like Extra Attack, that gives you extra attacks." + "\n " + "Immediately after the spell ends, you must succeed on a DC 15 Constitution saving throw or suffer one level of exhaustion." }; SpellsList["thunder step"] = { name : "Thunder Step", classes : ["sorcerer", "warlock", "wizard"], source : [["X", 168]], level : 3, school : "Conj", time : "1 a", range : "90 ft", components : "V", duration : "Instantaneous", save : "Con", description : "Me + 1 willing crea teleport 90 ft; all crea in 10 ft of origin 3d10+1d10/SL Thunder dmg; save half", descriptionShorter : "Me + 1 willing crea teleport 90 ft; all in 10 ft of origin 3d10+1d10/SL Thunder dmg; save half", descriptionFull : "You teleport yourself to an unoccupied space you can see within range. Immediately after you disappear, a thunderous boom sounds, and each creature within 10 feet of the space you left must make a Constitution saving throw, taking 3d10 thunder damage on a failed save, or half as much damage on a successful one. The thunder can be heard from up to 300 feet away." + "\n " + "You can bring along objects as long as their weight doesn't exceed what you can carry. You can also teleport one willing creature of your size or smaller who is carrying gear up to its carrying capacity. The creature must be within 5 feet of you when you cast this spell, and there must be an unoccupied space within 5 feet of your destination space for the creature to appear in; otherwise, the creature is left behind." + AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d10 for each slot level above 3rd." }; SpellsList["tiny servant"] = { name : "Tiny Servant", classes : ["artificer", "wizard"], source : [["X", 168]], level : 3, school : "Trans", time : "1 min", range : "Touch", components : "V,S", duration : "8 h", description : "Animate 1+2/SL Tiny, nonmagical, unattended obj as tiny servants; bns a to command telepathically", descriptionFull : "You touch one Tiny, nonmagical object that isn't attached to another object or a surface and isn't being carried by another creature. The target animates and sprouts little arms and legs, becoming a creature under your control until the spell ends or the creature drops to 0 hit points. See the Tiny Servant stat block for its statistics." + "\n " + "As a bonus action, you can mentally command the creature if it is within 120 feet of you. (If you control multiple creatures with this spell, you can command any or all of them at the same time, issuing the same command to each one.) You decide what action the creature will take and where it will move during its next turn, or you can issue a simple, general command, such as to fetch a key, stand watch, or stack some books. If you issue no commands, the servant does nothing other than defend itself against hostile creatures. Once given an order, the servant continues to follow that order until its task is complete." + "\n " + "When the creature drops to 0 hit points, it reverts to its original form, and any remaining damage carries over to that form." + AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, you can animate two additional objects for each slot level above 3rd." }; SpellsList["toll the dead"] = { name : "Toll the Dead", classes : ["cleric", "warlock", "wizard"], source : [["X", 169], ["UA:SS", 4]], level : 0, school : "Necro", time : "1 a", range : "60 ft", components : "V,S", duration : "Instantaneous", save : "Wis", description : "1 crea save or 1d12 Necrotic dmg (d8 instead of d12 if at full HP); +1d12/1d8 at CL 5, 11, \u0026 17", descriptionCantripDie : "1 crea save or `CD`d12 Necrotic damage (d8 instead of d12 if at full HP)", descriptionFull : "You point at one creature you can see within range, and the sound of a dolorous bell fills the air around it for a moment. The target must succeed on a Wisdom saving throw or take 1d8 necrotic damage. If the target is missing any of its hit points, it instead takes 1d12 necrotic damage." + "\n " + "The spell's damage increases by one die when you reach 5th level (2d8 or 2d12), 11th level (3d8 or 3d12), and 17th level (4d8 or 4d12)." }; SpellsList["wall of light"] = { name : "Wall of Light", classes : ["sorcerer", "warlock", "wizard"], source : [["X", 170]], level : 5, school : "Evoc", time : "1 a", range : "120 ft", components : "V,S,M", compMaterial : "A hand mirror", duration : "Conc, 10 min", save : "Con", description : "60\xD75\xD710ft (l\xD7w\xD7h) 4d8+1d8/SL Radiant dmg \u0026 blind; save half, not blind; 1 a rngd spell atk; see B", descriptionShorter : "60|5|10ft (l|w|h) 4d8+1d8/SL Radiant dmg, blind; save half, no blind; 1 a rngd atk; see B", descriptionMetric : "18\xD71,5\xD73m (l\xD7w\xD7h) 4d8+1d8/SL Radiant dmg \u0026 blind; save half, not blind; 1 a rngd spell atk; see B", descriptionShorterMetric : "18|1,5|3m (l|w|h) 4d8+1d8/SL Radiant dmg, blind; save half, no blind; 1 a rngd atk; see B", descriptionFull : "A shimmering wall of bright light appears at a point you choose within range. The wall appears in any orientation you choose: horizontally, vertically, or diagonally. It can be free floating, or it can rest on a solid surface. The wall can be up to 60 feet long, 10 feet high, and 5 feet thick. The wall blocks line of sight, but creatures and objects can pass through it. It emits bright light out to 120 feet and dim light for an additional 120 feet." + "\n " + "When the wall appears, each creature in its area must make a Constitution saving throw. On a failed save, a creature takes 4d8 radiant damage, and it is blinded for 1 minute. On a successful save, it takes half as much damage and isn't blinded. A blinded creature can make a Constitution saving throw at the end of each of its turns, ending the effect on itself on a success." + "\n " + "A creature that ends its turn in the wall's area takes 4d8 radiant damage." + "\n " + "Until the spell ends, you can use an action to launch a beam of radiance from the wall at one creature you can see within 60 feet of it. Make a ranged spell attack. On a hit, the target takes 4d8 radiant damage. Whether you hit or miss, reduce the length of the wall by 10 feet. If the wall's length drops to 0 feet, the spell ends." + AtHigherLevels + "When you cast this spell using a spell slot of 6th level or higher, the damage increases by 1d8 for each slot level above 5th." }; SpellsList["word of radiance"] = { name : "Word of Radiance", classes : ["cleric"], source : [["X", 171]], level : 0, school : "Evoc", time : "1 a", range : "5 ft", components : "V,M", compMaterial : "A holy symbol", duration : "Instantaneous", save : "Con", description : "Any crea within range save or 1d6 Radiant damage; +1d6 at CL 5, 11, and 17", descriptionCantripDie : "Any crea within range save or `CD`d6 Radiant damage", descriptionFull : "You utter a divine word, and burning radiance erupts from you. Each creature of your choice that you can see within range must succeed on a Constitution saving throw or take 1d6 radiant damage." + "\n " + "The spell's damage increases by 1d6 when you reach 5th level (2d6), 11th level (3d6), and 17th level (4d6)." }; SpellsList["wrath of nature"] = { name : "Wrath of Nature", classes : ["druid", "ranger"], source : [["X", 171]], level : 5, school : "Evoc", time : "1 a", range : "120 ft", components : "V,S", duration : "Conc, 1 min", description : "60-ft cu dif. ter.; rock: rngd atk 3d8 Bludg. dmg; tree: Dex or 4d6 Slash. dmg; root: Str or restr.; see B", descriptionShorter : "60-ft cu dif. ter.; rock: atk 3d8 Bludg. dmg; tree: Dex or 4d6 Slash. dmg; root: Str or restrain", descriptionFull : "You call out to the spirits of nature to rouse them against your enemies. Choose a point you can see within range. The spirits cause trees, rocks, and grasses in a 60-foot cube centered on that point to become animated until the spell ends." + "\n " + toUni("Grasses and Undergrowth") + ": Any area of ground in the cube that is covered by grass or undergrowth is difficult terrain for your enemies." + "\n " + toUni("Trees") + ": At the start of each of your turns, each of your enemies within 10 feet of any tree in the cube must succeed on a Dexterity saving throw or take 4d6 slashing damage from whipping branches." + "\n " + toUni("Roots and Vines") + ": At the end of each of your turns, one creature of your choice that is on the ground in the cube must succeed on a Strength saving throw or become restrained until the spell ends. A restrained creature can use an action to make a Strength (Athletics) check against your spell save DC, ending the effect on itself on a success." + "\n " + toUni("Rocks") + ": As a bonus action on your turn, you can cause a loose rock in the cube to launch at a creature you can see in the cube. Make a ranged spell attack against the target. On a hit, the target takes 3d8 nonmagical bludgeoning damage, and it must succeed on a Strength saving throw or fall prone." }; SpellsList["zephyr strike"] = { name : "Zephyr Strike", classes : ["ranger"], source : [["X", 171]], level : 1, school : "Trans", time : "1 bns", range : "Self", components : "V", duration : "Conc, 1 min", description : "Moving doesn't provoke opportunity atks; once: adv. on wea atk, +1d8 Force dmg, +30 ft spd for turn", descriptionShorter : "Moving doesn't provoke opport. atks; once: adv. on wea atk, +1d8 Force dmg, +30 ft spd for turn", descriptionFull : "You move like the wind. Until the spell ends, your movement doesn't provoke opportunity attacks." + "\n " + "Once before the spell ends, you can give yourself advantage on one weapon attack roll on your turn. That attack deals an extra 1d8 force damage on a hit. Whether you hit or miss, your walking speed increases by 30 feet until the end of that turn.", dynamicDamageBonus : { multipleDmgMoments : false } }; // Add weapons (attack cantrips) WeaponsList["create bonfire"] = { regExpSearch : /^(?=.*create)(?=.*bonfire).*$/i, name : "Create Bonfire", source : [["X", 152], ["E", 16]], list : "spell", ability : 6, type : "Cantrip", damage : ["C", 8, "fire"], range : "60 ft", description : "5-ft cube; Dex save at casting or when moved into, success - no damage; Conc, 1 min", abilitytodamage : false, dc : true }; WeaponsList["frostbite"] = { regExpSearch : /frostbite/i, name : "Frostbite", source : [["X", 156], ["E", 18]], list : "spell", ability : 6, type : "Cantrip", damage : ["C", 6, "cold"], range : "60 ft", description : "Con save, success - no damage, fail - also disadv. on next weapon attack roll in next turn; 1 creature", abilitytodamage : false, dc : true }; WeaponsList["infestation"] = { regExpSearch : /infestation/i, name : "Infestation", source : [["X", 158]], list : "spell", ability : 6, type : "Cantrip", damage : ["C", 6, "poison"], range : "30 ft", description : "Con save, success - no damage, fail - target also moved 5 ft in random direction", abilitytodamage : false, dc : true }; WeaponsList["magic stone"] = { regExpSearch : /^(?=.*magic)(?=.*stone).*$/i, name : "Magic Stone", source : [["X", 160], ["E", 20]], list : "spell", ability : 5, type : "Cantrip", damage : [1, 6, "bludgeoning"], range : "60/120 ft", description : "Produces 3 stones that each can be thrown (60 ft) or hurled with a sling (120 ft) as a spell attack", abilitytodamage : true }; WeaponsList["primal savagery"] = { regExpSearch : /^(?=.*primal)(?=.*savagery).*$/i, name : "Primal Savagery", source : [["X", 169]], list : "spell", ability : 5, type : "Cantrip", damage : ["C", 10, "acid"], range : "Melee (5 ft)", description : "", abilitytodamage : false }; WeaponsList["thunderclap"] = { regExpSearch : /thunderclap/i, name : "Thunderclap", source : [["X", 168], ["E", 22]], list : "spell", ability : 6, type : "Cantrip", damage : ["C", 6, "thunder"], range : "5-ft radius", description : "Con save, success - no damage; all creatures in area; audible in 100 ft", abilitytodamage : false, dc : true }; WeaponsList["toll the dead"] = { regExpSearch : /^(?=.*toll)(?=.*the)(?=.*dead).*$/i, name : "Toll the Dead", source : [["X", 169], ["UA:SS", 4]], list : "spell", ability : 5, type : "Cantrip", damage : ["C", 12, "necrotic"], range : "60 ft", description : "Wis save, success - no damage; If target is at full HP, d8 instead of d12 damage", abilitytodamage : false, dc : true }; WeaponsList["word of radiance"] = { regExpSearch : /^(?=.*word)(?=.*radiance).*$/i, name : "Word of Radiance", source : [["X", 171]], list : "spell", ability : 5, type : "Cantrip", damage : ["C", 6, "radiant"], range : "5-ft radius", description : "Con save, success - no damage; Only chosen creatures I can see are affected", abilitytodamage : false, dc : true }; // Companion options (Find Greater Steed spell) CompanionList.steed = { name : "Find Greater Steed", nameTooltip : "the Find Greater Steed spell", nameOrigin : "4th-level conjuration spell", nameMenu : "Greater steed (Find Greater Steed spell)", source : [["X", 156]], action : [["action", "Find Greater Steed (dismiss)"]], attributesAdd : { header : "Mount", type : ["Celestial", "Fey", "Fiend"], subtype : "", features : [{ name : "Find Greater Steed", description : "If dropped to 0 HP, the steed disappears, leaving behind no physical form." }], languages : "understands one language its master speaks (master's choice)" }, attributesChange : function(sCrea, objCrea) { if (objCrea.scores[3] < 6) objCrea.scores[3] = 6; }, notes : function() { if (!CompanionList.mount) return; var a = newObj(CompanionList.mount.notes); a[0].description = a[0].description.replace(/It assumes a chosen form.*/i, "It has the chosen form: griffon, pegasus, peryton, dire wolf, rhinoceros, or saber-toothed tiger"); return a; }() }; // Add creatures CreatureList["tiny servant"] = { // Stats for the Tiny Servant spell (contains contributions by SoilentBrad) name : "Tiny Servant", source : [["X", 169]], size : 5, type : "Construct", alignment : "Unaligned", ac : 15, hp : 10, hd : [4, 4], speed : "30 ft, climb 30 ft", scores : [4, 16, 10, 2, 10, 1], damage_immunities : "poison, psychic", condition_immunities : "blinded, charmed, deafened, exhaustion, frightened, paralyzed, petrified, poisoned", senses : "Blindsight 60 ft (blind beyond this radius)", passivePerception : 10, challengeRating : "0", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Slam", ability : 2, damage : [1, 4, "bludgeoning"], range : "Melee (5 ft)", description : "" }] }; // Magic Items MagicItemsList["adamantine ammunition"] = { name : "Adamantine Ammunition", source : [["X", 78]], type : "weapon (any ammunition)", rarity : "unknown", description : "Whenever a ammunition made or coated with adamantine hits an object, the hit is a critical hit. The adamantine version of ten pieces of ammunition costs 500 gp more than the normal version, whether the ammunition is made of the metal or coated with it.", descriptionFull : "Ammunition made of or coated with adamantine is unusually effective when used to break objects. Whenever a piece of adamantine ammunition hits an object, the hit is a critical hit.\n The adamantine version of ten pieces of ammunition costs 500 gp more than the normal version, whether the ammunition is made of the metal or coated with it.", allowDuplicates : true, chooseGear : { type : "ammo", prefixOrSuffix : "brackets", itemName1stPage : ["suffix", "Adamantine"], descriptionChange : ["replace", "ammunition"], excludeCheck : function (inObjKey, inObj) { return /vials|flasks/i.test(inObj.icon); } } } MagicItemsList["adamantine weapon"] = { name : "Adamantine Weapon", source : [["X", 78]], type : "weapon (any melee)", rarity : "unknown", description : "Whenever a weapon made or coated with adamantine hits an object, the hit is a critical hit. The adamantine version of a melee weapon costs 500 gp more than the normal version, whether the weapon is made of the metal or coated with it.", descriptionFull : "Melee weapons made of or coated with adamantine are unusually effective when used to break objects. Whenever an adamantine weapon hits an object, the hit is a critical hit.\n The adamantine version of a melee weapon costs 500 gp more than the normal version, whether the weapon is made of the metal or coated with it.", allowDuplicates : true, chooseGear : { type : "weapon", prefixOrSuffix : "brackets", itemName1stPage : ["suffix", "Adamantine"], descriptionChange : ["replace", "weapon"], excludeCheck : function (inObjKey, inObj) { return inObj.list != "melee"; } }, calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.list == "melee" && /adamantine/i.test(v.WeaponTextName)) { fields.Description += (fields.Description ? '; ' : '') + 'Always critical hits on objects'; } }, 'If I include the word "Adamantine" in the name of a melee weapon, it will be treated as the magic item Adamantine Weapon. Whenever it hits an object, it automatically scores a critical hit.' ] } } MagicItemsList["armor of gleaming"] = { name : "Armor of Gleaming", nameTest : "of Gleaming", source : [["X", 136]], type : "armor (medium, or heavy)", rarity : "common", description : "This armor never gets dirty.", descriptionFull : "This armor never gets dirty.", allowDuplicates : true, chooseGear : { type : "armor", prefixOrSuffix : "prefix", descriptionChange : ["prefix", "armor"], excludeCheck : function (inObjKey, inObj) { return !(/medium|heavy/i).test(inObj.type); } } } MagicItemsList["bead of nourishment"] = { name : "Bead of Nourishment", source : [["X", 136]], type : "wondrous item", rarity : "common", description : "Once I can eat this spongy, flavorless, gelatinous bead. It dissolves on my tongue and provides as much nourishment as 1 day of rations.", descriptionFull : "This spongy, flavorless, gelatinous bead dissolves on your tongue and provides as much nourishment as 1 day of rations." } MagicItemsList["bead of refreshment"] = { name : "Bead of Refreshment", source : [["X", 136]], type : "wondrous item", rarity : "common", description : "Once I can drop this spongy, flavorless, gelatinous bead in liquid. It dissolves in the liquid and transforms up to a pint of it into fresh, cold drinking water. The bead has no effect on magical liquids or harmful substances such as poison.", descriptionFull : "This spongy, flavorless, gelatinous bead dissolves in liquid, transforming up to a pint of the liquid into fresh, cold drinking water. The bead has no effect on magical liquids or harmful substances such as poison." } MagicItemsList["boots of false tracks"] = { name : "Boots of False Tracks", source : [["X", 136]], type : "wondrous item", rarity : "common", description : "Only humanoids can wear these boots. While wearing the boots, I can choose to have them leave tracks like those of another kind of humanoid of my size.", descriptionFull : "Only humanoids can wear these boots. While wearing the boots, you can choose to have them leave tracks like those of another kind of humanoid of your size." } MagicItemsList["candle of the deep"] = { name : "Candle of the Deep", source : [["X", 136]], type : "wondrous item", rarity : "common", description : "The flame of this candle is not extinguished when immersed in water. It gives off light and heat like a normal candle.", descriptionFull : "The flame of this candle is not extinguished when immersed in water. It gives off light and heat like a normal candle." } MagicItemsList["cast-off armor"] = { name : "Cast-Off Armor", nameTest : "Cast-Off", source : [["X", 136]], type : "armor (light, medium, or heavy)", rarity : "common", description : "As an action, I can doff this armor.", descriptionFull : "You can doff this armor as an action.", chooseGear : { type : "armor", prefixOrSuffix : "suffix", descriptionChange : ["prefix", "armor"] }, action : [["action", ""]] } MagicItemsList["charlatan's die"] = { name : "Charlatan's Die", source : [["X", 136]], type : "wondrous item", rarity : "common", description : "Whenever I roll this six-sided die, I can control which number it rolls.", descriptionFull : "Whenever you roll this six-sided die, you can control which number it rolls.", attunement : true } MagicItemsList["cloak of billowing"] = { name : "Cloak of Billowing", source : [["X", 136]], type : "wondrous item", rarity : "common", description : "As a bonus action while wearing this cloak, I can make it billow dramatically.", descriptionFull : "While wearing this cloak, you can use a bonus action to make it billow dramatically.", action : [["bonus action", ""]] } MagicItemsList["cloak of many fashions"] = { name : "Cloak of Many Fashions", source : [["X", 136], ["WBtW", 208]], type : "wondrous item", rarity : "common", description : "As a bonus action while wearing this cloak, I can change its style, color, and apparent qualities. The cloak's weight doesn't change. Regardless of its appearance, the cloak can't be anything but a cloak. Although it can duplicate the appearance of other magic cloaks, it doesn't gain their magical properties.", descriptionFull : "While wearing this cloak, you can use a bonus action to change the style, color, and apparent quality of the garment. The cloak's weight doesn't change. Regardless of its appearance, the cloak can't be anything but a cloak. Although it can duplicate the appearance of other magic cloaks, it doesn't gain their magical properties.", action : [["bonus action", ""]] } MagicItemsList["clockwork amulet"] = { name : "Clockwork Amulet", source : [["X", 137]], type : "wondrous item", rarity : "common", description : "Once per dawn when I make an attack roll while wearing this copper amulet, I can forgo rolling the d20 to get a 10 on the die. The amulet contains tiny interlocking gears powered by magic from Mechanus, a plane of clockwork predictability. When I hold it up to my ear, I can hear faint ticking and whirring noises.", descriptionFull : "This copper amulet contains tiny interlocking gears and is powered by magic from Mechanus, a plane of clockwork predictability. A creature that puts an ear to the amulet can hear faint ticking and whirring noises coming from within.\n When you make an attack roll while wearing the amulet, you can forgo rolling the d20 to get a 10 on the die. Once used, this property can't be used again until the next dawn.", usages : 1, recovery : "dawn" } MagicItemsList["clothes of mending"] = { name : "Clothes of Mending", source : [["X", 137]], type : "wondrous item", rarity : "common", description : "This elegant outfit of traveler's clothes magically mends itself to counteract daily wear and tear. Pieces of the outfit that are destroyed can't be repaired in this way.", descriptionFull : "This elegant outfit of traveler's clothes magically mends itself to counteract daily wear and tear. Pieces of the outfit that are destroyed can't be repaired in this way.", weight : 4 } MagicItemsList["dark shard amulet"] = { name : "Dark Shard Amulet", source : [["X", 137]], type : "wondrous item", rarity : "common", description : "I can use this amulet of extraplanar material from the realm of my warlock patron as a spellcasting focus for my warlock spells. Once per long rest, I can use it to cast a warlock cantrip that I don't know. To do so, I must make a DC 10 Intelligence (Arcana) check, wasting the attempt as well as my action if I fail.", descriptionFull : "This amulet is fashioned from a single shard of resilient extraplanar material originating from the realm of your warlock patron. While you are wearing it, you gain the following benefits:\n \u2022 You can use the amulet as a spellcasting focus for your warlock spells.\n \u2022 You can try to cast a cantrip that you don't know. The cantrip must be on the warlock spell list, and you must make a DC 10 Intelligence (Arcana) check. If the check succeeds, you cast the spell. If the check fails, so does the spell, and the action used to cast the spell is wasted. In either case, you can't use this property again until you finish a long rest.", attunement : true, prerequisite : "Requires attunement by a warlock", prereqeval : function (v) { return classes.known.warlock ? true : false; }, usages : 1, recovery : "long rest", spellcastingAbility: "warlock", spellFirstColTitle: "", spellcastingPreparedCantrips: { 'class': 'warlock' }, allowUpCasting: true, spellcastingBonus: [{ name: 'Select 1 cantrip or enable', 'class': 'warlock', level: [0, 0], }, { name: '"Prepare cantrips just like', spells: [], }, { name: 'spells" on the bottom left.', spells: [], }], calcChanges : { spellList : [ function(spList, spName, spType) { // Remove the already known cantrips, from any source except magic items if (spName.indexOf('dark shard amulet') !== -1) { var allSpellsKnown = []; for (var sCast in CurrentSpells) { if (sCast.refType === "item") continue; var oCast = CurrentSpells[sCast]; if (oCast.selectCa) allSpellsKnown = allSpellsKnown.concat(oCast.selectCa); if (oCast.selectBo) allSpellsKnown = allSpellsKnown.concat(oCast.selectBo); } var knownCantrips = OrderSpells(allSpellsKnown, "single", false, false, 0); if (!spList.notspells) spList.notspells = []; spList.notspells = spList.notspells.concat(knownCantrips); } }, ], spellAdd : [ function (spellKey, spellObj, spName, isDuplicate) { if (spName.indexOf('dark shard amulet') !== -1) { spellObj.firstCol = ""; }; }, ], }, } MagicItemsList["dread helm"] = { name : "Dread Helm", source : [["X", 137], ["WBtW", 209]], type : "wondrous item", rarity : "common", description : "This fearsome steel helm makes my eyes glow red while I wear it.", descriptionFull : "This fearsome steel helm makes your eyes glow red while you wear it.", weight : 1 } MagicItemsList["ear horn of hearing"] = { name : "Ear Horn of Hearing", source : [["X", 137]], type : "wondrous item", rarity : "common", description : "While held up to my ear, this horn suppresses the effects of the deafened condition on me, allowing me to hear normally.", descriptionFull : "While held up to your ear, this horn suppresses the effects of the deafened condition on you, allowing you to hear normally.", savetxt : { immune : ["deafened"] }, weight : 1 } MagicItemsList["enduring spellbook"] = { name : "Enduring Spellbook", source : [["X", 137]], type : "wondrous item", rarity : "common", description : "This spellbook, along with anything written on its pages, can't be damaged by fire or immersion in water. In addition, the spellbook doesn't deteriorate with age.", descriptionFull : "This spellbook, along with anything written on its pages, can't be damaged by fire or immersion in water. In addition, the spellbook doesn't deteriorate with age.", weight : 5 } MagicItemsList["ersatz eye"] = { name : "Ersatz Eye", source : [["X", 137], ["W", 267]], type : "wondrous item", rarity : "common", description : "This artificial eye replaces a real one that was lost or removed. While the ersatz eye is embedded in my eye socket, it can't be removed by anyone other than me, and I can see through the tiny orb as though it were a normal eye.", descriptionFull : "This artificial eye replaces a real one that was lost or removed. While the ersatz eye is embedded in your eye socket, it can't be removed by anyone other than you, and you can see through the tiny orb as though it were a normal eye.", attunement : true } MagicItemsList["hat of vermin"] = { name : "Hat of Vermin", source : [["X", 137]], type : "wondrous item", rarity : "common", description : "This hat has 3 charges, regaining all at dawn. As an action while holding it, I can expend 1 charge and speak a command word to have one bat, frog, or rat appear in the hat. The creature acts as an ordinary member of its kind and disappears after 1 hour or when it has 0 HP. It is not under my control.", descriptionFull : "This hat has 3 charges. While holding the hat, you can use an action to expend 1 of its charges and speak a command word that summons your choice of a bat, a frog, or a rat. The summoned creature magically appears in the hat and tries to get away from you as quickly as possible. The creature is neither friendly nor hostile, and it isn't under your control. It behaves as an ordinary creature of its kind and disappears after 1 hour or when it drops to 0 hit points. The hat regains all expended charges daily at dawn.", action : [["action", ""]], usages : 3, recovery : "dawn" } MagicItemsList["hat of wizardry"] = { name : "Hat of Wizardry", source : [["X", 137]], type : "wondrous item", rarity : "common", description : "I can use this antiquated, cone-shaped hat adorned with gold crescent moons and stars as a spellcasting focus for my wizard spells. Once per long rest, I can use it to cast a wizard cantrip that I don't know. To do so, I must make a DC 10 Intelligence (Arcana) check, wasting the attempt as well as my action if I fail.", descriptionFull : "This antiquated, cone-shaped hat is adorned with gold crescent moons and stars. While you are wearing it, you gain the following benefits:\n \u2022 You can use the hat as a spellcasting focus for your wizard spells.\n \u2022 You can try to cast a cantrip that you don't know. The cantrip must be on the wizard spell list, and you must make a DC 10 Intelligence (Arcana) check. If the check succeeds, you cast the spell. If the check fails, so does the spell, and the action used to cast the spell is wasted. In either case, you can't use this property again until you finish a long rest.", attunement : true, prerequisite : "Requires attunement by a wizard", prereqeval : function (v) { return classes.known.wizard ? true : false; }, usages : 1, recovery : "long rest", spellcastingAbility: "wizard", spellFirstColTitle: "", spellcastingPreparedCantrips: { 'class': 'wizard' }, allowUpCasting: true, spellcastingBonus: [{ name: 'Select 1 cantrip or enable', 'class': 'wizard', level: [0, 0], }, { name: '"Prepare cantrips just like', spells: [], }, { name: 'spells" on the bottom left.', spells: [], }], calcChanges : { spellList : [ function(spList, spName, spType) { // Remove the already known cantrips, from any source except magic items if (spName.indexOf('hat of wizardry') !== -1) { var allSpellsKnown = []; for (var sCast in CurrentSpells) { if (sCast.refType === "item") continue; var oCast = CurrentSpells[sCast]; if (oCast.selectCa) allSpellsKnown = allSpellsKnown.concat(oCast.selectCa); if (oCast.selectBo) allSpellsKnown = allSpellsKnown.concat(oCast.selectBo); } var knownCantrips = OrderSpells(allSpellsKnown, "single", false, false, 0); if (!spList.notspells) spList.notspells = []; spList.notspells = spList.notspells.concat(knownCantrips); } } ], spellAdd : [ function (spellKey, spellObj, spName, isDuplicate) { if (spName.indexOf('hat of wizardry') !== -1) { spellObj.firstCol = ""; }; } ] }, } MagicItemsList["heward's handy spice pouch"] = { name : "Heward's Handy Spice Pouch", source : [["X", 137]], type : "wondrous item", rarity : "common", description : "This belt pouch appears empty. It has 10 charges, regaining 1d6+4 expended charges at dawn. As an action while holding it, I can speak the name of any nonmagical food seasoning (e.g. salt, pepper, or saffron), and remove a pinch of the desired seasoning from the pouch. A pinch is enough to season a single meal.", descriptionFull : "This belt pouch appears empty and has 10 charges. While holding the pouch, you can use an action to expend 1 of its charges, speak the name of any nonmagical food seasoning (such as salt, pepper, saffron, or cilantro), and remove a pinch of the desired seasoning from the pouch. A pinch is enough to season a single meal. The pouch regains 1d6+4 expended charges daily at dawn.", weight : 1, usages : 10, recovery : "dawn", additional : "regains 1d6+4", action : [["action", ""]] } MagicItemsList["horn of silent alarm"] = { name : "Horn of Silent Alarm", source : [["X", 137]], type : "wondrous item", rarity : "common", description : "This horn has 4 charges, regaining 1d4 expended charges daily at dawn. As an action, I can expend 1 charge and blow it, have only one creature within 600 ft of my choice hear the horn's blare, provided it isn't deafened. No other creature hears sound coming from the horn.", descriptionFull : "This horn has 4 charges. When you use an action to blow it, one creature of your choice can hear the horn's blare, provided the creature is within 600 feet of the horn and not deafened. No other creature hears sound coming from the horn. The horn regains 1d4 expended charges daily at dawn.", weight : 2, usages : 4, recovery : "dawn", additional : "regains 1d4", action : [["action", ""]] } MagicItemsList["instrument of illusions"] = { // contains contributions by AelarTheElFRogue name : "Instrument of Illusions", source : [["X", 137]], type : "wondrous item (instrument)", rarity : "common", description : "While I am playing this musical instrument, I can create harmless, illusory visual effects within a 5-ft-radius (15-ft for bards) sphere centered on the instrument. The magical effects have neither substance nor sound, and they are obviously illusory. The effects end when I stop playing.", descriptionFull : "While you are playing this musical instrument, you can create harmless, illusory visual effects within a 5-foot-radius sphere centered on the instrument. If you are a bard, the radius increases to 15 feet. Sample visual effects include luminous musical notes, a spectral dancer, butterflies, and gently falling snow. The magical effects have neither substance nor sound, and they are obviously illusory. The effects end when you stop playing.", attunement : true, weight : 3, // same as instrument of the bards choices : ["Bard (15-ft radius)", "Not a Bard (5-ft radius)"], selfChoosing : function () { return classes.known.bard ? "bard (15-ft radius)" : "not a bard (5-ft radius)"; }, "bard (15-ft radius)" : { name : "Instrument\u200A of Illusions", description : "While I am playing this musical instrument, I can create harmless, illusory visual effects within a 15-ft-radius sphere centered on the instrument. The magical effects have neither substance nor sound, and they are obviously illusory. The effects end when I stop playing." }, "not a bard (5-ft radius)" : { name : "Instrument\u200A\u200A of Illusions", description : "While I am playing this musical instrument, I can create harmless, illusory visual effects within a 5-ft-radius sphere centered on the instrument. The magical effects have neither substance nor sound, and they are obviously illusory. The effects end when I stop playing." } } MagicItemsList["instrument of scribing"] = { name : "Instrument of Scribing", source : [["X", 138], ["WBtW", 212]], type : "wondrous item (instrument)", rarity : "common", description : "As an action while I'm playing this musical instrument, I can write a magical message on a nonmagical surface that I can see within 30 ft. The message can be up to 6 (or 7) words in a language I know and fades away after 24 hours or when Dispel Magic is cast on it. The instrument can be used like this 3 times per dawn.", descriptionFull : "This musical instrument has 3 charges. While you are playing it, you can use an action to expend 1 charge from the instrument and write a magical message on a nonmagical object or surface that you can see within 30 feet of you. The message can be up to six words long and is written in a language you know. If you are a bard, you can scribe an additional seven words and choose to make the message glow faintly, allowing it to be seen in nonmagical darkness. Casting Dispel Magic on the message erases it. Otherwise, the message fades away after 24 hours.\n The instrument regains all expended charges daily at dawn.", attunement : true, weight : 3, // same as instrument of the bards choices : ["Bard (15-ft radius)", "Not a Bard (5-ft radius)"], selfChoosing : function () { return classes.known.bard ? "bard (15-ft radius)" : "not a bard (5-ft radius)"; }, "bard (15-ft radius)" : { name : "Instrument\u200A of Scribing", description : "As an action while I'm playing this musical instrument, I can write a magical message on a nonmagical surface that I can see within 30 ft. The message can be up to 7 words in a language I know and I can have it glow faintly. Dispel Magic erases it, otherwise it fades away after 24 hours. This can be used 3 times per dawn." }, "not a bard (5-ft radius)" : { name : "Instrument\u200A\u200A of Scribing", description : "As an action while I'm playing this musical instrument, I can write a magical message on a nonmagical surface that I can see within 30 ft. The message can be up to 6 words in a language I know and fades away after 24 hours or when Dispel Magic is cast on it. The instrument can be used like this 3 times per dawn." } } MagicItemsList["lock of trickery"] = { name : "Lock of Trickery", source : [["X", 138]], type : "wondrous item", rarity : "common", description : "This lock appears to be an ordinary lock and comes with a single key. The tumblers in this lock magically adjust to thwart burglars. Without the key, a creature proficient with thieves' tools can pick this lock with a successful DC 15 Dexterity check, but has disadvantage on that check.", descriptionFull : "This lock appears to be an ordinary lock and comes with a single key. The tumblers in this lock magically adjust to thwart burglars. Dexterity checks made to pick the lock have disadvantage. Thus, without the key, a creature proficient with thieves' tools can pick this lock with a successful DC 15 Dexterity check, but has disadvantage on that check.", weight : 1 } MagicItemsList["moon-touched sword"] = { name : "Moon-Touched Sword", nameTest : "Moon-Touched", source : [["X", 138]], type : "weapon (any sword)", rarity : "common", description : "In darkness, the unsheathed blade of this sword sheds moonlight, creating bright light in a 15-ft radius and dim light for an additional 15 ft.", descriptionFull : "In darkness, the unsheathed blade of this sword sheds moonlight, creating bright light in a 15-foot radius and dim light for an additional 15 feet.", chooseGear : { type : "weapon", prefixOrSuffix : "suffix", descriptionChange : ["replace", "sword"], excludeCheck : function (inObjKey, inObj) { var testRegex = /sword|scimitar|rapier/i; return !(testRegex).test(inObjKey) && (!inObj.baseWeapon || !(testRegex).test(inObj.baseWeapon)); } }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && v.isMeleeWeapon && /sword|scimitar|rapier/i.test(v.baseWeaponName) && /moon.touched/i.test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); } }, 'If I include the words "Moon-Touched" in the name of a sword, it will be treated as the magic weapon Moon-Touched Sword.' ] } } MagicItemsList["mystery key"] = { name : "Mystery Key", source : [["X", 138]], type : "wondrous item", rarity : "common", description : "A question mark is worked into the head of this key. The key has a 5% chance of unlocking any lock into which it's inserted. Once it unlocks something, the key disappears.", descriptionFull : "A question mark is worked into the head of this key. The key has a 5% chance of unlocking any lock into which it's inserted. Once it unlocks something, the key disappears." } MagicItemsList["orb of direction"] = { name : "Orb of Direction", source : [["X", 138], ["WBtW", 212]], type : "wondrous item", rarity : "common", description : "As an action while holding this orb, I can determine which way is north. This property functions only on the Material Plane.", descriptionFull : "While holding this orb, you can use an action to determine which way is north. This property functions only on the Material Plane.", weight : 3, action : [["action", ""]] } MagicItemsList["orb of time"] = { name : "Orb of Time", source : [["X", 138]], type : "wondrous item", rarity : "common", description : "As an action while holding this orb, I can determine whether it is morning, afternoon, evening, or nighttime outside. This property functions only on the Material Plane.", descriptionFull : "While holding this orb, you can use an action to determine whether it is morning, afternoon, evening, or nighttime outside. This property functions only on the Material Plane.", weight : 3, action : [["action", ""]] } MagicItemsList["perfume of bewitching"] = { name : "Perfume of Bewitching", source : [["X", 138]], type : "wondrous item", rarity : "common", description : "Once as an action, I can apply the perfume in this tiny vial to myself and its effect lasts 1 hour. For the duration, I have advantage on all Charisma checks directed at humanoids of challenge rating 1 or lower. Those subjected to the perfume's effect are not aware that they've been influenced by magic.", descriptionFull : "This tiny vial contains magic perfume, enough for one use. You can use an action to apply the perfume to yourself, and its effect lasts 1 hour. For the duration, you have advantage on all Charisma checks directed at humanoids of challenge rating 1 or lower. Those subjected to the perfume's effect are not aware that they've been influenced by magic." } MagicItemsList["pipe of smoke monsters"] = { name : "Pipe of Smoke Monsters", source : [["X", 138], ["WBtW", 212]], type : "wondrous item", rarity : "common", description : "As an action while smoking this pipe, I can exhale a puff of smoke that takes the form of a single creature, such as a dragon, a flumph, or a froghemoth. The form must be small enough to fit in a 1-ft cube and loses its shape after a few seconds, becoming an ordinary puff of smoke.", descriptionFull : "While smoking this pipe, you can use an action to exhale a puff of smoke that takes the form of a single creature, such as a dragon, a flumph, or a froghemoth. The form must be small enough to fit in a 1-foot cube and loses its shape after a few seconds, becoming an ordinary puff of smoke." } MagicItemsList["pole of angling"] = { name : "Pole of Angling", source : [["X", 138]], type : "wondrous item", rarity : "common", description : "While holding this 10 ft pole, I can speak a command word and transform it into a fishing pole with a hook, a line, and a reel. Speaking the command word again changes the fishing pole back into a normal 10 ft pole.", descriptionFull : "While holding this 10-foot pole, you can speak a command word and transform it into a fishing pole with a hook, a line, and a reel. Speaking the command word again changes the fishing pole back into a normal 10-foot pole.", weight : 7 } MagicItemsList["pole of collapsing"] = { name : "Pole of Collapsing", source : [["X", 138], ["WBtW", 212]], type : "wondrous item", rarity : "common", description : "As an action while holding this 10 ft pole, I can speak a command word to have it collapse into a 1-ft-long rod. The pole's weight doesn't change. As an action while holding the rod, I can speak a different command word to have it elongate back to a pole, but only as long as the surrounding space allows.", descriptionFull : "While holding this 10-foot pole, you can use an action to speak a command word and cause it to collapse into a 1-foot-long rod, for ease of storage. The pole's weight doesn't change. You can use an action to speak a different command word and cause the rod to revert to a pole; however, the rod will elongate only as far as the surrounding space allows.", weight : 7, action : [["action", ""]] } MagicItemsList["pot of awakening"] = { name : "Pot of Awakening", source : [["X", 138]], type : "wondrous item", rarity : "common", description : "If I plant an ordinary shrub in this 10 lb clay pot and let it grow for 30 days, the shrub magically transforms into an awakened shrub at the end of that time. When the shrub awakens, its roots break the pot, destroying it. The awakened shrub is friendly toward me. Absent commands from me, it does nothing.", descriptionFull : "If you plant an ordinary shrub in this 10-pound clay pot and let it grow for 30 days, the shrub magically transforms into an awakened shrub at the end of that time. When the shrub awakens, its roots break the pot, destroying it.\n The awakened shrub is friendly toward you. Absent commands from you, it does nothing.", weight : 10 } MagicItemsList["rope of mending"] = { name : "Rope of Mending", source : [["X", 138]], type : "wondrous item", rarity : "common", description : "I can cut this 50-foot coil of hempen rope into any number of smaller pieces, and then use an action to speak a command word and cause the pieces to knit back together. The pieces must be in contact with each other and not otherwise in use. A rope of mending is forever shortened if a section of it is lost.", descriptionFull : "You can cut this 50-foot coil of hempen rope into any number of smaller pieces, and then use an action to speak a command word and cause the pieces to knit back together. The pieces must be in contact with each other and not otherwise in use. A rope of mending is forever shortened if a section of it is lost or destroyed.", action : [["action", ""]], weight : 10 } MagicItemsList["ruby of the war mage"] = { name : "Ruby of the War Mage", source : [["X", 138]], type : "wondrous item", rarity : "common", description : "By pressing this 1-inch-diameter ruby etched with eldritch runes to a simple or martial weapon for 10 minutes, it attaches itself to the weapon. I can then use that weapon as a spellcasting focus. Once attached, it can't be removed unless my attunement ends, I detach it as an action, or the weapon is destroyed.", descriptionFull : "Etched with eldritch runes, this 1-inch-diameter ruby allows you to use a simple or martial weapon as a spellcasting focus for your spells. For this property to work, you must attach the ruby to the weapon by pressing the ruby against it for at least 10 minutes. Thereafter, the ruby can't be removed unless you detach it as an action or the weapon is destroyed. Not even an Antimagic Field causes it to fall off. The ruby does fall off the weapon if your attunement to the ruby ends.", attunement : true, prerequisite : "Requires attunement by a spellcaster", prereqeval : function(v) { return v.isSpellcaster; } } MagicItemsList["shield of expression"] = { name : "Shield of Expression", source : [["X", 139]], type : "shield", rarity : "common", description : "The front of this shield is shaped in the likeness of a face. As a bonus action while bearing the shield, I can have the shield alter the expression of the face.", descriptionFull : "The front of this shield is shaped in the likeness of a face. While bearing the shield, you can use a bonus action to alter the face's expression.", weight : 6, shieldAdd : "Shield of Expression", action : [["bonus action", ""]] } MagicItemsList["smoldering armor"] = { name : "Smoldering Armor", nameTest : "Smoldering", source : [["X", 139]], type : "armor (light, medium, or heavy)", rarity : "common", description : "Wisps of harmless, odorless smoke rise from this armor while it is worn.", descriptionFull : "Wisps of harmless, odorless smoke rise from this armor while it is worn.", chooseGear : { type : "armor", prefixOrSuffix : "suffix", descriptionChange : ["prefix", "armor"] } } MagicItemsList["staff of adornment"] = { name : "Staff of Adornment", source : [["X", 139]], type : "staff", rarity : "common", description : "If I place an object up to 1 lb above the tip of the staff while holding it, the object floats 1 inch from its tip and remains there until it is removed or until I no longer possess the staff. It can have up to three objects floating over its tip at any given time and I can make one or more objects slowly spin or turn in place.", descriptionFull : "If you place an object weighing no more than 1 pound (such as a shard of crystal, an egg, or a stone) above the tip of the staff while holding it, the object floats an inch from the staff's tip and remains there until it is removed or until the staff is no longer in your possession. The staff can have up to three such objects floating over its tip at any given time. While holding the staff, you can make one or more of the objects slowly spin or turn in place.", weight : 4 } MagicItemsList["staff of birdcalls"] = { name : "Staff of Birdcalls", source : [["X", 139]], type : "staff", rarity : "common", description : "This staff has 10 charges, regaining 1d6+4 at dawn, 5% chance it is destroyed when its last charge is used. As an action, I can use 1 charge to create a sound out to a range of 60 ft: a finch's chirp, raven's caw, duck's quack, chicken's cluck, goose's honk, loon's call, turkey's gobble, seagull's cry, owl's hoot, or eagle's shriek.", descriptionFull : "This wooden staff is decorated with bird carvings. It has 10 charges. While holding it, you can use an action to expend 1 charge from the staff and cause it to create one of the following sounds out to a range of 60 feet: a finch's chirp, a raven's caw, a duck's quack, a chicken's cluck, a goose's honk, a loon's call, a turkey's gobble, a seagull's cry, an owl's hoot, or an eagle's shriek.\n The staff regains 1d6+4 expended charges daily at dawn. If you expend the last charge, roll a d20. On a 1, the staff explodes in a harmless cloud of bird feathers and is lost forever.", weight : 4, usages : 10, recovery : "dawn", additional : "regains 1d6+4", action : [["action", ""]] } MagicItemsList["staff of flowers"] = { name : "Staff of Flowers", source : [["X", 139]], type : "staff", rarity : "common", description : "This staff has 10 charges, regaining 1d6+4 at dawn, 5% chance it is destroyed when its last charge is used. As an action, I can use 1 charge to cause a flower of my choice to sprout from a patch of earth or soil within 5 ft or from the staff itself. The flower is nonmagical and grows or withers as a normal flower would.", descriptionFull : "This wooden staff has 10 charges. While holding it, you can use an action to expend 1 charge from the staff and cause a flower to sprout from a patch of earth or soil within 5 feet of you, or from the staff itself. Unless you choose a specific kind of flower, the staff creates a mildscented daisy. The flower is harmless and nonmagical, and it grows or withers as a normal flower would. The staff regains 1d6+4 expended charges daily at dawn. If you expend the last charge, roll a d20. On a 1, the staff turns into flower petals and is lost forever.", weight : 4, usages : 10, recovery : "dawn", additional : "regains 1d6+4", action : [["action", ""]] } MagicItemsList["talking doll"] = { name : "Talking Doll", source : [["X", 139], ["WBtW", 214]], type : "wondrous item", rarity : "common", attunement : true, description : "During a short rest with this doll within 5 ft of me, I can tell it to say up to 6 phrases of up to 6 words each, and set an observable condition under which the doll speaks each phrase. Conditions must happen within 5 ft of the doll. The doll can remember only 6 phrases that are lost when my attunement to it ends.", descriptionFull : "While this stuffed doll is within 5 feet of you, you can spend a short rest telling it to say up to six phrases, none of which can be more than six words long, and set an observable condition under which the doll speaks each phrase. You can also replace old phrases with new ones. Whatever the condition, it must occur within 5 feet of the doll to make it speak. For example, whenever someone picks up the doll, it might say, \"I want a piece of candy.\" The doll's phrases are lost when your attunement to the doll ends." } MagicItemsList["tankard of sobriety"] = { name : "Tankard of Sobriety", source : [["X", 139]], type : "wondrous item", rarity : "common", description : "This tankard has a stern face sculpted into one side. I can drink ale, wine, or any other nonmagical alcoholic beverage poured into it without becoming inebriated. The tankard has no effect on magical liquids or harmful substances such as poison.", descriptionFull : "This tankard has a stern face sculpted into one side. You can drink ale, wine, or any other nonmagical alcoholic beverage poured into it without becoming inebriated. The tankard has no effect on magical liquids or harmful substances such as poison.", weight : 1 } MagicItemsList["unbreakable arrow"] = { name : "Unbreakable Arrow", source : [["X", 139]], type : "weapon (arrow)", rarity : "common", description : "This arrow can't be broken, except when it is within an Antimagic Field.", descriptionFull : "This arrow can't be broken, except when it is within an Antimagic Field.", weight : 0.05 } MagicItemsList["veteran's cane"] = { name : "Veteran's Cane", source : [["X", 139]], type : "wondrous item", rarity : "common", description : "Once as a bonus action, I can grasp this walking cane and speak its command word to have it transform into an ordinary longsword. Once transformed, the longsword is nonmagical and can't revert back to a walking cane.", descriptionFull : "When you grasp this walking cane and use a bonus action to speak the command word, it transforms into an ordinary longsword and ceases to be magical.", weight : 4, action : [["bonus action", ""]] } MagicItemsList["walloping ammunition"] = { name : "Walloping Ammunition", nameTest : "Walloping", source : [["X", 139]], type : "weapon (any ammunition)", rarity : "common", description : "This magic ammunition packs a wallop. A creature hit by the ammunition must succeed on a DC 10 Strength saving throw or be knocked prone.", descriptionFull : "This ammunition packs a wallop. A creature hit by the ammunition must succeed on a DC 10 Strength saving throw or be knocked prone.", allowDuplicates : true, chooseGear : { type : "ammo", prefixOrSuffix : "suffix", descriptionChange : ["replace", "ammunition"], excludeCheck : function (inObjKey, inObj) { return /vials|flasks/i.test(inObj.icon); } } } MagicItemsList["wand of conducting"] = { name : "Wand of Conducting", source : [["X", 140]], type : "wand", rarity : "common", description : "This wand has 3 charges, regaining all at dawn. As an action, I can wave it around and expend 1 charge to create orchestral music that can be heard out to a range of 60 ft and ends when I stop waving the wand. If I use its last charge, roll a d20. On a 1, a sad tuba sound plays as the wand crumbles to dust.", descriptionFull : "This wand has 3 charges. While holding it, you can use an action to expend 1 of its charges and create orchestral music by waving it around. The music can be heard out to a range of 60 feet and ends when you stop waving the wand.\n The wand regains all expended charges daily at dawn. If you expend the wand's last charge, roll a d20. On a 1, a sad tuba sound plays as the wand crumbles to dust and is destroyed.", weight : 1, action : [["action", ""]], usages : 3, recovery : "dawn" } MagicItemsList["wand of pyrotechnics"] = { name : "Wand of Pyrotechnics", source : [["X", 140]], type : "wand", rarity : "common", description : "This wand has 7 charges, regaining 1d6+1 at dawn, 5% chance it is destroyed when its last charge is used. As an action, I can expend 1 charge to create a harmless burst of sound light at a point I can see up to 60 ft away, with the noise travelling 300 ft. The light is as bright as a torch flame but lasts only a second.", descriptionFull : "This wand has 7 charges. While holding it, you can use an action to expend 1 of its charges and create a harmless burst of multicolored light at a point you can see up to 60 feet away. The burst of light is accompanied by a crackling noise that can be heard up to 300 feet away. The light is as bright as a torch flame but lasts only a second.\n The wand regains 1d6+1 expended charges daily at dawn. If you expend the wand's last charge, roll a d20. On a 1, the wand erupts in a harmless pyrotechnic display and is destroyed.", weight : 1, action : [["action", ""]], usages : 7, recovery : "dawn", additional : "regains 1d6+1" } MagicItemsList["wand of scowls"] = { name : "Wand of Scowls", source : [["X", 140], ["WBtW", 214]], type : "wand", rarity : "common", description : "This wand has 3 charges, regain all at dawn. As an action, I can expend 1 of its charges and target a humanoid I can see within 30 ft. The target must succeed on a DC 10 Charisma save or be forced to scowl for 1 minute. If I expend the wand's last charge, roll a d20. On a 1, the wand transforms into a wand of smiles.", descriptionFull : "This wand has 3 charges. While holding it, you can use an action to expend 1 of its charges and target a humanoid you can see within 30 feet of you. The target must succeed on a DC 10 Charisma saving throw or be forced to scowl for 1 minute.\n The wand regains all expended charges daily at dawn. If you expend the wand's last charge, roll a d20. On a 1, the wand transforms into a wand of smiles.", weight : 1, action : [["action", ""]], usages : 3, recovery : "dawn" } MagicItemsList["wand of smiles"] = { name : "Wand of Smiles", source : [["X", 140], ["WBtW", 214]], type : "wand", rarity : "common", description : "This wand has 3 charges, regain all at dawn. As an action, I can expend 1 of its charges and target a humanoid I can see within 30 ft. The target must succeed on a DC 10 Charisma save or be forced to smile for 1 minute. If I expend the wand's last charge, roll a d20. On a 1, the wand transforms into a wand of scowls.", descriptionFull : "This wand has 3 charges. While holding it, you can use an action to expend 1 of its charges and target a humanoid you can see within 30 feet of you. The target must succeed on a DC 10 Charisma saving throw or be forced to smile for 1 minute.\n The wand regains all expended charges daily at dawn. If you expend the wand's last charge, roll a d20. On a 1, the wand transforms into a wand of scowls.", weight : 1, action : [["action", ""]], usages : 3, recovery : "dawn" } // pub_20180529_MToF.js // This file adds all the player-material from Mordenkainen's Tome of Foes to MPMB's Character Record Sheet // Define the source SourceList.MToF={ name : "Mordenkainen's Tome of Foes", abbreviation : "MToF", group : "Primary Sources", url : "https://dnd.wizards.com/products/mordenkainens-tome-foes", date : "2018/05/29" }; // Tiefling subraces RaceList["baalzebul tiefling"] = { regExpSearch : /^(?=.*baalzebul)(?=.*tiefling|planetouched).*$/i, name : "Baalzebul tiefling", sortname : "Tiefling, Baalzebul", source : [["MToF", 21], ["UA:FO", 1]], plural : "Baalzebul tieflings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Infernal"], vision : [["Darkvision", 60]], dmgres : ["Fire"], age : " reach adulthood in their late teens and live around 100 years", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 0, 0, 1, 0, 2], trait : "Baalzebul Tiefling (+1 Intelligence, +2 Charisma)\n\nLegacy of Maladomini:\n I know the Thaumaturgy cantrip.\n At 3rd level, I can cast Ray of Sickness once per long rest as a 2nd-level spell.\n At 5th level, I can also cast Crown of Madness once per long rest.\n Charisma is my spellcasting ability for these spells.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Legacy of Maladomini (1)", spells : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : 'atwill' }], features : { "ray of sickness" : { name : "Legacy of Maladomini (level 3)", minlevel : 3, spellcastingBonus : [{ name : "Legacy of Maladomini (3)", spells : ["ray of sickness"], selection : ["ray of sickness"], firstCol : 'oncelr' }], spellChanges : { "ray of sickness" : { description : "Spell attack for 3d8 Poison dmg; save or also poisoned until end of my next turn", changes : "Using Legacy of Maladomini, I cast Ray of Sickness as if I'm using a 2nd-level spell slot." } } }, "crown of madness" : { name : "Legacy of Maladomini (level 5)", minlevel : 5, spellcastingBonus : [{ name : "Legacy of Maladomini (5)", spells : ["crown of madness"], selection : ["crown of madness"], firstCol : 'oncelr' }] } } }; RaceList["dispater tiefling"] = { regExpSearch : /^(?=.*dispater)(?=.*tiefling|planetouched).*$/i, name : "Dispater tiefling", sortname : "Tiefling, Dispater", source : [["MToF", 21]], plural : "Dispater tieflings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Infernal"], vision : [["Darkvision", 60]], dmgres : ["Fire"], age : " reach adulthood in their late teens and live around 100 years", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 1, 0, 0, 0, 2], trait : "Dispater Tiefling (+1 Dexterity, +2 Charisma)\n\nLegacy of Dis:\n I know the Thaumaturgy cantrip.\n At 3rd level, I can cast Disguise Self once per long rest.\n At 5th level, I can also cast Detect Thoughts once per long rest.\n Charisma is my spellcasting ability for these spells.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Legacy of Dis (level 1)", spells : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : 'atwill' }], features : { "disguise self" : { name : "Legacy of Dis (level 3)", minlevel : 3, spellcastingBonus : [{ name : "Legacy of Dis (level 3)", spells : ["disguise self"], selection : ["disguise self"], firstCol : 'oncelr' }] }, "detect thoughts" : { name : "Legacy of Dis (level 5)", minlevel : 5, spellcastingBonus : [{ name : "Legacy of Dis (level 5)", spells : ["detect thoughts"], selection : ["detect thoughts"], firstCol : 'oncelr' }] } } }; RaceList["fierna tiefling"] = { regExpSearch : /^(?=.*fierna)(?=.*tiefling|planetouched).*$/i, name : "Fierna tiefling", sortname : "Tiefling, Fierna", source : [["MToF", 21], ["UA:FO", 1]], plural : "Fierna tieflings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Infernal"], vision : [["Darkvision", 60]], dmgres : ["Fire"], age : " reach adulthood in their late teens and live around 100 years", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 0, 0, 0, 1, 2], trait : "Fierna Tiefling (+1 Wisdom, +2 Charisma)\n\nLegacy of Phlegethos:\n I know the Friends cantrip.\n At 3rd level, I can cast Charm Person once per long rest as a 2nd-level spell.\n At 5th level, I can also cast Suggestion once per long rest.\n Charisma is my spellcasting ability for these spells.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Legacy of Phlegethos (1)", spells : ["friends"], selection : ["friends"], firstCol : 'atwill' }], features : { "charm person" : { name : "Legacy of Phlegethos (level 3)", minlevel : 3, spellcastingBonus : [{ name : "Legacy of Phlegethos (3)", spells : ["charm person"], selection : ["charm person"], firstCol : 'oncelr' }], spellChanges : { "charm person" : { description : "2 humanoids, max 30 ft apart, save or charmed; adv. on save if me/ally is fighting it", changes : "Using Legacy of Phlegethos, I cast Charm Person as if I'm using a 2nd-level spell slot." } } }, "suggestion" : { name : "Legacy of Phlegethos (level 5)", minlevel : 5, spellcastingBonus : [{ name : "Legacy of Phlegethos (5)", spells : ["suggestion"], selection : ["suggestion"], firstCol : 'oncelr' }] } } }; RaceList["glasya tiefling"] = { regExpSearch : /^(?=.*glasya)(?=.*tiefling|planetouched).*$/i, name : "Glasya tiefling", sortname : "Tiefling, Glasya", source : [["MToF", 22], ["UA:FO", 2]], plural : "Glasya tieflings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Infernal"], vision : [["Darkvision", 60]], dmgres : ["Fire"], age : " reach adulthood in their late teens and live around 100 years", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 1, 0, 0, 0, 2], trait : "Glasya Tiefling (+1 Dexterity, +2 Charisma)\n\nLegacy of Malbolge:\n I know the Minor Illusion cantrip.\n At 3rd level, I can cast Disguise Self once per long rest.\n At 5th level, I can also cast Invisibility once per long rest.\n Charisma is my spellcasting ability for these spells.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Legacy of Malbolge (1)", spells : ["minor illusion"], selection : ["minor illusion"], firstCol : 'atwill' }], features : { "disguise self" : { name : "Legacy of Malbolge (level 3)", minlevel : 3, spellcastingBonus : [{ name : "Legacy of Malbolge (3)", spells : ["disguise self"], selection : ["disguise self"], firstCol : 'oncelr' }] }, "invisibility" : { name : "Legacy of Malbolge (level 5)", minlevel : 5, spellcastingBonus : [{ name : "Legacy of Malbolge (5)", spells : ["invisibility"], selection : ["invisibility"], firstCol : 'oncelr' }] } } }; RaceList["levistus tiefling"] = { regExpSearch : /^(?=.*levistus)(?=.*tiefling|planetouched).*$/i, name : "Levistus tiefling", sortname : "Tiefling, Levistus", source : [["MToF", 22], ["UA:FO", 2]], plural : "Levistus tieflings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Infernal"], vision : [["Darkvision", 60]], dmgres : ["Fire"], age : " reach adulthood in their late teens and live around 100 years", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 0, 1, 0, 0, 2], trait : "Levistus Tiefling (+1 Constitution, +2 Charisma)\n\nLegacy of Stygia:\n I know the Ray of Frost cantrip.\n At 3rd level, I can cast Armor of Agathys once per long rest as a 2nd-level spell.\n At 5th level, I can also cast Darkness once per long rest.\n Charisma is my spellcasting ability for these spells.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Legacy of Stygia (1)", spells : ["ray of frost"], selection : ["ray of frost"], firstCol : 'atwill' }], features : { "armor of agathys" : { name : "Legacy of Stygia (level 3)", minlevel : 3, spellcastingBonus : [{ name : "Legacy of Stygia (3)", spells : ["armor of agathys"], selection : ["armor of agathys"], firstCol : 'oncelr' }], spellChanges : { "armor of agathys" : { description : "10 temp HP; as long as temp HP last any crea that hits in melee takes 10 Cold dmg", changes : "Using Legacy of Stygia, I cast Armor of Agathys as if I'm using a 2nd-level spell slot." } } }, "darkness" : { name : "Legacy of Stygia (level 5)", minlevel : 5, spellcastingBonus : [{ name : "Legacy of Stygia (5)", spells : ["darkness"], selection : ["darkness"], firstCol : 'oncelr' }] } } }; RaceList["mammon tiefling"] = { regExpSearch : /^(?=.*mammon)(?=.*tiefling|planetouched).*$/i, name : "Mammon tiefling", sortname : "Tiefling, Mammon", source : [["MToF", 22], ["UA:FO", 2]], plural : "Mammon tieflings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Infernal"], vision : [["Darkvision", 60]], dmgres : ["Fire"], age : " reach adulthood in their late teens and live around 100 years", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 0, 0, 1, 0, 2], trait : "Mammon Tiefling (+1 Intelligence, +2 Charisma)\nLegacy of Minauros:\n I know the Mage Hand cantrip.\n At 3rd level, I can cast Tenser's Floating Disk once per short rest.\n At 5th level, I can also cast Arcane Lock without a material component once per long rest.\n Charisma is my spellcasting ability for these spells.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Legacy of Minauros (1)", spells : ["mage hand"], selection : ["mage hand"], firstCol : 'atwill' }], features : { "tenser's floating disk" : { name : "Legacy of Minauros (level 3)", minlevel : 3, spellcastingBonus : [{ name : "Legacy of Minauros (3)", spells : ["tenser's floating disk"], selection : ["tenser's floating disk"], firstCol : 'oncesr' }] }, "arcane lock" : { name : "Legacy of Minauros (level 5)", minlevel : 5, spellcastingBonus : [{ name : "Legacy of Minauros (5)", spells : ["arcane lock"], selection : ["arcane lock"], firstCol : 'oncelr' }], spellChanges : { "arcane lock" : { components : "V,S", compMaterial : "", changes : "I can cast this spell once per long rest without requiring material components." } } } } }; RaceList["mephistopheles tiefling"] = { regExpSearch : /^(?=.*mephistopheles)(?=.*tiefling|planetouched).*$/i, name : "Mephistopheles tiefling", sortname : "Tiefling, Mephistopheles", source : [["MToF", 23]], plural : "Mephistopheles tieflings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Infernal"], vision : [["Darkvision", 60]], dmgres : ["Fire"], age : " reach adulthood in their late teens and live around 100 years", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 0, 0, 1, 0, 2], trait : "Mephistopheles Tiefling (+1 Intelligence, +2 Charisma)\n\nLegacy of Cania:\n I know the Mage Hand cantrip.\n At 3rd level, I can cast Burning Hands once per long rest as a 2nd-level spell.\n At 5th level, I can also cast Flame Blade once per long rest.\n Charisma is my spellcasting ability for these spells.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Legacy of Cania (level 1)", spells : ["mage hand"], selection : ["mage hand"], firstCol : 'atwill' }], features : { "burning hands" : { name : "Legacy of Cania (level 3)", minlevel : 3, spellcastingBonus : [{ name : "Legacy of Cania (level 3)", spells : ["burning hands"], selection : ["burning hands"], firstCol : 'oncelr' }], spellChanges : { "burning hands" : { description : "All in area 4d6 Fire dmg; save halves; unattended flammable objects ignite", changes : "Using Legacy of Cania, I cast Burning Hands as if I'm using a 2nd-level spell slot." } } }, "flame blade" : { name : "Legacy of Cania (level 5)", minlevel : 5, spellcastingBonus : [{ name : "Legacy of Cania (level 5)", spells : ["flame blade"], selection : ["flame blade"], firstCol : 'oncelr' }] } } }; RaceList["zariel tiefling"] = { regExpSearch : /^(?=.*zariel)(?=.*tiefling|planetouched).*$/i, name : "Zariel tiefling", sortname : "Tiefling, Zariel", source : [["MToF", 23], ["UA:FO", 2]], plural : "Zariel tieflings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Infernal"], vision : [["Darkvision", 60]], dmgres : ["Fire"], age : " reach adulthood in their late teens and live around 100 years", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [1, 0, 0, 0, 0, 2], trait : "Zariel Tiefling (+1 Strength, +2 Charisma)\n\nLegacy of Avernus:\n I know the Thaumaturgy cantrip.\n At 3rd level, I can cast Searing Smite once per long rest as a 2nd-level spell.\n At 5th level, I can also cast Branding Smite once per long rest.\n Charisma is my spellcasting ability for these spells.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Legacy of Avernus (1)", spells : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : 'atwill' }], features : { "searing smite" : { name : "Legacy of Avernus (level 3)", minlevel : 3, spellcastingBonus : [{ name : "Legacy of Avernus (3)", spells : ["searing smite"], selection : ["searing smite"], firstCol : 'oncelr' }], spellChanges : { "searing smite" : { description : "Next melee weapon hit +2d6 Fire dmg and target ignites; save to end spell or 1d6 Fire dmg", changes : "Using Legacy of Avernus, I cast Searing Smite as if I'm using a 2nd-level spell slot." } } }, "branding smite" : { name : "Legacy of Avernus (level 5)", minlevel : 5, spellcastingBonus : [{ name : "Legacy of Avernus (5)", spells : ["branding smite"], selection : ["branding smite"], firstCol : 'oncelr' }] } } }; // Elf subraces RaceList["eladrin-mtof"] = { regExpSearch : /^(?!.*half)((?=.*eladrin)|((?=.*\b(elfs?|elves|elvish|elven)\b)(?=.*\b(feys?|feywild)\b))).*$/i, name : "Eladrin", sortname : "Elf, Fey (Eladrin)", source : [["MToF", 61]], plural : "Eladrin", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Elvish"], vision : [["Darkvision", 60]], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["charmed"] }, skills : ["Perception"], age : " typically claim adulthood around age 100 and can live to be 750 years old", height : " range from under 5 to over 6 feet tall (4'6\" + 2d12\")", weight : " weigh around 115 lb (90 + 2d12 \xD7 1d4 lb)", heightMetric : " range from under 1,5 to over 1,8 metres tall (140 + 5d12 cm)", weightMetric : " weigh around 55 kg (40 + 5d12 \xD7 2d4 / 10 kg)", scores : [0, 2, 0, 0, 0, 1], abilitySave : 6, trait : "Eladrin (+2 Dexterity, +1 Charisma)" + desc([ "Trance: Elves don't need to sleep, but meditate semiconsciously, for 4 hours a day. This gives the same benefit as a human gets from 8 hours of sleep (long rest takes only 4 hours).", "Fey Step: Once per short rest, as a bonus action, I can magically teleport up to 30 ft to an unoccupied space I can see. Once I reach 3rd level, this gains an additional effect, based on the current season I'm aligned with. See the third page notes section for the effects.", "Shifting Seasons: After I finish a long rest, I can align myself with a season of my choice." ]), features : { "fey step" : { name : "Fey Step", minlevel : 1, usages : 1, recovery : "short rest", action : [["bonus action", ""]] } }, toNotesPage : [{ name : "Eladrin Season Features", source : [["MToF", 62]], popupName : "Eladrin Shifting Season Features", additional : "save DC 8 + Cha mod + Prof Bonus", page3notes : true, note : "\n \u2022 Autumn (Eladrin Season, MToF 62)" + desc([ " After using Fey Step, up to 2 creatures I can see within 10 ft of me must make a Wis save", " If failed, a target is charmed by me for 1 minute, or until I or my allies damage it" ]) + "\n \u2022 Winter (Eladrin Season, MToF 62)" + desc([ " When I use Fey Step, one target in 5 ft of where I teleported from must make a Wis save", " If failed, it is frightened of me until the end of my next turn" ]) + "\n \u2022 Spring (Eladrin Season, MToF 62)" + desc([ " When I use Fey Step, I can instead teleport one willing creature I touch within 5 ft of me", " It teleports to an unoccupied space of my choice that I can see within 30 ft of me" ]) + "\n \u2022 Summer (Eladrin Season, MToF 62)" + desc([ " After using Fey Step, each creature of my choice within 5 ft of me takes fire damage", " This fire damage is equal to my Charisma modifier (minimum 1)" ]) }] }; RaceList["sea elf"] = { regExpSearch : /^(?!.*half)((?=.*\b(elfs?|elves|elvish|elven)\b)(?=.*\b(seas?|oceans?|water)\b)).*$/i, name : "Sea elf", sortname : "Elf, Sea", source : [["MToF", 62], ["W", 163], ["UA:ES", 1]], plural : "Sea elves", size : 3, speed : { walk : { spd : 30, enc : 20 }, swim : { spd : 30, enc : 20 } }, weaponProfs : [false, false, ["spear", "trident", "light crossbow", "net"]], languageProfs : ["Common", "Elvish", "Aquan", "Friend of the Sea"], vision : [["Darkvision", 60]], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["charmed"] }, skills : ["Perception"], age : " typically claim adulthood around age 100 and can live to be 750 years old", height : " range from under 5 to almost 6 feet tall (4'6\" + 2d8\")", weight : " weigh around 115 lb (90 + 2d8 \xD7 1d4 lb)", heightMetric : " range from under 1,5 to almost 1,8 metres tall (140 + 5d8 cm)", weightMetric : " weigh around 52 kg (40 + 5d8 \xD7 2d4 / 10 kg)", scores : [0, 2, 1, 0, 0, 0], trait : "Sea Elf (+2 Dexterity, +1 Constitution)" + desc([ "Trance: Elves don't need to sleep, but meditate semiconsciously, for 4 hours a day. While meditating, I can dream after a fashion. After resting in this way, I gain the same benefit that a human does from 8 hours of sleep, thus needing only 4 hours for a long rest.", "Child of the Sea. I have 30 ft swimming speed and can breathe air and water.", "Friend of the Sea: Through sounds and gestures, I can communicate simple ideas with any beast that has an inborn swimming speed." ]) }; RaceList["shadar-kai elf"] = { regExpSearch : /^(?!.*half)((?=.*shadar-kai)|((?=.*\b(elfs?|elves|elvish|elven)\b)(?=.*\b(shadows?|shadowfell)\b))).*$/i, name : "Shadar-kai", sortname : "Elf, Shadow (Shadar-kai)", source : [["MToF", 62]], plural : "Shadar-kai", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Elvish"], vision : [["Darkvision", 60]], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["charmed"] }, dmgres : ["Necrotic"], skills : ["Perception"], age : " typically claim adulthood around age 100 and can live to be 750 years old", height : " range from under 5 to over 6 feet tall (4'8\" + 2d8\")", weight : " weigh around 115 lb (90 + 2d8 \xD7 1d4 lb)", heightMetric : " range from under 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 52 kg (40 + 5d8 \xD7 2d4 / 10 kg)", scores : [0, 2, 1, 0, 0, 0], trait : "Shadar-kai (+2 Dexterity, +1 Constitution)" + desc([ "Trance: Elves don't need to sleep, but meditate semiconsciously, for 4 hours a day. This gives the same benefit as a human gets from 8 hours of sleep (long rest takes only 4 hours).", "Blessing of the Raven Queen: Once per long rest, as a bonus action, I can magically teleport up to 30 ft to an unoccupied space I can see.", "Once I reach 3rd level, after I use the Blessing of the Raven Queen, I appear translucent and have resistance to all damage until the start of my next turn." ]), features : { "blessing of the raven queen" : { name : "Blessing of the Raven Queen", minlevel : 1, usages : 1, recovery : "long rest", action : [["bonus action", ""]] } } }; // Gith and its two subraces RaceList["githyanki-mtof"] = { regExpSearch : /githyanki/i, name : "Githyanki", source : [["MToF", 96]], plural : "Githyanki", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Gith", 1], armorProfs : [true, true, false, false], weaponProfs : [false, false, ["shortsword", "longsword", "greatsword"]], skillstxt : "Choose any one skill or tool", age : " reach adulthood in their late teens and live for about a century", height : " are more leaner and taller than humans, most are a slender 6 feet tall (5'0\" + 2d12\")", weight : " weigh around 135 lb (100 + 2d12 \xD7 2d4 lb)", heightMetric : " are more leaner and taller than humans, most are a slender 1,8 metres tall (150 + 5d12 cm)", weightMetric : " weigh around 61 kg (45 + 5d10 \xD7 4d4 / 10 kg)", scores : [2, 0, 0, 1, 0, 0], trait : "Githyanki (+2 Strength, +1 Intelligence)\n" + (typePF ? "\n" : "") + "Githyanki Psionics:" + desc([ "I know the Mage Hand cantrip, but the hand is invisible.", "At 3rd level, I can cast Jump once per long rest.", "At 5th level, I can also cast Misty Step once per long rest.", "Intelligence is my spellcasting ability for these spells.", "I don't require components to cast these spells." ]), spellcastingAbility : 4, spellcastingBonus : [{ name : "Githyanki Psionics (1)", spells : ["mage hand"], selection : ["mage hand"], firstCol : 'atwill' }], spellChanges : { "mage hand" : { components : "", description : "Create invisible spectral hand for simple tasks or carry up to 10 lb; 1 a to control; can't have multiple", changes : "Using Githyanki Psionics, I can cast Mage Hand without requiring components and the spectral hand is invisible." } }, features : { "jump" : { name : "Githyanki Psionics (level 3)", minlevel : 3, spellcastingBonus : [{ name : "Githyanki Psionics (3)", spells : ["jump"], selection : ["jump"], firstCol : 'oncelr' }], spellChanges : { "jump" : { components : "", compMaterial : "", changes : "Using Githyanki Psionics, I can cast Jump once per long rest without requiring components." } } }, "misty step" : { name : "Githyanki Psionics (level 5)", minlevel : 5, spellcastingBonus : [{ name : "Githyanki Psionics (5)", spells : ["misty step"], selection : ["misty step"], firstCol : 'oncelr' }], spellChanges : { "misty step" : { components : SpellsList["misty step"].components + "*", changes : "Using Githyanki Psionics, I can cast Misty Step once per long rest without requiring components." } } } } }; AddRacialVariant("githyanki-mtof", "tool proficiency", { regExpSearch : /tool proficiency/i, skillstxt : "", toolProfs : [["Any tool", 1]] }); AddRacialVariant("githyanki-mtof", "skill proficiency", { regExpSearch : /skill proficiency/i, skillstxt : "Choose any one skill" }); RaceList["githzerai-mtof"] = { regExpSearch : /githzerai/i, name : "Githzerai", source : [["MToF", 96]], plural : "Githzerai", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Gith"], age : " reach adulthood in their late teens and live for about a century", height : " are more leaner and taller than humans, most are a slender 6 feet tall (4'11\" + 2d12\")", weight : " weigh around 115 lb (90 + 2d12 \xD7 1d4 lb)", heightMetric : " are more leaner and taller than humans, most are a slender 1,8 metres tall (150 + 5d12 cm)", weightMetric : " weigh around 55 kg (40 + 5d10 \xD7 2d4 / 10 kg)", scores : [0, 0, 0, 1, 2, 0], trait : "Githzerai (+1 Intelligence, +2 Wisdom)\n" + (typePF ? "\n" : "") + "Githzerai Psionics:" + desc([ "I know the Mage Hand cantrip, but the hand is invisible.", "At 3rd level, I can cast Shield once per long rest.", "At 5th level, I can also cast Detect Thoughts once per long rest.", "Wisdom is my spellcasting ability for these spells.", "I don't require components to cast these spells." ]), savetxt : { adv_vs : ["charmed", "frightened"] }, spellcastingAbility : 5, spellcastingBonus : [{ name : "Githzerai Psionics (1)", spells : ["mage hand"], selection : ["mage hand"], firstCol : 'atwill' }], spellChanges : { "mage hand" : { components : "", description : "Create invisible spectral hand for simple tasks or carry up to 10 lb; 1 a to control; can't have multiple", changes : "Using Githzerai Psionics, I can cast Mage Hand without requiring components and the spectral hand is invisible." } }, features : { "shield" : { name : "Githzerai Psionics (level 3)", minlevel : 3, spellcastingBonus : [{ name : "Githzerai Psionics (3)", spells : ["shield"], selection : ["shield"], firstCol : 'oncelr' }], spellChanges : { "shield" : { components : "", changes : "Using Githzerai Psionics, I can cast Shield once per long rest without requiring components." } } }, "detect thoughts" : { name : "Githzerai Psionics (level 5)", minlevel : 5, spellcastingBonus : [{ name : "Githzerai Psionics (5)", spells : ["detect thoughts"], selection : ["detect thoughts"], firstCol : 'oncelr' }], spellChanges : { "detect thoughts" : { components : "", compMaterial : "", changes : "Using Githzerai Psionics, I can cast Detect Thoughts once per long rest without requiring components." } } } } }; // Magic Items MagicItemsList["greater silver sword"] = { name : "Greater Silver Sword", source : [["MToF", 89]], type : "weapon (greatsword)", rarity : "legendary", description : "This magic greatsword gives +1 to hit and damage. While holding it, I have adv. on Int, Wis, and Cha saves, immunity to being charmed, and resistance to psychic damage. If I score a critical hit with it on a creature's astral body, I can cut the cord tethering it to its material body, instead of dealing damage.", descriptionFull : "This magic weapon grants a +3 bonus to attack and damage rolls made with it. While you hold the sword, you have advantage on Intelligence, Wisdom, and Charisma saving throws, you are immune to being charmed, and you have resistance to psychic damage. In addition, if you score a critical hit with it against a creature's astral body, you can cut the silvery cord that tethers the target to its material body, instead of dealing damage.", attunement : true, weight : 6, prerequisite : "Requires attunement by a creature that has psionic ability", prereqeval : function (v) { if (!v.isSpellcaster) return false; if ((/psion|mystic/i).test(What("Racial Traits"))) return true; for (var aCast in CurrentSpells) { var spCast = CurrentSpells[aCast]; if ((/psion|mystic/i).test(spCast.name) || (spCast.list && spCast.list.psionic)) return true; if (!spCast.bonus) continue; for (var aBon in spCast.bonus) { if ((/psion|mystic/i).test(aBon) || (/psion|mystic/i).test(spCast.bonus[aBon].name)) return true; } } }, weaponOptions : [{ baseWeapon : "greatsword", regExpSearch : /^(?=.*greater)(?=.*silver)(?=.*sword).*$/i, name : "Greater Silver Sword", source : [["MToF", 89]], description : "Heavy, two-handed; On crit vs. astral body, cut cord instead of damage", modifiers : [3, 3], selectNow : true }], savetxt : { text : ["Adv. on Int, Wis, and Cha saves"], immune : ["charmed"] }, advantages : [["Intelligence", true], ["Wisdom", true], ["Charisma", true]], dmgres : ["Psychic"] } MagicItemsList["infernal tack"] = { name : "Infernal Tack", source : [["MToF", 167], ["DiA", 224]], type : "wondrous item", rarity : "legendary", notLegalAL : true, description : "While wearing the spurs of this set, the nightmare equipped with the bridle, bit, reins, saddle, and stirrups is under my command. As an action, I can have it appear in 20 ft at the start of my next turn. It acts on as my ally on my initiative, remains for 1 day, until I or it dies, or I dismiss it as an action. If it dies, it reforms in 24 h.", descriptionLong : "This tack consists of a bridle, bit, reins, saddle, stirrups, and spurs. A nightmare equipped with the tack serves whoever wears the spurs until the wearer dies or the tack is removed. As an action, I can clash the spurs together or scrape them through blood, causing the nightmare to appear within 20 ft at the start of my next turn. It acts as my ally on my initiative count, remains for 1 day, until I or it dies, or until I dismiss it as an action. If it dies, it reforms within 24 hours, after which I can summon it again. The tack doesn't create a nightmare from thin air; one must first be subdued so the tack can be placed on it.", descriptionFull : "A narzugon binds a nightmare to its service with infernal tack, which consists of a bridle, bit, reins, saddle, stirrups, and spurs. A nightmare equipped with infernal tack must serve whoever wears the spurs until the wearer dies or the tack is removed.\n You can use an action to call a nightmare equipped with infernal tack by clashing the spurs together or scraping them through blood. The nightmare appears at the start of your next turn, within 20 feet of you. It acts as your ally and takes its turn on your initiative count. It remains for 1 day, until you or it dies, or until you dismiss it as an action. If the nightmare dies, it reforms in the Nine Hells within 24 hours, after which you can summon it again.\n The tack doesn't conjure a nightmare from thin air; one must first be subdued so the tack can be placed on it. No nightmare accepts this forced servitude willingly, but some eventually form strong loyalties to their masters and become true partners in evil.", attunement : true, weight : 26, // riding saddle (25) + bit and bridle (1) prerequisite : "Requires attunement by a creature of evil alignment", prereqeval : function(v) { return (/evil/i).test(What("Alignment")); }, action : [["action", ""]], creaturesAdd : [["Nightmare", true, function (AddRemove, prefix) { if (!AddRemove) return; // Show equipment section MakeCompMenu_CompOptions(prefix, ["companion", "visible", "comp.eqp"], true); // Add equipment when added var equip = ["bit and bridle", "riding"]; for (var i = 0; i < equip.length; i++) { var gear = GearList[equip[i]]; if (!gear) continue; AddToInv(prefix + "comp", "l", gear.name, gear.amount, gear.weight, "", false, false, false, false); } // Add notes var note = "I can use an action to call a nightmare equipped with infernal tack by clashing the spurs together or scraping them through blood. The nightmare appears at the start of my next turn, within 20 ft of me.\nThe nightmare acts as my ally and takes its turn on my initiative count. It remains for 1 day, until I or it dies, or until I dismiss it as an action. If the nightmare dies, it reforms in the Nine Hells within 24 hours, after which I can summon it again."; Value(prefix + "Comp.eqp.Notes", What("Unit System") === "metric" ? ConvertToMetric(note, 0.5) : note); }]] } // pub_20180918_WDH.js // This file adds the magic items from the Waterdeep: Dragon Heist adventure to MPMB's Character Record Sheet // Define the source SourceList["WDH"] = { name : "Waterdeep: Dragon Heist [items]", abbreviation : "WDH", group : "Adventure Books", campaignSetting : "Forgotten Realms", url : "https://dnd.wizards.com/products/waterdeep-dragon-heist", date : "2018/09/18" }; // Mundane Items WeaponsList["oversized longbow"] = { regExpSearch : /^(?=.*oversized?)(?=.*(\bbows?\b|longbow)).*$/i, name : "Oversized Longbow", nameAlt : ["Bow, Oversized"], source : [["WDH", 201]], list : "ranged", ability : 2, type : "Martial", damage : [2, 6, "piercing"], range : "150/600 ft", weight : 2, description : "Ammunition, heavy, two-handed; Damage uses Str; Requires Medium size and Str 18", abilitytodamage : false, modifiers : ["", "Str"], ammo : "oversized arrow", defaultExcluded : true }; AmmoList["oversized arrow"] = { name : "Oversized Arrows", source : [["WDH", 201]], icon : "Arrows", weight : 0.10, defaultExcluded : true }; // Magic Items var WDH_azuredgeFullDescription = [ "Forged by the archwizard Ahghairon, this intelligent battleaxe was crafted to defend Waterdeep. Its current wielder is a former member of Force Grey named Meloon Wardragon, but the weapon is searching for a new owner.", "Azuredge has a solid steel handle etched with tiny runes, wrapped in blue dragon hide with a star sapphire set into the pommel. The axe head is forged from silver, electrum, and steel alloys whose edges constantly shimmer with a deep blue luminescence.", "You gain a +3 bonus to attack and damage rolls made with this magic weapon. The Shield spell provides no defense against the axe, which passes through that spell's barrier of magical force.", "When you hit a fiend or an undead with the axe, cold blue flames erupt from its blade and deal an extra 2d6 radiant damage to the target.", ">>Hurling<<. The battleaxe has 3 charges. You can expend 1 charge and make a ranged attack with the axe, hurling it as if it had the thrown property with a normal range of 60 feet and a long range of 180 feet. Whether it hits or misses, the axe flies back to you at the end of the current turn, landing in your open hand or at your feet in your space (as you choose). The axe regains all expended charges daily at dawn.", ">>Illumination<<. While holding the axe, you can use an action to cause the axe to glow blue or to quench the glow. This glow sheds bright light in a 30-foot radius and dim light for an additional 30 feet.", ">>Sentience<<. Azuredge is a sentient lawful neutral weapon with an Intelligence of 12, a Wisdom of 15, and a Charisma of 15. It has hearing and darkvision out to a range of 120 feet.", "The weapon communicates telepathically with its wielder and can speak, read, and understand Common. It has a calm, delicate voice. The weapon can sense the presence of non-lawful creatures within 120 feet of it.", ">>Personality<<. Azuredge is sworn to protect Waterdeep, and it desires to be wielded by a law-abiding person willing to dedicate everything to the city's defense. The weapon is patient and takes its time finding its ideal wielder.", "If someone tries to use Azuredge against its will, the axe can become ten times heavier than normal, and can magically adhere to any Medium or larger object or surface it comes into contact with. Once it does so, the axe can't be wielded. Nothing short of a Wish spell can separate the axe from the item or surface to which it is adhered without destroying one or the other, though the axe can choose to end the effect at any time." ]; MagicItemsList["azuredge"] = { name : "Azuredge", source : [["WDH", 189]], type : "weapon (battleaxe)", rarity : "legendary", storyItemAL : true, description : "This battleaxe is sentient, adds +3 to hit and damage, and deals +2d6 radiant damage vs. fiends/undead. As an action, I can stop or start its glow of bright light in a 30-ft radius and dim light for another 30 ft. It has 3 charges, regaining all at dawn, which can be used to throw it, after which it returns to my hand. See Notes.", descriptionFull : WDH_azuredgeFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)<>Power Strike<<. When you hit with a melee attack using the staff, you can expend 1 charge to deal an extra 1d6 force damage to the target.\n >>Spells<<. While holding this staff, you can use an action to expend 1 or more of its charges to cast one of the following spells from it, using your spell save DC and spell attack bonus: Cone of Cold (5 charges), Fireball (5th-level version, 5 charges), Globe of Invulnerability (6 charges), Hold Monster (5 charges), Levitate (2 charges). Lightning Bolt (5th-level version, 5 charges), Magic Missile (1 charge), Ray of Enfeeblement (1 charge), or Wall of Force (5 charges).\n >>Retributive Strike<<. You can use an action to break the staff over your knee or against a solid surface, performing a retributive strike. The staff is destroyed and releases its remaining magic in an explosion that expands to fill a 30-foot-radius sphere centered on it.\n You have a 50% chance to instantly travel to a random plane of existence, avoiding the explosion. If you fail to avoid the effect, you take force damage equal to 16 \xD7 the number of charges in the staff. Every other creature in the area must make a DC 17 Dexterity saving throw. On a failed save, a creature takes an amount of damage based on how far away it is from the point of origin, as shown in the following table. On a successful save, a creature takes half as much damage.\n\n>>Distance from Origin\tEffect<<\n10 ft. away or closer\t8 \xD7 the number of charges in the staff\n11 to 20 ft. away\t6 \xD7 the number of charges in the staff\n21 to 30 ft. away\t4 \xD7 the number of charges in the staff\n\n\n >>Animate Walking Statues<<. You can expend 1 or more of the staff's charges as an action to animate or deactivate one or more of the walking statues of Waterdeep. You must be in the city to use this property, and you can animate or deactivate one statue for each charge expended. An animated statue obeys the telepathic commands of Khelben Arunsun's spirit, which is trapped inside the staff (see \"Personality\" below). A walking statue becomes inanimate if deactivated or if the staff is broken.\n >>Dispel Magic<<. You can expend 1 of the staff's charges as a bonus action to cast Dispel Magic on a creature, an object, or a magical effect that you touch with the tip of the staff. If the target is an unwilling creature or an object in the possession of such a creature, you must hit the creature with a melee attack using the Blackstaff before you can expend the charge to cast the spell.\n >>Drain Magic<<. This property affects only creatures that use spell slots. When you hit such a creature with a melee attack using the Blackstaff, you can expend 1 of the staff's charges as a bonus action, causing the target to expend one spell slot of the highest spell level it can cast without casting a spell. If the target has already expended all its spell slots, nothing happens. Spell slots that are expended in this fashion are regained when the target finishes a long rest, as normal.\n >>Master of Enchantment<<. When you cast an enchantment spell of 1st level or higher while holding the staff, you can make an Intelligence (Arcana) check with a DC of 10 + the level of the spell. If the check succeeds, you cast the spell without expending a spell slot.\n >>Sentience<<. The Blackstaff is a sentient staff of neutral alignment, with an Intelligence of 22, a Wisdom of 15, and a Charisma of 18. It has hearing and darkvision out to a range of 120 feet, and it can communicate telepathically with any creature that is holding it.\n >>Personality<<. The staff has the spirits of all previous Blackstaffs trapped within it. Its creator, Khelben Arunsun, is the dominant personality among them. Like Khelben, the staff is extremely devious and manipulative. It prefers to counsel its owner without exerting outright control. The staff's primary goal is to protect Waterdeep and its Open Lord, currently Laeral Silverhand. Its secondary goal is to help its wielder become more powerful.\n In the event that the holder of the office of the Blackstaff no longer serves the staff's wishes, the staff ceases to function until it finds a worthy inheritor\u2014someone whose loyalty to Waterdeep is beyond reproach.\n >>Spirit Trap<<. When the Blackstaff dies, the spirit of that individual becomes trapped in the staff along with the spirits of the previous Blackstaffs. (A Blackstaff whose spirit is trapped in the staff can't be raised from the dead.)\n Destroying the staff would release the spirits trapped inside it, but in that event, Khelben's spirit can lodge itself inside any one piece of the staff that remains. The piece containing Khelben's spirit has the staff's Sentience property but none of its other properties. As long as this piece of the staff exists, Khelben's spirit can make the staff whole again whenever he wishes. When the staff is remade, the spirits of the previous Blackstaffs become trapped inside it again."; if (MagicItemsList["staff of power"]) { MagicItemsList["blackstaff"] = { name : "Blackstaff", source : [["WDH", 190]], type : "staff", rarity : "legendary", storyItemAL : true, description : "This +2 quarterstaff gives me a +2 bonus on saves, AC, and spell attacks. It has 20 charges, regaining 2d8+4 at dawn, which can be used to cast spells, deal +1d6 force damage in melee, drain magic from a target hit in melee, or animate walking statues. It is sentient and has more features, see Notes page.", descriptionFull : WDH_blackstaffFullDescription.replace(/>>(.*?)<3", changes : "Can cast as a bonus action, but only on something touched by the staff. It might first require an attack by the staff to be able to cast it on" } }, toNotesPage : [{ name : "Features", note : "\n " + WDH_blackstaffFullDescription.replace(/>>(.*?)< 1; var hasBonus = How(aFld).indexOf(iTxt) !== -1; if (hasBonus !== addIt) { processMods( addIt, iName + " (magic item)", [{ type : "skill", field : aSkill, mod : 1, text : iTxt }] ); } } AddFeatureChoice(MagicItemsList["ioun stone"], false, "Supreme Intellect", { source : [["LLoK", 55]], rarity : "rare", magicItemTable : "G", description : "As an action, I can make this faceted sphere orbit my head at 1d3 ft or retrieve it. Others can catch it as an action with an attack or Acrobatics check (AC/DC 24). It has 10 HP and resistance to all damage. While it orbits my head, I gain a +1 bonus on Intelligence checks.", descriptionFull : "An Ioun stone is named after Ioun, a god of knowledge and prophecy revered on some worlds. Many types of Ioun stone exist, each type a distinct combination of shape and color.\n When you use an action to toss one of these stones into the air, the stone orbits your head at a distance of 1d3 feet and confers a benefit to you. Thereafter, another creature must use an action to grasp or net the stone to separate it from you, either by making a successful attack roll against AC 24 or a successful DC 24 Dexterity (Acrobatics) check. You can use an action to seize and stow the stone, ending its effect.\n A stone has AC 24, 10 hit points, and resistance to all damage. It is considered to be an object that is being worn while it orbits your head.\n You gain a +1 bonus to Intelligence checks while this faceted sphere orbits your head.", addMod : [ { type : "skill", field : "Arcana", mod : 1, text : "While the Ioun stone of Supreme Intellect orbits my head, I gain a +1 bonus on Intelligence checks." }, { type : "skill", field : "History", mod : 1, text : "While the Ioun stone of Supreme Intellect orbits my head, I gain a +1 bonus on Intelligence checks." }, { type : "skill", field : "Investigation", mod : 1, text : "While the Ioun stone of Supreme Intellect orbits my head, I gain a +1 bonus on Intelligence checks." }, { type : "skill", field : "Nature", mod : 1, text : "While the Ioun stone of Supreme Intellect orbits my head, I gain a +1 bonus on Intelligence checks." }, { type : "skill", field : "Religion", mod : 1, text : "While the Ioun stone of Supreme Intellect orbits my head, I gain a +1 bonus on Intelligence checks." } ] }); AddFeatureChoice(MagicItemsList["ioun stone"], false, "Historical Knowledge", { source : [["LLoK", 55]], rarity : "rare", magicItemTable : "G", description : "As an action, I can make this polished, steely sphere orbit my head at 1d3 ft or retrieve it. Others can catch it as an action with an attack or Acrobatics check (AC/DC 24). It has resistance to all damage and 10 HP. While it orbits my head, I gain proficiency in the History skill, or a +1 bonus with it if I'm already proficient.", descriptionFull : "An Ioun stone is named after Ioun, a god of knowledge and prophecy revered on some worlds. Many types of Ioun stone exist, each type a distinct combination of shape and color.\n When you use an action to toss one of these stones into the air, the stone orbits your head at a distance of 1d3 feet and confers a benefit to you. Thereafter, another creature must use an action to grasp or net the stone to separate it from you, either by making a successful attack roll against AC 24 or a successful DC 24 Dexterity (Acrobatics) check. You can use an action to seize and stow the stone, ending its effect.\n A stone has AC 24, 10 hit points, and resistance to all damage. It is considered to be an object that is being worn while it orbits your head.\n You gain proficiency in the History skill, or a +1 bonus to checks with that skill if already proficient, while this polished, steely sphere orbits your head.", skills : ["History"], changeeval : function () { MagicItemsList["ioun stone"].incrementSkill("His", "Historical Knowledge"); }, removeeval : function () { MagicItemsList["ioun stone"].incrementSkill("His", "Historical Knowledge", true); } }); AddFeatureChoice(MagicItemsList["ioun stone"], false, "Natural Knowledge", { source : [["LLoK", 55]], rarity : "rare", magicItemTable : "G", description : "As an action, I can make this burnished, brassy stone orbit my head at 1d3 ft or retrieve it. Others can catch it as an action with an attack or Acrobatics check (AC/DC 24). It has resistance to all damage and 10 HP. While it orbits my head, I gain proficiency in the Nature skill, or a +1 bonus with it if I'm already proficient.", descriptionFull : "An Ioun stone is named after Ioun, a god of knowledge and prophecy revered on some worlds. Many types of Ioun stone exist, each type a distinct combination of shape and color.\n When you use an action to toss one of these stones into the air, the stone orbits your head at a distance of 1d3 feet and confers a benefit to you. Thereafter, another creature must use an action to grasp or net the stone to separate it from you, either by making a successful attack roll against AC 24 or a successful DC 24 Dexterity (Acrobatics) check. You can use an action to seize and stow the stone, ending its effect.\n A stone has AC 24, 10 hit points, and resistance to all damage. It is considered to be an object that is being worn while it orbits your head.\n You gain proficiency in the Nature skill, or a +1 bonus to checks with that skill if already proficient, while this burnished, brassy stone orbits your head.", skills : ["Nature"], changeeval : function () { MagicItemsList["ioun stone"].incrementSkill("Nat", "Natural Knowledge"); }, removeeval : function () { MagicItemsList["ioun stone"].incrementSkill("Nat", "Natural Knowledge", true); } }); AddFeatureChoice(MagicItemsList["ioun stone"], false, "Religious Knowledge", { source : [["LLoK", 55]], rarity : "rare", magicItemTable : "G", description : "As an action, I can make this tiny golden gem orbit my head at 1d3 ft or retrieve it. Others can catch it as an action with an attack or Acrobatics check (AC/DC 24). It has resistance to all damage and 10 HP. While it orbits my head, I gain proficiency in the Religion skill, or a +1 bonus with it if I'm already proficient.", descriptionFull : "An Ioun stone is named after Ioun, a god of knowledge and prophecy revered on some worlds. Many types of Ioun stone exist, each type a distinct combination of shape and color.\n When you use an action to toss one of these stones into the air, the stone orbits your head at a distance of 1d3 feet and confers a benefit to you. Thereafter, another creature must use an action to grasp or net the stone to separate it from you, either by making a successful attack roll against AC 24 or a successful DC 24 Dexterity (Acrobatics) check. You can use an action to seize and stow the stone, ending its effect.\n A stone has AC 24, 10 hit points, and resistance to all damage. It is considered to be an object that is being worn while it orbits your head.\n You gain proficiency in the Religion skill, or a +1 bonus to checks with that skill if already proficient, while this tiny golden gem orbits your head.", skills : ["Religion"], changeeval : function () { MagicItemsList["ioun stone"].incrementSkill("Rel", "Religious Knowledge"); }, removeeval : function () { MagicItemsList["ioun stone"].incrementSkill("Rel", "Religious Knowledge", true); } }); AddFeatureChoice(MagicItemsList["ioun stone"], false, "Language Knowledge", { source : [["LLoK", 55]], rarity : "rare", magicItemTable : "G", description : "As an action, I can make this pulsating bit of red jeweled crystal orbit my head at 1d3 ft or retrieve it. Others can catch it as an action with an attack or Acrobatics check (AC/DC 24). It has 10 HP and resistance to all damage. While it orbits my head, I am fluent in one additional language chosen by the DM.", descriptionFull : "An Ioun stone is named after Ioun, a god of knowledge and prophecy revered on some worlds. Many types of Ioun stone exist, each type a distinct combination of shape and color.\n When you use an action to toss one of these stones into the air, the stone orbits your head at a distance of 1d3 feet and confers a benefit to you. Thereafter, another creature must use an action to grasp or net the stone to separate it from you, either by making a successful attack roll against AC 24 or a successful DC 24 Dexterity (Acrobatics) check. You can use an action to seize and stow the stone, ending its effect.\n A stone has AC 24, 10 hit points, and resistance to all damage. It is considered to be an object that is being worn while it orbits your head.\n You are fluent in one additional language while this pulsating bit of red jeweled crystal orbits your head. The DM chooses the language bestowed by the stone.", languageProfs : [1] }); AddFeatureChoice(MagicItemsList["ioun stone"], false, "Self-Preservation", { source : [["LLoK", 55]], rarity : "rare", description : "As an action, I can make this silvery gem orbit my head at 1d3 ft or retrieve it. Others can catch it as an action with an attack or Acrobatics check (AC/DC 24). It has 10 HP and resistance to all damage. While it orbits my head, I gain a +1 bonus to Intelligence saving throws.", descriptionFull : "An Ioun stone is named after Ioun, a god of knowledge and prophecy revered on some worlds. Many types of Ioun stone exist, each type a distinct combination of shape and color.\n When you use an action to toss one of these stones into the air, the stone orbits your head at a distance of 1d3 feet and confers a benefit to you. Thereafter, another creature must use an action to grasp or net the stone to separate it from you, either by making a successful attack roll against AC 24 or a successful DC 24 Dexterity (Acrobatics) check. You can use an action to seize and stow the stone, ending its effect.\n A stone has AC 24, 10 hit points, and resistance to all damage. It is considered to be an object that is being worn while it orbits your head.\n You gain a +1 bonus to Intelligence saving throws while this silvery gem orbits your head.", addMod : [{ type : "save", field : "Int", mod : 1, text : "While the Ioun stone of Self-Preservation orbits my head, I gain a +1 bonus to Intelligence saving throws." }] }, false, true); // force sorting on the last one } var LLoK_leatherGolemArmorFullDescription = [ "Strange rituals have repurposed the body of a flesh golem into this partially sentient suit of leather armor. While wearing this armor, you gain the following benefits:", "\u2022 You gain a +1 bonus to AC and to saving throws against spells and other magical effects.", "\u2022 >>Immutable Form<<. You are immune to any spell or effect that would alter your form.", "\u2022 >>Lightning Absorption<<. You gain resistance to lightning damage. Whenever you take lightning damage, you gain 5 temporary hit points.", ">>Curse<<. This armor is cursed, and it extends to whomever becomes attuned to it. Until the curse is broken with a remove curse spell or similar magic, you are unwilling to part with the armor. In addition, while you wear the cursed armor, you gain the following properties:", "\u2022 >>Aversion of Fire<<. If you take fire damage, you have disadvantage on attack rolls and ability checks until the end of your next turn.", "\u2022 >>Berserk<<. Whenever you suffer a critical hit, roll a d6. On a 6, you go beserk because of the armor. On each of your turns while berserk, you attack the nearest creature you can see. If no creature is near enough to move to and attack, you attack an object, with preference for an object smaller than yourself. Once you go beserk because of the armor, it cannot be removed. You continue to attack until you are incapacitated or until another creature is able to change your state of mind with appropriate magic (such as a calm emotions spell) or a successful DC 15 Charisma (Persuasion) check." ]; MagicItemsList["leather golem armor"] = { name : "Leather Golem Armor", source : [["LLoK", 55]], type : "armor (leather)", rarity : "rare", magicItemTable : "G", description : "I am unwilling to part with this leather armor until its curse is lifted from me, see Notes page. The curse makes me go berserk and have an aversion to fire. It gives me a +1 bonus to AC and saves vs. spells and magical effects. I have resistance to lightning damage and when I suffer such damage, I gain 5 temporary HP.", descriptionFull : LLoK_leatherGolemArmorFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)<>d20\tNew Form \td20\tNew Form<<", " 1\tTyrannosaurus\t 11\tWolf", " 2\tGiant ape \t 12\tHorse", " 3\tElephant \t 13\tOx", " 4\tGiant scorpion\t 14\tGiant frog", " 5\tRhinoceros \t 15\tPoisonous snake", " 6\tPolar bear \t 16\tHawk", " 7\tGiant toad \t 17\tOctopus", " 8\tGiant eagle \t 18\tCat", " 9\tBlack bear \t 19\tRat", "10\tCrocodile \t 20\tRabbit", "A creature is immune to this effect if it is immune to damage of the weapon's type, is a shapechanger, or has legendary actions.", ">>Curse<<. This weapon is cursed, and it extends to whomever becomes attuned to it. Until the curse is broken with a Remove Curse spell or similar magic, you are unwilling to part with the weapon. Whenever you attack a creature with this weapon and roll a 1 on the attack roll, you suffer the effect of a polymorph spell for 1 hour, rolling on the table to determine your new form." ]; MagicItemsList["polymorph blade"] = { name : "Polymorph Blade", nameTest : "Polymorph", source : [["LLoK", 59]], type : "weapon (any sword)", rarity : "very rare", magicItemTable : "H", description : "I'm unwilling to part with this magic sword. When I attack a creature with it and roll a 20 to hit, the creature must make a DC 15 Wisdom save or be polymorphed for 1 hour into a random beast (see Notes page). However, on a roll of 1 to hit, I am the one being polymorphed for 1 hour without a save.", descriptionFull : LLoK_polymorphBladeFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)<>Sentience<<. The Shield of the Hidden Lord is sentient as long as it imprisons Gargauth. While sentient, the shield has the following properties:", "\u2022 The shield has an Intelligence of 22, a Wisdom of 18, and a Charisma of 24, as well as hearing and truesight out to a range of 120 feet.", "\u2022 The shield can speak, read, and understand Common and Infernal, and it can communicate telepathically with any creature it can sense within 120 feet of it. Its voice is a deep, hollow whisper.", "\u2022 The shield has 3 charges. You can use an action to expend 1 charge to cast Fireball or 2 charges to cast Wall of Fire from the shield (save DC 21 for each). The Wall of Fire spell lasts for 1 minute (no concentration required). The shield regains all expended charges daily at dawn.", "\u2022 Anytime during your turn, the shield can choose to radiate an aura of dread for 1 minute. (This is not a power of the shield that you control.) Any creature hostile to you that starts its turn within 20 feet of the shield must make a DC 18 Wisdom saving throw. On a failed save, the creature is frightened until the start of its next turn. On a successful save, the creature is immune to this power of the shield for the next 24 hours. Once the shield uses this power, it can't use it again until the next dawn.\n", ">>Gargauth's Personality<<. Gargauth desperately seeks freedom but can't escape on its own. The pit fiend won't reveal its true nature, referring to itself only as the Hidden Lord. It drops hints and subtle suggestions that it is an angel trapped in an unholy prison. If released from the shield, the pit fiend honors the terms of whatever bargain it struck to facilitate its escape.", "While trapped in the shield, Gargauth carefully steers the shield's current owner toward committing acts of cruelty and domination, hoping to condemn the individual's soul to the Nine Hells. Conflict occurs if the shield's owner does anything that would make it more difficult for Gargauth to escape its prison, such as leaving the shield in a place where others are unlikely to find it.", "Gargauth doesn't know how to escape from the shield. The pit fiend believes (incorrectly) that it can break free of the shield if it's brought to the Nine Hells, for it's convinced that the shield's powers are weaker there.", ">>Freeing Gargauth<<. Casting dispel evil and good on the shield has a 1 percent chance of freeing the pit fiend, or automatically succeeds if the spell is cast by a solar, a planetar, or an archdevil. A god can release the pit fiend by touching the shield and speaking Gargauth's name. When released, Gargauth appears in a random, unoccupied space as close to the shield as possible." ]; MagicItemsList["shield of the hidden lord"] = { name : "Shield of the Hidden Lord", source : [["DiA", 225]], type : "shield", rarity : "legendary", storyItemAL : true, description : 'This shield grants me +2 bonus to AC and resistance to fire damage. It has 3 charges, regaining all at dawn. I can expend 1 charge to cast Fireball or 2 charges to cast Wall of Fire from it at DC 21. The shield is sentient and can communicate telepathically with any creature within 120 ft of it. See "Notes" page for more.', descriptionFull : DiA_shieldOfTheHiddenLordFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)<>Carrying Soul Coins<<. To hold a soul coin is to feel the soul bound within it\u2014overcome with rage or fraught with despair.", "An evil creature can carry as many soul coins as it wishes (up to its maximum weight allowance). A non-evil creature can carry a number of soul coins equal to or less than its Constitution modifier without penalty. A non-evil creature carrying a number of soul coins greater than its Constitution modifier has disadvantage on its attack rolls, ability checks, and saving throws.", ">>Using a Soul Coin<<. A soul coin has 3 charges. A creature carrying the coin can use its action to expend 1 charge from a soul coin and use it to do one of the following:", "\u2022 >>Drain Life<<. You siphon away some of the soul's essence and gain 1d10 temporary hit points.", "\u2022 >>Query<<. You telepathically ask the soul a question and receive a brief telepathic response, which you can understand. The soul knows only what it knew in life, but it must answer you truthfully and to the best of its ability. The answer is no more than a sentence or two and might be cryptic.\n", ">>Freeing a Soul<<. Casting a spell that removes a curse on a soul coin frees the soul trapped within it, as does expending all of the coin's charges. The coin itself rusts from within and is destroyed once the soul is released. A freed soul travels to the realm of the god it served or the outer plane most closely tied to its alignment (DM's choice). The souls of lawful evil creatures released from soul coins typically emerge from the River Styx as lemure devils.", "A soul can also be freed by destroying the coin that contains it. A soul coin has AC 19, 1 hit point for each charge it has remaining, and immunity to all damage except that which is dealt by a hellfire weapon or an infernal war machine's furnace.", "Freeing a soul from a soul coin is considered a good act, even if the soul belongs to an evil creature.", ">>Hellish Currency<<. Soul coins are a currency of the Nine Hells and are highly valued by devils. The coins are used among the infernal hierarchy to barter for favors, bribe the unwilling, and reward the faithful for services rendered.", "Soul coins are created by Mammon and his greater devils on Minauros, the third layer of the Nine Hells, in a vast chamber where the captured souls of evil mortals are bound into the coins. These coins are then distributed throughout the Nine Hells to be used for goods and services, infernal deals, dark bargains, and bribes." ]; MagicItemsList["soul coin"] = { name : "Soul Coin", source : [["DiA", 225], ["CoA", 269]], type : "wondrous item", rarity : "uncommon", description : "Each coin traps a unique soul, whose rage or despair is felt by me while I hold it. A coin has 3 charges. As an action, I can expend 1 charge to either siphon the soul's essence to grant me 1d10 temporary HP or telepathically ask the soul a question which it must answer truthfully. See \"Notes\" page for more.", descriptionFull : DiA_soulCoinFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)< 4 ? "my arcane firearm, " : classes.known.artificer.subclass.indexOf("armorer") !== -1 && classes.known.artificer.level > 2 ? "my arcane armor, " : ""; spellObj.compMaterial = (spellObj.compMaterial ? spellObj.compMaterial + ".\n\nAlso a" : "A") + "lways requires my artificer spellcasting focus: thieves' tools, any set of artisan's tools I'm proficient with, " + extraFocus + "or an item infused by me."; if (GetFeatureChoice("classes", "artificer", "spellcasting", true).indexOf("don't change component column on spell sheet") != -1) { // do nothing if set to do so } else if (!spellObj.components) { spellObj.components = "M\u0192"; } else if (spellObj.components.indexOf("M") == -1) { spellObj.components += ",M\u0192"; } else if ((/M([^\u0192\u2020]|$)/).test(spellObj.components)) { spellObj.components = spellObj.components.replace("M", "M\u0192"); } return true; } return false; }, "My artificer spells always require me to use a spellcasting focus: thieves' tools, artisan's tools I'm proficient with, or an item infused by me." ] }, extrachoices : ["Don't change component column on spell sheet"], extraname : "Artificer Spellcasting", "don't change component column on spell sheet" : { name : "[Meta] Don't alter spell sheets", source : [["E:RLW", 55], ["T", 11]], description: desc("The automation will not add M\u0192 to each artificer spell on the generated spell sheets") } }, "infuse item" : { name : "Infuse Item", source : [["E:RLW", 57], ["T", 12]], minlevel : 2, description : desc('Use the "Choose Feature" button above to add Artificer Infusions to the third page'), additional : levels.map(function (n) { return n < 2 ? "" : (n < 6 ? 4 : n < 10 ? 6 : n < 14 ? 8 : n < 18 ? 10 : 12) + " infusions known; max " + (n < 6 ? 2 : n < 10 ? 3 : n < 14 ? 4 : n < 18 ? 5 : 6) + " infused items"; }), extraname : "Artificer Infusion", extrachoices : ["Boots of the Winding Path (prereq: level 6 artificer)", "Enhanced Arcane Focus", "Enhanced Defense (armor)", "Enhanced Defense (shield)", "Enhanced Weapon", "Homunculus Servant", "Radiant Weapon (prereq: level 6 artificer)", "Repeating Shot", "Repulsion Shield (prereq: level 6 artificer)", "Resistant Armor (prereq: level 6 artificer)", "Returning Weapon"], extraTimes : levels.map(function (n) { return n < 2 ? 0 : n < 6 ? 4 : n < 10 ? 6 : n < 14 ? 8 : n < 18 ? 10 : 12; }), "boots of the winding path (prereq: level 6 artificer)" : { name : "Boots of the Winding Path", source : [["E:RLW", 62], ["T", 21]], description : desc([ "The wearer can use a bonus action to teleport up to 15 ft to an unoccupied space it can see", "It must be a space that the wearer had occupied some time during the current turn" ]), additional : "pair of boots; requires attunement", prereqeval : function(v) { return classes.known.artificer.level >= 6; }, magicitemsAdd : ["Boots of the Winding Path"] }, "enhanced arcane focus" : { name : "Enhanced Arcane Focus", source : [["E:RLW", 62], ["T", 21]], description: desc("The holder has a bonus to spell attack rolls and ignores half cover with spell attacks"), additional : levels.map(function (n) { return "rod/staff/wand; attunement; +" + (n < 10 ? 1 : 2); }), eval : function (lvl, chc) { AddMagicItem("Enhanced Arcane Focus +" + (classes.known.artificer.level < 10 ? 1 : 2)); }, removeeval : function (lvl, chc) { RemoveMagicItem("enhanced arcane focus, +1 or +2"); } }, "enhanced defense (armor)" : { name : "Enhanced Defense", source : [["E:RLW", 62], ["T", 21]], description : "", additional : levels.map(function (n) { return "armor/shield; +" + (n < 10 ? 1 : 2) + " magical"; }), prereqeval : function(v) { return GetFeatureChoice("classes", "artificer", "infuse item", true).indexOf("enhanced defense (shield)") == -1; }, eval : function (lvl, chc) { AddMagicItem("Armor +" + (classes.known.artificer.level < 10 ? 1 : 2)); }, removeeval : function (lvl, chc) { RemoveMagicItem("armor, +1, +2, or +3"); } }, "enhanced defense (shield)" : { name : "Enhanced Defense", source : [["E:RLW", 62], ["T", 21]], description : "", additional : levels.map(function (n) { return "armor/shield; +" + (n < 10 ? 1 : 2) + " magical"; }), prereqeval : function(v) { return GetFeatureChoice("classes", "artificer", "infuse item", true).indexOf("enhanced defense (armor)") == -1; }, eval : function (lvl, chc) { AddMagicItem("Shield +" + (classes.known.artificer.level < 10 ? 1 : 2)); }, removeeval : function (lvl, chc) { RemoveMagicItem("shield, +1, +2, or +3"); } }, "enhanced weapon" : { name : "Enhanced Weapon", source : [["E:RLW", 62], ["T", 21]], description : "", additional : levels.map(function (n) { return "simple/martial weapon; +" + (n < 10 ? 1 : 2) + " magical"; }), eval : function (lvl, chc) { AddMagicItem("Weapon +" + (classes.known.artificer.level < 10 ? 1 : 2)); }, removeeval : function (lvl, chc) { RemoveMagicItem("weapon, +1, +2, or +3"); } }, "homunculus servant" : { name : "Homunculus Servant", source : [["E:RLW", 62], ["T", 21]], description : desc([ "The item I infuse becomes the heart of a homunculus that immediately forms around it", "I determine its appearance; It is friendly to me and my allies and obeys my commands", 'See "Homunculus Servant" on a companion page to see its game statistics' ]), additional : "gem or crystal of 100+ gp", action : [["bonus action", " (command)"]], creaturesAdd : [["Homunculus Servant"]], creatureOptions : [{ name : "Homunculus Servant", source : [["E:RLW", 62], ["T", 22]], size : 5, type : "Construct", alignment : "Neutral", ac : 13, hp : 3, hd : [2, 4], hdLinked : ["artificer"], speed : "20 ft, fly 30 ft", scores : [4, 15, 12, 10, 10, 7], saves : ["", 4, "", "", "", ""], skills : { "perception" : 4, "stealth" : 4 }, damage_immunities : "poison", condition_immunities : "exhaustion, poisoned", senses : "Darkvision 60 ft", passivePerception : 14, languages : "understands the languages of its creator but can't speak", challengeRating : "0", proficiencyBonus : 2, proficiencyBonusLinked : true, attacksAction : 1, attacks : [{ name : "Force Strike", ability : 4, damage : [1, 4, "force"], range : "30 ft", description : "", modifiers : ["", "Prof"], abilitytodamage : false, useSpellMod : "artificer" }], features : [{ name : "Creator", description : "The homunculus obeys the commands of its creator and has the same proficiency bonus. It takes its turn immediately after its creator, on the same initiative count. It can move and take reactions on its own, but only takes the Dodge action on its turn unless its creator takes a bonus action to command it to take another action. If its creator is incapacitated, it can take any action, not just Dodge." }], traits : [{ name : "Healing", description : "The homunculus regains 2d6 hit points whenever the Mending spell is cast on it. Its HP total is equal to 1 + its creator's artificer level + its creator's Intelligence modifier. If it or its creator dies, the homunculus vanishes, leaving its heart in its space." }, { name : "Evasion", description : "If the homunculus is subjected to an effect that allows it to make a Dexterity saving throw to take only half damage, it instead takes no damage if it succeeds on the saving throw, and only half damage if it fails. It can't use this trait if it's incapacitated." }], actions : [{ name : "Channel Magic", description : "As a reaction, the homunculus delivers a spell cast by its creator that has a range of touch. The homunculus must be within 120 ft of its creator to do so." }], header : "Construct", calcChanges : { hp : function (totalHD, HDobj, prefix) { if (!classes.known.artificer) return; var intMod = Number(What('Int Mod')); var artLvl = classes.known.artificer.level; HDobj.alt.push(1 + intMod + artLvl); HDobj.altStr.push(" = 1 as a base\n + " + intMod + " from its creator's Intelligence modifier\n + " + artLvl + " from its creator's artificer level"); }, setAltHp : true, hpForceRecalc : true } }] }, "radiant weapon (prereq: level 6 artificer)" : { name : "Radiant Weapon", source : [["E:RLW", 62], ["T", 22]], description : desc([ "The weapon has a +1 bonus to attack and damage rolls made with it and it sheds light", "As a bonus action, its wielder can start/stop the light, 30-ft radius bright + 30 ft dim light", "The weapon has 4 charges, regaining 1d4 expended charges daily at dawn", "As a reaction when hit by an attack, the wielder can expend 1 charge to blind its attacker", "The attacker makes a Con save (my spell save DC) or is blinded until its next turn ends" ]), additional : "simple/martial weapon; requires attunement", prereqeval : function(v) { return classes.known.artificer.level >= 6; }, magicitemsAdd : ["Radiant Weapon"] }, "repeating shot" : { name : "Repeating Shot", source : [["E:RLW", 62], ["T", 22]], description : desc([ "The weapon requiring ammunition has a +1 bonus to attack and damage rolls made with it", "It magically produces one piece of ammunition whenever it is used to make a ranged attack", "Thus, it doesn't require ammunition and ignores the loading property if it has it" ]), additional : "weapon with ammo; requires attunement", magicitemsAdd : ["Repeating Shot"] }, "repulsion shield (prereq: level 6 artificer)" : { name : "Repulsion Shield", source : [["E:RLW", 63], ["T", 23]], description : desc([ "The shield gives its wearer an extra +1 bonus to AC; It has 4 charges, regaining 1d4 daily", "As a reaction when hit in melee, the wearer can use 1 charge to push the attacker 15 ft" ]), additional : "shield; requires attunement", prereqeval : function(v) { return classes.known.artificer.level >= 6; }, magicitemsAdd : ["Repulsion Shield"] }, "resistant armor (prereq: level 6 artificer)" : { name : "Resistant Armor", source : [["E:RLW", 63], ["T", 23]], description : desc([ "The armor gives its wearer resistance to one type of damage, chosen at the time of infusion", "Choose from: acid, cold, fire, force, lightning, necrotic, poison, psychic, radiant, or thunder" ]), additional : "suit of armor; requires attunement", prereqeval : function(v) { return classes.known.artificer.level >= 6; }, magicitemsAdd : ["Armor of Resistance"] }, "returning weapon" : { name : "Returning Weapon", source : [["E:RLW", 63], ["T", 23]], description : "After being used for a ranged attack, the weapon returns immediately; +1 magical bonus", additional : "weapon with the thrown property", magicitemsAdd : ["Returning Weapon"] } }, "the right tool for the job" : { name : "The Right Tool for the Job", source : [["E:RLW", 57], ["T", 13]], minlevel : 3, description: " [using thieves' or artisan's tools]" + desc("In 1 hour (during a rest) I can create a set of artisan's tools that last until I do so again"), }, "subclassfeature3" : { name : "Artificer Specialist", source : [["E:RLW", 57], ["T", 13]], minlevel : 3, description : desc([ 'Choose a specialism and put it in the "Class" field on the first page', "Choose either alchemist, artillerist, or battle smith" ]) }, "tool expertise" : { name : "Tool Expertise", source : [["E:RLW", 57], ["T", 13]], minlevel : 6, description : " [expertise with all tools I'm proficient with]", skillstxt : "Expertise with all tools I'm proficient with", eval : function () { Checkbox('Too Exp', true); }, removeeval : function () { Checkbox('Too Exp', false); } }, "flash of genius" : { name : "Flash of Genius", source : [["E:RLW", 57], ["T", 13]], minlevel : 7, description: desc("As a reaction when I or another in 30 ft make a check/save, I can add my Int mod to it"), action : [["reaction", ""]], usages : "Intelligence modifier per ", usagescalc : "event.value = Math.max(1, What('Int Mod'));", recovery : "long rest" }, "magic item adept" : { name : "Magic Item Adept", source : [["E:RLW", 57], ["T", 13]], minlevel : 10, description: desc("It takes me half the normal time and gold to craft common and uncommon magic items"), additional : levels.map(function (n) { return n < 10 ? "" : "attune to " + (n < 14 ? 4 : n < 18 ? 5 : 6) + " magic items"; }) }, "spell-storing item" : { name : "Spell-Storing Item", source : [["E:RLW", 58], ["T", 13]], minlevel : 11, description : desc([ "When I finish a long rest, I can infuse a 1st-/2nd-level artificer spell into an item I touch", "It has to be a weapon or spellcasting focus for me; Stored spells are lost if I do this again", "The spell must have a casting time of 1 action, but I need not have it prepared", "A creature holding an infused item can use an action to cast the spell, using my abilities" ]), additional : "cast stored spell", usages : "2\xD7 Int mod per ", usagescalc : "event.value = Math.max(2, Number(What('Int Mod')) * 2);", recovery : typePF ? "LR" : "long rest" }, "magic item savant" : { name : "Magic Item Savant", source : [["E:RLW", 58], ["T", 14]], minlevel : 14, description : " [ignore class/race/spell/level attune require.]" }, "soul of artifice" : { name : "Soul of Artifice", source : [["E:RLW", 58], ["T", 14]], minlevel : 20, description : " [+1 on all saves per attuned magic item]\n As a reaction when I'm reduced to 0 HP, I can end one infusion to drop to 1 HP instead", action : [["reaction", ""]], savetxt : { text : ["+1 to all saves per attuned magic item"] } } }, prereqLvl6 : function(v) { return classes.known.artificer.level >= 6; }, prereqLvl10 : function(v) { return classes.known.artificer.level >= 10; }, prereqLvl14 : function(v) { return classes.known.artificer.level >= 14; }, }; // Set the Artificer infusion list for Replicate Magic Item RunFunctionAtEnd(function() { var artMi = [ // 2nd-level artificer ["alchemy jug", 2], ["bag of holding", 2], ["cap of water breathing", 2], ["goggles of night", 2], ["rope of climbing", 2], ["sending stones", 2], ["wand of magic detection", 2], ["wand of secrets", 2], // 6th-level artificer ["boots of elvenkind", 6], ["cloak of elvenkind", 6], ["cloak of the manta ray", 6], ["eyes of charming", 6], ["gloves of thievery", 6], ["lantern of revealing", 6], ["pipes of haunting", 6], ["ring of water walking", 6], // 10th-level artificer ["boots of striding and springing", 10], ["boots of the winterlands", 10], ["bracers of archery", 10], ["brooch of shielding", 10], ["cloak of protection", 10], ["eyes of the eagle", 10], ["gauntlets of ogre power", 10], ["gloves of missile snaring", 10], ["gloves of swimming and climbing", 10], ["hat of disguise", 10], ["headband of intellect", 10], ["helm of telepathy", 10], ["medallion of thoughts", 10], ["necklace of adaptation", 10], // TCoE addition ["periapt of wound closure", 10], ["pipes of the sewers", 10], ["quiver of ehlonna", 10], ["ring of jumping", 10], ["ring of mind shielding", 10], ["slippers of spider climbing", 10], ["ventilating lung", 10], ["winged boots", 10], // 14th-level artificer ["amulet of health", 14], ["arcane propulsion arm", 14], ["belt of giant strength", 14, "hill (str 21, rare)"], ["boots of levitation", 14], ["boots of speed", 14], ["bracers of defense", 14], ["cloak of the bat", 14], ["dimensional shackles", 14], ["gem of seeing", 14], ["horn of blasting", 14], ["ring of free action", 14], ["ring of protection", 14], ["ring of the ram", 14] ]; // add all common items (except potions and scrolls) for (var mi in MagicItemsList) { var aMI = MagicItemsList[mi]; if (aMI.type && !(/potion|scroll/i).test(aMI.type) && ( (!aMI.rarity && aMI.choices) || (aMI.rarity && aMI.rarity.toLowerCase() === "common") ) ) { // only look at choices if the main object has no rarity (i.e. the choices have different rarities) if (!aMI.rarity && aMI.choices) { for (var c = 0; c < aMI.choices.length; c++) { var choiceNmLC = aMI.choices[c].toLowerCase(); var aMIchoice = aMI[choiceNmLC]; // skip if not common rarity or a potion or a scroll if (!aMIchoice || !aMIchoice.rarity || aMIchoice.rarity.toLowerCase() !== "common" || (/potion|scroll/i).test(aMIchoice.type)) continue; artMi.push([mi, 0, choiceNmLC]); } } else { // the main object has rarity "common", so add it as a whole artMi.push([mi]); } } } var theObj = ClassList.artificer.features["infuse item"]; for (var a = 0; a < artMi.length; a++) { var MI0 = artMi[a][0]; var MI1 = artMi[a][1]; var MI2 = artMi[a][2]; var anArtMi = MagicItemsList[MI0]; if (!anArtMi) continue; if (MI2 && anArtMi[MI2]) { anArtMi = { name : anArtMi[MI2].name ? anArtMi[MI2].name : anArtMi.name + " [" + MI2.capitalize() + "]", rarity : anArtMi[MI2].rarity ? anArtMi[MI2].rarity : anArtMi.rarity, source : anArtMi[MI2].source ? anArtMi[MI2].source : anArtMi.source, attunement : anArtMi[MI2].attunement !== undefined ? anArtMi[MI2].attunement : anArtMi.attunement } } var theI = anArtMi.name + (MI1 ? " (prereq: level " + MI1 + " artificer)" : ""); var theILC = theI.toLowerCase(); if (theObj[theILC]) continue; theObj[theILC] = { name : anArtMi.name, description : "", source : anArtMi.source, magicitemsAdd : [anArtMi.name], additional : anArtMi.attunement ? "requires attunement" : undefined, prereqeval : MI1 && MI1 > 2 ? ClassList.artificer["prereqLvl" + MI1] : undefined, submenu : "Replicate Magic Item" + (MI1 ? " (prereq: level " + (" "+MI1).slice(-2) + " artificer)" : " (common magic items) [" + getLetterRange(anArtMi.name, ["A-F", "G-Q", "R-Z"]) + "]") }; theObj.extrachoices.push(theI); }; }); // Add the Alchemist specialism AddSubClass("artificer", "alchemist", { regExpSearch : /^(?=.*alchemist)(?!.*wizard).*$/i, subname : "Alchemist", fullname : "Alchemist", source : [["E:RLW", 58], ["T", 14]], features : { "subclassfeature3" : { name : "Tools Proficiency", source : [["E:RLW", 58], ["T", 14]], minlevel : 3, description : " [proficient with alchemist's supplies]", toolProfs : ["Alchemist's supplies"], spellcastingExtra : ["healing word", "ray of sickness", "flaming sphere", "melf's acid arrow", "gaseous form", "mass healing word", "blight", "death ward", "cloudkill", "raise dead"] }, "subclassfeature3.1" : { name : "Experimental Elixir", source : [["E:RLW", 58], ["T", 14]], minlevel : 3, description : desc([ "When I finish a long rest I can produce a number of elixirs in empty flasks I touch", "Also, as an action, I can expend a spell slot to create one elixir in a touched empty flask", "I need alchemist supplies on my person to do this; An elixir lasts until my next long rest", "For their effects, see the experimental elixir table on a Notes page; They work like potions" ]), additional : levels.map(function (n) { return n < 3 ? "" : (n < 6 ? 1 : n < 15 ? 2 : 3) + " elixir" + (n < 6 ? "" : "s"); }), action : [["action", ""]], toNotesPage : [{ name : "Experimental Elixir Table", note : [ "Whenever I finish a long rest, I can magically produce a number of experimental elixir in empty flasks I touch. I can create one at 3rd level, two at 6th level, and three at 15th level.", "Creating an experimental elixir requires me to have alchemist's supplies on my person, and any elixir created like this lasts until it is drunk or until the end of my next long rest.", "I can create additional experimental elixirs by expending a spell slot of 1st level or higher for each one. When I do so, I use my action to create the elixir in an empty flask I touch.", "As an action, a creature can drink the elixir or administer it to an incapacitated creature.", "The effect of an elixir when someone drinks it is found on the table below. Roll to determine the effect for each elixir I create when finishing a long rest. I can choose the effect from the table for those created by expending a spell slot.", "\n D6\tEFFECT", "1\tHealing: The drinker regains a number of hit points equal to 2d4 + my Intelligence modifier.", "2\tSwiftness: The drinker's walking speed increases by 10 ft for 1 hour.", "3\tResilience: The drinker gains a +1 bonus to AC for 10 minutes.", "4\tBoldness: The drinker can roll a d4 and add the number rolled to every attack roll and saving throw they make for the next minute.", "5\tFlight: The drinker gains a flying speed of 10 ft for 10 minutes.", "6\tTransformation: The drinker's body is transformed as if by the alter self spell. The drinker determines the transformation caused by the spell, the effects of which last for 10 minutes." ] }] }, "subclassfeature5" : { name : "Alchemical Savant", source : [["E:RLW", 58], ["T", 15]], minlevel : 5, description : desc([ "When I cast spells using alchemist's supplies as my spellcasting focus, I can enhance them", "I add my Int mod to one roll of acid, fire, necrotic, or poison damage, or restoring HP" ]), calcChanges : { atkCalc : [ function (fields, v, output) { if (v.thisWeapon[3] && v.thisWeapon[4].indexOf("artificer") !== -1 && (/acid|fire|necrotic|poison/i).test(fields.Damage_Type)) { output.extraDmg += Math.max(Number(What("Int Mod")), 1); } }, "Artificer spells that deal acid, fire, necrotic, or poison damage which I cast while using alchemist's supplies as my spellcasting focus, have my Intelligence modifier (min 1) added to one damage die roll." ], spellAdd : [ function (spellKey, spellObj, spName) { if (spellObj.psionic || spName !== "artificer") return; var toAdd = Math.max(Number(What("Int Mod")), 1); if (genericSpellDmgEdit(spellKey, spellObj, "acid|fire|necro\\.?|necrotic|poison", toAdd, true, true) || genericSpellDmgEdit(spellKey, spellObj, "heal", toAdd, true, true)) { return true; } }, "Artificer spells I cast using alchemist's supplies as my spellcasting focus, have my Intelligence modifier (min 1) added to one die rolled for dealing acid, fire, necrotic, or poison damage, or when restoring hit points." ] } }, "subclassfeature9" : { name : "Restorative Reagents", source : [["E:RLW", 59], ["T", 15]], minlevel : 9, description : desc([ "Drinking my experimental elixirs now also grants 2d6 + my Int mod in temp HP (min 1)", "I can cast Lesser Restoration with alchemist's supplies without a spell slot (Int mod times)" ]), usages : "Int mod per ", usagescalc : "event.value = Math.max(1, What('Int Mod'));", recovery : "long rest", limfeaname : "Restorative Reagents: Lesser Restoration", spellcastingBonus : [{ name : "Restorative Reagents", spells : ["lesser restoration"], selection : ["lesser restoration"], firstCol : "Sp" }], spellChanges : { "lesser restoration" : { components : "V,S,M\u0192", compMaterial : "Alchemist's supplies", changes : "When using my Restorative Reagents class feature, I can cast Lesser Restoration a number of times per long rest equal to my Intelligence modifier. To do so, I have to use alchemist's supplies as my spellcasting focus." } } }, "subclassfeature15" : { name : "Chemical Mastery", source : [["E:RLW", 59], ["T", 15]], minlevel : 15, additional: "each spell 1\xD7 per long rest", description : desc([ "I have resistance to acid and poison damage and immunity to being poisoned", "I can cast Greater Restoration and Heal each once per long rest without a spell slot", "I need alchemist's supplies as a focus for it, but the spells require no material components" ]), dmgres : ["Acid", "Poison"], savetxt : { immune : ["poisoned condition"] }, spellcastingBonus : [{ name : "Chemical Mastery", spells : ["greater restoration", "heal"], selection : ["greater restoration", "heal"], firstCol : "oncelr", times : 2 }], spellChanges : { "greater restoration" : { components : "V,S,M\u0192", compMaterial : "Alchemist's supplies", description : "Reduce exhaustion 1 lvl or end charm, petrify, curse, one ability score reduction, or max HP reduction", changes : "When using my Chemical Mastery class feature and alchemist's supplies as my spellcasting focus, I can cast Greater Restoration once per long rest without using a spell slot or requiring other material components." }, "heal" : { components : "V,S,M\u0192", compMaterial : "Alchemist's supplies", allowUpCasting : false, changes : "When using my Chemical Mastery class feature and alchemist's supplies as my spellcasting focus, I can cast Heal once per long rest without using a spell slot." } } } } }); // Add the Artillerist specialism AddSubClass("artificer", "artillerist", { regExpSearch : /^(?=.*artillerist)(?!.*wizard).*$/i, subname : "Artillerist", fullname : "Artillerist", source : [["E:RLW", 59], ["T", 17]], features : { "subclassfeature3" : { name : "Tools Proficiency", source : [["E:RLW", 59], ["T", 17]], minlevel : 3, description : " [proficient with woodcarver's tools]", toolProfs : ["Woodcarver's tools"], spellcastingExtra : ["shield", "thunderwave", "scorching ray", "shatter", "fireball", "wind wall", "ice storm", "wall of fire", "cone of cold", "wall of force"] }, "subclassfeature3.1" : { name : "Eldritch Cannon", source : [["E:RLW", 59], ["T", 17]], minlevel : 3, description : desc([ "As an action, I can use woodcarver's or smith's tools to create an eldritch cannon in 5 ft", "I can do this once per long rest, or by expending a spell slot (SS 1+) to create one cannon", "I decide its size (Small/Tiny), appearance, type: flamethrower, force ballista, or protector", "It disappears after 1 hour, when reduced to 0 HP, or if I dismiss it as an action", "As a bonus action when within 60 ft of it, I can activate it to move and do its action", "I can't have multiple cannons; Select \"Eldritch Cannon\" on a companion page for its stats" ]), usages : 1, recovery : "long rest", altResource : "SS 1+", additional : levels.map(function(n) { return n < 3 ? "" : n < 15 ? "1 cannon" : "2 cannons"; }), action : [["action", " (create/dismiss)"], ["bonus action", " (activate)"]], creaturesAdd : [["Eldritch Cannon"]], creatureOptions : [{ name : "Eldritch Cannon", source : [["E:RLW", 59], ["T", 17]], size : [4, 5], type : "Object", alignment : "", ac : 18, hp : 5, hd : ["", ""], speed : "15 ft, climb 15 ft", scores : [10, 10, 10, 10, 10, 10], damage_immunities : "poison, psychic", passivePerception : 10, challengeRating : "1", proficiencyBonus : 2, proficiencyBonusLinked : true, attacksAction : 0, attacks : [{ name : "Flamethrower", ability : 4, damage : [2, 8, "fire"], range : "15-ft cone", description : "Dex save, success - half damage; Unattended flammable objects ignite", dc : true, useSpellMod : "artificer", abilitytodamage : false, tooltip : "The cannon exhales fire in an adjacent 15-ft cone that its creator designates. Each creature in that area must make a Dexterity saving throw against its creator's artificer spell save DC, taking 2d8 fire damage on a failed save or half as much damage on a successful one. The fire ignites any flammable objects in the area that aren't being worn or carried." }, { name : "Force Ballista", ability : 4, damage : [2, 8, "force"], range : "120 ft", description : "Creature hit is pushed 5 ft away", useSpellMod : "artificer", abilitytodamage : false, tooltip : "The cannon's creator makes a ranged spell attack, originating from the cannon, at one creature or object within 120 ft of it. On a hit, the target takes 2d8 force damage, and if the target is a creature, it is pushed up to 5 ft away from the cannon." }, { name : "Detonate", ability : 4, damage : [3, 8, "force"], range : "20-ft radius", description : "Dex save, success - half damage; Destroys cannon", dc : true, useSpellMod : "artificer", abilitytodamage : false, tooltip : "As an action, its creator can command the cannon to detonate if its creator is within 60 ft of it. Doing so destroys the cannon and forces each creature within 20 ft of it to make a Dexterity saving throw against its creator's artificer spell save DC, taking 3d8 force damage on a failed save or half as much damage on a successful one." }], features : [{ name : "Healing", description : "The cannon regains 2d6 HP whenever Mending is cast on it." }, { name : "Cannon Type", description : "Upon creation, the creator decides what type of cannon it is: Flamethrower, Force Ballista, or Protector. What feature/attack it can use depends on its type." }, { name : "Protector", description : "The cannon emits a burst of positive energy that grants itself and each creature of its creator's choice within 10 ft of it a number of temporary hit points equal to 1d8 + its creator's Intelligence modifier (minimum of +1)." }], traits : [{ name : "Creator", description : "As an object, the cannon only acts when activated by its creator, uses its creator's artificer spell attack and save DC, and has five times the artificer level in HP. It disappears after 1 hour, when reduced to 0 HP, or when its creator dismisses it as an action." }, { name : "Activation", description : "The creator of the cannon can activate it as a bonus action while within 60 ft of it. Once activated, the cannon does as instructed, moves and uses the action associated with its type: flamethrower attack, force ballista attack, or protector feature." }, { name : "Detonate (Artillerist 9)", minlevel : 9, description : "The creator of the cannon, can use an action to detonate the cannon when within 60 ft of it, see the attack section. The cannon's attacks now deal 3d8 damage.", eval : function(prefix, lvl) { // add the Detonate attack entry Value(prefix + "Comp.Use.Attack.3.Weapon Selection", "Detonate"); // Upgrade the damage for the attacks for (var i = 1; i <= 2; i++) { Value(prefix + "BlueText.Comp.Use.Attack." + i + ".Damage Die", "3d8"); } }, removeeval : function(prefix, lvl) { // remove the Detonate attack entry Value(prefix + "Comp.Use.Attack.3.Weapon Selection", ""); // Reset the damage for the attacks for (var i = 1; i <= 2; i++) { Value(prefix + "BlueText.Comp.Use.Attack." + i + ".Damage Die", "2d8"); } } }, { name : "Shimmering Field (Artillerist 15)", minlevel : 15, description : "The creator of the cannon and their allies have half cover while within 10 ft of the cannon." }], minlevelLinked : ["artificer"], header : "Object", calcChanges : { hp : function (totalHD, HDobj, prefix) { if (!classes.known.artificer) return; var artLvl = classes.known.artificer.level; HDobj.alt.push(5 * artLvl); HDobj.altStr.push(" = 5 \xD7 " + artLvl + " from five times its creator's artificer level"); }, setAltHp : true }, eval : function(prefix, lvl) { // remove the Detonate attack if adding this creature before artificer level 9 if (lvl[0] < 9) Value(prefix + "Comp.Use.Attack.3.Weapon Selection", ""); } }] }, "subclassfeature5" : { name : "Arcane Firearm", source : [["E:RLW", 59], ["T", 18]], minlevel : 5, description : " [lasts until I use this feature again]" + desc([ "After a long rest, I can use woodcarver's tools to enhance a wand, staff, or rod", "If I use this as my spellcasting focus for an artificer spell, I add +1d8 to one damage" ]), calcChanges : { atkAdd : [ function (fields, v) { if (v.thisWeapon[3] && v.thisWeapon[4].indexOf("artificer") !== -1) { fields.Damage_Die = fields.Damage_Die.replace(/D/g, 'd'); var d8Regex = /(\d+)d8/; if (fields.Damage_Die.indexOf('Bd8') != -1) { fields.Damage_Die = fields.Damage_Die.replace('Bd8', 'Cd8'); } else if (fields.Damage_Die.indexOf('Cd8') != -1) { fields.Damage_Die = fields.Damage_Die.replace('Cd8', 'Qd8'); } else if (d8Regex.test(fields.Damage_Die)) { fields.Damage_Die = fields.Damage_Die.replace(d8Regex, Number(fields.Damage_Die.replace(d8Regex, '$1')) + 1 + 'd8'); } else if (v.thisWeapon[3] == "eldritch blast") { fields.Description += (fields.Description ? '; ' : '') + "One ray +1d8 dmg"; } else { fields.Damage_Die += '+1d8'; } } }, "If I use my arcane firearm as a spellcasting focus for an artificer spell, I can add +1d8 to one of the spell's damage rolls.", 10 ], spellAdd : [ function (spellKey, spellObj, spName) { if (spellObj.psionic || spName !== "artificer") return; return genericSpellDmgEdit(spellKey, spellObj, "\\w+\\.?", "1d8", true, true); }, "If I use my arcane firearm as a spellcasting focus for an artificer spell, I can add +1d8 to one of the spell's damage rolls." ] } }, "subclassfeature9" : { name : "Explosive Cannon", source : [["E:RLW", 60], ["T", 18]], minlevel : 9, description: desc("My eldritch cannons deal +1d8 damage; As an action, I can detonate a cannon in 60 ft"), action : [["action", "Eldritch Cannon (detonate)"]] }, "subclassfeature15" : { name : "Fortified Position", source : [["E:RLW", 60], ["T", 18]], minlevel : 15, description : " [cannons grant half cover in 10 ft to allies]" + desc([ "I can now have two cannons at the same time and activate both with one bonus action", "I can create 2 eldritch cannons with the same action (still only one with a spell slot)" ]) } } }); // Add the Battle Smith specialism AddSubClass("artificer", "battle smith", { regExpSearch : /^(?=.*battle)(?=.*smith)(?!.*wizard).*$/i, subname : "Battle Smith", fullname : "Battle Smith", source : [["E:RLW", 60], ["T", 18]], attacks : [1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], features : { "subclassfeature3" : { name : "Battle Ready \u0026 Tool Proficiency", source : [["E:RLW", 61], ["T", 19]], minlevel : 3, description : desc([ "I gain proficiency with martial weapons and smith's tools", "I can use my Intelligence modifier instead of Strength or Dexterity for magic weapons" ]), toolProfs : ["Smith's tools"], spellcastingExtra : ["heroism", "shield", "branding smite", "warding bond", "aura of vitality", "conjure barrage", "aura of purity", "fire shield", "banishing smite", "mass cure wounds"], weaponProfs : [false, true], calcChanges : { atkAdd : [ function (fields, v) { if (!v.isSpell && (v.theWea.isMagicWeapon || v.thisWeapon[1]) && (fields.Mod === 1 || fields.Mod === 2) && Number(What("Int")) > Number(What(fields.Mod === 1 ? "Str" : "Dex"))) { fields.Mod = 4; } }, 'I can use my Intelligence modifier instead of Strength or Dexterity for the attack and damage rolls of magic weapons.' ] } }, "subclassfeature3.1" : { name : "Steel Defender", source : [["E:RLW", 61], ["T", 19]], minlevel : 3, description : desc([ "When I end a long rest, I can use smith's tools to create a steel defender", "I determine its appearance; It obeys my commands and it acts on my initiative, after me", "Unless I use a bonus action to command it, it only takes the Dodge action on its turn", "It can take reactions and move on its turn even if I don't command it", "I can't have multiple at once; Select \"Steel Defender\" on a companion page for its stats" ]), action : [["bonus action", " (command)"], ["action", " (restore)"]], creaturesAdd : [["Steel Defender"]], creatureOptions : [{ name : "Steel Defender", source : [["E:RLW", 61], ["T", 19]], size : 3, type : "Construct", alignment : "Neutral", ac : 15, hp : 12, hd : [2, 8], hdLinked : ["artificer"], speed : "40 ft", scores : [14, 12, 14, 4, 10, 6], saves : ["", 3, 4, "", "", ""], skills : { "athletics" : 4, "perception" : 4 }, damage_immunities : "poison", condition_immunities : "charmed, exhaustion, poisoned", passivePerception : 14, senses : "Darkvision 60 ft", languages : "understands the languages of its creator but can't speak", challengeRating : "1", proficiencyBonus : 2, proficiencyBonusLinked : true, attacksAction : 1, attacks : [{ name : "Force-Empowered Rend", ability : 4, damage : [1, 8, "piercing"], range : "Melee (5 ft)", description : "", modifiers : ["", "Prof"], abilitytodamage : false, useSpellMod : "artificer" }, { name : "Deflect Attack (reaction)", ability : 0, damage : [1, 4, "force"], range : "Melee (5 ft)", description : "After using the reaction, the attacker takes this damage, no attack roll required", modifiers : ["-Prof", "oInt"], abilitytodamage : false }], features : [{ name : "Creator", description : "The steel defender obeys the commands of its creator and shares its proficiency bonus. It takes its turn immediately after its creator, on the same initiative count. It can move and take reactions on its own, but only takes the Dodge action on its turn unless its creator takes a bonus action to command it to take another action. If its creator is incapacitated, it can take any action, not just Dodge." }, { name : "Vigilant", description : "The " + (typePF ? "" : "steel ") + "defender can't be surprised." }], traits : [{ name : "Healing", description : "The steel defender regains 2d6 HP whenever the Mending spell is cast on it. Its HP total is equal to 2 + its creator's artificer level times five + its creator's Int mod. Within an hour of its death, while within 5 ft, its creator can take an action to use smith's tools and expend a spell slot to have it return to full HP after 1 minute. If its creator dies, " + (typePF ? "the steel defender also perishes" : "so does it") + "." }], actions : [{ name : "Repair (3/Day)", description : "As an action, the " + (typePF ? "" : "magical mechanisms inside the ") + "steel defender restore" + (typePF ? "s" : "") + " 2d8 + its proficiency bonus in HP to itself or to one construct or object within 5 ft of it." }, { name : "Deflect Attack (reaction)", description : typePF ? "As a reaction, the steel defender imposes disadvantage on the attack roll of one creature it can see that is within 5 ft of it, provided the attack roll is against a creature other than the defender." : "As a reaction, the defender imposes disadv. on the attack roll of one creature it can see within 5 ft, provided the creature attacks another than the defender." }, { name : "Arcane Jolt (Battle Smith 9)", minlevel : 9, eval : function(prefix, lvl) { Value(prefix + "Comp.Use.Attack.1.Description", "Arcane Jolt (1d6): On hit, deal force damage or heal target in 30 ft"); }, removeeval : function(prefix, lvl) { Value(prefix + "Comp.Use.Attack.1.Description", ""); } }, { name : "Improved Defender (Battle Smith 15)", minlevel : 15, description : "The steel defender's Deflect Attack now deals 1d4 + its creator's Intelligence modifier in force damage to the attacker.", addMod : [{ type : "", field : "Comp.Use.AC", mod : 2, text : "The steel defender gains a +2 bonus to its AC (base AC of 15)." }], eval : function(prefix, lvl) { Value(prefix + "Comp.Use.Attack.1.Description", What(prefix + "Comp.Use.Attack.1.Description").replace("Arcane Jolt (1d6)", "Arcane Jolt (2d6)")); Value(prefix + "Comp.Use.Attack.2.Weapon Selection", "Deflect Attack (reaction)"); }, removeeval : function(prefix, lvl) { Value(prefix + "Comp.Use.Attack.1.Description", What(prefix + "Comp.Use.Attack.1.Description").replace("Arcane Jolt (2d6)", "Arcane Jolt (1d6)")); Value(prefix + "Comp.Use.Attack.2.Weapon Selection", ""); } }], minlevelLinked : ["artificer"], header : "Construct", calcChanges : { hp : function (totalHD, HDobj, prefix) { if (!classes.known.artificer) return; var intMod = Number(What('Int Mod')); var artLvl = classes.known.artificer.level; var artLvl5 = 5 * artLvl; HDobj.alt.push(2 + intMod + artLvl5); HDobj.altStr.push(" = 2 as a base\n + " + intMod + " from its creator's Intelligence modifier\n + 5 \xD7 " + artLvl + " from five times its creator's artificer level (" + artLvl5 + ")"); }, setAltHp : true, hpForceRecalc : true }, eval : function(prefix, lvl) { // remove the Deflect Attack (reaction) attack if adding this creature before artificer level 15 if (lvl[0] < 15) Value(prefix + "Comp.Use.Attack.2.Weapon Selection", ""); } }] }, "subclassfeature9" : { name : "Arcane Jolt", source : [["E:RLW", 61], ["T", 20]], minlevel : 9, description : function () { var descr9 = desc([ "Once per turn when my steel defender or magic weapon hits a target, I can have it:", " \u2022 Deal an extra +2d6 force damage to the target", " \u2022 Restore 2d6 HP to another target within 30 ft of the one that was hit" ]); var descr15 = descr9.replace(/2d6/g, '4d6'); return levels.map(function (n) { return n < 9 ? "" : n < 15 ? descr9 : descr15; }); }(), usages : "Intelligence modifier per ", usagescalc : "event.value = Math.max(1, What('Int Mod'));", recovery : "long rest", additional : levels.map(function (n) { return n < 9 ? "" : (n < 15 ? 2 : 4) + "d6"; }), calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.isMagicWeapon || v.thisWeapon[1]) { fields.Description += (fields.Description ? '; ' : '') + 'Arcane Jolt (' + (classes.known.artificer && classes.known.artificer.level >= 15 ? 4 : 2) + 'd6)'; } }, "Once per turn when I hit with a magic weapon or my steel defender hits with its attack, I can use my Arcane Jolt class feature to have the hit either deal extra force damage or heal somebody within 30 ft of the target hit." ] } }, "subclassfeature15" : { name : "Improved Defender", source : [["E:RLW", 61], ["T", 20]], minlevel : 15, description : desc([ "My defender's Deflect Attack now deals its attacker 1d4 + my Int mod force damage", "My arcane jolt damage/healing increases to 4d6; My steel defender gains +2 AC" ]) } } }); // Add the new special magic items for the artificer class (infusions) MagicItemsList["boots of the winding path"] = { name : "Boots of the Winding Path", source : [["E:RLW", 62], ["T", 21], ["UA:A2", 9], ["UA:A3", 12]], type : "wondrous item", description : "While wearing these boots, I can teleport up to 15 ft as a bonus action to an unoccupied space I can see, as long as I occupied that space at some point during the current turn.", descriptionFull : "While wearing these boots, a creature can teleport up to 15 feet as a bonus action to an unoccupied space the creature can see. The creature must have occupied that space at some point during the current turn.", attunement : true, action : [["bonus action", ""]] } MagicItemsList["enhanced arcane focus, +1 or +2"] = { name : "Enhanced Arcane Focus, +1 or +2", nameTest : /^(?=.*enhanced)(?=.*(arcane focus|rod|wand|staff)).*$/i, source : [["E:RLW", 62], ["T", 21]], type : "wondrous item", description : "While I am holding this arcane focus (rod, staff, or wand), I gain a +1 bonus to spell attack rolls (or +2 if the artificer that created it is level 10 or higher). In addition, I ignore half cover when making a spell attack.", descriptionFull : "While holding this rod, staff, or wand, a creature gains a +1 bonus to spell attack rolls. In addition, the creature ignores half cover when making a spell attack.\n The bonus increases to +2 when it is created by someone with 10 levels or more in the artificer class.", attunement : true, weight : 1, prerequisite : "Requires attunement by a spellcaster", prereqeval : function(v) { return v.isSpellcaster; }, choices : ["+1 to spell attacks", "+2 to spell attacks (artificer level 10+)"], "+1 to spell attacks" : { name : "Enhanced Arcane Focus +1", nameTest : /^(?=.*enhanced)(?=.*(arcane focus|rod|wand|staff))(?=.*\+1)(?!.*\+2).*$/i, description : "While I am holding this arcane focus (rod, staff, or wand), I gain a +1 bonus to spell attack rolls and I ignore half cover when making a spell attack.", calcChanges : { spellCalc : [ function (type, spellcasters, ability) { if (type == "attack") return 1; }, "I gain a +1 bonus to spell attack rolls." ] } }, "+2 to spell attacks (artificer level 10+)" : { name : "Enhanced Arcane Focus +2", nameTest : /^(?=.*enhanced)(?=.*(arcane focus|rod|wand|staff))(?!.*\+1)(?=.*\+2).*$/i, description : "While I am holding this arcane focus (rod, staff, or wand), I gain a +2 bonus to spell attack rolls and I ignore half cover when making a spell attack.", calcChanges : { spellCalc : [ function (type, spellcasters, ability) { if (type == "attack") return 2; }, "I gain a +2 bonus to spell attack rolls." ] } } } MagicItemsList["radiant weapon"] = { name : "Radiant Weapon", nameTest : "Radiant", source : [["E:RLW", 62], ["T", 22]], type : "weapon (any)", description : "This item adds a +1 on its to hit and damage, has 4 charges, and regains 1d4 at dawn. As a bonus action, I can have it start/stop shedding light, bright in 30 ft, dim in another 30 ft. As a reaction if hit by an attack, I can use 1 charge to blind the attacker until the end of its next turn unless it makes a Con save (my spell DC).", descriptionFull : "This magic weapon grants a +1 bonus to attack and damage rolls made with it. While holding it, the wielder can take a bonus action to cause it to shed bright light in a 30-foot radius and dim light for an additional 30 feet. The wielder can extinguish the light as a bonus action.\n The weapon has 4 charges. As a reaction immediately after being hit by an attack, the wielder can expend 1 charge and cause the attacker to be blinded until the end of the attacker's next turn, unless the attacker succeeds on a Constitution saving throw against your spell save DC. The weapon regains 1d4 expended charges daily at dawn.", attunement : true, usages : 4, recovery : "dawn", additional : "blind attacker; regains 1d4", action : [["bonus action", " (start/stop light)"], ["reaction", " (1 charge; after hit)"]], chooseGear : { type : "weapon", prefixOrSuffix : "suffix", descriptionChange : ["replace", "weapon"] }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && !v.isSpell && (/radiant/i).test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + 'Reaction to blind attacker'; } }, 'If I include the word "Radiant" in the name of a weapon, it will be treated as the magic weapon Radiant Weapon. It has +1 to hit and damage and can be used to shed light and to blind an attacker.' ], atkCalc : [ function (fields, v, output) { if (v.isMeleeWeapon && !v.isSpell && (/radiant/i).test(v.WeaponTextName)) { output.magic = v.thisWeapon[1] + 1; } } ] } } MagicItemsList["repeating shot"] = { name : "Repeating Shot", source : [["E:RLW", 62], ["T", 22], ["UA:A3", 13]], type : "weapon (any with ammunition)", description : "When I use this magic weapon to make a ranged attack, it magically produces one piece of ammunition and grants a +1 bonus to its attack and damage rolls. Thus, it doesn't require ammunition and ignores the loading property if it has it. The produced ammunition vanishes once it hits or misses a target.", descriptionFull : "This magic weapon grants a +1 bonus to attack and damage rolls made with it when it's used to make a ranged attack, and it ignores the loading property if it has it.\n If you load no ammunition in the weapon, it produces its own, automatically creating one piece of magic ammunition when you make a ranged attack with it. The ammunition created by the weapon vanishes the instant after it hits or misses a target.", attunement : true, chooseGear : { type : "weapon", prefixOrSuffix : "suffix", descriptionChange : ["replace", "weapon"], excludeCheck : function (inObjKey, inObj) { return !(/ammunition/i).test(inObj.description); } }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && !v.isSpell && (/^(?=.*repeating shot)(?=.*ammunition).*$/i).test(v.WeaponText)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, '').replace(/(;|,)? ?loading/i, ''); } }, 'If I include the words "Repeating Shot" in the name of a weapon with the ammunition property, it will be treated as the magic weapon Repeating Shot. It has +1 to hit and damage and produces its own ammunition, thus its loading property is removed if it has it.' ], atkCalc : [ function (fields, v, output) { if ((/^(?=.*repeating shot)(?=.*ammunition).*$/i).test(v.WeaponText) && !v.isSpell) { output.magic = v.thisWeapon[1] + 1; } }, '' ] } } MagicItemsList["repulsion shield"] = { name : "Repulsion Shield", source : [["E:RLW", 63], ["T", 23]], type : "shield", description : "I gain an additional +1 bonus to Armor Class while wielding this shield. The shield has 4 charges and regains 1d4 expended charges daily at dawn. As a reaction immediately after being hit by a melee attack, I can expend 1 charge to push the attacker up to 15 ft away.", descriptionFull : "A creature gains a +1 bonus to Armor Class while wielding this shield.\n The shield has 4 charges. While holding it, the wielder can use a reaction immediately after being hit by a melee attack to expend 1 of the shield's charges and push the attacker up to 15 feet away. The shield regains 1d4 expended charges daily at dawn.", weight : 6, attunement : true, usages : 4, additional : "regains 1d4", recovery : "dawn", action : [["reaction", " (1 charge)"]], shieldAdd : ["Repulsion Shield", 3, 6] } MagicItemsList["returning weapon"] = { name : "Returning Weapon", nameTest : "Returning", source : [["E:RLW", 63], ["T", 23], ["UA:A3", 14], ["UA:A2", 10]], type : "weapon (any thrown)", description : "This magic weapon grants a +1 bonus to attack and damage rolls I make with it. It returns to my hand immediately after I use it to make a ranged attack.", descriptionFull : "This magic weapon grants a +1 bonus to attack and damage rolls made with it, and it returns to the wielder's hand immediately after it is used to make a ranged attack.", chooseGear : { type : "weapon", prefixOrSuffix : "suffix", descriptionChange : ["replace", "weapon"], excludeCheck : function (inObjKey, inObj) { return !/\bthrown\b/i.test(inObj.description); } }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && v.isThrownWeapon && /returning/i.test(v.WeaponText)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + 'Returns immediately after ranged attack'; } }, 'If I include the word "Returning" in the name of a thrown weapon, it will be treated as the magic weapon Returning Weapon. It has +1 to hit and damage and returns to my hand immediately after I use it to make a ranged attack.' ], atkCalc : [ function (fields, v, output) { if (v.isThrownWeapon && /returning/i.test(v.WeaponText)) { output.magic = v.thisWeapon[1] + 1; } }, '' ] } } // Magic Items MagicItemsList["arcane propulsion arm"] = { name : "Arcane Propulsion Arm", source : [["E:RLW", 276]], type : "wondrous item", rarity : "very rare", description : "Once attached to my wrist, elbow, or shoulder, this prosthetic magically forms a copy of the appendage it's replacing. It can't be removed against my will, but I can as an action. I can use it as a proficient melee weapon with the thrown property. After a throwing attack with it, it returns and reattaches immediately.", descriptionFull : "This prosthetic appendage was developed by artificers of House Cannith. To attune to this item, you must attach it to your arm at the wrist, elbow, or shoulder, at which point the prosthetic magically forms a copy of the appendage it's replacing.\n\nWhile attached, the prosthetic provides these benefits:\n \u2022 The prosthetic is a fully capable part of your body.\n \u2022 You can take an action to remove the prosthetic, and it removes itself if your attunement to it ends. It can't be removed against your will.\n \u2022 The prosthetic is a magic melee weapon with which you're proficient. It deals 1d8 force damage on a hit and has the thrown property, with a normal range of 20 feet and a long range of 60 feet. When thrown, the prosthetic detaches and flies at the target of the attack, then immediately returns to you and reattaches.", attunement : true, prerequisite : "Requires attunement by a creature missing a hand or an arm", prereqeval : function (v) { return false; }, weaponOptions : [{ regExpSearch : /^(?=.*arcane)(?=.*propulsion)(?=.*arm).*$/i, name : "Arcane Propulsion Arm", source : [["E:RLW", 276]], ability : 1, type : "AlwaysProf", damage : [1, 8, "force"], range : "Melee, 20/60 ft", description : "Thrown; Returns immediately after thrown", abilitytodamage : true, selectNow : true }] } MagicItemsList["armblade"] = { name : "Armblade", source : [["E:RLW", 276]], type : "weapon (any one-handed melee weapon)", rarity : "common", description : "While attuned to it, this magic weapon is attached to my arm and inseparable from me. As a bonus action, I can retract it into my forearm or extend it from there. While it is extended, I can use the weapon as if I was holding it, and I can't use that hand for other purposes.", descriptionFull : "An armblade is a magic weapon that attaches to your arm, becoming inseparable from you as long as you're attuned to it. To attune to this item, you must hold it against your forearm for the entire attunement period.\n As a bonus action, you can retract the armblade into your forearm or extend it from there. While it is extended, you can use the weapon as if you were holding it, and you can't use that hand for other purposes.", attunement : true, prerequisite : "Requires attunement by a warforged", prereqeval : function (v) { return (/warforged/i).test(CurrentRace.known); }, allowDuplicates : true, chooseGear : { type : "weapon", prefixOrSuffix : "brackets", descriptionChange : ["replace", "weapon"], excludeCheck : function (inObjKey, inObj) { return (!inObj.description || (/two.{0,3}handed/i).test(inObj.description)) || (!inObj.range || !(/melee/i).test(inObj.range)); } } } MagicItemsList["belashyrra's beholder crown"] = { name : "Belashyrra's Beholder Crown", nameAlt : "Beholder Crown", source : [["E:RLW", 276]], type : "wondrous item", rarity : "legendary", description : "This symbiotic crown of dark purple and mauve stone attaches to my skull and removing it requires ending a curse. It allows me to see normally in magical and normal darkness (devil's sight) out to 120 ft. It has 10 charges, regaining 1d6+3 at dawn, which I can use to cast several spells with spell save DC 16.", descriptionLong : "This symbiotic crown of dark purple and mauve stone attaches to my skull once I attune to it and removing it requires ending a curse. It allows me to see normally in magical and normal darkness (devil's sight) out to 120 ft. It has 10 charges, regaining 1d6+3 at dawn, which I can use to cast several spells with spell save DC 16. These are: Charm Person (1 charge), Disintegrate (6 charges), Fear (3 charges), Finger of Death (7 charges), Flesh to Stone (6 charges), Hold Person (2 charges), Ray of Enfeeblement (2 charges), Sleep (1 charge), Slow (3 charges), and Telekinesis (5 charges).", descriptionFull : "This symbiotic crown is carved from dark purple and mauve stone, with ten points like stalks set with gemstones resembling the eyestalks of a beholder. To attune to this item, you must wear it on your head for the entire attunement period, during which the crown's hidden tendrils burrow into your scalp to bond with your skull.\n While wearing the crown, you can see normally in darkness, both magical and nonmagical, to a distance of 120 feet.\n " + toUni("Spells") + ". The crown has 10 charges. While wearing it, you can use an action to expend some of its charges to cast one of the following spells from it (spell save DC 16): charm person (1 charge), disintegrate (6 charges), fear (3 charges), finger of death (7 charges), flesh to stone (6 charges), hold person (2 charges), ray of enfeeblement (2 charges), sleep (1 charge), slow (3 charges), telekinesis (5 charges).\n The crown regains 1d6 + 3 expended charges daily at dawn.\n " + toUni("Symbiotic Nature") + ". The crown can't be removed from you while you're attuned to it, and you can't voluntarily end your attunement to it. If you're targeted by a spell that ends a curse, your attunement to the crown ends, and it detaches from you.\n The daelkyr Belashyrra made these crowns. While on the same plane of existence as the crown, Belashyrra can see through its eyestalks.", attunement : true, usages : 10, recovery : "dawn", additional : "regains 1d6+3", fixedDC : 16, spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "1 charge", spells : ["charm person", "sleep"], selection : ["charm person", "sleep"], firstCol : 1, times : 2 }, { name : "2 charges", spells : ["hold person", "ray of enfeeblement"], selection : ["hold person", "ray of enfeeblement"], firstCol : 2, times : 2 }, { name : "3 charges", spells : ["fear", "slow"], selection : ["fear", "slow"], firstCol : 3, times : 2 }, { name : "5 charges", spells : ["telekinesis"], selection : ["telekinesis"], firstCol : 5 }, { name : "6 charges", spells : ["disintegrate", "flesh to stone"], selection : ["disintegrate", "flesh to stone"], firstCol : 6, times : 2 }, { name : "7 charges", spells : ["finger of death"], selection : ["finger of death"], firstCol : 7 }] } MagicItemsList["cleansing stone"] = { name : "Cleansing Stone", source : [["E:RLW", 276], ["WGtE", 115], ["UA:MIoE", 2]], type : "wondrous item", rarity : "common", description : "This stone sphere is 1 ft in diameter and engraved with mystic sigils. As an action while touching it, I can activate it to remove dirt and grime from my garments and my person.", descriptionFull : "A cleansing stone is a sphere 1 foot in diameter, engraved with mystic sigils. When touching the stone, you can use an action to activate it and remove dirt and grime from your garments and your person.\n Such stones are often embedded in pedestals in public squares in Aundair or in high-end Ghallanda inns.", action : [["action", ""]], weight : 88 // using average marble/limestone density of 2.711 g/cm3 } var ERftLW_docentFullDescription = [ "A docent is a small metal sphere, about 2 inches across, studded with dragonshards. To attune to a docent, you must embed the item somewhere on your body, such as your chest or your eye socket.", '>>Sentience<<. A docent is a sentient item of any alignment with an Intelligence of 16, a Wisdom of 14, and a Charisma of 14. It perceives the world through your senses. It communicates telepathically with you and can speak, read, and understand any language it knows (see "Random Properties" below).', ">>Life Support<<. Whenever you end your turn with 0 hit points, the docent can make a Wisdom (Medicine) check with a +6 bonus. If this check succeeds, the docent stabilizes you.", ">>Random Properties<<. A docent has the following properties:", " \u2022 >>Languages<<. The docent knows Common, Giant, and 1d4 additional languages chosen by the DM. If a docent knows fewer than six languages, it can learn a new language after it hears or reads the language through your senses.", " \u2022 >>Skills<<. The docent has a +7 bonus to one of the following skills (roll a d4): (1) Arcana, (2) History, (3) Investigation, or (4) Nature.", " \u2022 >>Spells<<. The docent knows one of the following spells and can cast it at will, requiring no components (roll a d6): (1–2) detect evil and good or (3–6) detect magic. The docent decides when to cast the spell.", ">>Personality<<. A docent is designed to advise and assist the warforged it's attached to. One of the simple functions of a docent is to serve as a translator. The docent's properties are under its control, and if you have a bad relationship with your docent, it might refuse to assist you." ]; MagicItemsList["docent"] = { name : "Docent", source : [["E:RLW", 276]], type : "wondrous item", rarity : "rare", description : "I can embed this sentient small metal sphere studded with dragonshards into my chest or eye socket. I can communicate telepathically with it and it uses my senses. It can serve me as an advisor and a translator. It knowns 6 languages, a spells, an Intelligence skill, and can stabilize me. See Notes page.", descriptionFull : ERftLW_docentFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)<= 0 ? "Con" : "Dex"; return capitailzedDmgType + " Breath Weapon: As an action once per short rest, I can deal 2d6 " + dmgType + " damage to all in a " + shapeStr + ", " + saveStat + " save halves (DC 8 + Con mod + Prof Bonus).\nThis damage increases to 3d6 at level 6, 4d6 at level 11, and 5d6 at level 16."; }; var EGtW_draconicAncestryFeature = { name : "Draconic Ancestry", limfeaname : "Breath Weapon", minlevel : 1, usages : 1, additional : levels.map(function (n) { return (n < 6 ? 2 : n < 11 ? 3 : n < 16 ? 4 : 5) + 'd6'; }), recovery : "short rest", action : [['action', ""]], calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.dbBreathWeapon && (/dragonborn/i).test(CurrentRace.known)) { fields.Damage_Die = (CurrentRace.level < 6 ? 2 : CurrentRace.level < 11 ? 3 : CurrentRace.level < 16 ? 4 : 5) + 'd6'; if (CurrentRace.variant) { fields.Damage_Type = CurrentRace.breathDmgType; fields.Description = fields.Description.replace(/(dex|con) save/i, ((/cold|poison/i).test(CurrentRace.breathDmgType) ? 'Con' : 'Dex') + ' save'); fields.Range = (/black|blue|brass|bronze|copper/i).test(CurrentRace.variant) ? '5-ft \xD7 30-ft line' : '15-ft cone'; } } }, '', 1 ] } }; var EGtW_breathWeaponObj = { regExpSearch : /^(?=.*breath)(?=.*weapon).*$/i, name : "Breath weapon", source : [["W", 168]], ability : 3, type : 'Natural', damage : [2, 6, 'fire'], range : "15-ft cone", description : "Hits all in area; Dex save, success - half damage; Usable only once per short rest", abilitytodamage : false, dc : true, dbBreathWeapon : true, selectNow : true }; var EGtW_acidBreath = EGtW_breathWeaponDesc("acid", "line"); var EGtW_fireBreathCone = EGtW_breathWeaponDesc("fire", "cone"); var EGtW_fireBreathLine = EGtW_breathWeaponDesc("fire", "cone"); var EGtW_coldBreath = EGtW_breathWeaponDesc("cold", "cone"); var EGtW_lightningBreath = EGtW_breathWeaponDesc("lightning", "line"); var EGtW_poisonBreath = EGtW_breathWeaponDesc("poison", "cone"); var EGtW_forcefulPresenceStr = "Forceful Presence: Once per short rest, I can give myself adv. on an Intimidation or Persuasion check."; var EGtW_vengefulAssaultStr = "Vengeful Assault: As a reaction when I take damage from a creature in range of a weapon that I'm holding, I can use the weapon to make an attack against the creature. I can do this once per short rest."; // Draconblood RaceList["draconblood dragonborn"] = { regExpSearch : /draconblood/i, name : "Draconblood Dragonborn", sortname : "Dragonborn, Draconblood", source : [["W", 168]], plural : "Draconblood Dragonborn", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Draconic"], vision : [["Darkvision", 60]], weaponOptions : [EGtW_breathWeaponObj], age : " reach adulthood by 15 and live around 80 years", height : " stand well over 6 feet tall (5'6\" + 2d8\")", weight : " weigh around 240 lb (175 + 2d8 \xD7 2d6 lb)", heightMetric : " stand well over 1,8 metres tall (170 + 5d8 cm)", weightMetric : " weigh around 110 kg (80 + 5d8 \xD7 4d6 / 10 kg)", scores : [0, 0, 0, 2, 0, 1], trait : "Draconblood Dragonborn (+2 Intelligence, +1 Charisma)" + desc([ "Draconic Ancestry: Choose one type of dragon using the \"Racial Options\" button. I gain a breath weapon as determined by the dragon type chosen.", EGtW_forcefulPresenceStr ]), features : { "draconic ancestry" : EGtW_draconicAncestryFeature, "forceful presence" : { name : "Forceful Presence", source : [["W", 168]], minlevel : 1, usages : 1, recovery : "short rest" } }, variants : [] }; AddRacialVariant("draconblood dragonborn", "black", { regExpSearch : /black/i, name : "Black draconblood dragonborn", trait : "Black draconblood dragonborn (+2 Intelligence, +1 Charisma)" + desc([ EGtW_acidBreath, EGtW_forcefulPresenceStr ]), breathDmgType : "acid" }); AddRacialVariant("draconblood dragonborn", "blue", { regExpSearch : /blue/i, name : "Blue draconblood dragonborn", trait : "Blue draconblood dragonborn (+2 Intelligence, +1 Charisma)" + desc([ EGtW_lightningBreath, EGtW_forcefulPresenceStr ]), breathDmgType : "lightning" }); AddRacialVariant("draconblood dragonborn", "brass", { regExpSearch : /brass/i, name : "Brass draconblood dragonborn", trait : "Brass draconblood dragonborn (+2 Intelligence, +1 Charisma)" + desc([ EGtW_fireBreathLine, EGtW_forcefulPresenceStr ]), breathDmgType : "fire" }); AddRacialVariant("draconblood dragonborn", "bronze", { regExpSearch : /bronze/i, name : "Bronze draconblood dragonborn", trait : "Bronze draconblood dragonborn (+2 Intelligence, +1 Charisma)" + desc([ EGtW_lightningBreath, EGtW_forcefulPresenceStr ]), breathDmgType : "lightning" }); AddRacialVariant("draconblood dragonborn", "copper", { regExpSearch : /copper/i, name : "Copper draconblood dragonborn", trait : "Copper draconblood dragonborn (+2 Intelligence, +1 Charisma)" + desc([ EGtW_acidBreath, EGtW_forcefulPresenceStr ]), breathDmgType : "acid" }); AddRacialVariant("draconblood dragonborn", "gold", { regExpSearch : /gold/i, name : "Gold draconblood dragonborn", trait : "Gold draconblood dragonborn (+2 Intelligence, +1 Charisma)" + desc([ EGtW_fireBreathCone, EGtW_forcefulPresenceStr ]), breathDmgType : "fire" }); AddRacialVariant("draconblood dragonborn", "green", { regExpSearch : /green/i, name : "Green draconblood dragonborn", trait : "Green draconblood dragonborn (+2 Intelligence, +1 Charisma)" + desc([ EGtW_poisonBreath, EGtW_forcefulPresenceStr ]), breathDmgType : "poison" }); AddRacialVariant("draconblood dragonborn", "red", { regExpSearch : /red/i, name : "Red draconblood dragonborn", trait : "Red draconblood dragonborn (+2 Intelligence, +1 Charisma)" + desc([ EGtW_fireBreathCone, EGtW_forcefulPresenceStr ]), breathDmgType : "fire" }); AddRacialVariant("draconblood dragonborn", "silver", { regExpSearch : /silver/i, name : "Silver draconblood dragonborn", trait : "Silver draconblood dragonborn (+2 Intelligence, +1 Charisma)" + desc([ EGtW_coldBreath, EGtW_forcefulPresenceStr ]), breathDmgType : "cold" }); AddRacialVariant("draconblood dragonborn", "white", { regExpSearch : /white/i, name : "White draconblood dragonborn", trait : "White draconblood dragonborn (+2 Intelligence, +1 Charisma)" + desc([ EGtW_coldBreath, EGtW_forcefulPresenceStr ]), breathDmgType : "cold" }); // Ravenite RaceList["ravenite dragonborn"] = { regExpSearch : /ravenite/i, name : "Ravenite Dragonborn", sortname : "Dragonborn, Ravenite", source : [["W", 169]], plural : "Ravenite Dragonborn", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Draconic"], vision : [["Darkvision", 60]], weaponOptions : [EGtW_breathWeaponObj], age : " reach adulthood by 15 and live around 80 years", height : " stand well over 6 feet tall (5'6\" + 2d8\")", weight : " weigh around 240 lb (175 + 2d8 \xD7 2d6 lb)", heightMetric : " stand well over 1,8 metres tall (170 + 5d8 cm)", weightMetric : " weigh around 110 kg (80 + 5d8 \xD7 4d6 / 10 kg)", scores : [2, 1, 0, 0, 0, 0], trait : "Ravenite Dragonborn (+2 Strength, +1 Constitution)" + desc([ "Draconic Ancestry: Choose one type of dragon using the \"Racial Options\" button. I gain a breath weapon as determined by the dragon type chosen.", EGtW_vengefulAssaultStr ]), features : { "draconic ancestry" : EGtW_draconicAncestryFeature, "vengeful assault" : { name : "Vengeful Assault", source : [["W", 168]], minlevel : 1, usages : 1, action : [['reaction', ""]], recovery : "short rest" } }, variants : [] }; AddRacialVariant("ravenite dragonborn", "black", { regExpSearch : /black/i, name : "Black ravenite dragonborn", trait : "Black ravenite dragonborn (+2 Strength, +1 Constitution)" + desc([ EGtW_acidBreath, EGtW_vengefulAssaultStr ]), breathDmgType : "acid" }); AddRacialVariant("ravenite dragonborn", "blue", { regExpSearch : /blue/i, name : "Blue ravenite dragonborn", trait : "Blue ravenite dragonborn (+2 Strength, +1 Constitution)" + desc([ EGtW_lightningBreath, EGtW_vengefulAssaultStr ]), breathDmgType : "lightning" }); AddRacialVariant("ravenite dragonborn", "brass", { regExpSearch : /brass/i, name : "Brass ravenite dragonborn", trait : "Brass ravenite dragonborn (+2 Strength, +1 Constitution)" + desc([ EGtW_fireBreathLine, EGtW_vengefulAssaultStr ]), breathDmgType : "fire" }); AddRacialVariant("ravenite dragonborn", "bronze", { regExpSearch : /bronze/i, name : "Bronze ravenite dragonborn", trait : "Bronze ravenite dragonborn (+2 Strength, +1 Constitution)" + desc([ EGtW_lightningBreath, EGtW_vengefulAssaultStr ]), breathDmgType : "lightning" }); AddRacialVariant("ravenite dragonborn", "copper", { regExpSearch : /copper/i, name : "Copper ravenite dragonborn", trait : "Copper ravenite dragonborn (+2 Strength, +1 Constitution)" + desc([ EGtW_acidBreath, EGtW_vengefulAssaultStr ]), breathDmgType : "acid" }); AddRacialVariant("ravenite dragonborn", "gold", { regExpSearch : /gold/i, name : "Gold ravenite dragonborn", trait : "Gold ravenite dragonborn (+2 Strength, +1 Constitution)" + desc([ EGtW_fireBreathCone, EGtW_vengefulAssaultStr ]), breathDmgType : "fire" }); AddRacialVariant("ravenite dragonborn", "green", { regExpSearch : /green/i, name : "Green ravenite dragonborn", trait : "Green ravenite dragonborn (+2 Strength, +1 Constitution)" + desc([ EGtW_poisonBreath, EGtW_vengefulAssaultStr ]), breathDmgType : "poison" }); AddRacialVariant("ravenite dragonborn", "red", { regExpSearch : /red/i, name : "Red ravenite dragonborn", trait : "Red ravenite dragonborn (+2 Strength, +1 Constitution)" + desc([ EGtW_fireBreathCone, EGtW_vengefulAssaultStr ]), breathDmgType : "fire" }); AddRacialVariant("ravenite dragonborn", "silver", { regExpSearch : /silver/i, name : "Silver ravenite dragonborn", trait : "Silver ravenite dragonborn (+2 Strength, +1 Constitution)" + desc([ EGtW_coldBreath, EGtW_vengefulAssaultStr ]), breathDmgType : "cold" }); AddRacialVariant("ravenite dragonborn", "white", { regExpSearch : /white/i, name : "White ravenite dragonborn", trait : "White ravenite dragonborn (+2 Strength, +1 Constitution)" + desc([ EGtW_coldBreath, EGtW_vengefulAssaultStr ]), breathDmgType : "cold" }); } // Subclasses AddSubClass("fighter", "echo knight", { // contains contributions by Smashman, @Nod_Hero#2046 (Discord), BraabHimself, and TysonJouglet regExpSearch : /^(?!.*(exalted|sacred|holy|divine|nature|natural|purple.*dragon|green))(?=.*(knight|fighter|warrior|militant|warlord|phalanx|gladiator|trooper))(?=.*(echo|mirror|mirage|reflection)).*$/i, subname : "Echo Knight", source : [["W", 183]], fullname : "Echo Knight", features : { "subclassfeature3" : { name : "Manifest Echo", source : [["W", 183]], minlevel : 3, description : desc([ "As a bonus action, I can magically manifest a translucent image of myself within 15 ft", "My echo lasts until I dismiss it as a bonus action, I manifest another, or I'm incapacitated", "It is also destroyed if it is more than 30 ft away from me at the end of my turn", "It has 1 HP, immunity to all conditions, uses my save bonuses, and AC 14 + Prof Bonus", "On my turn as a free action, I can command it to move up to 30 ft in any direction", "As a bonus action, I can teleport to swap places with it, at a cost of 15 ft movement", "When I use the Attack action on my turn, I can have any attack originate from my echo", "I can also make opportunity attacks from the echo's location as if I were in its space" ]), action : [["bonus action", " (summon/dismiss)"], ["bonus action", "Swap Location with Echo"]], creaturesAdd : [["Echo"]], creatureOptions : [{ name : "Echo", source : [["W", 183]], size : 3, type : "Echo", alignment : "", ac : "14+oProf", hp : 1, hd : [], speed : "fly 30 ft (hover)", scores : ["", "", "", "", "", ""], savesLinked : true, condition_immunities : "all conditions", passivePerception : 0, languages : "", challengeRating : "0", proficiencyBonus : 0, attacksAction : 0, attacks : [], features : [{ name : "Echo", description : "The echo is a magical, translucent, gray image of its creator that doesn't act and has no turn in combat. It lasts until it is destroyed, dismissed, another is manifested, or its creator is incapacitated. The echo is also destroyed if it is ever more than 30 ft away from its creator at the end of its creator's turn." }], traits : [{ name : "Swap Place", description : "The echo's creator can, as a bonus action, teleport, magically swapping places with the echo at a cost of 15 feet of the creator's movement, regardless of the distance between the two." }, { name : "Attack Origin", description : "When the echo's creator takes the Attack action on their turn, any attack they make with that action can originate from the echo's space. This choice is made for each attack separately.\n In addition, when a creature that the echo's creator can see within 5 ft of the echo moves at least 5 ft away from it, its creator can use their reaction to make an opportunity attack against that creature as if its creator was in the echo's space." }], header : "Echo", eval : function(prefix, lvl) { // Same size as character PickDropdown(prefix + "Comp.Desc.Size", tDoc.getField("Size Category").currentValueIndices); Value(prefix + "Comp.Desc.Age", What("Age")); Value(prefix + "Comp.Desc.Sex", What("Sex")); Value(prefix + "Comp.Desc.Height", What("Height")); Value(prefix + "Comp.Desc.Alignment", What("Alignment")); } }] }, "subclassfeature3.1" : { name : "Unleash Incarnation", source : [["W", 183]], minlevel : 3, description : desc([ "When I use the Attack action, I can make one extra melee attack from my echo's position" ]), usages : "Constitution modifier per ", usagescalc : "event.value = Math.max(1, What('Con Mod'));", recovery : "long rest" }, "subclassfeature7" : { name : "Echo Avatar", source : [["W", 183]], minlevel : 7, description : desc([ "As an action, I can temporarily transfer my consciousness to my echo for up to 10 min", "During this time, I see and hear through its eyes and ears, but not my own eyes and ears", "While I use my echo this way, it can be up to 1000 ft away from me without issue", "I can end this at any time, requiring no action" ]), action : [["action", ""]] }, "subclassfeature10" : { name : "Shadow Martyr", source : [["W", 183]], minlevel : 10, description : desc([ "As a reaction when a creature I can see is attacked, I can make my echo the target", "Before the attack roll, the echo teleports to an empty space within 5 ft of the creature", "The attack roll of the triggering attack is then made against the echo instead" ]), action : [["reaction", ""]], usages : 1, recovery : "short rest" }, "subclassfeature15" : { name : "Reclaim Potential", source : [["W", 184]], minlevel : 15, description : desc([ "When my echo is destroyed by taking damage, I gain 2d6 + my Con mod in temp HP", "I can only gain these temporary hit points if I don't already have temporary hit points" ]), usages : "Constitution modifier per ", usagescalc : "event.value = Math.max(1, What('Con Mod'));", recovery : "long rest" }, "subclassfeature18" : { name : "Legion of One", source : [["W", 184]], minlevel : 18, description : desc([ "I can now manifest two echoes instead of one with the same bonus action", "These two can coexist, but if I manifest a third, the previous two are destroyed", "Anything I can do from one echo's position can be done from the other's instead", "I regain one use of Unleash Incarnation if I have no more remaining when I roll initiative" ]) } } }); AddSubClass("wizard", "chronurgy magic", { // contains contributions by bassbogan on GitHub and @Nod_Hero#2046 on Discord regExpSearch : /chronurgy|chronomancer|chronurgist/i, subname : "Chronurgy Magic", subnameShort: "Chronurgy", fullname : "Chronurgist", source : [["W", 184]], features : { "subclassfeature2" : { name : "Chronal Shift", source : [["W", 184]], minlevel : 2, description : desc([ "As a reaction after I or a creature I see rolls a check, save, or attack, I can force a reroll", "I can do this after I see if the roll fails or succeeds; The target must use the second roll." ]), action : [["reaction", ""]], usages : 2, recovery : "long rest", eval : function() { // Always have access to dunamancy spells enabled if (GetFeatureChoice("classes", "wizard", "spellcasting", true).indexOf("access to dunamancy spells") === -1) { ClassFeatureOptions(["wizard", "spellcasting", "access to dunamancy spells", true]); } }, removeeval : function() { // Remove access to dunamancy spells when removing subclass if (GetFeatureChoice("classes", "wizard", "spellcasting", true).indexOf("access to dunamancy spells") !== -1) { ClassFeatureOptions(["wizard", "spellcasting", "access to dunamancy spells", true], "remove"); } } }, "subclassfeature2.1" : { name : "Temporal Awareness", source : [["W", 184]], minlevel : 2, description : desc([ "I gain a bonus to my initiative rolls equal to my Intelligence modifier" ]), addMod : { type : "skill", field : "Init", mod : "max(Int|0)", text : "I can add my Intelligence modifier to initiative rolls." } }, "subclassfeature6" : { name : "Momentary Stasis", source : [["W", 184]], minlevel : 6, description : desc([ "As an action, I can have a Large or smaller creature I can see in 60 ft make a Con save", "If failed, it is encased in a field of magical energy, incapacitated and has a speed of 0", "This lasts until the end of my next turn or until the creature takes any damage" ]), action : [["action", ""]], usages : "Intelligence modifier per ", usagescalc : "event.value = Math.max(1, What('Int Mod'));", recovery : "long rest" }, "subclassfeature10" : { name : "Arcane Abeyance", source : [["W", 184]], minlevel : 10, description : desc([ "When I use a spell slot to cast a 4th-level or lower spell, I can condense it into a mote", "The spell is frozen in time at the moment of casting and held within a grey bead", "The bead is a Tiny object with 1 HP, AC 15, and immune to poison and psychic damage", "After 1 hour or if it is destroyed, it vanishes with a flash of light and the spell is lost", "As an action, a creature holding the bead can release the spell within as if they cast it", "The spell still uses my spell attack bonus and save DC; The bead vanishes once used" ]), usages : 1, recovery : "short rest" }, "subclassfeature14" : { name : "Convergent Future", source : [["W", 185]], minlevel : 14, description : desc([ "As a reaction after I or a creature I see rolls a check, save, or attack, I can choose the roll", "I decide the number rolled, if it is the minimum needed to succeed or 1 less than that", "When I use this feature, I gain a level of exhaustion which only a long rest can remove" ]), action : [["reaction", ""]] } } }); AddSubClass("wizard", "graviturgy magic", { // contains contributions by bassbogan on GitHub and @Nod_Hero#2046 on Discord regExpSearch : /^((?=.*graviturgy)(?=.*(wizard|magic|mage))|gravimancer|graviturgist).*$/i, subname : "Graviturgy Magic", subnameShort: "Graviturgy", fullname : "Graviturgist", source : [["W", 185]], features : { "subclassfeature2" : { name : "Adjust Density", source : [["W", 185]], minlevel : 2, description : desc([ "As an action, I can magically double or halve the weight of a creature I can see in 30 ft", "If doubled, it has -10 ft speed and advantage on Strength checks and Strength saves", "If halved, it has +10 ft speed, can jump twice as far, and disadv. on Str checks and saves", "This lasts for 1 minute or until my concentration ends (like concentrating on a spell)" ]), action : [["action", ""]], additional : levels.map(function (n) { return n < 2 ? "" : (n < 10 ? "Large" : "Huge") + " or smaller creatures"; }), eval : function() { // Always have access to dunamancy spells enabled if (GetFeatureChoice("classes", "wizard", "spellcasting", true).indexOf("access to dunamancy spells") === -1) { ClassFeatureOptions(["wizard", "spellcasting", "access to dunamancy spells", true]); } }, removeeval : function() { // Remove access to dunamancy spells when removing subclass if (GetFeatureChoice("classes", "wizard", "spellcasting", true).indexOf("access to dunamancy spells") !== -1) { ClassFeatureOptions(["wizard", "spellcasting", "access to dunamancy spells", true], "remove"); } } }, "subclassfeature6" : { name : "Gravity Well", source : [["W", 185]], minlevel : 6, description : desc([ "Whenever I cast a spell on a creature, I can move it 5 ft to an empty space of my choice", "This only works if the target is willing, fails its save vs. the spell, or the spell attack hits it" ]), }, "subclassfeature10" : { name : "Violent Attraction", source : [["W", 185]], minlevel : 10, description : desc([ "As a reaction when I or a creature I see in 60 ft hits a weapon attack, I can improve it", "I increase the weapon's velocity, causing it to deal an extra 1d10 damage", "As a reaction if a creature within 60 ft is damaged by a fall, I can increase it by 2d10" ]), action : [["reaction", ""]], usages : "Intelligence modifier per ", usagescalc : "event.value = Math.max(1, What('Int Mod'));", recovery : "long rest" }, "subclassfeature14" : { name : "Event Horizon", source : [["W", 185]], minlevel : 14, description : desc([ "As an action, I can magically emit powerful gravitational magic that pulls on hostiles", "Whenever a creature hostile to me starts it turn within 30 ft, it must make Str save", "If failed, it takes 2d10 force damage and its speed is 0 until the start of its next turn", "If successful, it takes half the damage and every foot it moves this turn costs 2 extra feet", "This lasts for 1 minute or until my concentration ends (like concentrating on a spell)", "I can do this once per long rest, or by expending a 3rd-level or higher spell slot (SS 3+)" ]), action : [["action", ""]], usages : 1, recovery : "long rest", altResource : "SS 3+", } } }); // Add option to allow Dunamancy spells for the other spellcastingclasses AddFeatureChoice(ClassList.bard.features.spellcasting, true, "Access to Dunamancy Spells", { name : "Dunamancy Spells", extraname : "Optional Bard 1", source : [["W", 186]], description : desc([ "All dunamancy spells are added to the bard spell list, each still pending DM's approval" ]), calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "bard" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["sapping sting", "gift of alacrity", "magnify gravity", "fortune's favor", "immovable object", "wristpocket", "pulse wave", "gravity sinkhole", "temporal shunt", "gravity fissure", "tether essence", "dark star", "reality break", "ravenous void", "time ravage"]); }, "This optional class feature expands the spell list of the bard class with all dunamancy spells (spell level in brackets): Sapping Sting (cantrip), Gift of Alacrity (1), Magnify Gravity (1), Fortune's Favor (2), Immovable Object (2), Wristpocket (2), Pulse Wave (3), Gravity Sinkhole (4), Temporal Shunt (5), Gravity Fissure (6), Tether Essence (7), Dark Star (8), Reality Break (8),Ravenous Void (9), and Time Ravage (9)." ] } }, "Optional 1st-level bard features"); AddFeatureChoice(ClassList.cleric.features.spellcasting, true, "Access to Dunamancy Spells", { name : "Dunamancy Spells", extraname : "Optional Cleric 1", source : [["W", 186]], description : desc([ "All dunamancy spells are added to the cleric spell list, each still pending DM's approval" ]), calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "cleric" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["sapping sting", "gift of alacrity", "magnify gravity", "fortune's favor", "immovable object", "wristpocket", "pulse wave", "gravity sinkhole", "temporal shunt", "gravity fissure", "tether essence", "dark star", "reality break", "ravenous void", "time ravage"]); }, "This optional class feature expands the spell list of the cleric class with all dunamancy spells (spell level in brackets): Sapping Sting (cantrip), Gift of Alacrity (1), Magnify Gravity (1), Fortune's Favor (2), Immovable Object (2), Wristpocket (2), Pulse Wave (3), Gravity Sinkhole (4), Temporal Shunt (5), Gravity Fissure (6), Tether Essence (7), Dark Star (8), Reality Break (8),Ravenous Void (9), and Time Ravage (9)." ] } }, "Optional 1st-level cleric features"); AddFeatureChoice(ClassList.druid.features.spellcasting, true, "Access to Dunamancy Spells", { name : "Dunamancy Spells", extraname : "Optional Druid 1", source : [["W", 186]], description : desc([ "All dunamancy spells are added to the druid spell list, each still pending DM's approval" ]), calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "druid" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["sapping sting", "gift of alacrity", "magnify gravity", "fortune's favor", "immovable object", "wristpocket", "pulse wave", "gravity sinkhole", "temporal shunt", "gravity fissure", "tether essence", "dark star", "reality break", "ravenous void", "time ravage"]); }, "This optional class feature expands the spell list of the druid class with all dunamancy spells (spell level in brackets): Sapping Sting (cantrip), Gift of Alacrity (1), Magnify Gravity (1), Fortune's Favor (2), Immovable Object (2), Wristpocket (2), Pulse Wave (3), Gravity Sinkhole (4), Temporal Shunt (5), Gravity Fissure (6), Tether Essence (7), Dark Star (8), Reality Break (8),Ravenous Void (9), and Time Ravage (9)." ] } }, "Optional 1st-level druid features"); AddFeatureChoice(ClassList.paladin.features.spellcasting, true, "Access to Dunamancy Spells", { name : "Dunamancy Spells", extraname : "Optional Paladin 2", source : [["W", 186]], description : desc([ "All dunamancy spells are added to the paladin spell list, each still pending DM's approval" ]), calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "paladin" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["gift of alacrity", "magnify gravity", "fortune's favor", "immovable object", "wristpocket", "pulse wave", "gravity sinkhole", "temporal shunt"]); }, "This optional class feature expands the spell list of the paladin class with all dunamancy spells (spell level in brackets): Gift of Alacrity (1), Magnify Gravity (1), Fortune's Favor (2), Immovable Object (2), Wristpocket (2), Pulse Wave (3), Gravity Sinkhole (4), and Temporal Shunt (5)." ] } }, "Optional 2nd-level paladin features"); var EGtW_Ranger_Dunamancy_Spells = { name : "Dunamancy Spells", extraname : "Optional Ranger 2", source : [["W", 186]], description : desc([ "All dunamancy spells are added to the ranger spell list, each still pending DM's approval" ]), calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if ((spName !== "ranger" && spName !== "rangerua") || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["gift of alacrity", "magnify gravity", "fortune's favor", "immovable object", "wristpocket", "pulse wave", "gravity sinkhole", "temporal shunt"]); }, "This optional class feature expands the spell list of the ranger class with all dunamancy spells (spell level in brackets): Gift of Alacrity (1), Magnify Gravity (1), Fortune's Favor (2), Immovable Object (2), Wristpocket (2), Pulse Wave (3), Gravity Sinkhole (4), and Temporal Shunt (5)." ] } }; AddFeatureChoice(ClassList.ranger.features.spellcasting, true, "Access to Dunamancy Spells", EGtW_Ranger_Dunamancy_Spells, "Optional 2nd-level ranger features"); RunFunctionAtEnd(function() { if (!ClassList["rangerua"]) return; AddFeatureChoice(ClassList.rangerua.features.spellcasting, true, "Access to Dunamancy Spells", EGtW_Ranger_Dunamancy_Spells, "Optional 2nd-level ranger features"); }); AddFeatureChoice(ClassList.sorcerer.features.spellcasting, true, "Access to Dunamancy Spells", { name : "Dunamancy Spells", extraname : "Optional Sorcerer 1", source : [["W", 186]], description : desc([ "All dunamancy spells are added to the sorcerer spell list, each still pending DM's approval" ]), calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "sorcerer" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["sapping sting", "gift of alacrity", "magnify gravity", "fortune's favor", "immovable object", "wristpocket", "pulse wave", "gravity sinkhole", "temporal shunt", "gravity fissure", "tether essence", "dark star", "reality break", "ravenous void", "time ravage"]); }, "This optional class feature expands the spell list of the sorcerer class with all dunamancy spells (spell level in brackets): Sapping Sting (cantrip), Gift of Alacrity (1), Magnify Gravity (1), Fortune's Favor (2), Immovable Object (2), Wristpocket (2), Pulse Wave (3), Gravity Sinkhole (4), Temporal Shunt (5), Gravity Fissure (6), Tether Essence (7), Dark Star (8), Reality Break (8),Ravenous Void (9), and Time Ravage (9)." ] } }, "Optional sorcerer features"); AddFeatureChoice(ClassList.warlock.features["pact magic"], true, "Access to Dunamancy Spells", { name : "Dunamancy Spells", extraname : "Optional Warlock 1", source : [["W", 186]], description : desc([ "All dunamancy spells are added to the warlock spell list, each still pending DM's approval" ]), calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "warlock" || (spType.indexOf("bonus") !== -1 && (!spList["class"] || spList["class"] !== "warlock"))) return; spList.extraspells = spList.extraspells.concat(["sapping sting", "gift of alacrity", "magnify gravity", "fortune's favor", "immovable object", "wristpocket", "pulse wave", "gravity sinkhole", "temporal shunt", "gravity fissure", "tether essence", "dark star", "reality break", "ravenous void", "time ravage"]); }, "This optional class feature expands the spell list of the warlock class with all dunamancy spells (spell level in brackets): Sapping Sting (cantrip), Gift of Alacrity (1), Magnify Gravity (1), Fortune's Favor (2), Immovable Object (2), Wristpocket (2), Pulse Wave (3), Gravity Sinkhole (4), Temporal Shunt (5), Gravity Fissure (6), Tether Essence (7), Dark Star (8), Reality Break (8),Ravenous Void (9), and Time Ravage (9)." ] } }, "Optional 1st-level warlock features"); AddFeatureChoice(ClassList.wizard.features.spellcasting, true, "Access to Dunamancy Spells", { name : "Dunamancy Spells", extraname : "Optional Wizard 1", source : [["W", 186]], description : desc([ "All dunamancy spells are added to the wizard spell list, each still pending DM's approval" ]), calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "wizard" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["sapping sting", "gift of alacrity", "magnify gravity", "fortune's favor", "immovable object", "wristpocket", "pulse wave", "gravity sinkhole", "temporal shunt", "gravity fissure", "tether essence", "dark star", "reality break", "ravenous void", "time ravage"]); }, "This optional class feature expands the spell list of the wizard class with all dunamancy spells (spell level in brackets): Sapping Sting (cantrip), Gift of Alacrity (1), Magnify Gravity (1), Fortune's Favor (2), Immovable Object (2), Wristpocket (2), Pulse Wave (3), Gravity Sinkhole (4), Temporal Shunt (5), Gravity Fissure (6), Tether Essence (7), Dark Star (8), Reality Break (8),Ravenous Void (9), and Time Ravage (9)." ] } }, "Optional 1st-level wizard features"); RunFunctionAtEnd(function() { if (!ClassList.artificer) return; AddFeatureChoice(ClassList.artificer.features.spellcasting, true, "Access to Dunamancy Spells", { name : "Dunamancy Spells", extraname : "Optional Artificer 1", source : [["W", 186]], description : desc([ "All dunamancy spells are added to the artificer spell list, each still pending DM's approval" ]), calcChanges : { spellList : [ function(spList, spName, spType) { if (spName !== "artificer" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["sapping sting", "gift of alacrity", "magnify gravity", "fortune's favor", "immovable object", "wristpocket", "pulse wave", "gravity sinkhole", "temporal shunt"]); }, "This optional class feature expands the spell list of the artificer class with all dunamancy spells (spell level in brackets): Sapping Sting (cantrip), Gift of Alacrity (1), Magnify Gravity (1), Fortune's Favor (2), Immovable Object (2), Wristpocket (2), Pulse Wave (3), Gravity Sinkhole (4), Temporal Shunt (5)." ] } }, "Optional 1st-level artificer features"); }); // Backgrounds (includes contributions by remcovandalen) BackgroundList["grinner"] = { regExpSearch : /grinner/i, name : "Grinner", source : [["W", 200]], skills : ["Deception", "Performance"], toolProfs : [["Thieves' tools", "Dex"], ["Musical instrument", 1]], gold : 15, equipleft : [ ["Disguise kit", "", 3], ["Musical instrument", "", ""] ], equipright : [ ["Fine clothes", "", 6], ["Gold-plated ring with smiling face", "", ""], ["Belt pouch (with coins)", "", 1] ], feature : "Ballad of the Grinning Fool", trait : [ "I love the spotlight. Everyone, look at me!", "Give me a drink and I'm your friend.", "Talk to me about yourself. I'm a hell of a listener.", "I hate to start fights, but I love to finish them.", "I can't sit still.", "I'm always humming an old tune from my past.", "When I don't have a reason to smile, I'm miserable.", "I'm lucky like you wouldn't believe." ], ideal : [ ["Revolution", "Revolution: Tyrants must fall, no matter the cost. (Chaotic)" ], ["Compassion", "Compassion: The only way to make a better world is to perform small kindnesses. (Good)" ], ["Justice", "Justice: A nation built upon just foundations will uphold freedom for all. (Law)" ], ["Expression", "Expression: Music, joy, and laughter are the keys to freedom. (Good)" ], ["Self-Determination", "Self-Determination: People should be free to do as they please. (Chaotic)" ], ["Vigilance", "Vigilance: A free people must be carefully taught, lest they be misled. (Neutral)" ] ], bond : [ "I lost someone important to an agent of the empire. That regime will fall.", "The first people to be hurt by this war will be the common folk. I need to protect them.", "Music helped me through a dark time in my life. Now, I'll use music to change the world.", "I will be known as the greatest spy who ever lived.", "All life is precious to me. I know I can change the world without taking a humanoid life.", "The elite in their ivory towers don't understand how we suffer. I intend to show them." ], flaw : [ "I've never lied once in my life. What? No, I'm not crossing my fingers!", "I do everything big! Subtlety? I don't know the meaning of subtlety! Oh, that's a problem?", "Being a spy in wartime is painful. I've seen so much suffering, I think I'm losing my mind.", "I can't focus on my mission. I just want to carouse and sing and play!", "Yeah, that's my name. Yeah, I'm a Grinner spy. Who cares about staying undercover?", "I can't afford to trust anyone. Not. Anyone." ], extra : [ "Select Your Favorite Code-Song", "Zan's Coming Back", "Blow Fire Down the Coast", "Hush! Onward Come the Dragons", "Let the Sword Grow Rust", "Drink Deep, Li'l Hummingbird", "Dirge for the Emerald Fire" ] }; BackgroundFeatureList["ballad of the grinning fool"] = { description : "A member of the Golden Grin will find me and give shelter to me and my companions if I play the Ballad of the Grinning Fool in a major tavern or inn in a large city. This shelter might be discontinued if it becomes too dangerous to hide me. I must use the ballad with caution, for those who know the ballad can be traitors, counterspies, or agents of tyranny.", source : [["W", 200]] }; BackgroundList["volstrucker agent"] = { regExpSearch : /^(?=.*volstrucker)(?=.*agent).*$/i, name : "Volstrucker Agent", source : [["W", 202]], skills : ["Deception", "Stealth"], toolProfs : ["Poisoner's kit"], languageProfs : [1], gold : 10, equipleft : [ ["Poisoner's kit", "", 2] ], equipright : [ ["Common clothes", "", 3], ["Black cloak with a hood", "", ""], ["Belt pouch (with coins)", "", 1] ], feature : "Shadow Network", trait : [ "I prefer to keep my thoughts to myself.", "I indulge vice in excess to quiet my conscience.", "I've left emotion behind me. I'm now perfectly placid.", "Some event from the past keeps worming its way into my mind, making me restless.", "I always keep my word\u2014except when I'm commanded to break it.", "I laugh off insults and never take them personally." ], ideal : [ ["Order", "Order: The will of the crown is absolute. (Law)" ], ["True Loyalty", "True Loyalty: The Cerberus Assembly is greater than any power, even the crown. (Any)" ], ["Death", "Death: The penalty for disloyalty is death. (Evil)" ], ["Determination", "Determination: I cannot fail. Not ever. (Neutral)" ], ["Fear", "Fear: People should not respect power. They should fear it. (Evil)" ], ["Escape", "Escape: The Volstrucker are pure evil! I can't atone for what I've done for them, but I can escape with my life. (Any)" ] ], bond : [ "The job is all that matters. I will see it through.", "My orders are important, but my comrades are worth more than anything. I would die for them.", "Everything I've done, I've done to protect someone close to me.", "If the empire falls, all of civilization falls with it. I will hold back chaos and barbarism at any cost." ], flaw : [ "I drink to dull the pain in the back of my head.", "I go a bit mad when I see blood.", "I can hear the voices of everyone I've killed. I see their faces. I can't be free of these ghosts.", "Fear is a powerful motivator. I will do whatever it takes to prevent those who know what I am from seeing me fail, and from those I care about from knowing what I am." ], extra : [ "Select Your Tragedy", "Familicide", "Amnesia", "Capture", "Starvation", "Disfigurement", "Vicissitude" ] }; BackgroundFeatureList["shadow network"] = { description : "I can use the Volstrucker shadow network to communicate with other members over long distances. I can write a letter in special arcane ink (10 gp per page), address it to another member of the Volstrucker, and cast it into a fire. It will burn and materialize whole again on the person of the addressee. This special ink is the same as used for a wizard's spellbook.", source : [["W", 202]] }; AddBackgroundVariant("acolyte", "luxonborn", { regExpSearch : /luxonborn/i, name : "Luxonborn", source : [["W", 203]] }); AddBackgroundVariant("criminal", "myriad operative", { regExpSearch : /^(?=.*myriad)(?=.*operative).*$/i, name : "Myriad Operative", source : [["W", 203]], extra : "" }); AddBackgroundVariant("sailor", "revelry pirate", { regExpSearch : /^(?=.*revelry)(?=.*pirate).*$/i, name : "Revelry Pirate", source : [["W", 203]] }); AddBackgroundVariant("sage", "cobalt scholar", { regExpSearch : /^(?=.*cobalt)(?=.*scholar).*$/i, name : "Cobalt Scholar", source : [["W", 203]], extra : [ "Select Specific Role", "Rank-and-file", "Expositors", "Archivists" ] }); AddBackgroundVariant("criminal", "augen trust", { regExpSearch : /^(?=.*augen)(?=.*trust).*$/i, name : "Augen Trust", source : [["W", 203]], extra : "" }); // Spells (contains contributions by Biggoron144) SpellsList["sapping sting"] = { name : "Sapping Sting", classes : [], source : [["W", 189]], level : 0, school : "Necro", time : "1 a", range : "30 ft", components : "V,S", duration : "Instantaneous", save : "Con", description : "1 creature that I can see save or 1d4 Necrotic dmg and fall prone; +1d4 at CL 5, 11, and 17", descriptionCantripDie : "1 creature that I can see save or `CD`d4 Necrotic dmg and fall prone", descriptionFull : "You sap the vitality of one creature you can see in range. The target must succeed on a Constitution saving throw or take 1d4 necrotic damage and fall prone.\n This spell's damage increases by 1d4 when you reach 5th level (2d4), 11th level (3d4), and 17th level (4d4)." }; WeaponsList["sapping sting"] = { regExpSearch : /^(?=.*sapping)(?=.*sting).*$/i, name : "Sapping Sting", source : [["W", 189]], list : "spell", ability : 6, type : "Cantrip", damage : ["C", 4, "necrotic"], range : "30 ft", description : "Con save, success - no damage, fail - also fall prone", abilitytodamage : false, dc : true }; SpellsList["gift of alacrity"] = { name : "Gift of Alacrity", classes : [], source : [["W", 186]], level : 1, school : "Div", time : "1 min", range : "Touch", components : "V,S", duration : "8 h", description : "1 willing creature can add 1d8 to its initiative rolls for the duration", descriptionFull : "You touch a willing creature. For the duration, the target can add 1d8 to its initiative rolls." }; SpellsList["magnify gravity"] = { name : "Magnify Gravity", classes : [], source : [["W", 188]], level : 1, school : "Trans", time : "1 a", range : "60 ft", components : "V,S", duration : "1 rnd", save : "Con", description : "10-ft rad all crea 2d8+1d8/SL Force dmg, half spd; Save halves \u0026 no spd reduce; Str check to move obj", descriptionShorter : "10-ft rad all 2d8+1d8/SL Force dmg, half spd; Save half, no spd reduce; Str check to move obj", descriptionFull : "The gravity in a 10-foot-radius sphere centered on a point you can see within range increases for a moment. Each creature in the sphere on the turn when you cast the spell must make a Constitution saving throw. On a failed save, a creature takes 2d8 force damage, and its speed is halved until the end of its next turn. On a successful save, a creature takes half as much damage and suffers no reduction to its speed.\n Until the start of your next turn, any object that isn't being worn or carried in the sphere requires a successful Strength check against your spell save DC to pick up or move." + AtHigherLevels + "When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d8 for each slot level above 1st." }; SpellsList["fortune's favor"] = { name : "Fortune's Favor", classes : [], source : [["W", 186]], level : 2, school : "Div", time : "1 min", range : "Touch", components : "V,S,M\u2020", compMaterial : "A white pearl worth at least 100 gp, which the spell consumes", duration : "1 h", description : "1+1/SL crea once roll extra d20 and select which to use for atk, check, save, or atk vs. it (100gp cons.)", descriptionFull : "You impart latent luck to yourself or one willing creature you can see within range. When the chosen creature makes an attack roll, an ability check, or a saving throw before the spell ends, it can dismiss this spell on itself to roll an additional d20 and choose which of the d20s to use. Alternatively, when an attack roll is made against the chosen creature, it can dismiss this spell on itself to roll a d20 and choose which of the d20s to use, the one it rolled or the one the attacker rolled.\n If the original d20 roll has advantage or disadvantage, the creature rolls the additional d20 after advantage or disadvantage has been applied to the original roll." + AtHigherLevels + "When you cast this spell using a spell slot of 3rd level or higher, you can target one additional creature for each slot level above 2nd." }; SpellsList["immovable object"] = { name : "Immovable Object", classes : [], source : [["W", 187]], level : 2, school : "Trans", time : "1 a", range : "Touch", components : "V,S,M\u2020", compMaterial : "Gold dust worth at least 25 gp, which the spell consumes", duration : "1 h", description : "1 obj <10 lb fixed in place; holds 4k lb; Str check move, except chosen/password; See B (25gp cons.)", descriptionMetric : "1 obj <5 kg fixed in place; holds 2k kg; Str check move, except chosen/password; See B (25gp cons.)", descriptionFull : "You touch an object that weighs no more than 10 pounds and cause it to become magically fixed in place. You and the creatures you designate when you cast this spell can move the object normally. You can also set a password that, when spoken within 5 feet of the object, suppresses this spell for 1 minute.\n If the object is fixed in the air, it can hold up to 4,000 pounds of weight. More weight causes the object to fall. Otherwise, a creature can use an action to make a Strength check against your spell save DC. On a success, the creature can move the object up to 10 feet." + AtHigherLevels + "If you cast this spell using a spell slot of 4th or 5th level, the DC to move the object increases by 5, it can carry up to 8,000 pounds of weight, and the duration increases to 24 hours. If you cast this spell using a spell slot of 6th level or higher, the DC to move the object increases by 10, it can carry up to 20,000 pounds of weight, and the effect is permanent until dispelled." }; SpellsList["wristpocket"] = { name : "Wristpocket", classes : [], source : [["W", 190]], ritual : true, level : 2, school : "Conj", time : "1 a", range : "Self", components : "S", duration : "Conc, 1 h", description : "Store 1 held obj <5 lb in extradim. space; 1 a to summon obj in free hand or return; reappears at end", descriptionMetric : "Store 1 held obj <2,5 kg in extradim. space; 1 a summon obj in free hand or return; reappears at end", descriptionFull : "You flick your wrist, causing one object in your hand to vanish. The object, which only you can be holding and can weigh no more than 5 pounds, is transported to an extradimensional space, where it remains for the duration.\n Until the spell ends, you can use your action to summon the object to your free hand, and you can use your action to return the object to the extradimensional space. An object still in the pocket plane when the spell ends appears in your space, at your feet." }; SpellsList["pulse wave"] = { name : "Pulse Wave", classes : [], source : [["W", 188]], level : 3, school : "Evoc", time : "1 a", range : "S:30" + (typePF ? "-" : "") + "ft cone", components : "V,S", duration : "Instantaneous", save : "Con", description : "6d6+1d6/SL Force dmg, pulled/pushed 15+5/SL ft from me (also free obj); save halves, no move", descriptionMetric : "6d6+1d6/SL Force dmg, pull/push 4,5+1,5/SL m from me (also free obj); save halves, no move", descriptionShorter : "6d6+1d6/SL Force dmg, pull/push 15+5/SL ft from me (also free obj); save half, no move", descriptionFull : "You create intense pressure, unleash it in a 30-foot cone, and decide whether the pressure pulls or pushes creatures and objects. Each creature in that cone must make a Constitution saving throw. A creature takes 6d6 force damage on a failed save, or half as much damage on a successful one. And every creature that fails the save is either pulled 15 feet toward you or pushed 15 feet away from you, depending on the choice you made for the spell.\n In addition, unsecured objects that are completely within the cone are likewise pulled or pushed 15 feet." + AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d6 and the distance pulled or pushed increases by 5 feet for each slot level above 3rd." }; SpellsList["gravity sinkhole"] = { name : "Gravity Sinkhole", classes : [], source : [["W", 187]], level : 4, school : "Evoc", time : "1 a", range : "120 ft", components : "V,S,M", compMaterial : "A black marble", duration : "Instantaneous", save : "Con", description : "20-ft rad all crea 5d10+1d10/SL Force dmg, pulled to center of radius; save halves and not pulled", descriptionFull : "A 20-foot-radius sphere of crushing force forms at a point you can see within range and tugs at the creatures there. Each creature in the sphere must make a Constitution saving throw. On a failed save, the creature takes 5d10 force damage and is pulled in a straight line toward the center of the sphere, ending in an unoccupied space as close to the center as possible (even if that space is in the air). On a successful save, the creature takes half as much damage and isn't pulled." + AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, the damage increases by 1d10 for each slot level above 4th." }; SpellsList["temporal shunt"] = { name : "Temporal Shunt", classes : [], source : [["W", 189]], level : 5, school : "Trans", time : "1 rea", timeFull : "1 reaction, taken when a creature you can see makes an attack roll or starts to cast a spell", range : "120 ft", components : "V,S", duration : "1 rnd", save : "Wis", description : "Cast if see atk/cast, 1+1/SL crea, each max 30 ft apart, save or vanish until next turn, atk/cast wasted", descriptionFull : "You target the triggering creature, which must succeed on a Wisdom saving throw or vanish, being thrown to another point in time and causing the attack to miss or the spell to be wasted. At the start of its next turn, the target reappears where it was or in the closest unoccupied space. The target doesn't remember you casting the spell or being affected by it." + AtHigherLevels + "When you cast this spell using a spell slot of 6th level or higher, you can target one additional creature for each slot level above 5th. All targets must be within 30 feet of each other." }; SpellsList["gravity fissure"] = { name : "Gravity Fissure", source : [["W", 187]], level : 6, school : "Evoc", time : "1 a", range : "S:100" + (typePF ? "-" : "") + "ft line", components : "V,S,M", compMaterial : "A fistful of iron filings", duration : "Instantaneous", save : "Con", description : "100-ft long 5-ft wide all 8d8+1d8/SL Force dmg, save half; all in 10 ft of line save or dmg \u0026 pull to it", descriptionShorter : "100-ft long 5-ft wide all 8d8+1d8/SL Force dmg, save half; all in 10 ft of it save or dmg \u0026 pulled", descriptionFull : "You manifest a ravine of gravitational energy in a line originating from you that is 100 feet long and 5 feet wide. Each creature in that line must make a Constitution saving throw, taking 8d8 force damage on a failed save, or half as much damage on a successful one.\n Each creature within 10 feet of the line but not in it must succeed on a Constitution saving throw or take 8d8 force damage and be pulled toward the line until the creature is in its area." + AtHigherLevels + "When you cast this spell using a spell slot of 7th level or higher, the damage increases by 1d8 for each slot level above 6th." }; SpellsList["tether essence"] = { name : "Tether Essence", classes : [], source : [["W", 189]], level : 7, school : "Necro", time : "1 a", range : "60 ft", components : "V,S,M\u2020", compMaterial : "A spool of platinum cord worth at least 250 gp, which the spell consumes", duration : "Conc, 1 h", save : "Con", description : "2 crea save (dis. if in 30 ft) or if both fail take same dmg and same healing; ends if 0 hp (250gp cons.)", descriptionFull : "Two creatures you can see within range must make a Constitution saving throw, with disadvantage if they are within 30 feet of each other. Either creature can willingly fail the save. If either save succeeds, the spell has no effect. If both saves fail, the creatures are magically linked for the duration, regardless of the distance between them. When damage is dealt to one of them, the same damage is dealt to the other one. If hit points are restored to one of them, the same number of hit points are restored to the other one. If either of the tethered creatures is reduced to 0 hit points, the spell ends on both. If the spell ends on one creature, it ends on both." }; SpellsList["dark star"] = { name : "Dark Star", classes : [], source : [["W", 186]], level : 8, school : "Evoc", time : "1 a", range : "150 ft", components : "V,S,M", compMaterial : "A shard of onyx and a drop of the caster's blood, both of which the spell consumes", duration : "Conc, 1 min", save : "Con", description : "Up to 40-ft rad as Darkness spell, as Silence spell, dif. ter.; enter/start turn 8d10 Force dmg, save half", descriptionShorter : "Up to 40-ft rad as Darkness \u0026 Silence, dif. ter.; enter/start turn 8d10 Force dmg, save half", descriptionFull : "This spell creates a sphere centered on a point you choose within range. The sphere can have a radius of up to 40 feet. The area within this sphere is filled with magical darkness and crushing gravitational force.\n For the duration, the spell's area is difficult terrain. A creature with darkvision can't see through the magical darkness, and nonmagical light can't illuminate it. No sound can be created within or pass through the area. Any creature or object entirely inside the sphere is immune to thunder damage, and creatures are deafened while entirely inside it. Casting a spell that includes a verbal component is impossible there.\n Any creature that enters the spell's area for the first time on a turn or starts its turn there must make a Constitution saving throw. The creature takes 8d10 force damage on a failed save, or half as much damage on a successful one. A creature reduced to 0 hit points by this damage is disintegrated. A disintegrated creature and everything it is wearing and carrying, except magic items, are reduced to a pile of fine gray dust." }; SpellsList["reality break"] = { name : "Reality Break", classes : [], source : [["W", 189]], level : 8, school : "Conj", time : "1 a", range : "60 ft", components : "V,S,M", compMaterial : "A crystal prism", duration : "Conc, 1 min", save : "Wis", description : "1 crea save or can't take reactions, random effect each turn, see book; extra save at end of every turn", descriptionFull : "You shatter the barriers between realities and timelines, thrusting a creature into turmoil and madness. The target must succeed on a Wisdom saving throw, or it can't take reactions until the spell ends. The affected target must also roll a d10 at the start of each of its turns; the number rolled determines what happens to the target, as shown on the Reality Break Effects table."+ "\n At the end of each of its turns, the affected target can repeat the Wisdom saving throw, ending the spell on itself on a success."+ "\n\n d10 \tEffect"+ "\n 1-2 \tVision of the Far Realm: The target takes 6d12 psychic damage, and it is stunned until the end of the turn."+ "\n 3-5 \tRending Rift: The target must make a Dexterity saving throw, taking 8d12 force damage on a failed save, or half as much damage on a successful one."+ "\n 6-8 \tWormhole: The target is teleported, along with everything it is wearing and carrying, up to 30 feet to an unoccupied space of your choice that you can see. The target also takes 10d12 force damage and is knocked prone."+ "\n 9-10\tChill of the Dark Void: The target takes 10d12 cold damage, and it is blinded until the end of the turn." }; SpellsList["ravenous void"] = { name : "Ravenous Void", classes : [], source : [["W", 188]], level : 9, school : "Evoc", time : "1 a", range : "1000 ft", components : "V,S,M", compMaterial : "A small, nine-pointed star made of iron", duration : "Conc, 1 min", save : "Str", description : "20-ft rad all enter/start 5d10 Force dmg, restrained; all enter/start in 100 ft save or pulled in; see B", descriptionShorter : "20-ft rad all enter/start 5d10 Force dmg, restrained; all start in 100 ft save or pull in; see B", descriptionFull : "You create a 20-foot-radius sphere of destructive gravitational force centered on a point you can see within range. For the spell's duration, the sphere and any space within 100 feet of it are difficult terrain, and nonmagical objects fully inside the sphere are destroyed if they aren't being worn or carried.\n When the sphere appears and at the start of each of your turns until the spell ends, unsecured objects within 100 feet of the sphere are pulled toward the sphere's center, ending in an unoccupied space as close to the center as possible.\n A creature that starts its turn within 100 feet of the sphere must succeed on a Strength saving throw or be pulled straight toward the sphere's center, ending in an unoccupied space as close to the center as possible. A creature that enters the sphere for the first time on a turn or starts its turn there takes 5d10 force damage and is restrained until it is no longer in the sphere. If the sphere is in the air, the restrained creature hovers inside the sphere. A creature can use its action to make a Strength check against your spell save DC, ending this restrained condition on itself or another creature in the sphere that it can reach. A creature reduced to 0 hit points by this spell is annihilated, along with any nonmagical items it is wearing or carrying." }; SpellsList["time ravage"] = { name : "Time Ravage", classes : [], source : [["W", 189]], level : 9, school : "Necro", time : "1 a", range : "90 ft", components : "V,S,M\u2020", compMaterial : "An hourglass filled with diamond dust worth at least 5,000 gp, which the spell consumes", duration : "Instantaneous", save : "Con", description : "1 crea 10d12 Necrotic dmg \u0026 aged: dis. atk/chk/save, die in 30 days; save half, not aged (5k gp cons.)", descriptionShorter : "1 crea 10d12 Necro. dmg, aged: dis. atk/chk/save, die in 30 days; save hlf, no aged (5k gp cons)", descriptionFull : "You target a creature you can see within range, putting its physical form through the devastation of rapid aging. The target must make a Constitution saving throw, taking 10d12 necrotic damage on a failed save, or half as much damage on a successful one. If the save fails, the target also ages to the point where it has only 30 days left before it dies of old age. In this aged state, the target has disadvantage on attack rolls, ability checks, and saving throws, and its walking speed is halved. Only the wish spell or the greater restoration cast with a 9th-level spell slot can end these effects and restore the target to its previous age." }; // Creatures - new beasts CreatureList["moorbounder"] = { name : "Moorbounder", source : [["W", 295]], size : 2, type : "Beast", alignment : "Unaligned", ac : 13, hp : 30, hd : [4, 10], speed : "70 ft", scores : [18, 14, 14, 2, 13, 5], senses : "Darkvision 60 ft", passivePerception : 11, challengeRating : "1", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Claws", ability : 1, damage : [4, 4, "slashing"], range : "Melee (5 ft)", description : "" }], traits : [{ name : "Standing Leap", description : "The moorbounder's long jump is up to 40 ft and its high jump is up to 20 ft, with or without a running start." }] }; CreatureList["bristled moorbounder"] = { name : "Bristled Moorbounder", source : [["W", 295]], size : 2, type : "Beast", alignment : "Unaligned", ac : 15, hp : 52, hd : [7, 10], speed : "70 ft", scores : [18, 14, 14, 2, 13, 5], senses : "Darkvision 60 ft", passivePerception : 11, challengeRating : "3", proficiencyBonus : 2, attacksAction : 2, attacks : [{ name : "Blades", ability : 1, damage : [2, 6, "slashing"], range : "Melee (5 ft)", description : "One blades and one claws attack as an Attack action" }, { name : "Claws", ability : 1, damage : [4, 4, "slashing"], range : "Melee (5 ft)", description : "One blades and one claws attack as an Attack action" }], actions : [{ name : "Multiattack", description : "As an action on its turn, the moorbounder can makeone Blades and one Claws attack." }], traits : [{ name : "Bladed Hide", description : "At the start of each of its turns, the moorbounder deals 2d4 piercing damage to any creature grappling it." }, { name : "Standing Leap", description : "The moorbounder's long jump is up to 40 ft and its high jump is up to 20 ft, with or without a running start." }] }; // Magic Items (each contain contributions by kat9137 [Discord] aka sophiechiabatta [GitHub]) MagicItemsList["acheron blade"] = { name : "Acheron Blade", nameTest : "Acheron", source : [["W", 265]], type : "weapon (any sword)", rarity : "rare", notLegalAL : true, attunement : true, description : "This sword gives a +1 to hit and damage rolls. While I'm holding it, I'm immune to effects that turn undead. As an action, once per dusk, I can use it to gain 1d4+4 temporary HP. Once per dusk, I can give a creature hit with it disadvantage on their next save until the end of my next turn (frighten effect).", descriptionFull : "The black blade of this sword is crafted from a mysterious arcane alloy. You gain a +1 bonus to attack and damage rolls made with this magic weapon. While the sword is on your person, you are immune to effects that turn undead."+ "\n " + toUni("Dark Blessing") + ". While holding the sword, you can use an action to give yourself 1d4 + 4 temporary hit points. This property can't be used again until the next dusk."+ "\n " + toUni("Disheartening Strike") + ". When you hit a creature with an attack using this weapon, you can fill the target with unsettling dread: the target has disadvantage on the next saving throw it makes before the end of your next turn. The creature ignores this effect if it's immune to the frightened condition. Once you use this property, you can't do so again until the next dusk", action : [["action", " (Dark Blessing)"]], savetxt : { immune : ["Effects that turn undead"] }, extraLimitedFeatures : [{ name : "Acheron Blade (Dark Blessing)", usages : 1, recovery : "Dusk" }, { name : "Acheron Blade (Disheartening Strike)", usages : 1, recovery : "Dusk" }], chooseGear : { type : "weapon", prefixOrSuffix : "suffix", descriptionChange : ["replace", "sword"], excludeCheck : function (inObjKey, inObj) { var testRegex = /sword|scimitar|rapier/i; return !(testRegex).test(inObjKey) && (!inObj.baseWeapon || !(testRegex).test(inObj.baseWeapon)); } }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && v.isMeleeWeapon && (/sword|scimitar|rapier/i).test(v.baseWeaponName) && (/acheron/i).test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + 'Once per dusk, target disadv. on next save until my next turn ends'; } }, 'If I include the words "Acheron" in a the name of a sword, it will be treated as the magic weapon Acheron Blade.' ], atkCalc : [ function (fields, v, output) { if (v.isMeleeWeapon && (/sword|scimitar|rapier/i).test(v.baseWeaponName) && (/acheron/i).test(v.WeaponTextName)) { output.magic = v.thisWeapon[1] + 1; } }, '' ] } }; MagicItemsList["amulet of the drunkard"] = { name : "Amulet of the Drunkard", source : [["W", 266]], type : "wondrous item", rarity : "uncommon", notLegalAL : true, description : "This amulet smells of old, ale-stained wood. While wearing it, I can regain 4d4 + 4 hit points when I drink a pint of beer, ale, mead, or wine. Once the amulet has restored hit points, it can't do so again until the next dawn.", descriptionFull : "This amulet smells of old, ale-stained wood. While wearing it, you can regain 4d4 + 4 hit points when you drink a pint of beer, ale, mead, or wine. Once the amulet has restored hit points, it can't do so again until the next dawn.", usages : 1, recovery : "dawn" }; var EGtW_ArcaneCannonFullDescription = [ "This Large cannon is imbued with magic. It requires no ammunition and doesn't need to be loaded. It takes one action to aim the cannon and one action to fire it. After the cannon has fired, it must recharge for 5 minutes before it can be fired again. The creature firing the cannon chooses the effect from the following options:", ">>Acid Jet<<. The cannon discharges acid in a line 300 feet long and 5 feet wide. Each creature in that line must make a DC 15 Dexterity saving throw, taking 4d10 acid damage on a failed save, or half as much damage on a successful one. In addition, a creature that fails its saving throw takes 2d10 acid damage at the start of each of its turns; a creature can end this damage by using its action to wash off the acid with a pint or more of water.", ">>Fire Jet<<. The cannon discharges fire in a line 300 feet long and 5 feet wide. Each creature in the area must make a DC 15 Dexterity saving throw, taking 6d10 fire damage on a failed save, or half as much damage on a successful one. The fire ignites any flammable objects in the area that aren't being worn or carried.", ">>Frost Shot<<. The cannon shoots a ball of frost to a point you can see within 1200 feet of the cannon. The ball then expands to form a 30-foot-radius sphere centered on that point. Each creature in that area must make a DC 15 Constitution saving throw. On a failed save, a creature takes 4d10 cold damage, and its speed is reduced by 10 feet for 1 minute. On a successful save, the creature takes half as much damage, and its speed isn't reduced. A creature whose speed is reduced by this effect can repeat the save at the end of each of its turns, ending the effect on itself on a success.", ">>Lightning Shot<<. The cannon shoots a ball of lightning to a point you can see within 1200 feet of the cannon. The lightning then expands to form a 20-foot-radius sphere centered on that point. Each creature in that area must make a DC 15 Dexterity saving throw, taking 6d10 lightning damage on a failed save, or half as much damage on a successful one. Creatures wearing metal armor have disadvantage on the save.", ">>Poison Spray<<. The cannon expels poison gas in a 60-foot cone. Each creature in that area must make a DC 15 Constitution saving throw. On a failed save, the creature takes 4d10 poison damage and is poisoned for 1 minute. On a successful save, the creature takes half as much damage and isn't poisoned. A creature poisoned in this way can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success." ]; MagicItemsList["arcane cannon"] = { name : "Arcane Cannon", source : [["W", 265]], type : "wondrous item", rarity : "very rare", notLegalAL : true, description : "This Large magical cannon requires no ammunition and doesn't need to be loaded, but takes 5 minutes to recharge once fired. It takes one action to aim it and another action to fire it. When I fire it, I can choose the effect, an acid jet, fire jet, frost shot, lightning shot, or poison spray. See Notes page.", descriptionFull : EGtW_ArcaneCannonFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)<<\./g, function(a, match) { return match.toUpperCase() + ":"; }).replace(/\byou\b/ig, "I").replace(/\bf(oo|ee)t\b/ig, "ft") }] }; MagicItemsList["battering shield"] = { name : "Battering Shield", source : [["W", 266]], type : "shield", rarity : "uncommon", notLegalAL : true, attunement : true, description : "This iron tower shield gives me a +1 bonus to AC, in addition to the shield's normal bonus to AC. It has 3 charges, regaining 1d3 expended charges daily at dawn. When I am holding the shield and push a creature 5 ft away, I can expend 1 charge to push that creature an additional 10 ft, knock it prone, or both.", descriptionFull : "While holding this iron tower shield, you gain a +1 bonus to AC. This bonus is in addition to the shield's normal bonus to AC.\n Additionally, the shield has 3 charges, and it regains 1d3 expended charges daily at dawn. If you are holding the shield and push a creature within your reach at least 5 feet away, you can expend 1 charge to push that creature an additional 10 feet, knock it prone, or both.", usages : 3, recovery : "dawn", additional : "regains 1d3", shieldAdd : ["Battering Shield", 3], weight : 6 }; MagicItemsList["bloodaxe"] = { name : "Bloodaxe", source : [["W", 266]], type : "weapon (greataxe)", rarity : "very rare", notLegalAL : true, attunement : true, description : "This rust-colored magical greataxe grants a +2 bonus to attack and damage rolls made with it. The axe deals an additional 1d6 necrotic damage to creature's that aren't constructs or undead. If I reduce a creature to 0 hit points with this axe, I gain 10 temporary hit points.", descriptionFull : "You gain a +2 bonus to attack and damage rolls made with this magic axe. The axe deals an extra 1d6 necrotic damage to creatures that aren't constructs or undead. If you reduce such a creature to 0 hit points with an attack using this axe, you gain 10 temporary hit points.\n This axe is forged from a dark, rust-colored metal and once belonged to the goliath barbarian Grog Strongjaw of Vox Machina.", weaponOptions : [{ baseWeapon : "greataxe", regExpSearch : /bloodaxe/i, name : "Bloodaxe", source : [["W", 266]], description : "Heavy, two-handed; +1d6 necrotic damage to living targets", modifiers : [2, 2], selectNow : true }], weight : 7 }; MagicItemsList["breathing bubble"] = { name : "Breathing Bubble", source : [["W", 266], ["CotN", 212]], type : "wondrous item", rarity : "common", notLegalAL : true, description : "This translucent, bubble-like sphere has a slightly tacky outer surface. I gain its benefits only while wearing it over my head like a helmet. The bubble contains 1 hour of breathable air. The bubble regains all its expended air daily at dawn.", descriptionFull : "This translucent, bubble-like sphere has a slightly tacky outer surface, and you gain the item's benefits only while wearing it over your head like a helmet. The bubble contains 1 hour of breathable air. The bubble regains all its expended air daily at dawn.", usages : 1, recovery : "dawn" }; MagicItemsList["brooch of living essence"] = { name : "Brooch of Living Essence", source : [["W", 266]], type : "wondrous item", rarity : "uncommon", notLegalAL : true, attunement : true, description : "While wearing this nondescript brooch, spells and anything else that would detect or reveal my creature type treat me as humanoid, and those that would reveal my alignment treat it as neutral.", descriptionFull : "While wearing this nondescript brooch, spells and anything else that would detect or reveal your creature type treat you as humanoid, and those that would reveal your alignment treat it as neutral." }; MagicItemsList["butcher's bib"] = { name : "Butcher's Bib", source : [["W", 266]], type : "wondrous item", rarity : "rare", notLegalAL : true, attunement : true, description : "This black leather apron is perpetually covered by blood. Once per turn when I roll damage for a melee attack with a weapon, I can use it to reroll the weapon's damage dice, but must use the new roll. While wearing the bib, my weapon attacks that deal slashing damage score a critical hit on a roll of 19 or 20.", descriptionFull : "This black leather apron is perpetually covered by blood, even after being washed off. You gain the following benefits while wearing the apron:"+ "\n \u2022 Once per turn when you roll damage for a melee attack with a weapon, you can reroll the weapon's damage dice. If you do so, you must use the second total."+ "\n \u2022 Your weapon attacks that deal slashing damage score a critical hit on a roll of 19 or 20 on the d20.", calcChanges : { atkAdd : [ function (fields, v) { if (!v.isDC && !v.isSpell && !v.CritChance && /slash/i.test(v.theWea.damage[2])) { fields.Description += (fields.Description ? '; ' : '') + 'Crit on 19-20'; v.CritChance = 19; } if (!v.isDC && v.isMeleeWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Reroll damage once per turn'; } }, "My weapon attacks that deal slashing damage score a critical on a to hit roll of both 19 and 20. Once per turn, I can reroll the damage of a melee weapon attack and must use the second result.", 19 ] } }; MagicItemsList["coin of delving"] = { name : "Coin of Delving", source : [["W", 266]], type : "wondrous item", rarity : "common", notLegalAL : true, description : "This scintillating copper coin sheds dim light in a 5-ft radius. If dropped a distance greater than 5 ft, the coin issues a melodious ringing sound when it hits a surface. Any creature that can hear the chime can determine the distance the coin dropped based on the tone.", descriptionFull : "This scintillating copper coin sheds dim light in a 5-foot radius. If dropped a distance greater than 5 feet, the coin issues a melodious ringing sound when it hits a surface. Any creature that can hear the chime can determine the distance the coin dropped based on the tone." }; MagicItemsList["corpse slayer"] = { name : "Corpse Slayer", nameTest : "Corpse Slaying", source : [["W", 266]], type : "weapon (any)", rarity : "rare", notLegalAL : true, attunement : true, description : "I gain a +1 bonus to attack and damage rolls made with this magic weapon. Undead hit by it take an additional 1d8 damage and gain disadvantage on saving throws against effects that turn undead until the start of my next turn.", descriptionFull : "You gain a +1 bonus to attack and damage rolls made with this magic weapon.\n When you hit an undead creature with an attack using this weapon, the attack deals an extra 1d8 damage of the weapon's type, and the creature has disadvantage on saving throws against effects that turn undead until the start of your next turn.", chooseGear : { type : "weapon", prefixOrSuffix : ["between", "Corpse Slaying", ""], itemName1stPage : ["suffix", "Corpse Slaying"], descriptionChange : ["replace", "weapon"] }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.isSpell && !v.theWea.isMagicWeapon && (/corpse slay(er|ing)/i).test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + '+1d8 damage vs. undead; Target disadv. vs. turn undead'; } }, 'If I include the words "Corpse Slayer" or "Corpse Slaying" in a the name of a weapon, it will be treated as the magic weapon Corpse Slayer, which has a +1 to hit and damage and deals +1d8 damage vs. undead.' ], atkCalc : [ function (fields, v, output) { if (!v.isSpell && (/corpse slay(er|ing)/i).test(v.WeaponTextName)) { output.magic = v.thisWeapon[1] + 1; } }, '' ] } }; MagicItemsList["dispelling stone"] = { name : "Dispelling Stone", source : [["W", 266]], type : "wondrous item", rarity : "very rare", notLegalAL : true, description : "This smooth, rainbow-colored, egg-shaped stone can be thrown up to 30 ft and explodes in a 10-ft-radius sphere of magical energy on impact, destroying the stone. Any active spell of 5th level or lower in the sphere ends.", descriptionFull : "This smooth, rainbow-colored, egg-shaped stone can be thrown up to 30 feet and explodes in a 10-foot-radius sphere of magical energy on impact, destroying the stone. Any active spell of 5th level or lower in the sphere ends.", usages : 1, recovery : "Never" }; MagicItemsList["duskcrusher"] = { name : "Duskcrusher", source : [["W", 266]], type : "weapon (warhammer)", rarity : "very rare", notLegalAL : true, attunement : true, description : "This rod caries the symbol of Pelor. As a bonus action, I can activate its crackling head of sunlight, that shines bright light in 15 ft and dim for another 15 ft. While active, I can use it as a +2 warhammer that deals radiant damage and +1d8 damage to undead. Once per dawn, I can cast Sunbeam with it (DC 15).", descriptionLong : "This leather-wrapped metal rod caries the symbol of Pelor on top. As a bonus action, I can cause a warhammer head of crackling radiance to spring into existence. It emits emits bright light in a 15-foot radius and dim light for an additional 15 feet. The light is sunlight. While the radiant head is active, the rod functions as a +2 warhammer that deals radiant damage and +1d8 damage to undead. Once per dawn while its radiant head is active, I can use it to cast Sunbeam (DC 15). I can deactivate the head as an action.", descriptionFull : "This item takes the form of a leather-wrapped metal rod emblazoned with the symbol of Pelor, the Dawn Father. While grasping the rod, you can use a bonus action to cause a warhammer head of crackling radiance to spring into existence. The warhammer's radiant head emits bright light in a 15-foot radius and dim light for an additional 15 feet. The light is sunlight. You can use an action to make the radiant head disappear."+ "\n While the radiant head is active, you gain a +2 bonus to attack and damage rolls made with this magic weapon, and attacks with the weapon deal radiant damage instead of bludgeoning damage. An undead creature hit by the weapon takes an extra 1d8 radiant damage."+ "\n While you are holding Duskcrusher and its radiant head is active, you can use an action to cast the sunbeam spell (save DC 15) from the weapon, and this action can't be used again until the next dawn.", action : [ ["bonus action", " (activate)"], ["action", " (deactivate)"] ], extraLimitedFeatures : [{ name : "Duskcrusher (Sunbeam)", usages : 1, recovery : "dawn" }], weaponOptions : [{ baseWeapon : "warhammer", regExpSearch : /duskcrusher/i, name : "Duskcrusher", source : [["W", 266]], damage : [1, 8, "radiant"], description : "Versatile (1d10); +1d8 damage vs. undead", modifiers : [2, 2], selectNow : true }], weight : 2, fixedDC : 15, spellcastingBonus : [{ name : "Once per dawn", spells : ["sunbeam"], selection : ["sunbeam"], firstCol : 'oncelr' }] }; MagicItemsList["dust of deliciousness"] = { name : "Dust of Deliciousness", source : [["W", 267]], type : "wondrous item", rarity : "uncommon", notLegalAL : true, description : "This reddish brown dust can be sprinkled over any edible substance to greatly improve the flavor. The dust also dulls the eater's senses: anyone eating food treated with this dust has disadvantage on Wisdom ability checks and Wisdom saving throws for 1 hour. There is enough dust to flavor six servings.", descriptionFull : "This reddish brown dust can be sprinkled over any edible substance to greatly improve the flavor. The dust also dulls the eater's senses: anyone eating food treated with this dust has disadvantage on Wisdom ability checks and Wisdom saving throws for 1 hour. There is enough dust to flavor six servings.", usages : 6, recovery : "Never" }; MagicItemsList["goggles of object reading"] = { name : "Goggles of Object Reading", source : [["W", 267]], type : "wondrous item", rarity : "uncommon", notLegalAL : true, attunement : true, description : "While wearing these leather-framed goggles feature purple crystal lenses, I have advantage on Intelligence (Arcana) checks made to reveal information about a creature or object I can see. Once per dawn, I can cast Identify using the goggles.", descriptionFull : "These leather-framed goggles feature purple crystal lenses. While wearing the goggles, you have advantage on Intelligence (Arcana) checks made to reveal information about a creature or object you can see. In addition, you can cast the identify spell using the goggles. Once you do so, you can't do so again until the next dawn.", // Changed googles to goggles, as this is clearly a typo in the book additional : "Identify", usages : 1, recovery : "dawn", spellcastingBonus : [{ name : "Once per dawn", spells : ["identify"], selection : ["identify"], firstCol : 'oncelr' }] }; MagicItemsList["hunter's coat"] = { name : "Hunter's Coat", source : [["W", 267]], type : "armor (leather)", rarity : "very rare", notLegalAL : true, attunement : true, description : "I have a +1 bonus to AC while wearing this leather armor. The coat has 3 charges. When I hit a creature with an attack and that creature doesn't have all its hit points, I can expend 1 charge to deal an extra 1d10 necrotic damage to the target. The coat regains 1d3 expended charges at dawn.", descriptionFull : "You have a +1 bonus to AC while wearing this armor. The coat has 3 charges. When you hit a creature with an attack and that creature doesn't have all its hit points, you can expend 1 charge to deal an extra 1d10 necrotic damage to the target. The coat regains 1d3 expended charges daily at dawn.", usages : 3, recovery : "dawn", additional : "regains 1d3", armorOptions : [{ regExpSearch : /^(?=.*hunter)(?=.*coat).*$/i, name : "Hunter's Coat", source : [["W", 267]], type : "light", ac : "11+1", weight : 10, selectNow : true }], weight : 10 }; MagicItemsList["last stand armor"] = { name : "Last Stand Armor", nameTest : /last.stand.*armou?r/i, source : [["W", 267]], type : "armor (any)", rarity : "very rare", notLegalAL : true, description : "I have a +1 bonus to AC while wearing this magic armor. If I die while wearing this armor, it is destroyed, and each celestial, fey, and fiend with 30 ft of me must succeed on a DC 15 Charisma saving throw or be banished to their home plane of existence, unless they are already there.", descriptionFull : "You have a +1 bonus to AC while wearing this armor, which shimmers softly. If you die while wearing the armor, it is destroyed, and each celestial, fey, and fiend with 30 feet of you must succeed on a DC 15 Charisma saving throw or be banished to its home plane of existence, unless it is already there.", chooseGear : { type : "armor", prefixOrSuffix : ["between", "Last Stand", "Armor"], descriptionChange : ["prefix", "armor"], itemName1stPage : ["between", "Last Stand", "(+1)"] }, extraLimitedFeatures : [{ name : "Last Stand Armor", usages : 1, recovery : "Never" }] }; var EGtW_LuxonBeaconFullDescription = [ "This dodecahedron of faintly glowing crystal is heavier than it appears. A set of handles are affixed to its sides, and it pulsates and thrums when touched.", ">>Fragment of Possibility<<. A creature that touches the beacon and concentrates for 1 minute receives a Fragment of Possibility, which looks like a Tiny, grayish bead of energy that follows the creature around, staying within 1 foot of it at all times. The fragment lasts for 8 hours or until used. Once the beacon grants a Fragment of Possibility, it can't grant another until the next dawn. A creature with a Fragment of Possibility from a Luxon Beacon can't gain another Fragment of Possibility from any source.", "When a creature with a Fragment of Possibility makes an attack roll, an ability check, or a saving throw, it can expend its fragment to roll an additional d20 and choose which of the d20s to use. Alternatively, when an attack roll is made against the creature, it can expend its fragment to roll a d20 and choose which of the d20s to use, the one it rolled or the one the attacker rolled.", "If the original d20 roll has advantage or disadvantage, the creature rolls its d20 after advantage or disadvantage has been applied to the original roll.", ">>Soul Snare<<. If a follower of the Luxon who has undergone a ritual of consecution dies within 100 miles of a Luxon Beacon, their soul is ensnared by it. This soul will be reincarnated within the body of a random humanoid baby developing within 100 miles of the beacon." ]; MagicItemsList["luxon beacon"] = { name : "Luxon Beacon", source : [["W", 268]], type : "wondrous item", rarity : "legendary", notLegalAL : true, description : "Once per dawn, a creature can touch this crystal for 1 minute to gain a Fragment of Possibility. Once for the next 8 hours, it can roll an extra d20 for an attack, check, save, or being attacked, before the outcome is determined. Creatures consecuted to the Luxon that die within 100 miles of it are reincarnated. See notes.", descriptionFull : EGtW_LuxonBeaconFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)<<\. /g, function(a, match) { return match.toUpperCase() + "\n "; }) }] }; MagicItemsList["needle of mending"] = { name : "Needle of Mending", source : [["W", 268]], type : "weapon (dagger)", rarity : "rare", notLegalAL : true, attunement : true, description : "This weapon is a magic dagger disguised as a sewing needle. As a bonus action, I can speak its command word to transform it into a dagger or back into a needle. I gain a +1 bonus to attack and damage rolls made with the dagger. As an action while holding it, I can cast the mending cantrip from it.", descriptionFull : "This weapon is a magic dagger disguised as a sewing needle. When you hold it and use a bonus action to speak its command word, it transforms into a dagger or back into a needle.\n You gain a +1 bonus to attack and damage rolls made with the dagger. While holding it, you can use an action to cast the mending cantrip from it.", action : [["bonus action", " (transform)"]], weaponOptions : [{ baseWeapon : "dagger", regExpSearch : /^(?=.*needle)(?=.*mending).*$/i, name : "Needle of Mending", source : [["W", 268]], modifiers : [1, 1], selectNow : true }], spellcastingBonus : [{ name : "At will", spells : ["mending"], selection : ["mending"], firstCol : 'atwill' }], spellChanges : { "mending" : { time : "1 a", changes : "Using the Needle of Mending, I can cast Mending as an action." } }, weight : 1 }; MagicItemsList["nightfall pearl"] = { name : "Nightfall Pearl", source : [["W", 268]], type : "wondrous item", rarity : "legendary", notLegalAL : true, attunement : true, description : "I can spend 10 minutes to activate this his 6-inch-diameter, jet-black orb, causing the area within 10 miles of it to become night even if it is daytime. This night lasts for 24 hours, until I cancel it as an action, or until my attunement to the pearl ends. Once used, the pearl can't be used again for 24 hours.", descriptionFull : "Used to summon night, this 6-inch-diameter, jet-black orb is cold to the touch. You can spend 10 minutes to activate it, causing the area within 10 miles of it at the moment of activation to become night even if it is daytime. This night lasts for 24 hours, until you cancel it as an action, or until your attunement to the pearl ends. Once used, the pearl can't be used again for 24 hours.", action : [["action", " (end)"]], usages : 1, recovery : "24 hrs" }; MagicItemsList["orb of the veil"] = { // no automation for halving the fire damage, because it is very complex, error prone, and the curse could (and will) be removed name : "Orb of the Veil", source : [["W", 268]], type : "wondrous item", rarity : "very rare", notLegalAL : true, attunement : true, description : "This orb increases my Wisdom and maximum by 2, grants me +60 ft darkvision, and adv. on Wisdom checks to find hidden doors and paths. It is cursed and once attuned to it, I become unwilling to part with it, nonmagical flames within 30 ft of me extinguish, and fire damage I deal is halved (not automated).", descriptionFull : "This onyx sphere bears deep, spiraling grooves and dangles from an iron chain. While the orb is on your person, you gain the following benefits:\n Your Wisdom score increases by 2, as does your maximum for that score.\n You gain darkvision out to a range of 60 feet. If you already have darkvision, the orb increases its range by 60 feet.\n You have advantage on Wisdom checks to find hidden doors and paths.\n " + toUni("Curse") + ". The orb is cursed, and becoming attuned to it extends the curse to you. As long as you remain cursed, you are unwilling to part with the orb, keeping it on your person at all times. All nonmagical flames within 30 feet of you automatically extinguish, and fire damage dealt by you is halved.", vision : [["Darkvision", "fixed 60"], ["Darkvision", "+60"]], scores : [0, 0, 0, 0, 2, 0], scoresMaximum : [0, 0, 0, 0, "+2", 0], weight : 3 }; MagicItemsList["potion of maximum power"] = { name : "Potion of Maximum Power", source : [["W", 268]], type : "potion", rarity : "rare", notLegalAL : true, description : "Once as an action, I can drink this potion of glowing purple liquid that smells of sugar and plum or administer it to another. The next time the recipient casts a damage-dealing spell of 4th-level or lower within 1 minute, instead of rolling the damage die, the highest number possible for each die is used.", descriptionFull : "The first time you cast a damage-dealing spell of 4th level or lower within 1 minute after drinking the potion, instead of rolling dice to determine the damage dealt, you can instead use the highest number possible for each die.\n This glowing purple liquid smells of sugar and plum, but it has a muddy taste.", weight : 0.5 }; MagicItemsList["potion of possibility"] = { name : "Potion of Possibility", source : [["W", 268]], type : "potion", rarity : "very rare", notLegalAL : true, description : "Once as an action, I can drink this potion of glowing purple liquid that smells of sugar and plum or administer it to another. Twice for the next 8 hours, the consumer can roll an extra d20 for an attack, check, save, or being attacked, before the outcome is determined.", descriptionFull : "When you drink this clear potion, you gain two Fragments of Possibility, each of which looks like a Tiny, grayish bead of energy that follows you around, staying within 1 foot of you at all times. Each fragment lasts for 8 hours or until used."+ "\n When you make an attack roll, an ability check, or a saving throw, you can expend your fragment to roll an additional d20 and choose which of the d20s to use. Alternatively, when an attack roll is made against you, you can expend your fragment to roll a d20 and choose which of the d20s to use, the one you rolled or the one the attacker rolled."+ "\n If the original d20 roll has advantage or disadvantage, you roll your d20 after advantage or disadvantage has been applied to the original roll."+ "\n While you have one or more Fragments of Possibility from this potion, you can't gain another Fragment of Possibility from any source.", weight : 0.5 }; MagicItemsList["reincarnation dust"] = { name : "Reincarnation Dust", source : [["W", 268]], type : "wondrous item", rarity : "very rare", notLegalAL : true, usages : 1, recovery : "Never", description : "Once I can sprinkle the purple dust in this small pouch on a dead humanoid or a piece of a dead humanoid. The dust is absorbed by the remains. If willing, the dead creature returns to life with a new body as if the reincarnate spell had been cast on the remains.", descriptionFull : "When this small pouch of purple dust is sprinkled on a dead humanoid or a piece of a dead humanoid, the dust is absorbed by the remains. If willing, the dead creature returns to life with a new body as if the reincarnate spell had been cast on the remains.", spellcastingBonus : [{ name : "Use once", spells : ["reincarnate"], selection : ["reincarnate"] }] }; MagicItemsList["ring of obscuring"] = { name : "Ring of Obscuring", source : [["W", 269]], type : "ring", rarity : "uncommon", notLegalAL : true, attunement : true, description : "This band of iron resembling a skull has 3 charges, regaining 1d3 expended charges at dawn. As an action, I can expend 1 charge to cast Fog Cloud from it, with the following changes: the cloud is centered on me when it first appears, the spell lasts for 1 minute, and the spell requires no concentration.", descriptionFull : "This band of iron resembles a skull and is cold to the touch. It has 3 charges and regains 1d3 expended charges daily at dawn. As an action while wearing the ring, you can expend 1 of its charges to cast the fog cloud spell from it, with the following changes: the cloud is centered on you when it first appears, and the spell lasts for 1 minute (no concentration required).", extraLimitedFeatures : [{ name : "Ring of Obscuring", usages : 3, recovery : "Dawn" }], spellcastingAbility : "class", spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "1 charge", spells : ["fog cloud"], selection : ["fog cloud"], firstCol : '1' }], spellChanges : { "fog cloud" : { range : "Self", duration : "1 min", changes : "When I cast fog cloud with the Ring of Obscuring, the spell is centered on me, lasts for 1 minute, and the requires no concentration." } } }; MagicItemsList["ring of temporal salvation"] = { name : "Ring of Temporal Salvation", source : [["W", 269]], type : "ring", rarity : "rare", notLegalAL : true, attunement : true, description : "If I die while wearing this gray crystal ring, I vanish and reappear in an empty space within 5 ft, with 3d6 + my Con mod in HP, and 1 less level of exhaustion (if any). If my maximum HP is less than the amount rolled, my max rises to a similar amount. Once this ring is used, it turns to dust and is destroyed.", descriptionFull : "If you die while wearing this gray crystal ring, you vanish and reappear in an unoccupied space within 5 feet of the space you left (or the nearest unoccupied space). You have a number of hit points equal to 3d6 + your Constitution modifier. If your hit point maximum is lower than the number of hit points you regain, your hit point maximum rises to a similar amount. If you have any levels of exhaustion, reduce your level of exhaustion by 1. Once the ring is used, it turns to dust and is destroyed." }; MagicItemsList["rod of retribution"] = { name : "Rod of Retribution", source : [["W", 269]], type : "rod", rarity : "uncommon", notLegalAL : true, attunement : true, description : "This adamantine rod with a glowing crystalline tip has 3 charges, regaining all daily at dawn. As a reaction when a creature I can see within 60 ft damages me, I can expend a charge to force it to make a DC 13 Dexterity save. It takes a 2d10 lightning damage on a failed save, or half as much on a successful one.", descriptionFull : "This adamantine rod is tipped with a glowing crystalline eye. The rod has 3 charges and regains all its expended charges daily at dawn.\n When a creature you can see within 60 feet of you damages you while you are holding this rod, you can use your reaction to expend 1 of the rod's charges to force the creature to make a DC 13 Dexterity saving throw. The creature takes 2d10 lightning damage on a failed save, or half as much damage on a successful one.", usages : 3, recovery : "dawn", action : [["reaction", " (if damaged)"]], weight : 2 }; MagicItemsList["spell bottle"] = { name : "Spell Bottle", source : [["W", 269]], type : "wondrous item", rarity : "legendary", notLegalAL : true, attunement : true, description : "While holding this bottle, I can cast a 5th-level or lower spell into it if empty, or cast the stored spell from it (slot level, DC, and spell attack as original casting). As a reaction when I see a spell being cast in 60 ft, I can try to store it in the empty bottle. Works if 3rd-level or lower, otherwise Int check DC 10 + spell level.", descriptionFull : "This glass bottle can store one spell of up to 5th level at a time. When found, roll a d6 and subtract 1; the total determines the level of spell in the bottle (the DM chooses the spell, and 0 means the bottle is empty). A swirling blue vapor fills the bottle while it contains a spell."+ "\n When the bottle is empty, any creature can cast a spell of 1st through 5th level into it by touching it while casting. The spell has no effect other than to be stored in the bottle."+ "\n While holding the bottle, you can cast the spell stored in it. The spell uses the slot level, spell save DC, spell attack bonus, and spellcasting ability of the original caster, but is otherwise treated as if you cast the spell. The bottle becomes empty once the spell is cast."+ "\n If you're holding the empty bottle when you see a creature casting a spell within 60 feet of you, you can open the bottle as a reaction in an attempt to interrupt the spell. If the creature is casting a spell of 3rd level or lower, the spell has no effect, and it is stored in the bottle. If it is casting a spell of 4th level or higher, make an Intelligence check. The DC equals 10 + the spell's level. On a success, the spell has no effect, and it is stored in the bottle." }; MagicItemsList["staff of dunamancy"] = { name : "Staff of Dunamancy", source : [["W", 270]], type : "staff", rarity : "very rare", notLegalAL : true, attunement : true, prerequisite : "Requires attunement by a wizard", prereqeval : function (v) { return classes.known.wizard ? true : false; }, description : "This staff has 10 charges, regains 1d6+4 at dawn. If I use its last charge, roll a d20. On a 1, it is destroyed. As an action, I can use its charges to cast Fortune's Favor (2), Pulse Wave (3), or Gravity Sinkhole (4), using my spellcasting ability. Once per dawn, I can turn a failed save vs. a spell that targets only me into a success.", descriptionFull : "This staff of polished gray wood bears numerous runes carved along its length. The staff has 10 charges and regains 1d6 + 4 expended charges daily at dawn. If you expend the last charge, roll a d20. On a 1, the staff turns into dust and is destroyed."+ "\n While holding the staff, you can use an action to expend 2 or more of its charges to cast one of the following spells from it, using your spell save DC and spell attack bonus: fortune's favor (2 charges), pulse wave (3 charges), or gravity sinkhole (4 charges)."+ "\n " + toUni("New Possibility") + ". If you are holding the staff and fail a saving throw against a spell that targets only you, you can turn your failed save into a successful one. This property can't be used again until the next dawn.", extraLimitedFeatures : [{ name : "Staff of Dunamancy (regains 1d6+4)", usages : 10, recovery : "dawn" }, { name : "Staff of Dunamancy (New Possibility)", usages : 1, recovery : "dawn" }], spellcastingAbility : "class", spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "2 charges", spells : ["fortune's favor"], selection : ["fortune's favor"], firstCol : 2 }, { name : "3 charges", spells : ["pulse wave"], selection : ["pulse wave"], firstCol : 3 }, { name : "4 charges", spells : ["gravity sinkhole"], selection : ["gravity sinkhole"], firstCol : 4 }], spellChanges : { "fortune's favor" : { time : "1 a", changes : "Using the Staff of Dunamancy, I can cast Fortune's Favor as an action." } }, weight : 4 }; MagicItemsList["staff of the ivory claw"] = { name : "Staff of the Ivory Claw", source : [["W", 270]], type : "staff", rarity : "rare", notLegalAL : true, attunement : true, description : "This gray-and-cerulean staff is topped with a small dragon claw carved from ivory. While holding the staff, I gain a +1 bonus to spell attack rolls. Whenever you score a critical hit with a spell attack, the target takes an extra 3d6 radiant damage.", descriptionFull : "This gray-and-cerulean staff is topped with a small dragon claw carved from ivory. While holding the staff, you gain a +1 bonus to spell attack rolls. Whenever you score a critical hit with a spell attack, the target takes an extra 3d6 radiant damage.", prerequisite : "Requires attunement by a spellcaster", prereqeval : function(v) { return v.isSpellcaster; }, calcChanges : { spellCalc : [ function (type, spellcasters, ability) { if (type == "attack") return 1; }, "While holding the Staff of the Ivory Claw, I have a +1 bonus to spell attack rolls." ], atkAdd : [ function (fields, v) { if (v.isSpell && !v.theWea.dc) { fields.Description += (fields.Description ? '; ' : '') + 'On crit, +3d6 radiant damage'; } }, "While holding the Staff of the Ivory Claw whenever I score a critical hit with a spell attack, the target takes an extra 3d6 radiant damage." ] }, weight : 4 }; MagicItemsList["vox seeker"] = { name : "Vox Seeker", source : [["W", 270]], type : "wondrous item", rarity : "common", notLegalAL : true, description : "This clockwork device resembles a metal crab the size of a dinner plate. Every action used to wind up this clockwork device allows it to operate for 1 minute, to a maximum of 10 minutes. See the vox seeker on a companion page. This creature is under the DM's control. If reduced to 0 HP, it is destroyed.", descriptionFull : "This clockwork device resembles a metal crab the size of a dinner plate. Every action used to wind up the device allows it to operate for 1 minute, to a maximum of 10 minutes. While operational, the item uses the accompanying Vox Seeker stat block. This automaton is under the DM's control. A vox seeker reduced to 0 hit points is destroyed.", action : [["action", " (wind up)"]], creaturesAdd : [["Vox Seeker"]], creatureOptions : [{ name : "Vox Seeker", source : [["W", 270]], size : 5, type : "Construct", alignment : "", ac : 14, hp : 7, hd : [2, 4], speed : "20 ft, climb 20 ft", scores : [2, 10, 12, 1, 10, 1], damage_immunities : "poison, psychic", condition_immunities : "blinded, charmed, deafened, exhaustion, frightened, paralyzed, petrified, poisoned", senses : "Blindsight 60 ft (blind beyond this radius", passivePerception : 10, languages : "", challengeRating : "0", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Pincer", ability : 2, damage : [1, 4, "piercing"], range : "Melee (5 ft)", description : "+3 lightning damage", abilitytodamage : false }], features : [{ name : "Creator", description : "The homunculus obeys the commands of its creator and has the same proficiency bonus. It takes its turn immediately after its creator, on the same initiative count. It can move and take reactions on its own, but only takes the Dodge action on its turn unless its creator takes a bonus action to command it to take another action. If its creator is incapacitated, it can take any action, not just Dodge." }], traits : [{ name : "Spider Climb", description : "The vox seeker can climb difficult surfaces, including upside down on ceilings, without needing to make an ability check." }, { name : "Voice Lock", description : "The vox seeker must move toward and attack the source of the nearest voice within 60 ft of it, to the exclusion of all other targets, for as long as it remains operational." }] }] }; MagicItemsList["weapon of certain death"] = { name : "Weapon of Certain Death", nameTest : "of Certain Death", source : [["W", 270]], type : "weapon (any)", rarity : "rare", notLegalAL : true, description : "When I damage a creature with an attack using this magic weapon, the target can't regain hit points until the start of my next turn.", descriptionFull : "When you damage a creature with an attack using this magic weapon, the target can't regain hit points until the start of your next turn.", chooseGear : { type : "weapon", prefixOrSuffix : "prefix", descriptionChange : ["replace", "weapon"] }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && (/of certain death/i).test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + "On hit, target can't heal until my next turn starts"; } }, 'If I include the words "of Certain Death" in a the name of a weapon, it will be treated as the magic weapon "Weapon of Certain Death". On a hit, the target can\'t regain hit points until the start of my next turn.' ] } }; // Vestiges of Divergence (contains contributions by kat9137 [Discord] aka sophiechiabatta [GitHub]) var EGtW_Vestiges_Replace = function (sDescr) { return desc(sDescr).replace(/\bf(oo|ee)t\b/ig, "ft") .replace(/you are/ig, "I am").replace(/\byou\b/ig, "I") .replace(/(by|giving|grants|of|to|for) I\b/ig, "$1 me") .replace(/your/g, "my").replace(/Your/g, "My") .replace(/ >>(.*?)<<\. /g, function(a, match) { return "\n" + match.toUpperCase() + "\n "; }); } var EGtW_DanothsVisorFullDescription = [ "These mithral-frame goggles with clear diamond lenses were used by the evoker Danoth Oro to spot invisible enemies and scout areas from afar.", ">>Dormant<<. While wearing the goggles in their dormant state, you can see normally in darkness, both magical and nonmagical, to a distance of 60 feet. Additionally, you have advantage on Intelligence (Investigation) and Wisdom (Perception) checks that rely on sight.", ">>Awakened<<. When Danoth's Visor reaches an awakened state, it gains the following properties:", "\u2022 You see invisible creatures and objects within 60 feet of you as if they were visible, and you can see into the Ethereal Plane. Ethereal creatures and objects appear ghostly and translucent.", "\u2022 As a bonus action, you can speak a command word and use the goggles to see into and through solid matter. This vision has a radius of 60 feet and lasts for 1 minute. To you, solid objects within that radius appear transparent. The vision can penetrate 1 foot of stone, 1 inch of common metal, or up to 3 feet of wood or dirt. Thicker substances block the vision, as does a thin sheet of lead. This property can't be used again until the next dawn.", "\u2022 As a bonus action, you can speak a command word to switch the goggles into spyglass mode. While in this mode, creatures and objects viewed through the goggles are magnified to twice their size. Speaking the command word again reverts the goggles to their normal operation.", ">>Exalted<<.", "When Danoth's Visor reaches an exalted state, it gains the following properties:", "\u2022 You automatically detect illusions you can see and automatically succeed on saving throws against them. In addition, you see a bright aura around any creature that isn't in its true form.", "\u2022 As an action, you can cast the antimagic field spell from the visor. This property can't be used again until the next dawn." ]; MagicItemsList["danoth's visor"] = { name : "Danoth's Visor", source : [["W", 270]], type : "wondrous item", rarity : "legendary", notLegalAL : true, attunement : true, description : "These mithral-frame goggles with clear diamond lenses were used by the evoker Danoth Oro to spot invisible enemies and scout areas from afar. See notes page for more information.", descriptionFull : EGtW_DanothsVisorFullDescription.join("\n ").replace(/>>(.*?)<>Dormant<<. Most of the book is blank, but the following spells are recorded in the first pages of the tome: alarm, antimagic field, Bigby's hand, blight, charm person, confusion, control weather, create undead, detect thoughts, enlarge/reduce, fear, foresight, gaseous form, glyph of warding, legend lore, Leomund's tiny hut, mass suggestion, mislead, misty step, Mordenkainen's faithful hound, prismatic spray, ray of enfeeblement, silent image, teleport, and thunderwave.", "You can use the grimoire as your spellbook, and you can scribe new spells into it as normal. When you prepare wizard spells using the grimoire, the number of wizard spells you can prepare increases by 1.", ">>Awakened<<. When the Grimoire Infinitus reaches an awakened state, it gains the following properties:", "\u2022 While you carry the spellbook, you have advantage on saving throws against spells and magical effects.", "\u2022 When you prepare wizard spells using the grimoire as your spellbook, the number of spells you can prepare increases by 1 again.", ">>Exalted<<. When the Grimoire Infinitus reaches an exalted state, it gains the following properties:", "\u2022 You can now use your Arcane Recovery feature twice between long rests, rather than once.", "\u2022 When you prepare wizard spells using the grimoire as your spellbook, the number of spells you can prepare increases by 1 again." ]; MagicItemsList["grimoire infinitus"] = { name : "Grimoire Infinitus", source : [["W", 271]], type : "wondrous item", rarity : "legendary", notLegalAL : true, attunement : true, description : "This spellbook with unlimited gilded pages and silver-plated covers can be used by a wizard to prepare and store spells. It holds several spells already. When I use to prepare wizards spells, I can prepare 1 additional spell.", descriptionFull : EGtW_GrimoireInfinitusFullDescription.join("\n ").replace(/>>(.*?)<>Dormant<<. While wearing the armor in its dormant state, you gain the following benefits:", "\u2022 The armor grants you a +1 bonus to AC.", "\u2022 While you are transformed by an effect that replaces any of your game statistics with those of another creature, you have a +1 bonus to melee attack and damage rolls, and you retain the benefits of this armor.", "\u2022 As an action, you can use the armor to cast polymorph on yourself, transforming into a giant owl while retaining your Intelligence, Wisdom, and Charisma scores. This property can't be used again until the next dawn.", ">>Awakened<<. When the armor reaches an awakened state, it gains the following properties:", "\u2022 The AC bonus of the armor increases to +2.", "\u2022 While you are transformed by an effect that replaces any of your game statistics with those of another creature, your bonus to melee attack and damage rolls increases by 1 (to +2).", "\u2022 When you cast the polymorph spell using this armor, you can transform into a cave bear.", ">>Exalted<<. When the armor reaches an exalted state, it gains the following properties:", "\u2022 The AC bonus of the armor increases to +3.", "\u2022 While you are transformed by an effect that replaces any of your game statistics with those of another creature, your bonus to melee attack and damage rolls increases by 1 (to +3).", "\u2022 When you cast the polymorph spell using this armor, you can transform into a guardian wolf." ]; MagicItemsList["hide of the feral guardian"] = { name : "Hide of the Feral Guardian", source : [["W", 271]], type : "armor (studded leather)", rarity : "legendary", notLegalAL : true, attunement : true, description : "This magic studded leather armor retains it benefits even when I'm transformed by an effect that replaces any of my game statistics with those of another creature and then also grants me a bonus to melee attack and damage rolls. Once per dawn, I can use it to cast Polymorph on myself.", descriptionFull : EGtW_HideFeralGuardianFullDescription.join("\n ").replace(/>>(.*?)<>Dormant<<. The Infiltrator's Key grants the following benefits in its dormant state:", "\u2022 The key can be used as thieves' tools for the purpose of opening locks. When using the key, you are considered proficient in thieves' tools and you have advantage on ability checks made to open locks.", "\u2022 While holding the key, your steps are muffled, giving you advantage on Dexterity (Stealth) checks made to move silently.", ">>Awakened<<. When the Infiltrator's Key reaches an awakened state, it gains the following properties:", "\u2022 While holding the key, you can use a bonus action to transform the key into a magic dagger or back into a key. While the key is in the form of a dagger, you gain a +1 bonus to attack and damage rolls made with it, and it returns to your hand immediately after it is used to make a ranged attack.", "\u2022 While holding the key, you can use an action to cast one of the following spells from it: alter self, invisibility, knock, or pass without trace. Once a spell has been cast using the key, it can't be used to cast that spell again until the next dawn.", ">>Exalted<<. When the Infiltrator's Key reaches an exalted state, it gains the following properties:", "\u2022 As a bonus action, you can touch the key to a floor, wall, or ceiling that is no more than 5 feet thick and cause a magical opening to appear in the surface. When you create the opening, you choose its length and width, up to 10 feet for each dimension. The opening lasts until the key passes through it to the other side, at which point it disappears (if a creature is in the opening when the doorway closes, the creature is safely shunted to the nearest unoccupied space). The key can't be used to create another opening until the next dawn.", "\u2022 While holding the key, you can use an action to cast one of the following spells from it: dimension door, gaseous form, or mislead. Once a spell has been cast using the key, it can't be used to cast that spell again until the next dawn." ]; MagicItemsList["infiltrator's key"] = { name : "Infiltrator's Key", source : [["W", 273]], type : "wondrous item", rarity : "legendary", notLegalAL : true, attunement : true, description : "This mithral skeleton key was forged using the blood of twelve master thieves executed for trying to steal magic items during the Age of Arcanum. See notes page for more information.", descriptionFull : EGtW_InfiltratorsKeyFullDescription.join("\n ").replace(/>>(.*?)<>Dormant<<. While wearing the Stormgirdle in its dormant state, you have resistance to lightning damage and thunder damage, and your Strength score becomes 21 if it isn't already 21 or higher. In addition, you can use an action to become a Storm Avatar for 1 minute, gaining the following benefits for the duration:", "\u2022 You have immunity to lightning damage and thunder damage.", "\u2022 When you hit with a weapon attack that normally deals bludgeoning damage, it deals thunder damage instead. When you hit with a weapon attack that normally deals piercing or slashing damage, it deals lightning damage instead.", "\u2022 As a bonus action, you can choose one creature you can see within 30 feet of you to be struck by lightning. The target must make a DC 15 Dexterity saving throw, taking 3d6 lightning damage on a failed save, or half as much damage on a successful one.", "Once you use the girdle's Storm Avatar property, that property can't be used again until the next dawn.", ">>Awakened<<. While wearing the Stormgirdle in its awakened state, you gain the following benefits:", "\u2022 Your Strength score becomes 23 if it isn't already 23 or higher.", "\u2022 Your Storm Avatar's lightning strike deals 4d6 lightning damage (instead of 3d6).", "\u2022 While transformed into a Storm Avatar, you gain a flying speed of 30 feet and can hover.", ">>Exalted<<. While wearing the Stormgirdle in its exalted state, you gain the following benefits:", "\u2022 Your Strength score becomes 25 if it isn't already 25 or higher.", "\u2022 Your Storm Avatar's lightning strike deals 5d6 lightning damage (instead of 3d6).", "\u2022 You can cast the control weather spell from the girdle. This property can't be used again until the next dawn." ]; MagicItemsList["stormgirdle"] = { name : "Stormgirdle", source : [["W", 273]], type : "wondrous item", rarity : "legendary", notLegalAL : true, attunement : true, description : "A wide belt of leather branded with the symbol of Kord. While attuned to and wearing this belt, I am resistant to lightning and thunder damage. My Strength score becomes 21, provided my Strength is not already 21 or higher. As an action, I can become a Storm Avatar for 1 minute. See notes page for more info.", descriptionFull : EGtW_StormgirdleFullDescription.join("\n ").replace(/>>(.*?)<>Dormant<<. While wearing the Verminshroud in its dormant state, you gain the following benefits:", "\u2022 You have advantage on Wisdom (Perception) checks that rely on smell, you are immune to disease, and you have darkvision out to a range of 60 feet. If you already have darkvision, wearing the cloak increases the range of your darkvision by 60 feet.", "\u2022 As an action, you can use the Verminshroud to cast polymorph on yourself, transforming into a giant rat or rat while retaining your Intelligence, Wisdom, and Charisma scores, as well as the properties of the cloak. This property can't be used again until the next dawn.", ">>Awakened<<. While wearing the Verminshroud in its awakened state, you gain the following benefits:", "\u2022 You have resistance to poison damage.", "\u2022 You can use an action to cast the insect plague spell (save DC 15) from the Verminshroud, requiring no material components. This property can't be used again until the next dawn.", "\u2022 When you cast the polymorph spell using the Verminshroud, you can transform into a giant wasp.", ">>Exalted<<. While wearing the Verminshroud in its exalted state, you gain the following benefits:", "\u2022 You gain a climbing speed equal to your walking speed.", "\u2022 Your teeth become razor-sharp natural weapons, which you can use to make unarmed strikes. If you hit with them, you deal piercing damage equal to 1d6 + your Strength modifier, instead of the bludgeoning damage normal for an unarmed strike. You can make this attack as a bonus action. When you bite a creature and deal damage to it, the creature must succeed on a DC 17 Constitution saving throw or be poisoned for 1 minute. The target can repeat the saving throw at the end of each of its turns, ending the condition on itself on a success.", "\u2022 When you cast the polymorph spell using the Verminshroud, you can transform into a giant scorpion." ]; MagicItemsList["verminshroud"] = { name : "Verminshroud", source : [["W", 273]], type : "wondrous item", rarity : "legendary", notLegalAL : true, attunement : true, description : "This patchy cloak was pieced together from the pelts of rats found feasting on the dead in Blightshore and is dotted with the bloated corpses of magically preserved insects along its seams. See notes page for more info.", descriptionFull : EGtW_VerminshroudFullDescription.join("\n ").replace(/>>(.*?)<>Dormant<<. While wearing the wreath in its dormant state, you have darkvision out to a range of 60 feet. If you already have darkvision, wearing the wreath increases the range of your darkvision by 60 feet.", "When you hit a beast, dragon, or monstrosity of challenge rating 5 or lower with an attack, or when you grapple it, you can use the wreath to cast dominate monster on the creature (save DC 13). On a successful save, the target is immune to the power of the wreath for 24 hours. On a failure, a shimmering, golden image of the wreath appears as a collar around the target's neck or as a crown on its head (your choice) until it is no longer charmed by the spell. If you use the wreath to charm a second creature, the first spell immediately ends. When the spell ends, the target knows it was charmed by you.", ">>Awakened<<. Once the Wreath of the Prism reaches an awakened state, it gains the following benefits:", "\u2022 You can affect creatures of challenge rating 10 or lower with the wreath.", "\u2022 The save DC of the wreath's spell increases to 15.", ">>Exalted<<. Once the Wreath of the Prism reaches an exalted state, it gains the following benefits:", "\u2022 You can affect creatures of challenge rating 15 or lower with the wreath.", "\u2022 The save DC of the wreath's spell increases to 17." ]; MagicItemsList["wreath of the prism"] = { name : "Wreath of the Prism", source : [["W", 274]], type : "wondrous item", rarity : "legendary", notLegalAL : true, attunement : true, description : "This loop of golden thorns is inset with dozens of gems that represent the five colors of Tiamat. I gain darkvision to 60 ft, or extend my darkvision by 60 ft. When I hit a beast, dragon, or monstrosity with an attack, I can cast dominate monster on that creature, depending on its CR. See notes page for info.", descriptionFull : EGtW_WreathPrismFullDescription.join("\n ").replace(/>>(.*?)<>Curse<<. Any creature that gains the benefit of a short rest from the vessel hears cloying telepathic whispers emanating it. That creature must make a DC 17 Wisdom saving throw. On a failed save, the creature is charmed by the vessel for 1 hour. The charmed creature does everything it can to open the vessel as soon as possible. On a successful save, the creature is immune to the vessel's whispers for 24 hours.\n", toUni("d8\tCalamity"), " 1\t>>Androphagia<<. Each creature within 60 feet of the vessel must succeed on a DC 17 Wisdom saving throw or go berserk for l minute. The berserk creature must begin its turn using the Attack action to make one melee or ranged attack (its choice) against the creature nearest to it. The berserk creature can repeat the save at the end of its turn, ending the effect on itself on a success.", " 2\t>>Bile Blight<<. The vessel casts the harm spell on each creature within 30 feet of it.", " 3\t>>Flood<<. The vessel casts the tsunami spell at a point of the DM's choice within 120 feet of it.", " 4\t>>Medusa's Gaze<<. The vessel casts the flesh to stone spell on each creature within 30 feet of it.", " 5\t>>Labyrinth<<. The vessel casts the maze spell on each creature within 30 feet of it.", " 6\t>>Nightmare<<. Tendrils of shadow seep from the vessel and form into 1d4 shadow demons (see the Monster Manual for their stat block), which appear in unoccupied spaces within 30 feet of it and are hostile.", " 7\t>>Swarming Insects<<. The vessel casts the insect plague spell, centered on itself and with a radius of 30 feet.", " 8\t>>Unbridled Revel<<. The vessel casts the Otto's irresistible dance spell on each creature within 30 feet of it." ]; MagicItemsList["pyxis of pandemonium"] = { name : "Pyxis of Pandemonium", source : [["MOT", 197]], type : "wondrous item", rarity : "legendary", notLegalAL : true, description : "Once per long rest, I gain the benefits of a short rest by touching this ornate vessel for 1 minute. I also gain the benefit of Bless until I finish my next rest. After benefiting from this vessel, I have to make a DC 17 Wis save or become charmed by the vessel for 1 hour. If charmed, I must do everything to open it. See Notes.", descriptionLong : "Once per long rest, I can touch this ornate wooden vessel for 1 minute to gain the benefits of a short rest. I then also gain the benefit of the Bless spell until I finish my next rest. After I gain the benefits of a short rest from this vessel, I must make a DC 17 Wisdom save or become charmed by it for 1 hour. On a success, I am immune to its charm for 24 hours. If charmed, I will do everything I can to open the vessel as soon as possible. Once opened, the vessel causes a random effect to occur, then it disappears after 1 minute and reappears, sealed, in random location on the same plane. See Notes.", descriptionFull : MOT_PyxisOfPandemoniumFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)<>d4 Bullet<<", "1 >>Banishment<<. A creature that takes damage from this bullet must succeed on a DC 15 Charisma saving throw or be banished as though affected by the banishment spell.", "2 >>Fulguration<<. On a hit, this bullet deals an extra 2d8 lightning damage to its target. All other creatures within 10 feet of the target must each succeed on a DC 15 Constitution saving throw or take 1d8 thunder damage.", "3 >>Stunning<<. On a hit, this bullet deals an extra ldlO force damage, and the target is stunned until the end of your next turn.", "4 >>Tracking<<. A creature that takes damage from this bullet is marked with a glowing rune where the bullet hit. The mark lasts 24 hours. While the creature is marked, you always know the direction to it.", ]; MagicItemsList["sling bullets of althemone"] = { name : "Sling Bullets of Althemone", source : [["MOT", 198]], type : "weapon (sling bullet)", rarity : "very rare", notLegalAL : true, description : "These bullets come in a pouch containing 1d4 + 4 bullets. Attacks made with these sling bullets add +2 to hit and damage. If a bullet misses, it teleports back to its pouch. On a hit, the bullet's effect happens and the bullet loses its magic. I roll on the table to determine each bullet's magical effect, see Notes.", descriptionFull : MOT_SlingBulletsOfAlthemoneFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)<>d20\tFish color and result<<", "1-10\t>>Green with copper bands<<. This tasty fish provides a day's worth of nourishment to one creature that eats it. The fish loses this property and rots if it's not eaten within 24 hours of being caught.", "11-14\t>>Yellow with black stripes<<. Once removed from the hook, this awful-tasting fish can be thrown up to 120 feet, targeting a creature the thrower can see. The target must succeed on a DC 15 Strength saving throw or be knocked prone. The fish then disappears.", "15-18\t>>Blue with white bands<<. When released from the hook, this fish squirms free, sprouts wings, follows you around, and sings a beautiful tune in Aquan. It disappears after 2d4 hours or when reduced to 0 hit points. The fish uses the quipper stat block, except that it can breathe air and has a flying speed of 30 feet.", "19-20\t>>Gold with silver stripes<<. This tasty fish provides a day's worth of nourishment to one creature that eats it and grants 2d10 temporary hit points to that creature. The fish loses these properties and rots if it's not eaten within 24 hours of being caught." ]; MagicItemsList["hook of fisher's delight"] = { // contains contributions by BraabHimself name : "Hook of Fisher's Delight", source : [["RotF", 314]], type : "wondrous item", rarity : "rare", description : "For this tiny silver fishhook to work, I must attach it to the end of a fishing line and immerse it in at least 10 cu ft of water. Then, at the end of each uninterrupted hour of immersion, I roll a d6. On a 6, a magical fish appears on the hook; roll a d20 to determine the fish's properties on the table on the Notes page.", descriptionFull : IDRotF_HookOfFishersDelightFullDescription.join("\n ").replace(/>>(.*?)<>|<= 3; }, description : "While attuned to this orb, it glows with an inner purplish light and gives me telepathy. The range of telepathy and intensity of light are determined by my Intelligence score.", descriptionFull : "This crystal grants you telepathy for as long as you remain attuned to it. See the introduction of the Monster Manual for rules on how this telepathy works."+ "\n The crystal also glows with a purplish inner light while you are attuned to it."+ "\n The higher your intelligence, the greater the light's intensity and the greater the range of the telepathy (see the table below)."+ toUni("\n\nIntelligence\tRange of \tLight"+ "\n Score\t\tTelepathy \tIntensity")+ "\n 3-7\t\t 15 feet\t\tDim light out to a range of 5 ft"+ "\n 8-11\t\t 30 feet\t\tBright light in a 5-ft radius and dim light for an additional 5 ft"+ "\n 12-15\t\t 60 feet\t\tBright light in a 10-ft radius and dim light for an additional 10 ft"+ "\n 16 or higher\t 120 feet\t\tBright light in a 15-ft radius and dim light for an additional 15 ft", weight : 3, choices : ["Intelligence 3-7", "Intelligence 8-11", "Intelligence 12-15", "Intelligence 16 or higher"], selfChoosing : function () { var iInt = Number(What("Int")); return iInt >= 16 ? "intelligence 16 or higher" : iInt >= 12 ? "intelligence 12-15" : iInt >= 8 ? "intelligence 8-11" : "intelligence 3-7"; }, "intelligence 3-7" : { name : "Psi Crystal (Int 3-7)", description : "While attuned to this orb, it glows with an inner purplish light, dim light out to a range of 5 ft. It also grants me telepathy out to a range of 15 ft. The range of telepathy and intensity of light are determined by my Intelligence score." }, "intelligence 8-11" : { name : "Psi Crystal (Int 8-11)", description : "While attuned to this orb, it glows with an inner purplish light, bright light in a 5-ft radius and dim light for an additional 5 ft. It also grants me telepathy out to a range of 30 ft. The range of telepathy and intensity of light are determined by my Intelligence score." }, "intelligence 12-15" : { name : "Psi Crystal (Int 12-15)", description : "While attuned to this orb, it glows with an inner purplish light, bright light in a 10-ft radius and dim light for an additional 10 ft. It also grants me telepathy out to a range of 60 ft. The range of telepathy and intensity of light are determined by my Intelligence score." }, "intelligence 16 or higher" : { name : "Psi Crystal (Int 16+)", description : "While attuned to this orb, it glows with an inner purplish light, bright light in a 15-ft radius and dim light for an additional 15 ft. It also grants me telepathy out to a range of 120 ft. The range of telepathy and intensity of light are determined by my Intelligence score." } }; MagicItemsList["scroll of tarrasque summoning"] = { // contains contributions by BraabHimself name : "Scroll of Tarrasque Summoning", source : [["RotF", 315]], type : "scroll", rarity : "legendary", description : "Once as an action, I can use this to cause the tarrasque to appear in an unoccupied space I can see within 1 mile. The tarrasque disappears when it drops to 0 hit points and is hostile toward all creatures other than itself.", descriptionFull : "Using an action to read the scroll causes the tarrasque (see the creature's entry in the Monster Manual) to appear in an unoccupied space you can see within 1 mile of you. The tarrasque disappears when it drops to 0 hit points and is hostile toward all creatures other than itself." }; MagicItemsList["scroll of the comet"] = { // contains contributions by BraabHimself name : "Scroll of the Comet", source : [["RotF", 315]], type : "scroll", rarity : "legendary", description : "Once as an action outdoors, I can use this to cause a comet to fall on a point I can see within 1 mile, creating a 50-ft deep, 500-ft radius crater. All creatures in the radius take 30d10 force damage and can make a DC 20 Dex save to halve this damage. It destroys all nonmagical objects and structures within the area.", descriptionFull : "By using an action to read the scroll, you cause a comet to fall from the sky and crash to the ground at a point you can see up to 1 mile away from you. You must be outdoors when you use the scroll, or nothing happens and the scroll is wasted."+ "\n The comet creates a 50-foot-deep, 500-foot-radius crater on impact. Any creature in that radius must make a DC 20 Dexterity saving throw, taking 30d10 force damage on a failed saving throw, or half as much damage on a successful one. All structures in the crater are destroyed, as are all nonmagical objects that aren't being worn or held." }; MagicItemsList["thermal cube"] = { // contains contributions by BraabHimself name : "Thermal Cube", source : [["RotF", 316]], type : "wondrous item", rarity : "common", description : "This 3-inch cube of solid brimstone generates enough dry heat to keep the temperature within 15 ft of it at 95 degrees Fahrenheit.", descriptionFull : "This 3-inch cube of solid brimstone generates enough dry heat to keep the temperature within 15 feet of it at 95 degrees Fahrenheit (35 degrees Celsius)." }; MagicItemsList["ythryn mythallar"] = { // contains contributions by BraabHimself name : "Ythryn Mythallar", source : [["RotF", 316]], type : "wondrous item", rarity : "legendary", attunement : true, prerequisite : "Requires attunement by a spellcaster", prereqeval : function(v) { return v.isSpellcaster; }, description : "This 50 ft diameter crystal ball sheds light in a 300 ft radius and dim light for an additional 300 ft. Up to 8 creatures can attune to it at one time, a 9th creature's attunement fails. All those attuned to it can sense when it is used and they all must agree to any properties being used. See Notes page.", descriptionFull : "A mythallar looks like an enormous crystal ball held in an ornate cradle. The globe sheds bright light in a 300-foot radius and dim light for an additional 300 feet. The globe draws magic from the Weave that can be harnessed for various purposes. For example, Netherese mages used mythallars to keep their cities aloft and empower their magic items. The bigger the mythallar, the more magic it can hold. The largest mythallars are 150 feet in diameter."+ "\n The Ythryn mythallar is a relatively small device\u2014a mere 50 feet in diameter. To attune to this mythallar, a creature must finish a short rest within 30 feet of it, meditating on the mythallar. Up to eight creatures can be attuned to it at one time; otherwise, the Ythryn mythallar follows the attunement rules in the Dungeon Master's Guide. If a ninth creature tries to attune to the mythallar, nothing happens."+ "\n All creatures attuned to the Ythryn mythallar can sense when the device is being used. A creature attuned to the device can use any of its properties, but only if all other creatures attuned to the device agree to allow it. The Ythryn mythallar's properties are as follows:"+ "\n \u2022 While you're on the same plane of existence as the Ythryn mythallar, you can use an action to cause it to fly in any direction you choose at a speed of 30 feet. All matter within 500 feet of the device moves with it. The Ythryn mythallar and all structures held aloft by it hover in place when not in motion."+ "\n \u2022 As an action, you can cause one magic item you are holding within 30 feet of the Ythryn mythallar to immediately regain all its expended charges or uses. A magic item recharged in this manner can't be recharged by the Ythryn mythallar again until after the item regains expended charges or uses on its own."+ "\n \u2022 You can use the Ythryn mythallar to cast the control weather spell without requiring any components and without the need for you to be outdoors. This casting of the spell has a 50-mile radius. For the duration of the spell's casting time, you must be within 30 feet of the Ythryn mythallar or the spell fails."+ "\n" + toUni("Touching the Mythallar") + ". Any creature that touches the globe of the mythallar must make a DC 22 Constitution saving throw, taking 180 (20d10 + 70) radiant damage on a failed save, or half as much damage on a successful one. Undead have disadvantage on this saving throw. Any object that touches the globe, other than an artifact or the mythallar's cradle, is disintegrated instantly (no save).", toNotesPage : [{ name : "Properties", note : [ "The Ythryn Mythallar is a 50 ft diameter crystal ball that sits on a cradle", "It has the following properties:", "\u2022 Sheds light in a 300 ft radius and dim light for an additional 300 ft", "\u2022 Up to 8 creatures can attune to it, a 9th attunement fails", "\u2022 To attune, a creature must short rest within 30 ft of it", "\u2022 All those attuned to it can sense when sense when it is being used", "\u2022 All those attuned must agree to allow any properties to be used", "\u2022 You can use an action to use the Ythryn Mythallar in the following ways:", " \u25E6 While on the same plane, give it a flying speed of 30 ft", " All matter within 500 ft of it moves with it", " The ball and all structures held aloft by it hover in place when not in motion", " \u25E6 Cause one magic item to regain all charges/uses", " I must be within 30 ft of the ball and holding the item", " It cannot be recharged again until all charges/uses are expended", " \u25E6 Cast the control weather spell without components or spell slots", " It has a radius of 50 miles and can be cast inside", " I must be within 30 ft of the ball for the casting time, or it will fail", "\nTOUCHING THE MYTHALLAR", "Any creature that touches the ball must make a DC 22 Constitution save", "On a failure, they take 20d10 + 70 radiant damage, or half that on a success", "Undead have disadvantage on this saving throw", "Objects touching the ball, except artifacts or the cradle, disintegrate instantly" ] }] }; MagicItemsList["the codicil of white"] = { name : "The Codicil of White", source : [["RotF", 317]], type : "wondrous item", rarity : "", notLegalAL : true, description : 'This volume bound in white fur, sealed with a silver lock, containing velum pages with silver edges is cold to the touch. While I have this tome in my possession, I gain resistance to cold damage. It contains the Frost Fingers spell which a wizard can learn and a poem incantation "Rime of the Frostmaiden".', descriptionFull : "The Codicil of White is a tall, thin volume bound in white ermine fur over seasoned boards of white pine and sealed with a clasp and lock of tarnished silver. The book is cold to the touch, and the fur is worn about the edges from use. The twenty-seven pages within are of vellum painted with silver gilt on the outer edges. The whole is sewn to a leather binding with strips of sinews, making it quite durable."+ "\n A creature with the codicil in its possession has resistance to cold damage."+ "\n The codicil was written by followers of Auril as a primer on her worship. The first page is a title page with the snowflake symbol of Auril on it. The remaining pages describe various priestly rituals and ceremonies in chilling detail. Nestled among these descriptions is a spell that wizards can learn (frost fingers, and a poem called \"Rime of the Frostmaiden\", see appendix E of Icewind Dale: Rime of the Frostmaiden). The poem is an incantation, the power of which can be used to split a glacier (see chapter 6 of Icewind Dale: Rime of the Frostmaiden). The poem might have other capabilities, at the DM's discretion", dmgres : ["Cold"], weight : 3 }; // Spells SpellsList["blade of disaster"] = { name : "Blade of Disaster", classes : ["sorcerer", "warlock", "wizard"], source : [["T", 106], ["RotF", 318]], level : 9, school : "Conj", time : "1 bns", range : "60 ft", components : "V,S", duration : "Conc, 1 min", description : "Create weapon; 2 spell atks 4d12 Force dmg; crit on 18+, triple dmg; bns a to move 30 ft \u0026 do 2 atks", descriptionShorter : "Create wea; 2 spell atks 4d12 Force dmg; crit 18+, triple dmg; bns a to move 30 ft \u0026 2 atks", descriptionFull : "You create a blade-shaped planar rift about 3 feet long in an unoccupied space you can see within range. The blade lasts for the duration. When you cast this spell, you can make up to two melee spell attacks with the blade, each one against a creature, loose object, or structure within 5 feet of the blade. On a hit, the target takes 4d12 force damage. This attack scores a critical hit if the number on the d20 is 18 or higher. On a critical hit, the blade deals an extra 8d12 force damage (for a total of 12d12 force damage)."+ "\n As a bonus action on your turn, you can move the blade up to 30 feet to an unoccupied space you can see and then make up to two melee spell attacks with it again."+ "\n The blade can harmlessly pass through any barrier, including a wall of force." }; SpellsList["create magen"] = { // contains contributions by BraabHimself name : "Create Magen", source : [["RotF", 318]], classes : ["wizard"], level : 7, school : "Trans", time : "1 h", range : "Touch", components : "V,S,M\u2020", compMaterial : "A vial of quicksilver worth 500 gp and a life-sized human doll, both of which the spell consumes, and an intricate crystal rod worth at least 1,500 gp that is not consumed", duration : "Instantaneous", description : "Transform doll into magen (500gp cons.); obeys me; my HP max reduced by its CR; see book (1.5k gp)", descriptionFull : "While casting the spell, you place a vial of quicksilver in the chest of a life-sized human doll stuffed with ash or dust. You then stitch up the doll and drip your blood on it. At the end of the casting, you tap the doll with a crystal rod, transforming it into a magen clothed in whatever the doll was wearing. The type of magen is chosen by you during the casting of the spell. See appendix C for different kinds of magen and their statistics."+ "\n When the magen appears, your hit point maximum decreases by an amount equal to the magen's challenge rating (minimum reduction of 1). Only a wish spell can undo this reduction to your hit point maximum."+ "\n Any magen you create with this spell obeys your commands without question." }; SpellsList["frost fingers"] = { // contains contributions by BraabHimself name : "Frost Fingers", source : [["RotF", 318]], classes : ["wizard"], level : 1, school : "Evoc", time : "1 a", range : "S:15" + (typePF ? "-" : "") + "ft cone", components : "V,S", duration : "Instantaneous", save : "Con", description : "All in area 2d8+1d8/SL Cold dmg; save halves; unattended nonmagical liquids freeze", descriptionFull : "Freezing cold blasts from your fingertips in a 15-foot cone. Each creature in that area must make a Constitution saving throw, taking 2d8 cold damage on a failed save, or half as much damage on a successful one."+ "\n The cold freezes nonmagical liquids in the area that aren't being worn or carried."+ AtHigherLevels + "When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d8 for each slot level above 1st." }; // pub_20201117-2_TCoE-sidekicks.js // This file adds the sidekick classes from Tasha's Cauldron of Everything (p142-147) to MPMB's Character Record Sheet /* - NOTICE - These sidekick classes are available as normal classes because the sheet doesn't support classes for the companion page These classes are excluded by default so that they aren't confused with normal classes The base 1/2 CR creature will have to be added manually It would be too complex and messy to add them all as racial options */ // Define the source, if it doesn't yet exist if (!SourceList.T) { SourceList.T = { name : "Tasha's Cauldron of Everything", abbreviation : "TCoE", abbreviationSpellsheet : "T", group : "Primary Sources", url : "https://dnd.wizards.com/products/tashas-cauldron-everything", date : "2020/11/17" }; } // Define some functions here, so we an use them for all sidekick classes without duplication global_TCoE_Sidekick_fn = { // prereqeval runs before any of the other class stuff is added, so we can even modify the ClassList object with it to set the HD prereqeval : function(v) { var sClass = v['class']; var sSubclass = v.subclass; var sClassOld = CurrentVars.sidekickDialogShown === undefined ? false : CurrentVars.sidekickDialogShown[0]; // If we already did this function for this (sub)class, stop now if (CurrentVars.sidekickDialogShown && CurrentVars.sidekickDialogShown[0] === sClass && (!CurrentVars.sidekickDialogShown[1] || CurrentVars.sidekickDialogShown[1] === sSubclass)) { // if no subclass was defined when previously calling this, but now there is one selected, add that to the CurrentVars if (!CurrentVars.sidekickDialogShown[1] && sSubclass) { CurrentVars.sidekickDialogShown[1] = sSubclass; SetStringifieds("vars"); } return true; } // Tell the player what is about to happen and give an option to opt-out var sClassName = ClassList[sClass].name.replace(/\(?sidekick\)?/i, '').trim(); var warningMsg = { nIcon : 3, // Status nType : 2, // Yes,No cTitle : "Creating a Sidekick Works Differently", cMsg : "You are about to create a character with a " + sClassName + " sidekick class. Sidekick classes use the rules as described in Tasha's Cauldron of Everything, page 142. As this character sheet is intended for regular, non-sidekick classes, some changes will be made that you need to be aware off:" }; var lineNo = 1; [ "A sidekick class is added to a creature of CR 1/2 or lower. Before continuing, lookup the stat block of the base creature you would like to use. You will have to manually enter its:"+ "\n \u2022 Ability scores"+ "\n \u2022 Proficiencies for: skills, saving throws, weapons, armor, languages, and tools"+ "\n \u2022 Attacks (tip: use Modifier fields for attacks that aren't weapons/cantrips)"+ "\n \u2022 Hit dice (you will be prompted to enter)", sClass.indexOf('warrior') !== -1 ? false : 'To gain either the Expert of Spellcaster sidekick class, a creature must have at least one language in its stat block that it can speak.', 'If you continue, the race and background automation will be turned off and the respective fields emptied. You can use these fields to enter the name and type of the base creature.'+ '\nFor example. when using the bandit stat block, you could enter:'+ '\n \u2022 Race: Elf'+ '\n \u2022 Background: Bandit'+ '\nYou can turn the automation back on with the "Auto/Manual" bookmark.', "Sidekicks don't use experience points, but gain levels as the average level of the group goes up. Thus, simply ignore the experience points box and change the level when needed.", "Sidekick classes can't multiclass and haven't been tested to work that way." ].forEach(function (line) { if (!line) return; warningMsg.cMsg += "\n\n" + lineNo + ". " + line; lineNo++; }); warningMsg.cMsg += "\n\n\n>>> Do you want to continue making a sidekick? <<<"; warningMsg.cMsg += "\n\nIf you select 'No', the " + v.classlevel + " level(s) of this class will be counted towards the total character level, but none of its features will be added."; if (app.alert(warningMsg) !== 4) return 'skip'; // Save that this dialog has been shown CurrentVars.sidekickDialogShown = [sClass, sSubclass]; // Remove race and background, and set them to manual global_TCoE_Sidekick_fn.manualRaceBackground(); // if the sidekick HD is already defined, delete those HD first before applying the new one if (CurrentVars.sidekickHD && sClassOld && classes.old[sClassOld]) { global_TCoE_Sidekick_fn.eval([classes.old[sClassOld].classlevel, 0], false, false, true); }; // Ask the player to enter the number and type of HD the creature has in its stat block CurrentVars.sidekickHD = AskUserOptions( "Set Base Creature Hit Dice", // title "Enter the number and type of hit dice that the chosen base creature has in its stat block (i.e. without bonuses from sidekick levels).\nThe sidekick will gain 1 extra HD for each level it gains after the first.", // top explanation ['Number of hit dice, for example "2"', 'Size of the hit dice, for example "d8"'], false, true, "Be aware that you *can't* change the *size* of the hit die (e.g. d8) at a later time. To do that, you will have to first remove the sidekick class completely.\n\nHowever, you *can* change the *number* of hit dice manually by editing the appropriate field." // bottom explanation ).map(function (n, idx) { var a = n.replace(/.*?(\d+).*/, "$1"); return !isNaN(a) ? Number(a) : idx === 0 ? 2 : 8; }); ClassList[sClass].die = CurrentVars.sidekickHD[1]; CurrentClasses[sClass].die = CurrentVars.sidekickHD[1]; SetStringifieds("vars"); }, // Change the race and background to manual or auto manualRaceBackground : function(bAuto) { if (bAuto && (CurrentVars.manual.background || CurrentVars.manual.race)) { // set to automatic if (CurrentVars.manual.background) { Value("Background", ""); SetToManual_Dialog.mBac = false; } if (CurrentVars.manual.race) { Value("Race", ""); SetToManual_Dialog.mRac = false; } SetToManual_Button(true); } else if (!bAuto) { // set to manual if (CurrentVars.manual.race || CurrentVars.manual.background || CurrentVars.manual.backgroundFeature) { // if currently already set to manual, set to auto before emptying the fields IsNotImport = false; ignorePrereqs = true; SetToManual_Dialog.mBac = false; SetToManual_Dialog.mBFe = false; SetToManual_Dialog.mRac = false; SetToManual_Button(true); IsNotImport = true; ignorePrereqs = false; }; // Remove the race and background if (CurrentRace.known) Value("Race", ""); if (CurrentBackground.known) Value("Background", ""); // Set race and background to manual SetToManual_Dialog.mRac = true; SetToManual_Dialog.mBac = true; SetToManual_Button(true); } }, // When removing a sidekick class, return some stuff to normal removeeval : function(lvl) { // This could be called after the dialog was shown for another sidekick, so check if there is actually something to do var sClass = CurrentVars.sidekickDialogShown ? CurrentVars.sidekickDialogShown[0] : false; var sSubclass = CurrentVars.sidekickDialogShown ? CurrentVars.sidekickDialogShown[1] : false; if (!sClass || !classes.known[sClass] || classes.known[sClass].level || (classes.old[sClass] && classes.old[sClass].subclass && classes.old[sClass].subclass !== sSubclass) ) return; // Remove the extra sidekickHD and delete it from the CurrentVars global_TCoE_Sidekick_fn.eval(lvl, false, false, true); delete CurrentVars.sidekickHD; delete CurrentVars.sidekickDialogShown; SetStringifieds("vars"); // Reset race and background to auto (if not already) global_TCoE_Sidekick_fn.manualRaceBackground(true); }, // After the HD has been set, we still need to enter the bonus HD, if any (this can't be done with the prereqeval) eval : function(lvl, chc, undef, bRemove) { var hd = CurrentVars.sidekickHD; var extraHD = hd[0] - 1; if (isNaN(extraHD) || extraHD < 1) return; var totalHD = bRemove ? lvl[0] : lvl[1] + extraHD; var expectedHD = bRemove ? lvl[0] + extraHD : lvl[1]; // Add the extra HD to the field for (var i = 1; i <= 3; i++) { var dieFld = "HD" + i + " Die"; var lvlFld = "HD" + i + " Level"; if (What(dieFld) == hd[1] && What(lvlFld) == expectedHD) { Value(lvlFld, totalHD); CurrentUpdates.types.push("hp"); break; } } }, calcChanges_hp : function (totalHD, HDobj) { // remove 1st level max (and change its average and fixed value to reflect this change) var hd = CurrentVars.sidekickHD[1]; var matchRegex = RegExp('(\\d+)(d' + hd + ' \\()(\\d+\\.?\\d+?)\\)'); var match = HDobj.dieStr[1] ? HDobj.dieStr[1].match(matchRegex) : false; if (!match) return; var hdAverage = hd / 2 + 0.5; var hdFixed = Math.ceil(hdAverage); HDobj.dieStr.shift(); HDobj.average += hdAverage - hd; HDobj.fixed += hdFixed - hd; HDobj.dieStr[0] = HDobj.dieStr[0].replace(matchRegex, (Number(match[1]) + 1) + match[2] + (Number(match[3]) + hdAverage) + ") [sidekicks don't get max for 1st level]"); }, spellcasting_additional : levels.map(function (n, idx) { var cantr = [2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4][idx]; var splls = [1, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9,10,10,11,11][idx]; return cantr + " cantrips \u0026 " + splls + " spells known"; }) } // Add the three classes ClassList["sidekick-expert-tcoe"] = { defaultExcluded : true, prereqeval : global_TCoE_Sidekick_fn.prereqeval, regExpSearch : /^(?=.*expert)(?=.*sidekick).*$/i, name : "Expert (sidekick)", source : [["T", 143]], primaryAbility : "Dexterity, Intelligence, or Charisma", prereqs : "Can't multiclass", improvements : levels.map(function (n) { return n < 4 ? 0 : n < 8 ? 1 : n < 10 ? 2 : n < 12 ? 3 : n < 16 ? 4 : n < 19 ? 5 : 6; }), die : CurrentVars.sidekickHD ? CurrentVars.sidekickHD[1] : 8, skillstxt : { primary : "Choose any five skills" }, armorProfs : { primary : [true, false, false, false] }, equipment : "", subclasses : ["", []], subclassGainedLevel : 100, attacks : [1], features : { "a sidekick" : { name : "A Sidekick", source : [["T", 142]], minlevel : 1, description : desc([ "A sidekick can be any creature with challenge rating of 1/2 or lower", "The Spellcaster and Expert classes can only apply to creatures that can speak a language", "Fill out the stats block into the character sheet manually, the class adds to it", "The sidekick's level is the same as the average level of the group", "The hit dice of a sidekick are the same as those of the base creature, gaining +1 per level", "A sidekick does not get the benefits of a background, nor can it take feats or multiclass" ]), calcChanges : { hp : global_TCoE_Sidekick_fn.calcChanges_hp }, eval : global_TCoE_Sidekick_fn.eval, removeeval : global_TCoE_Sidekick_fn.removeeval }, "bonus proficiencies: saving throws" : { name : "Bonus Proficiencies: Saving Throws", source : [["T", 143]], minlevel : 1, description : desc('Choose Dex, Int, or Cha save proficiency, using the "Choose Feature" button above'), choices : ["Dexterity", "Intelligence", "Charisma"], "dexterity" : { name : "Bonus Proficiencies: Dexterity Saving Throws", description : desc("I am proficient in Dexterity saving throws"), saves : ["Dex"] }, "intelligence" : { name : "Bonus Proficiencies: Intelligence Saving Throws", description : desc("I am proficient in Intelligence saving throws"), saves : ["Int"] }, "charisma" : { name : "Bonus Proficiencies: Charisma Saving Throws", description : desc("I am proficient in Charisma saving throws"), saves : ["Cha"] } }, "bonus proficiencies" : { name : "Bonus Proficiencies", source : [["T", 143]], minlevel : 1, description : desc([ "I gain proficiency with light armor and in five skills of my choice", 'If the base creature is a Humanoid or has a simple or martial weapon in its stat block,', 'select it using the "Choose Feature" button above, so I gain more bonus proficiencies' ]), choices : ["Base creature is a Humanoid or has a simple or martial weapon in its stat block", "Other base creatures"], "base creature is a humanoid or has a simple or martial weapon in its stat block" : { name : "Bonus Proficiencies: Humanoid", description : desc([ "I gain proficiency with light armor and in five skills of my choice", "Additionally, I gain proficiency with two tools of my choice and with all simple weapons" ]), weaponProfs : [true, false], toolProfs : [["Tool of my choice", 2]] }, "other base creatures" : { name : "Bonus Proficiencies: Non-humanoid", description : desc("I gain proficiency with light armor and in five skills of my choice") } }, "helpful" : { name : "Helpful", source : [["T", 143]], minlevel : 1, description : desc("I can use a bonus action to take the Help action"), action : [["bonus action", ""]] }, "cunning action" : { name : "Cunning Action", source : [["T", 143]], minlevel : 2, description : desc("I can use a bonus action to take the Dash, Disengage, or Hide action"), action : [["bonus action", ""]] }, "expertise" : function() { var a = { name : "Expertise", source : [["T", 143]], minlevel : 3, description : desc([ "I gain expertise with two skills I am proficient with", "At level 15th, I gain expertise with two more skills I am proficient with" ]), skillstxt : "Expertise with any two skill proficiencies, two more at level 15th", extraname : "Expertise", extrachoices : ["Acrobatics", "Animal Handling", "Arcana", "Athletics", "Deception", "History", "Insight", "Intimidation", "Investigation", "Medicine", "Nature", "Perception", "Performance", "Persuasion", "Religion", "Sleight of Hand", "Stealth", "Survival"], extraTimes : levels.map(function (n) { return n < 3 ? 0 : n < 15 ? 2 : 4; }) } for (var i = 0; i < a.extrachoices.length; i++) { var attr = a.extrachoices[i].toLowerCase(); a[attr] = { name : a.extrachoices[i] + " Expertise", description : "", source : a.source, skills : [[a.extrachoices[i], "only"]], prereqeval : function(v) { return v.skillProfsLC.indexOf(v.choice) === -1 ? false : v.skillExpertiseLC.indexOf(v.choice) === -1 ? true : "markButDisable"; } } } return a; }(), "ability score improvement" : { name : "Ability Score Improvement", source : [["T", 144]], minlevel : 4, description : desc([ "Increase one ability score by 2, or two ability scores by 1, up to a maximum of 20", "I gain this at 4th level and again at 8th, 10th, 12th, 16th, and 19th level" ]), additional : levels.map(function (n) { return n < 4 ? "" : (n < 8 ? 1 : n < 10 ? 2 : n < 12 ? 3 : n < 16 ? 4 : n < 19 ? 5 : 6) + "\xD7 2 points increase"; }) }, "coordinated strike" : { name : "Coordinated Strike", source : [["T", 144]], minlevel : 6, description : desc([ "I can use Helpful to aid an ally to attack a creature up to 30 ft away from me", "If I do so, I add +2d6 damage on my next attack to that creature in the current turn" ]) }, "evasion" : { name : "Evasion", source : [["T", 144]], minlevel : 7, description : desc([ "If an effect allows me to make a Dex save for half damage, I take no damage on a success", "Also, I only take half damage on a failed save; I can't do this while incapacitated" ]), savetxt : { text : ["Dex save vs. area effects: fail \u2015 half dmg, success \u2015 no dmg"] } }, "inspiring help" : { name : "Inspiring Help", source : [["T", 144]], minlevel : 11, description : desc([ "When I use the Help action, the creature that receives the help adds +1d6 to its d20 roll", "If it was an attack roll that hits without the +1d6, it can add it to the damage instead", "At 20th level, this bonus increases to 2d6" ]), additional : levels.map(function (n) { return n < 11 ? "" : "+" + (n < 20 ? 1 : 2) + "d6 bonus"; }) }, "reliable talent" : { name : "Reliable Talent", source : [["T", 144]], minlevel : 14, description : desc("If I make an ability check where I add my proficiency bonus, rolls of 9 or lower are 10") }, "sharp mind" : { name : "Sharp Mind", source : [["T", 144]], minlevel : 18, description : desc('Choose Int, Wis, or Cha save proficiency, using the "Choose Feature" button above'), choices : ["Intelligence", "Wisdom", "Charisma"], "intelligence" : { name : "Sharp Mind: Intelligence", description : desc("I gain proficiency in Intelligence saving throws"), saves : ["Int"], prereqeval : function(v) { return tDoc.getField("Int ST Prof").isBoxChecked(0) ? false : true; } }, "wisdom" : { name : "Sharp Mind: Wisdom", description : desc("I gain proficiency in Wisdom saving throws"), saves : ["Wis"], prereqeval : function(v) { return tDoc.getField("Wis ST Prof").isBoxChecked(0) ? false : true; } }, "charisma" : { name : "Sharp Mind: Charisma", description : desc("I gain proficiency in Charisma saving throws"), saves : ["Cha"], prereqeval : function(v) { return tDoc.getField("Cha ST Prof").isBoxChecked(0) ? false : true; } } } } } ClassList["sidekick-spellcaster-tcoe"] = { defaultExcluded : true, prereqeval : global_TCoE_Sidekick_fn.prereqeval, regExpSearch : /^(?=.*(spellcaster|mage|healer|prodigy))(?=.*sidekick).*$/i, name : "Spellcaster (sidekick)", source : [["T", 144]], primaryAbility : "Intelligence, Wisdom, or Charisma", prereqs : "Can't multiclass", improvements : levels.map(function (n) { return n < 4 ? 0 : n < 8 ? 1 : n < 12 ? 2 : n < 16 ? 3 : n < 18 ? 4 : 5; }), die : CurrentVars.sidekickHD ? CurrentVars.sidekickHD[1] : 8, skillstxt : { primary : "Choose two from Arcana, History, Insight, Investigation, Medicine, Performance, Persuasion, and Religion" }, armorProfs : { primary : [true, false, false, false] }, equipment : "", subclasses : ["Spellcaster's Role", []], subclassGainedLevel : 100, attacks : [1], abilitySave : 4, spellcastingFactor : 2, spellcastingTable : ClassList.artificer && ClassList.artificer.spellcastingTable ? ClassList.artificer.spellcastingTable : [[0, 0, 0, 0, 0, 0, 0, 0, 0]].concat(levels.map(function (n) { return defaultSpellTable[Math.ceil(n / 2)]; })), spellcastingList : { "class" : "wizard", level : [0, 5] }, spellcastingKnown : { cantrips : [2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4], spells : [1, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9,10,10,11,11] }, features : { "a sidekick" : { name : "A Sidekick", source : [["T", 142]], minlevel : 1, description : desc([ "A sidekick can be any creature with challenge rating of 1/2 or lower", "The Spellcaster and Expert classes can only apply to creatures that can speak a language", "Fill out the stats block into the character sheet manually, the class adds to it", "The sidekick's level is the same as the average level of the group", "The hit dice of a sidekick are the same as those of the base creature, gaining +1 per level", "A sidekick does not get the benefits of a background, nor can it take feats or multiclass" ]), calcChanges : { hp : global_TCoE_Sidekick_fn.calcChanges_hp }, eval : global_TCoE_Sidekick_fn.eval, removeeval : global_TCoE_Sidekick_fn.removeeval }, "bonus proficiencies: saving throws" : { name : "Bonus Proficiencies: Saving Throws", source : [["T", 144]], minlevel : 1, description : desc('Choose Int, Wis, or Cha save proficiency, using the "Choose Feature" button above'), choices : ["Intelligence", "Wisdom", "Charisma"], "intelligence" : { name : "Bonus Proficiencies: Intelligence Saving Throws", description : desc("I am proficient in Intelligence saving throws"), saves : ["Int"] }, "wisdom" : { name : "Bonus Proficiencies: Wisdom Saving Throws", description : desc("I am proficient in Wisdom saving throws"), saves : ["Wis"] }, "charisma" : { name : "Bonus Proficiencies: Charisma Saving Throws", description : desc("I am proficient in Charisma saving throws"), saves : ["Cha"] } }, "bonus proficiencies" : { name : "Bonus Proficiencies", source : [["T", 144]], minlevel : 1, description : desc([ "I gain proficiency with light armor and two skills of my choice from the following list:", "Arcana, History, Insight, Investigation, Medicine, Performance, Persuasion, and Religion", 'If the base creature is a Humanoid or has a simple or martial weapon in its stat block,', 'select it using the "Choose Feature" button above, so I gain more bonus proficiencies' ]), choices : ["Base creature is a Humanoid or has a simple or martial weapon in its stat block", "Other base creatures"], "base creature is a humanoid or has a simple or martial weapon in its stat block" : { name : "Bonus Proficiencies: Humanoid", description : desc([ "I gain proficiency with light armor and two skills of my choice from the following list:", "Arcana, History, Insight, Investigation, Medicine, Performance, Persuasion, and Religion", "Additionally, I gain proficiency with all simple weapons" ]), weaponProfs : [true, false] }, "other base creatures" : { name : "Bonus Proficiencies: Non-humanoid", description : desc([ "I gain proficiency with light armor and two skills of my choice from the following list:", "Arcana, History, Insight, Investigation, Medicine, Performance, Persuasion, and Religion" ]) } }, "subclassfeature1" : { name : "Spellcaster's Role", source : [["T", 144]], minlevel : 1, description : desc('Choose the role of the sidekick, mage, healer, or prodigy, and put it in the "Class" field') }, "ability score improvement" : { name : "Ability Score Improvement", source : [["T", 146]], minlevel : 4, description : desc([ "Increase one ability score by 2, or two ability scores by 1, up to a maximum of 20", "I gain this at 4th level and again at 8th, 12th, 16th, and 18th level" ]), additional : levels.map(function (n) { return n < 4 ? "" : (n < 8 ? 1 : n < 12 ? 2 : n < 16 ? 3 : n < 18 ? 4 : 5) + "\xD7 2 points increase"; }) }, "potent cantrips" : { name : "Potent Cantrips", source : [["T", 146]], minlevel : 6, description : desc("I add my spellcasting ability modifier to the damage I deal with any cantrip"), calcChanges : { atkCalc : [ function (fields, v, output) { var subclass = classes.known["sidekick-spellcaster-tcoe"].subclass; if (!subclass || !ClassSubList[subclass].abilitySave) return; var spAbiMod = Number(What(AbilityScores.abbreviations[ClassSubList[subclass].abilitySave - 1] + ' Mod')); if (spAbiMod > 0 && v.thisWeapon[3] && SpellsList[v.thisWeapon[3]].level === 0) { output.extraDmg += spAbiMod; }; }, "My cantrips get my spellcasting ability modifier added to their damage." ], spellAdd : [ function (spellKey, spellObj, spName) { var subclass = classes.known["sidekick-spellcaster-tcoe"].subclass; if (!subclass || !ClassSubList[subclass].abilitySave || spellObj.psionic || spellObj.level !== 0) return; var spAbi = AbilityScores.abbreviations[ClassSubList[subclass].abilitySave - 1]; var spAbiMod = Number(What(spAbi + ' Mod')); if (spAbiMod < 1) return; return genericSpellDmgEdit(spellKey, spellObj, "\\w+\\.?", spAbi); }, "My cantrips get my spellcasting ability modifier added to their damage." ] } }, "empowered spells" : { name : "Empowered Spells", source : [["T", 146]], minlevel : 14, description : desc([ 'Select one of the eight schools of magic using the "Choose Feature" button above', "Whenever I cast a spell from the selected school by expending a spell slot, I empower it", "I add my spellcasting ability modifier to the damage or healing I roll for that spell" ]), calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { var subclass = classes.known["sidekick-spellcaster-tcoe"].subclass; var spSchool = GetFeatureChoice("classes", "sidekick-spellcaster-tcoe", "empowered spells"); if (!subclass || !ClassSubList[subclass].abilitySave || !spSchool || spellObj.psionic || !spellObj.level) return; for (var aSchl in spellSchoolList) { if (spellSchoolList[aSchl] == spSchool) { spSchool = aSchl; break; } } if (spellObj.school !== spSchool) return; var spAbi = AbilityScores.abbreviations[ClassSubList[subclass].abilitySave - 1]; var spAbiMod = Number(What(spAbi + ' Mod')); if (spAbiMod < 1) return; if (genericSpellDmgEdit(spellKey, spellObj, "\\w+\\.?", spAbiMod, true, true) || genericSpellDmgEdit(spellKey, spellObj, "heal", spAbiMod, true, true)) { return true; } }, "Spells from my selected school cast by expending a spell slot get my spellcasting ability modifier added to their damage or healing rolls." ] }, choices : ["Abjuration", "Conjuration", "Divination", "Enchantment", "Evocation", "Illusion", "Necromancy", "Transmutation"], "abjuration" : { name : "Empowered Abjurations", description : desc([ "Whenever I cast an abjuration spell by expending a spell slot, I can empower its effect", "I then add my spellcasting ability modifier to the damage or healing I roll for that spell" ]) }, "conjuration" : { name : "Empowered Conjurations", description : desc([ "Whenever I cast a conjuration spell by expending a spell slot, I can empower its effect", "I then add my spellcasting ability modifier to the damage or healing I roll for that spell" ]) }, "divination" : { name : "Empowered Divinations", description : desc([ "Whenever I cast a divination spell by expending a spell slot, I can empower its effect", "I then add my spellcasting ability modifier to the damage or healing I roll for that spell" ]) }, "enchantment" : { name : "Empowered Enchantments", description : desc([ "Whenever I cast a enchantment spell by expending a spell slot, I can empower its effect", "I then add my spellcasting ability modifier to the damage or healing I roll for that spell" ]) }, "evocation" : { name : "Empowered Evocations", description : desc([ "Whenever I cast a evocation spell by expending a spell slot, I can empower its effect", "I then add my spellcasting ability modifier to the damage or healing I roll for that spell" ]) }, "illusion" : { name : "Empowered Illusions", description : desc([ "Whenever I cast an illusion spell by expending a spell slot, I can empower its effect", "I then add my spellcasting ability modifier to the damage or healing I roll for that spell" ]) }, "necromancy" : { name : "Empowered Necromancy", description : desc([ "Whenever I cast a necromancy spell by expending a spell slot, I can empower its effect", "I then add my spellcasting ability modifier to the damage or healing I roll for that spell" ]) }, "transmutation" : { name : "Empowered Transmutations", description : desc([ "Whenever I cast a transmutation spell by expending a spell slot, I can empower its effect", "I then add my spellcasting ability modifier to the damage or healing I roll for that spell" ]) } }, "focused casting" : { name : "Focused Casting", source : [["T", 146]], minlevel : 20, description : desc("Taking damage can't break my concentration on a spell") } } } ClassList["sidekick-warrior-tcoe"] = { defaultExcluded : true, prereqeval : global_TCoE_Sidekick_fn.prereqeval, regExpSearch : /^(?=.*warrior)(?=.*sidekick).*$/i, name : "Warrior (sidekick)", source : [["T", 146]], primaryAbility : "Strength, Dexterity, or Constitution", prereqs : "Can't multiclass", improvements : levels.map(function (n) { return n < 4 ? 0 : n < 8 ? 1 : n < 12 ? 2 : n < 14 ? 3 : n < 16 ? 4 : n < 19 ? 5 : 6; }), die : CurrentVars.sidekickHD ? CurrentVars.sidekickHD[1] : 8, skillstxt : { primary : "Choose two from Acrobatics, Animal Handling, Athletics, Intimidation, Nature, Perception, and Survival" }, armorProfs : { primary : [true, true, true, false] }, equipment : "", subclasses : ["", []], subclassGainedLevel : 100, attacks : [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3], features : { "a sidekick" : { name : "A Sidekick", source : [["T", 142]], minlevel : 1, description : desc([ "A sidekick can be any creature with challenge rating of 1/2 or lower", "Fill out the stats block into the character sheet manually, the class adds to it", "The sidekick's level is the same as the average level of the group", "The hit dice of a sidekick are the same as those of the base creature, gaining +1 per level", "A sidekick does not get the benefits of a background, nor can it take feats or multiclass" ]), calcChanges : { hp : global_TCoE_Sidekick_fn.calcChanges_hp }, eval : global_TCoE_Sidekick_fn.eval, removeeval : global_TCoE_Sidekick_fn.removeeval }, "bonus proficiencies: saving throws" : { name : "Bonus Proficiencies: Saving Throws", source : [["T", 146]], minlevel : 1, description : desc('Choose Str, Dex, or Con save proficiency, using the "Choose Feature" button above'), choices : ["Strength", "Dexterity", "Constitution"], "strength" : { name : "Bonus Proficiencies: Strength Saving Throws", description : desc("I am proficient in Strength saving throws"), saves : ["Str"] }, "dexterity" : { name : "Bonus Proficiencies: Dexterity Saving Throws", description : desc("I am proficient in Dexterity saving throws"), saves : ["Dex"] }, "constitution" : { name : "Bonus Proficiencies: Constitution Saving Throws", description : desc("I am proficient in Constitution saving throws"), saves : ["Con"] } }, "bonus proficiencies" : { name : "Bonus Proficiencies", source : [["T", 146]], minlevel : 1, description : desc([ "I gain proficiency with all armor and two skills of my choice from the following list:", "Acrobatics, Animal Handling, Athletics, Intimidation, Nature, Perception, and Survival", 'If the base creature is a Humanoid or has a simple or martial weapon in its stat block,', 'select it using the "Choose Feature" button above, so I gain more bonus proficiencies' ]), choices : ["Base creature is a Humanoid or has a simple or martial weapon in its stat block", "Other base creatures"], "base creature is a humanoid or has a simple or martial weapon in its stat block" : { name : "Bonus Proficiencies: Humanoid", description : desc([ "I gain proficiency with all armor and two skills of my choice from the following list:", "Acrobatics, Animal Handling, Athletics, Intimidation, Nature, Perception, and Survival", "Additionally, I gain proficiency with shields and all simple and martial weapons" ]), armorProfs : [false, false, false, true], weaponProfs : [true, true] }, "other base creatures" : { name : "Bonus Proficiencies: Non-humanoid", description : desc([ "I gain proficiency with all armor and two skills of my choice from the following list:", "Acrobatics, Animal Handling, Athletics, Intimidation, Nature, Perception, and Survival" ]) } }, "martial role" : { name : "Martial Role", source : [["T", 146]], minlevel : 1, description : desc('Choose a Martial Role for the warrior using the "Choose Feature" button above'), choices : ["Attacker", "Defender"], "attacker" : { name : "Martial Role: Attacker", description : desc("I gain a +2 bonus to all my attack rolls"), calcChanges : { atkCalc : [ function (fields, v, output) { if (!v.isDC) output.extraHit += 2; }, "I add a +2 bonus on the To Hit of all my attack rolls." ] } }, "defender" : { name : "Martial Role: Defender", description : desc([ "As a reaction, I can give disadv. on an attack made vs. someone within 5 ft of me", "I need to be able to see the attacker to do this" ]), action : [["reaction", ""]] } }, "second wind" : { name : "Second Wind", source : [["T", 146]], minlevel : 2, description : desc([ "As a bonus action, I can regain hit points equal to 1d10 + warrior level", "I can use this once per short rest (twice at 20th-level)" ]), additional : levels.map(function (n) { return "1d10+" + n; }), usages : levels.map(function (n) { return n < 2 ? "" : n < 20 ? 1 : 2 }), recovery : "short rest", action : [["bonus action", ""]] }, "improved critical" : { name : "Improved Critical", source : [["T", 146]], minlevel : 3, description : desc("I score a critical hit with my weapon attacks on a roll of 19 and 20"), calcChanges : { atkAdd : [ function (fields, v) { if (!v.isDC && !v.isSpell && !v.CritChance && classes.known["sidekick-warrior"]) { fields.Description += (fields.Description ? '; ' : '') + 'Crit on 19-20'; v.CritChance = 19; }; }, "My weapon attacks score a critical on a to hit roll of both 19 and 20.", 19 ] } }, "ability score improvement" : { name : "Ability Score Improvement", source : [["T", 146]], minlevel : 4, description : desc([ "Increase one ability score by 2, or two ability scores by 1, up to a maximum of 20", "I gain this at 4th level and again at 8th, 12th, 14th, 16th, and 19th level" ]), additional : levels.map(function (n) { return n < 4 ? "" : (n < 8 ? 1 : n < 12 ? 2 : n < 14 ? 3 : n < 16 ? 4 : n < 19 ? 5 : 6) + "\xD7 2 points increase"; }) }, "extra attack" : { name : "Extra Attack", source : [["T", 147]], minlevel : 6, description : desc([ "I can attack twice, instead of once, whenever I take the Attack action on my turn", "This increases to three at 15th level", "If I have the Multiattack action, I can use either that or extra attack on a turn, not both" ]), additional : levels.map(function (n) { return n < 6 ? "" : (n < 15 ? 1 : 3) + " attacks as an action on my turn"; }) }, "battle readiness" : { name : "Battle Readiness", source : [["T", 147]], minlevel : 7, description : desc("I have advantage on my Initiative rolls"), advantages : [["Initiative", true]] }, "improved defense" : { name : "Improved Defense", source : [["T", 147]], minlevel : 10, description : desc("I gain a +1 bonus to AC"), extraAC : { mod : 1 } }, "indomitable" : { name : "Indomitable", source : [["T", 147]], minlevel : 11, description : desc([ "I can reroll a failed saving throw, but must keep the new result", "I can use this once per long rest (twice at 20th-level)" ]), usages : levels.map(function (n) { return n < 11 ? "" : n < 20 ? 1 : 2 }), recovery : "long rest" } } } // Add three subclasses to the spellcaster sidekick AddSubClass("sidekick-spellcaster-tcoe", "mage", { regExpSearch : /^(?=.*mage)(?=.*sidekick).*$/i, subname : "Mage", fullname : "Spellcaster: Mage (sidekick)", source : [["T", 144]], abilitySave : 4, spellcastingList : { "class" : "wizard", level : [0, 5] }, features : { "subclassfeature1" : { name : "Spellcasting", source : [["T", 144]], minlevel : 1, description : desc([ "I can cast wizard cantrips/spells I know, using Intelligence as my spellcasting ability", "I can use an arcane focus as a spellcasting focus for my spells", "Whenever I gain a level, I can replace one cantrip/spell I know with another I'm allowed" ]), additional : global_TCoE_Sidekick_fn.spellcasting_additional } } }); AddSubClass("sidekick-spellcaster-tcoe", "healer", { regExpSearch : /^(?=.*healer)(?=.*sidekick).*$/i, subname : "Healer", fullname : "Spellcaster: Healer (sidekick)", source : [["T", 144]], abilitySave : 5, spellcastingList : { "class" : ["cleric", "druid"], level : [0, 5] }, features : { "subclassfeature1" : { name : "Spellcasting", source : [["T", 144]], minlevel : 1, description : desc([ "I can cast cleric and druid cantrips/spells I know, using Wisdom as my spellcasting ability", "I can use a holy symbol or druidic focus as a spellcasting focus for my spells", "Whenever I gain a level, I can replace one cantrip/spell I know with another I'm allowed" ]), additional : global_TCoE_Sidekick_fn.spellcasting_additional } } }); AddSubClass("sidekick-spellcaster-tcoe", "prodigy", { regExpSearch : /^(?=.*prodigy)(?=.*sidekick).*$/i, subname : "Prodigy", fullname : "Spellcaster: Prodigy (sidekick)", source : [["T", 144]], abilitySave : 6, spellcastingList : { "class" : ["bard", "warlock"], level : [0, 5] }, features : { "subclassfeature1" : { name : "Spellcasting", source : [["T", 144]], minlevel : 1, description : desc([ "I can cast bard and warlock cantrips/spells I know, using Cha as my spellcasting ability", "I can use an arcane focus or musical instrument as a spellcasting focus for my spells", "Whenever I gain a level, I can replace one cantrip/spell I know with another I'm allowed" ]), additional : global_TCoE_Sidekick_fn.spellcasting_additional } } }); // pub_20201117_TCoE.js // This file adds the content from Tasha's Cauldron of Everything to MPMB's Character Record Sheet /* ACKNOWLEDGEMENTS This file contains contributions from many different people over on the /r/mpmb subreddit and the MPMB Discord server. Many contributions have been reworked by Safety-Orange to fix bugs, make texts more uniform, adhere to MPMB's standards, and/or adhere to the latest syntax version. Combined with the fact that many contributions haven't been individually tracked (on GitHub), it is no longer possible to assign specific additions to a single person. Instead, here is a list of people (account names on GitHub) who made contributions, helped collect materials, or were otherwise essential to this script coming to fruition, in no particular order: - Nod_Hero#2046 (Discord) - Smashman - Metacomet10 - BraabHimself - AelarTheElfRogue - uhohspaghetti0 - Undrhil - easyboy - SoggieWafflz - phelot - Cosaur - remcovandalen - Seneschal55 - Gam90 - CountVladmir - alastairmarchant - edimshuffling - githubtkompare - Holynight6 - lizrdgizrd Think you're missing from this list? Please let me know! */ // Define the source SourceList.T = { name : "Tasha's Cauldron of Everything", abbreviation : "TCoE", abbreviationSpellsheet : "T", group : "Primary Sources", url : "https://dnd.wizards.com/products/tashas-cauldron-everything", date : "2020/11/17" }; // Add Custom Lineage RaceList["custom lineage"] = { regExpSearch : /^(?=.*custom)(?=.*lineage).*$/i, name : "Custom lineage", source : [["T", 8]], plural : "Custom lineages", size : [3, 4], speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", 1], scorestxt : "+2 to one ability score of my choice", eval : function() { AddString('Feat Note 1', 'Custom lineage bonus feat', '; '); }, removeeval : function() { RemoveString('Feat Note 1', 'Custom lineage bonus feat'); }, trait : "Custom Lineage (+2 to one ability score of my choice)" + desc([ "Size: I am Small or Medium (my choice).", "Feat: I gain one feat of my choice for which I qualify.", "Variable Trait: I gain either darkvision with a range of 60 ft or proficiency with a skill of my choice. Use the Racial Options button to select either one." ]) }; AddRacialVariant("custom lineage", "darkvision", { regExpSearch : /darkvision/i, source : [["T", 8]], vision : [["Darkvision", 60]], trait : "Custom Lineage (+2 to one ability score of my choice)" + desc([ "Size: I am Small or Medium (my choice).", "Feat: I gain one feat of my choice for which I qualify.", "Variable Trait: I have darkvision with a range of 60 ft." ]) }); AddRacialVariant("custom lineage", "skill proficiency", { regExpSearch : /skill proficiency/i, source : [["T", 8]], skillstxt : "Choose any one skill", trait : "Custom Lineage (+2 to one ability score of my choice)" + desc([ "Size: I am Small or Medium (my choice).", "Feat: I gain one feat of my choice for which I qualify.", "Variable Trait: I have proficiency with a skill of my choice." ]) }); // >>>>>>>>>>>>>>>>>>>>>>> // // >>> Artificer Class >>> // // >>>>>>>>>>>>>>>>>>>>>>> // // New Artificer Infusions AddFeatureChoice(ClassList.artificer.features["infuse item"], true, "Arcane Propulsion Armor (prereq: level 14 artificer)", { name : "Arcane Propulsion Armor", source : [["T", 20]], description : desc([ "The armor replaces any missing limbs of the wearer and can't be removed against its will", "It increases the wearer's walking speed by 5 ft; Its gauntlet can be used as melee weapons" ]), additional : "suit of armor; requires attunement", prereqeval : function(v) { return classes.known.artificer.level >= 14; }, magicitemsAdd : ["Arcane Propulsion Armor"] }); MagicItemsList["arcane propulsion armor"] = { name : "Arcane Propulsion Armor", nameTest : /arcane.propulsion.*armou?r/i, source : [["T", 20]], type : "armor (light, medium, or heavy)", descriptionFull : "The wearer of this armor gains these benefits:\n \u2022 The wearer's walking speed increases by 5 feet.\n \u2022 The armor includes gauntlets, each of which is a magic melee weapon that can be wielded only when the hand is holding nothing. The wearer is proficient with the gauntlets, and each one deals 1d8 force damage on a hit and has the thrown property, with a normal range of 20 feet and a long range of 60 feet. When thrown, the gauntlet detaches and flies at the attack's target, then immediately returns to the wearer and reattaches.\n \u2022 The armor can't be removed against the wearer's will.\n \u2022 If the wearer is missing any limbs, the armor replaces those limbs\u2014hands, arms, feet, legs, or similar appendages. The replacements function identically to the body parts they replace.", description : "This armor replaces any missing limbs, increases my walking speed by 5 ft, and can't be removed against my will. I can use either empty-handed gauntlet as a proficient melee weapon with the thrown property. After a throwing attack with a gauntlet, it returns and reattaches immediately.", attunement : true, chooseGear : { type : "armor", prefixOrSuffix : ["between", "Arcane Propulsion", "Armor"], descriptionChange : ["prefix", "armor"], itemName1stPage : ["suffix", "Arcane Propulsion"] }, speed : { walk : { spd : "+5", enc : "+5" } }, weaponOptions : [{ regExpSearch : /^(?=.*arcane)(?=.*propulsion)(?=.*gauntlet).*$/i, name : "Arcane Propulsion Gauntlets", source : [["T", 20]], ability : 1, type : "AlwaysProf", damage : [1, 8, "force"], range : "Melee, 20/60 ft", description : "Thrown; Returns immediately after thrown", abilitytodamage : true, selectNow : true }] } AddFeatureChoice(ClassList.artificer.features["infuse item"], true, "Armor of Magical Strength", { name : "Armor of Magical Strength", source : [["T", 20]], description : desc([ "The armor has 6 charges, regaining 1d6 expended charges daily at dawn", "As a reaction when being knocked prone, the wearer can use 1 charge to not be prone", "When making a Str check/save, the wearer can use 1 charge to add its Int mod to the roll" ]), additional : "suit of armor; requires attunement", magicitemsAdd : ["Armor of Magical Strength"] }); MagicItemsList["armor of magical strength"] = { name : "Armor of Magical Strength", nameTest : "of Magical Strength", source : [["T", 20]], type : "armor (light, medium, or heavy)", descriptionFull : "This armor has 6 charges. The wearer can expend the armor's charges in the following ways:\n \u2022 When the wearer makes a Strength check or a Strength saving throw, it can expend 1 charge to add a bonus to the roll equal to its Intelligence modifier.\n \u2022 If the creature would be knocked prone, it can use its reaction to expend 1 charge to avoid being knocked prone.\nThe armor regains 1d6 expended charges daily at dawn.", description : "This armor has 6 charges and regains 1d6 expended charges daily at dawn. As a reaction when I would be knocked prone, I can expend 1 charge to avoid being knocked prone. When I make a Strength check or Strength saving throw, I can expend 1 charge to add my Intelligence modifier to the roll.", attunement : true, action : [["reaction", ""]], chooseGear : { type : "armor", prefixOrSuffix : "prefix" }, usages : 6, recovery : "dawn", additional : "regains 1d6" }; AddFeatureChoice(ClassList.artificer.features["infuse item"], true, "Helm of Awareness (prereq: level 10 artificer)", { name : "Helm of Awareness", source : [["T", 21], ["UA:SP3", 3]], description: desc("The wearer has advantage on Initiative rolls and can't be surprised while not incapacitated"), additional : "helmet; requires attunement", prereqeval : function(v) { return classes.known.artificer.level >= 10; }, magicitemsAdd : ["Helm of Awareness"] }); MagicItemsList["helm of awareness"] = { name : "Helm of Awareness", source : [["T", 21], ["UA:SP3", 3]], type : "wondrous item", description : "While wearing this helmet, I have advantage on initiative rolls. In addition, I can't be surprised, provided I'm not incapacitated.", descriptionFull : "While wearing this helmet, a creature has advantage on initiative rolls. In addition, the wearer can't be surprised, provided it isn't incapacitated.", attunement : true, advantages : [["Initiative", true]], savetxt : { immune : ["surprised"] } }; AddFeatureChoice(ClassList.artificer.features["infuse item"], true, "Mind Sharpener", { name : "Mind Sharpener", source : [["T", 22]], description: desc("The wearer can use its reaction to ignore a failed Con save to maintain concentration"), additional : "suit of armor or robes", magicitemsAdd : ["Mind Sharpener"] }); MagicItemsList["mind sharpener"] = { name : "Mind Sharpener", source : [["T", 22]], descriptionFull : "The infused item can send a jolt to the wearer to refocus their mind. The item has 4 charges. When the wearer fails a Constitution saving throw to maintain concentration on a spell, the wearer can use its reaction to expend 1 of the item's charges to succeed instead. The item regains 1d4 expended charges daily at dawn.", description : "This magic armor or robes can send a jolt to refocus my mind. It has 4 charges and regains 1d4 expended charges daily at dawn. As a reaction when I fail a Constitution saving throw to maintain concentration on a spell, I can expend 1 charge to succeed instead.", action : [["reaction", ""]], usages : 4, recovery : "dawn", additional : "regains 1d4", choices : ["Mind Sharpener Armor", "Mind Sharpener Robes"], choicesNotInMenu : true, "mind sharpener armor" : { name : "Mind\u200A Sharpener", type : "armor (light, medium, or heavy)", description : "This magic armor can send a jolt to refocus my mind. It has 4 charges and regains 1d4 expended charges daily at dawn. As a reaction when I fail a Constitution saving throw to maintain concentration on a spell, I can expend 1 charge to succeed instead.", chooseGear : { type : "armor", prefixOrSuffix : "brackets", itemName1stPage : ["suffix", "Mind Sharpener"], descriptionChange : ["prefix", "armor"] } }, "mind sharpener robes" : { name : "Mind Sharpener (Robes)", type : "wondrous item", description : "These magic robes can send a jolt to refocus my mind. It has 4 charges and regains 1d4 expended charges daily at dawn. As a reaction when I fail a Constitution saving throw to maintain concentration on a spell, I can expend 1 charge to succeed instead." } }; AddFeatureChoice(ClassList.artificer.features["infuse item"], true, "Spell-Refueling Ring (prereq: level 6 artificer)", { name : "Spell-Refueling Ring", source : [["T", 23]], description: desc("As an action once per dawn, this ring's wearer can recover one 3rd-level or lower spell slot"), additional : "ring; requires attunement", prereqeval : function(v) { return classes.known.artificer.level >= 6; }, magicitemsAdd : ["Spell-Refueling Ring"] }); MagicItemsList["spell-refueling ring"] = { name : "Spell-Refueling Ring", source : [["T", 23]], type : "ring", descriptionFull : "While wearing this ring, the creature can recover one expended spell slot as an action. The recovered slot can be of 3rd level or lower. Once used, the ring can't be used again until the next dawn.", description : "As an action, I can activate this magic ring to recover one expended spell slot. The recovered slot can be of 3rd level or lower. Once used, the ring can't be used again until the next dawn.", attunement : true, action : [["action", ""]], usages : 1, recovery : "dawn" }; // Add the Armorer specialism (but after all other scripts, so that all armour options are present) RunFunctionAtEnd(function () { var TCoE_Artificer_Subclass_Armorer = AddSubClass("artificer", "armorer", { regExpSearch : /^(?=.*armou?rer)(?!.*wizard).*$/i, subname : "Armorer", fullname : "Armorer", source : [["T", 15]], attacks : [1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], features : { "subclassfeature3" : { name : "Tools of the Trade", source : [["T", 15]], minlevel : 3, description : " [proficient with heavy armor \u0026 smith's tools]", toolProfs : ["Smith's tools"], armorProfs : [false, false, true, false], spellcastingExtra : ["magic missile", "thunderwave", "mirror image", "shatter", "hypnotic pattern", "lightning bolt", "fire shield", "greater invisibility", "passwall", "wall of force"] }, "subclassfeature3.1" : { name : "Arcane Armor", source : [["T", 15]], minlevel : 3, description : " [reverts back if I die or don another armor]" + desc([ "As an action, I can use smith's tool to turn an armor I'm wearing into arcane armor", "As an action, I can don or doff it; As a bonus action, I can deploy or retract its helmet", "It can't be removed against my will, covers all my limbs, and even replaces missing limbs", "I ignore the Strength requirement of arcane armor and can use it as a spellcasting focus" ]), action : [["action", " (create/don/doff)"], ["bonus action", " (retract/deploy helmet)"]] }, "subclassfeature3.2" : { name : "Armor Model", source : [["T", 16]], minlevel : 3, description : desc([ "When I finish a rest, I can use smith's tools to change the model of my arcane armor", 'Select a model using the "Choose Feature" button; See "Notes" page for features of each' ]), additional : "also see notes page", toNotesPage : [{ name : "Arcane Armor Model Features", note : desc([ "I can customize my arcane armor to the guardian or infiltrator model whenever I finish a short or long rest, provided I have smith's tools in hand.", "Each model includes a special weapon. When I attack with that weapon, I can use my Intelligence modifier, instead of Strength or Dexterity, for the attack and damage rolls." ]) }, { name : "Guardian Arcane Armor", popupName : "Guardian Arcane Armor Features", note : desc([ "\u2022 Thunder Gauntlets: Each of the armor's gauntlets counts as a simple melee weapon while I'm not holding anything in it, and it deals 1d8 thunder damage on a hit. A creature hit by the gauntlet has disadvantage on attack rolls against targets other than me until the start of me next turn, as the armor magically emits a distracting pulse when the creature attacks someone else.", "\u2022 Defensive Field: As a bonus action, I can gain temporary hit points equal to my artificer level, replacing any temporary hit points I already have. I lose these temporary hit points if I doff the armor. I can use this bonus action a number of times equal to my proficiency bonus, and I regain all expended uses when I finish a long rest." ]), amendTo : "Arcane Armor Model Features" }, { name : "Infiltrator Arcane Armor", popupName : "Infiltrator Arcane Armor Features", note : desc([ "\u2022 Lightning Launcher: A gemlike node on one of the armored fists or on the chest (my choice) counts as a simple ranged weapon, with a normal range of 90 ft and a long range of 300 ft. It deals 1d6 lightning damage on a hit. Once on each of my turns when I hit a creature with it, I can deal an extra 1d6 lightning damage to that target.", "\u2022 Powered Steps: My walking speed increases by 5 feet.", "\u2022 Dampening Field: I have advantage on Dexterity (Stealth) checks. If the armor normally imposes disadvantage on such checks, the advantage and disadvantage cancel each other, as normal." ]), amendTo : "Arcane Armor Model Features" }], choices : [], choiceDependencies : [{ feature : "subclassfeature15", choiceAttribute : true }], weaponOptions : [{ regExpSearch : /^(?=.*thunder)(?=.*gauntlet).*$/i, name : "Thunder Gauntlets", source : [["T", 16]], ability : 4, type : "Simple", damage : [1, 8, "thunder"], range : "Melee", description : "Target hit disadv. on attacks vs. others than me until my next turn starts", abilitytodamage : true, monkweapon : true }, { regExpSearch : /^(?=.*lightning)(?=.*launcher).*$/i, name : "Lightning Launcher", source : [["T", 16]], ability : 4, type : "Simple", damage : [1, 6, "lightning"], range : "90/300 ft", description : "Once per turn on hit, +1d6 lightning damage", abilitytodamage : true }], // Do this in the parent object, so that it is always visible and people printing the sheet can more easily switch between the two models // Also, the armor model can be changed on a short rest, but the limited feature only resets on a long rest, so shouldn't be removed action : [["bonus action", "Defensive Field (Guardian Model)"]], extraLimitedFeatures : [{ name : "Defensive Field (Guardian Model)", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }] }, "subclassfeature9" : { name : "Armor Modifications", source : [["T", 17]], minlevel : 9, description : desc([ "Arcane armor now counts as armor, boots, helmet, and a weapon for holding infusions", "Each can hold one infusion; The infusions remain when I change the armor's model" ]), additional : "+2 infused items if" + (typePF ? "" : " used") + " on arcane armor", }, "subclassfeature15" : { name : "Perfected Armor", source : [["T", 17]], minlevel : 15, description : desc([ 'My armor gets additional features, based on the model; Use "Choose Feature" to select it', "The guardian gets the ability to pull a creature closer as a reaction and make an attack", "The infiltrator gets an upgrade to its lightning launcher weapon attack" ]), toNotesPage : [{ name : "Guardian Perfected Armor Features", note : desc([ "Tinkering with my armor's energy system leads me to discover a powerful pulling force.", "As a reaction when a Huge or smaller creature I can see ends its turn within 30 ft of me, I can magically force the creature to make a Strength saving throw against my spell save DC, pulling the creature up to 30 ft toward me to an unoccupied space. If I pull the target to a space within 5 ft of me, I can make a melee weapon attack against it as part of this reaction.", "I can use this reaction a number of times equal to my proficiency bonus. I regain all expended uses of it when I finish a long rest." ]), amendTo : "Arcane Armor Model Features" }, { name : "Infiltrator Perfected Armor Features", note : desc([ "Any creature that takes lightning damage from my Lightning Launcher glimmers with magical light until the start of my next turn.", "The glimmering creature sheds dim light in a 5-ft radius, and it has disadvantage on attack rolls against me, as the light jolts it if it attacks me. In addition, the next attack roll against it has advantage, and if that attack hits, the target takes an extra 1d6 lightning damage." ]), amendTo : "Arcane Armor Model Features" }], "guardian" : { name : "Perfected Armor: Guardian", additional: "Proficiency Bonus per long rest", description : desc([ "As a reaction when a creature I can see ends its turn in 30 ft, I have it make a Str save", "If it is Huge or smaller and fails, I pull it up to 30 ft towards me to an unoccupied space", "If I pull it within 5 ft, I can make a melee weapon attack vs. it as part of this reaction" ]) }, "infiltrator" : { name : "Perfected Armor: Infiltrator", description : desc([ "Those hit by my lightning launcher shed 5-ft radius dim light until my next turn starts", "The light gives the target disadvantage on attacks rolls made against me", "Also, the next attack against it has advantage and deals an extra 1d6 lightning damage" ]) }, // Do these in the parent object, so that they are always visible and people printing the sheet can more easily switch between the two models // Also, the armor model can be changed on a short rest, but the limited feature only resets on a long rest, so shouldn't be removed action : [["reaction", "Perfected Armor: Guardian"]], extraLimitedFeatures : [{ name : "Perfected Armor: Guardian", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }] } } }); var itsFea = ClassSubList[TCoE_Artificer_Subclass_Armorer].features["subclassfeature3.2"]; var guardianTxt = desc([ "Both fists are Thunder Gauntlets, simple melee weapons that distract those hit by it", "As a bonus action, I can activate a defensive shield to gain my artificer level in temp HP" ]) var guardianAdditional = levels.map(function (n) { return n + " temp HP, Prof B. per long rest"; }) var infiltratorTxt = desc([ "+5 ft walking speed; Gemlike node in fist/chest is a ranged weapon, Lightning Launcher", "It gives me advantage on Dexterity (Stealth) checks" ]) var prereqFunc = function(v) { var sParsed = ParseArmor(v.choice.replace(/(Guardian|Infiltrator) arcane /i, '')); return sParsed && testSource(sParsed, ArmourList[sParsed], "armorExcl") ? "skip" : true; }; for (var armor in ArmourList) { var anArm = ArmourList[armor]; if (anArm.isMagicArmor || !anArm.weight || (CurrentVars.extraArmour && CurrentVars.extraArmour[armor])) continue; // Add the Guardian variant of the armor var gArmName = "Guardian Arcane " + anArm.name; itsFea[gArmName.toLowerCase()] = { name : (typePF ? "Armor " : "") + "Model: Guardian " + anArm.name, submenu : "Guardian Arcane Armor", description : guardianTxt, additional : guardianAdditional, armorAdd : { select : gArmName, options : [gArmName] }, weaponsAdd : { select : ["Thunder Gauntlets"] }, prereqeval : prereqFunc, dependentChoices : "guardian" } // And now add the Infiltrator variant of the armor var iArmName = "Infiltrator Arcane " + anArm.name; itsFea[iArmName.toLowerCase()] = { name : "Armor Model: Infiltrator " + anArm.name, submenu : "Infiltrator Arcane Armor", description : infiltratorTxt + (anArm.stealthdis ? ", cancelling out the disadv. it imposes" : ""), speed : { walk : {spd : "+5", enc : "+5" } }, armorAdd : { select : iArmName, options : [iArmName] }, weaponsAdd : { select : ["Lightning Launcher"] }, prereqeval : prereqFunc, advantages : [["Stealth", true]], dependentChoices : "infiltrator" } // Lastly push both choices to the array itsFea.choices.push(gArmName, iArmName); } }); // >>>>>>>>>>>>>>>>>>>>>>>>> // // >>> Barbarian Options >>> // // >>>>>>>>>>>>>>>>>>>>>>>>> // // Barbarian Optional Class Features AddFeatureChoice(ClassList.barbarian.features["danger sense"], true, "Primal Knowledge", { name : "Primal Knowledge", extraname : "Optional Barbarian 3", source : [["T", 24]], description : desc([ "At 3rd level and again at 10th level I gain proficiency with one skill of my choice", "I can choose from Animal Handling, Athletics, Intimidation, Nature, Perception, Survival" ]), skillstxt : "Choose one from Animal Handling, Athletics, Intimidation, Nature, Perception and Survival.\nChoose another from this list at 10th level", prereqeval : function (v) { return classes.known.barbarian.level >= 3 ? true : "skip"; } }, "Optional 3rd-level barbarian features"); AddFeatureChoice(ClassList.barbarian.features["feral instinct"], true, "Instinctive Pounce", { name : "Instinctive Pounce", extraname : "Optional Barbarian 7", source : [["T", 24]], description : desc([ "As part of the bonus action I use to enter rage, I can move up to half my speed" ]), action : [["bonus action", "Rage (start & half move / end)", "Rage (start/end)"]] }, "Optional 7th-level barbarian features"); // Barbarian Subclasses AddSubClass("barbarian", "path of the beast", { regExpSearch : /^(?=.*\bbeast\b)(?=.*(warrior|marauder|barbarian|viking|(norse|tribes?|clans?)(wo)?m(a|e)n)).*$/i, subname : "Path of the Beast", subnameShort: "Beast", source : [["T", 24]], abilitySave : 3, features : { "subclassfeature3" : { name : "Form of the Beast", source : [["T", 24]], minlevel : 3, description : desc([ "When I enter my rage, I can transform to gain a bite, tail, or claws attack for that rage", "On a hit with the bite attack once on each of my turns, I can heal my Prof Bonus in HP", "This only works if I have less than half my hit points when I hit with this bite attack", "With the claws I can make one extra attack when I attack with it in my Attack action", "As a reaction with the tail when I'm hit, I can add 1d8 to my AC for that attack", "This only works if the hit is from an attack roll made a creature I can see within 30 ft" ]), weaponOptions : [{ regExpSearch : /^(?=.*(bestial|beast))(?=.*bite).*$/i, name : "Bestial Bite", source : [["T", 24]], ability : 1, type : "Natural", damage : [1, 8, "piercing"], range : "Melee", description : "Only in rage; On a hit once on my turn, regain Prof Bonus in HP (if below 1/2 HP)", abilitytodamage : true, bestialNaturalWeapon : true, selectNow : true }, { regExpSearch : /^(?=.*(bestial|beast))(?=.*claws?).*$/i, name : "Bestial Claws", source : [["T", 24]], ability : 1, type : "Natural", damage : [1, 6, "slashing"], range : "Melee", description : "Only in rage; Extra attack if used as part of Attack action", abilitytodamage : true, bestialNaturalWeapon : true, selectNow : true }, { regExpSearch : /^(?=.*(bestial|beast))(?=.*tail).*$/i, name : "Bestial Tail", source : [["T", 25]], ability : 1, type : "Natural", damage : [1, 8, "piercing"], range : "Melee", description : "Reach; Only in rage", abilitytodamage : true, bestialNaturalWeapon : true, selectNow : true }], additional : levels.map(function(n) { return n < 6 ? "" : "chosen weapon counts as magical"; }), action : [["reaction", "Bestial Tail"]] }, "subclassfeature6" : { name : "Bestial Soul", source : [["T", 25]], minlevel : 6, description : desc([ "When I finish a short rest, I can choose one of the following benefits until my next rest:", " \u2022 Swimming speed equal to my walking speed and I can breathe underwater", " \u2022 Climb speed (same as walking) and no check to climb difficult surfaces or upside down", " \u2022 Once per turn when I jump, I can extend it by the result of an Athletics check in feet" ]), calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.bestialNaturalWeapon && !v.thisWeapon[1] && !v.theWea.isMagicWeapon && !(/counts as( a)? magical/i).test(fields.Description)) { fields.Description += (fields.Description ? '; ' : '') + 'Counts as magical'; }; }, "The natural melee weapon that I gain from Form of the Beast count as magical for the purpose of overcoming resistance and immunity to nonmagical attacks and damage." ] } }, "subclassfeature10" : { name : "Infectious Fury", source : [["T", 25]], minlevel : 10, description : desc([ "In rage, when I hit a creature with my natural weapon, I can have it make a Wis save", "If it fails (DC 8 + my Prof Bonus + my Con mod) it suffers one effect of my choice:", " \u2022 It uses its reaction to make a melee attack against one creature I can see of my choice", " \u2022 It takes 2d12 psychic damage" ]), usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature14" : { name : "Call the Hunt", source : [["T", 25]], minlevel : 14, description : desc([ "When I enter rage, I can choose my Con mod of willing creatures I can see within 30 ft", "Once on each of their turns, if they hit an attack, they can have it deal +1d6 damage", "This lasts as long as I rage; I gain 5 temporary HP per creature that accepts this benefit" ]), usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" } } }); AddSubClass("barbarian", "path of wild magic", { regExpSearch : /^(?=.*\bwild\b)(?=.*\bmagic\b).*$/i, subname : "Path of Wild Magic", subnameShort: "Wild Magic", source : [["T", 25]], abilitySave : 3, features : { "subclassfeature3" : { name : "Magic Awareness", source : [["T", 25]], minlevel : 3, description : desc([ "As an action, I can open my awareness to the presence of concentrated magic", "Until my next turn ends, I know the location of any spell or magic item within 60 ft", "I also learn the school of magic of a spell; This doesn't reveal anything behind total cover" ]), usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus')", recovery : "long rest", action : [["action", ""]] }, "subclassfeature3.1" : { name : "Wild Surge", source : [["T", 25]], minlevel : 3, description: desc("Whenever I enter my rage, I roll on the Wild Magic table (see Notes page)"), toNotesPage : [{ name : "Wild Magic Table", source : [["T", 26]], note : [ "The magical energy roiling inside me sometimes erupts from me. Whenever I enter my rage, I have to roll on the table below to see what happens.", "If the effect calls for a saving throw, the DC is equal to 8 + my proficiency bonus + my Constitution modifier.\n", "d8\tEFFECT", " 1\tShadowy tendrils lash around me. Each creature of my choice that I can see within 30 ft of me must succeed on a Constitution saving throw or take 1d12 necrotic damage. I also gain 1d12 temporary hit points.", " 2\tI teleport up to 30 ft to an unoccupied space I can see. Until my rage ends, I can use this effect again on each of my turns as a bonus action.", " 3\tAn intangible spirit, which looks like a flumph or a pixie (my choice), appears within 5 ft of one creature of my choice that I can see within 30 ft of me. At the end of the current turn, the spirit explodes, and each creature within 5 ft of it must succeed on a Dexterity saving throw or take 1d6 force damage. Until my rage ends, I can use this effect again, summoning another spirit, on each of my turns as a bonus action.", " 4\tMagic infuses one weapon of my choice that I am holding. Until my rage ends, the weapon's damage type changes to force, and it gains the light and thrown properties, with a normal range of 20 ft and a long range of 60 ft. If the weapon leaves my hand, the weapon reappears in my hand at the end of the current turn.", " 5\tWhenever a creature hits me with an attack roll before my rage ends, that creature takes 1d6 force damage, as magic lashes out in retribution.", " 6\tUntil my rage ends, I am surrounded by multicolored, protective lights; I gain a +1 bonus to AC, and while within 10 ft of me, my allies gain the same bonus.", " 7\tFlowers and vines temporarily grow around me; until my rage ends, the ground within 15 ft of me is difficult terrain for my enemies.", " 8\tA bolt of light shoots from my chest. Another creature of my choice that I can see within 30 ft of me must succeed on a Constitution saving throw or take 1d6 radiant damage and be blinded until the start of my next turn. Until my rage ends, I can use this effect again on each of my turns as a bonus action." ] }] }, "subclassfeature6" : { name : "Bolstering Magic", source : [["T", 26]], minlevel : 6, description : desc([ "As an action, I can touch a creature or myself and confer one of the following benefits:", " \u2022 For 10 minutes, they can add 1d3 to any attack roll and ability check", " \u2022 Roll 1d3. They regain an expended spell slot of a level equal to or lower than the roll", "A creature that receives the second benefit can't receive it again until after a long rest" ]), usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus')", recovery : "long rest", action : [["action", ""]] }, "subclassfeature10" : { name : "Unstable Backlash", source : [["T", 26]], minlevel : 10, description : desc([ "As a reaction in rage when taking damage or failing a save, I can lash out with magic", "I roll on the Wild Magic table and immediately apply the roll, replacing my current effect" ]), action : [["reaction", " (in rage on damage/save fail)"]] }, "subclassfeature14" : { name : "Controlled Surge", source : [["T", 26]], minlevel : 14, description : desc([ "Whenever I roll on the Wild Magic table, I can roll two dice and choose which to use", "If I roll the same on both dice, I can instead choose any effect on the Wild Magic table" ]) } } }); // >>>>>>>>>>>>>>>>>>>> // // >>> Bard Options >>> // // >>>>>>>>>>>>>>>>>>>> // // Bard Optional Class Features AddFeatureChoice(ClassList.bard.features.spellcasting, true, "Additional Bard Spells", { name : "Additional Bard Spells", source : [["T", 27]], extraname : "Optional Bard 1", description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "bard" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["color spray", "command", "aid", "enlarge/reduce", "mirror image", "mass healing word", "slow", "phantasmal killer", "rary's telepathic bond", "heroes' feast", "prismatic spray", "antipathy/sympathy", "prismatic wall"]); }, "This optional class feature expands the spell list of the bard class with the following spells (spell level in brackets): Color Spray (1), Command (1), Aid (2), Enlarge/Reduce (2), Mirror Image (2), Mass Healing Word (3), Slow (3), Phantasmal Killer (4), Rary's Telepathic Bond (5), Heroes' Feast (6), Prismatic Spray (7), Antipathy/Sympathy (8), and Prismatic Wall (9)." ] } }, "Optional 1st-level bard features"); AddFeatureChoice(ClassList.bard.features["jack of all trades"], true, "Magical Inspiration", { name : "Magical Inspiration", extraname : "Optional Bard 2", source : [["T", 27]], description : desc([ "A bardic inspiration die recipient can also use it when casting a damaging or healing spell", "They can expend the die and add it to healing or damage dealt to one target of the spell" ]) }, "Optional 2nd-level bard features"); AddFeatureChoice(ClassList.bard.features["song of rest"], true, "Bardic Versatility", { name : "Bardic Versatility", extraname : "Optional Bard 4", source : [["T", 28]], description : " [ASI = Ability Score Improvement]" + desc([ "Whenever I gain an ASI from the bard class, I can change one cantrip or expertise choice", "I can select another cantrip from the bard spell list or another skill I'm proficient with" ]), prereqeval : function (v) { return classes.known.bard.level >= 4 ? true : "skip"; } }, "Optional 4th-level bard features"); // Bard Subclasses AddSubClass("bard", "college of creation", { regExpSearch : /^(?=.*(college|bard|minstrel|troubadour|jongleur))(?=.*creation).*$/i, subname : "College of Creation", subnameShort: "Creation", source : [["T", 28]], features : { "subclassfeature3" : { name : "Mote of Potential", source : [["T", 28]], minlevel : 3, description : desc([ "Those who use my Bardic Inspiration die gain an extra bonus depending how they use it:", "\u2022 Ability check: Roll the die twice and choose which result to use", "\u2022 Attack roll: the target and others of my choice I can see in 5 ft must make a Con save", " If failed, they take the die roll in thunder damage; This uses my spell save DC", "\u2022 Saving throw: Grants temporary HP equal to the roll + my Cha mod (min 1 temp HP)" ]) }, "subclassfeature3.1" : { name : "Performance of Creation", source : [["T", 28]], minlevel : 3, description : levels.map(function (n) { if (n < 14) { var descr = [ "As an action, I create " + (n < 6 ? "a Medium" : "one Large") + " or smaller nonmagical item in an empty space in 10 ft", "It can't be worth more than " + (20 * n) + " gp; It lasts for my Proficiency Bonus in hours", "I can't have multiple, creating more makes the first one vanish", "I can do this once per long rest, or by expending a 2nd-level or higher spell slot (SS 2+)" ]; } else { var descr = [ "As an action, I create my Charisma mod of nonmagical items in an empty space in 10 ft", "One can be Huge, the rest Small or smaller; They last for my Proficiency Bonus in hours", "I can't have more than my Cha mod; If I create more, I get to choose which vanish", "I can do this once per long rest, or by expending a 2nd-level or higher spell slot (SS 2+)" ]; } return desc(descr); }), action : [["action", ""]], usages : 1, recovery : "long rest", altResource : "SS 2+" }, "subclassfeature6" : { name : "Animating Performance", source : [["T", 29]], minlevel : 6, description : desc([ "As an action, I can animate a Large or smaller nonmagical item I can see within 30 ft", "It is friendly and obeys my commands; It lasts for 1 hour, until it has 0 HP, or I die", "Unless I use a bonus action to command it, it only takes the Dodge action on its turn", "It can take reactions and move on its turn without commands; I can't have multiple", "When I use bardic inspiration, I can command the item as part of the same bonus action", 'It acts on my initiative, after me; See "Dancing Item" on a companion page for its stats', "I can do this once per long rest, or by expending a 3rd-level or higher spell slot (SS 3+)" ]), action : [["action", ""], ["bonus action", "Command Dancing Item"]], usages : 1, recovery : "long rest", altResource : "SS 3+", creaturesAdd : [["Dancing Item"]], creatureOptions : [{ name : "Dancing Item", source : [["T", 29]], size : 4, type : "Construct", alignment : "", ac : 16, hp : 25, hd : [], speed : "fly 30 ft (hover)", scores : [18, 14, 16, 4, 10, 6], damage_immunities : "poison, psychic", condition_immunities : "charmed, exhaustion, poisoned, frightened", passivePerception : 10, senses : "Darkvision 60 ft", languages : "understands the languages of its creator but can't speak", challengeRating : "1/2", proficiencyBonus : 2, proficiencyBonusLinked : true, attacksAction : 1, attacks : [{ name : "Force-Empowered Slam", ability : 6, damage : [1, 10, "force"], range : "Melee (5 ft)", modifiers : ["", "Prof"], abilitytodamage : false, useSpellMod : "bard" }], features : [{ name : "Variable Size", description : "The item animated can be Large or smaller." }, { name : "Creator", description : "The item obeys the commands of its creator and has the same proficiency bonus. It takes its turn immediately after its creator, on the same initiative count. It can move and take reactions on its own, but only takes the Dodge action on its turn unless its creator takes a bonus action to command it to take another action. If its creator is incapacitated, it can take any action, not just Dodge." }], actions : [{ name : "Immutable Form", description : "The item is immune to any spell or effect that would alter its form." }, { name : "Irrepressible Dance", description : "When any creature starts its turn within 10 ft of the item, the item can increase or decrease (its creator's choice) the walking speed of that creature by 10 ft until the end of the turn, provided the item isn't incapacitated." }], header : 'Animated', calcChanges : { hp : function (totalHD, HDobj, prefix) { if (!classes.known.bard) return; var brdLvl = classes.known.bard.level; var brdLvl5 = 5 * brdLvl; HDobj.alt.push(10 + brdLvl5); HDobj.altStr.push(" = 10 as a base\n + 5 \xD7 " + brdLvl + " from five times its creator's bard level (" + brdLvl5 + ")"); }, setAltHp : true } }] }, "subclassfeature14" : { name : "Creative Crescendo", source : [["T", 29]], minlevel : 14, description : " [enhances Performance of Creation]" } } }); // >>>>>>>>>>>>>>>>>>>>>> // // >>> Cleric Options >>> // // >>>>>>>>>>>>>>>>>>>>>> // // Cleric Optional Class Features AddFeatureChoice(ClassList.cleric.features.spellcasting, true, "Additional Cleric Spells", { name : "Additional Cleric Spells", extraname : "Optional Cleric 1", source : [["T", 30]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "cleric" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["aura of vitality", "aura of life", "aura of purity", "sunbeam", "sunburst", "power word heal"]); }, "This optional class feature expands the spell list of the cleric class with the following spells (spell level in brackets): Aura of Vitality (3), Aura of Life (4), Aura of Purity (4), Sunbeam (6), Sunburst (8), and Power Word Heal (9)." ] } }, "Optional 1st-level cleric features"); AddFeatureChoice(ClassList.cleric.features["channel divinity"], true, "Harness Divine Power", { name : "Channel Divinity: Harness Divine Power", extraname : "Optional Cleric 2", source : [["T", 30]], description : desc([ "As a bonus action, I can expend a use of my channel divinity to regain one used spell slot", "The level of this spell slot can be no more than half my Proficiency Bonus (rounded up)", "I can only do this so many times per long rest, even if I have uses of channel divinity left" ]), action : [["bonus action", ""]], usages : levels.map(function(n) { return n < 3 ? "" : n < 6 ? 1 : n < 18 ? 2 : 3; }), recovery : "long rest" }, "Optional 2nd-level cleric features"); AddFeatureChoice(ClassList.cleric.features["turn undead"], true, "Cantrip Versatility", { name : "Cantrip Versatility", extraname : "Optional Cleric 4", source : [["T", 31]], description : " [ASI = Ability Score Improvement]\n Whenever I gain an ASI from the cleric class, I can change one cleric cantrip for another", prereqeval : function (v) { return classes.known.cleric.level >= 4 ? true : "skip"; } }, "Optional 4th-level cleric features"); // Cleric subclass alternative feature, so only run this after we are sure all subclasses have been added RunFunctionAtEnd(function() { for (var i = 0; i < ClassList.cleric.subclasses[1].length; i++) { var domain = ClassList.cleric.subclasses[1][i]; var objDomain = ClassSubList[domain]; if (!objDomain || !objDomain.features.subclassfeature8 || !(/divine strike|potent spellcasting/i).test(objDomain.features.subclassfeature8.name)) continue; CreateClassFeatureVariant(domain, "subclassfeature8", "Blessed Strikes", { name : "Blessed Strikes", source : [["T", 31]], description : desc([ "When my weapon attack or cantrip damages a creature, I can do +1d8 radiant damage", "Once I deal this extra damage, I can't do so again until the start of my next turn" ]), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && (v.isWeapon || (v.thisWeapon[3] && SpellsList[v.thisWeapon[3]].level === 0)) && /\d/.test(fields.Damage_Die)) { fields.Description += (fields.Description ? '; ' : '') + 'Once per round +1d8 radiant damage'; } }, "Once per round, when a creature takes damage from one of my spell or weapon attacks, I can also deal 1d8 radiant damage to the target." ] } }); } }); // Cleric Subclasses AddSubClass("cleric", "peace domain", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*peace).*$/i, subname : "Peace Domain", source : [["T", 32]], spellcastingExtra : ["heroism", "sanctuary", "aid", "warding bond", "beacon of hope", "sending", "aura of purity", "otiluke's resilient sphere", "greater restoration", "rary's telepathic bond"], features : { "subclassfeature1" : { name : "Emboldening Bond", source : [["T", 33]], minlevel : 1, description : levels.map(function (n) { return desc([ "As an action, I can magically bond my Prof Bonus of willing creatures I can see in 30 ft", "I can be one of the bonded creatures; The bond lasts for 10 min or until I use this again", "While within " + (n < 17 ? 30 : 60) + " ft of another, a bonded target can add +1d4 to a save, attack, or check", "Each creature can add the +1d4 only once per turn" ]); }), action : [["action", ""]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature1.1" : { name : "Implement of Peace", description : desc("I gain proficiency in the Insight, Performance, or Persuasion skill (my choice)"), skillstxt : "Choose one from: Insight, Performance, or Persuasion" }, "subclassfeature2" : { name : "Channel Divinity: Balm of Peace", source : [["T", 33]], minlevel : 2, description : desc([ "As an action, I can move up to my speed without provoking opportunity attacks", "During this move, I can heal each creature that I come within 5 ft of once", "I restore a number of hit points equal to 2d6 + my Wisdom modifier (minimum 1 HP)" ]), action : [["action", ""]] }, "subclassfeature6" : { name : "Protective Bond", source : [["T", 33]], minlevel : 6, description : desc([ "My Emboldening Bond now also helps those bonded to protect each other if within range", "When one is about to take damage, another bonded can use its reaction to teleport closer", "They teleport to an empty space within 5 ft of the first and take all the damage instead", "From 17th-level, they count as having resistance for this damage, thus take only half" ]), additional : levels.map(function (n) { return n < 6 ? "" : "the bonded must be within " + (n < 17 ? 30 : 60) + " ft"; }) }, "subclassfeature8" : { name : "Potent Spellcasting", source : [["T", 33]], minlevel : 8, description : desc("I add my Wisdom modifier to the damage I deal with my cleric cantrips"), calcChanges : GenericClassFeatures["potent spellcasting"].calcChanges }, "subclassfeature17" : { name : "Expansive Bond", source : [["T", 33]], minlevel : 17, description : desc([ "Emboldening and Protective Bond work when the bonded are within 60 ft of each other", "Protective Bond now also grants resistance when used to take damage for another" ]) } } }); AddSubClass("cleric", "twilight domain", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*(twilight|transition)).*$/i, subname : "Twilight Domain", subnameShort: "Twilight", source : [["T", 34]], spellcastingExtra : ["faerie fire", "sleep", "moonbeam", "see invisibility", "aura of vitality", "leomund's tiny hut", "aura of life", "greater invisibility", "circle of power", "mislead"], features : { "subclassfeature1" : { name : "Bonus Proficiency", source : [["T", 34]], minlevel : 1, description: desc("I gain proficiency with martial weapons and heavy armor"), armorProfs : [false, false, true, false], weaponProfs : [false, true] }, "subclassfeature1.1" : { name : "Eyes of Night", source : [["T", 34]], minlevel : 1, description : desc([ "I gain darkvision out to a range of 300 ft; As an action, I can grant others this as well", "I can grant it for 1 hour to my Wis mod (min 1) of willing targets I can see within 10 ft", "I can do this once per long rest, or by expending a spell slot (SS 1+)" ]), action : [["action", " (grant others)"]], vision : [["Darkvision", 300]], additional : "grant others", usages : 1, recovery : "long rest", altResource : "SS 1+" }, "subclassfeature1.2" : { name : "Vigilant Blessing", source : [["T", 35]], minlevel : 1, description : desc([ "As an action, I can grant myself or a creature I touch adv. on the next initiative roll", "This benefit ends immediately after the roll or when I use this feature again" ]), action : [["action", ""]] }, "subclassfeature2" : { name : "Channel Divinity: Twilight Sanctuary", source : [["T", 35]], minlevel : 2, description : desc([ "As an action, I can use my holy symbol to create a 30-ft radius sphere around myself", "It moves with me, is filled with dim light, and lasts for 1 min or until I'm incapacitated", "When a creature, including me, ends its turn inside the sphere, I can grant it a benefit:", " \u2022 I grant it temporary hit points equal to 1d6 + my cleric level", " \u2022 I end one effect on it causing it to be charmed or frightened", "From 17th-level onwards, me and my allies have half cover while inside the sphere" ]), action : [["action", ""]], additional : levels.map(function(n) { return n < 2 ? "" : "1d6 + " + n + " temp HP"; }), }, "subclassfeature6" : { name : "Steps of Night", source : [["T", 35]], minlevel : 6, description : desc([ "As a bonus action when I'm in dim light or darkness, I can magically grant myself flight", "I gain a flying speed equal to my walking speed for 1 minute" ]), action : [["bonus action", ""]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature8" : { name : "Divine Strike", source : [["T", 35]], minlevel : 8, description: desc("Once per turn, when I hit a creature with a weapon attack, I can do extra damage"), additional : levels.map(function (n) { if (n < 8) return ""; return "+" + (n < 14 ? 1 : 2) + "d8 radiant damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && v.isWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.cleric.level < 14 ? 1 : 2) + 'd8 radiant damage'; } }, "Once per turn, I can have one of my weapon attacks that hit do extra radiant damage." ] } }, "subclassfeature17" : { name : "Twilight Shroud", source : [["T", 35]], minlevel : 17, description : desc([ "Me and my allies have half cover while in the sphere created by my Twilight Sanctuary" ]) } } }); // >>>>>>>>>>>>>>>>>>>>> // // >>> Druid Options >>> // // >>>>>>>>>>>>>>>>>>>>> // // Druid Optional Class Features AddFeatureChoice(ClassList.druid.features.spellcasting, true, "Additional Druid Spells", { name : "Additional Druid Spells", extraname : "Optional Druid 1", source : [["T", 35]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "druid" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["protection from evil and good", "augury", "continual flame", "enlarge/reduce", "aura of vitality", "elemental weapon", "revivify", "divination", "fire shield", "cone of cold", "flesh to stone", "symbol", "incendiary cloud"]); }, "This optional class feature expands the spell list of the druid class with the following spells (spell level in brackets): Protection from Evil and Good (1), Augury (2), Continual Flame (2), Enlarge/Reduce (2), Aura of Vitality (3), Elemental Weapon (3), Revivify (3), Divination (4), Fire Shield (4), Cone of Cold (5), Flesh to Stone (6), Symbol (7), and Incendiary Cloud (8)." ] } }, "Optional 1st-level druid features"); var TCoE_Wild_Companion = { name : "Wild Companion", extraname : "Optional Druid 2", source : [["T", 35], ["UA:CFV", 4]], description : desc([ "I can expend a use of wild shape to cast Find Familiar without material components", "The familiar always has the Fey type and disappears after half my druid level in hours" ]), additional : levels.map(function (n) { return n < 2 ? "" : Math.floor(n/2) + " hours"; }), spellcastingBonus : [{ name : "Wild Companion", spells : ["find familiar"], selection : ["find familiar"], firstCol : "Sp" }], spellChanges : { "find familiar" : { components : "V,S", compMaterial : "", description : "Gain the services of a fey familiar; can see through its eyes; it can deliver touch spells; see B", duration : "\u00BD druid lvl h", changes : "By using my Wild Companion class feature, I can expend a use of wild shape to cast Find Familiar without material components. The familiar created this way always has the Fey type and disappears after a number of hours equal to half my druid level." } } } AddFeatureChoice(ClassList.druid.features["subclassfeature2.wild shape"], true, "Wild Companion", TCoE_Wild_Companion, "Optional 2nd-level druid features"); if (ClassSubList["druid-circle of the moon"]) { AddFeatureChoice(ClassSubList["druid-circle of the moon"].features["subclassfeature2.wild shape"], true, "Wild Companion", TCoE_Wild_Companion, "Optional 2nd-level druid features"); } AddFeatureChoice(ClassList.druid.features.druidic, true, "Cantrip Versatility", { name : "Cantrip Versatility", extraname : "Optional Druid 4", source : [["T", 35]], description : " [ASI = Ability Score Improvement]\n Whenever I gain an ASI from the druid class, I can change one druid cantrip for another", prereqeval : function (v) { return classes.known.druid.level >= 4 ? true : "skip"; } }, "Optional 4th-level druid features"); // Druid Subclasses AddSubClass("druid", "circle of the stars", { regExpSearch : /^(?=.*(druid|shaman))(?=.*circle)(?=.*stars).*$/i, subname : "Circle of the Stars", subnameShort: "Stars", source : [["T", 38]], features : { "subclassfeature2" : { name : "Star Map", source : [["T", 38]], minlevel : 2, description : desc([ "I've created a star map, a Tiny object which I can use as my spellcasting focus", "If I lose it, I can perform a 1-hour ceremony during a rest to create a replacement", "While holding it, I know the Guidance cantrip and always have Guiding Bolt prepared", "These count as druid spells, but do not count against the number of spells I can prepare", "I can cast Guiding Bolt without expending a spell slot my Proficiency Bonus per long rest" ]), spellcastingBonus : [{ name : "Star Map", spells : ["guidance"], selection : ["guidance"], }, { name : "Star Map", spells : ["guiding bolt"], selection : ["guiding bolt"], firstCol : "oncelr" }], additional : "Guiding Bolt", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature2.1" : { name : "Starry Form", source : [["T", 38]], minlevel : 2, description : desc([ "As a bonus action, I can expend a use of wild shape to take on a starry form for 10 min", "In that form I shed bright light in a 10-ft radius and dim light for an extra 10-ft radius", "When I do so, I choose one constellation that glimmers on my body, granting me benefits", 'See the 3rd page "Notes" section for the benefits of the possible constellations', ]), weaponOptions : [{ regExpSearch : /^(?=.*luminous)(?=.*arrow).*$/i, name : "Luminous Arrow", source : [["T", 38]], ability : 5, type : "Spell", damage : [1, 8, "radiant"], range : "60 ft", description : "Use as bonus action", abilitytodamage : true, useSpellMod : "druid", luminousarrow : true, selectNow : true }], extraname : "Starry Form", "archer constellation" : { name : "Archer Constellation", source : [["T", 38]], description : desc([ "As a bonus action, I can make a ranged spell attack to hurl a luminous arrow 60 ft", "I can also do this as part of the bonus action I use to assume the starry form" ]), additional : levels.map(function (n) { return n < 2 ? "" : (n < 10 ? 1 : 2) + "d8 + Wisdom modifier radiant damage"; }), action : [["bonus action", " (Luminous Arrow)"]] }, "chalice constellation" : { name : "Chalice Constellation", source : [["T", 39]], description : desc([ "When I cast a healing spell with a spell slot, I can heal myself or another within 30 ft of me" ]), additional : levels.map(function (n) { return n < 2 ? "" : (n < 10 ? 1 : 2) + "d8 + Wisdom modifier hit points restored"; }) }, "dragon constellation" : { name : "Dragon Constellation", source : [["T", 39]], description : desc([ "I can treat a roll below 10 as a 10 for Int/Wis checks and saves to maintain concentration", "From 10th-level onwards, I also gain a flying speed of 20 ft and can hover" ]) }, autoSelectExtrachoices : [{ extrachoice : "archer constellation" }, { extrachoice : "chalice constellation" }, { extrachoice : "dragon constellation" }] }, "subclassfeature6" : { name : "Cosmic Omen", source : [["T", 39]], minlevel : 6, description : desc([ "When I finish a long rest, I roll a die to gain an omen based on the result (odd/even)", "As a reaction when a creature I can see in 30 ft makes an attack, check, or save, I can:", " \u2022 Weal (even): add 1d6 to the number rolled for the attack, check, or save", " \u2022 Woe (odd): subtract 1d6 from the number rolled for the attack, check, or save" ]), action : [["reaction", ""]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature10" : { name : "Twinkling Constellations", source : [["T", 39]], minlevel : 10, description : desc([ "While in my starry form, I can change the constellation at the start of each of my turns", 'The benefit of my constellations improve, see the 3rd page "Notes" section', ]), calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.luminousarrow && fields.Damage_Die.indexOf('1d8') !== -1) { fields.Damage_Die = fields.Damage_Die.replace('1d8', '2d8'); }; }, '', 1 ] } }, "subclassfeature14" : { name : "Full of Stars", source : [["T", 39]], minlevel : 14, description: desc("While in my starry form, I have resistance to bludgeoning, piercing, and slashing damage"), dmgres : [ ["Bludgeoning", "Bludgeon. (in form)"], ["Piercing", "Piercing (in form)"], ["Slashing", "Slashing (in form)"] ] } } }); AddSubClass("druid", "circle of wildfire", { regExpSearch : /^(?=.*(druid|shaman))(?=.*wild.{0,1}fire).*$/i, subname : "Circle of Wildfire", subnameShort: "Wildfire", source : [["T", 39]], features : { "subclassfeature2" : { name : "Circle Spells", source : [["T", 39]], minlevel : 2, description : desc([ "My link to a wildfire spirit grants me access to spells, which count as druid spells to me", "These are always prepared, but don't count against the number of spells I can prepare" ]), spellcastingExtra : ["burning hands", "cure wounds", "flaming sphere", "scorching ray", "plant growth","revivify", "aura of life", "fire shield", "flame strike", "mass cure wounds"] }, "subclassfeature2.1" : { name : "Summon Wildfire Spirit", source : [["T", 40]], minlevel : 2, description : desc([ "As an action, I can expend a use of wild shape to summon a wildfire spirit within 30 ft", "All within 10 ft of where it manifests must make a Dex save or take 2d10 fire damage", "It is friendly and obeys my commands; It lasts for 1 hour, until it has 0 HP, or I die", "Unless I use a bonus action to command it, it only takes the Dodge action on its turn", "It can always take reactions and move on its turn; It acts on my initiative, after me", 'It disappears if I summon another; See "Wildfire Spirit" on a companion page for its stats', ]), action : [["action", ""], ["bonus action", "Command Wildfire Spirit"]], creaturesAdd : [["Wildfire Spirit", true]], creatureOptions : [{ name : "Wildfire Spirit", source : [["T", 40]], size : 4, type : "Elemental", alignment : "", ac : 13, hp : 20, hd : [], speed : "30 ft, fly 30 ft (hover)", scores : [10, 14, 14, 13, 15, 11], damage_immunities : "fire", condition_immunities : "charmed, frightened, grappled, prone, restrained", senses : "Darkvision 60 ft", passivePerception : 12, languages : "understands the languages of its creator", challengeRating : "1/2", proficiencyBonus : 2, proficiencyBonusLinked : true, attacksAction : 1, attacks : [{ name : "Flame Seed", ability : 5, damage : [1, 6, "fire"], range : "60 ft", description : "Ranged weapon attack", modifiers : ["", "Prof"], abilitytodamage : false, useSpellMod : "druid" }, { name : "Fiery Teleportation", ability : 5, damage : [1, 6, "fire"], range : "5-ft radius", description : "Dex save for all within 5 ft of teleportation origin, success - no damage; See traits", dc : true, modifiers : ["", "Prof"], abilitytodamage : false, useSpellMod : "druid" }, { name : "Fiery Manifestation", ability : 5, damage : [2, 6, "fire"], range : "10-ft radius", description : "Dex save for all within 10 ft where spirit is summoned, success - no damage", dc : true, abilitytodamage : false, useSpellMod : "druid" }], features : [{ name : "Creator", description : "The spirit obeys the commands of its creator and has the same proficiency bonus. It takes its turn immediately after its creator, on the same initiative count. It can move and take reactions on its own, but only takes the Dodge action on its turn unless its creator takes a bonus action to command it to take another action. If its creator is incapacitated, it can take any action, not just Dodge." }], actions : [{ name : "Fiery Teleportation", description : "The spirit and each willing creature of its creator's choice within 5 ft of it teleport up to 15 ft to unoccupied spaces its creator can see. Then each creature within 5 ft of the space that the spirit left must succeed on a Dexterity saving throw against its creator's spell save DC or take fire damage equal to 1d6 + its proficiency bonus." }], traits : [{ name : "Fiery Manifestation", description : "The spirit appears in an unoccupied space of its creator's choice that its creator can see within 30 ft. Each creature within 10 ft of the spirit (other than its creator) when it appears must succeed on a Dexterity saving throw against its creator's spell save DC or take 2d6 fire damage." }], header : "Wildfire", calcChanges : { hp : function (totalHD, HDobj, prefix) { if (!classes.known.druid) return; var drdLvl = classes.known.druid.level; var drdLvl5 = 5 * drdLvl; HDobj.alt.push(5 + drdLvl5); HDobj.altStr.push(" = 10 as a base\n + 5 \xD7 " + drdLvl + " from five times its creator's druid level (" + drdLvl5 + ")"); }, setAltHp : true } }] }, "subclassfeature6" : { name : "Enhanced Bond", source : [["T", 40]], minlevel : 6, description : desc([ "While my wildfire spirit is present, I can have my spells originate from it (no range 'self')", "Also, I can then add 1d8 to a single roll of my spells that restore HP or deal fire damage" ]) }, "subclassfeature10" : { name : "Cauterizing Flames", source : [["T", 40]], minlevel : 10, description : desc([ "As a reaction when a Small or larger creature dies within 30 ft of me or wildfire spirit,", "I can have a spectral flame erupt in its space that lasts for 1 minute", "As a reaction when I see a creature enter the flame's space, I can extinguish the flame", "This heals or deals fire damage to the creature (my choice) equal to 2d10 + my Wis mod" ]), action : [["reaction", ""]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature14" : { name : "Blazing Revival", source : [["T", 40]], minlevel : 14, description : desc([ "If I drop to 0 HP and don't die, and my wildfire spirit is within 120 ft, it can save me", "I can have it drop to 0 HP; I then regain half my HP and immediately rise to my feet" ]), usages : 1, recovery : "long rest" } } }); // >>>>>>>>>>>>>>>>>>>>>>> // // >>> Fighter Options >>> // // >>>>>>>>>>>>>>>>>>>>>>> // // Fighter Optional Class Features AddFightingStyle(["fighter", "ranger", "paladin"], "Blind Fighting", { name : "Blind Fighting Style", source : [["T", 41]], description : desc([ "I have blindsight with 10 ft range, allowing me to see anything not behind total cover", "In range, I can see invisible, but not hidden, things, even when blinded or in darkness" ]), vision : [["Blindsight", 10]] }); AddFightingStyle(["fighter", "paladin"], "Interception", { name : "Interception Fighting Style", source : [["T", 41], ["UA:CFV", 12]], description : desc([ "As a reaction when a creature I can see hits another within 5 ft of me, I can intercept", "I reduce the damage the target takes by 1d10 + my Proficiency Bonus (min 0 damage)", "I can't be the target and it requires me wielding a shield or a simple or martial weapon" ]), action : [["reaction", ""]] }); AddFightingStyle(["fighter", "ranger"], "Thrown Weapon Fighting", { name : "Thrown Weapon Fighting Style", source : [["T", 42]], description : desc([ "I can draw a weapon with the thrown property as part of the attack I make with it", "In addition, my ranged attacks made with thrown weapons deal +2 damage" ]), calcChanges : { atkAdd : [ function (fields, v) { if (v.isThrownWeapon && v.isMeleeWeapon) { fields.Description += (fields.Description ? '; ' : '') + '+2 damage when thrown'; }; }, "I deal +2 damage when I hit a ranged attack made with a thrown weapon." ], atkCalc : [ function (fields, v, output) { if (v.isThrownWeapon && !v.isMeleeWeapon) { output.extraDmg += 2; }; }, "" ] } }); AddFightingStyle(["fighter"], "Unarmed Fighting", { name : "Unarmed Fighting Style", source : [["T", 42]], description : desc([ "My unarmed strikes deal 1d6 damage, or 1d8 damage when I have both hands free", "At the start of my turn, I can deal 1d4 bludgeoning damage to one target I'm grappling" ]), calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == "unarmed strike") { if (fields.Damage_Die == 1 || fields.Damage_Die == "1d4") fields.Damage_Die = '1d6'; fields.Description += (fields.Description ? '; ' : '') + 'Versatile (d8)'; }; }, "My unarmed strikes deal 1d6 damage instead of 1, which increases to 1d8 if I have both hands free to make an unarmed strike with.", 1 ] } }); AddFeatureChoice(ClassList.fighter.features['action surge'], true, "Martial Versatility", { name : "Martial Versatility", extraname : "Optional Fighter 4", source : [["T", 42]], description : " [ASI = Ability Score Improvement]\n Whenever I gain an ASI from the fighter class, I can change a fighting style or a maneuver", prereqeval : function (v) { return classes.known.fighter.level >= 4 ? true : "skip"; } }, "Optional 4th-level fighter features"); // Fighter alternative class features and enhancements (only if Battle Master subclass exists) if (ClassSubList["fighter-battle master"]) { AddFightingStyle(["fighter"], "Superior Technique", { name : "Superior Technique", source : [["T", 41], ["UA:CFV", 5]], additional: "1 maneuver; d6, 1\xD7 per short rest", description : desc([ "I gain one superiority die (d6) that I can expend to fuel a special Maneuver", "I can only use one Maneuver per attack; DCs are 8 + Prof B. + Str/Dex mod, my choice", 'Use the "Choose Feature" button above to add a Maneuver to the third page' ]), bonusClassExtrachoices : [{ "class" : "fighter", "subclass" : "fighter-battle master", "feature" : "subclassfeature3.1", "bonus" : 1 }], extraLimitedFeatures : [{ name : "Combat Superiority", usages : 1, additional : 'd6', recovery : "short rest", addToExisting : true }] }); // New Maneuver options AddFeatureChoice(ClassSubList["fighter-battle master"].features["subclassfeature3.1"], true, "Ambush", { name : "Ambush", source : [["T", 42], ["UA:CFV", 5]], description : desc([ "When I make an initiative roll or a Dex (Stealth) check, I can add a superiority die to it", "I can't do this if I'm incapacitated" ]) }); AddFeatureChoice(ClassSubList["fighter-battle master"].features["subclassfeature3.1"], true, "Bait and Switch", { name : "Bait and Switch", source : [["T", 42]], description : desc([ "On my turn, I can expend a superiority die to swap places with an ally within 5 ft", "I can't do this if the ally is incapacitated or unwilling to swap", "Doing this costs me 5 ft of movement, but this doesn't provoke opportunity attacks", "Me or my ally (my choice) can then add the superiority die to AC until my next turn starts" ]) }); AddFeatureChoice(ClassSubList["fighter-battle master"].features["subclassfeature3.1"], true, "Brace", { name : "Brace", source : [["T", 42]], description : desc([ "As a reaction when a creature I can see moves within my melee reach, I can attack it", "I expend a superiority die and make one weapon attack, adding the die to the damage" ]), action : [["reaction", ""]] }); AddFeatureChoice(ClassSubList["fighter-battle master"].features["subclassfeature3.1"], true, "Commanding Presence", { name : "Commanding Presence", source : [["T", 42]], description: desc("When I make a Performance, Intimidation, or Persuasion check, I can add a superiority die") }); AddFeatureChoice(ClassSubList["fighter-battle master"].features["subclassfeature3.1"], true, "Grappling Strike", { name : "Grappling Strike", source : [["T", 42]], description : desc([ "Immediately after hitting with a melee attack, I can use a bonus action to try to grapple", "I add the superiority die to the Str (Athletics) check; I can only do this on my own turn" ]), action : [["bonus action", " (after melee hit)"]] }); AddFeatureChoice(ClassSubList["fighter-battle master"].features["subclassfeature3.1"], true, "Quick Toss", { name : "Quick Toss", source : [["T", 42]], description : desc([ "As a bonus action, I can use a superiority die to do a ranged attack with a thrown weapon", "I can draw a thrown weapon as part of making this attack; I add the die to the damage" ]), action : [["bonus action", ""]] }); AddFeatureChoice(ClassSubList["fighter-battle master"].features["subclassfeature3.1"], true, "Tactical Assessment", { name : "Tactical Assessment", source : [["T", 42]], description: desc("When I make an Investigation, History, or Insight check, I can add a superiority die to it") }); } // Fighter Subclasses AddSubClass("fighter", "psi warrior", { regExpSearch : /^(?=.*\bpsi(onic)?s?\b)(?=.*warrior).*$/i, subname : "Psi Warrior", source : [["T", 42]], fullname : "Psi Warrior", abilitySave : 4, features : { "subclassfeature3" : { name : "Psionic Energy Dice", source : [["T", 43]], minlevel : 3, description : desc([ "I gain twice my proficiency bonus of psionic energy dice (PsiD) that fuel my psionics", "I regain all expended psionic energy dice after a long rest", "As a bonus action once per short rest, I can regain one expended psionic energy die" ]), additional : levels.map(function(n) { return n < 3 ? "" : n < 5 ? "d6" : n < 11 ? "d8" : n < 17 ? "d10" : "d12"; }), action : [["bonus action", "Regain 1 Psionic Energy Die"]], usages : "Proficiency Bonus \xD7 2 per ", usagescalc : "event.value = Number(How('Proficiency Bonus'))*2", recovery : "long rest", extraLimitedFeatures : [{ name : "Regain 1 Psionic Energy die", usages : 1, recovery : "short rest" }] }, "subclassfeature3.1" : { name : "Psionic Power: Protective Field", source : [["T", 43]], minlevel : 3, additional: "1 psionic energy die", description : desc([ "As a reaction when I or a creature I can see within 30 ft takes damage, I can reduce it", "I reduce the damage by the roll of the one psionic energy die I expend + my Int mod" ]), action : [["reaction", "Protective Field"]] }, "subclassfeature3.2" : { name : "Psionic Power: Psionic Strike", source : [["T", 43]], minlevel : 3, additional: "1 psionic energy die", description : desc([ "Once on each of my turns after I hit a target in 30 ft and damage it with a weapon,", "I can expend a psionic energy die to deal it the die roll + my Int mod in force damage" ]) }, "subclassfeature3.3" : { name : "Psionic Power: Telekinetic Movement", source : [["T", 43]], minlevel : 3, description : desc([ "As an action, I can move a Large or smaller loose object or one willing creature in 30 ft", "I must be able to see the target and can move it up to 30 ft to an empty space I can see", "If it is a Tiny object, I can also move it to or from my hand; I can't move myself this way", "I can do this once per short rest, or by expending a psionic energy die (PsiD)" ]), limfeaname : "Telekinetic Movement", action : [["action", ""]], usages : 1, recovery : "short rest", altResource : "PsiD" }, "subclassfeature7.1" : { name : "Telekinetic Adept: Psi-Powered Leap", source : [["T", 43]], minlevel : 7, description : desc([ "As a bonus action, I gain a flying speed of twice my walking speed until the turn ends", "I can do this once per short rest, or by expending a psionic energy die (PsiD)" ]), limfeaname : "Psi-Powered Leap", action : [["bonus action", ""]], usages : 1, recovery : "short rest", altResource : "PsiD" }, "subclassfeature7.2" : { name : "Telekinetic Adept: Telekinetic Thrust", source : [["T", 43]], minlevel : 7, additional: "DC 8 + Prof B. + Int mod", description : desc([ "When I deal damage with my Psionic Strike, I can have the target make a Strength save", "If failed, I knock the target prone or move it up to 10 ft in any direction horizontally" ]), }, "subclassfeature10" : { name : "Guarded Mind", source : [["T", 43]], minlevel : 10, description : desc([ "I can expend a psionic energy die to end all effects on me causing charmed or frightened", "I can do this if at the start of my turn; I also gain resistance to psychic damage" ]), dmgres : ["Psychic"] }, "subclassfeature15" : { name : "Bulwark of Force", source : [["T", 44]], minlevel : 15, description : desc([ "As a bonus action, I can choose up to my Int mod of creatures (min 1) I can see in 30 ft", "This can include me; Each chosen gains half cover for 1 minute or until I'm incapacitated", "I can do this once per long rest, or by expending a psionic energy die (PsiD)" ]), action : [["bonus action", ""]], usages : 1, recovery : "long rest", altResource : "PsiD" }, "subclassfeature18" : { name : "Telekinetic Master", source : [["T", 44]], minlevel : 18, description : desc([ "I can cast Telekinesis, requiring no spell slot or components, with Int spellcasting ability", "As a bonus action while concentrating on this spell, I can make one weapon attack", "I can cast Telekinesis once per long rest, or by expending a psionic energy die (PsiD)" ]), spellcastingBonus : [{ name : "Telekinetic Master", spells : ["telekinesis"], selection : ["telekinesis"], firstCol : "oncelr" }], spellChanges : { "telekinesis" : { components : "", changes : "Using Telekinetic Master, I can cast Telekinesis without requiring components or spell slots." } }, action : [["bonus action", "Weapon Attack while Telekinesis conc."]], usages : 1, recovery : "long rest", altResource : "PsiD" } } }); AddSubClass("fighter", "rune knight", { regExpSearch : /^(?=.*rune)(?=.*knight).*$/i, subname : "Rune Knight", source : [["T", 44]], fullname : "Rune Knight", abilitySave : 3, features : { "subclassfeature3" : { name : "Bonus Proficiencies", source : [["T", 44]], minlevel : 3, description: desc("I gain proficiency with smith's tools and I learn to speak, read, and write Giant"), toolProfs : ["Smith's tools"], languageProfs : ["Giant"] }, "subclassfeature3.1" : { name : "Rune Carver", source : [["T", 44]], minlevel : 3, description : desc([ "I learn how to use magic runes to enhance my gear that I can wear or hold in my hand", 'Use the "Choose Feature" button above to select a rune and add it to the third page', "When I finish a long rest, I can inscribe each rune I know upon a different item I touch", "Each item can hold only one rune and remains there until I finish a long rest", "Runes inscribed on a carried object grant both a passive and a limited-use active effect", "Whenever I gain a fighter level, I can swap a rune I know for another", "The DC for a rune's abilities is 8 + my Proficiency bonus + my Constitution modifier" ]), additional : levels.map(function (n){ return n < 3 ? "" : (n < 7 ? 2 : n < 10 ? 3 : n < 15 ? 4 : 5) + " runes known" }), extraTimes : levels.map(function (n) { return n < 3 ? 0 : n < 7 ? 2 : n < 10 ? 3 : n < 15 ? 4 : 5; }), extraname : "Rune Knight 3", extrachoices : ["Cloud Rune", "Fire Rune", "Frost Rune", "Stone Rune", "Hill Rune (prereq: level 7 fighter)", "Storm Rune (prereq: level 7 fighter)"], "cloud rune" : { name : "Cloud Rune", source : [["T", 44]], description : desc([ "While I wear an object inscribed with this, I gain a deceptiveness reminiscent of cloud giants", "I always gain advantage on Dexterity (Sleight of Hand) and Charisma (Deception) checks", "As a reaction when I or another I can see within 30 ft is hit by an attack, I can invoke this", "I select another target for the attack within 30 ft of me, using the same roll (ignore range)" ]), action : [["reaction", " (invoke)"]], additional : "invoke", usages : ["", "", 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2], recovery : "short rest", advantages : [ ["Sleight of Hand", true], ["Deception", true] ] }, "fire rune" : { name : "Fire Rune", source : [["T", 44]], description : desc([ "While I wear an object inscribed with this, I gain craftsmanship reminiscent of great smiths", "I always double my proficiency bonus when making an ability check with a tool", "When I hit a creature with a weapon attack, I can invoke it to summon fiery shackles", "It takes an extra 2d6 fire damage and must make a Str save or be restrained for 1 min", "While restrained, the creature takes 2d6 fire damage at the start of each of its turns", "It can repeat the save at the end of each of its turns, banishing the shackles on a success" ]), additional : "invoke", usages : ["", "", 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2], recovery : "short rest", skillstxt : "expertise with all tools I am proficient with", eval : function () { Checkbox('Too Exp', true); }, removeeval : function () { Checkbox('Too Exp', false); } }, "frost rune" : { name : "Frost Rune", source : [["T", 45]], description : desc([ "While I wear an object inscribed with this, I gain might of those surviving wintry wilderness", "I always gain advantage on Wisdom (Animal Handling) and Charisma (Intimidation) checks", "As a bonus action, I can invoke this to gain +2 on Str and Con checks and saves for 10 min" ]), action : [["bonus action", " (invoke)"]], additional : "invoke", usages : ["", "", 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2], recovery : "short rest", advantages : [ ["Animal Handling", true], ["Intimidation", true] ] }, "stone rune" : { name : "Stone Rune", source : [["T", 45]], description : desc([ "While I wear an object inscribed with this, I gain judiciousness reminiscent of stone giants", "I always gain advantage on Wisdom (Insight) checks and I gain darkvision out to 120 ft", "As a reaction when a creature I can see ends it turn within 30 ft, I can invoke this rune", "This causes the creature to make a Wisdom save or be charmed by me for 1 minute", "While charmed, it descends into a dreamy stupor, becoming incapacitated and has speed 0", "It can repeat the save at the end of each of its turns, ending the effect on a success" ]), action : [["reaction", " (invoke)"]], additional : "invoke", usages : ["", "", 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2], recovery : "short rest", vision : [["Darkvision", 120]], advantages : [ ["Insight", true] ] }, "hill rune (prereq: level 7 fighter)" : { name : "Hill Rune", source : [["T", 45]], description : desc([ "While I wear an object inscribed with this rune, I gain a resilience reminiscent of hill giants", "I always gain advantage on saves against being poisoned and resistance to poison damage", "As a bonus action, I can invoke it to gain resistance to bludg/slash/pierc damage for 1 min" ]), prereqeval : function(v) { return classes.known.fighter.level >= 7; }, action : [["bonus action", " (invoke)"]], additional : "invoke", usages : ["", "", 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2], recovery : "short rest", dmgres : ["Poison"], savetxt : { adv_vs : ["poison"] } }, "storm rune (prereq: level 7 fighter)" : { name : "Storm Rune", source : [["T", 45]], description : desc([ "While I wear an object inscribed with this rune, I can glimpse the future like storm giants", "I always gain adv. on Int (Arcana) checks and I can't be surprised while not incapacitated", "As a bonus action, I can invoke it to enter a prophetic state for 1 min or till incapacitated", "While in this state, I can use a reaction to cause a roll to gain advantage or disadvantage", "I can do this for attacks, saves, and checks of myself or others I can see within 60 ft of me" ]), prereqeval : function(v) { return classes.known.fighter.level >= 7; }, action : [["bonus action", " (invoke)"]], additional : "invoke", usages : ["", "", 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2], recovery : "short rest", advantages : [ ["Arcana", true] ], savetxt : { immune : ["surprised"] }, } }, "subclassfeature3.2" : { name : "Giant's Might", source : [["T", 45]], minlevel : 3, description : desc([ "As a bonus action, I can imbue myself with giant magic for 1 minute and gain benefits:", " \u2022 Space permitted, I grow to a larger size category along with everything I'm wearing", " \u2022 I have advantage on my Strength check and saves", " \u2022 My weapon and unarmed strike attacks deal extra damage" ]), additional : levels.map(function (n) { return n < 3 ? "" : (n < 18 ? "Large" : "Huge") + ", +1d" + (n < 10 ? 6 : n < 18 ? 8 : 10) + " damage" }), action : [["bonus action", ""]], savetxt : { text : ["Adv. on Str saves in Giant's Might"] }, usages : "Prof Bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.fighter && classes.known.fighter.level >= 3 && v.isWeapon && (/giant('s)? might/i).test(v.WeaponTextName)) { var GMdmgDie = classes.known.fighter.level < 10 ? 'd6' : classes.known.fighter.level < 18 ? 'd8' : 'd10'; var dmgDieRx = RegExp('(\\d+)' + GMdmgDie, 'i'); if (dmgDieRx.test(fields.Damage_Die)) { var dmgDieMatch = fields.Damage_Die.match(dmgDieRx); fields.Damage_Die = fields.Damage_Die.replace(dmgDieRx, Number(dmgDieMatch[1]) + 1 + GMdmgDie); fields.Description = fields.Description.replace(/Versatile \((\d+d\d+)\)/i, 'Versatile ($1+1' + GMdmgDie + ')'); } else if (!isNaN(fields.Damage_Die)) { fields.Damage_Die = 1 + GMdmgDie + "+" + fields.Damage_Die; } else { fields.Description += (fields.Description ? '; ' : '') + '+1' + GMdmgDie + ' damage'; } if (classes.known.fighter.level >= 18 && v.isMeleeWeapon) fields.Description += (fields.Description ? '; ' : '') + '+5 ft reach'; }; }, "If I include the words \"Giant Might\" in the name of a weapon or unarmed strike, it gets treated as a weapon that I use while imbued by my Giant's Might feature. It adds +1d6 weapon damage. From 10th-level onwards, this increases to +1d8 damage. From 18th-level onwards, this increases to +1d10 damage and my reach increases by 5 ft (for melee weapons).", 8 ] } }, "subclassfeature7" : { name : "Runic Shield", source : [["T", 45]], minlevel : 7, description : desc([ "As a reaction when I see a creature within 60 ft get hit by an attack, I can protect it", "The attacker must reroll its attack roll and use the new roll" ]), action : [["reaction", ""]] }, "subclassfeature10" : { name : "Great Stature", source : [["T", 46]], minlevel : 10, description : desc([ "My runes permanently make me grow; I add 3d4 inches to my length", "In addition, the extra weapon damage I deal with Giant Might increases to 1d8" ]) }, "subclassfeature15" : { name : "Master of Runes", source : [["T", 46]], minlevel : 15, description: desc("I can now invoke each of my runes twice per short rest instead of once") }, "subclassfeature18" : { name : "Runic Juggernaut", source : [["T", 46]], minlevel : 18, description : desc([ "Giant's Might now adds +1d10 weapon damage, and can make me grow up to Huge", "While I'm Huge, my reach increases by 5 ft" ]) } } }); // >>>>>>>>>>>>>>>>>>>> // // >>> Monk Options >>> // // >>>>>>>>>>>>>>>>>>>> // // Monk Optional Class Features AddFeatureChoice(ClassList.monk.features.ki, true, "Dedicated Weapon", { name : "Dedicated Weapon", extraname : "Optional Monk 2", source : [["T", 48]], description : desc([ "When I finish a short or long rest, I can focus ki and touch one simple or martial weapon", "From then on, until I use this feature again, this weapon counts as a monk weapon for me", "I have to be proficient with the weapon and it can't have the heavy or special property" ]), calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.monkweapon && !v.theWea.special && classes.known.monk && classes.known.monk.level && (/dedicated/i).test(v.WeaponTextName) && fields.Proficiency && (/simple|martial/i).test(v.theWea.type) && !(/\b(heavy|special)\b/i).test(fields.Description)) { v.theWea.monkweapon = true; }; }, 'If I include the word "Dedicated" in the name of a simple or martial weapon that I\'m proficient with and that doesn\'t have the heavy or special property, it will be treated as a monk weapon.', 1 ] } }, "Optional 2nd-level monk features"); AddFeatureChoice(ClassList.monk.features["unarmored movement"], true, "Ki-Fueled Attack", { name : "Ki-Fueled Attack", extraname : "Optional Monk 3", source : [["T", 48]], description : desc([ "If I use any ki points during my action on my turn, I can make an attack as a bonus action", "This attack has to be in the same turn and with an unarmed strike or a monk weapon" ]), action : [["bonus action", ""]] }, "Optional 3rd-level monk features"); AddFeatureChoice(ClassList.monk.features["deflect missiles"], true, "Quickened Healing (2 ki points)", { name : "Quickened Healing", extraname : "Optional Monk 4", source : [["T", 49]], description : " [2 ki points]\n As an action, I can regain HP equal to the roll of my martial arts die + Proficiency Bonus", action : [["action", ""]] }, "Optional 4th-level monk features"); AddFeatureChoice(ClassList.monk.features["slow fall"], true, "Focused Aim (1-3 ki points)", { name : "Focused Aim", extraname : "Optional Monk 5", source : [["T", 49]], description : " [1-3 ki points]\n When I miss an attack roll, I can spend ki to increase the roll by +2 per ki point (max +6)", prereqeval : function (v) { return classes.known.monk.level >= 5 ? true : "skip"; } }, "Optional 5th-level monk features"); // Monk Subclasses AddSubClass("monk", "way of mercy", { regExpSearch : /^(?=.*mercy)((?=.*(monk|monastic))|((?=.*martial)(?=.*(artist|arts)))|((?=.*spiritual)(?=.*warrior))).*$/i, subname : "Way of Mercy", subnameShort: "Mercy", source : [["T", 49]], features : { "subclassfeature3" : { name : "Implements of Mercy", source : [["T", 49]], minlevel : 3, description : desc([ "I gain proficiency with Insight, Medicine, and herbalism kit; I have a special Merciful Mask" ]), skills : ["Insight", "Medicine"], toolProfs : ["Herbalism kit"], "hands of healing" : { name : "Hands of Healing", extraname : "Way of Mercy 3", source : [["T", 49]], description : levels.map(function (n) { var a = "As an action, I can spend 1 ki point to touch a creature and restore a number of its HP"; var b6 = "It also recovers from one disease or being blinded, deafened, paralyzed, poisoned or stunned"; var c = "When I use Flurry of Blows, I can do this instead of one unarmed strike (no extra ki cost)"; return desc( n < 6 ? [a, c] : [a, b6, n < 11 ? c : c.replace("one", "each")] ); }), action : [["action", ""]], additional : levels.map(function (n) { return n < 3 ? "" : "1 ki point; heal 1d" + (n < 5 ? 4 : n < 11 ? 6 : n < 17 ? 8 : 10) + " + Wisdom modifier"; }) }, "hands of harm" : { name : "Hands of Harm", extraname : "Way of Mercy 3", source : [["T", 50]], description : levels.map(function (n) { var a = "When I hit a creature with an unarmed strike, I can spend 1 ki point to deal extra damage"; var b6 = "I can also subject the target to the poisoned condition until the end of my next turn"; var c11 = "When I use Flurry of Blows, I can do this with one unarmed strike (no extra ki cost)"; var d = "I can use this feature only once per turn"; return desc( n < 6 ? [a, d] : n < 11 ? [a, b6, d] : [a, b6, c11, d] ); }), additional : levels.map(function (n) { return n < 3 ? "" : "1 ki point; 1d" + (n < 5 ? 4 : n < 11 ? 6 : n < 17 ? 8 : 10) + " + Wis mod necrotic damage"; }) }, autoSelectExtrachoices : [{ extrachoice : "hands of healing" }, { extrachoice : "hands of harm" }] }, "subclassfeature6" : { name : "Physician's touch", source : [["T", 50]], minlevel : 6, description : desc([ "Hand of Healing also ends 1 disease, blinded, deafened, paralyzed, poisoned or stunned", "Hand of Harm also causes target to be poisoned until the end of my next turn" ]) }, "subclassfeature11" : { name : "Flurry of Healing and Harm", source : [["T", 50]], minlevel : 11, description : desc([ "I can use Hand of Healing instead of each Flurry of Blows unarmed strike without ki cost", "I can use Hand of Harm on one Flurry of Blows unarmed strike without ki cost" ]), "hand of ultimate mercy" : { name : "Hand of Ultimate Mercy", extraname : "Way of Mercy 17", source : [["T", 50]], description : desc([ "As an action, I can spend 5 ki points and touch a creature that died in the last 24 hours", "The creature returns to life and regains 4d10 + my Wisdom modifier in hit points", "It is also cured of all these conditions: blinded, deafened, paralyzed, poisoned, and stunned" ]), action : [["action", ""]], additional : "5 ki points", usages : 1, recovery : "long rest" }, autoSelectExtrachoices : [{ extrachoice : "hand of ultimate mercy", minlevel : 17 }] } } }); AddSubClass("monk", "way of the astral self", { regExpSearch : /^(?=.*astral)(?=.*(self|projection|travel))((?=.*(monk|monastic))|((?=.*martial)(?=.*(artist|arts)))|((?=.*spiritual)(?=.*warrior))).*$/i, subname : "Way of the Astral Self", subnameShort: "Astral Self", source : [["T", 50]], features : { "subclassfeature3" : { name : "Arms of the Astral Self", source : [["T", 50]], minlevel : 3, description : ' [1 ki; see 3rd page "Notes"]' + desc([ "As a bonus action, I can use my ki to summon the arms of my astral self for 10 minutes" ]), action : [["bonus action", "Summon Astral Arms"]], weaponOptions : [{ baseWeapon : "unarmed strike", regExpSearch : /^(?=.*\bastral\b)(?=.*\barms?\b).*$/i, name : "Astral Arms", source : [["T", 50]], ability : 5, range : "Melee (+5 ft)", damage : [1, "", "Force"], description : "+5 ft reach; Uses Str, Dex, or Wis", isAstralArms : true, selectNow : true }], "astral arms" : { name : "Astral Arms", extraname : "Way of the Astral Self 3", source : [["T", 50]], description : desc([ "As a bonus action, I can summon my astral arms to hover next to or over my own arms", "When I summon them, all creatures of my choice I can see in 10 ft must make a Dex save", "If failed, they take twice my martial arts die in force damage", "I can use the arms to make unarmed strikes, using Wisdom instead of Strength/Dexterity", "I have +5 ft reach on attacks made with my astral arms and they deal force damage", "They last for 10 minutes or until I'm incapacitated or die; I choose their appearance" ]), additional : levels.map(function (n) { return n < 3 ? "" : "1 ki point; 2d" + (n < 5 ? 4 : n < 11 ? 6 : n < 17 ? 8 : 10) + " force damage on summon"; }) }, autoSelectExtrachoices : [{ extrachoice : "astral arms" }] }, "subclassfeature6" : { name : "Visage of the Astral Self", source : [["T", 50]], minlevel : 6, description : ' [1 ki; see 3rd page "Notes"]' + desc([ "As a bonus action, I can use my ki to summon the visage of my astral self for 10 minutes" ]), action : [["bonus action", "Summon Astral Arms and/or Visage", "Summon Astral Arms"]], "astral visage" : { name : "Astral Visage", extraname : "Way of the Astral Self 6", source : [["T", 50]], additional: "1 ki point", description : desc([ "As a bonus action (or when summoning my astral arms), I can summon my astral visage", "It lasts for 10 minutes or until I'm incapacitated or die; I choose its appearance", "My astral visage covers my face like a helmet or mask and grants me the following benefits:", " \u2022 Astral Sight: I can see normally in normal and magical darkness to a distance of 120 ft", " \u2022 Wisdom of the Spirit: I have advantage on Wisdom (Insight) and Charisma (Intimidation)", " \u2022 Word of the Spirit: I can have only one target I can see in 60 ft hear me, or all in 300 ft" ]) }, autoSelectExtrachoices : [{ extrachoice : "astral visage" }] }, "subclassfeature11" : { name : "Body of the Astral Self", source : [["T", 51]], minlevel : 11, description : ' [see 3rd page "Notes"]' + desc([ "When I have both my astral arms and visage summoned, my astral body appears as well", "This spectral body covers me like an armor, connecting my astral arms and astral visage" ]), action : [["reaction", "Deflect Energy"]], "astral body" : { name : "Astral Body", extraname : "Way of the Astral Self 11", source : [["T", 51]], description : " [if both astral arms \u0026 visage are present]" + desc([ " \u2022 Deflect Energy: As a reaction when I take damage, I can reduce it by 1d10 + Wis mod", " I can only do this if the damage I take is acid, cold, fire, force, lightning, or thunder", " \u2022 Empowered Arms: Once per my turn, I can add martial art die to astral arms damage" ]) }, autoSelectExtrachoices : [{ extrachoice : "astral body" }], calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.isAstralArms && classes.known.monk && classes.known.monk.level) { var aMonkDie = function (n) { return n < 5 ? 4 : n < 11 ? 6 : n < 17 ? 8 : 10; }(classes.known.monk.level); fields.Description += (fields.Description ? '; ' : '') + 'Once on each of my turns +1d' + aMonkDie + ' damage'; } }, "Once on each of my turns when I hit a target with my astral arms, I can add my martial arts die to the damage dealt." ] } }, "subclassfeature17" : { name : "Awakened Astral Self", source : [["T", 51]], minlevel : 17, description : ' [5 ki; see 3rd page "Notes"]' + desc([ "As a bonus action, I can use 5 ki points to summon astral arms and visage with benefits" ]), action : [["bonus action", ""]], "astral body" : { name : "Awakened Astral Self", extraname : "Way of the Astral Self 17", source : [["T", 50]], additional: "5 ki points", description : desc([ "As a bonus action, I can summon my astral arms and astral visage, with extra benefits:", " \u2022 Armor of the Spirit: I gain a +2 bonus to my armor class", " \u2022 Astral Barrage: I can do three attacks with the Attack action, if all are with astral arms", "This lasts for 10 minutes or until I'm incapacitated or die" ]) }, autoSelectExtrachoices : [{ extrachoice : "astral body" }] } } }); // >>>>>>>>>>>>>>>>>>>>>>> // // >>> Paladin Options >>> // // >>>>>>>>>>>>>>>>>>>>>>> // // Paladin Optional Class Features AddFeatureChoice(ClassList.paladin.features.spellcasting, true, "Additional Paladin Spells", { name : "Additional Paladin Spells", extraname : "Optional Paladin 2", source : [["T", 52]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "paladin" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["gentle repose", "prayer of healing", "warding bond"]); }, "This optional class feature expands the spell list of the paladin class with the following spells (spell level in brackets): Gentle Repose (2), Prayer of Healing (2), and Warding Bond (2)." ] } }, "Optional 2nd-level paladin features"); // Blind Fighting & Interception already added in the Fighter Options section AddFightingStyle(["paladin"], "Blessed Warrior", { name : "Blessed Warrior Fighting Style", source : [["T", 52], ["UA:CFV", 6]], description : desc([ "I learn two cleric cantrips that count as paladin spells for me and use Cha for spellcasting", "Whenever I gain a paladin level, I can swap one of these for another cleric cantrip" ]), spellcastingBonus : [{ name : "Blessed Warrior", "class" : "cleric", level : [0, 0], times : 2 }] }); AddFeatureChoice(ClassList.paladin.features["subclassfeature3.0-channel divinity"], true, "Harness Divine Power", { name : "Channel Divinity: Harness Divine Power", extraname : "Optional Paladin 3", source : [["T", 52]], description : desc([ "As a bonus action, I can expend a use of my channel divinity to regain one used spell slot", "The level of this spell slot can be no more than half my Proficiency Bonus (rounded up)", "I can only do this so many times per long rest, even if I have uses of channel divinity left" ]), action : [["bonus action", ""]], usages : levels.map(function(n) { return n < 3 ? "" : n < 7 ? 1 : n < 15 ? 2 : 3; }), recovery : "long rest" }, "Optional 3rd-level paladin features"); AddFeatureChoice(ClassList.paladin.features['divine health'], true, "Martial Versatility", { name : "Martial Versatility", extraname : "Optional Paladin 4", source : [["T", 53]], description : " [ASI = Ability Score Improvement]\n Whenever I gain an ASI from the paladin class, I can change my paladin fighting style", prereqeval : function (v) { return classes.known.paladin.level >= 4 ? true : "skip"; } }, "Optional 4th-level paladin features"); // Paladin Subclasses AddSubClass("paladin", "oath of the watchers", { regExpSearch : /^(?=.*watchers)((?=.*paladin)|((?=.*(exalted|sacred|holy|divine))(?=.*(knight|fighter|warrior|warlord|trooper)))).*$/i, subname : "Oath of the Watchers", subnameShort: "Watchers", source : [["T", 54]], features : { "subclassfeature3" : { name : "Channel Divinity: Watcher's Will", source : [["T", 55]], minlevel : 3, description: desc("As an action, Cha mod of creatures I see in 30 ft adv. on Int/Wis/Cha saves for 1 min"), action : [["action", ""]], spellcastingExtra : ["alarm", "detect magic", "moonbeam", "see invisibility", "counterspell", "nondetection", "aura of purity", "banishment", "hold monster", "scrying"] }, "subclassfeature3.1" : { name : "Channel Divinity: Abjure the Extraplanar", source : [["T", 55]], minlevel : 3, description : desc([ "As an action, all aberration, celestial, elemental, fey, fiend in 30 ft must make Wis save", "Succeeds if it can't hear me; On fail, turned for 1 minute or until it takes any damage", "Turned: move away, never within 30 ft of me, no reactions or actions other than Dash", "Turned: may Dodge instead of Dash when nowhere to move and unable to escape bonds" ]), action : [["action", ""]] }, "subclassfeature7" : { name : "Aura of the Sentinel", source : [["T", 55]], minlevel : 7, description: desc("If I'm not incapacitated, chosen creatures in range and I add my Prof Bonus to Initiative"), additional : levels.map(function (n) { return n < 7 ? "" : (n < 18 ? 10 : 30) + "-foot aura"; }), addMod : [{ type : "skill", field : "Init", mod : "prof", text : "I can add my Proficiency Bonus to initiative rolls." }] }, "subclassfeature15" : { name : "Vigilant Rebuke", source : [["T", 55]], minlevel : 15, description : desc([ "As a reaction when I or another I can see succeeds a Int, Wis, or Cha save, I can rebuke", "The creature that forced the saving throw takes 2d8 + my Charisma mod force damage" ]), action : [["reaction", ""]] }, "subclassfeature20" : { name : "Mortal Bulwark", source : [["T", 55]], minlevel : 20, description : desc([ "As a bonus action, I can gain the following benefits for 1 minute:", " \u2022 Truesight 120 ft; Adv. on attacks vs. aberrations, celestials, elementals, fey, and fiends", " \u2022 When I hit and damage a creature with an attack, I can banish it if it fails a Cha save", " It's banished to its native plane if not there now; It's immune for 24 hours on a success", "I can do this once per long rest, or by expending a 5th-level or higher spell slot (SS 5+)" ]), recovery : "long rest", usages : 1, altResource : "SS 5+", action : [["bonus action", ""]] } } }); // >>>>>>>>>>>>>>>>>>>>>>> // // >>> Ranger Options >>> // // >>>>>>>>>>>>>>>>>>>>>>> // // Ranger Optional Class Features var TCoE_Deft_Explorer = function () { var a = { name : "Deft Explorer: Canny", source : [["T", 56]], description: desc("I learn two languages and gain expertise with one skill I'm proficient with"), languageProfs : [2], skillstxt : "Expertise with one skill I'm proficient with", additional : "extra benefits at 6th and 10th level", extraTimes : [1], extraname : "Canny (select skill for expertise)", extrachoices : ["Acrobatics", "Animal Handling", "Arcana", "Athletics", "Deception", "History", "Insight", "Intimidation", "Investigation", "Medicine", "Nature", "Perception", "Performance", "Persuasion", "Religion", "Sleight of Hand", "Stealth", "Survival"], "roving benefit" : { name : "Roving", extraname : "Deft Explorer Benefit 6", source : [["T", 56]], description: desc("I gain +5 ft walking speed and climbing and swimming speed equal to my walking speed"), speed : { walk : { spd : "+5", enc : "+5" }, climb : { spd : "walk", enc : "walk" }, swim : { spd : "walk", enc : "walk" } } }, "tireless benefit" : { name : "Tireless", extraname : "Deft Explorer Benefit 10", source : [["T", 56]], description : desc([ "Whenever I finish a short rest, I reduce my exhaustion level, if any, by 1", "As an action a number of times per long rest, I can give myself temp HP of 1d8 + Wis mod" ]), action : [["action", ""]], additional : "1d8 + Wis Mod", usages : "Prof Bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, autoSelectExtrachoices : [{ extrachoice : "roving benefit", minlevel : 6 }, { extrachoice : "tireless benefit", minlevel : 10 }] } for (var i = 0; i < a.extrachoices.length; i++) { var attr = a.extrachoices[i].toLowerCase(); a[attr] = { name : a.extrachoices[i] + " Expertise", extraname : "Deft Explorer Benefit 1", description : "", source : a.source, skills : [[a.extrachoices[i], "only"]], prereqeval : function(v) { return v.skillProfsLC.indexOf(v.choice) === -1 ? false : v.skillExpertiseLC.indexOf(v.choice) === -1 ? true : "markButDisable"; } } } return a; }(); CreateClassFeatureVariant("ranger", "natural explorer", "Deft Explorer", TCoE_Deft_Explorer); var TCoE_Favored_Foe = { name : "Favored Foe", source : [["T", 56]], description : desc([ "When I hit a creature with an attack roll, I can mark it as my favored enemy for 1 min", "I deal extra damage to it when I mark it and the first time I hit a marked on my turn", "Keeping a creature marked as favored enemy requires me to concentrate, like on a spell" ]), additional : levels.map(function (n) { return "+1d" + (n < 6 ? 4 : n < 14 ? 6 : 8) + " damage"; }), usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", calcChanges : { atkAdd : [ function (fields, v) { if (!v.isSpell && (classes.known.rangerua || classes.known.ranger) && /favou?red.{1,2}(foe|enemy)/i.test(v.WeaponTextName)) { var rngrLvl = classes.known.ranger ? classes.known.ranger.level : classes.known.rangerua.level; fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +1d' + (rngrLvl < 6 ? 4 : rngrLvl < 14 ? 6 : 8) + ' damage'; }; }, 'If I include the words "Favored Foe" or "Favored Enemy" in the name of a weapon, it gets the bonus damage I do against marked favored enemies added to its description.' ] } }; CreateClassFeatureVariant("ranger", "favored enemy", "Favored Foe", TCoE_Favored_Foe); var TCoE_Additional_Ranger_Spells = { name : "Additional Ranger Spells", extraname : "Optional Ranger 2", source : [["T", 57]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if ((spName !== "ranger" && spName !== "rangerua") || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["entangle", "searing smite", "aid", "enhance ability", "gust of wind", "magic weapon", "elemental weapon", "meld into stone", "revivify", "dominate beast", "greater restoration"]); }, "This optional class feature expands the spell list of the ranger class with the following spells (spell level in brackets): Entangle (1), Searing Smite (1), Aid (2), Enhance Ability (2), Gust of Wind (2), Magic Weapon (2), Elemental Weapon (3), Meld into Stone (3), Revivify (3), Dominate Beast (4), and Greater Restoration (5)." ] }, prereqeval : function (v) { return (classes.known.ranger && classes.known.ranger.level >= 2) || (classes.known.rangerau && classes.known.rangerau.level >= 2) ? true : "skip"; } }; AddFeatureChoice(ClassList.ranger.features.spellcasting, true, "Additional Ranger Spells (prereq: level 2 ranger)", TCoE_Additional_Ranger_Spells, "Optional ranger features"); // Blind Fighting & Thrown Weapon Fighting already added in the Fighter Options section AddFightingStyle(["ranger"], "Druidic Warrior", { name : "Druidic Warrior Fighting Style", source : [["T", 57], ["UA:CFV", 7]], description : desc([ "I learn two druid cantrips that count as ranger spells for me and use Wis for spellcasting", "Whenever I gain a ranger level, I can swap one of these for another druid cantrip" ]), spellcastingBonus : [{ name : "Druidic Warrior", "class" : "druid", level : [0, 0], times : 2 }] }); var TCoE_Ranger_Spellcasting_Focus = { name : "Spellcasting Focus", extraname : "Optional Ranger 2", source : [["T", 57], ["UA:CFV", 8]], description: desc("I can use a druidic focus as a spellcasting focus for my ranger spells"), prereqeval : function (v) { return (classes.known.ranger && classes.known.ranger.level >= 2) || (classes.known.rangerau && classes.known.rangerau.level >= 2) ? true : "skip"; } }; AddFeatureChoice(ClassList.ranger.features.spellcasting, true, "Spellcasting Focus (prereq: level 2 ranger)", TCoE_Ranger_Spellcasting_Focus, "Optional ranger features"); var TCoE_Primal_Awareness = { name : "Primal Awareness", source : [["T", 57]], description : desc([ "I get bonus spells known, which do not count against the number of spells I can know", "In addition, I can cast each once per long rest without expending a spell slot" ]), calcChanges : { spellList : [ function(spList, spName, spType) { // Remove the bonus spells from the normally selectable list if ((spName === "ranger" || spName === "rangerua") && spType.indexOf("bonus") === -1) { if (!spList.notspells) spList.notspells = []; spList.notspells = spList.notspells.concat(["speak with animals", "beast sense", "speak with plants", "locate creature", "commune with nature"]); } }, "I know the following spells, without them counting towards the maximum number of spells I can know: Speak with Animals, Beast Sense, Speak with Plants, Locate Creature, and Commune with Nature." ] }, spellcastingBonus : [{ name : "Primal Awareness", spells : ["speak with animals", "beast sense", "speak with plants", "locate creature", "commune with nature"], selection : ["speak with animals", "beast sense", "speak with plants", "locate creature", "commune with nature"], firstCol : "oncelr+markedbox", times : levels.map(function (n) { return n < 5 ? 1 : n < 9 ? 2 : n < 13 ? 3 : n < 17 ? 4 : 5; }) }] }; CreateClassFeatureVariant("ranger", "primeval awareness", "Primal Awareness", TCoE_Primal_Awareness); var TCoE_Ranger_Martial_Versatility = { name : "Martial Versatility", extraname : "Optional Ranger 4", source : [["T", 57]], description : " [ASI = Ability Score Improvement]\n Whenever I gain an ASI from the ranger class, I can change my ranger fighting style", prereqeval : function (v) { return (classes.known.ranger && classes.known.ranger.level >= 4) || (classes.known.rangerau && classes.known.rangerau.level >= 4) ? true : "skip"; } }; AddFeatureChoice(ClassList.ranger.features.spellcasting, true, "Martial Versatility (prereq: level 4 ranger)", TCoE_Ranger_Martial_Versatility, "Optional ranger features"); var TCoE_Natures_Veil = { name : "Nature's Veil", source : [["T", 57]], description : desc([ "As a bonus action, I can become invisible along with any equipment I'm wearing/carrying", "This invisibility lasts until the start of my next turn" ]), action : [["bonus action", ""]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", }; CreateClassFeatureVariant("ranger", "hide in plain sight", "Nature's Veil", TCoE_Natures_Veil); // Add the Ranger alternative class features also to the Revised Ranger, if it exists after all scripts have ran RunFunctionAtEnd(function() { if (!ClassList["rangerua"]) return; CreateClassFeatureVariant("rangerua", "natural explorer", "Deft Explorer", TCoE_Deft_Explorer); // Add Favored Foe as an alternative choice (can't be done by automation because of choices) and add "Favored Foe" variant option // Move some attributes from the main object to the favored enemy choice objects ['additional', 'languageProfs', 'calcChanges'].forEach( function(attr) { var fea = ClassList.rangerua.features["favored enemy"]; if (!fea[attr]) return; // Move the attribute to each of the choices for (var i = 0; i < fea.choices.length; i++) { var aCh = fea[fea.choices[i].toLowerCase()]; if (aCh.source) continue; // don't do options that are not part of the original entry (which don't have a source) aCh[attr] = fea[attr]; } // Now delete the attributes from the parent object delete fea[attr]; }); // Now add the alternative class feature as another choice AddFeatureChoice(ClassList.rangerua.features["favored enemy"], false, "[alternative feature] Favored Foe", TCoE_Favored_Foe); AddFeatureChoice(ClassList.rangerua.features.spellcasting, true, "Additional Ranger Spells (prereq: level 2 ranger)", TCoE_Additional_Ranger_Spells, "Optional ranger features"); AddFeatureChoice(ClassList.rangerua.features.spellcasting, true, "Spellcasting Focus (prereq: level 2 ranger)", TCoE_Ranger_Spellcasting_Focus, "Optional ranger features"); CreateClassFeatureVariant("rangerua", "primeval awareness", "Primal Awareness", TCoE_Primal_Awareness); AddFeatureChoice(ClassList.rangerua.features.spellcasting, true, "Martial Versatility (prereq: level 4 ranger)", TCoE_Ranger_Martial_Versatility, "Optional ranger features"); CreateClassFeatureVariant("rangerua", "hide in plain sight", "Nature's Veil", TCoE_Natures_Veil); }); // Ranger (Beast Master) alternative class feature if (ClassSubList["ranger-beast master"]) { var TCoE_Primal_Companion_Attributes = { hdLinked : ["ranger", "spell-less ranger"], languages : "understands the languages of its master but can't speak", features : [{ name : "Master", description : "The beast obeys the commands of its master and shares its proficiency bonus. It takes its turn during that of its master, on the same initiative count. It can move and take reactions on its own, but only takes the Dodge action on its turn unless its master takes a bonus action to command it to take another action. Its master can also forgo one attack during their Attack action to command the beast to take the Attack action. If its master is incapacitated, the beast can take any action, not just Dodge. The beast vanishes if its master dies." }], traits : [{ name : "Primal Rebirth", description : "Within an hour of the beast's death, its master can take an action to touch it and expend a spell slot to have it return to full HP after 1 minute." }, { name : "Primal Bond", description : "The beast adds it proficiency bonus to all its ability check and saving throws." }, { name : "Exceptional Training (Beast Master 7)", minlevel : 7, description : "The beast's attacks count as magical for overcoming resistances and immunities.", eval : function(prefix, lvl) { AddString(prefix + "Comp.Use.Attack.1.Description", "Counts as magical", "; "); }, removeeval : function(prefix, lvl) { RemoveString(prefix + "Comp.Use.Attack.1.Description", "Counts as magical"); } }, { name : "Bestial Fury (Beast Master 11)", minlevel : 11, description : "When commanded to take the Attack action, the beast can make 2 attacks as part of its Attack action.", eval : function(prefix, lvl) { Value(prefix + "Comp.Use.Attack.perAction", 2); }, removeeval : function(prefix, lvl) { Value(prefix + "Comp.Use.Attack.perAction", 1); } }], addMod : [ { type : "skill", field : "all", mod : "Prof", text : "The primal companion adds it proficiency bonus to all its ability check and saving throws." }, { type : "skill", field : "Init", mod : "Prof", text : "The primal companion adds it proficiency bonus to all its ability check and saving throws." }, { type : "save", field : "all", mod : "Prof", text : "The primal companion adds it proficiency bonus to all its ability check and saving throws." } ], calcChanges : { hp : function (totalHD, HDobj, prefix) { if (!classes.known.ranger && !classes.known["spell-less ranger"]) return; var rngrLvl = classes.known.ranger ? classes.known.ranger.level : classes.known["spell-less ranger"].level; var multiplier = What(prefix + "Comp.Use.HD.Die") == 6 ? [4, "four"] : [5, "five"]; var rngrLvlM = multiplier[0] * rngrLvl; HDobj.alt.push(multiplier[0] + rngrLvlM); HDobj.altStr.push(" = " + multiplier[0] + " as a base\n + " + multiplier[0] + " \xD7 " + rngrLvl + " from " + multiplier[1] + " times its master's ranger level (" + rngrLvlM + ")"); }, setAltHp : true } }; CreateClassFeatureVariant("ranger-beast master", "subclassfeature3", "Primal Companion", { name : "Primal Companion", source : [["T", 61]], description : desc([ "When I finish a long rest, I can summon a primal beast of the land, sea, or sky in 5 ft", "I determine what animal it looks like, but it always has primal markings", "It is friendly to me and my allies, obeys my commands, and acts during my turn", "Unless I use a bonus action to command it, it only takes the Dodge action on its turn", "I can also forgo one attack of my Attack action to command it to take the Attack action", "It can take reactions and move on its turn even if I don't command it", "As an action within 1 hour of it dying, I can touch it and expend a spell slot to revive it", "It then returns to full HP in 1 minute; It vanishes if I summon another one or if I die" ]), action : [ ["bonus action", " (command)"], ["action", " (revive)"] ], creaturesAdd : [ ["Beast of the Land", true], ["Beast of the Sea", true], ["Beast of the Sky", true] ], creatureOptions : [{ name : "Beast of the Land", source : [["T", 61]], size : 3, type : "Beast", alignment : "Unaligned", ac : "11+Dex+Prof", hp : 20, hd : [3, 8], hdLinked : TCoE_Primal_Companion_Attributes.hdLinked, speed : "40 ft, climb 40 ft", scores : [14, 14, 15, 8, 14, 11], senses : "Darkvision 60 ft", passivePerception : 12, languages : TCoE_Primal_Companion_Attributes.languages, challengeRating : "1/4", proficiencyBonus : 2, proficiencyBonusLinked : true, attacksAction : 1, attacks : [{ name : "Maul", ability : 5, damage : [1, 8, "slashing"], modifiers : ["", "Prof"], range : "Melee (5 ft)", description : "+1d6 damage if hits after moving 20 ft straight in same round, see Charge", tooltip : "If the beast moves at least 20 feet straight toward a target and then hits it with a maul attack on the same turn, the target takes an extra 1d6 slashing damage. If the target is a creature, it must succeed on a Strength saving throw against your spell save DC or be knocked prone.", useSpellMod : "ranger" }, { name : "Charge", ability : 5, damage : ["Str save", "", "Knocked prone"], range : "Melee (5 ft)", description : "Str save or knocked prone; Only if maul hits after moving 20 ft straight in same round", tooltip : "If the beast moves at least 20 feet straight toward a target and then hits it with a maul attack on the same turn, the target takes an extra 1d6 slashing damage. If the target is a creature, it must succeed on a Strength saving throw against your spell save DC or be knocked prone.", abilitytodamage : false, dc : true, useSpellMod : "ranger" }], actions : [{ name : "Charge", description : "If the beast moves at least 20 ft straight toward a target and then hits it with a maul attack on the same turn, the target takes an extra 1d6 slashing damage. If the target is a creature, it must succeed on a Strength saving throw against my spell save DC or be knocked prone." }], features : TCoE_Primal_Companion_Attributes.features, traits : TCoE_Primal_Companion_Attributes.traits.map( function(n) { if (!typePF && /Exceptional Training/i.test(n.name)) { var a = newObj(n); a.description = "The beast's attacks count as magical."; return a; } else { return n; } }), addMod : TCoE_Primal_Companion_Attributes.addMod, calcChanges : TCoE_Primal_Companion_Attributes.calcChanges, minlevelLinked : TCoE_Primal_Companion_Attributes.hdLinked }, { name : "Beast of the Sea", source : [["T", 61]], size : 3, type : "Beast", alignment : "Unaligned", ac : "11+Dex+Prof", hp : 20, hd : [3, 8], hdLinked : TCoE_Primal_Companion_Attributes.hdLinked, speed : "5 ft, swim 60 ft", scores : [14, 14, 15, 8, 14, 11], senses : "Darkvision 60 ft", passivePerception : 12, languages : TCoE_Primal_Companion_Attributes.languages, challengeRating : "1/4", proficiencyBonus : 2, proficiencyBonusLinked : true, attacksAction : 1, attacks : [{ name : "Binding Strike", ability : 1, damage : [1, 6, "Pierc./Bludg."], modifiers : ["", "Prof"], range : "Melee (5 ft)", description : "On hit, target is grappled (escape DC is spell DC) and beast can't use attack on others", tooltip : "If the beast hits a target with its blinding strike, the target is grappled (escape DC equal to your spellcasting save DC). Until this grapple ends, the beast can't use this attack on another target.", useSpellMod : "ranger" }], actions : [{ name : "Amphibious", description : "The beast can breathe both air and water." }], features : TCoE_Primal_Companion_Attributes.features, traits : TCoE_Primal_Companion_Attributes.traits, addMod : TCoE_Primal_Companion_Attributes.addMod, calcChanges : TCoE_Primal_Companion_Attributes.calcChanges, minlevelLinked : TCoE_Primal_Companion_Attributes.hdLinked }, { name : "Beast of the Sky", source : [["T", 61]], size : 4, type : "Beast", alignment : "Unaligned", ac : "10+Dex+Prof", hp : 16, hd : [3, 6], hdLinked : TCoE_Primal_Companion_Attributes.hdLinked, speed : "10 ft, fly 60 ft", scores : [6, 16, 13, 8, 14, 11], senses : "Darkvision 60 ft", passivePerception : 12, languages : TCoE_Primal_Companion_Attributes.languages, challengeRating : "1/4", proficiencyBonus : 2, proficiencyBonusLinked : true, attacksAction : 1, attacks : [{ name : "Shred", ability : 2, damage : [1, 6, "slashing"], modifiers : ["", "Prof"], range : "Melee (5 ft)", useSpellMod : "ranger" }], actions : [{ name : "Flyby", description : "The beast doesn't provoke opportunity attacks when it flies out of an enemy's reach." }], features : TCoE_Primal_Companion_Attributes.features, traits : TCoE_Primal_Companion_Attributes.traits, addMod : TCoE_Primal_Companion_Attributes.addMod, calcChanges : TCoE_Primal_Companion_Attributes.calcChanges, minlevelLinked : TCoE_Primal_Companion_Attributes.hdLinked }], eval : function() { // Remove any ranger companion pages What("Template.extras.AScomp").split(",").forEach(function (prefix) { if (What(prefix + "Companion.Remember") === "companion") { DoTemplate("AScomp", "Remove", prefix, true) } }); } }); } // Ranger Subclasses var TCoE_Ranger_Subclass_Fey_Wanderer = AddSubClass("ranger", "fey wanderer", { regExpSearch : /^(?=.*fey)(?=.*wanderer).*$/i, subname : "Fey Wanderer", source : [["T", 58]], fullname : "Fey Wanderer", features : { "subclassfeature3" : { name : "Dreadful Strikes", source : [["T", 58]], minlevel : 3, description : desc([ "My weapons deal extra psychic damage, but only once per turn per creature" ]), additional : levels.map(function (n) { return n < 3 ? "" : "+1d" + (n < 11 ? 4 : 6) + " psychic damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (v.isWeapon && (classes.known.ranger || classes.known.rangerua)) { var rngrLvl = classes.known.ranger ? classes.known.ranger.level : classes.known.rangerua.level; fields.Description += (fields.Description ? '; ' : '') + 'Once per turn per target +1d' + (rngrLvl < 11 ? 4 : 6) + ' psychic damage'; }; }, "When I hit a creature with a weapon, I can deal an extra 1d4 psychic damage to the target, which can take this extra damage only once per turn. From 11th-level, this damage increases to 1d6." ] } }, "subclassfeature3.1" : { name : "Fey Wanderer Magic", source : [["T", 58]], minlevel : 3, description: desc("I get bonus spells known, which do not count against the number of spells I can know"), spellcastingExtra : ["charm person", "misty step", "dispel magic", "dimension door", "mislead"], spellcastingExtraApplyNonconform : true }, "subclassfeature3.2" : { name : "Otherworldly Glamour", source : [["T", 59]], minlevel : 3, description : desc([ "I can add my Wisdom modifier to any Charisma check I make (minimum of +1)", 'I gain proficiency in Deception, Performance, or Persuasion; Use "Choose Feature" button' ]), addMod : ["Deception", "Intimidation", "Performance", "Persuasion"].map(function(skill){return { type : "skill", field : skill, mod : "max(Wis|1)", text : "I can add my Wisdom modifier to any Charisma check I make (minimum of +1)." };}), choices : ["Deception proficiency", "Performance proficiency", "Persuasion proficiency"], "deception proficiency" : { name : "Otherworldly Glamour", description : " [Deception proficiency]\n I can add my Wisdom modifier to any Charisma check I make (minimum of +1)", skills : ["Deception"] }, "performance proficiency" : { name : "Otherworldly Glamour", description : " [Performance proficiency]\n I can add my Wisdom modifier to any Charisma check I make (minimum of +1)", skills : ["Performance"] }, "persuasion proficiency" : { name : "Otherworldly Glamour", description : " [Persuasion proficiency]\n I can add my Wisdom modifier to any Charisma check I make (minimum of +1)", skills : ["Persuasion"] } }, "subclassfeature7" : { name : "Beguiling Twist", source : [["T", 59]], minlevel : 7, description : desc([ "I have advantage on saves against being charmed or frightened; Below uses my save DC", "As a reaction when a creature I see in 120 ft succeeds its save vs. charmed or frightened,", "I can have another I see in 120 ft make a Wis save or be charmed/frightened (I choose)", "This lasts for 1 minute and the target can repeat the save at the end of each of its turns" ]), action : [["reaction", ""]], savetxt : { adv_vs : ["charmed", "frightened"] } }, "subclassfeature11" : { name : "Fey Reinforcements", source : [["T", 59]], minlevel : 11, description : desc([ "I learn Summon Fey; It needs no material component, nor counts against spells known", "Once per long rest, I can cast it without expending a spell slot", "When I cast it, I can have it not require concentration, but than its duration is 1 minute" ]), usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Fey Reinforcements", spells : ["summon fey"], selection : ["summon fey"], firstCol : 'oncelr+markedbox' }], spellChanges : { "summon fey" : { components : "V,S", compMaterial : "", duration : "Conc,1h/1min", changes : "Using my Fey Reinforcements class feature, I can cast Summon Fey without requiring material components and I can cast it once per long rest without requiring a spell slot. Whenever I start casting the spell, I can modify it so that it doesn't require concentration. If I do so, the spell's duration becomes 1 minute for that casting." } } }, "subclassfeature15" : { name : "Misty Wanderer", source : [["T", 59]], minlevel : 15, description : desc([ "I can cast Misty Step without a spell slot and can bring a willing creature in 5 ft along" ]), usages : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest", calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { if (spellKey === "misty step") { spellObj.firstCol = "oncelr+markedbox"; spellObj.description = "I and one willing creature I can see within 5 ft of me teleport 30 ft to a unoccupied space I can see"; return true; } return false; }, "Whenever I cast misty step, I can bring along one willing creature I can see within 5 ft of me. That creature teleports to an unoccupied space of my choice within 5 ft of my destination space.\nI can cast Misty Step without expending a spell slot a number of times per long rest equal to my Wisdom modifier (minimum of once)." ] } } } }); var TCoE_Ranger_Subclass_Swarmkeeper = AddSubClass("ranger", "swarmkeeper", { regExpSearch : /swarmkeeper/i, subname : "Swarmkeeper", source : [["T", 59]], fullname : "Swarmkeeper", features : { "subclassfeature3" : { name : "Gathered Swarm", source : [["T", 60]], minlevel : 3, description : levels.map(function (n) { var a = [ "I'm bonded to a swarm of nature spirits crawling in my space; I choose their appearance", "Once on each of my turns, I can have it assist me after I hit a creature with an attack:", " \u2022 The target takes an extra 1d" + (n < 11 ? 6 : 8) + " piercing damage from the swarm", " \u2022 The target must make a Strength save or be moved 15 ft horizontally by the swarm", " \u2022 The swarm moves me 5 ft horizontally" + (n < 11 ? "" : " and I have half cover until my next turn starts"), "I get to choose the direction whenever the target or I'm moved by the swarm" ]; if (n >= 11) a.splice(4, 0, " Additionally, on a failed save, I can also have the target be knocked prone"); if (n >= 20) a.pop(); return desc(a); }) }, "subclassfeature3.1" : { name : "Swarmkeeper Magic", source : [["T", 60]], minlevel : 3, description : desc([ "I learn Mage Hand; When cast, its hand takes the form of my swarming nature spirits", "I get bonus spells known, which do not count against the number of spells I can know" ]), spellcastingBonus : [{ name : "Swarmkeeper Magic", spells : ["mage hand"], selection : ["mage hand"], }], spellcastingExtra : ["faerie fire", "web", "gaseous form", "arcane eye", "insect plague"], spellcastingExtraApplyNonconform : true }, "subclassfeature7" : { name : "Writhing Tide", source : [["T", 60]], minlevel : 7, description : desc([ "As a bonus action, I can fly on my swarm for 1 minute: 10 ft flying speed and can hover" ]), action : [["bonus action", ""]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature11" : { name : "Mighty Swarm", source : [["T", 60]], minlevel : 11, description : " [improves Gathered Swarm, see above]\n Now 1d8 damage, knocks prone on failed save, or grants me half cover until next turn" }, "subclassfeature15" : { name : "Swarming Dispersal", source : [["T", 60]], minlevel : 15, description : desc([ "As a reaction when I take damage, I can gain resistance to that damage and teleport", "I vanish into my swarm and teleport to an unoccupied space within 30 ft that I can see" ]), action : [["reaction", ""]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" } } }); // Add both subclasses to the revised ranger as well, if it exists if (ClassList.rangerua) { ClassList.rangerua.subclasses[1].push(TCoE_Ranger_Subclass_Fey_Wanderer, TCoE_Ranger_Subclass_Swarmkeeper); }; // >>>>>>>>>>>>>>>>>>>>> // // >>> Rogue Options >>> // // >>>>>>>>>>>>>>>>>>>>> // // Rogue Optional Class Features AddFeatureChoice(ClassList.rogue.features["thieves cant"], true, "Steady Aim", { name : "Steady Aim", extraname : "Optional Rogue 3", source : [["T", 62]], description : desc([ "As a bonus action if I don't move during my turn, I can give myself adv. on my next attack", "This attack roll has to be in the same turn and my speed is 0 until the end of the turn" ]), action : [["bonus action", ""]], prereqeval : function (v) { return classes.known.rogue.level >= 3 ? true : "skip"; } }, "Optional 3rd-level rogue features"); // Rogue Subclasses AddSubClass("rogue", "phantom", { regExpSearch : /^(?!.*(barbarian|bard|cleric|druid|fighter|monk|paladin|ranger|sorcerer|warlock|wizard))(?=.*phantom).*$/i, subname : "Phantom", source : [["T", 62]], fullname : "Phantom", features : { "subclassfeature3" : { name : "Whispers of the Dead", source : [["UA:SR", 1]], source : [["T", 62]], minlevel : 3, description : desc([ "When I finish a rest, I gain a skill or tool proficiency of my choice until I change it again" ]), skillstxt : "Choose one skill or tool; I can change the choice whenever I finish a short or long rest" }, "subclassfeature3.1" : { name : "Wails from the Grave", source : [["T", 62]], minlevel : 3, description : levels.map(function (n) { var a = [ "Directly after I deal sneak attack damage to a creature on my turn, I " + (n < 17 ? "can" : "also") + " harm another", n < 17 ? "I then deal half my sneak attack in necrotic damage to a creature I can see within 30 ft" : "I deal half my sneak attack in necrotic damage to both it and another I can see in 30 ft" ]; if (n >= 9) a.push("I can do this my Proficiency Bonus per long rest, or by destroying a soul trinket (ST)"); return desc(a); }), usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", additional : levels.map(function (n) { return Math.ceil(n / 4) + "d6"; }), altResource : levels.map(function (n) { return n < 9 ? "" : "ST"; }) }, "subclassfeature9" : { name : "Tokens of the Departed", source : [["T", 63]], minlevel : 9, description : " [max Proficiency Bonus of soul trinkets]" + desc([ "As a reaction when I see a creature within 30 ft die, I can create a Tiny soul trinket", "The token of its life essence appears in my free hand; The DM determines its appearance", "While a soul trinket is on my person, I have advantage on death and Constitution saves", "As an action, I can destroy one of my soul trinkets and ask its associated spirit a question", "Its spirit appears and answers concisely in a language it knew; Trinket can be anywhere" ]), action : [ ["reaction", "Create Soul Trinket"], ["action", "Destroy Soul Trinket"] ], extraLimitedFeatures : [{ name : "Soul Trinkets (max Prof Bonus)", usages : "", recovery : "Special" }], savetxt : { text : ["While soul trinket is on me, Adv. on Con and death saves"] } }, "subclassfeature13" : { name : "Ghost Walk", source : [["T", 63]], minlevel : 13, description : desc([ "As a bonus action, I can assume a spectral form with 10 ft flying speed and can hover", "Attacks vs. me have disadv.; I can move through creatures and objects as difficult terrain", "This lasts 10 min; I take 1d10 force damage if I end my turn inside a creature or object", "I can assume this form once per long rest, or by destroying one of my soul trinkets (ST)" ]), action : [["bonus action", " (start/end)"]], usages : 1, recovery : "long rest", altResource : "ST" }, "subclassfeature17" : { name : "Death's Friend", source : [["T", 63]], minlevel : 17, description : desc([ "Wails from the Grave now also deals damage to the target of the original sneak attack", "If I don't have any soul trinkets at the end of a long rest, one appears in my hand" ]) } } }); AddSubClass("rogue", "soulknife", { regExpSearch : /soulknife/i, subname : "Soulknife", source : [["T", 63]], fullname : "Soulknife", abilitySave : 2, features : { "subclassfeature3" : { name : "Psionic Energy Dice", source : [["T", 64]], minlevel : 3, description : desc([ "I gain twice my proficiency bonus of psionic energy dice (PsiD) that fuel my psionics", "I regain all expended psionic energy dice after a long rest; See psionic powers on page 3", "As a bonus action once per short rest, I can regain one expended psionic energy die" ]), additional : levels.map(function(n) { return n < 3 ? "" : n < 5 ? "d6" : n < 11 ? "d8" : n < 17 ? "d10" : "d12"; }), action : [["bonus action", "Regain 1 Psionic Energy Die"]], usages : "Proficiency Bonus \xD7 2 per ", usagescalc : "event.value = Number(How('Proficiency Bonus'))*2", recovery : "long rest", extraLimitedFeatures : [{ name : "Regain 1 Psionic Energy die", usages : 1, recovery : "short rest" }], extraname : "Soulknife 3", "psi-bolstered knack" : { name : "Psionic Power: Psi-Bolstered Knack", source : [["T", 64]], additional: "1 PsiD if successful", description : desc([ "If I fail an check using a skill or tool I'm proficient with, I can add a psionic energy die to it", "The psionic energy die is only expended if this addition turns the failure into a success" ]) }, "psychic whispers" : { name : "Psionic Power: Psychic Whispers", source : [["T", 64]], description : desc([ "As an action, I can select my Prof Bonus of creatures I can see and roll a psionic energy die", "For the roll of hours, I can telepathically communicate with each and they with me", "To send or receive messages (no action), we must be within 1 mile of each other", "A creature must be able to speak a language to do this; It can end the link at any time", "The first time I do this after a long rest, I don't expend the psionic energy die (PsiD)" ]), limfeaname : "Psychic Whispers", action : [["action", ""]], usages : 1, recovery : "long rest", altResource : "PsiD" }, autoSelectExtrachoices : [{ extrachoice : "psi-bolstered knack" }, { extrachoice : "psychic whispers" }] }, "subclassfeature3.1" : { name : "Psychic Blades", source : [["T", 64]], minlevel : 3, description : desc([ "As part of an Attack action, I can manifest a psychic blade from a free hand to attack", "It vanishes immediately after making the attack and leaves no mark on its target", "As a bonus action after this attack, I can manifest and attack with another psychic blade", "To do this, my other hand needs to be free as well and this blade does only 1d4 damage" ]), action : [["bonus action", "Psychic Blade (after Attack action)"]], weaponOptions : [{ regExpSearch : /^(?=.*psychic)(?=.*blade).*$/i, name : "Psychic Blade", source : [["T", 64]], ability : 1, type : "Simple", damage : [1, 6, "psychic"], range : "Melee, 60 ft", description : "Finesse, thrown; Bonus action: 1d4 instead of 1d6", abilitytodamage : true, selectNow : true }] }, "subclassfeature9" : { name : "Soul Blades", source : [["T", 65]], minlevel : 9, description : desc([ 'My psi-suffused soul grants me more psionic powers, see the 3rd page "Notes" section', ]), extraname : "Soulknife 9", "homing strikes" : { name : "Homing Strikes", source : [["T", 65]], additional: "1 PsiD if successful", description : desc([ "If I miss an attack with my psychic blades, I can add a psionic energy die to the attack roll", "The psionic energy die is only expended if this addition turns the miss into a hit" ]) }, "psychic teleportation" : { name : "Psychic Teleportation", source : [["T", 65]], additional: "1 PsiD", description : desc([ "As a bonus action, I can teleport up to 10 ft away times the roll of my psionic energy die", "I manifest a psychic blade and throw it to an empty space I can see before teleporting to it" ]), action : [["bonus action", ""]] }, autoSelectExtrachoices : [{ extrachoice : "homing strikes" }, { extrachoice : "psychic teleportation" }] }, "subclassfeature13" : { name : "Psychic Veil", source : [["T", 65]], minlevel : 13, description : desc([ "As an action, I can become invisible along with what I'm wearing or carrying for 1 hour", "I can end it (no action); It also ends if I damage a creature or force one to make a save", "I can do this once per long rest, or by expending a psionic energy die (PsiD)" ]), action : [["action", ""]], usages : 1, recovery : "long rest", altResource : "PsiD" }, "subclassfeature17" : { name : "Rend Mind", source : [["T", 65]], minlevel : 17, description : desc([ "When I use my psychic blade to deal sneak attack damage to a target, I can have it save", "It must make a Wisdom save (DC 8 + Prof Bonus + Dex mod) or be stunned for 1 min", "It can repeat the save at the end of each of its turns to end being stunned", "I can do this once per long rest, or by expending three psionic energy dice (3 PsiD)" ]), action : [["action", ""]], usages : 1, recovery : "long rest", altResource : "3 PsiD" } } }); // >>>>>>>>>>>>>>>>>>>>>>>> // // >>> Sorcerer Options >>> // // >>>>>>>>>>>>>>>>>>>>>>>> // // Sorcerer Optional Class Features AddFeatureChoice(ClassList.sorcerer.features.spellcasting, true, "Additional Sorcerer Spells", { name : "Additional Sorcerer Spells", extraname : "Optional Sorcerer 1", source : [["T", 65]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "sorcerer" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["grease", "flame blade", "flaming sphere", "magic weapon", "vampiric touch", "fire shield", "bigby's hand", "flesh to stone", "otiluke's freezing sphere", "demiplane"]); }, "This optional class feature expands the spell list of the sorcerer class with the following spells (spell level in brackets): Grease (1), Flame Blade (2), Flaming Sphere (2), Magic Weapon (2), Vampiric Touch (3), Fire Shield (4), Bigby's Hand (5), Flesh to Stone (6), Otiluke's Freezing Sphere (6), and Demiplane (8)." ] } }, "Optional sorcerer features"); // Metamagic options AddFeatureChoice(ClassList.sorcerer.features["metamagic"], true, "Seeking Spell", { name : "Seeking Spell", source : [["T", 66]], additional: "2 sorcery points", description : desc([ "If I miss an attack roll for a spell, I can reroll the d20 and must use the new roll", "I can do this even if I already used another Metamagic option during the casting of the spell" ]) }); AddFeatureChoice(ClassList.sorcerer.features["metamagic"], true, "Transmuted Spell", { name : "Transmuted Spell", source : [["T", 66]], additional: "1 sorcery point", description : desc([ "If the spell deals one of the below damage types, I can change it to another on the list", "These damage types are: acid, cold, fire, lightning, poison, or thunder" ]) }); // Other optional features AddFeatureChoice(ClassList.sorcerer.features.spellcasting, true, "Sorcerous Versatility (prereq: level 4 sorcerer)", { name : "Sorcerous Versatility", extraname : "Optional Sorcerer 4", source : [["T", 66]], description : " [ASI = Ability Score Improvement]" + desc([ "Whenever I gain an ASI from the sorcerer class, I can change a cantrip or Metamagic choice", "I can select either another cantrip from the sorcerer spell list or another Metamagic option" ]), prereqeval : function (v) { return classes.known.sorcerer.level >= 4 ? true : "skip"; } }, "Optional sorcerer features"); AddFeatureChoice(ClassList.sorcerer.features.spellcasting, true, "Magical Guidance (prereq: level 5 sorcerer)", { name : "Magical Guidance", extraname : "Optional Sorcerer 5", source : [["T", 66]], description : " [1 sorcery point]\n When I make an ability check that fails, I can reroll the d20 and must use the new roll", prereqeval : function (v) { return classes.known.sorcerer.level >= 5 ? true : "skip"; } }, "Optional sorcerer features"); // Sorcerer Subclasses AddSubClass("sorcerer", "aberrant mind", { regExpSearch : /^(?=.*aberrant)(?=.*mind).*$/i, subname : "Aberrant Mind", source : [["T", 67]], features : { "subclassfeature1" : { name : "Psionic Spells", source : [["T", 67]], minlevel : 1, description : desc([ "I learn additional spells, which do not count towards the number of spell I can know", "Whenever I gain a sorcerer level, I can replace one of these with another of the same level", "It must be a divination or enchantment spell on the sorcerer, wizard, or warlock spell list" ]), spellcastingBonus : [{ name : "Psionic Spells (cantrip)", "class" : ["sorcerer", "warlock", "wizard"], school : ["Ench", "Div"], level : [0, 0], extraspells : ["mind sliver"], selection : ["mind sliver"] }, { name : "Psionic Spells (1st-level)", "class" : ["sorcerer", "warlock", "wizard"], school : ["Ench", "Div"], level : [1, 1], firstCol : "PS", extraspells : ["arms of hadar", "dissonant whispers"], selection : ["arms of hadar", "dissonant whispers"], times : 2 }, { name : "Psionic Spells (2nd-level)", "class" : ["sorcerer", "warlock", "wizard"], school : ["Ench", "Div"], level : [2, 2], firstCol : "PS", extraspells : ["calm emotions", "detect thoughts"], selection : ["calm emotions", "detect thoughts"], times : levels.map(function (n) { return n < 3 ? 0 : 2; }) }, { name : "Psionic Spells (3rd-level)", "class" : ["sorcerer", "warlock", "wizard"], school : ["Ench", "Div"], level : [3, 3], firstCol : "PS", extraspells : ["hunger of hadar", "sending"], selection : ["hunger of hadar", "sending"], times : levels.map(function (n) { return n < 5 ? 0 : 2; }) }, { name : "Psionic Spells (4th-level)", "class" : ["sorcerer", "warlock", "wizard"], school : ["Ench", "Div"], level : [4, 4], firstCol : "PS", extraspells : ["evard's black tentacles", "summon aberration"], selection : ["evard's black tentacles", "summon aberration"], times : levels.map(function (n) { return n < 7 ? 0 : 2; }) }, { name : "Psionic Spells (5th-level)", "class" : ["sorcerer", "warlock", "wizard"], school : ["Ench", "Div"], level : [5, 5], firstCol : "PS", extraspells : ["rary's telepathic bond", "telekinesis"], selection : ["rary's telepathic bond", "telekinesis"], times : levels.map(function (n) { return n < 9 ? 0 : 2; }) }] }, "subclassfeature1.1" : { name : "Telepathic Speech", source : [["T", 67]], minlevel : 1, description : desc([ "As a bonus action, I can telepathic link myself with a creature within 30 ft that I can see", "If we share a language, we can talk telepathically while in my Cha mod of miles (min 1)", "This last for my level in minutes, until I'm incapacitated, I die, or I use this feature again" ]), action : [["bonus action", ""]], additional : levels.map(function (n) { return n + " minute" + (n > 1 ? "s" : ""); }) }, "subclassfeature6" : { name : "Psionic Sorcery", source : [["T", 68]], minlevel : 6, description : desc([ "I can expend sorcery points instead of a spell slot to cast a spell from my Psionic Spells", "This costs the spell's level in sorcery points, but in doing so requires no other components", "However, I do need to provide a material components if it is consumed by the spell" ]) }, "subclassfeature6.1" : { name : "Psychic Defenses", source : [["T", 68]], minlevel : 6, description: desc("I gain resistance to psychic damage and adv. on saves vs. being charmed or frightened"), dmgres : ["Psychic"], savetxt : { adv_vs : ["charmed", "frightened"] } }, "subclassfeature14" : { name : "Revelation in Flesh", source : [["T", 68]], minlevel : 14, description : desc([ "As a bonus action, I can expend 1 or more sorcery points to transform for 10 minutes", "For each sorcery point used, I gain one of the following benefits of my choice:", " \u2022 I can see any invisible creatures within 60 ft of me not behind total cover", " \u2022 I gain a flying speed equal to my walking speed and I can hover", " \u2022 I gain a swimming speed equal to twice my walking speed \u0026 I can breathe underwater", " \u2022 I can move, with equipment, through any space as narrow as 1 inch without squeezing", " Also, I can spend 5 ft of movement to escape form a grapple or nonmagical restraints" ]), action : [["bonus action", ""]], additional : "1+ sorcery points" }, "subclassfeature18" : { name : "Warping Implosion", source : [["T", 68]], minlevel : 18, description : desc([ "As an action, I can teleport to an unoccupied space I can see within 120 ft", "All within 30 ft of where I left take 3d10 force damage and must make a Strength save", "If failed, each is pulled towards the space I left, ending up in the nearest empty space", "If successful, a creature takes only half damage and isn't pulled", "I can do this once per long rest, or by expending 5 sorcery points (5 SP)" ]), action : [["action", ""]], recovery : "long rest", usages : 1, altResource : "5 SP" } } }); AddSubClass("sorcerer", "clockwork soul", { regExpSearch : /^((?=.*(sorcerer|witch))(?=.*mechanus)|(?=.*clockwork)(?=.*soul)).*$/i, subname : "Clockwork Soul", source : [["T", 68]], fullname : "Clockwork Soul", features : { "subclassfeature1" : { name : "Clockwork Magic", source : [["T", 68]], minlevel : 1, description : desc([ "I learn additional spells, which do not count towards the number of spell I can know", "Whenever I gain a sorcerer level, I can replace one of these with another of the same level", "It must be an abjuration or transmutation spell on the sorcerer, wizard, or warlock list" ]), spellcastingBonus : [{ name : "Clockwork Magic (1st-level)", "class" : ["sorcerer", "warlock", "wizard"], school : ["Abjur", "Trans"], level : [1, 1], extraspells : ["alarm", "protection from evil and good"], selection : ["alarm", "protection from evil and good"], times : 2 }, { name : "Clockwork Magic (2nd-level)", "class" : ["sorcerer", "warlock", "wizard"], school : ["Abjur", "Trans"], level : [2, 2], extraspells : ["aid", "lesser restoration"], selection : ["aid", "lesser restoration"], times : levels.map(function (n) { return n < 3 ? 0 : 2; }) }, { name : "Clockwork Magic (3rd-level)", "class" : ["sorcerer", "warlock", "wizard"], school : ["Abjur", "Trans"], level : [3, 3], extraspells : ["dispel magic", "protection from energy"], selection : ["dispel magic", "protection from energy"], times : levels.map(function (n) { return n < 5 ? 0 : 2; }) }, { name : "Clockwork Magic (4th-level)", "class" : ["sorcerer", "warlock", "wizard"], school : ["Abjur", "Trans"], level : [4, 4], extraspells : ["freedom of movement", "summon construct"], selection : ["freedom of movement", "summon construct"], times : levels.map(function (n) { return n < 7 ? 0 : 2; }) }, { name : "Clockwork Magic (5th-level)", "class" : ["sorcerer", "warlock", "wizard"], school : ["Abjur", "Trans"], level : [5, 5], extraspells : ["greater restoration", "wall of force"], selection : ["greater restoration", "wall of force"], times : levels.map(function (n) { return n < 9 ? 0 : 2; }) }] }, "subclassfeature1.1" : { name : "Restore Balance", source : [["T", 69]], minlevel : 1, description : desc([ "As a reaction when a creature I can see in 60 ft is about to roll a d20 with adv./disadv.,", "I can prevent that roll from being affected by advantage and disadvantage" ]), action : [["reaction", ""]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature6" : { name : "Bulwark of Law", source : [["T", 69]], minlevel : 6, description : desc([ "As an action, I can imbue a creature I can see within 30 ft with a magical ward", "The ward has a number of d8s equal to the number of sorcery points I expend to do this", "As a reaction when the creature takes damage, it can expend any number of those dice", "The dice roll reduces the damage; The ward lasts until I finish a long rest or do this again" ]), additional : "1-5 sorcery points; 1d8 per point", action : [["action", ""]] }, "subclassfeature14" : { name : "Trance of Order", source : [["T", 69]], minlevel : 14, description : desc([ "As a bonus action, I can enter a state of clockwork consciousness for 1 minute", "While in this state, attack rolls against me can't benefit from advantage", "Also, I can then treat a d20 roll below 9 as a 10 for my attack rolls, checks, and saves", "I can do this once per long rest, or by expending 5 sorcery points (5 SP)" ]), action : [["bonus action", ""]], usages : 1, recovery : "long rest", altResource : "5 SP" }, "subclassfeature18" : { name : "Clockwork Cavalcade", source : [["T", 69]], minlevel : 18, description : desc([ "As an action, I can call spirits to bring balance in a 30-ft cube originating from me", "Inside the cube, the intangible spirits do all the following before vanishing:", " \u2022 Restore up to 100 HP, divided among the creatures in the cube as I choose", " \u2022 Repair all damaged objects entirely in the cube instantly", " \u2022 End every spell of 6th-level or lower on objects or creatures of my choice in the cube", "I can do this once per long rest, or by expending 7 sorcery points (7 SP)" ]), action : [["action", ""]], usages : 1, recovery : "long rest", altResource : "7 SP" } } }); // >>>>>>>>>>>>>>>>>>>>>>> // // >>> Warlock Options >>> // // >>>>>>>>>>>>>>>>>>>>>>> // // Warlock Optional Class Features AddFeatureChoice(ClassList.warlock.features["pact magic"], true, "Additional Warlock Spells", { name : "Additional Warlock Spells", extraname : "Optional Warlock 1", source : [["T", 70]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "warlock" || (spType.indexOf("bonus") !== -1 && (!spList["class"] || spList["class"] !== "warlock"))) return; spList.extraspells = spList.extraspells.concat(["mislead", "planar binding", "teleportation circle", "gate", "weird"]); }, "This optional class feature expands the spell list of the warlock class with the following spells (spell level in brackets): Mislead (5), Planar Binding (5), Teleportation Circle (5), Gate (9), and Weird (9)." ] } }, "Optional 1st-level warlock features"); AddWarlockPactBoon("Pact of the Talisman", { name : "Pact of the Talisman", source : [["T", 70]], description : desc([ "When the wearer of this amulet fails an ability check, they can add +1d4 to the roll", "I can give the talisman to others to use; The talisman turns to ash when I die", "If I lose my talisman, I can perform a 1-hour ceremony to gain a replacement", "This ceremony destroys the previous amulet and can be done during a short or long rest" ]), usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus')", recovery : "long rest" }); AddFeatureChoice(ClassList.warlock.features["pact boon"], true, "Eldritch Versatility", { name : "Eldritch Versatility", extraname : "Optional Warlock 4", source : [["T", 70]], description : " [ASI = Ability Score Improvement]" + desc([ "Whenever I gain an ASI from the warlock class, I can change one of the following things:", " \u2022 I can replace one warlock cantrip with another cantrip from the warlock spell list", " \u2022 I can replace my pact boon for another", " \u2022 If I have Mystic Arcanum, I can replace one spell from it with another of the same level" ]), prereqeval : function (v) { return classes.known.warlock.level >= 4 ? true : "skip"; } }, "Optional 4th-level warlock features"); // Eldritch Invocation options AddWarlockInvocation("Bond of the Talisman (prereq: level 12 warlock, Pact of the Talisman)", { name : "Bond of the Talisman", source : [["T", 70]], submenu : "[improves Pact of the Talisman]", description : desc([ "As an action, I can teleport to the unoccupied space closest to the wearer of my talisman", "The talisman's wearer can do the same to teleport to me; Only works if both on same plane" ]), prereqeval : function(v) { return classes.known.warlock.level >= 12 && GetFeatureChoice('class', 'warlock', 'pact boon').indexOf("pact of the talisman") !== -1; }, action : [["action", ""]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus')", recovery : "long rest" }); AddWarlockInvocation("Eldritch Mind", { name : "Eldritch Mind", source : [["T", 71]], description: desc("I have advantage on my Constitution saving throws to maintain concentration on a spell"), savetxt : { text : "Adv. on Con (Concentration) saves" } }); AddWarlockInvocation("Far Scribe (prereq: level 5 warlock, Pact of the Tome)", { name : "Far Scribe", source : [["T", 71]], submenu : "[improves Pact of the Tome]", description : desc([ "My book of shadows has a new page; As an action, a creature can write its name on it", "This page can hold my Proficiency Bonus in creature names; I can remove one as an action", "I can cast Sending without a spell slot or material components, targeting one on the page", "Instead of saying the message, I write it on the page and any reply appears there as well", "This writing disappears after 1 minute; The target still hears the message in their mind" ]), prereqeval : function(v) { return classes.known.warlock.level >= 5 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the tome'; }, action : [["action", " (erase name)"]], spellcastingBonus : [{ name : "Far Scribe", spells : ["sending"], selection : ["sending"], firstCol : "atwill" }], spellChanges : { "sending" : { components : "V,S", compMaterial : "", description : "Send 25 word message to crea named in book of shadows; it recognizes me and can respond 25 words", changes : "By using Far Scribe, I can cast Sending without using a spell slot or material components, but only to target one of the creatures that wrote their name in my book of shadows. Instead of speaking the message, I write it in my book and any response appears there as well, lasting for 1 minute. The target still hears the message in their mind." } } }); AddWarlockInvocation("Gift of the Protectors (prereq: level 9 warlock, Pact of the Tome)", { name : "Gift of the Protectors", source : [["T", 71]], submenu : "[improves Pact of the Tome]", description : desc([ "My book of shadows has a new page; As an action, a creature can write its name on it", "This page can hold my Proficiency Bonus in creature names; I can remove one as an action", "If a creature whose name is on the page drops to 0 HP, it magically drops to 1 HP instead", "This doesn't work if the creature would be killed outright" ]), prereqeval : function(v) { return classes.known.warlock.level >= 9 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the tome'; }, action : [["action", " (erase name)"]], usages : 1, recovery : "long rest" }); AddWarlockInvocation("Investment of the Chain Master (prereq: Pact of the Chain)", { name : "Investment of the Chain Master", source : [["T", 71]], submenu : "[improves Pact of the Chain]", description : desc([ "When I cast Find Familiar, the summoned create has additional benefits:", "\u2022 It gains a flying or swimming speed of 40 ft (my choice at casting)", "\u2022 As a bonus action, I can command it to take the Attack action", "\u2022 Its weapon attacks are considered magical for overcoming immunities and resistances", "\u2022 If it forces a creature to make a saving throw, it uses my spell save DC", "\u2022 As a reaction when it takes damage, I can grant it resistance against that damage" ]), action : [["bonus action", " (command to attack)"], ["reaction", " (give resistance)"]], prereqeval : function(v) { return GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the chain'; }, calcChanges : { companionCallback : [function(prefix, oCrea, bAdd, sCompType) { if (sCompType !== "pact_of_the_chain") return; var strFea = "##\u25C6 Investment of the Chain Master (TCoE 71)##. The familiar gains 40 ft fly or swim speed (my choice), its attacks are considered magical, and it can use my spell save DC instead of its own DC's (if any)."; var strSpd = "fly or swim 40 ft"; if (What("Unit System") === "metric") { strFea = ConvertToMetric(strFea, 0.5); strSpd = ConvertToMetric(strSpd, 0.5); } var aFnc = bAdd ? AddString : RemoveString; aFnc(prefix + "Comp.Use.Features", strFea, true); aFnc(prefix + "Comp.Use.Speed", strSpd, typePF ? ",\n" : ", "); for (var i = 1; i <= 3; i++) { var baseFld = prefix + "Comp.Use.Attack." + i; var weaDescrFld = baseFld + ".Description"; var strWeaDescr = What(weaDescrFld); if (bAdd && What(baseFld + ".Weapon Selection") && !(/(,|;)? ?counts as magical/i).test(strWeaDescr)) { AddString(weaDescrFld, "Counts as magical", "; "); } else if (!bAdd) { Value(weaDescrFld, strWeaDescr.replace(/(,|;)? ?counts as magical/i, '')); } } }, "My pact of the chain familiars gain an extra feature listing the extra bonuses they gain."] } }); AddWarlockInvocation("Protection of the Talisman (prereq: level 7 warlock, Pact of the Talisman)", { name : "Protection of the Talisman", source : [["T", 71]], submenu : "[improves Pact of the Talisman]", description: desc("When the wearer of my talisman fails a saving throw, they can add +1d4 to the roll"), prereqeval : function(v) { return classes.known.warlock.level >= 7 && GetFeatureChoice('class', 'warlock', 'pact boon').indexOf("pact of the talisman") !== -1; }, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus')", recovery : "long rest" }); AddWarlockInvocation("Rebuke of the Talisman (prereq: Pact of the Talisman)", { name : "Rebuke of the Talisman", source : [["T", 71]], submenu : "[improves Pact of the Talisman]", description : desc([ "As a reaction when the wearer of my talisman is hit, I deal damage and push the attacker", "To be able to do this, I have to see the attacker and it has to be within 30 ft of me", "I deal it my Proficiency Bonus in psychic damage and push it 10 ft away from the talisman" ]), prereqeval : function(v) { return GetFeatureChoice('class', 'warlock', 'pact boon').indexOf("pact of the talisman") !== -1; }, action : [["reaction", ""]] }); AddWarlockInvocation("Undying Servitude (prereq: level 5 warlock)", { name : "Undying Servitude", description: desc("Once per long rest, I can cast Animate Dead without using a spell slot"), source : [["T", 71]], submenu : "[warlock level 5+]", usages : 1, additional : "no spell slot", recovery : "long rest", spellcastingBonus : [{ name : "Undying Servitude", spells : ["animate dead"], selection : ["animate dead"], firstCol : "oncelr" }], prereqeval : function(v) { return classes.known.warlock.level >= 5; } }); // Warlock Subclasses AddSubClass("warlock", "the fathomless", { regExpSearch : /^(?=.*warlock)(?=.*fathomless).*$/i, subname : "the Fathomless", source : [["T", 72]], spellcastingExtra : ["create or destroy water", "thunderwave", "gust of wind", "silence", "lightning bolt", "sleet storm", "control water", "summon elemental", "bigby's hand", "cone of cold"], features : { "subclassfeature1" : { name : "Tentacle of the Deeps", source : [["T", 72]], minlevel : 1, description : desc([ "As a bonus action, I can summon or move a spectral tentacle and make an attack with it", "I can summon it to a space within 60 ft that I can see or move an existing one 30 ft", "I make melee spell attacks with 10 ft reach with it that deal cold damage", "Creatures hit by the tentacle suffer 10 ft speed reduction until the start of my next turn", "The 10-ft long tentacle lasts for 1 minute or until I summon another" ]), action : [["bonus action", " (summon/move)"]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", additional : levels.map(function (n) { return (n < 10 ? 1 : 2) + "d8"; }), weaponOptions : [{ regExpSearch : /^(?=.*tentacle)(?=.*\b(deeps?|spectral)\b).*$/i, name : "Tentacle of the Deeps", source : [["T", 72]], ability : 6, type : "Spell", damage : [1, 8, "Cold"], range : "Melee (10 ft)", description : "On hit, -10 ft speed until my next turn starts", abilitytodamage : false, tentacleOfTheDeeps : true, selectNow : true }], calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.tentacleOfTheDeeps && classes.known.warlock.level >= 10) { fields.Damage_Die = '2d8'; }; }, '', 1 ] } }, "subclassfeature1.1" : { name : "Gift of the Sea", source : [["T", 72]], minlevel : 1, description: desc("I have a swimming speed of 40 ft and I can breathe underwater"), speed : { swim : { spd : 40, enc : 30 } } }, "subclassfeature6" : { name : "Oceanic Soul", source : [["T", 73]], minlevel : 6, description : desc([ "I gain resistance to cold damage now that I'm even more at home in the depths", "While I'm fully submerged, others who are as well can understand my speech and I theirs" ]), dmgres : ["Cold"], spellChanges : { "summon elemental" : { description : "Summon Water Elemental Spirit; obeys commands; takes turn after mine; vanishes at 0 hp (400gp)", changes : "My warlock spell Summon Elemental can only call forth an elemental spirit of water." } } }, "subclassfeature6.1" : { name : "Guardian Coil", source : [["T", 73]], minlevel : 6, description : desc([ "As a reaction when I or a creature I see in 10 ft of my tentacle is damaged, it can help", "The tentacle interposes itself, reducing the damage of the attack for that creature" ]), action : [["reaction", ""]], additional : levels.map(function (n) { return (n < 10 ? 1 : 2) + "d8 damage reduced"; }) }, "subclassfeature10" : { name : "Grasping Tentacles", source : [["T", 73]], minlevel : 10, description : desc([ "I learn Evard's Black Tentacles; Once per long rest, I can cast it without using a spell slot", "It counts as a warlock spell for me, but not towards the number of spell I can know", "Whenever I cast it, I gain temporary hit points equal to my warlock level", "Moreover, damage can't break my concentration on this spell" ]), action : [["action", ""]], additional : levels.map(function (n) { return n < 10 ? "" : n + " temp HP; 1\xD7 per long rest no SS"; }), spellcastingBonus : [{ name : "Grasping Tentacles", spells : ["evard's black tentacles"], selection : ["evard's black tentacles"], firstCol : "oncelr+markedbox" }], extraLimitedFeatures : [{ name : "Evard's Black Tentacles (no spell slot)", usages : 1, recovery : "long rest" }], calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { if (spellKey === "evard's black tentacles") { spellObj.description = "I temp hp; All enter/start in 20-ft rad save or restrained \u0026 3d6 Bludg. dmg/rnd; Str/Dex check escape"; spellObj.duration = "Conc*, 1 min"; return true; } }, "Whenever I cast Evard's Black Tentacles, I gain temporary hit points equal to my warlock level.\n \u2022 Damage can't break my concentration on this spell." ] } }, "subclassfeature14" : { name : "Fathomless Plunge", source : [["T", 73]], minlevel : 14, description : desc([ "As an action, I can teleport myself and up to 5 willing creatures I can see within 30 ft", "We reappear up to 1 mile away, inside or within 30 ft of a body of water I've seen" ]), action : [["action", ""]], recovery : "short rest", usages : 1 } } }); AddSubClass("warlock", "the genie", { regExpSearch : /^(?=.*warlock)(?=.*(genie|dao|djinni|efreeti|marid)).*$/i, subname : "the Genie", source : [["T", 73], ["UA:SR", 2]], features : { "subclassfeature1" : { name : "Choose Genie Kind", source : [["T", 73], ["UA:SR", 3]], minlevel : 1, description : desc('Use the "Choose Feature" button above to choose the kind of genie your patron is'), calcChanges : { spellList : [ function(spList, spName, spType) { if (spType.indexOf("bonus") !== -1 && spList.name && /mystic arcanum/i.test(spList.name) && spList.level[0] === 9) { spList.extraspells.push("wish"); } else if (spType.indexOf("bonus") === -1 && spName === "warlock") { if (!spList.notspells) spList.notspells = []; spList.notspells.push("wish"); } }, "The Genie patron adds Wish as a spell available for my 9th-level Mystic Arcanum selection." ] }, choices : ["Dao (earth)", "Djinni (air)", "Efreeti (fire)", "Marid (water)"], "dao (earth)" : { name : "Dao Genie Patron", description: desc("My genie patron is a Dao, associated with earth"), spellcastingExtra : ["detect evil and good", "sanctuary", "phantasmal force", "spike growth", "create food and water", "meld into stone", "phantasmal killer", "stone shape", "creation", "wall of stone", "wish"] }, "djinni (air)" : { name : "Djinni Genie Patron", description: desc("My genie patron is a Djinni, associated with air"), spellcastingExtra : ["detect evil and good", "thunderwave", "gust of wind", "phantasmal force", "create food and water", "wind wall", "greater invisibility", "phantasmal killer", "creation", "seeming", "wish"] }, "efreeti (fire)" : { name : "Efreeti Genie Patron", description: desc("My genie patron is an Efreeti, associated with fire"), spellcastingExtra : ["burning hands", "detect evil and good", "phantasmal force", "scorching ray", "create food and water", "fireball", "fire shield", "phantasmal killer", "creation", "flame strike", "wish"] }, "marid (water)" : { name : "Marid Genie Patron", description: desc("My genie patron is a Marid, associated with water"), spellcastingExtra : ["detect evil and good", "fog cloud", "blur", "phantasmal force", "create food and water", "sleet storm", "control water", "phantasmal killer", "cone of cold", "creation", "wish"] }, choiceDependencies : [{ feature : "subclassfeature1.3" }, { feature : "subclassfeature6" }] }, "subclassfeature1.1" : { name : "Genie's Vessel", source : [["T", 73], ["UA:SR", 3]], minlevel : 1, description : desc([ "My patron gifts me a magical vessel, a Tiny object, granting me a measure of its power", "I choose the vessel's appearance; I can use it as my spellcasting focus for warlock spells", "The vessel's AC is my spell save DC and it has my warlock level + Proficiency Bonus in HP", "If it is destroyed or lost, I can get a replacement with a 1-hour ceremony during a rest" ]) }, "subclassfeature1.2" : { name : "Genie's Vessel: Bottled Respite", source : [["T", 74], ["UA:SR", 3]], minlevel : 1, description : desc([ "As an action, I can vanish and enter the extradimensional space inside my genie's vessel", "The vessel stays in its location; The space inside is a 20-ft high, 20-ft radius cylinder", "As a bonus action, I can exit my vessel; I exit it early if I die or the vessel is destroyed", "I can remain inside for twice my Proficiency Bonus in hours; Objects can be left inside" ]), limfeaname : "Bottled Respite", action : [["action", " (enter)"], ["bonus action", " (eject)"]], usages : 1, recovery : "long rest" }, "subclassfeature1.3" : { name : "Genie's Wrath", source : [["T", 73], ["UA:SR", 3]], minlevel : 1, description : desc([ "I can deal bonus damage on my attacks, its type depending on my patron's genie kind", 'Use the "Choose Feature" button above to choose the kind of genie your patron is' ]), choices : ["dao (earth)", "djinni (air)", "efreeti (fire)", "marid (water)"], choicesNotInMenu : true, "dao (earth)" : { name : "Dao's Wrath", description : " [once on each of my turns]\n When I hit an attack, I can have it deal my Prof Bonus in extra bludgeoning damage", calcChanges : { atkAdd : [ function (fields, v) { if (!v.isDC) { fields.Description += (fields.Description ? '; ' : '') + 'Once per my turn +' + How('Proficiency Bonus') + ' bludgeoning damage'; } }, "Once on each of my turns, I can have one of my attacks that hit deal extra bludgeoning damage equal to my proficiency bonus." ] } }, "djinni (air)" : { name : "Djinni's Wrath", description : " [once on each of my turns]\n When I hit an attack, I can have it deal my Proficiency Bonus in extra thunder damage", calcChanges : { atkAdd : [ function (fields, v) { if (!v.isDC) { fields.Description += (fields.Description ? '; ' : '') + 'Once per my turn +' + How('Proficiency Bonus') + ' thunder damage'; } }, "Once on each of my turns, I can have one of my attacks that hit deal extra thunder damage equal to my proficiency bonus." ] } }, "efreeti (fire)" : { name : "Efreeti's Wrath", description : " [once on each of my turns]\n When I hit an attack, I can have it deal my Proficiency Bonus in extra fire damage", calcChanges : { atkAdd : [ function (fields, v) { if (!v.isDC) { fields.Description += (fields.Description ? '; ' : '') + 'Once per my turn +' + How('Proficiency Bonus') + ' fire damage'; } }, "Once on each of my turns, I can have one of my attacks that hit deal extra fire damage equal to my proficiency bonus." ] } }, "marid (water)" : { name : "Marid's Wrath", description : " [once on each of my turns]\n When I hit an attack, I can have it deal my Proficiency Bonus in extra cold damage", calcChanges : { atkAdd : [ function (fields, v) { if (!v.isDC) { fields.Description += (fields.Description ? '; ' : '') + 'Once per my turn +' + How('Proficiency Bonus') + ' cold damage'; } }, "Once on each of my turns, I can have one of my attacks that hit deal extra cold damage equal to my proficiency bonus." ] } } }, "subclassfeature6" : { name : "Elemental Gift", source : [["T", 75], ["UA:SR", 3]], minlevel : 6, description : desc([ "I gain resistance to a damage type depending on my patron's genie kind", 'Use the "Choose Feature" button above to choose the kind of genie your patron is', "As a bonus action, I can gain a flying speed of 30 ft and I can hover, for 10 minutes" ]), choices : ["dao (earth)", "djinni (air)", "efreeti (fire)", "marid (water)"], choicesNotInMenu : true, "dao (earth)" : { name : "Dao's Elemental Gift", description : desc([ "I gain resistance to bludgeoning damage", "As a bonus action, I can gain a flying speed of 30 ft and I can hover, for 10 minutes" ]), action : [["bonus action", " (start fly)"]], dmgres : ["Bludgeoning"] }, "djinni (air)" : { name : "Djinni's Elemental Gift", description : desc([ "I gain resistance to thunder damage", "As a bonus action, I can gain a flying speed of 30 ft and I can hover, for 10 minutes" ]), action : [["bonus action", " (start fly)"]], dmgres : ["Thunder"] }, "efreeti (fire)" : { name : "Efreeti's Elemental Gift", description : desc([ "I gain resistance to fire damage", "As a bonus action, I can gain a flying speed of 30 ft and I can hover, for 10 minutes" ]), action : [["bonus action", " (start fly)"]], dmgres : ["Fire"] }, "marid (water)" : { name : "Marid's Elemental Gift", description : desc([ "I gain resistance to cold damage", "As a bonus action, I can gain a flying speed of 30 ft and I can hover, for 10 minutes" ]), action : [["bonus action", " (start fly)"]], dmgres : ["Cold"] }, additional : "Fly 10 min", usages : "Prof Bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature10" : { name : "Sanctuary Vessel", source : [["T", 75], ["UA:SR", 3]], minlevel : 10, description : desc([ "When I enter my vessel I can have up to 5 willing creatures I can see in 30 ft join me", "As a bonus action, I can eject any number of creatures from my genie's vessel", "Everyone is ejected when I leave it, I die, or if the vessel is destroyed", "Anyone who remains in the vessel for at least 10 min gains the benefits of a short rest", "Also, HD spend as part of this short rest has my Proficiency Bonus added to the roll" ]) }, "subclassfeature14" : { name : "Limited Wish", source : [["T", 75], ["UA:SR", 3]], minlevel : 14, additional: "1\xD7 per 1d4 long rests", description : desc([ "As an action, I can cast a 6th-level or lower spell with a casting time time of one action", "This can be any spell; It doesn't require any costly components, it simply takes effect" ]), action : [["action", ""]], extraLimitedFeatures : [{ name : "Limited Wish", usages : 1, recovery : "1d4 LR" }] } } }); // >>>>>>>>>>>>>>>>>>>>>> // // >>> Wizard Options >>> // // >>>>>>>>>>>>>>>>>>>>>> // // Wizard Optional Class Features AddFeatureChoice(ClassList.wizard.features.spellcasting, true, "Additional Wizard Spells", { name : "Additional Wizard Spells", extraname : "Optional Wizard 1", source : [["T", 75]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "wizard" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["augury", "enhance ability", "speak with dead", "divination"]); }, "This optional class feature expands the spell list of the wizard class with the following spells (spell level in brackets): Augury (2), Enhance Ability (2), Speak with Dead (3), and Divination (4)." ] } }, "Optional 1st-level wizard features"); AddFeatureChoice(ClassList.wizard.features["arcane recovery"], true, "Cantrip Formulas", { name : "Cantrip Formulas", extraname : "Optional Wizard 3", source : [["T", 76]], description : desc([ "I have scribed arcane formulas in my spellbook with which I formulate cantrips in my mind", "Whenever I finish a long rest, I can use this to change a wizard cantrip I know for another" ]), prereqeval : function (v) { return classes.known.wizard.level >= 3 ? true : "skip"; }, spellcastingPreparedCantrips: { "class": ["wizard"] }, }, "Optional 3rd-level wizard features"); // Wizard Subclasses AddSubClass("wizard","order of scribes", { regExpSearch : /^(?=.*wizard)(?=.*order)(?=.*scribes?).*$|scrivener/i, subname : "Order of Scribes", subnameShort: "Scribes", source : [["T", 77]], features : { "subclassfeature2" : { name : "Wizardly Quill", source : [["T", 77]], minlevel : 2, description : desc([ "As a bonus action, I can magically create a Tiny quill with the following properties:", " \u2022 It doesn't require ink and produces ink in the color of my choice when writing with it", " \u2022 I require only 2 minutes per spell level to transcribe spells into my spellbook with it", " \u2022 As a bonus action, I can use it to erase a text written with it if within 5 ft of the text", "The quill disappear if I create another or if I die" ]), action : [["bonus action", " (create/erase)"]] }, "subclassfeature2.1" : { name : "Awakened Spellbook", source : [["T", 77]], minlevel : 2, description : desc([ "My spellbook gains sentience and grants me the following benefits while I am holding it:", " \u2022 I can use the book as a spellcasting focus for my wizard spells", " \u2022 When I cast a wizard spell using a spell slot, I can temporarily replace its damage type", " The new type must appear in my spellbook in a spell of the same level as the spell slot", " \u2022 Once per long rest, I can ritual cast a wizard spell without 10 min extra casting time", "I can replace it over a short rest, transferring its spells and sentience to a blank book" ]), additional : "fast ritual cast", usages : 1, recovery : "long rest" }, "subclassfeature6" : { name : "Manifest Mind", source : [["T", 78]], minlevel : 6, description : desc([ "As a bonus action, I can have the mind of my awakened spellbook manifest within 60 ft", "The spellbook needs to be on my person to do this; The mind is a Tiny spectral object", "The mind is intangible, doesn't occupy a space, hovers, and sheds dim light in 10 ft", "It can hear, see, has 60 ft darkvision, and telepathically shares with me what it perceives", "As a bonus action, I can dismiss it or move it up to 30 ft to an empty space I can see", "It can pass through creatures; It stops manifesting if it's over 300 ft from me or I die", "It also stop manifesting if Dispel Magic is cast on it or the awakened spellbook is no more", "I can do this once per long rest, or by expending a spell slot (SS 1+) to manifest it again" ]), action : [["bonus action", " (conjure/move/dismiss)"]], usages : 1, recovery : "long rest", altResource : "SS 1+" }, "subclassfeature6.1" : { name : "Manifest Mind: Cast Spell", source : [["T", 78]], minlevel : 6, description : desc([ "I can have wizard spells I cast on my turn originate from the mind while its manifested" ]), usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature10" : { name : "Master Scrivener", source : [["T", 78]], minlevel : 10, description : desc([ "When I finish a long rest, I can write a spell in my awakened spellbook on a blank paper", "It must be a level 1 or 2 spell with 1 action casting time; My spellbook must be in 5 ft", "As an action, I can use this scroll to cast the spell on it at one higher level than normal", "Only I can use the scroll; The scroll turns blank again when I use it or finish a long rest", "Also, using my Wizardly Quill, the gold and time I need to craft spell scrolls is halved" ]), action : [["action", " (cast scroll)"]], usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Master Scrivener scoll", "class" : "wizard", level : [1, 2], firstCol : "MS" }], calcChanges : { spellAdd : [ function (spellKey, spellObj, spName, isDuplicate) { if (!isDuplicate && spName === "wizard" && spellObj.firstCol === "MS" && (spellObj.level === 1 || spellObj.level === 2)) { // Calculate upcasting to be exactly 1 level higher var rxMatch = /(\d*d?\d+)\+(\d*d?\d+)\/(\d*SL)\b/i; while (rxMatch.test(spellObj.description)) { var aMatch = spellObj.description.match(rxMatch); var strDie1 = !isNaN(aMatch[1]) ? true : /\d+d\d+/i.test(aMatch[1]) ? aMatch[1].replace(/\d+(d\d+)/i, "$1") : false; var strDie2 = !isNaN(aMatch[2]) ? true : /\d+d\d+/i.test(aMatch[2]) ? aMatch[2].replace(/\d+(d\d+)/i, "$1") : undefined; if (!/^SL$/i.test(aMatch[3])) { // only increases if more than 1 level higher spell slot, so nothing we can do with it, just remove all upcasting removeSpellUpcasting(spellObj); } else if (/^\d/.test(aMatch[1]) && strDie1 === strDie2) { // identical type steps (e.g. 1d6+1d6/SL or 3+1/SL), so add the second to the first var strNew = (Number(aMatch[1].replace(/^(\d+).*/, "$1")) + Number(aMatch[2].replace(/^(\d+).*/, "$1"))) + aMatch[1].replace(/^\d+(.*)/, "$1"); spellObj.description = spellObj.description.replace(rxMatch, strNew); } else { // non-identical steps, so leave the first and second along, but remove the /SL spellObj.description = spellObj.description.replace(rxMatch, "$1+$2"); } } // Remove costly material components spellObj.description = spellObj.description.replace(/ \(\d+ ?gp( cons\.?)?\)/i, ''); // List only the scroll as a component from the spell spellObj.components = "M\u2020"; spellObj.compMaterial = "Spells cast from spell scrolls don't require any components other than the spell scroll itself."; return true; } }, "When I finish a long rest, I can create a scroll of a spell in my spellbook using my Master Scrivener class feature. I can then cast this spell from the scroll and the spell is cast as if using a spell slot one level higher than its spell level." ] } }, "subclassfeature14" : { name : "One with the Word", source : [["T", 78]], minlevel : 14, description : ' [see 3rd page "Notes" section]', action : [["reaction", " (when damaged)"]], advantages : [["Arcana", true]], "one with the word" : { name : "One with the Word", extraname : "Order of Scribes 14", source : [["T", 78]], description : desc([ "While my awakened spellbook is on my person, I have advantage on Int (Arcana) checks", "As a reaction when I take damage while my spellbook's mind is manifested, I can dismiss it", "In dismissing the manifested mind like this, I prevent all of the damage taken by me", "After doing so, I lose spells with a combined level of 3d6 from my awakened spellbook", "If I do not have enough spells left to cover the number rolled, I drop to 0 HP instead", "The spells vanish from my spellbook, reappearing only after I finish 1d6 long rests", "I can't cast spells that I lost this way, even if found on a scroll or in another spellbook" ]), usages : 1, recovery : "long rest" }, autoSelectExtrachoices : [{ extrachoice : "one with the word" }] } } }); // >>>>>>>>>>>>>>>>> // // >>> New Feats >>> // // >>>>>>>>>>>>>>>>> // FeatsList["artificer initiate"] = { name : "Artificer Initiate", source : [["T", 79], ["UA:F2", 1]], descriptionFull : "You've learned some of an artificer's inventiveness:\n \u2022 You learn one cantrip of your choice from the artificer spell list, and you learn one 1st-level spell of your choice from that list. Intelligence is your spellcasting ability for these spells.\n \u2022 You can cast this feat's 1st-level spell without a spell slot, and you must finish a long rest before you can cast it in this way again. You can also cast the spell using any spell slots you have.\n \u2022 You gain proficiency with one type of artisan's tools of your choice, and you can use that type of tool as a spellcasting focus for any spell you cast that uses Intelligence as its spellcasting ability.", description : typePF ? "I learn a cantrip and a 1st-level spell from the artificer's spell list. Int is my spellcasting ability for these. Once per long rest, I can cast the 1st-level spell at its lowest level without using a spell slot. I gain proficiency in one artisan's tool, which I can use as a spellcasting focus for spells I cast with Int as spellcasting ability." : "I learn one cantrip and one 1st-level spell from the artificer's spell list. Intelligence is my spellcasting ability for these. I can cast the 1st-level spell at its lowest level once per long rest without using a spell slot. I gain proficiency in one artisan's tool, which I can use as a spellcasting focus for any spell I cast that uses Intelligence as its spellcasting ability.", spellcastingBonus : [{ name : "Artificer cantrip", spellcastingAbility : 4, allowUpCasting : true, "class" : 'artificer', level : [0, 0], }, { name : "1st-level artificer spell", "class" : 'artificer', level : [1, 1], firstCol : "oncelr", }], toolProfs : [ ["Artisan's tools", 1] ] }; FeatsList["chef"] = { name : "Chef", source : [["T", 79], ["UA:F2", 1]], descriptionFull : "Time spent mastering the culinary arts has paid off, granting you the following benefits:\n \u2022 Increase your Constitution or Wisdom score by 1, to a maximum of 20.\n \u2022 You gain proficiency with cook's utensils if you don't already have it.\n \u2022 As part of a short rest, you can cook special food, provided you have ingredients and cook's utensils on hand. You can prepare enough of this food for a number of creatures equal to 4 + your proficiency bonus. At the end of the short rest, any creature who eats the food and spends one or more Hit Dice to regain hit points regains an extra 1d8 hit points.\n \u2022 With one hour of work or when you finish a long rest, you can cook a number of treats equal to your proficiency bonus. These special treats last 8 hours after being made. A creature can use a bonus action to eat one of those treats to gain temporary hit points equal to your proficiency bonus.", description : "During a short rest, I can make food for 4 + my Prof" + (typePF ? "" : "iciency") + " Bonus creatures; if they eat it and spend 1" + (typePF ? "+ HD" : " or more Hit Die") + ", they regain 1d8 HP. In one hour or during a long rest, I can make treats equal to my Prof" + (typePF ? "" : "iciency") + " Bonus that last for 8 hours; As a bonus action, one can eat a treat, gaining my Prof" + (typePF ? "" : "iciency") + " Bonus in temporary HP. [+1 " + (typePF ? "Con or Wis" : "Constitution or Wisdom") + "]", action : [["bonus action", "Consume Chef's Treat"]], toolProfs : ["Cook's utensils"], scorestxt : "+1 Constitution or Wisdom" }; FeatsList["crusher"] = { name : "Crusher", source : [["T", 79]], descriptionFull : "You are practiced in the art of crushing your enemies, granting you the following benefits:\n \u2022 Increase your Strength or Constitution by 1, to a maximum of 20.\n \u2022 Once per turn, when you hit a creature with an attack that deals bludgeoning damage, you can move it 5 feet to an unoccupied space, provided the target is no more than one size larger than you.\n \u2022 When you score a critical hit that deals bludgeoning damage to a creature, attack rolls against that creature are made with advantage until the start of your next turn.", description : "Once per turn, when I hit a creature no more than one size larger than me with an attack that deals bludgeoning damage, I can move it 5 ft to an unoccupied space. If I score a critical hit that deals bludgeoning damage, attacks against the creature hit gain advantage until the start of my next turn. [+1 " + (typePF ? "Str or Con" : "Strength or Constitution") + "]", scorestxt : "+1 Strength or Constitution" }; FeatsList["eldritch adept"] = { name : "Eldritch Adept", source : [["T", 79], ["UA:F2", 1]], descriptionFull : "Studying occult lore, you have unlocked eldritch power within yourself: you learn one Eldritch Invocation option of your choice from the warlock class. If the invocation has a prerequisite of any kind, you can choose that invocation only if you're a warlock who meets the prerequisite.\n Whenever you gain a level, you can replace the invocation with another one from the warlock class.", description : 'I learn one Eldritch Invocation from the warlock class for which I meet the prerequisites (2nd page "Choose Feature" button). I can replace this invocation for another whenever I gain a level.', bonusClassExtrachoices : [{ "class" : "warlock", feature : "eldritch invocations", bonus : 1 }], prerequisite : "Spellcasting or Pact Magic feature", prereqeval : function (v) { return v.isSpellcastingClass; } }; FeatsList["fey touched"] = { name : "Fey Touched", source : [["T", 79], ["UA:F2", 2]], descriptionFull : "Your exposure to the Feywild's magic has changed you, granting you the following benefits:\n \u2022 Increase your Intelligence, Wisdom, or Charisma score by 1, to a maximum of 20.\n \u2022 You learn the misty step spell and one 1st-level spell of your choice. The 1st-level spell must be from the divination or enchantment school of magic. You can cast each of these spells without expending a spell slot. Once you cast either of these spells in this way, you can't cast that spell in this way again until you finish a long rest. You can also cast these spells using spell slots you have of the appropriate level. The spells' spellcasting ability is the ability increased by this feat.", description : "I learn Misty Step and one 1st level divination or enchantment spell. I can cast each once per long rest at their lowest level without expending a spell slot, and can cast them if I have a spell slot to do so. My spellcasting ability is the ability I choose to increase when I gain this feat. [+1 Intelligence, Wisdom, or Charisma]", spellcastingBonus : [{ name : "Misty Step", spells : ["misty step"], selection : ["misty step"], firstCol : "oncelr+markedbox" }, { name : "1st-level Ench/Div spell", 'class': "any", school : ["Ench", "Div"], level : [1, 1], firstCol : "oncelr+markedbox" }], spellcastingAbility : 4, allowUpCasting : true, choices : ["Intelligence", "Wisdom", "Charisma"], "intelligence" : { description : "I learn Misty Step and one 1st level divination or enchantment spell. I can cast each once per long rest at their lowest level without expending a spell slot, and can cast them " + (typePF ? "by expending" : "with") + " a spell slot as normal. Intelligence is my spellcasting ability for these spells. [+1 Intelligence]", spellcastingAbility : 4, scores : [0, 0, 0, 1, 0, 0] }, "wisdom" : { description : "I learn Misty Step and one 1st level divination or enchantment spell. I can cast each once per long rest at their lowest level without expending a spell slot, and can cast them by expending a spell slot as normal. Wisdom is my spellcasting ability for these spells. [+1 Wisdom]", spellcastingAbility : 5, scores : [0, 0, 0, 0, 1, 0] }, "charisma" : { description : "I learn Misty Step and one 1st level divination or enchantment spell. I can cast each once per long rest at their lowest level without expending a spell slot, and can cast them by expending a spell slot as normal. Charisma is my spellcasting ability for these spells. [+1 Charisma]", spellcastingAbility : 6, scores : [0, 0, 0, 0, 0, 1] } }; // Add the fighting initiate only when all other code has run, so that we get fighting styles added by the code RunFunctionAtEnd(function() { if (!ClassList.fighter || !ClassList.fighter.features["fighting style"]) return; var FtngStyles = ClassList.fighter.features["fighting style"]; FeatsList["fighting initiate"] = { name : "Fighting Initiate", source : [["T", 80], ["UA:F2", 2]], descriptionFull : "Your martial training has helped you develop a particular style of fighting. As a result, you learn one Fighting Style option of your choice from the fighter class. If you already have a style, the one you choose must be different.\n Whenever you reach a level that grants the Ability Score Improvement feature, you can replace this feat's fighting style with another one from the fighter class that you don't have.", description : "I learn one Fighting Style from the fighter class, which must be one that I don't yet know. I can replace this fighting style for another whenever I gain an Ability Score Improvement.", prerequisite : "Proficiency with a martial weapon", prereqeval : function(v) { return v.martialWeaponsProf || v.otherWeaponsProf.some(function (n) { return WeaponsList[n] && (/Martial/i).test(WeaponsList[n].type); }); }, choices : [], "archery" : { description : "I gain a +2 bonus to attack rolls I make with ranged weapons. I can replace this fighting style for another whenever I gain an Ability Score Improvement.", source : FtngStyles.source }, "defense" : { description : "I gain a +1 bonus to my AC while I'm wearing armor. I can replace this fighting style for another whenever I gain an Ability Score Improvement.", source : FtngStyles.source }, "dueling" : { description : "When I wield a melee weapon in one hand and no other weapons, I gain a +2 bonus to damage rolls with that weapon. I can replace this fighting style for another whenever I gain an Ability Score Improvement.", source : FtngStyles.source }, "great weapon fighting" : { description : "When I roll a 1 or 2 on a damage die for an attack I make with a two-handed or versatile melee weapon that I'm wielding with two hands, I can reroll the die and must use the new roll, even if the new roll is a 1 or a 2. I can replace this fighting style for another whenever I gain an Ability Score Improvement.", source : FtngStyles.source }, "protection" : { description : "When a creature I can see attacks a target other than me that is within 5 ft of me, I can use my reaction to impose disadvantage on the attack roll. I must be wielding a shield to do this. I can replace this fighting style for another whenever I gain an Ability Score Improvement.", source : FtngStyles.source }, "two-weapon fighting" : { description : "When I engage in two-weapon fighting, I can add my ability modifier to the damage of the second (off-hand) attack. I can replace this fighting style for another whenever I gain an Ability Score Improvement.", source : FtngStyles.source }, "blind fighting" : { description : "I have blindsight with a range of 10 ft, wherein I can effectively see anything that isn't behind total cover, including invisible things, even if I'm blinded or in darkness. This doesn't allow me to see things hidden from me. I can replace this fighting style for another whenever I gain an Ability Score Improvement.", source : [["T", 41]] }, "interception" : { description : "As a reaction when a creature I can see hits a target, other than me, within 5 ft of me with an attack, I can reduce the damage the target takes by 1d10 + my proficiency bonus (min 0 damage). I must be wielding a shield or a simple or martial weapon to do this. I can replace this fighting style for another whenever I gain an Ability Score Improvement.", source : [["T", 41], ["UA:CFV", 12]] }, "thrown weapon fighting" : { description : "I can draw a weapon that has the thrown property as part of the attack I make with the weapon. In addition, when I hit with a ranged attack using a thrown weapon, I gain a +2 bonus to the damage roll. I can replace this fighting style for another whenever I gain an Ability Score Improvement.", source : [["T", 42]] }, "unarmed fighting" : { description : "My unarmed strikes deal 1d6 damage, or 1d8 if I'm not wielding any weapons or a shield. At the start of each of my turns, I can deal 1d4 bludgeoning damage to one creature grappled by me. I can replace this fighting style for another whenever I gain an Ability Score Improvement.", source : [["T", 42]] } }; FtngStyles.choices.forEach(function (sName) { var sNameLC = sName.toLowerCase(); if (!FtngStyles[sNameLC]) return; FeatsList["fighting initiate"].choices.push(sName); if (!FeatsList["fighting initiate"][sNameLC]) { FeatsList["fighting initiate"][sNameLC] = { description : FtngStyles[sNameLC].description.replace(/^\n /i, '').replace(/\n /g, '. ') + ". I can replace this fighting style whenever I gain an ASI.", source : FtngStyles[sNameLC].source ? FtngStyles[sNameLC].source : FtngStyles.source } } // Copy all attributes except name, source and description for (var attr in FtngStyles[sNameLC]) { if ((/\b(name|description|source)\b/i).test(attr)) continue; FeatsList["fighting initiate"][sNameLC][attr] = FtngStyles[sNameLC][attr]; } if (!FeatsList["fighting initiate"][sNameLC].prereqeval) { FeatsList["fighting initiate"][sNameLC].prereqeval = function(v) { var knownStyles = GetFightingStyleSelection(); return knownStyles[v.choice] ? false : true; }; if (!FeatsList["fighting initiate"][sNameLC].prerequisite) FeatsList["fighting initiate"][sNameLC].prerequisite = sName + " Fighting Style is not selected anywhere else." }; }); }); FeatsList["gunner"] = { name : "Gunner", source : [["T", 80], ["UA:F2", 2]], descriptionFull : "You have a quick hand and keen eye when employing firearms, granting you the following benefits:\n \u2022 Increase your Dexterity score by 1, to a maximum of 20.\n \u2022 You gain proficiency with firearms (see \"Firearms\" in the Dungeon Master's Guide).\n \u2022 You ignore the loading property of firearms.\n \u2022 Being within 5 feet of a hostile creature doesn't impose disadvantage on your ranged attack rolls.", description : "I gain proficiency with firearms. I ignore the loading property of firearms. I don't suffer disadvantage on ranged attack rolls for being within 5 ft of a hostile creature. [+1 Dexterity]", scores : [0, 1, 0, 0, 0, 0], weaponProfs : [false, false, ["Firearms"]], calcChanges : { atkAdd : [ function (fields, v) { if ((/firearm/i).test(v.theWea.type) || (/firearm/i).test(v.theWea.list)) { fields.Description = fields.Description.replace(/([;,]? ?loading|loading[;,]? ?)/i, ''); }; }, "I ignore the loading quality of firearms." ] } }; FeatsList["metamagic adept"] = { name : "Metamagic Adept", source : [["T", 80], ["UA:F2", 2]], descriptionFull : "You've learned how to exert your will on your spells to alter how they function:\n \u2022 You learn two Metamagic options of your choice from the sorcerer class. You can use only one Metamagic option on a spell when you cast it, unless the option says otherwise. Whenever you reach a level that grants the Ability Score Improvement feature, you can replace one of these Metamagic options with another one from the sorcerer class.\n \u2022 You gain 2 sorcery points to spend on Metamagic (these points are added to any sorcery points you have from another source but can be used only on Metamagic). You regain all spent sorcery points when you finish a long rest.", description : 'I learn two Metamagic options from the sorcerer class (2nd page "Choose Feature" button). I can use only one option on a spell unless it says otherwise. I gain 2 sorcery points, which I can only use for Metamagic. I regain all expended sorcery points when I finish a long rest. I can change one ' + (typePF ? '' : 'Metamagic option ') + 'whenever I gain an ' + (typePF ? 'ASI' : 'Ability Score Improvement') + '.', bonusClassExtrachoices : [{ "class" : "sorcerer", feature : "metamagic", bonus : 2 }], extraLimitedFeatures : [{ name : "Sorcery Points", usages : 2, recovery : "long rest", addToExisting : true }], prerequisite : "Spellcasting or Pact Magic feature", prereqeval : function (v) { return v.isSpellcastingClass; } }; FeatsList["piercer"] = { name : "Piercer", source : [["T", 80], ["UA:F2", 2]], descriptionFull : "You have achieved a penetrating precision in combat, granting you the following benefits:\n \u2022 Increase your Strength or Dexterity by 1, to a maximum of 20.\n \u2022 Once per turn, when you hit a creature with an attack that deals piercing damage, you can reroll one of the attack's damage dice, and you must use the new roll.\n \u2022 When you score a critical hit that deals piercing damage to a creature, you can roll one additional damage die when determining the extra piercing damage the target takes.", description : "Once per turn when I deal piercing damage to a target, I can reroll one of the damage die and use the new roll. If I deal piercing damage on a critical hit to a target, I can roll one additional damage die. [+1 Strength or Dexterity]", scorestxt : "+1 Strength or Dexterity", calcChanges : { atkAdd : [ function (fields, v) { if ((/pierc(\.|ing)/i).test(fields.Damage_Type)) { var extraCritRegex = /\d+(d\d+ extra on a crit(ical)?( hit)?( in melee)?)/i; v.extraCritM = (v.extraCritM ? v.extraCritM : 0) + 1; if (extraCritRegex.test(fields.Description)) { fields.Description = fields.Description.replace(extraCritRegex, v.extraCritM + '$1'); } else if ((/d\d/).test(fields.Damage_Die)) { fields.Description += (fields.Description ? '; ' : '') + v.extraCritM + fields.Damage_Die.replace(/.*(d\d+).*/, '$1') + ' extra on a crit'; } if (!(/re-?roll (one|1)? ?damage/i).test(fields.Description)) { fields.Description += '; Once per turn, re-roll one damage die'; } } }, "Once per turn when I deal piercing damage to a target, I can reroll one of the damage die and use the new roll. If I deal piercing damage on a critical hit to a target, I can roll one additional damage die.", 900 ] } }; FeatsList["poisoner"] = { name : "Poisoner", source : [["T", 80], ["UA:F2", 2]], descriptionFull : "You can prepare and deliver deadly poisons, granting you the following benefits:\n \u2022 When you make a damage roll that deals poison damage, it ignores resistance to poison damage.\n \u2022 You can apply poison to a weapon or piece of ammunition as a bonus action, instead of an action.\n \u2022 You gain proficiency with the poisoner's kit if you don't already have it. With one hour of work using a poisoner's kit and expending 50 gp worth of materials, you can create a number of doses of potent poison equal to your proficiency bonus. Once applied to a weapon or piece of ammunition, the poison retains its potency for 1 minute or until you hit with the weapon or ammunition. When a creature takes damage from the coated weapon or ammunition, that creature must succeed on a DC 14 Constitution saving throw or take 2d8 poison damage and become poisoned until the end of your next turn.", description : "My poison damage rolls ignore poison resistance. As a bonus action, I can apply poison to a weapon or piece of ammo. I can use a poisoner's kit and 50 gp to create my Prof Bonus doses of poison in 1 hour. Potent 1 min after applying. DC 14 Con save or 2d8 poison damage and poisoned until the end of my next turn.", toolProfs : ["Poisoner's kit"], action : [["bonus action", "Apply poison to weapon/ammo"]] }; FeatsList["shadow touched"] = { name : "Shadow Touched", source : [["T", 80]], descriptionFull : "Your exposure to the Shadowfell's magic has changed you, granting you the following benefits:\n \u2022 Increase your Intelligence, Wisdom, or Charisma by 1, to a maximum of 20.\n \u2022 You learn the invisibility spell and one 1st-level spell of your choice. The 1st-level spell must be from the illusion or necromancy school of magic. You learn the invisibility spell and one 1st-level spell of your choice. The 1st-level spell must be from the illusion or necromancy school of magic. You can cast each of these spells without expending a spell slot. Once you cast either of these spells in this way, you can't cast that spell in this way again until you finish a long rest. You can also cast these spells using spell slots you have of the appropriate level. The spells' spellcasting ability is the ability increased by this feat.", description : "I learn Invisibility and one 1st level illusion or necromancy spell. I can cast each once per long rest at their lowest level without expending a spell slot, and can cast them if I have a spell slot to do so. My spellcasting ability is the ability I choose to increase when I gain this feat. [+1 Intelligence, Wisdom, or Charisma]", spellcastingBonus : [{ name : "Invisibility", spells : ["invisibility"], selection : ["invisibility"], firstCol : "oncelr+markedbox" }, { name : "1st-level Illus/Necro spell", 'class' : "any", school : ["Illus", "Necro"], level : [1, 1], firstCol : "oncelr+markedbox" }], spellcastingAbility : 4, allowUpCasting : true, choices : ["Intelligence", "Wisdom", "Charisma"], "intelligence" : { description : "I learn Invisibility and one 1st level illusion or necromancy spell. I can cast each once per long rest at their lowest level without expending a spell slot, and can cast them by expending a spell slot as normal. Intelligence is my spellcasting ability for these spells. [+1 Intelligence]", spellcastingAbility : 4, scores : [0, 0, 0, 1, 0, 0] }, "wisdom" : { description : "I learn Invisibility and one 1st level illusion or necromancy spell. I can cast each once per long rest at their lowest level without expending a spell slot, and can cast them by expending a spell slot as normal. Wisdom is my spellcasting ability for these spells. [+1 Wisdom]", spellcastingAbility : 5, scores : [0, 0, 0, 0, 1, 0] }, "charisma" : { description : "I learn Invisibility and one 1st level illusion or necromancy spell. I can cast each once per long rest at their lowest level without expending a spell slot, and can cast them by expending a spell slot as normal. Charisma is my spellcasting ability for these spells. [+1 Charisma]", spellcastingAbility : 6, scores : [0, 0, 0, 0, 0, 1] } }; FeatsList["skill expert"] = { name : "Skill Expert", source : [["T", 80]], descriptionFull : "You have honed your proficiency with particular skills, granting you the following benefits:\n \u2022 Increase one ability score of your choice by 1, to a maximum of 20.\n \u2022 You gain proficiency in one skill of your choice.\n \u2022 Choose one skill in which you have proficiency. You gain expertise with that skill, which means your proficiency bonus is doubled for any ability check you make with it. The skill you choose must be one that isn't already benefiting from a feature, such as Expertise, that doubles your proficiency bonus.", description : "I gain proficiency in one skill and expertise in that same skill or another skill I'm proficient with. [+1 to one ability score of my choice]", skillstxt : "Proficiency with one skill, and\n Expertise with one skill I'm proficient with", scorestxt : "+1 to one ability score of my choice" }; FeatsList["slasher"] = { name : "Slasher", source : [["T", 81], ["UA:F2", 3]], descriptionFull : "You've learned where to cut to have the greatest results, granting you the following benefits:\n \u2022 Increase your Strength or Dexterity by 1, to a maximum of 20.\n \u2022 Once per turn when you hit a creature with an attack that deals slashing damage, you can reduce the speed of the target by 10 feet until the start of your next turn.\n \u2022 When you score a critical hit that deals slashing damage to a creature, you grievously wound it. Until the start of your next turn, the target has disadvantage on all attack rolls.", description : "Once per turn when I deal slashing damage to a target, I can reduce its speed by 10 ft until the start of my next turn. When I score a critical hit that deals slashing damage to a creature, the grievous wound causes it to have disadvantage on all attack rolls until the start of my next turn. [+1 Strength or Dexterity]", scorestxt : "+1 Strength or Dexterity" }; FeatsList["telekinetic"] = { name : "Telekinetic", source : [["T", 81]], descriptionFull : "You learn to move things with your mind, granting you the following benefits:\n \u2022 Increase your Intelligence, Wisdom, or Charisma by 1, to a maximum of 20.\n \u2022 You learn the mage hand cantrip. You can cast it without verbal or somatic components, and you can make the spectral hand invisible. If you already know this spell, its range increases by 30 feet when you cast it. Its spellcasting ability is the ability increased by this feat.\n \u2022 As a bonus action, you can try to telekinetically shove one creature you can see within 30 feet of you. When you do so, the target must succeed on a Strength saving throw (DC 8 + your proficiency bonus + the ability modifier of the score increased by this feat) or be moved 5 feet toward you or away from you. A creature can willingly fail this save.", description : "I know the Mage Hand cantrip, can cast it without components, and the spectral hand can be invisible. As a bonus action, I can shove one creature I can see within 30 ft. It must make a Str save vs. this feat's spell save DC or be moved 5 ft from or towards me. My spellcasting ability is the ability I choose to increase when I gain this feat. [+1 Int, Wis, or Cha]", action : [["bonus action", " Shove"]], spellcastingBonus : [{ name : "Mage Hand", spells : ["mage hand"], selection : ["mage hand"], }], spellcastingAbility : 4, calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { if (spellKey !== "mage hand") return; spellObj.components = ""; if (spellObj.description === SpellsList["mage hand"].description) spellObj.description = "Create (in)visible spectral hand for simple tasks or carry up to 10 lb; 1 a to control; can't have multiple"; var rangeRx = /(\d+)( ?ft| ?m)/i; if (!/^(?=.*telekinetic)(?=.*feat).*$/i.test(CurrentSpells[spName].name) && rangeRx.test(spellObj.range)) { // add the +30 ft range only if not the entry for the feat itself var spRangeM = spellObj.range.match(rangeRx); spellObj.range = spellObj.range.replace(rangeRx, Number(spRangeM[1]) + (What("Unit System") === "metric" ? 9 : 30) + spRangeM[2]); } return true; }, "My Telekinetic feat allows me to cast the Mage Hand cantrip without verbal or somatic components and I can make the spectral hand invisible. If I already know the cantrip from another source, its range is also increased with 30 ft." ] }, choices : ["Intelligence", "Wisdom", "Charisma"], "intelligence" : { description : "I know the Mage Hand cantrip, can cast it without components, and the spectral hand can be invisible. As a bonus action, I can shove one creature I can see within 30 ft. It must make a Str" + (typePF ? "" : "ength") + " save vs. this feat's spell save DC or be moved 5 ft" + (typePF ? "" : " away") + " from or towards me. Intelligence is my spellcasting ability for these. [+1 Intelligence]", spellcastingAbility : 4, scores : [0, 0, 0, 1, 0, 0] }, "wisdom" : { description : "I know the Mage Hand cantrip, can cast it without components, and the spectral hand can be invisible. As a bonus action, I can shove one creature I can see within 30 ft. It must make a Str" + (typePF ? "" : "ength") + " save vs. this feat's spell save DC or be moved 5 ft" + (typePF ? "" : " away") + " from or towards me. Wisdom is my spellcasting ability for these. [+1 Wisdom]", spellcastingAbility : 5, scores : [0, 0, 0, 0, 1, 0] }, "charisma" : { description : "I know the Mage Hand cantrip, can cast it without components, and the spectral hand can be invisible. As a bonus action, I can shove one creature I can see within 30 ft. It must make a Str" + (typePF ? "" : "ength") + " save vs. this feat's spell save DC or be moved 5 ft" + (typePF ? "" : " away") + " from or towards me. Charisma is my spellcasting ability for these. [+1 Charisma]", spellcastingAbility : 6, scores : [0, 0, 0, 0, 0, 1] } }; FeatsList["telepathic"] = { name : "Telepathic", source : [["T", 81]], descriptionFull : "You awaken the ability to mentally connect with others, granting you the following benefits:\n \u2022 Increase your Intelligence, Wisdom, or Charisma by 1, to a maximum of 20.\n \u2022 You can speak telepathically to any creature you can see within 60 feet of you. Your telepathic utterances are in a language you know, and the creature understands you only if it knows that language. Your communication doesn't give the creature the ability to respond to you telepathically.\n \u2022 You can cast the detect thoughts spell, requiring no spell slot or components, and you must finish a long rest before you can cast it this way again. Your spellcasting ability for the spell is the ability increased by this feat. If you have spell slots of 2nd level or higher, you can cast this spell with them.", description : "I can telepathically speak to a creature I can see within 60 ft in a language I know, but it can't respond telepathically. I can cast Detect Thoughts once per long rest at its lowest level, requiring no spell slot or components, and can cast it using a spell slot as normal. My spellcasting ability is the ability I increase with this feat. [+1 Int, Wis, or Cha]", spellcastingBonus : [{ name : "Detect Thoughts", spells : ["detect thoughts"], selection : ["detect thoughts"], firstCol : "oncelr+markedbox" }], spellcastingAbility : 4, allowUpCasting : true, spellChanges : { "detect thoughts" : { components : "(V,S,M)", changes : "My Telepathic feat allows me to cast Detect Thoughts once per long rest without requiring a spell slot or spell components, or by using a spell slot and cast it with components as normal." } }, choices : ["Intelligence", "Wisdom", "Charisma"], "intelligence" : { description : "I can telepathically speak to a creature I can see within 60 ft in a language I know, but it can't respond telepathically. I can cast Detect Thoughts once per long rest at its lowest level, requiring no spell slot or components, and can cast it using a spell slot as normal. Intelligence is my spellcasting ability for this. [+1 Int" + (typePF ? "" : "elligence") + "]", spellcastingAbility : 4, scores : [0, 0, 0, 1, 0, 0] }, "wisdom" : { description : "I can telepathically speak to a creature I can see within 60 ft in a language I know, but it can't respond telepathically. I can cast Detect Thoughts once per long rest at its lowest level, requiring no spell slot or components, and can cast it using a spell slot as normal. Wisdom is my spellcasting ability for this. [+1 Wis" + (typePF ? "" : "dom") + "]", spellcastingAbility : 5, scores : [0, 0, 0, 0, 1, 0] }, "charisma" : { description : "I can telepathically speak to a creature I can see within 60 ft in a language I know, but it can't respond telepathically. I can cast Detect Thoughts once per long rest at its lowest level, requiring no spell slot or components, and can cast it using a spell slot as normal. Charisma is my spellcasting ability for this. [+1 Cha" + (typePF ? "" : "risma") + "]", spellcastingAbility : 6, scores : [0, 0, 0, 0, 0, 1] } }; // >>>>>>>>>>>>>>>>>> // // >>> New Spells >>> // // >>>>>>>>>>>>>>>>>> // SpellsList["dream of the blue veil"] = { name : "Dream of the Blue Veil", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["T", 106]], level : 7, school : "Conj", time : "10 min", range : "20 ft", components : "V,S,M\u0192", compMaterial : "A magic item or a willing creature from the destination world", duration : "6 hours", description : "9 willing crea unconscious for duration, after that travel to origin material plane of magic item or crea", descriptionFull : "You and up to eight willing creatures within range fall unconscious for the spell's duration and experience visions of another world on the Material Plane, such as Oerth, Toril, Krynn, or Eberron. If the spell reaches its full duration, the visions conclude with each of you encountering and pulling back a mysterious blue curtain. The spell then ends with you mentally and physically transported to the world that was in the visions." + "\n To cast this spell, you must have a magic item that originated on the world you wish to reach, and you must be aware of the world's existence, even if you don't know the world's name. Your destination in the other world is a safe location within 1 mile of where the magic item was created. Alternatively, you can cast the spell if one of the affected creatures was born on the other world, which causes your destination to be a safe location within 1 mile of where that creature was born." + "\n The spell ends early on a creature if that creature takes any damage, and the creature isn't transported. If you take any damage, the spell ends for you and all the other creatures, with none of you being transported." }; SpellsList["intellect fortress"] = { name : "Intellect Fortress", classes : ["artificer", "bard", "sorcerer", "warlock", "wizard"], source : [["T", 107]], level : 3, school : "Abjur", time : "1 a", range : "30 ft", components : "V", duration : "Conc, 1 h", description : "1+1/SL crea, each max 30 ft apart, has Psychic damage resistance and adv. on Int, Wis, and Cha saves", descriptionFull : "For the duration, you or one willing creature you can see within range has resistance to psychic damage, as well as advantage on Intelligence, Wisdom, and Charisma saving throws." + AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, you can target one additional creature for each slot level above 3rd. The creatures must be within 30 feet of each other when you target them." }; SpellsList["mind sliver"] = { name : "Mind Sliver", classes : ["sorcerer", "warlock", "wizard"], source : [["T", 108], ["UA:SnW", 4], ["UA:FRnW", 7], ["UA:POR", 7]], level : 0, school : "Ench", time : "1 a", range : "60 ft", components : "V", duration : "1 rnd", save : "Int", description : "1 crea save or 1d6 Psychic dmg, -1d4 on first save before my next turn ends; +1d6 at CL 5, 11, and 17", descriptionShorter : "1 crea save or 1d6 Psychic dmg, -1d4 on 1st save before my next turn end; +1d6 at CL 5/11/17", descriptionCantripDie : "1 crea save or `CD`d6 Psychic dmg and subtract 1d4 from first saving throw before my next turn ends", descriptionFull : "You drive a disorienting spike of psychic energy into the mind of one creature you can see within range. The target must succeed on an Intelligence saving throw or take 1d6 psychic damage and subtract 1d4 from the next saving throw it makes before the end of your next turn." + "\n This spell's damage increases by 1d6 when you reach certain levels: 5th level (2d6), 11th level (3d6), and 17th level (4d6)." }; WeaponsList["mind sliver"] = { regExpSearch : /^(?=.*mind)(?=.*sliver).*$/i, name : "Mind Sliver", source : [["T", 108], ["UA:SnW", 4], ["UA:FRnW", 7], ["UA:POR", 7]], list : "spell", ability : 6, type : "Cantrip", damage : ["C", 6, "psychic"], range : "60 ft", description : "1 creature Int save, success - no damage, fail - also -1d4 on first save before my next turn ends", abilitytodamage : false, dc : true }; SpellsList["spirit shroud"] = { name : "Spirit Shroud", classes : ["cleric", "paladin", "warlock", "wizard"], source : [["T", 108]], level : 3, school : "Necro", time : "1 bns", range : "S:10-ft rad", components : "V,S", duration : "Conc, 1 min", description : "My atks +1d8+1d8/2SL Cold/Necro/Radiant dmg, no heal until next turn; any crea I see -10 ft spd", descriptionShorter : "My atks +1d8+1d8/2SL Cold/Necro/Radiant dmg, no heal 1 rnd; any crea -10 ft spd", descriptionFull : "You call forth spirits of the dead, which flit around you for the spell's duration. The spirits are intangible and invulnerable."+ "\n Until the spell ends, any attack you make deals 1d8 extra damage when you hit a creature within 10 feet of you. This damage is radiant, necrotic, or cold (your choice when you cast the spell). Any creature that takes this damage can't regain hit points until the start of your next turn."+ "\n In addition, any creature of your choice that you can see that starts its turn within 10 feet of you has its speed reduced by 10 feet until the start of your next turn."+ AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d8 for every two slot levels above 3rd.", dynamicDamageBonus : { multipleDmgTypes : { dmgTypes : ["cold", "necrotic", "radiant"], inDescriptionAs : "Cold/Necro/Radiant" } } }; SpellsList["summon aberration"] = { name : "Summon Aberration", classes : ["warlock", "wizard"], source : [["T", 109]], level : 4, school : "Conj", time : "1 a", range : "90 ft", components : "V,S,M\u0192", compMaterial : "A pickled tentacle and an eyeball in a platinum-inlaid vial worth at least 400 gp", duration : "Conc, 1 h", description : "Summon choice of Abberant Spirit; obeys commands; takes turn after mine; vanishes at 0 hp (400gp)", descriptionFull : "You call forth an aberrant spirit. It manifests in an unoccupied space that you can see within range. This corporeal form uses the Aberrant Spirit stat block. When you cast the spell, choose Beholderkin, Slaad, or Star Spawn. The creature resembles an aberration of that kind, which determines certain traits in its stat block. The creature disappears when it drops to 0 hit points or when the spell ends.\n The creature is an ally to you and your companions. In combat, the creature shares your initiative count, but it takes its turn immediately after yours. It obeys your verbal commands (no action required by you). If you don't issue any, it takes the Dodge action and uses its move to avoid danger." + AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, use the higher level wherever the spell's level appears in the stat block." }; SpellsList["summon beast"] = { name : "Summon Beast", classes : ["druid", "ranger"], source : [["T", 109]], level : 2, school : "Conj", time : "1 a", range : "90 ft", components : "V,S,M\u0192", compMaterial : "A feather, tuft of fur, and fish tail inside a gilded acorn worth at least 200 gp", duration : "Conc, 1 h", description : "Summon choice of Bestial Spirit; obeys commands; takes turn after mine; disappears at 0 hp (200gp)", descriptionFull : "You call forth a bestial spirit. It manifests in an unoccupied space that you can see within range. This corporeal form uses the Bestial Spirit stat block. When you cast the spell, choose an environment: Air, Land, or Water. The creature resembles an animal of your choice that is native to the chosen environment, which determines certain traits in its stat block. The creature disappears when it drops to 0 hit points or when the spell ends.\n The creature is an ally to you and your companions. In combat, the creature shares your initiative count, but it takes its turn immediately after yours. It obeys your verbal commands (no action required by you). If you don't issue any, it takes the Dodge action and uses its move to avoid danger." + AtHigherLevels + "When you cast this spell using a spell slot of 3rd level or higher, use the higher level wherever the spell's level appears in the stat block." }; SpellsList["summon celestial"] = { name : "Summon Celestial", classes : ["cleric", "paladin"], source : [["T", 110]], level : 5, school : "Conj", time : "1 a", range : "90 ft", components : "V,S,M\u0192", compMaterial : "A golden reliquary worth at least 500 gp", duration : "Conc, 1 h", description : "Summon choice of Celestial Spirit; obeys commands; takes turn after mine; disappears at 0 hp (500gp)", descriptionFull : "You call forth a celestial spirit. It manifests in an angelic form in an unoccupied space that you can see within range. This corporeal form uses the Celestial Spirit stat block. When you cast the spell, choose Avenger or Defender. Your choice determines the creature's attack in its stat block. The creature disappears when it drops to 0 hit points or when the spell ends.\n The creature is an ally to you and your companions. In combat, the creature shares your initiative count, but it takes its turn immediately after yours. It obeys your verbal commands (no action required by you). If you don't issue any, it takes the Dodge action and uses its move to avoid danger." + AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, use the higher level wherever the spell's level appears in the stat block." }; SpellsList["summon construct"] = { name : "Summon Construct", classes : ["artificer", "wizard"], source : [["T", 111]], level : 4, school : "Conj", time : "1 a", range : "90 ft", components : "V,S,M\u0192", compMaterial : "An ornate stone and metal lockbox worth at least 400 gp", duration : "Conc, 1 h", description : "Summon choice of Construct Spirit; obeys commands; takes turn after mine; vanishes at 0 hp (400gp)", descriptionFull : "You call forth the spirit of a construct. It manifests in an unoccupied space that you can see within range. This corporeal form uses the Construct Spirit stat block. When you cast the spell, choose a material: Clay, Metal, or Stone. The creature resembles a golem or a modron (your choice) made of the chosen material, which determines certain traits in its stat block. The creature disappears when it drops to 0 hit points or when the spell ends.\n The creature is an ally to you and your companions. In combat, the creature shares your initiative count, but it takes its turn immediately after yours. It obeys your verbal commands (no action required by you). If you don't issue any, it takes the Dodge action and uses its move to avoid danger." + AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, use the higher level wherever the spell's level appears in the stat block." }; SpellsList["summon elemental"] = { name : "Summon Elemental", classes : ["druid", "ranger", "wizard"], source : [["T", 111]], level : 4, school : "Conj", time : "1 a", range : "90 ft", components : "V,S,M\u0192", compMaterial : "Air, a pebble, ash, and water inside a gold-inlaid vial worth at least 400 gp", duration : "Conc, 1 h", description : "Summon choice of Elemental Spirit; obeys commands; takes turn after mine; vanishes at 0 hp (400gp)", descriptionFull : "You call forth an elemental spirit. It manifests in an unoccupied space that you can see within range. This corporeal form uses the Elemental Spirit stat block. When you cast the spell, choose an element: Air, Earth, Fire, or Water. The creature resembles a bipedal form wreathed in the chosen element, which determines certain traits in its stat block. The creature disappears when it drops to 0 hit points or when the spell ends.\n The creature is an ally to you and your companions. In combat, the creature shares your initiative count, but it takes its turn immediately after yours. It obeys your verbal commands (no action required by you). If you don't issue any, it takes the Dodge action and uses its move to avoid danger." + AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, use the higher level wherever the spell's level appears in the stat block." }; SpellsList["summon fey"] = { name : "Summon Fey", classes : ["druid", "ranger", "warlock", "wizard"], source : [["T", 112]], level : 3, school : "Conj", time : "1 a", range : "90 ft", components : "V,S,M\u0192", compMaterial : "A gilded flower worth at least 300 gp", duration : "Conc, 1 h", description : "Summon choice of Fey Spirit; obeys commands; takes turn after mine; disappears at 0 hp (300gp)", descriptionFull : "You call forth a fey spirit. It manifests in an unoccupied space that you can see within range. This corporeal form uses the Fey Spirit stat block. When you cast the spell, choose a mood: Fuming, Mirthful, or Tricksy. The creature resembles a fey creature of your choice marked by the chosen mood, which determines one of the traits in its stat block. The creature disappears when it drops to 0 hit points or when the spell ends.\n The creature is an ally to you and your companions. In combat, the creature shares your initiative count, but it takes its turn immediately after yours. It obeys your verbal commands (no action required by you). If you don't issue any, it takes the Dodge action and uses its move to avoid danger." + AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, use the higher level wherever the spell's level appears in the stat block." }; SpellsList["summon fiend"] = { name : "Summon Fiend", classes : ["warlock", "wizard"], source : [["T", 112]], level : 6, school : "Conj", time : "1 a", range : "90 ft", components : "V,S,M\u0192", compMaterial : "Humanoid blood inside a ruby vial worth at least 600 gp", duration : "Conc, 1 h", description : "Summon choice of Fiendish Spirit; obeys commands; takes turn after mine; disappears at 0 hp (600gp)", descriptionFull : "You call forth a fiendish spirit. It manifests in an unoccupied space that you can see within range. This corporeal form uses the Fiendish Spirit stat block. When you cast the spell, choose Demon, Devil, or Yugoloth. The creature resembles a fiend of the chosen type, which determines certain traits in its stat block. The creature disappears when it drops to 0 hit points or when the spell ends.\n The creature is an ally to you and your companions. In combat, the creature shares your initiative count, but it takes its turn immediately after yours. It obeys your verbal commands (no action required by you). If you don't issue any, it takes the Dodge action and uses its move to avoid danger." + AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, use the higher level wherever the spell's level appears in the stat block." }; SpellsList["summon shadowspawn"] = { name : "Summon Shadowspawn", classes : ["warlock", "wizard"], source : [["T", 113]], level : 3, school : "Conj", time : "1 a", range : "90 ft", components : "V,S,M\u0192", compMaterial : "Tears inside a gem worth at least 300 gp", duration : "Conc, 1 h", description : "Summon choice of Shadow Spirit; obeys commands; takes turn after mine; disappears at 0 hp (300gp)", descriptionFull : "You call forth a shadowy spirit. It manifests in an unoccupied space that you can see within range. This corporeal form uses the Shadow Spirit stat block. When you cast the spell, choose an emotion: Fury, Despair, or Fear. The creature resembles a misshapen biped marked by the chosen emotion, which determines certain traits in its stat block. The creature disappears when it drops to 0 hit points or when the spell ends.\n The creature is an ally to you and your companions. In combat, the creature shares your initiative count, but it takes its turn immediately after yours. It obeys your verbal commands (no action required by you). If you don't issue any, it takes the Dodge action and uses its move to avoid danger." + AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, use the higher level wherever the spell's level appears in the stat block." }; SpellsList["summon undead"] = { name : "Summon Undead", classes : ["warlock", "wizard"], source : [["T", 114]], level : 3, school : "Necro", time : "1 a", range : "90 ft", components : "V,S,M\u0192", compMaterial : "A gilded skull worth at least 300 gp", duration : "Conc, 1 h", description : "Summon choice of Undead Spirit; obeys commands; takes turn after mine; disappears at 0 hp (300gp)", descriptionFull : "You call forth an undead spirit. It manifests in an unoccupied space that you can see within range. This corporeal form uses the Undead Spirit stat block. When you cast the spell, choose the creature's form: Ghostly, Putrid, or Skeletal. The spirit resembles an undead creature with the chosen form, which determines certain traits in its stat block. The creature disappears when it drops to 0 hit points or when the spell ends.\n The creature is an ally to you and your companions. In combat, the creature shares your initiative count, but it takes its turn immediately after yours. It obeys your verbal commands (no action required by you). If you don't issue any, it takes the Dodge action and uses its move to avoid danger." + AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, use the higher level wherever the spell's level appears in the stat block." }; SpellsList["tasha's caustic brew"] = { name : "Tasha's Caustic Brew", nameAlt : "Caustic Brew", classes : ["artificer", "sorcerer", "wizard"], source : [["T", 115]], level : 1, school : "Evoc", time : "1 a", range : "S:30-ft line", components : "V,S,M", compMaterial : "A bit of rotten food", duration : "Conc, 1 min", save : "Dex", description : "30-ft long 5-ft wide all save or 2d4+2d4/SL Acid dmg at start of turn; action to clean self or adjacent", descriptionShorter : "30-ft long 5-ft wide all save or 2d4+2d4/SL Acid dmg at turn start; 1 a clean self/adjacent", descriptionFull : "A stream of acid emanates from you in a line 30 feet long and 5 feet wide in a direction you choose. Each creature in the line must succeed on a Dexterity saving throw or be covered in acid for the spell's duration or until a creature uses its action to scrape or wash the acid off itself or another creature. A creature covered in the acid takes 2d4 acid damage at start of each of its turns." + AtHigherLevels + "When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 2d4 for each slot level above 1st." }; SpellsList["tasha's mind whip"] = { name : "Tasha's Mind Whip", nameAlt : "Mind Whip", regExpSearch : /^(?=.*mind)(?=.*(whip|thrust)).*$/i, // "Mind Thrust" in UA:POR classes : ["sorcerer", "wizard"], source : [["T", 115], ["UA:POR", 8]], level : 2, school : "Ench", time : "1 a", range : "90 ft", components : "V", duration : "1 rnd", save : "Int", description : "1+1/SL crea, max 30 ft apart; 3d6 Psychic dmg; no rea; only move, act, or bns; save half, no act limit", descriptionShorter : "1+1/SL crea, max 30 ft apart; 3d6 Psychic dmg; no rea; move, act, or bns; save half, no act limit", descriptionFull : "You psychically lash out at one creature you can see within range. The target must make an Intelligence saving throw. On a failed save, the target takes 3d6 psychic damage, and it can't take a reaction until the end of its next turn. Moreover, on its next turn, it must choose whether it gets a move, an action, or a bonus action; it gets only one of the three. On a successful save, the target takes half as much damage and suffers none of the spell's other effects." + AtHigherLevels + "When you cast this spell using a spell slot of 3rd level or higher, you can target one additional creature for each slot level above 2nd. The creatures must be within 30 feet of each other when you target them." }; SpellsList["tasha's otherworldly guise"] = { name : "Tasha's Otherworldly Guise", nameShort : "T's Otherworldly Guise", nameAlt : "Otherworldly Guise", classes : ["sorcerer", "warlock", "wizard"], source : [["T", 116]], level : 6, school : "Trans", time : "1 bns", range : "Self", components : "V,S,M\u0192", compMaterial : "An object engraved with a symbol of the Outer Planes, worth at least 500 gp", duration : "Conc, 1 min", description : "Fire/Poison or Radiant/Necrotic/Charm immune; 40 ft fly; +2 AC; 2 atks; spellcast. abi atks (500gp)", descriptionFull : "Uttering an incantation, you draw on the magic of the Lower Planes or Upper Planes (your choice) to transform yourself. You gain the following benefits until the spell ends:" + "\n \u2022 You are immune to fire and poison damage (Lower Planes) or radiant and necrotic damage (Upper Planes)." + "\n \u2022 You are immune to the poisoned condition (Lower Planes) or the charmed condition (Upper Planes)." + "\n \u2022 Spectral wings appear on your back, giving you a flying speed of 40 feet." + "\n \u2022 You have a +2 bonus to AC." + "\n \u2022 All your weapon attacks are magical, and when you make a weapon attack, you can use your spellcasting ability modifier, instead of Strength or Dexterity, for the attack and damage rolls." + "\n \u2022 You can attack twice, instead of once, when you take the Attack action on your turn. You ignore this benefit if you already have a feature, like Extra Attack, that lets you attack more than once when you take the Attack action on your turn." }; // >>>>>>>>>>>>>>>>>>> // // >>> Magic Items >>> // // >>>>>>>>>>>>>>>>>>> // // Tattoos var TCoE_magicTattoosDescription = desc([ " >>Tattoo Attunement<<. To attune to this item, you hold the needle to your skin where you want the tattoo to appear, pressing the needle there throughout the attunement process. When the attunement is complete, the needle turns into the ink that becomes the tattoo, which appears on the skin.", " If your attunement to the tattoo ends, the tattoo vanishes, and the needle reappears in your space.", "\n>>Magic Tattoos<< (TCoE 118)", " Blending magic and artistry with ink and needles, magic tattoos imbue their bearers with wondrous abilities. Magic tattoos are initially bound to magic needles, which transfer their magic to a creature.", " Once inscribed on a creature's body, damage or injury doesn't impair the tattoo's function, even if the tattoo is defaced. When applying a magic tattoo, a creature can customize the tattoo's appearance. A magic tattoo can look like a brand, scarification, a birthmark, patterns of scale, or any other cosmetic alteration.", " The rarer a magic tattoo is, the more space it typically occupies on a creature's skin. The table below offers guidelines for how large a given tattoo is.", "\n>>Tattoo Rarity\tArea Covered<<", "Common \tOne hand or foot or a quarter of a limb", "Uncommon \tHalf a limb or the scalp", "Rare\t\tOne limb", "Very Rare \tTwo limbs or the chest or upper back", "Legendary \tTwo limbs and the torso" ], "\n "); magicTattoosTxt = { // a public variable to be used for any magical tattoo that uses these rules base : TCoE_magicTattoosDescription, unicode : TCoE_magicTattoosDescription.replace(/>>(.*?)<>(.*?)<>(.*?)<>Sentience<<. Nepenthe is a sentient, neutral evil weapon with an Intelligence of 10, a Wisdom of 8, and a Charisma of 18. It has hearing and darkvision out to a range of 60 feet. It can read and understand Elvish. It can also speak Elvish, but only through the voice of its wielder, with whom the sword can communicate telepathically.", ">>Personality<<. In its lifetime, the sword has beheaded thousands of criminals, not all of whom were guilty of the crimes for which they were convicted. The sword cannot distinguish the guilty from the innocent. With each beheading, it hungers for more justice and blood. The sword is corrupt and irredeemable." ] MagicItemsList["nepenthe"] = { name : "Nepenthe", source : [["VRGtR", 137]], type : "weapon (any sword)", rarity : "legendary", magicItemTable : "I", attunement : true, prerequisite : "Requires attunement by a paladin", prereqeval : function (v) { return classes.known.paladin ? true : false; }, description : "This sentient holy avenger longsword gives me a +3 bonus to attack and damage rolls. It does +2d10 radiant damage against fiends and undead. While holding the drawn sword, I have a 10-ft radius aura (30-ft if level 17 paladin) that grants me and my allies adv. on saves against spells and magical effects.", descriptionFull : VRGtR_nepentheFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)<>(.*?)<>Sentience<<. Snicker-Snack is a sentient, chaotic good greatsword with an Intelligence of 9, a Wisdom of 14, and a Charisma of 18. It has hearing and darkvision out to a range of 120 feet. It can speak, read, and understand Common, and its voice sounds silvery and melodic. Snicker-Snack craves the destruction of evil Dragons and urges you to seek out these creatures and slay them.", ">>Personality<<. Snicker-Snack has a fickle personality. It ends its attunement to you if you miss on attack rolls with the weapon three times in a row. Each time you finish a long rest after that happens, you can attempt to regain the sword's trust by making a contested Charisma check against Snicker-Snack. If you win the contest, your attunement to the weapon is instantly restored. Your attunement to the weapon can't be restored in any other way." ]; MagicItemsList["snicker-snack"] = { name : "Snicker-Snack", source : [["WBtW", 213]], type : "weapon (greatsword)", rarity : "legendary", attunement : true, prerequisite : "Requires attunement by a non-evil creature", prereqeval : function(v) { return !/evil/i.test(What("Alignment")); }, description : "I have a +3 bonus on attack and damage rolls with this sentient magic greatsword and can use Cha instead of Str. It ignores slashing resistance. On a 20 to hit, it cuts off " + (typePF ? "a head" : "one head, possibly killing it instantly") + ". If the target has legendary actions, no head, too wide neck, or is immune to slashing damage, it takes +6d8 damage instead. See Notes.", descriptionFull : WBtW_Snicker_Snack_Full_Description.join("\n ").replace(/>>(.*?)< What('Str')) { fields.Mod = 6; } }, "I can use my Charisma modifier instead of my Strength modifier for attack and damage rolls made with Snicker-Snack." ] } } var WBtW_Steel_Full_Description = [ "You have a +2 bonus to attack and damage rolls made with this magic weapon.", ">>Revivify<<. You can use an action to cast the revivify spell from the sword. You must touch the target with the sword to cast the spell. Once this property of the weapon is used, it can't be used again until the next dawn.", ">>Sentience<<. Steel is a sentient, lawful good longsword with an Intelligence of 8, a Wisdom of 11, and a Charisma of 15. It can see and hear out to a range of 60 feet. The sword can speak, read, and understand Common and Draconic. It frets over your well-being while you are attuned to it, and it doesn't like to back down from a fight." ]; MagicItemsList["steel"] = { name : "Steel", source : [["WBtW", 214]], type : "weapon (longsword)", rarity : "very rare", attunement : true, prerequisite : "Requires attunement by a good-aligned creature", prereqeval : function(v) { return /good/i.test(What("Alignment")); }, description : "This sentient longsword adds +2 to attack and damage rolls made with it. As an action once per dawn, I can use it to cast Revivify on a target I touch with the sword. Steel is lawful good and frets over my well-being and doesn't like to back down from a fight. It has Int 8, Wis 11, and Cha 15. See Notes page.", descriptionFull : WBtW_Steel_Full_Description.join("\n ").replace(/>>(.*?)<>Magic Weapon<<. In the hands of one who is attuned to it, the vane can be wielded as a magic mace that grants a +3 bonus to attack and damage rolls made with it. In addition, the vane deals an extra 1d8 radiant damage on a hit.", ">>Sense Mood<<. While the vane is inside the perimeter of the Witchlight Carnival, it can sense the mood of every creature in the carnival that has an Intelligence of 4 or higher. As an action, a creature attuned to the vane can use it to pinpoint the location of the happiest creature in the carnival.", "The butterfly shape at the top of the vane spins slowly clockwise when spirits in the carnival are generally high; if the general mood in the carnival is dour, the top of the vane spins slowly counterclockwise.", ">>Sentience<<. The vane is a sentient, chaotic good wondrous item with an Intelligence of 11, a Wisdom of 14, and a Charisma of 14. It has hearing and normal vision out to a range of 30 feet, and it communicates by transmitting emotion to the creature attuned to it. Its purpose is to make sure everyone in the Witchlight Carnival is having a good time.", ">>Additional Properties<<. The vane has the following additional properties:", "\u2022 The creature holding the vane has vulnerability to lightning damage.", "\u2022 The creature attuned to the vane can't be blinded, deafened, petrified, or stunned.", "\u2022 While carrying the vane, the creature attuned to it can cast the dancing lights, polymorph, or ray of frost spell as an action, requiring no spell components and using Charisma as the spellcasting ability. After the vane's polymorph spell is cast, roll a d8; on a roll of 3 or 8, the vane can't be used to cast this spell again until the next dawn." ]; MagicItemsList["witchlight vane"] = { name : "Witchlight Vane", source : [["WBtW", 27]], type : "wondrous item", rarity : "legendary", attunement : true, prerequisite : "Requires attunement by a mister light or his handpicked successor", description : "I can use this sentient ornate rod as a +3 mace that deals an extra 1d8 radiant damage on a hit. It can sense the mood of every creature in the carnival. As an action, I can pinpoint the happiest in the carnival. I can use it to cast spells. I can't be blinded, deafened, petrified, or stunned. See Notes page.", descriptionLong : "This sentient ornate rod is topped by a pair of butterfly wings and incorporates bits of red glass into its length. I can use it as a +3 mace that deals an extra 1d8 radiant damage on a hit. It can sense the mood of every creature in the carnival. As an action, I can use it to pinpoint the happiest in the carnival. I can use it to cast Dancing Light, Ray of Frost, and Polymorph. After I use it to cast Polymorph, roll a d8. On a roll of 3 or 8, the vane can't be used to cast Polymorph again until the next dawn. It makes me vulnerable to lightning damage, but I can't be blinded, deafened, petrified, or stunned. See Notes page.", descriptionFull : WBtW_Witchlight_Vane_Full_Description.join("\n ").replace(/>>(.*?)<>Carnival Setup and Takedown<<. The creature attuned to the watch can use an action to initiate the packing up or the unpacking of the Witchlight Carnival, provided the creature and the carnival are on the same plane of existence. In the span of 1 hour, all objects that are elements of the carnival are magically whisked about until everything is packed up and ready for travel, or unpacked and assembled. The watch has no effect on creatures, which can move about freely and safely while the carnival is being set up or taken down. Once the process of packing up or unpacking the carnival begins, it can't be stopped until the task is complete. When the watch is used to pack up or unpack the carnival, this property cannot be used again until 8 hours have elapsed.", ">>Additional Properties<<. The pocket watch has the following additional properties:", "\u2022 While carrying the watch, the creature attuned to it can cast the fire bolt, invisibility, or message spell as an action, requiring no spell components and using Intelligence as the spellcasting ability. After the watch's invisibility spell is cast, roll a d8; on a roll of 3 or 8, the watch can't be used to cast this spell again until the next dawn.", "\u2022 The creature attuned to the watch gains 30 pounds. This extra weight vanishes when the attunement ends.", "\u2022 The creature attuned to the watch must eat and drink eight times the normal amount each day." ]; MagicItemsList["witchlight watch"] = { name : "Witchlight Watch", source : [["WBtW", 25]], type : "wondrous item", rarity : "legendary", attunement : true, prerequisite : "Requires attunement by a mister witch or his handpicked successor", description : "As an action once per 8 hours, I can use this ornate pocket watch to initiate the (un)packing of the carnival over the next hour. I can use it to cast Fire Bolt, Message, and Invisibility. After it casts Invisibility, I roll a d8. On a roll of 3 or 8, I can't cast this again until the next dawn. See Notes page.", descriptionLong : "This ornate pocket watch is fastened to the end of a gold chain and glows with a faint golden light when opened. As an action once per 8 hours, I can use this ornate pocket watch to initiate the (un)packing of the carnival over the next hour, provided the carnival and I are on the same plane of existence. I can use it to cast Fire Bolt, Message, and Invisibility. After I use it to cast Invisibility, roll a d8. On a roll of 3 or 8, it can't be used to cast Invisibility again until the next dawn. As long as I'm attuned to it, I'm 30 lb heavier and must eat and drink eight times the normal amount each day. See Notes page.", descriptionFull : WBtW_Witchlight_Watch_Full_Description.join("\n ").replace(/>>(.*?)<>TYPE<< Breath Weapon: When I take the Attack action on my turn, I can replace one attack with a breath weapon that deals 1d10 >>type<< damage to all in a 5-ft by 30-ft line, Dex save halves (DC 8 + Con mod + Proficiency Bonus). I can do this my Proficiency Bonus per long rest. The damage increases with +1d10 at 5th, 11th, and 17th level.", "Chromatic Warding: From 5th level, I can protect myself using my draconic energies. As an action once per long rest, I can become immune to >>type<< damage for 1 minute." ], "\n \u2022 "), features : { "chromatic warding" : { name : "Chromatic Warding", source : [["FToD", 10]], minlevel : 5, usages : 1, recovery : "long rest", action : [["action", ""]] } } }, Gem : { regExpSearch : /^(?=.*gem)(?=.*dragonborn).*$/i, source : [["FToD", 11]], variants : [["Amethyst", "Force"], ["Crystal", "Radiant"], ["Emerald", "Psychic"], ["Sapphire", "Thunder"], ["Topaz", "Necrotic"]], breathWeaponShape : "15-ft cone", trait : desc([ ">>TYPE<< Breath Weapon: When I take the Attack action on my turn, I can replace one attack with a breath weapon that deals 1d10 >>type<< damage to all in a 15-ft cone, Dex save halves (DC 8 + Con mod + Prof Bonus). I can do this my Prof" + (typePF ? "iciency" : ".") + " Bonus per long rest.", "Psionic Mind: " + (typePF ? "I can send telepathic messages to any creature I can see within 30 ft that understands at least one language." : "I can telepathically message a creature with a language I can see in 30 ft."), "Gem Flight: From 5th level, I can manifest spectral wings. As a bonus action once per long rest, I can gain, for 1 minute, a flying speed equal to my walking speed and can hover." ], "\n \u2022 "), features : { "gem flight" : { name : "Gem Flight", source : [["FToD", 11]], minlevel : 5, usages : 1, recovery : "long rest", action : [["bonus action", ""]] } } }, Metallic : { regExpSearch : /^(?=.*metallic)(?=.*dragonborn).*$/i, source : [["FToD", 12]], variants : [["Brass", "Fire"], ["Bronze", "Lightning"], ["Copper", "Acid"], ["Gold", "Fire"], ["Silver", "Cold"]], breathWeaponShape : "15-ft cone", trait : desc([ ">>TYPE<< Breath Weapon: When I take the Attack action on my turn, I can replace one attack with a breath weapon that deals 1d10 >>type<< damage to all in a 15-ft cone, Dex save halves (DC 8 + Con mod + Prof" + (typePF ? "iciency" : ".") + " Bonus). I can do this my Prof" + (typePF ? "iciency" : ".") + " Bonus per long rest.", "Metallic Breath Weapon: At 5th level I gain a second breath weapon once per long rest, that works just like the first, but I choose the effect when I use it: Enervating: Con save or incapacitated until my next turn starts. Repulsion: Str save or pushed 20 ft and prone." ], "\n \u2022 "), features : { "metallic breath weapon" : { name : "Metallic Breath Weapon", source : [["FToD", 12]], minlevel : 5, usages : 1, recovery : "long rest", weaponOptions : [{ regExpSearch : /^(?=.*metallic)(?=.*breath)(?=.*weapon).*$/i, name : "Metallic breath weapon", source : [["FToD", 12]], ability : 3, type : 'Natural', damage : ['Enervating', '', 'or Repulsion'], range : "15-ft cone", description : "Repulsion: Str save or pushed 20 ft \u0026 prone; Enervating: Con save or incapacitated till my next turn starts", abilitytodamage : false, dc : true, selectNow : true }] } } } } for (var sDrBrn in objDragonborns) { var sDrBrnLC = sDrBrn.toLowerCase(); var oDrBrn = objDragonborns[sDrBrn]; RaceList[sDrBrnLC + " dragonborn"] = { regExpSearch : oDrBrn.regExpSearch, name : sDrBrn + " Dragonborn", sortname : "Dragonborn, " + sDrBrn, source : oDrBrn.source, plural : sDrBrn + " Dragonborn", size : 3, speed : { walk : { spd : 30, enc : 20 } }, weaponOptions : [{ regExpSearch : /^(?=.*breath)(?=.*weapon).*$/i, name : "Breath weapon", source : oDrBrn.source, ability : 3, type : 'Natural', damage : ['C', 10, 'fire'], range : oDrBrn.breathWeaponShape.replace('by', '\xD7'), description : "Hits all in area; Dex save, success - half damage", abilitytodamage : false, dc : true, dbBreathWeapon : true, selectNow : true }], age : " reach adulthood by 15 and live around 80 years", height : " stand well over 6 feet tall (5'6\" + 2d8\")", weight : " weigh around 240 lb (175 + 2d8 \xD7 2d6 lb)", heightMetric : " stand well over 1,8 metres tall (170 + 5d8 cm)", weightMetric : " weigh around 110 kg (80 + 5d8 \xD7 4d6 / 10 kg)", scoresGeneric : true, trait : sDrBrn + " Dragonborn"+ "\n \u2022 " + sDrBrn + ' Ancestry: Choose a type of dragon using the "Racial Options" button. The damage type of my resistance and my breath weapon are determined by the dragon type chosen.'+ + oDrBrn.trait.replace(/>>type<< /ig, ""), features : { "breath weapon" : { name : "Breath Weapon", minlevel : 1, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", additional : cantripDie.map(function (n) { return n + 'd10'; }), calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.dbBreathWeapon && /dragonborn/i.test(CurrentRace.known) && CurrentRace.dmgres) { fields.Damage_Type = CurrentRace.dmgres[0]; } }, '', 1 ] } } }, variants : [] }; if (oDrBrn.features) { for (var sFea in oDrBrn.features) { RaceList[sDrBrnLC + " dragonborn"].features[sFea] = oDrBrn.features[sFea]; } } for (var i = 0; i < oDrBrn.variants.length; i++) { var sDrBrnVar = oDrBrn.variants[i][0]; var sDrBrnDmg = oDrBrn.variants[i][1]; AddRacialVariant(sDrBrnLC + " dragonborn", sDrBrnVar.toLowerCase(), { regExpSearch : RegExp(sDrBrnVar, "i"), name : sDrBrnVar + " " + sDrBrnLC + " dragonborn", trait : sDrBrnVar + " " + sDrBrnLC + " dragonborn"+ oDrBrn.trait.replace(/>>TYPE<>type<>Slumbering (Uncommon)<<. Whenever you roll a 20 on your attack roll with this weapon, each creature of your choice within 5 feet of the target takes 5 damage of the type dealt by the dragon's breath weapon.", ">>Stirring (Rare)<<. The Stirring weapon has the Slumbering property. In addition, you gain a +1 bonus to attack and damage rolls made using the weapon. On a hit, the weapon deals an extra 1d6 damage of the type dealt by the dragon's breath weapon.", ">>Wakened (Very Rare)<<. The Wakened weapon has the Slumbering property, and it improves on the Stirring property. The bonus to attack and damage rolls increases to +2, and the extra damage dealt by the weapon increases to 2d6.", "As an action, you can unleash a 30-foot cone of destructive energy from the weapon. Each creature in that area must make a DC 16 Dexterity saving throw, taking 8d6 damage of the type dealt by the dragon's breath weapon on a failed save, or half as much damage on a successful one. Once this action is used, it can't be used again until the next dawn.", ">>Ascendant (Legendary)<<. The Ascendant weapon has the Slumbering property, and it improves on the Stirring and Wakened properties. The bonus to attack and damage rolls increases to +3, and the extra damage dealt by the weapon increases to 3d6.", "The cone of destructive energy the weapon creates increases to a 60-foot cone, the save DC increases to 18, and the damage increases to 12d6." ], "dww-slumbering" : { description : "This magic weapon decorated with draconic ornaments has absorbed the energy of >>a dragon<< dragon's breath weapon. Whenever I roll a 20 on an attack roll with it, each creature of my choice within 5 ft of the target takes 5 >>dmg type<< damage.", calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && (v.isMeleeWeapon || v.isRangedWeapon) && /^(?=.*slumbering)(?=.*\b(black|blue|green|red|white|amethyst|crystal|emerald|sapphire|topaz|brass|bronze|copper|gold|silver).(dragon'?s?.wrath|DW)\b).*$/i.test(v.WeaponTextName)) { var sWeaNmLC = v.WeaponTextName.toLowerCase(); var aDragons = [["black", "acid"], ["blue", "lightning"], ["green", "poison"], ["red", "fire"], ["white", "cold"], ["amethyst", "force"], ["crystal", "radiant"], ["emerald", "psychic"], ["sapphire", "thunder"], ["topaz", "necrotic"], ["brass", "fire"], ["bronze", "lightning"], ["copper", "acid"], ["gold", "fire"], ["silver", "cold"]]; var sDmgType = false; for (var i = 0; i < aDragons.length; i++) { if (sWeaNmLC.indexOf(aDragons[i][0]) !== -1) { sDmgType = aDragons[i][1]; break; } } if (!sDmgType) return; v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + 'On 20 to hit: 5 ' + sDmgType + ' damage to chosen in 5 ft of target'; }; }, "If I include the words \"TYPE Dragon's Wrath\" or \"TYPE DW\" (where \"TYPE\" is replaced with a dragon's type like \"Red\") and \"Slumbering\" in the name of a weapon, it will be treated as the magic item Slumbering Dragon's Wrath Weapon (e.g. \"Red DW Longbow (slumbering)\"). Whenever I roll a 20 on an attack roll with a slumbering dragon's wrath weapon, each creature of my choice within 5 ft of the target takes 5 damage of the associated dragon's type. " ] } }, "dww-stirring" : { description : "This dragon decorated weapon has absorbed the energy of >>a dragon<< dragon's breath weapon. I add +1 on attack and damage rolls made with it and it deals +1d6 >>dmg type<< damage. When I roll a 20 on an attack roll with it, each creature of my choice within 5 ft of the target takes 5 >>dmg type<< damage.", calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && (v.isMeleeWeapon || v.isRangedWeapon) && /^(?=.*stirring)(?=.*\b(black|blue|green|red|white|amethyst|crystal|emerald|sapphire|topaz|brass|bronze|copper|gold|silver).(dragon'?s?.wrath|DW)\b).*$/i.test(v.WeaponTextName)) { var sWeaNmLC = v.WeaponTextName.toLowerCase(); var aDragons = [["black", "acid"], ["blue", "lightning"], ["green", "poison"], ["red", "fire"], ["white", "cold"], ["amethyst", "force"], ["crystal", "radiant"], ["emerald", "psychic"], ["sapphire", "thunder"], ["topaz", "necrotic"], ["brass", "fire"], ["bronze", "lightning"], ["copper", "acid"], ["gold", "fire"], ["silver", "cold"]]; var sDmgType = false; for (var i = 0; i < aDragons.length; i++) { if (sWeaNmLC.indexOf(aDragons[i][0]) !== -1) { sDmgType = aDragons[i][1]; break; } } if (!sDmgType) return; v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + '+1d6 ' + sDmgType + ' damage; On 20: 5 ' + sDmgType + ' damage to chosen in 5 ft of target'; }; }, "If I include the words \"TYPE Dragon's Wrath\" or \"TYPE DW\" (where \"TYPE\" is replaced with a dragon's type like \"Red\") and \"Stirring\" in the name of a weapon, it will be treated as the magic item Stirring Dragon's Wrath Weapon (e.g. \"Red DW Longbow (stirring)\"). A stirring dragon's wrath weapon adds +1 to attack and damage rolls made with it. On a hit, the weapon deals an extra +1d6 damage and on a 20 on an attack roll with it, each creature of my choice within 5 ft of the target takes 5 damage. The damage is of the associated dragon's type." ], atkCalc : [ function (fields, v, output) { if (!v.theWea.isMagicWeapon && (v.isMeleeWeapon || v.isRangedWeapon) && /^(?=.*stirring)(?=.*\b(dragon'?s?.wrath|DW)\b).*$/i.test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; output.magic = v.thisWeapon[1] + 1; } }, '' ] } }, "dww-wakened" : { description : "This weapon uses >>dmg type<< of >>a dragon<< dragon. It adds +2 to its attack and damage rolls and deals +2d6 >>dmg type<< damage. On a 20 to hit, any creature of my choice in 5 ft of the target take 5 damage. As an action once per dawn, it can do a 30-ft cone, Dex DC 16 half, 8d6 damage dragon breath.", calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && (v.isMeleeWeapon || v.isRangedWeapon) && /^(?=.*wakened)(?=.*\b(black|blue|green|red|white|amethyst|crystal|emerald|sapphire|topaz|brass|bronze|copper|gold|silver).(dragon'?s?.wrath|DW)\b).*$/i.test(v.WeaponTextName)) { var sWeaNmLC = v.WeaponTextName.toLowerCase(); var aDragons = [["black", "acid"], ["blue", "lightning"], ["green", "poison"], ["red", "fire"], ["white", "cold"], ["amethyst", "force"], ["crystal", "radiant"], ["emerald", "psychic"], ["sapphire", "thunder"], ["topaz", "necrotic"], ["brass", "fire"], ["bronze", "lightning"], ["copper", "acid"], ["gold", "fire"], ["silver", "cold"]]; var sDmgType = false; for (var i = 0; i < aDragons.length; i++) { if (sWeaNmLC.indexOf(aDragons[i][0]) !== -1) { sDmgType = aDragons[i][1]; break; } } if (!sDmgType) return; v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + '+2d6 ' + sDmgType + ' damage; On 20: 5 ' + sDmgType + ' damage to chosen in 5 ft of target'; }; }, "If I include the words \"TYPE Dragon's Wrath\" or \"TYPE DW\" (where \"TYPE\" is replaced with a dragon's type like \"Red\") and \"Wakened\" in the name of a weapon, it will be treated as the magic item Wakened Dragon's Wrath Weapon (e.g. \"Red DW Longbow (wakened)\"). A wakened dragon wrath weapon adds +2 to attack and damage rolls made with it. On a hit, the weapon deals an extra +2d6 damage and on a 20 on an attack roll with it, each creature of my choice within 5 ft of the target takes 5 damage. The damage is of the associated dragon's type." ], atkCalc : [ function (fields, v, output) { if (!v.theWea.isMagicWeapon && (v.isMeleeWeapon || v.isRangedWeapon) && /^(?=.*wakened)(?=.*\b(dragon'?s?.wrath|DW)\b).*$/i.test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; output.magic = v.thisWeapon[1] + 2; } }, '' ] }, usages : 1, recovery : "dawn", limfeaname : ">>dragon<< Dragon's Wrath Breath (wakened)", action : [["action", ""]], weaponOptions : [{ regExpSearch : "^(?=.*wakened)(?=.*>>dragon<< (dragon'?s? wrath|DW))(?=.*breath).*$", name : ">>dragon<< Dragon's Wrath Breath (wakened)", source : [["FToD", 25]], ability : 0, type : "Magic Item", damage : [8, 6, ">>type<<"], range : "30-ft cone", description : "Hits all in area; Dex save, success - half damage; Usable only once per dawn", abilitytodamage : false, dc : true, modifiers : [8, ""], selectNow : true }] }, "dww-ascendant" : { description : "This weapon uses >>dmg type<< of >>a dragon<< dragon. It adds +3 to its attack and damage rolls and deals +3d6 >>dmg type<< damage. On a 20 to hit, any creature of my choice in 5 ft of the target take 5 damage. As an action once per dawn, it can do a 60-ft cone, Dex DC 18 half, 12d6 damage dragon breath.", calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && (v.isMeleeWeapon || v.isRangedWeapon) && /^(?=.*ascendant)(?=.*\b(black|blue|green|red|white|amethyst|crystal|emerald|sapphire|topaz|brass|bronze|copper|gold|silver).(dragon'?s?.wrath|DW)\b).*$/i.test(v.WeaponTextName)) { var sWeaNmLC = v.WeaponTextName.toLowerCase(); var aDragons = [["black", "acid"], ["blue", "lightning"], ["green", "poison"], ["red", "fire"], ["white", "cold"], ["amethyst", "force"], ["crystal", "radiant"], ["emerald", "psychic"], ["sapphire", "thunder"], ["topaz", "necrotic"], ["brass", "fire"], ["bronze", "lightning"], ["copper", "acid"], ["gold", "fire"], ["silver", "cold"]]; var sDmgType = false; for (var i = 0; i < aDragons.length; i++) { if (sWeaNmLC.indexOf(aDragons[i][0]) !== -1) { sDmgType = aDragons[i][1]; break; } } if (!sDmgType) return; v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + '+3d6 ' + sDmgType + ' damage; On 20: 5 ' + sDmgType + ' damage to chosen in 5 ft of target'; }; }, "If I include the words \"TYPE Dragon's Wrath\" or \"TYPE DW\" (where \"TYPE\" is replaced with a dragon's type like \"Red\") and \"Ascendant\" in the name of a weapon, it will be treated as the magic item Ascendant Dragon's Wrath Weapon (e.g. \"Red DW Longbow (ascendant)\"). An ascendant dragon wrath weapon adds +3 to attack and damage rolls made with it. On a hit, the weapon deals an extra +3d6 damage and on a 20 on an attack roll with it, each creature of my choice within 5 ft of the target takes 5 damage. The damage is of the associated dragon's type." ], atkCalc : [ function (fields, v, output) { if (!v.theWea.isMagicWeapon && (v.isMeleeWeapon || v.isRangedWeapon) && /^(?=.*ascendant)(?=.*\b(dragon'?s?.wrath|DW)\b).*$/i.test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; output.magic = v.thisWeapon[1] + 3; } }, '' ] }, usages : 1, recovery : "dawn", limfeaname : ">>dragon<< Dragon's Wrath Breath (ascendant)", action : [["action", "Dragon's Wrath Breath Weapon"]], weaponOptions : [{ regExpSearch : "^(?=.*ascendant)(?=.*>>dragon<< (dragon'?s? wrath|DW))(?=.*breath).*$", name : ">>dragon<< Dragon's Wrath Breath (ascendant)", source : [["FToD", 25]], ability : 0, type : "Magic Item", damage : [12, 6, ">>type<<"], range : "60-ft cone", description : "Hits all in area; Dex save, success - half damage; Usable only once per dawn", abilitytodamage : false, dc : true, modifiers : [10, ""], selectNow : true }] }, dragonsWrathWeaponCreate : function() { var aTypes = [["Slumbering", "uncommon"], ["Stirring", "rare"], ["Wakened", "very rare"], ["Ascendant", "legendary"]]; var aDragons = [["Black", "acid"], ["Blue", "lightning"], ["Green", "poison"], ["Red", "fire"], ["White", "cold"], ["Amethyst", "force"], ["Crystal", "radiant"], ["Emerald", "psychic"], ["Sapphire", "thunder"], ["Topaz", "necrotic"], ["Brass", "fire"], ["Bronze", "lightning"], ["Copper", "acid"], ["Gold", "fire"], ["Silver", "cold"]]; var aVowels = ["a", "e"]; var sDescriptionFull = FToD_HoardItems["dragon's wrath weapon"].join("\n ").replace(/>>(.*?)<>a dragon<>dmg type<< /ig, ""), descriptionFull : sDescriptionFull, toNotesPage : [{ name : "Full Text", note : sNotesDescription }], allowDuplicates : true, choicesNotInMenu : true, choices : [] } for (var sAttr in oDwwObj) { if (/^(description|weaponOptions|limfeaname)$/.test(sAttr)) continue; MagicItemsList[sItemNameLC][sAttr] = oDwwObj[sAttr]; } for (var i = 0; i < aDragons.length; i++) { var sDragon = aDragons[i][0]; var sDragonLC = sDragon.toLowerCase(); var sDmg = aDragons[i][1]; var sNameChoice = sDragon + " dragon (" + sDmg + ")"; var sNameChoiceLC = sNameChoice.toLowerCase(); var sNameTest = sItemType + " " + sDragon + " Dragon's Wrath"; var sAorAnDragon = (aVowels.indexOf(sDragonLC[0]) === -1 ? "a " : "an ") + sDragonLC; MagicItemsList[sItemNameLC].choices.push(sNameChoice); MagicItemsList[sItemNameLC][sNameChoiceLC] = { name : sNameTest + " Weapon", nameTest : sNameTest, description : oDwwObj.description.replace(/>>a dragon<>dmg type<>dragon<>dragon<>dragon<>Slumbering (Uncommon)<<. You have advantage on initiative rolls. While you are holding the focus, it can function as a spellcasting focus for all your spells.", ">>Stirring (Rare)<<. The Stirring focus has the Slumbering property, and it gains an additional property determined by the family of the dragon in whose hoard it became Stirring:", "\u2022 Chromatic. Whenever you use a spell slot to cast a spell that deals acid, cold, fire, lightning, or poison damage, roll a d6, and you gain a bonus equal to the number rolled to one of the spell's damage rolls.", "\u2022 Gem. Whenever you use a spell slot to cast a spell, you can immediately teleport to an unoccupied space you can see within 15 feet of you.", "\u2022 Metallic. When a creature you can see within 30 feet of you makes a saving throw, you can use your reaction to give that creature advantage on the saving throw.", ">>Wakened (Very Rare)<<. The Wakened focus has the Slumbering and Stirring properties, and while you are holding a Wakened focus, you can use it to cast certain spells. Once the item is used to cast a given spell, it can't be used to cast that spell again until the next dawn. The spells are determined by the family of the dragon in whose hoard it became Wakened. An asterisk indicates a new spell that appears earlier in this chapter.", "\u2022 Chromatic. Hold monster, Rime's binding ice", "\u2022 Gem. Rary's telepathic bond, Raulothim's psychic lance", "\u2022 Metallic. Fizban's platinum shield, legend lore", ">>Ascendant (Legendary)<<. The Ascendant focus has the Slumbering, Stirring, and Wakened properties. In addition, when you cast a spell of 1st level or higher while holding this focus, you can treat the spell as if it were cast using a 9th-level spell slot. Once this property is used, it can't be used again until the next dawn." ], dtf_chromatic : { calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { if (CurrentSpells[spName].refType == "class" && !spellObj.psionic && spellObj.level !== 0 && (/(check|checked|marked)box/i.test(spellObj.firstCol) || (spName === "warlock" && !/atwill|sp/i.test(spellObj.firstCol)))) return genericSpellDmgEdit(spellKey, spellObj, "acid|cold|fire|lightning|lightn\\.?|poison", "1d6", true, true); }, "Whenever I use a spell slot to cast a spell that deals acid, cold, fire, lightning, or poison damage, roll a d6, and I gain a bonus equal to the number rolled to one of the spell's damage rolls." ] }, extraLimitedFeatures : [{ name : "Dragon-Touched Focus (Hold Monster)", usages : 1, recovery : "dawn" }, { name : "Dragon-Touched Focus (Rime's Binding Ice)", usages : 1, recovery : "dawn" }], spellcastingBonus : [{ name : "Once per dawn", spells : ["hold monster", "rime's binding ice"], selection : ["hold monster", "rime's binding ice"], firstCol : "oncelr", times : 2 }] }, dtf_gem : { extraLimitedFeatures : [{ name : "Dragon-Touched Focus (Rary's Telepathic Bond)", usages : 1, recovery : "dawn" }, { name : "Dragon-Touched Focus (R's Psychic Lance)", usages : 1, recovery : "dawn" }], spellcastingBonus : [{ name : "Once per dawn", spells : ["rary's telepathic bond", "raulothim's psychic lance"], selection : ["rary's telepathic bond", "raulothim's psychic lance"], firstCol : "oncelr", times : 2 }] }, dtf_metallic : { extraLimitedFeatures : [{ name : "Dragon-Touched Focus (F's Platinum Shield)", usages : 1, recovery : "dawn" }, { name : "Dragon-Touched Focus (Legend Lore)", usages : 1, recovery : "dawn" }], spellcastingBonus : [{ name : "Once per dawn", spells : ["fizban's platinum shield", "legend lore"], selection : ["fizban's platinum shield", "legend lore"], firstCol : "oncelr", times : 2 }] }, dtf_ascendant : { extraLimitedFeatures : [{ name : "Dragon-Touched Focus (upcast to 9th-level)", usages : 1, recovery : "dawn" }] }, "dragon vessel" : [ "This vessel can be a potion bottle, drinking horn, or other container meant to hold a liquid.", ">>Slumbering (Uncommon)<<. As a bonus action, if the vessel is empty, you can speak the command word to fill the vessel with one of the following (your choice): ale, olive oil, a potion of healing, or a potion of climbing. Once this property is used, it can't be used until the next dawn. A potion you create in this way loses its magical properties if it isn't imbibed within 24 hours.", ">>Stirring (Rare)<<. In addition to the options for a Slumbering vessel, you can fill a Stirring vessel with mead, a potion of fire breath, or a potion of healing (greater).", ">>Wakened (Very Rare)<<. In addition to the options for a Slumbering or Stirring vessel, you can fill a Wakened vessel with wine, a potion of flying, or a potion of healing (superior).", ">>Ascendant (Legendary)<<. In addition to the options for other states, you can fill an Ascendant vessel with whiskey, a potion of healing (supreme), or a potion of dragon's majesty (described earlier in this chapter)." ], "scaled ornament" : [ "This ornament can be jewelry, a cloak, or another wearable accessory. It appears to be fashioned from a dragon's scale, tooth, or claw, or it incorporates images in those shapes.", ">>Slumbering (Uncommon)<<. You have advantage on saving throws you make to avoid being charmed or frightened or to end those conditions on you.", ">>Stirring (Rare)<<. You gain a +1 bonus to AC, and you can't be charmed or frightened. Moreover, each creature of your choice within 30 feet of you has advantage on saving throws it makes to avoid being charmed or frightened or to end those conditions on itself.", ">>Wakened (Very Rare)<<. The Wakened ornament has the Stirring property. In addition, when you would take damage of the type dealt by the breath of the dragon in whose hoard the ornament became Wakened, you can use your reaction to take no damage instead, and you regain hit points equal to the damage you would have taken. Once this property is used, it can't be used again until the next dawn.", ">>Ascendant (Legendary)<<. The Ascendant ornament has the Stirring and Wakened properties. In addition, while you are wearing the ornament, you gain a flying speed equal to your walking speed and can hover. While you are flying using this speed, spectral dragon wings appear on your back." ], hoardMagicItems : [ "\n\n\u25C6 Hoard Magic Items (FToD 25)", "Certain magic items can absorb the ambient magic of a dragon's hoard. The mightier the dragon, the more powerful the item becomes when it is steeped in the dragon's hoard. These items, called hoard items, have four states. A hoard item in its Slumbering state has certain base properties, and it gains additional properties when it enters the Stirring (young dragon), Wakened (adult dragon), or Ascendant (ancient dragon) state.", "Ordinarily, a hoard item must steep in a dragon's hoard for 1 year to reach the maximum possible state allowed by the age of the hoard's dragon. For example, a hoard item that steeps in an adult dragon's hoard for 1 year enters its Wakened state.", "When a dragon is slain, the magic surrounding its hoard becomes volatile. This allows a hoard item to steep more quickly in the hoard. A hoard item steeped in a dragon's hoard for 8 hours rises one state, as long as the steeping begins within 1 hour of the dragon's death and occurs within the dragon's lair. Steeping in this way can't raise the state of the item beyond the state associated with the dragon's age.", "Just as hoard items can grow in power by absorbing the ambient magic of a dragon's hoard, so too can these treasures fall back into slumber. If no creature is attuned to a hoard item and that item isn't in a dragon's hoard, the item decreases in power by one state every 30 days until it is Slumbering." ].join("\n "), to1stPerson : function (sDescr) { return desc(sDescr).replace(/\bf(oo|ee)t\b/ig, "ft") .replace(/you are/ig, "I am").replace(/\byou\b/ig, "I") .replace(/(by|of|to|for|on) I\b|\bI to|\bI an?\b/ig, "$1 me") .replace(/\bI (to|a|an)\b/ig, "me $1") .replace(/your/g, "my").replace(/Your/g, "My") .replace(/ >>(.*?)( \(.*?\))?<<. /g, function(a, p1, p2) { return "\n " + p1.toUpperCase() + p2.toLowerCase() + "\n "; })+ FToD_HoardItems.hoardMagicItems; } } FToD_HoardItems.dragonsWrathWeaponCreate(); MagicItemsList["dragon-touched focus"] = { name : "Dragon-Touched Focus", nameTest : /^(?=.*dragon.touched)(?=.*(focus|rod|wand|staff|scepter|orb|amulet|crystal)).*$/i, source : [["FToD", 26]], type : "wondrous item", attunement : true, prerequisite : "Requires attunement by a spellcaster", prereqeval : function(v) { return v.isSpellcaster; }, description : "", descriptionFull : FToD_HoardItems["dragon-touched focus"].join("\n ").replace(/>>(.*?)<>(.*?)<>(.*?)<= 4 && CurrentFeats.known.indexOf("strixhaven initiate") !== -1; }, extraLimitedFeatures : [{ name : "Swap places with Strixhaven Mascot", recovery : "long rest", usages : 1, altResource : "SS 2+" }], spellcastingBonus : [{ name : "Strixhaven Mascot", spells : ["find familiar"], selection : ["find familiar"], firstCol : SpellRitualTag, }], choices : ["Lorehold", "Prismari", "Quandrix", "Silverquill", "Witherbloom"], selfChoosing : function () { var iStrixInit = CurrentFeats.known.indexOf("strixhaven initiate"); if (iStrixInit !== -1 && CurrentFeats.choices[iStrixInit]) { return CurrentFeats.choices[iStrixInit]; } }, "lorehold" : { description : "I can cast Find Familiar as a ritual and it can take the form of a Spirit Statue Mascot. When I take the Attack action on my turn, I can forgo one attack to have it make one attack with its reaction. As an action once per long rest (or 2nd-level spell slot) while its within 60 ft, I can teleport to swap places with it, if there's space.", creaturesAdd : [["Spirit Statue Mascot", true, false, "strixhaven_mascot"]] }, "prismari" : { description : "I can cast Find Familiar as a ritual and it can take the form of an Art Elemental Mascot. When I take the Attack action on my turn, I can forgo one attack to have it make an attack with its reaction. As an action once per long rest (or 2nd-level spell slot) while its within 60 ft, I can teleport to swap places with it, if there's space.", creaturesAdd : [["Art Elemental Mascot", true, false, "strixhaven_mascot"]] }, "quandrix" : { description : "I can cast Find Familiar as a ritual and it can take the form of a Fractal Mascot. When I take the Attack action on my turn, I can forgo one attack to have it make one attack with its reaction. As an action once per long rest (or 2nd-level spell slot) while its within 60 ft, I can teleport to swap places with it, if there's space.", creaturesAdd : [["Fractal Mascot", true, false, "strixhaven_mascot"]] }, "silverquill" : { description : "I can cast Find Familiar as a ritual and it can take the form of an Inkling Mascot. When I take the Attack action on my turn, I can forgo one attack to have it make one attack with its reaction. As an action once per long rest (or 2nd-level spell slot) while its within 60 ft, I can teleport to swap places with it, if there's space.", creaturesAdd : [["Inkling Mascot", true, false, "strixhaven_mascot"]] }, "witherbloom" : { description : "I can cast Find Familiar as a ritual and it can take the form of a Pest Mascot. When I take the Attack action on my turn, I can forgo one attack to have it make one attack with its reaction. As an action once per long rest (or 2nd-level spell slot) while its within 60 ft, I can teleport to swap places with it, if there's space.", creaturesAdd : [["Pest Mascot", true, false, "strixhaven_mascot"]] } }; if (CompanionList.familiar && CompanionList.pact_of_the_chain) { // Needs to be revisited for v24 CompanionList.strixhaven_mascot = { name : "Strixhaven Mascot", nameTooltip : "Strixhaven Mascot (feat)", nameOrigin : "variant of the Find Familiar 1st-level conjuration [ritual] spell", nameMenu : "Strixhaven Mascot familiar (feat)", source : [["SCC", 37]], includeCheck : CompanionList.pact_of_the_chain.includeCheck, action : [["action", "Swap places with Strixhaven Mascot"]].concat(CompanionList.familiar.action), attributesChange : CompanionList.pact_of_the_chain.attributesChange, attributesAdd : CompanionList.familiar.attributesAdd, notes : function() { var a = newObj(CompanionList.pact_of_the_chain.notes); a[0].description = [ "appearing in an unoccupied space within 10 ft", "It assumes a chosen beast or mascot form (can change at every casting), see the spell and feat", "It has the chosen form's statistics, but its type changes from beast to celestial, fey, or fiend", "When the familiar drops to 0 hit points, it disappears, leaving behind no physical form", "It reappears when I cast this spell again (in a new form if so desired)" ].join("\n "); a.push({ name : "As an action while it is within 60 ft, we can teleport", description : [ "swapping places if there is enough space", "I can do this once per long rest, or by expending a 2nd-level or higher spell slot (SS 2+)" ].join("\n "), joinString : ", " }); return a; }() }; } // Spells SpellsList["borrowed knowledge"] = { name : "Borrowed Knowledge", classes : ["bard", "cleric", "warlock", "wizard"], source : [["SCC", 37]], level : 2, school : "Div", time : "1 a", range : "Self", components : "V,S,M\u0192", compMaterial : "A book worth at least 25 gp.", duration : "1 h", description : "Gain proficiency with one skill; ends early if cast again (25gp)", descriptionFull : "You draw on knowledge from spirits of the past. Choose one skill in which you lack proficiency. For the spell's duration, you have proficiency in the chosen skill. The spell ends early if you cast it again." }; SpellsList["kinetic jaunt"] = { name : "Kinetic Jaunt", classes : ["artificer", "bard", "sorcerer", "wizard"], source : [["SCC", 37]], level : 2, school : "Trans", time : "1 bns", range : "Self", components : "S", duration : "Conc, 1 min", description : "+10 ft walk spd; provoke no opportunity atks; move through crea space, counts not as difficult terrain", descriptionFull : "You magically empower your movement with dance-like steps, giving yourself the following benefits for the duration."+ "\n \u2022 Your walking speed increases by 10 feet."+ "\n \u2022 You don't provoke opportunity attacks."+ "\n \u2022 You can move through the space of another creature, and it doesn't count as difficult terrain. If you end your turn in another creature's space, you are shunted to the last unoccupied space you occupied, and you take 1d8 force damage." }; SpellsList["silvery barbs"] = { name : "Silvery Barbs", classes : ["bard", "sorcerer", "wizard"], source : [["SCC", 38]], level : 1, school : "Ench", time : "1 rea", timeFull : "1 reaction, which you take when a creature you can see within 60 feet of yourself succeeds on an attack roll, an ability check, or a saving throw", range : "60 ft", components : "V", duration : "Instantaneous", description : "1 crea reroll d20 and use lowest for atk, check, or save; 1 crea adv. next atk, check, or save in 1 min", descriptionFull : "You magically distract the triggering creature and turn its momentary uncertainty into encouragement for another creature. The triggering creature must reroll the d20 and use the lower roll."+ "\n You can then choose a different creature you can see within range (you can choose yourself). The chosen creature has advantage on the next attack roll, ability check, or saving throw it makes within 1 minute. A creature can be empowered by only one use of this spell at a time." }; SpellsList["vortex warp"] = { name : "Vortex Warp", classes : ["artificer", "sorcerer", "wizard"], source : [["SCC", 38]], level : 2, school : "Conj", time : "1 a", range : "90 ft", components : "V,S", duration : "Instantaneous", save : "Con", description : "1 crea save or teleported to a sufficiently empty space of my choice within range; +30 ft/SL range", descriptionFull : "You magically twist space around another creature you can see within range. The target must succeed on a Constitution saving throw (the target can choose to fail), or the target is teleported to an unoccupied space of your choice that you can see within range. The chosen space must be on a surface or in a liquid that can support the target without the target having to squeeze."+ AtHigherLevels + "When you cast this spell using a spell slot of 3rd level or higher, the range of the spell increases by 30 feet for each slot level above 2nd." }; SpellsList["wither and bloom"] = { name : "Wither and Bloom", classes : ["druid", "sorcerer", "wizard"], source : [["SCC", 38]], level : 2, school : "Necro", time : "1 a", range : "60 ft", components : "V,S,M", compMaterial : "A withered vine twisted into a loop.", duration : "Instantaneous", save : "Con", description : "10-ft rad any crea 2d6+1d6/SL Necrotic dmg, save half; 1 crea can heal using 1+1/SL HD; see B", descriptionFull : "You invoke both death and life upon a 10-foot-radius sphere centered on a point within range. Each creature of your choice in that area must make a Constitution saving throw, taking 2d6 necrotic damage on a failed save, or half as much damage on a successful one. Nonmagical vegetation in that area withers."+ "\n In addition, one creature of your choice in that area can spend and roll one of its unspent Hit Dice and regain a number of hit points equal to the roll plus your spellcasting ability modifier."+ AtHigherLevels + "When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d6 for each slot above the 2nd, and the number of Hit Dice that can be spent and added to the healing roll increases by one for each slot above 2nd." }; // Magic Items MagicItemsList["bottle of boundless coffee"] = { name : "Bottle of Boundless Coffee", source : [["SCC", 38]], type : "wondrous item", rarity : "common", description : "This metal bottle is full with delicious, comfortably warm coffee, but I can't feel the heat. It has a stopper on a little chain. It will accept only the coffee it produces. Each time I drink the coffee, I roll a d20. On a 1, the bottle stops dispensing coffee for 1 hour. Unless drunk, the coffee vanishes when it leaves the bottle.", descriptionFull : "This metal bottle carries delicious, warm coffee. The bottle comes with a stopper, which is attached to the bottle by a little chain. Even when open, the bottle won't accept any liquid other than the coffee it produces. The coffee inside is always comfortably warm, and none of the heat can be felt through the bottle."+ "\n Each time you drink the coffee, roll a d20. On a 1, the bottle refuses to dispense coffee for the next hour. If you pour coffee from the bottle, rather than drinking from it, the coffee vanishes the moment it leaves the bottle." } MagicItemsList["cuddly strixhaven mascot"] = { name : "Cuddly Strixhaven Mascot", source : [["SCC", 38]], type : "wondrous item", rarity : "common", description : "This soft, Tiny, magic toy represents a Strixhaven mascot. As an action, I can press it to my arm, shoulder, or leg, and it attaches there for 1 hour or until I remove it as an action. Once per long rest while this toy is on my person, I can give myself advantage on the save to avoid or end the frightened condition on myself.", descriptionFull : "Representing one of the mascots of Strixhaven, this soft, Tiny, magic toy is perfect for cuddling. If you press it to your arm, shoulder, or leg as an action, the toy stays attached there for 1 hour or until you use an action to remove it."+ "\n The toy can also be used to fight off fear. When you make a saving throw to avoid or end the frightened condition on yourself, you can give yourself advantage on the roll if the toy is on your person. You must decide to do so before rolling the d20. If the save succeeds, you can't use the toy in this way until you finish a long rest.", action : [["action", " (attach/remove)"]], usages : 1, recovery : "long rest" } MagicItemsList["lorehold primer"] = { name : "Lorehold Primer", source : [["SCC", 39]], type : "wondrous item", rarity : "uncommon", attunement : true, prerequisite : "Requires attunement by a spellcaster", prereqeval : function(v) { return v.isSpellcaster; }, description : "This magic textbook has 3 charges, regaining 1d3 used charges at dawn. While holding it, I can use 1 charge to add +1d4 to an History or Religion check, after the d20 roll. If I study it during a long rest, I can pick a 1st-level cleric or wizard spell. I can cast the spell once without a spell slot before my next long rest ends.", descriptionFull : "The Lorehold Primer is a magic textbook created at Strixhaven's Lorehold College. The primer has 3 charges, and it regains 1d3 expended charges daily at dawn. If you make an Intelligence (History) or Intelligence (Religion) check while holding the primer, you can expend 1 charge to give yourself 1d4 bonus to the check, immediately after you roll the d20."+ "\n In addition, if you study the primer at the end of a long rest, you can choose one 1st-level spell from the cleric or wizard spell list. Before you finish your next long rest, you can cast the chosen spell once without a spell slot if you are holding the primer. Your spellcasting ability for this spell is your choice of Intelligence, Wisdom, or Charisma.", extraLimitedFeatures : [{ name : "Lorehold Primer charges (regains 1d3)", usages : 3, recovery : "dawn" }, { name : "Lorehold Primer (cast spell)", usages : 1, recovery : "long rest" }], spellcastingAbility : [4, 5, 6], fCreateSCCPrimerSpellsEntry : function(bAddIt, sName, aClasses) { var sNameLC = sName.toLowerCase(); if (bAddIt) { CurrentSpells[sNameLC] = { name : sName + ' (item)', list : { 'class' : aClasses, level : [1, 1] }, known : { spells : 1 }, bonus : { bon0 : { name : 'Either select a spell', spells : [] }, bon1 : { name : 'or just select "Full List"', spells : [] }, bon2 : { name : 'on the bottom left', spells : [] } }, typeList : 4, refType : "item", allowUpCasting : false, firstCol : "LR" }; } else { delete CurrentSpells[sNameLC]; } SetStringifieds('spells'); CurrentUpdates.types.push('spells'); }, eval : function () { MagicItemsList["lorehold primer"].fCreateSCCPrimerSpellsEntry(true, "Lorehold Primer", ['cleric', 'wizard']); }, removeeval : function () { MagicItemsList["lorehold primer"].fCreateSCCPrimerSpellsEntry(false, "Lorehold Primer"); } } MagicItemsList["prismari primer"] = { name : "Prismari Primer", source : [["SCC", 39]], type : "wondrous item", rarity : "uncommon", attunement : true, prerequisite : "Requires attunement by a spellcaster", prereqeval : function(v) { return v.isSpellcaster; }, description : "This magic textbook has 3 charges, regaining 1d3 used charges at dawn. While holding it, I can use 1 charge to add +1d4 to an Acrobatics or Performance check, after the d20 roll. If I study it in a long rest, I can pick a 1st-level bard or sorcerer spell. I can cast the spell once without a spell slot before my next long rest ends.", descriptionFull : "The Prismari Primer is a magic textbook created at Strixhaven's Prismari College. The primer has 3 charges, and it regains 1d3 expended charges daily at dawn. If you make a Dexterity (Acrobatics) or a Charisma (Performance) check while holding the primer, you can expend 1 charge to give yourself a 1d4 bonus to the check, immediately after you roll the d20."+ "\n In addition, if you study the primer at the end of a long rest, you can choose one 1st-level spell from the bard or sorcerer spell list. Before you finish your next long rest, you can cast the chosen spell once without a spell slot if you are holding the primer. Your spellcasting ability for this spell is your choice of Intelligence, Wisdom, or Charisma.", extraLimitedFeatures : [{ name : "Prismari Primer charges (regains 1d3)", usages : 3, recovery : "dawn" }, { name : "Prismari Primer (cast spell)", usages : 1, recovery : "long rest" }], spellcastingAbility : [4, 5, 6], eval : function () { if (MagicItemsList["lorehold primer"]) MagicItemsList["lorehold primer"].fCreateSCCPrimerSpellsEntry(true, "Prismari Primer", ['bard', 'sorcerer']); }, removeeval : function () { if (MagicItemsList["lorehold primer"]) MagicItemsList["lorehold primer"].fCreateSCCPrimerSpellsEntry(false, "Prismari Primer"); } } MagicItemsList["quandrix primer"] = { name : "Quandrix Primer", source : [["SCC", 39]], type : "wondrous item", rarity : "uncommon", attunement : true, prerequisite : "Requires attunement by a spellcaster", prereqeval : function(v) { return v.isSpellcaster; }, description : "This magic textbook has 3 charges, regaining 1d3 used charges at dawn. While holding it, I can use 1 charge to add +1d4 to an Arcana or Nature check, after the d20 roll. If I study it during a long rest, I can pick a 1st-level druid or wizard spell. I can cast the spell once without a spell slot before my next long rest ends.", descriptionFull : "The Quandrix Primer is a magic textbook created at Strixhaven's Quandrix College. The primer has 3 charges, and it regains 1d3 expended charges daily at dawn. If you make an Intelligence (Arcana) or an Intelligence (Nature) check while holding the primer, you can expend 1 charge to give yourself a 1d4 bonus to the check, immediately after you roll the d20."+ "\n In addition, if you study the primer at the end of a long rest, you can choose one 1st-level spell from the druid or wizard spell list. Before you finish your next long rest, you can cast the chosen spell once without a spell slot if you are holding the primer. Your spellcasting ability for this spell is your choice of Intelligence, Wisdom, or Charisma.", extraLimitedFeatures : [{ name : "Quandrix Primer charges (regains 1d3)", usages : 3, recovery : "dawn" }, { name : "Quandrix Primer (cast spell)", usages : 1, recovery : "long rest" }], spellcastingAbility : [4, 5, 6], eval : function () { if (MagicItemsList["lorehold primer"]) MagicItemsList["lorehold primer"].fCreateSCCPrimerSpellsEntry(true, "Quandrix Primer", ['druid', 'wizard']); }, removeeval : function () { if (MagicItemsList["lorehold primer"]) MagicItemsList["lorehold primer"].fCreateSCCPrimerSpellsEntry(false, "Quandrix Primer"); } } MagicItemsList["silverquill primer"] = { name : "Silverquill Primer", source : [["SCC", 39]], type : "wondrous item", rarity : "uncommon", attunement : true, prerequisite : "Requires attunement by a spellcaster", prereqeval : function(v) { return v.isSpellcaster; }, description : "This magic textbook has 3 charges, regaining 1d3 used charges at dawn. While holding it, I can use 1 charge to add +1d4 to an Intimidation or Persuasion check, after the d20 roll. If I study it in a long rest, I can pick a 1st-level bard or cleric spell. I can cast the spell once without a spell slot before my next long rest ends.", descriptionFull : "The Silverquill Primer is a magic textbook created at Strixhaven's Silverquill College. The primer has 3 charges, and it regains 1d3 expended charges daily at dawn. If you make a Charisma (Intimidation) or a Charisma (Persuasion) check while holding the primer, you can expend 1 charge to give yourself a 1d4 bonus to the check, immediately after you roll the d20."+ "\n In addition, if you study the primer at the end of a long rest, you can choose one 1st-level spell from the bard or cleric spell list. Before you finish your next long rest, you can cast the chosen spell once without a spell slot if you are holding the primer. Your spellcasting ability for this spell is your choice of Intelligence, Wisdom, or Charisma.", extraLimitedFeatures : [{ name : "Silverquill Primer charges (regains 1d3)", usages : 3, recovery : "dawn" }, { name : "Silverquill Primer (cast spell)", usages : 1, recovery : "long rest" }], spellcastingAbility : [4, 5, 6], eval : function () { if (MagicItemsList["lorehold primer"]) MagicItemsList["lorehold primer"].fCreateSCCPrimerSpellsEntry(true, "Silverquill Primer", ['bard', 'cleric']); }, removeeval : function () { if (MagicItemsList["lorehold primer"]) MagicItemsList["lorehold primer"].fCreateSCCPrimerSpellsEntry(false, "Silverquill Primer"); } } MagicItemsList["strixhaven pennant"] = { name : "Strixhaven Pennant", source : [["SCC", 39]], type : "wondrous item", rarity : "common", description : "This magic pennant bears the symbol of Strixhaven or one of its colleges: Lorehold, Prismari, Quandrix, Silverquill, or Witherbloom. While I wave the pennant, the symbol on it glitters, and the pennant sheds bright light in a 10-ft radius and dim light for an additional 10 ft.", descriptionFull : "This magic pennant bears the symbol of Strixhaven or one of its colleges: Lorehold, Prismari, Quandrix, Silverquill, or Witherbloom. While you wave the pennant, the symbol on it glitters, and the pennant sheds bright light in a 10-foot-radius and dim light for an additional 10 feet." } MagicItemsList["witherbloom primer"] = { name : "Witherbloom Primer", source : [["SCC", 39]], type : "wondrous item", rarity : "uncommon", attunement : true, prerequisite : "Requires attunement by a spellcaster", prereqeval : function(v) { return v.isSpellcaster; }, description : "This magic textbook has 3 charges, regaining 1d3 used charges at dawn. While holding it, I can use 1 charge to add +1d4 to a Nature or Survival check, after the d20 roll. If I study it during a long rest, I can pick a 1st-level druid or wizard spell. I can cast the spell once without a spell slot before my next long rest ends.", descriptionFull : "The Witherbloom Primer is a magic textbook created at Strixhaven's Witherbloom College. The primer has 3 charges, and it regains 1d3 expended charges daily at dawn. If you make an Intelligence (Nature) or Wisdom (Survival) check while holding the primer, you can expend 1 charge to give yourself a 1d4 bonus to the check, immediately after you roll the d20."+ "\n In addition, if you study the primer at the end of a long rest, you can choose one 1st-level spell from the druid or wizard spell list. Before you finish your next long rest, you can cast the chosen spell once without a spell slot if you are holding the primer. Your spellcasting ability for this spell is your choice of Intelligence, Wisdom, or Charisma.", extraLimitedFeatures : [{ name : "Witherbloom Primer charges (regains 1d3)", usages : 3, recovery : "dawn" }, { name : "Witherbloom Primer (cast spell)", usages : 1, recovery : "long rest" }], spellcastingAbility : [4, 5, 6], eval : function () { if (MagicItemsList["lorehold primer"]) MagicItemsList["lorehold primer"].fCreateSCCPrimerSpellsEntry(true, "Witherbloom Primer", ['druid', 'wizard']); }, removeeval : function () { if (MagicItemsList["lorehold primer"]) MagicItemsList["lorehold primer"].fCreateSCCPrimerSpellsEntry(false, "Witherbloom Primer"); } } var SCC_Murgaxors_Orb_Full_Description = [ "Roiling green mist fills this glass orb, which the exiled Strixhaven mage Murgaxor once used in foul magical experiments. Murgaxor's spirit has infused the orb, which he uses to spread a terrible curse among Strixhaven's students.", ">>Sentience<<. Murgaxor's orb is a sentient, chaotic evil magic item with the following properties:", "\u2022 The orb has an Intelligence of 20, a Wisdom of 16, and a Charisma of 16, as well as hearing and darkvision out to a range of 30 feet.", "\u2022 The orb can speak, read, and understand Common, and it can communicate telepathically with any creature touching it.", "\u2022 At any time during your turn, the orb can cast the suggestion spell (save DC 17), targeting you or one other creature that touched the orb within the last 24 hours. This isn't a power of the orb that you control.", ">>Curse<<. Any Humanoid you touch while holding the orb must succeed on a DC 10 Wisdom saving throw or become cursed. Each creature cursed by the orb bears an echo of Murgaxor's hateful thoughts, and that creature suffers from headaches that are persistent but not debilitating until the curse ends. On your turn, the orb can use an action to produce one of the following effects, targeting one or more creatures it has cursed:", "\u2022 >>Unconsciousness<<. The cursed creature falls unconscious for 1 hour. The creature is roused if it takes damage or someone uses an action to shake or slap it awake.", "\u2022 >>Visions of Terror<<. The cursed creature sees terrifying visions, causing it to view all creatures that aren't also cursed as dangerous monsters for 10 minutes. The cursed creature must use its action each round to make one attack against the nearest non-cursed creature. If the cursed creature has multiple possible targets, it attacks one at random. This effect ends if the cursed creature is incapacitated.", "After either of these effects ends, the affected creature is no longer cursed. The curse can also be removed from a creature with a remove curse spell or similar magic. All cases of the curse end if Murgaxor's orb is destroyed.", ">>Magical Signature<<. As a side effect of the orb's curse, the spell detect magic reveals an aura of enchantment surrounding creatures bearing the curse. This aura is distinctive, but in a way detect magic offers no further details about.", ">>Destroying the Orb<<. Murgaxor's orb has AC 18; 20 hit points; immunity to necrotic, poison, and psychic damage; and resistance to all other types of damage. If reduced to 0 hit points, the orb shatters." ] MagicItemsList["murgaxor's orb"] = { name : "Murgaxor's Orb", source : [["SCC", 126]], type : "wondrous item", rarity : "legendary", attunement : true, description : "This sentient, chaotic evil orb bears a curse. It can communicate telepathically with any creature touching it. It can cast Suggestion on my turn, possibly on me. I have no control over it. Any Humanoid I touch while holding the orb must make a DC 10 Wisdom save or become cursed. See the Notes page.", descriptionFull : SCC_Murgaxors_Orb_Full_Description.join("\n ").replace(/>>(.*?)<>(.*?)<>(.*?)<<\. /g, function(a, match) { return "\n" + match.toUpperCase() + "\n "; }); } var EGtW_JewelOfThreePrayersFullDescription = [ "The Jewel of Three Prayers is a Vestige of Divergence. In ancient times, Alyxian the Apotheon bore this amulet as a symbol of his covenant with three Prime Deities: Sehanine the Moon Weaver, Avandra the Change Bringer, and Corellon the Arch Heart.[[ When the jewel is found, only Sehanine's power thrums within its dormant heart. The power of the other two deities waits to be reawakened by a hero \u2014 or heroes \u2014 who can follow in Alyxian's footsteps.]]", ">>Dormant<<. In this state, the Jewel of Three Prayers is a glittering golden disk attached to a fine golden chain. The chain magically resizes to function as a necklace for the creature that wears it.", "In its Dormant State, the jewel has the following properties:", "\u2022 You gain a +1 bonus to AC while wearing the jewel.", "\u2022 While wearing or holding the jewel, you can use an action to cause it to shed bright light in a 15-foot radius and dim light for an additional 15 feet. The light lasts until you extinguish it (no action required).", "\u2022 The jewel has 3 charges and regains all its expended charges daily at dawn. While holding the jewel, you can expend 1 charge from it to cast the invisibility spell.", ">>Awakened<<. In this state, the jewel has received the blessing of Avandra the Change Bringer. Three delicate spires unfurl from the jewel's center, like the buds of flowers opening in the spring. Three lapis lazuli stones rest like dewdrops on these spires.", "The following benefits of the jewel improve:", "\u2022 The bonus that the jewel confers to your AC increases to +2.", "\u2022 Its number of charges increases to 5.", "The jewel gains the following additional properties, which you can use while wearing or holding it:", "\u2022 You can expend 1 of the jewel's charges (no action required) to end one of the following conditions on yourself: grappled, paralyzed, or restrained.", "\u2022 When another creature you can see within 60 feet of you fails a saving throw, you can expend 1 of the jewel's charges as a reaction to enable that creature to reroll the saving throw, potentially turning a failure into a success. The creature must use the new roll.", ">>Exalted<<. In this state, the jewel has received the blessing of Corellon the Arch Heart. A gleaming emerald surrounded by a halo of gold appears on the jewel.", "The following benefits of the jewel improve:", "\u2022 The bonus that the jewel confers to your AC increases to +3.", "\u2022 Its number of charges increases to 7.", "The jewel gains the following additional properties, which you can use while wearing or holding it:", "\u2022 You gain the ability to breathe water, and you gain a swimming speed equal to your walking speed.", "\u2022 Each of your allies within 30 feet of you gains the ability to breathe water and gains a swimming speed equal to its walking speed.", "\u2022 As a bonus action, you can expend 1 of the jewel's charges to target yourself or one willing creature you can see within 15 feet of yourself. The target teleports to an unoccupied space of your choice within 15 feet of yourself, along with any equipment the target is wearing or carrying. The target appears in a flash of golden radiance, and each creature of your choice within 5 feet of the target's new location must make a DC 18 Constitution saving throw. On a failed save, the creature takes 4d10 radiant damage and is blinded until the start of your next turn. On a successful save, the creature takes half as much damage and isn't blinded." ]; MagicItemsList["jewel of three prayers"] = { name : "Jewel of Three Prayers", source : [["CotN", 213]], type : "wondrous item", rarity : "legendary", notLegalAL : true, attunement : true, description : "The golden chain of this intricate jewel magically resizes to function as a necklace for the creature that wears it. In ancient times, Alyxian the Apotheon bore this amulet as a symbol of his covenant with three Prime Deities: Sehanine the Moon Weaver, Avandra the Change Bringer, and Corellon the Arch Heart.", descriptionFull : EGtW_JewelOfThreePrayersFullDescription.join("\n ").replace(/>>(.*?)<>Transfer Attunement<<. You can use an action to touch a willing spellcaster. That creature attunes to the spelljamming helm immediately, and your attunement to it ends." ]; MagicItemsList["spelljamming helm"] = { name : "Spelljamming Helm", source : [["S:AiS", 23]], type : "wondrous item", rarity : "rare", attunement : true, prerequisite : "Requires attunement by a spellcaster", prereqeval : function(v) { return v.isSpellcaster; }, description : "While attuned to this ornate chair and sitting in it, I can propel and maneuver the ship on which it has been installed through space, air, or water up to the ship's speed. I need to maintain concentration as if concentrating on a spell to do so. The ship can move faster in space if nothing is nearby. See Notes page.", descriptionFull : SJAAG_SpelljammingHelm.join("\n ").replace(/>>(.*?)<>(.*?)<<\. /g, function(a, match) { return "\n" + match.toUpperCase() + "\n "; }) }] }; MagicItemsList["wildspace orrery"] = { name : "Wildspace Orrery", source : [["S:AiS", 23]], type : "wondrous item", rarity : "uncommon", description : "Inside a Wildspace system, this portable arcane device automatically tracks the positions and movements of all suns, planets, moons, and comets within that system, projecting a display of all these bodies in the space above its current location, marking itself as a white, pulsating pinprick of light.", descriptionFull : "Inside a Wildspace system, this portable arcane device automatically tracks the positions and movements of all suns, planets, moons, and comets within that system, projecting a display of all these bodies in the space above its current location. In that display, a white, pulsating pinprick of light marks the orrery's location." }; // Beasts from Boo's Astral Menagerie CreatureList["space eel"] = { name : "Space Eel", nameAlt : ["Eel, Space"], source : [["S:AiS", 55]], // page number in Boo's Astral Menagerie size : 4, type : "Beast", alignment : "Unaligned", ac : 14, hp : 7, hd : [2, 6], speed : "10 ft, fly 30 ft", scores : [12, 18, 11, 1, 10, 1], senses : "Darkvision 60 ft", passivePerception : 10, challengeRating : "1/2", proficiencyBonus : 2, attacksAction : 2, attacks : [{ name : "Bite", ability : 1, damage : [1, 6, "piercing"], range : "Melee (5 ft)", description : "Attaches on hit; While attached, auto-damage at turn start, but can't make bite attacks", tooltip : "On a hit, the eel attaches to the target. While attached, the eel can't make bite attacks. Instead, the target takes the bite damage at the start of each of the eel's turns. The eel can detach itself as a bonus action. A creature, including the target, can use its action to detach the eel." }, { name : "Tail Spine", ability : 1, damage : [1, 4, "piercing"], range : "Melee (5 ft)", description : "Target DC 10 Con save or poisoned and paralyzed for 1 min (can save as each turn ends)", tooltip : "The target must succeed on a DC 10 Constitution saving throw or be poisoned for 1 minute. Until this poison ends, the target is paralyzed. The target can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success." }], features : [{ name : "Unusual Nature", description : "The eel doesn't require air." }], actions : [{ name : "Multiattack", description : "As an action on its turn if not attached to a creature, the eel can make one Bite and one Tail Spine attack." }, { name : "Attach", description : "If the eel hits with its bite attack, it attaches to the target. While attached, the eel can't make bite attacks. Instead, the target takes the bite damage at the start of each of the eel's turns. The eel can detach itself as a bonus action. A creature, including the target, can use its action to detach the eel." }, { name : "Tail Spine", description : "If the eel hits with its tail spine, the target must succeed on a DC 10 Constitution saving throw or be poisoned for 1 minute. Until this poison ends, the target is paralyzed. The target can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success." }], wildshapeString : [ "##Senses##. Darkvision 60 ft", "##Unusual Nature##. Doesn't require air.", "##Multiattack##. 1 bite and 1 tail spine attack if not attached to a creature.", "##Bite##. Attaches to the target hit by its bite attack, dealing bite damage at the start of each turn. The eel can detach itself as a bonus action. A creature, including the target, can use its action to detach the eel." ].join("\n"), }; CreatureList["space guppy"] = { name : "Space Guppy", nameAlt : ["Guppy, Space"], source : [["S:AiS", 55]], // page number in Boo's Astral Menagerie size : 4, type : "Beast", alignment : "Unaligned", ac : 13, hp : 3, hd : [1, 6], speed : "0 ft, fly 30 ft", scores : [3, 16, 10, 1, 10, 1], senses : "Darkvision 60 ft", passivePerception : 10, challengeRating : "0", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Tail Slap", ability : 2, damage : [1, "", "bludgeoning"], range : "Melee (5 ft)" }], traits : [{ name : "Air Envelope", description : "If it has at least 1 hit point, the guppy can generate an air envelope around itself when in a vacuum. This air envelope can sustain the guppy and one other Tiny creature in its space indefinitely." }, { name : "Flyby", description : "The guppy doesn't provoke opportunity attacks when it flies out of an enemy's reach." }] }; CreatureList["giant space hamster"] = { name : "Giant Space Hamster", nameAlt : ["Hamster, Giant Space"], source : [["S:AiS", 56]], // page number in Boo's Astral Menagerie size : 2, type : "Beast", alignment : "Unaligned", ac : 11, hp : 22, hd : [4, 10], speed : "30 ft, burrow 10 ft", scores : [14, 12, 10, 2, 12, 4], passivePerception : 11, challengeRating : "1/4", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Bite", ability : 1, damage : [2, 4, "piercing"], range : "Melee (5 ft)" }] }; CreatureList["space mollymawk"] = { name : "Space Mollymawk", nameAlt : ["Mollymawk, Space"], source : [["S:AiS", 57]], // page number in Boo's Astral Menagerie size : 4, type : "Beast", alignment : "Unaligned", ac : 12, hp : 3, hd : [1, 6], speed : "10 ft, fly 50 ft", scores : [6, 14, 11, 3, 12, 3], skills : { "perception" : 5 }, passivePerception : 15, challengeRating : "0", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Bite", ability : 2, damage : [1, 4, "piercing"], range : "Melee (5 ft)" }], traits : [{ name : "Flyby", description : "The mollymawk doesn't provoke opportunity attacks when it flies out of an enemy's reach." }, { name : "Hold Breath", description : "The mollymawk can hold its breath for 15 minutes." }] }; CreatureList["space swine"] = { name : "Space Swine", nameAlt : ["Swine, Space"], source : [["S:AiS", 57]], // page number in Boo's Astral Menagerie size : 3, type : "Beast", alignment : "Unaligned", ac : 11, hp : 22, hd : [4, 8], speed : "40 ft, fly 40 ft", scores : [14, 12, 10, 2, 12, 4], skills : { "perception" : 4, "survival" : 4 }, passivePerception : 14, challengeRating : "1/4", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Bite", ability : 1, damage : [1, 6, "piercing"], range : "Melee (5 ft)" }], traits : [{ name : "Barding", description : "Space swine that are trained for battle are typically outfitted with half-plate barding and are referred to as death squealers. This barding gives them an AC of 16." }], wildshapeString : " " // the barding trait is not applicable to wild shapes }; // pub_20221206_Dragonlance.js // This file adds the Character Options content from Dragonlance: Shadow of the Dragon Queen to MPMB's Character Record Sheet SourceList["D:SotDQ"] = { name : "Dragonlance: Shadow of the Dragon Queen", abbreviation : "D:SotDQ", group : "Campaign Sourcebooks", campaignSetting : "Dragonlance", url : "https://dnd.wizards.com/products/dragonlance", date : "2022/12/06" }; RaceList["kender"] = { regExpSearch : /kender/i, name : "Kender", source : [["D:SotDQ", 27]], plural : "Kender", size : 4, speed : { walk : { spd : 30, enc : 20 } }, scoresGeneric : true, savetxt : { adv_vs : ["frightened"]}, skillstxt : "Choose one from Insight, Investigation, Sleight of Hand, Stealth, or Survival", abilitySave : [4, 5, 6], features : { "fearless" : { name : "Fearless", minlevel : 1, usages : 1, recovery : "long rest" }, "taunt" : { name : "Taunt", minlevel : 1, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", action : [["bonus action", ""]] } }, trait : "Kender"+ "\n \u2022 Fearless: I have adv. on saves against the frightened condition. Once per long rest when I fail " + (typePF ? "such a save" : "a save to avoid being frightened") + ", I can choose to succeed" + (typePF ? "." : " instead")+ "\n \u2022 Taunt: As a bonus action, I can taunt a creature within 60 ft of me that can hear and understand me. They must make a Wisdom " + (typePF ? "saving throw or have disadvantage" : "save (DC 8 + Prof B + Int/Wis/Cha mod; one-time choice) or have disadv.") + " on attack rolls not made against me until the start of my next turn. I can do this a number of times per long rest equal to my proficiency bonus." + (typePF ? " The DC equals 8 + my proficiency bonus + Intelligence, Wisdom, or Charisma modifier (one-time choice when selecting this race)." : "") }; BackgroundList["knight of solamnia"] = { regExpSearch : /^(?=.*(knight|champion|warrior))(?=.*solamnia).*$/i, name : "Knight of Solamnia", source : [["D:SotDQ", 0], ["UA:HoKR", 2]], skills : ["Athletics", "Survival"], gold : 10, languageProfs : [2], equipleft : [ ["Insignia of rank", "", ""], ["Deck of cards", "", ""] ], equipright : [ ["Common clothes", "", 3], ["Pouch (with coins)", "", 1] ], feature : "Squire of Solamnia", trait : [ // Kept those from the UA article "I pledge my sword to the greater good. If I must perish in pursuit of that good, so be it.", "My comrades-in-arms are my family. I'll do whatever it takes to keep them safe.", "The protection of innocent people comes first. All other concerns come second.", "I joined the knights for the free meals, but their lessons grew on me over time.", "I wish my deeds to become the stuff of legends\xD7just like those of the knighthood's heroic founders.", "A dishonorable act drove me to become a knight. I have acted with honor ever since." ], extra : [ "Choose a Trinket", "Silver disk, recording my heroics", "Piece of a fallen knight's armor", "Pendant with a crown/rose/sword", "Pommel of my mentor's sword", "Favor from someone I defended", "Locket with silver dragon sketch" ] }; BackgroundFeatureList["squire of solamnia"] = { description : "I gain the Squire of Solamnia feat. In addition, the Knights of Solamnia provide me free, modest lodging and food at any of their fortresses or encampments.", source : [["D:SotDQ", 0], ["UA:HoKR", 2], ["UA:HoK", 3]], featsAdd: ["Squire of Solamnia"], }; BackgroundList["mage of high sorcery"] = { regExpSearch : /^(?=.*(mage|wizard|magus))(?=.*high)(?=.*sorcery).*$/i, name : "Mage of High Sorcery", source : [["D:SotDQ", 0], ["UA:HoKR", 3], ["UA:HoK", 4]], skills : ["Arcana", "History"], gold : 10, languageProfs : [2], equipleft : [ ["Bottle of colored ink", "", ""], ["Ink pen", "", ""] ], equipright : [ ["Common clothes", "", 3], ["Pouch (with coins)", "", 1] ], feature : "Initiate of High Sorcery", trait : [ // Kept those from the UA article "I wish to use my knowledge of magic to better people's lives.", "My study of magic might reveal all manner of secrets.", "Magic is a means to power, and I will use it to pursue my ambitions.", "I learned magic so I'd be able to protect those I care about.", "I use my magic to maintain the balance between all things.", "Whether in the past, present, or future, I will be the greatest mage ever known." ], extra : [ "Choose a Trinket", "Unopened letter from first teacher", "Broken black/red/white wooden wand", "Scroll with incomprehensible formula", "Stone-covered foldable device", "Pouch with triple moon symbol", "Spellbook with triple moon symbol", "Lens to see Nuitari, invisible moon" ] }; BackgroundFeatureList["initiate of high sorcery"] = { description : "I gain the Initiate of High Sorcery feat. In addition, the Mages of High Sorcery provide me with free, modest lodging and food indefinitely at any occupied Tower of High Sorcery and for one night at the home of an organization member.", source : [["D:SotDQ", 0], ["UA:HoKR", 3], ["UA:HoK", 4]], featsAdd: ["Initiate of High Sorcery"], }; // Feats tree for Initiate of High Sorcery FeatsList["initiate of high sorcery"] = { name : "Initiate of High Sorcery", source : [["D:SotDQ", 32], ["UA:HoKR", 4]], description : "I learn a wizard cantrip and two 1st-levels spell from a list depending on my chosen moon. I can cast each spell once per long rest at its lowest levels without expending a spell slot, or by using a spell slot as normal. I can choose Int, Wis, or Cha as my spellcasting ability for this.", descriptionFull : "You've received training from magic-users affiliated with the Mages of High Sorcery."+ "\n Choose one of the three moons of Krynn to influence your magic: the black moon, Nuitari; the red moon, Lunitari; or the white moon, Solinari. You learn one cantrip of your choice from the wizard spell list and two 1st-level spells based on the moon you choose, as specified in the Lunar Spells table."+ "\n\n" + toUni("Lunar Spells")+ "\n" + toUni("Moon\t1st-Level Spell")+ "\nNuitari\tChoose two from dissonant whispers, false life,"+ "\n\thex, and ray of sickness"+ "\nLunitari\tChoose two from color spray, disguise self,"+ "\n\tfeather fall, and longstrider"+ "\nSolinari\tChoose two from comprehend languages, detect"+ "\n\tevil and good, protection from evil and good, and"+ "\n\tshield"+ "\n\n You can cast each of the chosen 1st-level spells without a spell slot, and you must finish a long rest before you can cast them in this way again. You can also cast the spells using any spell slots you have."+ "\n Your spellcasting ability for this feat's spells is Intelligence, Wisdom, or Charisma (choose when you select this feat).", prerequisite : "Dragonlance Campaign, plus Sorcerer, Wizard, or Mage of High Sorcery background", prereqeval : function (v) { return classes.known.wizard || classes.known.sorcerer || CurrentBackground.known.indexOf('mage of high sorcery') !== -1 || /initiate of high sorcery/i.test(What("Background Feature")); }, choices : ["Nuitari", "Lunitari", "Solinari"], "nuitari" : { description : "I learn a wizard cantrip and two 1st-level spells (Dissonant Whispers, False Life, Hex, or Ray of Sickness). I can cast each spell once per long rest at its lowest level without expending a spell slot, or by using a spell slot as normal. I can choose Int, Wis, or Cha as my spellcasting ability for this.", spellcastingAbility : [4,5,6], allowUpCasting : true, spellcastingBonus : [{ name : "Wizard Cantrip", "class" : ["wizard"], level : [0, 0], }, { name : "Nuitari 1st-level spell", spells : ["dissonant whispers", "false life", "hex", "ray of sickness"], firstCol : "oncelr+markedbox", times : 2 }] }, "lunitari" : { description : "I learn a wizard cantrip and two 1st-level spells (Color Spray, Disguise Self, Feather Fall, Longstrider). I can cast each spell once per long rest at its lowest level without expending a spell slot, or by using a spell slot as normal. I can choose Int, Wis, or Cha as my spellcasting ability for this.", spellcastingAbility : [4,5,6], allowUpCasting : true, spellcastingBonus : [{ name : "Wizard Cantrip", "class" : ["wizard"], level : [0, 0], }, { name : "Lunitari 1st-level spell", spells : ["color spray", "disguise self", "feather fall", "longstrider"], firstCol : "oncelr+markedbox", times : 2 }] }, "solinari" : { description : "I learn a wizard cantrip and two 1st-level spells (Comprehend Languages, Detect Evil and Good, Protection from Evil and Good, Shield). I can cast each spell once per long rest at its lowest level without expending a spell slot, or by using a spell slot as normal. I can choose Int, Wis, or Cha as my spellcasting ability for this.", spellcastingAbility : [4,5,6], allowUpCasting : true, spellcastingBonus : [{ name : "Wizard Cantrip", "class" : ["wizard"], level : [0, 0], }, { name : "Solinari 1st-level spell", spells : ["comprehend languages", "detect evil and good", "protection from evil and good", "shield"], firstCol : "oncelr+markedbox", times : 2 }] } }; FeatsList["adept of the black robes"] = { name : "Adept of the Black Robes", source : [["D:SotDQ", 31], ["UA:HoKR", 4]], description : "I learn one 2nd-level Ench or Necro spell, which I can cast once per long rest at its lowest level without a spell slot, or as normal with one. When a creature I can see within 60 ft fails its save vs. my damaging spell, I can expend HD up to the spell's level and add the rolls to the damage of the spell for that one creature.", descriptionFull : "You chose the moon Nuitari to influence your magic, and your ambition and loyalty to the Order of the Black Robes have been recognized, granting you these benefits:"+ "\n " + toUni("Ambitious Magic") + ". You learn one 2nd-level spell of your choice. The 2nd-level spell must be from the evocation or necromancy school of magic. You can cast this feat's 2nd-level spell without a spell slot, and you must finish a long rest before you can cast it in this way again. You can also cast this spell using spell slots you have of the appropriate level. The spell's spellcasting ability is the one chosen when you gain the Initiate of High Sorcery feat."+ "\n " + toUni("Life Channel") + ". You can channel your life force into the power of your magic. When a creature you can see within 60 feet fails on a saving throw against a spell that deals damage that you cast, you can expend a number of Hit Dice equal to the level of the spell. Roll the expended Hit Dice and add them together. The damage that the creature takes increases by an amount equal to that total.", prerequisite : "4th level, Initiate of High Sorcery (Nuitari) feat", prereqeval : function(v) { var iHghSrcyInit = CurrentFeats.known.indexOf("initiate of high sorcery"); return v.characterLevel >= 4 && iHghSrcyInit !== -1 && CurrentFeats.choices[iHghSrcyInit] === 'nuitari'; }, spellcastingBonus : [{ name : "2nd-level Evoc/Necro spell", "class" : "any", school : ["Evoc", "Necro"], level : [2, 2], firstCol : "oncelr+markedbox" }], spellcastingAbility : 'initiate of high sorcery_-_nuitari', allowUpCasting : true }; FeatsList["adept of the red robes"] = { name : "Adept of the Red Robes", source : [["D:SotDQ", 32], ["UA:HoKR", 4]], description : "I learn a 2nd-level Illusion or Transmutation spell, which I can cast once per long rest at its lowest level without a spell slot, or as normal with one. When I roll 9 or lower on the d20 for an attack or ability check, I can treat the roll as a 10. I can do this a number of times per long rest equal to my proficiency bonus.", descriptionFull : "You chose the moon Lunitari to influence your magic, and your dedication to maintaining the balance between all things has been recognized by the Order of the Red Robes, granting you these benefits:"+ "\n " + toUni("Insightful Magic") + ". You learn one 2nd-level spell of your choice. The 2nd-level spell must be from the illusion or transmutation school of magic. You can cast this feat's 2nd-level spell without a spell slot, and you must finish a long rest before you can cast it in this way again. You can also cast this spell using spell slots you have of the appropriate level. The spell's spellcasting ability is the one chosen when you gain the Initiate of High Sorcery feat."+ "\n " + toUni("Magical Balance") + ". When you make an attack roll, an ability check, or a saving throw, and roll a 9 or lower on the d20, you can use your reaction to balance fate and treat the roll as a 10. you can use this reaction a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th level, Initiate of High Sorcery (Lunitari) feat", prereqeval : function(v) { var iHghSrcyInit = CurrentFeats.known.indexOf("initiate of high sorcery"); return v.characterLevel >= 4 && iHghSrcyInit !== -1 && CurrentFeats.choices[iHghSrcyInit] === 'lunitari'; }, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", spellcastingBonus : [{ name : "2nd-level Illus/Trans spell", "class" : "any", school : ["Illus", "Trans"], level : [2, 2], firstCol : "oncelr+markedbox" }], spellcastingAbility : 'initiate of high sorcery_-_lunitari', allowUpCasting : true }; FeatsList["adept of the white robes"] = { name : "Adept of the White Robes", source : [["D:SotDQ", 32], ["UA:HoKR", 4]], description : "I learn one 2nd-level Abjur or Div spell, which I can cast once per long rest at its lowest level without a spell slot, or as normal with one. As a reaction when I or a creature I can see within 30 ft is damaged, I can expend a spell slot and roll d6s equal to its level to reduce the damage by that much + my spellcasting modifier.", descriptionFull : "You chose the moon Solinari to influence your magic, and your oath to use magic to make the world a better place has been recognized by the Order of the White Robes, granting you these benefits:"+ "\n " + toUni("Protective Magic") + ". You learn one 2nd-level spell of you choice. The 2nd-level spell must be from the abjuration or divination school of magic. You can cast this feat's 2nd-level spell without a spell slot, and you must finish a long rest before you can cast it in this way again. You can also cast this spell using spell slots you have of the appropriate level. The spell's spellcasting ability is the one chosen when you gain the Initiate of High Sorcery feat."+ "\n " + toUni("Protective Ward") + ". When you or a creature you can see within 30 feet of you takes damage, you can use your reaction to expend a spell slot and weave protective magic around the target. Roll a number of d6s equal to the level of the spell slot expended and reduce the damage the target takes by the total rolled on those dice + your spellcasting ability modifier.", prerequisite : "4th level, Initiate of High Sorcery (Solinari) feat", prereqeval : function(v) { var iHghSrcyInit = CurrentFeats.known.indexOf("initiate of high sorcery"); return v.characterLevel >= 4 && iHghSrcyInit !== -1 && CurrentFeats.choices[iHghSrcyInit] === 'solinari'; }, action : [["reaction", ""]], spellcastingBonus : [{ name : "2nd-level Abjur/Div spell", "class" : "any", school : ["Abjur", "Div"], level : [2, 2], firstCol : "oncelr+markedbox" }], spellcastingAbility : 'initiate of high sorcery_-_solinari', allowUpCasting : true }; // Feat Divinely Favored FeatsList["divinely favored"] = { name : "Divinely Favored", source : [["D:SotDQ", 32], ["UA:HoKR", 4]], description : "I learn a cleric cantrip, a 1st-level spell based on my alignment, and Augury. I can cast the spells each once per long rest at their lowest level without a spell slot, or by using a spell slot as normal. I can choose Int, Wis, or Cha as my spellcasting ability for this. I can use a holy symbol as a spellcasting focus for any spell that uses the chosen ability.", descriptionFull : "A god chose you to carry a spark of their power."+ "\n You learn one cantrip of your choice from the cleric spell list and one 1st-level spell based on the alignment of your character, as specified in the table below. You also learn the augury spell."+ "\n\n" + toUni("Alignment\t1st-level Spell")+ "\n Evil\t\tChoose one 1st level warlock spell"+ "\n Good\t\tChoose one 1st-level cleric spell"+ "\n Neutral\t\tChoose one 1st-level druid spell"+ "\n\n You can cast the chosen 1st-level spell and the augury spell without a spell slot, and you must finish a long rest before you can cast either of these spells in this way again. You can also cast these spells using spell slots you have of the appropriate level."+ "\n Your spellcasting ability for this feat's spells is Intelligence, Wisdom, or Charisma (choose when you select this feat)."+ "\n\n In addition, you can use a holy symbol as a spellcasting focus for any spell you cast that uses the spellcasting ability you choose when you select this feat.", choices : ["Evil (warlock spell)", "Good (cleric spell)", "Neutral (druid spell)"], "evil (warlock spell)" : { name : "Divinely Favored [Evil]", description : "I learn a cleric cantrip, a 1st-level warlock spell, and Augury. I can cast each spell once per long rest at their lowest level without a spell slot, or by using a spell slot as normal. I choose Int, Wis, or Cha as my spellcasting ability for this. I can use a holy symbol as a spellcasting focus for any spell that uses the chosen ability.", spellcastingAbility : [4,5,6], allowUpCasting : true, spellcastingBonus : [{ name : "Cleric Cantrip", "class" : ["cleric"], level : [0, 0], }, { name : "1st-level Warlock Spell", "class" : ["warlock"], level : [1, 1], firstCol : "oncelr+markedbox" }, { name : "Augury", spells : ["augury"], selection : ["augury"], firstCol : "oncelr+markedbox" }] }, "good (cleric spell)" : { name : "Divinely Favored [Good]", description : "I learn a cleric cantrip, a 1st-level cleric spell, and Augury. I can cast each spell once per long rest at their lowest level without a spell slot, or by using a spell slot as normal. I choose Int, Wis, or Cha as my spellcasting ability for this. I can use a holy symbol as a spellcasting focus for any spell that uses the chosen ability.", spellcastingAbility : [4,5,6], allowUpCasting : true, spellcastingBonus : [{ name : "Cleric Cantrip", "class" : ["cleric"], level : [0, 0], }, { name : "1st-level Cleric Spell", "class" : ["cleric"], level : [1, 1], firstCol : "oncelr+markedbox" }, { name : "Augury", spells : ["augury"], selection : ["augury"], firstCol : "oncelr+markedbox" }] }, "neutral (druid spell)" : { name : "Divinely Favored [Neutral]", description : "I learn a cleric cantrip, a 1st-level druid spell, and Augury. I can cast each spell once per long rest at their lowest level without a spell slot, or by using a spell slot as normal. I choose Int, Wis, or Cha as my spellcasting ability for this. I can use a holy symbol as a spellcasting focus for any spell that uses the chosen ability.", spellcastingAbility : [4,5,6], allowUpCasting : true, spellcastingBonus : [{ name : "Cleric Cantrip", "class" : ["cleric"], level : [0, 0], }, { name : "1st-level Druid Spell", "class" : ["druid"], level : [1, 1], firstCol : "oncelr+markedbox" }, { name : "Augury", spells : ["augury"], selection : ["augury"], firstCol : "oncelr+markedbox" }] } }; // Feats tree for Squire of Solamnia FeatsList["squire of solamnia"] = { name : "Squire of Solamnia", source : [["D:SotDQ", 34]], description : "Mounting or dismounting costs me only 5-ft of movement. Once per turn, I can grant myself advantage on a weapon attack, adding +1d8 to the damage roll if it hits. I can use this benefit my proficiency bonus per long rest, but a use is expended only if the attack hits.", descriptionFull : "Your training in the ways of the Knights of Solamnia grants you these benefits:"+ "\n " + toUni("Mount Up") + ". Mounting or dismounting costs you only 5 feet of movement."+ "\n " + toUni("Precise Strike") + ". Once per turn, when you make a weapon attack roll against a creature, you can cause the attack roll to have advantage. If the attack hits, you roll a d8 and add the number rolled as a bonus to the attack's damage roll. You can use this benefit a number of times equal to your proficiency bonus, but a use is expended only if the attack hits. You regain all expended uses when you finish a long rest.", prerequisite : "Dragonlance Campaign, plus Fighter, Paladin, or Knight of Solamnia background", prereqeval : function (v) { return classes.known.fighter || classes.known.paladin || CurrentBackground.known.indexOf('knight of solamnia') !== -1 || /squire of solamnia/i.test(What("Background Feature")); }, limfeaname : "Precise Strike (Squire of Solamnia)", usages : "Proficiency bonus per ", usagescalc : "event.value = Number(How('Proficiency Bonus'));", recovery : "long rest" }; FeatsList["knight of the crown"] = { name : "Knight of the Crown", source : [["D:SotDQ", 32]], description : "As a bonus action, I can use Commanding Rally on one ally within 30 ft that can see or hear me to immediately make one weapon attack as a reaction. +1d8 is added to the damage roll, if it hits. I can do this my proficiency bonus per long rest. [+1 Strength, Dexterity, or Constitution]", descriptionFull : "You are a Knight of Solamnia aligned with the Order of the Crown, a group that extols the virtues of cooperation, loyalty, and obedience. You excel in group combat and gain these benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase your Strength, Dexterity, or Constitution by 1, to a maximum of 20."+ "\n " + toUni("Commanding Rally") + ". As a bonus action, you can command one ally within 30 feet of yourself to attack. If that ally can see or hear you, they can immediately make one weapon attack as a reaction. If the attack hits, the ally can roll a d8 and add the number rolled as a bonus to the attack's damage roll. You can use this bonus action a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th level, Squire of Solamnia feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("squire of solamnia") !== -1; }, limfeaname : "Commanding Rally (Knight of the Crown)", usages : "Proficiency bonus per ", usagescalc : "event.value = Number(How('Proficiency Bonus'));", recovery : "long rest", action : [["bonus action", ""]], choices : ["Strength", "Dexterity", "Constitution"], "strength" : { description : "As a bonus action, I can use Commanding Rally on one ally within 30 ft that can see or hear me to immediately make one weapon attack as a reaction. +1d8 is added to the damage roll, if it hits. I can do this my proficiency bonus per long rest. [+1 Strength]", scores : [1,0,0,0,0,0] }, "dexterity" : { description : "As a bonus action, I can use Commanding Rally on one ally within 30 ft that can see or hear me to immediately make one weapon attack as a reaction. +1d8 is added to the damage roll, if it hits. I can do this my proficiency bonus per long rest. [+1 Dexterity]", scores : [0,1,0,0,0,0] }, "constitution" : { description : "As a bonus action, I can use Commanding Rally on one ally within 30 ft that can see or hear me to immediately make one weapon attack as a reaction. +1d8 is added to the damage roll, if it hits. I can do this my proficiency bonus per long rest. [+1 Constitution]", scores : [0,0,1,0,0,0] } }; FeatsList["knight of the rose"] = { name : "Knight of the Rose", source : [["D:SotDQ", 33]], description : "As a bonus action, I can use Bolstering Rally on myself or an ally within 30 ft that I can see and can see or hear me. They gain 1d8 + my proficiency bonus + the modifier of the ability chosen to increase temporary hit points. I can do this my proficiency bonus per long rest. [+1 Constitution, Wisdom, or Charisma]", descriptionFull : "You are a Knight of Solamnia aligned with the Order of the Rose, a group known for leadership, justice, and wisdom. Your resolve grants you these benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase your Constitution, Wisdom, or Charisma by 1, to a maximum of 20."+ "\n " + toUni("Bolstering Rally") + ". As a bonus action, you can encourage one creature you can see within 30 feet of yourself (you can choose yourself). If the target can see or hear you, the target gains temporary hit points equal to 1d8 + your proficiency bonus + the ability modifier of the ability score increased by this feat. You can use this bonus action a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th level, Squire of Solamnia feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("squire of solamnia") !== -1; }, limfeaname : "Bolstering Rally (Knight of the Rose)", usages : "Proficiency bonus per ", usagescalc : "event.value = Number(How('Proficiency Bonus'));", recovery : "long rest", action : [["bonus action", ""]], choices : ["Constitution", "Wisdom", "Charisma"], "constitution" : { calculation : 'event.value = "As a bonus action, I can use Bolstering Rally on myself or an ally within 30 ft that I can see and can see or hear me. They gain 1d8 + " + (Number(How("Proficiency Bonus")) + Number(What("Con Mod"))) + " temporary hit points (1d8 + proficiency bonus + Constitution modifier). I can do this my proficiency bonus per long rest. [+1 Constitution]";', scores : [0,0,1,0,0,0] }, "wisdom" : { calculation : 'event.value = "As a bonus action, I can use Bolstering Rally on myself or an ally within 30 ft that I can see and can see or hear me. They gain 1d8 + " + (Number(How("Proficiency Bonus")) + Number(What("Wis Mod"))) + " temporary hit points (1d8 + proficiency bonus + Wisdom modifier). I can do this my proficiency bonus per long rest. [+1 Wisdom]";', scores : [0,0,0,0,1,0] }, "charisma" : { calculation : 'event.value = "As a bonus action, I can use Bolstering Rally on myself or an ally within 30 ft that I can see and can see or hear me. They gain 1d8 + " + (Number(How("Proficiency Bonus")) + Number(What("Cha Mod"))) + " temporary hit points (1d8 + proficiency bonus + Charisma modifier). I can do this my proficiency bonus per long rest. [+1 Charisma]";', scores : [0,0,0,0,0,1] } }; FeatsList["knight of the sword"] = { name : "Knight of the Sword", source : [["D:SotDQ", 33]], description : "Once per turn, when I hit a creature with a weapon attack, I can have it make a Wisdom save DC (8 + Prof Bonus + mod of the ability increased by this feat) or be frightened of me until my next turn ends. On a successful save, the target has disadv. on its next attack before its next turn ends. I can do this my proficiency bonus per long rest. [+1 Int/Wis/Cha]", descriptionFull : "You are a Knight of Solamnia aligned with the Order of the Sword, a group devoted to heroism and courage. Bravery steels your spirit, granting you these benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase your Intelligence, Wisdom, or Charisma by 1, to a maximum of 20."+ "\n " + toUni("Demoralizing Strike") + ". Once per turn, when you hit a creature with a weapon attack roll, you can attempt to frighten that target. The target must make a Wisdom saving throw (DC equals 8 + your proficiency bonus + the ability modifier of the score increased by this feat). On a failed save, the target is frightened of you until the end of your next turn. On a successful save, the target has disadvantage on the next attack roll it makes before the end of its next turn. You can use this benefit a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th level, Squire of Solamnia feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("squire of solamnia") !== -1; }, limfeaname : "Demoralizing Strike (Knight of the Sword)", usages : "Proficiency bonus per ", usagescalc : "event.value = Number(How('Proficiency Bonus'));", recovery : "long rest", choices : ["Intelligence", "Wisdom", "Charisma"], "intelligence" : { calculation : 'event.value = "Once per turn, when I hit a creature with a weapon attack, I can have it make a Wisdom save DC " + (8 + Number(How("Proficiency Bonus")) + Number(What("Int Mod"))) + " (8 + Prof Bonus + Int mod) or be frightened of me until my next turn ends. On a successful save, the target has disadv. on its next attack before its next turn ends. I can do this my proficiency bonus per long rest. [+1 Int]";', scores : [0,0,0,1,0,0] }, "wisdom" : { calculation : 'event.value = "Once per turn, when I hit a creature with a weapon attack, I can have it make a Wisdom save DC " + (8 + Number(How("Proficiency Bonus")) + Number(What("Wis Mod"))) + " (8 + Prof Bonus + Wis mod) or be frightened of me until my next turn ends. On a successful save, the target has disadv. on its next attack before its next turn ends. I can do this my proficiency bonus per long rest. [+1 Wis]";', scores : [0,0,0,0,1,0] }, "charisma" : { calculation : 'event.value = "Once per turn, when I hit a creature with a weapon attack, I can have it make a Wisdom save DC " + (8 + Number(How("Proficiency Bonus")) + Number(What("Cha Mod"))) + " (8 + Prof Bonus + Cha mod) or be frightened of me until my next turn ends. On a successful save, the target has disadv. on its next attack before its next turn ends. I can do this my proficiency bonus per long rest. [+1 Cha]";', scores : [0,0,0,0,0,1] } }; // Subclass AddSubClass("sorcerer", "lunar sorcery", { regExpSearch : /^(?=.*(sorcerer|sorcery|witch))(?=.*(lunar|moon)).*$/i, subname : "Lunar Sorcery", fullname : "Lunar Sorcerer", source : [["D:SotDQ", 0]], features : { "subclassfeature1" : { name : "Lunar Embodiment", source : [["D:SotDQ", 0]], minlevel : 1, additional : levels.map(function (n) { return (n < 3 ? 3 : n < 5 ? 6 : n < 7 ? 9 : n < 9 ? 12 : 15) + " additional spells known"}), spellcastingExtra : [ // full moon "shield", "lesser restoration", "dispel magic", "death ward", "rary's telepathic bond", // new moon "ray of sickness", "blindness/deafness", "vampiric touch", "confusion", "hold monster", // crescent moon "color spray", "alter self", "phantom steed", "hallucinatory terrain", "mislead" ], spellcastingExtraApplyNonconform : true, description : levels.map(function(n) { var phases = { "\u25CB Full: " : ["Shield", "Lesser Restoration", "Dispel Magic", "Death Ward", "Rary's Telepathic Bond"], "\u25CF New: " : ["Ray of Sickness", "Blindness/deafness", "Vampiric Touch", "Confusion", "Hold Monster"], "\u25D6 Crescent: " : ["Color Spray", "Alter Self", "Phantom Steed", "Hallucinatory Terrain", "Mislead"] }; var aReturn = [ "When I finish a long rest, I can choose a lunar phase: Full, New, or Crescent Moon", "I can cast the 1st-level spell of that lunar phase once per long rest without a spell slot" ]; var iSpellsAdd = n < 3 ? 1 : n < 5 ? 2 : n < 7 ? 3 : n < 9 ? 4 : 5; for (var phase in phases) { aReturn.push(phase + phases[phase].slice(0,iSpellsAdd).join(", ")); } //aReturn.push("I know all " + (iSpellsAdd * 3) + " spells above; They don't count towards the number of spells I can know"); return desc(aReturn); }), calcChanges : { spellAdd : [ function (spellKey, spellObj, spName, isDuplicate) { if (spName === "sorcerer" && !isDuplicate && CurrentSpells.sorcerer.extra.indexOf(spellKey) !== -1) { var phases = { "F" : ["shield", "lesser restoration", "dispel magic", "death ward", "rary's telepathic bond"], "N" : ["ray of sickness", "blindness/deafness", "vampiric touch", "confusion", "hold monster"], "C" : ["color spray", "alter self", "phantom steed", "hallucinatory terrain", "mislead"] }; for (var phase in phases) { if (phases[phase].indexOf(spellKey) !== -1) { spellObj.firstCol = phase; return true; } } } }, 'The letters "F", "N", or "C" in the first column are used to indicate that a spell belongs to either the Full Moon, New Moon, or Crescent Moon lunar phase.' ] }, spellFirstColTitle : "Ph", extraLimitedFeatures : [{ name : "1st-level lunar phase spell", usages : 1, recovery : "long rest" }] }, "subclassfeature1.1" : { name : "Moon Fire", source : [["D:SotDQ", 0]], minlevel : 1, description : desc("I know the Sacred Flame cantrip and can use it on 2 creatures within 5 ft of each other"), spellcastingBonus : [{ name : "Moon Fire", spells : ["sacred flame"], selection : ["sacred flame"] }], weaponsAdd : { select : ["Sacred Flame"] }, spellChanges : { "sacred flame" : { description : "Up to 2 creas I see, max 5 ft apart, save or 1d8 Radiant dmg; no cover bonus; +1d8 at CL 5, 11, and 17", descriptionShorter : "Up to 2 creas I see, max 5 ft apart, save or 1d8 Radiant dmg; no cover bonus; +1d8 CL 5/11/17", descriptionCantripDie : "Up to 2 creas I see, max 5 ft apart, save or `CD`d8 Radiant dmg; no bonus for cover on save", changes : "When I cast Sacred Flame, I can target one creature as normal or target two creatures within range that are within 5 feet of each other." } }, calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == 'sacred flame') { fields.Description = fields.Description.replace("1 creature", "up to 2 creatures within 5 ft"); } }, "When I cast Sacred Flame, I can target one creature as normal or target two creatures within range that are within 5 feet of each other." ] } }, "subclassfeature6" : { name : "Lunar Boons", source : [["D:SotDQ", 0]], minlevel : 6, description : desc([ "Each lunar phase is additionally associated with spells of the following schools of magic:", "\u25CB Full: Abjur \u0026 Div\t\t\u25CF New: Ench \u0026 Necro\t" + (typePF ? "\t" : Array(8).join(" ")) + "\u25D6 Crescent: Illus \u0026 Trans", "I can reduce the sorcery point needed for Metamagic of spells of my current phase by 1" ]), usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature6.1" : { name : "Waxing and Waning", source : [["D:SotDQ", 0]], minlevel : 6, additional: "1 sorcery point", description : desc([ "As a bonus action, I can spend 1 sorcery point to change my lunar phase", "I can cast each lunar phase's 1st-level spells once per long rest, if it is my current phase" ]), action : [["bonus action", ""]], extraLimitedFeatures : [{ name : "Shield (in Full lunar phase)", usages : 1, recovery : "long rest" }, { name : "Ray of Sickness (in New lunar phase)", usages : 1, recovery : "long rest" }, { name : "Color Spray (in Crescent lunar phase)", usages : 1, recovery : "long rest" }], eval : function () { RemoveFeature("1st-level lunar phase spell", 0, "", "", "Lunar Sorcerer: Lunar Embodiment"); }, removeeval : function () { AddFeature("1st-level lunar phase spell", 1, "", "long rest", "Lunar Sorcerer: Lunar Embodiment"); } }, "subclassfeature14" : { name : "Lunar Empowerment", source : [["D:SotDQ", 0]], minlevel : 14, description : " [passive benefits for current phase]" + desc([ "\u25CB Full: I shed bright light in a 10-ft radius \u0026 dim light for extra 10 ft", " Myself and creatures I choose in 10 ft have adv. on Investigation and Perception checks", "\u25CF New: I have adv. on Stealth checks; While I'm in darkness, attacks have disadv. vs me", "\u25D6 Crescent: I have resistance to Necrotic and Radiant damage" ]), dmgres : [ ["Necrotic", "Necro. (in crescent)"], ["Radiant", "Rad. (in crescent)"] ] }, "subclassfeature18" : { name : "Lunar Phenomenon", source : [["D:SotDQ", 0]], minlevel : 18, additional: "per phase: 1\xD7 per long rest or 5 SP", description : desc([ "As a bonus action, or as part of changing phase, I can use a power of the (new) phase:", "\u25CB Full: Chosen creatures within 30 ft of me must make a Constitution save or be blinded", " This lasts until their next turn ends; I also heal one creature within 30 ft for 3d8 HP", "\u25CF New: Chosen creatures within 30 ft of me must make a Dexterity save", " If failed, they take 3d10 Necrotic damage and have 0 speed until their next turn ends", " Also, I become invisible until the end of my next turn, or until I attack or cast a spell", "\u25D6 Crescent: I can magically teleport to an unoccupied space I can see within 60 ft", " Both of us gain resistance to all damage until the start of my next turn", "I can use each phase's bonus action 1/LR, or by spending 5 sorcery points to use it again" ]), action : [["bonus action", ""]], extraLimitedFeatures : [{ name : "Lunar Phenomenon (Full)", usages : 1, recovery : "long rest", altResource : "5 SP" }, { name : "Lunar Phenomenon (New)", usages : 1, recovery : "long rest", altResource : "5 SP" }, { name : "Lunar Phenomenon (Crescent)", usages : 1, recovery : "long rest", altResource : "5 SP" }] } } }); // Weapon, Hoopak WeaponsList["hoopak, melee"] = { regExpSearch : /hoopak/i, name : "Hoopak, melee", source : [["D:SotDQ", 0]], list : "melee", ability : 1, type : "Martial", damage : [1, 6, "piercing"], range : "Melee", weight : 2, description : "Finesse, two-handed; Can be used ranged (40/160 ft) with ammo, for 1d4 bludgeoning damage", special : true, abilitytodamage : true }; WeaponsList["hoopak, ranged"] = { regExpSearch : /^(?=.*hoopak)(?=.*ranged).*$/i, name : "Hoopak, ranged", source : [["D:SotDQ", 0]], list : "ranged", ability : 1, type : "Martial", damage : [1, 4, "bludgeoning"], range : "40/160 ft", weight : 2, description : "Ammunition, finesse, two-handed; Can be used in melee without ammo, for 1d6 piercing damage", special : true, abilitytodamage : true }; // Magic Items MagicItemsList["flying citadel helm"] = { name : "Flying Citadel Helm", source : [["D:SotDQ", 190]], type : "wondrous item", rarity : "very rare", attunement : true, prerequisite : "Requires attunement by a spellcaster", prereqeval : function(v) { return v.isSpellcaster; }, description : "This ornate chair allows me to maneuver a flying citadel while concentrating (as if a spell). I can move the citadel through the air 80 ft/round or 8 miles/h, steer it, and see and hear from its highest point as though I was at that location. As an action or bonus action, I can transfer attunement to a willing spellcaster.", descriptionFull : "The function of this ornate chair is to propel and maneuver a flying citadel on which it has been installed. The chair has AC 15, 18 hit points, and immunity to poison and psychic damage. It is destroyed if reduced to 0 hit points."+ "\n The sensation of being attuned to a flying citadel helm is akin to the pins-and-needles effect one experiences after one's arm or leg falls asleep, but not as intense."+ "\n While attuned to a flying citadel helm and sitting in it, you gain the following abilities for as long as you maintain concentration (as if concentrating on a spell):"+ "\n \u2022 You can use the flying citadel helm to move the citadel through the air, up to 80 feet per round, or up to 8 miles per hour."+ "\n \u2022 You can steer the citadel, albeit in a somewhat clumsy fashion, in much the way that a rudder or oars can be used to maneuver a seafaring ship."+ "\n \u2022 At any time, you can see and hear from the highest point outside the citadel as though you were at that location."+ "\n\n If no creature attuned to the helm is maintaining concentration, the citadel remains motionless in its space."+ "\n "+toUni("Transfer Attunement")+". You can use an action or a bonus action to touch a willing spellcaster, whereupon that creature attunes to the flying citadel helm immediately, and your attunement to the flying citadel helm ends."+ "\n "+toUni("Crash")+". Should the flying citadel helm be destroyed, the citadel it is installed on loses power and begins to crumble. If the crumbling citadel is in the air, it descends at a rate of 30 feet per round, or 300 feet per minute. Any creature on the citadel or on the ground within 120 feet of the citadel when it lands must make a DC 20 Dexterity saving throw, taking 39 (6d12) bludgeoning damage on a failed save, or half as much damage on a successful one.", action : [ ["action", " (Transfer Attunement)"], ["bonus action", " (Transfer Attunement)"] ] }; MagicItemsList["kagonesti forest shroud"] = { name : "Kagonesti Forest Shroud", source : [["D:SotDQ", 190]], type : "wondrous item", rarity : "rare", attunement : true, description : "This cloak of autumnal leaves woven together grants me advantage on Dexterity (Stealth) checks. As a bonus action once per dawn, I can use it to magically teleport to an unoccupied space I can see within 30 ft. I then have advantage on the next attack roll I make before the end of the turn.", descriptionFull : "This cloak appears to be made of autumnal leaves woven together. While you wear this cloak, you have advantage on Dexterity (Stealth) checks, and you can use a bonus action to magically teleport, along with any equipment you are wearing or carrying, to an unoccupied space you can see within 30 feet of yourself. You then have advantage on the next attack roll you make before the end of the turn. Once this bonus action is used, it can't be used again until the next dawn.", advantages : [["Stealth", true]], action : [["bonus action", " (teleport)"]], usages : 1, recovery : "Dawn", additional : "teleport" }; MagicItemsList["mirror of reflected pasts"] = { name : "Mirror of Reflected Pasts", source : [["D:SotDQ", 190]], type : "wondrous item", rarity : "very rare", attunement : true, description : "As an action, I can (de)activate this mirror. It can be activated once per dawn, making it hover in the air, can't be moved, and when a non-construct sees its reflection in it while within 30 ft, it must make a DC 15 Wis save. It is paralyzed until the mirror is deactivated. It can retry the save at the end of each of its turns.", descriptionLong : "As an action, I can activate this mirror of elven design once per dawn, or deactive it. While active, it hovers in the air and can't be moved. When a non-construct creature within 30 ft of the mirror sees its reflection in it, the creature must make a DC 15 Wisdom save or become paralyzed. The creature can repeat the save at the end of each of its turns, but is otherwise paralyzed until the mirror is deactivated. A successful save makes a creature immune for 24 hours. While paralyzed by the mirror, the creature sees idealized versions of events from their past reflected in the mirror's glass.", descriptionFull : "This mirror of elven design allows those who stare into it to reflect on positive memories. The 3-foot-tall mirror weighs 25 pounds, and it has AC 11, 10 hit points, and vulnerability to bludgeoning damage. It shatters and is destroyed if reduced to 0 hit points."+ "While holding the mirror upright, you can use an action to speak its command word and activate it. While activated, the mirror hovers in the air, and it can be destroyed but not moved. It remains activated until you use an action to speak the command word again or your attunement to the mirror ends, at which point the mirror harmlessly floats to the ground. Once the mirror has been deactivated, it can't be activated again until the next dawn."+ "If a non-Construct creature other than you sees its reflection in the activated mirror while within 30 feet of it, that creature must succeed on a DC 15 Wisdom saving throw or become paralyzed until the mirror is deactivated or until that creature can no longer see the mirror. A creature paralyzed by the mirror can repeat the saving throw at the end of each of its turns, ending the effect on a success. If a creature's saving throw is successful or the effect ends for it, the creature is immune to this mirror's effect for the next 24 hours."+ "While paralyzed by the mirror, the creature sees events from their past reflected in the mirror's glass. These memories aren't real, but rather idealized versions of those occurrences. Nearby observers can glimpse flashes of these memories if looking indirectly at the mirror.", weight : 25, action : [["action", " [(de)activate]"]], usages : 1, recovery : "Dawn" }; // pub_20230221_KftGV.js // This file adds the magic items from the Keys from the Golden Vault adventure book to MPMB's Character Record Sheet SourceList["KftGV"] = { name : "Keys from the Golden Vault [items]", abbreviation : "KftGV", group : "Adventure Books", url : "https://dnd.wizards.com/products/keys-from-the-golden-vault", date : "2023/02/21" }; var KftGV_ConstantoriPortrait = [ "This painting by famed artist Dkesii Kwan depicts Constantori, a beautiful courtier, who was paid a staggering sum to be Dkesii's model. Whether Constantori's actual appearance matches the painting remains a subject of debate. The portrait is one of several paintings commissioned by the late Daiyani Grysthorn, a crime lord who frequently gave magical paintings as gifts to her most esteemed associates.", ">>Sentience<<. Constantori's Portrait is a sentient, lawful evil item with an Intelligence score of 14, a Wisdom score of 12, and a Charisma score of 8. It can hear within a range of 120 feet and has darkvision within a range of 60 feet, but it can't see anything behind itself.", "The painting can converse in Common, Draconic, and Elvish as if it were a living person, though Constantori's mouth doesn't move. Whenever conversation occurs within the portrait's auditory range, the painting eagerly gathers secrets, the names of secret tellers, significant events, or any political conversations.", ">>Personality<<. Constantori's Portrait is demanding, condescending, and vain. It doesn't like being covered or placed out of sight, and it loudly condemns anyone who tries to remove it from its gold-leaf frame.", ">>Wealth of Information<<. The painting's primary purpose is to observe and recall conversations. Over the past few decades, Constantori's Portrait has quietly observed countless conversations and now possesses an unquantifiable amount of lore\u2014everything from criminal conspiracies to secret passwords. The DM decides what the painting knows and what it doesn't.", "While attuned to the painting, you can take an action to telepathically contact it over any distance, provided the painting and you are on the same plane of existence. The painting can't telepathically contact you, however. Maintaining telepathic contact with the painting requires your concentration (as if concentrating on a spell).", ">>Guardian Portrait<<. While you are attuned to the painting, you can command it to guard its location against one or more creatures you identify as the painting's enemies. The painting performs this function until you command it to stop or until your attunement to the painting ends.", "The painting has 3 charges. When a creature the painting identifies as its enemy starts its turn in a space the painting can see, the painting expends 1 of its charges to cast magic missile (3 missiles), targeting that creature. The painting regains all expended charges daily at dawn.", "The painting is a Small object with AC 12, 20 hit points, and immunity to poison damage. In its gold-leaf frame, the painting weighs 15 pounds. If the painting has at least 1 hit point and is targeted by a mending spell, it regains 2d6 hit points." ]; MagicItemsList["constantori's portrait"] = { name : "Constantori's Portrait", source : [["KftGV", 101]], type : "wondrous item", rarity : "very rare", attunement : true, description : "As an action, I can telepathically contact this sentient painting over any distance while on the same plane. It can't contact me. Maintaining contact requires concentration like on a spell. I can command the painting to guard an area. It can cast Magic Missile 3 times per dawn. See Notes page.", descriptionFull : KftGV_ConstantoriPortrait.join("\n ").replace(/>>(.*?)<>(.*?)<= 4 && iStrikeGiants !== -1 && CurrentFeats.choices[iStrikeGiants] === 'fire strike'; }, descriptionFull : "You've manifested the fiery combat emblematic of fire giants, granting you the following benefits:"+ "\n\n" + toUni("Ability Score Increase") + ". Increase your Strength, Constitution, or Wisdom by 1, to a maximum of 20."+ "\n\n" + toUni("Born of Flame") + ". You have resistance to fire damage."+ "\n" + toUni("Searing Ignition") + ". When you take the Attack action on your turn, you can replace a single attack with a magical burst of flame. Each creature of your choice in a 15-foot-radius sphere centered on you must make a Dexterity saving throw (DC equals 8 + your proficiency bonus + the modifier of the ability increased by this feat). On a failed save, a creature takes fire damage equal to 1d8 + your proficiency bonus, and it has the blinded condition until the start of your next turn. On a successful save, the creature takes half as much damage only. You can use your Searing Ignition a number of times equal to your proficiency bonus (but no more than once per turn), and you regain all expended uses when you finish a long rest.", description : "I get fire resistance. Prof B. per long rest, when I use the Attack action on my turn, I can replace one attack with Searing Ignition: Chosen targets in 15-ft radius sphere on me take 1d8 + Prof B. fire damage, blind until my next turn starts. Dex save DC 8 + Prof B. + Str/Con/Wis mod half damage, not blind. [+1 Str/Con/Wis]", extraLimitedFeatures : [{ name : "Searing Ignition", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }], dmgres : ["Fire"], choices : ["Strength", "Constitution", "Wisdom"], "strength" : { description : "", calculate : "var iProfB = Number(How('Proficiency Bonus')), iMod = Number(What('Str Mod')); event.value = 'I get fire resistance. ' + iProfB + '\xD7 (Prof) per long rest, when I use the Attack action on my turn, I can replace one attack with Searing Ignition: Chosen targets in 15-ft radius sphere on me take 1d8+' + iProfB + ' (Prof B.) fire damage, blinded until my next turn starts. Dex save DC ' + (8 + iProfB + iMod) + ' (8 + Prof B. + Str mod) halves damage, not blinded. [+1 Str]';", weaponOptions : [{ regExpSearch : /^(?=.*searing)(?=.*ignition).*$/i, name : "Searing Ignition", source : [["GotG", 17]], ability : 1, type : 'AlwaysProf', damage : [1, 8, 'fire'], range : "15-ft radius", description : "Affects only chosen targets; Dex save halves, otherwise blinded until my next turn starts", abilitytodamage : false, dc : true, isNotWeapon : true, modifiers : ["", "Prof"], selectNow : true }], scores : [1,0,0,0,0,0] }, "constitution" : { description : "", calculate : "var iProfB = Number(How('Proficiency Bonus')), iMod = Number(What('Con Mod')); event.value = 'I get fire resistance. ' + iProfB + '\xD7 (Prof) per long rest, when I use the Attack action on my turn, I can replace one attack with Searing Ignition: Chosen targets in 15-ft radius sphere on me take 1d8+' + iProfB + ' (Prof B.) fire damage, blinded until my next turn starts. Dex save DC ' + (8 + iProfB + iMod) + ' (8 + Prof B. + Con mod) halves damage, not blinded. [+1 Con]';", weaponOptions : [{ regExpSearch : /^(?=.*searing)(?=.*ignition).*$/i, name : "Searing Ignition", source : [["GotG", 17]], ability : 3, type : 'Magical', damage : [1, 8, 'fire'], range : "15-ft radius", description : "Affects only chosen targets; Dex save halves, otherwise blinded until my next turn starts", abilitytodamage : false, dc : true, isNotWeapon : true, modifiers : ["", "Prof"], selectNow : true }], scores : [0,0,1,0,0,0] }, "wisdom" : { description : "", calculate : "var iProfB = Number(How('Proficiency Bonus')), iMod = Number(What('Wis Mod')); event.value = 'I get fire resistance. ' + iProfB + '\xD7 (Prof) per long rest, when I use the Attack action on my turn, I can replace one attack with Searing Ignition: Chosen targets in 15-ft radius sphere on me take 1d8+' + iProfB + ' (Prof B.) fire damage, blinded until my next turn starts. Dex save DC ' + (8 + iProfB + iMod) + ' (8 + Prof B. + Wis mod) halves damage, not blinded. [+1 Wis]';", weaponOptions : [{ regExpSearch : /^(?=.*searing)(?=.*ignition).*$/i, name : "Searing Ignition", source : [["GotG", 17]], ability : 5, type : 'Magical', damage : [1, 8, 'fire'], range : "15-ft radius", description : "Affects only chosen targets; Dex save halves, otherwise blinded until my next turn starts", abilitytodamage : false, dc : true, isNotWeapon : true, modifiers : ["", "Prof"], selectNow : true }], scores : [0,0,0,0,1,0] } }; FeatsList["fury of the frost giant"] = { name : "Fury of the Frost Giant", source : [["GotG", 17]], prerequisite : "4th level, Strike of the Giants (Frost Strike) feat", prereqeval : function(v) { var iStrikeGiants = CurrentFeats.known.indexOf("strike of the giants"); return v.characterLevel >= 4 && iStrikeGiants !== -1 && CurrentFeats.choices[iStrikeGiants] === 'frost strike'; }, descriptionFull : "You've manifested the icy might emblematic of frost giants, granting you the following benefits:"+ "\n\n" + toUni("Ability Score Increase") + ". Increase your Strength, Constitution, or Wisdom by 1, to a maximum of 20."+ "\n\n" + toUni("Born of Ice") + ". You have resistance to cold damage."+ "\n" + toUni("Frigid Retaliation") + ". Immediately after a creature you can see within 30 feet of you hits you with an attack roll and deals damage, you can use your reaction to retaliate with a conjured blast of ice. The creature must make a Constitution saving throw (DC equals 8 + your proficiency bonus + the modifier of the ability increased by this feat). On a failed save, the creature takes cold damage equal to 1d8 + your proficiency bonus, and its speed is reduced to 0 until the end of its next turn. You can use this reaction a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", description : "I gain cold resistance. As a reaction when a creature I see within 30 ft damages me with an attack, I can, Prof B. times per long rest, use Frigid Retaliation: it must make a Con save DC 8 + Prof B. + Str/Con/Wis mod or take 1d8 + Prof B. cold damage and have speed 0 until its next turn ends. [+1 Str/Con/Wis]", action : [["reaction", "Frigid Retaliation"]], extraLimitedFeatures : [{ name : "Frigid Retaliation", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }], dmgres : ["Cold"], choices : ["Strength", "Constitution", "Wisdom"], "strength" : { description : "", calculate : "var iProfB = Number(How('Proficiency Bonus')), iMod = Number(What('Str Mod')); event.value = 'I gain cold resistance. As a reaction when a creature I see within 30 ft hits me with an attack roll and deals damage, I can, ' + iProfB + ' times (Prof B.) per long rest, use Frigid Retaliation: it must make a Con save DC ' + (8 + iProfB + iMod) + ' (8 + Prof B. + Str mod) or take 1d8+' + iProfB + ' (Prof B.) cold damage and have speed 0 until its next turn ends. [+1 Str]';", weaponOptions : [{ regExpSearch : /^(?=.*frigid)(?=.*retaliation).*$/i, name : "Frigid Retaliation", source : [["GotG", 17]], ability : 1, type : 'Magical', damage : [1, 8, 'cold'], range : "30 ft", description : "Reaction; Con save - success: no damage, fail: also 0 speed until target's next turn ends", abilitytodamage : false, dc : true, isNotWeapon : true, modifiers : ["", "Prof"], selectNow : true }], scores : [1,0,0,0,0,0] }, "constitution" : { description : "", calculate : "var iProfB = Number(How('Proficiency Bonus')), iMod = Number(What('Con Mod')); event.value = 'I gain cold resistance. As a reaction when a creature I see within 30 ft hits me with an attack roll and deals damage, I can, ' + iProfB + ' times (Prof B.) per long rest, use Frigid Retaliation: it must make a Con save DC ' + (8 + iProfB + iMod) + ' (8 + Prof B. + Con mod) or take 1d8+' + iProfB + ' (Prof B.) cold damage and have speed 0 until its next turn ends. [+1 Con]';", weaponOptions : [{ regExpSearch : /^(?=.*frigid)(?=.*retaliation).*$/i, name : "Frigid Retaliation", source : [["GotG", 17]], ability : 3, type : 'Magical', damage : [1, 8, 'cold'], range : "30 ft", description : "Reaction; Con save - success: no damage, fail: also 0 speed until target's next turn ends", abilitytodamage : false, dc : true, isNotWeapon : true, modifiers : ["", "Prof"], selectNow : true }], scores : [0,0,1,0,0,0] }, "wisdom" : { description : "", calculate : "var iProfB = Number(How('Proficiency Bonus')), iMod = Number(What('Wis Mod')); event.value = 'I gain cold resistance. As a reaction when a creature I see within 30 ft hits me with an attack roll and deals damage, I can, ' + iProfB + ' times (Prof B.) per long rest, use Frigid Retaliation: it must make a Con save DC ' + (8 + iProfB + iMod) + ' (8 + Prof B. + Wis mod) or take 1d8+' + iProfB + ' (Prof B.) cold damage and have speed 0 until its next turn ends. [+1 Wis]';", weaponOptions : [{ regExpSearch : /^(?=.*frigid)(?=.*retaliation).*$/i, name : "Frigid Retaliation", source : [["GotG", 17]], ability : 5, type : 'Magical', damage : [1, 8, 'cold'], range : "30 ft", description : "Reaction; Con save - success: no damage, fail: also 0 speed until target's next turn ends", abilitytodamage : false, dc : true, isNotWeapon : true, modifiers : ["", "Prof"], selectNow : true }], scores : [0,0,0,0,1,0] } }; FeatsList["guile of the cloud giant"] = { name : "Guile of the Cloud Giant", source : [["GotG", 18]], prerequisite : "4th level, Strike of the Giants (Cloud Strike) feat", prereqeval : function(v) { var iStrikeGiants = CurrentFeats.known.indexOf("strike of the giants"); return v.characterLevel >= 4 && iStrikeGiants !== -1 && CurrentFeats.choices[iStrikeGiants] === 'cloud strike'; }, descriptionFull : "You've manifested the confounding magic emblematic of cloud giants, granting you the following benefits:"+ "\n\n" + toUni("Ability Score Increase") + ". Increase your Strength, Constitution, or Charisma by 1, to a maximum of 20."+ "\n\n" + toUni("Cloudy Escape") + ". When a creature you can see hits you with an attack roll, you can use your reaction to give yourself resistance to that attack's damage. You then teleport to an unoccupied space that you can see within 30 feet of yourself. You can use this reaction a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", description : "As a reaction when a creature I see within 30 ft hits me with an attack roll, I can give myself resistance to that attack's damage. I then teleport to an unoccupied space that I can see within 30 ft. I can do this reaction my proficiency bonus times per long rest.", action : [["reaction", "Cloudy Escape"]], extraLimitedFeatures : [{ name : "Cloudy Escape", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }], choices : ["Strength", "Constitution", "Charisma"], "strength" : { description : "As a reaction when a creature I see within 30 ft hits me with an attack roll, I can use Cloudy Escape: I give myself resistance to that attack's damage and then I teleport to an unoccupied space that I can see within 30 ft. I can do this Proficiency Bonus per long rest. [+1 Strength]", scores : [1,0,0,0,0,0] }, "constitution" : { description : "As a reaction when a creature I see within 30 ft hits me with an attack roll, I can use Cloudy Escape: I give myself resistance to that attack's damage and then I teleport to an unoccupied space that I can see within 30 ft. I can do this Proficiency Bonus per long rest. [+1 Constitution]", scores : [0,0,1,0,0,0] }, "charisma" : { description : "As a reaction when a creature I see within 30 ft hits me with an attack roll, I can use Cloudy Escape: I give myself resistance to that attack's damage and then I teleport to an unoccupied space that I can see within 30 ft. I can do this Proficiency Bonus per long rest. [+1 Charisma]", scores : [0,0,0,0,0,1] } }; FeatsList["keenness of the stone giant"] = { name : "Keenness of the Stone Giant", source : [["GotG", 18]], prerequisite : "4th level, Strike of the Giants (Stone Strike) feat", prereqeval : function(v) { var iStrikeGiants = CurrentFeats.known.indexOf("strike of the giants"); return v.characterLevel >= 4 && iStrikeGiants !== -1 && CurrentFeats.choices[iStrikeGiants] === 'stone strike'; }, descriptionFull : "You've manifested the physical talents emblematic of stone giants, granting you the following benefits:"+ "\n\n" + toUni("Ability Score Increase") + ". Increase your Strength, Constitution, or Wisdom by 1, to a maximum of 20."+ "\n\n" + toUni("Cavernous Sight") + ". You gain darkvision with a range of 60 feet. If you already have darkvision from another source, its range increases by 60 feet."+ "\n" + toUni("Stone Throw") + ". As a bonus action, you can take a rock and make a magical attack with it. The attack is a ranged spell attack with a range of 60 feet that uses the ability score you increased with this feat as the spellcasting ability. On a hit, the rock deals 1d10 force damage, and the target must succeed on a Strength saving throw (DC equals 8 + your proficiency bonus + the spellcasting ability modifier) or have the prone condition. You can use this bonus action a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", description : "I gain +60 ft Darkvision. As a bonus action, Prof Bonus times per long rest, I can make a magical Stone Throw attack. It is a spell attack with 60 ft range that deals 1d10 force damage and the target hit must make a Str save or be knocked prone. This uses the ability increased as spellcasting ability. [+1 Str/Con/Wis]", vision : [["Darkvision", "fixed 60"], ["Darkvision", "+60"]], action : [["bonus action", "Stone Throw"]], extraLimitedFeatures : [{ name : "Stone Throw", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }], choices : ["Strength", "Constitution", "Wisdom"], "strength" : { description : "", calculate : "var iProfB = Number(How('Proficiency Bonus')), iMod = Number(What('Str Mod')); event.value = 'I gain +60 ft Darkvision. As a bonus action, ' + iProfB + ' (Prof Bonus) times per long rest, I can make a magical Stone Throw attack: a spell attack (+' + (iProfB + iMod) + ') with 60 ft range that deals 1d10 force damage and the target hit must make a Strength save (DC ' + (8 + iProfB + iMod) + ') or be knocked prone. This uses Strength as spellcasting ability. [+1 Strength]';", weaponOptions : [{ regExpSearch : /^(?=.*stone)(?=.*throw).*$/i, name : "Stone Throw", source : [["GotG", 18]], ability : 1, type : 'Spell', damage : [1, 10, 'force'], range : "60 ft", description : "Bonus action; Target Strength save (DC 8 + To Hit) or be knocked prone", abilitytodamage : false, selectNow : true }], scores : [1,0,0,0,0,0] }, "constitution" : { description : "", calculate : "var iProfB = Number(How('Proficiency Bonus')), iMod = Number(What('Con Mod')); event.value = 'I gain +60 ft Darkvision. As a bonus action, ' + iProfB + ' (Prof Bonus) times per long rest, I can make a magical Stone Throw attack: a spell attack (+' + (iProfB + iMod) + ') with 60 ft range that deals 1d10 force damage and the target hit must make a Strength save (DC ' + (8 + iProfB + iMod) + ') or be knocked prone. This uses Constitution as spellcasting ability. [+1 Con]';", weaponOptions : [{ regExpSearch : /^(?=.*stone)(?=.*throw).*$/i, name : "Stone Throw", source : [["GotG", 18]], ability : 3, type : 'Spell', damage : [1, 10, 'force'], range : "60 ft", description : "Bonus action; Target Strength save (DC 8 + To Hit) or be knocked prone", abilitytodamage : false, selectNow : true }], scores : [0,0,1,0,0,0] }, "wisdom" : { description : "", calculate : "var iProfB = Number(How('Proficiency Bonus')), iMod = Number(What('Wis Mod')); event.value = 'I gain +60 ft Darkvision. As a bonus action, ' + iProfB + ' (Prof Bonus) times per long rest, I can make a magical Stone Throw attack: a spell attack (+' + (iProfB + iMod) + ') with 60 ft range that deals 1d10 force damage and the target hit must make a Strength save (DC ' + (8 + iProfB + iMod) + ') or be knocked prone. This uses Wisdom as spellcasting ability. [+1 Wisdom]';", weaponOptions : [{ regExpSearch : /^(?=.*stone)(?=.*throw).*$/i, name : "Stone Throw", source : [["GotG", 18]], ability : 5, type : 'Spell', damage : [1, 10, 'force'], range : "60 ft", description : "Bonus action; Target Strength save (DC 8 + To Hit) or be knocked prone", abilitytodamage : false, selectNow : true }], scores : [0,0,0,0,1,0] } }; FeatsList["soul of the storm giant"] = { name : "Soul of the Storm Giant", source : [["GotG", 19]], prerequisite : "4th level, Strike of the Giants (Storm Strike) feat", prereqeval : function(v) { var iStrikeGiants = CurrentFeats.known.indexOf("strike of the giants"); return v.characterLevel >= 4 && iStrikeGiants !== -1 && CurrentFeats.choices[iStrikeGiants] === 'storm strike'; }, descriptionFull : "You've manifested the tempest magic emblematic of storm giants, granting you the following benefits:"+ "\n\n" + toUni("Ability Score Increase") + ". Increase your Strength, Constitution, or Charisma by 1, to a maximum of 20."+ "\n\n" + toUni("Maelstrom Aura") + ". As a bonus action, you surround yourself with an aura of magical wind and lightning that extends 10 feet from you in every direction but not through total cover. The aura lasts until the start of your next turn or until you are incapacitated. While the aura is active, you have resistance to lightning and thunder damage. In addition, attack rolls against you have disadvantage, and whenever another creature starts its turn within the aura, you can force the creature to make a Strength saving throw (DC equals 8 + your proficiency bonus + the modifier of the ability increased by this feat). On a failed save, the creature's speed is halved until the start of its next turn. You can use this bonus action a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", description : "As a bonus action, Prof B. per long rest, I can make a 10-ft radius Maelstrom Aura until my next turn starts: I get lightning/thunder resistance, attacks vs. me have disadv., I can force those starting their turn inside to a Str save DC 8 + Prof + Str/Con/Cha mod or halve their speed until their next turn starts. [+1 Str/Con/Cha]", action : [["bonus action", "Maelstrom Aura"]], extraLimitedFeatures : [{ name : "Maelstrom Aura", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }], choices : ["Strength", "Constitution", "Charisma"], "strength" : { description : "", calculate : "var iProfB = Number(How('Proficiency Bonus')), iMod = Number(What('Str Mod')); event.value = 'As a bonus action, ' + iProfB + '\xD7 (Prof) per long rest, I can invoke a 10-ft radius Maelstrom Aura until my next turn starts: I get lightning \u0026 thunder resistance, attacks vs. me have disadv., I can force those starting their turn inside to make a Str save DC ' + (8 + iProfB + iMod) + ' (8+Prof+Str mod) or halve their speed until their next turn starts. [+1 Str]';", scores : [1,0,0,0,0,0] }, "constitution" : { description : "", calculate : "var iProfB = Number(How('Proficiency Bonus')), iMod = Number(What('Con Mod')); event.value = 'As a bonus action, ' + iProfB + '\xD7 (Prof) per long rest, I can invoke a 10-ft radius Maelstrom Aura until my next turn starts: I get lightning \u0026 thunder resistance, attacks vs. me have disadv., I can force those starting their turn inside to make a Str save DC ' + (8 + iProfB + iMod) + ' (8+Prof+Con mod) or halve their speed until their next turn starts. [+1 Con]';", scores : [0,0,1,0,0,0] }, "charisma" : { description : "", calculate : "var iProfB = Number(How('Proficiency Bonus')), iMod = Number(What('Cha Mod')); event.value = 'As a bonus action, ' + iProfB + '\xD7 (Prof) per long rest, I can invoke a 10-ft radius Maelstrom Aura until my next turn starts: I get lightning \u0026 thunder resistance, attacks vs. me have disadv., I can force those starting their turn inside to make a Str save DC ' + (8 + iProfB + iMod) + ' (8+Prof+Cha mod) or halve their speed until their next turn starts. [+1 Cha]';", scores : [0,0,0,0,0,1] } }; FeatsList["vigor of the hill giant"] = { name : "Vigor of the Hill Giant", source : [["GotG", 19]], prerequisite : "4th level, Strike of the Giants (Hill Strike) feat", prereqeval : function(v) { var iStrikeGiants = CurrentFeats.known.indexOf("strike of the giants"); return v.characterLevel >= 4 && iStrikeGiants !== -1 && CurrentFeats.choices[iStrikeGiants] === 'hill strike'; }, descriptionFull : "You've manifested the resilience emblematic of hill giants, granting you the following benefits:"+ "\n\n" + toUni("Ability Score Increase") + ". Increase your Strength, Constitution, or Wisdom by 1, to a maximum of 20."+ "\n\n" + toUni("Bulwark") + ". When you are subjected to an effect that would move you at least 5 feet or give you the prone condition, you can use your reaction to steady yourself. You aren't moved and don't have the prone condition."+ "\n" + toUni("Iron Stomach") + ". Whenever you eat food as part of a short rest and spend one or more Hit Dice to regain hit points, you regain additional hit points equal to your Constitution modifier + your proficiency bonus.", description : "Bulwark: When I would be moved or knocked prone I can use my reaction to prevent that. Iron Stomach: Whenever I eat food as part of a short rest and spend HD to regain hit points, I regain additional hp equal to my Constitution modifier + my proficiency bonus. [+1 Strength/Constitution/Wisdom]", action : [["reaction", "Bulwark"]], choices : ["Strength", "Constitution", "Wisdom"], "strength" : { description : "Bulwark: When I would be moved or knocked prone I can use my reaction to prevent that. Iron Stomach: Whenever I eat food as part of a short rest and spend HD to regain hit points, I regain additional hp equal to my Con" + (typePF ? "stitution" : "") + " modifier + my proficiency bonus. [+1 St" + (typePF ? "rength" : "") + "]", scores : [1,0,0,0,0,0] }, "constitution" : { description : "Bulwark: When I would be moved or knocked prone I can use my reaction to prevent that. Iron Stomach: Whenever I eat food as part of a short rest and spend HD to regain hit points, I regain additional hp equal to my Con" + (typePF ? "stitution" : "") + " modifier + my proficiency bonus. [+1 Con" + (typePF ? "stitution" : "") + "]", scores : [0,0,1,0,0,0] }, "wisdom" : { description : "Bulwark: When I would be moved or knocked prone I can use my reaction to prevent that. Iron Stomach: Whenever I eat food as part of a short rest and spend HD to regain hit points, I regain additional hp equal to my Con" + (typePF ? "stitution" : "") + " modifier + my proficiency bonus. [+1 Wis" + (typePF ? "dom" : "") + "]", scores : [0,0,0,0,1,0] } }; // Feats - Rune Shaper var GotG_RuneShaper = [ "You've studied the magic of Giant runes, granting you the following benefits:", ">>Comprehend Languages<<. You learn the comprehend languages spell. You can cast this spell without expending a spell slot, and you must finish a long rest before you can cast it in this way again. You can also cast this spell using any spell slots you have.", ">>Rune Magic<<. You know a number of runes equal to half your proficiency bonus (rounded down), chosen from the Rune Spells table. Whenever you finish a long rest, you can inscribe each rune you know onto one nonmagical weapon, armor, piece of clothing, or other object you touch. You temporarily learn the 1st-level spells that correspond to the runes you inscribed, as specified on the Rune Spells table, and you know those spells until you finish a long rest, when the runes fade. While you are wearing or carrying any rune-marked object, you can cast the spells associated with those runes using any spell slots you have.", "You can also invoke a rune inscribed on an object you are wearing or carrying and cast its associated spell without expending a spell slot or using material components. Once you cast the spell in this way, you can't do so again until you finish a long rest. Your spellcasting ability for this feat is Intelligence, Wisdom, or Charisma (choose when you select this feat).", "Each time you gain a level, you can replace one of the runes you know with another one from the Rune Spells table below.\n", ">>Rune\tSpell<<", "Cloud\tFog Cloud", "Death\tInflict Wounds", "Dragon\tChromatic Orb", "Enemy\tDisguise Self", "Fire\tBurning Hands", "Friend\tSpeak with Animals", "Frost\tArmor of Agathys", "Hill\tGoodberry", "Journey\tLongstrider", "King\tCommand", "Mountain\tEntangle", "Stone\tSanctuary", "Storm\tThunderwave" ]; FeatsList["rune shaper"] = { name : "Rune Shaper", source : [["GotG", 18]], prerequisite : "Spellcasting feature or Rune Carver background", prereqeval : function(v) { return v.isSpellcastingClass || CurrentBackground.known.indexOf('rune carver') !== -1 || /rune shaper/i.test(What("Background Feature")); }, descriptionFull : GotG_RuneShaper.join("\n ").replace(/>>(.*?)<>(.*?)<>Stalwart Song<<. Whenever you make a Charisma check while attuned to the harp, you can treat a roll of 9 or lower on the die as a 10.", ">>Feast of Plenty<<. If you spend 10 minutes playing the harp, you can cast the heroes' feast spell from it. Once this property is used, it can't be used again until 1d10 + 10 days have passed.", ">>Soothing Melody<<. As an action, you can use the harp to cast the calm emotions spell (save DC 19). When the spell is cast using the harp, its duration increases to 1 hour, provided you maintain concentration on the spell. This property can be used five times, and it regains all uses at dawn.", ">>Sentience<<. The harp is a sentient, chaotic good object with an Intelligence of 13, a Wisdom of 15, and a Charisma of 20. It has hearing and darkvision to a range of 120 feet.", "The harp can speak, read, and understand Common and Giant. It can also communicate telepathically with the creature attuned to it.", "The harp has a dramatic and pompous personality, taking extreme pride in the quality of music produced from its strings. If the harp is shorter than 6 feet tall, it bemoans its height." ]; MagicItemsList["harp of gilded plenty"] = { name : "Harp of Gilded Plenty", source : [["GotG", 112]], type : "wondrous item", rarity : "legendary", attunement : true, descriptionFull : GotG_HarpOfGildedPlenty.join("\n ").replace(/>>(.*?)<>(.*?)<= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'lawful outer plane (force, guidance)'; }, scorestxt : "+1 to one ability score of your choice", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }; FeatsList["baleful scion"] = { name : "Baleful Scion", source : [["P:AitM", 10]], description : "Once per turn, when I damage a creature I can see within 60 ft, I can also deal 1d6 + my Proficiency Bonus necrotic damage to it. I then regain a number of hit points equal to this necrotic damage dealt. I can do this a number of times equal to my Proficiency Bonus per long rest. [+1 to any one ability score]", descriptionFull : "You can channel cosmic forces of evil to gain these benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase one ability score of your choice by 1, to a maximum of 20."+ "\n " + toUni("Life-Draining Grasp") + ". Once per turn, when you damage a creature you can see within 60 feet of yourself, you can also deal necrotic damage to it. The necrotic damage equals 1d6 + your proficiency bonus, and you regain a number of hit points equal to this necrotic damage dealt. You can use this benefit a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th-level, Scion of the Outer Planes (Evil Outer Plane) feat", prereqeval : function(v) { var iParentFeat = CurrentFeats.known.indexOf("scion of the outer planes"); return v.characterLevel >= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'evil outer plane (necrotic, chill touch)'; }, scorestxt : "+1 to one ability score of your choice", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }; FeatsList["cohort of chaos"] = { name : "Cohort of Chaos", source : [["P:AitM", 10]], description : "When I roll a 1 or a 20 on an attack roll or save, a the magic of chaos flares up and I roll on the Chaotic Flare table to determine what happens (see notes for table). As a bonus action, my Proficiency Bonus per long rest, I can force a flare to happen. [+1 to any one ability score]", descriptionFull : "You can channel cosmic forces of chaos to gain these benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase one ability score of your choice by 1, to a maximum of 20."+ "\n " + toUni("Chaotic Flare") + ". When you roll a 1 or a 20 on an attack roll or a saving throw, the magic of chaos flows through you. Roll a d4 and consult the table below to determine what happens. A flare lasts until the end of your next turn, and a new flare can't occur until after the first flare ends."+ toUni("\n\nd4\tFlare")+ "\n 1\tBattle Fury: A creature of your choice that you can see is filled with reckless fury. It has advantage on attack rolls and disadvantage on ability checks."+ "\n 2\tDisruption Field: Waves of energy ripple around you. Every creature that starts its turn within 5 feet of you, or that moves into that area for the first time on a turn, takes 1d8 force damage."+ "\n 3\tUnbound: When you move, you can use some or all of your walking speed to teleport yourself once, along with any equipment you're wearing or carrying, up to the distance used to an unoccupied space that you can see."+ "\n 4\tWailing Winds: Winds swirl in a 15-foot-radius sphere centered on you. You and any other creatures in that area have disadvantage on Wisdom saving throws."+ "\n\n You can also forcibly release a chaotic flare as a bonus action, rolling on the table as normal to determine the effects. You can use this bonus action a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th-level, Scion of the Outer Planes (Chaotic Outer Plane) feat", prereqeval : function(v) { var iParentFeat = CurrentFeats.known.indexOf("scion of the outer planes"); return v.characterLevel >= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'chaotic outer plane (poison, minor illusion)'; }, scorestxt : "+1 to one ability score of your choice", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", additional : "force flare", action : [["bonus action", " (force flare)"]], toNotesPage : [{ name : "Chaotic Flare Table", note : [ "When I roll a 1 or a 20 on an attack roll or a saving throw, the magic of chaos flows through Me. I roll a d4 on the table below to determine what happens. A flare lasts until the end of my next turn, and a new flare can't occur until after the first flare ends.", "As a bonus action, I can forcibly release a chaotic flare, rolling on the table as normal to determine the effects. I can use this bonus action a number of times equal to my proficiency bonus, and I regain all expended uses when you finish a long rest.", "\n d4 Flare", "1 Battle Fury: A creature of my choice that I can see is filled with reckless fury. It has advantage on attack rolls and disadvantage on ability checks.", "2 Disruption Field: Waves of energy ripple around me. Every creature that starts its turn within 5 ft of me, or that moves into that area for the first time on a turn, takes 1d8 force damage.", "3 Unbound: When I move, I can use some or all of my walking speed to teleport once, along with any equipment I'm wearing or carrying, up to the distance used to an unoccupied space that I can see.", "4 Wailing Winds: Winds swirl in a 15-ft radius sphere centered on me. Creatures in that area, myself included, have disadvantage on Wisdom saving throws." ] }] }; FeatsList["outlands envoy"] = { name : "Outlands Envoy", source : [["P:AitM", 10]], description : "I can cast Misty Step and Tongues each once per long rest without requiring a spell slot or material components. I can also cast them using a spell slot as normal. My spellcasting ability for these spells is the same as the one for the Scion of the Outer Planes feat. [+1 to any one ability score]", descriptionFull : "You have spent significant time in Sigil or the Outlands, the crossroads of the multiverse. Being steeped in converging planar energies grants you these benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase one ability score of your choice by 1, to a maximum of 20."+ "\n " + toUni("Crossroads Emissary") + ". You learn the misty step and tongues spells. You can cast each spell once using this feat without a spell slot, and you must finish a long rest before you can cast that spell in this way again. When you cast tongues using this feat, you require no material components. You can also cast these spells using spell slots you have of the appropriate level. The spells' spellcasting ability is the one chosen when you gained the Scion of the Outer Planes feat.", prerequisite : "4th-level, Scion of the Outer Planes (the Outlands) feat", prereqeval : function(v) { var iParentFeat = CurrentFeats.known.indexOf("scion of the outer planes"); return v.characterLevel >= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'the outlands (psychic, mage hand)'; }, scorestxt : "+1 to one ability score of your choice", spellcastingAbility : "scion of the outer planes", spellcastingBonus : [{ name : "Crossroads Emissary", spells : ["misty step", "tongues"], selection : ["misty step", "tongues"], firstCol : "oncelr+markedbox", times : 2 }], spellChanges : { "tongues" : { components : SpellsList.tongues.components.replace("M", "M*"), compMaterial : "When using a spell slot: "+SpellsList.tongues.compMaterial, changes : "Using Outlands Envoy, I can cast Tongues once per long rest without expending a spell slot or requiring material components." } } }; FeatsList["planar wanderer"] = { name : "Planar Wanderer", source : [["P:AitM", 11]], description : "After each long rest, I can gain acid, cold, or fire resistance, that lasts until my next long rest ends. I know the direction to the last portal I used while on the same plane as it. As an action, I can try to open or close a portal (portal cracker). As an action once per long rest, I can detect portals (portal sense). See notes.", descriptionFull : "You can draw on the forces of the multiverse to survive cosmic extremes and to traverse its infinite realms, granting you these benefits:"+ "\n " + toUni("Planar Adaptation") + ". When you finish a long rest, you gain resistance to either acid, cold, or fire damage (your choice) until you finish your next long rest."+ "\n " + toUni("Portal Cracker") + ". Your experience with portals allows you to open them without a portal key. As an action, you can concentrate on a portal you're aware of that is within 5 feet of yourself and make a DC 20 Intelligence (Arcana) check. On a failed check, you take 3d8 psychic damage and can't use this benefit on that portal again until you finish a long rest. On a successful check, you can force the portal open or closed for 1 hour. For that duration, the portal doesn't respond to its portal key unless a creature employing the key succeeds on a DC 20 Intelligence (Arcana) check as an action."+ "\n " + toUni("Portal Sense") + ". You know the direction to the last planar portal you used while you and the portal are on the same plane of existence. Moreover, as an action, you can detect the location of any portals within 30 feet of you that aren't behind total cover. Once you detect a portal with this action, you can't use the action again until you finish a long rest.", prerequisite : "4th-level, Scion of the Outer Planes feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("scion of the outer planes") !== -1; }, dmgres : ["Acid/Cold/Fire"], action : [["action", " (Portal Cracker)"], ["action", " (Portal Sense)"]], usages : 1, recovery : "long rest", additional : "Portal Sense", toNotesPage : [{ name : "Portal Cracker", note : [ "My experience with portals allows me to open them without a portal key.", "As an action, I can concentrate on a portal I'm aware of that is within 5 ft of me and make a DC 20 Intelligence (Arcana) check.", "On a failed check, I take 3d8 psychic damage and can't do this on that portal again until I finish a long rest.", "On a successful check, I can force the portal open or closed for 1 hour. For that duration, the portal doesn't respond to its portal key unless a creature employing the key succeeds on a DC 20 Intelligence (Arcana) check as an action." ] }, { name : "Portal Sense", additional : "1\xD7 per long rest", note : [ "I know the direction to the last planar portal I used while I and the portal are on the same plane of existence.", "As an action, I can detect the location of any portals within 30 ft of me that aren't behind total cover.", "Once I detect a portal with this action, I can't use the action again until I finish a long rest." ], amendTo : "Portal Cracker" }] }; FeatsList["righteous heritor"] = { name : "Righteous Heritor", source : [["P:AitM", 11]], description : "As a reaction when I or a creature I can see within 30 ft takes damage, I can reduce the damage taken by 1d10 + my Proficiency Bonus. I can do this a number of times equal to my Proficiency Bonus per long rest. [+1 to any one ability score]", descriptionFull : "You can channel cosmic forces of good to gain these benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase one ability score of your choice by 1, to a maximum of 20."+ "\n " + toUni("Soothe Pain") + ". When you or a creature within 30 feet of you takes damage, you can use your reaction to reduce that damage by 1d10 + your proficiency bonus. You can use this benefit a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th-level, Scion of the Outer Planes (Good Outer Plane) feat", prereqeval : function(v) { var iParentFeat = CurrentFeats.known.indexOf("scion of the outer planes"); return v.characterLevel >= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'good outer plane (radiant, sacred flame)'; }, scorestxt : "+1 to one ability score of your choice", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", action : [["reaction", ""]] }; // Magic Items from Sigil and the Outlands MagicItemsList["mimir"] = { name : "Mimir", source : [["P:AitM", 13]], type : "wondrous item", rarity : "rare", attunement : true, description : "As a bonus action, I can stow or toss this skull-shaped device in the air to activate it, making it float 1d3 ft near me. Once per dawn as an action while active, I can use it to cast Legend Lore. It speaks the revieled lore aloud. While active, it answers questions about the planes of existence I or someone I designate ask it.", descriptionLong : "As a bonus action, I can toss this skull-shaped device covered with planar sigils into the air to activate it, causing it to float 1d3 ft near me but considered worn by me. I can use another bonus action to seize and stow it. It has AC 22, 25 HP, immunity to poison and psychic damage, and resistance to all other damage. Another can use an action to grab it with a successful unarmed strike or DC 22 Acrobatics check. Once per dawn as an action while active, I can use it to cast Legend Lore. It speaks the revealed lore aloud. While active, it answers questions about the planes of existence I or someone I designate ask it.", descriptionFull : "This skull-shaped device is filled with knowledge. The device weighs 5 pounds and is covered with subtle etchings of planar sigils."+ "As a bonus action, you can toss the device into the air, whereupon it floats at a distance of 1d3 feet from you and you can access its properties. While the mimir is floating, a creature other than you can use an action to grasp or net the device, either by making a successful unarmed strike against AC 22 or a successful DC 22 Dexterity (Acrobatics) check. You can use a bonus action to seize and stow the device."+ "The device has AC 22, 25 hit points, immunity to poison and psychic damage, and resistance to all other damage. It is considered to be an object that is being worn while it is floating near you."+ toUni("\n Esoteric Knowledge") + ". While the device is floating, you can use an action to cast legend lore from the device. The device speaks the revealed lore aloud. Once this property has been used, it can't be used again until the next dawn."+ toUni("\n Planar Knowledge") + ". The device knows basic, useful information about the planes of existence. While the device is floating, it verbally answers questions you or anyone you designate poses to it about that topic. It knows the information about the planes in the Dungeon Master's Guide, as well as basic information about the gate-towns of the Outlands (presented in chapter 3 of Sigil and the Outlands).", action : [["bonus action", " (activate/stow)"]], weight : 5, usages : 1, recovery : "dawn", additional : "Legend Lore", spellcastingBonus : [{ name : "once per dawn", spells : ["legend lore"], selection : ["legend lore"], firstCol : "oncelr" }] }; MagicItemsList["portal compass"] = { name : "Portal Compass", source : [["P:AitM", 13]], type : "wondrous item", rarity : "uncommon", description : "This portable arcane instrument points in the direction of the last portal it passed through while it and the portal are on the same plane of existence. If that portal no longer exists, the needle becomes static until the compass passes through a new portal.", descriptionFull : "This portable arcane instrument points in the direction of the last portal it passed through while it and the portal are on the same plane of existence. If that portal no longer exists, the needle becomes static until the compass passes through a new portal." }; MagicItemsList["sensory stone"] = { name : "Sensory Stone", source : [["P:AitM", 13]], type : "wondrous item", rarity : "uncommon", description : "This stone stores a single experience. As an action, one touching the stone can experience it harmlessly. As a reaction, I can replace the experience within with a new, six-second sensation experienced by a creature within 30 ft. As a bonus action, I can destroy it to end the charmed or frightened effect on myself.", descriptionFull : "This small, smooth stone contains the essence of a single experience."+ "As an action, you or a willing creature you designate can touch the stone and experience the sensation as if it happened to the designated creature. The illusory experience is fleeting and harmless, however real it might feel in the moment."+ toUni("\n Record Sensation") + ". You can use your reaction to record a short sensation lasting no longer than 6 seconds experienced by a creature of your choice within 30 feet of yourself, infusing the essence of that experience into the stone. This replaces any sensation already stored within the stone."+ toUni("\n Siphon Sensation") + ". As a bonus action, you can draw on the stone's magic to end the charmed or frightened condition on yourself, destroying the stone in the process.", action : [ ["action", " (experience)"], ["reaction", " (record)"], ["bonus action", " (destroy to end charmed/frightened)"] ] }; // Spells from Sigil and the Outlands SpellsList["gate seal"] = { name : "Gate Seal", classes : ["sorcerer", "warlock", "wizard"], source : [["P:AitM", 12]], level : 4, school : "Abjur", time : "1 a", range : "60 ft", components : "V,S,M\u2020", compMaterial : "A broken portal key, which the spell consumes", duration : "24 h", description : "30-ft cube wherein all portals close and can't be opened, and no planar travel; SL6: until dispelled", descriptionFull : "You fortify the fabric of the planes in a 30-foot cube you can see within range. Within that area, portals close and can't be opened for the duration. Spells and other effects that allow planar travel or open portals, such as gate or plane shift, fail if used to enter or leave the area. The cube is stationary."+ AtHigherLevels + "When you cast this spell using a spell slot of 6th level or higher, the spell lasts until dispelled." }; SpellsList["warp sense"] = { name : "Warp Sense", classes : ["sorcerer", "warlock", "wizard"], source : [["P:AitM", 12]], level : 2, school : "Div", time : "1 a", range : "Self", components : "V,S,M", compMaterial : "A razorvine leaf", duration : "Conc, 1 min", description : "Know presence of portals in 30 ft; 1 a DC 15 spell ability chk to see destination \u0026 portal key, ends spell", descriptionFull : "For the duration, you sense the presence of portals, even inactive ones, within 30 feet of yourself."+ "\n If you detect a portal in this way, you can use your action to study it. Make a DC 15 ability check using your spellcasting ability. On a successful check, you learn the destination plane of the portal and what portal key it requires, then the spell ends. On a failed check, you learn nothing and can't study that portal again using this spell until you cast it again."+ "\n The spell can penetrate most barriers but is blocked by 1 foot of stone, 1 inch of common metal, a thin sheet of lead, or 3 feet of wood or dirt." }; // Beast from Turn of Fortune's Wheel // Whirlwyrm is just a giant crocodile under a different name, it has been added to the SRD code as a `nameAlt` // pub_20231030_CoA.js // This file adds the magic items from the Chains of Asmodeus adventure from Extra Life to MPMB's Character Record Sheet SourceList["CoA"] = { name : "Chains of Asmodeus", abbreviation : "CoA", group : "Extra Life", campaignSetting : "Forgotten Realms", url : "https://www.dmsguild.com/product/457996/Chains-of-Asmodeus", date : "2023/10/30", defaultExcluded : true }; CoA_Corruption = { process : function(bAddRemove, sItem) { // Make a variable to remember the settings for this if (!CurrentVars.CoA_Corruption) { CurrentVars.CoA_Corruption = { items : [], present : false, savedAlert : false }; } var bProcessIt = false; var bItemPresent = CurrentVars.CoA_Corruption.items.indexOf(sItem) !== -1; // If removing, test if present and the triggering item is in the list if (!bAddRemove && bItemPresent) { CurrentVars.CoA_Corruption.items.eject(sItem); if (CurrentVars.CoA_Corruption.items.length !== 0) { // Still items present, so don't change anything return; } else { // Removing note in final step if present bProcessIt = CurrentVars.CoA_Corruption.present ? true : false; // Make pop-up appear at next corrupting item addition CurrentVars.CoA_Corruption.savedAlert = false; } } else if (bAddRemove) { // Adding // Add the item to the list of items processed if (!bItemPresent) CurrentVars.CoA_Corruption.items.push(sItem); if (CurrentVars.CoA_Corruption.savedAlert) { // The state of the alert was saved, so don't prompt and do nothing return; } else if (!CurrentVars.CoA_Corruption.present) { // If not present and dialog state was not saved, ask the user if the rules should be added to a notes page var oMsg = { cTitle : "Show Infernal Item Corruption (DM-only) Rules?", cMsg : 'The cursed infernal item "' + MagicItemsList[sItem].name + '" can cause corruption.\nDo you want to add the Infernal Item Corruption rules intended for the DM to a Notes page on your character sheet for reference?\n\nIMPORTANT: these rules are not intended to be read by players, only by the DM.\n\nThese notes will be automatically removed when you remove all corrupting items.', nIcon : 2, // Question nType : 2, // Yes,No oCheckbox : { cMsg : "Don't ask me again next time I add a corrupting item (unless I have removed all corrupting items)", bInitialValue : true, bAfterValue : false } }; // Add the note if "Yes" was clicked bProcessIt = app.alert(oMsg) === 4; // Save the checkbox state CurrentVars.CoA_Corruption.savedAlert = oMsg.oCheckbox.bAfterValue; } } if (bProcessIt) { CurrentVars.CoA_Corruption.present = bAddRemove; processToNotesPage(bAddRemove, CoA_Corruption.toNotesPage, "items", {}, false, ["Chains of Asmodeus, page 271"]); } SetStringifieds("vars"); // Save the global variable to a field }, toNotesPage : [{ // intentionally doesn't include a source name : "INFERNAL ITEM CORRUPTION", popupName : 'The "Infernal Item Corruption" rules from Chains of Asmodeus (page 271)', note : [ "", "Cursed infernal items can be used by mortals, but they always require attunement. Once attuned, the mortal risks an increasing chance of being corrupted by the item., eventually transforming into a devil.", " Mortals that receive express permission from Asmodeus, or that make an infernal contract to acquire a magic item, don't suffer these corrupting effects.", "", "1. STAGE ONE CORRUPTION: BEGINNINGS", "Once a character has attuned to a cursed infernal magic item or artifact, it begins the infernal corruption process. Each time that character finishes a long rest, they must make a DC 10 Wisdom save (tieflings have advantage on this save). On a success, the character suffers no effects, but the DC increases by 1 the next time they must make this save. On a failure, the character progresses to Stage Two unless Dispel Evil and Good is cast on them before their next long rest.", " While in Stage One, the infernal corruption can be prevented by breaking attunement to the corrupting item. This prevents further Wisdom saves and resets the DC of the save, if the character were to attune to the item again.", "", "2. STAGE TWO CORRUPTION: SUFFERINGS", "While in Stage Two, the character becomes delusional, seeing plots against them where there are none. Additionally, each time they rest, they experience terrifying visions and infernal whispers. Whenever they finish a long rest, they take 1d12 necrotic damage, which ignores resistances and immunities and can't be healed until a Dispel Evil and Good or Remove Curse spell is cast on them. Once the character has taken this damage six times, they progress to Stage Three.", " While in Stage Two, the infernal corruption can be removed with one of the following spells: Divine Word, Heal, Mass Heal, True Polymorph, True Resurrection, or Wish.", "\n3. STAGE THREE CORRUPTION: DEPARTINGS", "While in Stage Three, the character begins to suffer physical transformation, and slowly embraces evil. After they finish their first long rest upon entering Stage Three they must roll on the table below to determine how the infernal curse starts shaping them into a devil. In addition, a part-devil character is rendered infertile and detects as a Fiend to Detect Evil and Good spells and similar magic.", "", " d10\tTransformation", " 1\tTheir fingertips elongate into claws", " 2\tNon-functional leathery wings sprout from their back", " 3\tDevilish horns grow upon their head", " 4\tEach night more and more of their skin burns, leaving charred patches", " 5\tOne eye turns milky white, the other turns yellow", " 6\tTheir spine painfully elongates into a skeletal tail", " 7\tTheir skin starts to calcify, turning portions into bone", " 8\tTheir feet painfully twist to resemble cloven hooves", " 9\tAll their hair falls out, replaced by tiny spikes", " 10\tAll their teeth fall out, with new jagged teeth tearing through the gums each morning", "", "The character begins to experience waking whispers pushing them towards evil and they suffer terrifying visions whenever they rest, breaking their spirit and pushing them further to evil. Each time they finish a short or long rest, they must make a DC 10 Wisdom save. If they performed at least one evil act, such as making a decision that increased the suffering of others, they make the save with disadvantage. When they fail the save, they progress to Stage Four.", " While in Stage Three, the infernal corruption can be ended with one of the following spells: True Polymorph, True Resurrection or Wish.", "", "4. STAGE FOUR CORRUPTION: FINALITIES", "When the character finishes their first long rest after reaching Stage Four, the character's alignment shifts to lawful evil. They're now bound by the devil's code, requiring them to honor any pact made and acquire souls in service of Asmodeus. Lastly, their physical form changes, morphing to resemble a devil (DM's choice).", " Once the character reaches Stage Four, the only two cures are the Wish spell, which counts as beyond the scope of the spell, or by signing an infernal contract with Asmodeus to reclaim their soul." ].join("\n") }], description : "\n " + toUni("Corrupting") + '. This item corrupts. See the "Infernal Item Corruption" rules (CoA 271).' } MagicItemsList["amulet of appearance"] = { name : "Amulet of Appearance", source : [["CoA", 267]], type : "wondrous item", rarity : "rare", attunement : true, description : "My equipment always shines as if just polished and my wounds do not appear to others. I'm immune to being frightened and poisoned. However, whenever I would otherwise be affected by these conditions, a random non-evil humanoid on the material plane whom I have met is affected instead. I know this.", descriptionFull : "Your armor, weapons, and other equipment always shine as if just polished. Even if you're wounded, your wounds do not appear to others. You're immune to the frightened and poisoned conditions, as these would otherwise ruin your elegant appearance. However, whenever you would otherwise have been affected by one of these conditions, a random non-evil Humanoid on the Material Plane whom you have previously met gets the condition instead. You know this.", savetxt : { immune : ["frightened", "poisoned"] } } MagicItemsList["amulet of betrayal"] = { name : "Amulet of Betrayal", source : [["CoA", 267]], type : "wondrous item", rarity : "very rare", attunement : true, description : "As a bonus action, I can move one of the following conditions from myself to an ally within 60 ft: blinded, deafened, frightened, poisoned, stunned, exhaustion. When transferring exhaustion, all my exhaustion levels are moved. If the chosen ally is immune to a transferred condition, the transfer fails.", descriptionFull : "You can use a bonus action to move one of the following conditions from yourself to an ally within 60 feet of you: blinded, deafened, frightened, poisoned, stunned, exhaustion. When transferring exhaustion, move all your exhaustion levels. If the chosen ally is immune to a transferred condition, the transfer fails.", action : [["bonus action", ""]] } MagicItemsList["amulet of duplicity"] = { name : "Amulet of Duplicity", source : [["CoA", 267]], type : "wondrous item", rarity : "very rare", attunement : true, cursed: true, description : "When I die, a copy of my naked corpse is left in my place while I'm brought to an extradimensional space. After 24 hours, I heal 1 hp and am brought back to the place I left, but with a different face. I have disadv. on Persuasion checks to reveal who I am. I can't relay this information and forget it when unattuning.", descriptionLong : "When I die, the amulet leaves a copy of my naked corpse in my place while I'm transported to an extradimensional space, stable at 0 hp. After 24 hours, I regain 1 hp and am returned to the place I left with different facial features. Only a Wish spell can restore my true identity. I have disadvantage on Charisma (Persuasion) checks to reveal myself. The amulet is cursed. Identifying it only shows it prevents death and one can't explain its power once attuned. When unattuned, one immediately forgets what the amulet does. A Remove Curse spell reveals the details of the curse but doesn't lift it from the amulet.", descriptionFull : "When you die, you're transported to an extradimensional space where you're stabilized at 0 hit points and kept in that state. The amulet creates a perfect copy of your corpse and places it where you were just before you died, but without any of your worn or carried items. After 24 hours, you regain 1 hit point and are returned to the location of your near-death. Everything about you is the same, except that your facial features are entirely different from before. Only a Wish spell can restore your true identity."+ "\n Until then, you have disadvantage on any Charisma (Persuasion) checks to attempt to reveal who you really are."+ "\n " + toUni("Curse") + ". An Identify spell or similar reveals only that the amulet can prevent death. Once you attune to the amulet, you can't describe its ability to any other creature, and if unattuned, you immediately forget what the amulet does. A Remove Curse spell reveals the details of the curse but does not remove it from the amulet." } MagicItemsList["bracers of asmodeus"] = { name : "Bracers of Asmodeus", source : [["CoA", 267]], type : "wondrous item", rarity : "rare", attunement : true, cursed: true, description : "These are cursed, corrupting, and give +2 AC while not wearing armor or using a shield. I can't unattune to them. They make me obsessed with scheming, manipulation, and always bartering for better deals, often using blackmail. If I decline an opportunity to make money at another's expense, I take 3d10 necrotic damage.", descriptionFull : "You have a +2 bonus to AC while wearing these bracers, if you do not wear armor or use a shield at the same time."+ "\n " + toUni("Curse") + ". While attuned to the bracers, you become obsessed with plotting, scheming, and manipulation. You always barter for better deals, often using secrets or leveraging other offers in the process. If you ever decline an opportunity to better yourself financially at another's expense, you immediately take 3d10 necrotic damage. Only the Remove Curse spell allows you to end attunement to this item."+ CoA_Corruption.description, eval : function() { CoA_Corruption.process(true, "bracers of asmodeus") }, removeeval : function() { CoA_Corruption.process(false, "bracers of asmodeus") }, extraAC : [{ mod : 2, magic : true, text : "I gain a +2 bonus to AC while I'm not wearing armor or using a shield.", stopeval : function (v) { return v.wearingArmor || v.usingShield; } }] } MagicItemsList["canian fork"] = { name : "Canian Fork", source : [["CoA", 267]], type : "weapon (trident)", rarity : "rare", attunement : true, cursed: true, description : "This magic, cursed, corrupting trident gives me +3 bonus to attack and damage rolls made with. I can't willing to part with it and can't unattune to it without Remove Curse. I'm vulnerable to radiant damage. When I receive magical healing I have to succeed on a DC 15 Con save or the healing has no effect.", descriptionFull : "You have a +3 bonus to attack and damage rolls made with this magic weapon. In addition, you can make one additional attack with it as a bonus action on each of your turns."+ "\n " + toUni("Curse") + ". You're unwilling to part with this weapon while attuned to it. You're also vulnerable to radiant damage and each time you receive magical healing, you must make a DC 15 Constitution saving throw."+ "\n On a failed save, the healing has no effect. Only the Remove Curse spell allows you to end attunement to this item."+ CoA_Corruption.description, eval : function() { CoA_Corruption.process(true, "canian fork") }, removeeval : function() { CoA_Corruption.process(false, "canian fork") }, weight : 4, savetxt : { text : ["Vulnerable to radiant damage"] }, action : [["bonus action", " attack"]], weaponOptions : [{ baseWeapon : "trident", regExpSearch : /^(?=.*canian)(?=.*fork).*$/i, name : "Canian Fork", source : [["CoA", 267]], description : "Thrown, versatile (1d8); Bonus action: 1 attack", modifiers : [3, 3], selectNow : true }] } MagicItemsList["condensed order"] = { name : "Condensed Order", source : [["CoA", 267]], type : "wondrous item", rarity : "uncommon", description : "Once as an action, I can snuff this silvery powder extracted from those of a lawful persuasion, or administer it to another. The consumer is immune to the flesh warping feature of demonic ichor and gains advantage on saves against effects from a demonic source. These benefits last for 8 hours.", descriptionFull : "Condensed Order is a silvery powder that can be extracted from those of a lawful persuasion. Devils bound for the warfronts of Avernus take flasks and snuff boxes of the stuff to fortify themselves against exposure to the raw chaos of demons. Taking the substance requires an action and makes you immune to the flesh warping feature of demonic ichor. It also gives you advantage on saving throws against any effect from a demonic source. These benefits last for 8 hours." } MagicItemsList["demonbone polearm"] = { name : "Demonbone Polearm", nameTest : "Demonbone", source : [["CoA", 268]], type : "weapon (polearm)", rarity : "very rare", attunement : true, cursed: true, description : "As a reaction when damaged by a creature in reach, I can attack it once with this +2 polearm. It is cursed, I can't unattune to it and have disadv. with other weapons. If I take damage, I must make a DC 15 Wis save or go berserk: I attack those near to me until none remain in 60 ft or I'm calmed with a DC 15 Persuasion" + (typePF ? "." : "check."), descriptionLong : "I have a +2 bonus on attack and damage rolls made with this magic quarterstaff. As a reaction when I'm damaged by a creature in this weapon's reach, I can make one melee attack against it. This weapon is cursed, I'm unwilling to part with it, can't unattune to it without Remove Curse, and have disadvantage with other weapons. When I take damage, I must make a DC 15 Wisdom save or go berserk: I attack the nearest creature using this weapon with all my attacks, moving to the next nearest until none remain that I can sea or hear within 60 ft of me. I can also be calmed with a DC 15 Charisma (Persuasion) check.", descriptionFull : "You have a +2 bonus to attack and damage rolls made with this magic weapon. In addition, when you're damaged by a creature in reach, you may use your reaction to make one melee attack against it with this weapon."+ "\n " + toUni("Curse") + ". You're unwilling to part with this weapon while attuned to it. While attuned, you have disadvantage on attack rolls with weapons other than this one."+ "\n Whenever a hostile creature damages you, you must succeed on a DC 15 Wisdom saving throw or go berserk. While berserk, you must use your action on each of your turns to attack the creature nearest to you with the weapon. If you can make extra attacks as part of the Attack action, you use those extra attacks, moving to attack the next nearest creature after you fell your current target. If you have multiple possible targets, you attack one at random."+ "\n You're berserk until you start your turn with no creatures within 60 feet of you that you can see or hear. Alternatively, an ally can use an action to make a DC 15 Charisma (Persuasion) check and if successful, you're no longer berserk. Only the Remove Curse spell allows you to end attunement to this item."+ CoA_Corruption.description, eval : function() { CoA_Corruption.process(true, "demonbone polearm") }, removeeval : function() { CoA_Corruption.process(false, "demonbone polearm") }, chooseGear : { type : "weapon", prefixOrSuffix : "suffix", descriptionChange : ["replace", "polearm"], excludeCheck : function (inObjKey, inObj) { var testRegex = /\b(polearm|glaive|halberd|lance|pike|quarterstaff|spear)\b/i; return !testRegex.test(inObjKey) && (!inObj.baseWeapon || !testRegex.test(inObj.baseWeapon)); } }, calcChanges : { atkCalc : [ function (fields, v, output) { var testRegex = /\b(polearm|glaive|halberd|lance|pike|quarterstaff|spear)\b/i; if (!v.theWea.isMagicWeapon && v.isMeleeWeapon && (/demonbone/i).test(v.WeaponTextName) && (testRegex.test(v.thisWeapon[0]) || ( v.theWea.baseWeapon && testRegex.test(v.theWea.baseWeapon) ))) { output.magic = v.thisWeapon[1] + 2; } }, 'If I include the word "Demonbone" in a the name of a polearm, it will be treated as the magic weapon Demonbone Polearm. It adds +2 to hit and damage, can be used as a reaction when I\'m damaged by a creature within reach to attack them, an is cursed causing me to go beserk when I\'m damaged.' ] }, action : [["reaction", " (when damaged)"]] } MagicItemsList["gauntlets of rage"] = { name : "Gauntlets of Rage", source : [["CoA", 268]], type : "wondrous item", rarity : "rare", attunement : true, prerequisite : "Requires attunement by a bard, sorcerer, warlock, or wizard", prereqeval : function(v) { return classes.known.bard || classes.known.sorcerer || classes.known.warlock || classes.known.wizard ? true : false; }, description : "The first melee weapon attack I make after a short rest sends me into a fury for 1 minute. I can't cast spells or speak, am immune to charmed and frightened, and when I deal damage, I heal 2d8 hp and end this fury or one condition. Also, I can use a spell slot before a melee attack for +1d6 necrotic damage per spell level.", descriptionLong : "I gain the power of never-ending fury. The first melee weapon attack I make after I finish a short or long rest automatically send me into a special fury for 1 minute. While furious, I can't cast spells, can't verbally communicate, and am immune to the charmed and frightened conditions. Each time I deal damage, I regain 2d8 hit points and may immediately remove a condition I currently suffer from or end this fury. Also, while in this fury, I may spend a spell slot before I make a melee attack. Doing so causes the attack to deal an extra 1d6 necrotic damage per level of spell slot expended, if it hits.", descriptionFull : "You gain the power of never-ending fury. After you make a melee weapon attack, you automatically enter a special fury for 1 minute. While furious, you can't cast spells, can't verbally communicate, and are immune to the charmed and frightened conditions. Each time you deal damage, you regain 2d8 hit points and may immediately remove a condition you currently suffer from or end this fury. Additionally, while in this fury, you may spend a spell slot before you make a melee attack. Doing so causes the attack to deal an extra 3 (1d6) necrotic damage per level of spell slot expended, if the attack hits. Once used you may not use this fury again until you finish a short or long rest.", usages : 1, recovery : "short rest", savetxt : { text : ["Immune to charmed and frightened in fury"] } } MagicItemsList["infernal amulet"] = { name : "Infernal Amulet", source : [["CoA", 268]], type : "wondrous item", rarity : "rare", attunement : true, cursed: true, description : "While wearing this amulet, I can use it as a spellcasting focus for my spells, and it grants a +2 bonus to my spell save DC and spell attack bonus. It is cursed and corrupting. I'm unwilling to part with it and require Remove Curse to unattune to it. It gives me disadvantage on Strength saving throws and Strenght checks.", descriptionFull : "While wearing this amulet, you can use it as a spellcasting focus for your spells, and it grants a +2 bonus to your spell save DC and spell attack bonus."+ "\n " + toUni("Curse") + ". You're unwilling to part with this amulet while attuned to it and you wear it always. While wearing the amulet you have disadvantage on Strength saving throws and Strength checks. Only the Remove Curse spell allows you to remove the item and end attunement."+ CoA_Corruption.description, eval : function() { CoA_Corruption.process(true, "infernal amulet") }, removeeval : function() { CoA_Corruption.process(false, "infernal amulet") }, calcChanges : { spellCalc : [ function (type, spellcasters, ability) { if (type != "prepare") return 2; }, "While wearing the Infernal Amulet my spell save DC and spell attack bonus each increase by 2." ] }, advantages : [["Athletics", false], ["Strength", false]] } if (typePF) MagicItemsList["infernal amulet"].savetxt = { text : ["Disadv. on Str saves/checks"] } MagicItemsList["infernal plate armor"] = { name : "Infernal Plate Armor", source : [["CoA", 268]], type : "armor (plate)", rarity : "very rare", attunement : true, cursed: true, description : "While wearing this armor, I gain a +2 bonus to AC. This armor is cursed and corrupting. I can't take it off or unattune to it without Remove Curse. It makes me vulnerable to the following damage types: force, lightning, psychic, radiant, and thunder.", descriptionFull : "While wearing this armor, you gain a +2 bonus to AC."+ "\n " + toUni("Curse") + ". Once you wear this armor, and are attuned to it, you can't remove it. Only the Remove Curse spell allows you to end the attunement and finally doff it. While wearing the armor, you're vulnerable to the following damage types: force, lightning, psychic, radiant, and thunder."+ CoA_Corruption.description, eval : function() { CoA_Corruption.process(true, "infernal plate armor") }, removeeval : function() { CoA_Corruption.process(false, "infernal plate armor") }, weight : 65, armorOptions : [{ regExpSearch : /^(?=.*infernal)(?=.*plate).*$/i, name : "Infernal Plate Armor", source : [["CoA", 268]], type : "heavy", ac : "18+2", stealthdis : true, weight : 65, strReq : 15, selectNow : true }], savetxt : { text : ["Vulnerable to force, lightning, psychic, radiant, and thunder damage"] }, } MagicItemsList["knife of stolen resistance"] = { name : "Knife of Stolen Resistance", source : [["CoA", 268]], type : "weapon (dagger)", rarity : "rare", description : "As an action once per long rest, I can use this knife to carve a single infernal rune into the flesh of an unconscious Beast, Celestial, Dragon, Fey, or Giant. Over the next 10 minutes the creature dies in agony, only Wish can stop this. If the creature has any resistances or immunities, I gain those while its dying.", descriptionFull : "Using an action, you carve a single infernal rune into the flesh of an unconscious Beast, Celestial, Dragon, Fey, or Giant with this knife. Over the next 10 minutes the creature dies an agonizing death that can't be prevented short of the Wish spell. If the creature has any resistances or immunities, you gain those resistances and immunities until the creature dies or a Wish spell is used to save the creature. The knife's power can't be used again until you finish a long rest.", weight : 1, action : [["action", ""]], usages : 1, recovery : "long rest", weaponOptions : [{ baseWeapon : "dagger", regExpSearch : /^(?=.*knife)(?=.*stolen)(?=.*resistance).*$/i, name : "Knife of Stolen Resistance", source : [["CoA", 268]], selectNow : true }] } MagicItemsList["ring of collecting"] = { name : "Ring of Collecting", source : [["CoA", 268]], type : "ring", rarity : "very rare", attunement : true, description : "As an action once per dawn, I can use this ring to cast Tiny Hut. As a bonus action, I can disintegrate an up to Medium sized, nonmagical piece of art within 60 ft. That art now appears inside the tiny hut, vanishing forever if removed from it. For every 1000 gp of art added, the tiny hut get +1 ft radius and lasts +1 hour.", descriptionLong : "As an action once per dawn, I can use this ring to cast Leomund's Tiny Hut. As a bonus action, I can use this ring to disintegrate an up to Medium sized, nonmagical piece of art (drawing, painting, or sculpture) within 60 ft. That art now appears inside the tiny hut, for me to appreciate whenever I desire. If I try to remove this art from the tiny hut, it vanishes forever. I can steadily improve this space, but only by denying such beauty from the rest of the world. For every 1000 gp of art acquired, the tiny hut increases in size by adding +1 ft to its radius and lasts +1 hour.", descriptionFull : "While wearing this ring you can use it to cast the Leomund's Tiny Hut spell as an action. Once this property is used, it can't be used again until the next dawn. Additionally, as a bonus action, you can use the ring to disintegrate any nonmagical piece of art (drawing, painting, or sculpture) within 60 feet that is no larger than Medium-sized. That art now appears inside the tiny hut, for you to appreciate whenever you desire. If you try to remove this art from the tiny hut, it vanishes forever. You can steadily improve this space, but only by denying such beauty to the rest of the world. For every 1,000 gp of art acquired, the tiny hut increases in size by adding another foot to its radius and lasts one additional hour.", spellcastingBonus : [{ name : "Once per dawn", spells : ["leomund's tiny hut"], selection : ["leomund's tiny hut"], firstCol : "oncelr" }], spellChanges : { "leomund's tiny hut" : { time : "1 a", duration : "8h+1h/1k gp", description : "10ft+1ft/1000 gp rad immobile dome of force; 9 Medium crea; blocks magic; ends if I leave; see book", changes : "Using the Ring of Collecting, I can cast Leomund's Tiny Hut as an action instead of taking 1 minute. Once this property is used, it can't be used again until the next dawn. For every 1000 gp of art acquired, the tiny hut increases in size by adding +1 ft to its radius and lasts +1 hour." } }, usages : 1, recovery : "dawn", additional : "Leomund's Tiny Hut", action : [["bonus action", " (steal art)"]] } MagicItemsList["ring of the copycat"] = { name : "Ring of the Copycat", source : [["CoA", 268]], type : "ring", rarity : "legendary", attunement : true, description : "As a reaction when an ally within 60 ft casts a spell, I can cast it as well as long as I can't normally cast it and it requires 10 gp or less material components. The cloned spell uses the original caster's abilities, originates from me and I choose its targets, but my ally can't cast this spell again until they finish a long rest.", descriptionFull : "You gain the ability to channel energy from allies to cast spells, even if you normally can't. When an ally within 60 feet of you casts a spell that you normally can't cast and that requires 10 gp or fewer in material components, you may use a reaction to cast that spell. When cast in this way, the spell is cast using your ally's spellcasting ability, spell save DC, and spell attack bonus, as needed. You decide this cloned spell's target, as specified in the spell's description, and the spell originates from you. After you use this ability, your ally can't cast this spell again until they finish a long rest.", action : [["reaction", ""]] } MagicItemsList["ring of treachery"] = { name : "Ring of Treachery", source : [["CoA", 269]], type : "ring", rarity : "very rare", attunement : true, description : "This ring has 3 charges, which are restored whenever I finish a long rest. As a reaction when I am damaged, I can expend one charge to transfer that damage to a random creature (allies included) within 60 ft of me.", descriptionFull : "This ring has 3 charges. While wearing this ring, when you're damaged, you may use a reaction to expend a charge and transfer that damage to a random creature (which could include an ally) within 60 feet. All charges are restored when you finish a long rest.", action : [["reaction", " (when damaged)"]], usages : 3 } MagicItemsList["sage's mirror"] = { name : "Sage's Mirror", source : [["CoA", 269]], type : "wondrous item", rarity : "rare", description : "This mirror has 3 charges, regaining all at dusk. As an action, I can expend 1 charge to cast either Find the Path or Legend Lore. With each use, it is apparent that the information gleaned from the mirror comes from a chamber in the Nine Hells where sages and scholars are tortured for the answers to each question.", descriptionFull : "This item has 3 charges and regains all charges at dusk. You can use an action and expend 1 of the mirror's charges to cast one of the following spells:"+ "\n \u2022 Find the Path"+ "\n \u2022 Legend Lore"+ "\n With each use, it is apparent that the information gleaned from the mirror comes from a chamber in the Nine Hells where sages and scholars are tortured for the answers to each question.", usages : 3, recovery : "Dusk", spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "1 charge", spells : ["find the path", "legend lore"], selection : ["find the path", "legend lore"], firstCol : 1, times : 2 }], spellChanges : { "find the path" : { time : "1 a", changes : "Using the Sage's Mirror, I can cast Find the Path as an action when I expend one of its charges." }, "legend lore" : { time : "1 a", changes : "Using the Sage's Mirror, I can cast Legend Lore as an action when I expend one of its charges." } } } MagicItemsList["skull of selfish knowledge"] = { name : "Skull of Selfish Knowledge", source : [["CoA", 269]], type : "wondrous item", rarity : "rare", attunement : true, description : "As an action, I can make this magical skull devour a nonmagical book, map, or scroll. Once devoured, the learning is forever available to me, but I can never write the information down or communicate it to others. It is for me alone.", descriptionFull : "You may use an action to make the magical skull devour a nonmagical book, map, or scroll. Once devoured the learning is forever available to you, but you can never write the information down or communicate it to others. It is for you alone.", action : [["action", ""]] } MagicItemsList["stygian spear"] = { name : "Stygian Spear", source : [["CoA", 270]], type : "weapon (spear or javelin)", rarity : "very rare", attunement : true, cursed: true, description : "This +2 weapon deals +1d6 damage when thrown. It returns to my hand immediately after it hits or misses. It is cursed and corrupting. I'm unwilling to part with it, require Remove Curse to unattune, and have disadv. with other weapons. On a 1 to hit, I attack the closest ally with adv. and deal +2d6 poison damage.", descriptionFull : "You have a +2 bonus to attack and damage rolls made with this magic weapon. When you throw it, it deals one extra die of damage on a hit. After you throw it and it hits or misses, it flies back to your hand immediately."+ "\n " + toUni("Curse") + ". You're unwilling to part with this weapon while attuned to it. In addition, you have disadvantage on attack rolls made with weapons other than this one."+ "\n Whenever you roll a 1 on an attack roll using this weapon, your target changes to your closest ally."+ "\n If there are multiple allies, randomly determine which is the target. Make a new attack roll with advantage against your ally. If the attack hits, in addition to the standard damage you deal an extra 2d6 poison damage. Only the Remove Curse spell allows you to end attunement to this item."+ CoA_Corruption.description, eval : function() { CoA_Corruption.process(true, "stygian spear") }, removeeval : function() { CoA_Corruption.process(false, "stygian spear") }, choices : ["Javelin", "Spear"], "javelin" : { name : "Stygian Javelin", description : "This +2 javelin deals +1d6 damage when thrown. It returns to my hand immediately after it hits or misses. It is cursed and corrupting. I'm unwilling to part with it, require Remove Curse to unattune, and have disadv. with other weapons. On a 1 to hit, I attack the closest ally with adv. and deal +2d6 poison damage.", descriptionLong : "I have a +2 bonus to attack and damage rolls made with this magic javelin. When I throw it, it deals one extra die of damage on a hit and it flies back to my hand immediately after it hits or misses. It is cursed and corrupting. I'm unwilling to part with it, require Remove Curse to unattune to it, and gives me disadvantage on attacks with other weapons. Whenever I roll a 1 on an attack roll using this weapon, I instead attack my closest ally. I make a new attack roll with advantage against my ally and if it hits, this weapon deals an extra +2d6 poison damage. If there are multiple allies, randomly determine the target.", weaponOptions : [{ baseWeapon : "javelin", regExpSearch : /^(?=.*stygian)(?=.*javelin).*$/i, name : "Stygian Javelin", source : [["CoA", 270]], description : "Returning, thrown; Thrown: +1d6 damage; On 1: adv. attack ally \u0026 +2d6 poison damage", modifiers : [2, 2], selectNow : true }], weight : 2 }, "spear" : { name : "Stygian\u200A Spear", description : "This +2 spear deals +1d6 damage when thrown. It returns to my hand immediately after it hits or misses. It is cursed and corrupting. I'm unwilling to part with it, require Remove Curse to unattune, and have disadv. with other weapons. On a 1 to hit, I attack the closest ally with adv. and deal +2d6 poison damage.", descriptionLong : "I have a +2 bonus to attack and damage rolls made with this magic spear. When I throw it, it deals one extra die of damage on a hit and it flies back to my hand immediately after it hits or misses. It is cursed and corrupting. I'm unwilling to part with it, require Remove Curse to unattune to it, and gives me disadvantage on attacks with other weapons. Whenever I roll a 1 on an attack roll using this weapon, I instead attack my closest ally. I make a new attack roll with advantage against my ally and if it hits, this weapon deals an extra +2d6 poison damage. If there are multiple allies, randomly determine the target.", weaponOptions : [{ baseWeapon : "spear", regExpSearch : /^(?=.*stygian)(?=.*spear).*$/i, name : "Stygian Spear", source : [["CoA", 270]], description : "Returning, thrown, versatile (1d8); Thrown: +1d6 damage; On 1: adv. attack ally \u0026 +2d6 poison damage", modifiers : [2, 2], selectNow : true }], weight : 3 } } MagicItemsList["sword of retribution"] = { name : "Sword of Retribution", nameTest : "of Retribution", source : [["CoA", 270]], type : "weapon (any sword)", rarity : "very rare", attunement : true, cursed: true, description : "Damage from this +3 sword can be regained only through resting. It is cursed and corrupting. I'm unwilling to part with it, require Remove Curse to unattune, and have disadv. with other weapons. After a long rest, I must make a DC 11 Con save or only get the benefits of a short rest due to nightmares.", descriptionLong : "I gain a +3 bonus to attack and damage rolls made with this sword. Hit points lost to this weapon's damage can be regained only through a short or long rest, rather than by regeneration, magic, or any other means. It is cursed and corrupting. I'm unwilling to part with it, require Remove Curse to unattune to it, and gives me disadvantage on attacks with other weapons. When I sleep, I experience nightmares of the past of the vengeful spirit possessing the sword, culminating in its death. After a long rest, I must make a DC 11 Constitution saving throw or only gain the benefits of a short rest.", descriptionFull : "You gain a +3 bonus to attack and damage rolls made with this sword. Hit points lost to this weapon's damage can be regained only through a short or long rest, rather than by regeneration, magic, or any other means."+ "\n " + toUni("Curse") + ". You're unwilling to part with this weapon while attuned to it. While attuned to this weapon, you also have disadvantage on attack rolls made with weapons other than this one."+ "\n The vengeful spirit possessing the sword shares its history and lust for vengeance with the wielder. After each successful long rest, you experience nightmares of the spirit's past, culminating in its death. When you wake, you must make a DC 11 Constitution saving throw. On a failed save, you only gain the benefits of a short rest. Only the Remove Curse spell allows you to end attunement to this item."+ CoA_Corruption.description, eval : function() { CoA_Corruption.process(true, "sword of retribution") }, removeeval : function() { CoA_Corruption.process(false, "sword of retribution") }, chooseGear : { type : "weapon", prefixOrSuffix : "prefix", descriptionChange : ["replace", "sword"], excludeCheck : function (inObjKey, inObj) { var testRegex = /sword|scimitar|rapier/i; return !(testRegex).test(inObjKey) && (!inObj.baseWeapon || !(testRegex).test(inObj.baseWeapon)); } }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && v.isMeleeWeapon && (/sword|scimitar|rapier/i).test(v.baseWeaponName) && (/of retribution/i).test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + 'Only rest heals this damage; Cursed'; } }, 'If I include the words "of Retribution" in the name of a sword, it will be treated as the magic weapon Sword of Retribution. It gives a +3 bonus to attack and damage. Damage it deals can\'t be healed except by resting, and it also bears a curse.' ], atkCalc : [ function (fields, v, output) { if (v.isMeleeWeapon && (/sword|scimitar|rapier/i).test(v.baseWeaponName) && (/of retribution/i).test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; output.magic = v.thisWeapon[1] + 3; } }, '' ] } } var CoA_VialOfGreed = [ "This small glass vial can stockpile resources for use in the future. Once stored, resources last for 1 century before vanishing. As an action you make the vial store any number of the following resources, which are magically consumed and converted into a violet-colored liquid:", "\u2022 Up to 31 days of food and/or drink. The flavors are lost, instead becoming tasteless.", "\u2022 Up to 7 days of alcohol. The flavors are lost, instead becoming tasteless.", "\u2022 Up to 5 magic scrolls that affect a single creature. The target of the spell is you, and if the spell requires concentration, you can concentrate.", "\u2022 Up to 5 magic potions. No more than 2 duplicate potions can be stored at a time.", "You may have more than one kind of resource in the vial, up to the limits expressed above. You can use a bonus action to consume one day of food (or alcohol) or activate one scroll or magic potion. If activating a magic scroll, the effects of that scroll must end before you can activate another scroll from the Vial of Greed." ]; MagicItemsList["vial of greed"] = { name : "Vial of Greed", source : [["CoA", 270]], type : "wondrous item", rarity : "rare", attunement : true, description : "As an action, I can have this small glass vial magically store: food and drink (up to 31 days), alcohol (up to 7 days), magic scrolls that affect 1 creature (up to 5), and magic potions (up to 5, no 3 can be the same). As a bonus action, I can use or consume one of those stored, but the food, drink and alcohol is tasteless.", descriptionFull : CoA_VialOfGreed.join("\n "), toNotesPage : [{ name : "Vial of Greed Features", note : desc(CoA_VialOfGreed).replace(/is you/ig, "is me").replace(/you /ig, "I ") }], action : [ ["action", "Store in Vial of Greed"], ["bonus action", "Use from Vial of Greed"] ] } MagicItemsList["weapon of agonizing paralysis"] = { name : "Weapon of Agonizing Paralysis", nameTest : "of Agonizing Paralysis", source : [["CoA", 271]], type : "weapon (any melee)", rarity : "very rare", attunement : true, description : "This magic weapon has a +3 bonus to hit and damage. When it reduces a creature to 0 hp, they don't die but are instead healed to 1 hp and paralyzed. While paralyzed, infernal runes appear as if carved into their flesh and at the start of each of their turns they suffer immense pain and gain a level of exhaustion.", descriptionFull : "You have a +3 bonus to attack and damage rolls made with this magic weapon. When this weapon reduces a creature to 0 hit points, the creature doesn't die. Instead, infernal runes appear as if carved into their flesh and they're healed to 1 hit point. They now have the paralyzed condition until the condition is removed by a Lesser Restoration spell or similar magic. When the condition is removed, the runes disappear. At the start of each of their turns while they're paralyzed, the creature suffers immense pain and gains a level of exhaustion.", allowDuplicates : true, chooseGear : { type : "weapon", prefixOrSuffix : "prefix", excludeCheck : function (inObjKey, inObj) { return /melee/i.test(inObj.range); } }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && v.isMeleeWeapon && /^(?=.*agonizing)(?=.*paralysis).*$/i.test(v.baseWeaponName)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + 'At 0 hp: paralyzed not dead'; } }, 'If I include the words "of Agonizing Paralysis" in a the name of a melee weapon, it will be treated as the magic weapon Weapon of Agonizing Paralysis. It has +3 to hit and damage and when it brings a target to 0 hp, they are healed to 1 hp and paralyzed.' ], atkCalc : [ function (fields, v, output) { if (!v.theWea.isMagicWeapon && v.isMeleeWeapon && /^(?=.*agonizing)(?=.*paralysis).*$/i.test(v.baseWeaponName)) { v.theWea.isMagicWeapon = true; output.magic = v.thisWeapon[1] + 3; } }, '' ] } } // pub_20231114_BoMT.js // This file adds the Character Options content from the "The Book of Many Things" book (from the "The Deck of Many Things" set) to MPMB's Character Record Sheet // Define the source SourceList["BoMT"] = { name : "The Book of Many Things", abbreviation : "BoMT", abbreviationSpellsheet : "MT", group : "Primary Sources", url : "https://dndstore.wizards.com/us/en/product/865604/the-deck-of-many-things-digital-plus-physical-bundle", date : "2023/11/14" }; BackgroundList["rewarded"] = { regExpSearch : /rewarded/i, name : "Rewarded", source : [["BoMT", 57]], skills : ["Insight", "Persuasion"], gold : 18, languageProfs : [1], toolProfs : [["Gaming set", 1]], equipleft : [ ["Paper, sheets of", "", 5], ["Ink, 1 ounce bottle of", 1, ""], ["Ink pen", "", ""], ["Gaming set matching my proficiency", "", ""] ], equipright : [ ["Fine clothes", "", 6], ["Signet ring", "", ""], ["Pouch (with coins)", "", 1] ], feature : "Fortune's Favor", trait : [ "A safe home is a foundation on which anything else can be built. (Key, Throne)", "I was elevated to heights I could never otherwise attain, and I won't waste my fortune. (Star, Sun)", "I try to be a source of inspiration and joy to others. Life is never as bad as you think! (Euryale, Jester)", "Courage and boldness can carry the day when all else fails. (Comet, Knight)", "My good fortune means I can lift others up as well. (Gem, Moon)", "Having the right answers is the first step to solving any problem, no matter how dire. (Fates, Sage)" ], extra : [ "Select a Trinket", "Perfumed scarf from admirer", "Crystal glows as candle", "Letter from far-off influential", "Symbol with unknown meaning", "Ever-crisp playing card", "Half a medallion" ] }; BackgroundFeatureList["fortune's favor"] = { description : "I have unexpected good fortune in life, caused by something like a genie who granted me wishes, extraordinary luck during a game, me honing my skills to endure a supernatural trial, or some other force that transformed my life. This boon is reflected in my choice of one free feat: Lucky, Magic Initiate, or Skilled.", source : [["BoMT", 57]], featsAdd: [{ options: [ { key: 'lucky' }, { key: 'magic initiate' }, { key: 'skilled' }, ], }], }; BackgroundList["ruined"] = { regExpSearch : /ruined/i, name : "Ruined", source : [["BoMT", 58]], skills : ["Stealth", "Survival"], gold : 13, languageProfs : [1], toolProfs : [["Gaming set", 1]], equipleft : [ ["Cracked hourglass", "", 1], ["Rusty manacles", "", 6], ["Bottle, glass (half-empty)", "", 2], ["Hunting trap", "", 25], ["Gaming set matching my proficiency", "", ""] ], equipright : [ ["Traveler's clothes", "", 4], ["Pouch (with coins)", "", 1] ], feature : "Still Standing", trait : [ "I've changed from my past, and I work to live up to my new path. (Balance, Throne)", "Every moment is a gift I refuse to squander. (Euryale, Skull)", "Now that I've overcome having nothing, I can survive anything. (Fool, Ruin, Talons)", "I know enemies are set against me, and I always prepare for the worst. (Flames, Rogue)", "I interpret every event as part of a larger pattern I just haven't worked out yet. (Puzzle, Star)", "I must make up for so much time I've already lost. (Donjon, Void)" ], extra : [ "Select a Trinket", "Rusted scrap of family heirloom", "Ancient land deed, lost in obscurity", "Bauble once imbued with powerful magic", "Battered, pierced playing card", "Yellowed whispering humanoid tooth", "Keepsake from friend turned enemy" ] }; BackgroundFeatureList["still standing"] = { description : "I have weathered ruinous misfortune in my life and I possess hidden reserves because of this. Possibly I've had to keep my senses sharp, had to redouble my efforts to reclaim what is mine, had to stoically persevered through it, or experienced something else transformative. How I've dealt with this is reflected in my choice of one free feat: Alert, Skilled, or Tough.", source : [["BoMT", 58]], featsAdd: [{ options: [ { key: 'alert' }, { key: 'skilled' }, { key: 'tough' }, ], }], }; FeatsList["cartomancer"] = { name : "Cartomancer", source : [["BoMT", 49]], description : 'I can use a card deck as a spellcasting focus. I learn and can do stage magic with Prestidigitation. I conceal its components as card tricks when doing so. When I finish a long rest, I can store a spell from my class\' spell list into a card, see "Hidden Ace" notes.', descriptionFull : "You have learned to channel your magic through a deck of cards. You can use a card deck as your spellcasting focus, and you gain the following benefits:"+ "\n " + toUni("Card Tricks") + ". You learn the Prestidigitation cantrip and can use it to create illusions that duplicate the effects of stage magic. When you use Prestidigitation in this way, you can conceal the verbal and somatic components of the spell as ordinary conversation and card handling."+ "\n " + toUni("Hidden Ace") + ". When you finish a long rest, you can choose one spell from your class's spell list and imbue that spell into a card. The chosen spell must have a casting time of 1 action, and it must be a level for which you have spell slots. The card remains imbued with this spell for 8 hours. While the card is imbued with the spell, you can use a bonus action to flourish the card and cast the spell within. The card then immediately loses its magic.", prerequisite : "4th-level, Spellcasting feature", prereqeval : function(v) { return v.characterLevel >= 4 && v.isSpellcastingClass; }, spellcastingBonus : [{ name : "Cartomancer", spells : ["prestidigitation"], selection : ["prestidigitation"], }], spellChanges : { "prestidigitation" : { components : "V,S*", compMaterial : "When I duplicate the effects of stage magic, I can conceal the verbal and somatic components of the spell as ordinary conversation and card handling.", description : "Harmless sensation, illusory image, snuff light, clean/soil/chill/warm/flavor, stage magic (hide comp)", changes : "When I duplicate the effects of stage magic, I can conceal the verbal and somatic components of the spell as ordinary conversation and card handling." } }, action : [["bonus action", "Hidden Ace (use imbued card)"]], toNotesPage : [{ name : "Hidden Ace", page3notes : true, note : [ "When I finish a long rest, I can imbue a spell from my class' spell list into a card for 8 hours", "The spell must have a casting time of 1 action and be a level for which I have spell slots", "As a bonus action, I can flourish the card and cast the spell within; It then loses its magic" ] }] }; var BoMT = { toDescrFull : function (sDescr) { if (typeof sDescr !== "string") sDescr = sDescr.join("\n "); return sDescr.replace(/\[\[.*?\]\]/g, "$1") .replace(/>>(.*?)<>(.*?)( \(.*?\))?<<\. /g, function(a, p1, p2, p3, p4) { if (/\n /.test(p1)) { return "\n\n " + p2.toUpperCase() + p3.toLowerCase() + "\n "; } else { return p1 + p2 + p3 + ": "; } }); }, "voidwalker armor" : "This armor is cursed, and attuning to it extends the curse to you. As long as you remain cursed, you're unwilling to part with the armor. Taking it off fails to end the curse. While cursed in this way, you feel disconnected from your body, continuously hearing whispers that call for you to join them. Whenever you finish a long rest while cursed, you must make a DC 11 Charisma saving throw. On a failed save, your soul is drawn from your body and trapped in an object on a different plane of existence. The object and location of this object are chosen by the DM[[ (but might be the House of Cards; see chapter 18)]]. While your soul is trapped in this way, your body is inert and doesn't age or require sustenance. Destroying the object frees your soul; otherwise, only a Wish spell can restore your soul to your body.", "telescopic transporter" : "This enormous telescope allows you to view distant celestial objects, including stars, Wildspace systems, and Astral Sea phenomena like the cities of deities or the petrified husks of dead gods."+ "\n After spending 1 hour calibrating the telescope, you can attempt to travel to the planet or celestial body at which the telescope is currently pointed. At the end of the hour, you make a DC 17 Intelligence (Arcana) check. On a successful check, you and eight other willing creatures touching the telescope, along with everything all travelers are wearing and carrying, safely teleport to unoccupied spaces at the intended destination. On a failed check, a mishap occurs instead. The DM rolls on the table below to determine the mishap or chooses a mishap that's good for the campaign."+ "\n\nd6\tMishap"+ "\n 1\tThe travelers appear adrift in the Astral Sea."+ "\n 2\tThe travelers appear on a different plane of existence, determined randomly or chosen by the DM."+ "\n 3\tExcess cosmic energy overloads the telescope, causing it to explode. Each creature within 60 feet of the telescope takes 8d6 necrotic damage. Any Humanoid who survives this damage is transformed into a different kind of creature, as if it had been subject to the Reincarnate spell."+ "\n 4\tA creature from the Astral Sea (such as a githyanki knight) appears within 60 feet of the telescope. The DM decides its attitude."+ "\n 5\tThe travelers appear on a different planet or celestial body in the Wildspace system nearest to their target destination."+ "\n 6\tThe travelers arrive at their intended destination, but they each appear coated in harmless slime.", "sage's signet" : { "augury" : { time : "1 a", changes : "Using the Sage's Signet I can cast Augury once per dawn as an action." } }, "shrieking greaves" : "The greaves are cursed, and becoming attuned to them extends the curse to you. You can't remove the greaves or end your attunement to them until you are targeted by a Remove Curse spell or similar magic."+ "\n You have disadvantage on saving throws against the frightened condition. Whenever you start your turn frightened, the greaves release an ear-piercing scream. You and each creature within 10 feet of you must make a DC 15 Constitution saving throw, taking 2d8 thunder damage on a failed save, or half as much damage on a successful one.", "spindle of fate" : [ ">>Battle Foreknowledge<<. When you roll initiative, you can expend 1 charge to add or subtract your proficiency bonus from the total roll.", ">>Doom Foretold<<. As an action, you can expend 2 charges to target a creature within 30 feet of yourself and invoke that creature's doom. While the target is on the same plane of existence as you are, you can sense the direction to its location, and you know the direction of its movement if it's in motion. Additionally, once per turn when you deal damage to the doomed creature, you can roll 1d6 and add the number rolled to the damage roll. These benefits persist for 1 hour or until you target another creature with this effect.", ">>Twist of Fate<<. When a creature within 60 feet of you makes a saving throw or an attack roll, you can use your reaction to expend 3 charges and alter the outcome, turning a failed saving throw into a successful one, a missed attack roll into a hit, or vice versa." ], "starshot crossbow" : [ "This crossbow is crafted from blackened wood, and its limbs bear pearl inlays depicting constellations. You ignore the loading property with this crossbow. If you load no ammunition in the weapon, it produces its own, automatically creating one piece of magic ammunition when you make a ranged attack with it. The ammunition created by the weapon vanishes the instant after it hits or misses a target. The crossbow has 3 charges and regains 1d3 expended charges daily at dawn.", ">>Constellations<<. The crossbow is decorated with three constellations. As a bonus action, you can tap one of the constellations to invoke it, expending 1 charge and producing one of the following effects:", " \u2022 >>Balance<<. The next time you hit a creature with a ranged attack roll using this crossbow before the end of your next turn, you or another creature of your choice within 30 feet of you can regain hit points equal to 1d8 plus your proficiency bonus.", " \u2022 >>Flames<<. Until the end of your next turn, when you hit a creature with a ranged attack roll using this crossbow, the attack deals an additional 2d8 fire damage.", " \u2022 >>Rogue<<. Until the end of your next turn, you have the invisible condition, and anything you are wearing or carrying is also invisible." ], "deck of miscellany" : [ "Playing Card\t\tItem(s)", " [3\u2666] Three of diamonds \tWooden abacus", " [4\u2666] Four of diamonds \tFour vials of perfume", " [5\u2666] Five of diamonds \t5 days' worth of rations", " [6\u2666] Six of diamonds\t\tIron pot", " [7\u2666] Seven of diamonds \tDisguise kit", " [8\u2666] Eight of diamonds \tWindow (up to 5 feet wide and 5 feet high), which you can place on a vertical surface up to 5 feet thick and which allows you to look through the surface", " [9\u2666] Nine of diamonds \tManacles", "[10\u2666] Ten of diamonds \tTen sheets of parchment", " [3\u2665] Three of hearts\t\tThree daggers", " [4\u2665] Four of hearts\t\tFour flasks of oil", " [5\u2665] Five of hearts\t\tFive silk robes", " [6\u2665] Six of hearts\t\tForgery kit", " [7\u2665] Seven of hearts\t\tQuarterstaff", " [8\u2665] Eight of hearts\t\tFishing tackle", " [9\u2665] Nine of hearts\t\tLeather pouch containing 18 gp", "[10\u2665] Ten of hearts\t\t10 crossbow bolt", " [3\u2663] Three of clubs\t\tThree books, written in Common, about random historical events", " [4\u2663] Four of clubs\t\tCanvas tent", " [5\u2663] Five of clubs\t\t50 feet of coiled silk rope", " [6\u2663] Six of clubs\t\tTwo crowbars", " [7\u2663] Seven of clubs\t\tHealer's kit", " [8\u2663] Eight of clubs\t\tEight gems worth 5 gp each", " [9\u2663] Nine of clubs\t\tLamp", "[10\u2663] Ten of clubs\t\t10 feet of iron chain", " [3\u2660] Three of spades\t\tThree spears", " [4\u2660] Four of spades\t\tSteel mirror", " [5\u2660] Five of spades\t\t15-foot wooden pole", " [6\u2660] Six of spades\t\tBurlap sack", " [7\u2660] Seven of spades\t\tTwo sets of fine clothes", " [8\u2660] Eight of spades\t\tShovel", " [9\u2660] Nine of spades\t\tLight hammer", "[10\u2660] Ten of spades\t\tTen arrows" ], "deck of many more things" : { features : [ "Like the Deck of Many Things, the Deck of Many More Things manifests differently on various worlds. While it can include fewer or different cards, it frequently appears with a Deck of Many Things as part of a combined deck of sixty-six illuminated cards. The combined deck is usually protected by a box or pouch. The forty-four cards of the Deck of Many More Things bear similar imagery to those in the Deck of Many Things and have potent magical effects, which are detailed later in this description. Notably, cards from the Deck of Many More Things are more likely to be beneficial, though about a third of them are still dangerous.", "Before you draw a card, you must declare how many cards you intend to draw and then draw them randomly. Unless a card allows you to draw additional cards, any cards drawn exceeding this number have no effect.", "As soon as you draw a card, its magic takes effect. You must draw each card you declared no more than 1 hour after the previous draw. Unless a card states otherwise, if you fail to draw the chosen number, the remaining number of cards fly from the deck and take effect simultaneously.", "Unless it is the Fool or the Jester card, a drawn card immediately takes effect, fades from existence, and reappears in the deck, making it possible to draw the same card multiple times.", "The DM can use the physical cards provided in The Deck of Many Things card set to build a combined Deck of Many Things and Deck of Many More Things, including whichever cards they desire. Alternatively, roll on the Deck of Many More Things table below to randomly determine what cards are drawn.", "\n1d100\tCard"+ "\t\t1d100\tCard", "01\tAberration"+ "\t\t 34\tMine", "02\tBalance*"+ "\t\t 35\tMonstrosity", "03\tBeast"+ "\t\t 36\tMoon*", "04\tBook"+ "\t\t 37\tOoze", "05\tBridge"+ "\t\t 38\tPath", "06\tCampfire"+ "\t\t 39\tPit", "07\tCavern"+ "\t\t 40\tPlant", "08\tCelestial"+ "\t\t 41\tPriest", "09\tComet*"+ "\t\t 42\tPrisoner", "10\tConstruct"+ "\t\t 43\tPuzzle*", "11\tCorpse"+ "\t\t 44\tRing", "12\tCrossroads"+ "\t\t 45\tRogue*", "13\tDonjon*"+ "\t\t 46\tRuin*", "14\tDoor"+ "\t\t 47\tSage*", "15\tDragon"+ "\t\t 48\tShield", "16\tElemental"+ "\t\t 49\tShip", "17\tEuryale*"+ "\t\t 50\tSkull*", "18\tExpert"+ "\t\t 51\tStaff", "19\tFates*"+ "\t\t 52\tStairway", "20\tFey"+ "\t\t 53\tStar*", "21\tFiend"+ "\t\t 54\tStatue", "22\tFlames*"+ "\t\t 55\tSun*", "23\tFool*"+ "\t\t 56\tTalons*", "24\tGem*"+ "\t\t 57\tTavern", "25\tGiant"+ "\t\t 58\tTemple", "26\tHumanoid"+ "\t\t 59\tThrone*", "27\tJester*"+ "\t\t 60\tTomb", "28\tKey*"+ "\t\t 61\tTower", "29\tKnight*"+ "\t\t 62\tTree", "30\tLance"+ "\t\t 63\tUndead", "31\tMage"+ "\t\t 64\tVoid*", "32\tMap"+ "\t\t 65\tWarrior", "33\tMaze"+ "\t\t 66\tWell", "67-00\tRoll again\n", "* Found in the Deck of Many Things as depicted in the Dungeon Master's Guide" ], cards : [ ">>Aberration<<. You gain telepathy within a range of 90 feet.", ">>Beast<<. You immediately transform into a random Beast with a CR of 5 or lower. Your game statistics—including your ability scores, hit points, and possible actions—are replaced by the Beast's game statistics, and any nonmagical equipment you're wearing or carrying melds into your new form and can't be used. Any magic items you're carrying drop in an unoccupied space within 5 feet of your new form."+ "\n You remain transformed in this way for 2d12 days; nothing can alter your form while you're under the effects of this card, but the Wish spell can end the transformation early. When you revert to your normal form, you return to the same state you were in when you initially transformed.", ">>Book<<. You gain the ability to speak, read, and write 1d6 + 2 languages of your choice.", ">>Bridge<<. You gain the ability to cast the Time Stop spell 1d3 times. Use your Intelligence, Wisdom, or Charisma as the spellcasting ability (your choice).", ">>Campfire<<. You immediately gain the benefits of finishing a long rest.", ">>Cavern<<. You gain a climbing speed equal to your walking speed. You also gain the ability to move up, down, across vertical surfaces, and along ceilings, while leaving your hands free.", ">>Celestial<<. You sprout a pair of softly luminescent, feathered wings from your back and gain a flying speed of 30 feet.", ">>Construct<<. A homunculus appears in an unoccupied space within 5 feet of you. The appearance of the homunculus is determined by the DM, and the homunculus treats you as its creator.", ">>Corpse<<. You immediately drop to 0 hit points, have the unconscious condition, and must begin making death saving throws. Spells and other magical effects that restore hit points have no effect on you until you are stabilized. If you fail three death saving throws, you die and can be resurrected only by the Wish spell.", ">>Crossroads<<. Roll a d20. If the roll is even, you age 1d10 years. If the roll is odd, you become younger by 1d10 years, to a minimum of 1 year. This effect can be undone only by the Wish spell, divine intervention, or similar magic.", ">>Door<<. You gain the ability to cast the Gate spell 1d4 times, requiring no material components. Use your Intelligence, Wisdom, or Charisma as the spellcasting ability (your choice).", ">>Dragon<<. A dragon egg appears at your feet and immediately hatches into a dragon wyrmling. The type of dragon is chosen by the DM. The wyrmling views you as its parent and is staunchly loyal to you and your allies.", ">>Elemental<<. You become immune to one of the following damage types (choose immediately upon drawing this card): acid, cold, fire, lightning, or thunder.", ">>Expert<<. Your Dexterity score increases by 2, to a maximum of 22.", ">>Fey<<. A fey crossing opens into the Feywild, and you're immediately pulled through it, disappearing in a flash of rainbow-colored light. You draw no more cards."+ "\n The fey crossing appears as a shimmering fractal of light above the deck, and it remains open for 1 minute after the card is drawn. The precise location in the Feywild to which the fey crossing leads is determined by the DM.", ">>Fiend<<. A powerful Fiend appears in a nearby unoccupied space and offers you a deal.[[ The precise nature of this deal is up to the DM, but usually the Fiend offers some material reward in exchange for you and your allies completing a task for the Fiend.]] The Fiend is indifferent to you and can be bargained with; it keeps its side of any bargain it makes, though it might twist the wording of any agreement to suit its purposes. If attacked, or if negotiations fail and you refuse the Fiend's offer, it returns to its home plane.", ">>Giant<<. You immediately grow 2d10 inches in height, and your hit point maximum and current hit points both increase by 20.", ">>Humanoid<<. You can immediately choose to stop drawing from the deck, regardless of how many cards you initially declared.", ">>Lance<<. All your ability scores increase by 1, to a maximum of 20.", ">>Mage<<. Your Intelligence score increases by 2, to a maximum of 22.", ">>Map<<. At any time you choose within 1 year of drawing this card, you can mentally name or describe an object or individual that is familiar to you. You immediately know the location of the object or individual, as well as the distance between you and the object or individual, even if the object or individual is on a different plane of existence. If you named an individual, you know if they are alive and any conditions they have. If you named an object, you know if it is broken or not. If you named a magic item that has charges, you know how many charges it has remaining.", ">>Maze<<. You gain 1d3 levels of exhaustion.", ">>Mine<<. A pile of 2d6 gems (each worth 5,000 gp) and 1d10 chunks of precious ore (each worth 2,500 gp) appears at your feet." ], cards2 : [ ">>Monstrosity<<. A Large or larger Monstrosity with a challenge rating of 10 or less (chosen by the DM) appears in an unoccupied space within 15 feet of you. The creature is hostile toward you and attacks immediately. The creature disappears when it is killed or when you are reduced to 0 hit points. If there isn't enough space for a Large or larger creature to appear, this card has no effect.", ">>Ooze<<. A gelatinous cube immediately appears in your space and engulfs you. The gelatinous cube is hostile and remains until it is destroyed. If there isn't enough space for the gelatinous cube to appear, this card has no effect.", ">>Path<<. Your walking speed increases by 10 feet.", ">>Pit<<. A pit opens beneath you. You plummet 3d6 \xD7 10 feet, take damage from the fall, and have the prone condition.", ">>Plant<<. You gain the ability to cast Speak with Plants without using a spell slot; you must finish a long rest before you can cast it this way again. If you have spell slots of 3rd level or higher, you can cast this spell using them. Use your Intelligence, Wisdom, or Charisma as the spellcasting ability (your choice).", ">>Priest<<. Your Wisdom score increases by 2, to a maximum of 22.", ">>Prisoner<<. Glowing chains made of magical force appear and wrap around you. You have the restrained condition until the chains are destroyed or you are freed. While you have this condition, you can't cast spells, and any magic items you're wearing or carrying have their properties suppressed. You draw no more cards. The chains are immune to damage and can't be dispelled using the Dispel Magic spell or similar magic. However, a Disintegrate spell destroys the chains instantly, freeing you. Another creature can also free you by succeeding on a DC 30 Dexterity check using thieves' tools.", ">>Ring<<. A rare or rarer magic ring appears on your finger. If you have the attunement slots available, you're automatically attuned to the ring when it appears. The DM chooses the ring.", ">>Shield<<. A rare or rarer suit of magic armor that you are proficient with appears in your hands. The DM chooses the armor. If you lack proficiency with any armor, your base AC instead now equals 12 + your Dexterity modifier while you aren't wearing armor.", ">>Ship<<. You gain proficiency in three skills chosen by the DM.", ">>Staff<<. A rare or rarer magic rod, staff, or wand appears in your hands. The DM chooses the item.", ">>Stairway<<. You can choose to either decrease your number of declared draws by two or receive a rare or rarer wondrous item, which appears in your hands. The DM chooses the item.", ">>Statue<<. You immediately have the petrified condition as your body is transformed into marble. The petrification lasts until you are freed with the Greater Restoration spell or similar magic.", ">>Tavern<<. Your Charisma score increases by 2 to a maximum of 22.", ">>Temple<<. A deity or entity of similar power becomes bound to aid you. At any point in time between drawing the card and when you die, you can use your action to call on this entity for divine intervention, and the entity is bound to answer. The parameters and nature of this intervention are chosen by the DM. If you die without having used this intervention, the deity fulfills its obligation by casting the Resurrection spell on you. Once the entity has answered your call for divine intervention or resurrected you, the entity is no longer bound to aid you.", ">>Tomb<<. At any time you choose within 1 year of drawing this card, you can cast the True Resurrection spell once without expending a spell slot or requiring material components. Use your Intelligence, Wisdom, or Charisma as the spellcasting ability (your choice).", ">>Tower<<. Draw two additional cards beyond your declared number of draws. The magic of these cards doesn't immediately take effect; instead, choose one of the two additional cards to keep, returning the other to the deck. The magic of the card you keep takes effect immediately thereafter.", ">>Tree<<. Your skin immediately becomes rough, like tree bark. Your base AC now equals 15 + your Dexterity modifier while you aren't wearing armor, but you have vulnerability to fire damage. This transformation can be undone only by the Wish spell, divine intervention, or similar magic.", ">>Undead<<. Somewhere on the Material Plane, a revenant rises. This revenant blames you for its existence and relentlessly hunts you to exact its revenge. The revenant exists until either 1 year passes, the revenant kills you, or you use a Wish spell to banish it permanently to the afterlife.", ">>Warrior<<. Your Strength score increases by 2 to a maximum of 22.", ">>Well<<. You learn three cantrips of your choice from any spell list." ] }, "deck of wild cards" : [ "This deck of heavy vellum cards hums with the magic of the Elemental Chaos.", "The magic of the deck functions only if cards are drawn at random (a deck of real-world playing cards can simulate the deck). As an action, you can draw a random card from this deck and throw it to make a ranged spell attack, using Dexterity for the attack roll. The card has a range of 30 feet. On a hit, it deals 1d4 slashing damage and imposes a magical effect determined by its suit, as detailed in the table below. The card immediately returns to the deck after it hits or misses a target.\n", "d4\tSuit\tEffect", " 1\t\u2663 (Rods)\tThe card explodes in a burst of fire. The target and each creature within 5 feet of it must succeed on a DC 15 Dexterity saving throw or take 2d8 fire damage.", " 2\t\u2666 (Coins)\tThe card shoots streaks of lightning. The target must make a DC 15 Dexterity saving throw. On a failed save, the target has the blinded condition until the end of your next turn, and each creature within 10 feet of the target takes 1d6 lightning damage.", " 3\t\u2665 (Cups)\tThe card covers the target in a thick layer of ice. The target takes 1d10 cold damage and must succeed on a DC 15 Constitution saving throw or have the restrained condition until the end of your next turn.", " 4\t\u2660 (Swords)\tThe card unleashes a sharp, concussive blast. The target and each creature within 5 feet of it take 1d6 force damage and must succeed on a DC 15 Strength saving throw or have the prone condition." ], "deck of wonder" : { features : [ "Created in the image of the Deck of Many Things, this deck of ivory or vellum cards bestows an assortment of minor benefits and penalties on those who draw from it. Most (75 percent) of these decks have only thirteen cards, but the rest have twenty-two.", "Before you draw a card, you must declare how many cards you intend to draw, then draw them randomly. Any additional cards drawn have no effect. Unless a card states otherwise, as soon as you draw a card from the deck, its magic takes effect. You must draw each card you declared no more than 1 hour after the previous draw. If you fail to draw the chosen number, the remaining number of cards fly from the deck and take effect simultaneously.", "Unless it is the Mystery card, a drawn card immediately takes effect, fades from existence, and reappears in the deck, making it possible to draw the same card multiple times.", "You can use an altered deck of playing cards to simulate the deck, as shown in the table below.", "\n1d13\t1d22\tPlaying Card\t\tCard", "\t 1\t[A\u2666] Ace of diamonds\t\tChancellor*", "1\t 2\t[K\u2666] King of diamonds\t\tDay", "2\t 3\t[Q\u2666] Queen of diamonds \tNight", "3\t 4\t[J\u2666] Jack of diamonds\t\tDawn", "\t 5\t[2\u2666] Two of diamonds\t\tDusk*", "\t 6\t[A\u2665] Ace of hearts\t\tDestiny*", "4\t 7\t[K\u2665] King of hearts\t\tCrown", "5\t 8\t[Q\u2665] Queen of hearts\t\tLock", "6\t 9\t[J\u2665] Jack of hearts\t\tChampion", "\t 10\t[2\u2665] Two of hearts\t\tCoin*", "\t 11\t[A\u2663] Ace of clubs\t\tVulture*", "7\t 12\t[K\u2663] King of clubs\t\tChaos", "8\t 13\t[Q\u2663] Queen of clubs\t\tOrder", "9\t 14\t[J\u2663] Jack of clubs\t\tBeginning", "\t 15\t[2\u2663] Two of clubs\t\tMystery*", "\t 16\t[A\u2660] Ace of spades\t\tIsolation*", "10\t 17\t[K\u2660] King of spades\t\tEnd", "11\t 18\t[Q\u2660] Queen of spades\t\tMonster", "12\t 19\t[J\u2660] Jack of spades\t\tKnife", "\t 20\t[2\u2660] Two of spades\t\tJustice*", "\t 21\tJoker (with TM)\t\tStudent*", "13\t 22\tJoker (no TM)\t\tMischief\n", "* Found only in a deck with twenty-two cards" ], cards : [ ">>Beginning<<. Your hit point maximum and current hit points increase by 2d10. Your hit point maximum remains increased in this way for the next 8 hours.", ">>Champion<<. You gain a +1 bonus to weapon attack and damage rolls. This bonus lasts for 8 hours.", ">>Chancellor<<. Within 8 hours of drawing this card, you can cast Augury once as an action, requiring no material components. Use your Intelligence, Wisdom, or Charisma as the spellcasting ability (your choice).", ">>Chaos<<. You gain resistance to one of the following damage types (chosen by the DM): acid, cold, fire, lightning, or thunder. This resistance lasts for 1d12 days.", ">>Coin<<. Five pieces of jewelry, each worth 100 gp, or ten gemstones, each worth 50 gp, appear at your feet.", ">>Crown<<. You learn the Friends cantrip. Use your Intelligence, Wisdom, or Charisma as the spellcasting ability (your choice). If you already know this cantrip, the card has no effect.", ">>Dawn<<. This card invigorates you. For the next 8 hours, you can add your proficiency bonus to your initiative rolls.", ">>Day<<. You gain a +1 bonus to saving throws. This benefit lasts until you finish a long rest.", ">>Destiny<<. This card protects you against an untimely demise. The first time after drawing this card that you would drop to 0 hit points from taking damage, you instead drop to 1 hit point.", ">>Dusk<<. This card supernaturally saps your energy. You have disadvantage on initiative rolls. This effect lasts until you finish a long rest, but it can be ended early by a Remove Curse spell or similar magic.", ">>End<<. This card is an omen of death. You take 2d10 necrotic damage, and your hit point maximum is reduced by an amount equal to the damage taken. This effect can't reduce your hit point maximum below 10 hit points. This reduction lasts until you finish a long rest, but it can be ended early by a Remove Curse spell or similar magic.", ">>Isolation<<. You disappear, along with anything you are wearing or carrying, and become trapped in a harmless extradimensional space for 1d4 minutes. You draw no more cards. You then reappear in the space you left or the nearest unoccupied space. When you reappear, you must succeed on a DC 11 Constitution saving throw or have the poisoned condition for 1 hour as your body reels from the extradimensional travel.", ">>Justice<<. You momentarily gain the ability to balance the scales of fate. For the next 8 hours, whenever you or a creature within 60 feet of you is about to roll a d20 with advantage or disadvantage, you can use your reaction to prevent the roll from being affected by advantage or disadvantage.", ">>Knife<<. An uncommon magic weapon you're proficient with appears in your hands. The DM chooses the weapon.", ">>Lock<<. You gain the ability to cast Knock 1d3 times. Use your Intelligence, Wisdom, or Charisma as the spellcasting ability (your choice).", ">>Mischief<<. You receive an uncommon wondrous item (chosen by the DM), or you can draw two additional cards beyond your declared draws.", ">>Monster<<. This card's monstrous visage curses you. While cursed in this way, whenever you make a saving throw, you must roll 1d4 and subtract the number rolled from the total. The curse lasts until you finish a long rest, but it can be ended early with a Remove Curse spell or similar magic.", ">>Mystery<<. You have disadvantage on Intelligence saving throws for 1 hour. Discard this card and draw from the deck again; together, the two draws count as one of your declared draws.", ">>Night<<. You gain darkvision within a range of 300 feet. This darkvision lasts for 8 hours.", ">>Order<<. You gain resistance to one of the following damage types (chosen by the DM): force, necrotic, poison, psychic, or radiant. This resistance lasts for 1d12 days.", ">>Student<<. You gain proficiency in Wisdom saving throws. If you already have this proficiency, you instead gain proficiency in Intelligence or Charisma saving throws (your choice).", ">>Vulture<<. One nonmagical item or piece of equipment in your possession (chosen by the DM) disappears. The item remains nearby but concealed for a short time, so it can be found with a successful DC 15 Wisdom (Perception) check. If the item isn't recovered within 1 hour, it disappears forever." ] } } MagicItemsList["antimagic armor"] = { name : "Antimagic Armor", nameTest : /antimagic.*armou?r/i, source : [["BoMT", 65]], // Chapter 9: Knight type : "armor (light, medium, or heavy)", rarity : "very rare", attunement : true, description : "While wearing this armor, once per dawn I can cast Antimagic Field, requiring no spell components. In addition, as a reaction once per dawn, I can give myself advantage on a saving throw I make against a spell.", descriptionFull : "While wearing this armor, you can use your reaction to give yourself advantage on a saving throw you make against a spell. Once this property is used, it can't be used again until the next dawn."+ "\n In addition, while you wear this armor, you can use it to cast Antimagic Field, requiring no spell components. Once this property is used, it can't be used again until the next dawn.", chooseGear : { type : "armor", prefixOrSuffix : ["between", "Antimagic", "Armor"], descriptionChange : ["prefix", "armor"], itemName1stPage : ["suffix", "Antimagic"] }, action : [["reaction", "Adv. save vs. spell (1\xD7 per dawn)"]], spellcastingBonus : [{ name : "Once per dawn", spells : ["antimagic field"], selection : ["antimagic field"], firstCol : "oncelr" }], extraLimitedFeatures : [{ name : "Adv. save vs. spell (Antimagic Armor)", usages : 1, recovery : "dawn" }, { name : "Antimagic Field (Antimagic Armor)", usages : 1, recovery : "dawn" }], spellChanges : { "antimagic field" : { components : "", compMaterial : "", changes : "While wearing the armor, it requires no components to cast Antimagic Field." } } }; MagicItemsList["armor of fungal spores"] = { name : "Armor of Fungal Spores", nameTest : "of Fungal Spores", source : [["BoMT", 65]], // Chapter 9: Knight type : "armor (medium)", rarity : "uncommon", description : "As a bonus action once per dawn while wearing this armor, I can make it emit poisonous spores. These spores fill a 10-ft radius sphere centered on myself. Each creature in that area must make a DC 15 Constitution save or be poisoned until the end of my next turn.", descriptionFull : "While wearing this armor, you can take a bonus action to make the armor emit poisonous spores, which fill a 10-foot-radius sphere centered on yourself. Each creature in that area must succeed on a DC 15 Constitution saving throw or have the poisoned condition until the end of your next turn. Once this property is used, it can't be used again until the next dawn.", chooseGear : { type : "armor", prefixOrSuffix : "prefix", descriptionChange : ["prefix", "armor"], excludeCheck : function (inObjKey, inObj) { return !/medium/i.test(inObj.type); } }, action : [["bonus action", ""]], usages : 1, recovery : "dawn" }; MagicItemsList["armor of the fallen"] = { name : "Armor of the Fallen", nameTest : "of the Fallen", source : [["BoMT", 65]], // Chapter 9: Knight type : "armor (medium or heavy)", rarity : "uncommon", attunement : true, description : "While wearing this armor, I can use it to cast either Animate Dead or Speak with Dead. Once the armor has cast a spell in this way, it can't cast either spell until the next dawn. My soul keeps this armor together. If I die while attuned to the armor, the armor is destroyed.", descriptionFull : "While wearing this armor, you can use it to cast either Speak with Dead or Animate Dead. Once the armor has cast a spell in this way, it can't cast either spell until the next dawn."+ "\n Your soul keeps this armor together. If you die while you are attuned to the armor, the armor is destroyed.", chooseGear : { type : "armor", prefixOrSuffix : "prefix", descriptionChange : ["prefix", "armor"], excludeCheck : function (inObjKey, inObj) { return !/heavy|medium/i.test(inObj.type); } }, spellcastingBonus : [{ name : "either or", spells : ["animate dead", "speak with dead"], selection : ["animate dead", "speak with dead"], firstCol : "SP", times : 2 }], usages : 1, recovery : "dawn" }; MagicItemsList["armor of weightlessness"] = { name : "Armor of Weightlessness", nameTest : "of Weightlessness", source : [["BoMT", 65]], // Chapter 9: Knight type : "armor (light, medium, or heavy)", rarity : "uncommon", attunement : true, description : "This armor has 5 charges, regaining 1d4+1 expended charges daily at dawn. As a bonus action while wearing it, I can expend 1 or more charges to cast Jump (1 charge) or Levitate (2 charges) on myself.", descriptionFull : "This armor has 5 charges. While you wear it, you can use a bonus action to expend 1 or more charges to cast one of the following spells from the armor, targeting yourself: Jump (1 charge) or Levitate (2 charges)."+ "\n This armor regains 1d4 + 1 expended charges daily at dawn.", chooseGear : { type : "armor", prefixOrSuffix : "prefix", descriptionChange : ["prefix", "armor"] }, usages : 5, recovery : "dawn", additional : "regains 1d4+1", spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "1 charge (self only)", spells : ["jump"], selection : ["jump"], firstCol : 1 }, { name : "2 charges (self only)", spells : ["levitate"], selection : ["levitate"], firstCol : 2 }], spellChanges : { "jump" : { name : "Jump (self only)", time : "1 bns", range : "Self", description : "My jump distance is tripled for the duration", changes : "Using the Armor of Weightlessness, I can cast Jump as a bonus action, but only on myself." }, "levitate" : { name : "Levitate (self only)", time : "1 bns", range : "Self", save : "", description : "I float and move up vertically up to 20 ft; As part of my move each round, I can move up/down 20 ft", changes : "Using the Armor of Weightlessness, I can cast Levitate as a bonus action, but only on myself." } } }; MagicItemsList["baleful talon"] = { name : "Baleful Talon", source : [["BoMT", 34]], // Chapter 5: Gem type : "weapon (dagger)", rarity : "very rare", description : "I gain a +1 bonus to attack and damage rolls made with this hooked, obsidian dagger. When I hit a creature with it and roll a 19 or 20 to hit, the dagger flares with sickly light and deals +6d6 necrotic damage. The creature can make a DC 15 Con save to halve the damage. It turns to dust if this reduces its HP to 0.", descriptionFull : "You gain a +1 bonus to attack and damage rolls made with this hooked, obsidian dagger."+ "\n When you hit a creature with this magic weapon and roll a 19 or 20 on the attack roll, the creature must make a DC 15 Constitution saving throw as the dagger flares with sickly light. The creature takes 6d6 necrotic damage on a failed save, or half as much on a successful one. If this damage reduces the creature to 0 hit points, the creature disintegrates into dust.", weight : 1, weaponOptions : [{ baseWeapon : "dagger", regExpSearch : /^(?=.*baleful)(?=.*talon).*$/i, name : "Baleful Talon", source : [["BoMT", 34]], description : "Finesse, light, thrown; Roll of 19-20: +6d6 necrotic damage, DC 15 Con save halves", modifiers : [1, 1], selectNow : true }] }; MagicItemsList["blasted goggles"] = { name : "Blasted Goggles", source : [["BoMT", 174]], // Chapter 20: Flames type : "wondrous item", rarity : "uncommon", attunement : true, description : "These tinker's goggles have 3 charges, regaining 1d3 daily at dawn. As an action, I can use 1 charge to shoot a beam of light: a creature I can see within 120 ft must make a DC 15 Dexterity save or take 3d6 fire damage. If this is a natural 20, I'm blinded for 24 hours. Cursed: I can't remove these or end attunement.", descriptionFull : "These tinker's goggles have 3 charges. As an action, you can expend 1 charge to shoot a beam of fiery light from the goggles at a creature you can see within 120 feet of yourself. The target must succeed on a DC 15 Dexterity saving throw or take 3d6 fire damage. The goggles regain 1d3 expended charges daily at dawn."+ "\n " + toUni("Cursed") + ". The goggles are cursed, and becoming attuned to them extends the curse to you. You can't remove the goggles or end your attunement to them until you are targeted by a Remove Curse spell or similar magic."+ "\n Whenever you use the goggles' fiery beam and the target rolls a 20 on the d20 for the saving throw, the goggles expose you to a flash of violent bright light. As a result, you have the blinded condition for 24 hours.", usages : 3, recovery : "dawn", additional : "regains 1d3" }; MagicItemsList["bloodrage greataxe"] = { name : "Bloodrage Greataxe", source : [["BoMT", 66]], // Chapter 9: Knight type : "weapon (greataxe)", rarity : "uncommon", description : "I gain a +2 bonus to attack and damage rolls made with this magic greataxe while I have half my hit points or fewer.", descriptionFull : "You gain a +2 bonus to attack and damage rolls made with this magic greataxe while you have half your hit points or fewer.", weight : 7, weaponOptions : [{ baseWeapon : "greataxe", regExpSearch : /^(?=.*bloodrage)(?=.*(great|heavy|weida))(?=.*(axe|\bono|\bfu|masakari)s?\b).*$/i, name : "Bloodrage Greataxe", source : [["BoMT", 66]], description : "Heavy, two-handed; If I'm \u2264 \u00BD HP: +2 to hit \u0026 damage", selectNow : true }] }; MagicItemsList["bloodseeker ammunition"] = { name : "Bloodseeker Ammunition", nameTest : "Bloodseeker", source : [["BoMT", 66]], // Chapter 9: Knight type : "weapon (any ammunition)", rarity : "very rare", description : "Ranged attack rolls made with this magic ammunition have advantage against any creature doesn't have all its hit points.", descriptionFull : "Ranged attack rolls made with this ammunition have advantage against any creature doesn't have all its hit points.", allowDuplicates : true, chooseGear : { type : "ammo", prefixOrSuffix : "suffix", descriptionChange : ["replace", "ammunition"], excludeCheck : function (inObjKey, inObj) { return /vials|flasks/i.test(inObj.icon); } } }; MagicItemsList["boomerang shield"] = { name : "Boomerang Shield", source : [["BoMT", 66]], // Chapter 9: Knight type : "shield", rarity : "uncommon", attunement : true, description : "I can make a ranged weapon attack with this magic shield. It reappears in my hand the instant after it hits or misses a target. It has a range of 20 ft and a long range of 60 ft, uses Strength or Dexterity (my choice), I add my proficiency bonus if I'm proficient with shields, and it deals 1d6 slashing damage.", descriptionFull : "You can make a ranged weapon attack with this magic shield. It has a normal range of 20 feet and a long range of 60 feet, and it uses your Strength or Dexterity for the attack roll (your choice). If you're proficient with shields, you are proficient with attacks made using this shield. On a hit, it deals 1d6 slashing damage. If you throw the shield, it reappears in your hand the instant after it hits or misses a target.", weight : 6, shieldAdd : "Boomerang Shield", weaponOptions : [{ regExpSearch : /^(?=.*boomerang)(?=.*shield).*$/i, name : "Boomerang Shield", source : [["BoMT", 66]], ability : 1, type : "Shield", damage : [1, 6, "slashing"], range : "20/60 ft", weight : 6, description : "Finesse, thrown; Reappears instantly", // Not actually finesse, but easier to code this way and shouldn't cause any issues abilitytodamage : true, selectNow : true }], calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.name === "Boomerang Shield" && tDoc.getField("Proficiency Shields").isBoxChecked(0)) { fields.Proficiency = true; } } ] } }; MagicItemsList["bow of conflagration"] = { name : "Bow of Conflagration", nameTest : "of Conflagration", source : [["BoMT", 66]], // Chapter 9: Knight type : "weapon (any bow)", rarity : "rare", attunement : true, description : "Ammunition fired from this bow blazes brightly. When I hit with an attack roll using this bow, the target takes an extra 1d6 fire damage. If the target is a flammable, nonmagical object, it catches fire, taking 1d6 fire damage at the start of each of my turns until a creature uses an action to extinguish the flames.", descriptionFull : "Ammunition fired from this bow blazes brightly. When you hit with an attack roll using this bow, the target takes an extra 1d6 fire damage. If the target is a flammable, nonmagical object, it catches fire, taking 1d6 fire damage at the start of each of your turns until a creature uses an action to extinguish the flames.", chooseGear : { type : "weapon", prefixOrSuffix : "prefix", descriptionChange : ["replace", "bow"], excludeCheck : function (inObjKey, inObj) { var testRegex = /bow/i; return !testRegex.test(inObjKey) && (!inObj.baseWeapon || !testRegex.test(inObj.baseWeapon)); } }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && v.isRangedWeapon && /bow/i.test(v.baseWeaponName) && /conflagration/i.test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + '+1d6 fire damage; ignites target object'; } }, 'If I include the word "Conflagration" in the name of a bow, it will be treated as the magic weapon Bow of Conflagration. The bow deals an extra 1d6 fire damage. If I target and hit a flammable, nonmagical object, it catches fire, taking 1d6 fire damage at the start of each of my turns until a creature uses an action to extinguish the flames.' ] } }; MagicItemsList["bow of melodies"] = { name : "Bow of Melodies", nameTest : "of Melodies", source : [["BoMT", 66]], // Chapter 9: Knight type : "weapon (any bow)", rarity : "very rare", attunement : true, description : "This bow has multiple strings. I can use these to play one of two melodies on each attack, imbuing it with magic. Melody of Precision: If I'm proficient with Performance, I add +1 (+2 if expertise) to the attack roll. Melody of Reverberation: the attack deals my Charisma modifier in extra thunder damage.", descriptionFull : "This bow has multiple strings and resembles a lyre or small harp. By strumming the strings while setting an arrow to the bow, you imbue the arrow with magic."+ "\n You can play one of the following melodies when you use the bow to make a ranged weapon attack. You must choose to do so before you make the attack roll, and you can play only one melody per attack."+ "\n " + toUni("Melody of Precision") + ". If you're proficient in Performance, you gain a +1 bonus to the attack roll. If you have expertise in Performance, you gain a +2 bonus instead."+ "\n " + toUni("Melody of Reverberation") + ". The melody you strum echoes loudly. On a hit, the target takes extra thunder damage equal to your Charisma modifier.", chooseGear : { type : "weapon", prefixOrSuffix : "prefix", descriptionChange : ["replace", "bow"], excludeCheck : function (inObjKey, inObj) { var testRegex = /bow/i; return !testRegex.test(inObjKey) && (!inObj.baseWeapon || !testRegex.test(inObj.baseWeapon)); } }, calcChanges : { atkAdd : [ function (fields, v) { var chaMod = Number(What('Cha Mod')); // Only add a description if positive Cha Mod and Melody of Precision is not an option or Reverberation is part of the name if (!v.theWea.isMagicWeapon && chaMod > 0 && v.isRangedWeapon && /bow/i.test(v.baseWeaponName) && /^(?=.*melod(ies|y))(?!.*precision).*$/i.test(v.WeaponTextName) && (/reverberation/i.test(v.WeaponTextName) || !hasSkillProf("Performance")[0])) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + '+' + chaMod + ' (Cha mod) thunder damage'; } }, 'If I include the word "Melody" or "Melodies" in the name of a bow, it will be treated as the magic weapon Bow of Melodies. If I also include either "Precision" or "Reverberation" in the name, the respective bonus will be added. if I include neither of those in the name, the bonus will be determined automatically, the Melody of Precision if proficient with Performance (+1 or +2 bonus to hit) or Melody of Reverberation otherwise (+Cha mod thunder damage).' ], atkCalc : [ function (fields, v, output) { // Add to hit bonus if name doesn't include Reverberation. Will be zero if not proficient in Performance if (!v.theWea.isMagicWeapon && v.isRangedWeapon && /bow/i.test(v.baseWeaponName) && /^(?=.*melod(ies|y))(?!.*reverberation).*$/i.test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; var perfProf = hasSkillProf("Performance"); output.extraHit += perfProf[1] ? 2 : perfProf[0] ? 1 : 0; } }, '' ] } }; MagicItemsList["breastplate of balance"] = { name : "Breastplate of Balance", source : [["BoMT", 34]], // Chapter 5: Gem type : "armor (breastplate)", rarity : "rare", attunement : true, description : "This burnished copper breastplate with merchant's scales on the chest has 4 charges, regaining 1d4 at dawn. As a reaction when I or another I can see within 60 ft is about to roll a d20 with (dis)advantage, I can use 1 charge to prevent this (dis)advantage. As a bonus action, I can use 2 charges to cast Lesser Restoration.", descriptionFull : "This burnished copper breastplate looks as if it were made of interlocking gears. Merchant's scales are emblazoned across the chest."+ "\n The armor has 4 charges. You can use the charges in the following ways while wearing the armor:"+ "\n " + toUni("Equalize") + ". When you or a creature you can see within 60 feet of yourself is about to roll a d20 with advantage or disadvantage, you can expend 1 charge and take a reaction to prevent the roll from being affected by advantage or disadvantage."+ "\n " + toUni("Expunge Imbalance") + ". As a bonus action, you can expend 2 charges to cast the Lesser Restoration spell from the armor."+ "\n The armor regains 1d4 expended charges daily at dawn.", weight : 20, action : [["reaction", " (if dis./adv.)"]], usages : 4, recovery : "dawn", additional : "regains 1d4", armorAdd : { select : "Breastplate of Balance", options : ["Breastplate of Balance"] }, spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "2 charges", spells : ["lesser restoration"], selection : ["lesser restoration"], firstCol : 2 }], spellChanges : { "lesser restoration" : { time : "1 bns", changes : "While wearing the armor, I can use 2 of its charges to cast Lesser Restoration as a bonus action." } } }; MagicItemsList["card sharp's deck"] = { name : "Card Sharp's Deck", source : [["BoMT", 40]], // Chapter 6: Rogue type : "wondrous item", rarity : "uncommon", description : 'The cards of this deck shimmer around the edges. As an action, I can throw a card as ranged spell attack using Dexterity. This "Deadly Deal" attack has 120 ft range and deals 1d8 force damage. As an action once per dawn, I can shuffle the deck to cast Spray of Cards at 3rd level with it (save DC 15).', descriptionFull : "The cards of this deck shimmer around the edges. While holding this deck, you can use the following properties:"+ "\n " + toUni("Deadly Deal") + ". As an action, you can use this deck to make a ranged spell attack by throwing a spectral card and using Dexterity for the attack roll. The card has a range of 120 feet and deals 1d8 force damage on a hit."+ "\n " + toUni("Spray of Cards") + ". As an action, you can shuffle the deck and cast the Spray of Cards spell at 3rd level from the deck (spell save DC 15). Once the deck has cast the spell, it can't cast the spell again until the next dawn.", action : [["action", ""]], weaponOptions : [{ regExpSearch : /^(?=.*deadly)(?=.*deal).*$/i, name : "Deadly Deal", source : [["BoMT", 40]], ability : 2, type : "Spell", damage : [1, 8, "force"], range : "120 ft", description : "", abilitytodamage : false, selectNow : true }], usages : 1, recovery : "dawn", additional : "Spray of Cards", spellcastingBonus : [{ name : "Once per dawn", spells : ["spray of cards"], selection : ["spray of cards"], firstCol : "oncelr" }], spellChanges : { "spray of cards" : { description : "All in area 3d10 Force dmg and blinded until their next turn ends; save halves \u0026 not blinded", descriptionShorter : false, changes : "Using Card Sharp's Deck I can cast Spray of Cards at 3rd level once per dawn." } } }; MagicItemsList["clockwork armor"] = { name : "Clockwork Armor", nameTest : /clockwork.*armou?r/i, source : [["BoMT", 67]], // Chapter 9: Knight type : "armor (heavy)", rarity : "very rare", attunement : true, description : "The outside surface and internal joints of this armor whir with interlocking gears, drawing on the magic of the plane of Mechanus. The armor has 4 charges and regains 1d4 used charges daily at dawn. If I make a d20 roll while wearing it, I can expend 1 charge to change the number rolled to a 10.", descriptionFull : "The outside surface and internal joints of this armor whir with interlocking gears, drawing on the orderly magic of the plane of Mechanus."+ "\n The armor has 4 charges. If you make a d20 roll while wearing this armor, you can expend 1 charge to change the number rolled to a 10. The armor regains 1d4 expended charges daily at dawn.", chooseGear : { type : "armor", prefixOrSuffix : ["between", "Clockwork", "Armor"], descriptionChange : ["prefix", "armor"], itemName1stPage : ["suffix", "Clockwork"], excludeCheck : function (inObjKey, inObj) { return !/heavy/i.test(inObj.type); } }, usages : 4, recovery : "dawn", additional : "regains 1d4" }; MagicItemsList["crown of whirling comets"] = { name : "Crown of Whirling Comets", source : [["BoMT", 35]], // Chapter 5: Gem type : "wondrous item", rarity : "very rare", attunement : true, description : "This crown has 6 charges, regaining 1d6 at dawn. As a bonus action, I can use 1 charge to fly my walking speed and hover, for 10 min. I can use 3 charges to cast Ice Storm (DC 16). As an action, I can launch one frigid starlight bolt per charge used, that each deal 2d4 cold damage to a creature I can see within 120 ft.", descriptionLong : "This delicate silver tiara decorated with stellar iconography has gems on the tiara's points that detach and closely orbit my head. It has 6 charges, regaining 1d6 used charges daily at dawn. As a bonus action, I can use 1 charge to gain a flying speed equal to my walking speed and I can hover, for 10 minutes. As an action, I can expend any number of charges to launch one frigid starlight bolt per charge used to a creature I can see within 120 ft. Each bolt automatically hits and deals 2d4 cold damage. Bolts can be used to hit the same or different targets. As an action, I can use 3 charges to cast Ice Storm (save DC 16).", descriptionFull : "This delicate silver tiara is decorated with stellar iconography. While you wear the crown, the gems on the tiara's points detach and closely orbit your head."+ "\n The crown has 6 charges for the following properties, which you can use while wearing the crown:"+ "\n " + toUni("Star Flight") + ". As a bonus action, you can spend 1 charge to gain the power of flight for 10 minutes. For the duration, you gain a flying speed equal to your walking speed, and you can hover. While flying, you glow faintly with starlight."+ "\n " + toUni("Starlight Strike") + ". As an action, you can spend any number of charges to launch bolts of frigid starlight. You launch a number of bolts equal to the number of charges spent, and you can direct the bolts to target one creature or several, so long as all creatures are within 120 feet of you and you can see them. The bolts automatically strike their targets, and each bolt deals 2d4 cold damage."+ "\n " + toUni("Whirling Hail") + ". As an action, you can spend 3 charges and cast the Ice Storm spell (save DC 16)."+ "\n The crown regains 1d6 expended charges daily at dawn.", action : [["bonus action", " (fly)"], ["action", " (bolts)"]], usages : 6, recovery : "dawn", additional : "regains 1d6", fixedDC : 16, spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "3 charges", spells : ["ice storm"], selection : ["ice storm"], firstCol : 3 }] }; MagicItemsList["deck of dimensions"] = { name : "Deck of Dimensions", source : [["BoMT", 40]], // Chapter 6: Rogue type : "wondrous item", rarity : "very rare", attunement : true, description : "This deck has 6 charges, regaining 1d6 used at dawn. As a bonus action, I can use 1 charge to throw a card to an empty spot either within 60 ft and teleport to it, or within 5 ft and teleport to it once in the next 8 hours as an action. I can use 3 charges to cast Arcane Gate, but can't use the deck while the gate is active.", descriptionLong : "These cards are decorated with intricate designs of different planes of existence. The deck has 6 charges, regaining 1d6 used charges daily at dawn. As a bonus action, I can use 1 charge to throw a card to an empty space either within 60 ft and teleport to it now, or within 5 ft and leave it there to use an action within the next 24 hours to speak the card's name and teleport to it. Once I teleport to a card, or 8 hours passed, the card vanishes and returns to the deck. As an action, I can use 3 charges to cast Arcane Gate, but the fluttering cards of the deck make up the gate, rendering the deck useless while it's active.", descriptionFull : "The backs of the cards in this deck are decorated with intricate designs representing different planes of existence. The deck has 6 charges. While holding it, you can expend 1 or more of its charges to use the following properties:"+ "\n " + toUni("Marked Card") + ". As a bonus action, you can expend 1 charge to draw a card from the deck and place it in an unoccupied space within 5 feet of you. The card then becomes marked with an invisible sigil. Once within the next 24 hours, as an action, you can speak the marked card's name and teleport to the card's location, along with any equipment you are wearing or carrying, appearing in the closest unoccupied space to the card. After you teleport in this way, or after 8 hours, the card returns to the deck, and the mark on it fades."+ "\n " + toUni("Riffling Portal") + ". As an action, you can expend 3 charges to cast the Arcane Gate spell from the deck. The deck vanishes, and fluttering cards create the spell's portal rings. When the spell ends, the deck reappears in your possession."+ "\n " + toUni("Shuffling Stride") + ". As a bonus action, you can expend 1 charge to throw a card from the deck to an unoccupied space within 60 feet of yourself and teleport, along with any equipment you're wearing or carrying, to that space. The card then vanishes and returns to the deck."+ "\n The deck regains 1d6 expended charges daily at dawn.", action : [["bonus action", " (throw card)"], ["action", " (teleport back)"]], usages : 6, recovery : "dawn", additional : "regains 1d6", spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "3 charges", spells : ["arcane gate"], selection : ["arcane gate"], firstCol : 3 }] }; MagicItemsList["deck of many more things"] = { name : "Deck of Many More Things", source : [["BoMT", 51]], // Chapter 7: Sage type : "wondrous item", rarity : "legendary", description : "Before drawing cards from this deck, I must declare how many I wish to draw and then draw that number randomly. Any cards drawn in excess have no effect. When a card is drawn, its magic takes effect, it fades from existence, and, unless the card is the Fool or the Jester, reappears in the deck. See Notes page.", descriptionFull : "Over the centuries since the first Deck of Many Things was created, many have sought and failed to replicate it. But some have created new cards. These forty-four additional cards are known collectively as the Deck of Many More Things. (More information on creating new cards for this deck appears in chapter 2.)"+ "\n " + BoMT.toDescrFull(BoMT["deck of many more things"].features) + "\n\n " + BoMT.toDescrFull(BoMT["deck of many more things"].cards) + "\n " + BoMT.toDescrFull(BoMT["deck of many more things"].cards2), toNotesPage : [{ name : "Features and Table", note : BoMT.to1stPerson(BoMT["deck of many more things"].features) }, { name : "Cards and Their Effects, part 1", note : BoMT.to1stPerson(BoMT["deck of many more things"].cards, "\n\u2022 ").replace(/Use my Int/g, "I use my Int").replace(/at my ft/ig, "my feet") }, { name : "Cards and Their Effects, part 2", note : BoMT.to1stPerson(BoMT["deck of many more things"].cards2, "\n\u2022 ").replace(/Use my Int/g, "I use my Int").replace(/I'm not/g, "not") }, { name : "Deck of Many Things' Cards and Effects", source : MagicItemsList["deck of many things"].source, note : MagicItemsList["deck of many things"].toNotesPage[1].note }] }; MagicItemsList["deck of miscellany"] = { name : "Deck of Miscellany", source : [["BoMT", 41]], // Chapter 6: Rogue type : "wondrous item", rarity : "uncommon", description : "Each card of the 32 cards in this wooden box has an illustration of a different item or set of items. As an action, I can pick a card and throw it in an empty space within 5 ft. There it transforms into the item(s) depicted. See the table on the Notes page for the items and the associated real-world playing cards.", descriptionFull : "This wooden box contains a set of thirty-two parchment cards."+ "\n The face of each card bears an illustration of a different item or set of items. As an action, you can draw a card of your choice from the deck and throw it to the ground in an unoccupied space within 5 feet of yourself. When the card hits the ground, the card permanently transforms into the item or set of items depicted on its face. An altered deck of real-world playing cards can simulate the deck, as shown in the table below.\n\n" + BoMT["deck of miscellany"].join("\n"), action : [["action", ""]], toNotesPage : [{ name : "Cards and Their Items", note : "\n This wooden box contains a set of thirty-two parchment cards. The face of each card bears an illustration of a different item or set of items. As an action, I can pick a remaining card and throw it to the ground in an unoccupied space within 5 ft. When the card hits the ground, the card permanently transforms into the item or set of items depicted on its face."+ BoMT.to1stPerson("\nUsed\t" + BoMT["deck of miscellany"].join("\n \u2610\t")) // empty ballet box }] }; MagicItemsList["deck of oracles"] = { name : "Deck of Oracles", source : [["BoMT", 61]], // Chapter 8: Fates type : "wondrous item", rarity : "rare", attunement : true, description : "If I spend 10 minutes consulting this deck of oracle cards when I finish a long rest, I can roll a d20 and record result. Once in the next 8 hours after a creature within 60 ft makes a check, attack roll, or save, I can use my reaction to have it use the number I rolled instead. Once per dawn, I can use these to cast Divination.", descriptionFull : "The illustrations on this deck of oracle cards move or change subtly when viewed indirectly. When you finish a long rest, you can spend 10 minutes consulting the cards for an omen of the coming day. Roll a d20 and record the number rolled. Once in the next 8 hours, immediately after a creature within 60 feet of you makes an ability check, an attack roll, or a saving throw, you can use your reaction to discard the d20 roll; the creature must use the number you rolled in place of its roll."+ "\n Additionally, while holding the cards, you can cast Divination from them. Once this property is used, it can't be used again until the next dawn.", action : [["reaction", ""]], usages : 1, recovery : "dawn", additional : "Divination", spellcastingBonus : [{ name : "Once per dawn", spells : ["divination"], selection : ["divination"], firstCol : "oncelr" }] }; MagicItemsList["deck of wild cards"] = { name : "Deck of Wild Cards", source : [["BoMT", 41]], // Chapter 6: Rogue type : "wondrous item", rarity : "very rare", description : "As an action, I can draw a random card from this deck of heavy vellum cards and throw it. I make a ranged spell attack using Dex with a range of 30 ft, dealing 1d4 slashing damage on a hit and one of four magical effects depending on the card drawn, see Notes page. The thrown card returns to the deck after the attack.", descriptionFull : BoMT.toDescrFull(BoMT["deck of wild cards"]), weaponOptions : [{ regExpSearch : /^(?=.*deck)(?=.*wild)(?=.*cards?).*$/i, name : "Deck of Wild Cards", source : [["BoMT", 41]], ability : 2, type : "Spell", damage : [1, 4, "slashing"], range : "30 ft", description : "Also random effect on hit, see Notes page", abilitytodamage : false, selectNow : true }], toNotesPage : [{ name : "Random Card Effects", note : BoMT.to1stPerson(BoMT["deck of wild cards"]) }] }; MagicItemsList["deck of wonder"] = { name : "Deck of Wonder", source : [["BoMT", 55]], // Chapter 7: Sage type : "wondrous item", rarity : "uncommon", description : "Before drawing cards from this deck, I must declare how many I wish to draw and then draw that number randomly. Any cards drawn in excess have no effect. When a card is drawn, its magic takes effect and then it fades from existence and reappears in the deck. See Notes page.", descriptionFull : BoMT.toDescrFull(BoMT["deck of wonder"].features) + "\n\n " + BoMT.toDescrFull(BoMT["deck of wonder"].cards), toNotesPage : [{ name : "Features and Table", note : BoMT.to1stPerson(BoMT["deck of wonder"].features) }, { name : "Cards and Their Effects", note : BoMT.to1stPerson(BoMT["deck of wonder"].cards, "\n\u2022 ") }] }; MagicItemsList["donjon's sundering sphere"] = { name : "Donjon's Sundering Sphere", source : [["BoMT", 35]], // Chapter 5: Gem type : "wondrous item", rarity : "rare", attunement : true, description : "Attuning to this marble-size crystal sphere includes attaching it to a nonmagical melee weapon, that then becomes magical +1. It grants me adv. on saves vs. being send to another dimension. Once per dawn when I hit a creature, I can have it make a DC 16 Cha save or be stuck in a demiplane until its next turn ends.", descriptionLong : "Attuning to this marble-size crystal sphere includes attaching it to the hilt of a nonmagical melee weapon weapon, that then becomes a magic weapon with a +1 bonus to attack and damage rolls. While wielding it, I have advantage on save against being send to an extradimensional space or another plane of existence. Once per dawn when I hit a creature with this weapon, I can have it make a DC 16 Charisma save or be banished to a harmless demiplane until its next turn ends. It returns to the space it left, or the nearest empty space. When I end my attunement to the sphere, it detaches from the weapon.", descriptionFull : "This marble-size crystal sphere glows with extraplanar energy."+ "\n As part of attuning to this item, you press the crystal sphere to the hilt of a nonmagical melee weapon of your choice, magically attaching the sphere to the weapon. The weapon becomes a magic weapon with a +1 bonus to attack and damage rolls. While wielding this weapon, you gain the following benefits:"+ "\n " + toUni("Dimensional Anchor") + ". You have advantage on saving throws against spells or effects that would send you to an extradimensional space, a demiplane, or another plane of existence against your will."+ "\n " + toUni("Isolating Smite") + ". When you hit a creature with this weapon, you can force the creature to make a DC 16 Charisma saving throw. On a failed save, the creature is banished to a harmless demiplane until the end of its next turn. When the banished creature returns, it reappears in the space it left or the nearest unoccupied space if that space is occupied. Once this property is used, it can't be used again until the next dawn."+ "\n When you end your attunement to the sphere, the sphere harmlessly detaches from the weapon, and the weapon reverts to a nonmagical piece of equipment.", savetxt : { adv_vs : ["being send to other plane/dimension"] }, usages : 1, recovery : "dawn", additional : "Banish", calcChanges : { atkCalc : [ function (fields, v, output) { if (!v.theWea.isMagicWeapon && v.isMeleeWeapon && /\bdonjon'?s\b/i.test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; output.magic = v.thisWeapon[1] + 1; } }, 'If I include the word "Donjon\'s" in the name of a melee weapon, it will be treated as a melee weapon with the Donjon\'s Sundering Sphere attached. It adds a +1 bonus to attack and damage rolls made with it.' ] } }; MagicItemsList["dried leech"] = { name : "Dried Leech", source : [["BoMT", 67]], // Chapter 9: Knight type : "weapon (any ammunition)", rarity : "uncommon", description : "If a creature is hit by this magic ammunition, the leech animates and attaches to the target, dealing 1d4 piercing damage at the start of each of their turns. The leech detaches if it deals at least 10 damage or the target dies. Anyone can use their action to detach a leech. A detached leech dies and turns nonmagical.", descriptionFull : "This leech has been dried and imbued with a mote of animating magic. If you hit a creature with a ranged attack roll using this ammunition, the leech springs to life and sinks its teeth into the target, dealing 1d4 piercing damage at the start of each of the target's turns. If the leech deals at least 10 damage or the target dies, the leech falls off. A creature, including the target, can use its action to detach the leech. Once a leech is no longer attached to its target, the leech dies and is no longer magical.", allowDuplicates : true, chooseGear : { type : "ammo", prefixOrSuffix : "suffix", descriptionChange : ["replace", "ammunition"], excludeCheck : function (inObjKey, inObj) { return /vials|flasks/i.test(inObj.icon); } } }; MagicItemsList["euryale's aegis"] = { name : "Euryale's Aegis", source : [["BoMT", 35]], // Chapter 5: Gem type : "shield", rarity : "legendary", attunement : true, description : "This brass shield grants me poison resistance and petrification immunity. I can use it to cast 3 spells, each once per dawn. As a bonus action once per dawn, a target I can see within 30 ft must make a DC 20 Con save or be restrained until its next turn starts, at which point it must save again or be petrified for 24 hours.", descriptionLong : "This gleaming brass shield bears a relief of the legendary medusa druid Euryale. It grants me poison resistance and immunity to being petrified. I can use it to cast 3 spells, each once per dawn: Lesser Restoration, Locate Creature, and Transport via Plants.\nAs a bonus action once per dawn, I can try to petrify a creature I can see within 30 ft. It must make a DC 20 Constitution save or be restrained while its body turns to stone. When its next turn starts, it must then make a DC 20 Constitution save again or be petrified for 24 hours. On a successful save, the restrained condition ends.", descriptionFull : "This gleaming brass shield bears a relief of the legendary medusa druid Euryale."+ "\n While wielding this shield, you gain the following benefits:"+ "\n " + toUni("Blessing of Euryale") + ". You have resistance to poison damage and are immune to the petrified condition."+ "\n " + toUni("Petrifying Heraldry") + ". As a bonus action, you can make the front of the shield flare with a medusa's petrifying magic, causing the relief's eyes to glow brightly. Choose one creature you can see within 30 feet of you. The creature must succeed on a DC 20 Constitution saving throw, or it has the restrained condition as its body turns to stone. The restrained creature must make another DC 20 Constitution saving throw at the start of its next turn. On a failed save, the creature has the petrified condition for 24 hours. On a successful save, the restrained condition ends. Once this bonus action is used, it can't be used again until the next dawn."+ "\n " + toUni("Spellcasting") + ". While wielding the shield, you can use an action to cast one of the following spells from it: Lesser Restoration, Locate Creature, Transport via Plants. Once you use the shield to cast a spell, the shield can't cast that spell again until the next dawn.", weight : 6, action : [["bonus action", " - Petrify"]], shieldAdd : "Euryale's Aegis", dmgres : ["Poison"], savetxt : { immune : ["petrified"] }, spellcastingBonus : [{ name : "Once per dawn", spells : ["lesser restoration", "locate creature", "transport via plants"], selection : ["lesser restoration", "locate creature", "transport via plants"], firstCol : "oncelr", times : 3 }], extraLimitedFeatures : [{ name : "Euryale's Aegis - Petrify", usages : 1, recovery : "dawn" }, { name : "Euryale's Aegis (each spell once)", usages : 3, recovery : "dawn" }] }; MagicItemsList["fabulist gem"] = { name : "Fabulist Gem", source : [["BoMT", 36]], // Chapter 5: Gem type : "wondrous item", rarity : "uncommon", attunement : true, description : "As a bonus action, I can use this glittering red gem to change the appearance of what I'm wearing, the color, pattern, or to something different entirely. This doesn't pass physical inspection. As an action once per dawn, I can create a pile of coins up to 100 gp on a surface within 10 ft. They last for 1 hour.", descriptionFull : "This glittering red gem is commonly found embedded in a ring or brooch."+ "\n While wearing the gem, you gain the following benefits."+ "\n " + toUni("Counterfeit Coins") + ". You can use your action to magically create a pile of coins, worth no more than 100 gp total, in an unoccupied space within 10 feet of yourself. The pile must appear on a surface that can support it. After 1 hour, the coins vanish, regardless of where they are. Once this action is used, it can't be used again until the next dawn."+ "\n " + toUni("Illusory Fashion") + ". As a bonus action, you can magically change the appearance of your clothing and armor. You can change the style, color, and apparent quality of what you're wearing, or you can make it appear as if you were wearing different garments entirely. In either case, the changes wrought by this magic fail to pass physical inspection.", action : [["action", " - Counterfeit Coins"], ["bonus action", " - Illusory Fashion"]], extraLimitedFeatures : [{ name : "Fabulist Gem - Counterfeit Coins", usages : 1, recovery : "dawn" }], choices : ["Brooch", "Ring"], "brooch" : { name : "Fabulist Gem Brooch", description : "As a bonus action, I can use this brooch's glittering red gem to change the appearance of what I'm wearing, the color, pattern, or to something different entirely. This doesn't pass physical inspection. As an action once per dawn, I can create a pile of coins up to 100 gp on a surface within 10 ft. They last for 1 hour." }, "ring" : { name : "Fabulist Gem Ring", type : "ring", description : "As a bonus action, I can use this ring's glittering red gem to change the appearance of what I'm wearing, the color, pattern, or to something different entirely. This doesn't pass physical inspection. As an action once per dawn, I can create a pile of coins up to 100 gp on a surface within 10 ft. They last for 1 hour." } }; MagicItemsList["fate cutter shears"] = { name : "Fate Cutter Shears", source : [["BoMT", 61]], // Chapter 8: Fates type : "weapon (dagger)", rarity : "very rare", attunement : true, description : "The blades of these pruning shears bear many nicks and dents but still cut cleanly. They function as a magic dagger that deal +1d6 force damage. Once per dawn when I hit a creature with them, I can cut their fate. Until that target finishes a long rest, attack rolls against them score a critical hit on a roll of 19 or 20.", descriptionFull : "The blades of these pruning shears bear many nicks and dents but still cut cleanly. The shears function as a magic dagger. The weapon has the following properties:"+ "\n " + toUni("Ever Sharp") + ". When you hit with an attack using the shears, the target takes an extra 1d6 force damage."+ "\n " + toUni("Sever Threads") + ". When you hit a creature with the shears, you can cut that creature's fate. Until the target finishes a long rest, attack rolls against it score a critical hit on a roll of 19 or 20 on the d20. Once this property is used, it can't be used again until the next dawn.", weight : 1, usages : 1, recovery : "dawn", additional : "Sever Threads", weaponOptions : [{ baseWeapon : "dagger", regExpSearch : /^(?=.*fate)(?=.*cutt(er|ing))(?=.*(shears?|dagger)).*$/i, name : "Fate Cutter Shears", source : [["BoMT", 61]], description : "Finesse, light, thrown; +1d6 force damage", selectNow : true }] }; MagicItemsList["fate dealer's deck"] = { name : "Fate Dealer's Deck", source : [["BoMT", 61]], // Chapter 8: Fates type : "wondrous item", attunement : true, prerequisite : "Requires attunement by a cleric or paladin", prereqeval : function (v) { return classes.known.paladin || classes.known.cleric ? true : false; }, description : "While holding this deck, I can use it as a spellcasting focus and I gain a bonus to my spell attack rolls and spell save DC determined by its rarity: rare (+1), very rare (+2), or legendary (+3). As an action, I can draw a card and expend and roll one HD to heal or deal radiant damage to a creature within 30 ft I can see, equal to the roll and the deck's bonus.", descriptionFull : "The backs of these cards are inscribed with glyphs representing the Inner Planes, the Outer Planes, or the holy symbols of various deities. While holding this deck, you can use it as a spellcasting focus, and you gain a bonus to spell attack rolls and to your spell save DC. The bonus is determined by the deck's rarity: rare (+1), very rare (+2), or legendary (+3)."+ "\n In addition, while you're holding the deck, you can draw a card as an action to expend and roll one of your Hit Dice and add the deck's bonus to the number rolled. One creature you can see within 30 feet of you either takes radiant damage or regains hit points (your choice) equal to the total.", choices : ["+1 Fate Dealer's Deck (rare)", "+2 Fate Dealer's Deck (very rare)", "+3 Fate Dealer's Deck (legendary)"], "+1 fate dealer's deck (rare)" : { name : "Fate Dealer's Deck +1", nameTest : "+1 Fate Dealer's Deck", rarity : "rare", description : "While holding this deck, I can use it as a spellcasting focus and it gives me a +1 bonus to my spell attacks and spell save DC. As an action, I can draw a card from it and expend and roll one of my HD. I then choose a creature within 30 ft that I can see and either heal it or deal it radiant damage equal to the roll +1.", calcChanges : { spellCalc : [ function (type, spellcasters, ability) { if (type !== "prepare") return 1; }, "While holding the Fate Dealer's Deck, I gain a +1 bonus to spell attack rolls and to the saving throw DCs of my spells." ] } }, "+2 fate dealer's deck (very rare)" : { name : "Fate Dealer's Deck +2", nameTest : "+2 Fate Dealer's Deck", rarity : "very rare", description : "While holding this deck, I can use it as a spellcasting focus and it gives me a +2 bonus to my spell attacks and spell save DC. As an action, I can draw a card from it and expend and roll one of my HD. I then choose a creature within 30 ft that I can see and either heal it or deal it radiant damage equal to the roll +2.", calcChanges : { spellCalc : [ function (type, spellcasters, ability) { if (type !== "prepare") return 2; }, "While holding the Fate Dealer's Deck, I gain a +2 bonus to spell attack rolls and to the saving throw DCs of my spells." ] } }, "+3 fate dealer's deck (legendary)" : { name : "Fate Dealer's Deck +3", nameTest : "+3 Fate Dealer's Deck", rarity : "legendary", description : "While holding this deck, I can use it as a spellcasting focus and it gives me a +3 bonus to my spell attacks and spell save DC. As an action, I can draw a card from it and expend and roll one of my HD. I then choose a creature within 30 ft that I can see and either heal it or deal it radiant damage equal to the roll +3.", calcChanges : { spellCalc : [ function (type, spellcasters, ability) { if (type !== "prepare") return 3; }, "While holding the Fate Dealer's Deck, I gain a +3 bonus to spell attack rolls and to the saving throw DCs of my spells." ] } } }; MagicItemsList["feywrought armor"] = { name : "Feywrought Armor", nameTest : /feywrought.*armou?r/i, source : [["BoMT", 67]], // Chapter 9: Knight type : "armor (light, medium, or heavy)", rarity : "rare", attunement : true, description : "While wearing this colorful, flowery armor that was forged in the Feywild, I have advantage on saves to avoid or end the charmed condition on myself. The armor has 3 charges and regains 1d3 used charges daily at dawn. As an action, I can use 1 charge to cast Compulsion (save DC 15) from it.", descriptionFull : "This colorful, flowery armor was forged in the Feywild and is infused with that plane's captivating magic."+ "\n While wearing this armor, you have advantage on saving throws you make to avoid or end the charmed condition on yourself."+ "\n This armor has 3 charges. You can use an action to expend a charge to cast the Compulsion spell (save DC 15) from this armor. The armor regains 1d3 expended charges daily at dawn.", chooseGear : { type : "armor", prefixOrSuffix : ["between", "Feywrought", "Armor"], descriptionChange : ["prefix", "armor"], itemName1stPage : ["suffix", "Feywrought"] }, usages : 3, recovery : "dawn", additional : "regains 1d3", savetxt : { adv_vs : ["charmed"] }, fixedDC : 15, spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "1 charge", spells : ["compulsion"], selection : ["compulsion"], firstCol : 1 }] }; MagicItemsList["fool's blade"] = { name : "Fool's Blade", source : [["BoMT", 36]], // Chapter 5: Gem type : "weapon (any sword)", rarity : "very rare", attunement : true, description : "As a bonus action once per dawn, I can use this weapon +2 to feint a target within 5 ft, giving me adv. on attacks vs. it until my next turn starts. As a reaction once per dawn when a creature within 60 ft attacks me, I can have it make a DC 15 Int save or have it target another of my choice within its reach.", descriptionLong : "This magic weapon appears ordinary, but bears strong illusion magic that allows me to deceive opponents. I have a +2 bonus to attack and damage rolls with it.\nFool's Feint: As a bonus action once per dawn, I can feint a creature within 5 ft, giving me advantage on attack rolls against it until the start of my next turn.\nMisdirect: As a reaction once per dawn when a creature within 60 ft targets me with an attack roll, I can have it make a DC 15 Intelligence save. On a failed save, the attack instead targets another creature of my choice that is within the attacker's reach.", descriptionFull : "This weapon appears ordinary, but it bears strong illusion magic that allows its wielder to skillfully deceive opponents."+ "\n You have a +2 bonus to attack and damage rolls made with this magic weapon. While wielding it, you also gain the following benefits:"+ "\n " + toUni("Fool's Feint") + ". As a bonus action, you can feint, choosing a creature within 5 feet of you as your target. Until the start of your next turn, you have advantage on attack rolls against the target. Once this bonus action is used, it can't be used again until the next dawn."+ "\n " + toUni("Misdirect") + ". When a creature within 60 feet of you targets you with an attack roll, you can use your reaction to require that creature to make a DC 15 Intelligence saving throw. On a failed save, the attack instead targets another creature of your choice that is within the attacker's reach. Once this reaction has been used, it can't be used again until the next dawn.", action : [["bonus action", " - Feint"], ["reaction", " - Misdirect"]], chooseGear : { type : "weapon", prefixOrSuffix : "brackets", descriptionChange : ["replace", "sword"], itemName1stPage : ["suffix", "Fool's"], excludeCheck : function (inObjKey, inObj) { var testRegex = /sword|scimitar|rapier/i; return !testRegex.test(inObjKey) && (!inObj.baseWeapon || !testRegex.test(inObj.baseWeapon)); } }, calcChanges : { atkCalc : [ function (fields, v, output) { if (!v.theWea.isMagicWeapon && v.isMeleeWeapon && /sword|scimitar|rapier/i.test(v.baseWeaponName) && /\bfool'?s\b/i.test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; output.magic = v.thisWeapon[1] + 2; } }, 'If I include the word "Fool\'s" in the name of a sword, it will be treated as the magic weapon Fool\'s Blade. It adds a +2 bonus to attack and damage rolls made with it.' ] } }; MagicItemsList["forcebreaker weapon"] = { name : "Forcebreaker Weapon", nameTest : "Forcebreaker", source : [["BoMT", 67]], // Chapter 9: Knight type : "weapon (any that deals bludgeoning damage)", rarity : "very rare", description : "This magic weapon gives +2 to hit and damage. It was crafted to destroy structures made of magical force, such as a Wall of Force. With one strike with this weapon, I can shatter a Large or smaller structure of magical force, or shatter a 20-ft cube portion of a Huge or larger structure.", descriptionFull : "You gain a +2 bonus to attack and damage rolls made with this magic weapon."+ "\n This weapon was crafted to destroy structures made of force, such as those created by Forcecage or Wall of Force. Striking a Large or smaller structure of magical force with this weapon automatically shatters that structure. If the target is a Huge or larger structure of force, this weapon shatters a 20-foot-cube portion of it.", chooseGear : { type : "weapon", prefixOrSuffix : "suffix", descriptionChange : ["replace", "weapon"], excludeCheck : function (inObjKey, inObj) { var damageArr = inObj.baseWeapon && !inObj.damage ? WeaponsList[inObj.baseWeapon].damage : inObj.damage; return !/bludg(\.|eoning)/i.test(damageArr.toString()); } }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && /forcebreaker/i.test(v.WeaponTextName) && /bludg(\.|eoning)/i.test(fields.Damage_Type)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + 'Shatters magical force'; } }, 'If I include the word "Forcebreaker" in the name of a bludgeoning weapon, it will be treated as the magic weapon Forcebreaker Weapon. It adds a +2 bonus to attack and damage rolls made with it.' ], atkCalc : [ function (fields, v, output) { if (!v.theWea.isMagicWeapon && /forcebreaker/i.test(v.WeaponTextName) && /bludg(\.|eoning)/i.test(fields.Damage_Type)) { v.theWea.isMagicWeapon = true; output.magic = v.thisWeapon[1] + 2; } }, '' ] } }; MagicItemsList["glimmering moonbow"] = { name : "Glimmering Moonbow", nameTest : "Glimmering Moon", source : [["BoMT", 36]], // Chapter 5: Gem type : "weapon (any bow)", rarity : "rare", attunement : true, description : "This silver-and-black bow adds +1 to its to hit and damage rolls, creates its own ammo that lasts until it hits or misses a target, and deals +1d6 radiant damage. As a bonus action once per dawn, I can use it to gain resistance to piercing, bludgeoning, and slashing damage until my next turn starts, ", descriptionFull : "This silver-and-black bow is engraved with the phases of the moon. You gain a +1 bonus to attack and damage rolls made with this magic weapon."+ "\n When you hit with a ranged attack roll using this magic bow, the target takes an extra 1d6 radiant damage. If you load no ammunition in the weapon, it produces its own, automatically creating one piece of magic ammunition when you make a ranged attack with it. The ammunition created by the bow vanishes the instant after it hits or misses a target."+ "\n While wielding this magic bow, you can use a bonus action to enter a semi-incorporeal state until the start of your next turn. While semi-incorporeal, you have resistance to bludgeoning, piercing, and slashing damage. Once this bonus action is used, it can't be used again until the next dawn.", usages : 1, recovery : "dawn", additional : "resistances", action : [["bonus action", " (resistances)"]], chooseGear : { type : "weapon", prefixOrSuffix : "suffix", descriptionChange : ["replace", "bow"], excludeCheck : function (inObjKey, inObj) { var testRegex = /bow/i; return !testRegex.test(inObjKey) && (!inObj.baseWeapon || !testRegex.test(inObj.baseWeapon)); } }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && v.isRangedWeapon && /bow/i.test(v.baseWeaponName) && /^(?=.*glimmering)(?=.*moon).*$/i.test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(;|,)? ?(loading|Counts as magical)/ig, ''); fields.Description += (fields.Description ? '; ' : '') + '+1d6 radiant damage'; } }, 'If I include the words "Glimmering" and "Moon" in the name of a bow, it will be treated as the magic weapon Glimmering Moonbow. It has +1 to hit and damage, deals +1d6 radiant damage, and produces its own ammunition, thus its loading property is removed if it has it.' ], atkCalc : [ function (fields, v, output) { if (!v.theWea.isMagicWeapon && v.isRangedWeapon && /bow/i.test(v.baseWeaponName) && /^(?=.*glimmering)(?=.*moon).*$/i.test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; output.magic = v.thisWeapon[1] + 1; } }, '' ] } }; MagicItemsList["gloomwrought armor"] = { name : "Gloomwrought Armor", nameTest : /gloomwrought.*armou?r/i, source : [["BoMT", 67]], // Chapter 9: Knight type : "armor (light, medium, or heavy)", rarity : "rare", attunement : true, description : "While wearing this intricate grayscale armor forged in the Shadowfell, I have advantage on saves to avoid or end the frightened condition on myself. The armor has 3 charges and regains 1d3 used charges daily at dawn. As an action, I can use 1 charge to cast Calm Emotions (save DC 15) from it.", descriptionFull : "This intricate grayscale armor was forged in the Shadowfell and is infused with that plane's gloom."+ "\n While you're wearing this armor, you have advantage on saving throws you make to avoid or end the frightened condition on yourself."+ "\n This armor has 3 charges. You can expend a charge to cast the Calm Emotions spell (save DC 15) from the armor. This armor regains 1d3 expended charges daily at dawn.", chooseGear : { type : "armor", prefixOrSuffix : ["between", "Gloomwrought", "Armor"], descriptionChange : ["prefix", "armor"], itemName1stPage : ["suffix", "Gloomwrought"] }, usages : 3, recovery : "dawn", additional : "regains 1d3", savetxt : { adv_vs : ["frightened"] }, fixedDC : 15, spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "1 charge", spells : ["calm emotions"], selection : ["calm emotions"], firstCol : 1 }] }; MagicItemsList["grasping whip"] = { name : "Grasping Whip", source : [["BoMT", 67]], // Chapter 9: Knight type : "weapon (whip)", rarity : "rare", description : "I gain a +1 bonus to attack and damage rolls made with this magic whip. When I hit a creature or object that is Large or smaller with this whip, I can pull that creature or object 5 ft toward me instead of dealing damage.", descriptionFull : "You gain a +1 bonus to attack and damage rolls made with this magic whip. When you hit a creature or object that is Large or smaller with this whip, you can pull that creature or object 5 feet toward you instead of dealing damage.", weight : 3, weaponOptions : [{ baseWeapon : "whip", regExpSearch : /^(?=.*grasping)(?=.*whip).*$/i, name : "Grasping Whip", source : [["BoMT", 67]], description : "Finesse, reach; Forgo damage to pull \u2264 Large 5 ft to me", selectNow : true }] }; MagicItemsList["hammer of runic focus"] = { name : "Hammer of Runic Focus", source : [["BoMT", 67]], // Chapter 9: Knight type : "weapon (warhammer)", rarity : "very rare", attunement : true, description : "As a bonus action three times per dawn, I can slam this hammer on the ground, creating a 15-ft radius glowing circle of runes wherein it's a +3 warhammer glowing with matching runes. The rune circle disappears after 1 minute, when I create another, or when I dismiss it as a bonus action.", descriptionFull : "This magic hammer has 3 charges. As a bonus action, you can expend 1 charge and slam this hammer on the ground, creating a 15-foot-radius circle of glowing runes centered on the point of impact. While you're inside that area, your hammer glows with matching runes, and you gain a +3 bonus to attack and damage rolls made with this hammer. The rune circle disappears after 1 minute, when you create another rune circle, or when you dismiss the rune circle as a bonus action. This hammer regains 1d3 expended charges daily at dawn.", weight : 2, action : [["bonus action", " (start/end)"]], usages : 3, recovery : "dawn", weaponOptions : [{ baseWeapon : "warhammer", regExpSearch : /^(?=.*hammer)(?=.*runic)(?=.*focus).*$/i, name : "Hammer of Runic Focus", source : [["BoMT", 67]], description : "Versatile (1d10); +2 to hit/damage while inside its circle", selectNow : true }] }; MagicItemsList["house of cards"] = { name : "House of Cards", source : [["BoMT", 61]], // Chapter 8: Fates type : "wondrous item", rarity : "uncommon", description : "As an action once per dawn, I can have this deck of cards deal themselves into a shelter centered on a point within 30 ft. It can be any shape that fits in a 40-ft cube, with 1 door and up to 4 windows, that only I can open or close. It has 15 AC, 50 HP, and lasts for 24 hours, I dismiss it as an action, or it reaches 0 HP.", descriptionLong : "This deck of cards is decorated with geometric shapes that have a protective motif. As an action once per dawn, I can cause the cards to transform into a shelter made of cards centered on a point within 30 ft. It can be any shaped I want that fits in a 40-ft cube. It has a floor, a roof, one door and up to four windows, and only I can open or close them. It has a comfortable temperature inside, AC 15, 50 HP, and immunity to poison and psychic damage. It lasts for 24 hours, until I dismiss it as an action, or until it is reduced to 0 HP. When the shelter's duration ends, it transforms back into a deck of cards in my hand.", descriptionFull : "This deck of cards is decorated with geometric shapes that have a protective motif. While you're holding the deck, you can use an action to shuffle it and cause the cards to deal themselves out and transform into a shelter made of cards. The shelter can be shaped however you desire, but it must fit in a 40-foot cube centered on a point within 30 feet of you. The shelter has one door and up to four windows, and only you can open or close them. It has a floor and a roof, and it maintains a comfortable temperature inside."+ "\n The shelter has AC 15, 50 hit points, and immunity to poison and psychic damage. The shelter lasts for 24 hours, until you dismiss it as an action, or until it is reduced to 0 hit points. When the shelter's duration ends, it transforms back into a deck of cards and appears in your hand. Once the deck has transformed into a shelter, it can't be used again until the next dawn.", action : [["action", ""]], usages : 1, recovery : "dawn" }; MagicItemsList["jester's mask"] = { name : "Jester's Mask", source : [["BoMT", 36]], // Chapter 5: Gem type : "wondrous item", rarity : "legendary", attunement : true, prerequisite : "Requires attunement by a bard, sorcerer, or warlock", prereqeval : function (v) { return classes.known.bard || classes.known.sorcerer || classes.known.warlock ? true : false; }, description : "I can use this harlequin mask as a spellcasting focus. It adds a +3 bonus to my spell attacks and spell save DCs that use Charisma. Once per dawn when I roll a 1 on a d20, I can change it to a 20. As a reaction once per dawn when I'm hit by an attack roll, I can teleport 30 ft to an empty space I can see, taking no damage.", descriptionLong : "While I'm wearing this colorful, harlequin domino mask edged with pearls, it grants me:"+ "\u2022 Charismatic Focus: I can use it as a spellcasting focus and it grants me a +3 bonus to spell attack rolls and spell saving throw DCs that use Charisma as the spellcasting ability."+ "\u2022 Marvelous Escape: As a reaction once per dawn when a creature hits me with an attack roll, I can teleport in a puff of smoke and sparkles instead of taking damage. I teleport to an empty space I can see within 30 ft, along with anything I'm wearing or carrying."+ "\u2022 Topsy-Turvy: Once per dawn when I roll a 1 on a d20, I can treat it as a 20 instead.", descriptionFull : "This colorful, harlequin domino mask is edged with pearls. While wearing this mask, you gain the following benefits:"+ "\n " + toUni("Charismatic Focus") + ". You can use the mask as a spellcasting focus. You gain a +3 bonus to any spell attack rolls and spell saving throw DCs that use Charisma as the spellcasting ability."+ "\n " + toUni("Marvelous Escape") + ". When a creature hits you with an attack roll, you can use your reaction to disappear in a puff of smoke and colorful sparkles. You take no damage and instead teleport, along with anything you are wearing or carrying, to an unoccupied space you can see within 30 feet of yourself. Once this reaction is used, it can't be used again until the next dawn."+ "\n " + toUni("Topsy-Turvy") + ". When you roll a 1 on a d20, you can treat the roll as if you rolled a 20 instead. Once this property is used, it can't be used again until the next dawn.", action : [["reaction", " (escape)"]], extraLimitedFeatures : [{ name : "Jester's Mask - Marvelous Escape", usages : 1, recovery : "dawn" }, { name : "Jester's Mask - Topsy-Turvy", usages : 1, recovery : "dawn" }], calcChanges : { spellCalc : [ function (type, spellcasters, ability) { if (type !== "prepare" && ability === 6) return 3; }, "While wearing the Jester's Mask, I gain a +3 bonus to any spell attack rolls and spell saving throw DCs that use Charisma as the spellcasting ability." ] } }; MagicItemsList["plate of knight's fellowship"] = { name : "Plate of Knight's Fellowship", source : [["BoMT", 37]], // Chapter 5: Gem type : "armor (plate)", rarity : "uncommon", attunement : true, description : "This gleaming set of silver-and-gold plate armor never tarnishes. As a bonus action once per dawn, I can use it to summon a warrior spirit (knight) to an empty spot within 30 ft. It lasts for 1 minute or until reduced to 0 HP. It is an ally to me, shares my initiative and obeys my commands. See the Companion page.", descriptionFull : "This gleaming set of silver-and-gold plate armor never tarnishes."+ "\n While wearing this armor, you can use a bonus action to summon the spirit of a warrior to your aid. The spirit's corporeal form manifests in an unoccupied space of your choice within 30 feet of you, and it uses the knight stat block. The spirit disappears when it drops to 0 hit points or after 1 minute, whichever comes first."+ "\n The spirit is an ally to you and your companions. In combat, the spirit shares your initiative count but takes its turn immediately after yours. The spirit obeys your commands (no action required by you); if you don't issue any commands, the spirit takes the Dodge action and uses its movement to avoid danger."+ "\n Once this bonus action is used, it can't be used again until the next dawn.", weight : 65, usages : 1, recovery : "dawn", action : [["bonus action", ""]], armorAdd : { select : "Plate of Knight's Fellowship", options : ["Plate of Knight's Fellowship"] }, creaturesAdd : [["Knight"]], creatureOptions : [{ name : "Knight", source : [["SRD", 400], ["M", 347]], eval : function(prefix) { Value(prefix + "Comp.Desc.Name", "Warrior Spirit"); }, size : 3, type : "Humanoid", alignment : "any alignment", ac : 18, hp : 52, hd : [8, 8], speed : "30 ft", scores : [16, 11, 14, 11, 11, 15], saves : ["", "", 4, "", 2, ""], passivePerception : 10, languages : "any one language (usually Common)", challengeRating : "3", proficiencyBonus : 2, attacksAction : 2, attacks : [{ name : "Greatsword", ability : 1, damage : [2, 6, "slashing"], range : "Melee (5 ft)", description : "Heavy, two-handed; Two greatsword attacks as an Attack action" }, { name : "Heavy Crossbow", ability : 2, damage : [1, 10, "piercing"], range : "100/400 ft", description : "Ammunition, heavy, loading, two-handed" }], actions : [{ name : "Multiattack", description : "As an action on its turn, the knight can make two melee attacks." } ,{ name : "Leadership (Recharges after a Short or Long Rest)", description : "As an action, the knight can activate this ability. Then, for 1 minute, the knight can utter a special command or warning whenever a nonhostile creature that it can see within 30 ft of it makes an attack roll or save. The creature can add +1d4 to its roll provided it can hear and understand the knight. A creature can benefit from only one Leadership die at a time. This effect ends if the knight is incapacitated." }, { name : "Parry", description : "As a reaction, the knight can add +2 AC against one melee attack that would hit it. To do so, the knight must see the attacker and be wielding a melee weapon." }], features : [{ name : "Brave", description : "The knight has advantage on saving throws against being frightened." }, { name : "Summoned", description : "The warrior spirit is an ally to you and your companions. It shares your initiative count but takes its turn immediately after yours. The spirit obeys your commands (no action), or takes the Dodge action and uses its movement to avoid danger if issued no commands. The spirit disappears when it drops to 0 hit points or after 1 minute, whichever comes first." }] }] }; MagicItemsList["ring of puzzler's wit"] = { name : "Ring of Puzzler's Wit", source : [["BoMT", 37]], // Chapter 5: Gem type : "ring", rarity : "uncommon", description : "This gold ring bears a fluorite stone and is enchanted to sharpen the wearer's mind. The ring has 3 charges and regains 1d4-1 expended charges daily at dawn. When I make an Intelligence check, I can expend 1 charge to grant myself advantage on the check.", descriptionFull : "This gold ring bears a fluorite stone and is enchanted to sharpen the wearer's mind."+ "\n The ring has 3 charges and regains 1d4 - 1 expended charges daily at dawn. When you make an Intelligence check, you can expend 1 charge to grant yourself advantage on the check.", usages : 3, recovery : "dawn", additional : "regains 1d4-1" }; MagicItemsList["rod of hellish flames"] = { name : "Rod of Hellish Flames", source : [["BoMT", 37]], // Chapter 5: Gem type : "rod", rarity : "very rare", attunement : true, prerequisite : "Requires attunement by a spellcaster", prereqeval : function(v) { return v.isSpellcaster; }, description : "I can use this black iron rod as an arcane focus and it grants me resistance to fire and necrotic damage. Once per dawn I can use it to cast Hellish Rebuke as a 4th-level spell (save DC 16). When I cast a spell that deals fire or necrotic damage, I can once per dawn use it to maximize the damage instead of rolling.", descriptionFull : "Glowing cinders orbit the flanged head of this black iron rod."+ "\n This rod can be used as an arcane focus. While holding this rod, you gain the following benefits:"+ "\n " + toUni("Hellish Resistance") + ". You have resistance to fire and necrotic damage."+ "\n " + toUni("Searing Rebuke") + ". You can cast the Hellish Rebuke spell as a 4th-level spell (save DC 16) from the rod. Once you use the rod to cast the spell, the rod can't cast the spell again until the next dawn."+ "\n " + toUni("Surge of Brimstone") + ". Whenever you cast a spell that deals fire or necrotic damage, you can use the rod to deal the maximum damage instead of rolling. Once this property is used, it can't be used again until the next dawn.", weight : 2, extraLimitedFeatures : [{ name : "Rod of Hellish Flames (Hellish Rebuke)", usages : 1, recovery : "dawn" }, { name : "Rod of Hellish Flames (maximize)", usages : 1, recovery : "dawn" }], dmgres : ["Fire", "Necrotic"], spellcastingBonus : [{ name : "Once per dawn", spells : ["hellish rebuke"], selection : ["hellish rebuke"], firstCol : "oncelr" }], spellChanges : { "hellish rebuke" : { description : "Cast when taking damage, creature that dealt damage takes 5d10 Fire damage; save halves", changes : "Using the Rod of Hellish Flames, I cast Hellish Rebuke as if I'm using a 4th-level spell slot, doing 5d10 damage, once per dawn." } } }; MagicItemsList["rogue's mantle"] = { name : "Rogue's Mantle", source : [["BoMT", 37]], // Chapter 5: Gem type : "wondrous item", rarity : "rare", attunement : true, description : "This dark, hooded mantle of thick cloth gives me +60 ft darkvision. As a bonus action, I can use it to teleport 30 ft from and into dim light or darkness, to an empty space I can see. I then have advantage on my first attack before my turn ends. Also, I can use it to cast Antagonize once per dawn (save DC 15).", descriptionFull : "This dark, hooded mantle of thick cloth is infused with secretive and deceptive magic. While wearing it, you gain the following benefits:"+ "\n " + toUni("Darkvision") + ". You gain darkvision within a range of 60 feet. If you already have darkvision, the mantle increases your darkvision's range by 60 feet instead."+ "\n " + toUni("Move in Shadows") + ". While you are in dim light or darkness, you can use a bonus action to teleport, along with anything you are wearing or carrying, up to 30 feet to an unoccupied space you can see that is also in dim light or darkness. You then have advantage on the first melee attack you make before the end of the turn."+ "\n " + toUni("Willful Enmity") + ". You can cast the Antagonize spell (save DC 15) from the mantle. Once the mantle has cast the spell, it can't cast the spell again until the next dawn.", usages : 1, recovery : "dawn", additional : "Antagonize", vision : [["Darkvision", "fixed 60"], ["Darkvision", "+60"]], action : [["bonus action", " (teleport)"]], fixedDC : 15, spellcastingBonus : [{ name : "Once per dawn", spells : ["antagonize"], selection : ["antagonize"], firstCol : "oncelr" }] }; MagicItemsList["ruinous flail"] = { name : "Ruinous Flail", source : [["BoMT", 37]], // Chapter 5: Gem type : "weapon (flail)", rarity : "rare", attunement : true, description : "This ash-gray, cold to the touch flail +1 deals double damage to objects and structures. Once per dawn, I can have a creature hit by it make a DC 15 Con save or be poisoned for 1 minute and take 2d4 necrotic damage at the start of each of its turns. It can repeat the save at the end of each of its turns to end the effects.", descriptionFull : "This ash-gray flail is cold to the touch. You gain a +1 bonus to attack and damage rolls made with this magic weapon, and it deals double damage to objects and structures."+ "\n Additionally, when you hit a creature with this weapon, you can force the creature to make a DC 15 Constitution saving throw. On a failed save, the creature has the poisoned condition for 1 minute. The poisoned creature takes 2d4 necrotic damage at the start of each of its turns. The creature can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success. Once this property is used in this way, it can't be used again until the next dawn.", weight : 2, usages : 1, recovery : "dawn", weaponOptions : [{ baseWeapon : "flail", regExpSearch : /^(?=.*ruinous)(?=.*flail).*$/i, name : "Ruinous Flail", source : [["BoMT", 37]], description : "Double damage to objects; Once per dawn: target DC 15 Con save or poisoned, see item", modifiers : [1, 1], selectNow : true }] }; MagicItemsList["sage's signet"] = { name : "Sage's Signet", source : [["BoMT", 37]], // Chapter 5: Gem type : "ring", attunement : true, prerequisite : "Requires attunement by a spellcaster", prereqeval : function(v) { return v.isSpellcaster; }, description : "This gilded ring with a beautiful engraving is imbued with powers of keen wisdom and foresight. While wearing this ring, I can cast Augury and two more spells depending on the signet each once per dawn using my Intelligence as the spellcasting ability. Casting Augury using this ring only takes one action.", descriptionFull : "This gilded ring bears a beautiful engraving and is imbued with powers of keen wisdom and foresight. While wearing this ring, you can use an action to cast the Augury spell from the ring. Once you use the ring to cast the spell, the ring can't cast the spell again until the next dawn."+ "\n Six varieties of Sage's Signet rings exist, each with a different signet (see the table below). A ring's signet determines its rarity as well as the additional spells it can cast. While wearing a Sage's Signet, you can cast each of its additional spells once from the ring using your Intelligence as the spellcasting ability. Once you cast each of the additional spells from the ring, it can't cast the spell again until the next dawn."+ "\n\nSignet\tRarity\tSpells"+ "\nBear\tVery rare\tEnlarge/Reduce, Polymorph"+ "\nHart\tVery rare\tAura of Vitality, Mass Cure Wounds"+ "\nLion\tVery rare\tDestructive Wave, Fireball"+ "\nSerpent\tRare\tFear, Hex"+ "\nSongbird\tRare\tCharm Person, Hypnotic Pattern"+ "\nWolf\tVery rare\tFreedom of Movement, Pass without Trace", usages : 3, recovery : "dawn", additional : "each spell once", choices : ["Bear (very rare)", "Hart (very rare)", "Lion (very rare)", "Serpent (rare)", "Songbird (rare)", "Wolf (very rare)"], "bear (very rare)" : { name : "Sage's Signet (Bear)", rarity : "very rare", description : "This gilded ring with a beautiful bear engraving is imbued with powers of keen wisdom and foresight. While wearing this ring, I can cast Augury, Enlarge/Reduce, and Polymorph each once per dawn using my Intelligence as the spellcasting ability. Casting Augury using this ring only takes one action.", spellcastingAbility : 4, spellcastingBonus : [{ name : "Once per dawn", spells : ["augury", "enlarge/reduce", "polymorph"], selection : ["augury", "enlarge/reduce", "polymorph"], firstCol : "oncelr", times : 3 }], spellChanges : BoMT["sage's signet"] }, "hart (very rare)" : { name : "Sage's Signet (Hart)", rarity : "very rare", description : "This gilded ring with a beautiful hart engraving is imbued with powers of keen wisdom and foresight. While wearing this ring, I can cast Augury, Aura of Vitality, and Mass Cure Wounds each once per dawn using my Intelligence as the spellcasting ability. Casting Augury using this ring only takes one action.", spellcastingAbility : 4, spellcastingBonus : [{ name : "Once per dawn", spells : ["augury", "aura of vitality", "mass cure wounds"], selection : ["augury", "aura of vitality", "mass cure wounds"], firstCol : "oncelr", times : 3 }], spellChanges : BoMT["sage's signet"] }, "lion (very rare)" : { name : "Sage's Signet (Lion)", rarity : "very rare", description : "This gilded ring with a beautiful lion engraving is imbued with powers of keen wisdom and foresight. While wearing this ring, I can cast Augury, Destructive Wave, and Fireball each once per dawn using my Intelligence as the spellcasting ability. Casting Augury using this ring only takes one action.", spellcastingAbility : 4, spellcastingBonus : [{ name : "Once per dawn", spells : ["augury", "destructive wave", "fireball"], selection : ["augury", "destructive wave", "fireball"], firstCol : "oncelr", times : 3 }], spellChanges : BoMT["sage's signet"] }, "serpent (rare)" : { name : "Sage's Signet (Serpent)", rarity : "rare", description : "This gilded ring with a beautiful serpent engraving is imbued with powers of keen wisdom and foresight. While wearing this ring, I can cast Augury, Fear, and Hex each once per dawn using my Intelligence as the spellcasting ability. Casting Augury using this ring only takes one action.", spellcastingAbility : 4, spellcastingBonus : [{ name : "Once per dawn", spells : ["augury", "fear", "hex"], selection : ["augury", "fear", "hex"], firstCol : "oncelr", times : 3 }], spellChanges : BoMT["sage's signet"] }, "songbird (rare)" : { name : "Sage's Signet (Songbird)", rarity : "rare", description : "This gilded ring with a beautiful songbird engraving is imbued with powers of keen wisdom and foresight. While wearing this ring, I can cast Augury, Charm Person, and Hypnotic Pattern each once per dawn using my Intelligence as the spellcasting ability. Casting Augury using this ring only takes one action.", spellcastingAbility : 4, spellcastingBonus : [{ name : "Once per dawn", spells : ["augury", "charm person", "hypnotic pattern"], selection : ["augury", "charm person", "hypnotic pattern"], firstCol : "oncelr", times : 3 }], spellChanges : BoMT["sage's signet"] }, "wolf (very rare)" : { name : "Sage's Signet (Wolf)", rarity : "very rare", description : "This gilded ring with a beautiful wolf engraving is imbued with powers of keen wisdom and foresight. While wearing this ring, I can cast Augury, Freedom of Movement, and Pass without Trace each once per dawn using my Intelligence as the spellcasting ability. Casting Augury using this ring only takes one action.", spellcastingAbility : 4, spellcastingBonus : [{ name : "Once per dawn", spells : ["augury", "freedom of movement", "pass without trace"], selection : ["augury", "freedom of movement", "pass without trace"], firstCol : "oncelr", times : 3 }], spellChanges : BoMT["sage's signet"] } }; MagicItemsList["shield of the tortoise"] = { name : "Shield of the Tortoise", source : [["BoMT", 67]], // Chapter 9: Knight type : "shield", rarity : "uncommon", attunement : true, description : "This +1 shield curses me as soon as I attune to it. While I'm cursed by it, I can't discard it, I can't break my attunement to it, and I am sluggish. Sluggish means that my speed is halved and when I roll initiative, I always treat the roll on the d20 as a 1. I can't change my initiative by any means.", descriptionFull : "While you are wielding this shield, you gain a +1 bonus to AC. This bonus is in addition to the shield's normal bonus to AC."+ "\n " + toUni("Curse") + ". This item is cursed. Attuning to it extends the curse to you until you are targeted by a Remove Curse spell or similar magic. You cannot discard the shield, and remain attuned to it, as long as you are cursed. As long as you are cursed, you are sluggish. Your speed is halved. When you roll initiative, treat the roll on your d20 as a 1. You can't change your initiative by any means.", weight : 6, shieldAdd : ["Shield of the Tortoise", 3, 6], speed : { allModes : { bonus : "/2" } } }; MagicItemsList["shrieking greaves"] = { name : "Shrieking Greaves", source : [["BoMT", 174]], // Chapter 20: Flames type : "wondrous item", rarity : "rare", attunement : true, description : "These black leg guards have 3 charges, regaining 1d3 used charges daily at dawn. As a bonus action, I can use 1 charge to gain +30 ft walking speed and adv. on Dex saves for 1 minute. They are cursed, see Notes page. I have disadv. on saves vs. being frightened and they scream if I start my turn frightened.", descriptionLong : "These black leg guards are decorated with monstrous skulls screaming in terror. They have 3 charges, regaining 1d3 used charges daily at dawn. As a bonus action, I can use 1 charge to increase my walking speed by 30 ft, and gain advantage on Dexterity saves. These effects last for 1 minute. The greaves are cursed, and I can't remove or end my attunement to them. They give me disadvantage on saves against being frightened. When I start my turn frightened, they release an ear-piercing scream. I and all within 10 ft of me take 2d8 thunder damage and can make a DC 15 Constitution save to halve this damage.", descriptionFull : "Each of these black leg guards is decorated with a motif of monstrous skulls screaming in terror."+ "\n The greaves have 3 charges. While wearing these greaves, you can use a bonus action to expend 1 charge to increase your walking speed by 30 feet, and you have advantage on Dexterity saving throws. These effects last for 1 minute. The greaves regain 1d3 expended charges daily at dawn."+ "\n " + toUni("Curse") + ". " + BoMT.toDescrFull(BoMT["shrieking greaves"]), action : [["bonus action", ""]], usages : 3, recovery : "dawn", additional : "regains 1d3", toNotesPage : [{ name : "Shrieking Greaves Curse", note : BoMT.to1stPerson([BoMT["shrieking greaves"]]) }] }; MagicItemsList["skull helm"] = { name : "Skull Helm", source : [["BoMT", 38]], // Chapter 5: Gem type : "wondrous item", rarity : "very rare", attunement : true, description : "While wearing this skull-shaped helm, I have resistance to cold, poison, and necrotic damage. Additionally, I can cast Spirit of Death from it without requiring material components. Once I use the helm to cast the spell, it can't cast this spell again until the next dawn.", descriptionFull : "While wearing this skull-shaped helm, you have resistance to cold, poison, and necrotic damage."+ "\n Additionally, while wearing the helm, you can cast Spirit of Death from it without requiring material components. Once you use the helm to cast the spell, the helm can't cast this spell again until the next dawn.", dmgres : ["Cold", "Poison", "Necrotic"], usages : 1, recovery : "dawn", additional : "Spirit of Death", spellcastingBonus : [{ name : "Once per dawn", spells : ["spirit of death"], selection : ["spirit of death"], firstCol : "oncelr" }], spellChanges : { "spirit of death" : { components : "", compMaterial : "", description : "Summon a Reaper Spirit; obeys commands; takes turn after mine; disappears at 0 hp", changes : "While wearing the helmet, it requires no material components to cast Spirit of Death." } } }; MagicItemsList["sling of giant felling"] = { name : "Sling of Giant Felling", source : [["BoMT", 68]], // Chapter 9: Knight type : "weapon (sling)", rarity : "uncommon", description : "When I hit a creature with the Giant type with a ranged attack roll using this magic sling, the creature must succeed on a DC 18 Constitution saving throw or be knocked prone.", descriptionFull : "When you hit a Giant creature with a ranged attack roll using this magic sling, the creature must succeed on a DC 18 Constitution saving throw or have the prone condition.", weaponOptions : [{ baseWeapon : "sling", regExpSearch : /^(?=.*sling)(?=.*giant)(?=.*felling).*$/i, name : "Sling of Giant Felling", source : [["BoMT", 68]], description : "Ammunition; Giants: DC 18 Con save or prone", selectNow : true }] }; MagicItemsList["spindle of fate"] = { name : "Spindle of Fate", source : [["BoMT", 38]], // Chapter 5: Gem type : "wand", rarity : "legendary", attunement : true, description : "This wand has 6 charges, regains 1d6 at dawn. I can use 1 charge to add my Prof Bonus to my initiative after the roll. As an action, I can use 2 charges to invoke a creature's doom. As a reaction when a creature within 60 ft makes an attack or save, I can use 3 charges to change the outcome. See Notes page.", descriptionFull : "This wand is shaped like a drop spindle wrapped in red thread. The wand has 6 charges that can be used for the following properties:"+ "\n " + BoMT.toDescrFull(BoMT["spindle of fate"])+ "\n The wand regains 1d6 expended charges daily at dawn.", descriptionFull : BoMT.toDescrFull(BoMT["spindle of fate"]), action : [["action", " - Doom Foretold"], ["reaction", " - Twist of Fate"]], weight : 1, usages : 6, recovery : "dawn", additional : "regains 1d6", toNotesPage : [{ name : "Features", note : [ "This wand is shaped like a drop spindle wrapped in red thread. The wand has 6 charges, regaining 1d6 expended charges daily at dawn. The charges can be used for the following properties:"+ BoMT.to1stPerson(BoMT["spindle of fate"]) ] }] }; MagicItemsList["starshot crossbow"] = { name : "Starshot Crossbow", nameTest : "Starshot", source : [["BoMT", 38]], // Chapter 5: Gem type : "weapon (any crossbow)", rarity : "rare", attunement : true, description : "This black wooden crossbow has pearl inlays depicting three constellations. It has 3 charges, regaining 1d3 at dawn. It produces its own ammo that lasts until it hits or misses a target. As a bonus action, I can use 1 charge to tap and invoke one of its constellations, see Notes page for the options.", descriptionLong : "This crossbow of blackened wood has pearl inlays depicting three different constellations. It has 3 charges and regains 1d3 used charged daily at dawn. It produces its own ammo that lasts until it hits or misses a target. As a bonus action, I can use 1 charge to tap and invoke one of its constellations, see Notes for full text. Balance: next hit with the crossbow before my next turn ends heals me or another within 30 ft of me for 1d8+my Prof Bonus. Flames: until my next turn ends, the crossbow deals +2d8 fire damage. Rogue: until my next turn ends, I become invisible as well as anything I'm wearing or carrying.", descriptionFull : BoMT.toDescrFull(BoMT["starshot crossbow"]), action : [["bonus action", ""]], usages : 3, recovery : "dawn", additional : "regains 1d3", chooseGear : { type : "weapon", prefixOrSuffix : "suffix", excludeCheck : function (inObjKey, inObj) { var testRegex = /crossbow/i; return !testRegex.test(inObjKey) && (!inObj.baseWeapon || !testRegex.test(inObj.baseWeapon)); } }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && v.isRangedWeapon && /crossbow/i.test(v.baseWeaponName) && /Starshot/i.test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(;|,)? ?(loading|Counts as magical)/ig, ''); } }, 'If I include the word "Starshot" in the name of a crossbow, it will be treated as the magic weapon Starshot Crossbow. It produces its own ammunition, thus its loading property is removed.' ] }, toNotesPage : [{ name : "Features and Constellations", note : BoMT.to1stPerson(BoMT["starshot crossbow"]) }] }; MagicItemsList["stonemaker war pick"] = { name : "Stonemaker War Pick", source : [["BoMT", 68]], // Chapter 9: Knight type : "weapon (war pick)", rarity : "very rare", attunement : true, description : "This war pick adds +1 to attack and damage rolls. I can use it to cast Meld into Stone once per dawn. If I score a critical hit with it against a creature that has 100 HP or fewer, I can use 1 charge to have the target make a DC 15 Con save or be petrified for 8 hours. It has 1d6+1 charges that can't be replenished.", descriptionFull : "You gain a +1 bonus to attack and damage rolls made with this magic war pick. It has the following special properties:"+ "\n " + toUni("Meld into Stone") + ". You can cast the Meld into Stone spell from this war pick. Once this property is used, it can't be used again until the next dawn."+ "\n " + toUni("Petrification") + ". The war pick has 1d6 + 1 charges. If you score a critical hit against a creature that has fewer than 100 hit points, you can expend 1 charge from the war pick to have that creature make a DC 15 Constitution saving throw. On a failed save, the creature has the petrified condition for 8 hours. When the war pick has no charges remaining, it loses this property.", weight : 2, extraLimitedFeatures : [{ name : "Stonemaker War Pick - Meld into Stone", usages : 1, recovery : "dawn" }, { name : "Stonemaker War Pick - Petrification", usages : "1d6+1", recovery : "Never" }], spellcastingBonus : [{ name : "Once per dawn", spells : ["meld into stone"], selection : ["meld into stone"], firstCol : "oncelr" }], weaponOptions : [{ baseWeapon : "war pick", regExpSearch : /^(?=.*stonemaker)(((?=.*pick)(?=.*war))|((?!.*(heavy|great|light))(?=.*\bpicks?\b))).*$|\bkuwas?\b/i, name : "Stonemaker War Pick", source : [["BoMT", 68]], description : "Can petrify on critical hit, see item", modifiers : [1, 1], selectNow : true }] }; MagicItemsList["sun staff"] = { name : "Sun Staff", source : [["BoMT", 39]], // Chapter 5: Gem type : "staff", rarity : "rare", attunement : true, prerequisite : "Requires attunement by a cleric, druid, or wizard", prereqeval : function (v) { return classes.known.cleric || classes.known.druid || classes.known.wizard ? true : false; }, description : "This +1 quarterstaff deals +1d8 fire damage on an attack. I can use it as a spellcasting focus. Once per dawn when I cast a spell using a spell slot, I can reroll my Prof Bonus of fire or radiant damage dice. As a bonus action, I can toggle it glowing with sunlight: 15-ft radius bright light and dim light for another 15 ft.", descriptionFull : "Veins of sunstone run through this wooden staff. This staff can be wielded as a magic quarterstaff that grants a +1 bonus to attack and damage rolls made with it. When you hit with an attack roll using this staff, the target takes an extra 1d8 fire damage."+ "\n " + toUni("Solar Focus") + ". You can use the staff as a spellcasting focus. While holding the staff, you can reroll a number of damage dice up to your proficiency bonus when you use a spell slot to cast a spell that deals fire or radiant damage. You must use the new rolls. Once this property is used, it can't be used again until the next dawn."+ "\n " + toUni("Sunny Glow") + ". As a bonus action, you can cause the staff to glow with sunlight. While glowing, the staff sheds bright light in a 15-foot radius and dim light for an additional 15 feet. The light lasts until you use another bonus action to extinguish it.", weight : 4, action : [["bonus action", " (glow on/off)"]], usages : 1, recovery : "dawn", additional : "reroll damage", weaponOptions : [{ baseWeapon : "quarterstaff", regExpSearch : /^(?=.*sun)(?=.*staff).*$/i, name : "Sun Staff", source : [["BoMT", 39]], description : "Versatile (1d8); +1d8 fire damage", modifiers : [1, 1], selectNow : true }] }; MagicItemsList["sword of the planes"] = { name : "Sword of the Planes", nameTest : "of the Planes", source : [["BoMT", 68]], // Chapter 9: Knight type : "weapon (any sword)", rarity : "legendary", attunement : true, description : "This +3 weapon can tear the fabric of reality. As an action once per dawn, I can slice a rift to a location on another plane in an empty space within 5 ft of me. The rift can be up to 10 ft high and wide. Anything entering the rift is instantly transported. The DM determines where it goes exactly.", descriptionFull : "You gain a +3 bonus to attack and damage rolls made with this magic sword."+ "\n This sword can tear the fabric of reality, creating a temporary rift between planes. You can use your action to choose a different plane of existence from the one you're on and slice through an unoccupied space within 5 feet of yourself, creating a rift to that other plane. The rift can be up to 10 feet high and 10 feet wide, and it lasts for 1 minute. Once this property is used, it can't be used again until the next dawn."+ "\n You can specify a target destination, such as the City of Brass on the Elemental Plane of Fire or the palace of Dispater on the second layer of the Nine Hells, and the rift opens in or near that destination (DM's discretion). If you are trying to reach the City of Brass, for example, the rift might appear on the Street of Steel, before the Gate of Ashes, or facing the city from across the Sea of Fire, at the DM's discretion."+ "\n Anything that enters the rift is instantly transported to the other plane, appearing in the unoccupied space nearest to the rift.", usages : 1, recovery : "dawn", chooseGear : { type : "weapon", prefixOrSuffix : "prefix", descriptionChange : ["replace", "sword"], excludeCheck : function (inObjKey, inObj) { var testRegex = /sword|scimitar|rapier/i; return !testRegex.test(inObjKey) && (!inObj.baseWeapon || !testRegex.test(inObj.baseWeapon)); } }, calcChanges : { atkCalc : [ function (fields, v, output) { if (!v.theWea.isMagicWeapon && v.isMeleeWeapon && /sword|scimitar|rapier/i.test(v.baseWeaponName) && /of the Planes/i.test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; output.magic = v.thisWeapon[1] + 3; } }, 'If I include the words "of the Planes" in a the name of a sword, it will be treated as the magic weapon Sword of the Planes. It has +3 to hit and damage.' ] } }; MagicItemsList["telescopic transporter"] = { name : "Telescopic Transporter", source : [["BoMT", 105]], // Chapter 13: Star type : "wondrous item", rarity : "legendary", description : "This enormous telescope allows me to view distant celestial objects, including stars, Wildspace systems, and Astral Sea phenomena. With 1 hour of calibrating, I can use it to attempt to travel to whatever it is pointed at. With a DC 17 Arcana check me and 8 others teleport, otherwise a mishap, see Notes.", descriptionFull : BoMT.toDescrFull(BoMT["telescopic transporter"]), toNotesPage : [{ name : "Features", note : BoMT.to1stPerson([BoMT["telescopic transporter"]]) }] }; MagicItemsList["tidecaller trident"] = { name : "Tidecaller Trident", source : [["BoMT", 69]], // Chapter 9: Knight type : "weapon (trident)", rarity : "very rare", attunement : true, description : "This magic trident gives a +2 bonus to attack and damage made with it and advantage on attack rolls when used underwater. The trident has 3 charges, regaining 1d3 expended charges daily at dawn. I can expend these charges to cast spells (save DC 15): Control Water (1 charge) or Tsunami (3 charges).", descriptionFull : "You gain a +2 bonus to attack and damage rolls made with this magic trident. You also have advantage on attack rolls made with this weapon while underwater."+ "\n This trident has 3 charges. You can expend 1 charge to cast Control Water (save DC 15) from the trident or 3 charges to cast Tsunami (save DC 15) from it instead. The trident regains 1d3 expended charges daily at dawn.", weight : 4, usages : 3, recovery : "dawn", additional : "regains 1d3", weaponOptions : [{ baseWeapon : "trident", regExpSearch : /^(?=.*tidecaller)(?=.*trident).*$/i, name : "Tidecaller Trident", source : [["BoMT", 69]], description : "Thrown, versatile (1d8); Adv. when underwater", modifiers : [2, 2], selectNow : true }], fixedDC : 15, spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "1 charge", spells : ["control water"], selection : ["control water"], firstCol : 1 }, { name : "3 charges", spells : ["tsunami"], selection : ["tsunami"], firstCol : 3 }] }; MagicItemsList["voidwalker armor"] = { name : "Voidwalker Armor", source : [["BoMT", 39]], // Chapter 5: Gem type : "armor (studded leather)", rarity : "rare", attunement : true, description : "This black studded leather armor bears a red sheen. As a bonus action once per dawn, I can summon a projection of myself in an empty space within 30 ft. It's a translucent copy of me, immune to all damage and conditions, that I can make attacks and cast spells from. The projection disappears at the end of my turn.", descriptionFull : "This black studded leather armor bears a red sheen. While wearing this armor, you can use a bonus action to summon a projection of yourself in an unoccupied space within 30 feet of yourself. The projection is a translucent copy of you that has immunity to all damage and conditions, and you can make attacks and cast spells with a range other than self as if standing in the projection's space. The projection disappears at the end of your turn. Once you use this bonus action, it can't be used again until the next dawn."+ "\n " + toUni("Curse") + ". " + BoMT.toDescrFull(BoMT["voidwalker armor"]), weight : 13, usages : 1, recovery : "dawn", action : [["bonus action", ""]], armorOptions : [{ regExpSearch : /^(?=.*voidwalker)(?=.*armou?r).*$/i, name : "Voidwalker Armor", source : [["BoMT", 39]], type : "light", ac : 12, weight : 13, selectNow : true }], toNotesPage : [{ name : "Voidwalker Curse", note : BoMT.to1stPerson([BoMT["voidwalker armor"]]) }] }; MagicItemsList["warrior's passkey"] = { name : "Warrior's Passkey", source : [["BoMT", 39]], // Chapter 5: Gem type : "wondrous item", rarity : "rare", attunement : true, description : "This silver skeleton key is warm to the touch. I can use it to cast Knock while in its key form. As a bonus action, I can transform it into a magic +1 longsword that deals 1d10 force damage and I'm proficient with. The sword reverts back to a key if it leaves my grasp, I use a bonus action to do so, or my attunement ends.", descriptionFull : "This silver skeleton key is warm to the touch. While holding the key in its key form, you can use an action to cast the Knock spell from the key."+ "\n " + toUni("Transforming the Key") + ". While holding the key, you can use a bonus action to transform it into a magic longsword. You are considered proficient with the sword, and you have a +1 bonus to attack and damage rolls made with it. On a hit, the sword deals 1d10 force damage. The item remains in its sword form until it leaves your grasp or you use another bonus action to revert it to its key form."+ "\n If you end your attunement to the item while it's in its sword form, it automatically reverts to its key form.", action : [["bonus action", " (transform)"]], weaponOptions : [{ baseWeapon : "longsword", regExpSearch : /^(?=.*warrior)(?=.*passkey).*$/i, name : "Warrior's Passkey", source : [["BoMT", 39]], damage : [1, 10, "force"], modifiers : [1, 1], isAlwaysProf : true, description : "", weight : 0, selectNow : true }], spellcastingBonus : [{ name : "At will", spells : ["knock"], selection : ["knock"], firstCol : "atwill" }] }; MagicItemsList["weapon of throne's command"] = { name : "Weapon of Throne's Command", nameTest : "of Throne's Command", source : [["BoMT", 39]], // Chapter 5: Gem type : "weapon (any)", rarity : "very rare", attunement : true, description : "This +1 weapon grants me proficiency with Intimidation and Persuasion. It has 5 charges, regaining 1d4 at dawn. As a bonus action, I can expend charges to cast a spell from it with save DC 16: Command (1 charge), Zone of Truth (2), Compulsion (4), Banishment (4), or Dominate Person (5).", descriptionLong : "This weapon is bedecked in ornate gold filigree and deep-blue and maroon jewels. I gain a +1 bonus to attack and damage rolls made with this weapon. Additionally, I gain proficiency in the Intimidation and Persuasion skills if I don't already have it. The weapon has 5 charges, regaining 1d4 expended charges daily at dawn. As a bonus action, I can expend 1 or more of its charges to cast one of the following spells (save DC 16): Command (1 charge), Zone of Truth (2 charges), Compulsion (4 charges), Banishment (4 charges), or Dominate Person (5 charges).", descriptionFull : "This weapon is bedecked in ornate gold filigree and deep-blue and maroon jewels. You gain a +1 bonus to attack and damage rolls made with this weapon. Additionally, you gain proficiency in the Intimidation and Persuasion skills if you don't already have it."+ "\n " + toUni("Spellcasting") + ". The weapon has 5 charges. You can use a bonus action and expend 1 or more of its charges to cast one of the following spells (save DC 16): Command (1 charge), Zone of Truth (2 charges), Compulsion (4 charges), Banishment (4 charges), or Dominate Person (5 charges)."+ "\n The weapon regains 1d4 expended charges daily at dawn.", skills : ["Intimidation", "Persuasion"], chooseGear : { type : "weapon", prefixOrSuffix : "prefix", descriptionChange : ["replace", "weapon"] }, usages : 5, recovery : "dawn", additional : "regains 1d4", fixedDC : 16, spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "1 charge", spells : ["command"], selection : ["command"], firstCol : 1 }, { name : "2 charges", spells : ["zone of truth"], selection : ["zone of truth"], firstCol : 2 }, { name : "4 charges", spells : ["banishment", "compulsion"], selection : ["banishment", "compulsion"], firstCol : 4, times : 2 }, { name : "5 charges", spells : ["dominate person"], selection : ["dominate person"], firstCol : 5 }], calcChanges : { atkCalc : [ function (fields, v, output) { if (/of throne'?s? command/.test(v.WeaponTextName)) { output.magic = v.thisWeapon[1] + 1; } }, 'If I include the words "of Throne\'s Command" in a the name of a weapon, it will be treated as the magic weapon Weapon of Throne\'s Command. It adds a +1 bonus to attack and damage rolls.' ] }, spellChanges : { "command" : { time : "1 bns", changes : "Using the Weapon of Throne's Command, I can cast Command as a bonus action." }, "zone of truth" : { time : "1 bns", changes : "Using the Weapon of Throne's Command, I can cast Zone of Truth as a bonus action." }, "banishment" : { time : "1 bns", changes : "Using the Weapon of Throne's Command, I can cast Banishment as a bonus action." }, "compulsion" : { time : "1 bns", changes : "Using the Weapon of Throne's Command, I can cast Compulsion as a bonus action." }, "dominate person" : { time : "1 bns", changes : "Using the Weapon of Throne's Command, I can cast Dominate Person as a bonus action." } } }; MagicItemsList["winged ammunition"] = { name : "Winged Ammunition", nameTest : "Winged", source : [["BoMT", 69]], // Chapter 9: Knight type : "weapon (any ammunition)", rarity : "uncommon", description : "Ranged weapon attack rolls made with this magic ammunition ignore half and three-quarters cover. In addition, attacking at long range doesn't impose disadvantage on ranged weapon attack rolls made with this ammunition.", descriptionFull : "Ranged weapon attack rolls made with this ammunition ignore half and three-quarters cover. In addition, attacking at long range doesn't impose disadvantage on ranged weapon attack rolls made with this ammunition.", allowDuplicates : true, chooseGear : { type : "ammo", prefixOrSuffix : "suffix", descriptionChange : ["replace", "ammunition"], excludeCheck : function (inObjKey, inObj) { return /vials|flasks/i.test(inObj.icon); } } }; MagicItemsList["wraps of unarmed prowess"] = { name : "Wraps of Unarmed Prowess, +1, +2, or +3", nameTest : "Wraps of Unarmed Prowess", source : [["BoMT", 69]], // Chapter 9: Knight type : "wondrous item", description : "While wearing these cloth wraps, my unarmed strikes are considered magical for the purpose of overcoming immunity and resistance to nonmagical attacks, and I gain a bonus to their attack and damage rolls. The bonus is determined by rarity: uncommon (+1), rare (+2), or very rare (+3).", descriptionFull : "While you're wearing these cloth wraps, your unarmed strikes are considered magical for the purpose of overcoming immunity and resistance to nonmagical attacks and damage, and you gain a bonus to the attack and damage rolls of your unarmed strikes. The bonus is determined by the wraps' rarity: uncommon (+1), rare (+2), or very rare (+3).", choices : ["+1 Wraps of Unarmed Prowess (uncommon)", "+2 Wraps of Unarmed Prowess (rare)", "+3 Wraps of Unarmed Prowess (very rare)"], "+1 wraps of unarmed prowess (uncommon)" : { name : "Wraps of Unarmed Prowess +1", nameTest : "+1 Wraps of Unarmed Prowess", rarity : "uncommon", description : "While I'm wearing these cloth wraps, I gain a +1 bonus to the attack and damage rolls of my unarmed strikes. My unarmed strikes are considered magical for the purpose of overcoming immunity and resistance to nonmagical attacks and damage.", calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == "unarmed strike" && !/counts as( a)? magical/i.test(fields.Description)) { fields.Description += (fields.Description ? '; ' : '') + 'Counts as magical'; }; }, "My unarmed strikes get a +1 bonus to To Hit and Damage and count as magical for overcoming resistances and immunities.", 700 ], atkCalc : [ function (fields, v, output) { if (v.baseWeaponName == "unarmed strike") { output.magic += 1; } }, '' ] } }, "+2 wraps of unarmed prowess (rare)" : { name : "Wraps of Unarmed Prowess +2", nameTest : "+2 Wraps of Unarmed Prowess", rarity : "rare", description : "While I'm wearing these cloth wraps, I gain a +2 bonus to the attack and damage rolls of my unarmed strikes. My unarmed strikes are considered magical for the purpose of overcoming immunity and resistance to nonmagical attacks and damage.", calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == "unarmed strike" && !/counts as( a)? magical/i.test(fields.Description)) { fields.Description += (fields.Description ? '; ' : '') + 'Counts as magical'; }; }, "My unarmed strikes get a +2 bonus to To Hit and Damage and count as magical for overcoming resistances and immunities.", 700 ], atkCalc : [ function (fields, v, output) { if (v.baseWeaponName == "unarmed strike") { output.magic += 2; } }, '' ] } }, "+3 wraps of unarmed prowess (very rare)" : { name : "Wraps of Unarmed Prowess +3", nameTest : "+3 Wraps of Unarmed Prowess", rarity : "very rare", description : "While I'm wearing these cloth wraps, I gain a +3 bonus to the attack and damage rolls of my unarmed strikes. My unarmed strikes are considered magical for the purpose of overcoming immunity and resistance to nonmagical attacks and damage.", calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == "unarmed strike" && !/counts as( a)? magical/i.test(fields.Description)) { fields.Description += (fields.Description ? '; ' : '') + 'Counts as magical'; }; }, "My unarmed strikes get a +3 bonus to To Hit and Damage and count as magical for overcoming resistances and immunities.", 700 ], atkCalc : [ function (fields, v, output) { if (v.baseWeaponName == "unarmed strike") { output.magic += 3; } }, '' ] } } }; SpellsList["antagonize"] = { name : "Antagonize", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["BoMT", 50]], level : 3, school : "Ench", time : "1 a", range : "30 ft", components : "V,S,M", compMaterial : "A playing card depicting a rogue", duration : "Instantaneous", save : "Wis", description : "1 crea 4d4+1d4/SL Psychic dmg, use rea to melee atk vs. crea I see (or dis. atk 1 rnd); save half, no rea", descriptionShorter : "1 crea 4d4+1d4/SL Psychic dmg, rea melee atk vs. crea I see (or dis. atk 1 rnd); save half, no rea", descriptionFull : "You whisper magical words that antagonize one creature of your choice within range. The target must make a Wisdom saving throw. On a failed save, the target takes 4d4 psychic damage and must immediately use its reaction to make a melee attack against another creature of your choice that you can see. If the target can't make this attack (for example, because there is no one within its reach or because its reaction is unavailable), the target instead has disadvantage on the next attack roll it makes before the start of your next turn. On a successful save, the target takes half as much damage only."+ AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d4 for each slot level above 3rd." }; SpellsList["spirit of death"] = { name : "Spirit of Death", classes : ["sorcerer", "warlock", "wizard"], source : [["BoMT", 50]], level : 4, school : "Necro", time : "1 a", range : "60 ft", components : "V,S,M\u0192", compMaterial : "A gilded playing card worth at least 400 gp and depicting an avatar of death", duration : "Conc, 1 h", description : "Summon a Reaper Spirit; obeys commands; takes turn after mine; disappears at 0 hp (400gp)", descriptionFull : "You call forth a spirit that embodies death. The spirit manifests in an unoccupied space you can see within range and uses the reaper spirit stat block. The spirit disappears when it is reduced to 0 hit points or when the spell ends."+ "\n The spirit is an ally to you and your companions. In combat, the spirit shares your initiative count and takes its turn immediately after yours. It obeys your verbal commands (no action required by you). If you don't issue the spirit any commands, it takes the Dodge action and uses its movement to avoid danger."+ AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, use the higher level wherever the spell's level appears in the reaper spirit stat block." }; SpellsList["spray of cards"] = { name : "Spray of Cards", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["BoMT", 50]], level : 2, school : "Conj", time : "1 a", range : "S:15" + (typePF ? "-" : "") + "ft cone", components : "V,S,M", compMaterial : "A deck of cards", duration : "Instantaneous", save : "Dex", description : "All in area 2d10+1d10/SL Force dmg and blinded until their next turn ends; save halves \u0026 not blinded", descriptionShorter : "All in area 2d10+1d10/SL Force dmg, blinded till their next turn ends; save half \u0026 not blinded", descriptionFull : "You spray a 15-foot cone of spectral cards. Each creature in that area must make a Dexterity saving throw. On a failed save, a creature takes 2d10 force damage and has the blinded condition until the end of its next turn. On a successful save, a creature takes half as much damage only."+ AtHigherLevels + "When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d10 for each slot level above 2nd." }; // pub_20240521_VEoR.js // This file adds the magic item from the Vecna: Eve of Ruin adventure to MPMB's Character Record Sheet // Define the source SourceList["VEoR"] = { name : "Vecna: Eve of Ruin", abbreviation : "VEoR", group : "Adventure Books", url : "https://dndstore.wizards.com/us/en/product/924703/vecna-eve-of-ruin-digital-plus-physical-bundle", date : "2024/05/21" }; MagicItemsList["chime of exile"] = { name : "Chime of Exile", source : [["VEoR", 46]], type : "wondrous item", rarity : "very rare", description : "This silver chime is engraved with delicate magic sigils. As an action once per dawn, I can hold the chime and cast the Banishment spell (save DC 20). If the target of the spell has 50 hit points or fewer, it automatically fails its saving throw.", descriptionFull : "This silver chime is engraved with delicate magic sigils. While holding the chime, you can use an action to cast the Banishment spell (spell save DC 20). If the target of the spell has 50 hit points or fewer, it automatically fails its saving throw. Once the chime has been used to cast the spell, it can't be used this way again until the next dawn.", usages : 1, recovery : "dawn", additional : "Banishment", fixedDC : 20, spellcastingBonus : [{ name : "Once per dawn", spells : ["banishment"], selection : ["banishment"], firstCol : "oncelr" }] }; // pub_20240716_QftIS.js // This file adds the futuristic and magic item from the Quests from the Infinite Staircase adventure anthology to MPMB's Character Record Sheet // Define the source SourceList["QftIS"] = { name : "Quests from the Infinite Staircase", abbreviation : "QftIS", group : "Adventure Books", url : "https://dndstore.wizards.com/us/en/product/928653/quests-from-the-infinite-staircase-digital-plus-physical-bundle", date : "2024/07/16" }; try { var QftIS = { toDescrFull : BoMT.toDescrFull, to1stPerson : BoMT.to1stPerson }; } catch (err) { } QftIS.replaceEnergyCellPlain = ">>Replacing the Energy Cell<<. While the >>THING<< has charges remaining, its energy cell can't be removed. Once the >>THING<< has 0 charges, you can replace the energy cell with a new cell by using an action or a bonus action." QftIS.replaceEnergyCell = "\n " + QftIS.replaceEnergyCellPlain.replace(">>Replacing the Energy Cell<<", toUni("Replacing the Energy Cell")); // Futuristic items added as magic items, but set to be excluded by default MagicItemsList["antigravity belt"] = { name : "Antigravity Belt", source : [["QftIS", 192]], type : "futuristic item", // not really magic items, so these use their own category rarity : "priceless", // as per QftIS page 192 defaultExcluded : true, description : "This belt has 10 charges per energy cell, which can be replaced as a (bonus) action if empty. As a bonus action, I can use charges to activate it for 1 min per charge, causing me to float in place. As a bonus action and when activating it, I can move 20 ft vertically. I can push off to move horizontally at half my speed.", descriptionLong : "Metal tubes ring the lower edge of this wide belt powered by an energy cell stored in a metal case near the buckle. It has 10 charges per energy cell, which can be replaced as a (bonus) action when empty. As a bonus action, I can expend charges to activate the belt for 1 min per charge. While active, I float in place. As a bonus action and as part of activating it, I can ascend or descend up to 20 ft vertically. I can move myself horizontally by being pushed or towed or by scooting myself along a surface at half my walking speed. I can deactivate it as a bonus action; If I'm still levitating when it deactivates, I fall.", descriptionFull : "Metal tubes ring the lower edge of this wide belt. It is powered by an energy cell stored in a metal case near the buckle. Placing a full energy cell in the belt gives the belt 10 charges."+ "\n " + toUni("Activating the Belt") + ". As a bonus action, you can expend any number of the belt's charges to activate it; the belt remains active for 1 minute per charge expended. You can use a bonus action to deactivate the belt early, but doing so doesn't recover any expended charges."+ "\n When you activate the belt, and as a bonus action while it remains active, you can rise or descend vertically up to 20 feet. You remain floating in place while the property is active, and you can move yourself horizontally by being pushed or towed or by scooting yourself along a surface, such as a wall or ceiling, at half your walking speed. If you are still levitating when the belt deactivates, you fall."+ QftIS.replaceEnergyCell.replace(/>>THING<>THING<>THING<>THING<>THING<>Activating the Armor<<. As an action, you can expend any number of the armor's charges to activate it; the armor remains active for 1 hour per charge expended. You can use a bonus action to deactivate the armor early, but doing so doesn't recover any expended charges.", "While the armor is active, you gain the following benefits:"+ "\n \u2022 >>Augmented Physicality<<. You have advantage on Strength checks, and your carrying capacity is doubled."+ "\n \u2022 >>Environmental Adaptation<<. The armor seals airtight and provides its own atmosphere. You can breathe normally in any environment and withstand extreme temperatures, and you're unaffected by harmful gases, as well as contact and inhaled poisons."+ "\n \u2022 >>Force Field<<. When you would take damage, you can use your reaction to expend 1 of the armor's charges to deploy a defensive force field. Roll 3d10 and reduce the damage taken by the total rolled."+ "\n \u2022 >>Propulsion<<. As a bonus action, you can expend 1 of the armor's charges to gain a flying speed equal to your walking speed for 1 minute. If you're airborne when this duration ends, you fall.", QftIS.replaceEnergyCellPlain.replace(/>>THING<>Destroy Devotion<<. Once per turn when you hit a creature with this weapon, you can expend 1 of its charges to attempt to render the target powerless. The target must succeed on a DC 17 Constitution saving throw or have the paralyzed condition until the start of your next turn. Celestials have disadvantage on the save."+ "\n \u2022 >>Faith Hunter<<. While holding the sword, you can use an action to expend 1 or more of its charges to cast one of the following spells from it: Detect Evil and Good (1 charge), Fly (2 charges), or True Seeing (3 charges).", ">>Sentience<<. Heretic is a sentient, chaotic evil weapon with an Intelligence of 17, a Wisdom of 17, and a Charisma of 15. It has hearing and darkvision out to a range of 120 feet.", "The weapon can speak, read, and understand Common and Giant, and it can communicate with its wielder telepathically. Its voice is soft and deep but rises in a wild furor when it's aware Celestials or worshipers of good-aligned deities are present. While you are attuned to it, Heretic also understands every language you know.", ">>Personality<<. Heretic craves the destruction of good-aligned gods and their supporters. The blade is condescending and snobby, especially in the company of priests and other pious folk, at whom it often directs sneering comments. When Heretic identifies its quarry, it erupts in a frenzied need for violence." ]; MagicItemsList["heretic"] = { name : "Heretic", source : [["QftIS", 192]], type : "weapon (longsword)", rarity : "legendary", description : "This sentient longsword adds +3 to hit and damage and has 6 charges, regaining 1d4+1 at dawn. Once per turn on a hit with it, I can use 1 charge to force a DC 17 Con save or paralyze until my next turn. As an action, I can cast spells from it: Detect Evil and Good (1 charge), Fly (2 charges), or True Seeing (3 charges).", descriptionFull : QftIS.toDescrFull(QftIS.heretic), attunement : true, prerequisite : "Requires attunement by a non-good creature", prereqeval : function(v) { return !/good/i.test(What("Alignment")); }, weight : 3, weaponOptions : [{ baseWeapon : "longsword", regExpSearch : /heretic/i, name : "Heretic", source : [["QftIS", 192]], description : "Versatile (1d10); On hit, 1 charge to paralyze (DC 17 Con save)", modifiers : [3, 3], selectNow : true }], toNotesPage : [{ name : "Features", note : QftIS.to1stPerson(QftIS.heretic) + "\n\n" + sentientItemConflictTxt }], usages : 6, recovery : "dawn", additional : "regains 1d4+1", spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "1 charge", spells : ["detect evil and good"], selection : ["detect evil and good"], firstCol : 1 }, { name : "2 charges", spells : ["fly"], selection : ["fly"], firstCol : 2 }, { name : "3 charges", spells : ["true seeing"], selection : ["true seeing"], firstCol : 2 }] } QftIS.staffOfRuling = [ "An ornate carving of a serpent adorned with a coursing river spirals down the length of this redand-gold staff. While you're holding it, you can use an action to produce one of the following effects. Once the staff has produced an effect, it can't produce that effect again until the next dawn.", ">>Orb of Lightning<<. You create a Small orb of lightning in an unoccupied space you can see within 60 feet of yourself. You concentrate on this orb as if concentrating on a spell. As a bonus action, you can move the orb up to 20 feet in any direction.", "When your concentration ends, or when a creature enters the orb's space or starts its turn there, the orb detonates in a 20-foot-radius sphere. Each creature in that area must make a DC 15 Dexterity saving throw, taking lightning damage equal to the total accumulated damage on a failed save, or half as much damage on a successful one; the orb's base damage is 6d6, and if at the end of your turn the orb hasn't detonated, its damage increases by 2d6, to a maximum of 10d6.", ">>Staff to Snake<<. You throw the staff to an unoccupied space within 10 feet of you, and the staff becomes a giant poisonous snake. The snake is under your control and shares your initiative count, but it takes its turn immediately after yours.", "On your turn, you can mentally command the snake if it is within 60 feet of you and you don't have the incapacitated condition. You decide what action the snake takes and where it moves during its turn, or you can issue it a general command, such as to attack your enemies or guard a location.", "If you use a bonus action to speak the command word again, or if the snake is reduced to 0 hit points, the snake reverts to staff form in its current space.", ">>Thunderclap<<. You point the staff skyward, producing a fearsome thunderclap. Each creature of your choice in a 30-foot-radius sphere centered on you must succeed on a DC 15 Constitution saving throw or have the deafened and frightened conditions until the end of your next turn." ]; MagicItemsList["staff of ruling"] = { name : "Staff of Ruling", source : [["QftIS", 192]], type : "staff", rarity : "rare", description : "As an action, I can use this redand-gold staff with an ornate serpent carving to produce one of several effects: Orb of Lightning, Staff to Snake, or Thunderclap. Once the staff has produced an effect, it can't produce that effect again until the next dawn. See Notes page for the effect descriptions.", descriptionFull : QftIS.toDescrFull(QftIS.staffOfRuling), attunement : true, weight : 4, toNotesPage : [{ name : "Features", note : QftIS.to1stPerson(QftIS.staffOfRuling) }], action : [["action", ""]], extraLimitedFeatures : [{ name : "Staff of Ruling: Orb of Lightning", usages : 1, recovery : "dawn" }, { name : "Staff of Ruling: Staff to Snake", usages : 1, recovery : "dawn" }, { name : "Staff of Ruling: Thunderclap", usages : 1, recovery : "dawn" }] } // pub_al_20190917_ALPG-v9.1.js // This file adds the winged aasimar/tiefling from the Adventurers League Player's Guide v9.1: Inglorious Redemption to MPMB's Character Record Sheet // Define the source SourceList["ALPGs9"] = { name : "AL Player's Guide v9.1: Inglorious Redemption", abbreviation : "ALPGs9", group : "Adventurers League", url : "https://www.dropbox.com/s/8r1cwjrk6n2rzyo/AL-Players-Guide-v9.1-Forgotten-Realms.pdf?dl=1", // used to be https://www.dmsguild.com/product/208178 date : "2019/09/17", defaultExcluded : true }; /* Add this source to the Aasimar from VGtM and the Winged Tiefling variant from SCAG Also, add a winged variant to the three Aasimar subraces from VGtM */ [ ["fallen aasimar", false], ["protector aasimar", false], ["scourge aasimar", false], ["tiefling-winged", true], ["feral tiefling-winged", true] ].forEach(function (rac) { var rObj = rac[1] ? RaceSubList[rac[0]] : RaceList[rac[0]]; if (!rObj) return; rObj.source = (isArray(rObj.source[0]) ? rObj.source : [rObj.source]).concat([["ALPGs9", 6]]); if (rac[0].indexOf("aasimar") !== -1) { AddRacialVariant(rac[0], "winged", { regExpSearch : /wing/i, name : "Winged " + rObj.name, source : [["ALPGs9", 6]], plural : "Winged " + rObj.plural, speed : { walk : { spd : 30, enc : 20 }, fly : { spd : 30, enc : 0 } }, trait : "Winged " + rObj.trait.replace(/\)(\r|\n|.)+/, ")\n\nHealing Hands:\n As an action, once per long rest, I can touch to heal for my level in HP.\nWings:\n Once I'm 5th level, I sprout feathered wings from my shoulder blades that give me a flying speed of 30 feet when I'm not wearing heavy armor."), features : { "healing hands" : { name : "Healing Hands", usages : 1, minlevel : 1, recovery : "long rest", additional : levels.map(function (n) { return n + " HP"; }), action : [["action", ""]] } }, abilitySave : "", spellcastingAbility : "", spellcastingBonus : "" }); } }); ================================================ FILE: WotC material/all_WotC_unearthed_arcana.js ================================================ if (sheetVersion < 14000006) { throw "This add-on script was made for a newer version of the sheet (v14.0.6-beta). Please use this required version or a later version (but lower than v15.0.0) and try again.\n\nYou can get the different versions at www.flapkan.com.\n\nFrom v24.0.0 onwards, the sheet uses the 2024 (5.5e) rules, while lower versions use the 5e (2014) rules."; }; if (sheetVersion >= 15000000) { throw "This add-on script was made for a lower version of the sheet (one before v15.0.0). Please use the required version (v14.0.6-beta) or a later version and try again.\n\nYou can get the different versions at www.flapkan.com.\n\nFrom v24.0.0 onwards, the sheet uses the 2024 (5.5e) rules, while lower versions use the 5e (2014) rules."; }; var iFileName = "all_WotC_unearthed_arcana.js"; RequiredSheetVersion("14.0.6-beta", "15.0.0"); // ua_20150202_Eberron.js // This file adds the content from the Unearthed Arcana: Eberron article to MPMB's Character Record Sheet // Define the source SourceList["UA:E"] = { name : "Unearthed Arcana: Eberron", abbreviation : "UA:E", group : "Unearthed Arcana", campaignSetting : "Eberron", url : "https://media.wizards.com/2015/downloads/dnd/UA_Eberron_v1.1.pdf", date : "2015/02/02" }; // Adds three races: // Changeling RaceList["changeling-ua"] = { regExpSearch : /changeling/i, name : "Changeling", source : [["UA:E", 1]], plural : "Changelings", size : 3, skills : ["Deception"], speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", 2], age : " reach adulthood in their early teens and live around 80 years", height : " stand between 5 and 6 feet tall (5'1\" + 2d4\")", weight : " weigh around 140 lb (115 + 2d4 \xD7 2d4 lb)", heightMetric : " stand between 1,5 to over 1,8 metres tall (155 + 5d4 cm)", weightMetric : " weigh around 65 kg (52 + 5d4 \xD7 4d4 / 10 kg)", scores : [0, 1, 0, 0, 0, 1], trait : "Changeling (+1 Dexterity, +1 Charisma)\nShapechanger:\n As an action, I can polymorph into any humanoid of my size that I have seen, or back into my true form.\n However, my equipment does not change with me.\n If I die, I revert to my natural appearance.", action : ['action', 'Polymorph'] }; // Warforged RaceList["warforged-ua"] = { regExpSearch : /warforged/i, name : "Warforged", source : [["UA:E", 3]], plural : "Warforged", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", 1], savetxt : { immune : ["disease"] }, age : " are created as adults and will only start to show signs of physical deterioration after 150 years, but have no further aging effects", height : " stand between 6 and 7 feet tall (5'10\" + 2d6\")", weight : " weigh around 300 lb (270 + 2d6 \xD7 4 lb)", heightMetric : " stand between 1,8 and 2,1 metres tall (178 + 5d6 cm)", weightMetric : " weigh around 135 kg (125 + 5d6 \xD7 8 / 10 kg)", scores : [1, 0, 1, 0, 0, 0], trait : "Warforged (+1 Strength, +1 Constitution)\nLiving Construct:\n Even though I was constructed, I am a living creature. I am immune to disease. I do not need to eat or breathe, but I can ingest food and drink if I wish.\n Instead of sleeping, I enter an inactive state for 4 hours each day. I do not dream in this state; I am fully aware of my surroundings and notice approaching enemies and other events as normal. I still need 8 hours for a long rest.", extraAC : { name : "Composite Plating", mod : 1, text : "I gain a +1 bonus to AC." } }; // Shifter and its 6 subraces RaceList["shifter-ua"] = { regExpSearch : /shifter/i, name : "Shifter", source : [["UA:E", 2]], plural : "Shifters", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Sylvan"], vision : [["Darkvision", 60]], age : " reach adulthood at the end of their teens and live around 100 years", height : " range from under 5 to almost 6 feet tall (4'6\" + 2d8\")", weight : " weigh around 135 lb (90 + 2d8 \xD7 2d4 lb)", heightMetric : " range from under 1,5 to 1,8 metres tall (4'6\" + 5d8 cm)", weightMetric : " weigh around 65 kg (40 + 5d8 \xD7 4d4 / 10 kg)", scorestxt : "+1 Dexterity and +1 to other ability score depending on type of shifter", scores : [0, 1, 0, 0, 0, 0], trait : "Shifter (+1 Dexterity and +1 to other ability score depending on type of shifter)\n Use the \"Racial Options\" button to select type of shifter.\nShifting:\n On my turn, I can shift as a bonus action. Shifting lasts for 1 minute or until I end it on my turn as a bonus action. I must finish a short rest before I can shift again.\n While shifted, I gain temporary hit points equal to my level + my Constitution modifier (minimum of 1) and another bonus depending on the type of shifter.", features : { "shift" : { name : "Shift", minlevel : 1, usages : 1, recovery : "short rest", action : [["bonus action", ""]] } } }; AddRacialVariant("shifter-ua", "beasthide", { regExpSearch : /beasthide/i, name : "Beasthide shifter", source : [["UA:E", 2]], plural : "Beasthide shifters", scorestxt : "", scores : [0, 1, 1, 0, 0, 0], trait : "Beasthide Shifter (+1 Dexterity, +1 Constitution)\nShifting:\n On my turn, I can shift as a bonus action. Shifting lasts for 1 minute or until I end it on my turn as a bonus action. I must finish a short rest before I can shift again.\n While shifted, I gain temporary hit points equal to my level + my Constitution modifier (minimum of 1) and I gain a +1 bonus to my AC." }); AddRacialVariant("shifter-ua", "cliffwalk", { regExpSearch : /cliffwalk/i, name : "Cliffwalk shifter", source : [["UA:E", 2]], plural : "Cliffwalk shifters", scorestxt : "", scores : [0, 2, 0, 0, 0, 0], trait : "Cliffwalk Shifter (+2 Dexterity)\nShifting:\n On my turn, I can shift as a bonus action. Shifting lasts for 1 minute or until I end it on my turn as a bonus action. I must finish a short rest before I can shift again.\n While shifted, I gain temporary hit points equal to my level + my Constitution modifier (minimum of 1) and I gain a climb speed of 30 feet." }); AddRacialVariant("shifter-ua", "longstride", { regExpSearch : /longstride/i, name : "Longstride shifter", source : [["UA:E", 2]], plural : "Longstride shifters", scorestxt : "", scores : [0, 2, 0, 0, 0, 0], trait : "Longstride Shifter (+2 Dexterity)\nShifting:\n On my turn, I can shift as a bonus action. Shifting lasts for 1 minute or until I end it on my turn as a bonus action. I must finish a short rest before I can shift again.\n While shifted, I gain temporary hit points equal to my level + my Constitution modifier (minimum of 1) and I can use the Dash action as a bonus action." }); AddRacialVariant("shifter-ua", "longtooth", { regExpSearch : /(longtooth|longteeth)/i, name : "Longtooth shifter", source : [["UA:E", 2]], plural : "Longtooth shifters", weaponOptions : [{ regExpSearch : /\blongtooth\b/i, name : "Longtooth", source : [["UA:E", 2]], ability : 1, type : "Natural", damage : [1, 6, "piercing"], range : "Melee", description : "Only while shifted; Target up to my size is grappled", abilitytodamage : true, selectNow : true }], scorestxt : "", scores : [1, 1, 0, 0, 0, 0], trait : "Longtooth Shifter (+1 Strength, +1 Dexterity)\nShifting: On my turn, I can shift as a bonus action. Shifting lasts for 1 minute or until I end it on my turn as a bonus action. I must finish a short rest before I can shift again. While shifted, I gain temporary hit points equal to my level + my Constitution modifier (minimum of 1) and, as an action, I can make can make a bite attack. This is a melee weapon attack that uses Strength and deals 1d6 piercing damage. If this attack hits a target that is my size or smaller, the target is also grappled." }); AddRacialVariant("shifter-ua", "razorclaw", { regExpSearch : /razorclaw/i, name : "Razorclaw shifter", source : [["UA:E", 2]], plural : "Razorclaw shifters", weaponOptions : [{ baseWeapon : "unarmed strike", regExpSearch : /\brazorclaw\b/i, name : "Razorclaw", source : [["UA:E", 2]], damage : [1, "", "slashing"], description : "Only while shifted, use instead of unarmed strike: Can use as bonus action; Finesse", selectNow : true }], scorestxt : "", scores : [0, 2, 0, 0, 0, 0], trait : "Razorclaw Shifter (+2 Dexterity)\nShifting:\n On my turn, I can shift as a bonus action. Shifting lasts for 1 minute or until I end it on my turn as a bonus action. I must finish a short rest before I can shift again.\n While shifted, I gain temporary hit points equal to my level + my Constitution modifier (minimum of 1) and, as a bonus action, I can make an unarmed strike that can use my Dexterity for the attack roll and damage, dealing slashing damage." }); AddRacialVariant("shifter-ua", "wildhunt", { regExpSearch : /wildhunt/i, name : "Wildhunt shifter", source : [["UA:E", 3]], plural : "Wildhunt shifters", scorestxt : "", scores : [0, 1, 0, 0, 1, 0], trait : "Wildhunt Shifter (+1 Dexterity, +1 Wisdom)\nShifting:\n On my turn, I can shift as a bonus action. Shifting lasts for 1 minute or until I end it on my turn as a bonus action. I must finish a short rest before I can shift again.\n While shifted, I gain temporary hit points equal to my level + my Constitution modifier (minimum of 1) and I gain advantage on all Wisdom-based checks and saving throws." }); // 12 variants of the Dragonmark feat FeatsList["dragonmark-ua"] = { name : "Dragonmark", source : [["UA:E", 6]], description : "Select the type of dragonmark using the little square button in this feat line.", choices : ["Detection", "Finding", "Handling", "Healing", "Hospitality", "Making", "Passage", "Scribing", "Sentinel", "Shadow", "Storm", "Warding"], "detection" : { descriptionFull : "Your have the magical mark of Detection, the dragonmark of House Medani, and are a member of that house.\n You gain the ability to innately cast spells and cantrips, using Wisdom as your spellcasting ability. You cast each spell at its lowest level. Once you cast a given spell this way, you must finish a long rest before you can cast it innately again. You must still expend any material components. Your dragonmark confers the following benefits:\n " + toUni("Least Dragonmark") + ". When you first take this feat, you gain the least dragonmark. You learn the following spells: Detect Magic, Mage Hand\n " + toUni("Lesser Dragonmark") + ". At 5th level and higher, your mark becomes more potent, improving to lesser dragonmark. You learn the following spell: Detect Thoughts\n " + toUni("Greater Dragonmark") + ". At 9th level and higher, your mark's power increases again, becoming a greater dragonmark. You learn the following spell: Clairvoyance", description : "I learn the Mage Hand cantrip. I can also cast Detect Magic, Detect Thoughts (from 5th level onwards), and Clairvoyance (from 9th level onwards), each once per long rest. Wisdom is my spellcasting ability for these.", spellcastingBonus : [{ name : "Dragonmark", spellcastingAbility : 5, spells : ["mage hand", "detect magic", "detect thoughts", "clairvoyance"], selection : ["mage hand", "detect magic", "detect thoughts", "clairvoyance"], times : [2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4], firstCol : 'oncelr' }] }, "finding" : { descriptionFull : "Your have the magical mark of Finding, the dragonmark of House Tharashk, and are a member of that house.\n You gain the ability to innately cast spells and cantrips, using Wisdom as your spellcasting ability. You cast each spell at its lowest level. Once you cast a given spell this way, you must finish a long rest before you can cast it innately again. You must still expend any material components. Your dragonmark confers the following benefits:\n " + toUni("Least Dragonmark") + ". When you first take this feat, you gain the least dragonmark. You learn the following spells: Identify, Mage Hand\n " + toUni("Lesser Dragonmark") + ". At 5th level and higher, your mark becomes more potent, improving to lesser dragonmark. You learn the following spell: Locate Object\n " + toUni("Greater Dragonmark") + ". At 9th level and higher, your mark's power increases again, becoming a greater dragonmark. You learn the following spell: Clairvoyance", description : "I learn the Mage Hand cantrip. I can also cast Identify, Locate Object (from 5th level onwards), and Clairvoyance (from 9th level onwards), each once per long rest. Wisdom is my spellcasting ability for these.", spellcastingBonus : [{ name : "Dragonmark", spellcastingAbility : 5, spells : ["mage hand", "identify", "locate object", "clairvoyance"], selection : ["mage hand", "identify", "locate object", "clairvoyance"], times : [2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4], firstCol : 'oncelr' }] }, "handling" : { descriptionFull : "Your have the magical mark of Handling, the dragonmark of House Vadalis, and are a member of that house.\n You gain the ability to innately cast spells and cantrips, using Wisdom as your spellcasting ability. You cast each spell at its lowest level. Once you cast a given spell this way, you must finish a long rest before you can cast it innately again. You must still expend any material components. Your dragonmark confers the following benefits:\n " + toUni("Least Dragonmark") + ". When you first take this feat, you gain the least dragonmark. You learn the following spells: Druidcraft, Speak with Animals\n " + toUni("Lesser Dragonmark") + ". At 5th level and higher, your mark becomes more potent, improving to lesser dragonmark. You learn the following spell: Beast Sense\n " + toUni("Greater Dragonmark") + ". At 9th level and higher, your mark's power increases again, becoming a greater dragonmark. You learn the following spell: Conjure Animals", description : "I learn the Druidcraft cantrip. I can also cast Speak with Animals, Beast Sense (from 5th level onwards), and Conjure Animals (from 9th level onwards), each once per long rest. Wisdom is my spellcasting ability for these.", spellcastingBonus : [{ name : "Dragonmark", spellcastingAbility : 5, spells : ["druidcraft", "speak with animals", "beast sense", "conjure animals"], selection : ["druidcraft", "speak with animals", "beast sense", "conjure animals"], times : [2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4], firstCol : 'oncelr' }] }, "healing" : { descriptionFull : "Your have the magical mark of Healing, the dragonmark of House Jorasco, and are a member of that house.\n You gain the ability to innately cast spells and cantrips, using Wisdom as your spellcasting ability. You cast each spell at its lowest level. Once you cast a given spell this way, you must finish a long rest before you can cast it innately again. You must still expend any material components. Your dragonmark confers the following benefits:\n " + toUni("Least Dragonmark") + ". When you first take this feat, you gain the least dragonmark. You learn the following spells: Cure Wounds, Spare the Dying\n " + toUni("Lesser Dragonmark") + ". At 5th level and higher, your mark becomes more potent, improving to lesser dragonmark. You learn the following spell: Lesser Restoration\n " + toUni("Greater Dragonmark") + ". At 9th level and higher, your mark's power increases again, becoming a greater dragonmark. You learn the following spell: Revivify", description : "I learn the Spare the Dying cantrip. I can also cast Cure Wounds, Lesser Restoration (from 5th level onwards), and Revivify (from 9th level onwards), each once per long rest. Wisdom is my spellcasting ability for these.", spellcastingBonus : [{ name : "Dragonmark", spellcastingAbility : 5, spells : ["spare the dying", "cure wounds", "lesser restoration", "revivify"], selection : ["spare the dying", "cure wounds", "lesser restoration", "revivify"], times : [2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4], firstCol : 'oncelr' }] }, "hospitality" : { descriptionFull : "Your have the magical mark of Hospitality, the dragonmark of House Ghallanda, and are a member of that house.\n You gain the ability to innately cast spells and cantrips, using Charisma as your spellcasting ability. You cast each spell at its lowest level. Once you cast a given spell this way, you must finish a long rest before you can cast it innately again. You must still expend any material components. Your dragonmark confers the following benefits:\n " + toUni("Least Dragonmark") + ". When you first take this feat, you gain the least dragonmark. You learn the following spells: Friends, Unseen Servant\n " + toUni("Lesser Dragonmark") + ". At 5th level and higher, your mark becomes more potent, improving to lesser dragonmark. You learn the following spell: Rope Trick\n " + toUni("Greater Dragonmark") + ". At 9th level and higher, your mark's power increases again, becoming a greater dragonmark. You learn the following spell: Leomund's Tiny Hut", description : "I learn the Friends cantrip. I can also cast Unseen Servant, Rope Trick (from 5th level onwards), and Leomund's Tiny Hut (from 9th level onwards), each once per long rest. Charisma is my spellcasting ability for these.", spellcastingBonus : [{ name : "Dragonmark", spellcastingAbility : 6, spells : ["friends", "unseen servant", "rope trick", "leomund's tiny hut"], selection : ["friends", "unseen servant", "rope trick", "leomund's tiny hut"], times : [2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4], firstCol : 'oncelr' }] }, "making" : { descriptionFull : "Your have the magical mark of Making, the dragonmark of House Cannith, and are a member of that house.\n You gain the ability to innately cast spells and cantrips, using Intelligence as your spellcasting ability. You cast each spell at its lowest level. Once you cast a given spell this way, you must finish a long rest before you can cast it innately again. You must still expend any material components. Your dragonmark confers the following benefits:\n " + toUni("Least Dragonmark") + ". When you first take this feat, you gain the least dragonmark. You learn the following spells: Identify, Mending\n " + toUni("Lesser Dragonmark") + ". At 5th level and higher, your mark becomes more potent, improving to lesser dragonmark. You learn the following spell: Magic Weapon\n " + toUni("Greater Dragonmark") + ". At 9th level and higher, your mark's power increases again, becoming a greater dragonmark. You learn the following spell: Fabricate", description : "I learn the Mending cantrip. I can also cast Identify, Magic Weapon (from 5th level onwards), and Fabricate (from 9th level onwards), each once per long rest. Intelligence is my spellcasting ability for these.", spellcastingBonus : [{ name : "Dragonmark", spellcastingAbility : 4, spells : ["mending", "identify", "magic weapon", "fabricate"], selection : ["mending", "identify", "magic weapon", "fabricate"], times : [2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4], firstCol : 'oncelr' }] }, "passage" : { descriptionFull : "Your have the magical mark of Passage, the dragonmark of House Orien, and are a member of that house.\n You gain the ability to innately cast spells and cantrips, using Intelligence as your spellcasting ability. You cast each spell at its lowest level. Once you cast a given spell this way, you must finish a long rest before you can cast it innately again. You must still expend any material components. Your dragonmark confers the following benefits:\n " + toUni("Least Dragonmark") + ". When you first take this feat, you gain the least dragonmark. You learn the following spells: Expeditious Retreat, Light\n " + toUni("Lesser Dragonmark") + ". At 5th level and higher, your mark becomes more potent, improving to lesser dragonmark. You learn the following spell: Misty Step\n " + toUni("Greater Dragonmark") + ". At 9th level and higher, your mark's power increases again, becoming a greater dragonmark. You learn the following spell: Teleportation Circle", description : "I learn the Light cantrip. I can also cast Expeditious Retreat, Misty Step (from 5th level onwards), and Teleportation Circle (from 9th level onwards), each once per long rest. Intelligence is my spellcasting ability for these.", spellcastingBonus : [{ name : "Dragonmark", spellcastingAbility : 4, spells : ["light", "expeditious retreat", "misty step", "teleportation circle"], selection : ["light", "expeditious retreat", "misty step", "teleportation Circle"], times : [2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4], firstCol : 'oncelr' }] }, "scribing" : { descriptionFull : "Your have the magical mark of Scribing, the dragonmark of House Sivis, and are a member of that house.\n You gain the ability to innately cast spells and cantrips, using Intelligence as your spellcasting ability. You cast each spell at its lowest level. Once you cast a given spell this way, you must finish a long rest before you can cast it innately again. You must still expend any material components. Your dragonmark confers the following benefits:\n " + toUni("Least Dragonmark") + ". When you first take this feat, you gain the least dragonmark. You learn the following spells: Comprehend Languages, Message\n " + toUni("Lesser Dragonmark") + ". At 5th level and higher, your mark becomes more potent, improving to lesser dragonmark. You learn the following spell: Sending\n " + toUni("Greater Dragonmark") + ". At 9th level and higher, your mark's power increases again, becoming a greater dragonmark. You learn the following spell: Tongues", description : "I learn the Message cantrip. I can also cast Comprehend Languages, Sending (from 5th level onwards), and Tongues (from 9th level onwards), each once per long rest. Intelligence is my spellcasting ability for these.", spellcastingBonus : [{ name : "Dragonmark", spellcastingAbility : 4, spells : ["message", "comprehend languages", "sending", "tongues"], selection : ["message", "comprehend languages", "sending", "tongues"], times : [2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4], firstCol : 'oncelr' }] }, "sentinel" : { descriptionFull : "Your have the magical mark of Sentinel, the dragonmark of House Deneith, and are a member of that house.\n You gain the ability to innately cast spells and cantrips, using Wisdom as your spellcasting ability. You cast each spell at its lowest level. Once you cast a given spell this way, you must finish a long rest before you can cast it innately again. You must still expend any material components. Your dragonmark confers the following benefits:\n " + toUni("Least Dragonmark") + ". When you first take this feat, you gain the least dragonmark. You learn the following spells: Blade Ward, Compelled Duel\n " + toUni("Lesser Dragonmark") + ". At 5th level and higher, your mark becomes more potent, improving to lesser dragonmark. You learn the following spell: Blur\n " + toUni("Greater Dragonmark") + ". At 9th level and higher, your mark's power increases again, becoming a greater dragonmark. You learn the following spell: Protection from Energy", description : "I learn the Blade Ward cantrip. I can also cast Compelled Duel, Blur (from 5th level onwards), and Protection from Energy (from 9th level onwards), each once per long rest. Wisdom is my spellcasting ability for these.", spellcastingBonus : [{ name : "Dragonmark", spellcastingAbility : 5, spells : ["blade ward", "compelled duel", "blur", "protection from energy"], selection : ["blade ward", "compelled duel", "blur", "protection from energy"], times : [2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4], firstCol : 'oncelr' }] }, "shadow" : { descriptionFull : "Your have the magical mark of Shadow, the dragonmark of House Phiarlan and House Thuranni, and are a member of one of those houses.\n You gain the ability to innately cast spells and cantrips, using Charisma as your spellcasting ability. You cast each spell at its lowest level. Once you cast a given spell this way, you must finish a long rest before you can cast it innately again. You must still expend any material components. Your dragonmark confers the following benefits:\n " + toUni("Least Dragonmark") + ". When you first take this feat, you gain the least dragonmark. You learn the following spells: Dancing Lights, Disguise Self\n " + toUni("Lesser Dragonmark") + ". At 5th level and higher, your mark becomes more potent, improving to lesser dragonmark. You learn the following spell: Darkness\n " + toUni("Greater Dragonmark") + ". At 9th level and higher, your mark's power increases again, becoming a greater dragonmark. You learn the following spell: Nondetection", description : "I learn the Dancing Lights cantrip. I can also cast Disguise Self, Darkness (from 5th level onwards), and Nondetection (from 9th level onwards), each once per long rest. Charisma is my spellcasting ability for these.", spellcastingBonus : [{ name : "Dragonmark", spellcastingAbility : 6, spells : ["dancing lights", "disguise self", "darkness", "nondetection"], selection : ["dancing lights", "disguise self", "darkness", "nondetection"], times : [2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4], firstCol : 'oncelr' }] }, "storm" : { descriptionFull : "Your have the magical mark of Storm, the dragonmark of House Lyrander, and are a member of that house.\n You gain the ability to innately cast spells and cantrips, using Intelligence as your spellcasting ability. You cast each spell at its lowest level. Once you cast a given spell this way, you must finish a long rest before you can cast it innately again. You must still expend any material components. Your dragonmark confers the following benefits:\n " + toUni("Least Dragonmark") + ". When you first take this feat, you gain the least dragonmark. You learn the following spells: Fog Cloud, Shocking Grasp\n " + toUni("Lesser Dragonmark") + ". At 5th level and higher, your mark becomes more potent, improving to lesser dragonmark. You learn the following spell: Gust of Wind\n " + toUni("Greater Dragonmark") + ". At 9th level and higher, your mark's power increases again, becoming a greater dragonmark. You learn the following spell: Sleet Storm", description : "I learn the Shocking Grasp cantrip. I can also cast Fog Cloud, Gust of Wind (from 5th level onwards), and Sleet Storm (from 9th level onwards), each once per long rest. Intelligence is my spellcasting ability for these.", spellcastingBonus : [{ name : "Dragonmark", spellcastingAbility : 4, spells : ["shocking grasp", "fog cloud", "gust of wind", "sleet storm"], selection : ["shocking grasp", "fog cloud", "gust of wind", "sleet storm"], times : [2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4], firstCol : 'oncelr' }] }, "warding" : { descriptionFull : "Your have the magical mark of Warding, the dragonmark of House Kundarak, and are a member of that house.\n You gain the ability to innately cast spells and cantrips, using Intelligence as your spellcasting ability. You cast each spell at its lowest level. Once you cast a given spell this way, you must finish a long rest before you can cast it innately again. You must still expend any material components. Your dragonmark confers the following benefits:\n " + toUni("Least Dragonmark") + ". When you first take this feat, you gain the least dragonmark. You learn the following spells: Alarm, Resistance\n " + toUni("Lesser Dragonmark") + ". At 5th level and higher, your mark becomes more potent, improving to lesser dragonmark. You learn the following spell: Arcane Lock\n " + toUni("Greater Dragonmark") + ". At 9th level and higher, your mark's power increases again, becoming a greater dragonmark. You learn the following spell: Magic Circle", description : "I learn the Resistance cantrip. I can also cast Alarm, Arcane Lock (from 5th level onwards), and Magic Circle (from 9th level onwards), each once per long rest. Intelligence is my spellcasting ability for these.", spellcastingBonus : [{ name : "Dragonmark", spellcastingAbility : 4, spells : ["resistance", "alarm", "arcane lock", "magic circle"], selection : ["resistance", "alarm", "arcane lock", "magic circle"], times : [2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4], firstCol : 'oncelr' }] } } // Adds a subclass for the Wizard, called "Tradition of the Artificer" AddSubClass("wizard", "artificer-ua", { regExpSearch : /^((?=.*(wizard|mage|magus))(?=.*artificer))|(?=.*infuser).*$/i, subname : "Tradition of the Artificer", source : [["UA:E", 3]], fullname : "Wizard (Artificer)", features : { "subclassfeature2" : { name : "Infuse Potions", source : [["UA:E", 3]], minlevel : 2, description: desc([ "I can produce magic potions if I spend 10 minutes and expend a spell slot", "I can not regain the spell slot until the potion is consumed or a week has passed", ]), additional : ["", "3 potions", "3 potions", "3 potions", "3 potions", "3 potions", "3 potions", "3 potions", "3 potions", "4 potions", "4 potions", "4 potions", "4 potions", "4 potions", "4 potions", "4 potions", "4 potions", "4 potions", "4 potions", "4 potions"] }, "subclassfeature2.1" : { name : "Infuse Scrolls", source : [["UA:E", 4]], minlevel : 2, description: desc([ "I can produce a scroll after a short rest if I spend 10 minutes and my Arcane Recovery", "I subtract the spell's level from the levels worth of slots I regain using Arcane Recovery", "This reduction applies till the scroll is used and I finish a long rest", ]), additional : ["", "1 scroll", "1 scroll", "1 scroll", "1 scroll", "1 scroll", "1 scroll", "1 scroll", "1 scroll", "2 scrolls", "2 scrolls", "2 scrolls", "2 scrolls", "2 scrolls", "2 scrolls", "2 scrolls", "2 scrolls", "2 scrolls", "2 scrolls", "2 scrolls"] }, "subclassfeature6" : { name : "Infuse Weapons and Armor", source : [["UA:E", 4]], minlevel : 6, description: desc([ "I can spend 10 minutes to produce a magic weapon, armor, a shield, or ammunition", "The item retains its magic for 8 hours and the spell slot I expend is:", "2nd: +1 ammunition (20 pieces), 3rd: +1 weapon or +1 shield, 4th: +1 armor,", "5th: +2 weapon or +2 ammunition (20 pieces), 6th: +3 armor.", ]), additional : ["", "", "", "", "", "1 weapon or armor", "1 weapon or armor", "1 weapon or armor", "1 weapon or armor", "2 weapons or armor", "2 weapons or armor", "2 weapons or armor", "2 weapons or armor", "2 weapons or armor", "2 weapons or armor", "2 weapons or armor", "2 weapons or armor", "2 weapons or armor", "2 weapons or armor", "2 weapons or armor"] }, "subclassfeature10" : { name : "Superior Artificer", source : [["UA:E", 4]], minlevel : 10, description: desc("I can create one additional scroll, potion, weapon, or armor when I use Infuse") }, "subclassfeature14" : { name : "Master Artificer", source : [["UA:E", 4]], minlevel : 14, description: desc([ "I can produce a variety of magic items from Tables A and B from the DMG", "It takes 1 week for such an item and I cannot do it again for a month", ]), usages : 1, recovery : "Month" } } }); // ua_20150406_Modifying-Classes.js // This file adds the content from the Unearthed Arcana: Modifying Classes article to MPMB's Character Record Sheet // Define the source SourceList["UA:MC"] = { name : "Unearthed Arcana: Modifying Classes", abbreviation : "UA:MC", group : "Unearthed Arcana", url : "https://media.wizards.com/2015/downloads/dnd/UA3_ClassDesignVariants.pdf", date : "2015/04/06" }; // Also needs the PHB source, as the spell-less ranger uses stuff from there if (!SourceList.P) { SourceList.P = { name : "Player's Handbook", abbreviation : "PHB", group : "Primary Sources", url : "https://dnd.wizards.com/products/rpg_playershandbook", date : "2014/08/19" }; }; // Adds a subclass for the Sorcerer, called "Favored Soul", but only have it added at the very end, after all cleric subclasses have been defined RunFunctionAtEnd(function() { var SorcererSubclassFavoredSoul = AddSubClass("sorcerer", "favored soul-ua", { regExpSearch : /^(?=.*favou?red)(?=.*soul).*$/i, subname : "Favored Soul", source : [["UA:MC", 8]], fullname : "Favored Soul", attacks : [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], features : { "subclassfeature1" : { name : "Bonus Proficiencies", source : [["UA:MC", 9]], minlevel : 1, description: desc("I gain proficiency with light armor, medium armor, shields, and simple weapons"), armorProfs : [true, true, false, true], weaponProfs : [true, false] }, "subclassfeature1.1" : { name : "Chosen of the Gods", source : [["UA:MC", 8]], minlevel : 1, description: desc([ 'Choose a Cleric Domain using the "Choose Feature" button above', "I add the chosen domain's spells to my known spells, when they are of a level I can cast", "These count as sorcerer spells, but do not count against the number of spells I can know", ]), choices : [] }, "subclassfeature14" : { name : "Divine Wings", source : [["UA:MC", 8]], minlevel : 14, description: desc([ "As a bonus action, I sprout feathered or bat wings from my back unless blocked by armor", "I gain a fly speed equal to my current speed until I dismiss the wings as a bonus action", ]), action : [["bonus action", " (start/stop)"]], speed : { fly : { spd : "walk", enc : "walk" } } }, "subclassfeature18" : { name : "Power of the Chosen", source : [["UA:MC", 8]], minlevel : 18, description: desc([ "When I cast a spell I gained from the Chosen of the Gods class feature, I heal myself", "I regain a number of HP equal to my Charisma modifier (minimum 1) + the spell's level", ]), } } }); // Adding all cleric domain spells to the options of the first level ability "Chosen of the Gods" var FSfeat = ClassSubList[SorcererSubclassFavoredSoul].features["subclassfeature1.1"]; for (var i = 0; i < ClassList.cleric.subclasses[1].length; i++) { var cDomain = ClassSubList[ClassList.cleric.subclasses[1][i]]; if (cDomain && cDomain.spellcastingExtra) { var eSpells = newObj(cDomain.spellcastingExtra); eSpells[100] = "AddToKnown"; var dSource = cDomain.source ? cDomain.source : cDomain.features["subclassfeature1"] && cDomain.features["subclassfeature1"].source ? cDomain.features["subclassfeature1"].source :[["UA:MC", 8]]; var suffix = 1; var entryDoNm = cDomain.subname; while (FSfeat.choices.indexOf(entryDoNm) !== -1) { suffix += 1; entryDoNm = cDomain.subname + " (" + suffix + ")"; }; FSfeat.choices.push(entryDoNm); FSfeat[entryDoNm.toLowerCase()] = { name : "Chosen of the Gods: " + cDomain.subname, source : dSource, spellcastingExtra : eSpells, description: desc([ "I add the " + cDomain.subname.toLowerCase() + " spells to my known spells, if they are of a level I can cast", "These count as sorcerer spells, but do not count against the number of spells I can know", ]), }; }; }; }); // A version of the ranger, the spell-less ranger ClassList["spell-less ranger"] = { regExpSearch : /^(?=.*spell.?less)((?=.*(ranger|strider))|((?=.*(nature|natural))(?=.*(knight|fighter|warrior|warlord|trooper)))).*$/i, name : "Spell-less Ranger", source : [["UA:MC", 6]], primaryAbility : "Dexterity and Wisdom", abilitySave : 1, abilitySaveAlt : 2, prereqs : "Dexterity 13 and Wisdom 13", improvements : [0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5, 5], die : 10, saves : ["Str", "Dex"], skillstxt : { primary : "Choose three from Animal Handling, Athletics, Insight, Investigation, Nature, Perception, Stealth, and Survival", secondary : "Choose one from Animal Handling, Athletics, Insight, Investigation, Nature, Perception, Stealth, and Survival" }, armorProfs : { primary : [true, true, false, true], secondary : [true, true, false, true] }, weaponProfs : { primary : [true, true], secondary : [true, true] }, equipment : "Spell-less Ranger starting equipment:\n \u2022 Scale mail -or- leather armor;\n \u2022 Two shortswords -or- two simple melee weapons;\n \u2022 A dungeoneer's pack -or- an explorer's pack;\n \u2022 A longbow and a quiver of 20 arrows.\n\nAlternatively, choose 5d4 \xD7 10 gp worth of starting equipment instead of both the class' and the background's starting equipment.", subclasses : ["Ranger Archetype", []], subclassGainedLevel : 3, attacks : [1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], features : { "favored enemy" : ClassList.ranger.features["favored enemy"], "natural explorer" : ClassList.ranger.features["natural explorer"], "combat superiority" : { name : "Combat Superiority", source : [["UA:MC", 6]], minlevel : 2, description: desc([ "I gain a number of superiority dice that I can use to fuel special Maneuvers", "I regain all superiority dice after a short rest", ]), additional : "d8", usages : levels.map( function(n) { return n < 2 ? "" : n < 9 ? 4 : n < 17 ? 5 : 6; }), recovery : "short rest" }, "combat maneuvers" : { name : "Combat Maneuvers", source : [["UA:MC", 6]], minlevel : 2, description: desc([ 'Use the "Choose Feature" button above to add a Maneuver to the third page', "I can use a Maneuver by expending a superiority die (only one Maneuver per attack)", ]), additional : levels.map( function(n) { if (n < 2) return ""; return (n < 5 ? 2 : n < 9 ? 3 : n < 13 ? 4 : n < 17 ? 5 : 6) + " maneuvers known"; }), extraname : "Maneuver", extrachoices : ["Commander's Strike", "Disarming Attack", "Distracting Strike", "Evasive Footwork", "Feinting Attack", "Goading Attack", "Lunging Attack", "Maneuvering Attack", "Menacing Attack", "Parry", "Precision Attack", "Pushing Attack", "Rally", "Riposte", "Sweeping Attack", "Trip Attack"], extraTimes : levels.map(function (n) { return n < 2 ? 0 : n < 5 ? 2 : n < 9 ? 3 : n < 13 ? 4 : n < 17 ? 5 : 6; }), "commander's strike" : { name : "Commander's Strike", source : [["P", 74]], description: desc([ "I forgo one attack of my Attack action to use a bonus action to direct an ally I see/hear", "The ally can use a reaction to make an attack, adding the superiority die to damage", ]), action : [["bonus action", " (with Attack action)"]] }, "disarming attack" : { name : "Disarming Attack", source : [["P", 74]], description: desc([ "Use after hitting a creature; I add the superiority die to my attack's damage", "Target makes a Strength save or drops a held object of my choice to its feet", ]), }, "distracting strike" : { name : "Distracting Strike", source : [["P", 74]], description: desc([ "Use after hitting a creature; I add the superiority die to my attack's damage", "The next attack of an ally before my next turn has adv. against the creature", ]), }, "evasive footwork" : { name : "Evasive Footwork", source : [["P", 74]], description: desc("Use when moving; I add the superiority die to my AC until I stop moving") }, "feinting attack" : { name : "Feinting Attack", source : [["P", 74]], description: desc([ "As a bonus action, I can feint to gain adv. on my next attack against a target within 5 ft", "If the attack hits, I add the superiority die to my attack's damage", ]), action : [["bonus action", ""]] }, "goading attack" : { name : "Goading Attack", source : [["P", 74]], description: desc([ "Use after hitting a creature; I add the superiority die to my attack's damage", "Target makes a Wis save or has disadv. vs. other targets until the end of my next turn", ]), }, "lunging attack" : { name : "Lunging Attack", source : [["P", 74]], description: desc([ "I can spend a superiority die to increase the reach of a melee weapon attack by 5 ft", "If the attack hits, I add the superiority die to my attack's damage", ]), }, "maneuvering attack" : { name : "Maneuvering Attack", source : [["P", 74]], description: desc([ "Use after hitting a creature; I add the superiority die to my attack's damage", "Ally can use reaction to move half speed without opportunity attack from the target", ]), }, "menacing attack" : { name : "Menacing Attack", source : [["P", 74]], description: desc([ "Use after hitting a creature; I add the superiority die to my attack's damage", "Target makes a Wisdom save or is frightened of me until the end of my next turn", ]), }, "parry" : { name : "Parry", source : [["P", 74]], description: desc("When damaged in melee, I can use a reaction to reduce it by superiority die + Dex mod"), action : [["reaction", " (when damaged in melee)"]] }, "precision attack" : { name : "Precision Attack", source : [["P", 74]], description: desc("I add the superiority die to my attack roll, either before or after rolling") }, "pushing attack" : { name : "Pushing Attack", source : [["P", 74]], description: desc([ "Use after hitting a creature; I add the superiority die to the attack's damage", "If target is Large or smaller, it must make a Strength save or be pushed up to 15 ft away", ]), }, "rally" : { name : "Rally", source : [["P", 74]], description: desc("Ally that can see/hear me gets temporary HP equal to superiority die + Charisma mod"), action : [["bonus action", ""]] }, "riposte" : { name : "Riposte", source : [["P", 74]], description: desc([ "When missed in melee, I can use my reaction to make one melee attack vs. the attacker", "If the attack hits, I add the superiority die to my attack's damage", ]), action : [["reaction", " (after missed in melee)"]] }, "sweeping attack" : { name : "Sweeping Attack", source : [["P", 74]], description: desc([ "Use after hitting a creature and a second creature is within 5 ft of the first", "If the original attack roll hits this second creature, it takes the superiority die in damage", ]), }, "trip attack" : { name : "Trip Attack", source : [["P", 74]], description: desc([ "Use after hitting a creature; I add the superiority die to the attack's damage", "If target is Large or smaller, it must make a Strength save or be knocked prone", ]), } }, "fighting style" : ClassList.ranger.features["fighting style"], "poultices" : { name : "Poultices", source : [["UA:MC", 7]], minlevel : 3, description : desc([ "In 1 hour, I can create a number of poultices equal to my Wisdom modifier (min 1)", "The number of poultices I can have with me can't exceed my Wisdom modifier (min 1)", "I can applying a poultice in 1 minute, healing a creature; Poultices last for 24 hours" ]), additional : levels.map( function(n) { if (n < 3) return ""; return "heals " + Math.ceil(n/2) + "d6"; }) }, "primeval awareness" : { name : "Primeval Awareness", source : [["UA:MC", 6]], minlevel : 3, description : desc([ "As an action, I can focus my awareness for 1 min, once per short rest", "Out to 1 mile (6 in favored terrain), I sense if certain types of creatures are present", "These types are: aberration, celestial, dragon, elemental, fey, fiend, and undead" ]), action : [["action", ""]], usages : 1, recovery : "short rest" }, "subclassfeature3" : { name : "Ranger Archetype", source : [["UA:MC", 6]], minlevel : 3, description: desc([ 'Choose a Ranger Archetype you strive to emulate and put it in the "Class" field', "Choose either Spell-less Beast Master or Spell-less Hunter", ]), }, "land's stride" : ClassList.ranger.features["land's stride"], "natural antivenom" : { name : "Natural Antivenom", source : [["UA:MC", 7]], minlevel : 9, description : desc([ "I have advantage on saves vs. poison and resistance to poison damage", "When I use a poultice, in addition to healing, I cure one poison effect on the creature" ]), savetxt : { adv_vs : ["poison"] }, dmgres : ["Poison"] }, "hide in plain sight" : ClassList.ranger.features["land's stride"], "call natural allies" : { name : "Call Natural Allies", source : [["UA:MC", 7]], minlevel : 13, description : desc([ "While in an area that is my Favored Terrain, I can call on beasts within 1 mile to help", "The DM determines the beasts: 1\xD7CR 2, 2\xD7CR 1, 4\xD7CR 1/2, or 8\xD7CR 1/4", "They will fight alongside me, are friendly to me and my allies, and help up to 1 hour", "After I use these feature, I can't use it in the same general area again for 24 hours" ]) }, "vanish" : ClassList.ranger.features["vanish"], "relentless" : { name : "Relentless", source : [["UA:MC", 7]], minlevel : 17, description: desc("I regain one superiority die if I have no more remaining when I roll initiative") }, "feral senses" : ClassList.ranger.features["feral senses"], "foe slayer" : ClassList.ranger.features["foe slayer"] } }; // Create the Hunter subclass for the spell-less ranger var UAMC_SLR_Hunter = newObj(ClassSubList["ranger-hunter"]); UAMC_SLR_Hunter.source = ["UA:MC", 6]; delete UAMC_SLR_Hunter.fullname; UAMC_SLR_Hunter.regExpSearch = /^(?=.*spell.?less)(?!.*(monster|barbarian|bard|cleric|druid|fighter|monk|paladin|rogue|sorcerer|warlock|wizard))(?=.*(hunter|huntress|hunts(wo)?m(e|a)n)).*$/i; AddSubClass("spell-less ranger", "hunter-ua", UAMC_SLR_Hunter); // Create the Beast Master subclass for the spell-less ranger if (ClassSubList["ranger-beast master"]) { var UAMC_SLR_Beast_Master = newObj(ClassSubList["ranger-beast master"]); UAMC_SLR_Beast_Master.source = ["UA:MC", 6]; delete UAMC_SLR_Beast_Master.fullname; UAMC_SLR_Beast_Master.regExpSearch = /^(?=.*spell.?less)(?=.*(animal|beast))((?=.*(master|ranger|strider))|((?=.*(nature|natural|green))(?=.*(knight|fighter|warrior|warlord|trooper)))).*$/i; UAMC_SLR_Beast_Master.features["subclassfeature15"] = { name : "Beastly Coordination", source : [["UA:MC", 7]], minlevel : 15, description: desc("My companion can, as a reaction, halve an attack's damage from an attacker that I see") }; AddSubClass("spell-less ranger", "beast master-ua", UAMC_SLR_Beast_Master); }; // ua_20150504_Waterborne-Adventures.js // This file adds the content from the Unearthed Arcana: Waterborne Adventures article to MPMB's Character Record Sheet // Define the source SourceList["UA:WA"] = { name : "Unearthed Arcana: Waterborne Adventures", abbreviation : "UA:WA", group : "Unearthed Arcana", url : "https://media.wizards.com/2015/downloads/dnd/UA_Waterborne_v3.pdf", date : "2015/05/04" }; // New Fighting Style AddFightingStyle(["fighter", "ranger", "paladin"], "Mariner", { // Still valid 2021-09-21 name : "Mariner Fighting Style", source : [["UA:WA", 3]], description: desc([ "While not wearing heavy armor or using a shield, I gain +1 AC and swim/climb speed", "The swimming and climbing speeds are equal to my current walking speed", ]), speed : { climb : { spd : "walk", enc : "walk" }, swim : { spd : "walk", enc : "walk" } }, extraAC : { mod : 1, text : "I gain a +1 bonus to AC while I'm not wearing heavy armor and not using a shield.", stopeval : function (v) { return v.heavyArmor || v.usingShield; } } }); // Add the Minotaur (Krynn) race and its three variants RaceList["minotaur-ua"] = { regExpSearch : /minotaur/i, name : "Minotaur", source : [["UA:WA", 1]], plural : "Minotaurs", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common"], toolProfs : ["Navigator's tools", "Vehicles (water)"], weaponOptions : [{ regExpSearch : /\bhorns?\b/i, name : "Horns", source : [["UA:WA", 1]], ability : 1, type : "Natural", damage : [1, 10, "piercing"], range : "Melee", description : "Advantage on all checks made to shove a creature, but not to avoid being shoved myself", abilitytodamage : true, selectNow : true }], age : " reach adulthood around age 17 and live up to 150 years", height : " are well over 6 feet tall", weight : " weigh around 300 lb", heightMetric : " are well over 1,8 metres tall", weightMetric : " weigh around 135 kg", scorestxt : "+1 Strength, and either +1 Intelligence, +1 Wisdom, or another +1 Strength", scores : [1, 0, 0, 0, 0, 0], trait : "Minotaur (+1 Strength, and either +1 Int, Wis, or Str) use \"Racial Options\" button\nHorns: I am proficient with my horns, a 1d10 piercing damage melee weapon that grant me advantage on shoving a creature, but not to avoid being shoved myself.\nGoring Rush: When taking a Dash action, I can make a horns attack as a bonus action.\nHammering Horns: When taking a melee Attack action, I can attempt to shove with my horns as a bonus action. I cannot use this to knock a creature prone.\nLabyrinthine Recall: I can perfectly recall any path I have travelled.", features : { "goring rush" : { name : "Goring Rush", minlevel : 1, action : [["bonus action", " (with Dash)"]] }, "hammering horns" : { name : "Hammering Horns", minlevel : 1, action : [["bonus action", " (after hit)"]] } } }; AddRacialVariant("minotaur-ua", "cunning", { regExpSearch : /(cunning|wisdom)/i, name : "Minotaur [Cunning]", source : [["UA:WA", 2]], scorestxt : "", scores : [1, 0, 0, 0, 1, 0], trait : "Minotaur [cunning] (+1 Strength, +1 Wisdom)\nHorns: I am proficient with my horns, a 1d10 piercing damage melee weapon that grant me advantage on shoving a creature, but not to avoid being shoved myself.\nGoring Rush: When taking a Dash action, I can make a horns attack as a bonus action.\nHammering Horns: When taking a melee Attack action, I can attempt to shove with my horns as a bonus action. I cannot use this to knock a creature prone.\nLabyrinthine Recall: I can perfectly recall any path I have travelled." }); AddRacialVariant("minotaur-ua", "intellect", { regExpSearch : /(intellect|intelligence)/i, name : "Minotaur [Intellect]", source : [["UA:WA", 2]], scorestxt : "", scores : [1, 0, 0, 1, 0, 0], trait : "Minotaur [intellect] (+1 Strength, +1 Intelligence)\nHorns: I am proficient with my horns, a 1d10 piercing damage melee weapon that grant me advantage on shoving a creature, but not to avoid being shoved myself.\nGoring Rush: When taking a Dash action, I can make a horns attack as a bonus action.\nHammering Horns: When taking a melee Attack action, I can attempt to shove with my horns as a bonus action. I cannot use this to knock a creature prone.\nLabyrinthine Recall: I can perfectly recall any path I have travelled." }); AddRacialVariant("minotaur-ua", "strength", { regExpSearch : /(strength|strong|\bmight\b)/i, name : "Minotaur [Strength]", source : [["UA:WA", 2]], scorestxt : "", scores : [1, 0, 0, 0, 0, 0], trait : "Minotaur [strength] (+2 Strength)\nHorns: I am proficient with my horns, a 1d10 piercing damage melee weapon that grant me advantage on shoving a creature, but not to avoid being shoved myself.\nGoring Rush: When taking a Dash action, I can make a horns attack as a bonus action.\nHammering Horns: When taking a melee Attack action, I can attempt to shove with my horns as a bonus action. I cannot use this to knock a creature prone.\nLabyrinthine Recall: I can perfectly recall any path I have travelled." }); // ua_20150803_Modern-Magic.js // This file adds the content from the Unearthed Arcana: Modern Magic article to MPMB's Character Record Sheet // Define the source SourceList["UA:MM"] = { name : "Unearthed Arcana: Modern Magic", abbreviation : "UA:MM", group : "Unearthed Arcana", campaignSetting : "Modern", url : "https://media.wizards.com/2015/downloads/dnd/UA_ModernMagic.pdf", date : "2015/08/03" }; // A subclass for the Cleric, called "City Domain" AddSubClass("cleric", "city domain-ua", { // Still valid 2021-09-21 regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*(urban|city)).*$/i, subname : "City Domain", source : [["UA:MM", 1]], spellcastingExtra : ["comprehend languages", "remote access-ua", "find vehicle-ua", "heat metal", "lightning bolt", "protection from ballistics-ua", "locate creature", "synchronicity-ua", "commune with city-ua", "shutdown-ua"], features : { "subclassfeature1" : { name : "Bonus Cantrip", source : [["UA:MM", 1]], minlevel : 1, description: desc("I learn the On/Off cantrip if I didn't already know it"), spellcastingBonus : [{ name : "Bonus Cantrip (On/Off)", spells : ["on/off-ua"], selection : ["on/off-ua"] }] }, "subclassfeature1.1" : { name : "Bonus Proficiency", source : [["UA:MM", 1]], minlevel : 1, description: desc("I gain proficiency with sidearms and land vehicles"), weaponProfs : [false, false, ["Sidearms"]], toolProfs : ["Vehicles (land)"] }, "subclassfeature1.2" : { name : "Heart of the City", source : [["UA:MM", 1]], minlevel : 1, description : desc([ "While I'm in a city, I can gain adv. on a Cha (Deception, Intimidation, Persuasion) check", "I'm considered proficient with the appropriate skill for that one check" ]), usages : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest" }, "subclassfeature2" : { name : "Channel Divinity: Spirits of the City", source : [["UA:MM", 1]], minlevel : 2, description : desc([ "As an action, I make all city utilities in 30 ft either stop or work perfectly for 1 min", "Additionally, all hostiles within 30 ft must make a Cha save at the time of use", "If failed, it is either knocked prone or restrained (my choice) by city hazards", "A restrained target can escape with an Athletics or Acrobatics check vs. my spell DC" ]), action : [["action", ""]] }, "subclassfeature6" : { name : "Block Watch", source : [["UA:MM", 2]], minlevel : 6, description: desc("While in an urban environment, I'm proficient and expertise in Insight and Perception") }, "subclassfeature8" : { name : "Divine Strike", source : [["UA:MM", 2]], minlevel : 8, description: desc("Once per turn, when I hit a creature with a weapon attack, I can do extra damage"), additional : levels.map(function (n) { if (n < 8) return ""; return "+" + (n < 14 ? 1 : 2) + "d8 psychic damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && v.isWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.cleric.level < 14 ? 1 : 2) + 'd8 psychic damage'; } }, "Once per turn, I can have one of my weapon attacks that hit do extra psychic damage." ] } }, "subclassfeature17" : { name : "Express Transit", source : [["UA:MM", 2]], minlevel : 17, description : desc([ "As an action, I can teleport from one mass transit site to another in the same city", "This works just like a Teleport spell; Mass transits sites include bus/train/subway stops" ]), usages : 1, recovery : "short rest", action : [["action", ""]] } } }); // A subclass for the Warlock, called "Ghost in the Machine" AddSubClass("warlock", "ghost in the machine-ua", { // Still valid 2021-09-21 regExpSearch : /^(?=.*warlock)(?=.*ghost)(?=.*(machine|computer)).*$/i, subname : "the Ghost in the Machine", source : [["UA:MM", 2]], spellcastingExtra : ["infallible relay-ua", "remote access-ua", "arcane hacking-ua", "digital phantom-ua", "haywire-ua", "invisibility to cameras-ua", "conjure knowbot-ua", "system backdoor-ua", "shutdown-ua", "synchronicity-ua"], features : { "subclassfeature1" : { name : "Bonus Proficiency", source : [["UA:MM", 2]], minlevel : 1, description: desc("I am proficient with hacking tools and know the On/Off cantrip"), toolProfs : ["Hacking tools"], spellcastingBonus : [{ name : "Bonus Cantrip (On/Off)", spells : ["on/off-ua"], selection : ["on/off-ua"] }] }, "subclassfeature1.1" : { name : "Information Surge", source : [["UA:MM", 2]], minlevel : 1, description : desc([ "As an action, I can cause a computerized device within 30 ft to make an Int save", "If the device is held/used by a creature, that creature makes the saving throw", "If the device is not held/used, it makes a save with a +0 modifier and disadvantage", "On a failed save, the device stops functioning until the end of my next turn" ]), usages : 1, recovery : "short rest", action : [["action", ""]] }, "subclassfeature6" : { name : "Wire Walk", source : [["UA:MM", 3]], minlevel : 6, description : desc([ "As a bonus action, I can teleport through a hardwired network to a point I can see", "Both where I start and end must be a device, cable, or socket connected to the network" ]), usages : 1, recovery : "long rest", action : [["bonus action", ""]] }, "subclassfeature10" : { name : "Personal Encryption", source : [["UA:MM", 3]], minlevel : 10, description : desc([ "I have adv. on saves vs. scrying, thought detection, and magics for learning my location", "If the effect doesn't let me a save, the user has disadv. on checks to use it on me, if any" ]) }, "subclassfeature14" : { name : "Technovirus", source : [["UA:MM", 3]], minlevel : 14, description : desc([ "As an action, I make a melee spell attack to infect someone with a techno-organic virus", "The target takes 8d10 psychic damage, or half that with a successful Con save", "If it failed its save, I can use an action to cast Command on it while it remains infected", "It makes its save vs. this Command with disadvantage and I can cast it at any range", "It is infected until my next long rest; The virus can be removed with Lesser Restoration" ]), usages : 1, recovery : "long rest", action : [["action", ""]] } } }); // A subclass for the Wizard, called "Technomancy" (contributed by AKA_Sketch) AddSubClass("wizard", "technomancy-ua", { // Still valid 2021-09-21 regExpSearch : /technomancy|technomancer/i, subname : "Technomancy", source : [["UA:MM", 3]], fullname : "Technomancer", features : { "subclassfeature2": { name : "Bonus Proficiencies", source : [["UA:MM", 3]], minlevel : 2, description: desc("I gain proficiency with sidearms and hacking tools"), weaponProfs : [false, false, ["Sidearms"]], toolProfs : ["Hacking tools"] }, "subclassfeature2.1": { name : "Technological Savant", source : [["UA:MM", 3]], minlevel : 2, description : desc([ "I can use a single tablet computer (or similar) instead of a spellbook", "Spells copied into this device cost half the normal amount of gp" ]) }, "subclassfeature6": { name : "Program Spell", source : [["UA:MM", 4]], minlevel : 6, description : desc([ "I can cast a spell into a device of at least smartphone-level of computing power", "Variables of the spell are chosen at time of casting; I can have only one active at a time", "As an action within the next 48 hours, the spell can be cast from the device", "I can't activate a concentration spell in this way if I am concentrating on another spell" ]), recovery : "long rest", usages : 1 }, "subclassfeature10": { name : "Online Casting", source : [["UA:MM", 4]], minlevel : 10, description : desc([ "I can cast a spell, that is not area-of-effect, through networked electronic devices", "If the spell requires sight/hearing, the audio/visual must be transmitted electronically", "The spell's range is determined from me to my device plus from the target to its device" ]), usages : "Intelligence modifier per ", usagescalc : "event.value = Math.max(1, What('Int Mod'));", recovery : "long rest" }, "subclassfeature14": { name : "Chained Device", source : [["UA:MM", 4]], minlevel : 14, description: desc([ "I can use a held/worn tablet computer to concentrate on a spell I cast instead of me", "If the device is separated from me, turned off, or broken, the effect is lost", ]), recovery : "long rest", usages : 1 } } }); // Add a new Warlock invocation AddWarlockInvocation("Arcane Gunslinger (prereq: Pact of the Blade)", { // Still valid 2021-09-21 name : "Arcane Gunslinger", description : desc([ "My pact weapon can take firearm forms, and I can transform magical firearms into one" ]), source : [["UA:MM", 3]], submenu : "[improves Pact of the Blade]", prereqeval : function(v) { return GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the blade'; }, calcChanges : { atkAdd : [ function (fields, v) { if (v.isRangedWeapon && /firearm/i.test(v.theWea.type + " " + v.theWea.list) && /\bpact\b/i.test(v.WeaponTextName)) { v.pactWeapon = true; } }, "If I include the word 'Pact' in a firearm weapon's name, it gets treated as my Pact Weapon.", 90 ] } }); /* Adds 14 spells that are, according to the article, 'suitable' for the Sorcerer, Warlock, or Wizard spell list. 1 of those is also considered suitable for the Paladin spell list. Strangely enough, adding all these spells to the Warlock spell list makes the Ghost in the Machine's Expanded Spell List class feature completely useless */ SpellsList["arcane hacking-ua"] = { // Still valid 2021-09-21 name : "Arcane Hacking", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:MM", 5]], level : 2, school : "Trans", time : "1 a", range : "Self", components : "V,S,M\u0192", compMaterial : "Hacking tools", duration : "Conc, 1 h", description : "Adv on Int (hacking tools) vs. encryption; Use Int (hacking tools) to remove protective spells; See book", descriptionFull : "[Technomagic]\n You gain advantage on all Intelligence checks using hacking tools to break software encryption or online security when using a foreign system. This spell also allows you to break 2nd-level and lower protective spells such as arcane lock or glyph of warding by making an Intelligence check using hacking tools against the spell save DC of the spell's caster." + AtHigherLevels + "When you cast this spell using a spell slot of 3rd level or higher, you can attempt to counteract a spell set to secure the foreign system if the spell's level is equal to or less than the level of the spell slot you used." }; SpellsList["commune with city-ua"] = { // Still valid 2021-09-21 name : "Commune with City", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:MM", 5]], ritual : true, level : 5, school : "Div", time : "1 min", range : "Self", components : "V,S", duration : "Instantaneous", description : "Learn up to three facts about surrounding city, out to 1 mile above- or 600 ft underground; see B", descriptionFull : "You briefly become one with the city and gain knowledge of the surrounding area. Aboveground, this spell gives you knowledge of the area within 1 mile of you. In sewers and other underground settings, you gain knowledge of the area within 600 feet of you." + "\n " + "You instantly gain knowledge of up to three facts of your choice about any of the following subjects as they relate to the area:" + "\n \u2022 " + "Terrain and bodies of water" + "\n \u2022 " + "Prevalent buildings, plants, animals, or intelligent creatures" + "\n \u2022 " + "Powerful (CR 1 or higher) celestials, fey, fiends, elementals, or undead" + "\n \u2022 " + "Influences from other planes of existence" + "\n \u2022 " + "Electrical currents, wireless signals, and active transit lines and tracks" + "\n\n " + "For example, you could determine the location of powerful undead in the area, the location of major sources of electrical power or interference, and the location of any nearby parks." }; SpellsList["conjure knowbot-ua"] = { // Still valid 2021-09-21 name : "Conjure Knowbot", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:MM", 5]], level : 4, school : "Conj", time : "1 a", range : "500 ft", components : "V,S", duration : "10 min", description : "Create bot in touched device; computer checks 1 bns instead of 1 a for me; SL5: 1 h, 1000 ft, see book", descriptionFull : "[Technomagic]\n You touch a single computerized device or computer system to conjure a knowbot\u2014a partially sentient piece of software imprinted with vestiges of your own skills and computer abilities. For the duration of the spell, you can use a bonus action to have the knowbot execute a computer-related task that would normally require an action. The knowbot makes Intelligence ability checks using your ability score and proficiency bonuses (including your proficiency with hacking tools, if applicable)." + "\n " + "You have a limited telepathic bond with the knowbot, out to a range of 500 feet from the device or system where the knowbot was conjured. If you move beyond this range, the knowbot disappears in 2d4 rounds, as if the duration of the spell had expired. Moving within range again immediately reestablishes the bond. The knowbot is bound to the system in which it was created, and it stays there until it is dismissed or the spell's duration expires." + AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, the spell's duration increases to 1 hour. Additionally, your telepathic bond with the knowbot is effective out to a range of 1,000 feet, and if you leave the range of the bond, the knowbot continues performing its last directed task until the spell expires." }; SpellsList["digital phantom-ua"] = { // Still valid 2021-09-21 name : "Digital Phantom", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:MM", 6]], level : 2, school : "Abjur", time : "1 a", range : "Self", components : "V,S,M", compMaterial : "A small piece of copper wire", duration : "Conc, 1 h", description : "Me and any others in same computer system +10 on Int to avoid detection; leave no trace on exit", descriptionFull : "[Technomagic]\n This spell works to actively hide your presence within a computer system. For the spell's duration, you and any other users you choose on your local network gain a +10 bonus to Intelligence checks to avoid detection by administrators, knowbots, tracking software, and the like. Whenever you and your chosen users leave any computer system you are working in while this spell is in effect, all trace of your previous presence in that system is erased." }; SpellsList["find vehicle-ua"] = { // Still valid 2021-09-21 name : "Find Vehicle", classes : ["paladin", "sorcerer", "warlock", "wizard"], source : [["UA:MM", 6]], level : 2, school : "Conj", time : "10 min", range : "30 ft", components : "V,S", duration : "Conc, 1 h", description : "Gain services of land spirit-vehicle; expertise, share spells with it; SL3: water, SL5: air, SL7: any; see B", descriptionFull : "You summon a spirit that assumes the form of a nonmilitary land vehicle of your choice, appearing in an unoccupied space within range. The vehicle has the statistics of a normal vehicle of its sort, though it is celestial, fey, or fiendish (your choice) in origin. The physical characteristics of the vehicle reflect its origin to some degree. For example, a fiendish SUV might be jet black in color, with tinted windows and a sinister-looking front grille." + "\n " + "You have a supernatural bond with the conjured vehicle that allows you to drive beyond your normal ability. While driving the conjured vehicle, you are considered proficient with vehicles of its type, and you add double your proficiency bonus to ability checks related to driving the vehicle. While driving the vehicle, you can make any spell you cast that targets only you also target the vehicle." + "\n " + "If the vehicle drops to 0 hit points, it disappears, leaving behind no physical form. You can also dismiss the vehicle at any time as an action, causing it to disappear." + "\n " + "You can't have more than one vehicle bonded by this spell at a time. As an action, you can release the vehicle from its bond at any time, causing it to disappear." + AtHigherLevels + "When you cast this spell using a spell slot of 3rd level or higher, you can conjure a nonmilitary water vehicle large enough to carry six Medium creatures. When you cast this spell using a spell slot of 5th level or higher, you can conjure a nonmilitary air vehicle large enough to carry ten Medium creatures. When you cast this spell using a spell slot of 7th level or higher, you can conjure any type of vehicle, subject to the DM's approval." }; SpellsList["haywire-ua"] = { // Still valid 2021-09-21 name : "Haywire", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:MM", 7]], level : 3, school : "Ench", time : "1 a", range : "90 ft", components : "V,S", duration : "Conc, 1 min", save : "Wis", description : "10 ft(+5 ft/SL) rad all electronic devices go haywire, see B; for hold devices, crea gets to save", descriptionFull : "[Technomagic]\n This spell plays havoc with electronic devices, making the use of such devices all but impossible. Each electronic device in a 10-foot-radius sphere centered on a point you choose within range is subject to random behavior while it remains within the area. A device not held by a creature is automatically affected. If an electronic device is held by a creature, that creature must succeed on a Wisdom saving throw or have the device affected by the spell." + "\n " + "At the start of each of your turns, roll a d6 for each affected device to determine its behavior. Except where otherwise indicated, that behavior lasts until the start of your next turn while this spell is in effect." + "\n\n" + toUni("d10") + "\t" + toUni("Behavior") + "\n " + "1\tThe device shuts down and must be restarted. Do not roll again for this device until it is restarted.\n2–4\tThe device does not function." + "\n " + "5\tThe device experiences a power surge, causing an electric shock to the wielder (if any) and one random creature within 5 feet of the device. Each affected creature must make a Dexterity saving throw against your spell save DC, taking 6d6 lightning damage on a failed save, or half as much damage on a successful one." + "\n " + "6\tThe device is usable as normal.\n" + AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, the radius of the sphere affected by the spell increases by 5 feet for each slot level above 3rd." }; SpellsList["infallible relay-ua"] = { // Still valid 2021-09-21 name : "Infallible Relay", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:MM", 7]], level : 1, school : "Div", time : "1 min", range : "Self", components : "V,S,M", compMaterial : "A mobile phone", duration : "Conc, 10 min", save : "Cha", description : "1 known crea save or has to answer my call from phone within 100 ft of it; it has to save to end call", descriptionFull : "[Technomagic]\n With this spell, you can target any creature with whom you have spoken previously, as long as the two of you are on the same plane of existence. When you cast the spell, the nearest functioning telephone or similar communications device within 100 feet of the target begins to ring. If there is no suitable device close enough to the target, the spell fails." + "\n " + "The target must make a successful Charisma saving throw or be compelled to answer your call. Once the connection is established, the call is crystal clear and cannot be dropped until the conversation has ended or the spell's duration ends. You can end the conversation at any time, but a target must succeed on a Charisma saving throw to end the conversation." }; SpellsList["invisibility to cameras-ua"] = { // Still valid 2021-09-21 name : "Invisibility to Cameras", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:MM", 7]], level : 3, school : "Illus", time : "1 a", range : "10 ft", components : "V,S,M", compMaterial : "A scrap of black paper", duration : "Conc, 1 min", description : "Up to 4 crea and anything they are wearing or carrying become undetectable for electornic sensors", descriptionFull : "[Technomagic]\n Four creatures of your choice within range become undetectable to electronic sensors and cameras for the duration of the spell. Anything a target is wearing or carrying is likewise undetectable as long as it is on the target's person. The targets remain visible to vision." }; SpellsList["on/off-ua"] = { // Still valid 2021-09-21 name : "On/Off", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:MM", 7]], level : 0, school : "Trans", time : "1 a", range : "60 ft", components : "V,S", duration : "Instantaneous", description : "Activate or deactivate 1 electornic device that has a way of doing so accessible from the outside of it", descriptionFull : "[Technomagic]\n This cantrip allows you to activate or deactivate any electronic device within range, as long as the device has a clearly defined on or off function that can be easily accessed from the outside of the device. Any device that requires a software- based shutdown sequence to activate or deactivate cannot be affected by on/off." }; SpellsList["protection from ballistics-ua"] = { // Still valid 2021-09-21 name : "Protection from Ballistics", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:MM", 8]], level : 3, school : "Abjur", time : "1 a", range : "Touch", components : "V,S,M", compMaterial : "A shell casing", duration : "Conc, 10 min", description : "1 crea gains resistance to nonmagical ballistic damage", descriptionFull : "This spell enchants the flesh of the target against the impact of bullets. Until the spell ends, the target has resistance to nonmagical ballistic damage." }; SpellsList["remote access-ua"] = { // Still valid 2021-09-21 name : "Remote Access", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:MM", 8]], level : 1, school : "Trans", time : "1 a", range : "120 ft", components : "V,S", duration : "10 min", description : "I can use any electronic device within range as if it were in my hands", descriptionFull : "[Technomagic]\n You can use any electronic device within range as if it were in your hands. This is not a telekinesis effect. Rather, this spell allows you to simulate a device's mechanical functions electronically. You are able to access only functions that a person using the device manually would be able to access. You can use remote access with only one device at a time." }; SpellsList["shutdown-ua"] = { // Still valid 2021-09-21 name : "Shutdown", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:MM", 8]], level : 5, school : "Trans", time : "1 a", range : "120 ft", components : "V,S", duration : "Conc, 1 min", save : "Con", description : "Shut down all electronic devices within range; if controlled/held by crea, it can save to keep active", descriptionFull : "[Technomagic]\n This spell shuts down all electronic devices within range that are not wielded by or under the direct control of a creature. If an electronic device within range is used by a creature, that creature must succeed on a Constitution saving throw to prevent the device from being shut down. While the spell remains active, no electronic device within range can be started or restarted." }; SpellsList["synchronicity-ua"] = { // Still valid 2021-09-21 name : "Synchronicity", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:MM", 8]], level : 4, school : "Ench", time : "1 a", range : "120 ft", components : "V,S", duration : "Conc, 1 h", description : "1 crea not slowed by mundane delays, disadv on opportunity attacks to it, adv to Stealth and driving", descriptionFull : "The creature you touch feels reality subtly shifted to its favor while this spell is in effect." + "\n " + "The target isn't inconvenienced by mundane delays of any sort. Traffic lights are always green, there's always a waiting elevator, and a taxi is always around the corner. The target can run at full speed through dense crowds, and attacks of opportunity provoked by the target's movement are made with disadvantage." + "\n " + "Synchronicity grants advantage to Dexterity (Stealth) checks, since the target always finds a handy piece of cover available. Additionally, the target has advantage on all ability checks made to drive a vehicle." + "\n " + "In the event that two or more creatures under the effect of synchronicity are attempting to avoid being inconvenienced by each other, the creatures engage in a contest of Charisma each time the effects of the spells would oppose each other." }; SpellsList["system backdoor-ua"] = { // Still valid 2021-09-21 name : "System Backdoor", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:MM", 8]], level : 4, school : "Trans", time : "1 min", range : "Self", components : "V,S,M\u0192", compMaterial : "Hacking tools", duration : "Conc, 1 h", description : "Gain admin access to 1 system; defeats 3rd or lower technomancy spells; SL5+: defeats same or lower", descriptionFull : "[Technomagic]\n This spell allows you to bypass system security in order to create a secure login on a foreign system. The login you create allows you administrator-level privileges in any computer system not enhanced through technomagic. The login defeats any technomagic spells of 3rd level or lower." + "\n " + "Once the duration of the spell expires, the login and all privileges are wiped from the system." + "\n " + "System logs still show the activity of the user, but the user identification cannot be found or traced." + AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, you are able to bypass technomagic spells if the spell's level is equal to or less than the level of the spell slot you used." }; // This code was contributed by Lewis Henderson // // Please note that the original .pdf has the hit dice as 2d6 per level. // There isn't any way to implement this, so the hit dice is recorded as a d12. // Also note that there is no automation for the companion page included in this. // // You will have to choose the ranger's animal spirit from the companion race drop-down list and add the Wisdom modifier bonus to attacks and saves manually. // ua_20150909_Ranger.js // This file adds the content from the Unearthed Arcana: Ranger article to MPMB's Character Record Sheet // Define the source SourceList["UA:R"] = { name : "Unearthed Arcana: Ranger", abbreviation : "UA:R", group : "Unearthed Arcana", url : "https://media.wizards.com/2015/downloads/dnd/DX_0907_UA_RangerOptions.pdf", date : "2015/09/09" }; // Define a new class, called "Playtest Ranger" and its 3 subclasses ClassList["ua-playtest-ranger"] = { regExpSearch : /^(?=.*playtest)((?=.*(ranger|strider))|((?=.*(nature|natural))(?=.*(knight|fighter|warrior|warlord|trooper)))).*$/i, name : "Playtest Ranger", source : [["UA:R", 0]], primaryAbility : "Dexterity and Wisdom", prereqs : "Dexterity 13 and Wisdom 13", die : 12, improvements : [0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5, 5], saves : ["Dex", "Wis"], skillstxt : { primary : "Choose three from Animal Handling, Athletics, Insight, Investigation, Nature, Perception, Stealth, and Survival", secondary : "Choose one from Animal Handling, Athletics, Insight, Investigation, Nature, Perception, Stealth, and Survival" }, toolProfs : { primary : ["Herbalism kit"] }, armorProfs : { primary : [true, false, false, true], secondary : [true, false, false, true] }, weaponProfs : { primary : [true, true], secondary : [true, true] }, equipment : "Playtest Ranger starting equipment:\n \u2022 leather armor;\n \u2022 Two shortswords -or- two martial melee weapons -or- a martial weapon and a shield;\n \u2022 A dungeoneer's pack -or- an explorer's pack;\n \u2022 A longbow and a quiver of 20 arrows -or- a martial weapon.", subclasses : ["Ranger Path", []], subclassGainedLevel : 3, attacks : [1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], features : { "ambuscade" : { name : "Ambuscade", source : [["UA:R", 2]], minlevel : 1, description : desc([ "When I roll initiative, I gain a special turn before others can act", "During this bonus turn, I can only use the Attack or Hide action", "I can't be surprised, but if I would be surprised I don't get the bonus turn" ]) }, "natural explorer" : ClassList.ranger.features["natural explorer"], "fighting style" : ClassList.ranger.features["fighting style"], "skirmisher's stealth" : { name : "Skirmisher's Stealth", source : [["UA:R", 3]], minlevel : 2, description : desc([ "At the start of my turn, I can choose a creature I'm hidden from", "During that turn, I remain hidden from it, regardless of my actions", "As a bonus action at the end of my turn, I can use the Hide action" ]), action : [["bonus action", ""]], }, "subclassfeature3" : { name : "Ranger Path", source : [["UA:R", 3]], minlevel : 3, description : desc([ 'Choose a Ranger Path you wish to follow and put it in the "Class" field', "Choose Guardian, Seeker, or Stalker" ]) }, "primeval awareness" : ClassList.ranger.features["primeval awareness"] } }; AddSubClass("ua-playtest-ranger", "guardian-ua", { regExpSearch : /^(?=.*guardian)((?=.*(ranger|strider))|((?=.*(nature|natural))(?=.*(knight|fighter|warrior|warlord|trooper)))).*$/i, subname : "Guardian", source : [["UA:R", 3]], features : { "subclassfeature3" : { name : "Brown Bear Spirit Companion", source : [["UA:R", 3]], minlevel : 3, description : desc([ "As a bonus action, I can have my brown bear spirit animal materialize or dismiss it", "It has all the stats of a brown bear and adds my Wis mod to its attacks and saves", "Its HP is half my ranger level or the total in its stat block, whichever is higher", "It takes it turn right after my initiative and is under my complete control" ]), usages : 1, recovery : "short rest", action : [["bonus action", ""]] }, "subclassfeature3.1" : { name : "Guardian's Shroud", source : [["UA:R", 4]], minlevel : 3, description :"\n " + "When I call my spirit animal, I grant me or an ally I can see 2d6 + Wis mod temp HP" } } }); AddSubClass("ua-playtest-ranger", "seeker-ua", { regExpSearch : /^(?=.*seeker)((?=.*(ranger|strider))|((?=.*(nature|natural))(?=.*(knight|fighter|warrior|warlord|trooper)))).*$/i, subname : "Seeker", source : [["UA:R", 4]], features : { "subclassfeature3" : { name : "Giant Eagle Spirit Companion", source : [["UA:R", 3]], minlevel : 3, description : desc([ "As a bonus action, I can have my giant eagle spirit animal materialize or dismiss it", "It has all the stats of a giant eagle and adds my Wis mod to its attacks and saves", "Its HP is half my ranger level or the total in its stat block, whichever is higher", "It takes it turn right after my initiative and is under my complete control" ]), usages : 1, recovery : "short rest", action : [["bonus action", ""]] }, "subclassfeature3.1" : { name : "Seeker's Eye", source : [["UA:R", 4]], minlevel : 3, description : desc([ "When I call my spirit animal, I can choose a creature that I can see", "Until the end of my next turn, all attacks against the target have advantage" ]) } } }); AddSubClass("ua-playtest-ranger", "stalker-ua", { regExpSearch : /^(?=.*stalker)((?=.*(ranger|strider))|((?=.*(nature|natural))(?=.*(knight|fighter|warrior|warlord|trooper)))).*$/i, subname : "Stalker", source : [["UA:R", 4]], features : { "subclassfeature3" : { name : "Dire Wolf Spirit Companion", source : [["UA:R", 3]], minlevel : 3, description : desc([ "As a bonus action, I can have my dire wolf spirit animal materialize or dismiss it", "It has all the stats of a dire wolf and adds my Wis mod to its attacks and saves", "Its HP is half my ranger level or the total in its stat block, whichever is higher", "It takes it turn right after my initiative and is under my complete control" ]), usages : 1, recovery : "short rest", action : [["bonus action", ""]] }, "subclassfeature3.1" : { name : "Stalker's Fangs", source : [["UA:R", 4]], minlevel : 3, description : desc([ "When I call my spirit animal, I can choose a creature that I can see", "The target's next weapon attack hit deals 2d6 + Wis mod extra slashing damage" ]) } } }); // ua_20151005_Prestige Classes and Rune Magic.js // This file adds the content from the Unearthed Arcana: Prestige Classes and Rune Magic article to MPMB's Character Record Sheet // Define the source SourceList["UA:PCRM"] = { name : "Unearthed Arcana: Prestige Classes and Rune Magic", abbreviation : "UA:PCRM", group : "Unearthed Arcana", url : "https://media.wizards.com/2015/downloads/dnd/UA_Rune_Magic_Prestige_Class.pdf", date : "2015/10/05" }; // Adds a prestige class, called "Rune Scribe" (includes contributions by K.12) ClassList["rune scribe"] = { // Still valid 2021-09-21 regExpSearch : /^(?=.*rune)(?=.*scribe).*$/i, name : "Rune Scribe", source : [["UA:PCRM", 2]], primaryAbility : "Dexterity and Intelligence", prereqs : "\n - Dexterity 13 and Intelligence 13;\n - Proficiency in the Arcana skill\n - Complete a special task: You must find a rune and present it to an NPC rune scribe who accepts it in return for tutoring you in the ways of rune magic", die : 8, improvements : levels.map(function (n) {return 0}), toolProfs : { secondary : ["Calligrapher's Supplies", "Mason's Tools", "Woodcarver's Tools"] }, subclasses : ["", []], subclassGainedLevel : 100, prestigeClassPrereq : 5, attacks : levels.map(function (n) {return 1}), spellcastingFactor : 1, features : { "rune lore" : { name : "Rune Lore", source : [["UA:PCRM", 3]], minlevel : 1, description : desc([ "I learn the basics of scribing runes, and can activate all properties of a master rune", "The first rune I master is the one I found to qualify to become a rune scribe", "To use any features of a master rune, I need to first attune to it just like a magic item", 'Use the "Choose Feature" button above to add master runes to the third page' ]), extraname : "Master Rune", extrachoices : ["Opal of the Ild Rune", "Orb of the Stein Rune", "Pennant of the Vind Rune", "Shard of the Kalt Rune"], "opal of the ild rune" : { name : "Opal of the Ild Rune", source : [["UA:PCRM", 4]], description : " [rare, requires attunement]" + desc([ "- Ignite (simple): As an action, ignite touched flammable object; Fire extends 1 ft from it", "- Fire Tamer (simple): As an action, extinguish touched open flame up to 10-ft radius", " I can expend a spell slot to extend that radius by 20 ft/SL", "- Fire's Friend (simple): While attuned, I have resistance to cold damage", "- Combustion (complex): As an action, I expend spell slot and touch a creature", " The target automatically takes 1d10 + 1d10/SL fire damage", "- Flame Brand (complex): During a short rest, I can augment a weapon, or 20 ammo", " The weapon or ammo deals fire damage; It lasts for 24 hours or until I use this again", " I can expend a spell slot to also give the weapon a magic bonus of slot level dived by 3", "- Flame Stoker (complex): While attuned, I roll any fire damage twice and use the higher" ]), dmgres : ["Cold"], action : ['action', 'Ild Rune (Ignite, Fire Tamer, Combusion)'] }, "orb of the stein rune" : { name : "Orb of the Stein Rune", source : [["UA:PCRM", 5]], description : " [rare, requires attunement]" + desc([ "- Indomitable Stand (simple): As an action, I gain abilities until I move", " I have advantage on all ability checks and saving throws to resist being moved", " Anyone moving within 10 ft makes a DC 12 Str save or has speed 0 until its next turn", "- Stone Soul (simple): While attuned, I cannot be petrified", "- Stone's Secrets (simple): As an action, I learn everybody's current location within 30 ft", " They have to touch the same surface as I'm touching with my hand", "- Crushing Brand (complex): During a short rest, I can augment a bludgeoning weapon", " The weapon's bludgeoning damage ignores resistances and immunities", " If the weapon deals its maximum damage, the target is also knocked prone", " I can expend a spell slot to also give the weapon a magic bonus of slot level dived by 3", " These effects last for 24 hours or until I use Crushing Brand again", "- Earthen Step (complex): I can cast Meld Into Stone as a bonus action once per short rest", "- Overwhelming Bolt (complex): As an action, I expend spell slot and touch a creature", " It takes 2d8+1d8/SL bludg. dmg and is prone; DC 12+SL Str save for half \u0026 not prone" ]), action : [['action', 'Stein Rune (Indomitable Stand, Secrets, Bolt)']], savetxt : { immune : ["petrified"] }, spellcastingBonus : [{ name : "Orb of the Stein Rune", spells : ["meld into stone"], selection : ["meld into stone"], firstCol : 'oncesr' }], spellChanges : { "levitate" : { time : "1 bns", changes : "Using my Orb of the Stein Rune, I can cast Meld Into Stone as a bonus action once per short rest." } }, extraLimitedFeatures : [{ name : "Earthen Step (Orb of the Stein Rune)", usages : 1, recovery : "short rest" }] }, "pennant of the vind rune" : { name : "Pennant of the Vind Rune", source : [["UA:PCRM", 5]], description : " [rare, requires attunement]" + desc([ "- Comforting Wind (simple): While attuned, I can't suffocate or drown", " Also, I gain advantage on saves against inhaled poisons, toxins, and similar effects", "- Wind Step (simple): As an action, I fly 20 ft, after which I fall if I'm still airborne", "- Wind's Grasp (simple): As a reaction when falling, I can take no damage from the fall", "- Howling Brand (complex): During a short rest, I can augment a ranged weapon", " Its range is doubled and attacks with it do not suffer disadvantage due to range", " I can expend a spell slot to also give the weapon a magic bonus of slot level dived by 3", " These effects last for 24 hours or until I use Howling Brand again", "- Shrieking Bolt (complex): As an action, I expend spell slot to target a creature I can see", " It 2d8+1d8/SL bludg. dmg \u0026 pushed 10 ft; DC 12+SL Str save for half \u0026 not pushed", "- Wind Walker (complex): I can cast Levitate as a bonus action once per short rest" ]), action : [['action', 'Vind Rune (Wind Step, Shrieking Bolt)'], ['reaction', "Vind Rune (Wind's Grasp)"]], savetxt : { adv_vs : ["inhaled poison"] }, spellcastingBonus : [{ name : "Pennant of the Vind Rune", spells : ["levitate"], selection : ["levitate"], firstCol : 'oncesr' }], spellChanges : { "levitate" : { time : "1 bns", changes : "Using my Pennant of the Vind Rune, I can cast Levitate as a bonus action once per short rest." } }, extraLimitedFeatures : [{ name : "Wind Walker (Pennant of the Vind Rune)", usages : 1, recovery : "short rest" }] }, "shard of the kalt rune" : { name : "Shard of the Kalt Rune", source : [["UA:PCRM", 6]], description : " [rare, requires attunement]" + desc([ "- Frigid Touch (simple): As an action, I freeze water that I touch a 10-ft radius", "- Frost Friend (simple): While attuned, I have resistance to fire damage", "- Icy Mantle (simple): As an action, me or a creature I touch gains a protective mantle", " The next time taking bludg., slash., pierc. damage, it absorbs the damage and falls apart", "- Freezing Bolt (complex): As an action, I expend spell slot and touch a creature", " It takes 2d8+1d8/SL cold damage and its speed is 0 until the end of my next turn", " If it succeeds on a DC 12+SL Con save, it takes only half damage and has normal speed", "- Ice Brand (complex): During a short rest, I can augment a weapon, or 20 ammo pieces", " The weapon or ammo deals cold damage; It lasts for 24 hours or until I use this again", " I can expend a spell slot to also give the weapon a magic bonus of slot level dived by 3", "- Winter's Howl (complex): I can cast Sleet Storm as an action once per short rest" ]), dmgres : ["Fire"], action : ['action', 'Kalt Rune (Touch, Mantle, Bolt, Howl)'], spellcastingBonus : [{ name : "Shard of the Kalt Rune", spells : ["sleet storm"], selection : ["sleet storm"], firstCol : 'oncesr' }], extraLimitedFeatures : [{ name : "Winter's Howl (Shard of the Kalt Rune)", usages : 1, recovery : "short rest" }] } }, "runic magic" : { name : "Runic Magic", source : [["UA:PCRM", 3]], minlevel : 1, description: desc("I obtain spell slots as if gaining a level in a full spellcasting class, but don't learn spells") }, "runic discovery" : { name : "Runic Discovery", source : [["UA:PCRM", 3]], minlevel : 2, description : desc([ "I know a number of master runes which I can attune to, even if not in my possession", "Attuning or de-attuning in this manner can be done over the course of a short rest" ]), additional : levels.map(function (n) { if (n < 2) return ""; return (n < 3 ? 1 : n < 5 ? 2 : 3) + " known master runes"; }) }, "living rune" : { name : "Living Rune", source : [["UA:PCRM", 3]], minlevel : 4, description : desc([ "I get 2 points that I can add to one or two of my ability scores as I see fit", "When I finish a long rest, I can re-allocate these point(s) from a single score to another" ]) }, "rune mastery" : { name : "Rune Mastery", source : [["UA:PCRM", 3]], minlevel : 5, description: desc("One rune I'm attuned to doesn't count toward the limit of magic items I can attune to") } } }; // ua_20151102_Light,-Dark,-Underdark!.js // This file adds the content from the Unearthed Arcana: Light, Dark, Underdark! article to MPMB's Character Record Sheet // Define the source SourceList["UA:LDU"] = { name : "Unearthed Arcana: Light, Dark, Underdark!", abbreviation : "UA:LDU", group : "Unearthed Arcana", url : "https://media.wizards.com/2015/downloads/dnd/02_UA_Underdark_Characters.pdf", date : "2015/11/02" }; // New Fighting Styles AddFightingStyle(["fighter", "ranger", "paladin"], "Close Quarters Shooter", { // Still valid 2021-09-21 name : "Close Quarters Shooting Fighting Style", source : [["UA:LDU", 1]], description: desc([ "+1 bonus to attack rolls I make with ranged attacks", "I don't have disadvantage when making a ranged attack while within 5 ft of a hostile", "My ranged attacks ignore half and three-quarters cover against targets within 30 ft", ]), calcChanges : { atkCalc : [ function (fields, v, output) { if (v.isRangedWeapon) output.extraHit += 1; }, "My ranged weapons get a +1 bonus on the To Hit." ] } }); AddFightingStyle(["fighter", "ranger", "paladin"], "Tunnel Fighter", { // Still valid 2021-09-21 name : "Tunnel Fighting Style", source : [["UA:LDU", 1]], description: desc([ "As a bonus action, I enter a defensive stance that lasts until the start of my next turn", "While I'm in this defensive stance I gain the following two benefits:", "\u2022 I can make opportunity attacks without using my reaction", "\u2022 I can make a melee attack as a reaction if a hostile moves >5 ft while in my reach", ]), action : [["bonus action", ""]] }); // A subclass for the Ranger, called "Deep Stalker" AddSubClass("ranger", "deep stalker-ua", { regExpSearch : /^(?=.*deep)(?=.*stalker).*$/i, subname : "Deep Stalker", source : [["UA:LDU", 1]], fullname : "Deep Stalker", features : { "subclassfeature3" : { name : "Underdark Scout", source : [["UA:LDU", 1]], minlevel : 3, description: desc([ "In the first turn of combat I have +10 ft speed and +1 attack with the Attack action", "All turns after that, I can take the Hide action as a bonus action at the end of my turn", ]), action : [["bonus action", " (Hide at end of turn)"]] }, "subclassfeature3.1" : { name : "Deep Stalker Magic", source : [["UA:LDU", 2]], minlevel : 3, description: desc([ "I have 90 ft darkvision and add a spell to my known spells at level 3, 5, 9, 13, and 17", "These count as ranger spells, but do not count against the number of spells I can know", ]), spellcastingExtra : ["disguise self", "rope trick", "glyph of warding", "greater invisibility", "seeming"], spellcastingExtraApplyNonconform : true, vision : [["Darkvision", 90]] }, "subclassfeature7" : { name : "Iron Mind", source : [["UA:LDU", 2]], minlevel : 7, description: desc("I am proficient with Wisdom saving throws"), saves : ["Wis"] }, "subclassfeature11" : { name : "Stalker's Flurry", source : [["UA:LDU", 2]], minlevel : 11, description: desc("Once during my turn when I miss an attack, I can immediately make an extra attack") }, "subclassfeature15" : { name : "Stalker's Dodge", source : [["UA:LDU", 2]], minlevel : 15, description: desc("As a reaction when I'm attacked without adv., I can impose disadv. on the attack roll"), action : [["reaction", " (when attacked)"]] } } }); // A subclass for the Sorcerer, called "Shadow" AddSubClass("sorcerer", "shadow sorcerer-ua", { regExpSearch : /^(?=.*(sorcerer|witch))(?=.*shadow).*$/i, subname : "Shadow", source : [["UA:LDU", 2]], fullname : "Shadow Sorcerer", features : { "subclassfeature1" : { name : "Eyes of the Dark", source : [["UA:LDU", 2]], minlevel : 1, description: desc([ "I have 60 ft darkvision and can cast Darkness by spending 1 sorcery point", "I can see through any darkness spell I cast using this ability", ]), additional : "1 sorcery point", vision : [["Darkvision", 60]], action : [["action", " (1 sorcery point)"]], spellcastingBonus : [{ name : "Eyes of the Dark", spells : ["darkness"], selection : ["darkness"], firstCol : 1 }], spellChanges : { "darkness" : { description : "15-ft rad darkness on point/obj; I see normally; darkvision doesn't work; only magical light of SL 3+", changes : "Using my Eyes of the Dark class feature I can cast Darkness by spending 1 sorcery point and I can see through that Darkness without issue." } } }, "subclassfeature1.1" : { name : "Strength of the Grave", source : [["UA:LDU", 2]], minlevel : 1, description: desc([ "When damage reduces me to 0 HP, that isn't radiant damage or a critical hit,", "I can make a Constitution save (DC 5 + damage taken) to drop to 1 HP instead", ]), }, "subclassfeature6" : { name : "Hound of Ill Omen", source : [["UA:LDU", 2]], minlevel : 6, additional : "3 sorcery points", description: desc([ "As a bonus action, I target a creature I can see and summon a hound within 30 ft of it", "The hound has all the stats of a medium sized dire wolf with the following exceptions:", "\u2022 At the start of its turn, it automatically knows where the target is", "\u2022 It can only move towards and make (opportunity) attack against the target", "\u2022 It can move through other creatures and objects as if they were difficult terrain", "\u2022 It takes 5 force damage if it ends its turn inside an object", "The target has disadvantage on saves vs. my spells while the hound is within 5 ft of it", ]), action : [["bonus action", " (3 sorcery points)"]] }, "subclassfeature14" : { name : "Shadow Walk", source : [["UA:LDU", 3]], minlevel : 14, description: desc([ "As a bonus action when I'm in dim light or darkness, I can teleport up to 120 ft", "The destination has to be unoccupied, within line of sight, and in dim light or darkness", ]), action : [["bonus action", ""]] }, "subclassfeature18" : { name : "Shadow Form", source : [["UA:LDU", 3]], minlevel : 18, additional : "3 sorcery points", description: desc([ "As a bonus action, I transform into a shadow form for 1 minute", "While transformed, I have resistance to all damage types except force damage", "Also, I can move through other creatures and objects as if they were difficult terrain", "I take 5 force damage if I end my turn inside an object", ]), action : [["bonus action", " (3 sorcery points)"]] } } }); // A subclass for the Warlock, called "The Undying Light" AddSubClass("warlock", "the undying light-ua", { regExpSearch : /^(?=.*warlock)(?=.*light)(?=.*(immortal|undying|neverending|unending)).*$/i, subname : "the Undying Light", source : [["UA:LDU", 3]], spellcastingExtra : ["burning hands", "flaming sphere", "daylight", "fire shield", "flame strike"], features : { "subclassfeature1" : { name : "Radiant Soul", source : [["UA:LDU", 3]], minlevel : 1, description: desc([ "I add my Cha modifier to cantrips/spells I cast that deal fire or radiant damage", "I have resistance to radiant damage and know the Light and Sacred Flame cantrips", ]), spellcastingBonus : [{ name : "Radiant Soul", spells : ["light"], selection : ["light"] }, { name : "Radiant Soul", spells : ["sacred flame"], selection : ["sacred flame"] }], dmgres : ["Radiant"], calcChanges : { atkCalc : [ function (fields, v, output) { if (v.isSpell && (/fire|radiant/i).test(fields.Damage_Type)) output.extraDmg += What('Cha Mod'); }, "Cantrips and spells that fire or radiant damage get my Charisma modifier added to their damage." ], spellAdd : [ function (spellKey, spellObj, spName) { if (!spellObj.psionic) return genericSpellDmgEdit(spellKey, spellObj, "fire|radiant", "Cha"); }, "Cantrips and spells that fire or radiant damage get my Charisma modifier added to their damage." ] } }, "subclassfeature6" : { name : "Searing Vengeance", source : [["UA:LDU", 3]], minlevel : 6, description: desc([ "When I would make a death saving throw, I can instead spring back to my feet", "I immediately stand up and recover HP equal to half my current HP maximum", "Also, all hostiles within 30 ft of me take 10 + Charisma modifier in radiant damage", "Damaged creatures are blinded until the end of my next turn", ]), usages : 1, recovery : "long rest" }, "subclassfeature10" : { name : "Radiant Resilience", source : [["UA:LDU", 4]], minlevel : 10, description: desc([ "When I finish a short or long rest, I and up to five allies gain temporary hit points", "I get my warlock level + Cha mod, while my allies get half my warlock level + Cha mod", ]), }, "subclassfeature14" : { name : "Healing Light", source : [["UA:LDU", 4]], minlevel : 14, description: desc([ "As a bonus action, I touch a creature and heal it by expending dice from my pool", "I subtract the number of d6's used from my pool; I can expend up to 5d6 at a time", "The target heals HP equal to the roll of the dice; I regain expended uses with a long rest", ]), usages : "15d6 per ", usagescalc : "event.value = '15d6';", recovery : "long rest", action : [["bonus action", ""]] } } }); // ua_20151217_That-Old-Black-Magic.js // This file adds the content from the Unearthed Arcana: That Old Black Magic article to MPMB's Character Record Sheet // Define the source SourceList["UA:TOBM"] = { name : "Unearthed Arcana: That Old Black Magic", abbreviation : "UA:TOBM", group : "Unearthed Arcana", url : "https://media.wizards.com/2015/downloads/dnd/07_UA_That_Old_Black_Magic.pdf", date : "2015/12/17" }; // Adds the Abyssal Tiefling RaceList["abyssal tiefling-ua"] = { regExpSearch : /^(?=.*abyssal)((?=.*tiefling)|(?=.*planetouched)(?=.*(hell|abyss|fiend|devil))).*$/i, name : "Abyssal tiefling", sortname : "Tiefling, Abyssal", source : [["UA:TOBM", 1]], plural : "Abyssal tieflings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Abyssal"], vision : [["Darkvision", 60]], dmgres : ["Fire"], age : " reach adulthood in their late teens and live around 100 years", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 0, 1, 0, 0, 2], trait : "Abyssal Tiefling (+1 Constitution, +2 Charisma)\nAbyssal Fortitude: My HP maximum increases with half the levels I have (min 1). Abyssal Arcana: After each long rest I gain randomly determined spellcasting ability (d6). This is a cantrip, and on both 3rd and 5th level a spell that I can cast once, at 2nd-level.\n1: (Dancing Lights, Burning Hands, Alter Self); 2: (True Strike, Charm Person, Darkness)" + (!typePF ? ";" : " ") + " 3: (Light, Magic Missile, Invisibility); 4: (Spare the Dying, Hideous Laughter, Mirror Image)" + (!typePF ? ";" : " ") + " 5: (Message, Cure Wounds, Levitate); 6: (Prestidigitation, Thunderwave, Spider Climb)", abilitySave : 6, spellcastingAbility : 6, spellcastingBonus : [{ name : "Abyssal Arcana (level 1)", spells : ["dancing lights", "true strike", "light", "message", "spare the dying", "prestidigitation"], firstCol : 'atwill' }], calcChanges : { hp : function (totalHD) { return [Math.max(1, Math.floor(totalHD / 2)), "Abyssal Fortitude"]; } }, features : { "abyssal arcana (level 3)" : { name : "Abyssal Arcana (level 3)", minlevel : 3, usages : 1, recovery : "long rest", action : [["action", ""]], spellcastingBonus : [{ name : "Abyssal Arcana (level 3)", spells : ["burning hands", "charm person", "magic missile", "cure wounds", "tasha's hideous laughter", "thunderwave"], firstCol : 'oncelr' }] }, "abyssal arcana (level 5)" : { name : "Abyssal Arcana (level 5)", minlevel : 5, usages : 1, recovery : "long rest", action : [["action", ""]], spellcastingBonus : [{ name : "Abyssal Arcana (level 5)", spells : ["alter self", "darkness", "invisibility", "levitate", "mirror image", "spider climb"], firstCol : 'oncelr' }] } }, variants : RaceList.tiefling && RaceList.tiefling.variants ? RaceList.tiefling.variants : [] }; //now do the variants var UATOBM_addAbyssalTiefling = function(){ var replaceTraitTxt = ["+1 Intelligence, +2 Charisma", "+1 Constitution, +2 Charisma"]; var replaceNameTxt = ["tiefling", "abyssal tiefling"]; RaceList["abyssal tiefling-ua"].variants.forEach( function(nVar) { if (!RaceSubList["tiefling-" + nVar]) return; RaceSubList["abyssal tiefling-ua-" + nVar] = newObj(RaceSubList["tiefling-" + nVar]); var thisVar = RaceSubList["abyssal tiefling-ua-" + nVar]; thisVar.trait = thisVar.trait.replace(replaceTraitTxt[0], replaceTraitTxt[1]); thisVar.trait = thisVar.trait.replace(replaceNameTxt[0].capitalize(), replaceNameTxt[1].capitalize()); thisVar.name = thisVar.name.replace(replaceNameTxt[0], replaceNameTxt[1]); thisVar.plural = thisVar.plural.replace(replaceNameTxt[0], replaceNameTxt[1]); }); }(); /* Adds 5 spells for summoning fiends to the Sorcerer and the Wizard spell lists This code was contributed by David */ SpellsList["conjure lesser demon-ua"] = { // Still valid 2021-09-21 name : "Conjure Lesser Demon", classes : ["sorcerer", "wizard"], source : [["UA:TOBM", 2]], level : 3, school : "Conj", time : "1 a", range : "60 ft", components : "V,S,M", compMaterial : "A vial of blood from an intelligent humanoid killed within the past 24 hours", duration : "Conc, 1 h", description : "Summon 8 (16 at SL6, 32 at SL8) manes/dretches that are hostile to all non-demons, attacking nearest", descriptionFull : "You summon up to a total of eight manes or dretches that appear in unoccupied spaces you can see within range. A manes or dretch disappears when it drops to 0 hit points or when the spell ends." + "\n " + "The demons are hostile to all creatures. Roll initiative for the summoned demons as a group, which has its own turns. The demons attack the nearest non-demons to the best of their ability." + "\n " + "As part of casting the spell, you can scribe a circle on the ground with the blood used as a material component. The circle is large enough to encompass your space. The summoned demons cannot cross the circle or target anyone in it while the spell lasts. Using the material component in this manner consumes it." + AtHigherLevels + "When you cast this spell using a spell slot of 6th or 7th level, you summon sixteen demons. If you cast it using a spell slot of 8th or 9th level, you summon thirty-two demons." }; SpellsList["conjure barlgura-ua"] = { // Still valid 2021-09-21 name : "Conjure Barlgura", classes : ["sorcerer", "wizard"], source : [["UA:TOBM", 2]], level : 4, school : "Conj", time : "1 a", range : "60 ft", components : "V,S", duration : "10 min", description : "Summon a barlgura that is hostile to all non-demons, attacking the nearest", descriptionFull : "You summon a barlgura that appears in an unoccupied space you can see within range. The barlgura disappears when it drops to 0 hit points or when the spell ends." + "\n " + "The barlgura is hostile to all non-demons. Roll initiative for the barlgura, which has its own turns. At the start of its turn, it moves toward and attacks the nearest non-demon it can perceive. If two or more creatures are equally near, it picks one at random. If it cannot see any potential enemies, the barlgura moves in a random direction in search of foes." + "\n " + "As part of casting the spell, you can scribe a circle on the ground using the blood of an intelligent humanoid slain within the past 24 hours. The circle is large enough to encompass your space. The summoned barlgura cannot cross the circle or target anyone in it while the spell lasts." }; SpellsList["conjure hezrou-ua"] = { // Still valid 2021-09-21 name : "Conjure Hezrou", classes : ["sorcerer", "wizard"], source : [["UA:TOBM", 2]], level : 7, school : "Conj", time : "1 a", range : "60 ft", components : "V,S,M\u2020", compMaterial : "Food worth at least 100 gp, which the spell consumes", duration : "Conc, 1 h", description : "Summon a hezrou that I might control as long as there is food; At half HP it leaves, see B (100gp cons.)", descriptionFull : "You summon a hezrou that appears in an unoccupied space you can see within range. The hezrou disappears when it drops to 0 hit points or when the spell ends." + "\n " + "The hezrou's attitude depends on the value of the food used as a material component for this spell. Roll initiative for the hezrou, which has its own turns. At the start of the hezrou's turn, the DM makes a secret Charisma check on your behalf, with a bonus equal to the food's value divided by 20. The check DC starts at 10 and increases by 2 each round. You can issue orders to the hezrou and have it obey you as long as you succeed on the Charisma check." + "\n " + "If the check fails, the spell no longer requires concentration and the demon is no longer under your control. The hezrou then focuses on devouring any corpses it can see. If there are no such meals at hand, it attacks the nearest creatures and eats anything it kills. If its hit points are reduced to below half its hit point maximum, it returns to the Abyss." + "\n " + "As part of casting the spell, you can scribe a circle on the ground using the blood of an intelligent humanoid slain within the past 24 hours. The circle is large enough to encompass your space. The summoned hezrou cannot cross the circle or target anyone in it while the spell lasts." }; SpellsList["conjure shadow demon-ua"] = { // Still valid 2021-09-21 name : "Conjure Shadow Demon", classes : ["sorcerer", "wizard"], source : [["UA:TOBM", 3]], level : 4, school : "Conj", time : "1 a", range : "60 ft", components : "V,S,M", compMaterial : "A vial of blood from an intelligent humanoid killed within the past 24 hours", duration : "Conc, 1 h", description : "Summon a shadow demon that I control while not in bright light, can attack, and within 100 ft, see B", descriptionFull : "You summon a shadow demon that appears in an unoccupied space you can see within range. The shadow demon disappears when it drops to 0 hit points or when the spell ends." + "\n " + "Roll initiative for the shadow demon, which has its own turns. You can issue orders to the shadow demon, and it obeys you as long as it can attack a creature on each of its turns and does not start its turn in an area of bright light. If either of these conditions is not met, the shadow demon immediately makes a Charisma check contested by your Charisma check. If you fail the check, the spell no longer requires concentration and the demon is no longer under your control. The demon automatically succeeds on the check if it is more than 100 feet away from you." + "\n " + "As part of casting the spell, you can scribe a circle on the ground using the blood of an intelligent humanoid slain within the past 24 hours. The circle is large enough to encompass your space. The summoned shadow demon cannot cross the circle or target anyone in it while the spell lasts." }; SpellsList["conjure vrock-ua"] = { // Still valid 2021-09-21 name : "Conjure Vrock", classes : ["sorcerer", "wizard"], source : [["UA:TOBM", 3]], level : 5, school : "Conj", time : "1 a", range : "60 ft", components : "V,S,M\u2020", compMaterial : "A gem worth at least 100 gp, which the spell consumes", duration : "Conc, 1 h", description : "Summon a vrock that I might control for some rounds, depending on gem value, see B (100gp cons.)", descriptionFull : "You summon a vrock that appears in an unoccupied space you can see within range. The vrock disappears when it drops to 0 hit points or when the spell ends." + "\n " + "The vrock's attitude depends on the value of the gem used as a material component for this spell. Roll initiative for the vrock, which has its own turns. At the start of the vrock's turn, the DM makes a secret Charisma check on your behalf, with a bonus equal to the gem's value divided by 20. The check DC starts at 10 and increases by 2 each round. You can issue orders to the vrock and have it obey you as long as you succeed on the Charisma check." + "\n " + "If the check fails, the spell no longer requires concentration and the vrock is no longer under your control. The vrock takes no actions on its next turn and uses its telepathy to tell any creature it can see that it will fight in exchange for treasure. The creature that gives the vrock the most expensive gem can command it for the next 1d6 rounds. At the end of that time, it offers the bargain again. If no one offers the vrock treasure before its next turn begins, it attacks the nearest creatures for 1d6 rounds before returning to the Abyss." + "\n " + "As part of casting the spell, you can scribe a circle on the ground using the blood of an intelligent humanoid slain within the past 24 hours. The circle is large enough to encompass your space. The summoned vrock cannot cross the circle or target anyone in it while the spell lasts." }; // ua_20160104_Kits-of-Old.js // This file adds the content from the Unearthed Arcana: Kits of Old article to MPMB's Character Record Sheet // Define the source SourceList["UA:KoO"] = { name : "Unearthed Arcana: Kits of Old", abbreviation : "UA:KoO", group : "Unearthed Arcana", url : "https://media.wizards.com/2015/downloads/dnd/04_UA_Classics_Revisited.pdf", date : "2016/01/04" }; // Adds four subclasses, 2 for the bard, 2 for the fighter AddSubClass("bard", "college of swords-ua", { regExpSearch : /^(?=.*(college|bard|minstrel|troubadour|jongleur))(?=.*\bswords?\b).*$/i, subname : "College of Swords", subnameShort: "Swords", source : [["UA:KoO", 1]], attacks : [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], features : { "subclassfeature3" : { name : "Bonus Proficiencies", source : [["UA:KoO", 1]], minlevel : 3, description: desc("I gain proficiency with medium armor and scimitars"), armorProfs : [false, true, false, false], weaponProfs : [false, false, ["scimitar"]] }, "subclassfeature3.1" : function () { var FSfea = newObj(FightingStyles.two_weapon); FSfea.source = ["UA:KoO", 1]; FSfea.minlevel = 3; return FSfea; }(), "subclassfeature3.2" : { name : "Blade Flourish", source : [["UA:KoO", 1]], minlevel : 3, description : desc([ "When I take the Attack action on my turn, I can do one of the following flourishes:", "I have to use a dagger, longsword, rapier, scimitar, or shortsword while doing this", "\u2022 Defensive Flourish [one Bardic Inspiration die]", " As a bonus action, I add the die to my AC until the start of my next turn", "\u2022 Trick Shooter's Flourish [one Bardic Inspiration die]", " As a bonus action with a dagger ranged attack, I add the die to the attack roll", " If the target is an unattended, inanimate object, the result of the die is doubled", "\u2022 Unnerving Flourish [one Bardic Inspiration die]", " As a bonus action when reducing a foe to 0 HP with a melee attack, I leave it alive", " The target stays at 1 HP and is frightened of me for my Cha modifier in minutes", " It must also make a Cha save at a DC of my spell save + the bardic inspiration die", " If failed, it answers truthfully any questions I ask and obeys me while frightened", ]), action : [["bonus action", " (one inspiration die)"]] }, "subclassfeature14" : { name : "Battle Magic", source : [["UA:KoO", 2]], minlevel : 14, description: desc("When I use my action to cast a Bard spell, I can make one bonus action weapon attack"), action : [["bonus action", " (with Bard spell)"]] } } }); AddSubClass("bard", "college of satire-ua", { // Still valid 2021-09-21 regExpSearch : /^(?=.*(college|bard|minstrel|troubadour|jongleur))(?=.*satire).*$/i, subname : "College of Satire", subnameShort: "Satire", source : [["UA:KoO", 2]], features : { "subclassfeature3" : { name : "Bonus Proficiencies", source : [["UA:KoO", 2]], minlevel : 3, description: desc("I gain proficiency with thieves' tools, sleight of hand, and one other skill of my choice"), skills : ["Sleight of Hand"], skillstxt : "Thieves' Tools, Sleight of Hand, and any one other skill", toolProfs : [["Thieves' tools", "Dex"]] }, "subclassfeature3.1" : { name : "Tumbling Fool", source : [["UA:KoO", 2]], minlevel : 3, description: desc([ "As a bonus action, I tumble which gives the benefits of the Dash and Disengage actions", "I also gain a climbing speed at my current speed and half damage from falling", ]), action : [["bonus action", ""]], speed : { climb : { spd : "walk", enc : "walk" } } }, "subclassfeature6" : { name : "Fool's Insight", source : [["UA:KoO", 2]], minlevel : 6, description: desc("I can cast Detect Thoughts, but on a save the target suffers an embarrassing social gaffe"), usages : "Charisma modifier per ", usagescalc : "event.value = Math.max(1, What('Cha Mod'));", recovery : "long rest", spellcastingBonus : [{ name : "Fool's Insight", spells : ["detect thoughts"], selection : ["detect thoughts"], firstCol : "(S)" }], spellChanges : { "detect thoughts" : { description : "1 a read thoughts of visible Int>3 crea or detect invisible in 30 ft; save for probing, social gaffe on save", changes : "I can cast this spell a number of times equal to my Charisma modifier per long rest and when I do so and the target makes its save, it suffers an embarrassing social gaffe." } } }, "subclassfeature14" : { name : "Fool's Luck", source : [["UA:KoO", 3]], minlevel : 14, additional: "one bardic inspiration die", description: desc([ "When I fail an ability check, saving throw, or attack roll, I can add one inspiration die", "If this turns the roll into a success, I have to note down the number rolled", "I can't use this ability again until the DM subtracts the amount from a check or attack", ]), usages : 1, recovery : "reset" } } }); AddSubClass("fighter", "cavalier-ua", { regExpSearch : /cavalier/i, subname : "Cavalier", source : [["UA:KoO", 3]], fullname : "Cavalier", abilitySave : 1, features : { "subclassfeature3" : { name : "Bonus Proficiencies", source : [["UA:KoO", 3]], minlevel : 3, description: desc([ "I gain proficiency with two skills or one skill and any one tool", "For skills I can choose from Animal Handling, Insight, Performance, or Persuasion", ]), choices : ["1 Skill and 1 Tool proficiencies", "2 Skill proficiencies"], "1 skill and 1 tool proficiencies" : { name : "Bonus Proficiencies", description: desc([ "I gain proficiency with one skill and any one tool of my choice", "For the skill, I can choose Animal Handling, Insight, Performance, or Persuasion", ]), skillstxt : "Choose one from: Animal Handling, Insight, Performance, or Persuasion", toolProfs : [["Any tool", 1]] }, "2 skill proficiencies" : { name : "Bonus Proficiencies", description: desc("I gain two skill proficiencies: Animal Handling, Insight, Performance, or Persuasion"), skillstxt : "Choose two from: Animal Handling, Insight, Performance, or Persuasion" } }, "subclassfeature3.1" : { name : "Born in the Saddle", source : [["UA:KoO", 3]], minlevel : 3, description: desc([ "I have advantage on saves to avoid falling off my mount, and land on my feet if I fail", "Mounting or dismounting a creature costs me only 5 ft of movement instead of half", ]), savetxt : { adv_vs : ["falling off my mount"] } }, "subclassfeature3.2" : { name : "Combat Superiority", source : [["UA:KoO", 3]], minlevel : 3, description: desc([ "I gain a number of superiority dice that I can use to fuel special maneuvers (see below)", "I can use only one maneuver per attack; I regain all superiority dice after a short rest", "\u2022 Use after rolling to influence/control an animal; I add the superiority die to the roll", "\u2022 Use after rolling to hit; I add the superiority die to my attack roll", "\u2022 Use on a mount, before rolling to hit with a lance; I add the die to the damage roll", " Also, the target must make a Str save (DC 8 + Prof + Str mod) or be knocked prone", "\u2022 As a reaction when I'm hit or my mount is hit, I add the superiority die to AC", " If the attack still hits, I or my mount only take half damage from it", ]), additional : ["", "", "d8", "d8", "d8", "d8", "d8", "d8", "d8", "d10", "d10", "d10", "d10", "d10", "d10", "d10", "d10", "d12", "d12", "d12"], usages : [0, 0, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6], recovery : "short rest", action : [["reaction", " (if hit/mount hit)"]] }, "subclassfeature7" : { name : "Ferocious Charger", source : [["UA:KoO", 3]], minlevel : 7, usages : 1, recovery : "long rest", description: desc([ "I can use two superiority dice, instead of just one, to increase the damage of my lance", "If doing so, the target has disadvantage on its Str save to avoid being knocked prone", ]), action : [["action", ""]] }, "subclassfeature10" : { name : "Improved Combat Superiority", source : [["UA:KoO", 3]], minlevel : 10, description: desc("My superiority dice turn into d10s at 10th level and into d12s at 18th level") }, "subclassfeature15" : { name : "Relentless", source : [["UA:KoO", 4]], minlevel : 15, description: desc("I regain one superiority die if I have no more remaining when I roll initiative") } } }); AddSubClass("fighter", "scout-ua", { // Still valid 2021-09-21 regExpSearch : /scout/i, subname : "Scout", source : [["UA:KoO", 4]], features : { "subclassfeature3" : { name : "Bonus Proficiencies", source : [["UA:KoO", 4]], minlevel : 3, description: desc([ "I gain proficiency with three skills or two skills and Thieves' Tools; For skills choose from:", "Acrobatics, Athletics, Investigation, Medicine, Nature, Perception, Stealth, and Survival", ]), choices : ["2 Skill proficiencies and Thieves' Tools proficiency", "3 Skill proficiencies"], "2 skill proficiencies and thieves' tools proficiency" : { name : "Bonus Proficiencies", description : desc([ "I gain proficiency with two skills and Thieves' Tools; For skills choose from:", "Acrobatics, Athletics, Investigation, Medicine, Nature, Perception, Stealth, and Survival" ]), skillstxt : "Choose two from: Acrobatics, Athletics, Investigation, Medicine, Nature, Perception, Stealth, or Survival", toolProfs : [["Thieves' tools", "Dex"]] }, "3 skill proficiencies" : { name : "Bonus Proficiencies", description : desc([ "I gain proficiency with three skills, chosen from:", "Acrobatics, Athletics, Investigation, Medicine, Nature, Perception, Stealth, and Survival" ]), skillstxt : "Choose three from: Acrobatics, Athletics, Investigation, Medicine, Nature, Perception, Stealth, or Survival" } }, "subclassfeature3.1" : { name : "Combat Superiority", source : [["UA:KoO", 4]], minlevel : 3, description: desc([ "I gain a number of superiority dice that I can use to fuel special maneuvers (see below)", "I can use only one maneuver per attack; I regain all superiority dice after a short rest", "\u2022 Use after rolling an Athletics, Nature, Perception, Stealth, or Survival check", " I add half the superiority die to the roll (rounding up)", "\u2022 Use after rolling to hit; I add the superiority die to my attack roll", "\u2022 As a reaction when I'm hit while wearing light/medium armor, I add the die to AC", " If the attack still hits, I only take half damage from it", ]), additional : ["", "", "d8", "d8", "d8", "d8", "d8", "d8", "d8", "d10", "d10", "d10", "d10", "d10", "d10", "d10", "d10", "d12", "d12", "d12"], usages : [0, 0, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6], recovery : "short rest", action : [["reaction", " (if hit)"]] }, "subclassfeature3.2" : function () { var NEfea = newObj(ClassList.ranger.features["natural explorer"]); NEfea.source = ["UA:KoO", 4]; NEfea.minlevel = 3; NEfea.additional = ["", "", "1 favored terrain", "1 favored terrain", "1 favored terrain", "1 favored terrains", "2 favored terrains", "2 favored terrains", "2 favored terrains", "2 favored terrains", "2 favored terrains", "2 favored terrains", "2 favored terrains", "2 favored terrains", "3 favored terrains", "3 favored terrains", "3 favored terrains", "3 favored terrains", "3 favored terrains", "3 favored terrains"]; return NEfea; }(), "subclassfeature10" : { name : "Improved Combat Superiority", source : [["UA:KoO", 4]], minlevel : 10, description: desc("My superiority dice turn into d10s at 10th level and into d12s at 18th level") }, "subclassfeature15" : { name : "Relentless", source : [["UA:KoO", 4]], minlevel : 15, description: desc("I regain one superiority die if I have no more remaining when I roll initiative") } } }); // ua_20160404_Gothic-Heroes.js // This file adds the content from the Unearthed Arcana: Gothic Heroes article to MPMB's Character Record Sheet // Define the source SourceList["UA:GH"] = { name : "Unearthed Arcana: Gothic Heroes", abbreviation : "UA:GH", group : "Unearthed Arcana", url : "https://media.dnd.wizards.com/upload/articles/UA%20Gothic%20Characters.pdf", date : "2016/04/04" }; // Adds 8 new races, the Revenant versions of the Aasimar, Dragonborn, Dwarf, Elf, Gnome, Halfling, Human, and Tiefling // All revenants are still valid 2021-09-21 RaceList["aasimar revenant-ua"] = { // Based on the VGtM Aasimar, made with /u/RebelMage's help regExpSearch : /^(?=.*revenant)((?=.*aasimar)|((?=.*planetouched)(?=.*(celestial|angel)))).*$/i, name : "Aasimar Revenant", sortname : "Revenant, Aasimar", source : [["UA:GH", 1]], plural : "Aasimar", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Celestial"], vision : [["Darkvision", 60]], dmgres : ["Necrotic", "Radiant"], age : " reach adulthood in their late teens and live around 160 years", height : " range from barely 5 to well over 6 feet tall (4'8\" + 2d10\")", weight : " weigh around 165 lb (110 + 2d10 \xD7 2d4 lb)", heightMetric : " range from barely 1,5 to well over 1,8 metres tall (145 + 5d10 cm)", weightMetric : " weigh around 75 kg (50 + 5d10 \xD7 4d4 / 10 kg)", scores : [0, 0, 1, 0, 0, 2], trait : "Aasimar Revenant (+1 Constitution, +2 Charisma)" + (typePF ? "\n" : " ") + "Light Bearer: I know the Light cantrip. Healing Hands: As an action, once per long rest, I can touch to heal for my level in HP.\nRelentless Nature: I have returned to life with one goal: avenge my death or finish an unresolved task. I will rest once I fulfill my goal, but until then I can't truly die. Whenever I'm below half my max HP at the start of my turn, I regain 1 HP. If I die, I return to life within 24 hours. If my body was destroyed, it is reformed within 1 mile of where I died. I always know the distance and direction to creatures involved with my goal.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Light Bearer", spells : ["light"], selection : ["light"], firstCol : 'atwill' }], features : { "healing hands" : { name : "Healing Hands", usages : 1, minlevel : 1, recovery : "long rest", additional : ["1 HP", "2 HP", "3 HP", "4 HP", "5 HP", "6 HP", "7 HP", "8 HP", "9 HP", "10 HP", "11 HP", "12 HP", "13 HP", "14 HP", "15 HP", "16 HP", "17 HP", "18 HP", "19 HP", "20 HP"], action : [["action", ""]] } } }; RaceList["dwarf revenant-ua"] = { regExpSearch : /^(?=.*revenant)(?=.*\b(dwarfs?|dwarves|dwarfish|dwarvish|dwarven)\b).*$/i, name : "Dwarf Revenant", sortname : "Revenant, Dwarf", source : [["UA:GH", 1]], plural : "Dwarves", size : 3, speed : { walk : { spd : 25, enc : 25 } }, languageProfs : ["Common", "Dwarvish"], vision : [["Darkvision", 60]], savetxt : { adv_vs : ["poison"] }, dmgres : ["Poison"], weaponProfs : [false, false, ["battleaxe", "handaxe", "warhammer", "light hammer"]], toolProfs : [["Smith, brewer, or mason tools", 1]], age : " are considered young until they are 50 and live about 350 years", height : " stand between 4 and 5 feet tall (4' + 2d4\")", weight : " weigh around 150 lb (130 + 2d4 \xD7 2d6 lb)", heightMetric : " stand between 1,2 and 1,5 metres tall (120 + 5d4 cm)", weightMetric : " weigh around 75 kg (60 + 5d4 \xD7 4d6 / 10 kg)", scores : [0, 0, 3, 0, 0, 0], trait : "Dwarf Revenant (+3 Constitution)\nStonecunning: I have expertise on Int (History) checks related to the origin of stonework.\nRelentless Nature: I have returned to life with one goal: avenge my death or finish an unresolved task. I will rest once I fulfill my goal, but until then I can't truly die. Whenever I'm below half my max HP at the start of my turn, I regain 1 HP. If I die, I return to life within 24 hours. If my body was destroyed, it is reformed within 1 mile of where I died. I always know the distance and direction to creatures involved with my goal." }; RaceList["elf revenant-ua"] = { regExpSearch : /^(?!.*half)(?=.*revenant)(?=.*\b(elfs?|elves|elvish|elven)\b).*$/i, name : "Elf Revenant", sortname : "Revenant, Elf", source : [["UA:GH", 1]], plural : "Elves", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Elvish"], vision : [["Darkvision", 60]], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["charmed"] }, skills : ["Perception"], age : " typically claim adulthood around age 100 and can live to be 750 years old", height : " range from under 5 to over 6 feet tall (4'6\" + 2d10\")", weight : " weigh around 115 lb (90 + 2d10 \xD7 1d4 lb)", heightMetric : " range from under 1,5 to over 1,8 metres tall (140 + 5d10 cm)", weightMetric : " weigh around 55 kg (40 + 5d10 \xD7 2d4 / 10 kg)", scores : [0, 2, 1, 0, 0, 0], trait : "Elf Revenant (+2 Dexterity, +1 Constitution)\nTrance: I don't sleep, but meditate for 4 hours a day, needing only 4 hours for a long rest.\nRelentless Nature: I have returned to life with one goal: avenge my death or finish an unresolved task. I will rest once I fulfill my goal, but until then I can't truly die. Whenever I'm below half my max HP at the start of my turn, I regain 1 HP. If I die, I return to life within 24 hours. If my body was destroyed, it is reformed within 1 mile of where I died. I always know the distance and direction to creatures involved with my goal." }; RaceList["halfling revenant-ua"] = { regExpSearch : /^(?=.*revenant)(?=.*\b(halflings?|hobbits?)\b).*$/i, name : "Halfling Revenant", sortname : "Revenant, Halfling", source : [["UA:GH", 1]], plural : "Halflings", size : 4, speed : { walk : { spd : 25, enc : 15 } }, languageProfs : ["Common", "Halfling"], savetxt : { adv_vs : ["frightened"] }, age : " reach adulthood at age 20 and live around 150 years", height : " average about 3 feet tall (2'7\" + 2d4\")", weight : " weigh around 40 lb (35 + 2d4 lb)", heightMetric : " average about 90 cm tall (80 + 5d4)", weightMetric : " weigh around 18 kg (16 + 5d4 / 10 kg)", scores : [0, 2, 1, 0, 0, 0], trait : "Halfling Revenant (+2 Dexterity, +1 Constitution)" + (typePF ? "\n" : " ") + "Lucky: I reroll 1's on attack/check/save. Halfling Nimbleness: I can move through the space of anybody of a size larger than me.\nRelentless Nature: I have returned to life with one goal: avenge my death or finish an unresolved task. I will rest once I fulfill my goal, but until then I can't truly die. Whenever I'm below half my max HP at the start of my turn, I regain 1 HP. If I die, I return to life within 24 hours. If my body was destroyed, it is reformed within 1 mile of where I died. I always know the distance and direction to creatures involved with my goal." }; RaceList["gnome revenant-ua"] = { regExpSearch : /^(?=.*revenant)(?=.*\bgnomes?\b).*$/i, name : "Gnome Revenant", sortname : "Revenant, Gnome", source : [["UA:GH", 1]], plural : "Gnomes", size : 4, speed : { walk : { spd : 25, enc : 15 } }, languageProfs : ["Common", "Gnomish"], vision : [["Darkvision", 60]], savetxt : { text : ["Adv. on Int/Wis/Cha saves vs. magic"] }, age : " start adult life around age 40 and can live 350 to almost 500 years", height : " are 3 to 4 feet tall (2'11\" + 2d4\")", weight : " weigh around 40 lb (35 + 2d4 lb)", heightMetric : " are 90 to 120 cm tall (2'11\" + 5d4)", weightMetric : " weigh around 18 kg (16 + 5d4 / 10 kg)", scores : [0, 0, 1, 2, 0, 0], trait : "Gnome Revenant (+1 Constitution, +2 Intelligence)\nRelentless Nature: I have returned to life with one goal: avenge my death or finish a critical, unresolved task. I will find rest once I fulfill my goal, but until then I can't truly die. Whenever I'm below half my max HP at the start of my turn, I regain 1 HP. If I die, I return to life within 24 hours. If my body was destroyed, it is reformed within 1 mile of where I died. Any destroyed equipment is not regained. I always know the distance and direction between me and any creature involved with my goal that is on the same plane." }; RaceList["dragonborn revenant-ua"] = { regExpSearch : /^(?=.*dragonborn)(?=.*revenant).*$/i, name : "Dragonborn Revenant", sortname : "Revenant, Dragonborn", source : [["UA:GH", 1]], plural : "Dragonborn", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Draconic"], weaponOptions : [{ regExpSearch : /^(?=.*breath)(?=.*weapon).*$/i, name : "Breath weapon", source : [["UA:GH", 1]], ability : 3, type : "Natural", damage : [2, 6, "necrotic"], range : '5-ft \xD7 30-ft line', description : "Hits all in area; Con save, success - half damage; Usable only once per short rest", abilitytodamage : false, dc : true, dbBreathWeapon : true, selectNow : true }], age : " reach adulthood by 15 and live around 80 years", height : " stand well over 6 feet tall (5'6\" + 2d8\")", weight : " weigh around 240 lb (175 + 2d8 \xD7 2d6 lb)", heightMetric : " stand well over 1,8 metres tall (170 + 5d8 cm)", weightMetric : " weigh around 110 kg (80 + 5d8 \xD7 4d6 / 10 kg)", scores : [1, 0, 1, 0, 0, 1], trait : "Dragonborn Revenant (+1 Strength, +1 Constitution, +1 Charisma)\nBreath Weapon: As an action, 5 ft by 30 ft line, Dex save halves, necrotic damage.\nRelentless Nature: I have returned to life with one goal: avenge my death or finish an unresolved task. I will rest once I fulfill my goal, but until then I can't truly die. Whenever I'm below half my max HP at the start of my turn, I regain 1 HP. If I die, I return to life within 24 hours. If my body was destroyed, it is reformed within 1 mile of where I died. I always know the distance and direction to creatures involved with my goal.", dmgres : ["Necrotic"], features : { "draconic ancestry" : { name : "Draconic Ancestry", limfeaname : "Breath Weapon", minlevel : 1, usages : 1, additional : levels.map(function (n) { return (n < 6 ? 2 : n < 11 ? 3 : n < 16 ? 4 : 5) + 'd6'; }), recovery : "short rest", action : [["action", ""]], calcChanges : { atkCalc : [ function (fields, v, output) { if (v.theWea.dbBreathWeapon && CurrentRace.known === 'dragonborn revenant' && CurrentRace.level > 5) { output.die = output.die.replace('2d6', (CurrentRace.level < 11 ? 3 : CurrentRace.level < 16 ? 4 : 5) + 'd6'); }; } ] } } } }; RaceList["human revenant-ua"] = { regExpSearch : /^(?=.*human)(?=.*revenant).*$/i, name : "Human Revenant", sortname : "Revenant, Human", source : [["UA:GH", 1]], plural : "Humans", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", 1], age : " reach adulthood in their late teens and live less than 100 years", height : " range from barely 5 to well over 6 feet tall (4'8\" + 2d10\")", weight : " weigh around 165 lb (110 + 2d10 \xD7 2d4 lb)", heightMetric : " range from barely 1,5 to well over 1,8 metres tall (145 + 5d10 cm)", weightMetric : " weigh around 75 kg (50 + 5d10 \xD7 4d4 / 10 kg)", scorestxt : "+1 Constitution and +1 to two different ability scores of my choice", scores : [0, 0, 1, 0, 0, 0], trait : "Human Revenant (+1 Constitution and +1 to two different ability scores of my choice)\nRelentless Nature: I have returned to life with one goal: avenge my death or finish a critical, unresolved task. I will find rest once I fulfill my goal, but until then I can't truly die. Whenever I'm below half my max HP at the start of my turn, I regain 1 HP. If I die, I return to life within 24 hours. If my body was destroyed, it is reformed within 1 mile of where I died. Any destroyed equipment is not regained. I always know the distance and direction between me and any creature involved with my goal that is on the same plane." }; RaceList["tiefling revenant-ua"] = { regExpSearch : /^(?=.*revenant)((?=.*tiefling)|(?=.*planetouched)(?=.*(hell|abyss|fiend|devil))).*$/i, name : "Tiefling Revenant", sortname : "Revenant, Tiefling", source : [["UA:GH", 1]], plural : "Tieflings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Infernal"], vision : [["Darkvision", 60]], age : " reach adulthood in their late teens and live around 100 years", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 0, 1, 0, 0, 2], trait : "Tiefling Revenant (+1 Constitution, +2 Charisma)\nRelentless Nature: I have returned to life with one goal: avenge my death or finish a critical, unresolved task. I will find rest once I fulfill my goal, but until then I can't truly die. Whenever I'm below half my max HP at the start of my turn, I regain 1 HP. If I die, I return to life within 24 hours. If my body was destroyed, it is reformed within 1 mile of where I died. Any destroyed equipment is not regained. I always know the distance and direction between me and any creature involved with my goal that is on the same plane." }; // Adds 2 subclasses, 1 for the Fighter and 1 for the rogue AddSubClass("fighter", "monster hunter-ua", { // Still valid 2021-09-21 regExpSearch : /^(?=.*monster)(?=.*hunter).*$/i, subname : "Monster Hunter", source : [["UA:GH", 2]], fullname : "Monster Hunter", features : { "subclassfeature3" : { name : "Bonus Proficiencies", source : [["UA:GH", 2]], minlevel : 3, description: desc([ "I gain proficiency with two skills or one skill and any one tool", "For skills I can choose Arcana, History, Insight, Investigation, Nature, or Perception", ]), choices : ["1 Skill and 1 Tool proficiencies", "2 Skill proficiencies"], "1 skill and 1 tool proficiencies" : { name : "Bonus Proficiencies", description: desc([ "I gain proficiency with one skill and any one tool of my choice", "For the skill, I can choose Arcana, History, Insight, Investigation, Nature, or Perception", ]), skillstxt : "Choose one from: Arcana, History, Insight, Investigation, Nature, or Perception", toolProfs : [["Any tool", 1]] }, "2 skill proficiencies" : { name : "Bonus Proficiencies", description: desc("I gain 2 skill proficiencies: Arcana, History, Insight, Investigation, Nature, or Perception"), skillstxt : "Choose two from: Arcana, History, Insight, Investigation, Nature, and Perception" } }, "subclassfeature3.1" : { name : "Combat Superiority", source : [["UA:GH", 2]], minlevel : 3, description: desc([ "I gain a number of superiority dice that I can use to fuel special maneuvers (see below)", "I can use only one maneuver per attack; I regain all superiority dice after a short rest", "\u2022 Use after rolling to hit; I add the superiority die to my attack roll", "\u2022 Use after damaging a creature; I add the superiority die to the damage roll", " Also, the attack imposes disadvantage on any concentration save resulting from it", "\u2022 Use after Int/Wis/Cha save, before knowing success/fail; add the die to the save total", "\u2022 Use with Wis (Perception) to detect hidden or Wis (Insight) to see if lying to me", " After rolling but before knowing if success/fail; I add the superiority die to the check", ]), additional : ["", "", "d8", "d8", "d8", "d8", "d8", "d8", "d8", "d10", "d10", "d10", "d10", "d10", "d10", "d10", "d10", "d12", "d12", "d12"], usages : [0, 0, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6], recovery : "short rest" }, "subclassfeature3.2" : { name : "Hunter's Mysticism", source : [["UA:GH", 2]], minlevel : 3, usages : 1, recovery : "long rest", description: desc([ "I can cast Detect Magic as a ritual and Protection from Evil & Good once per long rest", "I gain the ability to speak one of the following languages: Abyssal, Celestial, or Infernal", ]), action : [["action", " (Prot vs. Evil/Good)"]], languageProfs : [["Abyssal, Celestial, or Infernal", 1]], spellcastingBonus : [{ name : "Spirit Seeker", spells : ["detect magic"], selection : ["detect magic"], firstCol : SpellRitualTag, spellcastingAbility : 5 }, { name : "Spirit Seeker", spells : ["protection from evil and good"], selection : ["protection from evil and good"], firstCol : "oncelr" }], spellChanges : { "detect magic" : { time : "10 min", changes : "I can cast this spell only as a ritual, thus its casting time is 10 minutes longer." } } }, "subclassfeature7" : { name : "Monster Slayer", source : [["UA:GH", 2]], minlevel : 7, usages : 1, recovery : "long rest", description: desc([ "Whenever I use a superiority die, I can choose to expend two, adding both to the roll", "If the target is an aberration, fey, fiend, or undead, both dice deal maximum damage", ]), action : [["action", ""]] }, "subclassfeature10" : { name : "Improved Combat Superiority", source : [["UA:GH", 2]], minlevel : 10, description: desc("My superiority dice turn into d10s at 10th level and into d12s at 18th level") }, "subclassfeature15" : { name : "Relentless", source : [["UA:GH", 2]], minlevel : 15, description: desc("I regain one superiority die if I have no more remaining when I roll initiative") } } }); AddSubClass("rogue", "inquisitive-ua", { regExpSearch : /^(?=.*(rogue|miscreant))(?=.*inquisitive).*$/i, subname : "Inquisitive", source : [["UA:GH", 3]], features : { "subclassfeature3" : { name : "Ear for Deceit", source : [["UA:GH", 3]], minlevel : 3, description: desc([ "When using Wis (Insight) to sense if someone is lying, I can choose to use a fixed total", "This total is 8 + Wis modifier + proficiency bonus (if proficient, or twice if expertise)", ]), }, "subclassfeature3.1" : { name : "Eye for Detail", source : [["UA:GH", 3]], minlevel : 3, description: desc([ "I can use the bonus action granted by Cunning Action for the following as well:", "\u2022 To make a Wisdom (Perception) check to spot a hidden creature or object", "\u2022 To make an Intelligence (Investigation) check to uncover and decipher clues", "\u2022 To use Insightful Fighting (see below)", ]), }, "subclassfeature3.2" : { name : "Insightful Fighting", source : [["UA:GH", 3]], minlevel : 3, description: desc([ "As an action or bonus action, I can decipher the tactics of an active opponent I can see", "I have to make a Wisdom (Insight) check vs. the target's Charisma (Deception) check", "If I succeed, I can use sneak attack on the target regardless of advantage/disadvantage", "This benefit lasts for 1 minute or until I successfully use Insightful Fighting again", ]), action : [["action", ""]] }, "subclassfeature9" : { name : "Steady Eye", source : [["UA:GH", 3]], minlevel : 9, usages : 1, recovery : "long rest", description: desc("If not moving during my turn, I gain adv. on Wis (Perception) to find hidden things") }, "subclassfeature13" : { name : "Unerring Eye", source : [["UA:GH", 3]], minlevel : 13, description: desc([ "As an action, I can sense magical deceptions within 30 feet of me, but not what it does", "I learn the presence of illusions, shapechanged creatures, or magic designed to deceive", ]), action : [["action", ""]] }, "subclassfeature17" : { name : "Eye for Weakness", source : [["UA:GH", 3]], minlevel : 17, description: desc("While my Insightful Fighting is active, I add 2d6 to sneak attacks against that target") } } }); // ua_20160606_Feats.js // This file adds the content from the Unearthed Arcana: Feats article to MPMB's Character Record Sheet // Define the source SourceList["UA:F"] = { name : "Unearthed Arcana: Feats", abbreviation : "UA:F", group : "Unearthed Arcana", url : "https://media.wizards.com/2016/downloads/DND/UA-Feats-V1.pdf", date : "2016/06/06" }; // Add 8 feats: 4 'weapon mastery' feats and 4 'tool' feats // This doesn't add the "Warhammer Master" feat, as that is only in the article to illustrate how not to design a feat FeatsList["fell handed-ua"] = { name : "Fell Handed", source : [["UA:F", 2], ["UA", 0]], descriptionFull : "You master the handaxe, battleaxe, greataxe, warhammer, and maul. You gain the following benefits when using any of them:\n \u2022 You gain a +1 bonus to attack rolls you make with the weapon.\n \u2022 Whenever you have advantage on a melee attack roll you make with the weapon and hit, you can knock the target prone if the lower of the two d20 rolls would also hit the target.\n \u2022 Whenever you have disadvantage on a melee attack roll you make with the weapon, the target takes bludgeoning damage equal to your Strength modifier (minimum of 0) if the attack misses but the higher of the two d20 rolls would have hit.\n \u2022 If you use the Help action to aid an ally's melee attack while you're wielding the weapon, you knock the target's shield aside momentarily. In addition to the ally gaining advantage on the attack roll, the ally gains a +2 bonus to the roll if the target is using a shield.", description : "With a handaxe, battleaxe, greataxe, warhammer, or maul, I get +1 to hit, knock prone if I have adv. and hit with both rolls, with disadv. still do Str mod in bludg. damage if I miss but the other die would've hit, can use Help to give ally +2 to hit vs. enemy with a shield.", calcChanges : { atkAdd : [ function (fields, v) { if ((/handaxe|battleaxe|greataxe|warhammer|maul/).test(v.baseWeaponName)) { fields.Description += (fields.Description ? '; ' : '') + 'Adv: knock prone if both dice hit; Disadv: Str Mod bludg. damage on miss but 2nd die would hit'; }; }, "With a handaxe, battleaxe, greataxe, warhammer, or maul, I get the following benefits:\n \u2022 +1 to hit;\n \u2022 When attacking with advantage, the target is knocked prone if both die would hit;\n \u2022 When attacking with disadvantage and missing, still do my Strength modifier in bludgeoning damage." ], atkCalc : [ function (fields, v, output) { if ((/handaxe|battleaxe|greataxe|warhammer|maul/).test(v.baseWeaponName)) output.extraHit += 1; }, ""] } }; FeatsList["blade mastery-ua"] = { name : "Blade Mastery", source : [["UA:F", 2], ["UA", 0]], descriptionFull : "You master the shortsword, longsword, scimitar, rapier, and greatsword. You gain the following benefits when using any of them:\n \u2022 You gain a +1 bonus to attack rolls you make with the weapon.\n \u2022 On your turn, you can use your reaction to assume a parrying stance, provided you have the weapon in hand. Doing so grants you a +1 bonus to your AC until the start of your next turn or until you're not holding the weapon.\n \u2022 When you make an opportunity attack with the weapon, you have advantage on the attack roll.", description : "With a shortsword, longsword, greatsword, scimitar, or rapier, I get +1 to hit, advantage on opportunity attacks, and with the weapon in hand I can use my reaction to assume a parrying stance that gives me +1 AC until the start of my next turn.", calcChanges : { atkAdd : [ function (fields, v) { if ((/shortsword|longsword|greatsword|scimitar|rapier/).test(v.baseWeaponName)) { fields.Description += (fields.Description ? '; ' : '') + 'Advantage on opportunity attacks'; }; }, "With a shortsword, longsword, greatsword, scimitar, or rapier, I get the following benefits:\n \u2022 +1 to hit;\n \u2022 Advantage on opportunity attacks." ], atkCalc : [ function (fields, v, output) { if ((/shortsword|longsword|greatsword|scimitar|rapier/).test(v.baseWeaponName)) output.extraHit += 1; }, ""] }, action : [["reaction", " Parrying Stance"]] }; FeatsList["flail mastery-ua"] = { name : "Flail Mastery", source : [["UA:F", 3], ["UA", 0]], descriptionFull : "The flail is a tricky weapon to use, but you have spent countless hours mastering it. You gain the following benefits:\n \u2022 You gain a +1 bonus to attack rolls you make with a flail.\n \u2022 As a bonus action on your turn, you can prepare yourself to extend your flail to sweep over targets' shields. Until the end of this turn, your attack rolls with a flail gain a +2 bonus against any target using a shield.\n \u2022 When you hit with an opportunity attack using a flail, the target must succeed on a Strength saving throw (DC 8 + your proficiency bonus + your Strength modifier) or be knocked prone.", calculate : "event.value = 'With a flail, I get +1 to hit, and enemies hit by an opportunity attack with it have to make a Str save DC ' + (8 + Number(How('Proficiency Bonus')) + What('Str Mod')) + ' (8 + Prof Bonus + Str mod) or be knocked prone. As a bonus action, I can get +2 to hit with my flail vs. targets with shields until the end of my turn.';", calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == 'flail') { fields.Description += (fields.Description ? '; ' : '') + 'On opportunity attack hit, Strength save (DC 8 + Prof Bonus + Str mod) or knocked prone'; }; }, "With a flail, I get the following benefits:\n \u2022 +1 to hit;\n \u2022 Targets hit with it must make a Strength saving throw (DC 8 + proficiency bonus + Strength modifier) or be knocked prone." ], atkCalc : [ function (fields, v, output) { if (v.baseWeaponName == 'flail') output.extraHit += 1; }, ""] }, action : [["bonus action", ""]] }; FeatsList["spear mastery-ua"] = { name : "Spear Mastery", source : [["UA:F", 3], ["UA", 0]], descriptionFull : "Though the spear is a simple weapon to learn, it rewards you for the time you have taken to master it. You gain the following benefits:\n \u2022 You gain a +1 bonus to attack rolls you make with a spear.\n \u2022 When you use a spear, its damage die changes from a d6 to a d8, and from a d8 to a d10 when wielded with two hands. (This benefit has no effect if another feature has already improved the weapon's die.)\n \u2022 You can set your spear to receive a charge. As a bonus action, choose a creature you can see that is at least 20 feet away from you. If that creature moves within your spear's reach on its next turn, you can make a melee attack against it with your spear as a reaction. If the attack hits, the target takes an extra 1d8 piercing damage, or an extra 1d10 piercing damage if you wield the spear with two hands. You can't use this ability if the creature used the Disengage action before moving.\n \u2022 As a bonus action on your turn, you can increase your reach with a spear by 5 feet for the rest of your turn.", description : "With a spear, I get +1 to hit and it does d8 damage (versatile d10). As a bonus action, I select a target at least 20 ft away. If it moves in reach on its next turn, I can attack it as a reaction, extra damage die. As a bonus action, I can increase the spear's reach by 5 ft.", calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == 'spear') { fields.Damage_Die = fields.Damage_Die === '1d6' ? '1d8' : fields.Damage_Die; fields.Description = fields.Description.replace('versatile (1d8)', 'versatile (1d10)'); }; }, "With a spear, I get the following benefits:\n \u2022 +1 to hit;\n \u2022 The spear damage die increases to d8 (versatile d10).", 1 ], atkCalc : [ function (fields, v, output) { if (v.baseWeaponName == 'spear') output.extraHit += 1; }, ""] }, action : [["bonus action", " (set vs. charge)"], ['bonus action', ' (increase reach)']] }; FeatsList["alchemist-ua"] = { name : "Alchemist", source : [["UA:F", 4], ["UA", 0]], descriptionFull : "You have studied the secrets of alchemy and are an expert in its practice, gaining the following benefits:\n \u2022 Increase your Intelligence score by 1, to a maximum of 20.\n \u2022 You gain proficiency with alchemist's supplies. If you are already proficient with them, you add double your proficiency bonus to checks you make with them.\n \u2022 As an action, you can identify one potion within 5 feet of you, as if you had tasted it. You must see the liquid for this benefit to work.\n \u2022 Over the course of any short rest, you can temporarily improve the potency of one potion of healing of any rarity. To use this benefit, you must have alchemist's supplies with you, and the potion must be within reach. If the potion is drunk no more than 1 hour after the short rest ends, the creature drinking the potion can forgo the potion's die roll and regains the maximum number of hit points that the potion can restore.", description : "I gain proficiency with alchemist's supplies, or expertise if already proficient. As an action, I can identify a potion within 5 ft. During a rest with alchemist's supplies, I can enhance a potion of healing, to heal its max. Consuming it within 1 hour maximizes its effects [+1 Int]", scores : [0, 0, 0, 1, 0, 0], action : [["action", " (identify potion)"]], toolProfs : [["Alchemist's supplies", "Int"]], eval : function () { if ((/(alchemist|alchemy).*(supplies|kit)/i).test(What('Too Text'))) { Checkbox('Too Exp', true); }; }, removeeval : function () { if ((/(alchemist|alchemy).*(supplies|kit)/i).test(What('Too Text'))) { Checkbox('Too Exp', false); }; } }; FeatsList["burglar-ua"] = { name : "Burglar", source : [["UA:F", 4], ["UA", 0]], descriptionFull : "You pride yourself on your quickness and your close study of certain clandestine activities. You gain the following benefits:\n \u2022 Increase your Dexterity score by 1, to a maximum of 20.\n \u2022 You gain proficiency with thieves' tools. If you are already proficient with them, you add double your proficiency bonus to checks you make with them.", description : "I gain proficiency with thieves' tools, or expertise with them if I'm already proficient. [+1 Dexterity]", scores : [0, 1, 0, 0, 0, 0], toolProfs : [["Thieves' tools", "Dex"]], eval : function () { if ((/thieve.?s.*tools/i).test(What('Too Text'))) { Checkbox('Too Exp', true); }; }, removeeval : function () { if ((/thieve.?s.*tools/i).test(What('Too Text'))) { Checkbox('Too Exp', false); }; } }; FeatsList["gourmand-ua"] = { name : "Gourmand", source : [["UA:F", 4]], descriptionFull : "You have mastered a variety of special recipes, allowing you to prepare exotic dishes with useful effects. You gain the following benefits:\n \u2022 Increase your Constitution score by 1, to a maximum of 20.\n \u2022 You gain proficiency with cook's utensils. If you are already proficient with them, you add double your proficiency bonus to checks you make with them.\n \u2022 As an action, you can inspect a drink or plate of food within 5 feet of you and determine whether it is poisoned, provided that you can see and smell it.\n \u2022 During a long rest, you can prepare and serve a meal that helps you and your allies recover from the rigors of adventuring, provided you have suitable food, cook's utensils, and other supplies on hand. The meal serves up to six people, and each person who eats it regains two additional Hit Dice at the end of the long rest. In addition, those who partake of the meal have advantage on Constitution saving throws against disease for the next 24 hours.", description : "I gain proficiency with cook's utensils, or expertise if already proficient. As an action, I can detect poison in food within 5 ft. In a long rest with food/supplies, I can have 6 creatures regain 2 extra HD and give them adv. on Con saves vs. disease for 24 hours. [+1 Con]", scores : [0, 0, 1, 0, 0, 0], action : [["action", " (inspect food)"]], toolProfs : [["Cook's utensils", "Int"]], eval : function () { if ((/cook.*utensils/i).test(What('Too Text'))) { Checkbox('Too Exp', true); }; }, removeeval : function () { if ((/cook.*utensils/i).test(What('Too Text'))) { Checkbox('Too Exp', false); }; } }; FeatsList["master of disguise-ua"] = { name : "Master of Disguise", source : [["UA:F", 4], ["UA", 0]], descriptionFull : "You have honed your ability to shape your personality and to read the personalities of others. You gain the following benefits:\n \u2022 Increase your Charisma score by 1, to a maximum of 20.\n \u2022 You gain proficiency with the disguise kit. If you are already proficient with it, you add double your proficiency bonus to checks you make with it.\n \u2022 If you spend 1 hour observing a creature, you can then spend 8 hours crafting a disguise you can quickly don to mimic that creature. Making the disguise requires a disguise kit. You must make checks as normal to disguise yourself, but you can assume the disguise as an action.", description : "I gain proficiency with the disguise kit, or expertise with it if I'm already proficient. After observing a creature for 1 hour, I can craft a disguise to mimic it in 8 hours with a disguise kit. Once finished, I can don this disguise as an action. [+1 Charisma]", scores : [0, 0, 0, 0, 0, 1], action : [["action", " (don disguise)"]], toolProfs : [["Disguise kit", "Cha"]], eval : function () { if ((/disguise.*kit/i).test(What('Too Text'))) { Checkbox('Too Exp', true); }; }, removeeval : function () { if ((/disguise.*kit/i).test(What('Too Text'))) { Checkbox('Too Exp', false); }; } }; // ua_20160801_The-Faithful.js // This file adds the content from the Unearthed Arcana: The Faithful article to MPMB's Character Record Sheet // Define the source SourceList["UA:TF"] = { name : "Unearthed Arcana: The Faithful", abbreviation : "UA:TF", group : "Unearthed Arcana", url : "https://media.wizards.com/2016/dnd/downloads/UA%20Non-Divine%20Faithful%20SFG.pdf", date : "2016/08/01" }; // Adds 2 subclasses, 1 for the Warlock and 1 for the Wizard AddSubClass("warlock", "the seeker-ua", { // Still valid 2021-09-21 regExpSearch : /^(?=.*warlock)(?=.*seeker).*$/i, subname : "the Seeker", source : [["UA:TF", 1]], spellcastingExtra : ["feather fall", "jump", "levitate", "locate object", "clairvoyance", "sending", "arcane eye", "locate creature", "legend lore", "passwall"], features : { "subclassfeature1" : { name : "Shielding Aurora", source : [["UA:TF", 1]], minlevel : 1, description: desc([ "As a bonus action, I create a whirling aurora of brilliant energy around me", "It lasts until the end of my next turn and grants me resistance to all damage", "Any hostile ending its turn in 10 ft of me get Warlock level + Cha mod radiant damage", ]), usages : 1, recovery : "short rest", action : [["bonus action", ""]] }, "subclassfeature6" : { name : "Astral Refuge", source : [["UA:TF", 2]], minlevel : 6, description: desc([ "As an action, I can step into an astral refuge, coming back at the end of the turn", "While in the astral refuge, I can take two actions to cast spells targeting just me", ]), action : [["action", ""]] }, "subclassfeature10" : { name : "Far Wanderer", source : [["UA:TF", 2]], minlevel : 10, description: desc("I no longer need to breathe, and I gain resistance to fire damage and cold damage"), dmgres : ["Cold", "Fire"] }, "subclassfeature14" : { name : "Astral Sequestration", source : [["UA:TF", 2]], minlevel : 14, description: desc([ "With a 5 minutes ritual, I can shift myself and ten willing creatures to the Astral Plane", "While sequestered an Astral Plane, we gain the full benefits of a short rest", "After this rest, we return to the same space as before, without any time having passed", ]), usages : 1, recovery : "long rest" } } }); // Add a Pact Boon option that is only available for "the Seeker" subclass AddFeatureChoice(ClassList.warlock.features["pact boon"], false, "Pact of the Star Chain", { name : "Pact of the Star Chain", source : [["UA:TF", 1]], description : desc([ "My patron grants me an item of power which disappears when I die", "While it is on my person, I can cast Augury as a ritual", "Additionally, once per short rest, I can get advantage on an Intelligence check", "If I lose this item I can perform a 1-hour ceremony to get a replacement" ]), usages : 1, recovery : "short rest", spellcastingBonus : [{ name : "Pact of the Star Chain", spells : ["augury"], selection : ["augury"], firstCol : SpellRitualTag, }], spellChanges : { "augury" : { time : "11 min", changes : "With my Pact of the Star Chain boon I can cast Augury only as a ritual, thus requiring 10 extra minutes to cast it." } }, prereqeval : function(v) { return classes.known.warlock && classes.known.warlock.subclass.indexOf("the seeker") !== -1 ? true : "skip"; } }); RunFunctionAtEnd(function() { var theTheurgySubclass = AddSubClass("wizard", "theurgy-ua", { // Still valid 2021-09-21 regExpSearch : /^((?=.*mystic)(?=.*theurge))|(?=.*(theurgy|theurgist)).*$/i, subname : "Theurgy", source : [["UA:TF", 1], ["UA:WR", 1]], fullname : "Theurgist", features : { "subclassfeature2" : { name : "Arcane Initiate", source : [["UA:TF", 2], ["UA:WR", 1]], minlevel : 2, description: desc([ 'Choose a Cleric Domain using the "Choose Feature" button above', "When I gain a wizard level I can replace one of the spells I would add to my spellbook", "I can replace it with one of the chosen domain spells, if it is of a level I can cast", "If my spellbook has all the domain spells, I can select any cleric spell of a level I can cast", "Other wizards cannot copy cleric spells from my spellbook into their own spellbooks", ]), calcChanges : { spellList : [ function(spList, spName, spType) { if (spName !== "wizard" || spType.indexOf("bonus") !== -1 || !CurrentSpells.wizard.extra || !CurrentSpells.wizard.selectSp || !spList.level || !spList.level[1]) return; var domainSpells = CurrentSpells.wizard.extra; // now stop this function if even one of the domain spells is not already in the spellbook var knownSpells = [].concat(CurrentSpells.wizard.selectSp ? CurrentSpells.wizard.selectSp : []).concat(CurrentSpells.wizard.selectSpSB ? CurrentSpells.wizard.selectSpSB : []); for (var i = 0; i < domainSpells.length; i++) { if (knownSpells.indexOf(domainSpells[i]) == -1) return; } // get all the cleric spells, level 1-9 var clericSpells = CreateSpellList({"class" : "cleric", level : [1,9]}); spList.extraspells = spList.extraspells.concat(clericSpells); }, "When I gain a wizard level after my spellbook already has all the spells of my chosen domain, I can instead select any cleric spell of a level I can cast as one of the spells I gain from levelling up." ] }, choices : [], choiceDependencies : [{ feature : "subclassfeature2.3" }, { feature : "subclassfeature6" }, { feature : "subclassfeature10" }, { feature : "subclassfeature14" }] }, "subclassfeature2.1" : { name : "Channel Arcana", source : [["UA:TF", 2], ["UA:WR", 1]], minlevel : 2, description: desc("I can channel arcane energy from my deity; the save for this is my wizard spell DC"), usages : [0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3], recovery : "short rest" }, "subclassfeature2.2" : { name : "Channel Arcana: Divine Arcana", source : [["UA:TF", 2], ["UA:WR", 1]], minlevel : 2, description: desc([ "As a bonus action, I speak a prayer to control the flow of magic around me", "The next spell I cast gains a +2 bonus to its attack roll or saving throw DC", ]), action : [["bonus action", ""]] }, "subclassfeature2.3" : { name : "Channel Arcana: Domain", source : [["UA:TF", 2], ["UA:WR", 1]], minlevel : 2, description: desc('Use the "Choose Feature" button above to select the domain'), choices : [], choicesNotInMenu : true }, "subclassfeature6" : { name : "Arcane Acolyte", source : [["UA:TF", 3], ["UA:WR", 1]], minlevel : 6, description: desc('Use the "Choose Feature" button above to select the domain'), choices : [], choicesNotInMenu : true }, "subclassfeature10" : { name : "Arcane Priest", source : [["UA:TF", 3], ["UA:WR", 2]], minlevel : 10, description: desc('Use the "Choose Feature" button above to select the domain'), choices : [], choicesNotInMenu : true }, "subclassfeature14" : { name : "Arcane High Priest", source : [["UA:TF", 3], ["UA:WR", 2]], minlevel : 14, description: desc('Use the "Choose Feature" button above to select the domain'), choices : [], choicesNotInMenu : true } } }); var MTfeat = ClassSubList[theTheurgySubclass].features; for (var i = 0; i < ClassList.cleric.subclasses[1].length; i++) { var aDomain = ClassSubList[ClassList.cleric.subclasses[1][i]]; if (!aDomain) continue; var dSource = aDomain.source ? aDomain.source : aDomain.features["subclassfeature1"] && aDomain.features["subclassfeature1"].source ? aDomain.features["subclassfeature1"].source : [["UA:TF", 0], ["UA:WR", 0]]; var suffix = 1; var entryDoNm = aDomain.subname; while (MTfeat["subclassfeature2"].choices.indexOf(entryDoNm) !== -1) { suffix += 1; entryDoNm = aDomain.subname + " (" + suffix + ")"; }; MTfeat["subclassfeature2"].choices.push(entryDoNm); MTfeat["subclassfeature2"][entryDoNm.toLowerCase()] = { name : "Arcane Initiate: " + aDomain.subname, source : dSource, spellcastingExtra : aDomain.spellcastingExtra, description: desc([ "When I gain a wizard level I can replace one of the spells I would add to my spellbook", "I can replace it with one of the " + aDomain.subname.toLowerCase() + " spells, if it is of a level I can cast", "If my spellbook has all the domain spells, I can select any cleric spell of a level I can cast", "Other wizards cannot copy cleric spells from my spellbook into their own spellbooks", ]), }; var AIdomain = MTfeat["subclassfeature2"][entryDoNm.toLowerCase()]; for (var aFea in aDomain.features) { var dFea = aDomain.features[aFea]; if (dFea.minlevel === 2 && (/channel divinity/i).test(dFea.name)) { MTfeat["subclassfeature2.3"].choices.push(entryDoNm); MTfeat["subclassfeature2.3"][entryDoNm.toLowerCase()] = newObj(dFea); MTfeat["subclassfeature2.3"][entryDoNm.toLowerCase()].name = MTfeat["subclassfeature2.3"][entryDoNm.toLowerCase()].name.replace(/channel divinity/i, "Channel Arcana"); }; if (dFea.minlevel === 1 && !dFea.armor && !dFea.weapons && !dFea.armorProfs && !dFea.weaponProfs) { if (MTfeat["subclassfeature6"].choices.indexOf(entryDoNm) === -1) { //if the entry does not exist yet MTfeat["subclassfeature6"].choices.push(entryDoNm); MTfeat["subclassfeature6"][entryDoNm.toLowerCase()] = newObj(dFea); } else { //add to the existing entry var theFea = MTfeat["subclassfeature6"][entryDoNm.toLowerCase()]; theFea.name += " \u0026 " + dFea.name; theFea.description += dFea.description; for (var subFea in dFea) { if (theFea[subFea] === undefined) theFea[subFea] = dFea[subFea]; }; }; }; if (dFea.minlevel === 6 && !dFea.armor && !dFea.weapons && !dFea.armorProfs && !dFea.weaponProfs) { if (MTfeat["subclassfeature10"].choices.indexOf(entryDoNm) === -1) { //if the entry does not exist yet MTfeat["subclassfeature10"].choices.push(entryDoNm); MTfeat["subclassfeature10"][entryDoNm.toLowerCase()] = newObj(dFea); } else { //add to the existing entry var theFea = MTfeat["subclassfeature10"][entryDoNm.toLowerCase()]; theFea.name += " \u0026 " + dFea.name; theFea.description += dFea.description; for (var subFea in dFea) { if (theFea[subFea] === undefined) theFea[subFea] = dFea[subFea]; }; }; }; if (dFea.minlevel === 17 && !dFea.armor && !dFea.weapons && !dFea.armorProfs && !dFea.weaponProfs) { if (MTfeat["subclassfeature14"].choices.indexOf(entryDoNm) === -1) { //if the entry does not exist yet MTfeat["subclassfeature14"].choices.push(entryDoNm); MTfeat["subclassfeature14"][entryDoNm.toLowerCase()] = newObj(dFea); } else { //add to the existing entry var theFea = MTfeat["subclassfeature14"][entryDoNm.toLowerCase()]; theFea.name += " \u0026 " + dFea.name; theFea.description += dFea.description; for (var subFea in dFea) { if (theFea[subFea] === undefined) theFea[subFea] = dFea[subFea]; }; }; }; }; }; }); // ua_20160912_The-Ranger,-Revised.js // This file adds the content from the Unearthed Arcana: The Ranger, Revised article to MPMB's Character Record Sheet // Define the source SourceList["UA:RR"] = { name : "Unearthed Arcana: The Ranger, Revised", abbreviation : "UA:RR", group : "Unearthed Arcana", url : "https://media.wizards.com/2016/dnd/downloads/UA_RevisedRanger.pdf", date : "2016/09/12" }; //adds an alternative ranger class, including three subclasses ClassList.rangerua = { regExpSearch : /^((?=.*(ranger|strider))|((?=.*(nature|natural))(?=.*(knight|fighter|warrior|warlord|trooper)))).*$/i, name : "Ranger", source : [["UA:RR", 2]], primaryAbility : "Dexterity and Wisdom", abilitySave : 5, prereqs : "Dexterity 13 and Wisdom 13", improvements : [0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5, 5], die : 10, saves : ["Str", "Dex"], skillstxt : { primary : "Choose three from Animal Handling, Athletics, Insight, Investigation, Nature, Perception, Stealth, and Survival", secondary : "Choose one from Animal Handling, Athletics, Insight, Investigation, Nature, Perception, Stealth, or Survival" }, armorProfs : { primary : [true, true, false, true], secondary : [true, true, false, true] }, weaponProfs : { primary : [true, true], secondary : [true, true] }, equipment : "Ranger starting equipment:\n \u2022 Scale mail -or- leather armor;\n \u2022 Two shortswords -or- two simple melee weapons;\n \u2022 A dungeoneer's pack -or- an explorer's pack;\n \u2022 A longbow and a quiver of 20 arrows.\n\nAlternatively, choose 5d4 \xD7 10 gp worth of starting equipment instead of both the class' and the background's starting equipment.", subclasses : ["Ranger Conclaves", []], subclassGainedLevel : 3, attacks : [1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], spellcastingFactor : 2, spellcastingList : { "class" : "ranger" }, spellcastingKnown : { spells : [0, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11] }, features : { "favored enemy" : { name : "Favored Enemy", source : [["UA:RR", 2]], minlevel : 1, description: desc([ 'Use the "Choose Feature" button above to select a favored enemy', "Choose from beasts, fey, humanoids, monstrosities, or undead", "I get a bonus to damage rolls with weapon attacks against the chosen favored enemy", "I have adv. on Wis (Survival) to track and Int checks to recall info about them", "I also learn one language of my choice, typically one associated with the favored enemy", ]), additional : levels.map(function (n) { return (n < 6 ? "+2" : "+4") + " weapon attack damage"; }), choices : ["Beasts", "Fey", "Humanoids", "Monstrosities", "Undead"], "beasts" : { name : "Favored Enemy: Beasts", description: desc([ "I get a bonus to damage rolls with weapon attacks against beasts", "I have adv. on Wis (Survival) to track and Int checks to recall info about beasts", "I learn a language, typically one spoken by or associated with beasts", ]), }, "fey" : { name : "Favored Enemy: Fey", description: desc([ "I get a bonus to damage rolls with weapon attacks against fey", "I have adv. on Wis (Survival) to track and Int checks to recall info about fey", "I learn a language, typically one spoken by or associated with fey", ]), }, "humanoids" : { name : "Favored Enemy: Humanoids", description: desc([ "I get a bonus to damage rolls with weapon attacks against humanoids", "I have adv. on Wis (Survival) to track and Int checks to recall info about humanoids", "I learn a language, typically one spoken by or associated with humanoids", ]), }, "monstrosities" : { name : "Favored Enemy: Monstrosities", description: desc([ "I get a bonus to damage rolls with weapon attacks against monstrosities", "I have adv. on Wis (Survival) to track and Int checks to recall info about monstrosities", "I learn a language, typically one spoken by or associated with monstrosities", ]), }, "undead" : { name : "Favored Enemy: Undead", description: desc([ "I get a bonus to damage rolls with weapon attacks against undead", "I have adv. on Wis (Survival) to track and Int checks to recall info about undead", "I learn a language, typically one spoken by or associated with undead", ]), }, languageProfs : [1], calcChanges : { atkCalc : [ function (fields, v, output) { if (!v.isSpell && classes.known.rangerua && classes.known.rangerua.level && (/favou?red.{1,2}enemy/i).test(v.WeaponTextName)) { output.extraDmg += classes.known.rangerua.level < 6 ? 2 : 4; }; }, "If I include the words 'Favored Enemy' in the name or description of a weapon, it gets bonus damage, depending on my Ranger level." ] } }, "natural explorer" : { name : "Natural Explorer", source : [["UA:RR", 3]], minlevel : 1, description: desc([ "On my first turn in combat, I have adv. on attacks against those that did not yet act", "I ignore difficult terrain; I have adv. on Initiative; I have benefits in travel, see page 3", ]), "travel benefits" : { name : "Travel Benefits", extraname : "Natural Explorer", source : [["UA:RR", 3]], description : desc([ "After one hour of traveling in the wilderness I gain the following benefits:", " \u2022 My allies and I are not slowed by difficult terrain and can't get lost except by magic", " \u2022 I am alert to danger even when doing something else; I forage twice as much food", " \u2022 If alone (or alone with animal companion), I can move stealthily at my normal pace", " \u2022 When tracking others, I also learn their exact number, size, and time since passing" ]) }, autoSelectExtrachoices : [{ extrachoice : "travel benefits" }], advantages : [["Initiative", true]] }, "fighting style" : function () { var FSfea = newObj(ClassList.ranger.features["fighting style"]); FSfea.source = ["UA:RR", 3]; return FSfea; }(), "spellcasting" : { name : "Spellcasting", source : [["UA:RR", 3]], minlevel : 2, description: desc("I can cast ranger spells that I know, using Wisdom as my spellcasting ability"), additional : ["", "2 spells known", "3 spells known", "3 spells known", "4 spells known", "4 spells known", "5 spells known", "5 spells known", "6 spells known", "6 spells known", "7 spells known", "7 spells known", "8 spells known", "8 spells known", "9 spells known", "9 spells known", "10 spells known", "10 spells known", "11 spells known", "11 spells known"] }, "primeval awareness" : { name : "Primeval Awareness", source : [["UA:RR", 4]], minlevel : 3, description: desc([ "If I haven't attacked a beast within the last 10 min, I can communicate with it", "As an action, I convey simple ideas, and read mood, intent, emotions, needs, etc.", "By concentrating for 1 min, I know if any of my favored enemies are within 5 miles", "Per group, I sense the number, general direction, distance, and type of favored enemy", ]), action : [["action", " (communicate)"]] }, "subclassfeature3" : { name : "Ranger Conclave", source : [["UA:RR", 4]], minlevel : 3, description: desc([ 'Choose a Ranger Conclave you strive to emulate and put it in the "Class" field', "Choose either Beast Conclave, Deep Stalker Conclave or Hunter Conclave", ]), }, "greater favored enemy" : { name : "Greater Favored Enemy", source : [["UA:RR", 4]], minlevel : 6, description: desc([ 'Use the "Choose Feature" button above to select a greater favored enemy', "Choose from aberrations, celestials, constructs, dragons, elementals, fiends, or giants", "I get all the bonuses from Favored Enemy for this creature type as well", "Additionally, I have adv. on saves vs. spells and abilities of this greater favored enemy", ]), additional : "+4 weapon attack damage", choices : ["Aberrations", "Celestials", "Constructs", "Dragons", "Elementals", "Fiends", "Giants"], "aberrations" : { name : "Greater Favored Enemy: Aberrations", description: desc([ "The bonuses I get from Favored Enemy now also work against aberrations", "Additionally, I have advantage on saves against spells and abilities used by aberrations", ]), savetxt : { adv_vs : ["spells/abilities of aberrations"] } }, "celestials" : { name : "Greater Favored Enemy: Celestials", description: desc([ "The bonuses I get from Favored Enemy now also work against celestials", "Additionally, I have advantage on saves against spells and abilities used by celestials", ]), savetxt : { adv_vs : ["spells/abilities of celestials"] } }, "constructs" : { name : "Greater Favored Enemy: Constructs", description: desc([ "The bonuses I get from Favored Enemy now also work against constructs", "Additionally, I have advantage on saves against spells and abilities used by constructs", ]), savetxt : { adv_vs : ["spells/abilities of constructs"] } }, "dragons" : { name : "Greater Favored Enemy: Dragons", description: desc([ "The bonuses I get from Favored Enemy now also work against dragons", "Additionally, I have advantage on saves against spells and abilities used by dragons", ]), savetxt : { adv_vs : ["spells/abilities of dragons"] } }, "elementals" : { name : "Greater Favored Enemy: Elementals", description: desc([ "The bonuses I get from Favored Enemy now also work against elementals", "Additionally, I have advantage on saves against spells and abilities used by elementals", ]), savetxt : { adv_vs : ["spells/abilities of elementals"] } }, "fiends" : { name : "Greater Favored Enemy: Fiends", description: desc([ "The bonuses I get from Favored Enemy now also work against fiends", "Additionally, I have advantage on saves against spells and abilities used by fiends", ]), savetxt : { adv_vs : ["spells/abilities of fiends"] } }, "giants" : { name : "Greater Favored Enemy: Giants", description: desc([ "The bonuses I get from Favored Enemy now also work against giants", "Additionally, I have advantage on saves against spells and abilities used by giants", ]), savetxt : { adv_vs : ["spells/abilities of giants"] } }, languageProfs : [1] }, "fleet of foot" : { name : "Fleet of Foot", source : [["UA:RR", 4]], minlevel : 8, description: desc("I can take the Dash action as a bonus action"), action : [["bonus action", ""]] }, "hide in plain sight" : { name : "Hide in Plain Sight", source : [["UA:RR", 4]], minlevel : 10, description: desc([ "When I hide on my turn without moving, others take -10 Wis (Perception) to find me", "This lasts until something reveals my presence, or until I (voluntarily) move/fall prone", ]), }, "vanish" : { name : "Vanish", source : [["UA:RR", 5]], minlevel : 14, description: desc("I can't be nonmagically tracked if I don't want to be and can Hide as a bonus action"), action : [["bonus action", ""]] }, "feral senses" : { name : "Feral Senses", source : [["UA:RR", 5]], minlevel : 18, description: desc([ "When not blinded or deafened, I'm aware of invisible, non-hidden creatures in 30 ft", "I don't have disadvantage when attacking creatures I am aware of but can't see", ]), }, "foe slayer" : { name : "Foe Slayer", source : [["UA:RR", 5]], minlevel : 20, description: desc("Once per turn, I can add Wis mod to the attack or damage roll after I see the die roll") } } }; AddSubClass("rangerua", "beast master-ua", { regExpSearch : /^(?=.*(animal|beast))((?=.*(master|ranger|strider))|((?=.*(nature|natural))(?=.*(knight|fighter|warrior|warlord|trooper)))).*$/i, subname : "Beast Conclave", source : [["UA:RR", 5]], attacks : [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], features : { "subclassfeature3" : { name : "Animal Companion", source : [["UA:RR", 5]], minlevel : 3, description: desc("I call an animal by spending 8 hours and 50 gp; I can revive it with 8 hours and 25 gp"), additional : ["", "", "", "+1 HD for companion", "+2 HD for companion", "+3 HD for companion", "+4 HD for companion", "+5 HD for companion", "+6 HD for companion", "+7 HD for companion", "+8 HD for companion", "+9 HD for companion", "+10 HD for companion", "+11 HD for companion", "+12 HD for companion", "+13 HD for companion", "+14 HD for companion", "+15 HD for companion", "+16 HD for companion", "+17 HD for companion"], creaturesAdd : [["Animal Companion", false, function(AddRemove, prefix) { if (!AddRemove) return; var compOptions = ["Ape", "Black Bear", "Boar", "Giant Badger", "Giant Weasel", "Mule", "Panther", "Wolf"]; var selectedRace = AskUserOptions("Select Animal Companion", "Select which beast you would like to have as your animal companion.\nYou can change the beast at any time using the \"Companion Options\" button at the top of the Companion page.", compOptions, "radio", true); ApplyCompRace(selectedRace, prefix, "companionrr"); }]] }, "subclassfeature3.1" : { name : "Companion's Bond", source : [["UA:RR", 5]], minlevel : 3, description: desc("My companion gains several benefits, see the Companion's sheet") }, "subclassfeature5" : { name : "Coordinated Attack", source : [["UA:RR", 6]], minlevel : 5, description: desc("If I take the Attack action, my companion can use its reaction to make a melee attack") }, "subclassfeature7" : { name : "Beast's Defense", source : [["UA:RR", 6]], minlevel : 7, description: desc("While my companion can see me, it has advantage on all saving throws") }, "subclassfeature11" : { name : "Storm of Claws and Fangs", source : [["UA:RR", 6]], minlevel : 11, description: desc("My companion can, as an action, make melee attacks vs. all creatures within 5 ft of it") }, "subclassfeature15" : { name : "Superior Beast's Defense", source : [["UA:RR", 6]], minlevel : 15, description: desc("My companion can, as a reaction, halve an attack's damage from attacker that it sees") } } }); // Add the Beast Conclave's Animal Companion as a companion option CompanionList.companionrr = { name : "Animal Companion", nameTooltip : "Beast Conclave: Animal Companion", nameOrigin : "Beast Conclave 3", nameMenu : "Animal Companion (Beast Conclave feature)", source : [["UA:RR", 5]], includeCheck : function(sCrea, objCrea, iCreaCR) { // Only specific animals return /^(ape|black bear|boar|giant badger|giant weasel|mule|panther|wolf)$/i.test(sCrea); }, attributesAdd : { header : "Companion", minlevelLinked : ["rangerua", "ranger", "spell-less ranger"], attacksAction : 1, proficiencyBonusLinked : true, features : [{ name : "Coordinated Attack", description : "As a reaction when the ranger owner takes the Attack action, the companion can make one melee attack.", minlevel : 5 }, { name : "Storm of Claws and Fangs", description : "As an action, the companion can make a melee attack against each creature that is within 5 ft.", minlevel : 11 }, { name : "Superior Beast's Defense", description : "As a reaction, the companion can halve the damage of an attack from an attacker that it can see.", minlevel : 15 }], hdLinked : function(prefix) { var iTotalHD = CurrentCompRace[prefix] && CurrentCompRace[prefix].hd ? CurrentCompRace[prefix].hd[0] : 0; var bRngLvls = false; ["rangerua", "ranger", "spell-less ranger"].forEach(function (n) { if (classes.known[n]) { bRngLvls = true; iTotalHD += classes.known[n].level > 3 ? classes.known[n].level - 3 : 0; } }) if (!bRngLvls && classes.totallevel > 3) iTotalHD += classes.totallevel - 3; return iTotalHD; } }, notes : [{ name : "Call forth and bond with an animal", description : "from the wilderness by spending 8 hours and 50 gp", joinString : " " }, { name : "I can have one companion at a time", description : "If it dies, I can spend 8 hours and 25 gp to bring it back", joinString : "; " }, { name : "Companion's Bond", description : [ "It obeys my commands as best it can, or acts on its own if I can't command it", "When moving stealthily together with only my companion, we can move at a normal pace", "It uses my Proficiency Bonus instead of its own and adds this to its AC and damage rolls", "My companion gains proficiency with 2 skills of my choice (not automated), as well as all saves", "It gains a HD (and thus HP) for every ranger level I gain after 3rd, and an ASI whenever I do" ].join("\n "), joinString : typePF ? ": " : "\n " }, { name : "In Combat", description : [ "My companion rolls for initiative and takes actions as normal, but can't use Multiattack", "My companion gains a bonus on damage rolls against my favored enemies just like me" ].join("\n "), joinString : typePF ? ": " : ":\n " }, { name : "Coordinated Attack (Beast Conclave 5, UA:RR 6)", description : "When I take the Attack action, my companion can use its reaction to make one melee attack", joinString : "\n ", minlevel : 5 }, { name : "Beast's Defense (Beast Conclave 7, UA:RR 6)", description : "While my companion can see me, it has advantage on all saving throws", joinString : "\n ", minlevel : 7 }, { name : "Storm of Claws and Fangs (Beast Conclave 11, UA:RR 6)", description : "My companion can, as an action, make a melee attack vs. all creatures within 5 ft of it", joinString : "\n ", minlevel : 11 }, { name : "Superior Beast's Defense (Beast Conclave 15, UA:RR 6)", description : "My companion can, as a reaction, halve the damage of an attack from an attacker that it sees", joinString : "\n ", minlevel : 15 }], attributesChange : function(sCrea, objCrea) { // Add Prof to attack damage for (var i = 0; i < objCrea.attacks.length; i++) { var oAtk = objCrea.attacks[i]; if (!oAtk.modifiers) { oAtk.modifiers = ["", "Prof"]; } else { oAtk.modifiers[1] += "+Prof"; } if (oAtk.description) { // Remove multiattack oAtk.description = oAtk.description.replace(/(((One|Two|2).+as an Attack action)|(2 per Attack));? ?/i, ''); } }; // Remove multiattack trait/feature/action ["traits", "features", "actions"].forEach(function (n) { if (!objCrea[n]) return; for (var i = objCrea[n].length - 1; i > -1; i--) { var oN = objCrea[n][i]; if (oN.name && /multiattack/i.test(oN.name)) { objCrea[n].splice(i, 1); } } }) // Proficient with all saving throws var aSaves = objCrea.saves ? objCrea.saves : ["", "", "", "", "", ""]; for (var i = 0; i < aSaves.length; i++) { var iProfSave = Math.round((objCrea.scores[i] - 10.5) * 0.5) + objCrea.proficiencyBonus; if (aSaves[i] === "" || aSaves[i] < iProfSave) { aSaves[i] = iProfSave; } } objCrea.saves = aSaves; }, eval : function(prefix, lvl) { // Set the alignment to be the same as the main character var iAlignInx = tDoc.getField("Alignment").currentValueIndices; if (iAlignInx !== -1) { PickDropdown(prefix + "Comp.Desc.Alignment", iAlignInx); } else { Value(prefix + "Comp.Desc.Alignment", What("Alignment")); } // Set HP to use fixed values var sHPfld = prefix + "Comp.Use.HP.Max"; var aHPsets = How(sHPfld).split(","); aHPsets[3] = "fixed"; AddTooltip(sHPfld, undefined, aHPsets.toString()); // Add Prof to the AC, if not already present AddToModFld(prefix + "Comp.Use.AC", "Prof", false, "Animal Companion", "An beast conclave's animal companion adds its proficiency bonus (Prof) to its AC."); // Alert player of things that have to be done manually app.alert({ cMsg : toUni("Pick Two Skills") + "\nThe Ranger's Animal Companion that you have just added, gains proficiency with two additional skills to those already selected. Because there is no automation for selecting these proficiencies, please do so manually.\n\n" + toUni("Ability Score Improvements") + "\nThe Ranger's Animal Companion gains Ability Score Improvements (ASI) whenever your character gains them. An animal companion can't use these to take feats. There is no automation for adding these ASIs either, so please don't forget to increase the ability scores for the animal companion when you get the reminder pop-up for ASI changes.\nAlso, remember that any DCs for abilities that the beast possesses are based on ability scores modifier and that they might need to be manually changed when increasing ability scores modifiers.\nThe 'Notes' section on the companion page automatically keeps track of how many points you can increase the ability scores with and what the base value of those scores are according to the Monster Manual.", nIcon : 3, cTitle : "Don't forget the Skills and Ability Score Improvements!" }); }, changeeval : function (prefix, lvl) { // Update the string with the number of Ability Score Improvements (ASI) var objCreaFnd = CurrentCompRace[prefix]; if (objCreaFnd.typeFound !== "creature" || !CreatureList[objCreaFnd.known]) return; var objCrea = CreatureList[objCreaFnd.known]; var iASIs = 0; for (var aClass in classes.known) { if (!CurrentClasses[aClass].improvements) continue; var classLvL = Math.min(CurrentClasses[aClass].improvements.length, classes.known[aClass].level); iASIs += 2 * CurrentClasses[aClass].improvements[classLvL - 1]; } var sNote = What(prefix + "Cnote.Left"); var sNoteNew = sNote; if (!iASIs) { sNoteNew = sNote.replace(/[\r\n]? *Currently, \d+ points.*/, ""); } else { var sIncreases = "Currently, " + iASIs + " points to divide " + (objCrea && objCrea.scores ? "(default: " + objCrea.scores[0] + " Str, " + objCrea.scores[1] + " Dex, " + objCrea.scores[2] + " Con, " + objCrea.scores[3] + " Int, " + objCrea.scores[4] + " Wis, " + objCrea.scores[5] + " Cha)" : "among the ability scores"); sNoteNew = sNote.replace(/(ASI.*)([\r\n]? *Currently, \d+ points.*)?/, "$1\r " + sIncreases); } if (sNote !== sNoteNew) Value(prefix + "Cnote.Left", sNoteNew); } } AddSubClass("rangerua", "hunter-ua", { regExpSearch : /^(?!.*(monster|barbarian|bard|cleric|druid|fighter|monk|paladin|rogue|sorcerer|warlock|wizard))(?=.*(hunter|huntress|hunts(wo)?m(e|a)n)).*$/i, subname : "Hunter Conclave", source : [["UA:RR", 7]], features : { "subclassfeature3" : { name : "Hunter's Prey", source : [["UA:RR", 7]], minlevel : 3, description: desc('Choose Colossus Slayer, Giant Killer, or Horde Breaker with the "Choose Feature" button'), choices : ["Colossus Slayer", "Giant killer", "Horde Breaker"], "colossus slayer" : { name : "Hunter's Prey: Colossus Slayer", description: desc("Once per turn, when hitting someone that is below max HP, I do an extra 1d8 damage") }, "giant killer" : { name : "Hunter's Prey: Giant Killer", description: desc("As a reaction, when a Large or larger enemy in 5 ft attacks me, I can attack it once"), action : [["reaction", ""]] }, "horde breaker" : { name : "Hunter's Prey: Horde Breaker", description: desc("Once per turn, when I hit a creature, I can make an attack vs. another within 5 ft of it") } }, "subclassfeature7" : { name : "Defensive Tactics", source : [["UA:RR", 7]], minlevel : 7, description: desc('"Choose Feature" button to choose Escape the Horde, Multiattack Defense, or Steel Will'), choices : ["Escape the Horde", "Multiattack Defense", "Steel Will"], "escape the horde" : { name : "Defensive Tactic: Escape the Horde", description: desc("Creatures attacking me with opportunity attacks have disadvantage on the attack rolls") }, "multiattack defense" : { name : "Defensive Tactic: Multiattack Defense", description: desc("When a creature hits me, I gain +4 AC against that creature for the rest of the turn") }, "steel will" : { name : "Defensive Tactic: Steel Will", description: desc("I have advantage on saves against being frightened"), savetxt : { adv_vs : ["frightened"] } } }, "subclassfeature11" : { name : "Multiattack", source : [["UA:RR", 7]], minlevel : 11, description: desc('Choose Volley or Whirlwind Attack using the "Choose Feature" button above'), choices : ["Volley", "Whirlwind Attack"], "volley" : { name : "Multiattack: Volley", description: desc("As an action, I can make ranged attacks vs. all within a 10-ft radius of a point in range"), action : [["action", ""]] }, "whirlwind attack" : { name : "Multiattack: Whirlwind Attack", description: desc("As an action, I can make melee attacks vs. all creatures within 5 ft of me"), action : [["action", ""]] } }, "subclassfeature15" : { name : "Superior Hunter's Defense", source : [["UA:RR", 7]], minlevel : 15, description: desc('"Choose Feature" button to choose Evasion, Stand Against the Tide, or Uncanny Dodge'), choices : ["Evasion", "Stand Against the Tide", "Uncanny Dodge"], "evasion" : { name : "Evasion", description: desc("My Dexterity saves vs. areas of effect negate damage on success and halve it on failure"), savetxt : { text : ["Dex save vs. area effects: fail \u2015 half dmg, success \u2015 no dmg"] } }, "stand against the tide" : { name : "Stand Against the Tide", description: desc([ "When a creature misses me with a melee attack, I can use my reaction on the attack", "I force the attacker to repeat it vs. another (not attacker) of my choice within range", ]), action : [["reaction", ""]] }, "uncanny dodge" : { name : "Uncanny Dodge", description: desc("As a reaction, I halve the damage of an attack from an attacker that I can see"), action : [["reaction", ""]] } } } }); AddSubClass("rangerua", "deep stalker-ua", { regExpSearch : /^(?=.*deep)(?=.*stalker).*$/i, subname : "Deep Stalker Conclave", source : [["UA:RR", 7]], features : { "subclassfeature3" : { name : "Underdark Scout", source : [["UA:RR", 7]], minlevel : 3, description: desc([ "In the first turn of combat I have +10 ft speed and +1 attack with the Attack action", "When I'm hiding or trying to hide, others gain no benefit from darkvision to detect me", ]), }, "subclassfeature3.1" : { name : "Deep Stalker Magic", source : [["UA:RR", 8]], minlevel : 3, description: desc([ "I have 90 ft darkvision (or +30 ft) and gain extra known spells at level 3, 5, 9, 13, 17", "These count as ranger spells, but do not count against the number of spells I can know", ]), spellcastingExtra : ["disguise self", "rope trick", "glyph of warding", "greater invisibility", "seeming"], spellcastingExtraApplyNonconform : true, vision : [["Darkvision", "fixed 90"], ["Darkvision", "+30"]] }, "subclassfeature7" : { name : "Iron Mind", source : [["UA:RR", 8]], minlevel : 7, description: desc("I am proficient with Wisdom saving throws"), saves : ["Wis"] }, "subclassfeature11" : { name : "Stalker's Flurry", source : [["UA:RR", 8]], minlevel : 11, description: desc("Once during my turn when I miss an attack, I can immediately make an extra attack") }, "subclassfeature15" : { name : "Stalker's Dodge", source : [["UA:RR", 8]], minlevel : 15, description: desc("As a reaction when I'm attacked without adv., I can impose disadv. on the attack roll"), action : [["reaction", " (when attacked)"]] } } }); // By popular demand, the XGtE, TCoE, FToD ranger subclasses, if they exist, are added as an option to the Revised Ranger // Note that there are no rules by WotC that support doing this! var UARR_AddRangerSubclassesToRevisedRanger = function() { var aSources = ["X", "T", "FToD"]; var aRngrSubs = ClassList.ranger.subclasses[1]; for (var i = 0; i < aRngrSubs.length; i++) { var sSub = aRngrSubs[i]; var oSub = ClassSubList[sSub]; if (!oSub || !oSub.source || ClassList.rangerua.subclasses[1].indexOf(sSub) !== -1) continue; var sSubSrc = isArray(oSub.source[0]) ? oSub.source[0][0] : oSub.source[0]; if (aSources.indexOf(sSubSrc) === -1) continue; ClassList.rangerua.subclasses[1].push(sSub); } }(); // ua_20161107_Barbarian-Primal-Paths.js // This file adds the content from the Unearthed Arcana: Barbarian Primal Paths article to MPMB's Character Record Sheet // Define the source SourceList["UA:BPP"] = { name : "Unearthed Arcana: Barbarian Primal Paths", abbreviation : "UA:BPP", group : "Unearthed Arcana", url : "https://media.wizards.com/2016/dnd/downloads/UA_Barbarian.pdf", date : "2016/11/07" }; // A three subclasses for the Barbarian AddSubClass("barbarian", "ancestral guardian-ua", { regExpSearch : /^(?=.*ancestral)(?=.*guardian).*$/i, subname : "Path of the Ancestral Guardian", subnameShort: "Ancestral Guardian", fullname : "Ancestral Guardian", source : [["UA:BPP", 1]], features : { "subclassfeature3" : { name : "Ancestral Protectors", source : [["UA:BPP", 1]], minlevel : 3, description: desc([ "As a bonus action while raging, I can choose a creature within 5 ft of me that I can see", "The creature has disadvantage on attack rolls that don't target me", "If it takes the Disengage action within 5 feet of me, its speed is halved for its turn", "This lasts until the start of my next turn or my rage ends, whichever comes ", ]), action : [["bonus action", " (in Rage)"]] }, "subclassfeature6" : { name : "Ancestral Shield", source : [["UA:BPP", 1]], minlevel : 6, description: desc([ "While I'm raging, I can transfer my resistance to an ally I can see within 30 ft of me", "As a reaction when an ally takes bludgeoning, piercing, or slashing damage", "My ally keeps the resistance, and I lose it, until the start of my next turn", ]), action : [["reaction", ""]] }, "subclassfeature10" : { name : "Consult the Spirits", source : [["UA:BPP", 1]], minlevel : 10, description: desc("I can consult my ancestral spirits to give myself advantage on a Int or Wis check"), usages : 3, recovery : "long rest" }, "subclassfeature14" : { name : "Vengeful Ancestors", source : [["UA:BPP", 1]], minlevel : 14, description: desc([ "While I'm raging, I can have my vengeful ancestors attack for 2d8 force damage", "As a reaction when I or an ally I can see within 30 feet of me is damaged in melee", ]), action : [["reaction", ""]] } } }); AddSubClass("barbarian", "storm herald-ua", { regExpSearch : /^(?=.*storm)(?=.*herald).*$/i, subname : "Path of the Storm Herald", subnameShort: "Storm Herald", fullname : "Storm Herald", source : [["UA:BPP", 2]], abilitySave : 3, features : { "subclassfeature3" : { name : "Storm Aura", source : [["UA:BPP", 2]], minlevel : 3, description: desc([ "While raging, I emanate a 10-ft radius aura that shapes the environment around me", 'Use the "Choose Feature" button above to select the aura', ]), choices : ["Desert", "Sea", "Tundra"], "desert" : { name : "Storm of Fury: Desert", description: desc([ "While raging, I emanate a 10-ft radius aura that shapes the environment around me", "Any enemy that ends its turn in my aura takes fire damage", ]), additional : ["", "", "2 fire damage", "3 fire damage", "3 fire damage", "3 fire damage", "3 fire damage", "4 fire damage", "4 fire damage", "4 fire damage", "4 fire damage", "5 fire damage", "5 fire damage", "5 fire damage", "5 fire damage", "6 fire damage", "6 fire damage", "6 fire damage", "6 fire damage", "7 fire damage"] }, "sea" : { name : "Storm of Fury: Sea", description: desc([ "While raging, I emanate a 10-ft radius aura that shapes the environment around me", "At the end of each of my turns, I can choose a creature in my aura, other than myself", "It must make a Dex save or take lightning damage, or half damage on a successful save", "The DC for this save is 8 + my proficiency bonus + my Constitution modifier", ]), additional : ["", "", "2d6", "2d6", "2d6", "2d6", "2d6", "2d6", "2d6", "3d6", "3d6", "3d6", "3d6", "3d6", "4d6", "4d6", "4d6", "4d6", "4d6", "4d6"], usages : 1, recovery : "turn" }, "tundra" : { name : "Storm of Fury: Tundra", description: desc([ "While raging, I emanate a 10-ft radius aura that shapes the environment around me", "Any enemy that ends its turn in my aura takes cold damage", ]), additional : ["", "", "2 cold damage", "3 cold damage", "3 cold damage", "3 cold damage", "3 cold damage", "4 cold damage", "4 cold damage", "4 cold damage", "4 cold damage", "5 cold damage", "5 cold damage", "5 cold damage", "5 cold damage", "6 cold damage", "6 cold damage", "6 cold damage", "6 cold damage", "7 cold damage"] }, choiceDependencies : [{ feature : "subclassfeature6" }, { feature : "subclassfeature14" }] }, "subclassfeature6" : { name : "Storm Soul", source : [["UA:BPP", 2]], minlevel : 6, description: desc('Use the "Choose Feature" button above to select the effect'), choices : ["desert", "sea", "tundra"], choicesNotInMenu : true, "desert" : { name : "Storm Soul: Desert", description: desc("I have resistance to fire damage and don't suffer the effects of extreme heat"), dmgres : ["Fire"], savetxt : { immune : ["effects of extreme heat"] } }, "sea" : { name : "Storm Soul: Sea", description: desc("I have resistance to lightning damage and can breathe underwater"), dmgres : ["Lightning"] }, "tundra" : { name : "Storm Soul: Tundra", description: desc("I have resistance to cold damage and don't suffer the effects of extreme cold"), dmgres : ["Cold"], savetxt : { immune : ["effects of extreme cold"] } } }, "subclassfeature10" : { name : "Shield of the Storm", source : [["UA:BPP", 2]], minlevel : 10, description: desc("While I'm raging, allies within my aura gain the benefits of my Storm Soul feature") }, "subclassfeature14" : { name : "Raging Storm", source : [["UA:BPP", 2]], minlevel : 14, description: desc('Use the "Choose Feature" button above to select the effect'), choices : ["desert", "sea", "tundra"], choicesNotInMenu : true, "desert" : { name : "Raging Storm: Desert", description: desc([ "Enemy in my aura move more than 5 ft on the ground must make a Strength save", "On a fail, it moves only 5 ft and its speed drops to 0 until the start of its next turn", "The DC for this save is 8 + my proficiency bonus + my Constitution modifier", ]), }, "sea" : { name : "Raging Storm: Sea", description: desc([ "Creatures in my aura hit by my attack must make a Str save or be knocked prone", "The DC for this save is 8 + my proficiency bonus + my Strength modifier", ]), calcChanges : { atkAdd : [ function (fields, v) { if (v.isMeleeWeapon && classes.known.barbarian && classes.known.barbarian.level > 13 && (/\brage\b/i).test(v.WeaponTextName)) { fields.Description += (fields.Description ? '; ' : '') + 'Str save or knocked prone'; }; }, "If I include the word 'Rage' in a melee weapon's name, it will show in its description that it forces targets that are hit to make a Strength saving throw or be knocked prone." ] } }, "tundra" : { name : "Raging Storm: Tundra", description: desc("The area within my aura is difficult terrain for my enemies") } } } }); AddSubClass("barbarian", "zealot-ua", { regExpSearch : /zealot/i, subname : "Path of the Zealot", subnameShort: "Zealot", fullname : "Zealot", source : [["UA:BPP", 2]], features : { "subclassfeature3" : { name : "Divine Fury", source : [["UA:BPP", 2]], minlevel : 3, description: desc([ "While raging, I can become cloaked in an aura of divine power until my rage ends", 'Choose a damage type using the "Choose Feature" button above', ]), additional : ["", "", "1d6+1", "1d6+2", "1d6+2", "1d6+3", "1d6+3", "1d6+4", "1d6+4", "1d6+5", "1d6+5", "1d6+6", "1d6+6", "1d6+7", "1d6+7", "1d6+8", "1d6+8", "1d6+9", "1d6+9", "1d6+10"], usages : 1, recovery : "turn", choices : ["Necrotic Damage", "Radiant Damage"], "necrotic damage" : { name : "Divine Fury: Necrotic", description: desc([ "While raging, I become cloaked in an aura of divine power until my rage ends", "At the end of my turn, each creature within 5 feet of me takes necrotic damage", ]), }, "radiant damage" : { name : "Divine Fury: Radiant", description: desc([ "While raging, I become cloaked in an aura of divine power until my rage ends", "At the end of my turn, each creature within 5 feet of me takes radiant damage", ]), } }, "subclassfeature3.1" : { name : "Warrior of the Gods", source : [["UA:BPP", 2]], minlevel : 3, description: desc("Spells restoring me to life (not undeath or anything else) don't need material comp.") }, "subclassfeature6" : { name : "Zealous Focus", source : [["UA:BPP", 3]], minlevel : 6, description: desc([ "As a reaction when I fail a saving throw while raging, I can instead succeed on it", "Doing so immediately ends my rage and I can't rage again until I finish a short rest", ]), usages : 1, recovery : "short rest", action : [["reaction", " (in Rage)"]] }, "subclassfeature10" : { name : "Zealous Presence", source : [["UA:BPP", 3]], minlevel : 10, description: desc([ "As an action, I howl in fury and unleash a battle cry infused with divine energy", "Allies within 60 ft of me gain adv. on attacks and saves until the start of my next turn", ]), usages : 1, recovery : "long rest", action : [["action", " (allies within 60 feet)"]] }, "subclassfeature14" : { name : "Rage Beyond Death", source : [["UA:BPP", 3]], minlevel : 14, description: desc([ "While raging, having 0 hit points doesn't knock me unconscious", "I still must make death saves, and I suffer the normal effects of taking damage", "However, if I would die due to failing death saves, I don't die until my rage ends", ]), } } }); // ua_20161114_Bard-Colleges.js // This file adds the content from the Unearthed Arcana: Bard Colleges article to MPMB's Character Record Sheet // Define the source SourceList["UA:BC"] = { name : "Unearthed Arcana: Bard Colleges", abbreviation : "UA:BC", group : "Unearthed Arcana", url : "https://media.wizards.com/2016/dnd/downloads/UA_Bard.pdf", date : "2016/11/14" }; // Adds 2 subclasses for the Bard AddSubClass("bard", "college of glamour-ua", { regExpSearch : /^(?=.*(college|bard|minstrel|troubadour|jongleur))(?=.*glamour).*$/i, subname : "College of Glamour", subnameShort: "Glamour", source : [["UA:BC", 1]], features : { "subclassfeature3" : { name : "Mantle of Inspiration", source : [["UA:BC", 1]], minlevel : 3, description: desc([ "As a bonus action, I expend one bardic inspiration die to aid those within 60 ft of me", "A number of allies equal to my Cha mod gain twice the die roll in temporary HP", "They can use a reaction to move their speed toward me, without opportunity attacks", ]), additional : "1 bardic inspiration die", action : [["bonus action", ""]] }, "subclassfeature3.1" : { name : "Enthralling Performance", source : [["UA:BC", 1]], minlevel : 3, recovery : "short rest", usages : 1, description: desc([ "By performing for at least 10 minutes, I can charm humanoids within 60 ft of me", "At the end of the performance, my Cha mod number of targets must make a Wis save", "On a fail, a target is charmed for 1 hour; If success, it doesn't knows I tried to charm it", "While charmed, the target idolizes me, hinders those opposing me, and avoids violence", "This lasts until a target takes damage, I attack it, or if it sees me attacking its allies", ]), }, "subclassfeature6" : { name : "Mantle of Majesty", source : [["UA:BC", 1]], minlevel : 6, recovery : "long rest", usages : 1, action : [["bonus action", ""]], description: desc([ "As a bonus action, I take on an appearance of unearthly beauty for 1 minute", "As a bonus action during this time, I can cast Command without using a spell slot", "Creatures charmed by me automatically fail their saves against these Command spells", ]), spellcastingBonus : [{ name : "Mantle of Majesty", spells : ["command"], selection : ["command"], firstCol : 'oncelr' }], spellChanges : { "command" : { time : "1 bns", description : "1 crea save (fails save if charmed) or follow one word command, e.g. approach, drop, flee, halt", changes : "Using my Mantle of Majesty class feature, I can cast Command as a bonus action once per long rest without using a spell slot, thus only affect a single target." } } }, "subclassfeature14" : { name : "Unbreakable Majesty", source : [["UA:BC", 2]], minlevel : 14, recovery : "short rest", usages : 1, action : [["action", ""]], description: desc([ "As an action, I can cast Sanctuary on myself without using a spell slot", "If a creature fails its save to this, I gain adv. on all Cha checks against it for 1 min", "In addition, the target has disadv. on saves it makes against my spells on my next turn", ]), spellcastingBonus : [{ name : "Unbreakable Majesty", spells : ["sanctuary"], selection : ["sanctuary"], firstCol : 'oncesr' }], spellChanges : { "sanctuary" : { time : "Self", description : "Any trying to atk/target me must save or fail, dis. on save vs. spell I cast next turn, I adv. on Cha vs. it", changes : "Using my Unbreakable Majesty class feature, I can cast Sanctuary once per short rest without using a spell slot, but only on myself." } } } } }); AddSubClass("bard", "college of whispers-ua", { regExpSearch : /^(?=.*(college|bard|minstrel|troubadour|jongleur))(?=.*whispers).*$/i, subname : "College of Whispers", subnameShort: "Whispers", source : [["UA:BC", 2]], features : { "subclassfeature3" : { name : "Venomous Blades", source : [["UA:BC", 2]], minlevel : 3, description: desc([ "When I hit with a weapon attack, I can expend a bardic inspiration die to add damage", "I roll the inspiration die twice, dealing the total in Poison damage to the target", "I can do this no more than once per round on my turn", ]), additional : "1 bardic inspiration die" }, "subclassfeature3.1" : { name : "Venomous Words", source : [["UA:BC", 2]], minlevel : 3, recovery : "short rest", usages : 1, description: desc([ "By speaking in private with a humanoid for at least 10 minutes, I can try to frighten it", "After the conversation, the target must make a Wisdom save or be frightened of me", "If the save is successful, the target doesn't know I try to frighten it", "While frightened, the target avoids the company of others, including its allies", "The target also tries to hide in the most secret, safest place available to it", "This lasts for 1 hour or until it is attacked/damaged, or if it sees me attacking its allies", ]), }, "subclassfeature6" : { name : "Mantle of Whispers", source : [["UA:BC", 2]], minlevel : 6, action : [["reaction", ""]], description: desc([ "As a reaction when a creature dies within 5 ft or by my hand, I can capture its shadow", "I can use shadows of those with the same type and size as me (or Medium if I'm Small)", "I can have only one captured shadow at a time and I can don it as a shadow disguise", ]), "shadow disguise" : { name : "Shadow Disguise", extraname : "Mantle of Whispers", source : [["UA:BC", 2]], action : [["action", " (start)"], ['bonus action', ' (end)']], description: desc([ "As an action, I can don a shadow that I captured as a disguise for 1 hour or until I stop it", "I take on the creature's appearance and I can access its surface memories, but not secrets", "I have access to information that it would would freely share with a casual acquaintance", "This is enough that I can pass myself off as the creature by drawing on its memories", "Anybody can see through the disguise with a Wis (Insight) check vs. my Cha (Deception) +5", "The knowledge disappears when the disguise ends", ]), }, autoSelectExtrachoices : [{ extrachoice : "shadow disguise" }] }, "subclassfeature14" : { name : "Shadow Lore", source : [["UA:BC", 3]], minlevel : 14, recovery : "long rest", usages : 1, action : [["action", ""]], description: desc([ "As an action, I whisper to a creature within 30 ft that can hear and understand me", "Only the target can hear me; It must make a Wisdom save or be charmed by me", "If failed, it thinks I know its most mortifying secret, otherwise it only hears mumbling", "While charmed, the target obeys my commands, but won't risk its life or fight for me", "This lasts for 8 hours or until I or my allies attack or damage it", "When the effect ends, the target has no idea why it was so afraid of me", ]), } } }); // ua_20161121_Cleric-Divine-Domains.js // This file adds the content from the Unearthed Arcana: Cleric Divine Domains article to MPMB's Character Record Sheet // Define the source SourceList["UA:CDD"] = { name : "Unearthed Arcana: Cleric Divine Domains", abbreviation : "UA:CDD", group : "Unearthed Arcana", url : "https://media.wizards.com/2016/dnd/downloads/UA_Cleric.pdf", date : "2016/11/21" }; // Adds 3 subclasses for the Cleric AddSubClass("cleric", "forge domain-ua", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*(forge|forgery|blacksmith)).*$/i, subname : "Forge Domain", source : [["UA:CDD", 1]], spellcastingExtra : ["searing smite", "shield", "heat metal", "magic weapon", "elemental weapon", "protection from energy", "fabricate", "wall of fire", "animate objects", "creation"], features : { "subclassfeature1" : { name : "Bonus Proficiency", source : [["UA:CDD", 1]], minlevel : 1, description: desc("I gain proficiency with heavy armor"), armorProfs : [false, false, true, false] }, "subclassfeature1.1" : { name : "Blessing of the Forge", source : [["UA:CDD", 1]], minlevel : 1, action : [["action", ""]], usages : 1, recovery : "long rest", description: desc([ "At the end of a long rest, I can imbue magic into a nonmagical weapon or armor", "It becomes magical: +1 AC if armor, or +1 to attack and damage rolls if a weapon", "This lasts until the end of my next long rest", ]), }, "subclassfeature2" : { name : "Channel Divinity: Artisan's Blessing", source : [["UA:CDD", 1]], minlevel : 2, description: desc([ "During a short rest, I can conduct a ritual to craft an item that is at least part metal", "The object can be worth up to 100 gp, and I must expend metals of equal value to it", "The item can be an exact duplicate of a nonmagical item if I possess the original", ]), }, "subclassfeature6" : { name : "Soul of the Forge", source : [["UA:CDD", 1]], minlevel : 6, additional : ["", "", "", "", "", "+6 force damage", "+7 force damage", "+8 force damage", "+9 force damage", "+10 force damage", "+11 force damage", "+12 force damage", "+13 force damage", "+14 force damage", "+15 force damage", "+16 force damage", "+17 force damage", "+18 force damage", "+19 force damage", "+20 force damage"], description: desc([ "I gain a +1 AC while wearing medium or heavy armor, and resistance to fire damage", "When I hit a construct with an attack, I deal my cleric level in additional force damage", ]), dmgres : ["Fire"], extraAC : { mod : 1, text : "I gain a +1 bonus to AC while I'm wearing medium or heavy armor.", stopeval : function (v) { return !v.heavyArmor && !v.mediumArmor; } } }, "subclassfeature8" : { name : "Divine Strike", source : [["UA:CDD", 1]], minlevel : 8, description: desc("Once per turn, when I hit a creature with a weapon attack, I can do extra damage"), additional : levels.map(function (n) { if (n < 8) return ""; return "+" + (n < 14 ? 1 : 2) + "d8 fire damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && v.isWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.cleric.level < 14 ? 1 : 2) + 'd8 fire damage'; } }, "Once per turn, I can have one of my weapon attacks that hit do extra fire damage." ] } }, "subclassfeature17" : { name : "Saint of Forge and Fire", source : [["UA:CDD", 1]], minlevel : 17, description: desc([ "I gain immunity to fire damage", "If wearing heavy armor, I'm resistant to nonmagical bludg./piercing/slashing damage", ]), savetxt : { immune : ["fire"] }, dmgres : [["Bludgeoning", "Bludg. (nonmagical)"], ["Piercing", "Pierc. (nonmagical)"], ["Slashing", "Slash. (nonmagical)"]] } } }); AddSubClass("cleric", "grave domain-ua", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*(grave)).*$/i, subname : "Grave Domain", source : [["UA:CDD", 2]], spellcastingExtra : ["bane", "false life", "gentle repose", "ray of enfeeblement", "revivify", "vampiric touch", "blight", "death ward", "antilife shell", "raise dead"], features : { "subclassfeature1" : { name : "Bonus Proficiency", source : [["UA:CDD", 2]], minlevel : 1, description: desc("I gain proficiency with heavy armor"), armorProfs : [false, false, true, false] }, "subclassfeature1.1" : { name : "Circle of Mortality", source : [["UA:CDD", 2]], minlevel : 1, action : [["bonus action", ""]], description: desc([ "Spells I cast to heal a living creature at 0 HP have their dice count as their max result", "As a bonus action, I can cast the Spare the Dying cantrip, if I know it", ]), spellChanges : { "spare the dying" : { time : "1 bns", range : "Touch", changes : "I can cast spare the dying as a bonus action instead of an action." } } }, "subclassfeature1.2" : { name : "Eyes of the Grave", source : [["UA:CDD", 2]], minlevel : 1, usages : 1, recovery : "long rest", description: desc([ "By spending 1 min in uninterrupted contemplation, I sense undead within 1 mile", "I learn their number, distance, and direction from me", "In addition, I know the creature type of the one with the highest CR", ]), }, "subclassfeature2" : { name : "Channel Divinity: Path to the Grave", source : [["UA:CDD", 2]], minlevel : 2, action : [["action", ""]], description: desc([ "As an action, I can touch a creature to make it take extra damage from one attack", "It is vulnerable to all the damage from the next spell or attack from me or an ally", "This only applies to the first time that source inflicts damage, and then ends", "If the creature has resistance or is immune to the damage, it instead loses it", ]), }, "subclassfeature6" : { name : "Sentinel at Death's Door", source : [["UA:CDD", 2]], minlevel : 6, usages : 1, recovery : "short rest", action : [["reaction", ""]], description: desc("As a reaction, I turn a critical hit to me or an ally I see within 30 ft to a normal hit") }, "subclassfeature8" : { name : "Divine Strike", source : [["UA:CDD", 2]], minlevel : 8, description: desc("Once per turn, when I hit a creature with a weapon attack, I can do extra damage"), additional : levels.map(function (n) { if (n < 8) return ""; return "+" + (n < 14 ? 1 : 2) + "d8 necrotic damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && v.isWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.cleric.level < 14 ? 1 : 2) + 'd8 necrotic damage'; } }, "Once per turn, I can have one of my weapon attacks that hit do extra necrotic damage." ] } }, "subclassfeature17" : { name : "Keeper of Souls", source : [["UA:CDD", 2]], minlevel : 17, description: desc([ "Once per round, if I'm not incapacitated, I can manipulate the energy of the dying", "When an enemy I can see dies within 30 ft of me, I or an ally within 30 ft regain HP", "The HP regained is equal to the enemy's number of Hit Dice", ]), } } }); AddSubClass("cleric", "protection domain-ua", { // Still valid 2021-09-21 regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*(protection|protect|defend|defense)).*$/i, subname : "Protection Domain", source : [["UA:CDD", 3]], spellcastingExtra : ["compelled duel", "protection from evil and good", "aid", "protection from poison", "protection from energy", "slow", "guardian of faith", "otiluke's resilient sphere", "antilife shell", "wall of force"], features : { "subclassfeature1" : { name : "Bonus Proficiency", source : [["UA:CDD", 3]], minlevel : 1, description: desc("I gain proficiency with heavy armor"), armorProfs : [false, false, true, false] }, "subclassfeature1.1" : { name : "Shield of the Faithful", source : [["UA:CDD", 3]], minlevel : 1, action : [["reaction", ""]], description: desc([ "As a reaction, when someone within 5 ft of me is attacked, I impose disadv. on the roll", "To do this, I must be able to see both the attacker and the target", ]), }, "subclassfeature2" : { name : "Channel Divinity: Radiant Defense", source : [["UA:CDD", 3]], minlevel : 2, action : [["action", ""]], description: desc([ "As an action, I channel blessed energy into an ally that I can see within 30 ft of me", "The first time the ally is hit within the next minute, the attacker takes radiant damage", ]), additional : ["", "2d10+2", "2d10+3", "2d10+4", "2d10+5", "2d10+6", "2d10+7", "2d10+8", "2d10+9", "2d10+10", "2d10+11", "2d10+12", "2d10+13", "2d10+14", "2d10+15", "2d10+16", "2d10+17", "2d10+18", "2d10+19", "2d10+20"] }, "subclassfeature6" : { name : "Blessed Healer", source : [["UA:CDD", 3]], minlevel : 6, description: desc("When I restore HP to another with a spell, I regain 2 + the spell (slot) level in HP"), calcChanges : { spellAdd : [ // note that several healing spells are not present here because they don't restore hp at casting (only later) function (spellKey, spellObj, spName) { var startDescr = spellObj.description; switch (spellKey) { case "life transference" : spellObj.description = spellObj.description.replace("Necrotic", "Necro").replace(", and", ",") + "; I then regain 2+SL HP"; break; case "mass heal" : spellObj.description = "Heal 700 HP, split over crea in range, each then +11 HP; also cures blind, deaf, diseases; I heal +11 HP"; break; case "power word heal" : spellObj.description = spellObj.description.replace(/heals all.*/i, "full HP; not charmed, frightened, paralyzed, stunned; can stand up as rea; if other, I heal 2+SL"); break; case "regenerate" : spellObj.description = spellObj.description.replace(" for rest of duration", ""); case "heal" : spellObj.description = spellObj.description.replace("all diseases", "diseases"); case "cure wounds" : case "healing word" : case "mass cure wounds" : case "mass healing word" : case "prayer of healing" : spellObj.description = spellObj.description.replace(/creatures?/i, "crea").replace("within", "in").replace("spellcasting ability modifier", "spellcasting ability mod") + "; if other, I heal 2+SL"; } return startDescr !== spellObj.description; }, "When I cast a spell that restores hit points to another creature than myself at the moment of casting, I also heal 2 + the level of the spell slot (or spell slot equivalent) hit points." ] } }, "subclassfeature8" : { name : "Divine Strike", source : [["UA:CDD", 3]], minlevel : 8, description: desc("Once per turn, when I hit a creature with a weapon attack, I can do extra damage"), additional : levels.map(function (n) { if (n < 8) return ""; return "+" + (n < 14 ? 1 : 2) + "d8 radiant damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && v.isWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.cleric.level < 14 ? 1 : 2) + 'd8 radiant damage'; } }, "Once per turn, I can have one of my weapon attacks that hit do extra radiant damage." ] } }, "subclassfeature17" : { name : "Indomitable Defense", source : [["UA:CDD", 3]], minlevel : 17, usages : 1, recovery : "short rest", action : [["action", " (transfer)"], ['bonus action', ' (return)']], description: desc([ "I gain resistance to two of: bludgeoning, necrotic, piercing, radiant, or slashing damage", "Whenever I finish a short or long rest, I can change the damage types chosen", "As an action, I can transfer both resistances to one creature I touch", "As a bonus action, I can transfer the resistances back to myself", "Otherwise, the creature keeps this resistance until the end of my next short or long rest", ]), } } }); // ua_20161128_Druid-Circles.js // This file adds the content from the Unearthed Arcana: Druid Circles article to MPMB's Character Record Sheet // Define the source SourceList["UA:DC"] = { name : "Unearthed Arcana: Druid Circles", abbreviation : "UA:DC", group : "Unearthed Arcana", url : "https://media.wizards.com/2016/dnd/downloads/UA_Druid11272016_CAWS.pdf", date : "2016/11/28" }; // Adds 3 subclasses for the Druid AddSubClass("druid", "circle of dreams-ua", { regExpSearch : /^(?=.*(druid|shaman))(?=.*\bdreams\b).*$/i, subname : "Circle of Dreams", subnameShort: "Dreams", source : [["UA:DC", 1]], features : { "subclassfeature2" : { name : "Balm of the Summer Court", source : [["UA:DC", 1]], minlevel : 2, description : desc([ "I have a pool of fey energy represented by a number of d6s equal to my druid level", "As a bonus action, I can spend dice to heal an ally within 120 ft of me that I can see", "I can spend up to half my druid level worth of dice from the pool at once", "The ally heals an amount equal to the total rolled and gains 1 temp HP per die spent", "In addition, the ally gains +5 ft speed per die spent, which lasts for 1 minute" ]), usages : levels.map(function (n) { return n < 2 ? "" : n + "d6 per "; }), recovery : "long rest", action : [["bonus action", ""]] }, "subclassfeature6" : { name : "Hearth of Moonlight and Shadow", source : [["UA:DC", 1]], minlevel : 6, description : desc([ "At the start of a short or long rest, I can create a warded area of 30-ft radius", "Within this area, my allies and I gain +5 on Wis (Perception) checks to detect creatures", "Also, any light from open flames is not visible from outside the area", "This effect lasts until the end of the rest or when I leave the area" ]) }, "subclassfeature10" : { name : "Hidden Paths", source : [["UA:DC", 1]], minlevel : 10, description : desc([ "On my turn, I can teleport up to 30 ft to where I can see; Moved distance costs speed", "As an action, I can teleport a willing ally I touch up to 30 ft to a spot I can see", "Once I used either option, I can't use this feature again until 1d4 rounds have passed" ]), usages : 1, recovery : "1d4 rounds", action : [["action", " (on ally)"]] }, "subclassfeature14" : { name : "Purifying Light", source : [["UA:DC", 1]], minlevel : 14, description : desc([ "When I use a spell slot with a spell to restores HP, I can use Dispel Magic on the target", "The Dispel Magic counts as if being cast with the same spell slot as the healing spell", "Each creature effected by the Dispel Magic costs as one use of this feature" ]), usages : 3, recovery : "long rest" } } }); AddSubClass("druid", "circle of the shepherd-ua", { regExpSearch : /^(?=.*(druid|shaman))(?=.*shepherd).*$/i, subname : "Circle of the Shepherd", subnameShort: "Shepherd", source : [["UA:DC", 1]], features : { "subclassfeature2" : { name : "Beast Speech", source : [["UA:DC", 2]], minlevel : 2, description: desc([ "I can talk with beasts, they understand me and I them, to the limit of their intelligence", "This doesn't automatically make me friends with all beasts", ]), }, "subclassfeature2.1" : { name : "Spirit Bond", source : [["UA:DC", 2]], minlevel : 2, description: desc([ "As a bonus action, I can summon a spirit to an empty space within 60 ft that I can see", "The Bear, Hawk, or Wolf spirit, creates a 30-ft radius aura and persist for 1 minute", "It doesn't occupy space, is immobile, and counts as neither a creature nor an object", "\u2022 Bear: my allies in the area and I instantly gain 5 + my druid level in temp HP", " While in the aura, my allies and I gain advantage on Strength checks and saves", "\u2022 Hawk: my allies and I gain advantage on attacks against targets in the aura", "\u2022 Wolf: my allies and I gain advantage on ability checks to detect targets in the aura", " If I cast a healing spell with a spell slot, allies in the aura heal my druid level in HP", ]), usages : 1, recovery : "short rest", action : [["bonus action", ""]] }, "subclassfeature6" : { name : "Mighty Summoner", source : [["UA:DC", 2]], minlevel : 6, description: desc("Beast I summon with my spells have +2 HP per HD and their attacks count as magical"), calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { switch (spellKey) { case "conjure animals" : case "conjure fey" : spellObj.description += "; each +2 HP/HD, magical natural attacks"; return true; case "conjure woodland beings" : spellObj.description = spellObj.description.replace(/fey.*/, "fey; obeys commands if its align. agrees; breaks free if break conc.; +2 HP/HD, magic atks"); return true; } }, "When I use a spell that restores hit points, it restores an additional 2 + the level of the spell slot (or spell slot equivalent) used to cast the spell." ] } }, "subclassfeature10" : { name : "Guardian Spirit", source : [["UA:DC", 2]], minlevel : 10, description: desc("Whenever I finish a long rest, I gain the benefits of a Death Ward spell for 24 hours"), spellcastingBonus : [{ name : "Guardian Spirit", spells : ["death ward"], selection : ["death ward"], firstCol : 'oncelr' }], spellChanges : { "death ward" : { range : "Self", components : "", compMaterial : "", description : "Once, when I drops to 0 HP I drops to 1 HP instead; or negates first instantaneous kill effect", duration : "24 h", changes : "Whenever I finish a long rest, I gain the benefits of a Death Ward spell for 24 hours." } } }, "subclassfeature14" : { name : "Faithful Summons", source : [["UA:DC", 2]], minlevel : 14, description: desc([ "When I am reduced to 0 HP or incapacitated against my will, I can summon protectors", "I gain the benefits of a Conjure Animals spell as if cast with a 9th-level spell slot", "It summons 4 beast of my choice with CR 2 or lower within 20 ft of me for 1 hour", "If they receive no commands from me, they protect me from harm and attack foes", ]), usages : 1, recovery : "long rest" } } }); AddSubClass("druid", "circle of twilight-ua", { // Still valid 2021-09-21 regExpSearch : /^(?=.*(druid|shaman))(?=.*twilight).*$/i, subname : "Circle of Twilight", subnameShort: "Twilight", source : [["UA:DC", 2]], features : { "subclassfeature2" : { name : "Harvest's Scythe", source : [["UA:DC", 3]], minlevel : 2, description: desc([ "I have a pool of energy represented by a number of d10s equal to my druid level", "When I roll damage for a spell, I can do extra necrotic damage with dice from the pool", "I can spend up to half my druid level worth of dice from the pool at once", "If I any hostiles die from an augmented spell, I can heal one ally I can see within 30 ft", "The ally regains 2 HP per die spent; or 5 HP per die if one of the slain was undead", ]), usages : ["", "2d10 per ", "3d10 per ", "4d10 per ", "5d10 per ", "6d10 per ", "7d10 per ", "8d10 per ", "9d10 per ", "10d10 per ", "11d10 per ", "12d10 per ", "13d10 per ", "14d10 per ", "15d10 per ", "16d10 per ", "17d10 per ", "18d10 per ", "19d10 per ", "20d10 per "], recovery : "long rest" }, "subclassfeature6" : { name : "Speech Beyond the Grave", source : [["UA:DC", 3]], minlevel : 6, description: desc([ "Once per short rest, I can cast Speak with Dead without spell slots or material comp.", "The target and I can understand each other, regardless of language or intelligence", ]), usages : 1, recovery : "short rest", spellcastingBonus : [{ name : "Speech Beyond the Grave", spells : ["speak with dead"], selection : ["speak with dead"], firstCol : 'oncesr' }], spellChanges : { "speak with dead" : { components : "V,S", compMaterial : "", changes : "I can cast this spell once per short rest without requiring material components." } } }, "subclassfeature10" : { name : "Watcher at the Threshold", source : [["UA:DC", 3]], minlevel : 10, description: desc([ "I gain resistance to necrotic and radiant damage", "While I'm not incapacitated, allies within 30 ft of me gain adv. on their death saves", ]), dmgres : ["Necrotic", "Radiant"] }, "subclassfeature14" : { name : "Paths of the Dead", source : [["UA:DC", 3]], minlevel : 14, description: desc("Once per short rest, I can cast Etherealness without needing a spell slot"), usages : 1, recovery : "short rest", spellcastingBonus : [{ name : "Paths of the Dead", spells : ["etherealness"], selection : ["etherealness"], firstCol : 'oncesr' }], spellChanges : { "etherealness" : { description : "I go to Ethereal Plane; move there, but able to perceive 60 ft into the normal plane", changes : "Using my Paths of the Dead class feature I can cast Etherealness once per short rest without needing a spell slot, thus can only target 1 creature." } } } } }); // ua_20161205_Fighter-Martial-Archetypes.js // This file adds the content from the Unearthed Arcana: Eberron article to MPMB's Character Record Sheet // Define the source SourceList["UA:FMA"] = { name : "Unearthed Arcana: Fighter Martial Archetypes", abbreviation : "UA:FMA", group : "Unearthed Arcana", url : "https://media.wizards.com/2016/dnd/downloads/2016_Fighter_UA_1205_1.pdf", date : "2016/12/05" }; // Adds 4 subclasses for the Fighter AddSubClass("fighter", "arcane archer-ua", { regExpSearch : /^(?=.*arcane)(?=.*archer).*$/i, subname : "Arcane Archer", source : [["UA:FMA", 1]], fullname : "Arcane Archer", features : { "subclassfeature3" : { name : "Arcane Arrow", source : [["UA:FMA", 1]], minlevel : 3, description: desc([ "As a bonus action, I can create one magical arrow that I can fire with a bow", "A shot with the arrow counts as magical and does additional force damage on a hit", "When I create the arrow, I can apply one of my known Arcane Shots on it", "This arrow lasts until the end of my turn or until I hit or miss a target with it", ]), additional : levels.map(function (n) { return n < 3 ? "" : (n < 18 ? "+2" : "+4") + "d6 force damage"; }), usages : 2, recovery : "short rest", action : ['bonus action', 'Create Magical Arrow'], calcChanges : { atkAdd : [ function (fields, v) { if ((/longbow|shortbow/i).test(v.baseWeaponName) && (/^(?=.*arcane)(?=.*arrow).*$/i).test(v.WeaponTextName) && classes.known.fighter && classes.known.fighter.level) { fields.Description += (fields.Description ? '; +' : '+') + (classes.known.fighter.level < 18 ? 2 : 4) + 'd6 force damage'; if (!v.thisWeapon[1] && !v.theWea.isMagicWeapon && !(/counts as magical/i).test(fields.Description)) fields.Description += '; Counts as magical'; }; }, "If I include the words 'Arcane Arrow' in a longbow or shortbow's name, it gets an added description of the damage this Arcane Arrow adds." ] } }, "subclassfeature3.1" : { name : "Arcane Shot", source : [["UA:FMA", 1]], minlevel : 3, description: desc('Use the "Choose Feature" button above to add Arcane Shots to the third page'), additional : levels.map( function(n) { return n < 3 ? "" : (n < 7 ? 2 : n < 10 ? 3 : n < 15 ? 4 : n < 18 ? 5 : 6) + " known"; }), extraname : "Arcane Shot", extrachoices : ["Beguiling Arrow", "Brute Bane Arrow", "Bursting Arrow", "Defending Arrow", "Grasping Arrow", "Piercing Arrow", "Seeking Arrow", "Shadow Arrow"], extraTimes : levels.map(function (n) { return n < 3 ? 0 : n < 7 ? 2 : n < 10 ? 3 : n < 15 ? 4 : n < 18 ? 5 : 6; }), "beguiling arrow" : { name : "Beguiling Arrow", source : [["UA:FMA", 1]], additional: "Enchantment", description: desc([ "If the arrow hits, I choose an ally withing 30 feet of the target", "The target can't attack the chosen ally or include the ally in any harmful area of effects", "This effect stops if the target is immune to charm effects or the ally damages the target", ]), }, "brute bane arrow" : { name : "Brute Bane Arrow", source : [["UA:FMA", 1]], additional: "Necromancy", description: desc([ "If the arrow hits, the target's attacks deal half damage until the end of my next turn", "Only attacks that deal bludgeoning, piercing or slashing damage are halved", ]), }, "bursting arrow" : { name : "Bursting Arrow", source : [["UA:FMA", 2]], additional: "Evocation", description: desc("If the arrow hits, all creatures within 10 ft of the target creature take 2d6 force damage") }, "defending arrow" : { name : "Defending Arrow", source : [["UA:FMA", 2]], additional: "Abjuration", description: desc("If the arrow hits, the target has disadv. on its next attack before the end of my next turn") }, "grasping arrow" : { name : "Grasping Arrow", source : [["UA:FMA", 2]], additional: "Conjuration", description: desc([ "If the arrow hits, the target is wrapped with grasping, thorny brambles for 1 minute", "The target has -10 ft speed; It takes 2d6 slashing damage when moving more than 1 ft", "As an action, the target or a creature can remove the brambles with a DC 10 Str check", ]), }, "piercing arrow" : { name : "Piercing Arrow", source : [["UA:FMA", 2]], additional: "Transmutation", description: desc([ "The arrow transform into an ethereal dart that creates a line of 1 ft wide and 30 ft long", "I then make a separate attack using my Arcane Arrow against each creature in that line", ]), }, "seeking arrow" : { name : "Seeking Arrow", source : [["UA:FMA", 2]], additional: "Divination", description: desc([ "As an action, I can make a ranged attack against a creature I have seen in the last minute", "The seeking arrow moves around corners and obstacles to hit the target", "The attack ignores 1/2 and 3/4 cover and disadvantage from range or being out of sight", "The attack misses if the target is too far away or there is no path for the arrow to travel", "I know if the arrow hits the target, but don't learn the location unless it's in line of sight", ]), action : [["action", ""]] }, "shadow arrow" : { name : "Shadow Arrow", source : [["UA:FMA", 2]], additional: "Illusion", description: desc("If the arrow hits, the target can't see beyond 30 ft until the end of my next turn") } }, "subclassfeature3.2" : { name : "Archer's Lore", source : [["UA:FMA", 1]], minlevel : 3, description: desc([ "I gain proficiency with two skills", "I can choose from: Arcana, Athletics, Nature, Perception, Stealth, or Survival", ]), skillstxt : "Choose two from Arcana, Athletics, Nature, Perception, Stealth, and Survival" }, "subclassfeature7" : { name : "Conjure Arrows", source : [["UA:FMA", 1]], minlevel : 7, description: desc([ "As an action, I can create up to 20 nonmagical arrows that remain for 10 minutes", "The arrows vanish if I use this feature again with 10 minutes", ]), action : [["action", ""]] }, "subclassfeature15" : { name : "Ever-Ready Arrow", source : [["UA:FMA", 1]], minlevel : 15, description: desc("I regain one use of Arcane Arrow one minute after I expend my last remaining use of it") } } }); AddSubClass("fighter", "knight-ua", { // Still valid 2021-09-21 regExpSearch : /^(?!.*(exalted|sacred|holy|divine|nature|natural|purple.*dragon|green|fey|horned))(?=.*knight).*$/i, subname : "Knight", source : [["UA:FMA", 2]], fullname : "Knight", features : { "subclassfeature3" : { name : "Born in the Saddle", source : [["UA:FMA", 2]], minlevel : 3, description: desc([ "Mounting or dismounting a creature costs me only 5 ft of movement", "I have advantage on saving throws made to avoid falling off my mount", "If I fall off my mount for less than 10 ft while not incapacitated, I land on my feet", ]), savetxt : { adv_vs : ["falling off my mount"] } }, "subclassfeature3.1" : { name : "Implacable Mark", source : [["UA:FMA", 2]], minlevel : 3, description: desc([ "If I hit a creature with a melee weapon attack, I mark it until the end of my next turn", "A marked target has disadv. on any attacks vs. those that didn't mark it", "I can attack the target I marked if it is within 5 ft of me and does one of the following:", "\u2022 It moves at least 1 foot on its turn", "\u2022 It makes an attack that it suffers disadv. on from being marked", "This attack uses my reaction, has adv., and adds my fighter level as extra damage", "I can still do this if I already used my reaction this round, but not this turn", ]), recovery : "short rest", usages : 3, additional : levels.map(function (n) { return n < 3 ? "" : "+" + n + " damage"; }), action : [["reaction", ""]], calcChanges : { atkCalc : [ function (fields, v, output) { if (v.isMeleeWeapon && classes.known.fighter && classes.known.fighter.level > 2 && (/\b(implacable.?mark|marked)\b/i).test(v.WeaponTextName)) { output.extraDmg += classes.known.fighter.level; }; }, "If I include the words 'Implacable Mark' or 'Marked' in the name of a melee weapon, it gets my fighter level added to its Damage." ] } }, "subclassfeature7" : { name : "Noble Cavalry", source : [["UA:FMA", 2]], minlevel : 7, description: desc([ "I gain proficiency with two skills or one language", "I can choose the skills from: Animal Handling, History, Insight, Persuasion, and Religion", ]), choices : ["Language proficiency", "2 Skill proficiencies: Animal Handling, History, Insight, Persuasion, or Religion"], "language proficiency" : { name : "Noble Cavalry", description: desc("I learn one language of my choice"), languageProfs : [1] }, "2 skill proficiencies: animal handling, history, insight, persuasion, or religion" : { name : "Noble Cavalry", description: desc("I gain 2 skill proficiencies: Animal Handling, History, Insight, Persuasion, or Religion"), skillstxt : "Choose two from: Animal Handling, History, Insight, Persuasion, or Religion" } }, "subclassfeature10" : { name : "Hold the Line", source : [["UA:FMA", 2]], minlevel : 10, description: desc([ "As a reaction when a creature within 5 ft of me moves at least 1 ft, I can attack it", "This attack is made with a melee weapon attack and deals extra damage on a hit", "If this hits, the attack reduces the target's speed to 0 until the end of this turn", ]), additional : levels.map(function (n) { return n < 10 ? "" : "+" + Math.floor(n / 2) + " damage"; }), action : [["reaction", ""]], calcChanges : { atkCalc : [ function (fields, v, output) { if (v.isMeleeWeapon && classes.known.fighter && classes.known.fighter.level > 9 && (/holds?.the.line/i).test(v.WeaponTextName)) { output.extraDmg += Math.floor(classes.known.fighter.level / 2); }; }, "If I include the words 'Hold the Line' in the name of a melee weapon, it gets half my fighter level added to its Damage." ] } }, "subclassfeature15" : { name : "Rapid Strike", source : [["UA:FMA", 3]], minlevel : 15, description: desc([ "If I have adv. on an attack, I can forgo it to make an extra attack as a bonus action", "This attack has to be with the same weapon against the same target", ]), action : [["bonus action", ""]] }, "subclassfeature18" : { name : "Defender's Blade", source : [["UA:FMA", 3]], minlevel : 18, description: desc([ "I can do opportunity attacks if I already used my reaction this round, but not this turn", "I gain a +1 bonus to AC when I'm wearing heavy armor", ]), extraAC : { mod : 1, text : "I gain a +1 bonus to AC while I'm wearing heavy armor.", stopeval : function (v) { return !v.heavyArmor; } } } } }); AddSubClass("fighter", "samurai-ua", { regExpSearch : /samurai/i, subname : "Samurai", source : [["UA:FMA", 3]], fullname : "Samurai", features : { "subclassfeature3" : { name : "Fighting Spirit", source : [["UA:FMA", 3]], minlevel : 3, description: desc([ "As a bonus action, I can give myself benefits that last until the end of my next turn", "I then gain adv. on my attacks and resistance to bludgeoning/piercing/slashing damage", ]), recovery : "short rest", usages : 3, action : [["bonus action", ""]] }, "subclassfeature7" : { name : "Elegant Courtier", source : [["UA:FMA", 3]], minlevel : 7, description: desc([ "I can add my Wis modifier to any Cha check to persuade anyone of a high social station", "I gain proficiency with either one language or the History, Insight, or Persuasion skill", ]), choices : ["Language proficiency", "Skill proficiency: History, Insight, or Persuasion"], "language proficiency" : { name : "Elegant Courtier", description: desc([ "I can add my Wis modifier to any Cha check to persuade anyone of a high social station", "I gain proficiency with one language of my choice", ]), languageProfs : [1] }, "skill proficiency: history, insight, or persuasion" : { name : "Elegant Courtier", description: desc([ "I can add my Wis modifier to any Cha check to persuade anyone of a high social station", "I gain proficiency with one skill: History, Insight, or Persuasion", ]), skillstxt : "Choose one from: History, Insight, or Persuasion" } }, "subclassfeature10" : { name : "Unbreakable Will", source : [["UA:FMA", 3]], minlevel : 10, description: desc("I gain proficiency with Wis saves, or if I'm already proficient, either Int or Cha saves"), saves : ["Wis"] }, "subclassfeature15" : { name : "Rapid Strike", source : [["UA:FMA", 3]], minlevel : 15, description: desc([ "If I have adv. on an attack, I can forgo it to make an extra attack as a bonus action", "This attack has to be with the same weapon against the same target", ]), action : [["bonus action", ""]] }, "subclassfeature18" : { name : "Strength Before Death", source : [["UA:FMA", 3]], minlevel : 18, description: desc([ "If I take damage that would reduce me to 0 HP, I can delay that damage", "I then immediately take a bonus turn, interrupting the current turn", "I don't take the delayed damage until the bonus turn ends and can affect that damage", ]), recovery : "long rest", usages : 1 } } }); AddSubClass("fighter", "sharpshooter-ua", { // Still valid 2021-09-21 regExpSearch : /sharpshooter/i, subname : "Sharpshooter", source : [["UA:FMA", 3]], fullname : "Sharpshooter", features : { "subclassfeature3" : { name : "Steady Aim", source : [["UA:FMA", 3]], minlevel : 3, description: desc([ "As a bonus action, I can carefully aim my ranged weapon on a target I can see in range", "Until the end of my turn, my attacks with this weapon on that target get to:", "Ignore half and three-quarter cover; Add 2 + half fighter level damage per hit", ]), recovery : "short rest", usages : 3, additional : levels.map(function (n) { return n < 3 ? "" : "+" + (2 + Math.floor(n / 2)) + " damage"; }), action : [["bonus action", ""]], calcChanges : { atkAdd : [ function (fields, v) { if (v.isRangedWeapon && classes.known.fighter && classes.known.fighter.level > 2 && (/steady.{0,3}aim/i).test(v.WeaponTextName)) { fields.Description += (fields.Description ? '; ' : '') + 'Ignores 1/2 and 3/4 cover'; }; }, "If I include the words 'Steady Aim' in the name of a ranged weapon, it gets 2 + half my fighter level added to its Damage, and the fact that it ignores half and three-quarter cover added to its description." ], atkCalc : [ function (fields, v, output) { if (v.isRangedWeapon && classes.known.fighter && classes.known.fighter.level > 2 && (/steady.{0,3}aim/i).test(v.WeaponTextName)) { output.extraDmg += 2 + Math.floor(classes.known.fighter.level / 2); }; }, ""] } }, "subclassfeature7" : { name : "Careful Eyes", source : [["UA:FMA", 4]], minlevel : 7, description: desc([ "As a bonus action, I can take the Search action", "I gain proficiency with one skill, Perception, Investigation, or Survival", ]), skillstxt : "Choose one from: Perception, Investigation, or Survival", action : [["bonus action", ""]] }, "subclassfeature10" : { name : "Close-Quarters Shooting", source : [["UA:FMA", 4]], minlevel : 10, description: desc([ "I don't have disadvantage when making a ranged attack while within 5 ft of a hostile", "A hostile within 5 ft that I hit with a ranged attack on my turn, can't take reactions", "This lasts until the end of my turn", ]), }, "subclassfeature15" : { name : "Rapid Strike", source : [["UA:FMA", 4]], minlevel : 15, description: desc([ "If I have adv. on an attack, I can forgo it to make an extra attack as a bonus action", "This attack has to be with the same weapon against the same target", ]), action : [["bonus action", ""]] }, "subclassfeature18" : { name : "Snap Shot", source : [["UA:FMA", 4]], minlevel : 18, description: desc("I can make one more ranged attack with my Attack action on my first turn of combat") } } }); // ua_20161212_Monk-Monastic-Traditions.js // This file adds the content from the Unearthed Arcana: Monk Monastic Traditions article to MPMB's Character Record Sheet // Define the source SourceList["UA:MMT"] = { name : "Unearthed Arcana: Monk Monastic Traditions", abbreviation : "UA:MMT", group : "Unearthed Arcana", url : "https://media.wizards.com/2016/dnd/downloads/M_2016_UAMonk1_12_12WKWT.pdf", date : "2016/12/12" }; // Adds 2 subclasses for the Monk AddSubClass("monk", "way of the kensei-ua", { regExpSearch : /kensei/i, subname : "Way of the Kensei", subnameShort: "Kensei", source : [["UA:MMT", 1]], features : { "subclassfeature3" : { name : "Path of the Kensei", source : [["UA:MMT", 1]], minlevel : 3, additional: "3 martial weapons proficiencies", description: desc([ "Martial weapons I am proficient with count as kensei weapons for me", "With these, I can use Dex instead of Str and use the Martial Arts damage die", "As a bonus action, my kensei weapon deal +1d4 bludg. damage for an Attack action", ]), action : [["bonus action", " (after hit)"]], calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.monk && classes.known.monk.level > 2 && fields.Proficiency && !v.isSpell && v.baseWeaponName !== 'shortsword' && (/martial/i).test(v.theWea.type)) { var aMonkDie = function (n) { return n < 5 ? 4 : n < 11 ? 6 : n < 17 ? 8 : 10; }(classes.known.monk.level); try { var curDie = eval_ish(fields.Damage_Die.replace('d', '*')); } catch (e) { var curDie = 'x'; }; if (isNaN(curDie) || curDie < aMonkDie) { fields.Damage_Die = '1d' + aMonkDie; }; fields.Mod = v.StrDex; fields.Description += (fields.Description ? '; ' : '') + 'As bonus action with Attack action, +1d4 bludg. damage'; }; }, "I can use either Strength or Dexterity and my Martial Arts damage die in place of the normal damage die for any martial weapons I am proficient with (Kensei Weapons).\n \u2022 If I score a hit with one of these kensei weapons as part of an Attack action, I can take a bonus action to have that hit, and any other hit after that as part of the same action, do +1d4 bludgeoning damage." ] }, "kensei defense" : { name : "Kensei Defense", extraname : "Way of the Kensei 3", source : [["UA:MMT", 1]], description: desc([ "If I make an unarmed strike with an Attack action, I can use my kensei weapon to defend", "Until the start of my next turn, if I'm not incapacitated, I gain +2 AC while holding it", ]), }, autoSelectExtrachoices : [{ extrachoice : "kensei defense" }] }, "ki-empowered strikes" : { name : "One with the Blade", source : [["UA:MMT", 1]], minlevel : 6, description: desc("My unarmed strikes and kensei weapon attacks count as magical"), calcChanges : { atkAdd : [ function (fields, v) { if ((v.baseWeaponName == "unarmed strike" || (!v.isSpell && (/martial/i).test(v.theWea.type) && fields.Proficiency)) && !v.thisWeapon[1] && !v.theWea.isMagicWeapon && !(/counts as magical/i).test(fields.Description)) { fields.Description += (fields.Description ? '; ' : '') + 'Counts as magical'; }; }, "My unarmed strikes and Kensei Weapons count as magical for overcoming resistances and immunities." ] } }, "subclassfeature6" : { name : "Precise Strike", source : [["UA:MMT", 1]], minlevel : 6, description : "As a bonus action, I can focus my attention on one creature I can see within 30 ft" + "\n " + "This turn, I double my proficiency bonus on my next weapon attack against that mark", usages : 1, recovery : "short rest", action : [["bonus action", ""]], calcChanges : { atkCalc : [ function (fields, v, output) { if (!v.isSpell && !v.isDC && (/precise.{0,3}strike/i).test(v.WeaponTextName)) { output.prof *= 2; }; }, "If I include the words 'Precise Strike' in a weapon's name, or description it gets twice my proficiency bonus added to its To Hit instead of only once." ] }, "sharpen the blade" : { name : "Sharpen the Blade", extraname : "Way of the Kensei 11", source : [["UA:MMT", 1]], additional: "1 to 3 ki points", description: desc([ "As a bonus action, I can grant my weapon a bonus to attack and damage rolls", "This bonus is equal to the number of ki points I spend; It lasts for 1 minute", ]), action : [["bonus action", ""]] }, autoSelectExtrachoices : [{ extrachoice : "sharpen the blade", minlevel : 11 }] }, "subclassfeature17" : { name : "Unerring Accuracy", source : [["UA:MMT", 1]], minlevel : 17, description: desc("On each of my turns, I can reroll one weapon attack roll I make that misses") } } }); AddSubClass("monk", "way of tranquility-ua", { // Still valid 2021-09-21 regExpSearch : /^(?=.*tranquility|tranquil|calm|diplomatic|diplomat)((?=.*(monk|monastic))|((?=.*martial)(?=.*(artist|arts)))|((?=.*spiritual)(?=.*warrior))).*$/i, subname : "Way of Tranquility", subnameShort: "Tranquility", source : [["UA:MMT", 2]], features : { "subclassfeature3" : { name : "Path of Tranquility", source : [["UA:MMT", 2]], minlevel : 3, description: desc("I cast Sanctuary on me, no material comp., lasts 8 hours, hostiles must save every hour"), usages : 1, recovery : "1 min", spellcastingBonus : [{ name : "Way of Tranquility", spells : ["sanctuary"], selection : ["sanctuary"] }], spellChanges : { "sanctuary" : { components : "V,S", compMaterial : "", time : "8 h", description : "I'm warded; any who want to attack/target must first make save; doesn't protect vs. area spells", changes : "Using my Path of Tranquility class feature I can cast Sanctuary without requiring material components and lasting for 8 hours, but it only affects myself and hostiles can attempt a new save every hour." } } }, "subclassfeature3.1" : { name : "Healing Hands", source : [["UA:MMT", 2]], minlevel : 3, description: desc([ "As an action, I use points to heal living creature; or 5 points to cure one poison/disease", "With Flurry of Blows, I can replace one unarmed strike with a use of this feature", ]), usages : [0, 0, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200], recovery : "long rest", action : [["action", ""]] }, "subclassfeature6" : { name : "Emissary of Peace", source : [["UA:MMT", 2]], minlevel : 6, description : " [Performance or Persuasion prof]" + "\n " + "I get adv. on Cha checks to calm or counsel peace; not with Deception or Intimidation", skillstxt : "Choose one from: Performance or Persuasion", "douse the flames of war" : { name : "Douse the Flames of War", extraname : "Way of Tranquility 11", source : [["UA:MMT", 1]], description: desc([ "As an action, a creature I touch must make a Wisdom save or have no violent impulses", "If the target is missing any HP it succeeds on the save; The effect lasts for 1 minute", "During this time, it can't attack or cast spells that deal damage or force a saving throw", "This effect ends if the target is attacked, takes damage, or is forced to make a saving throw", "It also ends if the target witnesses any of those things happening to its allies", ]), action : [["action", ""]] }, autoSelectExtrachoices : [{ extrachoice : "douse the flames of war", minlevel : 11 }] }, "subclassfeature17" : { name : "Anger of a Gentle Soul", source : [["UA:MMT", 2]], minlevel : 17, description: desc("As a reaction if another I see goes to 0 HP, I get bonus damage until my next turn ends"), usages : 1, recovery : "short rest", additional : ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "+17", "+18", "+19", "+20"], action : [["reaction", ""]] } } }); // ua_20161219_Paladin-Sacred-Oaths.js // This file adds the content from the Unearthed Arcana: Paladin Sacred Oaths article to MPMB's Character Record Sheet // Define the source SourceList["UA:PSO"] = { name : "Unearthed Arcana: Paladin Sacred Oaths", abbreviation : "UA:PSO", group : "Unearthed Arcana", url : "https://media.wizards.com/2016/dnd/downloads/UAPaladin_SO_20161219_1.pdf", date : "2016/12/19" }; // Adds 2 subclasses for the Paladin AddSubClass("paladin", "oath of conquest-ua", { regExpSearch : /^((?=.*(knight tyrant|iron mongers))|((?=.*(conquest|tyranny|tyrant))(((?=.*paladin)|((?=.*(exalted|sacred|holy|divine))(?=.*(knight|fighter|warrior|warlord|trooper))))))).*$/i, subname : "Oath of Conquest", subnameShort: "Conquest", source : [["UA:PSO", 1]], features : { "subclassfeature3" : { name : "Channel Divinity: Conquering Strike", source : [["UA:PSO", 1]], minlevel : 3, description: desc([ "I can use my channel divinity to break a foe's will that I hit with my melee weapon", "The target must make a Wisdom saving throw or become frightened for 1 minute", "The target can repeat this save at the end of each or its turn to end the effect", ]), spellcastingExtra : ["armor of agathys", "command", "hold person", "spiritual weapon", "bestow curse", "fear", "blight", "dominate beast", "dominate person", "insect plague"] }, "subclassfeature3.1" : { name : "Channel Divinity: Guided Strike", source : [["UA:PSO", 1]], minlevel : 3, description: desc("When I make an attack roll, I can add a +10 bonus to the roll after seeing the d20 roll") }, "subclassfeature7" : { name : "Aura of Conquest", source : [["UA:PSO", 1]], minlevel : 7, description: desc("While I'm not incapacitated, enemies in range have disadv. on saves vs. being frightened"), additional : ["", "", "", "", "", "", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "30-foot aura", "30-foot aura", "30-foot aura"] }, "subclassfeature15" : { name : "Implacable Spirit", source : [["UA:PSO", 1]], minlevel : 15, description: desc("I can't be charmed"), savetxt : { immune : ["charmed"] } }, "subclassfeature20" : { name : "Invincible Conqueror", source : [["UA:PSO", 2]], minlevel : 20, description: desc([ "As an action, I can gain the following benefits for 1 minute:", "\u2022 I have resistance all damage", "\u2022 I can make an additional attack as part of my Attack action", "\u2022 My melee weapons score critical hits on a roll of 19 or 20", ]), recovery : "long rest", usages : 1, action : [["action", ""]] } } }); AddSubClass("paladin", "oath of treachery-ua", { // Still valid 2021-09-21 regExpSearch : /^((?=.*blackguard)|(((?=.*(treachery|tyranny|tyrant))(?=.*paladin))|((?=.*(profane|unholy))(?=.*(knight|fighter|warrior|warlord|trooper))))).*$/i, subname : "Oath of Treachery", subnameShort: "Treachery", source : [["UA:PSO", 2]], features : { "subclassfeature3" : { name : "Channel Divinity: Conjure Duplicate", source : [["UA:PSO", 2]], minlevel : 3, description: desc([ "As an action, I create 1 illusory duplicate of myself within 30 ft of me for 1 min (conc)", "As a bonus action, I can move it up to 30 ft to a space I can see within 120 ft of me", "I can cast spells as though I was in its space, but still have to use my own senses", "I have advantage on attacks if the target is within 5 ft of the duplicate and me", ]), action : [["action", ""], ['bonus action', 'Move Duplicate']], spellcastingExtra : ["charm person", "expeditious retreat", "invisibility", "mirror image", "gaseous form", "haste", "confusion", "greater invisibility", "dominate person", "passwall"] }, "subclassfeature3.1" : { name : "Channel Divinity: Poison Strike", source : [["UA:PSO", 2]], minlevel : 3, description: desc([ "As a bonus action, I imbue one weapon or piece of ammunition with poison upon touch", "This poison lasts for 1 minute and will affect the next time I hit a target with it", "The target takes 2d10 + my paladin level poison damage immediately after the hit", "I automatically roll 20 on the 2d10 if I have advantage on the attack roll", ]), action : [["bonus action", ""]], additional : levels.map(function (n) { return n < 3 ? "" : "2d10+" + n + " damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (!v.isSpell && (/^(?=.*poison)(?=.*strike).*$/i).test(v.WeaponTextName) && classes.known.paladin && classes.known.paladin.level) { fields.Description += (fields.Description ? '; ' : '') + '+2d10+' + classes.known.paladin.level + ' poison damage (or ' + (classes.known.paladin.level + 20) + ' if adv.)'; }; }, "If I include the words 'Poison Strike' in a weapon's name, it gets an added description of the extra 2d10 + paladin level of poison damage it would do. If I have advantage on the attack, I can treat the 2d10 as rolling 20 in total." ] } }, "subclassfeature7" : { name : "Cull the Herd", source : [["UA:PSO", 3]], minlevel : 7, description: desc("I have adv. on melee attacks against creatures that have an ally of it within 5 ft of it") }, "subclassfeature7.1" : { name : "Treacherous Strike", source : [["UA:PSO", 3]], minlevel : 7, description: desc([ "As a reaction when a creature within 5 ft misses me, I can redirect the attack", "If it can be charmed, it rerolls the attack on a target of my choice within 5 ft of it", ]), recovery : "short rest", usages : 3, action : [["reaction", ""]] }, "subclassfeature15" : { name : "Blackguard's Escape", source : [["UA:PSO", 3]], minlevel : 15, description: desc([ "As a reaction after I am hit by an attack, I can teleport up to 60 ft to a spot I can see", "In doing this, I also become invisible (as the spell) until the end of my next turn", ]), recovery : "short rest", usages : 1, action : [["reaction", ""]], "icon of deceit" : { name : "Icon of Deceit", extraname : "Oath of Treachery 20", source : [["UA:PSO", 3]], description: desc([ "As an action, I can gain the following benefits for 1 minute:", "\u2022 I become invisible", "\u2022 If I have adv. on an attack, I do 20 extra damage with it if it hits", "\u2022 If a creature hits me on its turn, it must make a Wis save or I control its next action", " Provided it can be charmed and I am not incapacitated when it takes the action", ]), recovery : "long rest", usages : 1, action : [["action", ""]] }, autoSelectExtrachoices : [{ extrachoice : "icon of deceit", minlevel : 20 }] } } }); // ua_20170116_Ranger-and-Rogue.js // This file adds the content from the Unearthed Arcana: Ranger and Rogue article to MPMB's Character Record Sheet // Define the source SourceList["UA:RnR"] = { name : "Unearthed Arcana: Ranger and Rogue", abbreviation : "UA:RnR", group : "Unearthed Arcana", url : "https://media.wizards.com/2016/dnd/downloads/2017_01_UA_RangerRogue_0117JCMM.pdf", date : "2017/01/16" }; // Adds 3 subclasses: 2 for the Ranger (and the Revised Ranger), and 1 for the Rogue var UARnR_theHorizonWalkerSubclass = { regExpSearch : /^(?=.*horizon)(?=.*walker).*$/i, subname : "Horizon Walker", source : [["UA:RnR", 1]], fullname : "Horizon Walker", features : { "subclassfeature3" : { name : "Planar magic", source : [["UA:RnR", 1]], minlevel : 3, description : desc([ "I add a spell to my known spells at level 3, 5, 9, 13, and 17", "These count as ranger spells, but do not count against the number of spells I can know" ]), spellcastingExtra : ["protection from evil and good", "alter self", "protection from energy", "banishment", "teleportation circle"], spellcastingExtraApplyNonconform : true }, "subclassfeature3.1" : { name : "Planar Walker", source : [["UA:RnR", 1]], minlevel : 3, description : desc([ "As a bonus action, I choose an enemy within 30 ft of me that I can see", "Until the end of this turn, my attack against that enemy ignore damage resistances", "In addition, the first time I hit it this turn, it takes an extra 1d6 force damage" ]), action : [["bonus action", ""]] }, "subclassfeature3.2" : { name : "Portal Lore", source : [["UA:RnR", 1]], minlevel : 3, description : desc([ "As an action, I sense the distance and direction to any planar portals within 1000 ft", "I also sense to which plane the portal leads to; I can't sense details if obscured by magic", "I can use this feature additional times by expending spell slots of 2nd level or higher" ]), usages : 1, recovery : "short rest", action : [["action", ""]] }, "subclassfeature7" : { name : "Ethereal Step", source : [["UA:RnR", 1]], minlevel : 7, description: desc("As a bonus action, I can cast the Etherealness spell, which lasts until the end of the turn"), usages : 1, recovery : "short rest", action : [["bonus action", ""]], spellcastingBonus : [{ name : "Ethereal Step", spells : ["etherealness"], selection : ["etherealness"], firstCol : 'oncesr' }], spellChanges : { "etherealness" : { time : "1 bns", duration : "1 rnd", description : "I go to Ethereal Plane; move there, but able to perceive 60 ft into the normal plane", changes : "Using my Ethereal Step class feature I can cast Etherealness as a bonus action once per short rest, but it only affects myself and lasts until the end of my turn." } } }, "subclassfeature11" : { name : "Distant Strike", source : [["UA:RnR", 1]], minlevel : 11, description : desc([ "With the Attack action, I can teleport 10 ft before each attack, to a place I can see", "If I attack two different creatures with this action, I get an extra attack against a third" ]) }, "subclassfeature15" : { name : "Spectral Defense", source : [["UA:RnR", 1]], minlevel : 15, description: desc("As a reaction when I take damage, I can halve that damage against me"), action : [["reaction", ""]] } } }; AddSubClass("ranger", "horizon walker-ua", UARnR_theHorizonWalkerSubclass); var UARnR_thePrimevalGuardianSubclass = { // Still valid 2021-09-21 regExpSearch : /^(?=.*primeval)(?=.*guardian).*$/i, subname : "Primeval Guardian", source : [["UA:RnR", 2]], features : { "subclassfeature3" : { name : "Guardian magic", source : [["UA:RnR", 2]], minlevel : 3, description: desc("I get bonus spells known, which do not count against the number of spells I can know"), spellcastingExtra : ["entangle", "enhance ability", "conjure animals", "giant insect", "insect plague"], spellcastingExtraApplyNonconform : true }, "subclassfeature3.1" : { name : "Guardian Soul", source : [["UA:RnR", 2]], minlevel : 3, description: desc([ "As a bonus action, I transform to or from a guardian form, changing me as follows:", "\u2022 I grow to Large size, all my movement is reduced to 5 ft, and I get +5 ft reach", "\u2022 I gain half my ranger level in temporary HP at the start of each of my turns", "This ends when I'm incapacitated; When it ends, I lose all temporary HP I got from it", ]), additional : ["", "", "1 temp HP per round", "2 temp HP per round", "2 temp HP per round", "3 temp HP per round", "3 temp HP per round", "4 temp HP per round", "4 temp HP per round", "5 temp HP per round", "5 temp HP per round", "6 temp HP per round", "6 temp HP per round", "7 temp HP per round", "7 temp HP per round", "8 temp HP per round", "8 temp HP per round", "9 temp HP per round", "9 temp HP per round", "10 temp HP per round"], action : [["bonus action", " (start/end)"]] }, "subclassfeature3.2" : { name : "Piercing Thorns", source : [["UA:RnR", 2]], minlevel : 3, description: desc("Once each turn, a hit from my weapon attack can deal 1d6 extra piercing damage"), calcChanges : { atkAdd : [ function (fields, v) { if (!v.isSpell) fields.Description += (fields.Description ? '; ' : '') + 'Once per turn, +1d6 piercing damage'; }, "My weapon attacks can deal 1d6 extra piercing damage once per turn." ] } }, "subclassfeature7" : { name : "Ancient Fortitude", source : [["UA:RnR", 2]], minlevel : 7, description: desc([ "When I assume my guardian form, my HP \u0026 max HP increase by twice my ranger level", "When I leave the form, my max HP reverts back, and any excess HP I have is lost", ]), additional : ["", "", "", "", "", "", "", "+16 max HP", "+18 max HP", "+20 max HP", "+22 max HP", "+24 max HP", "+26 max HP", "+28 max HP", "+30 max HP", "+32 max HP", "+34 max HP", "+36 max HP", "+38 max HP", "+40 max HP"] }, "subclassfeature11" : { name : "Rooted Defense", source : [["UA:RnR", 2]], minlevel : 11, description: desc("While in guardian form, the ground within 30 ft of me is difficult terrain for hostiles") }, "subclassfeature15" : { name : "Guardian Aura", source : [["UA:RnR", 2]], minlevel : 15, description: desc([ "While I'm in my guardian form, I heal allies that start their turn within 30 ft of me", "They heal half my ranger level if they are below half HP and not undead or constructs", ]), additional : ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "Heals 7 HP", "Heals 8 HP", "Heals 8 HP", "Heals 9 HP", "Heals 9 HP", "Heals 10 HP"] } } }; AddSubClass("ranger", "primeval guardian-ua", UARnR_thePrimevalGuardianSubclass); if (ClassList["rangerua"]) { // add them to the Revised Ranger as well, if it is defined var UARnR_theHorizonConclaveSubclass = newObj(UARnR_theHorizonWalkerSubclass); UARnR_theHorizonConclaveSubclass.subname = "Horizon Conclave"; UARnR_theHorizonConclaveSubclass.regExpSearch = /^(?=.*horizon)(?=.*conclave).*$/i delete UARnR_theHorizonConclaveSubclass.fullname; AddSubClass("rangerua", "horizon conclave-ua", UARnR_theHorizonConclaveSubclass); var UARnR_thePrimevalGuardianConclaveSubclass = newObj(UARnR_thePrimevalGuardianSubclass); UARnR_thePrimevalGuardianConclaveSubclass.subname = "Primeval Guardian Conclave"; delete UARnR_thePrimevalGuardianConclaveSubclass.fullname; AddSubClass("rangerua", "primeval guardian conclave-ua", UARnR_thePrimevalGuardianConclaveSubclass); }; AddSubClass("rogue", "scout-ua", { regExpSearch : /scout/i, subname : "Scout", source : [["UA:RnR", 2]], features : { "subclassfeature3" : { name : "Skirmisher", source : [["UA:RnR", 3]], minlevel : 3, description : desc([ "As a reaction when a hostile ends its turn within 5 ft of me, I can move half my speed", "This movement does not provoke attacks of opportunity" ]), action : [["reaction", ""]] }, "subclassfeature3.1" : { name : "Survivalist", source : [["UA:RnR", 3]], minlevel : 3, description: desc("I gain proficiency and expertise with the Nature and Survival skills"), skills : [['Nature', 'full'], ['Survival', 'full']] }, "subclassfeature9" : { name : "Superior Mobility", source : [["UA:RnR", 3]], minlevel : 9, description: desc("I gain +10 ft to my walking speed (and swimming/climbing speed, if applicable)"), speed : { allModes : { bonus : "+10", exclude : ["fly", "burrow"] } } }, "subclassfeature13" : { name : "Ambush Master", source : [["UA:RnR", 3]], minlevel : 13, description: desc([ "As a bonus action in the first combat round with a surprised foe, I can lead the ambush", "If I do so, allies who can see me gets +5 to their initiative roll, up to my initiative value", "Also, each ally gains +10 ft to its speed that lasts until the end their next turn", ]), action : [["bonus action", " (first round)"]] }, "subclassfeature17" : { name : "Sudden Strike", source : [["UA:RnR", 3]], minlevel : 17, description: desc([ "With the Attack action, I can make one additional attack as a bonus action", "This attack can benefit from my Sneak Attack even if I already used it this turn", "However, I still can't use Sneak Attack on a single target more than once per turn", ]), action : [["bonus action", " (with Attack action)"]] } } }); // ua_20170206_Sorcerous-Origins.js // This file adds the content from the Unearthed Arcana: Sorcerous Origins article to MPMB's Character Record Sheet // Define the source SourceList["UA:SO"] = { name : "Unearthed Arcana: Sorcerous Origins", abbreviation : "UA:SO", group : "Unearthed Arcana", url : "https://media.wizards.com/2017/dnd/downloads/26_UASorcererUA020617s.pdf", date : "2017/02/06" }; // Adds 4 subclasses for the Sorcerer //this code includes contributions by /u/SoilentBrad, as well as LamentingDemon on GitHub AddSubClass("sorcerer", "favored soul-ua2", { regExpSearch : /^(?=.*favou?red)(?=.*soul).*$/i, subname : "Favored Soul", source : [["UA:SO", 1]], fullname : "Favored Soul", spellcastingList : { "class" : ["cleric", "sorcerer"] }, features : { "subclassfeature1" : { name : "Divine Magic", source : [["UA:SO", 1]], minlevel : 1, description: desc([ "When I select my 1st level or higher spells, I can also pick spells from the cleric spell list", "These cleric spells count as sorcerer spells for me", ]), }, "subclassfeature1.1" : { name : "Supernatural Resilience", source : [["UA:SO", 1]], minlevel : 1, description: desc("My hit point maximum increases by an amount equal to my sorcerer level"), calcChanges : { hp : function (totalHD) { if (classes.known.sorcerer) { return [classes.known.sorcerer.level, "Supernatural Resilience (sorcerer level)"]; } } } }, "subclassfeature1.2" : { name : "Favored by the Gods", source : [["UA:SO", 1]], minlevel : 1, description: desc("If I fail a saving throw or miss with an attack roll, I can add 2d4 to the total"), recovery : "short rest", usages : 1 }, "subclassfeature6" : { name : "Blessed Countenance", source : [["UA:SO", 1]], minlevel : 6, description: desc([ 'Choose an otherworldly quality using the "Choose Feature" button above', "When my proficiency bonus applies to a Charisma check, I double that bonus", ]), choices : ["Beautiful", "Youthful", "Kind", "Imposing"], "beautiful" : { name : "Beautiful", source : [["UA:SO", 1]], description: desc([ "My appearance takes on an otherworldly quality of beauty", "When my proficiency bonus applies to a Charisma check, I double that bonus", ]), }, "youthful" : { name : "Youthful", source : [["UA:SO", 1]], description: desc([ "My appearance takes on an otherworldly quality of youthfulness", "When my proficiency bonus applies to a Charisma check, I double that bonus", ]), }, "kind" : { name : "Kind", source : [["UA:SO", 1]], description: desc([ "My appearance takes on an otherworldly quality of kindness", "When my proficiency bonus applies to a Charisma check, I double that bonus", ]), }, "imposing" : { name : "Imposing", source : [["UA:SO", 1]], description: desc([ "My appearance takes on an otherworldly quality of imposingness", "When my proficiency bonus applies to a Charisma check, I double that bonus", ]), }, skillstxt : "I gain expertise in any Charisma-based skill I'm proficient with", skills : [["Deception", "only"], ["Intimidation", "only"], ["Performance", "only"], ["Persuasion", "only"]] }, "subclassfeature14" : { name : "Divine Purity", source : [["UA:SO", 1]], minlevel : 14, description: desc("I become immune to disease and poison"), savetxt : { immune : ["poison", "disease"] } }, "subclassfeature18" : { name : "Unearthly Recovery", source : [["UA:SO", 1]], minlevel : 18, description: desc([ "As a bonus action when I have less than half of my max HP, I can heal myself", "I regain a number of HP equal to half my maximum hit points", ]), action : [["bonus action", ""]], recovery : "long rest", usages : 1 } } }); //this code includes contributions by /u/SoilentBrad, as well as Toby L. AddSubClass("sorcerer", "phoenix sorcery-ua", { // Still valid 2021-09-21 regExpSearch : /^(?=.*phoenix)(?=.*(sorcerer|sorcery|witch)).*$/i, subname : "Phoenix Sorcery", source : [["UA:SO", 1]], fullname : "Phoenix Sorcerer", features : { "subclassfeature1" : { name : "Ignite", source : [["UA:SO", 2]], minlevel : 1, description: desc("As an action, I can magically ignite a flammable object by touching it with my hand"), action : [["action", ""]] }, "subclassfeature1.1" : { name : "Mantle of Flame", source : [["UA:SO", 2]], minlevel : 1, description : desc([ "As a bonus action, I can wreathe myself in fire for 1 minute, gaining these benefits:", " - I shed bright light in a 30-ft radius and dim light for an additional 30 ft", " - I deal my Charisma modifier in fire damage to all that touch me", " - I also deal this damage to all that hit me with a melee attack from within 5 ft", " - When I roll for fire damage on my turn, I add my Charisma damage to the result" ]), action : [["bonus action", ""]], recovery : "long rest", usages : 1 }, "subclassfeature6" : { name : "Phoenix Spark", source : [["UA:SO", 2]], minlevel : 6, description : desc([ "As a reaction when I am reduced to 0 HP, I can draw on the phoenix to stay at 1 HP", "All creatures within 10 ft of me take half my sorcerer level + my Cha mod fire damage", "If I have Mantle of Flame active, this damage is my sorcerer level + twice my Cha mod", "If I use this feature, my Mantle of Flame immediately ends" ]), additional : levels.map( function(n) { if (n < 6) return ""; return Math.floor(n / 2) + "+Cha \u007Cor\u007C " + n + "+2\xD7Cha"; }), action : [["reaction", ""]], recovery : "long rest", usages : 1 }, "subclassfeature14" : { name : "Nourishing Fire", source : [["UA:SO", 2]], minlevel : 14, description : desc([ "When I cast a spell using a spell slot that includes a fire damage roll, I regain HP", "The HP regained is equal to the spell slot level + my Charisma modifier" ]) }, "subclassfeature18" : { name : "Form of the Phoenix", source : [["UA:SO", 2]], minlevel : 18, description : desc([ "While my Mantle of Flame is active, I gain the following additional benefits:", "- I have a flying speed of 40 ft and can hover", "- I have resistance to all damage", "- If I use my Phoenix Spark, it deals an extra 20 fire damage to each creature" ]), dmgres : [["All", "All (Mantle of Flame)"]] } } }); //this code includes contributions by /u/SoilentBrad AddSubClass("sorcerer", "sea sorcery-ua", { // Still valid 2021-09-21 regExpSearch : /^(?=.*sea)(?=.*(sorcerer|sorcery|witch)).*$/i, subname : "Sea Sorcery", source : [["UA:SO", 2]], fullname : "Sea Sorcerer", features : { "subclassfeature1" : { name : "Soul of the Sea", source : [["UA:SO", 3]], minlevel : 1, description: desc("I can breathe underwater and I have a swim speed equal to my walking speed"), speed : { swim : { spd : "walk", enc : "walk" } } }, "subclassfeature1.1" : { name : "Curse of the Sea", source : [["UA:SO", 3]], minlevel : 1, description : desc([ "I can curse a target that I hit with a cantrip or that fails its save against my cantrip", "This lasts until the end of my next turn or until I curse another target like this", "Once per turn when I cast a spell, I can trigger an active curse, if a condition is met", " - If spell dealt cold damage to it, its has -15 ft speed until the end of my next turn", " - If the spell dealt lightning damage to it, that damage is increased with my Cha mod", " - If the spell moved the target, it is moved an additional 15 ft", "Only one of these effects can be applied, even if the spell meets multiple conditions", "If the spell triggering the curse is a cantrip, the target stays cursed for another round" ]) }, "subclassfeature6" : { name : "Watery Defense", source : [["UA:SO", 3]], minlevel : 6, description : desc([ "I gain resistance to fire damage", "I can protect myself when an attack deals bludgeoning, piercing, or slashing damage", "As a reaction when that happens, I reduce the damage by my sorcerer level + Charisma", "I can then also move up to 30 ft without provoking opportunity attacks" ]), additional : levels.map( function(n) { if (n < 6) return ""; return n + " + Charisma score"; }), action : [["reaction", ""]], recovery : "short rest", usages : 1, dmgres : ["Fire"] }, "subclassfeature14" : { name : "Shifting Form", source : [["UA:SO", 3]], minlevel : 14, description : desc([ "I gain the ability to enter a liquid state while moving, squeezing through small spaces", "When I move on my turn, I take half damage from opportunity attacks", "I can move through any enemy's space, but can't willingly end my move in that space", "On my turn, I can move through any opening of at least 3 inches in diameter", "I can't end my move in a space smaller than one size category smaller than I am" ]) }, "subclassfeature18" : { name : "Water Soul", source : [["UA:SO", 3]], minlevel : 18, description : desc([ "I no longer need to eat, drink, or sleep; Critical hits against me become normal hits", "I gain resistance to bludgeoning, piercing, and slashing damage" ]), dmgres : ["Bludgeoning", "Piercing", "Slashing"] } } }); //this code includes contributions by /u/SoilentBrad AddSubClass("sorcerer", "stone sorcery-ua", { // Still valid 2021-09-21 regExpSearch : /^(?=.*stone)(?=.*(sorcerer|sorcery|witch)).*$/i, subname : "Stone Sorcery", source : [["UA:SO", 3]], fullname : "Stone Sorcerer", spellcastingExtra : ["compelled duel", "searing smite", "thunderous smite", "wrathful smite", "branding smite", "magic weapon", "blinding smite", "elemental weapon", "staggering smite"], features : { "subclassfeature1" : { name : "Bonus Proficiencies", source : [["UA:SO", 4]], minlevel : 1, description: desc("I gain proficiency with shields, simple weapons and martial weapons"), armorProfs : [false, false, false, true], weaponProfs : [true, true] }, "subclassfeature1.1" : { name : "Metal Magic", source : [["UA:SO", 4]], minlevel : 1, description: desc("My affinity for metal allows me to select from a broader range of spells") }, "subclassfeature1.2" : { name : "Stone's Durability", source : [["UA:SO", 4]], minlevel : 1, description : desc([ "My hit point maximum increases by an amount equal to my sorcerer level", "As an action, I can gain an AC of 13 + Constitution modifier + shield", "This AC lasts until I don armor, I'm incapacitated, or use a bonus action to end it" ]), action : [["action", " (start)"], ['bonus action', " (end)"]], calcChanges : { hp : function (totalHD) { if (classes.known.sorcerer) { return [classes.known.sorcerer.level, "Stone's Durability (sorcerer level)"]; } } }, armorOptions : [{ regExpSearch : /^(?=.*stone)(?=.*durability).*$/i, name : "Stone's Durability", source : [["UA:SO", 4]], ac : "13+Con", dex : -10, affectsWildShape : true, selectNow : true }] }, "subclassfeature6" : { name : "Stone Aegis", source : [["UA:SO", 4]], minlevel : 6, description : desc([ "As a bonus action, I can grant an aegis to an ally I can see within 60 ft of me", "The aegis reduces any bludgeoning, piercing, or slashing damage taken by the target", "This aegis lasts for 1 minute, until I use it again, or until I'm incapacitated", "As a reaction when the protected ally is attacked with a melee attack, I can teleport", "I can do this only if the attacker is within 60 ft of me and I can see it", "I teleport to an empty space next to it and make one melee weapon attack against it", "If this attack hits, the attack deals extra force damage" ]), additional : levels.map( function(n) { if (n < 6) return ""; return (Math.floor(n / 4) + 2) + " damage reduction; +" + (n < 11 ? 1 : n < 17 ? 2 : 3) + "d10 force damage"; }), action : [["bonus action", ""], ['reaction', 'Aegis Teleport']] }, "subclassfeature14" : { name : "Stone's Edge", source : [["UA:SO", 4]], minlevel : 14, description : desc([ "Once per casting of a spell that deals damage, I can choose one creature damaged by it", "That creature takes extra force damage equal to half my sorcerer level" ]), additional : levels.map( function(n) { return n < 14 ? "" : Math.floor(n / 2) + " force damage"; }) }, "subclassfeature18" : { name : "Earth Master's Aegis", source : [["UA:SO", 4]], minlevel : 18, description: desc("My Stone's Aegis can now affect up to three creatures") } } }); // ua_20170213_Warlock-and-Wizard.js // This file adds the content from the Unearthed Arcana: Warlock and Wizard article to MPMB's Character Record Sheet // Define the source SourceList["UA:WnW"] = { name : "Unearthed Arcana: Warlock and Wizard", abbreviation : "UA:WnW", group : "Unearthed Arcana", url : "https://media.wizards.com/2017/dnd/downloads/20170213_Wizrd_Wrlck_UAv2_i48nf.pdf", date : "2017/02/13" }; // Adds 3 subclasses, 2 for the Warlock, and 1 for the Wizard //this code includes contributions by Greg N. AddSubClass("warlock", "the hexblade-ua", { regExpSearch : /^(?=.*hexblade)(?=.*warlock).*$/i, subname : "the Hexblade", source : [["UA:WnW", 1]], spellcastingExtra : ["shield", "wrathful smite", "branding smite", "magic weapon", "blink", "elemental weapon", "phantasmal killer", "staggering smite", "cone of cold", "destructive wave"], features : { "subclassfeature1" : { name : "Hex Warrior", source : [["UA:WnW", 1]], minlevel : 1, description : desc([ "I gain proficiency with medium armor, shields, and martial weapons", "With one-handed melee weapons I can use Charisma instead of Strength or Dexterity" ]), armorProfs : [false, true, false, true], weaponProfs : [false, true], calcChanges : { atkAdd : [ function (fields, v) { if (v.isMeleeWeapon && !(/((^|[^+-]\b)2|\btwo).?hand(ed)?s?\b/i).test(v.WeaponText) && What('Cha Mod') > What(AbilityScores.abbreviations[fields.Mod - 1] + ' Mod')) { fields.Mod = 6; }; }, "For melee weapons that lack the two-handed property, I can use my Charisma instead of Strength or Dexterity." ] } }, "subclassfeature1.1" : { name : "Hexblade's Curse", source : [["UA:WnW", 1]], minlevel : 1, description : desc([ "As a bonus action, I can curse a creature I can see within 30 ft of me for 1 minute", " - I add my proficiency bonus to damage rolls against the cursed target", " - My attack rolls against the curse target score a critical hit on a roll of 19 and 20", " - If the target dies while cursed, I regain HP equal to my warlock level + Cha mod" ]), recovery : "short rest", usages : levels.map( function(n) { return n < 14 ? 1 : ""; }), action : [["bonus action", ""]], calcChanges : { atkAdd : [ function (fields, v) { if (!v.isDC && /hexblade/i.test(v.WeaponTextName) && !v.CritChance) { v.CritChance = 19; fields.Description += (fields.Description ? '; ' : '') + 'Crit on 19-20'; }; }, "If I include the word 'Hexblade' in the name of a weapon, the automation will treat the attack as being against a target of the Hexblade's Curse: adding my proficiency bonus to the damage and adding the increased chance of a critical hit to the description.", 19 ], atkCalc : [ function (fields, v, output) { if ((/hexblade/i).test(v.WeaponTextName)) output.extraDmg += output.prof; }, ""] } }, "subclassfeature6" : { name : "Shadow Hound", source : [["UA:WnW", 1]], minlevel : 6, description : desc([ "My shadow becomes a hound of pure darkness; Truesight reveals its nature", "As a bonus action, I can have it slip into the shadow of another I can see within 60 ft", "I know the distance/direction to the target; I ignore 1/2, 3/4 cover of the target", "My shadow returns to me if I use a bonus action to do so, I become incapacitated, ", "a spell is used to stop it, or if one of us moves to another plane of existence" ]) }, "subclassfeature10" : { name : "Armor of Hexes", source : [["UA:WnW", 2]], minlevel : 10, description: desc("Targets affected by my hexblade's curse have a 50% of missing me with any attack roll") }, "subclassfeature14" : { name : "Master of Hexes", source : [["UA:WnW", 2]], minlevel : 14, description : desc([ "I no longer need to rest to be able to use my Hexblade's Curse again", "However, when I curse a new target, the curse immediately ends on the previous target" ]) } } }); //this code includes contributions by Ben Y. and Wizzard AddSubClass("warlock", "the raven queen-ua", { // Still valid 2021-09-21 regExpSearch : /^(?=.*\braven)(?=.*queen\b).*$/i, subname : "the Raven Queen", source : [["UA:WnW", 2]], spellcastingExtra : ["false life", "sanctuary", "silence", "spiritual weapon", "feign death", "speak with dead", "ice storm", "locate creature", "commune", "cone of cold"], features : { "subclassfeature1" : { name : "Sentinel Raven", source : [["UA:WnW", 2]], minlevel : 1, description : desc([ "I gain the services of a spirit in the form of a raven (using the stats of a raven)", "It always obeys my commands, rolls its own initiative, and can be slain", "While it's within 100 ft, I can telepathically speak with it and see/hear what it does", "While it's on my shoulder, I gain Darkvision 30 ft and add my Cha mod to Perception", "While it's on my shoulder, it can't be targeted, take damage, or take actions", "It vanishes if it is more than 5 miles away from me, it dies, or if I die", "If it dies, I gain advantage on all attack rolls against its killer for 24 hours", "After a short rest, I can recall it to me regardless of its location or if it died" ]), vision : [["Darkvision", 30]], addMod : { type : "skill", field : "Perc", mod : "max(Cha|0)", text : "While my sentinel raven is perched on my shoulder, I can add my Charisma modifier to Perception." }, creaturesAdd : [["Sentinel Raven"]], creatureOptions : [{ name : "Sentinel Raven", source : [["UA:WnW", 2]], size : 5, type : "Beast", alignment : "Unaligned", ac : 12, hp : 1, hd : [1, 4], speed : "10 ft, fly 50 ft", scores : [2, 14, 8, 2, 12, 6], skills : { "perception" : 3 }, passivePerception : 13, challengeRating : "0", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Beak", ability : 2, damage : [1, "", "piercing"], range : "Melee (5 ft)", description : "", abilitytodamage : false }], traits : [{ name : "Mimicry", description : "The raven can mimic simple sounds it has heard, such as a person whispering, a baby crying, or an animal chittering. A creature that hears the sounds can tell they are imitations with a successful DC 10 Wisdom (Insight) check." }, { name : "Sentinel", description : "The raven doesn't require sleep. While it is within 100 feet of me, it can awaken me from sleep as a bonus action." }, { name : "Shoulder Perch", description : "While perched on my shoulder, the raven can't be targeted by any attack or other harmful effect; only I can cast spells on it; it can't take damage; and it is incapacitated. It then also grants me darkvision 30 ft and a bonus to my Wisdom (Perception) equal to my Charisma modifier." }], features : [{ name : "Sent by the Raven Queen", description : "The raven acts independently of me, but it always obeys my commands. In combat, it rolls its own initiative and acts on its own turn, but I control how it acts. If it is slain by a creature, I gain advantage on all attack rolls against the killer for the next 24 hours. While the raven is within 100 ft of me, I can telepathically command it and see through its eyes and hear what it hears.\n The raven vanishes when it dies, if I die, or if we are separated by more than 5 miles. At the end of a short or long rest, I can call the raven back to reappear within 5 ft of me, regardless where it is or if it died." }] }] }, "subclassfeature6" : { name : "Soul of the Raven", source : [["UA:WnW", 2]], minlevel : 6, description : desc([ "As a bonus action, when my raven is perched on my shoulder, I can merge our bodies", "I become tiny and replace my speed with the raven's (10 ft, fly 50 ft)", "I can then use my action only to Dash, Disengage, Dodge, Help, Hide, or Search", "While merged, I still get all the benefits of my raven being perched on my shoulder", "I can end this as an action" ]), action : [["bonus action", " (start)"], ['action', ' (end)']] }, "subclassfeature10" : { name : "Raven's Shield", source : [["UA:WnW", 3]], minlevel : 10, description: desc("I can't be frightened, have advantage on death saves, and resistance to necrotic damage"), savetxt : { immune : ["frightened"], adv_vs : ["death"] }, dmgres : ["Necrotic"] }, "subclassfeature14" : { name : "Queen's Right Hand", source : [["UA:WnW", 3]], minlevel : 14, description: desc("I can cast Finger of Death once per long rest"), usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Queen's Right Hand", spells : ["finger of death"], selection : ["finger of death"], firstCol : "oncelr" }] } } }); //this code includes contributions by /u/magicmanfk AddSubClass("wizard", "lore mastery-ua", { // Still valid 2021-09-21 regExpSearch : /^(?=.*\blore)(?=.*mastery?\b).*$/i, subname : "Lore Mastery", source : [["UA:WnW", 5]], fullname : "Lore Master", features : { "subclassfeature2" : { name : "Lore Master", source : [["UA:WnW", 6]], minlevel : 2, description : desc([ "I can use my Intelligence modifier for initiative instead of my Dexterity modifier", "I get expertise with each Arcana, History, Nature, and Religion, if I'm proficient with it" ]), skills : [["Arcana", "only"], ["History", "only"], ["Nature", "only"], ["Religion", "only"]], addMod : { type : "skill", field : "Init", mod : "max(Int-Dex|0)", text : "I use my Intelligence modifier for initiative rolls instead of Dexterity." } }, "subclassfeature2.1" : { name : "Spell Secrets: Elements", source : [["UA:WnW", 6]], minlevel : 2, description : desc([ "I can change the damage type of spells I cast using spell slots (so not cantrips)", "I can swap out acid, cold, fire, force, lightning, necrotic, radiant, or thunder damage" ]) }, "subclassfeature2.2" : { name : "Spell Secrets: Saves", source : [["UA:WnW", 6]], minlevel : 2, description: desc("I can change the saving throw ability score to another for a spell I cast using a spell slot"), recovery : "short rest", usages : 1 }, "subclassfeature6" : { name : "Alchemical Casting", source : [["UA:WnW", 6]], minlevel : 6, description : desc([ "When I cast a spell with a spell slot, I can expend one additional spell slot to augment it", " - 1st-level slot: one damage roll of the spell adds +2d10 force damage", " - 2nd-level slot: if the range of the spell is at least 30 ft, it becomes 1 mile", " - 3rd-level slot: the spell's save DC increases by 2" ]) }, "subclassfeature10" : { name : "Prodigious Memory", source : [["UA:WnW", 6]], minlevel : 10, description: desc("As a bonus action, I can replace one of my prepared spells with another from my book"), recovery : "short rest", usages : 1, action : [["bonus action", ""]] }, "subclassfeature14" : { name : "Master of Magic", source : [["UA:WnW", 6]], minlevel : 14, description : desc([ "As a bonus action, I can call to mind one spell of my choice from any class' spell list", "This spell must be of a level I have spell slots for and that I don't already have prepared", "I can then cast it using the normal spellcasting rules, including expending a spell slot", "It counts a wizard spell; I can only cast the spell during the same turn I call it to mind" ]), usages : 1, recovery : "long rest", action : [["bonus action", ""]] } } }); // Add many new Warlock invocations // Most probably still valid 2021-09-21, have to check AddWarlockInvocation("Aspect of the Moon (prereq: the Archfey patron)", { name : "Aspect of the Moon", description: desc("I don't need to sleep nor can be magically forced to; I can rest while doing light activity"), source : [["UA:WnW", 3]], prereqeval : function(v) { return (/\barchfey\b/).test(classes.known.warlock.subclass); }, savetxt : { text : ["Nothing can force me to sleep"] } }); AddWarlockInvocation("Burning Hex (prereq: the Hexblade patron)", { name : "Burning Hex", description : desc([ "As a bonus action, I can cause a target affected by my hexblade's curse to take damage", "It immediately takes fire damage equal to my Charisma modifier (min 1)" ]), source : [["UA:WnW", 3]], prereqeval : function(v) { return (/hexblade/).test(classes.known.warlock.subclass); }, action : [["bonus action", ""]] }); AddWarlockInvocation("Caiphon's Beacon (prereq: the Great Old One patron)", { name : "Caiphon's Beacon", description : desc([ "I gain proficiencies with the Deception and Stealth skills", "I have advantage on attack rolls against charmed creatures" ]), source : [["UA:WnW", 3]], prereqeval : function(v) { return (/great old one/).test(classes.known.warlock.subclass); }, skills : ["Deception", "Stealth"] }); AddWarlockInvocation("Chilling Hex (prereq: the Hexblade patron)", { name : "Chilling Hex", description : desc([ "As a bonus action, I can swirl frost around a target affected by my hexblade's curse", "All creatures within 5 ft of the target take cold damage equal to my Cha modifier (min 1)" ]), source : [["UA:WnW", 3]], prereqeval : function(v) { return (/hexblade/).test(classes.known.warlock.subclass); }, action : [["bonus action", ""]] }); AddWarlockInvocation("Chronicle of the Raven Queen (prereq: the Raven Queen patron, Pact of the Tome)", { name : "Chronicle of the Raven Queen", description : desc([ "Within 1 minute of a creature's death, I can use my book of shadows to ask it 1 question", "To do this, I need to put the corpse's hand on the book and speak the question aloud", "Its spirit writes the answer, to the best of its knowledge, in blood in a language I choose" ]), source : [["UA:WnW", 3]], submenu : "[improves Pact of the Tome]", prereqeval : function(v) { return (/raven queen/).test(classes.known.warlock.subclass) && classes.known.warlock.level >= 3 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the tome'; }, action : [["bonus action", ""]] }); AddWarlockInvocation("Claw of Acamar (prereq: the Great Old One patron, Pact of the Blade)", { name : "Claw of Acamar", description : desc([ "As a pact weapon, I can create a black, lead flail with grasping tentacles for a head", "It has reach and can reduce a creature's speed to 0 on a hit until the end of my next turn", "On a hit, I can expend a spell slot to have it do +2d8 necrotic damage per spell slot level" ]), source : [["UA:WnW", 3]], submenu : "[improves Pact of the Blade]", prereqeval : function(v) { return (/great old one/).test(classes.known.warlock.subclass) && classes.known.warlock.level >= 3 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the blade'; }, weaponOptions : [{ baseWeapon : "flail", regExpSearch : /^(?=.*\bclaw\b)(?=.*\bacamar\b).*$/i, name : "Claw of Acamar", source : [["UA:WnW", 3]], pactWeapon : true, description : "Pact weapon, reach; On hit: Reduces speed to 0, Expend spell slot for +2d8 necrotic damage per slot level", selectNow : true }] }); AddWarlockInvocation("Cloak of Baalzebul (prereq: the Fiend patron)", { name : "Cloak of Baalzebul", description : desc([ "As a bonus action, I can conjure or dismiss a swarm of buzzing flies around me", "This gives me adv. on Cha (Intimidation) checks, but disadv. on all other Charisma checks", "Creatures starting their turn within 5 ft of me take poison damage equal to my Cha mod" ]), source : [["UA:WnW", 3]], prereqeval : function(v) { return (/\bfiend\b/).test(classes.known.warlock.subclass); }, action : [["bonus action", " (start/end)"]] }); AddWarlockInvocation("Curse Bringer (prereq: the Hexblade patron, Pact of the Blade)", { name : "Curse Bringer", description : desc([ "As a pact weapon, I can create a silver greatsword with black runes etched in the blade", "If I bring a target of my hexblade's curse to 0 HP with it, I can move the curse to another", "It can reduce a creature's speed to 0 on a hit until the end of my next turn", "On a hit, I can expend a spell slot to have it do +2d8 slashing damage per spell slot level" ]), source : [["UA:WnW", 4]], submenu : "[improves Pact of the Blade]", prereqeval : function(v) { return (/hexblade/).test(classes.known.warlock.subclass) && classes.known.warlock.level >= 3 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the blade'; }, weaponOptions : [{ baseWeapon : "greatsword", regExpSearch : /^(?=.*\bcurse)(?=.*bringer\b).*$/i, name : "Curse Bringer", source : [["UA:WnW", 4]], pactWeapon : true, description : "Pact weapon, heavy, two-handed; On hit: Reduces speed to 0, Expend spell slot for +2d8 slashing damage per slot level", selectNow : true }] }); AddWarlockInvocation("Kiss of Mephistopheles (prereq: level 5 warlock, the Fiend patron, Eldritch Blast cantrip)", { name : "Kiss of Mephistopheles", description : desc([ "As a bonus action when my Eldritch Blast hits, I can cast Fireball using a warlock spell slot", "The origin of the Fireball is the creature that was hit with my Eldritch Blast attack" ]), source : [["UA:WnW", 4]], submenu : "[improves Eldritch Blast]", prereqeval : function(v) { return v.hasEldritchBlast && classes.known.warlock.level >= 5 && (/\bfiend\b/).test(classes.known.warlock.subclass); }, action : [["bonus action", ""]] }); AddWarlockInvocation("Frost Lance (prereq: the Archfey patron, Eldritch Blast cantrip)", { name : "Frost Lance", description : desc([ "When my Eldritch Blast hits a creature once or more, I can reduce its speed by 10 ft", "This speed reduction lasts until the end of my next turn" ]), source : [["UA:WnW", 4]], submenu : "[improves Eldritch Blast]", prereqeval : function(v) { return v.hasEldritchBlast && (/\barchfey\b/).test(classes.known.warlock.subclass); }, calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == 'eldritch blast') fields.Description += '; Target -10 ft speed'; }, "When I hit a creature with my Eldritch Blast cantrip once or more times in a turn, I can reduce its speed by 10 ft until the end of my next turn." ] } }); AddWarlockInvocation("Gaze of Khirad (prereq: level 7 warlock, the Great Old One patron)", { name : "Gaze of Khirad", description : desc([ "As an action, I can see through solid object out to 30 ft until the end of my current turn" ]), source : [["UA:WnW", 4]], submenu : "[warlock level 7+]", prereqeval : function(v) { return (/great old one/).test(classes.known.warlock.subclass) && classes.known.warlock.level >= 7; }, action : [["action", ""]] }); AddWarlockInvocation("Grasp of Hadar (prereq: the Great Old One patron, Eldritch Blast cantrip)", { name : "Grasp of Hadar", description : desc("Once per turn when my Eldritch Blast hits a creature, I can move it 10 ft closer to me"), source : [["UA:WnW", 4]], submenu : "[improves Eldritch Blast]", prereqeval : function(v) { return v.hasEldritchBlast && (/great old one/).test(classes.known.warlock.subclass); }, calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == 'eldritch blast') fields.Description += '; Target moved 10 ft to me'; }, "When I hit a creature with my Eldritch Blast cantrip once or more times in a turn, I can move it in a straight line 10 ft closer to me." ] } }); AddWarlockInvocation("Green Lord's Gift (prereq: the Archfey patron)", { name : "Green Lord's Gift", description : desc([ "When I regain HP, all dice for determining the HP I heal are treated as rolling maximum" ]), source : [["UA:WnW", 4]], prereqeval : function(v) { return (/\barchfey\b/).test(classes.known.warlock.subclass); } }); AddWarlockInvocation("Improved Pact Weapon (prereq: level 5 warlock, Pact of the Blade)", { name : "Improved Pact Weapon", description : desc([ "Any pact weapon I create is a +1 magic weapon, if it isn't already a magic weapon" ]), source : [["UA:WnW", 4]], submenu : "[improves Pact of the Blade]", prereqeval : function(v) { return classes.known.warlock.level >= 5 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the blade'; }, calcChanges : { atkCalc : [ function (fields, v, output) { // Test if this is a pact weapon, has no + bonus from somewhere else, and isn't a magic weapon if (v.pactWeapon && !output.magic && !v.theWea.isMagicWeapon) { v.pactMag = 1; output.magic = 1; }; }, "If my Pact Weapon doesn't already include a magical bonus in its name or gets it from somewhere else and is not a magic weapon, the calculation will add +1 to its To Hit and Damage." ] } }); AddWarlockInvocation("Mace of Dispater (prereq: the Fiend patron, Pact of the Blade)", { name : "Mace of Dispater", description : desc([ "As a pact weapon, I can create an iron mace forged in Dis, the 2nd layer of the Nine Hells", "I can knock a target prone with it on a hit, if the target's size is Huge or smaller", "On a hit, I can expend a spell slot to have it do +2d8 force damage per spell slot level" ]), source : [["UA:WnW", 4]], submenu : "[improves Pact of the Blade]", prereqeval : function(v) { return (/\bfiend\b/).test(classes.known.warlock.subclass) && classes.known.warlock.level >= 3 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the blade'; }, weaponOptions : [{ baseWeapon : "mace", regExpSearch : /^(?=.*\bmace\b)(?=.*\bdispater\b).*$/i, name : "Mace of Dispater", source : [["UA:WnW", 4]], pactWeapon : true, description : "Pact weapon; On hit: knock Huge or smaller prone, Expend spell slot for +2d8 force damage per slot level", selectNow : true }] }); AddWarlockInvocation("Moon Bow (prereq: the Archfey patron, Pact of the Blade)", { name : "Moon Bow", description : desc([ "As a pact weapon, I can create a longbow that creates arrows of white wood when drawn", "Its arrows last for 1 minute; I have advantage on attack rolls against lycanthropes with it", "On a hit, I can expend a spell slot to have it do +2d8 radiant damage per spell slot level" ]), source : [["UA:WnW", 4]], submenu : "[improves Pact of the Blade]", prereqeval : function(v) { return (/\barchfey\b/).test(classes.known.warlock.subclass) && classes.known.warlock.level >= 3 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the blade'; }, weaponOptions : [{ baseWeapon : "longbow", regExpSearch : /^(?=.*\bmoon)(?=.*bow\b).*$/i, name : "Moon Bow", source : [["UA:WnW", 4]], pactWeapon : true, description : "Pact weapon, heavy, two-handed; Adv. vs. lycanthropes; On hit, expend spell slot for +2d8 radiant damage per slot level", selectNow : true }] }); AddWarlockInvocation("Path of the Seeker (prereq: the Seeker patron)", { name : "Path of the Seeker", description : desc([ "I ignore difficult terrain; I have advantage on saving throws against being paralyzed", "I also have advantage on checks to escape a grapple, manacles, or rope bindings" ]), source : [["UA:WnW", 4]], prereqeval : function(v) { return (/\bseeker\b/).test(classes.known.warlock.subclass); }, savetxt : { adv_vs : ["paralyzed"] } }); AddWarlockInvocation("Raven Queen's Blessing (prereq: the Raven Queen patron, Eldritch Blast cantrip)", { name : "Raven Queen's Blessing", description : desc([ "When I score a critical hit with Eldritch Blast, I can choose an ally I can see within 30 ft", "That ally can immediately expend one HD to regain HP, just like after a short rest" ]), source : [["UA:WnW", 5]], submenu : "[improves Eldritch Blast]", prereqeval : function(v) { return v.hasEldritchBlast && (/raven queen/).test(classes.known.warlock.subclass); } }); AddWarlockInvocation("Relentless Hex (prereq: level 5 warlock, the Hexblade patron)", { name : "Relentless Hex", description : desc([ "As a bonus action, I can teleport next to a target affected by my hexblade's curse", "To do so, I must see the target and the space I'm teleporting to, and be within 30 ft of it" ]), source : [["UA:WnW", 5]], submenu : "[warlock level 5+]", prereqeval : function(v) { return (/hexblade/).test(classes.known.warlock.subclass) && classes.known.warlock.level >= 5; }, action : [["bonus action", ""]] }); AddWarlockInvocation("Sea Twins' Gift (prereq: the Archfey patron)", { name : "Sea Twins' Gift", description : desc([ "I can breathe underwater and I have a swim speed equal to my walking speed", "Once per long rest, I can cast Water Breathing using a warlock spell slot (PHB 287)" ]), spellcastingBonus : [{ name : "Sea Twins' Gift", spells : ["water breathing"], selection : ["water breathing"], firstCol : "oncelr" }], source : [["UA:WnW", 5]], prereqeval : function(v) { return (/\barchfey\b/).test(classes.known.warlock.subclass); }, speed : { swim : { spd : "walk", enc : "walk" } } }); AddWarlockInvocation("Seeker's Speech (prereq: the Seeker patron)", { name : "Seeker's Speech", description : desc([ "When I finish a long rest, I pick two languages that I know until I finish my next long rest" ]), source : [["UA:WnW", 5]], prereqeval : function(v) { return (/\bseeker\b/).test(classes.known.warlock.subclass); } }); AddWarlockInvocation("Shroud of Ulban (prereq: level 18 warlock, the Great Old One patron)", { name : "Shroud of Ulban", description : desc([ "As an action, I can turn myself invisible for 1 minute", "If I attack, deal damage, or force a creature to make a save, I become visible again", "However, I only become visible at the end of the current turn" ]), source : [["UA:WnW", 4]], submenu : "[warlock level 18+]", prereqeval : function(v) { return (/great old one/).test(classes.known.warlock.subclass) && classes.known.warlock.level >= 18; }, action : [["action", ""]] }); AddWarlockInvocation("Superior Pact Weapon (prereq: level 9 warlock, Pact of the Blade)", { name : "Superior Pact Weapon", description : desc([ "Any pact weapon I create is a +2 magic weapon, if it isn't already a magic weapon" ]), source : [["UA:WnW", 5]], submenu : "[improves Pact of the Blade]", prereqeval : function(v) { return classes.known.warlock.level >= 9 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the blade'; }, calcChanges : { atkCalc : [ function (fields, v, output) { // Test if this is a pact weapon, has no + bonus in its name, is not a magic weapon, and doesn't already have a improved pact weapon bonus var iPactWeaBonus = 2; if (v.pactWeapon && !v.thisWeapon[1] && !v.theWea.isMagicWeapon && ((!v.pactMag && !output.magic) || (v.pactMag && v.pactMag < iPactWeaBonus))) { if (v.pactMag) output.magic -= v.pactMag; v.pactMag = iPactWeaBonus; output.magic += v.pactMag; }; }, "If my Pact Weapon doesn't already include a magical bonus in its name or gets it from somewhere else and is not a magic weapon, the calculation will add +2 to its To Hit and Damage." ] } }); AddWarlockInvocation("Tomb of Levistus (prereq: the Fiend patron)", { name : "Tomb of Levistus", description : desc([ "As a reaction when I take damage, I can entomb myself in ice until the end of my turn", "I get 10 temp. HP per warlock level, which can be used to absorb the triggering damage", "Until the ice is gone, I have vulnerability to fire damage, 0 speed, and am incapacitated" ]), source : [["UA:WnW", 5]], prereqeval : function(v) { return (/\bfiend\b/).test(classes.known.warlock.subclass); }, recovery : "short rest", usages : 1, action : [["reaction", ""]] }); AddWarlockInvocation("Ultimate Pact Weapon (prereq: level 15 warlock, Pact of the Blade)", { name : "Ultimate Pact Weapon", description : desc([ "Any pact weapon I create is a +3 magic weapon, if it isn't already a magic weapon" ]), source : [["UA:WnW", 5]], submenu : "[improves Pact of the Blade]", prereqeval : function(v) { return classes.known.warlock.level >= 15 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the blade'; }, calcChanges : { atkCalc : [ function (fields, v, output) { // Test if this is a pact weapon, has no + bonus in its name, is not a magic weapon, and doesn't already have a improved pact weapon bonus var iPactWeaBonus = 3; if (v.pactWeapon && !v.thisWeapon[1] && !v.theWea.isMagicWeapon && ((!v.pactMag && !output.magic) || (v.pactMag && v.pactMag < iPactWeaBonus))) { if (v.pactMag) output.magic -= v.pactMag; v.pactMag = iPactWeaBonus; output.magic += v.pactMag; }; }, "If my Pact Weapon doesn't already include a magical bonus in its name or gets it from somewhere else and is not a magic weapon, the calculation will add +3 to its To Hit and Damage." ] } }); // ua_20170313_The-Mystic-Class.js // This file adds the content from the Unearthed Arcana: The Mystic Class article to MPMB's Character Record Sheet // WARNING: there are no published multiclassing rules for Mystic; the ones provided here are extrapolated from other classes // Define the source SourceList["UA:TMC"] = { name : "Unearthed Arcana: The Mystic Class", abbreviation : "UA:TMC", group : "Unearthed Arcana", url : "https://media.wizards.com/2017/dnd/downloads/UAMystic3.pdf", date : "2017/03/13" }; // Add spell schools spellSchoolList["Avatar"] = "avatar"; spellSchoolList["Awake"] = "awakened"; spellSchoolList["Immor"] = "immortal"; spellSchoolList["Nomad"] = "nomad"; spellSchoolList["Wu Jen"] = "wu jen"; // Adds a new class, the Mystic, with 6 subclasses ClassList.mystic = { regExpSearch : /psion\b|mystic/i, name : "Mystic", source : [["UA:TMC", 1]], primaryAbility : "Intelligence", abilitySave : 4, prereqs : "Intelligence 13", improvements : [0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5, 5], die : 8, saves : ["Wis", "Int"], skillstxt : { primary : "Choose two from Arcana, History, Insight, Medicine, Nature, Perception, and Religion" }, armorProfs : { primary : [true, false, false, false] }, weaponProfs : { primary : [true, false] }, equipment : "Mystic starting equipment:\n \u2022 A spear -or- a mace;\n \u2022 Leather mail -or- studded leather armor;\n \u2022 A light crossbow and 20 bolts -or- any simple weapon;\n \u2022 A scholar's pack -or- an explorer's pack.\n\nAlternatively, choose 5d4 \xD7 10 gp worth of starting equipment instead of both the class' and the background's starting equipment.", subclasses : ["Mystic Order", []], subclassGainedLevel : 1, attacks : [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], spellcastingFactor : "psionic0", spellcastingKnown : { cantrips : levels.map(function (n) { return n < 3 ? 1 : n < 10 ? 2 : n < 17 ? 3 : 4; }), spells : levels.map(function (n) { return n < 3 ? 1 : n < 5 ? 2 : n < 7 ? 3 : n < 9 ? 4 : n < 12 ? 5 : n < 15 ? 6 : n < 18 ? 7 : 8; }) }, spellcastingList : { "class" : "mystic", psionic : true }, features : { "psi points" : { name : "Psi Points", source : [["UA:TMC", 3]], minlevel : 1, description : desc([ "I use psi points to fuel my psionic disciplines, up to my psi limit per instance" ]), usages : levels.map(function (n) { return n < 2 ? 4 : n < 3 ? 6 : n < 4 ? 14 : n < 5 ? 17 : n < 6 ? 27 : n < 7 ? 32 : n < 8 ? 38 : n < 9 ? 44 : n < 10 ? 57 : n < 18 ? 64 : 71; }), recovery : "long rest", additional : levels.map(function (n) { return (n < 3 ? 2 : n < 5 ? 3 : n < 7 ? 5 : n < 9 ? 6 : 7) + " psi limit"; }) }, "psionics" : { name : "Psionics", source : [["UA:TMC", 3]], minlevel : 1, description : desc([ "I can use psionic talents/disciplines that I know, using Intelligence as my psionic ability" ]), additional : levels.map(function (n) { var talent = n < 3 ? "1 talent" : (n < 10 ? 2 : n < 17 ? 3 : 4) + " talents"; var discpl = n < 3 ? "1 discipline" : (n < 5 ? 2 : n < 7 ? 3 : n < 9 ? 4 : n < 12 ? 5 : n < 15 ? 6 : n < 18 ? 7 : 8) + " disciplines"; return talent + " \u0026 " + discpl + " known"; }) }, "psychic focus" : { name : "Psychic Focus", source : [["UA:TMC", 3]], minlevel : 1, description : desc([ "As a bonus action, I can choose one of my psionic disciplines and gain its focus benefit", "I can only focus on one at a time; It stays until I focus on another, or I'm incapacitated" ]), action : [["bonus action", ""]] }, "subclassfeature1" : { name : "Mystic Order", source : [["UA:TMC", 4]], minlevel : 1, description : desc('Choose a Mystic Order that shapes the nature of your rage and put it in the "Class" field') }, "mystical recovery" : { name : "Mystical Recovery", source : [["UA:TMC", 4]], minlevel : 2, description : desc([ "As a bonus action after using psi points on a discipline, I can regain HP per point spent" ]), action : [["bonus action", ""]] }, "telepathy" : { name : "Telepathy", source : [["UA:TMC", 4]], minlevel : 2, description : desc([ "I can telepathically speak to creatures I can see within 120 ft, if they know a language" // 'to' not 'with', so one-way ]) }, "strength of mind" : { name : "Strength of Mind", source : [["UA:TMC", 4]], minlevel : 4, description : desc([ "After a short rest, I can change my Wisdom save proficiency to another ability score" ]) }, "potent psionics" : { name : "Potent Psionics", source : [["UA:TMC", 4]], minlevel : 8, description : desc([ "Once per turn, when I hit a creature with a weapon attack, I can do extra damage", "In addition, I add my Intelligence modifier to my psionic talent damage rolls" ]), additional : levels.map(function (n) { if (n < 8) return ""; return "+" + (n < 14 ? 1 : 2) + "d8 psychic damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.mystic && classes.known.mystic.level > 7 && !v.isSpell) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.mystic.level < 14 ? 1 : 2) + 'd8 psychic damage'; }; }, "Once per turn, I can have one of my weapon attacks that hit do extra psychic damage.\n \u2022 My psionic talents get my Intelligence modifier added to their damage roll." ], atkCalc : [ function (fields, v, output) { if (classes.known.mystic && classes.known.mystic.level > 7 && v.thisWeapon[3] && v.thisWeapon[4].indexOf('mystic') !== -1 && SpellsList[v.thisWeapon[3]].level === 0) { output.extraDmg += What('Int Mod'); }; }, "" ], spellAdd : [ function (spellKey, spellObj, spName) { if (spellObj.psionic && spellObj.level == 0) { return genericSpellDmgEdit(spellKey, spellObj, "\\w+|Acid, Cold, Fire, Lightning, or Thunder", "Int", true); } }, "My psionic talents get my Intelligence modifier added to their damage." ] } }, "consumptive power" : { name : "Consumptive Power", source : [["UA:TMC", 5]], minlevel : 10, description : desc([ "Once per long rest, I can use my HP to fuel a psionic discipline instead of psi points", "I lose the HP; My HP max is reduced with the same until I finish my next long rest" ]), usages : 1, recovery : "long rest" }, "psionic mastery" : { name : "Psionic Mastery", source : [["UA:TMC", 5]], minlevel : 11, description : desc([ "As an action, I can gain a pool of special psi points that last until I finish a long rest", "I can use these, without psi limit, for disciplines that require an action or bonus action", "I can use either these or psi points from my normal pool for a discipline, but not both", "I can concentrate on all disciplines that use these special points at the same time", "I lose concentration if I cast a discipline requiring concentration from my normal pool" ]), usages : levels.map(function (n) { if (n < 11) return ""; return n < 13 ? 1 : n < 15 ? 2 : n < 17 ? 3 : 4; }), recovery : "long rest", additional : levels.map(function (n) { if (n < 11) return ""; return "pool of " + (n < 15 ? 9 : 11) + " psi points"; }), action : [["action", ""]] }, "psionic body" : { name : "Psionic Body", source : [["UA:TMC", 5]], minlevel : 20, description : desc([ "I no longer age and I have resistance to bludgeoning, piercing, and slashing damage", "I'm immune to disease, poison damage, and the poisoned condition", "If I die, I have a 55% chance of discorporating instead and returning 1d3 days later" ]), savetxt : { immune : ["poison", "disease"] }, dmgres : ["Bludgeoning", "Piercing", "Slashing"] } } }; // Order of the Avatar subclass for the Mystic AddSubClass("mystic", "avatar-ua", { regExpSearch : /^(?=.*(psion\b|mystic))(?=.*avatar).*$/i, subname : "Order of the Avatar", source : [["UA:TMC", 5]], features : { "subclassfeature1" : { name : "Bonus Disciplines", source : [["UA:TMC", 5]], minlevel : 1, description: desc("I know two additional psionic disciplines, chosen from the avatar disciplines"), spellcastingBonus : [{ name : "Bonus Disciplines", "class" : "mystic", school : ["Avatar"], level : [1, 9], times : 2, psionic : true }] }, "subclassfeature1.1" : { name : "Armor Training", source : [["UA:TMC", 5]], minlevel : 1, description: desc("I gain proficiency with medium armor and shields."), armorProfs : [false, true, false, true] }, "subclassfeature3" : { name : "Avatar of Battle", source : [["UA:TMC", 5]], minlevel : 3, description: desc("Allies within 30 ft of me gain +2 on initiative rolls while I'm not incapacitated") }, "subclassfeature6" : { name : "Avatar of Healing", source : [["UA:TMC", 6]], minlevel : 6, description : desc([ "Allies within 30 ft of me that get healed through a psionic discipline, get extra healing", "They add my Intelligence modifier to the HP regained, as long as I'm not incapacitated" ]), calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { if (!What("Int Mod") || What("Int Mod") <= 0) return; switch (spellKey) { case "pr1-mend wounds" : spellObj.description = spellObj.description.replace("healed for ", "healed for " + What("Int Mod") + "+"); return true; case "pr2-restore health" : spellObj.description = spellObj.description.replace("1 HP", (1 + What("Int Mod")) + " HP"); return true; } }, "I add my Intelligence modifier to the hit points I restore using my psionic disciplines." ] } }, "subclassfeature14" : { name : "Avatar of Speed", source : [["UA:TMC", 6]], minlevel : 14, description: desc("Allies within 30 ft of me can use Dash as a bonus action while I'm not incapacitated") } } }); // Order of the Awakened subclass for the Mystic AddSubClass("mystic", "awakened-ua", { regExpSearch : /^(?=.*(psion\b|mystic))(?=.*awakened).*$/i, subname : "Order of the Awakened", source : [["UA:TMC", 6]], features : { "subclassfeature1" : { name : "Bonus Disciplines", source : [["UA:TMC", 6]], minlevel : 1, description : " [+2 awakened disciplines]", spellcastingBonus : [{ name : "Bonus Disciplines", "class" : "mystic", school : ["Awake"], level : [1, 9], times : 2, psionic : true }] }, "subclassfeature1.1" : { name : "Awakened Talent", source : [["UA:TMC", 6]], minlevel : 1, description : desc([ "I gain proficiency with two skills of my choice, taken from the following list:", "Animal Handling, Deception, Insight, Intimidation, Investigation, Perception, Persuasion" ]), skillstxt : "Choose two from: Animal Handling, Deception, Insight, Intimidation, Investigation, Perception, and Persuasion" }, "subclassfeature3" : { name : "Psionic Investigation", source : [["UA:TMC", 6]], minlevel : 3, description : desc([ "By concentrating on an object I'm holding for 10 minutes, I learn the object's history", "I see/hear its surroundings the previous hour and know who hold it in the last 24 hours", "Also, for the next 24 hours, I can use an action to locate it and see its surroundings" ]), usages : 1, recovery : "short rest" }, "subclassfeature6" : { name : "Psionic Surge", source : [["UA:TMC", 6]], minlevel : 6, description : desc([ "I can end my psychic focus to impose disadv. on a save vs. a discipline or talent I use", "Once I do this, I can't regain psychic focus in any discipline until I can use this again" ]), usages : 1, recovery : "short rest" }, "subclassfeature14" : { name : "Spectral Form", source : [["UA:TMC", 6]], minlevel : 14, description : desc([ "As an action, I can become ghostly and move through objects and creatures for 10 min", "I also have resistance to all damage and move at half speed; I can end it as an action" ]), usages : 1, recovery : "long rest", action : [["action", ""]] } } }); // Order of the Immortal subclass for the Mystic AddSubClass("mystic", "immortal-ua", { regExpSearch : /^(?=.*(psion\b|mystic))(?=.*immortal).*$/i, subname : "Order of the Immortal", source : [["UA:TMC", 6]], features : { "subclassfeature1" : { name : "Bonus Disciplines", source : [["UA:TMC", 7]], minlevel : 1, description: desc("I know two additional psionic disciplines, taken from the immortal disciplines"), spellcastingBonus : [{ name : "Bonus Disciplines", "class" : "mystic", school : ["Immor"], level : [1, 9], times : 2, psionic : true }] }, "subclassfeature1.1" : { name : "Immortal Durability", source : [["UA:TMC", 7]], minlevel : 1, description : desc([ "My hit point maximum increases by an amount equal to my mystic level", "If not wearing armor or wielding a shield, my AC is 10 + my Dex mod + my Con mod" ]), calcChanges : { hp : function (totalHD) { if (classes.known.mystic) { return [classes.known.mystic.level, "Immortal Durability (mystic level)"]; } } }, armorOptions : [{ regExpSearch : /^(?=.*immortal)(?=.*durability).*$/i, name : "Immortal Durability", source : [["UA:TMC", 7]], ac : "10+Con", affectsWildShape : true, selectNow : true }] }, "subclassfeature3" : { name : "Psionic Resilience", source : [["UA:TMC", 7]], minlevel : 3, description : desc([ "At the start of each turn, I gain my Intelligence modifier in temporary HP (min 0)" ]) }, "subclassfeature6" : { name : "Surge of Health", source : [["UA:TMC", 7]], minlevel : 6, description : desc([ "As a reaction when I take damage, I can halve that damage, but end my psychic focus", "Once I do this, I can't regain psychic focus in any discipline until I can use this again" ]), usages : 1, recovery : "short rest", action : [["reaction", ""]] }, "subclassfeature14" : { name : "Immortal Will", source : [["UA:TMC", 7]], minlevel : 14, description : desc([ "If I end my turn at 0 HP, I can use 5 psi points to regain mystic level + Con mod in HP" ]), additional : levels.map(function (n) { if (n < 14) return ""; return "HP: " + n + " + Constitution modifier"; }) } } }); // Order of the Nomad subclass for the Mystic AddSubClass("mystic", "nomad-ua", { regExpSearch : /^(?=.*(psion\b|mystic))(?=.*nomad).*$/i, subname : "Order of the Nomad", source : [["UA:TMC", 7]], features : { "subclassfeature1" : { name : "Bonus Disciplines", source : [["UA:TMC", 7]], minlevel : 1, description: desc("I know two additional psionic disciplines, taken from the nomad disciplines"), spellcastingBonus : [{ name : "Bonus Disciplines", "class" : "mystic", school : ["Nomad"], level : [1, 9], times : 2, psionic : true }] }, "subclassfeature1.1" : { name : "Breadth of Knowledge", source : [["UA:TMC", 7]], minlevel : 1, description : desc([ "After I finish a long rest, I gain two proficiencies in chosen language, tool, or skill", "These proficiencies last until I finish my next long rest" ]) }, "subclassfeature3" : { name : "Memory of One Thousand Steps", source : [["UA:TMC", 7]], minlevel : 3, description : desc([ "As a reaction when hit by an attack, I can teleport away, causing the attack to miss", "I can teleport to any empty space that I had occupied since the start of my last turn" ]), usages : 1, recovery : "short rest", action : [["reaction", ""]] }, "subclassfeature6" : { name : "Superior Teleportation", source : [["UA:TMC", 7]], minlevel : 6, description : desc([ "When I use a psionic discipline to teleport, I can increase its distance by up to 10 ft" ]), calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { switch (spellKey) { case "ns1-step of a dozen paces" : var addDist = What("Unit System") === "metric" ? 3 : 10; spellObj.description = spellObj.description.replace(/(\d+ (ft|m))/i, addDist + "+$1"); return true; case "ns3-defensive step" : case "ns4-there and back again" : var addDist = What("Unit System") === "metric" ? 3 : 10; var theDist = Number(spellObj.description.replace(/.*(\d+) (ft|m).*/i, "$1")); spellObj.description = spellObj.description.replace(/(\d+) (ft|m)/i, (theDist + addDist) + " $2"); return true; } }, "My psionic disciplines that teleport have 10 ft added to the distance of their teleportation." ] } }, "subclassfeature14" : { name : "Effortless Journey", source : [["UA:TMC", 7]], minlevel : 14, description : desc([ "Once during my turn, I can teleport instead of moving, up to my movement speed ", "I subtracting the distance teleported from my remaining speed" ]) } } }); // Order of the Soul Knife subclass for the Mystic AddSubClass("mystic", "soul knife-ua", { regExpSearch : /^(?=.*soul\b)(?=.*\bknife).*$/i, subname : "Order of the Soul Knife", source : [["UA:TMC", 7]], fullname : "Soul Knife", features : { "subclassfeature1" : { name : "Martial Training", source : [["UA:TMC", 7]], minlevel : 1, description: desc("I gain proficiency with medium armor and martial weapons"), armor : [false, true, false, false], weapons : [false, true] }, "subclassfeature1.1" : { name : "Soul Knife", source : [["UA:TMC", 8]], minlevel : 1, description : desc([ "As a bonus action, I can create or dismiss my soul knives on both my fists", "As a bonus action, I can parry with these to get +2 AC until the start of my next turn" ]), action : [["bonus action", " (create/dismiss)"], ['bonus action', ' Parry']], weaponOptions : [{ regExpSearch : /^(?=.*\bsoul)(?=.*(knives|knife|weapon)\b).*$/i, name : "Soul Knife", source : [["UA:TMC", 8]], ability : 1, type : "Martial", damage : [1, 8, "psychic"], range : "Melee", description : "Finesse, light", abilitytodamage : true, selectNow : true }] }, "subclassfeature3" : { name : "Hone the Blade", source : [["UA:TMC", 8]], minlevel : 3, description : desc([ "I can spend psi points to give my soul knives a bonus to attack and damage for 10 min", "2 psi points: +1; 5 psi points: +2; 7 psi points: +4" ]) }, "subclassfeature6" : { name : "Consumptive Knife", source : [["UA:TMC", 8]], minlevel : 6, description : desc([ "Whenever I slay an enemy with a soul knife attack, I immediately regain 2 psi points" ]) }, "subclassfeature14" : { name : "Phantom Knife", source : [["UA:TMC", 8]], minlevel : 14, description : desc([ "As an action, I can make one attack with my soul knife, treating the target's AC as 10" ]), action : [["action", ""]] } } }); // Order of the Wu Jen subclass for the Mystic AddSubClass("mystic", "wu jen-ua", { regExpSearch : /^(?=.*\bwu\b)(?=.*\bjen\b).*$/i, subname : "Order of the Wu Jen", source : [["UA:TMC", 8]], fullname : "Wu Jen", features : { "subclassfeature1" : { name : "Bonus Disciplines", source : [["UA:TMC", 8]], minlevel : 1, description : " [+2 wu jen disciplines]", spellcastingBonus : [{ name : "Bonus Disciplines", "class" : "mystic", school : ["Wu Jen"], level : [1, 9], times : 2, psionic : true }] }, "subclassfeature1.1" : { name : "Hermit's Study", source : [["UA:TMC", 8]], minlevel : 1, description : desc([ "I gain proficiency with two skills of my choice, taken from the following list:", "Animal Handling|Arcana|History|Insight|Medicine|Nature|Perception|Religion|Survival" ]), skillstxt : "Choose two from: Animal Handling, Arcana, History, Insight, Medicine, Nature, Perception, Religion, and Survival" }, "subclassfeature3" : { name : "Elemental Attunement", source : [["UA:TMC", 8]], minlevel : 3, description : desc([ "If a target's resistance reduces damage of one of my psionic disciplines, I can bypass it", "With 1 extra psi point for the discipline (psi limit permitting), the resistance is ignored" ]) }, "subclassfeature6" : { name : "Arcane Dabbler", source : [["UA:TMC", 8]], minlevel : 6, description : desc([ "I know 3 wizard spells (1-3 level); When I gain a mystic level, I can swap one of these", "As a bonus action, I can use psi points to make spell slots; Last until my next long rest", "2 PP: 1st-level; 3 PP: 2nd-level; 5 PP: 3rd-level; 6 PP: 4th-level; 7 PP: 5th-level" ]), spellcastingBonus : [{ name : "Arcane Dabbler", "class" : "wizard", level : [1, 3], times : 3 }] }, "subclassfeature14" : { name : "Elemental Mastery", source : [["UA:TMC", 8]], minlevel : 14, description : desc([ "As a reaction when I take damage to which I have resistance, I can ignore that damage", "I gain immunity to that damage type until the start of my next turn" ]) } } }); // The Psionic Talents for the Mystic (with contributions by rabidknave) PsionicsList["beacon-ua-psy"] = { name : "Beacon", classes : ["mystic"], source : [["UA:TMC", 27]], psionic : true, level : 0, time : "1 bns", range : "Self", duration : "1 h (D)", description : "My body sheds bright light 20-ft rad and dim light 20-ft, in chosen color; dismiss as a bonus action", descriptionFull : "As a bonus action, you cause bright light to radiate from your body in a 20-foot radius and dim light for an additional 20 feet. The light can be colored as you like. The light lasts for 1 hour, and you can extinguish it earlier as a bonus action." }; PsionicsList["blade meld-ua-psy"] = { name : "Blade Meld", classes : ["mystic"], source : [["UA:TMC", 27]], psionic : true, level : 0, time : "1 bns", range : "Self", duration : "1 min", description : "One-handed melee weapon I'm holding merges with hand; it can't be removed for the duration", descriptionFull : "As a bonus action, a one-handed melee weapon you hold becomes one with your hand. For the next minute, you can't let go of the weapon nor can it be forced from your grasp." }; PsionicsList["blind spot-ua-psy"] = { name : "Blind Spot", classes : ["mystic"], source : [["UA:TMC", 27]], psionic : true, level : 0, time : "1 a", range : "120 ft", duration : "Next turn end", save : "Wis", description : "1 creature save or treats me as invisible until the end of my next turn", descriptionFull : "As an action, you erase your image from the mind of one creature you can see within 120 feet of you; the target must succeed on a Wisdom saving throw, or you are invisible to it until the end of your next turn." }; PsionicsList["delusion-ua-psy"] = { name : "Delusion", classes : ["mystic"], source : [["UA:TMC", 27]], psionic : true, level : 0, time : "1 a", range : "60 ft", duration : "1 min", description : "1 crea either hears a sound (whisper-scream), or sees up to 5-ft cube object that disappears on touch", descriptionFull : "As an action, you plant a false belief in the mind of one creature that you can see within 60 feet of you. You can create a sound or an image. Only the target of this talent perceives the sound or image you create." + "\n " + "If you create a sound, its volume can range from a whisper to a scream. It can be your voice, someone else's voice, a creature's roar, a musical instrument, or any other sound you pick. It lasts for 1 minute." + "\n " + "If you create an object, it must fit within a 5-foot cube and can't move or be reflective. The image can't create any effect that influences a sense other than sight. The image lasts for 1 minute, and it disappears if the creature touches it." }; PsionicsList["energy beam-ua-psy"] = { name : "Energy Beam", classes : ["mystic"], source : [["UA:TMC", 27]], psionic : true, level : 0, time : "1 a", range : "90 ft", duration : "Instantaneous", save : "Dex", description : "1 crea save or 1d8 Acid, Cold, Fire, Lightning, or Thunder dmg; +1d8 at CL 5, 11, and 17", descriptionCantripDie : "1 crea save or `CD`d8 Acid, Cold, Fire, Lightning, or Thunder dmg", descriptionFull : "As an action, you target one creature you can see within 90 feet of you. The target must succeed on a Dexterity saving throw or take 1d8 acid, cold, fire, lightning, or thunder damage (your choice)." + "\n " + "The talent's damage increases by 1d8 when you reach 5th level (2d8), 11th level (3d8), and 17th level (4d8)" }; PsionicsList["light step-ua-psy"] = { name : "Light Step", classes : ["mystic"], source : [["UA:TMC", 27]], psionic : true, level : 0, time : "1 bns", range : "Self", duration : "This turn end", description : "My walking speed increases by 10 ft; standing up costs 0 movement, once", descriptionFull : "As a bonus action, you alter your density and weight to improve your mobility. For the rest of your turn, your walking speed increases by 10 feet, and the first time you stand up this turn, you do so without expending any of your movement if your speed is greater than 0." }; PsionicsList["mind meld-ua-psy"] = { name : "Mind Meld", classes : ["mystic"], source : [["UA:TMC", 27]], psionic : true, level : 0, time : "1 bns", range : "120 ft", duration : "This turn end", description : "I communicate telepathically with 1 willing crea (int > 1) and gain access to 1 memory of theirs", descriptionFull : "As a bonus action, you can communicate telepathically with one willing creature you can see within 120 feet of you. The target must have an Intelligence of at least 2, otherwise this talent fails and the action is wasted." + "\n " + "This communication can occur until the end of the current turn. You don't need to share a language with the target for it to understand your telepathic utterances, and it understands you even if it lacks a language. You also gain access to one memory of the target's choice, gaining perfect recall of one thing it saw or did." }; PsionicsList["mind slam-ua-psy"] = { name : "Mind Slam", classes : ["mystic"], source : [["UA:TMC", 28]], psionic : true, level : 0, time : "1 a", range : "60 ft", duration : "Instantaneous", save : "Con", description : "1 crea save or 1d6 Force dmg, and knocked prone if Large or smaller; +1d6 at CL 5, 11, and 17", descriptionCantripDie : "1 crea save or `CD`d6 Force dmg, and knocked prone if Large or smaller", descriptionFull : "As an action, you target one creature you can see within 60 feet of you. The target must succeed on a Constitution saving throw or take 1d6 force damage. If it takes any of this damage and is Large or smaller, it is knocked prone." + "\n " + "The talent's damage increases by 1d6 when you reach 5th level (2d6), 11th level (3d6), and 17th level (4d6)" }; PsionicsList["mind thrust-ua-psy"] = { name : "Mind Thrust", classes : ["mystic"], source : [["UA:TMC", 28]], psionic : true, level : 0, time : "1 a", range : "120 ft", duration : "Instantaneous", save : "Int", description : "1 crea save or 1d10 Psychic dmg; +1d10 at CL 5, 11, and 17", descriptionCantripDie : "1 crea save or `CD`d10 Psychic dmg", descriptionFull : "As an action, you target one creature you can see within 120 feet of you. The target must succeed on an Intelligence saving throw or take 1d10 psychic damage." + "\n " + "The talent's damage increases by 1d10 when you reach 5th level (2d10), 11th level (3d10), and 17th level (4d10)." }; PsionicsList["mystic charm-ua-psy"] = { name : "Mystic Charm", classes : ["mystic"], source : [["UA:TMC", 28]], psionic : true, level : 0, time : "1 a", range : "120 ft", duration : "Next turn end", save : "Cha", description : "1 humanoid save or charmed until end of my next turn", descriptionFull : "As an action, you beguile one humanoid you can see within 120 feet of you. The target must succeed on a Charisma saving throw or be charmed by you until the end of your next turn." }; PsionicsList["mystic hand-ua-psy"] = { name : "Mystic Hand", classes : ["mystic"], source : [["UA:TMC", 28]], psionic : true, level : 0, time : "1 a", range : "30 ft", duration : "This turn end", description : "Move 1 unattended object (up to 10 lbs) up to 30 ft, or manipulate an object", descriptionFull : "You can use your action to manipulate or move one object within 30 feet of you. The object can't weigh more than 10 pounds, and you can't affect an object being worn or carried by another creature. If the object is loose, you can move it up to 30 feet in any direction." + "\n " + "This talent allows you to open an unlocked door, pour out a beer stein, and so on." + "\n " + "The object falls to the ground at the end of your turn if you leave it suspended in midair." }; PsionicsList["psychic hammer-ua-psy"] = { name : "Psychic Hammer", classes : ["mystic"], source : [["UA:TMC", 28]], psionic : true, level : 0, time : "1 a", range : "120 ft", duration : "Instantaneous", save : "Str", description : "1 crea save or 1d6 Force dmg and moved up to 10 ft in chosen direction; +1d6 at CL 5, 11, and 17", descriptionCantripDie : "1 crea save or `CD`d6 Force dmg and moved up to 10 ft in chosen direction", descriptionFull : "As an action, you try to grasp one creature you can see within 120 feet of you, with a hand crafted from telekinetic energy. The target must succeed on a Strength saving throw or take 1d6 force damage. If it takes any of this damage and is Large or smaller, you can move it up to 10 feet in a straight line in a direction of your choice. You can't lift the target off the ground unless it is already airborne or underwater." + "\n " + "The talent's damage increases by 1d6 when you reach 5th level (2d6), 11th level (3d6), and 17th level (4d6)." }; // Psionic Disciplines for the Mystic //the adaptive body discipline PsionicsList["adaptive body-ua-psy"] = { name : "Adaptive Body", classes : ["mystic"], source : [["UA:TMC", 10]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I don't need to eat, breathe, or sleep; I can long rest with 8 hours of light activity, without sleep", descriptionFull : "You can alter your body to match your surroundings, allowing you to withstand punishing environments. With greater psi energy, you can extend this protection to others." + PsychicFocus + "While focused on this discipline, you don't need to eat, breathe, or sleep. To gain the benefits of a long rest, you can spend 8 hours engaged in light activity, rather than sleeping during any of it.", firstCol : "checkbox", dependencies : ["ab1-environmental adaptation", "ab2-adaptive shield", "ab3-energy adaptation", "ab4-energy immunity"] }; PsionicsList["ab1-environmental adaptation"] = { name : "Environmental Adaptation", nameShort : "Environmental Adapt.", source : [["UA:TMC", 10]], psionic : true, level : 1, school : "Immor", time : "1 a", range : "Touch", duration : "1 h", description : "1 creature ignores the effects of extreme heat or cold (but not Fire or Cold damage)", descriptionFull : "As an action, you or a creature you touch ignores the effects of extreme heat or cold (but not cold or fire damage) for the next hour.", firstCol : 2 }; PsionicsList["ab2-adaptive shield"] = { name : "Adaptive Shield", source : [["UA:TMC", 10]], psionic : true, level : 1, school : "Immor", time : "1 rea", timeFull : "1 reaction, which you take when you take acid, cold, fire, lightning, or thunder damage", range : "Self", duration : "Next turn end", description : "If taking Acid, Cold, Fire, Lightning, or Thunder damage, gain resistance to it until end of next turn", descriptionFull : "When you take acid, cold, fire, lightning, or thunder damage, you can use your reaction to gain resistance to damage of that type -including the triggering damage- until the end of your next turn.", firstCol : 3 }; PsionicsList["ab3-energy adaptation"] = { name : "Energy Adaptation", source : [["UA:TMC", 10]], psionic : true, level : 1, school : "Immor", time : "1 a", range : "Touch", duration : "Conc, 1 h", description : "1 creature gains resistance to either Acid, Cold, Fire, Lightning, or Thunder damage", descriptionFull : "As an action, you can touch one creature and give it resistance to acid, cold, fire, lightning, or thunder damage (your choice), which lasts until your concentration ends.", firstCol : 5 }; PsionicsList["ab4-energy immunity"] = { name : "Energy Immunity", source : [["UA:TMC", 10]], psionic : true, level : 1, school : "Immor", time : "1 a", range : "Touch", duration : "Conc, 1 h", description : "1 creature gains immunity to either Acid, Cold, Fire, Lightning, or Thunder damage", descriptionFull : "As an action, you can touch one creature and give it immunity to acid, cold, fire, lightning, or thunder damage (your choice), which lasts until your concentration ends.", firstCol : 7 }; //the aura sight discipline (contributed by Justin W.) PsionicsList["aura sight-ua-psy"] = { name : "Aura Sight", classes : ["mystic"], source : [["UA:TMC", 10]], psionic : true, level : 1, school : "Awake", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain advantage on Wisdom (Insight) checks", descriptionFull : "You refocus your sight to see the energy that surrounds all creatures. You perceive auras, energy signatures that can reveal key elements of a creature's nature." + PsychicFocus + "While focused on this discipline, you have advantage on Wisdom (Insight) checks.", firstCol : "checkbox", dependencies : ["as1-asses foe", "as2-read moods", "as3-view aura", "as4-perceive the unseen"] }; PsionicsList["as1-asses foe"] = { name : "Asses Foe", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Awake", time : "1 bns", range : "Sight", duration : "Instantaneous", description : "Learn one creature's current HP total and all its immunities, resistances, and vulnerabilities", descriptionFull : "As a bonus action, you analyze the aura of one creature you see. You learn its current hit point total and all its immunities, resistances, and vulnerabilities.", firstCol : 2 }; PsionicsList["as2-read moods"] = { name : "Read Moods", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Awake", time : "1 bns", range : "Sight", duration : "Instantaneous", description : "Learn an one-word summary of the emotional state of up to 6 crea", descriptionFull : "As a bonus action, you learn a one-word summary of the emotional state of up to six creatures you can see, such as happy, confused, afraid, or violent.", firstCol : 2 }; PsionicsList["as3-view aura"] = { name : "View Aura", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "Sight", duration : "Conc, 1 h", description : "Monitor 1 crea: current HP, if magic effects it, basic emotional state; adv. on Insight/Cha checks vs. it", descriptionFull : "As an action, you study one creature's aura. Until your concentration ends, while you can see the target, you learn if it's under the effect of any magical or psionic effects, its current hit point total, and its basic emotional state. While this effect lasts, you have advantage on Wisdom (Insight) and Charisma checks you make against it.", firstCol : 3 }; PsionicsList["as4-perceive the unseen"] = { name : "Perceive the Unseen", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Awake", time : "1 bns", range : "Sight", duration : "Conc, 1 min", description : "See all creatures, including hidden and invisible ones, regardless of lighting conditions", descriptionFull : "As a bonus action, you gain the ability to see auras even of invisible or hidden creatures. Until your concentration ends, you can see all creatures, including hidden and invisible ones, regardless of lighting conditions.", firstCol : 5 }; //the bestial form discipline (contributed by rabidknave) PsionicsList["bestial form-ua-psy"] = { name : "Bestial Form", classes : ["mystic"], source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain advantage on Wisdom (Animal Handling) checks", descriptionFull : "You transform your body, gaining traits of different beasts." + PsychicFocus + "While focused on this discipline, you have advantage on Wisdom (Animal Handling) checks.", firstCol : "checkbox", dependencies : ["bf1-bestial claws", "bf2-bestial transformation", "bf3-bt - amphibious", "bf4-bt - climbing", "bf5-bt - flight", "bf6-bt - keen senses", "bf7-bt - perfect senses", "bf8-bt - swimming", "bf9-bt - tough hide"] }; PsionicsList["bf1-bestial claws"] = { name : "Bestial Claws", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "1 a", range : "5 ft", duration : "Instantaneous", description : "Melee weapon attack with manifested claw, dealing 1d10/PP Slashing dmg", descriptionFull : "You manifest long claws for an instant and make a melee weapon attack against one creature within 5 feet of you. On a hit, this attack deals 1d10 slashing damage per psi point spent.", firstCol : "1-7" }; PsionicsList["bf2-bestial transformation"] = { name : "Bestial Transformation", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", duration : "1 hr (D)", description : "Alter physique to gain one or more of following effects; sum PP cost for a single use; end with bns a", descriptionFull : "As a bonus action, you alter your physical form to gain different characteristics. When you use this ability, you can choose one or more of the following effects. Each effect has its own psi point cost. Add them together to determine the total cost. This transformation lasts for 1 hour, until you die, or until you end it as a bonus action.", firstCol : "2-7" }; PsionicsList["bf3-bt - amphibious"] = { name : " - Amphibious", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "", range : "Self", duration : "1 hr (D)", description : "I'm able to breathe air and water by gaining gills", descriptionFull : "You gain gills; you can breathe air and water", firstCol : 2 }; PsionicsList["bf4-bt - climbing"] = { name : " - Climbing", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "", range : "Self", duration : "1 hr (D)", description : "I gain climbing speed equal to my walking speed by growing tiny hooked claws", descriptionFull : "You grow tiny hooked claws that give you gain a climbing speed equal to your walking speed.", firstCol : 2 }; PsionicsList["bf5-bt - flight"] = { name : " - Flight", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "", range : "Self", duration : "1 hr (D)", description : "I gain flying speed equal to my walking speed by sprouting wings", descriptionFull : "Wings sprout from your back. You gain a flying speed equal to your walking speed.", firstCol : 5 }; PsionicsList["bf6-bt - keen senses"] = { name : " - Keen Senses", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "", range : "Self", duration : "1 hr (D)", description : "I gain advantage on Wisdom (Perception) checks through more sensitive eyes and ears", descriptionFull : "Your eyes and ears become more sensitive. You gain advantage on Wisdom (Perception) checks.", firstCol : 2 }; PsionicsList["bf7-bt - perfect senses"] = { name : " - Perfect Senses", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "", range : "Self", duration : "1 hr (D)", description : "I see invisible creatures/objects within 10 ft, even when blinded, through smell", descriptionFull : "You gain a keen sense of smell and an instinct to detect prey. You can see invisible creatures and objects within 10 feet of you, even if you are blinded.", firstCol : 3 }; PsionicsList["bf8-bt - swimming"] = { name : " - Swimming", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "", range : "Self", duration : "1 hr (D)", description : "I gain swimming speed equal to my walking speed by growing fins and webbed feet/hands", descriptionFull : "You gain fins and webbing between your fingers and toes; you gain a swimming speed equal to your walking speed.", firstCol : 2 }; PsionicsList["bf9-bt - tough hide"] = { name : " - Tough Hide", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "", range : "Self", duration : "1 hr (D)", description : "I gain +2 bonus to AC through thicker skin", descriptionFull : "Your skin becomes as tough as leather; you gain a +2 bonus to AC.", firstCol : 2 }; //the brute force discipline (contributed by rabidknave) PsionicsList["brute force-ua-psy"] = { name : "Brute Force", classes : ["mystic"], source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain advantage on Strength (Athletics) checks", descriptionFull : "You augment your natural strength with psionic energy, granting you the ability to achieve incredible feats of might." + PsychicFocus + "While focused on this discipline, you have advantage on Strength (Athletics) checks.", firstCol : "checkbox", dependencies : ["bf1-brute strike", "bf2-knock back", "bf3-mighty leap", "bf4-feat of strength"] }; PsionicsList["bf1-brute strike"] = { name : "Brute Strike", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", duration : "This turn end", description : "My next melee attack during this turn deals +1d6/PP damage, of the same type as the melee attack", descriptionFull : "As a bonus action, you gain a bonus to your next damage roll against a target you hit with a melee attack during the current turn. The bonus equals +1d6 per psi point spent, and the bonus damage is the same type as the attack. If the attack has more than one damage type, you choose which one to use for the bonus damage.", firstCol : "1-7" }; PsionicsList["bf2-knock back"] = { name : "Knock Back", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "1 rea", timeFull : "1 reaction, which you take when you hit a target with a melee attack", range : "Self", duration : "Instantaneous", save : "Str", description : "Use after melee atk hit; crea hit save or move 10 ft/PP away; if it then hits obj, 1d6/PP Bludg. dmg", //added the damage descriptionFull : "When you hit a target with a melee attack, you can activate this ability as a reaction. The target must succeed on a Strength saving throw or be knocked 10 feet away from you per psi point spent. The target moves in a straight line. If it hits an object, this movement immediately ends and the target takes 1d6 bludgeoning damage per psi point spent.", firstCol : "1-7" }; PsionicsList["bf3-mighty leap"] = { name : "Mighty Leap", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "Move", range : "Self", duration : "Instantaneous", description : "As part of my movement, jump 20 ft/PP in any direction", descriptionFull : "As part of your movement, you jump in any direction up to 20 feet per psi point spent.", firstCol : "1-7" }; PsionicsList["bf4-feat of strength"] = { name : "Feat of Strength", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", duration : "Next turn end", description : "I gain +5 bonus to Strength checks until the end of next turn", descriptionFull : "As a bonus action, you gain a +5 bonus to Strength checks until the end of your next turn.", firstCol : 2 }; //the celerity discipline (contributed by rabidknave) PsionicsList["celerity-ua-psy"] = { name : "Celerity", classes : ["mystic"], source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "My walking speed increases by 10 ft", descriptionFull : "You channel psionic power into your body, honing your reflexes and agility to an incredible degree. The world seems to slow down while you continue to move as normal." + PsychicFocus + "While focused on this discipline, your walking speed increases by 10 feet.", firstCol : "checkbox", dependencies : ["c1-rapid step", "c2-agile defense", "c3-blur of motion", "c4-surge of speed", "c5-surge of action"] }; PsionicsList["c1-rapid step"] = { name : "Rapid Step", source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", duration : "This turn end", description : "My walking, swim, and climb speeds increases by 10 ft/PP; doesn't grant new movement modes", descriptionFull : "As a bonus action, you increase your walking speed by 10 feet per psi point spent until the end of the current turn. If you have a climbing or swimming speed, this increase applies to that speed as well.", firstCol : "1-7" }; PsionicsList["c2-agile defense"] = { name : "Agile Defense", source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", duration : "Instantaneous", description : "I can take the Dodge action now, as part of using this power", descriptionFull : "As a bonus action, you take the Dodge action.", firstCol : 2 }; PsionicsList["c3-blur of motion"] = { name : "Blur of Motion", source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Immor", time : "1 a", range : "Self", duration : "This turn end", description : "I'm invisible while moving during the current turn", descriptionFull : "As an action, you cause yourself to be invisible during any of your movement during the current turn.", firstCol : 2 }; PsionicsList["c4-surge of speed"] = { name : "Surge of Speed", source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", duration : "This turn end", description : "I don't provoke opportunity attacks and gain a climbing speed equal to my walking speed", descriptionFull : "As a bonus action, you gain two benefits until the end of the current turn: you don't provoke opportunity attacks, and you have a climbing speed equal to your walking speed.", firstCol : 2 }; PsionicsList["c5-surge of action"] = { name : "Surge of Action", source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", duration : "Instantaneous", description : "I can take either the Dash action or make one weapon attack now, as part of using this power", descriptionFull : "As a bonus action, you can Dash or make one weapon attack.", firstCol : 5 }; //the corrosive metabolism discipline (contributed by rabidknave) PsionicsList["corrosive metabolism-ua-psy"] = { name : "Corrosive Metabolism", classes : ["mystic"], source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain resistance to Acid and Poison damage", descriptionFull : "Your control over your body allows you to deliver acid or poison attacks." + PsychicFocus + "While focused on this discipline, you have resistance to acid and poison damage.", firstCol : "checkbox", dependencies : ["cm1-corrosive touch", "cm2-venom strike", "cm3-acid spray", "cm4-breath of the black dragon", "cm5-breath of the green dragon"] }; PsionicsList["cm1-corrosive touch"] = { name : "Corrosive Touch", source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Immor", time : "1 a", range : "Touch", //use "Touch" instead of "5 ft" when its about reach duration : "Instantaneous", save : "Dex", description : "1 crea 1d10/PP Acid damage; save halves", // use "; save halves" for this kind of situations descriptionFull : "As an action, you deliver a touch of acid to one creature within your reach. The target must make a Dexterity saving throw, taking 1d10 acid damage per psi point spent on a failed save, or half as much damage on a successful one.", firstCol : "1-7" }; PsionicsList["cm2-venom strike"] = { name : "Venom Strike", source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Immor", time : "1 a", range : "30 ft", duration : "Instantaneous", save : "Con", description : "1 crea 1d6/PP Poison damage; save halves; if save failed, poisoned until end of my next turn", descriptionFull : "As an action, you create a poison spray that targets one creature you can see within 30 feet of you. The target must make a Constitution saving throw. On a failed save, it takes 1d6 poison damage per psi point spent and is poisoned until the end of your next turn. On a successful save, the target takes half as much damage and isn't poisoned.", firstCol : "1-7" }; PsionicsList["cm3-acid spray"] = { name : "Acid Spray", source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Immor", time : "1 rea", timeFull : "1 reaction, which you take when you take piercing or slashing damage", range : "5 ft", duration : "Instantaneous", description : "Use after I take Piercing or Slashing damage; all creatures in range take 2d6 Acid damage", descriptionFull : "As a reaction when you take piercing or slashing damage, you cause acid to spray from your wound; each creature within 5 feet of you takes 2d6 acid damage.", firstCol : 2 }; PsionicsList["cm4-breath of the black dragon"] = { name : "Breath of the Black Dragon", nameShort : "Breath o/t Black Dragon", source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Immor", time : "1 a", range : "60-ft line", duration : "Instantaneous", save : "Con", description : "60-ft long 5-ft wide line all creatures 6d6(+1d6/extra PP) Acid dmg; save halves", descriptionFull : "You exhale a wave of acid in a 60-foot line that is 5 feet wide. Each creature in the line must make a Constitution saving throw, taking 6d6 acid damage on a failed save, or half as much on a successful one. You can increase the damage by 1d6 per additional psi point spent on it.", firstCol : "5-7" }; PsionicsList["cm5-breath of the green dragon"] = { name : "Breath of the Green Dragon", nameShort : "Breath o/t Green Dragon", source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Immor", time : "1 a", range : "90-ft cone", duration : "Instantaneous", save : "Con", description : "All creatures 10d6 poison damage; save halves", descriptionFull : "You exhale a cloud of poison in a 90-foot cone. Each creature in the line must make a Constitution saving throw, taking 10d6 poison damage on a failed save, or half as much damage on a successful one.", firstCol : 7 }; //the crown of despair discipline (contributed by rabidknave) PsionicsList["crown of despair-ua-psy"] = { name : "Crown of Despair", classes : ["mystic"], source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "5-ft rad", components : "Psi-F.", duration : "While focused", description : "I gain advantage on Charisma (Intimidation) checks", descriptionFull : "You have learned to harvest seeds of despair in a creature's psyche, wracking it with self-doubt and inaction." + PsychicFocus + "While focused on this discipline, you have advantage on Charisma (Intimidation) checks.", firstCol : "checkbox", dependencies : ["cd1-crowned in sorrow", "cd2-call to inaction", "cd3-visions of despair", "cd4-dolorous mind"] }; PsionicsList["cd1-crowned in sorrow"] = { name : "Crowned in Sorrow", source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "Next turn start", save : "Cha", description : "1 crea 1d8/PP Psychic dmg and can't take reactions; save halves damage and normal reactions", descriptionFull : "As an action, one creature you can see within 60 feet of you must make a Charisma saving throw. On a failed save, it takes 1d8 psychic damage per psi point spent, and it can't take reactions until the start of its next turn. On a successful save, it takes half as much damage.", firstCol : "1-7" }; PsionicsList["cd2-call to inaction"] = { name : "Call to Inaction", source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Avatar", time : "1 min", range : "Self", duration : "Conc, 10 min", save : "Wis", description : "After 1 min conversation, 1 crea save or incapacitated; ends if it or its ally is attacked (charm effect)", descriptionFull : "If you spend 1 minute conversing with a creature, you can attempt to seed it with overwhelming ennui. At the end of the minute, you can use an action to force the creature to make a Wisdom saving throw. The save automatically succeeds if the target is immune to being charmed. On a failed save, it sits and is incapacitated until your concentration ends. This effect immediately ends if the target or any ally it can see is attacked or takes damage. On a successful save, the creature is unaffected and has no inkling of your attempt to bend its will.", firstCol : 2 }; PsionicsList["cd3-visions of despair"] = { name : "Visions of Despair", source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "1 rnd", save : "Cha", description : "1 crea 3d6(+1d6/extra PP) Psychic dmg and speed reduced to 0; save halves and no speed reduction", descriptionFull : "As an action, you force one creature you can see within 60 feet of you to make a Charisma saving throw. On a failed save, it takes 3d6 psychic damage, and its speed is reduced to 0 until the end of its next turn. On a successful save, it takes half as much damage. You can increase the damage by 1d6 per additional psi point spent on it.", firstCol : "3-7" }; PsionicsList["cd4-dolorous mind"] = { name : "Dolorous Mind", source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "Conc, 1 min", save : "Cha", description : "1 crea save or incapacitated and speed 0; save at end of each turn", descriptionFull : "As an action, you choose one creature you can see within 60 feet of you. It must succeed on a Charisma saving throw, or it is incapacitated and has a speed of 0 until your concentration ends. It can repeat this saving throw at the end of each of its turns, ending the effect on itself on a success.", firstCol : 5 }; //the crown of disgust discipline PsionicsList["crown of disgust-ua-psy"] = { name : "Crown of Disgust", classes : ["mystic"], source : [["UA:TMC", 13]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "5-ft rad", components : "Psi-F.", duration : "While focused", description : "5-ft rad around me is difficult terrain for creatures that aren't immune to being frightened", descriptionFull : "You cause a creature to be flooded with emotions of disgust." + PsychicFocus + "While you are focused on this discipline, the area in a 5-foot radius around you is difficult terrain for any enemy that isn't immune to being frightened.", firstCol : "checkbox", dependencies : ["cd1-eye of horror", "cd2-wall of repulsion", "cd3-visions of disgust", "cd4-world of horror"] }; PsionicsList["cd1-eye of horror"] = { name : "Eye of Horror", source : [["UA:TMC", 13]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "Next turn end", save : "Cha", description : "1 crea save or 1d6/PP Psychic damage and can't move closer; save halves and no movement restriction", descriptionFull : "As an action, choose one creature you can see within 60 feet of you. The target must make a Charisma saving throw. On a failed save, it takes 1d6 psychic damage per psi point spent and can't move closer to you until the end of its next turn. On a successful save, it takes half as much damage.", firstCol : "1-7" }; PsionicsList["cd2-wall of repulsion"] = { name : "Wall of Repulsion", source : [["UA:TMC", 13]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "Conc, 10 min", save : "Wis", description : "Up to 30\xD71\xD710 ft (l\xD7w\xD7h) invisible wall of energy; save to move through it, even for unwilling move", description : "Up to 9\xD70,3\xD73 m (l\xD7w\xD7h) invisible wall of energy; save to move through it, even for unwilling move", descriptionFull : "As an action, you create an invisible, insubstantial wall of energy within 60 feet of you that is up to 30 feet long, 10 feet high, and 1 foot thick. The wall lasts until your concentration ends. Any creature attempting to move through it must make a Wisdom saving throw. On a failed save, a creature can't move through the wall until the start of its next turn. On a successful save, the creature can pass through it. A creature must make this save whenever it attempts to pass through the wall, whether willingly or unwillingly.", firstCol : 3 }; PsionicsList["cd3-visions of disgust"] = { name : "Visions of Disgust", source : [["UA:TMC", 13]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "Conc, 1 min", save : "Wis", description : "1 crea save or 5d6 Psychic dmg (half on save) & 1d6 Psychic dmg per crea within 5 ft at its turn end", descriptionFull : "You cause a creature to regard all other beings as horrid, alien entities. As an action, choose one creature you can see within 60 feet of you. The target must make a Wisdom saving throw. On a failed save, it takes 5d6 psychic damage, and until your concentration ends, it takes 1d6 psychic damage per creature within 5 feet of it at the end of each of its turns. On a successful save, the target takes only half the initial damage and suffers none of the other effects.", firstCol : 5 }; PsionicsList["cd4-world of horror"] = { name : "World of Horror", source : [["UA:TMC", 13]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "Conc, 1 min", save : "Cha", description : "6 crea 8d6 Psychic dmg, frightened, \u0026 do only melee atks; save halves, no other effects; save each rnd", descriptionFull : "As an action, choose up to six creatures within 60 feet of you. Each target must make a Charisma saving throw. On a failed save, a target takes 8d6 psychic damage, and it is frightened until your concentration ends. On a successful save, a target takes half as much damage." + "\n " + "While frightened by this effect, a target's speed is reduced to 0, and the target can use its action, and any bonus action it might have, only to make melee attacks. The frightened target can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success.", firstCol : 7 }; //the crown of rage discipline PsionicsList["crown of rage-ua-psy"] = { name : "Crown of Rage", classes : ["mystic"], source : [["UA:TMC", 13]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "5-ft rad", components : "Psi-F.", duration : "While focused", description : "Any crea within range has disadvantage on melee attack rolls against targets other than me", descriptionFull : "You place a mote of pure fury within a creature's mind, causing its bloodlust to overcome its senses and for it to act as you wish it to." + PsychicFocus + "While you are focused on this discipline, any enemy within 5 feet of you that makes a melee attack roll against creatures other than you does so with disadvantage.", firstCol : "checkbox", dependencies : ["cr1-primal fury", "cr2-fighting words", "cr3-mindless courage", "cr4-punishing fury"] }; PsionicsList["cr1-primal fury"] = { name : "Primal Fury", source : [["UA:TMC", 13]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "Instantaneous", save : "Cha", description : "1 crea save or 1d6/PP Psychic dmg, use rea to move its speed toward nearest enemy (charm effect)", descriptionFull : "As an action, choose one creature you can see within 60 feet of you. The target must succeed on a Charisma saving throw or take 1d6 psychic damage per psi point spent on this ability and immediately use its reaction to move its speed in a straight line toward its nearest enemy. The save automatically succeeds if the target is immune to being charmed.", firstCol : "1-7" }; PsionicsList["cr2-fighting words"] = { name : "Fighting Words", source : [["UA:TMC", 13]], psionic : true, level : 1, school : "Avatar", time : "1 min", range : "Self", duration : "Conc, 10 min", save : "Wis", description : "After 1 min conversation, 1 crea save or attack one other, chosen crea for 5 rnds (charm effect)", descriptionFull : "If you spend 1 minute conversing with a creature, you can attempt to leave a simmering violence in its mind. At the end of the minute, you can use an action to force the creature to make a Wisdom saving throw to resist feeling violent urges against one creature you describe to it or name. The save automatically succeeds if the target is immune to being charmed. On a failed save, the target attacks the chosen creature if it sees that creature before your concentration ends, using weapons or spells against a creature it was already hostile toward or unarmed strikes against an ally or a creature it was neutral toward. Once the fight starts, it continues to attack for 5 rounds before this effect ends. This effect immediately ends if the target or any ally it can see is attacked or takes damage from any creature other than the one it has been incited against. On a successful save, the creature is unaffected and has no inkling of your attempt to bend its will.", firstCol : 2 }; PsionicsList["cr3-mindless courage"] = { name : "Mindless Courage", source : [["UA:TMC", 13]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "60 ft", duration : "Next turn end", save : "Wis", description : "1 crea save or it can only move towards the nearest enemy it can see, or not move at all (charm effect)", descriptionFull : "You cause a creature's bloodlust to overcome its sense of preservation. As a bonus action, choose one creature you can see within 60 feet of you. The target must succeed on a Wisdom saving throw or, until the end of your next turn, it can't willingly move unless its movement brings it closer to its nearest enemy that it can see. The save automatically succeeds if the target is immune to being charmed.", firstCol : 2 }; PsionicsList["cr4-punishing fury"] = { name : "Punishing Fury", source : [["UA:TMC", 14]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "60 ft", duration : "Conc, 1 min", save : "Wis", description : "1 crea save or when it makes melee atk, all in 5 ft of it can make melee atk vs. it as rea (charm effect)", descriptionFull : "You cause a creature's rage to grow so hot that it attacks without heeding its own safety. As a bonus action, choose one creature you can see within 60 feet of you. The target must succeed on a Wisdom saving throw or, until your concentration ends, any creature within 5 feet of it can use a reaction to make a melee attack against it whenever the target makes a melee attack. The save automatically succeeds if the target is immune to being charmed.", firstCol : 5 }; //the diminution discipline (contributed by mattohara & TheBob427) PsionicsList["diminution-ua-psy"] = { name : "Diminution", classes : ["mystic"], source : [["UA:TMC", 14]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I have advantage on Dexterity (Stealth) checks", descriptionFull : "You manipulate the matter that composes your body, drastically reducing your size without surrendering any of your might." + PsychicFocus + "While focused on this discipline, you have advantage on Dexterity (Stealth) checks.", firstCol : "checkbox", dependencies : ["d1-miniature form", "d2-toppling shift", "d3-sudden shift", "d4-microscopic form"] }; PsionicsList["d1-miniature form"] = { name : "Miniature Form", source : [["UA:TMC", 14]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", duration : "Conc, 10 min", description : 'Become Tiny, gain +5 to Dex (Stealth) and can fit through gaps of up to 6" without squeezing', descriptionMetric : "Become Tiny, gain +5 to Dex (Stealth) and can fit through gaps of up to 15 cm without squeezing", descriptionFull : "As a bonus action, you become Tiny until your concentration ends. While this size, you gain a +5 bonus to Dexterity (Stealth) checks and can move through gaps up to 6 inches across without squeezing.", firstCol : 2 }; PsionicsList["d2-toppling shift"] = { name : "Toppling Shift", source : [["UA:TMC", 14]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "5 ft", duration : "Instantaneous", save : "Str", description : "1 creature save or be knocked prone", descriptionFull : "As a bonus action, you shift to an incredibly small size and then suddenly return to normal, sending an opponent flying backward. Choose one creature you can see within 5 feet of you. It must succeed on a Strength saving throw or be knocked prone.", firstCol : 2 }; PsionicsList["d3-sudden shift"] = { name : "Sudden Shift", source : [["UA:TMC", 14]], psionic : true, level : 1, school : "Immor", time : "1 rea", timeFull : "1 reaction, which you take when are hit by an attack", range : "Self", duration : "Instantaneous", description : "Use when hit by an attack; it misses, and I move up to 5 ft without provoking opportunity attacks", descriptionFull : "As a reaction when you are hit by an attack, you shift down to minute size to avoid the attack. The attack misses, and you move up to 5 feet without provoking opportunity attacks before returning to normal size.", firstCol : 5 }; PsionicsList["d4-microscopic form"] = { name : "Microscopic Form", source : [["UA:TMC", 14]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", duration : "Conc, 10 min", description : "Become diminutive, gain +5 AC, +10 to Dex (Stealth), can fit through 1\" gaps, but can't use wea atks", descriptionMetric : "Become diminutive, gain +5 AC, +10 to Dex (Stealth), can fit through 2,5 cm gaps, can't use wea atks", descriptionFull : "As a bonus action, you become smaller than Tiny until your concentration ends. While this size, you gain a +10 bonus to Dexterity (Stealth) checks and a +5 bonus to AC, you can move through gaps up to 1 inch across without squeezing, and you can't make weapon attacks.", firstCol : 7 }; //the giant growth discipline (contributed by mattohara & TheBob427) PsionicsList["giant growth-ua-psy"] = { name : "Giant Growth", classes : ["mystic"], source : [["UA:TMC", 14]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Touch", components : "Psi-F.", duration : "While focused", description : "My reach increases by 5 ft", descriptionFull : "You infuse yourself with psionic energy to grow to tremendous size, bolstering your strength and durability." + PsychicFocus + "While focused on this discipline, your reach increases by 5 feet.", firstCol : "checkbox", dependencies : ["gg1-ogre form", "gg2-giant form"] }; PsionicsList["gg1-ogre form"] = { name : "Ogre Form", source : [["UA:TMC", 14]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", duration : "Conc, 1 min", description : "10 temp. HP; for duration: become Large, +5 ft reach, melee attacks deal +1d4 Bludgeoning dmg", descriptionFull : "As a bonus action, you gain 10 temporary hit points. In addition, until your concentration ends, your melee weapon attacks deal an extra 1d4 bludgeoning damage on a hit, and your reach increases by 5 feet. If you're smaller than Large, you also become Large for the duration.", firstCol : 2 }; PsionicsList["gg2-giant form"] = { name : "Giant Form", source : [["UA:TMC", 14]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", duration : "Conc, 1 min", description : "30 temp. HP; for duration: become Huge, +10 ft reach, melee attacks deal +2d6 Bludgeoning dmg", descriptionFull : "As a bonus action, you gain 30 temporary hit points. In addition, until your concentration ends, your melee weapon attacks deal an extra 2d6 bludgeoning damage on a hit, and your reach increases by 10 feet. If you're smaller than Huge, you also become Huge for the duration.", firstCol : 7 }; //the intellect fortress discipline (contributed by TheBob427) PsionicsList["intellect fortress-ua-psy"] = { name : "Intellect Fortress", classes : ["mystic"], source : [["UA:TMC", 14]], psionic : true, level : 1, school : "Awake", time : "1 bns", range : "Self", components : "Psi-F", duration : "While focused", description : "I gain resistance to Psychic damage", descriptionFull : "You forge an indomitable wall of psionic energy around your mind-one that allows you to launch counterattacks against your opponents." + PsychicFocus + "While focused on this discipline, you have resistance to psychic damage.", firstCol : "checkbox", dependencies : ["if1-psychic backlash", "if2-psychic parry", "if3-psychic redoubt"] }; PsionicsList["if1-psychic backlash"] = { name : "Psychic Backlash", source : [["UA:TMC", 14]], psionic : true, level : 1, school : "Awake", time : "1 rea", range : "Sight", duration : "Instantaneous", description : "I impose dis. on an attack roll vs. me; if I'm hit anyway, the attacker takes 2d10 Psychic damage", descriptionFull : "As a reaction, you can impose disadvantage on an attack roll against you if you can see the attacker. If the attack still hits you, the attacker takes 2d10 psychic damage.", firstCol : 2 }; PsionicsList["if2-psychic parry"] = { name : "Psychic Parry", source : [["UA:TMC", 14]], psionic : true, level : 1, school : "Awake", time : "1 rea", timeFull : "1 reaction, which you take when you make an Intelligence, a Wisdom, or a Charisma saving throw", range : "Self", duration : "Instantaneous", description : "Add +1/PP to the result of an Int, Wis, or Cha save; use after rolling, but before knowing if successful", descriptionFull : "As a reaction when you make an Intelligence, a Wisdom, or a Charisma saving throw, you gain a +1 bonus to that saving throw for each psi point you spend on this ability. You can use this ability after rolling the die but before suffering the results.", firstCol : "1-7" }; PsionicsList["if3-psychic redoubt"] = { name : "Psychic Redoubt", source : [["UA:TMC", 14]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "30 ft", duration : "Conc, 10 min", description : "Any creatures in range gain resistance to Psychic damage and advantage on Int, Wis, and Cha saves", descriptionFull : "As an action, you create a field of protective psychic energy. Choose any number of creatures within 30 feet of you. Until your concentration ends, each target has resistance to psychic damage and advantage on Intelligence, Wisdom, and Charisma saving throws.", firstCol : 5 }; //the iron durability discipline (contributed by mattohara) PsionicsList["iron durability-ua-psy"] = { name : "Iron Durability", classes : ["mystic"], source : [["UA:TMC", 15]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain a +1 bonus to AC", descriptionFull : "You transform your body to become a living metal, allowing you to shrug off attacks that would cripple weaker creatures." + PsychicFocus + "While focused on this discipline, you gain a +1 bonus to AC.", firstCol : "checkbox", dependencies : ["id1-iron hide", "id2-steel hide", "id3-iron resistance"] }; PsionicsList["id1-iron hide"] = { name : "Iron Hide", source : [["UA:TMC", 15]], psionic : true, level : 1, school : "Immor", time : "1 rea", timeFull : "1 reaction, which you take when you are hit by an attack", range : "Self", duration : "Next turn end", description : "I gain +1/PP AC; use when hit by attack; bonus works against triggering attack", descriptionFull : "As a reaction when you are hit by an attack, you gain a +1 bonus to AC for each psi point you spend on this ability. The bonus lasts until the end of your next turn. This bonus applies against the triggering attack.", firstCol : "1-7" }; PsionicsList["id2-steel hide"] = { name : "Steel Hide", source : [["UA:TMC", 15]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", duration : "Next turn end", description : "I gain resistance to Bludgeoning, Piercing, and Slashing damage", descriptionFull : "As a bonus action, you gain resistance to bludgeoning, piercing, and slashing damage until the end of your next turn.", firstCol : 2 }; PsionicsList["id3-iron resistance"] = { name : "Iron Resistance", source : [["UA:TMC", 15]], psionic : true, level : 1, school : "Immor", time : "1 a", range : "Self", duration : "Conc, 1 h", description : "I gain resistance to bludgeoning, piercing, or slashing (my choice)", descriptionFull : "As an action, you gain resistance to bludgeoning, piercing, or slashing damage (your choice), which lasts until your concentration ends.", firstCol : 7 }; //the mantle of awe discipline (contributed by mattohara) PsionicsList["mantle of awe-ua-psy"] = { name : "Mantle of Awe", classes : ["mystic"], source : [["UA:TMC", 15]], psionic : true, level : 1, school : "Awake", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain a bonus to Charisma checks, bonus equals half my Intelligence modifier (min 1)", descriptionFull : "You learn to use psionic energy to manipulate others with a subtle combination of psi and your own, natural charm." + PsychicFocus + "While focused on this discipline, you gain a bonus to Charisma checks. The bonus equals half your Intelligence modifier (minimum of +1).", firstCol : "checkbox", dependencies : ["moa1-charming presence", "moa2-center of attention", "moa3-invoke awe"] }; PsionicsList["moa1-charming presence"] = { name : "Charming Presence", source : [["UA:TMC", 15]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "30 ft", duration : "10 min", description : "2d8/PP HP of conscious, not in combat, not immune to charm crea charmed; use HP max, not current", descriptionFull : "As an action, you exert an aura of sympathetic power. Roll 2d8 per psi point spent on this ability; the total is how many hit points worth of creatures this option can affect. Creatures within 30 feet of you are affected in ascending order of their hit point maximums, ignoring incapacitated creatures, creatures immune to being charmed, and creatures engaged in combat." + "\n " + "Starting with the creature that has the lowest hit point maximum, each creature affected by this option is charmed by you for 10 minutes, regarding you as a friendly acquaintance. Subtract each creature's hit point maximum from the total before moving on to the next creature. A creature's hit point maximum must be equal to or less than the remaining total for that creature to be affected.", firstCol : "1-7" }; PsionicsList["moa2-center of attention"] = { name : "Center of Attention", source : [["UA:TMC", 15]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Conc, 1 min", save : "Cha", description : "1 crea save or all other creatures are invisible to it; ends if it leaves my sight/earshot or takes dmg", descriptionFull : "As an action, you exert an aura of power that grabs a creature's attention. Choose one creature you can see within 60 feet of you. It must make a Charisma saving throw. On a failed save, the creature is so thoroughly distracted by you that all other creatures are invisible to it until your concentration ends. This effect ends if the creature can no longer see or hear you or if it takes damage.", firstCol : 2 }; PsionicsList["moa3-invoke awe"] = { name : "Invoke Awe", source : [["UA:TMC", 15]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Conc, 10 min", save : "Int", description : "5 crea save or charmed, obey verbal commands; no self harm; will atk crea that atk me; save each rnd", descriptionFull : "As an action, you exert an aura that inspires awe in others. Choose up to 5 creatures you can see within 60 feet of you. Each target must succeed on an Intelligence saving throw or be charmed by you until your concentration ends. While charmed, the target obeys all your verbal commands to the best of its ability and without doing anything obviously self-destructive. The charmed target will attack only creatures that it has seen attack you since it was charmed or that it was already hostile toward. At the end of each of its turns, it can repeat the saving throw, ending the effect on itself on a success.", firstCol : 7 }; //the mantle of command discipline PsionicsList["mantle of command-ua-psy"] = { name : "Mantle of Command", classes : ["mystic"], source : [["UA:TMC", 15]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "When ending a turn I didn't move in, use my rea to have 1 ally within 30 ft move half its speed", descriptionFull : "You exert an aura of trust and authority, enhancing the coordination among your allies." + PsychicFocus + "While focused on this discipline, when you end your turn and didn't move during it, you can use your reaction to allow one ally you can see within 30 feet of you to move up to half their speed, following a path of your choice. To move in this way, the ally mustn't be incapacitated.", firstCol : "checkbox", dependencies : ["mc1-coordinated movement", "mc2-commander's sight", "mc3-command to strike", "mc4-strategic mind", "mc5-overwhelming attack"] }; PsionicsList["mc1-coordinated movement"] = { name : "Coordinated Movement", source : [["UA:TMC", 15]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "60 ft", duration : "Instantaneous", description : "Up to 5 allies I can see can use their reaction to move half their speed, following a path I choose", descriptionFull : "As a bonus action, choose up to five allies you can see within 60 feet of you. Each of those allies can use their reaction to move up to half their speed, following a path of your choice.", firstCol : 2 }; PsionicsList["mc2-commander's sight"] = { name : "Commander's Sight", source : [["UA:TMC", 15]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "Conc, 1 rnd", description : "I mark 1 crea; until the start of my next turn, my allies have adv. on attacks vs. it", descriptionFull : "As an action, choose one creature you can see within 60 feet of you. Until the start of your next turn, your allies have advantage on attack rolls against that target.", firstCol : 2 }; PsionicsList["mc3-command to strike"] = { name : "Command to Strike", source : [["UA:TMC", 15]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "Instantaneous", description : "1 ally I can see can use their reaction to take the Attack action, with me choosing the targets", descriptionFull : "As an action, choose one ally you can see within 60 feet of you. That ally can use their reaction to immediately take the Attack action. You choose the targets.", firstCol : 3 }; PsionicsList["mc4-strategic mind"] = { name : "Strategic Mind", source : [["UA:TMC", 15]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "Conc, 1 min", description : "1 ally can, on its turn, either add 1d4 to its attack rolls or take Dash or Disengage as a bonus action", descriptionFull : "As an action, you exert an aura of trust and command that unites your allies into a cohesive unit. Until your concentration ends, any ally within 60 feet of you on their turn can, as a bonus action, take the Dash or Disengage action or roll a d4 and add the number rolled to each attack roll they make that turn.", firstCol : 5 }; PsionicsList["mc5-overwhelming attack"] = { name : "Overwhelming Attack", source : [["UA:TMC", 15]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "Instantaneous", description : "Up to 5 allies I see can use their reactions to take the Attack action, with me choosing the targets", descriptionFull : "As an action, choose up to five allies you can see within 60 feet of you. Each of those allies can use their reaction to take the Attack action. You choose the targets of the attacks.", firstCol : 7 }; //the mantle of courage discipline PsionicsList["mantle of courage-ua-psy"] = { name : "Mantle of Courage", classes : ["mystic"], source : [["UA:TMC", 16]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "My and allies within 10 ft that can see me have advantage on saves vs. being frightened", descriptionFull : "You focus your mind on courage, radiating confidence and bravado to your allies." + PsychicFocus + "While focused on this discipline, you and allies within 10 feet of you who can see you have advantage on saving throws against being frightened.", firstCol : "checkbox", dependencies : ["mc1-incite courage", "mc2-aura of victory", "mc3-pillar of confidence"] }; PsionicsList["mc1-incite courage"] = { name : "Incite Courage", source : [["UA:TMC", 16]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "60 ft", duration : "Instantaneous", description : "Up to 6 creatures are no longer frightened", descriptionFull : "As a bonus action, choose up to six creatures you can see within 60 feet of you. If any of those creatures is frightened, that condition ends on that creature.", firstCol : 2 }; PsionicsList["mc2-aura of victory"] = { name : "Aura of Victory", source : [["UA:TMC", 16]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "30 ft", duration : "Conc, 10 min", description : "When an enemy I can see is reduced to 0 HP, me and allies within range gain 2/PP temporary HP", descriptionFull : "As a bonus action, you project psionic energy until your concentration ends. The energy fortifies you and your allies when your enemies are felled; whenever an enemy you can see is reduced to 0 hit points, you and each of your allies within 30 feet of you gain temporary hit points equal to double the psi points spent to activate this effect.", firstCol : "1-7" }; PsionicsList["mc3-pillar of confidence"] = { name : "Pillar of Confidence", source : [["UA:TMC", 16]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "Next turn end", description : "Me \u0026 up to 5 crea gain, on their turn, a special action to either make 1 wea atk, Dash, or Disengage", descriptionFull : "As an action, you and up to five creatures you can see within 60 feet of you each gain one extra action to use on their individual turns. The action goes away if not used before the end of your next turn. the action can be used only to make one weapon attack or to take the Dash or Disengage action.", firstCol : 6 }; //the mantle of fear discipline PsionicsList["mantle of fear-ua-psy"] = { name : "Mantle of Fear", classes : ["mystic"], source : [["UA:TMC", 16]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain advantage on Charisma (Intimidation) checks", descriptionFull : "You tap into a well of primal fear and turn yourself into a beacon of terror to your enemies." + PsychicFocus + "While focused on this discipline, you have advantage on Charisma (Intimidation) checks.", firstCol : "checkbox", dependencies : ["mf1-incite fear", "mf2-unsettling aura", "mf3-incite panic"] }; PsionicsList["mf1-incite fear"] = { name : "Incite Fear", source : [["UA:TMC", 16]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "Conc, 1 min", save : "Wis", description : "1 crea save or be frightened of me; repeat save each turn when out of line of sight", descriptionFull : "As an action, choose one creature you can see within 60 feet of you. The target must succeed on a Wisdom saving throw or become frightened of you until your concentration ends. Whenever the frightened target ends its turn in a location where it can't see you, it can repeat the saving throw, ending the effect on itself on a success.", firstCol : 2 }; PsionicsList["mf2-unsettling aura"] = { name : "Unsettling Aura", source : [["UA:TMC", 16]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "60 ft", duration : "Conc, 1 h", description : "All crea in range that can see me move only half speed when moving towards me (frightening effect)", descriptionFull : "As a bonus action, you cloak yourself in unsettling psychic energy. Until your concentration ends, any enemy within 60 feet of you that can see you must spend 1 extra foot of movement for every foot it moves toward you. A creature ignores this effect if immune to being frightened.", firstCol : 3 }; PsionicsList["mf3-incite panic"] = { name : "Incite Panic", source : [["UA:TMC", 16]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "90 ft", duration : "Conc, 1 min", save : "Wis", description : "8 crea save each rnd or frightened and spend turn on random move or melee atk; 3 saves ends; see B", descriptionFull : "As an action, choose up to eight creatures you can see within 90 feet of you that can see you. At the start of each of a target's turns before your concentration ends, the target must make a Wisdom saving throw. On a failed save, the target is frightened until the start of its next turn, and you roll a die. If you roll an odd number, the frightened target moves half its speed in a random direction and takes no action on that turn, other than to scream in terror. If you roll an even number, the frightened target makes one melee attack against a random target within its reach. If there is no such target, it moves half its speed in a random direction and takes no action on that turn. This effect ends on a target if it succeeds on three saving throws against it.", firstCol : 5 }; //the mantle of fury discipline PsionicsList["mantle of fury-ua-psy"] = { name : "Mantle of Fury", classes : ["mystic"], source : [["UA:TMC", 16]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "Me and allies within 10 ft at start of my turn gain +5 ft walking speed for that turn", descriptionFull : "You allow the primal fury lurking deep within your mind to burst forth, catching you and your allies in an implacable bloodthirst." + PsychicFocus + "While focused on this discipline in combat, you and any ally who starts their turn within 10 feet of you gains a 5-foot increase to their walking speed during that turn.", firstCol : "checkbox", dependencies : ["mf1-incite fury", "mf2-mindless charge", "mf3-aura of bloodletting", "mf4-overwhelming fury"] }; PsionicsList["mf1-incite fury"] = { name : "Incite Fury", source : [["UA:TMC", 16]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "60 ft", duration : "Conc, 1 min", description : "3 creatures can add 1d4 to the damage of melee weapon attacks during the duration", descriptionFull : "As a bonus action, choose up to three allies you can see within 60 feet of you (you can choose yourself in place of one of the allies). Until your concentration ends, each target can roll a d4 when rolling damage for a melee weapon attack and add the number rolled to the damage roll.", firstCol : 2 }; PsionicsList["mf2-mindless charge"] = { name : "Mindless Charge", source : [["UA:TMC", 16]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "60 ft", duration : "Instantaneous", description : "3 creatures can use their reactions to move their speed straight towards the nearest enemy", descriptionFull : "As a bonus action, choose up to three creatures you can see within 60 feet of you. Each target can immediately use its reaction to move up to its speed in a straight line toward its nearest enemy.", firstCol : 2 }; PsionicsList["mf3-aura of bloodletting"] = { name : "Aura of Bloodletting", source : [["UA:TMC", 16]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "60 ft", duration : "Conc, 1 min", description : "Me and all creatures within range during the duration have advantage on melee attack rolls", descriptionFull : "As a bonus action, you unleash an aura of rage. Until your concentration ends, you and any creature within 60 feet of you has advantage on melee attack rolls.", firstCol : 3 }; PsionicsList["mf4-overwhelming fury"] = { name : "Overwhelming Fury", source : [["UA:TMC", 16]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "Conc, 1 min", save : "Cha", description : "1 creature save or it can use its actions only to make melee attacks; save at the end of each of its turns", descriptionFull : "As an action, you flood rage into one creature you can see within 60 feet of you. The target must succeed on a Charisma saving throw, or it can use its actions only to make melee attacks until your concentration ends. It can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success.", firstCol : 5 }; //the mantle of joy discipline PsionicsList["mantle of joy-ua-psy"] = { name : "Mantle of Joy", classes : ["mystic"], source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain advantage on Charisma (Persuasion) checks", descriptionFull : "You tap into the joy within you, radiating it outward in soothing, psychic energy that brings hope and comfort to creatures around you." + PsychicFocus + "While focused on this discipline, you have advantage on Charisma (Persuasion) checks.", firstCol : "checkbox", dependencies : ["mj1-soothing presence", "mj2-comforting aura", "mj3-aura of jubilation", "mj4-beacon of recovery"] }; PsionicsList["mj1-soothing presence"] = { name : "Soothing Presence", source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "60 ft", duration : "Instantaneous", description : "3 creatures gain 3/PP temporary hit points", descriptionFull : "As a bonus action, choose up to three creatures you can see within 60 feet of you. Each target gains 3 temporary hit points per psi point spent on this effect.", firstCol : "1-7" }; PsionicsList["mj2-comforting aura"] = { name : "Comforting Aura", source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "Sight", duration : "Conc, 1 min", description : "3 creatures can add 1d4 on every saving throw during the duration", descriptionFull : "As a bonus action, choose up to three allies you can see (you can choose yourself in place of one of the allies). Until your concentration ends, each target can roll a d4 when making a saving throw and add the number rolled to the total.", firstCol : 2 }; PsionicsList["mj3-aura of jubilation"] = { name : "Aura of Jubilation", source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "60 ft", duration : "Conc, 1 min", description : "All creatures within range that can see me have disadvantage on Perception and Investigation checks", descriptionFull : "As a bonus action, you radiate a distracting mirth until your concentration ends. Each creature within 60 feet of you that can see you suffers disadvantage on any checks using the Perception and Investigation skills.", firstCol : 3 }; PsionicsList["mj4-beacon of recovery"] = { name : "Beacon of Recovery", source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "60 ft", duration : "Instantaneous", description : "Me + 5 allies can make an extra save against every effect that allows a save at the start/end of a turn", descriptionFull : "As a bonus action, you and up to five allies you can see within 60 feet of you can immediately make saving throws against every effect they're suffering that allows a save at the start or end of their turns.", firstCol : 5 }; //the mastery of air discipline (contributed by mattohara) PsionicsList["mastery of air-ua-psy"] = { name : "Mastery of Air", classes : ["mystic"], source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Wu Jen", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I take no falling damage and ignore difficult terrain when walking", descriptionFull : "You become one with the power of elemental air." + PsychicFocus + "While focused on this discipline, you take no falling damage, and you ignore difficult terrain when walking.", firstCol : "checkbox", dependencies : ["ma1-wind step", "ma2-wind stream", "ma3-cloak of air", "ma4-wind form", "ma5-misty form", "ma6-animate air"] }; PsionicsList["ma1-wind step"] = { name : "Wind Step", source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Wu Jen", time : "Move", range : "Self", duration : "This turn end", description : "Fly 20 ft/PP as part of my move this turn; if I end my turn in the air, my fall", descriptionFull : "As part of your move on your turn, you can fly up to 20 feet for each psi point spent. If you end this flight in the air, you fall unless something else holds you aloft.", firstCol : "1-7" }; PsionicsList["ma2-wind stream"] = { name : "Wind Stream", source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "30-ft line", duration : "Instantaneous", save : "Str", description : "30-ft long 5-ft wide all crea 1d8/PP Bludgeoning dmg and knocked prone; save halves and not prone", descriptionFull : "As an action, you create a line of focused air that is 30 feet long and 5 feet wide. Each creature in that area must make a Strength saving throw, taking 1d8 bludgeoning damage per psi point spent and being knocked prone on a failed save, or half as much damage on a successful one.", firstCol : "1-7" }; PsionicsList["ma3-cloak of air"] = { name : "Cloak of Air", source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Wu Jen", time : "1 bns", range : "Self", duration : "Conc, 10 min", description : "Atks vs. me have dis.; when missed by melee atk, use rea to have attacker repeat the attack on itself", descriptionFull : "As a bonus action, you seize control of the air around you to create a protective veil. Until your concentration ends, attack rolls against you have disadvantage, and when a creature you can see misses you with a melee attack, you can use your reaction to force the creature to repeat the attack roll against itself.", firstCol : 3 }; PsionicsList["ma4-wind form"] = { name : "Wind Form", source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Wu Jen", time : "1 bns", range : "Self", duration : "Conc, 10 min", description : "I gain a flying speed of 60 ft", descriptionFull : "As a bonus action, you gain a flying speed of 60 feet, which lasts until your concentration ends.", firstCol : 5 }; PsionicsList["ma5-misty form"] = { name : "Misty Form", source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "Self", duration : "Conc, 1 min", description : 'Gain resistance to Bludgeoning/Piercing/Slashing, can only take Dash actions, fit through 1" opening', descriptionMetric : "Gain resistance to Bludgeoning/Piercing/Slashing, only take Dash actions, fit through 2,5 cm opening", descriptionFull : "As an action, your body becomes like a misty cloud until your concentration ends. In this form, you gain resistance to bludgeoning, piercing, and slashing damage, and you can't take actions other than the Dash action. You can pass through openings that are no more than 1 inch wide without squeezing.", firstCol : 6 }; PsionicsList["ma6-animate air"] = { name : "Animate Air", source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "120 ft", duration : "Conc, 1 h", description : "Summon an air elemental that obeys my verbal commands; See Monster Manual, page 124", descriptionFull : "As an action, you cause an air elemental to appear in an unoccupied space you can see within 120 feet of you. The elemental lasts until your concentration ends, and it obeys your verbal commands. In combat, roll for its initiative, and choose its behavior during its turns. When this effect ends, the elemental disappears. See the Monster Manual for its stat block.", firstCol : 7 }; //the mastery of fire discipline PsionicsList["mastery of fire-ua-psy"] = { name : "Mastery of Fire", classes : ["mystic"], source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Wu Jen", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain resistance to Fire damage and gain a +2 bonus on rolls for Fire damage", descriptionFull : "You align your mind with the energy of elemental fire." + PsychicFocus + "While focused on this discipline, you gain resistance to fire damage, and you gain a +2 bonus to rolls for fire damage.", firstCol : "checkbox", dependencies : ["mf1-combustion", "mf2-rolling flame", "mf3-detonation", "mf4-fire storm", "mf5-animate fire"] }; PsionicsList["mf1-combustion"] = { name : "Combustion", source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "120 ft", duration : "Conc, 1 min", save : "Con", description : "1 crea save or 1d10/PP Fire dmg, on fire: 1d6 Fire dmg/rnd, it can 1 a to end; save half \u0026 not on fire", descriptionFull : "As an action, choose one creature or object you can see within 120 feet of you. The target must make a Constitution save. On a failed save, the target takes 1d10 fire damage per psi point spent, and it catches on fire, taking 1d6 fire damage at the end of each of its turns until your concentration ends or until it or a creature adjacent to it extinguishes the flames with an action. On a successful save, the target takes half as much damage and doesn't catch on fire.", firstCol : "1-7" }; PsionicsList["mf2-rolling flame"] = { name : "Rolling Flame", source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "5 ft", duration : "Conc, 1 min", description : "20-ft cube all 5 Fire damage and any that end their turn in it also 5 Fire damage", descriptionFull : "As an action, you create fire in a 20-foot-by-20-foot cube within 5 feet of you. The fire lasts until your concentration ends. Any creature in that area when you use this ability and any creature that ends its turn there takes 5 fire damage.", firstCol : 3 }; PsionicsList["mf3-detonation"] = { name : "Detonation", source : [["UA:TMC", 18]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "120 ft", duration : "Instantaneous", description : "20-ft rad all creatures save or 7d6 Fire damage and knocked prone; save halves and not prone", save : "Con", descriptionFull : "As an action, you create a fiery explosion at a point you can see within 120 feet of you. Each creature in a 20-foot-radius sphere centered on that point must make a Constitution saving throw, taking 7d6 fire damage and being knocked prone on a failed save, or half as much damage on a successful one.", firstCol : 5 }; PsionicsList["mf4-fire storm"] = { name : "Fire Storm", source : [["UA:TMC", 18]], psionic : true, level : 1, school : "Wu Jen", time : "1 bns", range : "Self", duration : "Conc, 1 min", description : "All creatures that end their turn within 5 ft of me take 3d6 Fire damage", descriptionFull : "As a bonus action, you become wreathed in flames until your concentration ends. Any creature that end its turn within 5 feet of you takes 3d6 fire damage.", firstCol : 5 }; PsionicsList["mf5-animate fire"] = { name : "Animate Fire", source : [["UA:TMC", 18]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "120 ft", duration : "Conc, 1 h", description : "Summon a fire elemental that obeys my verbal commands; See Monster Manual, page 124", descriptionFull : "As an action, you cause a fire elemental to appear in an unoccupied space you can see within 120 feet of you. The elemental lasts until your concentration ends, and it obeys your verbal commands. In combat, roll for its initiative, and choose its behavior during its turns. When this effect ends, the elemental disappears. See the Monster Manual for its stat block.", firstCol : 7 }; //the mastery of force discipline PsionicsList["mastery of force-ua-psy"] = { name : "Mastery of Force", classes : ["mystic"], source : [["UA:TMC", 18]], psionic : true, level : 1, school : "Wu Jen", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain advantage on Strength checks", descriptionFull : "As a student of psionic power, you perceive the potential energy that flows through all things. You reach out with your mind, transforming the potential into the actual. Objects and creatures move at your command." + PsychicFocus + ". While focused on this discipline, you have advantage on Strength checks.", firstCol : "checkbox", dependencies : ["mf1-push", "mf2-move", "mf3-inertial armor", "mf4-telekinetic barrier", "mf5-grasp", "mf6-crush (with grasp)" , "mf7-move (with grasp)"] }; PsionicsList["mf1-push"] = { name : "Push", source : [["UA:TMC", 18]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Instantaneous", save : "Str", description : "1 crea save or 1d8/PP Force dmg and pushed 5 ft/PP straight away; save halves and not pushed", descriptionFull : "As an action, choose one creature you can see within 60 feet of you. The target must make a Strength saving throw. On a failed save, it takes 1d8 force damage per psi point spent and is pushed up to 5 feet per point spent in a straight line away from you. On a successful save, it takes half as much damage.", firstCol : "1-7" }; PsionicsList["mf2-move"] = { name : "Move", source : [["UA:TMC", 18]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Instantaneous", save : "Dex", description : "Move obj 60 ft, after which it falls; crea under obj DC 10 save or 1d6+1d6/PP Bludg. dmg; see book", descriptionFull : "Choose one object you can see within 60 feet of you that isn't being worn or carried by another creature and that isn't secured in place. It can't be larger than 20 feet on a side, and its maximum weight depends on the psi points spent on this ability, as shown below." + "\n " + "As an action, you move the object up to 60 feet, and you must keep the object within sight during this movement. If the object ends this movement in the air, it falls. If the object would fall on a creature, the creature must succeed on a DC 10 Dexterity saving throw or take damage as listed on the table below.\n\n " + toUni("Psi") + "\t" + toUni("Maximum") + " " + toUni("Bludgeoning") + "\n" + toUni("Points") + "\t " + toUni("Weight") + "\t " + toUni("Damage") + "\n 2\t 25 lbs. \t 2d6" + "\n 3\t 50 lbs. \t 4d6" + "\n 5\t 250 lbs. \t 6d6" + "\n 6\t 500 lbs. \t 7d6" + "\n 7\t 1000 lbs. \t 8d6", firstCol : "2-7" }; PsionicsList["mf3-inertial armor"] = { name : "Inertial Armor", source : [["UA:TMC", 18]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "Self", duration : "8 h", description : "I gain AC 14 + Dex modifier and resistance to Force dmg if not wearing armor; ends if don armor", descriptionFull : "As an action, you sheathe yourself in an intangible field of magical force. For 8 hours, your base AC is 14 + your Dexterity modifier, and you gain resistance to force damage. This effect ends if you are wearing or don armor.", firstCol : 2 }; PsionicsList["mf4-telekinetic barrier"] = { name : "Telekinetic Barrier", source : [["UA:TMC", 18]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Conc, 10 min", description : "40-ft long, 10-ft high, 1-inch thick transparent wall of energy; each 10-ft section has AC 10 \u0026 10 HP", descriptionFull : "As an action, you create a transparent wall of telekinetic energy, at least one portion of which must be within 60 feet of you. The wall is 40 feet long, 10 feet high, and 1 inch thick. The wall lasts until your concentration ends. Each 10-foot section of the wall has an AC of 10 and 10 hit points.", firstCol : 3 }; PsionicsList["mf5-grasp"] = { name : "Grasp", source : [["UA:TMC", 18]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Conc, 1 min", description : "1 crea save or grappled; escape Athl./Acro. vs. my spell atk +1/PP; if grappled I can Crush/Move", save : "Str", descriptionFull : "You attempt to grasp a creature in telekinetic energy and hold it captive. As an action, choose one creature you can see within 60 feet of you. The target must succeed on a Strength saving throw or be grappled by you until your concentration ends or until the target leaves your reach, which is 60 feet for this grapple." + "\n " + "The grappled target can escape by succeeding on a Strength (Athletics) or Dexterity (Acrobatics) check contested by your psionic ability plus your proficiency bonus. When a target attempts to escape in this way, you can spend psi points to boost your check, abiding by your psi limit. You gain a +1 bonus per psi point spent." + "\n " + "While a target is grappled in this manner, you create one of the following effects as an action: " + toUni("Crush") + " (1–7 psi) The target takes 1d6 bludgeoning damage per psi point spent." + toUni("Move") + " (1–7 psi) You move the target up to 5 feet per psi point spent. You can move it in the air and hold it there. It falls if the grapple ends.", firstCol : 3 }; PsionicsList["mf6-crush (with grasp)"] = { name : " - Crush (with Grasp)", source : [["UA:TMC", 18]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Instantaneous", description : "1 creature grappled by Grasp takes 1d6/PP Bludgeoning damage", descriptionFull : "While the target is grappled by Grasp from the Mastery of Force discipline, you can use Crush on it as an action:" + "\n " + "The target takes 1d6 bludgeoning damage per psi point spent.", firstCol : "1-7" }; PsionicsList["mf7-move (with grasp)"] = { name : " - Move (with Grasp)", source : [["UA:TMC", 18]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Instantaneous", description : "1 creature grappled by Grasp moved up to 5 ft/PP; can hold it aloft, but it falls when grapple ends", descriptionFull : "While the target is grappled by Grasp from the Mastery of Force discipline, you can use Move on it as an action:" + "\n " + "You move the target up to 5 feet per psi point spent. You can move it in the air and hold it there. It falls if the grapple ends.", firstCol : "1-7" }; //the mastery of ice discipline (contributed by Justin W.) PsionicsList["mastery of ice-ua-psy"] = { name : "Mastery of Ice", classes : ["mystic"], source : [["UA:TMC", 19]], psionic : true, level : 1, school : "Wu Jen", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain resistance to Cold damage", descriptionFull : "You master the power of ice, shaping it to meet you demands." + PsychicFocus + "While focused on this discipline, you have resistance to cold damage.", firstCol : "checkbox", dependencies : ["mi1-ice spike", "mi2-ice sheet", "mi3-frozen sanctuary", "mi4-frozen rain", "mi5-ice barrier"] }; PsionicsList["mi1-ice spike"] = { name : "Ice Spike", source : [["UA:TMC", 19]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "120 ft", duration : "Next turn end", save : "Dex", description : "1 creature save or 1d8/PP Cold damage and speed halved; save halves and normal speed", descriptionFull : "As an action, you hurl a mote of ice at one creature you can see within 120 feet of you. The target must make a Dexterity saving throw. On a failed save, the target takes 1d8 cold damage per psi point spent and has its speed halved until the start of your next turn. On a successful save, the target takes half as much damage.", firstCol : "1-7" }; PsionicsList["mi2-ice sheet"] = { name : "Ice Sheet", source : [["UA:TMC", 19]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "10 min", save : "Dex", description : "Create 20-ft rad of difficult terrain; crea move more than 10 ft save or prone; on slope slide to bottom", descriptionFull : "As an action, choose a point on the ground you can see within 60 feet of you. The ground in a 20-foot radius centered on that point becomes covered in ice for 10 minutes. It is difficult terrain, and any creature that moves more than 10 feet on it must succeed on a Dexterity saving throw or fall prone. If the surface is sloped, a creature that falls prone in the area immediately slides to the bottom of the slope.", firstCol : 2 }; PsionicsList["mi3-frozen sanctuary"] = { name : "Frozen Sanctuary", source : [["UA:TMC", 19]], psionic : true, level : 1, school : "Wu Jen", time : "1 bns", range : "Self", duration : "Instantaneous", description : "I gain 20 temporary hit points", descriptionFull : "As a bonus action, you sheathe yourself with icy resilience. You gain 20 temporary hit points.", firstCol : 3 }; PsionicsList["mi4-frozen rain"] = { name : "Frozen Rain", source : [["UA:TMC", 19]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "120 ft", duration : "Conc, 1 min", save : "Con", description : "20-ft rad all 6d6(+1d6/extra PP) Cold dmg \u0026 spd 0; save half \u0026 no spd 0; 1 a Athl. vs DC for no spd 0", descriptionFull : "As an action, choose a point you can see within 120 feet of you. The air in a 20-foot-radius sphere centered on that point becomes deathly cold and saturated with moisture. Each creature in that area must make a Constitution saving throw. On a failed save, a target takes 6d6 cold damage, and its speed is reduced to 0 until your concentration ends. On a successful save, a target takes half as much damage." + "\n " + "As an action, a target that has its speed reduced can end the effect early if it succeeds on a Strength (Athletics) check with a DC equal to this effect's save DC." + "\n " + "You can increase this effect's damage by 1d6 per each additional psi point spent on it.", firstCol : "5-7" }; PsionicsList["mi5-ice barrier"] = { name : "Ice Barrier", source : [["UA:TMC", 19]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60-ft", duration : "Conc, 10 min", description : "60\xD71\xD715ft (l\xD7w\xD7h) wall; a 10-ft section has AC 12 & 30 HP; melee atks do same as Cold dmg back", descriptionMetric : "20\xD70,3\xD75m (l\xD7w\xD7h) wall; a 3-m section has AC 12 & 30 hp; melee atks do same as Cold dmg back", descriptionFull : "As an action, you create a wall of ice, at least one portion of which must be within 60 feet of you. The wall is 60 feet long, 15 feet high, and 1 foot thick. The wall lasts until your concentration ends. Each 10-foot section of the wall has AC 12 and 30 hit points. A creature that damages the wall with a melee attack takes cold damage equal to the damage the creature dealt to the wall.", firstCol : 6 }; //the mastery of light and darkness discipline (contributed by Justin W.) PsionicsList["mastery of light and darkness-ua-psy"] = { name : "Mastery of Light and Darkness", nameShort : "Mastery of Light \u0026 Dark", classes : ["mystic"], source : [["UA:TMC", 19]], psionic : true, level : 1, school : "Wu Jen", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I can see through natural and magical darkness out to 30 ft", descriptionFull : "You claim dominion over light and darkness with your mind." + PsychicFocus + "While focused on this discipline, natural and magical darkness within 30 feet of you has no effect on your vision.", firstCol : "checkbox", dependencies : ["mld1-darkness", "mld2-light", "mld3-shadow beasts", "mld4-radiant beam"] }; PsionicsList["mld1-darkness"] = { name : "Darkness", source : [["UA:TMC", 19]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Conc, 1 min", description : "10 ft/PP rad darkness from point; darkvision doesn't work; only magical light of SL 3 or higher works", descriptionFull : "As an action, you create an area of magical darkness, which foils darkvision. Choose a spot you can see within 60 feet of you. Magical darkness radiates from that point in a sphere with a 10-foot radius per psi point spent on this ability. The light produced by spells of 2nd level or less is suppressed in this area.", firstCol : "1-7" }; PsionicsList["mld2-light"] = { name : "Light", source : [["UA:TMC", 19]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "Touch", duration : "Conc, 1 min", save : "Dex", description : "1 crea/obj save or sheds bright light 20-ft rad and dim light 20-ft, and can't hide, atks vs. it have adv.", descriptionFull : "As an action, an object you touch radiates light in a 20-foot radius and dim light for an additional 20 feet. The light lasts until your concentration ends. Alternatively, a creature you touch radiates light in the same manner if it fails a Dexterity saving throw. While lit in this manner, it can't hide, and attack rolls against it gain advantage.", firstCol : 2 }; PsionicsList["mld3-shadow beasts"] = { name : "Shadow Beasts", source : [["UA:TMC", 19]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Conc, 1 min", description : "Summon 2 shadows that obeys my verbal commands; See Monster Manual, page 269", descriptionFull : "As an action, you cause two shadows to appear in unoccupied spaces you can see within 60 feet of you. The shadows last until your concentration ends, and they obey your verbal commands. In combat, roll for their initiative, and choose their behavior during their turns. When this effect ends, the shadows disappear. See the Monster Manual for their stat block.", firstCol : 3 }; PsionicsList["mld4-radiant beam"] = { name : "Radiant Beam", source : [["UA:TMC", 19]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Conc, 1 min", save : "Dex", description : "1 crea 6d6(+1d6/extra PP) Radiant dmg, blinded, save each turn to end blind; save halves \u0026 not blind", descriptionFull : "As an action, you project a beam of light at one creature you can see within 60 feet of you. The target must make a Dexterity saving throw. On a failed save, it takes 6d6 radiant damage and is blinded until your concentration ends. On a successful save, it takes half as much damage. A blinded target can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success." + "\n " + "You can increase this effect's damage by 1d6 per each additional psi point spent on it.", firstCol : "5-7" }; //the mastery of water discipline (contributed by Justin W.) PsionicsList["mastery of water-ua-psy"] = { name : "Mastery of Water", classes : ["mystic"], source : [["UA:TMC", 19]], psionic : true, level : 1, school : "Wu Jen", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain a swimming speed equal to my walking speed and I can breathe underwater", descriptionFull : "Your mind becomes one with elemental water, attuning your thoughts to its ebb and flow." + PsychicFocus + "While focused on this discipline, you have a swimming speed equal to your walking speed, and you can breathe underwater.", firstCol : "checkbox", dependencies : ["mwa1-dessicate", "mwa2-watery grasp", "mwa3-water whip", "mwa4-water breathing","mwa5-water sphere","mwa6-animate water"] }; PsionicsList["mwa1-dessicate"] = { name : "Dessicate", source : [["UA:TMC", 20]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Instantaneous", save : "Con", description : "1 creature 1d10/PP Necrotic damage; save halves", descriptionFull : "As an action, choose one creature you can see within 60 feet of you. The target must make a Constitution saving throw, taking 1d10 necrotic damage per psi point spent on this ability, or half as much damage on a successful one.", firstCol : "1-7" }; PsionicsList["mwa2-watery grasp"] = { name : "Watery Grasp", source : [["UA:TMC", 20]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "5 ft", duration : "Instantaneous", save : "Dex", description : "20-ft sq all save or 2d6(+1d6/extra PP) Bludg. dmg, prone, pulled 10 ft to me; save half \u0026 not prone", descriptionFull : "As an action, you unleash a wave that surges forth and then retreats to you like the rising tide. You create a wave in a 20-foot-by-20-foot square. At least some portion of the square's border must be within 5 feet of you. Any creature in that square must make a Strength saving throw. On a failed save, a target takes 2d6 bludgeoning damage, is knocked prone, and is pulled up to 10 feet closer to you. On a successful save, a target takes half as much damage. You can increase this ability's damage by 1d6 per additional psi point spent on it.", firstCol : "2-7" }; PsionicsList["mwa3-water whip"] = { name : "Water Whip", source : [["UA:TMC", 20]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60-ft line", duration : "Instantaneous", save : "Str", description : "60\xD75-ft (l\xD7w) all 3d6(+1d6/extra PP) Bludg. dmg \u0026 move to empty spot on line; save half \u0026 no move", descriptionMetric : "20\xD71,5m (l\xD7w) all 3d6(+1d6/extra PP) Bludg. dmg, move to empty spot on line; save half \u0026 no move", descriptionFull : "As an action, you unleash a jet of water in a line that is 60 feet long and 5 feet wide. Each creature in the line must make a Strength saving throw, taking 3d6 bludgeoning damage on a failed save, or half as much damage on a successful one. In addition, you can move each target that fails its saving throw to any unoccupied space touching the line. You can increase this ability's damage by 1d6 per additional psi point spent on it.", firstCol : "3-7" }; PsionicsList["mwa4-water breathing"] = { name : "Water Breathing", source : [["UA:TMC", 20]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "24 h", description : "Me and up to 10 willing creatures can breathe underwater for the duration", descriptionFull : "As an action, you grant yourself and up to ten willing creatures you can see within 60 feet of you the ability to breathe underwater for the next 24 hours.", firstCol : 5 }; PsionicsList["mwa5-water sphere"] = { name : "Water Sphere", source : [["UA:TMC", 20]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Conc, 1 min", save : "Dex", description : "1 crea save or half speed, dis. on atks, can see only 10 ft, atks vs. it also dis.; save at end of each turn", descriptionFull : "As an action, you cause a sphere of water to form around a creature. Choose one creature you can see within 60 feet of you. The target must make a Dexterity saving throw. On a failed save, it becomes trapped in the sphere of water until your concentration ends. While the target is trapped, its speed is halved, it suffers disadvantage on attack rolls, and it can't see anything more than 10 feet away from it. However, attack rolls against it also suffer disadvantage. The target can repeat the saving throw at the end of each of its turns, ending the effect on itself on a successful one.", firstCol : 6 }; PsionicsList["mwa6-animate water"] = { name : "Animate Water", source : [["UA:TMC", 20]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "120 ft", duration : "Conc, 1 h", description : "Summon a water elemental that obeys my verbal commands; See Monster Manual, page 124", descriptionFull : "As an action, you cause a water elemental to appear in an unoccupied space you can see within 120 feet of you. The elemental lasts until your concentration ends, and it obeys your verbal commands. In combat, roll for its initiative, and choose its behavior during its turns. When this effect ends, the elemental disappears. See the Monster Manual for its stat block.", firstCol : 7 }; //the mastery of weather discipline (contributed by Justin W.) PsionicsList["mastery of weather-ua-psy"] = { name : "Mastery of Weather", classes : ["mystic"], source : [["UA:TMC", 20]], psionic : true, level : 1, school : "Wu Jen", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain resistance to Lightning and Thunder damage", descriptionFull : "Your mind reaches into the sky, reshaping the stuff of storms to serve your needs." + PsychicFocus + "While focused on this discipline, you have resistance to lightning and thunder damage.", firstCol : "checkbox", dependencies : ["mw1-cloud steps", "mw2-hungry lightning", "mw3-wall of clouds", "mw4-whirlwind", "mw5-lightning leap", "mw6-wall of thunder", "mw7-thunder clap"] }; PsionicsList["mw1-cloud steps"] = { name : "Cloud Steps", source : [["UA:TMC", 20]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "Self", duration : "Conc, 10 min", description : "U summon a 10 ft by 10 ft spiral staircase, that reaches 20 ft/PP upward", descriptionFull : "As an action, you conjure forth clouds to create a solid, translucent staircase that lasts until your concentration ends. The stairs form a spiral that fills a 10-foot-by-10-foot area and reaches upward 20 feet per psi point spent.", firstCol : "1-7" }; PsionicsList["mw2-hungry lightning"] = { name : "Hungry Lightning", source : [["UA:TMC", 20]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Instantaneous", save : "Dex", description : "1 creature 1d8/PP Lightning damage; save halves; disadvantage on save if wearing heavy armor", descriptionFull : "As an action, you lash out at one creature you can see within 60 feet of you with tendrils of lightning. The target must make a Dexterity saving throw, with disadvantage if it's wearing heavy armor. The target takes 1d8 lightning damage per psi point spent on a failed save, or half as much damage on a successful one.", firstCol : "1-7" }; PsionicsList["mw3-wall of clouds"] = { name : "Wall of Clouds", source : [["UA:TMC", 20]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Conc, 10 min", description : "I create a 60-ft long, 15-ft high, 1-ft thick wall of clouds that blocks vision; it must start in range", descriptionFull : "As an action, you create a wall of clouds, at least one portion of which must be within 60 feet of you. The wall is 60 feet long, 15 feet high, and 1 foot thick. The wall lasts until your concentration ends. Creatures can pass through it without hindrance, but the wall blocks vision.", firstCol : 2 }; PsionicsList["mw4-whirlwind"] = { name : "Whirlwind", source : [["UA:TMC", 20]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Instantaneous", save : "Str", description : "20-ft rad all crea save or 1d6 Bludg. dmg & moved to chosen empty space in rad; obj moved as well", descriptionFull : "As an action, choose a point you can see within 60 feet of you. Winds howl in a 20-foot-radius sphere centered on that point. Each creature in the sphere must succeed on a Strength saving throw or take 1d6 bludgeoning damage and be moved to an unoccupied space of your choice in the sphere. Any loose object in the sphere is moved to an unoccupied space of your choice within it if the object weighs no more than 100 pounds.", firstCol : 2 }; PsionicsList["mw5-lightning leap"] = { name : "Lightning Leap", source : [["UA:TMC", 20]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60-ft line", duration : "Instantaneous", save : "Dex", description : "60-ft long 5-ft wide all 6d6(+1d6/extra PP) Lightning dmg; save halves; I teleport to spot on line", descriptionFull : "As an action, you let loose a line of lightning that is 60 feet long and 5 feet wide. Each creature in the line must make a Dexterity saving throw, taking 6d6 lightning damage on a failed save, or half as much damage on a successful one. You can then teleport to an unoccupied space touched by the line." + "\n " + "You can increase this ability's damage by 1d6 per additional psi point spent on it.", firstCol : "5-7" }; PsionicsList["mw6-wall of thunder"] = { name : "Wall of Thunder", source : [["UA:TMC", 21]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Conc, 10 min", save : "Str", description : "60\xD71\xD715 ft (l\xD7w\xD7h) wall; diff. terr.; crea start/move in save or 6d6 Thunder dmg, push 30 ft, prone", descriptionMetric : "20\xD70,3\xD75 m (l\xD7w\xD7h) wall; diff. terr.; crea start/move in save or 6d6 Thunder dmg, push 10m, prone", descriptionFull : "As an action, you create a wall of thunder, at least one portion of which must be within 60 feet of you. The wall is 60 feet long, 15 feet high, and 1 foot thick. The wall lasts until your concentration ends. Every foot moved through the wall costs 1 extra foot of movement. When a creature moves into the wall's space for the first time on a turn or starts its turn there, that creature must succeed on a Strength saving throw, or it takes 6d6 thunder damage, is pushed in a straight line up to 30 feet away from the wall, and is knocked prone.", firstCol : 6 }; PsionicsList["mw7-thunder clap"] = { name : "Thunder Clap", source : [["UA:TMC", 21]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Next turn end", save : "Con", description : "20-ft rad all save or 8d6 Thunder dmg and stunned until my next turn ends; save halves \u0026 no stun", descriptionFull : "As an action, choose a point you can see within 60 feet of you. Thunder energy erupts in a 20-foot-radius sphere centered on that point. Each creature in that area must make Constitution saving throw. On a failed save, a target takes 8d6 thunder damage, and it is stunned until the end of your next turn. On a successful save, a target takes half as much damage.", firstCol : 7 }; //the mastery of wood and earth discipline (contributed by Justin W.) PsionicsList["mastery of wood and earth-ua-psy"] = { name : "Mastery of Wood and Earth", nameShort : "Mastery of Wood \u0026 Earth", classes : ["mystic"], source : [["UA:TMC", 21]], psionic : true, level : 1, school : "Wu Jen", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain a +1 bonus to AC", descriptionFull : "You attune your mind to seize control of wood and earth." + PsychicFocus + "While focused on this discipline, you have a +1 bonus to AC.", firstCol : "checkbox", dependencies : ["mwe1-animate weapon", "mwe2-warp weapon", "mwe3-warp armor", "mwe4-wall of wood", "mwe5-armored form", "mwe6-animate earth"] }; PsionicsList["mwe1-animate weapon"] = { name : "Animate Weapon", source : [["UA:TMC", 21]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "30 ft", duration : "Instantaneous", description : "1 crea attacked by my 1-handed melee wea; use discipline score for atk/dmg; +1d10/PP Force dmg", descriptionFull : "As an action, your mind seizes control of a one-handed melee weapon you're holding. The weapon flies toward one creature you can see within 30 feet of you and makes a one-handed melee weapon attack against it, using your discipline attack modifier for the attack and damage rolls. On a hit, the weapon deals its normal damage, plus an extra 1d10 force damage per psi point spent on this ability. The weapon returns to your grasp after it attacks.", firstCol : "1-7" }; PsionicsList["mwe2-warp weapon"] = { name : "Warp Weapon", source : [["UA:TMC", 21]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Next turn end", save : "Str", description : "1 crea save or 1 chosen nonmagical wea it is holding can't be used to attack until my next turn ends", descriptionFull : "As an action, choose one nonmagical weapon held by one creature you can see within 60 feet of you. That creature must succeed on a Strength saving throw, or the chosen weapon can't be used to attack until the end of your next turn.", firstCol : 2 }; PsionicsList["mwe3-warp armor"] = { name : "Warp Armor", source : [["UA:TMC", 21]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Next turn end", save : "Con", description : "1 crea wearing a nonmagical armor save or have AC 10 + its Dex modifier until my next turn ends", descriptionFull : "As an action, choose a nonmagical suit of armor worn by one creature you can see within 60 feet of you. That creature must succeed on a Constitution saving throw, or the creature's AC becomes 10 + its Dexterity modifier until the end of your next turn.", firstCol : 3 }; PsionicsList["mwe4-wall of wood"] = { name : "Wall of Wood", source : [["UA:TMC", 21]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Conc, 1 h", description : "Create 60-ft long, 15-ft high, 1-ft thick wall of solid wood; each 5-ft section has AC 12 and 100 HP", descriptionFull : "As an action, you create a wall of wood at least one portion of which must be within 60 feet of you. The wall is 60 feet long, 15 feet high, and 1 foot thick. The wall lasts until your concentration ends. Each 5-foot wide section of the wall has AC 12 and 100 hit points. Breaking one section creates a 5-foot by 5-foot hole in it, but the wall otherwise remains intact.", firstCol : 3 }; PsionicsList["mwe5-armored form"] = { name : "Armored Form", source : [["UA:TMC", 21]], psionic : true, level : 1, school : "Wu Jen", time : "1 bns", range : "Self", duration : "Conc, 1 min", description : "I gain resistance to Bludgeoning, Piercing, and Slashing damage", descriptionFull : "As a bonus action, you gain resistance to bludgeoning, piercing, and slashing damage, which lasts until your concentration ends.", firstCol : 6 }; PsionicsList["mwe6-animate earth"] = { name : "Animate Earth", source : [["UA:TMC", 21]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "120 ft", duration : "Conc, 1 h", description : "Summon an earth elemental that obeys my verbal commands; See Monster Manual, page 124", descriptionFull : "As an action, you cause an earth elemental to appear in an unoccupied space you can see within 120 feet of you. The elemental lasts until your concentration ends, and it obeys your verbal commands. In combat, roll for its initiative, and choose its behavior during its turns. When this effect ends, the elemental disappears. See the Monster Manual for its stat block.", firstCol : 7 }; //the nomadic arrow discipline (contributed by mattohara) PsionicsList["nomadic arrow-ua-psy"] = { name : "Nomadic Arrow", classes : ["mystic"], source : [["UA:TMC", 21]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "My ranged weapon attacks ignore disadvantage, but can't get adv. if it was subject to dis.", descriptionFull : "You imbue a ranged weapon with a strange semblance of sentience, allowing it to unerringly find its mark." + PsychicFocus + "While you are focused on this discipline, any attack roll you make for a ranged weapon attack ignores disadvantage. If disadvantage would normally apply to the roll, that roll also can't benefit from advantage.", firstCol : "checkbox", dependencies : ["na1-speed dart", "na2-seeking missile", "na3-faithful archer"] }; PsionicsList["na1-speed dart"] = { name : "Speed Dart", source : [["UA:TMC", 21]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "Self", duration : "This turn end", description : "1 ranged weapon gains psionic power; next hit with it deals +1d10/PP Psychic damage", descriptionFull : "As a bonus action, you imbue one ranged weapon you hold with psionic power. The next attack you make with it that hits before the end of the current turn deals an extra 1d10 psychic damage per psi point spent.", firstCol : "1-7" }; PsionicsList["na2-seeking missile"] = { name : "Seeking Missile", source : [["UA:TMC", 21]], psionic : true, level : 1, school : "Nomad", time : "1 rea", timeFull : "1 reaction, which you take when you miss with a ranged weapon attack", range : "Self", duration : "Instantaneous", description : "When I miss with a ranged attack, I can reroll the attack roll against the same target", descriptionFull : "As a reaction when you miss with a ranged weapon attack, you can repeat the attack roll against the same target.", firstCol : 2 }; PsionicsList["na3-faithful archer"] = { name : "Faithful Archer", source : [["UA:TMC", 21]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "Self", duration : "Conc, 1 min", description : "1 ranged weapon gains sentience; free attack with it at the start of each turn; thrown weapons return", descriptionFull : "As a bonus action, you imbue a ranged weapon with a limited sentience. Until your concentration ends, you can make an extra attack with the weapon at the start of each of your turns (no action required). If it is a thrown weapon, it returns to your grasp each time you make any attack with it.", firstCol : 5 }; //the nomadic chameleon discipline (contributed by mattohara) PsionicsList["nomadic chameleon-ua-psy"] = { name : "Nomadic Chameleon", classes : ["mystic"], source : [["UA:TMC", 22]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain advantage on Dexterity (Stealth) checks", descriptionFull : "You create a screen of psychic power that distorts your appearance, allowing you to blend into the background or even turn invisible." + PsychicFocus + "While focused on this discipline, you have advantage on Dexterity (Stealth) checks.", firstCol : "checkbox", dependencies : ["nc1-chameleon", "nc2-step from sight", "nc3-enduring invisibility"] }; PsionicsList["nc1-chameleon"] = { name : "Chameleon", source : [["UA:TMC", 22]], psionic : true, level : 1, school : "Nomad", time : "1 a", range : "Self", duration : "This turn end", description : "I can hide, regardless of requirements; at end of turn, remain hidden only if requirements are met", descriptionFull : "As an action, you can attempt to hide even if you fail to meet the requirements needed to do so. At the end of the current turn, you remain hidden only if you then meet the normal requirements for hiding.", firstCol : 2 }; PsionicsList["nc2-step from sight"] = { name : "Step from Sight", source : [["UA:TMC", 22]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "60 ft", duration : "Conc, 1 min", description : "I (+1 crea/extra PP) become invisible; attacking/targeting/affecting other crea makes a crea visible", descriptionFull : "As a bonus action, cloak yourself from sight. You can target one additional creature for every additional psi point you spend on this ability. The added targets must be visible to you and within 60 feet of you." + "\n " + "Each target turns invisible and remains so until your concentration ends or until immediately after it targets, damages, or otherwise affects any creature with an attack, a spell, or another ability.", firstCol : "3-7" }; PsionicsList["nc3-enduring invisibility"] = { name : "Enduring Invisibility", source : [["UA:TMC", 22]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "Self", duration : "Conc, 1 min", description : "I turn invisible for the duration", descriptionFull : "As a bonus action, you turn invisible and remain so until your concentration ends.", firstCol : 7 }; //the nomadic mind discipline (contributed by mattohara) PsionicsList["nomadic mind-ua-psy"] = { name : "Nomadic Mind", classes : ["mystic"], source : [["UA:TMC", 22]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain proficiency with one skill, tool, or language", descriptionFull : "You dispatch part of your psyche into the noosphere, the collective vista of minds and knowledge possessed by living things." + PsychicFocus + "Whenever you focus on this discipline, you choose one skill or tool and have proficiency with it until your focus ends. Alternatively, you gain the ability to read and write one language of your choice until your focus ends.", firstCol : "checkbox", dependencies : ["nm1-wandering mind", "nm2-find creature", "nm3-item lore", "nm4-psychic speech", "nm5-wandering eye", "nm6-phasing eye"] }; PsionicsList["nm1-wandering mind"] = { name : "Wandering Mind", source : [["UA:TMC", 22]], psionic : true, level : 1, school : "Nomad", time : "10 min", range : "Self", duration : "1 h", description : "Gain prof. with 1 skill/2PP: Animal Hand., History, Medicine, Nature, Performance, Religion, Survival", descriptionFull : "You enter a deep contemplation. If you concentrate for this option's full duration, you then gain proficiency with up to three of the following skills (one skill for every 2 psi points spent): Animal Handling, Arcana, History, Medicine, Nature, Performance, Religion, and Survival. The benefit lasts for 1 hour, no concentration required.", firstCol : "2-6" }; PsionicsList["nm2-find creature"] = { name : "Find Creature", source : [["UA:TMC", 22]], psionic : true, level : 1, school : "Nomad", time : "1 h", range : "Self", duration : "Instantaneous", description : "Learn general location of a creature, within 1-3 miles; if it's on other plane, learn which plane instead", descriptionFull : "You cast your mind about for information about a specific creature. If you concentrate for this option's full duration, you then gain a general understanding of the creature's current location. You learn the region, city, town, village, or district where it is, pinpointing an area between 1 and 3 miles on a side (DM's choice). If the creature is on another plane of existence, you instead learn which plane.", firstCol : 2 }; PsionicsList["nm3-item lore"] = { name : "Item Lore", source : [["UA:TMC", 22]], psionic : true, level : 1, school : "Nomad", time : "1 h", range : "5 ft", duration : "Instantaneous", description : "1 magical item or magic-imbued crea/obj; learn properties, how to use, and spells affecting it", descriptionFull : "You carefully study an item. If you concentrate for this option's full duration while remaining within 5 feet of the item, you then gain the benefits of an identify spell cast on that item.", firstCol : 3 }; PsionicsList["nm4-psychic speech"] = { name : "Psychic Speech", source : [["UA:TMC", 22]], psionic : true, level : 1, school : "Nomad", time : "1 a", range : "Self", duration : "1 h", description : "I understand all spoken/written languages and all with a language can understand what I say", descriptionFull : "As an action, you attune your mind to the psychic imprint of all language. For 1 hour, you gain the ability to understand any language you hear or attempt to read. In addition, when you speak, all creatures that can understand a language understand what you say, regardless of what language you use.", firstCol : 5 }; PsionicsList["nm5-wandering eye"] = { name : "Wandering Eye", source : [["UA:TMC", 22]], psionic : true, level : 1, school : "Nomad", time : "1 a", range : "60 ft", duration : "Conc, 1 h", description : 'Create invisible, moving (unlimited range, 30ft/rnd) 1" magic eye with darkvision I see through', description : "Create invisible, moving (unlimited range, 10m/rnd) 2,5cm magic eye /w darkvision I see through", descriptionFull : "As an action, you create a psychic sensor within 60 feet of you. The sensor lasts until your concentration ends. The sensor is invisible and hovers in the air. You mentally receive visual information from it, which has normal vision and darkvision with a range of 60 feet. The sensor can look in all directions. As an action, you can move the sensor up to 30 feet in any direction. There is no limit to how far away from you the eye can move, but it can't enter another plane of existence. A solid barrier blocks the eye's movement, but the eye can pass through an opening as small as 1 inch in diameter.", firstCol : 6 }; PsionicsList["nm6-phasing eye"] = { name : "Phasing Eye", source : [["UA:TMC", 22]], psionic : true, level : 1, school : "Nomad", time : "1 a", range : "60 ft", duration : "Conc, 1 h", description : "As Wandering Eye above, except the eye can move through objects but can't end its movement in one", descriptionFull : "As Wandering Eye above, except the eye can move through solid objects but can't end its movement in one. If it does so, the effect immediately ends.", firstCol : 7 }; //the nomadic step discipline (contributed by Justin W.) PsionicsList["nomadic step-ua-psy"] = { name : "Nomadic Step", classes : ["mystic"], source : [["UA:TMC", 22]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "1/turn; after I teleport, increase speed by 10 ft until end of my turn", descriptionFull : "You exert your mind on the area around you, twisting the intraplanar pathways you perceive to allow instantaneous travel." + PsychicFocus + "After you teleport on your turn while focused on this discipline, your walking speed increases by 10 feet until the end of the turn, as you are propelled by the magic of your teleportation. You can receive this increase only once per turn.", firstCol : "checkbox", dependencies : ["ns1-step of a dozen paces", "ns2-nomadic anchor", "ns3-defensive step", "ns4-there and back again", "ns5-transposition", "ns6-baleful transposition", "ns7-phantom caravan", "ns8-nomad's gate"] }; PsionicsList["ns1-step of a dozen paces"] = { name : "Step of a Dozen Paces", source : [["UA:TMC", 22]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "Self", duration : "Instantaneous", description : "I teleport up to 20 ft/PP to where I can see, instead of moving this turn; only if not moved yet", descriptionFull : "If you haven't moved yet on your turn, you take a bonus action to teleport up to 20 feet per psi point spent to an unoccupied space you can see, and your speed is reduced to 0 until the end of the turn.", firstCol : "1-7" }; PsionicsList["ns2-nomadic anchor"] = { name : "Nomadic Anchor", source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Nomad", time : "1 a", range : "120 ft", duration : "8 h", description : "Create 5-ft cu teleport anchor; any teleport from this discipline can go to it if within range", descriptionFull : "As an action, you create an invisible, intangible teleportation anchor in a 5-foot cube you can see within 120 feet of you. For the next 8 hours, whenever you use this psionic discipline to teleport, you can instead teleport to the anchor, even if you can't see it, but it must be within range of the teleportation ability.", firstCol : 1 }; PsionicsList["ns3-defensive step"] = { name : "Defensive Step", source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Nomad", time : "1 rea", timeFull : "1 reaction, which you take when you are hit by an attack", range : "Self", duration : "Instantaneous", description : "When hit by an attack, I gain +4 AC, and then teleport 10 ft to a space I can see", descriptionFull : "When you are hit by an attack, you can use your reaction to gain a +4 bonus to AC against that attack, possibly turning it into a miss. You then teleport up to 10 feet to an unoccupied space you can see.", firstCol : 2 }; PsionicsList["ns4-there and back again"] = { name : "There and Back Again", source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "Self", duration : "End of Turn", description : "I teleport 20 ft and move half my speed; I may teleport back to starting spot at end of my turn", descriptionFull : "As a bonus action, you teleport up to 20 feet to an unoccupied space you can see and then move up to half your speed. At the end of your turn, you can teleport back to the spot you occupied before teleporting, unless it is now occupied or on a different plane of existence.", firstCol : 2 }; PsionicsList["ns5-transposition"] = { name : "Transposition", source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "60 ft", duration : "Instantaneous", description : "Willing creature and I teleport, swapping places, instead of moving this turn; only if not moved yet", descriptionFull : "If you haven't moved yet on your turn, choose an ally you can see within 60 feet of you. As a bonus action, you and that creature teleport, swapping places, and your speed is reduced to 0 until the end of the turn. This ability fails and is wasted if either of you can't fit in the destination space.", firstCol : 3 }; PsionicsList["ns6-baleful transposition"] = { name : "Baleful Transposition", source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Nomad", time : "1 a", range : "120 ft", duration : "Instantaneous", save : "Wis", description : "1 creature save or it and I teleport, swapping places", descriptionFull : "As an action, choose one creature you can see within 120 feet of you. That creature must make a Wisdom saving throw. On a failed save, you and that creature teleport, swapping places. This ability fails and is wasted if either of you can't fit in the destination space.", firstCol : 5 }; PsionicsList["ns7-phantom caravan"] = { name : "Phantom Caravan", source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Nomad", time : "1 a", range : "60 ft", duration : "Instantaneous", description : "Me and up to 6 willing creatures teleport up to 1 mile to a spot I can see", descriptionFull : "As an action, you and up to six willing creatures of your choice that you can see within 60 feet of you teleport up to 1 mile to a spot you can see. If there isn't an open space for all the targets to occupy at the arrival point, this ability fails and is wasted.", firstCol : 6 }; PsionicsList["ns8-nomad's gate"] = { name : "Nomad's Gate", source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Nomad", time : "1 a", range : "5 ft", duration : "Conc, 1 h", description : "Create a 5-ft cu in range, and another up to 1 mile away; anyone entering one, teleports to the other", descriptionFull : "As an action, you create a 5-foot cube of dim, gray light within 5 feet of you. You create an identical cube at any point of your choice within 1 mile that you have viewed within the past 24 hours. Until your concentration ends, anyone entering one of the cubes immediately teleports to the other one, appearing in an unoccupied space next to it. The teleportation fails if there is no space for the creature to appear in.", firstCol : 7 }; //the precognition discipline (contributed by Justin W.) PsionicsList["precognition-ua-psy"] = { name : "Precognition", classes : ["mystic"], source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Awake", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain advangage on initiative rolls", descriptionFull : "By analyzing information around you, from subtle hints to seemingly disconnected facts, you learn to weave a string of probabilities in an instant that gives you extraordinary insights." + PsychicFocus + "While focused on this discipline, you have advantage on initiative rolls.", firstCol : "checkbox", dependencies : ["p1-precognitive hunch", "p2-all-around sight", "p3-danger sense", "p4-victory before battle"] }; PsionicsList["p1-precognitive hunch"] = { name : "Precognitive Hunch", source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Awake", time : "1 bns", range : "Self", duration : "Conc, 1 min", description : "I add 1d4 to attack rolls, saving throws, and ability checks", descriptionFull : "As a bonus action, you open yourself to receive momentary insights that improve your odds of success; until your concentration ends, whenever you make an attack roll, a saving throw, or an ability check, you roll a d4 and add it to the total.", firstCol : 2 }; PsionicsList["p2-all-around sight"] = { name : "All-Around Sight", source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Awake", time : "1 rea", timeFull : "1 reaction, which you take when you are hit by an attack", range : "Self", duration : "Instantaneous", description : "After an attack hits me, impose disadvantage on that attack roll", descriptionFull : "In response to an attack hitting you, you use your reaction to impose disadvantage on that attack roll, possibly causing it to miss.", firstCol : 3 }; PsionicsList["p3-danger sense"] = { name : "Danger Sense", source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "Self", duration : "Conc, 8 h", description : "I gain +10 on the initiative roll, can't be surprised, and attacks against me can't gain advantage", descriptionFull : "As an action, you create a psychic model of reality in your mind and set it to show you a few seconds into the future. Until your concentration ends, you can't be surprised, attack rolls against you can't gain advantage, and you gain a +10 bonus to initiative.", firstCol : 5 }; PsionicsList["p4-victory before battle"] = { name : "Victory Before Battle", source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Awake", time : "", range : "60-ft rad", duration : "Instantaneous", description : "Use when rolling initiative; grant myself and up to 5 creatures +10 on the initiative roll", descriptionFull : "When you roll initiative, you can use this ability to grant yourself and up to five creatures of your choice within 60 feet of you a +10 bonus to initiative.", firstCol : 7 }; //the psionic restoration discipline (contributed by Justin W.) PsionicsList["psionic restoration-ua-psy"] = { name : "Psionic Restoration", classes : ["mystic"], source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "While focused, I can touch a creature with 0 HP as a bonus action and stabilize it", descriptionFull : "You wield psionic energy to cure wounds and restore health to yourself and others." + PsychicFocus + "While focused on this discipline, you can use a bonus action to touch a creature that has 0 hit points and stabilize it.", firstCol : "checkbox", dependencies : ["pr1-mend wounds", "pr2-restore health", "pr3-restore life", "pr4-restore vigor"] }; PsionicsList["pr1-mend wounds"] = { name : "Mend Wounds", source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Immor", time : "1 a", range : "Touch", duration : "Instantaneous", description : "1 creature is healed for 1d8/PP HP", descriptionFull : "As an action, you can spend psi points to restore hit points to one creature you touch. The creature regains 1d8 hit points per psi point spent.", firstCol : "1-7" }; PsionicsList["pr2-restore health"] = { name : "Restore Health", source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Immor", time : "1 a", range : "Touch", duration : "Instantaneous", description : "1 creature is cured of either blindness, deafness, paralysis, poison, or 1 disease", descriptionFull : "As an action, you touch one creature and remove one of the following conditions from it: blinded, deafened, paralyzed, or poisoned. Alternatively, you remove one disease from the creature.", firstCol : 3 }; PsionicsList["pr3-restore life"] = { name : "Restore Life", source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Immor", time : "1 a", range : "Touch", duration : "Instantaneous", description : "Resurrects 1 crea that has died in last minute to 1 HP, if not missing vital body parts or died of old age", descriptionFull : "As an action, you touch one creature that has died within the last minute. The creature returns to life with 1 hit point. This ability can't return to life a creature that has died of old age, nor can it restore a creature missing any vital body parts.", firstCol : 5 }; PsionicsList["pr4-restore vigor"] = { name : "Restore Vigor", source : [["UA:TMC", 24]], psionic : true, level : 1, school : "Immor", time : "1 a", range : "Touch", duration : "Instantaneous", description : "1 crea removes either 1 ability score reduction, 1 HP max reduction effect, or 1 level of exhaustion", descriptionFull : "As an action, you can touch one creature and choose one of the following: remove any reductions to one of its ability scores, remove one effect that reduces its hit point maximum, or reduce its exhaustion level by one.", firstCol : 7 }; //the psionic weapon discipline (contributed by Justin W.) PsionicsList["psionic weapon-ua-psy"] = { name : "Psionic Weapon", classes : ["mystic"], source : [["UA:TMC", 24]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "1 weapon or unarmed strike does Psychic dmg and counts as magical; no Str or Dex to dmg until CL6", descriptionFull : "You have learned how to channel psionic energy into your attacks, lending them devastating power." + PsychicFocus + "Whenever you focus on this discipline, choose one weapon you're holding or your unarmed strike. When you attack with it while focused on this discipline, its damage is psychic and magical, rather than its normal damage type. Until you reach 6th level as a mystic, you don't add your Strength or Dexterity modifier to the psychic attack's damage rolls.", firstCol : "checkbox", dependencies : ["pw1-ethereal weapon", "pw2-lethal strike", "pw3-augmented weapon"] }; PsionicsList["pw1-ethereal weapon"] = { name : "Ethereal Weapon", source : [["UA:TMC", 24]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", duration : "Next turn end", description : "1 crea save or auto hit by my next wea/unarmed atk; save halves atk dmg \u0026 negates any side-effects", descriptionFull : "As a bonus action, you temporarily transform one weapon you're holding or your unarmed strike into pure psionic energy. The next attack you make with it before the end of your turn ignores the target's armor, requiring no attack roll. Instead, the target makes a Dexterity saving throw against this discipline. On a failed save, the target takes the attack's normal damage and suffers its additional effects. On a successful save, the target takes half damage from the attack but suffers no additional effects that would normally be imposed on a hit.", firstCol : 1 }; PsionicsList["pw2-lethal strike"] = { name : "Lethal Strike", source : [["UA:TMC", 24]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", duration : "Next turn end", description : "My next weapon or unarmed attack that hits does +1d10/PP Psychic damage", descriptionFull : "As a bonus action, you imbue a weapon you're holding or your unarmed strike with psychic energy. The next time you hit with it before the end of your turn, it deals an extra 1d10 psychic damage per psi point spent.", firstCol : "1-7" }; PsionicsList["pw3-augmented weapon"] = { name : "Augmented Weapon", source : [["UA:TMC", 24]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Touch", duration : "Conc, 10 min", description : "1 weapon becomes a magic weapon with a +3 bonus to its attack and damage rolls", descriptionFull : "As a bonus action, touch one simple or martial weapon. Until your concentration ends, that weapon becomes a magic weapon with a +3 bonus to its attack and damage rolls.", firstCol : 5 }; //the psychic assault discipline PsionicsList["psychic assault-ua-psy"] = { name : "Psychic Assault", classes : ["mystic"], source : [["UA:TMC", 24]], psionic : true, level : 1, school : "Awake", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain a +2 bonus to damage rolls with psionic talents that deal Psychic damage", descriptionFull : "You wield your mind like a weapon, unleashing salvos of psionic energy." + PsychicFocus + "While focused on this discipline, you gain a +2 bonus to damage rolls with psionic talents that deal psychic damage.", firstCol : "checkbox", dependencies : ["pa1-psionic blast", "pa2-ego whip", "pa3-id insinuation", "pa4-psychic blast", "pa5-psychic crush"] }; PsionicsList["pa1-psionic blast"] = { name : "Psionic Blast", source : [["UA:TMC", 24]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Instantaneous", description : "1 creature takes 1d8/PP Psychic damage", descriptionFull : "As an action, choose one creature you can see within 60 feet of you. The target takes 1d8 psychic damage per psi point spent on this ability.", firstCol : "1-7" }; PsionicsList["pa2-ego whip"] = { name : "Ego Whip", source : [["UA:TMC", 24]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Instantaneous", save : "Int", description : "1 crea save or 3d8 Psychic dmg, next turn just Dodge/Disengage/Hide action; save half \u0026 act normal", descriptionFull : "As an action, choose one creature you can see within 60 feet of you. The target must make an Intelligence saving throw. On a failed save, the creature takes 3d8 psychic damage, and it is filled with self-doubt, leaving it able to use its action on its next turn only to take the Dodge, Disengage, or Hide action. On a successful saving throw, it takes half as much damage.", firstCol : 3 }; PsionicsList["pa3-id insinuation"] = { name : "Id Insinuation", source : [["UA:TMC", 24]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Instantaneous", save : "Int", description : "1 crea save or 5d8 Psychic dmg, next turn only Dodge/Attack action; save halves \u0026 act normal", descriptionFull : "As an action, choose one creature you can see within 60 feet of you. The target must make an Intelligence saving throw. On a failed save, the creature takes 5d8 psychic damage, and it goes into a fury, as its id runs rampant. On its next turn, it can use its action only to take the Dodge or Attack action. On a successful save, it takes half as much damage.", firstCol : 5 }; PsionicsList["pa4-psychic blast"] = { name : "Psychic Blast", source : [["UA:TMC", 24]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60-ft cone", duration : "Instantaneous", save : "Int", description : "All creatures 8d8(+2d8/extra PP) Psychic dmg; save halves", descriptionFull : "As an action, you unleash devastating psychic energy in a 60-foot cone. Each creature in that area must make an Intelligence saving throw, taking 8d8 psychic damage on a failed save, or half as much damage on a successful one. You can increase the damage by 2d8 if you spend 1 more psi point on this ability.", firstCol : "6-7" }; PsionicsList["pa5-psychic crush"] = { name : "Psychic Crush", source : [["UA:TMC", 24]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "120 ft", duration : "Instantaneous", save : "Int", description : "20-ft cu all crea save or 8d8 Psychic dmg \u0026 stunned until my next turn ends; save halves \u0026 no stun", descriptionFull : "As an action, you create a 20-foot cube of psychic energy within 120 feet of you. Each creature in that area must make an Intelligence saving throw. On a failed save, a target takes 8d8 psychic damage and is stunned until the end of your next turn. On a successful save, a target takes half as much damage.", firstCol : 7 }; //the psychic disruption discipline (contributed by Justin W.) PsionicsList["psychic disruption-ua-psy"] = { name : "Psychic Disruption", classes : ["mystic"], source : [["UA:TMC", 24]], psionic : true, level : 1, school : "Awake", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I have advantage on Charisma (Deception) checks", descriptionFull : "You create psychic static that disrupts other creatures' ability to think clearly." + PsychicFocus + "While focused on this discipline, you have advantage on Charisma (Deception) checks.", firstCol : "checkbox", dependencies : ["pd1-distracting haze", "pd2-daze", "pd3-mind storm"] }; PsionicsList["pd1-distracting haze"] = { name : "Distracting Haze", source : [["UA:TMC", 24]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Conc, 1 min", save : "Int", description : "1 crea save or 1d10/PP Psychic dmg, can't see more than 10 ft; save halves and see normal", descriptionFull : "As an action, choose one creature you can see within 60 feet of you. That creature must make an Intelligence saving throw. On a failed save, it takes 1d10 psychic damage per psi point spent and can't see anything more than 10 feet from it until your concentration ends. On a successful save, it takes half as much damage.", firstCol : "1-7" }; PsionicsList["pd2-daze"] = { name : "Daze", source : [["UA:TMC", 25]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Next turn end", save : "Int", description : "1 crea save or incapacitated until end of my next turn or it takes any damage", descriptionFull : "As an action, choose one creature you can see within 60 feet of you. That creature must make an Intelligence saving throw. On a failed save, the target is incapacitated until the end of your next turn or until it takes any damage.", firstCol : 3 }; PsionicsList["pd3-mind storm"] = { name : "Mind Storm", source : [["UA:TMC", 25]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Next turn end", save : "Wis", description : "20-ft rad all crea 6d8(+1d6/extra PP) Psychic dmg and dis. on saves; save halves and no dis. on saves", descriptionFull : "As an action, choose a point you can see within 60 feet of you. Each creature in a 20-foot-radius sphere centered on that point must make a Wisdom saving throw. On a failed save, a target takes 6d8 psychic damage and suffers disadvantage on all saving throws until the end of your next turn. On a successful save, a creature takes half as much damage. You can increase the damage by 1d6 per additional psi point spent on this ability.", firstCol : "5-7" }; //the psychic inquisition discipline (contributed by Justin W.) PsionicsList["psychic inquisition-ua-psy"] = { name : "Psychic Inquisition", classes : ["mystic"], source : [["UA:TMC", 25]], psionic : true, level : 1, school : "Awake", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I know when a creature telepathically communicating with me is lying", descriptionFull : "You reach into a creature's mind to uncover information or plant ideas within it." + PsychicFocus + "While focused on this discipline, you know when a creature communicating with you via telepathy is lying.", firstCol : "checkbox", dependencies : ["pi1-hammer of inquisition", "pi2-forceful query", "pi3-ransack mind", "pi4-phantom idea"] }; PsionicsList["pi1-hammer of inquisition"] = { name : "Hammer of Inquisition", source : [["UA:TMC", 25]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Instantaneous", save : "Int", description : "1 crea save or 1d10/PP Psychic dmg, dis. next Wis save before my next turn; save halves \u0026 no effects", descriptionFull : "As an action, choose one creature you can see within 60 feet of you. The target must make an Intelligence saving throw. On a failed save, it takes 1d10 psychic damage per psi point spent and suffers disadvantage on its next Wisdom saving throw before the end of your next turn. On a successful save, it takes half as much damage.", firstCol : "1-7" }; PsionicsList["pi2-forceful query"] = { name : "Forceful Query", source : [["UA:TMC", 25]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "30 ft", duration : "Instantaneous", save : "Int", description : "1 crea save or they must truthfully answer a yes or no question (charm effect)", descriptionFull : "As an action, you ask a question of one creature that can see and hear you within 30 feet of you. The question must be phrased so that it can be answered with a yes or no, otherwise this ability fails. The target must succeed on a Wisdom saving throw, or it replies with a truthful answer. A creature is immune to this ability if it is immune to being charmed.", firstCol : 2 }; PsionicsList["pi3-ransack mind"] = { name : "Ransack Mind", source : [["UA:TMC", 25]], psionic : true, level : 1, school : "Awake", time : "1 h", range : "30 ft", duration : "12/24/48 h", save : "Int", description : "1 crea 3 saves if in range for full duration; learn key memories from 12/24/48 h (1/2/3 failed saves)", descriptionFull : "While you concentrate on this ability, you probe one creature's mind. The creature must remain within 30 feet of you, and you must be able to see it. If you reach the ability's full duration, the target must make three Intelligence saving throws, and you learn information from it based on the number of saving throws it fails." + "\n " + "With one failed saving throw, you learn its key memories from the past 12 hours." + "\n " + "With two failed saving throws, you learn its key memories from the past 24 hours." + "\n " + "With three failed saving throws, you learn its key memories from the past 48 hours.", firstCol : 5 }; PsionicsList["pi4-phantom idea"] = { name : "Phantom Idea", source : [["UA:TMC", 25]], psionic : true, level : 1, school : "Awake", time : "1 h", range : "30 ft", duration : "4/24/48 h", save : "Int", description : "1 crea 3 saves if in range for full duration; implant memory lasting 4/24/48 h (1/2/3 failed saves)", descriptionFull : "While you concentrate on this ability, you probe one creature's mind. The creature must remain within 30 feet of you, and you must be able to see it. If you reach the ability's full duration, the target must make three Intelligence saving throws, and you plant a memory or an idea in it, which lasts for a number of hours based on the number of saving throws it fails. You choose whether the idea or memory is trivial (such as “I had porridge for breakfast” or “Ale is the worst”) or personality-defining (“I failed to save my village from orc marauders and am therefore a coward” or “Magic is a scourge, so I renounce it”)." + "\n " + "With one failed saving throw, the idea or memory lasts for the next 4 hours. With two failed saving throws, it lasts for 24 hours. With three failed saving throws, it lasts for 48 hours.", firstCol : 6 }; //the psychic phantoms discipline (contributed by Justin W.) PsionicsList["psychic phantoms-ua-psy"] = { name : "Psychic Phantoms", classes : ["mystic"], source : [["UA:TMC", 25]], psionic : true, level : 1, school : "Awake", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain advantage on Charisma (Deception) checks", descriptionFull : "Your power reaches into a creature's mind and causes it false perceptions." + PsychicFocus + "While focused on this discipline, you have advantage on Charisma (Deception) checks.", firstCol : "checkbox", dependencies : ["pp1-distracting figment", "pp2-phantom foe", "pp3-phantom betrayal", "pp4-phantom riches"] }; PsionicsList["pp1-distracting figment"] = { name : "Distracting Figment", source : [["UA:TMC", 25]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Next turn end", save : "Int", description : "1 crea save or 1d10/PP Psychic dmg, can't use rea, melee atks vs. it have adv.; save halves \u0026 no effects", descriptionFull : "As an action, choose one creature you can see within 60 feet of you. The target must make an Intelligence saving throw. On a failed save, it takes 1d10 psychic damage per psi point spent and thinks it perceives a threatening creature just out of its sight; until the end of your next turn, it can't use reactions, and melee attack rolls against it have advantage. On a successful save, it takes half as much damage.", firstCol : "1-7" }; PsionicsList["pp2-phantom foe"] = { name : "Phantom Foe", source : [["UA:TMC", 25]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Conc, 1 min", save : "Int", description : "1 crea save or no rea and 1d8(+1d8/extra PP) Psychic dmg at start its turn; save at end of each turn", descriptionFull : "As an action, choose one creature you can see within 60 feet of you. The target must make an Intelligence saving throw. On a failed save, it perceives a horrid creature adjacent to it until your concentration ends. During this time, the target can't take reactions, and it takes 1d8 psychic damage at the start of each of its turns. The target can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success. You can increase the damage by 1d8 for each additional psi point spent on the ability.", firstCol : "3-7" }; PsionicsList["pp3-phantom betrayal"] = { name : "Phantom Betrayal", source : [["UA:TMC", 26]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Conc, 1 min", save : "Int", description : "1 crea save or targets its allies with attacks/damaging effects; save at end of each turn (charm effect)", descriptionFull : "As an action, you plant delusional paranoia in a creature's mind. Choose one creature you can see within 60 feet of you. The target must succeed on an Intelligence saving throw, or until your concentration ends, it must target its allies with attacks and other damaging effects. The target can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success. A creature is immune to this ability if it is immune to being charmed.", firstCol : 5 }; PsionicsList["pp4-phantom riches"] = { name : "Phantom Riches", source : [["UA:TMC", 26]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Conc, 1 min", save : "Int", description : "1 crea save or I move it and it can't act if not taking dmg since last turn; save at end of each turn", descriptionFull : "As an action, you plant the phantom of a greatly desired object in a creature's mind. Choose one creature you can see within 60 feet of you. The target must make an Intelligence saving throw. On a failed save, you gain partial control over the target's behavior until your concentration ends; the target moves as you wish on each of its turns, as it thinks it pursues the phantom object it desires. If it hasn't taken damage since its last turn, it can use its action only to admire the object you created in its perception. The target can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success.", firstCol : 7 }; //the telepathic contact discipline (contributed by Justin W.) PsionicsList["telepathic contact-ua-psy"] = { name : "Telepathic Contact", classes : ["mystic"], source : [["UA:TMC", 26]], psionic : true, level : 1, school : "Awake", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "Use telepathy class feature with up to 6 crea; If no telepathy feature, gain telepathy 120 ft instead", descriptionFull : "By channeling psionic power, you gain the ability to control other creatures by substituting your will for their own." + PsychicFocus + "While focused on this discipline, you gain the ability to use your Telepathy class feature with up to six creatures at once. If you don't have that feature from the mystic class, you instead gain it while focused on this discipline.", firstCol : "checkbox", dependencies : ["tc1-exacting query", "tc2-occluded mind", "tc3-broken will", "tc4-psychic grip", "tc5-psychic domination"] }; PsionicsList["tc1-exacting query"] = { name : "Exacting Query", source : [["UA:TMC", 26]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "120 ft", duration : "Instantaneous", save : "Int", description : "1 crea save or answer 1 telepathically asked question; on save, target is immune until my long rest", descriptionFull : "As an action, you target one creature you can communicate with via telepathy. The target must make an Intelligence saving throw. On a failed save, the target truthfully answers one question you ask it via telepathy. On a successful save, the target is unaffected, and you can't use this ability on it again until you finish a long rest. A creature is immune to this ability if it is immune to being charmed.", firstCol : 2 }; PsionicsList["tc2-occluded mind"] = { name : "Occluded Mind", source : [["UA:TMC", 26]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "120 ft", duration : "5 min", save : "Int", description : "1 crea save or believes telepathic statement; on save, target immune until my long rest (charm effect)", descriptionFull : "As an action, you target one creature you can communicate with via telepathy. The target must make an Intelligence saving throw. On a failed save, the target believes one statement of your choice for the next 5 minutes that you communicate to it via telepathy. The statement can be up to ten words long, and it must describe you or a creature or an object the target can see. On a successful save, the target is unaffected, and you can't use this ability on it again until you finish a long rest. A creature is immune to this ability if it is immune to being charmed.", firstCol : 2 }; PsionicsList["tc3-broken will"] = { name : "Broken Will", source : [["UA:TMC", 26]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "120 ft", duration : "1 rnd", save : "Int", description : "1 crea save or I control it on its next turn; on save, target immune until my long rest (charm effect)", descriptionFull : "As an action, you target one creature you can communicate with via telepathy. The target must make an Intelligence saving throw. On a failed save, you choose the target's movement and action on its next turn. On a successful save, the target is unaffected, and you can't use this ability on it again until you finish a long rest. A creature is immune to this ability if it is immune to being charmed.", firstCol : 5 }; PsionicsList["tc4-psychic grip"] = { name : "Psychic Grip", source : [["UA:TMC", 26]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Conc, 1 min", save : "Int", description : "1 crea save or paralyzed; save at end of each turn, on failure I use rea to have it move half its speed", descriptionFull : "As an action, you target one creature you can see within 60 feet of you. The target must succeed on an Intelligence saving throw, or it is paralyzed until your concentration ends. At the end of each of its turns, it can repeat the saving throw. On a success, this effect ends. On a failure, you can use your reaction to force the target to move up to half its speed, even though it's paralyzed.", firstCol : 6 }; PsionicsList["tc5-psychic domination"] = { name : "Psychic Domination", source : [["UA:TMC", 26]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Conc, 1 min", save : "Int", description : "1 crea save or I direct its actions and move on its turns; save at end of each turn (charm effect)", descriptionFull : "As an action, you target one creature you can see within 60 feet of you. The target must succeed on an Intelligence saving throw, or you choose the creature's actions and movement on its turns until your concentration ends. At the end of each of its turns, it can repeat the saving throw, ending the effect on itself on a success. A creature is immune to this ability if it is immune to being charmed.", firstCol : 7 }; //the third eye discipline (contributed by Justin W.) PsionicsList["third eye-ua-psy"] = { name : "Third Eye", classes : ["mystic"], source : [["UA:TMC", 26]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain darkvision 60 ft; if already darkvision of 60 ft or more, increase range by 10 ft instead", descriptionFull : "You create a third, psychic eye in your mind which you cast out into the world. It channels thoughts and knowledge back to you, greatly enhancing your senses." + PsychicFocus + "While focused on this discipline, you have darkvision with a range of 60 feet. If you already have darkvision with that range or greater, increase its range by 10 feet.", firstCol : "checkbox", dependencies : ["te1-tremorsense", "te2-unwavering eye", "te3-piercing sight", "te4-truesight"] }; PsionicsList["te1-tremorsense"] = { name : "Tremorsense", source : [["UA:TMC", 26]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "Self", duration : "Conc, 1 min", description : "I gain tremorsense with a radius of 30 ft", descriptionFull : "As a bonus action, you gain tremorsense with a radius of 30 feet, which lasts until your concentration ends.", firstCol : 2 }; PsionicsList["te2-unwavering eye"] = { name : "Unwavering Eye", source : [["UA:TMC", 26]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "Self", duration : "1 min", description : "I gain advantage on Wisdom checks", descriptionFull : "As a bonus action, you gain advantage on Wisdom checks for 1 minute", firstCol : 2 }; PsionicsList["te3-piercing sight"] = { name : "Piercing Sight", source : [["UA:TMC", 27]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "Self", duration : "Conc, 1 min", description : "I see through objects that are up to 1 ft thick within 30 ft", descriptionFull : "As a bonus action, you gain the ability to see through objects that are up to 1 foot thick within 30 feet of you. This sight lasts until your concentration ends.", firstCol : 3 }; PsionicsList["te4-truesight"] = { name : "Truesight", source : [["UA:TMC", 27]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "Self", duration : "Conc, 1 min", description : "I gain truesight with a radius of 30 ft", descriptionFull : "As a bonus action, you gain truesight with a radius of 30 feet, which lasts until your concentration ends.", firstCol : 5 }; // Psionic Discipline 'Mastery of Force' power 'Inertial Armour' ArmourList["inertial armor-ua-psy"] = { regExpSearch : /^(?=.*(inertial|psychic|psionic))(?=.*armou?r).*$/i, name : "Inertial armor", source : [["UA:TMC", 18]], ac : 14, list : "magic" }; // Psionic Talents that work like damage cantrips WeaponsList["energy beam-ua-psy"] = { regExpSearch : /^(?=.*\benergy\b)(?=.*\bbeam\b).*$/i, name : "Energy Beam", source : [["UA:TMC", 27]], list : "psionic", ability : 4, type : "Cantrip", damage : ["C", 8, "My choice"], range : "90 ft", description : "Dex save, success - no damage; Acid, cold, fire, lightning, or thunder damage [my choice]", abilitytodamage : false, dc : true }; WeaponsList["mind slam-ua-psy"] = { regExpSearch : /^(?=.*\bmind\b)(?=.*\bslam\b).*$/i, name : "Mind Slam", source : [["UA:TMC", 28]], list : "psionic", ability : 4, type : "Cantrip", damage : ["C", 6, "force"], range : "60 ft", description : "Con save, success - no damage, fail - Large or smaller target also knocked prone", abilitytodamage : false, dc : true }; WeaponsList["mind thrust-ua-psy"] = { regExpSearch : /^(?=.*\bmind\b)(?=.*\bthrust\b).*$/i, name : "Mind Thrust", source : [["UA:TMC", 28]], list : "psionic", ability : 4, type : "Cantrip", damage : ["C", 10, "psychic"], range : "120 ft", description : "Int save, success - no damage", abilitytodamage : false, dc : true }; WeaponsList["psychic hammer-ua-psy"] = { regExpSearch : /^(?=.*\bpsychic\b)(?=.*\bhammer\b).*$/i, name : "Psychic Hammer", source : [["UA:TMC", 28]], list : "psionic", ability : 4, type : "Cantrip", damage : ["C", 6, "force"], range : "120 ft", description : "Str save, success - no damage, fail - also move 10 ft in chosen direction", abilitytodamage : false, dc : true }; // ua_20170320_Wizard-Revisited.js // This file adds the content from the Unearthed Arcana: Wizard Revisited article to MPMB's Character Record Sheet // Define the source SourceList["UA:WR"] = { name : "Unearthed Arcana: Wizard Revisited", abbreviation : "UA:WR", group : "Unearthed Arcana", url : "https://media.wizards.com/2017/dnd/downloads/MJ320UAWizardVF2017.pdf", date : "2017/03/20" }; // Adds 1 new subclass for the Wizard (with contributions by erickrause) AddSubClass("wizard", "war magic-ua", { regExpSearch : /^(?=.*war)(?=.*(magic|mage)).*$/i, subname : "War Magic", source : [["UA:WR", 2]], fullname : "War Mage", features : { "subclassfeature2" : { //has to be identical to a feature named in the ClassList name : "Arcane Deflection", source : [["UA:WR", 2]], minlevel : 2, description : desc([ "As a reaction when I'm hit by an attack, I can gain +2 to my AC against that attack", "As a reaction when I fail a Con save, I can gain +4 bonus to that saving throw", "After I do either, I can't cast spells other than cantrips until the end of my next turn" ]), action : [["reaction", ""]] }, "subclassfeature2.1" : { name : "Tactical Wit", source : [["UA:WR", 2]], minlevel : 2, description : desc([ "I gain a bonus to my initiative rolls equal to my Intelligence modifier" ]), addMod : { type : "skill", field : "Init", mod : "max(Int|0)", text : "I can add my Intelligence modifier to initiative rolls." } }, "subclassfeature6" : { name : "Power Surge", source : [["UA:WR", 2]], minlevel : 6, description : desc([ "When multiple targets have to save vs. one of my spells, I can have it do more damage", "On the turn I cast the spell, I can roll 2 additional damage dice for it" ]), usages : 1, recovery : "short rest" }, "subclassfeature10" : { name : "Durable Magic", source : [["UA:WR", 2]], minlevel : 10, description : desc([ "While I'm maintaining concentration on a spell, I gain +2 to AC and all saving throws" ]) }, "subclassfeature14" : { name : "Deflecting Shroud", source : [["UA:WR", 2]], minlevel : 14, description : desc([ "When I use my Arcane Deflection feature, magical energy arcs from me", "Any creatures of my choice within 10 ft of me take half my level in force damage" ]), additional : levels.map( function(n) { return n < 14 ? "" : Math.floor(n/2) + " force damage"; }) } } }); // ua_20170327_A Trio-of-Subclasses.js // This file adds the content from the Unearthed Arcana: A Trio of Subclasses article to MPMB's Character Record Sheet // Define the source SourceList["UA:AToS"] = { name : "Unearthed Arcana: A Trio of Subclasses", abbreviation : "UA:AToS", group : "Unearthed Arcana", url : "https://media.wizards.com/2017/dnd/downloads/UAThreeSubclasses.pdf", date : "2017/03/27" }; // Adds three subclass: 1 for the Monk, 1 for the Paladin, and 1 for the Ranger AddSubClass("monk", "way of the drunken master-ua", { regExpSearch : /^((?=.*drunken)(?=.*master))|((?=.*drunk)((?=.*(monk|monastic))|((?=.*martial)(?=.*(artist|arts)))|((?=.*spiritual)(?=.*warrior)))).*$/i, subname : "Way of the Drunken Master", subnameShort: "Drunken Master", fullname : "Drunken Master", source : [["UA:AToS", 1]], features : { "subclassfeature3" : { name : "Drunken Technique", source : [["UA:AToS", 1]], minlevel : 3, description : desc([ "I gain proficiency with the Performance skill", "When using Flurry of Blows, I gain the benefits of a Disengage and +10 ft speed this turn" ]), skills : ["Performance"] }, "subclassfeature6" : { name : "Tipsy Sway", source : [["UA:AToS", 1]], minlevel : 6, description: desc("As a reaction when missed in melee, attacker instead hits another I can see within 5 ft"), usages : 1, recovery : "short rest", action : [["reaction", ""]] }, "subclassfeature11" : { name : "Drunkard's Luck", source : [["UA:AToS", 1]], minlevel : 11, description: desc("Before I roll for a save, I can spend 1 ki to give myself advantage on it"), additional : "1 ki point" }, "subclassfeature17" : { name : "Intoxicated Frenzy", source : [["UA:AToS", 1]], minlevel : 17, description: desc("I can make 3 extra attacks with Flurry of Blows if each is used on a different target") } } }); AddSubClass("paladin", "oath of redemption-ua", { regExpSearch : /^((?=.*redeemer)|((?=.*redemption)(((?=.*paladin)|((?=.*(exalted|sacred|holy|divine))(?=.*(knight|fighter|warrior|warlord|trooper))))))).*$/i, subname : "Oath of Redemption", subnameShort: "Redemption", source : [["UA:AToS", 1]], features : { "subclassfeature3" : { name : "Armor of Peace", source : [["UA:AToS", 2]], minlevel : 3, description: desc("When not wearing armor or wielding a shield, my AC is 16 + my Dexterity modifier"), armorOptions : [{ regExpSearch : /^(?=.*armou?r)(?=.*peace).*$/i, name : "Armor of Peace", source : [["UA:AToS", 2]], ac : 16, selectNow : true }], spellcastingExtra : ["shield", "sleep", "hold person", "ray of enfeeblement", "counterspell", "hypnotic pattern", "otiluke's resilient sphere", "stoneskin", "hold monster", "wall of force"] }, "subclassfeature3.1" : { name : "Channel Divinity: Emissary of Peace", source : [["UA:AToS", 2]], minlevel : 3, description: desc("As a bonus action, I gain +5 to my next Charisma (Persuasion) check in the next min"), action : [["bonus action", ""]] }, "subclassfeature3.2" : { name : "Channel Divinity: Rebuke the Violent", source : [["UA:AToS", 2]], minlevel : 3, description : desc([ "As a reaction when a hostile within 10 ft damages another in melee, I can rebuke it", "It takes the same damage as it dealt but as radiant damage, with a Wis save to halve it" ]), action : [["reaction", ""]] }, "subclassfeature3.3" : { name : "Warrior of Reconciliation", source : [["UA:AToS", 2]], minlevel : 3, description : desc([ "I can charm a creature when I reduce it to 0 HP with a simple, bludgeoning weapon", "It is peaceful, docile and only does what I command it to, but it can't cause harm", "For 1 min, until I'm incap., or I or allies attack it or have it save; after it is unconscious" ]) }, "subclassfeature7" : { name : "Aura of the Guardian", source : [["UA:AToS", 2]], minlevel : 7, description : desc([ "As a reaction when an ally within 10 ft takes damage, I instead take the damage", "This damage can't be reduced in any way; Other effects might still apply to my ally" ]), action : [["reaction", ""]] }, "subclassfeature15" : { name : "Protective Spirit", source : [["UA:AToS", 2]], minlevel : 15, description: desc("At the end of my turn when I'm below half HP and not incapacitated, I regain HP"), additional : levels.map(function (n) { return n < 15 ? "" : "1d6+" + Math.floor(n/2) + " HP"; }) }, "subclassfeature20" : { name : "Emissary of Redemption", source : [["UA:AToS", 3]], minlevel : 20, description : desc([ "When taking damage from a creature, I take only half and it takes the other half", "This stops working on any that I attack or force to make a save, until I have a long rest" ]), dmgres : ["All from creatures"] } } }); // Add the Monster Slayer subclass to both the normal and Revised Ranger (if it is defined) var UAAToS_rangerSubclassMonsterSlayerUA = AddSubClass("ranger", "monster slayer-ua", { regExpSearch : /^(?=.*monster)(?=.*slayer).*$/i, subname : "Monster Slayer", source : [["UA:AToS", 3]], fullname : "Monster Slayer", features : { "subclassfeature3" : { name : "Slayer's Mysticism", source : [["UA:AToS", 3]], minlevel : 3, description: desc("I get bonus spells known, which do not count against the number of spells I can know"), spellcastingExtra : ["protection from evil and good", "zone of truth", "magic circle", "banishment", "planar binding"], spellcastingExtraApplyNonconform : true }, "subclassfeature3.1" : { name : "Slayer's Eye", source : [["UA:AToS", 3]], minlevel : 3, description : desc([ "As a bonus action, I can study a creature within 120 ft that I can see", "I learn its vulnerabilities, immunities, resistances, and the effects damaging it can have", "My first weapon hit on it each turn does +1d6 damage, until I study another or rest" ]), action : [["bonus action", ""]] }, "subclassfeature7" : { name : "Supernatural Defense", source : [["UA:AToS", 3]], minlevel : 7, description : desc([ "I add 1d6 to saves I make against abilities of the current target of my Slayer's Eye" ]) }, "subclassfeature11" : { name : "Relentless Slayer", source : [["UA:AToS", 3]], minlevel : 11, description : desc([ "As a reaction, I can stop the target of my Slayer's Eye from escaping, if within 30 ft", "If I win a contested Wis check, it wastes it action to teleport/transform/plane shift" ]), action : [["reaction", ""]] }, "subclassfeature15" : { name : "Slayer's Counter", source : [["UA:AToS", 3]], minlevel : 15, description : desc([ "As a reaction when the target of my Slayer's Eye has me make a save, I can attack it", "I can make one weapon attack; If this hits, I automatically succeed on the saving throw" ]), action : [["reaction", ""]] } } }); if (ClassList.rangerua) { ClassList.rangerua.subclasses[1].push(UAAToS_rangerSubclassMonsterSlayerUA); }; // ua_20170403_Starter-Spells.js // This file adds the content from the Unearthed Arcana: Starter Spells article to MPMB's Character Record Sheet // Define the source SourceList["UA:SS"] = { name : "Unearthed Arcana: Starter Spells", abbreviation : "UA:SS", group : "Unearthed Arcana", url : "https://media.wizards.com/2017/dnd/downloads/UA-Starter-Spells.pdf", date : "2017/04/03" }; /* Adds 17 spells of lower levels to all class' spell lists This code was contributed by SoilentBrad */ SpellsList["cause fear-uass"] = { name : "Cause Fear", classes : ["warlock", "wizard"], source : [["UA:SS", 2]], level : 1, school : "Necro", time : "1 a", range : "60 ft", components : "V,S", duration : "Conc, 1 min", save : "Wis", description : "1 crea save or frightened; crea disadvantage on save if 25 HP or less; no effect on undead/constructs", descriptionFull : "You awaken the sense of mortality in one creature you can see within range. The target must succeed on a Wisdom saving throw or become frightened for the duration. A target with 25 hit points or fewer makes the saving throw with disadvantage. The spell has no effect on constructs or undead." }; SpellsList["ceremony-uass"] = { name : "Ceremony", classes : ["cleric", "paladin"], source : [["UA:SS", 2]], ritual : true, level : 1, school : "Evoc", time : "1 h", range : "Touch", components : "V,S,M\u0192", compMaterial : "25 gp worth of powdered silver", duration : "Instantaneous", description : "Perform religious ceremony on target(s) that are within 10 ft throughout the casting; see book (25gp)", descriptionFull : "You perform one of several religious ceremonies. When you cast the spell, choose one of the following ceremonies, the target of which must be within 10 feet of you throughout the casting." + "\n " + toUni("Atonement") + ": You touch one willing creature whose alignment has changed, and you make a DC 20 Wisdom (Insight) check. On a success, you restore the target to its original alignment." + "\n " + toUni("Bless Water") + ": You touch one vial of water and cause it to become holy water." + "\n " + toUni("Coming of Age") + ": You touch one humanoid old enough to be a young adult. For the next 24 hours, whenever the target makes an ability check, it can roll a d4 and add the number rolled to the ability check. A creature can benefit from this ceremony just once." + "\n " + toUni("Dedication") + ": You touch one humanoid who would willingly convert to your religion or who wishes to be dedicated to your god's service. For the next 24 hours, whenever the target makes a saving throw, it can roll a d4 and add the number rolled to the save. A creature can benefit from this ceremony just once." + "\n " + toUni("Funeral Rite") + ": You bless one corpse within 5 feet of you. For the next 24 hours, the target can't become undead by any means short of a wish spell." + "\n " + toUni("Investiture") + ": You touch one willing humanoid. Choose one 1st-level spell you have prepared and expend a spell slot and any material components as if you were casting that spell. The spell has no effect. Instead, the target can cast this spell once without having to expend a spell slot or use material components. If the target doesn't cast the spell within 1 hour, the invested spell is lost." + "\n " + toUni("Marriage") + ": You touch adult humanoids willing to be bonded together in marriage. For the next 24 hours, each target gains a +2 bonus to AC and saving throws while they are within 30 feet of each other. A creature can benefit from this ceremony just once." }; SpellsList["chaos bolt-uass"] = { name : "Chaos Bolt", classes : ["sorcerer"], source : [["UA:SS", 2]], level : 1, school : "Evoc", time : "1 a", range : "120 ft", components : "V,S", duration : "Instantaneous", description : "Spell atk 2d8+1d6/SL dmg, d8s set dmg type, see B; double on d8s: new atk vs. crea in 30 ft of target", descriptionFull : "You hurl an undulating, warbling mass of chaotic energy at one creature in range. Make a ranged spell attack against the target. On a hit, the target takes 2d8 damage. Choose one of the d8s. The number it rolled determines the type of damage, as shown below." + "\n\n" + toUni("d8") + "\t" + toUni("Damage Type") + "\n 1\tAcid" + "\n 2\tCold" + "\n 3\tFire" + "\n 4\tForce" + "\n 5\tLightning" + "\n 6\tPoison" + "\n 7\tPsychic" + "\n 8\tThunder" + "\n\n " + "If you roll the same number on both d8s, the chaotic energy leaps from the target to a different creature of your choice within 30 feet of it. Make a new attack roll against the new target, and make a new damage roll, which could cause the chaotic energy to leap again." + "\n " + "A creature can be targeted only once by this mass of chaotic energy." + AtHigherLevels + "When you cast this spell using a spell slot of 2nd level or higher, each target takes extra damage of the type rolled. The extra damage equals 1d6 for each slot level above 1st." }; SpellsList["guiding hand-uass"] = { name : "Guiding Hand", classes : ["bard", "cleric", "druid", "wizard"], source : [["UA:SS", 3]], ritual : true, level : 1, school : "Div", time : "1 min", range : "5 ft", components : "V,S", duration : "Conc, 8 h", description : "Tiny incorporeal hand directs me to one major landmark I name that is on the same plane", descriptionFull : "You create a Tiny incorporeal hand of shimmering light in an unoccupied space you can see within range. The hand exists for the duration, but it disappears if you teleport or you travel to a different plane of existence." + "\n " + "When the hand appears, you name one major landmark, such as a city, mountain, castle, or battlefield on the same plane of existence as you. Someone in history must have visited the site and mapped it. If the landmark appears on no map in existence, the spell fails. Otherwise, whenever you move toward the hand, it moves away from you at the same speed you moved, and it moves in the direction of the landmark, always remaining 5 feet away from you." + "\n " + "If you don't move toward the hand, it remains in place until you do and beckons for you to follow once every 1d4 minutes." }; SpellsList["hand of radiance-uass"] = { name : "Hand of Radiance", classes : ["cleric"], source : [["UA:SS", 3]], level : 0, school : "Evoc", time : "1 a", range : "5-ft rad", components : "V,S", duration : "Instantaneous", save : "Con", description : "Any creatures I can see in 5-ft radius save or 1d6 Radiant damage; +1d6 damage at CL 5, 11, and 17", descriptionCantripDie : "Any creatures I can see in 5-ft radius save or `CD`d6 Radiant damage", descriptionFull : "You raise your hand, and burning radiance erupts from it. Each creature of your choice that you can see within 5 feet of you must succeed on a Constitution saving throw or take 1d6 radiant damage." + "\n " + "The spell's damage increases by 1d6 when you reach 5th level (2d6), 11th level (3d6), and 17th level (4d6)." }; SpellsList["healing elixir-uass"] = { name : "Healing Elixir", classes : ["warlock", "wizard"], source : [["UA:SS", 3]], level : 1, school : "Conj", time : "1 min", range : "Self", components : "V,S,M\u0192", compMaterial : "Alchemist's supplies", duration : "24 h", description : "Make vial with alchemist's supplies; heals 2d4+2 HP as an action; if not used, disappears after 24 h", descriptionShorter : "Make vial with alchemist's supplies; 1 a to heal 2d4+2 HP; if not used, disappears after 24 h", descriptionFull : "You create a healing elixir in a simple vial that appears in your hand. The elixir retains its potency for the duration or until it's consumed, at which point the vial vanishes." + "\n " + "As an action, a creature can drink the elixir or administer it to another creature. The drinker regains 2d4 + 2 hit points." }; SpellsList["infestation-uass"] = { name : "Infestation", classes : ["druid", "sorcerer", "warlock", "wizard"], source : [["UA:SS", 3]], level : 0, school : "Conj", time : "1 a", range : "30 ft", components : "V,S,M", compMaterial : "A living flea", duration : "Instantaneous", save : "Con", description : "1 crea save or 1d6 Piercing damage and moved 5 ft in random direction; +1d6 at CL 5, 11, and 17", descriptionCantripDie : "1 crea save or `CD`d6 Piercing damage and moved 5 ft in random direction", descriptionFull : "You cause mites, fleas, and other parasites to appear momentarily on one creature you can see within range. The target must succeed on a Constitution saving throw or take 1d6 piercing damage. If the target takes any of that damage, the target moves 5 feet in a random direction. Roll a d8 for the direction:" + "\n\n" + toUni("d8") + "\t" + toUni("Direction") + "\n 1\tNorth" + "\n 2\tNortheast" + "\n 3\tEast" + "\n 4\tSoutheast" + "\n 5\tSouth" + "\n 6\tSouthwest" + "\n 7\tWest" + "\n 8\tNorthwest" + "\n\n " + "The spell's damage increases by 1d6 when you reach 5th level (2d6), 11th level (3d6), and 17th level (4d6)." }; SpellsList["primal savagery-uass"] = { name : "Primal Savagery", classes : ["druid"], source : [["UA:SS", 3]], level : 0, school : "Trans", time : "1 a", range : "5 ft", components : "S", duration : "Instantaneous", description : "Melee spell attack deals 1d10 Piercing or Slashing dmg (my choice); +1d10 at CL 5, 11, and 17", description : "Melee spell attack deals `CD`d10 Piercing or Slashing dmg (my choice)", descriptionFull : "Your teeth or fingernails lengthen and sharpen. You choose which. Make a melee spell attack against one creature within 5 feet of you. On a hit, the target takes 1d10 piercing or slashing damage (your choice). After you make the attack, your teeth or fingernails return to normal." + "\n " + "The spell's damage increases by 1d10 when you reach 5th level (2d10), 11th level (3d10), and 17th level (4d10)." }; SpellsList["puppet-uass"] = { name : "Puppet", classes : ["bard", "warlock", "wizard"], source : [["UA:SS", 3]], level : 1, school : "Ench", time : "1 a", range : "120 ft", components : "S", duration : "Instantaneous", save : "Con", description : "1 humanoid save or move its speed to where I choose and drop held items, if chosen (charm effect)", descriptionFull : "Your gesture forces one humanoid you can see within range to make a Constitution saving throw. On a failed save, the target must move up to its speed in a direction you choose. In addition, you can cause the target to drop whatever it is holding. This spell has no effect on a humanoid that is immune to being charmed." }; SpellsList["sense emotion-uass"] = { name : "Sense Emotion", classes : ["bard", "warlock", "wizard"], source : [["UA:SS", 4]], level : 1, school : "Div", time : "1 a", range : "30 ft", components : "V,S", duration : "Conc, 10 min", description : "Now and as 1 a for duration, sense emotion of humanoid in range; sense calm if not humanoid/charm", descriptionFull : "You attune your senses to pick up the emotions of others for the duration. When you cast the spell, and as your action on each turn until the spell ends, you can focus your senses on one humanoid you can see within 30 feet of you. You instantly learn the target's prevailing emotion, whether it's love, anger, pain, fear, calm, or something else. If the target isn't actually humanoid or it is immune to being charmed, you sense that it is calm." }; SpellsList["snare-uass"] = { name : "Snare", classes : ["druid", "ranger", "wizard"], source : [["UA:SS", 4]], level : 1, school : "Abjur", time : "1 min", range : "Touch", components : "V,S,M\u2020", compMaterial : "30 feet of cord or rope, which is consumed by the spell", duration : "Dispel/trigger", save : "Dex", description : "5-ft rad magical trap; Int (Inv) to see; save or restrained upside down 3 ft in the air; save/rnd at dis", descriptionFull : "While you cast this spell, you use the cord or rope to create a circle with a 5-foot radius on a flat surface within your reach. When you finish casting, the cord or rope disappears to become a magical trap." + "\n " + "The trap is nearly invisible and requires a successful Intelligence (Investigation) check against your spell save DC to be found." + "\n " + "The trap triggers when a Small creature or larger moves into the area protected by the spell. The triggering creature must succeed on a Dexterity saving throw or fall prone and be hoisted into the air until it hangs upside down 3 feet above the protected surface, where it is restrained." + "\n " + "The restrained creature can make a Dexterity saving throw with disadvantage at the end of each of its turns and ends the restrained effect on a success. Alternatively, another creature that can reach the restrained creature can use an action to make an Intelligence (Arcana) check against your spell save DC. On a success, the restrained effect also ends." }; SpellsList["sudden awakening-uass"] = { name : "Sudden Awakening", classes : ["bard", "ranger", "sorcerer", "wizard"], source : [["UA:SS", 4]], level : 1, school : "Ench", time : "1 bns", range : "10 ft", components : "V", duration : "Instantaneous", description : "Any creatures within range awaken and can then stand up from prone without expending movement", descriptionFull : "Each sleeping creature you choose within range awakens, and then each prone creature within range can stand up without expending any movement." }; SpellsList["unearthly chorus-uass"] = { name : "Unearthly Chorus", classes : ["bard"], source : [["UA:SS", 4]], level : 1, school : "Illus", time : "1 a", range : "30-ft rad", components : "V", duration : "Conc, 10 min", save : "Cha", description : "Use bns a to make 1 crea in range save or be friendly for 1 h; I adv on Cha (Performance) checks", descriptionFull : "Music of a style you choose fills the air around you in a 30-foot radius. The music spreads around corners and can be heard from up to 100 feet away. The music moves with you, centered on you for the duration." + "\n " + "Until the spell ends, you make Charisma (Performance) checks with advantage. In addition, you can use a bonus action on each of your turns to beguile one creature you choose within 30 feet of you that can see you and hear the music. The creature must make a Charisma saving throw. If you or your companions are attacking it, the creature automatically succeeds on the saving throw. On a failure, the creature becomes friendly to you for as long as it can hear the music and for 1 hour thereafter. You make Charisma (Deception) checks and Charisma (Persuasion) checks against creatures made friendly by this spell with advantage." }; SpellsList["virtue-uass"] = { name : "Virtue", classes : ["cleric"], source : [["UA:SS", 5]], level : 0, school : "Abjur", time : "1 a", range : "Touch", components : "V,S", duration : "1 rnd", description : "1 creature that has at least 1 HP gets 1d4 + spellcasting ability modifier in temporary hit points", descriptionFull : "You touch one creature, imbuing it with vitality. If the target has at least 1 hit point, it gains a number of temporary hit points equal to 1d4 + your spellcasting ability modifier. The temporary hit points are lost when the spell ends." }; SpellsList["wild cunning-uass"] = { name : "Wild Cunning", classes : ["druid", "ranger"], source : [["UA:SS", 5]], ritual : true, level : 1, school : "Trans", time : "1 a", range : "120 ft", components : "V,S", duration : "Instantaneous", description : "Call spirits of nature to aid me with finding food, drink, tracks, shelter, or camping; see book", descriptionFull : "You call out to the spirits of nature to aid you. When you cast this spell, choose one of the following effects:" + "\n \u2022 " + "If there are any tracks on the ground within range, you know where they are, and you make Wisdom (Survival) checks to follow these tracks with advantage for 1 hour or until you cast this spell again." + "\n \u2022 " + "If there is edible forage within range, you know it and where to find it." + "\n \u2022 " + "If there is clean drinking water within range, you know it and where to find it." + "\n \u2022 " + "If there is suitable shelter for you and your companions with range, you know it and where to find." + "\n \u2022 " + "Send the spirits to bring back wood for a fire and to set up a campsite in the area using your supplies. The spirits build the fire in a circle of stones, put up tents, unroll bedrolls, and put out any rations and water for consumption." + "\n \u2022 " + "Have the spirits instantly break down a campsite, which includes putting out a fire, taking down tents, packing up bags, and burying any rubbish." }; SpellsList["zephyr strike-uass"] = { // clarification: https://twitter.com/JeremyECrawford/status/849302527069884416 name : "Zephyr Strike", classes : ["ranger"], source : [["UA:SS", 5]], level : 1, school : "Trans", time : "1 bns", range : "Self", components : "V", duration : "Conc, 1 min", description : "Moving doesn't provoke opportunity atks; next wea atk has adv and gives +30 ft speed for that turn", descriptionFull : "You move like the wind. For the duration, your movement doesn't provoke opportunity attacks." + "\n " + "In addition, the first time you make a weapon attack on your turn before the spell ends, you make the attack roll with advantage, and your speed increases by 30 feet until the end of that turn." }; // Weapons (attack cantrips) WeaponsList["hand of radiance-uass"] = { regExpSearch : /^(?=.*hand)(?=.*radiance).*$/i, name : "Hand of Radiance", source : [["UA:SS", 3]], list : "spell", ability : 5, type : "Cantrip", damage : ["C", 6, "radiant"], range : "5-ft radius", description : "Con save, success - no damage; Only chosen creatures I can see are affected", abilitytodamage : false, dc : true }; WeaponsList["infestation-uass"] = { regExpSearch : /infestation/i, name : "Infestation", source : [["UA:SS", 3]], list : "spell", ability : 6, type : "Cantrip", damage : ["C", 6, "piercing"], range : "30 ft", description : "Con save, success - no damage, fail - target also moved 5 ft in random direction", abilitytodamage : false, dc : true }; WeaponsList["primal savagery-uass"] = { regExpSearch : /^(?=.*primal)(?=.*savagery).*$/i, name : "Primal Savagery", source : [["UA:SS", 3]], list : "spell", ability : 5, type : "Cantrip", damage : ["C", 10, "piercing"], range : "Melee (5 ft)", description : "Does either Piercing or Slashing damage (my choice)", abilitytodamage : false }; // ua_20170417_Feats-for-Skills.js // This file adds the content from the Unearthed Arcana: Feats for Skills article to MPMB's Character Record Sheet // Define the source SourceList["UA:FS"] = { name : "Unearthed Arcana: Feats for Skills", abbreviation : "UA:FS", group : "Unearthed Arcana", url : "https://media.wizards.com/2017/dnd/downloads/UA-SkillFeats.pdf", date : "2017/04/17" }; // Add 18 feats, corresponding with the 18 skills FeatsList["acrobat-ua"] = { name : "Acrobat", source : [["UA:FS", 1]], descriptionFull : "You become more nimble, gaining the following benefits:\n \u2022 Increase your Dexterity score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Acrobatics skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 As a bonus action, you can make a DC 15 Dexterity (Acrobatics) check. If you succeed, difficult terrain doesn't cost you extra movement until the end of the current turn.", description : "I gain expertise with Acrobatics, or proficiency if not so already. As a bonus action, I can make a DC 15 Dexterity (Acrobatics) check to have difficult terrain not cost me extra movement for this turn. [+1 Dexterity]", scores : [0, 1, 0, 0, 0, 0], skills : [["Acrobatics", "increment"]], action : [["bonus action", ""]] }; FeatsList["animal handler-ua"] = { name : "Animal Handler", source : [["UA:FS", 1]], descriptionFull : "You master the techniques needed to train and handle animals. You gain the following benefits:\n \u2022 Increase your Wisdom score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Animal Handling skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 You can use a bonus action on your turn to command one friendly beast within 60 feet of you that can hear you and that isn't currently following the command of someone else. You decide now what action the beast will take and where it will move during its next turn, or you issue a general command that lasts for 1 minute, such as to guard a particular area.", description : "I gain expertise with Animal Handling, or proficiency if not so already. As a bonus action, I can command a friendly beast not under another's command within 60 ft. If it hears me, I decide its next turn or give a general command lasting for 1 minute. [+1 Wisdom]", scores : [0, 0, 0, 0, 1, 0], skills : [["Animal Handling", "increment"]], action : [["bonus action", ""]] }; FeatsList["arcanist-ua"] = { name : "Arcanist", source : [["UA:FS", 1]], descriptionFull : "You study the arcane arts, gaining the following benefits:\n \u2022 Increase your Intelligence score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Arcana skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 You learn the Prestidigitation and Detect Magic spells. You can cast detect magic once without expending a spell slot, and you regain the ability to do so when you finish a long rest.", description : "I gain expertise with Arcana, or proficiency if not so already. I learn the Prestidigitation cantrip. I can cast Detect Magic without using a spell slot. Once I do so, I can't do it again until I finish a long rest. [+1 Intelligence]", scores : [0, 0, 0, 1, 0, 0], skills : [["Arcana", "increment"]], spellcastingBonus : [{ name : "Arcanist", spellcastingAbility : 4, spells : ["prestidigitation"], selection : ["prestidigitation"], }, { name : "Arcanist (1x long rest)", spells : ["detect magic"], selection : ["detect magic"], firstCol : "oncelr" }] }; FeatsList["brawny-ua"] = { name : "Brawny", source : [["UA:FS", 1]], descriptionFull : "You become stronger, gaining the following benefits:\n \u2022 Increase your Strength score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Athletics skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 You count as if you were one size larger for the purpose of determining your carrying capacity.", description : "I gain expertise with Athletics, or proficiency if not so already. I count as one size larger when determining my carrying capacity and the weight I can push, drag, or lift. [+1 Strength]", scores : [1, 0, 0, 0, 0, 0], skills : [["Athletics", "increment"]], carryingCapacity : 2 }; FeatsList["diplomat-ua"] = { name : "Diplomat", source : [["UA:FS", 2]], descriptionFull : "You master the arts of diplomacy, gaining the following benefits:\n \u2022 Increase your Charisma score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Persuasion skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 If you spend 1 minute talking to someone who can understand what you say, you can make a Charisma (Persuasion) check contested by the creature's Wisdom (Insight) check. If you or your companions are fighting the creature, your check automatically fails. If your check succeeds, the target is charmed by you as long as it remains within 60 feet of you and for 1 minute thereafter.", description : "I gain expertise with Persuasion, or proficiency if not so already. With a one minute long conversation outside of combat, I can make a Persuasion vs. its Insight. If successful, it is charmed by me as long as it remains within 60 ft and 1 minute after that [+1 Charisma]", scores : [0, 0, 0, 0, 0, 1], skills : [["Persuasion", "increment"]] }; FeatsList["empathic-ua"] = { name : "Empathic", source : [["UA:FS", 2]], descriptionFull : "You possess keen insight into how other people think and feel. You gain the following benefits:\n \u2022 Increase your Wisdom score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Insight skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 You can use your action to try to get uncanny insight about one humanoid you can see within 30 feet of you. Make a Wisdom (Insight) check contested by the target's Charisma (Deception) check. If your check succeeds, you have advantage on attack rolls and ability checks against the target until the end of your next turn.", description : "I gain expertise with Insight, or proficiency if not so already. As an action, a humanoid within 30 ft I can see must make its Deception vs. my Insight or I gain advantage on attacks and ability checks against it until the end of my next turn. [+1 Wisdom]", scores : [0, 0, 0, 0, 1, 0], skills : [["Insight", "increment"]] }; FeatsList["historian-ua"] = { name : "Historian", source : [["UA:FS", 2]], descriptionFull : "Your study of history rewards you with the following benefits:\n \u2022 Increase your Intelligence score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the History skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 When you take the Help action to aid another creature's ability check, you can make a DC 15 Intelligence (History) check. On a success, that creature's check gains a bonus equal to your proficiency bonus, as you share pertinent advice and historical examples. To receive this bonus, the creature must be able to understand what you're saying.", description : "I gain expertise with History, or proficiency if not so already. When I use the Help action to help a creature that can understand me with an ability check, I can make a DC 15 Int (History) check to give a bonus equal to my proficiency bonus. [+1 Intelligence]", scores : [0, 0, 0, 1, 0, 0], skills : [["History", "increment"]], action : [["action", ""]] }; FeatsList["investigator-ua"] = { name : "Investigator", source : [["UA:FS", 2]], descriptionFull : "You have an eye for detail and can pick out the smallest clues. You gain the following benefits:\n \u2022 Increase your Intelligence score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Investigation skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 You can take the Search action as a bonus action.", description : "I gain expertise with Investigation, or proficiency if not so already. As a bonus action, I can take the Search action. [+1 Intelligence]", scores : [0, 0, 0, 1, 0, 0], skills : [["Investigation", "increment"]], action : [["bonus action", " (Search)"]] }; FeatsList["medic-ua"] = { name : "Medic", source : [["UA:FS", 2]], descriptionFull : "You master the physician's arts, gaining the following benefits:\n \u2022 Increase your Wisdom score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Medicine skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 During a short rest, you can clean and bind the wounds of up to six willing beasts and humanoids. Make a DC 15 Wisdom (Medicine) check for each creature. On a success, if a creature spends a Hit Die during this rest, that creature can forgo the roll and instead regain the maximum number of hit points the die can restore. A creature can do so only once per rest, regardless of how many Hit Dice it spends.", description : "I gain expertise with Medicine, or proficiency if not so already. During a short rest, I can attend to the wounds of up to 6 creatures. With a DC 15 Wis (Medicine) check for each creature, that target gets the maximum result on one of its HD that it uses. [+1 Wisdom]", scores : [0, 0, 0, 0, 1, 0], skills : [["Medicine", "increment"]] }; FeatsList["menacing-ua"] = { name : "Menacing", source : [["UA:FS", 2]], descriptionFull : "You become fearsome to others, gaining the following benefits:\n \u2022 Increase your Charisma score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Intimidation skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 When you take the Attack action on your turn, you can replace one attack with an attempt to demoralize one humanoid you can see within 30 feet of you that can see and hear you. Make a Charisma (Intimidation) check contested by the target's Wisdom (Insight) check. If your check succeeds, the target is frightened until the end of your next turn. If your check fails, the target can't be frightened by you in this way for 1 hour.", description : "I gain expertise with Intimidation, or proficiency if not so already. Instead of 1 attack in my Attack action, a humanoid within 30 ft I can see and that can see and hear me must make its Insight vs. my Intimidation or be frightened until end of my next turn. [+1 Cha]", scores : [0, 0, 0, 0, 0, 1], skills : [["Intimidation", "increment"]] }; FeatsList["naturalist-ua"] = { name : "Naturalist", source : [["UA:FS", 3]], descriptionFull : "Your extensive study of nature rewards you with the following benefits:\n \u2022 Increase your Intelligence score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Nature skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 You learn the Druidcraft and Detect Poison and Disease spells. You can cast Detect Poison and Disease once without expending a spell slot, and you regain the ability to do so when you finish a long rest.", description : "I gain expertise with Nature, or proficiency if not so already. I learn the Druidcraft cantrip. I can cast Detect Poison and Disease without using a spell slot. Once I do so, I can't do it again until I finish a long rest. [+1 Intelligence]", scores : [0, 0, 0, 1, 0, 0], skills : [["Nature", "increment"]], spellcastingBonus : [{ name : "Naturalist", spellcastingAbility : 4, spells : ["druidcraft"], selection : ["druidcraft"], }, { name : "Naturalist (1x long rest)", spells : ["detect poison and disease"], selection : ["detect poison and disease"], firstCol : "oncelr" }] }; FeatsList["perceptive-ua"] = { name : "Perceptive", source : [["UA:FS", 3]], descriptionFull : "You hone your senses until they become razor sharp. You gain the following benefits:\n \u2022 Increase your Wisdom score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Perception skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 Being in a lightly obscured area doesn't impose disadvantage on your Wisdom (Perception) checks if you can both see and hear.", description : "I gain expertise with Perception, or proficiency if not so already. I don't have disadvantage on my Perception checks from being in a lightly obscured area (dim light), provided that I can still both see and hear. [+1 Wisdom]", scores : [0, 0, 0, 0, 1, 0], skills : [["Perception", "increment"]], vision : [["No disadv. on Perception in lightly obscured or dim light", 0]] }; FeatsList["performer-ua"] = { name : "Performer", source : [["UA:FS", 3]], descriptionFull : "You master performance so that you can command any stage. You gain the following benefits:\n \u2022 Increase your Charisma score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Performance skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 While performing, you can try to distract one humanoid you can see who can see and hear you. Make a Charisma (Performance) check contested by the humanoid's Wisdom (Insight) check. If your check succeeds, you grab the humanoid's attention enough that it makes Wisdom (Perception) and Intelligence (Investigation) checks with disadvantage until you stop performing.", description : "I gain expertise with Performance, or proficiency if not so already. While performing, I can distract one humanoid. It must make its Insight vs. my Performance or have disadv. on its Perception and Investigation checks until I stop performing. [+1 Charisma]", scores : [0, 0, 0, 0, 0, 1], skills : [["Performance", "increment"]] }; FeatsList["quick-fingered-ua"] = { name : "Quick-Fingered", source : [["UA:FS", 3]], descriptionFull : "Your nimble fingers and agility let you perform sleight of hand. You gain the following benefits:\n \u2022 Increase your Dexterity score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Sleight of Hand skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 As a bonus action, you can make a Dexterity (Sleight of Hand) check to plant something on someone else, conceal an object on a creature, lift a purse, or take something from a pocket.", description : "I gain expertise with Sleight of Hand, or proficiency if not so already. As a bonus action, I can make a Dexterity (Sleight of Hand) check to plant something on someone else, conceal an object on a creature, lift a purse, or take something from a pocket. [+1 Dexterity]", scores : [0, 1, 0, 0, 0, 0], skills : [["Sleight of Hand", "increment"]], action : [["bonus action", ""]] }; FeatsList["silver-tongued-ua"] = { name : "Silver-Tongued", source : [["UA:FS", 3]], descriptionFull : "You develop your conversational skill to better deceive others. You gain the following benefits:\n \u2022 Increase your Charisma score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Deception skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 When you take the Attack action on your turn, you can replace one attack with an attempt to deceive one humanoid you can see within 30 feet of you that can see and hear you. Make a Charisma (Deception) check contested by the target's Wisdom (Insight) check. If your check succeeds, your movement doesn't provoke opportunity attacks from the target and your attack rolls against it have advantage; both benefits last until the end of your next turn or until you use this ability on a different target. If your check fails, the target can't be deceived by you in this way for 1 hour.", description : "I gain expertise with Deception, or proficiency if not so already. Instead of 1 attack in my Attack action, a humanoid within 30 ft makes its Insight vs. my Deception or until end of my next turn, I gain adv. on attacks and don't provoke its opportunity attacks. [+1 Cha]", scores : [0, 0, 0, 0, 0, 1], skills : [["Deception", "increment"]] }; FeatsList["stealthy-ua"] = { name : "Stealthy", source : [["UA:FS", 4]], descriptionFull : "You know how best to hide. You gain the following benefits:\n \u2022 Increase your Dexterity score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Stealth skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 If you are hidden, you can move up to 10 feet in the open without revealing yourself if you end the move in a position where you're not clearly visible.", description : "I gain expertise with Stealth, or proficiency if not so already. When I'm hidden, I can move 10 ft to another position without revealing myself, provided that I won't be clearly visible in this new position either. [+1 Dexterity]", scores : [0, 1, 0, 0, 0, 0], skills : [["Stealth", "increment"]] }; FeatsList["survivalist-ua"] = { name : "Survivalist", source : [["UA:FS", 4]], descriptionFull : "You master wilderness lore, gaining the following benefits:\n \u2022 Increase your Wisdom score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Survival skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 You learn the Alarm spell. You can cast it once without expending a spell slot, and you regain the ability to do so when you finish a long rest.", description : "I gain expertise with Survival, or proficiency if not so already. I can cast Alarm without using a spell slot. Once I do so, I can't do it again until I finish a long rest. [+1 Wisdom]", scores : [0, 0, 0, 0, 1, 0], skills : [["Survival", "increment"]], spellcastingBonus : [{ name : "1x long rest", spellcastingAbility : 5, spells : ["alarm"], selection : ["alarm"], firstCol : "oncelr" }] }; FeatsList["theologian-ua"] = { name : "Theologian", source : [["UA:FS", 4]], descriptionFull : "Your extensive study of religion rewards you with the following benefits:\n \u2022 Increase your Intelligence score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Religion skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 You learn the Thaumaturgy and Detect Evil and Good spells. You can cast Detect Evil and Good once without expending a spell slot, and you regain the ability to do so when you finish a long rest.", description : "I gain expertise with Religion, or proficiency if not so already. I learn the Thaumaturgy cantrip. I can cast Detect Evil and Good without using a spell slot. Once I do so, I can't do it again until I finish a long rest. [+1 Intelligence]", scores : [0, 0, 0, 1, 0, 0], skills : [["Religion", "increment"]], spellcastingBonus : [{ name : "Theologian", spellcastingAbility : 4, spells : ["thaumaturgy"], selection : ["thaumaturgy"], }, { name : "Theologian (1x long rest)", spells : ["detect evil and good"], selection : ["detect evil and good"], firstCol : "oncelr" }] }; // ua_20170424_Feats-for-Races.js // This file adds the content from the Unearthed Arcana: Feats for Races article to MPMB's Character Record Sheet // Define the source SourceList["UA:FR"] = { name : "Unearthed Arcana: Feats for Races", abbreviation : "UA:FR", group : "Unearthed Arcana", url : "https://media.wizards.com/2017/dnd/downloads/RJSJC2017_04UASkillFeats_24v10.pdf", date : "2017/04/24" }; // Adds 46 feats (23 + 13 variants of Grudge-Bearer), all of which have a racial prerequisite FeatsList["barbed hide-ua"] = { name : "Barbed Hide", source : [["UA:FR", 1]], prerequisite : "Being a Tiefling", prereqeval : function(v) { return CurrentRace.known.indexOf('tiefling') !== -1; }, descriptionFull : "One of your ancestors was a barbed devil or other spiky fiend. Barbs protrude from your head. You gain the following benefits:\n \u2022 Increase your Charisma score by 1, to a maximum of 20.\n \u2022 As a bonus action, you can cause small barbs to protrude all over your body or cause them to retract. At the start of each of your turns while the barbs are out, you deal 1d6 piercing damage to any creature grappling you or any creature grappled by you.\n \u2022 You gain proficiency in the Intimidation skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.", description : "I gain expertise with Intimidation, or proficiency if not so already. As a bonus action, I can protrude/retract small barbs from my skin. With them out, at the start of each of my turns I deal 1d6 piercing damage to any I'm grappling or are grappling me. [+1 Cha]", scores : [0, 0, 0, 0, 0, 1], skills : [["Intimidation", "increment"]], action : [["bonus action", ""]] }; FeatsList["bountiful luck-ua"] = { name : "Bountiful Luck", source : [["UA:FR", 1]], prerequisite : "Being a Halfling", prereqeval : function(v) { return CurrentRace.known.indexOf('halfling') !== -1; }, descriptionFull : "Whenever an ally you can see within 30 feet of you rolls a 1 on the d20 for an attack roll, an ability check, or a saving throw, you can use your reaction to let the ally reroll the die. The ally must use the new roll.", description : "Whenever an ally I can see within 30 feet of me rolls a 1 on the d20 for an attack roll, an ability check, or a saving throw, I can use my reaction to let the ally reroll the die. The ally must use the new roll.", action : [["reaction", ""]] }; FeatsList["critter friend-ua"] = { name : "Critter Friend", source : [["UA:FR", 1]], prerequisite : "Being a Forest Gnome", prereqeval : function(v) { return CurrentRace.known.indexOf('forest gnome') !== -1; }, descriptionFull : "Your friendship with animals mystically deepens. You gain the following benefits:\n \u2022 You gain proficiency in the Animal Handling skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 You learn the Speak with Animals spell and can cast it at will, without expending a spell slot. You also learn the Animal Friendship spell, and you can cast it once with this feat, without expending a spell slot. You regain the ability to cast it in this way when you finish a long rest. Intelligence is your spellcasting ability for these spells.", description : "I gain expertise with Animal Handling, or proficiency if I didn't have that already. I can cast Speak With Animals and Animal Friendship without using a spell slot. I can cast each of these spells like this once per long rest. Intelligence is my spellcasting ability for these.", skills : [["Animal Handling", "increment"]], spellcastingBonus : [{ name : "Once per long rest", spellcastingAbility : 4, spells : ["speak with animals"], selection : ["speak with animals"], firstCol : 'oncelr' }, { name : "Once per long rest", spells : ["animal friendship"], selection : ["animal friendship"], firstCol : 'oncelr' }] }; FeatsList["dragon fear-ua"] = { name : "Dragon Fear", source : [["UA:FR", 2]], prerequisite : "Being a Dragonborn", prereqeval : function(v) { return CurrentRace.known.indexOf('dragonborn') !== -1; }, descriptionFull : "When angered, you radiate menace. You gain the following benefits:\n \u2022 Increase your Strength or Charisma score by 1, to a maximum of 20.\n \u2022 Instead of exhaling destructive energy, you can roar and expend a use of your breath weapon to force each creature of your choice within 30 feet of you to make a Wisdom saving throw (DC 8 + your proficiency bonus + your Charisma modifier). A target automatically succeeds if it can't hear or see you. On a failed save, a target becomes frightened for 1 minute. If the frightened target takes any damage, it can repeat the saving throw, ending the effect on itself on a success.", calculate : "event.value = 'I can expend a Breath Weapon use to roar instead. Each creature of my choice within 30 ft that can see and hear me must make a DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Cha Mod'))) + ' Wis save (8 + Prof Bonus + Cha mod) or be frightened for 1 min. It can repeat the save whenever it takes damage. [+1 Str or Cha]';", scorestxt : "+1 Strength or Charisma", action : [['action', 'Breath Weapon or Dragon Fear', 'Breath Weapon']] }; FeatsList["dragon hide-ua"] = { name : "Dragon Hide", source : [["UA:FR", 2]], prerequisite : "Being a Dragonborn", prereqeval : function(v) { return CurrentRace.known.indexOf('dragonborn') !== -1; }, descriptionFull : "You inherited the might and majesty of your dragon ancestors. You gain the following benefits:\n \u2022 Increase your Strength or Charisma score by 1, to a maximum of 20.\n \u2022 You grow retractable claws from the tips of your fingers. Extending or retracting the claws requires no action. The claws are natural weapons, which you can use to make unarmed strikes. If you hit with them, you deal slashing damage equal to 1d4 + your Strength modifier, instead of the bludgeoning damage normal for an unarmed strike.\n \u2022 Your scales harden; you gain a +1 bonus to AC while you aren't wearing armor.", description : "I gain retractable claws that I can retract or extend, requiring no action. While extended, my unarmed strikes deal 1d4 slashing damage. My scales harden, giving me a +1 bonus to AC when I'm not wearing armor. [+1 Strength or Charisma]", scorestxt : "+1 Strength or Charisma", weaponOptions : [{ baseWeapon : "unarmed strike", regExpSearch : /^(?=.*(retractable|dragon))(?=.*claw).*$/i, name : "Retractable Claws", source : [["UA:FR", 2]], damage : [1, 4, "slashing"], selectNow : true }], extraAC : { mod : 1, text : "I gain a +1 bonus to AC while I'm not wearing armor.", stopeval : function (v) { return v.wearingArmor; } } }; FeatsList["dragon wings-ua"] = { name : "Dragon Wings", source : [["UA:FR", 2]], prerequisite : "Being a Dragonborn", prereqeval : function(v) { return CurrentRace.known.indexOf('dragonborn') !== -1; }, descriptionFull : "You sprout draconic wings. With your wings, you have a flying speed of 20 feet if you aren't wearing heavy armor and aren't exceeding your carrying capacity.", description : "I sprout draconic wings. With my wings, I have a flying speed of 20 feet if I am not wearing heavy armor and I am not exceeding my carrying capacity or encumbered.", speed : { fly : { spd : 20, enc : 0 } } }; FeatsList["drow high magic-ua"] = { name : "Drow High Magic", source : [["UA:FR", 2]], prerequisite : "Being a Drow (Dark Elf)", prereqeval : function(v) { return CurrentRace.known.indexOf('dark elf') !== -1; }, descriptionFull : "You learn more of the spells typical for your people. You learn Detect Magic and can cast it at will, without expending a spell slot. You also learn Levitate and Dispel Magic, each of which you can cast once without expending a spell slot. You regain the ability to cast the spell in this way when you finish a long rest. Charisma is your spellcasting ability for these spells.", description : "I can cast Detect Magic at will, without expending a spell slot. I can also cast Levitate and Dispel Magic without expending a spell slot, but each only once per long rest. Charisma is my spellcasting ability for these three spells.", spellcastingBonus : [{ name : "At will", spellcastingAbility : 6, spells : ["detect magic"], selection : ["detect magic"], firstCol : 'atwill' }, { name : "Once per long rest", spells : ["levitate"], selection : ["levitate"], firstCol : 'oncelr' }, { name : "Once per long rest", spells : ["dispel magic"], selection : ["dispel magic"], firstCol : 'oncelr' }] }; FeatsList["dwarf resilience-ua"] = { name : "Dwarf Resilience", source : [["UA:FR", 2]], prerequisite : "Being a Dwarf", prereqeval : function(v) { return CurrentRace.known.indexOf('dwarf') !== -1; }, descriptionFull : "You have the blood of dwarf heroes flowing through your veins. You gain the following benefits:\n \u2022 Increase your Constitution score by 1, to a maximum of 20.\n \u2022 Whenever you take the Dodge action in combat, you can spend one Hit Die to heal yourself. Roll the die, add your Constitution modifier, and regain a number of hit points equal to the total (minimum of 1).", description : "Whenever I take the Dodge action in combat, I can spend one Hit Die to heal myself. I roll the die, add my Constitution modifier, and regain a number of hit points equal to the total (minimum of 1). [+1 Constitution]", scores : [0, 0, 1, 0, 0, 0] }; FeatsList["elven accuracy-ua"] = { name : "Elven Accuracy", source : [["UA:FR", 2]], prerequisite : "Being an Elf or a Half-Elf", prereqeval : function(v) { return (/elf|eladrin|avariel|grugach|shadar-kai/i).test(CurrentRace.known); }, descriptionFull : "You have uncanny aim. You gain the following benefits:\n \u2022 Increase your Dexterity score by 1, to a maximum of 20.\n \u2022 Whenever you have advantage on an attack roll, you can reroll one of the dice once.", description : "Whenever I have advantage on an attack roll, I can reroll one of the dice once. [+1 Dexterity]", scores : [0, 1, 0, 0, 0, 0] }; FeatsList["everybody-ua's friend"] = { name : "Everybody's Friend", source : [["UA:FR", 2]], prerequisite : "Being a Half-Elf", prereqeval : function(v) { return (/^(?=.*half)(?=.*elf).*$/i).test(CurrentRace.known); }, descriptionFull : "You develop your magnetic personality to ease your way through the world. You gain the following benefits:\n \u2022 You gain proficiency in the Deception and Persuasion skills. If you're already proficient in either skill, your proficiency bonus is doubled for any check you make with that skill.", description : "I gain expertise with Deception and Persuasion, or proficiency with them if I didn't have that already. [+1 Charisma]", scores : [0, 0, 0, 0, 0, 1], skills : [["Deception", "increment"], ["Persuasion", "increment"]] }; FeatsList["fade away-ua"] = { name : "Fade Away", source : [["UA:FR", 2]], prerequisite : "Being a Gnome", prereqeval : function(v) { return CurrentRace.known.indexOf('gnome') !== -1; }, descriptionFull : "You can draw on your magical heritage to escape danger. You gain the following benefits:\n \u2022 Increase your Intelligence score by 1, to a maximum of 20.\n \u2022 When you take damage, you can use a reaction to magically become invisible until the end of your next turn or until you attack, deal damage, or force someone to make a saving throw. Once you use this ability, you can't do so again until you finish a short or long rest.", description : "As a reaction when I take damage, I can magically become invisible until the end of my next turn or until I attack, deal damage, or force someone to make a saving throw. Once I do this, I can't do so again until I finish a short rest. [+1 Intelligence]", scores : [0, 0, 0, 1, 0, 0], action : [["reaction", ""]], usages : 1, recovery : "short rest" }; FeatsList["fey teleportation-ua"] = { name : "Fey Teleportation", source : [["UA:FR", 3]], prerequisite : "Being a High Elf", prereqeval : function(v) { return CurrentRace.known.indexOf('high elf') !== -1; }, descriptionFull : "Drawing on your fey ancestry, you have learned how to teleport. You gain the following benefits:\n \u2022 Increase your Intelligence score by 1, to a maximum of 20.\n \u2022 You learn the Misty Step spell and can cast it once without expending a spell slot. You regain the ability to cast it in this way when you finish a short or long rest. Intelligence is your spellcasting ability for this spell.", description : "I can cast Misty Step without using a spell slot. I can do so once per short rest. Intelligence is my spellcasting ability for this spell. [+1 Intelligence]", scores : [0, 0, 0, 1, 0, 0], spellcastingBonus : [{ name : "Once per short rest", spellcastingAbility : 4, spells : ["misty step"], selection : ["misty step"], firstCol : 'oncesr' }], usages : 1, recovery : "short rest" }; FeatsList["flames of phlegethos-ua"] = { name : "Flames of Phlegethos", source : [["UA:FR", 3]], prerequisite : "Being a Tiefling", prereqeval : function(v) { return CurrentRace.known.indexOf('tiefling') !== -1; }, descriptionFull : "You learn to call on hellfire to serve your commands. You gain the following benefits:\n \u2022 Increase your Intelligence or Charisma score by 1, to a maximum of 20.\n \u2022 When you roll fire damage for a spell you cast, you can reroll any roll of 1 on the fire damage dice, but you must use the new roll, even if it is another 1.\n \u2022 Whenever you cast a spell that deals fire damage, you can cause flames to wreathe you until the end of your next turn. The flames don't harm you or your possessions, and they shed bright light out to 30 feet and dim light for an additional 30 feet. While the flames are present, any creature within 5 feet of you that hits you with a melee attack takes 1d4 fire damage.", description : "When I cast a fire damage spell, I can reroll any 1 on fire damage dice. I can then sheathe myself in flame until my next turn ends. These shed bright light in 30 ft, dim light in 30 ft and cause any within 5 ft that hit me in melee take 1d4 fire damage. [+1 Int or Cha]", scorestxt : "+1 Intelligence or Charisma" }; FeatsList["grudge-bearer-ua"] = { name : "Grudge-Bearer", source : [["UA:FR", 3]], prerequisite : "Being a Dwarf", prereqeval : function(v) { return CurrentRace.known.indexOf('dwarf') !== -1; }, descriptionFull : "You have a deep hatred for a particular kind of creature. Choose your foes, a type of creature to bear the burden of your wrath: aberrations, beasts, celestials, constructs, dragons, elementals, fey, fiends, giants, monstrosities, oozes, plants, or undead. Alternatively, you can choose two races of humanoid (such as gnolls and orcs). You gain the following benefits:\n \u2022 Increase your Strength, Constitution, or Wisdom score by 1, to a maximum of 20.\n \u2022 During the first round of any combat against your chosen foes, your attack rolls against any of them have advantage.\n \u2022 When any of your chosen foes makes an opportunity attack against you, it makes the attack roll with disadvantage.\n \u2022 Whenever you make an Intelligence (Arcana, History, Nature, or Religion) check to recall information about your chosen foes, you add double your proficiency bonus to the check, even if you're not normally proficient.", description : "My hatred for a creature type gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana, History, Nature, and Religion checks. [+1 Str, Con, or Wis]", scorestxt : "+1 Strength, Constitution, or Wisdom", choices : ["2 Humanoids", "Aberrations", "Beasts", "Celestials", "Constructs", "Dragons", "Elementals", "Fey", "Fiends", "Giants", "Monstrosities", "Oozes", "Plants", "Undead"], "2 humanoids" : { description : "My hatred for 2 humanoid races gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana/History/Nature/Religion checks. [+1 Str, Con, or Wis]" }, aberrations : { description : "My hatred for aberrations gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana, History, Nature, and Religion checks. [+1 Str, Con, or Wis]" }, beasts : { description : "My hatred for beasts gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana, History, Nature, and Religion checks. [+1 Str, Con, or Wis]" }, celestials : { description : "My hatred for celestials gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana, History, Nature, and Religion checks. [+1 Str, Con, or Wis]" }, constructs : { description : "My hatred for constructs gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana, History, Nature, and Religion checks. [+1 Str, Con, or Wis]" }, dragons : { description : "My hatred for dragons gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana, History, Nature, and Religion checks. [+1 Str, Con, or Wis]" }, elementals : { description : "My hatred for elementals gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana, History, Nature, and Religion checks. [+1 Str, Con, or Wis]" }, fey : { description : "My hatred for fey gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana, History, Nature, and Religion checks. [+1 Str, Con, or Wis]" }, fiends : { description : "My hatred for fiends gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana, History, Nature, and Religion checks. [+1 Str, Con, or Wis]" }, giants : { description : "My hatred for giants gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana, History, Nature, and Religion checks. [+1 Str, Con, or Wis]" }, monstrosities : { description : "My hatred for monstrosities gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana, History, Nature, and Religion checks. [+1 Str, Con, or Wis]" }, oozes : { description : "My hatred for oozes gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana, History, Nature, and Religion checks. [+1 Str, Con, or Wis]" }, plants : { description : "My hatred for plants gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana, History, Nature, and Religion checks. [+1 Str, Con, or Wis]" }, undead : { description : "My hatred for undead gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana, History, Nature, and Religion checks. [+1 Str, Con, or Wis]" } }; FeatsList["human determination-ua"] = { name : "Human Determination", source : [["UA:FR", 3]], prerequisite : "Being a Human", prereqeval : function(v) { return CurrentRace.known.indexOf('human') !== -1; }, descriptionFull : "You are filled with a determination that can draw the unreachable within your reach. You gain the following benefits:\n \u2022 Increase one ability score of your choice by 1, to a maximum of 20.\n \u2022 When you make an attack roll, an ability check, or a saving throw, you can do so with advantage. Once you use this ability, you can't use it again until you finish a short or long rest.", description : "When I make an attack roll, an ability check, or a saving throw, I can do so with advantage. Once I use this ability, I can't do so again until I finish a short rest.\n[+1 to one ability score]", scorestxt : "+1 to one ability score of your choice", usages : 1, recovery : "short rest", additional : "attack/check/save" }; FeatsList["infernal constitution-ua"] = { name : "Infernal Constitution", source : [["UA:FR", 3]], prerequisite : "Being a Tiefling", prereqeval : function(v) { return CurrentRace.known.indexOf('tiefling') !== -1; }, descriptionFull : "Fiendish blood runs strong in you. You gain the following benefits:\n \u2022 Increase your Constitution score by 1, to a maximum of 20.\n \u2022 You have resistance to cold and poison damage.\n \u2022 You have advantage on saving throws against being poisoned.", description : "I have resistance to cold and poison damage and I have advantage on saving throws against being poisoned.\n[+1 Constitution]", scores : [0, 0, 1, 0, 0, 0], dmgres : ["Cold", "Poison"], savetxt : { adv_vs : ["poison"] } }; FeatsList["orcish aggression-ua"] = { name : "Orcish Aggression", source : [["UA:FR", 3]], prerequisite : "Being a Half-Orc", prereqeval : function(v) { return (/^(?=.*half)(?=.*orc).*$/i).test(CurrentRace.known); }, descriptionFull : "As a bonus action, you can move up to your speed toward an enemy of your choice that you can see or hear. You must end this move closer to the enemy than you started.", description : "As a bonus action, I can move up to my speed toward an enemy of my choice that I can see or hear. I must end this move closer to the enemy than I started.", action : [["bonus action", ""]] }; FeatsList["orcish fury-ua"] = { name : "Orcish Fury", source : [["UA:FR", 4]], prerequisite : "Being a Half-Orc", prereqeval : function(v) { return (/^(?=.*half)(?=.*orc).*$/i).test(CurrentRace.known); }, descriptionFull : "Your fury burns tirelessly. You gain the following benefits:\n \u2022 Increase your Strength or Constitution score by 1, to a maximum of 20.\n \u2022 When you hit with an attack made with a simple or martial weapon, you can roll one of the weapon's damage dice an additional time and add it as extra damage of the weapon's damage type. Once you use this ability, you can't use it again until you finish a short or long rest.\n \u2022 Immediately after you use your Relentless Endurance trait, you can use your reaction to make one weapon attack.", description : "Once per short rest, I can roll an extra damage die for an attack with a simple or martial weapon. In addition, Immediately after I use my Relentless Endurance trait, I can use my reaction to make one weapon attack. [+1 Strength or Constitution]", scorestxt : "+1 Strength or Constitution", action : [["reaction", " (after Relentless Endurance)"]], usages : 1, recovery : "short rest", additional : "extra damage" }; FeatsList["prodigy-ua"] = { name : "Prodigy", source : [["UA:FR", 4]], prerequisite : "Being a Half-Elf or a Human", prereqeval : function(v) { return (/human|^(?=.*half)(?=.*elf).*$/i).test(CurrentRace.known); }, descriptionFull : "You have a knack for learning new things. You gain the following benefits:\n \u2022 Increase one ability score of your choice by 1, to a maximum of 20.\n \u2022 You gain one skill proficiency of your choice, one tool proficiency of your choice, and fluency in one language of your choice.", description : "I gain one skill proficiency of my choice, one tool proficiency of my choice, fluency in one language of my choice, and +1 to one ability score of my choice. [+1 to one ability score]", scorestxt : "+1 to one ability score of your choice", skillstxt : "Choose any one skill", languageProfs : [1], toolProfs : [["Any tool", 1]] }; FeatsList["second chance-ua"] = { name : "Second Chance", source : [["UA:FR", 4]], prerequisite : "Being a Halfling", prereqeval : function(v) { return CurrentRace.known.indexOf('halfling') !== -1; }, descriptionFull : "You have a knack for learning new things. You gain the following benefits:\n \u2022 Increase your Dexterity, Constitution, or Charisma score by 1, to a maximum of 20.\n \u2022 When a creature you can see hits you with an attack roll, you can use your reaction to force that creature to reroll. Once you use this ability, you can't do so again until you finish a short or long rest.", description : "When a creature I can see hits me with an attack roll, I can use my reaction to force that creature to reroll. Once I use this ability, I can't do so again until I finish a short rest.\n[+1 Dexterity, Constitution, or Charisma]", scorestxt : "+1 Dexterity, Constitution, or Charisma", action : [["reaction", ""]], usages : 1, recovery : "short rest" }; FeatsList["squat nimbleness-ua"] = { name : "Squat Nimbleness", source : [["UA:FR", 4]], prerequisite : "Being a Dwarf, Gnome, or Halfling", prereqeval : function(v) { return (/dwarf|gnome|halfling/i).test(CurrentRace.known); }, descriptionFull : "You are uncommonly nimble for your race. You gain the following benefits:\n \u2022 Increase your Strength or Dexterity score by 1, to a maximum of 20.\n \u2022 Increase your walking speed by 5 feet.\n \u2022 You gain proficiency in the Acrobatics or Athletics skill. If you're already proficient in the skill, your proficiency bonus is doubled for any check you make with it.", description : "My walking speed increases by 5 ft. I gain proficiency in the Acrobatics or Athletics skill. If I'm already proficient in the chosen skill, I gain expertise with it instead.\n[+1 Strength or Dexterity]", scorestxt : "+1 Strength or Dexterity", skillstxt : "Proficiency with Acrobatics or Athletics; or gain Expertise if already proficient", speed : { walk : {spd : "+5", enc : "+5" } } }; FeatsList["wonder maker-ua"] = { name : "Wonder Maker", source : [["UA:FR", 4]], prerequisite : "Being a Rock Gnome", prereqeval : function(v) { return CurrentRace.known.indexOf('rock gnome') !== -1; }, descriptionFull : "You master the tinker techniques of your people. You gain the following benefits:\n \u2022 When you make a check using your proficiency with tinker's tools, you add double your proficiency bonus to the check.\n \u2022 When you make a device with your Tinker trait, you have the following additional options for what you make:\n \u2022 " + toUni("Alarm") + ". This device senses when a creature moves to within 15 feet of it without speaking aloud a password chosen when you create it. One round after a creature moves into range, the alarm makes a shrill ringing that lasts for 1 minute and can be heard from up to 300 feet away.\n \u2022 " + toUni("Calculator") + ". This device makes doing sums easy.\n \u2022 " + toUni("Lifter") + ". This device can be used as a block and tackle, allowing its user to hoist five times the weight the user can normally lift.\n \u2022 " + toUni("Timekeeper") + ". This pocket watch keeps accurate time.\n \u2022 " + toUni("Weather Sensor") + ". When used as an action, this device predicts weather conditions in a 1-mile radius over the next 4 hours, showing one symbol (clouds, sun/moon, rain, or snow) for each hour.", description : "I gain expertise with Tinker's Tools. I get additional Tinker options: Alarm (audible to 300 ft for 1 min), Calculator, Lifter (as block and tackle that multiplies max lift weight by 5), Timekeeper (pocket watch), Weather Sensor (predict for 1-mile, 4 hours) [+1 Dex or Int]", scorestxt : "+1 Dexterity or Intelligence", eval : function () { if ((/tinker.*tool/i).test(What('Too Text'))) { Checkbox('Too Exp', true); }; }, removeeval : function () { if ((/tinker.*tool/i).test(What('Too Text'))) { Checkbox('Too Exp', false); }; } }; FeatsList["wood elf magic-ua"] = { name : "Wood Elf Magic", source : [["UA:FR", 4]], prerequisite : "Being a Wood Elf", prereqeval : function(v) { return CurrentRace.known.indexOf('wood elf') !== -1; }, descriptionFull : "You learn the magic of the primeval woods. You learn one druid cantrip of your choice. You also learn Longstrider and Pass Without Trace, each of which you can cast once without expending a spell slot. You regain the ability to cast the spell in this way when you finish a long rest. Wisdom is your spellcasting ability for these spells.", description : "I learn a druid cantrip. In addition, I can cast Longstrider and Pass Without Trace, without expending a spell slot, but each only once per long rest. Wisdom is my spellcasting ability for these three spells.", spellcastingBonus : [{ name : "Druid Cantrip", spellcastingAbility : 5, "class" : "druid", level : [0, 0], firstCol : 'atwill' }, { name : "Once per long rest", spells : ["longstrider"], selection : ["longstrider"], firstCol : 'oncelr' }, { name : "Once per long rest", spells : ["pass without trace"], selection : ["pass without trace"], firstCol : 'oncelr' }] }; // ua_20170501_Revised-Subclasses.js // This file adds the content from the Unearthed Arcana: Revised Subclasses article to MPMB's Character Record Sheet // Define the source SourceList["UA:RS"] = { name : "Unearthed Arcana: Revised Subclasses", abbreviation : "UA:RS", group : "Unearthed Arcana", url : "https://media.wizards.com/2017/dnd/downloads/UA-RevisedSubclasses.pdf", date : "2017/05/01" }; // Add 5 subclasses from previous Unearthed Arcana articles: 1 for the Barbarian, 1 for the Bard, 1 for the Fighter, 1 for the Monk, and 1 for the Sorcerer AddSubClass("barbarian", "ancestral guardian2-ua", { regExpSearch : /^(?=.*ancestral)(?=.*guardian).*$/i, subname : "Path of the Ancestral Guardian", subnameShort: "Ancestral Guardian", fullname : "Ancestral Guardian", source : [["UA:RS", 1]], features : { "subclassfeature3" : { name : "Ancestral Protectors", source : [["UA:RS", 1]], minlevel : 3, description : desc([ "While raging, the first creature I hit with an attack on my turn becomes distracted", "While distracted, it has disadvantage on attack rolls that don't target me", "In addition, everybody but me counts as having resistance to all of the target's attacks", "This lasts until the start of my next turn, or until my rage ends" ]) }, "subclassfeature6" : { name : "Spirit Shield", source : [["UA:RS", 1]], minlevel : 6, description : desc([ "As a reaction while raging when an ally I see within 30 ft is damaged, I can reduce it", "My guardian spirits reduce the damage by an amount equal to the roll of the dice" ]), additional : levels.map(function (n) { return n < 6 ? "" : (n < 10 ? 2 : n < 14 ? 3 : 4) + "d8 damage reduced"; }), action : [["reaction", ""]] }, "subclassfeature10" : { name : "Consult the Spirits", source : [["UA:RS", 1]], minlevel : 10, description: desc("Through consulting my ancestral spirits, I can cast Clairvoyance without a spell slot"), spellcastingBonus : [{ name : "Consult the Spirits", spells : ["clairvoyance"], selection : ["clairvoyance"], firstCol : 'oncesr' }], usages : 1, recovery : "short rest" }, "subclassfeature14" : { name : "Vengeful Ancestors", source : [["UA:RS", 1]], minlevel : 14, description: desc("Whenever I use Spirit Shield to reduce damage, the attacker takes the reduced damage") } } }); AddSubClass("bard", "college of swords2-ua", { regExpSearch : /^(?=.*(college|bard|minstrel|troubadour|jongleur))(?=.*\bswords?\b).*$/i, subname : "College of Swords", subnameShort: "Swords", source : [["UA:RS", 1]], features : { "subclassfeature3" : { name : "Bonus Proficiencies", source : [["UA:RS", 2]], minlevel : 3, description : desc([ "I gain proficiency with medium armor and scimitars", "I can use a simple or martial melee weapon that I'm proficient with as spellcasting focus" ]), armorProfs : [false, true, false, false], weaponProfs : [false, false, ["scimitar"]] }, "subclassfeature3.1" : { name : "Fighting Style", source : [["UA:RS", 2]], minlevel : 3, description: desc('Select a Fighting Style for the college of swords using the "Choose Feature" button above'), choices : ["Dueling", "Two-Weapon Fighting"], "dueling" : FightingStyles.dueling, "two-weapon fighting" : FightingStyles.two_weapon }, "subclassfeature3.2" : { name : "Blade Flourish", source : [["UA:RS", 2]], minlevel : 3, description : desc([ "As an action, I can make one melee weapon attack and use one flourish option below", "In addition, I gain +10 ft to my walking speed until the end of the current turn", " - Defensive Flourish [one Bardic Inspiration die]", " I add the result of the die to my AC until the start of my next turn", " - Slashing Flourish [one Bardic Inspiration die]", " If the attack hits, I can use a die to deal damage to creatures next to the target", " All creatures within 5 ft of the target take the result of the die in damage", " - Mobile Flourish [one Bardic Inspiration die]", " If the attack hits, I can use a die to push the target back 5 + the die result in feet", " After this, I can use my reaction to move my speed to a space next to the target" ]), action : [["action", ""]] }, "subclassfeature6" : { name : "Cunning Flourish", source : [["UA:RS", 2]], minlevel : 6, description: desc("When I take the Blade Flourish action, I can attack twice, but still only use one flourish") }, "subclassfeature14" : { name : "Master Flourish", source : [["UA:RS", 2]], minlevel : 14, description: desc("When I do a Blade Flourish, I can use a d6 instead of expending a Bardic Inspiration die") } } }); AddSubClass("fighter", "arcane archer2-ua", { regExpSearch : /^(?=.*arcane)(?=.*archer).*$/i, subname : "Arcane Archer", source : [["UA:RS", 2]], fullname : "Arcane Archer", abilitySave : 4, features : { "subclassfeature3" : { name : "Magic Arrow", source : [["UA:RS", 3]], minlevel : 3, description : desc([ "Whenever I fire a nonmagical arrow from a short- or longbow I can make it magical", "This magical arrow gives a +1 bonus to the attack and damage rolls for the one attack" ]), calcChanges : { atkCalc : [ function (fields, v, output) { if ((/longbow|shortbow/i).test(v.baseWeaponName) && !v.theWea.isMagicWeapon) output.magic += 1; }, "Any longbow or shortbow that doesn't include a magic bonus in its name gets a +1 magical bonus to damage and to hit as any arrows fired with it are automatically made magical." ] } }, "subclassfeature3.1" : { name : "Arcane Shot", source : [["UA:RS", 3]], minlevel : 3, description : desc([ "I can unleash magical effects when I fire a magic arrow from a short- or longbow", "I can use this once per turn as part of the Attack action, after an attack hits", "I know a number of Arcane Shot Options and learn additional at certain levels", 'Use the "Choose Feature" button above to add Arcane Shots Options to the third page' ]), usages : 2, recovery : "short rest", additional : levels.map( function(n) { return n < 3 ? "" : (n < 7 ? 2 : n < 10 ? 3 : n < 15 ? 4 : n < 18 ? 5 : 6) + " options known"; }), extraname : "Arcane Shot Option", extrachoices : ["Banishing Arrow [Abjuration]", "Brute Bane Arrow [Necromancy]", "Bursting Arrow [Evocation]", "Grasping Arrow [Conjuration]", "Mind-Scrambling Arrow [Enchantment]", "Piercing Arrow [Transmutation]", "Seeking Arrow [Divination]", "Shadow Arrow [Illusion]"], extraTimes : levels.map(function (n) { return n < 3 ? 0 : n < 7 ? 2 : n < 10 ? 3 : n < 15 ? 4 : n < 18 ? 5 : 6; }), "banishing arrow [abjuration]" : { name : "Banishing Arrow [Abjuration]", source : [["UA:RS", 3]], description : desc([ "The target makes a Cha save or is banished to the Feywild until the end of its next turn", "While banished, its speed is 0 and is incapacitated; It re-appearing in the same spot", "When I reach 18th level, this Arcane Shot Option also does an extra 2d6 force damage" ]), additional : levels.map( function(n) { return n < 18 ? "" : "+2d6 force damage"; }) }, "brute bane arrow [necromancy]" : { name : "Brute Bane Arrow [Necromancy]", source : [["UA:RS", 3]], description : desc([ "The target takes extra necrotic damage and must make a Constitution save", "If failed, the damage of the target's attacks is halved until the start of my next turn" ]), additional : levels.map( function(n) { return n < 3 ? "" : "+" + (n < 18 ? 2 : 4) + "d6 necrotic damage"; }) }, "bursting arrow [evocation]" : { name : "Bursting Arrow [Evocation]", source : [["UA:RS", 3]], description: desc("The target, in addition to the shot, and all creatures within 10 ft of it take damage"), additional : levels.map( function(n) { return n < 3 ? "" : "+" + (n < 18 ? 2 : 4) + "d6 force damage"; }) }, "grasping arrow [conjuration]" : { name : "Grasping Arrow [Conjuration]", source : [["UA:RS", 3]], description : desc([ "The target takes extra poison damage as brambles wrap around it for 1 minute", "The brambles give it -10 ft speed and do it slashing damage every round it moves", "These can be removed by it or another as an action with Strength (Athletics) vs. my DC" ]), additional : levels.map( function(n) { return n < 3 ? "" : (n < 18 ? 2 : 4) + "d6 poison/slash. damage"; }) }, "mind-scrambling arrow [enchantment]" : { name : "Mind-Scrambling Arrow [Enchantment]", source : [["UA:RS", 4]], description : desc([ "The target takes extra psychic damage and must succeed on a Wisdom save", "If failed, it can't attack or harm one of my allies within 30 ft of it that I choose", "This lasts until the start of my next turn or until the chosen ally harms the target" ]), additional : levels.map( function(n) { return n < 3 ? "" : "+" + (n < 18 ? 2 : 4) + "d6 damage"; }) }, "piercing arrow [transmutation]" : { name : "Piercing Arrow [Transmutation]", source : [["UA:RS", 4]], description : desc([ "With this I don't roll for the attack, but shoot the arrow in a 30-ft long, 1-ft wide line", "It passes through objects, ignoring cover, but all creatures in the area take damage", "The damage is the same as a normal hit from my attack, plus extra piercing damage", "A creature can make a Dexterity save to reduce the damage by half" ]), additional : levels.map( function(n) { return n < 3 ? "" : "+" + (n < 18 ? 1 : 2) + "d6 piercing damage"; }) }, "seeking arrow [divination]" : { name : "Seeking Arrow [Divination]", source : [["UA:RS", 4]], description : desc([ "With this I don't roll for the attack, but I choose a target I have seen in the last minute", "The seeking arrow moves around corners, obstacles, and ignores cover to hit the target", "It is hit if it is within the weapon's range and there is a path for the arrow to get to it", "The target takes the full damage of the attack plus extra force damage", "It can make a Dexterity save to reduce the damage by half; If failed, I know its location" ]), additional : levels.map( function(n) { return n < 3 ? "" : "+" + (n < 18 ? 1 : 2) + "d6 force damage"; }) }, "shadow arrow [illusion]" : { name : "Shadow Arrow [Illusion]", source : [["UA:RS", 4]], description : desc([ "The target takes extra psychic damage and must succeed on a Wisdom save", "If failed, the target can't see anything beyond 5 ft until the end of my next turn" ]), additional : levels.map( function(n) { return n < 3 ? "" : "+" + (n < 18 ? 2 : 4) + "d6 psychic damage"; }) } }, "subclassfeature3.2" : { name : "Arcane Archer's Lore", source : [["UA:RS", 3]], minlevel : 3, description: desc("I gain proficiency with either the Arcana or Nature skill"), skillstxt : "Choose one from: Arcana or Nature" }, "subclassfeature7" : { name : "Curving Shot", source : [["UA:RS", 3]], minlevel : 7, description : desc([ "When I miss with a magic arrow, I can use a bonus action to redirect the attack", "I reroll the attack against a different target within 60 ft of the original target" ]), action : [["bonus action", ""]] }, "subclassfeature15" : { name : "Ever-Ready Shot", source : [["UA:RS", 3]], minlevel : 15, description: desc("I regain one use of Arcane Shot if I have no more remaining when I roll initiative") } } }); AddSubClass("monk", "way of the kensei2-ua", { regExpSearch : /kensei/i, subname : "Way of the Kensei", subnameShort: "Kensei", source : [["UA:RS", 4]], features : { "subclassfeature3" : { name : "Path of the Kensei", source : [["UA:RS", 4]], minlevel : 3, description : desc([ "Some weapons, that don't have the heavy or special property, are kensei weapons for me", "At least one ranged and one melee weapon, more at higher levels (longbow does qualify)", "With these: proficient, count as a monk weapons, special bonuses while holding them:", " - If I do an unarmed strike during an Attack action, +2 AC until my next turn starts", " - As a bonus action, ranged kensei weapon attacks deal +1d4 damage in current turn" ]), action : [["bonus action", " (with ranged)"]], additional : levels.map( function(n) { return n < 3 ? "" : (n < 6 ? 2 : n < 11 ? 3 : n < 17 ? 4 : 5) + " kensei weapons"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.monk && classes.known.monk.level > 2 && !v.isSpell && !v.theWea.monkweapon && (/kensei/i).test(v.WeaponTextName) && !v.theWea.special && (!(/heavy|special/i).test(fields.Description) || v.baseWeaponName === 'longbow')) { v.theWea.monkweapon = true; v.theWea.kenseiweapon = true; if (v.isRangedWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'As bonus action with Attack action, +1d4 damage'; }; fields.Proficiency = true; }; }, "If I include the word 'Kensei' in the name of a weapon that doesn't have the Heavy or Special attribute, or that is a longbow, that weapon gains the same benefits as any other 'Monk Weapon'.\nIn addition, with ranged 'Kensei Weapons', I can take a bonus action to have that hit, and any other hit after that as part of the same action, do +1d4 damage." ] } }, "ki-empowered strikes" : { name : "One with the Blade", source : [["UA:RS", 5]], minlevel : 6, description: desc("My unarmed strikes and kensei weapon attacks count as magical"), calcChanges : { atkAdd : [ function (fields, v) { if (!v.isSpell && !v.thisWeapon[1] && !v.theWea.isMagicWeapon && !(/counts as( a)? magical/i).test(fields.Description) && (v.baseWeaponName === "unarmed strike" || v.theWea.kenseiweapon)) { fields.Description += (fields.Description ? '; ' : '') + 'Counts as magical'; }; }, "My unarmed strikes and any Kensei Weapons count as magical for overcoming resistances and immunities." ] }, "precise strike" : { name : "Precise Strike", extraname : "Way of the Kensei 6", source : [["UA:RS", 5]], description: desc("Once per turn when I hit with a kensei weapon, I can do a martial arts die extra damage"), additional : "1 ki point" }, "sharpen the blade" : { name : "Sharpen the Blade", extraname : "Way of the Kensei 11", source : [["UA:RS", 5]], description : desc([ "As a bonus action, I can grant my kensei weapon a bonus to attack and damage rolls", "This bonus is equal to the number of ki points I spend; It lasts for 1 minute" ]), additional : "1 to 3 ki points", action : [["bonus action", ""]] }, autoSelectExtrachoices : [{ extrachoice : "precise strike" }, { extrachoice : "sharpen the blade", minlevel : 11 }] }, "subclassfeature17" : { name : "Unerring Accuracy", source : [["UA:RS", 5]], minlevel : 17, description: desc("Once per turn, if I miss a monk weapon attack on my turn, I can reroll the attack roll") } } }); AddSubClass("sorcerer", "favoured soul-uars", { regExpSearch : /^(?=.*favou?red)(?=.*soul).*$/i, subname : "Favored Soul", source : [["UA:RS", 5]], fullname : "Favored Soul", spellcastingList : { "class" : ["cleric", "sorcerer"] }, features : { "subclassfeature1" : { name : "Divine Magic", source : [["UA:RS", 5]], minlevel : 1, description : desc([ "When I select my 1st level or higher spells, I can also pick spells from the cleric spell list", "These cleric spells count as sorcerer spells for me", "I also learn Cure Wounds, which doesn't count against my number of spells known" ]), spellcastingBonus : [{ name : "Divine Magic", spells : ["cure wounds"], selection : ["cure wounds"] }] }, "subclassfeature1.2" : { name : "Favored by the Gods", source : [["UA:RS", 5]], minlevel : 1, description: desc("If I fail a saving throw or miss with an attack roll, I can add 2d4 to the total"), recovery : "short rest", usages : 1 }, "subclassfeature6" : { name : "Empowered Healing", source : [["UA:RS", 5]], minlevel : 6, additional: "1 sorcery point", description : desc([ "When I roll dice for healing with one of my sorcerer spells, I can reroll them once", "By spending 1 sorcery point, I can reroll any number of those dice for that spell" ]) }, "subclassfeature14" : { name : "Angelic Form", source : [["UA:RS", 5]], minlevel : 14, description : desc([ 'Choose an otherworldly quality using the "Choose Feature" button above', "As a bonus action, I can manifest a pair of spectral wings that give me 30 ft fly speed", "These wings last until I become incapacitated or I dismiss them as a bonus action" ]), choices : ["Beautiful", "Youthful", "Kind", "Imposing"], "beautiful" : { name : "Angelic Form: Beautiful", description : desc([ "My appearance takes on an otherworldly quality of beauty", "As a bonus action, I can manifest a pair of spectral wings that give me 30 ft fly speed", "These wings last until I become incapacitated or I dismiss them as a bonus action" ]) }, "youthful" : { name : "Angelic Form: Youthful", description : desc([ "My appearance takes on an otherworldly quality of youthfulness", "As a bonus action, I can manifest a pair of spectral wings that give me 30 ft fly speed", "These wings last until I become incapacitated or I dismiss them as a bonus action" ]) }, "kind" : { name : "Angelic Form: Kind", description : desc([ "My appearance takes on an otherworldly quality of kindness", "As a bonus action, I can manifest a pair of spectral wings that give me 30 ft fly speed", "These wings last until I become incapacitated or I dismiss them as a bonus action" ]) }, "imposing" : { name : "Angelic Form: Imposing", description : desc([ "My appearance takes on an otherworldly quality of imposingness", "As a bonus action, I can manifest a pair of spectral wings that give me 30 ft fly speed", "These wings last until I become incapacitated or I dismiss them as a bonus action" ]) }, action : [["bonus action", " Wings"]], speed : { fly : { spd : 30, enc : 20 } } }, "subclassfeature18" : { name : "Unearthly Recovery", source : [["UA:RS", 6]], minlevel : 18, description : desc([ "As a bonus action when I have less than half of my max HP remaining, I can heal myself", "I regain a number of HP equal to half my hit point maximum" ]), action : [["bonus action", ""]], recovery : "long rest", usages : 1 } } }); // ua_20170605_Revised-Class-Options.js // This file adds the content from the Unearthed Arcana: Revised Class Options article to MPMB's Character Record Sheet // Define the source SourceList["UA:RCO"] = { name : "Unearthed Arcana: Revised Class Options", abbreviation : "UA:RCO", group : "Unearthed Arcana", url : "https://media.wizards.com/2017/dnd/downloads/June5UA_RevisedClassOptv1.pdf", date : "2017/06/05" }; // Adds 4 revised subclasses from previous Unearthed Arcana articles: 1 for the Druid, 1 for the Fighter, 1 for the Paladin, and 1 for the Warlock AddSubClass("druid", "circle of the shepherd2-ua", { regExpSearch : /^(?=.*(druid|shaman))(?=.*shepherd).*$/i, subname : "Circle of the Shepherd", subnameShort: "Shepherd", source : [["UA:RCO", 1]], features : { "subclassfeature2" : { name : "Speech of the Woods", source : [["UA:RCO", 1]], minlevel : 2, description : desc([ "I can talk with beasts, they understand me and I them, to the limit of their intelligence", "This doesn't automatically make me friends with all beasts; Additionally, I learn Sylvan" ]), languageProfs : ["Sylvan"] }, "subclassfeature2.1" : { name : "Spirit Totem", source : [["UA:RCO", 1]], minlevel : 2, description : desc([ "As a bonus action, I can summon, or move, a spirit to a point I can see within 60 ft", "The spirit is a Bear, Hawk, or Unicorn (see below), which has a 30-ft radius aura", "It is incorporeal, immobile, doesn't counts as a creature or object, and persists for 1 min", "\u2022 Bear: my allies in the area and I instantly gain 5 + my druid level in temp HP", " While in the aura, my allies and I gain advantage on Strength checks and saves", "\u2022 Hawk: As a reaction, I can grant advantage on an attack vs. a target in the aura", "\u2022 Unicorn: my allies and I gain advantage on ability checks to detect targets in the aura", " If I cast a healing spell with a spell slot, allies in the aura heal my druid level in HP" ]), usages : 1, recovery : "short rest", action : [["bonus action", ""]] }, "subclassfeature6" : { name : "Mighty Summoner", source : [["UA:RCO", 2]], minlevel : 6, description: desc("Beasts or Fey I summon with spells get +2 HP per HD and their attacks count as magical"), calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { switch (spellKey) { case "conjure animals" : case "conjure fey" : spellObj.description += "; each +2 HP/HD, magical natural attacks"; return true; case "conjure woodland beings" : spellObj.description = spellObj.description.replace(/fey.*/, "fey; obeys commands if its align. agrees; breaks free if break conc.; +2 HP/HD, magic atks"); return true; } }, "When I use a spell that restores hit points, it restores an additional 2 + the level of the spell slot (or spell slot equivalent) used to cast the spell." ] } }, "subclassfeature10" : { name : "Guardian Spirit", source : [["UA:RCO", 2]], minlevel : 10, description: desc("When a Beast or Fey that I summoned ends its turn in my Spirit Totem aura, it heals"), additional : levels.map(function (n) { if (n < 10) return ""; return "heals " + Math.floor(n / 2) + " HP"; }) }, "subclassfeature14" : { name : "Faithful Summons", source : [["UA:RCO", 2]], minlevel : 14, description : desc([ "When I am reduced to 0 HP or incapacitated against my will, I can cast Conjure Animals", "This is done as if using a 9th-level spell slot to summon 4 beast of my choice up to CR 2", "They appear within 20 ft of me, last 1 hour, and protect me from harm and attack foes" ]), usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Faithful Summons", spells : ["conjure animals"], selection : ["conjure animals"], firstCol : "oncelr" }], spellChanges : { "conjure animals" : { nameShort : "Conjure Animals (level 9)", range : "20 ft", duration : "1 h", description : "Summon 4 CR 2 beasts; protect me from harm and attack foes", changes : "Using my Faithful Summons class feature when I'm reduced to 0 HP, I can cast Conjure Animals as if using a 9th-level spell slot. This then summons 4 beast of my choice up to CR 2 within 20 ft of me without needing concentration." } } } } }); AddSubClass("fighter", "cavalier2-ua", { regExpSearch : /cavalier/i, subname : "Cavalier", source : [["UA:RCO", 2]], fullname : "Cavalier", abilitySave : 1, features : { "subclassfeature3" : { name : "Bonus Proficiency", source : [["UA:RCO", 2]], minlevel : 3, description : desc([ "I gain proficiency with Animal Handling, History, Insight, Performance, or Persuasion", "Alternatively, I learn one language of my choice" ]), choices : ["Language proficiency", "Skill proficiency: Animal Handling, History, Insight, Performance, or Persuasion"], "language proficiency" : { name : "Bonus Proficiency", description: desc("I learn one language of my choice"), languageProfs : [1] }, "skill proficiency: animal handling, history, insight, performance, or persuasion" : { name : "Bonus Proficiency", description: desc("I gain proficiency with Animal Handling, History, Insight, Performance, or Persuasion"), skillstxt : "Choose one from: Animal Handling, History, Insight, Performance, or Persuasion" } }, "subclassfeature3.1" : { name : "Born in the Saddle", source : [["UA:RCO", 2]], minlevel : 3, description : desc([ "I have advantage on saves to avoid falling off my mount, and land on my feet if I fail", "Mounting or dismounting a creature costs me only 5 ft of movement instead of half" ]), savetxt : { adv_vs : ["falling off my mount"] } }, "subclassfeature3.2" : { name : "Combat Superiority", source : [["UA:RCO", 2]], minlevel : 3, description : desc([ "I gain a number of superiority dice that I can use to fuel special maneuvers (see below)", "I can use only one maneuver per attack; I regain all superiority dice after a short rest", " \u2022 Control Mount (Maneuver, UA:RCO 3)", " Use after rolling Wis (Animal Handling) to influence an animal I or an ally is riding", " I add the superiority die to the result", " \u2022 Precision Attack (Maneuver, UA:RCO 3)", " Use after rolling to hit; I add the superiority die to my attack roll", " \u2022 Trip Attack (Maneuver, UA:RCO 3) [DC 8 + Prof Bonus + Str mod]", " Use after hitting a creature; I add the superiority die to the attack's damage", " If target is Large or smaller, it must make a Strength save or be knocked prone", " \u2022 Warding Maneuver (Maneuver, UA:RCO 3) [only while wielding weapon or shield]", " As a reaction when I or a creature within 5 ft is hit, I add the superiority die to AC", " If the attack still hits, the target counts as having resistance against the attack" ]), additional : ["", "", "d8", "d8", "d8", "d8", "d8", "d8", "d8", "d10", "d10", "d10", "d10", "d10", "d10", "d10", "d10", "d12", "d12", "d12"], usages : [0, 0, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6], recovery : "short rest", action : ['reaction', 'Warding Maneuver'] }, "subclassfeature7" : { name : "Ferocious Charger", source : [["UA:RCO", 3]], minlevel : 7, description : desc([ "I can use two superiority dice, instead of just one, when using the Trip Attack Maneuver", "If doing so, both dice are added to the damage and the target has disadv. on its Str save" ]) }, "subclassfeature10" : { name : "Improved Combat Superiority", source : [["UA:RCO", 3]], minlevel : 10, description: desc("My superiority dice turn into d10s at 10th level and into d12s at 18th level") }, "subclassfeature15" : { name : "Relentless", source : [["UA:RCO", 3]], minlevel : 15, description: desc("I regain one superiority die if I have no more remaining when I roll initiative") } } }); AddSubClass("paladin", "oath of conquest2-ua", { regExpSearch : /^((?=.*(knight tyrant|iron mongers))|((?=.*(conquest|tyranny|tyrant))(((?=.*paladin)|((?=.*(exalted|sacred|holy|divine))(?=.*(knight|fighter|warrior|warlord|trooper))))))).*$/i, subname : "Oath of Conquest", subnameShort: "Conquest", source : [["UA:RCO", 3]], features : { "subclassfeature3" : { name : "Channel Divinity: Conquering Presence", source : [["UA:RCO", 4]], minlevel : 3, description : desc([ "As an action, all creatures of my choice within 30-ft radius must make a Wisdom save", "If failed, a target is frightened for 1 minute; It can save again at the end of each turn" ]), action : [["action", ""]], spellcastingExtra : ["armor of agathys", "command", "hold person", "spiritual weapon", "bestow curse", "fear", "dominate beast", "stoneskin", "cloudkill", "dominate person"] }, "subclassfeature3.1" : { name : "Channel Divinity: Guided Strike", source : [["UA:RCO", 4]], minlevel : 3, description: desc("When I make an attack roll, I can add a +10 bonus to the roll after seeing the d20 roll") }, "subclassfeature7" : { name : "Aura of Conquest", source : [["UA:RCO", 4]], minlevel : 7, description : desc([ "Enemies that are frightened of me have their speed reduced to 0 while in my aura", "They also take psychic damage whenever they start theirs turn within my aura" ]), additional : levels.map(function (n) { if (n < 7) return ""; return (n < 18 ? 10 : 30) + "-foot aura; " + Math.floor(n / 2) + " psychic damage"; }) }, "subclassfeature15" : { name : "Scornful Rebuke", source : [["UA:RCO", 4]], minlevel : 15, description : desc([ "Whenever I'm hit with an attack while I'm not incapacitated, the attacker takes damage", "This is psychic damage equal to my Charisma modifier (minimum of 0)" ]) }, "subclassfeature20" : { name : "Invincible Conqueror", source : [["UA:RCO", 4]], minlevel : 20, description : desc([ "As an action, I can gain the following benefits for 1 minute:", " - I have resistance to all damage", " - I can make an additional attack as part of my Attack action", " - My melee weapons score critical hits on a roll of 19 or 20" ]), recovery : "long rest", usages : 1, action : [["action", ""]] } } }); AddSubClass("warlock", "the celestial-ua", { regExpSearch : /^(?=.*warlock)(?=.*celestial).*$/i, subname : "the Celestial", source : [["UA:RCO", 4]], spellcastingExtra : ["burning hands", "cure wounds", "flaming sphere", "lesser restoration", "daylight", "revivify", "guardian of faith", "wall of fire", "flame strike", "greater restoration"], features : { "subclassfeature1" : { name : "Bonus Cantrips", source : [["UA:RCO", 5]], minlevel : 1, description: desc("I know the Light and Sacred Flame cantrips"), spellcastingBonus : [{ name : "Bonus Cantrips", spells : ["light"], selection : ["light"] }, { name : "Bonus Cantrips", spells : ["sacred flame"], selection : ["sacred flame"] }] }, "subclassfeature1.1" : { name : "Healing Light", source : [["UA:RCO", 5]], minlevel : 1, description : desc([ "As a bonus action, I can heal a creature on touch by expending dice from my pool", "I can expend up to my Charisma modifier (min 1) of dice at a time", "The target heals HP equal to the roll of the dice; I regain all expended dice on a long rest" ]), usages : levels.map(function (n) { return (n + 1) + "d6 per "; }), usagescalc : "event.value = !classes.known.warlock ? '' : (1 + classes.known.warlock.level) + 'd6';", recovery : "long rest", action : [["bonus action", ""]] }, "subclassfeature6" : { name : "Radiant Soul", source : [["UA:RCO", 5]], minlevel : 6, description : desc([ "I add my Cha modifier to cantrips/spells I cast that deal fire or radiant damage", "Additionally, I have resistance to radiant damage" ]), dmgres : ["Radiant"], calcChanges : { atkCalc : [ function (fields, v, output) { if (v.isSpell && (/fire|radiant/i).test(fields.Damage_Type)) { output.extraDmg += What('Cha Mod'); } }, "Cantrips and spells that fire or radiant damage get my Charisma modifier added to their damage." ], spellAdd : [ function (spellKey, spellObj, spName) { if (!spellObj.psionic) return genericSpellDmgEdit(spellKey, spellObj, "fire|radiant", "Cha"); }, "Cantrips and spells that fire or radiant damage get my Charisma modifier added to their damage." ] } }, "subclassfeature10" : { name : "Radiant Resilience", source : [["UA:RCO", 5]], minlevel : 10, description : desc([ "When I finish a short or long rest, I and up to five allies gain temporary hit points", "I get my warlock level + Cha mod, while my allies get half my warlock level + Cha mod" ]), additional : levels.map(function (n) { if (n < 10) return ""; return "Me: " + n + "+Cha mod; Allies: " + Math.floor(n / 2) + "+Cha mod"; }) }, "subclassfeature14" : { name : "Searing Vengeance", source : [["UA:RCO", 5]], minlevel : 14, description : desc([ "At the start of my turn when I would make a death save, I can instead spring back up", "I can stand up and recover HP equal to half my current HP maximum", "Also, creatures of my choice within 30 ft of me take 2d8 + Cha mod in radiant damage", "Damaged creatures are blinded until the end of my current turn" ]), usages : 1, recovery : "long rest" } } }); // Add Warlock invocations, revised versions from previous Unearthed Arcana articles, and new ones // Most probably still valid 2021-09-21, have to check AddWarlockInvocation("Eldritch Smite (prereq: level 5 warlock, Pact of the Blade)", { name : "Eldritch Smite", description : desc([ "Once per turn when I hit a creature with my pact weapon, I can do extra damage", "By expending a warlock spell slot, the creature takes extra damage and is knocked prone", "It takes 1d8 force damage and another 1d8 force damage per level of the spell slot", "If the target takes any of this bonus damage, it is knocked prone if it is Huge or smaller" ]), source : [["UA:RCO", 6]], submenu : "[improves Pact of the Blade]", prereqeval : function(v) { return classes.known.warlock.level >= 5 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the blade'; } }); AddWarlockInvocation("Frost Lance (prereq: Eldritch Blast cantrip)", { // Still valid 2021-09-21 name : "Frost Lance", description : desc([ "Once per turn when my Eldritch Blast hits a creature, I can reduce its speed by 10 ft", "This speed reduction lasts until the end of my next turn" ]), source : [["UA:RCO", 6]], submenu : "[improves Eldritch Blast]", prereqeval : function(v) { return v.hasEldritchBlast; }, calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == 'eldritch blast') fields.Description += '; 1 target -10 ft speed'; }, "When I hit a creature with my Eldritch Blast cantrip once or more times in a turn, I can reduce its speed by 10 ft until the end of my next turn." ] } }); AddWarlockInvocation("Ghostly Gaze (prereq: level 7 warlock)", { name : "Ghostly Gaze", description : desc([ "As an action, I can see through solid objects out to 30 ft, until the end of my current turn", "Objects appear ghostly to me; I also gain 30 ft darkvision for the duration" ]), source : [["UA:RCO", 6]], submenu : "[warlock level 7+]", prereqeval : function(v) { return classes.known.warlock.level >= 7; }, recovery : "short rest", usages : 1, action : [["action", ""]] }); AddWarlockInvocation("Improved Pact Weapon (prereq: Pact of the Blade)", { name : "Improved Pact Weapon", description : desc([ "I can use any pact weapon I create as my spellcasting focus for warlock spells", "Any pact weapon I create is a +1 magic weapon, if it isn't already a +1 magic weapon" ]), source : [["UA:RCO", 6]], submenu : "[improves Pact of the Blade]", prereqeval : function(v) { return GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the blade'; }, calcChanges : { atkCalc : [ function (fields, v, output) { // Test if this is a pact weapon, has no + bonus from somewhere else, and doesn't already have a improved pact weapon bonus if (v.pactWeapon && !output.magic) { var bContinue = true; // Now test if this isn't a weaponOptions addition with a static + bonus set to the modifier fields if (v.theWea.isMagicWeapon && v.theWea.modifiers) { // Test the first two modifiers to see if both offer a +1 or more. Returns `true` if one contains no numbers or is less than the improved pact weapon bonus var bContinue = v.theWea.modifiers.slice(0, 2).some(function (n) { if (!n || !/\d/.test(n)) { var nmbr = 0; } else if (isNaN(n)) { var nmbr = n.match(/(^|\+|-)\d+\b/g); nmbr = !nmbr ? 0 : nmbr.reduce(function(a, b) {return Number(a) + Number(b)}); } else { var nmbr = Number(n); } return nmbr < 1; }); } // if the continue boolean wasn't set to false, we can proceed if (bContinue) { v.pactMag = 1; output.magic = 1; } }; }, "If my Pact Weapon doesn't already include a magical bonus in its name and is not a magic weapon with at least a +1 bonus, the calculation will add +1 to its To Hit and Damage." ] } }); AddWarlockInvocation("Kiss of Mephistopheles (prereq: level 5 warlock, Eldritch Blast cantrip)", { name : "Kiss of Mephistopheles", description : desc([ "As a bonus action when my Eldritch Blast hits, I can cast Fireball using a warlock spell slot", "The origin of the Fireball is the creature that was hit with my Eldritch Blast attack" ]), source : [["UA:RCO", 6]], submenu : "[improves Eldritch Blast]", prereqeval : function(v) { return v.hasEldritchBlast && classes.known.warlock.level >= 5; }, action : [["bonus action", ""]] }); AddWarlockInvocation("Maddening Hex (prereq: level 5 warlock)", { name : "Maddening Hex", description : desc([ "As a bonus action, I cause pain around a target affected by a hex of mine (spell/feature)", "It and any of my choice within 5 ft of it take my Cha mod (min 0) in psychic damage" ]), source : [["UA:RCO", 6]], submenu : "[warlock level 5+]", prereqeval : function(v) { return classes.known.warlock.level >= 5; }, action : [["bonus action", ""]] }); AddWarlockInvocation("Relentless Hex (prereq: level 7 warlock)", { name : "Relentless Hex", description : desc([ "As a bonus action, I can teleport next to a target affected by a hex of mine (spell/feature)", "To do so, I must see the target and the space I'm teleporting to, and be within 30 ft of it" ]), source : [["UA:RCO", 6]], submenu : "[warlock level 7+]", prereqeval : function(v) { return classes.known.warlock.level >= 7; }, action : [["bonus action", ""]] }); // ua_20170911_Eladrin-and-Gith.js // This file adds the content from the Unearthed Arcana: Eladrin and Gith article to MPMB's Character Record Sheet // Define the source SourceList["UA:EnG"] = { name : "Unearthed Arcana: Eladrin and Gith", abbreviation : "UA:EnG", group : "Unearthed Arcana", url : "https://media.wizards.com/2017/dnd/downloads/UA-Eladrin-Gith.pdf", date : "2017/09/11" }; // Adds three races: // Alternative version of the Eladrin RaceList["eladrin-uaeng"] = { regExpSearch : /^(?!.*half)((?=.*eladrin)|((?=.*\b(elfs?|elves|elvish|elven)\b)(?=.*\b(feys?|feywild)\b))).*$/i, name : "Eladrin", sortname : "Elf, Fey (Eladrin)", source : [["UA:EnG", 1]], plural : "Eladrin", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Elvish"], vision : [["Darkvision", 60]], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["charmed"] }, skills : ["Perception"], age : " typically claim adulthood around age 100 and can live to be 750 years old", height : " range from under 5 to over 6 feet tall (4'6\" + 2d12\")", weight : " weigh around 115 lb (90 + 2d12 \xD7 1d4 lb)", heightMetric : " range from under 1,5 to over 1,8 metres tall (140 + 5d12 cm)", weightMetric : " weigh around 55 kg (40 + 5d12 \xD7 2d4 / 10 kg)", scorestxt : "+2 Dexterity, +1 Intelligence or Charisma", scores : [0, 2, 0, 0, 0, 0], trait : "Eladrin (+2 Dexterity, +1 Intelligence or Charisma)\nTrance: Elves don't need to sleep, but meditate semiconsciously, for 4 hours a day. This gives the same benefit as a human gets from 8 hours of sleep (long rest takes only 4 hours).\nFey Step: Once per short rest, as a bonus action, I can magically teleport up to 30 ft to an unoccupied space I can see." + (typePF ? "\n" : " ") + "Shifting Seasons: After a short or long rest, I can align myself with a season, granting me access to a cantrip until my next rest: Friends, Chill Touch, Minor Illusion, or Fire Bolt. My spellcasting ability for this is Int or Cha, whichever is higher.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Shifting Seasons", spells : ["friends", "chill touch", "minor illusion", "fire bolt"], selection : ["friends", "chill touch", "minor illusion", "fire bolt"], firstCol : "checkbox", times : 4 }], features : { "fey step" : { name : "Fey Step", minlevel : 1, usages : 1, recovery : "short rest", action : [["bonus action", ""]] } } }; // Githyanki and its two variants RaceList["githyanki-ua"] = { regExpSearch : /githyanki/i, name : "Githyanki", source : [["UA:EnG", 2]], plural : "Githyanki", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Gith", 1], armorProfs : [true, true, false, false], skillstxt : "Choose any one skill or tool", age : " reach adulthood in their late teens and live for about a century", height : " are more leaner and taller than humans, most are a slender 6 feet tall (5'0\" + 2d12\")", weight : " weigh around 135 lb (100 + 2d12 \xD7 2d4 lb)", heightMetric : " are more leaner and taller than humans, most are a slender 1,8 metres tall (150 + 5d12 cm)", weightMetric : " weigh around 61 kg (45 + 5d10 \xD7 4d4 / 10 kg)", scores : [2, 0, 0, 1, 0, 0], trait : "Githyanki (+2 Strength, +1 Intelligence)\nGithyanki Psionics:" + desc([ "I know the Mage Hand cantrip.", "At 3rd level, I can cast the Jump spell once per long rest.", "At 5th level, I can also cast the Misty Step spell once per long rest.", "Intelligence is my spellcasting ability for these spells.", "I don't require components to cast these spells." ]), spellcastingAbility : 4, spellcastingBonus : [{ name : "Githyanki Psionics (1)", spells : ["mage hand"], selection : ["mage hand"], firstCol : 'atwill' }], features : { "jump" : { name : "Githyanki Psionics (level 3)", limfeaname : "Jump", minlevel : 3, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Githyanki Psionics (3)", spells : ["jump"], selection : ["jump"], firstCol : 'oncelr' }] }, "misty step" : { name : "Githyanki Psionics (level 5)", limfeaname : "Misty Step", minlevel : 5, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Githyanki Psionics (5)", spells : ["misty step"], selection : ["misty step"], firstCol : 'oncelr' }] } } }; AddRacialVariant("githyanki-ua", "tool proficiency", { regExpSearch : /tool proficiency/i, toolProfs : [["Any tool", 1]] }); AddRacialVariant("githyanki-ua", "skill proficiency", { regExpSearch : /skill proficiency/i, skillstxt : "Choose any one skill" }); // Githzerai RaceList["githzerai-ua"] = { regExpSearch : /githzerai/i, name : "Githzerai", source : [["UA:EnG", 3]], plural : "Githzerai", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Gith"], age : " reach adulthood in their late teens and live for about a century", height : " are more leaner and taller than humans, most are a slender 6 feet tall (4'11\" + 2d12\")", weight : " weigh around 115 lb (90 + 2d12 \xD7 1d4 lb)", heightMetric : " are more leaner and taller than humans, most are a slender 1,8 metres tall (150 + 5d12 cm)", weightMetric : " weigh around 55 kg (40 + 5d10 \xD7 2d4 / 10 kg)", scores : [0, 0, 0, 1, 2, 0], trait : "Githzerai (+1 Intelligence, +2 Wisdom)\n" + (typePF ? "\n" : "") + "Monastic Training: I gain a +1 bonus to AC while I'm not wearing medium or heavy armor and not using a shield.\n\nGithzerai Psionics: I know the Mage Hand cantrip. At 3rd level, I can cast the Shield spell once per long rest. At 5th level, I can also cast the Detect Thoughts spell once per long rest. Wisdom is my spellcasting ability for these spells.", spellcastingAbility : 5, spellcastingBonus : [{ name : "Githzerai Psionics (1)", spells : ["mage hand"], selection : ["mage hand"], firstCol : 'atwill' }], features : { "shield" : { name : "Githzerai Psionics (level 3)", limfeaname : "Shield", minlevel : 3, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Githzerai Psionics (3)", spells : ["shield"], selection : ["shield"], firstCol : 'oncelr' }] }, "detect thoughts" : { name : "Githzerai Psionics (level 5)", limfeaname : "Detect Thoughts", minlevel : 5, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Githzerai Psionics (5)", spells : ["detect thoughts"], selection : ["detect thoughts"], firstCol : 'oncelr' }] } }, extraAC : { name : "Monastic Training", mod : 1, text : "I gain a +1 bonus to AC while I'm not wearing medium or heavy armor and not using a shield.", stopeval : function (v) { return v.mediumArmor || v.heavyArmor || v.usingShield; } } }; // ua_20171009_Fiendish-Options.js // This file adds the content from the Unearthed Arcana: Fiendish Options article to MPMB's Character Record Sheet // Define the source SourceList["UA:FO"] = { name : "Unearthed Arcana: Fiendish Options", abbreviation : "UA:FO", group : "Unearthed Arcana", url : "https://media.wizards.com/2017/dnd/downloads/UA_FiendishOptions.pdf", date : "2017/10/09" }; // Adds 8 subraces for the Tiefling, even though it doesn't have any in the PHB/SRD // Much of this code was contributed by Friedrich RaceList["dispater tiefling-ua"] = { regExpSearch : /^(?=.*dispater)(?=.*tiefling|planetouched).*$/i, name : "Dispater tiefling", sortname : "Tiefling, Dispater", source : [["UA:FO", 1]], plural : "Dispater tieflings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Infernal"], vision : [["Darkvision", 60]], dmgres : ["Fire"], age : " reach adulthood in their late teens and live around 100 years", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 1, 0, 0, 0, 2], trait : "Dispater Tiefling (+1 Dexterity, +2 Charisma)\n\nLegacy of Dis:\n I know the Thaumaturgy cantrip.\n At 3rd level, I can cast the Disguise Self spell once per long rest.\n At 5th level, I can also cast the Invisibility spell once per long rest.\n Charisma is my spellcasting ability for these spells.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Legacy of Dis (level 1)", spells : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : 'atwill' }], features : { "disguise self" : { name : "Legacy of Dis (level 3)", limfeaname : "Disguise Self", minlevel : 3, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Legacy of Dis (level 3)", spells : ["disguise self"], selection : ["disguise self"], firstCol : 'oncelr' }] }, "invisibility" : { name : "Legacy of Dis (level 5)", limfeaname : "Invisibility", minlevel : 5, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Legacy of Dis (level 5)", spells : ["invisibility"], selection : ["invisibility"], firstCol : 'oncelr' }] } } }; RaceList["mephistopheles tiefling-ua"] = { regExpSearch : /^(?=.*mephistopheles)(?=.*tiefling|planetouched).*$/i, name : "Mephistopheles tiefling", sortname : "Tiefling, Mephistopheles", source : [["UA:FO", 2]], plural : "Mephistopheles tieflings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Infernal"], vision : [["Darkvision", 60]], dmgres : ["Fire"], age : " reach adulthood in their late teens and live around 100 years", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 0, 0, 1, 0, 2], trait : "Mephistopheles Tiefling (+1 Intelligence, +2 Charisma)\n\nLegacy of Cania:\n I know the Mage Hand cantrip.\n At 3rd level, I can cast the Magic Missile spell once per long rest as a 2nd-level spell.\n At 5th level, I can also cast the Web spell once per long rest.\n Charisma is my spellcasting ability for these spells.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Legacy of Cania (level 1)", spells : ["mage hand"], selection : ["mage hand"], firstCol : 'atwill' }], features : { "magic missile" : { name : "Legacy of Cania (level 3)", limfeaname : "Magic Missile (2 darts)", minlevel : 3, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Legacy of Cania (level 3)", spells : ["magic missile"], selection : ["magic missile"], firstCol : 'oncelr' }], spellChanges : { "magic missile" : { description : "4 darts hit creature(s) I can see for 1d4+1 Force dmg per dart", changes : "Using Legacy of Cania, I cast Magic Missile as if I'm using a 2nd-level spell slot." } } }, "web" : { name : "Legacy of Cania (level 5)", limfeaname : "Web", minlevel : 5, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Legacy of Cania (level 5)", spells : ["web"], selection : ["web"], firstCol : 'oncelr' }] } } }; // ua_20171113_Elf-Subraces.js // This file adds the content from the Unearthed Arcana: Elf Subraces article to MPMB's Character Record Sheet // Define the source SourceList["UA:ES"] = { name : "Unearthed Arcana: Elf Subraces", abbreviation : "UA:ES", group : "Unearthed Arcana", url : "https://media.wizards.com/2017/dnd/downloads/UA-ElfSubraces.pdf", date : "2017/11/13" }; // Adds 4 new subraces for the elf RaceList["avariel-ua"] = { regExpSearch : /^(?!.*half)((?=.*avariel)|((?=.*\b(elfs?|elves|elvish|elven)\b)(?=.*\b(winged?|wings?|flying|air)\b))).*$/i, name : "Avariel", sortname : "Elf, Winged (Avariel)", source : [["UA:ES", 1]], plural : "Avariel", size : 3, speed : { walk : { spd : 30, enc : 20 }, fly : { spd : 30, enc : 0 } }, languageProfs : ["Common", "Elvish", "Auran"], vision : [["Darkvision", 60]], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["charmed"] }, skills : ["Perception"], age : " typically claim adulthood around age 100 and can live to be 750 years old", height : " range from 5 to over 6 feet tall (4'8\" + 2d10\")", weight : " weigh around 115 lb (90 + 2d10 \xD7 1d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d10 cm)", weightMetric : " weigh around 55 kg (40 + 5d10 \xD7 2d4 / 10 kg)", scores : [0, 2, 0, 0, 0, 0], trait : "Avariel (+2 Dexterity)\nTrance: Elves don't need to sleep, but meditate semiconsciously, for 4 hours a day. While meditating, I can dream after a fashion; such dreams are actually mental exercises that have become reflexive through years of practice. After resting in this way, I gain the same benefit that a human does from 8 hours of sleep, thus needing only 4 hours for a long rest.\nFlight: I have a flying speed of 30 feet. To use this speed, I can't be wearing medium or heavy armor." }; RaceList["grugach elf-ua"] = { regExpSearch : /^(?!.*half)((?=.*grugach)|((?=.*\b(elfs?|elves|elvish|elven)\b)(?=.*\b(wilds?|wilderness)\b))).*$/i, name : "Grugach", sortname : "Elf, Wild (Grugach)", source : [["UA:ES", 1]], plural : "Grugach", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Elvish", "Sylvan"], vision : [["Darkvision", 60]], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["charmed"] }, weaponProfs : [false, false, ["spear", "longbow", "shortbow", "net"]], skills : ["Perception"], age : " typically claim adulthood around age 100 and can live to be 750 years old", height : " stand around 5 feet tall (4'5\" + 2d6\")", weight : " weigh around 100 lb (75 + 2d6 \xD7 1d6 lb)", heightMetric : " range from well under to well over 1,5 metres tall (135 + 5d6 cm)", weightMetric : " weigh around 45 kg (35 + 5d6 \xD7 2d6 / 10 kg)", scores : [1, 2, 0, 0, 0, 0], trait : "Grugach (+1 Strength, +2 Dexterity)\nTrance: Elves don't need to sleep, but meditate semiconsciously, for 4 hours a day. While meditating, I can dream after a fashion; such dreams are actually mental exercises that have become reflexive through years of practice. After resting in this way, I gain the same benefit that a human does from 8 hours of sleep, thus needing only 4 hours for a long rest.\nCantrip: I know one cantrip of my choice from the druid spell list. Wisdom is my spellcasting ability for it.", spellcastingAbility : 5, spellcastingBonus : [{ name : "Grugach Cantrip", "class" : "druid", level : [0, 0], firstCol : 'atwill' }], eval : function () { RemoveLangTool('language', 'Common'); } }; // Edit the Wood Elf PHB entry, if available, to not match on Grugach if (RaceList["wood elf"]) { RaceList["wood elf"].regExpSearch = RaceList["wood elf"].regExpSearch.replace(/grugach\|?|wilds\?\|?/g, ""); } RaceList["shadar-kai elf-ua"] = { regExpSearch : /^(?!.*half)((?=.*shadar-kai)|((?=.*\b(elfs?|elves|elvish|elven)\b)(?=.*\b(shadows?|shadowfell)\b))).*$/i, name : "Shadar-kai", sortname : "Elf, Shadow (Shadar-kai)", source : [["UA:ES", 2]], plural : "Shadar-kai", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Elvish"], vision : [["Darkvision", 60]], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["charmed"] }, skills : ["Perception"], age : " typically claim adulthood around age 100 and can live to be 750 years old", height : " range from under 5 to over 6 feet tall (4'8\" + 2d8\")", weight : " weigh around 115 lb (90 + 2d8 \xD7 1d4 lb)", heightMetric : " range from under 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 52 kg (40 + 5d8 \xD7 2d4 / 10 kg)", scores : [0, 2, 0, 0, 0, 1], trait : "Shadar-kai (+2 Dexterity, +1 Charisma)\nTrance: Elves don't need to sleep, but meditate semiconsciously, for 4 hours a day. This gives the same benefit as a human gets from 8 hours of sleep (long rest takes only 4 hours).\nBlessing of the Raven Queen: Once per short rest, as a bonus action, I can magically teleport up to 15 ft to an unoccupied space I can see, and, until the start of my next turn, I have resistance to all damage and appear translucent." + (typePF ? "\n" : " ") + "Cantrip: I know one cantrip: Chill Touch, Spare the Dying, or Thaumaturgy. Charisma is my spellcasting ability for it.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Shadar-kai Cantrip", spells : ["chill touch", "spare the dying", "thaumaturgy"], firstCol : 'atwill' }], features : { "blessing of the raven queen" : { name : "Blessing of the Raven Queen", minlevel : 1, usages : 1, recovery : "short rest", action : [["bonus action", ""]] } } }; // ua_20180108_Three-Subclasses.js // This file adds the content from the Unearthed Arcana: Three Subclasses article to MPMB's Character Record Sheet // Define the source SourceList["UA:TS"] = { name : "Unearthed Arcana: Three Subclasses", abbreviation : "UA:TS", group : "Unearthed Arcana", url : "https://media.wizards.com/2018/dnd/downloads/UA-3Subclasses0108.pdf", date : "2018/01/08" }; // Adds 3 subclasses: 1 for the Druid, 1 for the Fighter, and 1 for the Wizard AddSubClass("druid", "circle of spores-ua", { regExpSearch : /^(?=.*(druid|shaman))(?=.*spores).*$/i, subname : "Circle of Spores", subnameShort: "Spores", source : [["UA:TS", 1]], features : { "subclassfeature2" : { name : "Circle Spells", source : [["UA:TS", 1]], minlevel : 2, description : desc([ "My link to the cycle of life and death gives me with the ability to cast certain spells", "These are always prepared, but don't count against the number of spells I can prepare", "In addition, I learn the Chill Touch cantrip" ]), spellcastingBonus : [{ name : "Circle Spells", spells : ["chill touch"], selection : ["chill touch"], firstCol : 'atwill' }], spellcastingExtra : ["gentle repose", "ray of enfeeblement", "animate dead", "gaseous form", "blight", "confusion", "cloudkill", "contagion"] }, "subclassfeature2.1" : { name : "Halo of Spores", source : [["UA:TS", 1]], minlevel : 2, description: desc("As a reaction on my turn, I can do poison damage to one creature I can see within 10 ft"), additional : levels.map(function (n) { return n < 2 ? "" : (n < 6 ? 3 : n < 10 ? 6 : n < 14 ? 9 : 12) + " poison damage"; }), action : [["reaction", " (on my turn)"]] }, "subclassfeature2.2" : { name : "Symbiotic Entity", source : [["UA:TS", 1]], minlevel : 2, description : desc([ "As an action, I expend a Wild Shape use to boost my spores instead of transforming", "I then gain 3 temporary HP per druid level and my Halo of Spores does double damage", "Also, my melee weapon attacks do +1d6 poison damage with every hit", "This lasts for 10 minutes or until I use Wild Shape again" ]), additional : levels.map(function (n) { return n < 2 ? "" : Math.floor(n*3) + " temp HP; Halo of Spores: " + (n < 6 ? 6 : n < 10 ? 12 : n < 14 ? 18 : 24) + " damage"; }), action : [["action", ""]], calcChanges : { atkAdd : [ function (fields, v) { if (v.isMeleeWeapon && (/\b(spore|symbiotic)\b/i).test(v.WeaponTextName)) { fields.Description += (fields.Description ? '; ' : '') + '+1d6 poison damage'; }; }, "If I include the word 'Spore' or 'Symbiotic' in a melee weapon's name or description, it gets treated as a weapon that is infused by my Symbiotic Entity feature, adding +1d6 poison damage in the description." ] } }, "subclassfeature6" : { name : "Fungal Infestation", source : [["UA:TS", 2]], minlevel : 6, description : desc([ "If I kill a humanoid with my Halo of Spores, it rises as a zombie at the end of my turn", "This zombie has 1 HP, only takes the Attack action, and can only make 1 attack with it", "It follows my mental commands and takes it turn after mine; It lasts for 1 hour" ]) }, "subclassfeature10" : { name : "Spreading Spores", source : [["UA:TS", 2]], minlevel : 10, description : desc([ "As a bonus action, I create a 10-ft cube of fungal spores within 30 ft, lasting for 1 min", "Any creature starting its turn in the cube takes the damage of my Halo of Spores", "The cube ends if I use this again; While the cube persists, I can't use my Halo of Spores" ]), action : [["bonus action", ""]] }, "subclassfeature14" : { name : "Fungal Body", source : [["UA:TS", 2]], minlevel : 14, description: desc("I'm immune to critical hits and to being blinded, deafened, frightened, and poisoned"), savetxt : { immune : ["blinded", "deafened", "frightened", "poisoned", "critical hits"] } } } }); var UATS_fighterBruteSubclassUA = AddSubClass("fighter", "brute-ua", { regExpSearch : /brute/i, subname : "Brute", source : [["UA:TS", 2]], fullname : "Brute", features : { "subclassfeature3" : { name : "Brute Force", source : [["UA:TS", 2]], minlevel : 3, description: desc("I do additional damage with weapons that I'm proficient with"), additional : levels.map(function (n) { return n < 3 ? "" : "+1d" + (n < 10 ? 4 : n < 16 ? 6 : n < 20 ? 8 : 10) + " weapon damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.fighter && classes.known.fighter.level > 2 && !v.isSpell && !v.isNaturalWeapon && fields.Proficiency) { fields.Description += (fields.Description ? '; ' : '') + '+1d' + (classes.known.fighter.level < 10 ? 4 : classes.known.fighter.level < 16 ? 6 : classes.known.fighter.level < 20 ? 8 : 10) + ' damage'; }; }, "I do +1d4 damage with weapons that I'm proficient with. This increases to 1d6 at 10th level, 1d8 at 16th level, and 1d10 at 20th level." ] } }, "subclassfeature7" : { name : "Brutish Durability", source : [["UA:TS", 2]], minlevel : 7, description : desc([ "I add +1d6 to all my saving throws, including death saves", "If the total of a death save is 20 or more, it counts as rolling a 20" ]), savetxt : { text : ["Add 1d6 to all saves"] } }, "subclassfeature15" : { name : "Devastating Critical", source : [["UA:TS", 2]], minlevel : 15, description: desc("Whenever I score a critical hit with a weapon, I add my fighter level to the damage"), additional : levels.map(function (n) { return n < 15 ? "" : "+" + n + " damage on crit"; }) }, "subclassfeature18" : { name : "Survivor", source : [["UA:TS", 2]], minlevel : 18, description : desc([ "If I have less than half my max HP at the start of my turn, I heal myself", "I regain HP equal to 5 + Constitution modifier (min 1); This doesn't work if I'm at 0 HP" ]) } } }); RunFunctionAtEnd(function () { var FSfea = newObj(ClassList.fighter.features["fighting style"]); FSfea.name = "Additional Fighting Style"; FSfea.source = ["UA:TS", 2]; FSfea.minlevel = 10; FSfea.extrachoices = ""; FSfea.description = desc('Choose an Additional Fighting Style using the "Choose Feature" button above'); ClassSubList[UATS_fighterBruteSubclassUA].features.subclassfeature10 = FSfea; }); AddSubClass("wizard", "school of invention-ua", { regExpSearch : /^(?=.*wizard)(?=.*invent(ion|or)).*$/i, subname : "School of Invention", subnameShort: "Invention", fullname : "Wizard (Inventor)", source : [["UA:TS", 2]], features : { "subclassfeature2" : { name : "Tools of the Inventor", source : [["UA:TS", 3]], minlevel : 2, description: desc("I gain proficiency with light armor and two tools of my choice"), toolProfs : [["Any one tool", 2]], armorProfs : [true, false, false, false] }, "subclassfeature2.1" : { name : "Arcanomechanical Armor", source : [["UA:TS", 3]], minlevel : 2, description : desc([ "After a long rest, I can transform a studded leather armor into arcanomechanical armor", "This is a magic light armor that gives AC 12 + Dex mod and force resistance, if attuned", "Only I can attune to it; Creating a new one removes the magic from the previous" ]), dmgres : ["Force"], armorOptions : [{ regExpSearch : /arcanomechanical/i, name : "Arcanomechanical", source : [["UA:TS", 3]], type : "light", ac : 12, weight : 8, invName : "Arcanomechanical armor", selectNow : true }] }, "subclassfeature2.2" : { name : "Reckless Casting", source : [["UA:TS", 3]], minlevel : 2, description : desc([ "As an action, I can attempt to cast a random spell or cantrip by rolling a d10 on a table", "On a roll of 10, I roll again twice on that table and cast both results", "However, if I then roll 10 on either dice, the whole casting fails and the action is wasted", "If I choose cantrip, I roll on the table once and cast the result", "If I choose a spell, I expend a spell slot and roll twice on the table for the slot's level", "I can then choose which of the results I use; Use 5th-level table for spell slots over level 5" ]), toNotesPage : [{ name : "Reckless Casting Tables", note : "\nd10\tCantrip\t\td10\tCantrip" + desc([ " 1\tAcid Splash\t\t 6\tRay of Frost", " 2\tChill Touch\t\t 7\tShocking Grasp", " 3\tFire Bolt\t\t 8\tSacred Flame", " 4\tLight\t\t 9\tThorn Whip", " 5\tPoison Spray\t 10\tRoll twice; Another 10, all is wasted" ]) + "\n\nd10\t1st-Level Spell\td10\t1st-Level Spell" + desc([ " 1\tBurning Hands\t 6\tFog Cloud", " 2\tChromatic Orb\t 7\tJump", " 3\tColor Spray\t\t 8\tMagic Missile", " 4\tFaerie Fire\t\t 9\tThunderwave", " 5\tFalse Life\t\t 10\tRoll twice; Another 10, all is wasted" ]) + "\n\nd10\t2nd-Level Spell\td10\t2nd-Level Spell" + desc([ " 1\tBlur\t\t 6\tLevitate", " 2\tDarkness\t\t 7\tMelf's Acid Arrow", " 3\tEnlarge/Reduce\t 8\tScorching Ray", " 4\tGust of Wind\t 9\tShatter", " 5\tInvisibility\t\t 10\tRoll twice; Another 10, all is wasted" ]) + "\n\nd10\t3rd-Level Spell\td10\t3rd-Level Spell" + desc([ " 1\tBlink\t\t 6\tGaseous Form", " 2\tFear\t\t 7\tLightning Bolt", " 3\tFeign Death \t 8\tSleet Storm", " 4\tFireball\t\t 9\tStinking Cloud", " 5\tFly\t\t 10\tRoll twice; Another 10, all is wasted" ]) + "\n\nd10\t4th-Level Spell\td10\t4th-Level Spell" + desc([ " 1\tBlight\t\t 6\tIce Storm", " 2\tConfusion\t\t 7\tPhantasmal Killer", " 3\tEvard's Black Tentacles\t 8\tStoneskin", " 4\tFire Shield\t\t 9\tWall of Fire", " 5\tGreater Invisibility\t 10\tRoll twice; Another 10, all is wasted" ]) + "\n\nd10\t5th-Level Spell\td10\t5th-Level Spell" + desc([ " 1\tCloudkill\t\t 6\tInsect Plague", " 2\tCone of Cold\t 7\tMass Cure Wounds", " 3\tDestructive Wave\t 8\tWall of Force", " 4\tFlame Strike\t 9\tWall of Stone", " 5\tHold Monster\t 10\tRoll twice; Another 10, all is wasted" ]) }] }, "subclassfeature6" : { name : "Alchemical Casting", source : [["UA:TS", 4]], minlevel : 6, description : desc([ "I can manipulate spells cast while wearing and attuned to my Arcanomechanical Armor", "By expending an additional 1st or 2nd-level spell slot, I do the following:", "\u2022 1st: I can substitute acid, cold, fire, lightning, or thunder damage for another type", "\u2022 2nd: I increase the spells damage, if any, by 2d10 force damage against one target" ]) }, "subclassfeature10" : { name : "Prodigious Inspiration", source : [["UA:TS", 4]], minlevel : 10, description: desc("As a bonus action, I can replace a prepared spell with another from my spellbook"), usages : 1, recovery : "short rest", action : [["bonus action", ""]] }, "subclassfeature14" : { name : "Controlled Chaos", source : [["UA:TS", 4]], minlevel : 14, description : desc([ "When I expend a spell slot to cast a spell using Reckless Casting, it is more powerful", "I can roll on the table that is one level higher than the spell slot expended" ]) } } }); // ua_20180409_Order-Domain.js // This file adds the content from the Unearthed Arcana: Order Domain article to MPMB's Character Record Sheet // Define the source SourceList["UA:OD"] = { name : "Unearthed Arcana: Order Domain", abbreviation : "UA:OD", group : "Unearthed Arcana", url : "https://media.wizards.com/2018/dnd/downloads/UA_OrderDomain.pdf", date : "2018/04/09" }; // New Subclass for Cleric: Order Domain AddSubClass("cleric", "order domain-ua", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*order).*$/i, subname : "Order Domain", source : [["UA:OD", 1]], spellcastingExtra : ["command", "heroism", "enhance ability", "hold person", "mass healing word", "slow", "compulsion", "locate creature", "commune", "dominate person"], features : { "subclassfeature1" : { name : "Bonus Proficiency", source : [["UA:OD", 1]], minlevel : 1, description: desc("I gain proficiency with heavy armor"), armorProfs : [false, false, true, false] }, "subclassfeature1.1" : { name : "Voice of Authority", source : [["UA:OD", 1]], minlevel : 1, description : desc([ "Whenever I use a spell slot to cast a spell on an ally, it can use its reaction to attack", "The ally makes one weapon attack against a target of my choice that I can see", "If the spell targets multiple allies, I can choose which one can make the attack" ]) }, "subclassfeature2" : { name : "Channel Divinity: Order's Demand", source : [["UA:OD", 1]], minlevel : 2, description : desc([ "As an action, all chosen targets in 30 ft that can see or hear me must make a Wis save", "If failed, it is charmed by me until the end of my next turn or it takes any damage", "Also, I can choose to have any of the charmed targets to fall prone on a failed save" ]), action : [["action", ""]] }, "subclassfeature6" : { name : "Order's Dominion", source : [["UA:OD", 2]], minlevel : 6, description : desc([ "When I cast an enchantment spell using a spell slot, I regain one expended spell slot", "The regained slot must be lower level than the one used, and no higher than 5th-level" ]) }, "subclassfeature8" : { name : "Divine Strike", source : [["UA:OD", 2]], minlevel : 8, description: desc("Once per turn, when I hit a creature with a weapon attack, I can do extra damage"), additional : levels.map(function (n) { if (n < 8) return ""; return "+" + (n < 14 ? 1 : 2) + "d8 force damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && v.isWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.cleric.level < 14 ? 1 : 2) + 'd8 force damage'; } }, "Once per turn, I can have one of my weapon attacks that hit do extra force damage." ] } }, "subclassfeature17" : { name : "Order's Wrath", source : [["UA:OD", 2]], minlevel : 17, description : desc([ "If I deal my Divine Strike damage to a creature, it takes extra damage from my allies", "The first time each turn that it is hit with a weapon attack, it takes 2d8 force damage" ]) } } }); // ua_20180514_Centaur-and-Minotaur.js // This file adds the content from the Unearthed Arcana: Centaur and Minotaur article to MPMB's Character Record Sheet // Define the source SourceList["UA:CnM"] = { name : "Unearthed Arcana: Centaur and Minotaur", abbreviation : "UA:CnM", group : "Unearthed Arcana", url : "https://media.wizards.com/2018/dnd/downloads/UA-Centaur.pdf", date : "2018/05/14" }; // Add the Centaur race RaceList["centaur-ua"] = { regExpSearch : /centaur/i, name : "Centaur", sortname : "Centaur", source : [["UA:CnM", 1]], plural : "Centaurs", size : 3, speed : { walk : { spd : 40, enc : 30 } }, languageProfs : ["Common", "Sylvan"], weaponOptions : [{ regExpSearch : /\b(hoofs?|hooves)\b/i, name : "Hooves", source : [["UA:CnM", 2]], ability : 1, type : "Natural", damage : [1, 6, "bludgeoning"], range : "Melee", abilitytodamage : true, selectNow : true }], skills : ["Survival"], age : " reach adulthood in their late teens and live around 100 years", height : " stand between 7 and 8 feet tall (front hooves to their crowns) and 6 to 8 feet long (from their chest to the back of their rumps)", // from 3.5e Races of Faerun weight : " weigh anywhere from 950 to 1200 lb", // from 3.5e Races of Faerun heightMetric : " stand between 2,1 and 2,4 metres tall (front hooves to their crowns) and 1,8 to 2,4 metres long (from their chests to the back of their rumps)", weightMetric : " weigh anywhere from 430 to 550 kg", scores : [2, 0, 0, 0, 1, 0], trait : "Centaur (+2 Strength +1 Wisdom)" + desc([ "Hooves: I can use my hooves in melee (1d6 bludgeoning damage).", "Charge: Once per short rest, if I move 20 ft straight toward a creature and then hit it with a melee weapon attack on the same turn, I can roll the weapon's damage dice twice.", "Equine Build: I count as one size larger for my carrying capacity. While climbing, 1 ft of movement costs me 5 ft. A medium or smaller creature can ride me as a mount.", "Hybrid Nature: I am affected by effects that work on either humanoids or monstrosities." ]), features : { "charge" : { name : "Charge", minlevel : 1, usages : 1, recovery : "short rest" } }, carryingCapacity : 2 }; // Add the Minotaur race RaceList["minotaur-uacnm"] = { regExpSearch : /minotaur/i, name : "Minotaur", sortname : "Minotaur", source : [["UA:CnM", 2]], plural : "Minotaurs", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Minotaur"], weaponOptions : [{ regExpSearch : /\bhorns?\b/i, name : "Horns", source : [["UA:CnM", 2]], ability : 1, type : "Natural", damage : [1, 6, "piercing"], range : "Melee", description : "One horns attack as a bonus action if taking the Dash action", abilitytodamage : true, selectNow : true }], skills : ["Intimidation"], age : " reach adulthood around age 17 and live up to 150 years", height : " are well over 6 feet tall", weight : " weigh around 300 lb", heightMetric : " are well over 1,8 metres tall", weightMetric : " weigh around 135 kg", scores : [2, 0, 1, 0, 0, 0], abilitySave : 1, trait : "Minotaur (+2 Strength +1 Constitution)" + desc([ "Horns: I have horns that I can use in melee (1d6 piercing damage).", "Goring Rush: When taking a Dash action, I can make a horns attack as a bonus action.", "Hammering Horns: As a reaction after I hit a melee attack during my Attack action, I can shove that target with my horns, if it is no more than one size larger than me. It must make a Str save (DC 8 + Str mod + Prof Bonus) or be pushed up to 5 ft away from me.", "Hybrid Nature: I am affected by effects that work on either humanoids or monstrosities." ]), features : { "goring rush" : { name : "Goring Rush", minlevel : 1, action : [["bonus action", " (with Dash)"]] }, "hammering horns" : { name : "Hammering Horns", minlevel : 1, action : [["reaction", " (after hit)"]] } } }; // ua_20180611_Giant-Soul-Sorcerer.js // This file adds the content from the Unearthed Arcana: Giant Soul Sorcerer article to MPMB's Character Record Sheet // Define the source SourceList["UA:GSS"] = { name : "Unearthed Arcana: Giant Soul Sorcerer", abbreviation : "UA:GSS", group : "Unearthed Arcana", url : "https://media.wizards.com/2018/dnd/downloads/UA_GiantSoul.pdf", date : "2018/06/11" }; AddSubClass("sorcerer", "giant soul-ua", { regExpSearch : /^(?=.*giant)(?=.*soul)(?=.*sorcerer).*$/i, subname : "Giant Soul", source : [["UA:GSS", 1]], fullname : "Giant Soul Sorcerer", features : { "subclassfeature1" : { name : "Jotun Resilience", source : [["UA:GSS", 1]], minlevel : 1, description: desc("My hit point maximum increases by an amount equal to my sorcerer level"), calcChanges : { hp : function (totalHD) { if (classes.known.sorcerer) { return [classes.known.sorcerer.level, "Jotun Resilience (sorcerer level)"]; } } } }, "subclassfeature1.1" : { name : "Mark of Ordning", source : [["UA:GSS", 1]], minlevel : 1, description : desc([ 'Choose a giant heritage using the "Choose Feature" button above', "I learn spells based on my giant heritage, which I add to my known spells" ]), choices : ["Cloud Giant", "Fire Giant", "Frost Giant", "Hill Giant", "Stone Giant", "Storm Giant"], "cloud giant" : { name : "Mark of Ordning: Cloud Giant", description : desc([ "I add Minor Illusion, Fog Cloud and Invisibility to my known sorcerer spells", "These do not count against the number of cantrips/spells I can know" ]), spellcastingBonus : [{ name : "Mark of Ordning", spells : ["minor illusion", "fog cloud", "invisibility"], selection : ["minor illusion", "fog cloud", "invisibility"], times : [2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3] }] }, "fire giant" : { name : "Mark of Ordning: Fire Giant", description : desc([ "I add Fire Bolt, Burning Hands, and Flaming Sphere to my known sorcerer spells", "These do not count against the number of cantrips/spells I can know" ]), spellcastingBonus : [{ name : "Mark of Ordning", spells : ["fire bolt", "burning hands", "flaming sphere"], selection : ["fire bolt", "burning hands", "flaming sphere"], times : [2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3] }] }, "frost giant" : { name : "Mark of Ordning: Frost Giant", description : desc([ "I add Ray of Frost, Armor of Agathys, and Hold Person to my known sorcerer spells", "These do not count against the number of cantrips/spells I can know" ]), spellcastingBonus : [{ name : "Mark of Ordning", spells : ["ray of frost", "armor of agathys", "hold person"], selection : ["ray of frost", "armor of agathys", "hold person"], times : [2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3] }] }, "hill giant" : { name : "Mark of Ordning: Hill Giant", description : desc([ "I add Shillelagh, Heroism, and Enlarge/Reduce to my known sorcerer spells", "These do not count against the number of cantrips/spells I can know" ]), spellcastingBonus : [{ name : "Mark of Ordning", spells : ["shillelagh", "heroism", "enlarge/reduce"], selection : ["shillelagh", "heroism", "enlarge/reduce"], times : [2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3] }] }, "stone giant" : { name : "Mark of Ordning: Stone Giant", description : desc([ "I add Resistance, Entangle, and Spike Growth to my known sorcerer spells", "These do not count against the number of cantrips/spells I can know" ]), spellcastingBonus : [{ name : "Mark of Ordning", spells : ["resistance", "entangle", "spike growth"], selection : ["resistance", "entangle", "spike growth"], times : [2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3] }] }, "storm giant" : { name : "Mark of Ordning: Storm Giant", description : desc([ "I add Thunderwave, Shocking Grasp, and Gust of Wind to my known sorcerer spells", "These do not count against the number of cantrips/spells I can know" ]), spellcastingBonus : [{ name : "Mark of Ordning", spells : ["thunderwave", "shocking grasp", "gust of wind"], selection : ["thunderwave", "shocking grasp", "gust of wind"], times : [2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3] }] }, choiceDependencies : [{ feature : "subclassfeature6" }] }, "subclassfeature6" : { name : "Soul of Lost Ostoria", source : [["UA:GSS", 1]], minlevel : 6, description: desc('Use the "Choose Feature" button above to select the giant heritage'), choices : ["Cloud Giant", "Fire Giant", "Frost Giant", "Hill Giant", "Stone Giant", "Storm Giant"], choicesNotInMenu : true, "cloud giant" : { name : "Soul of Lost Ostoria: Cloud Giant", description : desc([ "As a bonus action after casting any of my Mark of Ordning spells, I can teleport", "I teleport to an unoccupied space that I can see up to my Con mod + 10 ft away" ]), action : [["bonus action", ""]] }, "fire giant" : { name : "Soul of Lost Ostoria: Fire Giant", description: desc("I add my Constitution modifier (min 1) to the damage of my Mark of Ordning spells"), calcChanges : { atkCalc : [ function (fields, v, output) { if (v.baseWeaponName == 'fire bolt') output.extraDmg += Math.max(What('Con Mod'), 1); }, "I add my Constitution modifier (min 1) to the damage of my Mark of Ordning spells: Fire Bolt, Burning Hands, and Flaming Sphere" ], spellAdd : [ function (spellKey, spellObj, spName) { if (spName == "sorcerer" && (/^(fire bolt|burning hands|flaming sphere)$/i).test(spellKey)) { spellObj.description = spellObj.description.replace(/d(6|10)/, "d$1+" + Math.max(1, What("Con Mod"))); return true; }; }, "I add my Constitution modifier (min 1) to the damage of my Mark of Ordning spells: Fire Bolt, Burning Hands, and Flaming Sphere" ] } }, "frost giant" : { name : "Soul of Lost Ostoria: Frost Giant", description : desc([ "Immediately after casting any of my Mark of Ordning spells, I gain temporary HP", "I gain my Con mod in temporary HP (min 1) and its added to that of the spell (if any)" ]) }, "hill giant" : { name : "Soul of Lost Ostoria: Hill Giant", source : [["UA:GSS", 2]], description : desc([ "Immediately after casting any of my Mark of Ordning spells, I can magically push others", "I can select up to two creatures within 5 ft of me that each have to make a Str save", "If failed, it is pushed my Con mod (min 1) + 5 ft away from me; It can choose to fail" ]) }, "stone giant" : { name : "Soul of Lost Ostoria: Stone Giant", source : [["UA:GSS", 2]], description : desc([ "Immediately after casting any of my Mark of Ordning spells, I gain a bonus to AC", "My AC increases with my Constitution modifier (min +1) until the end of my next turn" ]) }, "storm giant" : { name : "Soul of Lost Ostoria: Storm Giant", source : [["UA:GSS", 2]], description : desc([ "Immediately after casting any of my Mark of Ordning spells, I shoot lightning", "Up to 3 targets in 30 ft that I can see take my Con mod (min 1) in lightning damage" ]) } }, "subclassfeature14" : { name : "Rage of Fallen Ostoria", source : [["UA:GSS", 2]], minlevel : 14, description : desc([ "When I start casting a sorcerer spell using a spell slot on my turn, I can grow in size", "It lasts for 1 min or until I die or am incapacitated; I can activate it only once per turn", "While it lasts, I enjoy the following benefits (which are cumulative, except the damage):", "\u2022 I increase size by one category (from Medium to Large, for example)", "\u2022 My current HP and maximum HP increase by a number equal to my sorcerer level", "\u2022 My reach and walking speed both increase by 5 ft", "\u2022 I gain advantage on Strength checks and Strength saving throws", "\u2022 I add my Constitution modifier to the damage of my melee weapon attacks (min +1)" ]), additional : levels.map(function(n) { return n < 14 ? "" : "+" + n + " HP"; }), usages : levels.map(function(n) { return n < 14 ? "" : n < 18 ? 1 : 2; }), recovery : "short rest" }, "subclassfeature18" : { name : "Blessing of the All Father", source : [["UA:GSS", 2]], minlevel : 18, description: desc("I add +2 to my Constitution and its maximums increases to 22"), scores : [0, 0, 2, 0, 0, 0], scoresMaximum : [0, 0, 22, 0, 0, 0] } } }); // ua_20180723_Races-of-Eberron.js // This file adds the content from the Unearthed Arcana: Races of Eberron article to MPMB's Character Record Sheet // Note that this content also appears in the script for Wayfinder's Guide to Eberron and thus both sources are included for all things here // Define the sources SourceList["UA:RoE"] = { name : "Unearthed Arcana: Races of Eberron", abbreviation : "UA:RoE", group : "Unearthed Arcana", campaignSetting : "Eberron", url : "https://media.wizards.com/2018/dnd/downloads/723UA_EberronRaces7232018.pdf", date : "2018/07/23" }; // The changeling RaceList["changeling-ua2"] = { regExpSearch : /changeling/i, name : "Changeling", source : [["WGtE", 61], ["UA:RoE", 2]], plural : "Changelings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, skillstxt : "Choose two from Deception, Intimidation, Insight, and Persuasion", languageProfs : ["Common", 2], toolProfs : [["Any tool", 1]], age : " reach adulthood in their early teens and live around 80 years", height : " stand between 5 and 6 feet tall (5'1\" + 2d4\")", weight : " weigh around 140 lb (115 + 2d4 \xD7 2d4 lb)", heightMetric : " stand between 1,5 to over 1,8 metres tall (155 + 5d4 cm)", weightMetric : " weigh around 65 kg (52 + 5d4 \xD7 4d4 / 10 kg)", scorestxt : "+2 Charisma, and +1 Dexterity or +1 Intelligence", scores : [0, 0, 0, 0, 0, 2], trait : "Changeling (+2 Charisma, and +1 Dexterity or +1 Intelligence)\nChange Appearance: As an action, I can polymorph to or from a humanoid form of my size I have seen, not changing my equipment. I revert back if I die and have adv. on Deception.\nUnsettling Visage: As a reaction once per short rest when I'm attacked by a seen attacker, I can impose disadv. Doing this reveals my shapeshifting nature to all within 30 ft.\nDivergent Persona: I have proficiency with one tool, and an alternate persona. While in the alternate form, my proficiency bonus with that tool is doubled.", action : [["action", "Change Appearance"]], features : { "unsettling visage" : { name : "Unsettling Visage", minlevel : 1, usages : 1, recovery : "short rest", action : [["reaction", ""]] } } }; // The kalashtar RaceList["kalashtar-ua"] = { //this code includes contributions by /u/SoilentBrad regExpSearch : /kalashtar/i, name : "Kalashtar", source : [["WGtE", 63], ["UA:RoE", 4]], plural : "Kalashtar", size : 3, speed : { walk : { spd : 30, enc : 20 } }, skillstxt : "Advantage with either Insight, Intimidation, Performance, or Persuasion", languageProfs : ["Common", "Quori", 1], savetxt : { immune : ["effects that require me to dream"] }, dmgres : ["Psychic"], age : " reach adulthood in their late teens and live less than 100 years", height : " range from 5 and a half to well over 6 feet tall (5'4\" + 2d6\")", weight : " weigh around 145 lb (110 + 2d6 \xD7 1d6 lb)", heightMetric : " range from 1,7 to 1,9 metres tall (160 + 5d6 cm)", weightMetric : " weigh around 65 kg (50 + 5d6 \xD7 2d6 / 10 kg)", scorestxt : "+1 Wisdom, +1 Charisma, and +1 to one other ability score of my choice", scores : [0, 0, 0, 0, 1, 1], trait : "Kalashtar (+1 Wisdom, +1 Charisma, and +1 to one other" + (typePF ? "" : " ability score of my choice") + ")\nDual Mind: As a reaction after I roll a Wis" + (typePF ? " save, I can gain adv." : "dom saving throw, I can gain advantage") + " on it.\nMind Link: I can speak telepathically to any creature I can see within 60 ft, as long as it can speak at least one language. As a bonus action, I can give that creature the ability to speak telepathically back to me until the start of my next turn.\nPsychic Glamour: I have adv. on Insight, Intimidation, Performance, or Persuasion checks.\nSevered from Dreams: I don't dream and thus immune to spells that affect dreams.", action : [['bonus action', 'Mind Link'], ['reaction', 'Dual Mind']] }; // The four subraces of the shifter RaceList["beasthide shifter-ua"] = { regExpSearch : /^(?=.*shifter)(?=.*beast)(?=.*hide).*$/i, name : "Beasthide shifter", sortname : "Shifter, Beasthide", source : [["WGtE", 66], ["UA:RoE", 6]], plural : "Beasthide shifters", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common"], vision : [["Darkvision", 60]], skills : ["Athletics", "Perception"], age : " reach young adulthood at age 10 and rarely live over 70", height : " range from under 5 to almost 6 feet tall (4'6\" + 2d8\")", weight : " weigh around 135 lb (90 + 2d8 \xD7 2d4 lb)", heightMetric : " range from under 1,5 to 1,8 metres tall (4'6\" + 5d8 cm)", weightMetric : " weigh around 65 kg (40 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 1, 2, 0, 0, 0], trait : "Beasthide Shifter: (+1 Dexterity, +2 Constitution)\n\nShifting: As a bonus action once per short rest, I can assume a more bestial appearance.\nThis transformation lasts for 1 minute, until I die, or until I revert back as a bonus action.\nWhen I shift, I gain temporary HP equal to 1d6 + my level + my Constitution modifier (minimum 1 temporary hit point).\nWhile transformed like this, I have a +1 bonus to AC", features : { "shift" : { name : "Shift", minlevel : 1, usages : 1, recovery : "short rest", action : [["bonus action", " (start/end)"]] } } }; RaceList["longtooth shifter-ua"] = { regExpSearch : /^(?=.*shifter)(?=.*long)(?=.*(tooth|teeth)).*$/i, name : "Longtooth shifter", sortname : "Shifter, Longtooth", source : [["WGtE", 66], ["UA:RoE", 6]], plural : "Longtooth shifters", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common"], weaponOptions : [{ baseWeapon : "unarmed strike", regExpSearch : /^(?=.*fangs?)(?=.*long)(?=.*(tooth|teeth)).*$/i, name : "Longtooth Fangs", source : [["WGtE", 66], ["UA:RoE", 6]], damage : [1, 6, "piercing"], description : "Only while shifted; One attack as bonus action", selectNow : true }], vision : [["Darkvision", 60]], skills : ["Intimidation", "Perception"], age : " reach young adulthood at age 10 and rarely live over 70", height : " range from under 5 to almost 6 feet tall (4'6\" + 2d8\")", weight : " weigh around 135 lb (90 + 2d8 \xD7 2d4 lb)", heightMetric : " range from under 1,5 to 1,8 metres tall (4'6\" + 5d8 cm)", weightMetric : " weigh around 65 kg (40 + 5d8 \xD7 4d4 / 10 kg)", scores : [2, 1, 0, 0, 0, 0], trait : "Longtooth Shifter: (+2 Strength, +1 Dexterity)\nShifting: As a bonus action once per short rest, I can assume a more bestial appearance.\nThis transformation lasts for 1 minute, until I die, or until I revert back as a bonus action.\nWhen I shift, I gain temporary HP equal to my level + my Constitution modifier (minimum 1 temporary hit point).\nWhile transformed like this, I use my elongated fangs to make unarmed strikes, dealing 1d6 piercing damage. As a bonus action, I can maken one attack with my fangs.", action : ['bonus action', 'Attack with Longtooth Fangs'], features : { "shift" : { name : "Shift", minlevel : 1, usages : 1, recovery : "short rest", action : [["bonus action", " (start/end)"]] } } }; RaceList["swiftstride shifter-ua"] = { regExpSearch : /^(?=.*shifter)(?=.*swift)(?=.*stride).*$/i, name : "Swiftstride shifter", sortname : "Shifter, Swiftstride", source : [["WGtE", 66], ["UA:RoE", 6]], plural : "Swiftstride shifters", size : 3, speed : { walk : { spd : 35, enc : 25 } }, languageProfs : ["Common"], vision : [["Darkvision", 60]], skills : ["Acrobatics", "Perception"], age : " reach young adulthood at age 10 and rarely live over 70", height : " range from under 5 to almost 6 feet tall (4'6\" + 2d8\")", weight : " weigh around 135 lb (90 + 2d8 \xD7 2d4 lb)", heightMetric : " range from under 1,5 to 1,8 metres tall (4'6\" + 5d8 cm)", weightMetric : " weigh around 65 kg (40 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 2, 0, 0, 0, 1], trait : "Swiftstride Shifter: (+2 Dexterity, +1 Charisma)\nShifting: As a bonus action once per short rest, I can assume a more bestial appearance.\nThis transformation lasts for 1 minute, until I die, or until I revert back as a bonus action.\nWhen I shift, I gain temporary HP equal to my level + my Con" + (typePF ? "stitution modifier (minimum 1 temporary hit point" : " mod (minimum 1 temp HP") + ").\nWhile transformed like this, my walking speed increases with 5 ft.\nAs a reaction when an enemy ends its turn within 5 ft of me while I'm shifted, I can move 10 ft without provoking opportunity attacks.", action : ['reaction', 'Stride (while shifted)'], features : { "shift" : { name : "Shift", minlevel : 1, usages : 1, recovery : "short rest", action : [["bonus action", " (start/end)"]] } } }; RaceList["wildhunt shifter-ua"] = { regExpSearch : /^(?=.*shifter)(?=.*wild)(?=.*hunt).*$/i, name : "Wildhunt shifter", sortname : "Shifter, Wildhunt", source : [["WGtE", 66], ["UA:RoE", 6]], plural : "Wildhunt shifters", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common"], vision : [["Darkvision", 60]], skills : ["Perception", "Survival"], age : " reach young adulthood at age 10 and rarely live over 70", height : " range from under 5 to almost 6 feet tall (4'6\" + 2d8\")", weight : " weigh around 135 lb (90 + 2d8 \xD7 2d4 lb)", heightMetric : " range from under 1,5 to 1,8 metres tall (4'6\" + 5d8 cm)", weightMetric : " weigh around 65 kg (40 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 1, 0, 0, 2, 0], trait : "Wildhunt Shifter: (+1 Dexterity, +2 Wisdom)\nShifting: As a bonus action once per short rest, I can transform and get adv. on Wis checks." + (typePF ? " " : "\n") + "This transformation lasts for 1 minute, until I die, or until I revert back as a bonus action.\nWhen I shift, I gain temporary HP equal to my level + my Con" + (typePF ? "stitution modifier (minimum 1 temporary hit point" : " mod (minimum 1 temp HP") + ").\nMark the Scent: As a bonus action once per short rest, I can mark a creature that I can see within 10 ft. Until the end of my next long rest, my proficiency bonus is doubled for checks to find this target, and I always know its location if it is within 60 ft of me.", features : { "shift" : { name : "Shift", minlevel : 1, usages : 1, recovery : "short rest", action : [["bonus action", " (start/end)"]] }, "mark the scent" : { name : "Mark the Scent", minlevel : 1, usages : 1, recovery : "short rest", action : [["bonus action", ""]] } } }; // The three subraces of the warforged RaceList["envoy warforged-ua"] = { regExpSearch : /^(?=.*warforged)(?=.*envoy).*$/i, name : "Envoy warforged", sortname : "Warforged, Envoy", source : [["WGtE", 69], ["UA:RoE", 9]], plural : "Envoy warforged", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", 1], toolProfs : [["Any tool", 1]], skillstxt : "Choose any one skill, any one tool, and expertise with any one tool I'm proficient with", savetxt : { text : ["Magic can't put me to sleep"], immune : ["disease", "exhaustion from lack of rest"], adv_vs : ["poison"] }, dmgres : ["Poison"], age : " are created as adults and will only start to show signs of physical deterioration after 150 years, but have no further aging effects", height : " stand between 6 and 7 feet tall (5'10\" + 2d6\")", weight : " weigh around 300 lb (270 + 2d6 \xD7 4 lb)", heightMetric : " stand between 1,8 and 2,1 metres tall (178 + 5d6 cm)", weightMetric : " weigh around 135 kg (125 + 5d6 \xD7 8 / 10 kg)", scorestxt : "+1 Constitution and +1 to two other ability scores of my choice", scores : [0, 0, 1, 0, 0, 0], trait : "Envoy Warforged (+1 Constitution and +1 to two other abilit" + (typePF ? "ies" : "y scores of my choice") + ")\nWarforged Resilience: I do not need to sleep, eat, drink, or breathe.\nSentry's Rest: To benefit from a long rest, I need to enter an inactive state for 6 hours, during which I am not rendered unconscious and can see and hear as normal.\nIntegrated Protection: My AC depends on armor proficiency: none (11+Dex), light (11+Dex+Prof B.), medium (13+Dex+Prof B.), heavy (16+Prof B.; Stealth disadv.). I can use a shield.\nIntegrated Tool: I have expertise with one tool and it is integrated into my body.", eval : function() { var lightProf = tDoc.getField('Proficiency Armor Light').isBoxChecked(0); if (tDoc.getField('Proficiency Armor Heavy').isBoxChecked(0)) { CurrentRace.armorAdd.select = 'Heavy Plating'; } else if (tDoc.getField('Proficiency Armor Medium').isBoxChecked(0) && ((What('Dex') < 18 && lightProf) || !lightProf)) { CurrentRace.armorAdd.select = 'Composite Plating'; } else { CurrentRace.armorAdd.select = 'Darkwood Core' + (lightProf ? " (Prof)" : ""); }; }, removeeval : function () { if ((/darkwood core|composite plating|heavy plating/).test(CurrentArmour.known)) { tDoc.resetForm(['AC Armor Description']); }; }, armorAdd : { select : "" }, armorOptions : [{ regExpSearch : /^(?=.*darkwood)(?=.*core).*$/i, name : "Darkwood core", source : [["WGtE", 69], ["UA:RoE", 9]], ac : 11 }, { regExpSearch : /^(?=.*darkwood)(?=.*core)(?=.*prof).*$/i, name : "Darkwood core (Prof)", source : [["WGtE", 69], ["UA:RoE", 9]], ac : "11+Prof" }, { regExpSearch : /^(?=.*composite)(?=.*plating).*$/i, name : "Composite plating", source : [["WGtE", 69], ["UA:RoE", 9]], type : "medium", ac : "13+Prof", dex : 2 }, { regExpSearch : /^(?=.*heavy)(?=.*plating).*$/i, name : "Heavy plating", source : [["WGtE", 69], ["UA:RoE", 9]], type : "heavy", ac : "16+Prof", stealthdis : true }] }; RaceList["juggernaut warforged-ua"] = { regExpSearch : /^(?=.*warforged)(?=.*juggernaut).*$/i, name : "Juggernaut warforged", sortname : "Warforged, Juggernaut", source : [["WGtE", 70], ["UA:RoE", 9]], plural : "Juggernaut warforged", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common"], weaponOptions : [{ baseWeapon : "unarmed strike", regExpSearch : /^(?=.*warforged)(?=.*iron)(?=.*fists?).*$/i, name : "Warforged Iron Fists", source : [["WGtE", 70], ["UA:RoE", 9]], damage : [1, 4, "bludgeoning"], selectNow : true }], savetxt : { text : ["Magic can't put me to sleep"], immune : ["disease", "exhaustion from lack of rest"], adv_vs : ["poison"] }, dmgres : ["Poison"], age : " are created as adults and will only start to show signs of physical deterioration after 150 years, but have no further aging effects", height : " stand between 6 and 7 feet tall (5'10\" + 2d6\")", weight : " weigh around 300 lb (270 + 2d6 \xD7 4 lb)", heightMetric : " stand between 1,8 and 2,1 metres tall (178 + 5d6 cm)", weightMetric : " weigh around 135 kg (125 + 5d6 \xD7 8 / 10 kg)", scores : [2, 0, 1, 0, 0, 0], trait : "Juggernaut Warforged (+2 Strength, +1 Constitution)" + (typePF ? "" : " Iron Fists: unarmed strikes do 1d4.") + "\nWarforged Resilience: I do not need to sleep, eat, drink, or breathe.\nSentry's Rest: To benefit from a long rest, I need to enter an inactive state for 6 hours, during which I am not rendered unconscious and can see and hear as normal.\nIntegrated Protection: My AC depends on armor proficiency: none (11+Dex), light (11+Dex+Prof B.), medium (13+Dex+Prof B.), heavy (16+Prof B.; Stealth disadv.). I can use a shield.\nPowerful Build: I count as one size larger for my carrying capacity, push, drag, and lift." + (typePF ? " Iron Fists: My unarmed strikes do 1d4 damage." : ""), carryingCapacity : 2, eval : function() { var lightProf = tDoc.getField('Proficiency Armor Light').isBoxChecked(0); if (tDoc.getField('Proficiency Armor Heavy').isBoxChecked(0)) { CurrentRace.armorAdd.select = 'Heavy Plating'; } else if (tDoc.getField('Proficiency Armor Medium').isBoxChecked(0) && ((What('Dex') < 18 && lightProf) || !lightProf)) { CurrentRace.armorAdd.select = 'Composite Plating'; } else { CurrentRace.armorAdd.select = 'Darkwood Core' + (lightProf ? " (Prof)" : ""); }; }, removeeval : function () { if ((/darkwood core|composite plating|heavy plating/).test(CurrentArmour.known)) { tDoc.resetForm(['AC Armor Description']); }; }, armorAdd : { select : "" }, armorOptions : [{ regExpSearch : /^(?=.*darkwood)(?=.*core).*$/i, name : "Darkwood core", source : [["WGtE", 69], ["UA:RoE", 9]], ac : 11 }, { regExpSearch : /^(?=.*darkwood)(?=.*core)(?=.*prof).*$/i, name : "Darkwood core (Prof)", source : [["WGtE", 69], ["UA:RoE", 9]], ac : "11+Prof" }, { regExpSearch : /^(?=.*composite)(?=.*plating).*$/i, name : "Composite plating", source : [["WGtE", 69], ["UA:RoE", 9]], type : "medium", ac : "13+Prof", dex : 2 }, { regExpSearch : /^(?=.*heavy)(?=.*plating).*$/i, name : "Heavy plating", source : [["WGtE", 69], ["UA:RoE", 9]], type : "heavy", ac : "16+Prof", stealthdis : true }] }; RaceList["skirmisher warforged-ua"] = { regExpSearch : /^(?=.*warforged)(?=.*skirmisher).*$/i, name : "Skirmisher warforged", sortname : "Warforged, Skirmisher", source : [["WGtE", 70], ["UA:RoE", 9]], plural : "Skirmisher warforged", size : 3, speed : { walk : { spd : 35, enc : 25 } }, languageProfs : ["Common"], savetxt : { text : ["Magic can't put me to sleep"], immune : ["disease", "exhaustion from lack of rest"], adv_vs : ["poison"] }, dmgres : ["Poison"], age : " are created as adults and will only start to show signs of physical deterioration after 150 years, but have no further aging effects", height : " stand between 6 and 7 feet tall (5'10\" + 2d6\")", weight : " weigh around 300 lb (270 + 2d6 \xD7 4 lb)", heightMetric : " stand between 1,8 and 2,1 metres tall (178 + 5d6 cm)", weightMetric : " weigh around 135 kg (125 + 5d6 \xD7 8 / 10 kg)", scores : [0, 2, 1, 0, 0, 0], trait : "Skirmisher Warforged (+2 Dexterity, +1 Constitution)\nWarforged Resilience: I do not need to sleep, eat, drink, or breathe.\nSentry's Rest: To benefit from a long rest, I need to enter an inactive state for 6 hours, during which I am not rendered unconscious and can see and hear as normal.\nIntegrated Protection: My AC depends on armor proficiency: none (11+Dex), light (11+Dex+Prof B.), medium (13+Dex+Prof B.), heavy (16+Prof B.; Stealth disadv.). I can use a shield.\nLight Step: If I travel alone for an hour or more, I can move stealthily at a normal pace.", eval : function() { var lightProf = tDoc.getField('Proficiency Armor Light').isBoxChecked(0); if (tDoc.getField('Proficiency Armor Heavy').isBoxChecked(0)) { CurrentRace.armorAdd.select = 'Heavy Plating'; } else if (tDoc.getField('Proficiency Armor Medium').isBoxChecked(0) && ((What('Dex') < 18 && lightProf) || !lightProf)) { CurrentRace.armorAdd.select = 'Composite Plating'; } else { CurrentRace.armorAdd.select = 'Darkwood Core' + (lightProf ? " (Prof)" : ""); }; }, removeeval : function () { if ((/darkwood core|composite plating|heavy plating/).test(CurrentArmour.known)) { tDoc.resetForm(['AC Armor Description']); }; }, armorAdd : { select : "" }, armorOptions : [{ regExpSearch : /^(?=.*darkwood)(?=.*core).*$/i, name : "Darkwood core", source : [["WGtE", 69], ["UA:RoE", 9]], ac : 11 }, { regExpSearch : /^(?=.*darkwood)(?=.*core)(?=.*prof).*$/i, name : "Darkwood core (Prof)", source : [["WGtE", 69], ["UA:RoE", 9]], ac : "11+Prof" }, { regExpSearch : /^(?=.*composite)(?=.*plating).*$/i, name : "Composite plating", source : [["WGtE", 69], ["UA:RoE", 9]], type : "medium", ac : "13+Prof", dex : 2 }, { regExpSearch : /^(?=.*heavy)(?=.*plating).*$/i, name : "Heavy plating", source : [["WGtE", 69], ["UA:RoE", 9]], type : "heavy", ac : "16+Prof", stealthdis : true }] }; // ua_20180810_Magic-Items-of-Eberron.js // This file adds the content from the Unearthed Arcana: Magic Items of Eberron to MPMB's Character Record Sheet // Note that this content also appears in the script for Wayfinder's Guide to Eberron and thus both sources are included for all things here // Define the sources SourceList["UA:MIoE"] = { name : "Unearthed Arcana: Magic Items of Eberron", abbreviation : "UA:MIoE", group : "Unearthed Arcana", campaignSetting : "Eberron", url : "https://media.wizards.com/2018/dnd/downloads/UA_Magic_Items_of_Eberron.pdf", date : "2018/08/10" }; // Different or not available in Eberron: Rising from the Last War MagicItemsList["band of loyalty-ua"] = { name : "Band of Loyalty", source : [["WGtE", 115], ["UA:MIoE", 2]], type : "ring", rarity : "common", description : "If I'm reduced to zero hit points while attuned to this ring, I instantly die. These rings are favored by spies who can't afford to fall into enemy hands.", descriptionFull : "If you are reduced to zero hit points while attuned to a band of loyalty, you instantly die. These rings are favored by spies who can't afford to fall into enemy hands.", attunement : true } var UAMIoE_docentFullDescription = [ "A docent is a small metal sphere, approximately 2 inches across, studded with dragonshards. Despite a strong magical aura, it has no obvious abilities. When you attune to a docent, the sphere becomes embedded in your chest and comes to life\u2014literally.", ">>Sentience<<. A docent is a sentient neutral item with an Intelligence of 16, a Wisdom of 14, and a Charisma of 14. It can perceive the world through your senses.", "A docent communicates telepathically with its wielder and can speak, read, and understand Common and Giant.", ">>Personality<<. A docent is designed to advise and assist the warforged it's attached to. One of the simple functions of a docent is to serve as a translator. The docent's properties are under its control, and if you have a bad relationship with your docent it may refuse to assist you… or simply lie about information that it obtains. However, if you treat your docent well it could serve as a useful ally.", "The origin of docents is a great mystery. House Cannith created the first warforged thirty years ago. But the docents come from the distant land of Xen'drik and appear to be thousands of years old. Were they created to interface with some other form of construct? Or are the modern warforged a new interpretation of an ancient design? The docents claim to have forgotten their creators… but this is a mystery waiting to be unraveled. While all docents come from Xen'drik, some have been brought to Khorvaire by explorers and it's possible to encounter them in the Five Nations.", ">>Languages<<. All docents understand Common and Giant, but a docent knows up to four additional languages. Elvish and Draconic are common options. If a docent knows less than six languages in total, it can add new languages to its repertoire after encountering them. So a docent found in Xen'drik may have never encountered a dwarf before… but after spending some time in Khorvaire studying dwarves, it could pick up the Dwarvish language.", ">>Properties<<. A docent possesses up to three of the following properties:", "\u2022 The docent can cast the detect magic spell at will.", "\u2022 The docent can cast the detect evil and good spell at will.", "\u2022 The docent can detect any form of divination or scrying targeting it and its warforged host.", "\u2022 The docent has a +7 bonus to Intelligence (Arcana) checks.", "\u2022 The docent has a +7 bonus to Intelligence (History) checks.", "\u2022 The docent has a +7 bonus to Intelligence (Investigation) checks.", "\u2022 The docent has a +7 bonus to Intelligence (Nature) checks.", "\u2022 The docent has a +6 bonus to Wisdom (Insight) checks.", "\u2022 The docent has a +6 bonus to Wisdom (Perception) checks.", "\u2022 The docent has a +6 bonus to Wisdom (Medicine) checks targeting its warforged host. If the host is rendered unconscious, the docent will automatically attempt to stabilize them once each turn.", "You can use a bonus action on your turn to request that the docent use one of its properties on your behalf." ]; MagicItemsList["docent-ua"] = { name : "Docent", source : [["WGtE", 121], ["UA:MIoE", 3]], type : "wondrous item", rarity : "rare", description : "I can embed this sentient small metal sphere studded with dragonshards into my chest. I can communicate telepathically with it. It can serve me as an advisor and a translator, as it knowns 6 languages. It also knows spells and/or skills that I can have it use as a bonus action. See Notes page.", descriptionFull : UAMIoE_docentFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)< 7 && (/^(?=.*dragonmark)(?=.*detection).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Charisma or Intelligence score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells See Invisibility and True Seeing, each of which you can cast once without expending a spell slot or using a material component. Intelligence is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a long rest before you can do so again.", description : "My Intuition Die increases with one step (d4 to d6, for example). I can cast See Invisibility and True Seeing each once per long rest without using spell slots or requiring material components. Intelligence is my spellcasting ability for these. [+1 Charisma or Intelligence]", scorestxt : "+1 Charisma or Intelligence", spellcastingBonus : [{ name : "1\xD7 per long", spells : ["see invisibility", "true seeing"], selection : ["see invisibility", "true seeing"], spellcastingAbility : 4, firstCol : 'oncelr', times : 2 }], spellChanges : { "see invisibility" : { components : "V,S", compMaterial : "", changes : "Spells cast through my Greater Dragonmark don't require material components." }, "true seeing" : { components : "V,S", compMaterial : "", description : "1 willing crea gains truesight 120 ft; see through illusions, hidden doors, ethereal plane", changes : "Spells cast through my Greater Dragonmark don't require material components." } } }, "finding" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Finding", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*finding).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Dexterity, Strength, or Wisdom score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells Locate Creature and Find the Path, each of which you can cast once without expending a spell slot or using a material component. Wisdom is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a long rest before you can do so again.", description : "My Intuition Die increases with one step (d4 to d6, for example). I can cast Locate Creature and Find the Path each once per long rest without using spell slots or requiring material components. Wisdom is my spellcasting ability for these. [+1 " + (typePF ? "Strength, Dexterity, or Wisdom]" : "Str, Dex, or Wis]"), scorestxt : "+1 Strength, Dexterity, or Wisdom", spellcastingBonus : [{ name : "1\xD7 per long", spells : ["locate creature", "find the path"], selection : ["locate creature", "find the path"], spellcastingAbility : 5, firstCol : 'oncelr', times : 2 }], spellChanges : { "locate creature" : { components : "V,S", compMaterial : "", changes : "Spells cast through my Greater Dragonmark don't require material components." }, "find the path" : { components : "V,S", compMaterial : "", description : "Know the shortest route to a location I am familiar with and are on the same plane with", changes : "Spells cast through my Greater Dragonmark don't require material components." } } }, "handling" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Handling", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*handling).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Dexterity or Wisdom score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells Beast Sense and Dominate Beast, each of which you can cast once without expending a spell slot or using a material component. Wisdom is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a long rest before you can do so again.", description : "My Intuition Die increases with one step (d4 to d6, for example). I can cast Beast Sense and Dominate Beast each once per long rest without using spell slots or requiring material components. Wisdom is my spellcasting ability for these. [+1 Dexterity or Wisdom]", scorestxt : "+1 Dexterity or Wisdom", spellcastingBonus : [{ name : "1\xD7 per long", spells : ["beast sense", "dominate beast"], selection : ["beast sense", "dominate beast"], spellcastingAbility : 5, firstCol : 'oncelr', times : 2 }] }, "healing" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Healing", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*healing).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Dexterity or Wisdom score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells Mass Healing Word and Greater Restoration, each of which you can cast once without expending a spell slot or using a material component. Wisdom is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a long rest before you can do so again.", description : "My Intuition Die increases with one step (d4 to d6, for example). I can cast Mass Healing Word and Greater Restoration each once per long rest without using spell slots or requiring material components. Wisdom is my spellcasting ability for these. [+1 Dexterity or Wisdom]", scorestxt : "+1 Dexterity or Wisdom", spellcastingBonus : [{ name : "1\xD7 per long", spells : ["mass healing word", "greater restoration"], selection : ["mass healing word", "greater restoration"], spellcastingAbility : 5, firstCol : 'oncelr', times : 2 }], spellChanges : { "greater restoration" : { components : "V,S", compMaterial : "", description : "Reduce exhaustion or end charm, petrify, curse, stat or max HP reduction", changes : "Spells cast through my Greater Dragonmark don't require material components." } } }, "hospitality" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Hospitality", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*hospitality).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Dexterity or Charisma score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells Sanctuary and Mordenkainen's Magnificent Mansion, each of which you can cast once without expending a spell slot or using a material component. Charisma is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a long rest before you can do so again.", description : "My Intuition Die increases with one step (d4 to d6, for example). I can cast Sanctuary and " + (typePF ? "Mordenkainen's " : "") + "Magnificent Mansion each once per long rest without using spell slots or requiring material components. Charisma is my spellcasting ability for these. [+1 Dexterity or Charisma]", scorestxt : "+1 Dexterity or Charisma", spellcastingBonus : [{ name : "1\xD7 per long", spells : ["sanctuary", "mordenkainen's magnificent mansion"], selection : ["sanctuary", "mordenkainen's magnificent mansion"], spellcastingAbility : 6, firstCol : 'oncelr', times : 2 }], spellChanges : { "sanctuary" : { components : "V,S", compMaterial : "", changes : "Spells cast through my Greater Dragonmark don't require material components." }, "mordenkainen's magnificent mansion" : { components : "V,S", compMaterial : "", description : "Create extradimensional mansion with rooms, food and servants to serve 100 people; see book", changes : "Spells cast through my Greater Dragonmark don't require material components." } } }, "making" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Making", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*making).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Dexterity or Intelligence score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells Fabricate and Creation, each of which you can cast once without expending a spell slot or using a material component. Intelligence is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a long rest before you can do so again.", description : "My Intuition Die increases with one step (d4 to d6, for example). I can cast Fabricate and Creation each once per long rest without using spell slots or requiring material components. Intelligence is my spellcasting ability for these. [+1 Dexterity or Intelligence]", scorestxt : "+1 Dexterity or Intelligence", spellcastingBonus : [{ name : "1\xD7 per long", spells : ["fabricate", "creation"], selection : ["fabricate", "creation"], spellcastingAbility : 4, firstCol : 'oncelr', times : 2 }], spellChanges : { "creation" : { components : "V,S", compMaterial : "", changes : "Spells cast through my Greater Dragonmark don't require material components." } } }, "passage" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Passage", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*passage).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Dexterity or Constitution score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells Blink and Teleportation Circle, each of which you can cast once without expending a spell slot or using a material component. Constitution is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a long rest before you can do so again.", description : "My Intuition Die increases with one step (d4 to d6, for example). I can cast Blink and Teleportation Circle each once per long rest without using spell slots or requiring material components. Constitution is my spellcasting ability for these. [+1 Dexterity or Constitution]", scorestxt : "+1 Dexterity or Constitution", spellcastingBonus : [{ name : "1\xD7 per long", spells : ["blink", "teleportation circle"], selection : ["blink", "teleportation circle"], spellcastingAbility : 3, firstCol : 'oncelr', times : 2 }], spellChanges : { "teleportation circle" : { components : "V,S", compMaterial : "", description : "Create a circle to teleport to another teleportation circle on same plane; see book", changes : "Spells cast through my Greater Dragonmark don't require material components." } } }, "scribing" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Scribing", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*scribing).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Intelligence or Charisma score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells Sending and Tongues, each of which you can cast once without expending a spell slot or using a material component. Intelligence is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a short or long rest before you can do so again.", description : "My Intuition Die increases with one step (d4 to d6, for example). I can cast Sending and Tongues each once per short rest without using spell slots or requiring material components. Intelligence is my spellcasting ability for these. [+1 Intelligence or Charisma]", scorestxt : "+1 Intelligence or Charisma", spellcastingBonus : [{ name : "1\xD7 per short", spells : ["sending", "tongues"], selection : ["sending", "tongues"], spellcastingAbility : 4, firstCol : 'oncesr', times : 2 }], spellChanges : { "sending" : { components : "V,S", compMaterial : "", changes : "Spells cast through my Greater Dragonmark don't require material components." }, "tongues" : { components : "V,S", compMaterial : "", changes : "Spells cast through my Greater Dragonmark don't require material components." } } }, "sentinel" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Sentinel", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*sentinel).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Strength or Wisdom score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells Compelled Duel, Warding Bond, each of which you can cast once without expending a spell slot or using a material component. Wisdom is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a short or long rest before you can do so again.", description : "My Intuition Die increases with one step (d4 to d6, for example). I can cast Compelled Duel and Warding Bond each once per short rest without using spell slots or requiring material components. Wisdom is my spellcasting ability for these. [+1 Strength or Wisdom]", scorestxt : "+1 Strength or Wisdom", spellcastingBonus : [{ name : "1\xD7 per short", spells : ["compelled duel", "warding bond"], selection : ["compelled duel", "warding bond"], spellcastingAbility : 5, firstCol : 'oncesr', times : 2 }], spellChanges : { "warding bond" : { components : "V,S", compMaterial : "", description : "1 crea +1 AC, +1 saves, resistance all dmg; if it takes dmg I take same dmg; ends if >60 ft away", changes : "Spells cast through my Greater Dragonmark don't require material components." } } }, "shadow" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Shadow", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*shadow).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Dexterity or Charisma score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells Nondetection and Mislead, each of which you can cast once without expending a spell slot or using a material component. Charisma is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a long rest before you can do so again.", description : "My Intuition Die increases with one step (d4 to d6, for example). I can cast Nondetection and Mislead each once per long rest without using spell slots or requiring material components. Charisma is my spellcasting ability for these. [+1 Dexterity or Charisma]", scorestxt : "+1 Dexterity or Charisma", spellcastingBonus : [{ name : "1\xD7 per long", spells : ["nondetection", "mislead"], selection : ["nondetection", "mislead"], spellcastingAbility : 6, firstCol : 'oncelr', times : 2 }], spellChanges : { "nondetection" : { components : "V,S", compMaterial : "", description : "1 crea or object up to 10 cu ft hidden from all divination magic", changes : "Spells cast through my Greater Dragonmark don't require material components." } } }, "storm" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Storm", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*storm).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Dexterity or Charisma score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells Control Water and Control Winds, each of which you can cast once without expending a spell slot or using a material component. Charisma is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a long rest before you can do so again.", description : "My Intuition Die increases with one step (d4 to d6, for example). I can cast Control Water and Control Winds each once per long rest without using spell slots or requiring material components. Charisma is my spellcasting ability for these. [+1 Dexterity or Charisma]", scorestxt : "+1 Dexterity or Charisma", spellcastingBonus : [{ name : "1\xD7 per long", spells : ["control water", "control winds"], selection : ["control water", "control winds"], spellcastingAbility : 6, firstCol : 'oncelr', times : 2 }], spellChanges : { "control water" : { components : "V,S", compMaterial : "", changes : "Spells cast through my Greater Dragonmark don't require material components." } } }, "warding" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Warding", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*warding).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Dexterity or Intelligence score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells Knock, Glyph of Warding and Leomund's Secret Chest*, each of which you can cast once without expending a spell slot or using a material component. Intelligence is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a long rest before you can do so again.\n\n* To cast Leomund's Secret Chest using this feat, you must have a Siberys dragonshard with a value of at least 100 gp. While you have this dragonshard in hand, it serves as the spell's focus, and you can use it to summon and dismiss the chest.", description : "My Intuition Die increases one step. I can cast Knock, Secret Chest, and Glyph of Warding each once per long rest without spell slot or material component. Secret Chest requires a 100 gp Siberys dragonshard as a focus. These use Int as spellcasting ability. [+1 Dex or Int]", scorestxt : "+1 Dexterity or Intelligence", spellcastingBonus : [{ name : "1\xD7 per long", spells : ["knock", "glyph of warding"], selection : ["knock", "glyph of warding"], spellcastingAbility : 4, firstCol : 'oncelr', times : 2 }, { name : "with Siberys dragonshard", spells : ["leomund's secret chest"], selection : ["leomund's secret chest"], firstCol : 'oncelr' }], spellChanges : { "glyph of warding" : { components : "V,S", compMaterial : "", description : "Create a glyph that triggers on set condition; Int(Investigation) vs. Spell DC; see book", changes : "Spells cast through my Greater Dragonmark don't require material components." }, "leomund's secret chest" : { compMaterial : "A Siberys dragonshard with a value of at least 100 gp", description : "Hide chest with content in Ethereal Plane for 60 days, after that chance of loss; 1 a reappear (100gp)", changes : "Leomund's Secret Chest cast through my Greater Dragonmark of Warding requires a Siberys dragonshard as a focus instead of an exquisite chest and its tiny replica." } } } }; // Aberrant Dragonmark feat FeatsList["aberrant dragonmark-ua"] = { name : "Aberrant Dragonmark", source : [["WGtE", 112], ["UA:D", 9]], prerequisite : "Not having a dragonmark", prereqeval : function(v) { return !(/dragonmark/i).test(CurrentRace.known); }, descriptionFull : "You have manifested an aberrant dragonmark. Determine its appearance and the flaw associated with it (see the table below for examples). You gain the following benefits:\n \u2022 Increase your Constitution score by 1, to a maximum of 20.\n \u2022 You learn a cantrip from the sorcerer spell list. In addition, choose a 1st-level spell from the sorcerer spell list. You learn that spell and can cast it at its lowest level. Once you cast it, you must finish a long rest before you can cast it again. Constitution is your spellcasting ability for these spells.\n \u2022 You can increase the power of your aberrant spells at the risk of your own vitality. When you cast a spell with your aberrant mark, you can use one of your Hit Dice to increase the spell's level by 1. Immediately after you cast the spell, roll the Hit Die. You take damage equal to the number rolled.\n\n" + toUni("1d8") + "\t" + toUni("Aberrant Mark Flaw") + "\n1\tYour mark is a source of constant physical pain.\n2\tYour mark whispers to you, though you may not understand what it says.\n3\tIn times of stress, your mark may trigger a cantrip effect involuntarily.\n4\tThe skin around your mark has an unusual appearance: burned, scaly, withered, etc.\n5\tMundane animals become uneasy around you.\n6\tYou have dramatic mood swings any time you use your mark.\n7\tYour appearance changes in a minor way every time you use your mark.\n8\tYou have horrific nightmares after you use your mark.", description : "I learn a sorcerer cantrip and a 1st-level sorcerer spell, using Con as my spellcasting ability. I can cast the spell once per long rest without a spell slot. I can use a Hit Die when casting the spell, casting it as if with a level 2 spell slot and taking the HD as damage. [+1 Con]", scores : [0, 0, 1, 0, 0, 0], spellcastingAbility : 3, spellcastingBonus : [{ name : "Sorcerer cantrip", 'class' : 'sorcerer', level : [0, 0], firstCol : 'atwill' }, { name : "Sorcerer 1st-level spell", 'class' : 'sorcerer', level : [1, 1], firstCol : 'oncelr' }] }; // ua_20190815_Barbarian-and-Monk.js // This file adds the content from the Unearthed Arcana: Barbarian and Monk article to MPMB's Character Record Sheet // Define the source SourceList["UA:BnM"] = { name : "Unearthed Arcana: Barbarian and Monk", abbreviation : "UA:BnM", group : "Unearthed Arcana", url : "https://media.wizards.com/2019/dnd/downloads/UA-WildAstral.pdf", date : "2019/08/15" }; // Add a subclasses for the Barbarian and one for the Monk AddSubClass("barbarian", "path of the wild soul-ua", { regExpSearch : /^(?=.*\bwild\b)(?=.*\bsoul\b).*$/i, subname : "Path of the Wild Soul", subnameShort: "Wild Soul", fullname : "Wild Soul", source : [["UA:BnM", 1]], abilitySave : 3, features : { "subclassfeature3" : { name : "Lingering Magic", source : [["UA:BnM", 1]], minlevel : 3, description : desc([ "I can cast Detect Magic without spell slots or components, using Con for spellcasting", "When I do so, I faintly glow a color corresponding to the school of magic I detect" ]), usages : "Con mod (min 1) per ", usagescalc : "event.value = Math.max(1, What('Con Mod'));", recovery : "long rest", spellcastingBonus : [{ name : "Lingering Magic", spells : ["detect magic"], selection : ["detect magic"] }], spellChanges : { "detect magic" : { components : "", ritual : false, changes : "Using my Path of the Wild Soul class feature I can cast Detect Magic without requiring components or spell slots." } } }, "subclassfeature3.1" : { name : "Wild Surge", source : [["UA:BnM", 1]], minlevel : 3, description: desc("Whenever I enter my rage, I have to roll on the Wild Surge table (see Notes page)"), toNotesPage : [{ name : "Wild Surge Table", source : [["UA:BnM", 1]], note : [ "Magic erupts from me while I rage. Whenever I enter my rage, I have to roll on the table below to see what happens.", "If the effect calls for a saving throw, the DC is equal to 8 + my proficiency bonus + my Constitution modifier.\n", "d8\tEFFECT", " 1\tNecrotic energy bursts from me. Each creature within 30 ft of me takes 1d10 necrotic damage, and I gain temporary HP equal to the sum of the necrotic damage dealt to the creatures.", " 2\tI teleport up to 20 ft to an unoccupied space I can see. Until my rage ends, I can activate this effect again on each of my turns as a bonus action.", " 3\tI conjure 1d4 intangible spirits that look like flumphs in unoccupied spaces within 30 ft of me. Each spirit immediately flies 30 ft in a random direction. At the end of my turn, all spirits explode and each creature within 5 ft of one or more of them must succeed on a Dexterity saving throw or take 2d8 force damage.", " 4\tArcane energy enshrouds me. Until my rage ends, I gain a +2 bonus to AC, and whenever a creature within 10 ft of me hits me with an attack, that creature takes force damage equal to my Constitution modifier.", " 5\tPlant life temporarily grows around me: until my rage ends, the ground within 10 ft of me is difficult terrain.", " 6\tArcane energy taps into the minds of those around me. Each creature within 30 ft of me must succeed on a Wisdom saving throw or I see a glimpse of the creature's thoughts, learning how it plans to attack me. As a result, the creature has disadvantage on attack rolls against me until the start of my next turn.", " 7\tShadows weave around a weapon of my choice I am holding. Until my rage ends, my weapon deals psychic damage instead of its bludgeoning, slashing, or piercing damage, and it gains the light and thrown properties with a normal range of 20 ft and a long range of 60 ft. If I drop the weapon or throw it, the weapon dissipates and reappears in my hand at the end of my turn.", " 8\tA beam of brilliant light lances from my chest in a 5-ft-wide, 60-ft-long line. Each creature in the line must succeed on a Constitution saving throw or take 2d8 radiant damage and be blinded until the start of my next turn." ] }] }, "subclassfeature6" : { name : "Magic Reserves", source : [["UA:BnM", 2]], minlevel : 6, description : desc([ "As an action, I can touch a creature and roll a die to channel magic into it", "The target regains an expended spell slot of a level equal to or less then the die roll", "If it has no expended spell slots of that level, it gains 5\xD7 the die roll in temp HP instead", "Regardless of what happens, I take force damage equal to five times the die roll" ]), additional : levels.map(function (n) { return n < 6 ? "" : n < 14 ? "1d4" : "1d6"; }), action : [["action", ""]] }, "subclassfeature10" : { name : "Arcane Rebuke", source : [["UA:BnM", 2]], minlevel : 10, description : desc([ "As a reaction when I have to make a save while raging, the magic in my soul lashes out", "This causes the creature forcing me to make the save, if any, to take 3d6 force damage" ]), action : [["reaction", " (in Rage after save)"]] }, "subclassfeature14" : { name : "Chaotic Fury", source : [["UA:BnM", 2]], minlevel : 14, description : desc([ "As a bonus action while raging, I can reroll the effect on the Wild Surge table", "This replaces the current wild surge effect with a new one" ]), action : [["bonus action", " (in Rage)"]] } } }); AddSubClass("monk", "way of the astral self-ua", { regExpSearch : /^(?=.*astral)(?=.*(self|projection|travel))((?=.*(monk|monastic))|((?=.*martial)(?=.*(artist|arts)))|((?=.*spiritual)(?=.*warrior))).*$/i, subname : "Way of the Astral Self", subnameShort: "Astral Self", source : [["UA:BnM", 2]], features : { "subclassfeature3" : { name : "Arms of the Astral Self", source : [["UA:BnM", 2]], minlevel : 3, description: desc("My ki mastery allows me to summon portions of my astral self; See 3rd page notes"), action : [["bonus action", "Summon Astral Arms"], ["bonus action", "Astral Arm Attacks (after Attack action)"]], weaponOptions : [{ regExpSearch : /^(?=.*\bastral\b)(?=.*\barms?\b).*$/i, name : "Astral Arms", source : [["UA:BnM", 2]], ability : 5, type : "Natural", damage : [1, "", typePF ? "Necrotic/Radiant" : "necrotic|radiant"], range : "Melee", description : "10 ft reach; Uses Str, Dex, or Wis; Deals necrotic or radiant damage", monkweapon : true, abilitytodamage : true, selectNow : true }], "astral arms" : { name : "Astral Arms", extraname : "Way of the Astral Self 3", source : [["UA:BnM", 2]], description : desc([ "As a bonus action, I can summon my astral arms for 10 minutes; I choose their appearance", "While they are summoned, I can use Wisdom instead of Strength for Strength checks/saves", "The arms are melee monk weapons with 10 ft reach that can use Wis instead of Str/Dex", "I can choose to have them deal either radiant or necrotic damage", "After I use them in my Attack action, I can use them for more attacks as a bonus action" ]), additional : levels.map(function (n) { return n < 3 ? "" : "2 ki points; " + (n < 11 ? 1 : n < 17 ? 2 : 3) + " bonus action attack" + (n < 11 ? "" : "s"); }) }, autoSelectExtrachoices : [{ extrachoice : "astral arms" }] }, "subclassfeature6" : { name : "Visage of the Astral Self", source : [["UA:BnM", 3]], minlevel : 6, description: desc("I can now also summon the visage of my astral self; See third page notes section"), action : [["bonus action", "Summon Astral Arms and/or Visage", "Summon Astral Arms"]], "astral visage" : { name : "Astral Visage", extraname : "Way of the Astral Self 6", source : [["UA:BnM", 3]], additional: "1 ki point", description : desc([ "As a bonus action (or when summoning my astral arms), I can summon my astral visage", "It covers my face like a helmet or mask and I choose its appearance; It lasts for 10 minutes", "It grants adv. on Insight \u0026 Intimidation, and the ability to see 120 ft in (magical) darkness" ]) }, autoSelectExtrachoices : [{ extrachoice : "astral visage" }] }, "subclassfeature11" : { name : "Awakening of the Astral Self", source : [["UA:BnM", 3]], minlevel : 11, description: desc("While having both astral arms and visage summoned, I gain extra benefits, see 3rd page"), "deflect energy" : { name : "Deflect Energy", extraname : "Awakening of the Astral Self", source : [["UA:BnM", 3]], description : " [if both astral arms \u0026 visage]" + desc([ "As a reaction when I take acid, cold, fire, force, or lightning damage, I can deflect it", "By doing so, the damage is reduced by 1d10 + my Wisdom modifier + my Monk level" ]) }, "empowered arms" : { name : "Empowered Arms", extraname : "Awakening of the Astral Self", source : [["UA:BnM", 3]], description : " [if both astral arms \u0026 visage]" + desc([ "Once per turn when I hit an astral arms attack, I can add a martial arts die to its damage" ]) }, "word of the spirit" : { name : "Word of the Spirit", extraname : "Awakening of the Astral Self", source : [["UA:BnM", 3]], description : " [if both astral arms \u0026 visage]" + desc([ "I can direct my words to a creature I can see within 30 ft so that only it can hear me", "Alternatively, I can amplify my voice so that it is heard by all within 600 ft of me" ]) }, autoSelectExtrachoices : [ { extrachoice : "deflect energy" }, { extrachoice : "empowered arms" }, { extrachoice : "word of the spirit" } ] }, "subclassfeature17" : { name : "Complete Astral Self", source : [["UA:BnM", 3]], minlevel : 17, description : desc([ "I can now also summon the body of my astral self; See third page notes section", "This spectral body covers my physique like armor, connecting with the arms and visage" ]), action : [["bonus action", "Summon Astral Arms and/or Visage, or Complete", "Summon Astral Arms and/or Visage"], ["reaction", "Ki Consumption (Complete Astral Self)"]], "astral body" : { name : "Astral Body", extraname : "Way of the Astral Self 17", source : [["UA:BnM", 3]], additional: "10 ki points", description : desc([ "As a bonus action, I can summon the arms, visage, and body of my astral self for 10 min", "This gives me the arms, visage, +2 bonus to AC while not incapacitated, and as follows:", "When I take the Attack action I can choose to make 3 attacks with my astral arms instead", "As a reaction when a creature in 10 ft is reduced to 0 HP, I can regain my Wis mod in ki" ]) }, autoSelectExtrachoices : [{ extrachoice : "astral body" }] } } }); // ua_20190905_Sorcerer-and-Warlock.js // This file adds the content from the Unearthed Arcana: Sorcerer and Warlock article to MPMB's Character Record Sheet // Define the source SourceList["UA:SnW"] = { name : "Unearthed Arcana: Sorcerer and Warlock", abbreviation : "UA:SnW", group : "Unearthed Arcana", url : "https://media.wizards.com/2019/dnd/downloads/UA-AberrantLurk.pdf", date : "2019/09/05" }; // Add a subclasses for the Sorcerer and one for the Warlock // Both contain work by /u/KaydeArcane var UASnW_abberantMindExtraSpell = ["arms of hadar", "dissonant whispers", "calm emotions", "detect thoughts", "hunger of hadar", "sending", "compulsion", "evard's black tentacles", "modify memory", "rary's telepathic bond"]; AddSubClass("sorcerer", "aberrant mind-ua", { regExpSearch : /^(?=.*aberrant)(?=.*mind).*$/i, subname : "Aberrant Mind", source : [["UA:SnW", 1]], spellcastingExtra : UASnW_abberantMindExtraSpell, spellcastingExtraApplyNonconform : true, features : { "subclassfeature1" : { name : "Invasive Thoughts", source : [["UA:SnW", 1]], minlevel : 1, description : desc([ "As a bonus action, I can telepathic link myself with a creature within 30 ft that I can see", "This lasts for 10 minutes, until I'm incapacitated or die, or I use this ability again", "I can telepathically talk with the target; It can speak back if it understands a language" ]), action : [["bonus action", ""]] }, "subclassfeature1.1" : { name : "Psionic Spells", source : [["UA:SnW", 1]], minlevel : 1, description: desc("I learn additional spells, which do not count towards the number of spell I can know") }, "subclassfeature1.2" : { name : "Warped Being", source : [["UA:SnW", 1]], minlevel : 1, description: desc("My aberrant origin gives me an AC of 13 + my Dex mod when I am not wearing armor"), armorOptions : [{ regExpSearch : /^(?=.*warped)(?=.*being).*$/i, name : "Warped Being", source : [["UA:SnW", 1]], ac : 13, selectNow : true }] }, "subclassfeature6" : { name : "Psionic Sorcery", source : [["UA:SnW", 2]], minlevel : 6, description : desc([ "I can expend sorcery points instead of a spell slot to cast a spell from my Psionic Spells", "This costs the spell's level in sorcery points, but the spell requires no other components" ]), spellFirstColTitle : "SP", spellChanges : function () { var fullReObj = {}; UASnW_abberantMindExtraSpell.map(function (s) { var spObj = SpellsList[s] ? SpellsList[s] : { level : 1 }; fullReObj[s] = { firstCol : spObj.level, compMaterial : (spObj.compMaterial ? spObj.compMaterial + "\n" : "") + "If I cast this spell by expending Sorcery Points, it doesn't require any components", changes : "I can cast this spell by expending a number of Sorcery Points equal to its level instead of expending a spell slot. When I do so, the spell doesn't require any components." } }) return fullReObj; }() }, "subclassfeature6.1" : { name : "Psychic Defenses", source : [["UA:SnW", 2]], minlevel : 6, description: desc("I gain resistance to psychic damage and adv. on saves vs. being charmed or frightened"), dmgres : ["Psychic"], savetxt : { adv_vs : ["charmed", "frightened"] } }, "subclassfeature14" : { name : "Revelation in Flesh", source : [["UA:SnW", 2]], minlevel : 14, description : desc([ "As a bonus action, I can expend 1 or more sorcery points to transform for 1 minute", "For each sorcery point used, I gain one of the following benefits of my choice:", "\u2022 I gain a swimming speed equal to my walking speed and the ability to breathe water", "\u2022 I gain a flying speed equal to my walking speed and I can hover", "\u2022 I can move, with equipment, through any space as narrow as 1 inch without squeezing", " I can spend 5 ft of movement to escape form a grapple or from nonmagical restraints", "\u2022 I am aware of the location of any hidden/invisible creatures within 60 ft of me" ]), action : [["bonus action", ""]], additional : "1+ sorcery points" }, "subclassfeature18" : { name : "Warp Reality", source : [["UA:SnW", 2]], minlevel : 18, description : desc([ "As an action, I can radiate a 20-ft radius aura of difficult terrain for 1 minute", "Creatures that start their turn within the aura take 2d10 psychic damage", "When creating it, I can choose any creatures I can see to be unaffected by this aura", "As a bonus action, I can end this aura to teleport myself and others away", "I teleport myself and any creature in the aura to a location I can see within 1 mile", "An unwilling creature can succeed on a Charisma saving throw to avoid being teleported" ]), action : [["action", " (create)"], ["bonus action", " (end)"]], recovery : "long rest", usages : 1 } } }); AddSubClass("warlock", "the lurker in the deep-ua", { regExpSearch : /^(?=.*warlock)(?=.*lurker)(?=.*(deep|depth)).*$/i, subname : "the Lurker in the Deep", source : [["UA:SnW", 2]], spellcastingExtra : ["create or destroy water", "thunderwave", "gust of wind", "shatter", "lightning bolt", "sleet storm", "control water", "evard's black tentacles", "commune with nature", "cone of cold"], features : { "subclassfeature1" : { name : "Grasp of the Deep", source : [["UA:SnW", 3]], minlevel : 1, description : desc([ "As a bonus action, I can summon or move a spectral tentacle and make an attack with it", "I can summon it to a space within 60 ft that I can see or move an existing one 30 ft", "I make melee spell attacks with 10 ft reach with it that deal cold or lightning damage", "Creatures hit by the tentacle suffer 10 ft speed reduction until the start of my next turn", "The 10-ft long tentacle lasts for 1 minute or until I summon another" ]), action : [["bonus action", " (summon/move)"]], recovery : "long rest", additional : levels.map(function (n) { return (n < 10 ? 1 : 2) + "d8"; }), usages : "Cha mod per ", usagescalc : "event.value = Math.max(1, What('Cha Mod'));", weaponOptions : [{ regExpSearch : /^((?=.*grasp)(?=.*deep)|(?=.*spectral)(?=.*tentacle)).*$/i, name : "Grasp of the Deep", source : [["UA:SnW", 3]], ability : 6, type : "Spell", damage : [1, 8, "Cold/Lightning"], range : "Melee (10 ft)", description : "My choice of cold or lightning damage; Target -10 ft speed until my next turn starts", abilitytodamage : false, litdGraspOfTheDeep : true, selectNow : true }], calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.litdGraspOfTheDeep && classes.known.warlock.level >= 10) { fields.Damage_Die = '2d8'; }; } ] } }, "subclassfeature1.1" : { name : "Scion of the Deep", source : [["UA:SnW", 3]], minlevel : 1, description : desc([ "I can communicate telepathically with any aberration, beast, elemental, or monstrosity", "The creature must be within 120 ft of me and have an innate swimming speed" ]) }, "subclassfeature6" : { name : "Fathomless Soul", source : [["UA:SnW", 3]], minlevel : 6, description : " [cold resistance]\n I have a swimming speed equal to my walking speed; I can breathe both air and water", dmgres : ["Cold"], speed : { swim : { spd : "walk", enc : "walk" } } }, "subclassfeature6.1" : { name : "Guardian Grasp", source : [["UA:SnW", 3]], minlevel : 6, description : desc([ "As a reaction when a creature in 10 ft of my tentacle takes damage, I can have it help", "One creature takes only half damage and my spectral tentacle vanishes" ]), action : [["reaction", ""]] }, "subclassfeature10" : { name : "Devouring Maw", source : [["UA:SnW", 3]], minlevel : 10, description : desc([ "As an action, I can summon a 10-ft radius translucent maw within 60 ft for 1 minute", "Creatures in the maw as it appear must Str save or be restrained, can repeat as action", "Creatures starting their turn in the maw take 3d6 cold or lightning damage (my choice)", "If a creature is in the maw at the start of my turn, I gain my warlock level in temp HP" ]), action : [["action", ""]], additional : levels.map(function (n) { return n < 10 ? "" : n + " temp HP"; }), recovery : "short rest", usages : 1 }, "subclassfeature14" : { name : "Unleash the Depths", source : [["UA:SnW", 4]], minlevel : 14, description : desc([ "As an action, I can choose one of the following effects to occur within 30 ft of me:", "\u2022 Teleport myself and up to 5 willing creatures I can see within 30 ft of the chosen point", " The destination must be within 100 miles and visited by me within the last 24 hours", "\u2022 5 creatures within 30 ft of the chosen point that I can see are attacked by tentacles", " The targets take 6d10 cold or lightning damage (my choice) and are knocked prone", " Each can make a Dexterity save to halve the damage and avoid being knocked prone" ]), action : [["action", ""]], recovery : "long rest", usages : 1 } } }); // ua_20190918_Bard-and-Paladin.js // This file adds the content from the Unearthed Arcana: Bard and Paladin article to MPMB's Character Record Sheet // Define the source SourceList["UA:BnP"] = { name : "Unearthed Arcana: Bard and Paladin", abbreviation : "UA:BnP", group : "Unearthed Arcana", url : "https://media.wizards.com/2019/dnd/downloads/UA-EloquentHeroics.pdf", date : "2019/09/18" }; // Add a subclasses for the bard and one for the paladin AddSubClass("bard", "college of eloquence-ua", { regExpSearch : /^(?=.*(college|bard|minstrel|troubadour|jongleur))(?=.*eloquence).*$/i, subname : "College of Eloquence", subnameShort: "Eloquence", source : [["UA:BnP", 1]], features : { "subclassfeature3" : { name : "Universal Speech", source : [["UA:BnP", 1]], minlevel : 3, description : desc([ "As a bonus action, I can expend one bardic inspiration die to make me understood by all", "I roll the die, that many creatures I can see within 60 ft of me are affected for 10 min", "Those affected magically understand me and I gain adv. on Cha checks to influence them" ]), additional : "1 bardic inspiration die", action : [["bonus action", ""]] }, "subclassfeature3.1" : { name : "Soothing Words", source : [["UA:BnP", 1]], minlevel : 3, description: desc("I can cast Calm Emotions without expending a spell slot"), spellcastingBonus : [{ name : "Soothing Words", spells : ["calm emotions"], selection : ["calm emotions"], firstCol : 'Sp' }], usages : "Charisma modifier per ", usagescalc : "event.value = Math.max(1, What('Cha Mod'));", recovery : "long rest" }, "subclassfeature6" : { name : "Undeniable Logic", source : [["UA:BnP", 1]], minlevel : 6, description : desc([ "As a bonus action, I can expend one bardic inspiration die to encourage or befuddle", "One creature I can see within 60 ft that can hear me gets one of the following effects:", " \u2022 It heals HP equal to the die roll and has adv. on its next save before my next turn ends", " \u2022 It suffers psychic damage equal to the die roll and must make an Intelligence save", " On a failed save, it also suffers disadv. on its next save before the end of my next turn" ]), additional : "1 bardic inspiration die", action : [["bonus action", ""]] }, "subclassfeature14" : { name : "Infectious Inspiration", source : [["UA:BnP", 2]], minlevel : 14, description : desc([ "My bardic inspiration dice are not lost if the check, attack, or save it was added to fails", "As a reaction when the same thing happens but the roll succeeds, I can inspire another", "I give a creature within 60 ft that can hear me an inspiration die without expending any", "I can use this reaction a number of times per long rest equal to my Cha mod (min 1)" ]), action : [["reaction", ""]], usages : "Cha mod per ", usagescalc : "event.value = Math.max(1, What('Cha Mod'));", recovery : "long rest" } } }); AddSubClass("paladin", "oath of heroism-ua", { regExpSearch : /^(?=.*\bhero)((?=.*paladin)|((?=.*(exalted|sacred|holy|divine))(?=.*(knight|fighter|warrior|warlord|trooper)))).*$/i, subname : "Oath of Heroism", subnameShort: "Heroism", source : [["UA:BnP", 2]], features : { "subclassfeature3" : { name : "Channel Divinity: Peerless Athlete", source : [["UA:BnP", 2]], minlevel : 3, description: desc("As a bonus action, I gain adv. on Str (Athletics) and Dex (Acrobatics) checks for 10 min"), action : [["bonus action", ""]], spellcastingExtra : ["expeditious retreat", "guiding bolt", "enhance ability", "enthrall", "haste", "protection from energy", "compulsion", "freedom of movement", "commune", "conjure volley"] }, "subclassfeature3.1" : { name : "Channel Divinity: Legendary Strike", source : [["UA:BnP", 2]], minlevel : 3, description: desc("As a bonus action, my weapon attacks score a critical hit on a roll of 19 or 20 for 1 min"), action : [["bonus action", ""]] }, "subclassfeature7" : { name : "Mighty Deed", source : [["UA:BnP", 2]], minlevel : 7, description : desc([ "When I score a critical hit or reduce a target to 0 HP, I can bolster morale or demoralize", "Up to my Cha mod (min 1) of creatures I can see in 30 ft suffer the same chosen effect:", " \u2022 All creatures gain temp HP equal to 1d6 + my Charisma modifier (min 1 temp HP)", " \u2022 All creatures must make a Wis save or be frightened of me until my next turn starts" ]), recovery : "Round", usages : 1 }, "subclassfeature15" : { name : "Glorious Defense", source : [["UA:BnP", 2]], minlevel : 15, description : desc([ "As a reaction when a creature I can see hits me with an attack roll, I can gain bonus AC", "I add my Cha mod (min 1) to my AC for that attack, potentially causing it to miss me", "If it misses, I can make one weapon attack against the attacker as part of this reaction" ]), action : [["reaction", ""]] }, "subclassfeature20" : { name : "Living Myth", source : [["UA:BnP", 3]], minlevel : 20, description : desc([ "As a bonus action, I can gain the following benefits for 1 minute:", " \u2022 I have advantage on all Charisma checks", " \u2022 Once on each of my turns when I miss with a weapon attack, I can cause it to hit", " \u2022 As a reaction when I fail a saving throw, I can choose to succeed instead" ]), recovery : "long rest", usages : 1, action : [["bonus action", ""]] } } }); // ua_20191003_Cleric-Druid-and-Wizard.js // This file adds the content from the Unearthed Arcana: Cleric, Druid, and Wizard article to MPMB's Character Record Sheet // Define the source SourceList["UA:CDnW"] = { name : "Unearthed Arcana: Cleric, Druid, and Wizard", abbreviation : "UA:CDnW", group : "Unearthed Arcana", url : "https://media.wizards.com/2019/dnd/downloads/UA-TwilightFireNames.pdf", date : "2019/10/03" }; // Add a subclass for the Cleric AddSubClass("cleric", "twilight domain-ua", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*(twilight|transition)).*$/i, subname : "Twilight Domain", source : [["UA:CDnW", 1]], spellcastingExtra : ["faerie fire", "sleep", "darkness", "invisibility", "aura of vitality", "leomund's tiny hut", "aura of life", "greater invisibility", "circle of power", "dream"], features : { "subclassfeature1" : { name : "Bonus Proficiency", source : [["UA:CDnW", 1]], minlevel : 1, description: desc("I gain proficiency with martial weapons and heavy armor"), armorProfs : [false, false, true, false], weaponProfs : [false, true] }, "subclassfeature1.1" : { name : "Eyes of Night", source : [["UA:CDnW", 1]], minlevel : 1, description : desc([ "I gain Darkvision with unlimited range and can give this benefit to allies", "As an action, I can grant this to chosen creatures I can see within 10 ft for 10 minutes" ]), vision : [["Darkvision", "unlimited"]], additional : "extend to others", usages : "Wis mod per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest", action : [["action", ""]] }, "subclassfeature1.2" : { name : "Vigilant Blessing", source : [["UA:CDnW", 1]], minlevel : 1, description : desc([ "As an action, I can grant myself or a creature I touch adv. on the next initiative roll", "This benefit ends immediately after the roll or when I use this feature again" ]), action : [["action", ""]] }, "subclassfeature2" : { name : "Channel Divinity: Twilight Sanctuary", source : [["UA:CDnW", 1]], minlevel : 2, description : desc([ "As an action, I can use my holy symbol to create a 30-ft radius sphere around myself", "It moves with me, is filled with dim light, and lasts for 1 min or until I'm incapacitated", "When a creature, including me, ends its turn inside the sphere, I can grant it a benefit", "It either gains 1d8 temp HP or one effect causing it to be charmed or frightened ends" ]), action : [["action", ""]] }, "subclassfeature6" : { name : "Steps of the Brave", source : [["UA:CDnW", 2]], minlevel : 6, description : desc([ "I have adv. on saves against being frightened", "As a bonus action while I'm in dim light or darkness, I can give myself a fly speed", "This fly speed is equal to my walking speed and lasts until the end of my next turn" ]), action : [["bonus action", ""]] }, "subclassfeature8" : { name : "Divine Strike", source : [["UA:CDnW", 1]], minlevel : 8, description: desc("Once per turn, when I hit a creature with a weapon attack, I can do extra damage"), additional : levels.map(function (n) { if (n < 8) return ""; return "+" + (n < 14 ? 1 : 2) + "d8 psychic damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && v.isWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.cleric.level < 14 ? 1 : 2) + 'd8 psychic damage'; } }, "Once per turn, I can have one of my weapon attacks that hit do extra psychic damage." ] } }, "subclassfeature17" : { name : "Midnight Shroud", source : [["UA:CDnW", 2]], minlevel : 17, description : desc([ "When I use a spell slot to cast Darkness, I can choose my Wis mod of creatures I can see", "The chosen creatures can see through the Darkness; I can be one of the chosen creatures" ]), calcChanges : { spellAdd : [ // note that several healing spells are not present here because they don't restore hp at casting (only later) function (spellKey, spellObj, spName) { if (spellKey == "darkness" && (!spellObj.fistCol || spellObj.fistCol == "markedbox")) { spellObj.description = "15-ft rad darkness on point/obj; no darkvision; only magic light SL 3+ works; Wis mod of crea can see"; return true; } }, "When I cast Darkness using a spell slot, I can choose a number of creatures that I can see (myself included) equal to my Wisdom modifier (minimum 1).The chosen creatures can see through the Darkness." ] } } } }); // Add a subclass for the Druid AddSubClass("druid", "circle of wildfire-ua", { regExpSearch : /^(?=.*(druid|shaman))(?=.*wild.{0,1}fire).*$/i, subname : "Circle of Wildfire", subnameShort: "Wildfire", source : [["UA:CDnW", 2]], features : { "subclassfeature2" : { name : "Circle Spells", source : [["UA:CDnW", 2]], minlevel : 2, description : desc([ "My mystical bond with a wildfire spirit gives me the ability to cast certain spells", "These are always prepared, but don't count against the number of spells I can prepare", "In addition, I learn the Fire Bolt cantrip" ]), spellcastingBonus : [{ name : "Circle Spells", spells : ["fire bolt"], selection : ["fire bolt"], firstCol : "atwill" }], spellcastingExtra : ["locate animals or plants", "scorching ray", "fireball", "plant growth", "aura of life", "fire shield", "flame strike", "raise dead"] }, "subclassfeature2.1" : { name : "Summon Wildfire", source : [["UA:CDnW", 2]], minlevel : 2, description : desc([ "As an action, I can expend a use of wild shape to summon a wildfire spirit within 30 ft", "All within 10 ft of where it manifests must make a Dex save or take 2d10 fire damage", "It disappears after 1 hour, when it is reduced to 0 HP, or I summon another", "It obeys my commands, is friendly to my allies and I, and acts on my initiative, after me", "Unless I use a bonus action to command it, it only takes the Dodge action on its turn", "Its HP maximum is equal to its Con mod + my Wis mod + five times my druid level" ]), action : [["action", ""], ["bonus action", "Command Wildfire"]], creaturesAdd : [["Wildfire Spirit"]], creatureOptions : [{ name : "Wildfire Spirit", source : [["UA:CDnW", 3]], size : 4, type : "Elemental", alignment : "Chaotic", ac : 13, hp : 12, hd : [2, 6], speed : "20 ft, fly 30 ft (hover)", scores : [10, 14, 14, 13, 15, 11], saves : ["", 4, 4, "", 4, ""], skills : { "nature" : 4 }, damage_immunities : "fire", condition_immunities : "charmed, frightened, grappled, prone, restrained", senses : "Darkvision 60 ft", passivePerception : 12, languages : "understands the languages of its creator", challengeRating : "0", proficiencyBonus : 2, proficiencyBonusLinked : true, attacksAction : 1, attacks : [{ name : "Flame Seed", ability : 2, damage : [1, 6, "fire"], range : "30 ft", description : "Ranged weapon attack", modifiers : ["", "Prof"], abilitytodamage : false }, { name : "Fiery Teleportation", ability : 5, damage : [1, 6, "fire"], range : "10 ft", description : "Dex save for all within 10 ft of teleportation origin, success - no damage; See traits", dc : true, modifiers : ["", "Prof"], abilitytodamage : false, useSpellMod : "druid" }, { name : "Fiery Manifestation", ability : 5, damage : [2, 10, "fire"], range : "10 ft", description : "Dex save for all within 10 ft where spirit is summoned, success - no damage", dc : true, abilitytodamage : false, useSpellMod : "druid" }], features : [{ name : "Creator", description : "The spirit obeys the commands of its creator and has the same proficiency bonus. It takes its turn immediately after its creator, on the same initiative count. It only takes the Dodge action, unless its creator takes a bonus action to command to do otherwise, in which case it can only take the Flame Seed, Fiery Teleportation, Dash, Disengage, Help, or Hide action." }], actions : [{ name : "Fiery Teleportation (1\xD7 per short rest)", description : "The spirit and each willing creature of its creator's choice within 5 ft of it teleport up to 30 ft to unoccupied spaces its creator can see. Each creature within 10 ft of the space that the spirit left must succeed on a Dexterity saving throw against its creator's spell save DC or take fire damage equal to 1d6 + its proficiency bonus." }], header : "Wildfire", calcChanges : { hp : function (totalHD, HDobj, prefix) { if (!classes.known.druid) return; var wisMod = Number(What('Wis Mod')); var drdLvl = classes.known.druid.level; var drdLvl5 = 5 * drdLvl; HDobj.alt.push(HDobj.conMod + wisMod + drdLvl5); HDobj.altStr.push(" = " + HDobj.conMod + " from its Constitution modifier\n + " + wisMod + " from its creator's Intelligence modifier\n + 5 \xD7 " + drdLvl + " from five times its creator's druid level (" + drdLvl5 + ")"); }, setAltHp : true, hpForceRecalc : true } }] }, "subclassfeature6" : { name : "Enhanced Bond", source : [["UA:CDnW", 3]], minlevel : 6, description : desc([ "While my wildfire spirit is present, I can have my spells originate from it (no range 'self')", "Also, I can then add 1d8 to a single roll of my spells that restore HP or deal fire damage" ]) }, "subclassfeature10" : { name : "Flames of Life", source : [["UA:CDnW", 3]], minlevel : 10, description : desc([ "As a reaction when a creature dies in 30 ft of me/wildfire spirit, I can have flames erupt", "The creature has to be Small or larger; The flames last for 1 minute or until touched", "When I see someone touch the flames, it heals or takes fire damage for 2d10 + Wis mod" ]), action : [["reaction", ""]], usages : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest" }, "subclassfeature14" : { name : "Blazing Endurance", source : [["UA:CDnW", 3]], minlevel : 14, description : desc([ "If I drop to 0 HP and don't die, I can stay at 1 HP instead with 5\xD7 druid level temp HP", "Also, all chosen creatures that I can see within 30 ft take 2d10 + druid level fire damage" ]), usages : 1, recovery : "long rest" } } }); // Add a subclass for the Wizard AddSubClass("wizard", "onomancy-ua", { regExpSearch : /onomancy|onomancer/i, subname : "Onomancy", source : [["UA:CDnW", 4]], fullname : "Onomancer", features : { "subclassfeature2" : { name : "Bonus Proficiencies", source : [["UA:CDnW", 4]], minlevel : 2, description: desc("I learn a language of my choice and gain proficiency with calligrapher's tools"), toolProfs : ["Calligrapher's tools"], languageProfs : [1] }, "subclassfeature2.1" : { name : "Extract Name", source : [["UA:CDnW", 4]], minlevel : 2, description : desc([ "As a bonus action, I can have a creature I can see within 60 ft make a Wisdom save", "If failed, it is charmed by me until my next turn ends and I mentally learn its true name", "If successful, I know that my magic failed and can't use this feature again on it" ]), usages : "Intelligence modifier per ", usagescalc : "event.value = Math.max(1, What('Int Mod'));", recovery : "long rest", action : [["bonus action", ""]] }, "subclassfeature2.2" : { name : "Fateful Naming", source : [["UA:CDnW", 4]], minlevel : 2, description : desc([ "I add Bane and Bless to my spellbook and they count as wizard spells for me", "These are always prepared, but don't count against the number of spells I can prepare", "I can cast either spell without using a spell slot by speaking the true name of a target" ]), spellcastingBonus : [{ name : "Fateful Naming", spells : ["bane", "bless"], selection : ["bane", "bless"], times : 2, firstCol : "markedbox" }], additional : "with true name", usages : "Int mod per ", usagescalc : "event.value = Math.max(1, What('Int Mod'));", recovery : "long rest", }, "subclassfeature6" : { name : "Resonants", source : [["UA:CDnW", 4]], minlevel : 6, description : desc([ 'Use the "Choose Feature" button above to add Resonants to the third page', "Whenever I gain a wizard level, I can replace a Resonant I know with another" ]), additional : levels.map(function (n) { return n < 6 ? "" : (n < 10 ? 2 : 4) + " resonants known"; }), extraTimes : levels.map(function (n) { return n < 6 ? 0 : n < 10 ? 2 : 4; }), extraname : "Resonant", extrachoices : ["Absorption", "Devastation", "Dissolution", "Nullification", "Puppetry", "Sympathy"], "absorption" : { name : "Absorption", source : [["UA:CDnW", 5]], description: desc("When the spell deals damage to the named target, I gain a number of temporary hit points"), additional : levels.map(function (n) { return (n < 10 ? 3 : n < 14 ? 4 : 5) + "d6 temporary hit points"; }) }, "devastation" : { name : "Devastation", source : [["UA:CDnW", 5]], description: desc("The named creature has disadvantage on its first saving throw against the spell") }, "dissolution" : { name : "Dissolution", source : [["UA:CDnW", 5]], description: desc("The first time the named creature takes damage from the spell, it takes extra damage"), additional : levels.map(function (n) { return "+" + (n < 10 ? 2 : n < 14 ? 3 : 4) + "d8 force damage"; }) }, "nullification" : { name : "Nullification", source : [["UA:CDnW", 5]], description : desc([ "If the named creature is affected by any other spells, I know what those spells are", "In addition, I can try to end one of my choice with an Int check (DC 10 + spell level)" ]) }, "puppetry" : { name : "Puppetry", source : [["UA:CDnW", 5]], description : desc([ "The first time the named creature takes damage from the spell, it is moved as well", "I choose to knock it prone or move it up to 10 ft directly towards me or away from me" ]) }, "sympathy" : { name : "Sympathy", source : [["UA:CDnW", 5]], description: desc("I can target the named creature with the spell even if I can't see it or it is has total cover") } }, "subclassfeature6.1" : { name : "Resonant Utterance", source : [["UA:CDnW", 4]], minlevel : 6, description : desc([ "When I use a spell slot to cast a wizard spell, I can use one resonant that I know", "The resonant will only work if I speak the true name of a creature targeted by the spell" ]), usages : "half wizard level per ", usagescalc : "event.value = classes.known.wizard ? Math.floor(classes.known.wizard.level / 2) : 0;", recovery : "long rest" }, "subclassfeature14" : { name : "Relentless Naming", source : [["UA:CDnW", 5]], minlevel : 14, description : desc([ "When I speak the true name of a creature when I cast a damage dealing spell at it,", "I can have that spell deal force or psychic damage instead of its normal damage type" ]) } } }); // ua_20191017_Fighter-Ranger-and-Rogue.js // This file adds the content from the Unearthed Arcana: Fighter, Ranger, and Rogue article to MPMB's Character Record Sheet // Define the source SourceList["UA:FRnR"] = { name : "Unearthed Arcana: Fighter, Ranger, and Rogue", abbreviation : "UA:FRnR", group : "Unearthed Arcana", url : "https://media.wizards.com/2019/dnd/downloads/UA-RuneSwarmRevived.pdf", date : "2019/10/17" }; // Add a subclass for the Fighter AddSubClass("fighter", "rune knight-ua", { regExpSearch : /^(?=.*rune)(?=.*knight).*$/i, subname : "Rune Knight", source : [["UA:FRnR", 1]], fullname : "Rune Knight", abilitySave : 4, features : { "subclassfeature3" : { name : "Bonus Proficiencies", source : [["UA:FRnR", 1]], minlevel : 3, description: desc("I gain proficiency with smith's tools and I learn to speak, read, and write Giant"), toolProfs : ["Smith's tools"], languageProfs : ["Giant"] }, "subclassfeature3.1" : { name : "Rune Magic", source : [["UA:FRnR", 1]], minlevel : 3, description : desc([ "I learn how to use runes to enhance my weapons, armor, and shields", 'Use the "Choose Feature" button above to select a rune and add it to the third page', "When I finish a long rest, I can inscribe each rune I know upon a different item I touch", "Each item can hold only one rune and remains there until I finish a long rest", "Runes inscribed on a carried object grant both a passive and a limited-use active effect", "Whenever I gain a fighter level, I can swap a rune I know for another", "The DC for a rune's abilities is 8 + my Proficiency bonus + my Intelligence modifier" ]), additional : levels.map(function (n){ return n < 3 ? "" : (n < 7 ? 2 : n < 10 ? 3 : n < 15 ? 4 : 5) + " runes known" }), extraTimes : levels.map(function (n) { return n < 3 ? 0 : n < 7 ? 2 : n < 10 ? 3 : n < 15 ? 4 : 5; }), extraname : "Rune", extrachoices : ["Haug (Hill Rune)", "Ild (Fire Rune)", "Ise (Frost Rune)", "Skye (Cloud Rune)", "Stein (Stone Rune)", "Uvar (Storm Rune)"], "haug (hill rune)" : { name : "Haug", source : [["UA:FRnR", 1]], description : desc([ "While I wear an object inscribed with this rune, I gain a resilience reminiscent of hill giants", "I always gain advantage on saves against being poisoned and resistance to poison damage", "As a bonus action, I can invoke it to gain resistance to bludg/slash/pierc damage for 1 min" ]), action : [["bonus action", " (invoke)"]], limfeaname : "Haug Rune", additional : "invoke", usages : ["", "", 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2], recovery : "short rest", dmgres : ["Poison"], savetxt : { adv_vs : ["poison"] } }, "ild (fire rune)" : { name : "Ild", source : [["UA:FRnR", 1]], description : desc([ "While I wear an object inscribed with this, I gain craftsmanship reminiscent of fire giants", "I always double my proficiency bonus when making an ability check with a tool", "When I hit a creature with a weapon attack, I can invoke it to summon fiery shackles", "It must make a Str save or be restrained for 1 min; Repeat save at end of each of its turns", "While restrained, the creature takes 2d6 fire damage at the start of each of its turns" ]), limfeaname : "Ild Rune", additional : "invoke", usages : ["", "", 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2], recovery : "short rest", skillstxt : "expertise with all tools I am proficient with", eval : function () { Checkbox('Too Exp', true); }, removeeval : function () { Checkbox('Too Exp', false); } }, "ise (frost rune)" : { name : "Ise", source : [["UA:FRnR", 2]], description : desc([ "While I wear an object inscribed with this, I gain a stoic calm reminiscent of frost giants", "I always gain advantage on Wisdom (Animal Handling) and Charisma (Intimidation) checks", "As a bonus action, I can invoke this rune to gain +2 Strength (max 30) for 10 minutes" ]), action : [["bonus action", " (invoke)"]], limfeaname : "Ise Rune", additional : "invoke", usages : ["", "", 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2], recovery : "short rest", advantages : [ ["Animal Handling", true], ["Intimidation", true] ] }, "skye (cloud rune)" : { name : "Skye", source : [["UA:FRnR", 2]], description : desc([ "While I wear an object inscribed with this, I gain a deceptiveness reminiscent of cloud giants", "I always gain advantage on Dexterity (Sleight of Hand) and Charisma (Deception) checks", "As a reaction when I or a target I see get hit by an attack within 30 ft, I can invoke this", "This causes the attack to target another within 30 ft with the same roll (ignore range)" ]), action : [["reaction", " (invoke)"]], limfeaname : "Skye Rune", additional : "invoke", usages : ["", "", 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2], recovery : "short rest", advantages : [ ["Sleight of Hand", true], ["Deception", true] ] }, "stein (stone rune)" : { name : "Stein", source : [["UA:FRnR", 2]], description : desc([ "While I wear an object inscribed with this, I gain insightfulness reminiscent of stone giants", "I always gain adv. on Wisdom (Insight) checks and I gain darkvision 60 ft (or +30 ft)", "As a reaction when a creature I can see ends it turn within 30 ft, I can invoke this rune", "This causes the creature to make a Wisdom save or be charmed by me for 1 minute", "While charmed, it descends into a dreamy stupor, becoming incapacitated and has speed 0", "This ends early if it takes damage or someone uses an action to shake it out of this state" ]), action : [["reaction", " (invoke)"]], limfeaname : "Stein Rune", additional : "invoke", usages : ["", "", 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2], recovery : "short rest", vision : [["Darkvision", "fixed 60"], ["Darkvision", "+30"]], advantages : [ ["Insight", true] ] }, "uvar (storm rune)" : { name : "Uvar", source : [["UA:FRnR", 2]], description : desc([ "While I wear an object inscribed with this rune, I can glimpse the future like storm giants", "I always gain adv. on Int (Arcana) checks and I can't be surprised while not incapacitated", "As a bonus action, I can invoke it to enter a prophetic state for 1 min or till incapacitated", "While in this state, I can use a reaction to cause a roll to gain advantage or disadvantage", "I can do this for attacks, saves, and checks of myself or others I can see within 60 ft of me" ]), action : [["bonus action", " (invoke)"]], limfeaname : "Uvar Rune", additional : "invoke", usages : ["", "", 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2], recovery : "short rest", advantages : [ ["Arcana", true] ], savetxt : { immune : ["surprised"] }, } }, "subclassfeature3.2" : { name : "Giant Might", source : [["UA:FRnR", 2]], minlevel : 3, description : desc([ "As a bonus action, I can imbue myself with giant magic for 1 minute and gain benefits:", " \u2022 Space permitted, I grow to Large size along with everything I'm wearing", " \u2022 Advantage on Strength check and saves; My weapon attacks deal extra damage" ]), usages : 2, recovery : "long rest", additional : levels.map(function (n){ return n < 3 ? "" : "+1d" + (n < 10 ? 6 : 8) + " weapon damage" }), action : [["bonus action", ""]], savetxt : { text : ["Adv. on Str saves in giant might"] } }, "subclassfeature7" : { name : "Defensive Runes", source : [["UA:FRnR", 2]], minlevel : 7, description : desc([ "As a reaction when I see a creature get hit by an attack within 60 ft, I can grant it AC", "The creature adds 1 + my Int mod (min 2) to its AC for the attack; I learn another rune" ]), action : [["reaction", ""]] }, "subclassfeature10" : { name : "Great Stature", source : [["UA:FRnR", 2]], minlevel : 10, description : desc([ "My runes permanently make me grow; I add 3d4 inches to my length", "In addition, my Giant Might adds more weapon damage and I learn another rune" ]) }, "subclassfeature15" : { name : "Rune Magic Mastery", source : [["UA:FRnR", 3]], minlevel : 15, description : " \n I can use each of my runes twice instead of once per short rest and I learn another rune" }, "subclassfeature18" : { name : "Blessing of the All Father", source : [["UA:FRnR", 3]], minlevel : 18, description: desc("When I use Giant Might, I can have it also affect a willing ally that I can see within 60 ft") } } }); // Add a subclass for the Ranger (and also to the Revised Ranger) var UAFRnR_rangerSubclassSwarmkeeperUA = AddSubClass("ranger", "swarmkeeper-ua", { regExpSearch : /swarmkeeper/i, subname : "Swarmkeeper", source : [["UA:FRnR", 3]], fullname : "Swarmkeeper", features : { "subclassfeature3" : { name : "Swarmkeeper Magic", source : [["UA:FRnR", 3]], minlevel : 3, description : desc([ "I learn Mage Hand; When I cast it, the hand takes the form of swarming nature spirits", "I get bonus spells known, which do not count against the number of spells I can know" ]), spellcastingBonus : [{ name : "Swarmkeeper Magic", spells : ["mage hand"], selection : ["mage hand"], firstCol : "atwill" }], spellcastingExtra : ["faerie fire", "web", "gaseous form", "giant insect", "insect plague"], spellcastingExtraApplyNonconform : true }, "subclassfeature3.1" : { name : "Gathered Swarm", source : [["UA:FRnR", 3]], minlevel : 3, description : desc([ "I constantly have a swarm of fey spirits crawling in my space, they look like Tiny beasts", "As a bonus action, I can agitate that swarm for 1 minute, empowering my attacks", "Once per turn when I hit with a weapon attack, I can have it deal extra force damage", "In addition, the creature hit is moved 5 ft towards or away from me (my choice)" ]), action : [["bonus action", ""]], additional : levels.map(function (n) { return n < 3 ? "" : "+" + (n < 11 ? 1 : 2) + "d6 force dmg"; }), usages : "Wis mod per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest", }, "subclassfeature7" : { name : "Writhing Tide", source : [["UA:FRnR", 3]], minlevel : 7, description : desc([ "Whenever I activate Gathered Swarm, I gain one additional benefit of my choice:", " \u2022 I gain +10 ft walking speed and I can take the Disengage action as a bonus action", " \u2022 I gain climb speed equal to walk speed & need no check for difficult surfaces or ceilings", " \u2022 I gain a 10 ft fly speed and I can hover" ]), autoSelectExtrachoices : [{ extrachoice : "scuttling eyes", minlevel : 11 }, { extrachoice : "storm of minions", minlevel : 15 }], "scuttling eyes" : { name : "Scuttling Eyes", extraname : "Swarmkeeper 11", source : [["UA:FRnR", 4]], description : desc([ "As an action, I can from a spirit of my swarm into a Tiny beast of my choice for 1 hour", "It has AC 18, my senses, and 40 ft speed it can use to walk, climb, fly, or swim", "It telepathically relays what it sees and hears to me and I can speak through it", "During my turn, I can telepathically command it and it can hide using my Stealth", "If it is damaged, I must make a Wis save (DC 10 or half damage if higher) or it vanishes", "As an action, I can dismiss it early and I can teleport to an empty space within 5 ft of it", "I can also invoke this ability by spending a spell slot of 3rd level or higher" ]), action : [["action", " (summon/dismiss)"]], additional : "or level 3 spell slot", usages : 1, recovery : "long rest", }, "storm of minions" : { name : "Storm of Minions", extraname : "Swarmkeeper 15", source : [["UA:FRnR", 4]], description : desc([ "As an action, I can create a 10-ft radius swarm-filled sphere on a point within 120 ft", "I can choose any number of creatures that I can see to be unaffected by it", "It lasts minute, is difficult terrain for others, and I can move it 30 ft as a bonus action", "Others that start their turn in it take 2d8 necrotic damage and must make a Con save", "On a success, they take half damage, but if failed, are blinded until their next turn starts", "At the start of my turn, if a Small or larger creature was damaged by it, I heal 1d8 HP", "I can also invoke this ability by spending a spell slot of 4th level or higher" ]), action : [["action", ""]], additional : "or level 4 spell slot", usages : 1, recovery : "long rest" } } } }); if (ClassList.rangerua) { ClassList.rangerua.subclasses[1].push(UAFRnR_rangerSubclassSwarmkeeperUA); }; // Add a subclass for the Rogue AddSubClass("rogue", "the revived-ua", { regExpSearch : /^(?=.*(rogue|miscreant))(?=.*revived).*$/i, subname : "the Revived", source : [["UA:FRnR", 4]], features : { "subclassfeature3" : { name : "Tokens of Past Lives", source : [["UA:FRnR", 4]], minlevel : 3, description: desc("I gain a chosen skill or tool proficiency and can change it whenever I finish a long rest"), skillstxt : "Choose one skill or tool; I can change the choice whenever I finish a long rest" }, "subclassfeature3.1" : { name : "Revived Nature", source : [["UA:FRnR", 4]], minlevel : 3, description : desc([ "I have resistance to poison damage and adv. on saves against disease and being poisoned", "I don't need to eat, drink, breathe, or sleep; I must spend 4 hours inactive for a long rest", "I'm motionless during this inactive state, remain semiconscious, and can hear as normal" ]), dmgres : ["Poison"], savetxt : { adv_vs : ["disease", "poison"] } }, "subclassfeature3.2" : { name : "Bolts from the Grave", source : [["UA:FRnR", 5]], minlevel : 3, description : desc([ "Immediately after I use my cunning action, I can unleash bolts of necrotic energy", "This is a ranged spell attack with 30 ft range, which I'm proficient with, using Dexterity", "If it hits, it deals my sneak attack damage, provided I didn't use sneak attack this turn" ]), weaponOptions : [{ regExpSearch : /^(?=.*bolts?)(?=.*grave).*$/i, name : "Bolts from the Grave", source : [["UA:FRnR", 5]], ability : 2, type : "Spell", damage : [1, 6, "necrotic"], range : "30 ft", description : "Immediately after using cunning action; Only if I not yet used sneak attack this turn", abilitytodamage : true, isBoltsFromTheGrave : true, selectNow : true }], calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.rogue && classes.known.rogue.level && v.theWea.isBoltsFromTheGrave) { fields.Damage_Die = Math.ceil(classes.known.rogue.level / 2) + 'd6'; }; } ] } }, "subclassfeature9" : { name : "Connect with the Dead", source : [["UA:FRnR", 5]], minlevel : 9, description : desc([ "I can cast Speak with Dead without a spell slot or material components using Intelligence", "Doing this gives me a random proficiency (roll 1d3) that lasts until I finish my next rest:", "[1] language of my choice; [2] skill or tool of my choice; [3] saving throw of my choice" ]), spellcastingBonus : [{ name : "Connect with the Dead", spells : ["speak with dead"], selection : ["speak with dead"], firstCol : "oncesr", spellcastingAbility : 4 }], spellChanges : { "speak with dead" : { components : "V,S", compMaterial : "", changes : "Using Connect with the Dead, I can cast Speak with Dead once per short rest without using a spell slot or material component." } }, usages : 1, recovery : "short rest" }, "subclassfeature13" : { name : "Audience with Death", source : [["UA:FRnR", 5]], minlevel : 13, description : desc([ "I have adv. on death saves; Whenever I make one, I can ask a question to a death entity", 'It answers truthfully with "yes", "no", or "unknown", using the knowledge of all that died', "When at 0 HP and healed or stabilized, I can change any of my traits/ideals/bonds/flaws" ]), savetxt : { text : ["Adv. on death saves"] }, autoSelectExtrachoices : [{ extrachoice : "ethereal jaunt", minlevel : 17 }], "ethereal jaunt" : { name : "Ethereal Jaunt", source : [["UA:FRnR", 5]], extraname : "the Revived 17", description : desc([ "I can now use my cunning action to teleport to an unoccupied space within 30 ft", "I don't need to see where I'm going, but it fails if I'd go through a magical force effect", "I'm shunted if I appear in an occupied space and take force damage of 2\xD7 the ft moved" ]) } } } }); // ua_20191104_Class-Feature-Variants.js // This file adds the content from the Unearthed Arcana: Class Feature Variants article to MPMB's Character Record Sheet // Define the source SourceList["UA:CFV"] = { name : "Unearthed Arcana: Class Feature Variants", abbreviation : "UA:CFV", group : "Unearthed Arcana", url : "https://media.wizards.com/2019/dnd/downloads/UA_ClassFeatures.pdf", date : "2019/11/04" }; // Proficiency Versatility is not something governed by import automation, thus skipped // Barbarian alternative class features CreateClassFeatureVariant("barbarian", "danger sense", "Survival Instincts (ua)", { name : "Survival Instincts", source : [["UA:CFV", 1]], description : desc([ "I gain proficiency and expertise with two skills of my choice", "I can choose from Animal Handling, Medicine, Nature, Perception, and Survival" ]), skillstxt : "Proficiency and expertise with two from Animal Handling, Medicine, Nature, Perception, and Survival" }); CreateClassFeatureVariant("barbarian", "fast movement", "Instinctive Pounce (ua)", { name : "Instinctive Pounce", source : [["UA:CFV", 1]], description : desc([ "As a reaction when a creature ends it move within 15 ft of me, I can move towards it", "I move up to half my speed closer to it; This move doesn't provoke opportunity attacks" ]), action : [["reaction", ""]] }); // Bard alternative class features enhancements AddFeatureChoice(ClassList.bard.features.spellcasting, true, "Expanded Spell List (ua)", { name : "Expanded Bard Spell List", extraname : "Optional Bard 1", source : [["UA:CFV", 3]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "bard" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["cause fear", "color spray", "command", "aid", "enlarge/reduce", "mind spike", "mirror image", "phantasmal force", "mass healing word", "slow", "tiny servant", "phantasmal killer", "contact other plane", "rary's telepathic bond", "heroes' feast", "mental prison", "scatter", "tenser's transformation", "power word pain", "prismatic spray", "antipathy/sympathy", "maze", "prismatic wall"]); }, "This alternative class feature enhancement expands the spell list of the bard class with the following spells (spell level in brackets): Cause Fear (1), Color Spray (1), Command (1), Aid (2), Enlarge/Reduce (2), Mind Spike (2), Mirror Image (2), Phantasmal Force (2), Mass Healing Word (3), Slow (3), Tiny Servant (3), Phantasmal Killer (4), Contact Other Plane (5), Rary's Telepathic Bond (5), Heroes' Feast (6), Mental Prison (6), Scatter (6), Tenser's Transformation (6), Power Word Pain (7), Prismatic Spray (7), Antipathy/Sympathy (8), Maze (8), and Prismatic Wall (9)." ] } }, "Optional 1st-level bard features"); AddFeatureChoice(ClassList.bard.features.spellcasting, true, "Magical Inspiration (ua)", { name : "Magical Inspiration", extraname : "Optional Bard 1", source : [["UA:CFV", 3]], description : desc([ "A bardic inspiration die recipient can also use it when casting a damaging or healing spell", "They can expend the die and add its result to one damage or healing roll of the spell" ]) }, "Optional 1st-level bard features"); AddFeatureChoice(ClassList.bard.features.spellcasting, true, "Spell Versatility (ua)", { name : "Spell Versatility", extraname : "Optional Bard 1", source : [["UA:CFV", 3]], description: desc("After a long rest, I can swap a bard cantrip or spell I know for another of the same level") }, "Optional 1st-level bard features"); // Cleric alternative class features and enhancements AddFeatureChoice(ClassList.cleric.features.spellcasting, true, "Cantrip Versatility (ua)", { name : "Cantrip Versatility", extraname : "Optional Cleric 1", source : [["UA:CFV", 3]], description: desc("Whenever I gain a cleric level, I can replace a cleric cantrip I know with another") }, "Optional 1st-level cleric features"); AddFeatureChoice(ClassList.cleric.features.spellcasting, true, "Expanded Spell List (ua)", { name : "Expanded Cleric Spell List", extraname : "Optional Cleric 1", source : [["UA:CFV", 3]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "cleric" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["cause fear", "wrathful smite", "branding smite", "aura of vitality", "aura of life", "aura of purity", "skill empowerment", "wall of light", "power word heal"]); }, "This alternative class feature enhancement expands the spell list of the cleric class with the following spells (spell level in brackets): Cause Fear (1), Wrathful Smite (1), Branding Smite (2), Aura of Vitality (3), Aura of Life (4), Aura of Purity (4), Skill Empowerment (5), Wall of Light (5), and Power Word Heal (9)." ] } }, "Optional 1st-level cleric features"); AddFeatureChoice(ClassList.cleric.features["channel divinity"], true, "Harness Divine Power (ua)", { name : "Channel Divinity:\xA0Harness Divine Power", source : [["UA:CFV", 4]], description: desc("As a bonus action, I can use my holy symbol and a prayer to regain 1 used level 1 spell slot"), action : [["bonus action", ""]] }, "Optional 2nd-level cleric features"); // Cleric subclass alternative feature, so only run this after we are sure all subclasses have been added RunFunctionAtEnd(function() { for (var i = 0; i < ClassList.cleric.subclasses[1].length; i++) { var domain = ClassList.cleric.subclasses[1][i]; var objDomain = ClassSubList[domain]; if (!objDomain || !objDomain.features.subclassfeature8 || !(/divine strike|potent spellcasting/i).test(objDomain.features.subclassfeature8.name)) continue; CreateClassFeatureVariant(domain, "subclassfeature8", "Blessed Strikes (ua)", { name : "Blessed Strikes", source : [["UA:CFV", 4]], description : desc([ "When a creature is damaged by my weapon attack/spell, I can do +1d8 radiant damage", "Once I deal this extra damage, I can't do so again until the start of my next turn" ]), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && (v.isWeapon || (v.thisWeapon[3] && SpellsList[v.thisWeapon[3]].level === 0)) && /\d/.test(fields.Damage_Die)) { fields.Description += (fields.Description ? '; ' : '') + 'Once per round +1d8 radiant damage'; } }, "Once per turn when a creature takes damage from one of my spell or weapon attacks, I can also deal 1d8 radiant damage to the target." ] } }); } }); // Druid alternative class features and enhancements AddFeatureChoice(ClassList.druid.features.spellcasting, true, "Cantrip Versatility (ua)", { name : "Cantrip Versatility", extraname : "Optional Druid 1", source : [["UA:CFV", 4]], description: desc("Whenever I gain a druid level, I can replace a druid cantrip I know with another") }, "Optional 1st-level druid features"); AddFeatureChoice(ClassList.druid.features.spellcasting, true, "Expanded Spell List (ua)", { name : "Expanded Druid Spell List", extraname : "Optional Druid 1", source : [["UA:CFV", 4]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "druid" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["ceremony", "protection from evil and good", "augury", "continual flame", "enlarge/reduce", "aura of vitality", "elemental weapon", "revivify", "thunder step", "wall of sand", "divination", "fire shield", "cone of cold", "dawn", "immolation", "flesh to stone", "symbol", "incendiary cloud", "mass polymorph", "power word heal"]); }, "This alternative class feature enhancement expands the spell list of the druid class with the following spells (spell level in brackets): Ceremony (1), Protection from Evil and Good (1), Augury (2), Continual Flame (2), Enlarge/Reduce (2), Aura of Vitality (3), Elemental Weapon (3), Revivify (3), Thunder Step (3), Wall of Sand (3), Divination (4), Fire Shield (4), Cone of Cold (5), Dawn (5), Immolation (5), Flesh to Stone (6), Symbol (7), Incendiary Cloud (8), Mass Polymorph (9), and Power Word Heal (9)." ] } }, "Optional 1st-level druid features"); // The enhancement option for fighting styles has to be added to each class separately AddFeatureChoice(ClassList.fighter.features["fighting style"], true, "Martial Versatility (ua)", { name : "Martial Versatility", extraname : "Optional Fighter 1", source : [["UA:CFV", 12]], description: desc("Whenever I gain a fighter level, I can swap a fighting style I know for another I'm allowed") }, "Optional 1st-level fighter features"); // All the other fighting styles are available for all three classes, fighter, paladin, and ranger, so add them to all three here AddFightingStyle(["fighter", "ranger", "paladin"], "Blind Fighting (ua)", { name : "Blind Fighting Style", source : [["UA:CFV", 12]], description : desc([ "Being unable to see a creature doesn't impose disadvantage on my attack rolls against it", "However, this doesn't help me if the creature is hidden from me" ]) }); AddFightingStyle(["ranger"], "Interception", { // different for the Ranger, doesn't get this in TCoE name : "Interception Fighting Style", source : [["UA:CFV", 12]], description : desc([ "As a reaction when a creature I can see hits a target within 5 ft of me, I can intercept", "I reduce the damage the target takes by 1d10 + my Proficiency Bonus (min 0 damage)", "I can only do this while wielding a shield or a simple or martial weapon" ]), action : [["reaction", ""]] }); AddFightingStyle(["fighter", "ranger", "paladin"], "Thrown Weapon Fighting (ua)", { name : "Thrown Weapon Fighting Style", source : [["UA:CFV", 13]], description : desc([ "I can draw a weapon with the thrown property as part of the attack I make with it", "In addition, my ranged attacks made with thrown weapons deal +1 damage" ]), calcChanges : { atkAdd : [ function (fields, v) { if (v.isThrownWeapon && v.isMeleeWeapon) { fields.Description += (fields.Description ? '; ' : '') + '+1 damage when thrown'; }; }, "I deal +1 damage when I hit a ranged attack made with a thrown weapon." ], atkCalc : [ function (fields, v, output) { if (v.isThrownWeapon && !v.isMeleeWeapon) { output.extraDmg += 1; }; }, "" ] } }); AddFightingStyle(["fighter", "ranger", "paladin"], "Unarmed Fighting (ua)", { name : "Unarmed Fighting Style", source : [["UA:CFV", 13]], description : desc([ "My unarmed strikes deal 1d6 damage, or 1d8 damage when I have both hands free", "When I successfully start a grapple, I can deal 1d4 bludgeoning damage to the target", "Until the grapple ends, I can also deal this damage whenever I hit it with a melee attack" ]), calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == "unarmed strike") { if (fields.Damage_Die == 1 || fields.Damage_Die == "1d4") fields.Damage_Die = '1d6'; fields.Description += (fields.Description ? '; ' : '') + 'Versatile (d8)'; }; }, "My unarmed strikes deal 1d6 damage instead of 1, which increases to 1d8 if I have both hands free to make an unarmed strike with.", 2 ] } }); if (ClassSubList["fighter-battle master"]) { // Fighter alternative class features and enhancements (only if Battle Master subclass exists) AddFeatureChoice(ClassSubList["fighter-battle master"].features["subclassfeature3.1"], true, "Maneuver Versatility (ua)", { name : "Maneuver Versatility", extraname : "Optional Battle Master 3", source : [["UA:CFV", 5]], description: desc("Whenever I finish a long rest, I can replace a Maneuver I know with another") }, "Optional 3rd-level battle master features"); // New Maneuver options AddFeatureChoice(ClassSubList["fighter-battle master"].features["subclassfeature3.1"], true, "Bait and Switch (ua)", { name : "Bait and Switch", source : [["UA:CFV", 5]], description : desc([ "On my turn, I can expend a superiority die to swap places with an ally within 5 ft", "Doing this costs me 5 ft of movement, but this doesn't provoke opportunity attacks", "The ally then adds the superiority die to its AC until the start of my next turn" ]) }); AddFeatureChoice(ClassSubList["fighter-battle master"].features["subclassfeature3.1"], true, "Brace (ua)", { name : "Brace", source : [["UA:CFV", 5]], description : desc([ "As a reaction when a creature I can see moves within 5 of me, I can attack it", "I expend a superiority die and make one weapon attack, adding the die to the damage" ]), limfeaname : "Brace\xA0", action : [["reaction", ""]] }); AddFeatureChoice(ClassSubList["fighter-battle master"].features["subclassfeature3.1"], true, "Restraining Strike", { name : "Restraining Strike", source : [["UA:CFV", 5]], description : desc([ "Immediately after hitting with a melee weapon attack, I can use a bonus action to grapple", "I add the superiority die to the Str (Athletics) check; I can only do this on my own turn", "The target is also restrained while grappled in this way" ]), action : [["bonus action", " (after melee weapon hit)"]] }); AddFeatureChoice(ClassSubList["fighter-battle master"].features["subclassfeature3.1"], true, "Silver Tongue", { name : "Silver Tongue", source : [["UA:CFV", 5]], description: desc("When I make a Cha (Deception) or Cha (Persuasion) check, I can add a superiority die to it") }); AddFeatureChoice(ClassSubList["fighter-battle master"].features["subclassfeature3.1"], true, "Snipe", { name : "Snipe", source : [["UA:CFV", 5]], description : desc([ "As a bonus action, I can expend a superiority die and make a ranged weapon attack", "I can draw a thrown weapon as part of making this attack; I add the die to the damage" ]), action : [["bonus action", ""]] }); AddFeatureChoice(ClassSubList["fighter-battle master"].features["subclassfeature3.1"], true, "Studious Eye", { name : "Studious Eye", source : [["UA:CFV", 5]], description: desc("When I make a Wis (Insight) or Int (Investigation) check, I can add a superiority die to it") }); } // Monk class features enhancements // Add the monk weapon options as extrachoices RunFunctionAtEnd(function () { var UACFV_Monk_Weapon = { name : "Martial Arts Weapons", extraname : "Monk Weapon", extrachoices : [], source : [["UA:CFV", 6]], description : desc([ "Unarmed strike \u0026 5 + Wis mod simple/martial weapons (not two-handed/heavy/special)", "With these monk weapons, I can use Dex instead of Str and the Martial Arts damage die", "When taking an Attack action with these, I get one unarmed strike as a bonus action" ]), calcChanges : { atkAdd : [ function (fields, v) { var monkWeapons = ["unarmed strike"].concat(GetFeatureChoice("classes", "monk", "martial arts", true)); if (classes.known.monk && classes.known.monk.level && (monkWeapons.indexOf(v.baseWeaponName) != -1 || (/monk weapon/i).test(v.WeaponTextName))) { var aMonkDie = function (n) { return n < 5 ? 4 : n < 11 ? 6 : n < 17 ? 8 : 10; }(classes.known.monk.level); try { var curDie = eval_ish(fields.Damage_Die.replace('d', '*')); } catch (e) { var curDie = 'x'; }; if (isNaN(curDie) || curDie < aMonkDie) { fields.Damage_Die = '1d' + aMonkDie; }; if (fields.Mod === 1 || fields.Mod === 2 || What(AbilityScores.abbreviations[fields.Mod - 1] + " Mod") < What(AbilityScores.abbreviations[v.StrDex - 1] + " Mod")) { fields.Mod = v.StrDex; } }; }, "I can use either Strength or Dexterity and my Martial Arts damage die in place of the normal damage die for any 'Monk Weapons', which include unarmed strike and 5 + my Wisdom modifier of simple or martial weapons of my choice that I'm proficient with and that don't have the two-handed, heavy, or special property.\n I can select these weapon using the \"Choose Feature\" button on the 2nd page, or have them count as such by including the words \"Monk Weapon\" in the name of the weapon.", 1 ] } }; for (var weapon in WeaponsList) { var aWea = WeaponsList[weapon]; // skip attacks that are not simple or martial weapons, that have the heavy, two-handed, or special property, are magic weapons, or those that are spells or cantrips if (aWea.isMagicWeapon || !(/simple|martial/i).test(aWea.type) || (/heavy|special|((^|[^+-]\b)2|\btwo).?hand(ed)?s?/i).test(aWea.description) || aWea.special || (/spell|cantrip/i).test(aWea.list)) continue; UACFV_Monk_Weapon.extrachoices.push(aWea.name); UACFV_Monk_Weapon[aWea.name.toLowerCase()] = { name : aWea.name, description : "", source : aWea.source, weaponsAdd : { select : [aWea.name] }, submenu : ((/simple/i).test(aWea.type) ? "\x1BSimple weapon, " : "Martial weapon, ") + ((/^(?!.*melee).*\d+.*$/i).test(aWea.range) ? "ranged" : "melee"), prereqeval : 'testSource("' + weapon + '", WeaponsList["' + weapon + '"], "weapExcl") ? "skip" : isProficientWithWeapon("' + weapon + '", WeaponsList["' + weapon + '"]);' } } CreateClassFeatureVariant("monk", "martial arts", "Choose Monk Weapons", UACFV_Monk_Weapon); // Move some stuff around, because the original Martial Arts feature was moved into a choice, but we want to keep its original "additional", "action", "eval", "removeeval" attributes var UACFV_Martial_Arts = ClassList.monk.features["martial arts"]; var UACFV_Martial_Arts_Original = UACFV_Martial_Arts["\x1B[original] martial arts"]; if (UACFV_Martial_Arts_Original) { ["additional", "action", "eval", "removeeval"].forEach(function (n) { if (!UACFV_Martial_Arts_Original[n]) return; UACFV_Martial_Arts[n] = UACFV_Martial_Arts_Original[n]; delete UACFV_Martial_Arts_Original[n]; }); } }); // Ki enhancements AddFeatureChoice(ClassList.monk.features.ki, true, "Ki-Fueled Strike (ua)", { name : "Ki-Fueled Strike", extraname : "Optional Monk 2", source : [["UA:CFV", 6]], description: desc("If I spend any ki points during my action, I can make an unarmed strike as a bonus action"), action : [["bonus action", ""]] }, "Optional 2nd-level monk features"); AddFeatureChoice(ClassList.monk.features.ki, true, "Distant Eye (1 ki point) (ua)", { name : "Distant Eye", extraname : "Optional Monk 2", source : [["UA:CFV", 6]], description : " [1 ki point]\n My ranged weapon attacks during this turn ignore the disadvantage from long range" }, "Optional 2nd-level monk features"); AddFeatureChoice(ClassList.monk.features.ki, true, "Quickened Healing (2 ki points) (ua)", { name : "Quickened Healing", extraname : "Optional Monk 2", source : [["UA:CFV", 6]], description : " [2 ki points]\n As an action, I can regain a number of hit points equal to the roll of my martial arts die", action : [["action", ""]] }, "Optional 2nd-level monk features"); // Paladin alternative class features and enhancements // The enhancement option for fighting styles has to be added to each class separately AddFeatureChoice(ClassList.paladin.features.spellcasting, true, "Martial Versatility (ua)", { name : "Martial Versatility", extraname : "Optional Paladin 2", source : [["UA:CFV", 12]], description: desc("Whenever I gain a paladin level, I can swap a fighting style I know for another I'm allowed") }, "Optional 2nd-level paladin features"); AddFeatureChoice(ClassList.paladin.features.spellcasting, true, "Expanded Spell List (ua)", { name : "Expanded Paladin Spell List", extraname : "Optional Paladin 2", source : [["UA:CFV", 6]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "paladin" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["gentle repose", "prayer of healing", "warding bond", "life transference", "spirit guardians", "dawn", "flame strike"]); }, "This alternative class feature enhancement expands the spell list of the paladin class with the following spells (spell level in brackets): Gentle Repose (2), Prayer of Healing (2), Warding Bond (2), Life Transference (3), Spirit Guardians (3), Dawn (5), and Flame Strike (5)." ] } }, "Optional 2nd-level paladin features"); AddFeatureChoice(ClassList.paladin.features["subclassfeature3.0-channel divinity"], true, "Harness Divine Power (ua)", { name : "Channel Divinity:\xA0Harness Divine Power", extraname : "Optional Paladin 3", source : [["UA:CFV", 6]], description: desc("As a bonus action, I can use my holy symbol and a prayer to regain 1 used level 1 spell slot"), action : [["bonus action", ""]] }, "Optional 3rd-level paladin features"); // Ranger alternative class features and enhancements var UACFV_Deft_Explorer = { name : "Deft Explorer", source : [["UA:CFV", 7]], description : desc('Use the "Choose Feature" button above to add a deft explorer benefit to the third page'), additional : levels.map(function (n) { return n < 6 ? "1 benefit" : (n < 10 ? 2 : 3) + " benefits"; }), extraTimes : levels.map(function (n) { return n < 6 ? 1 : n < 10 ? 2 : 3; }), extraname : "Deft Explorer Benefit", extrachoices : ["Canny", "Roving", "Tireless"], "canny" : { name : "Canny", source : [["UA:CFV", 7]], description : desc([ "I learn two language of my choice, and proficiency and expertise with one skill of my choice", "The skill I have to choose from: Animal Handling, Athletics, History, Insight, Investigation,", "Medicine, Nature, Perception, Stealth, or Survival" ]), languageProfs : [2], skillstxt : "Proficiency and expertise with one from Animal Handling, Athletics, History, Insight, Investigation, Medicine, Nature, Perception, Stealth, or Survival" }, "roving" : { name : "Roving", source : [["UA:CFV", 7]], description: desc("I gain +5 ft walking speed and climbing and swimming speed equal to my walking speed"), speed : { walk : { spd : "+5", enc : "+5" }, climb : { spd : "walk", enc : "walk" }, swim : { spd : "walk", enc : "walk" } } }, "tireless" : { name : "Tireless", source : [["UA:CFV", 7]], description : desc([ "Whenever I finish a short or long rest, I reduce my exhaustion level, if any, by 1", "As an action a number of times per day, I can give myself temp HP of 1d10 + Wis mod" ]), action : [["action", ""]], usages : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest" }, autoSelectExtrachoices : [] } CreateClassFeatureVariant("ranger", "natural explorer", "Deft Explorer (ua)", UACFV_Deft_Explorer); var UACFV_Favored_Foe = { name : "Favored Foe", source : [["UA:CFV", 7]], description : desc([ "I know Hunter's Mark and it doesn't count against the number of spells I can know", "I can cast it a number of times without using a spell slot or requiring concentration", "I can also use a spell slot to cast it as normal, but then it does require concentration" ]), spellcastingBonus : [{ name : "Favored Foe", spells : ["hunter's mark"], selection : ["hunter's mark"], firstCol : "Sp" }], usages : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest", calcChanges : { spellList : [ function(spList, spName, spType) { if ((spName === "ranger" || spName === "rangerua") && spType.indexOf("bonus") === -1) { if (!spList.notspells) spList.notspells = []; spList.notspells = spList.notspells.concat(["hunter's mark"]); } } ] } }; CreateClassFeatureVariant("ranger", "favored enemy", "Favored Foe (ua)", UACFV_Favored_Foe); // Now some easier alternatives/enhancements // The enhancement option for fighting styles has to be added to each class separately var UACFV_Ranger_Martial_Versatility = { name : "Martial Versatility", extraname : "Optional Ranger 2", source : [["UA:CFV", 12]], description: desc("Whenever I gain a ranger level, I can swap a fighting style I know for another I'm allowed") }; AddFeatureChoice(ClassList.ranger.features.spellcasting, true, "Martial Versatility (ua)", UACFV_Ranger_Martial_Versatility, "Optional 2nd-level ranger features"); var UACFV_Ranger_Expanded_Spell_List = { name : "Expanded Ranger Spell List", extraname : "Optional Ranger 2", source : [["UA:CFV", 7]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if ((spName !== "ranger" && spName !== "rangerua") || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["entangle", "searing smite", "aid", "enhance ability", "gust of wind", "magic weapon", "warding bond", "blinding smite", "meld into stone", "revivify", "tongues", "death ward", "dominate beast", "awaken", "greater restoration"]); }, "This alternative class feature enhancement expands the spell list of the ranger class with the following spells (spell level in brackets): Entangle (1), Searing Smite (1), Aid (2), Enhance Ability (2), Gust of Wind (2), Magic Weapon (2), Warding Bond (2), Blinding Smite (3), Meld into Stone (3), Revivify (3), Tongues (3), Death Ward (4), Dominate Beast (4), Awaken (5), and Greater Restoration (5)." ] } }; AddFeatureChoice(ClassList.ranger.features.spellcasting, true, "Expanded Spell List (ua)", UACFV_Ranger_Expanded_Spell_List, "Optional 2nd-level ranger features"); var UACFV_Ranger_Spell_Versatility = { name : "Spell Versatility", extraname : "Optional Ranger 2", source : [["UA:CFV", 8]], description: desc("When I finish a long rest, I can replace a ranger spell I know with another of the same level") }; AddFeatureChoice(ClassList.ranger.features.spellcasting, true, "Spell Versatility (ua)", UACFV_Ranger_Spell_Versatility, "Optional 2nd-level ranger features"); var UACFV_Primal_Awareness = { name : "Primal Awareness", source : [["UA:CFV", 8]], description : desc([ "I get bonus spells known, which do not count against the number of spells I can know", "In addition, I can cast each once per long rest without expending a spell slot" ]), calcChanges : { spellList : [ function(spList, spName, spType) { // Remove the bonus spells from the normally selectable list if ((spName === "ranger" || spName === "rangerua") && spType.indexOf("bonus") === -1) { if (!spList.notspells) spList.notspells = []; spList.notspells = spList.notspells.concat(["detect magic", "speak with animals", "beast sense", "locate animals or plants", "speak with plants", "locate creature", "commune with nature"]); } }, "I know the following spells, without them counting towards the maximum number of spells I can know: Detect Magic, Speak with Animals, Beast Sense, Locate Animals or Plants, Speak with Plants, Locate Creature, and Commune with Nature." ] }, spellcastingBonus : [{ name : "Primal Awareness", spells : ["detect magic", "speak with animals", "beast sense", "locate animals or plants", "speak with plants", "locate creature", "commune with nature"], selection : ["detect magic", "speak with animals", "beast sense", "locate animals or plants", "speak with plants", "locate creature", "commune with nature"], firstCol : "oncelr+markedbox", times : levels.map(function (n) { return n < 5 ? 2 : n < 9 ? 4 : n < 13 ? 5 : n < 17 ? 6 : 7; }) }] }; CreateClassFeatureVariant("ranger", "primeval awareness", "Primal Awareness (ua)", UACFV_Primal_Awareness); var UACFV_Fade_Away = { name : "Fade Away", source : [["UA:CFV", 8]], description : desc([ "As a bonus action, I can become invisible along with any equipment I'm wearing/carrying", "This invisibility lasts until the start of my next turn" ]), action : [["bonus action", ""]], usages : 1, recovery : "short rest" }; CreateClassFeatureVariant("ranger", "hide in plain sight", "Fade Away (ua)", UACFV_Fade_Away); if (ClassSubList["ranger-beast master"]) { AddFeatureChoice(ClassSubList["ranger-beast master"].features["subclassfeature3"], true, "Beast of the Air/Earth (ua)", { name : "Beast of the Air/Earth", extraname : "Optional Beast Master 3", source : [["UA:CFV", 8]], description : desc([ "My ranger's companion can be a primal beast whose lineage stretches back to the beginning", "This beast of the air or earth takes the form of a regular animal, but has different abilities", "Its hit points total is equal to its Con mod + my Wis mod + 5 times my ranger level", "As a bonus action, I can command it to make one attack or take the Hide action", "If it dies, I can revive it within 1 hour as an action where I expend a spell slot and touch it", "It then returns to life with all its hit points after 1 minute" ]), action : [["bonus action", "Command Beast of the Air/Earth"], ["action", "Revive Beast of the Air/Earth"]], creaturesAdd : [["Beast of the Air", true], ["Beast of the Earth", true]], creatureOptions : [{ name : "Beast of the Air", source : [["UA:CFV", 8]], size : 4, type : "Beast", alignment : "Neutral", ac : 13, hp : 6, hd : [1, 6], hdLinked : ["ranger", "spell-less ranger"], speed : "10 ft, fly 60 ft", scores : [6, 16, 13, 8, 14, 11], saves : ["", 5, 3, "", 4, ""], skills : { "perception" : 4, "stealth" : 5 }, senses : "Darkvision 60 ft", passivePerception : 14, languages : "understands the languages of its master (me)", challengeRating : "1/4", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Shred", ability : 2, damage : [1, 6, "slashing"], range : "Melee (5 ft)" }], features : [{ name : "Ready Companion", description : "As a bonus action, I can command the beast to make its shred attack or to Hide." }, { name : "Primal Rebirth", description : "If the beast has died within the last hour, I can use my action to touch it and expend a spell slot of 1st level or higher. The beast returns to life after 1 minute with all its hit points restored." }], traits : [{ name : "Flyby", description : "The beast doesn't provoke opportunity attacks when it flies out of an enemy's reach." }], calcChanges : { hp : function (totalHD, HDobj, prefix) { if (!classes.known.ranger && !classes.known["spell-less ranger"]) return; var wisMod = Number(What('Wis Mod')); var rngrLvl = classes.known.ranger ? classes.known.ranger.level : classes.known["spell-less ranger"].level; var rngrLvl5 = 5 * rngrLvl; HDobj.alt.push(HDobj.conMod + wisMod + rngrLvl5); HDobj.altStr.push(" = " + HDobj.conMod + " from its Constitution modifier\n + " + wisMod + " from its master's Wisdom modifier\n + 5 \xD7 " + rngrLvl + " from five times its master's ranger level (" + rngrLvl5 + ")"); }, setAltHp : true, hpForceRecalc : true }, companionApply : "companion" }, { name : "Beast of the Earth", source : [["UA:CFV", 9]], size : 3, type : "Beast", alignment : "Neutral", ac : 12, hp : 7, hd : [1, 8], hdLinked : ["ranger", "spell-less ranger"], speed : "40 ft, climb or swim 40 ft", scores : [14, 14, 15, 8, 14, 11], saves : ["", 4, 4, "", 4, ""], skills : { "perception" : 4, "stealth" : 4 }, senses : "Darkvision 60 ft", passivePerception : 14, languages : "understands the languages of its master (me)", challengeRating : "1/4", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Maul", ability : 1, damage : [1, 6, "slashing"], range : "Melee (5 ft)", description : "If used after moving 20 ft straight in the same round, see Charge trait" }], features : [{ name : "Movement Mode", description : "When I bond with the beast, I choose wether it has a climb speed or a swim speed." }, { name : "Ready Companion", description : "As a bonus action, I can command the beast to make its shred attack or to Hide." }, { name : "Primal Rebirth", description : "If the beast has died within the last hour, I can use my action to touch it and expend a spell slot of 1st level or higher. The beast returns to life after 1 minute with all its hit points restored." }], traits : [{ name : "Charge", description : "If the beast moves at least 20 ft straight toward a target and then hits it with a maul attack on the same turn, the target takes an extra 1d6 slashing damage. If the target is a creature, it must succeed on a Strength saving throw against my spell save DC or be knocked prone." }], calcChanges : { hp : function (totalHD, HDobj, prefix) { if (!classes.known.ranger && !classes.known["spell-less ranger"]) return; var wisMod = Number(What('Wis Mod')); var rngrLvl = classes.known.ranger ? classes.known.ranger.level : classes.known["spell-less ranger"].level; var rngrLvl5 = 5 * rngrLvl; HDobj.alt.push(HDobj.conMod + wisMod + rngrLvl5); HDobj.altStr.push(" = " + HDobj.conMod + " from its Constitution modifier\n + " + wisMod + " from its master's Wisdom modifier\n + 5 \xD7 " + rngrLvl + " from five times its master's ranger level (" + rngrLvl5 + ")"); }, setAltHp : true, hpForceRecalc : true }, companionApply : "companion" }] }, "Optional 3rd-level beast master features"); } // Add the Ranger alternative class features also to the Revised Ranger, if it exists if (ClassList["rangerua"]) { CreateClassFeatureVariant("rangerua", "natural explorer", "Deft Explorer (ua)", UACFV_Deft_Explorer); // Add Favored Foe as an alternative choice (can't be done by automation because of choices) and add "Favored Foe" variant option // Move some attributes from the main object to the favored enemy choice objects ['additional', 'languageProfs', 'calcChanges'].forEach( function(attr) { var fea = ClassList.rangerua.features["favored enemy"]; if (!fea[attr]) return; // Move the attribute to each of the choices for (var i = 0; i < fea.choices.length; i++) { var aCh = fea[fea.choices[i].toLowerCase()]; if (aCh.source) continue; // don't do options that are not part of the original entry (which don't have a source) aCh[attr] = fea[attr]; } // Now delete the attributes from the parent object delete fea[attr]; }); // Now add the alternative class feature as another choice AddFeatureChoice(ClassList.rangerua.features["favored enemy"], false, "[alternative feature] Favored Foe (ua)", UACFV_Favored_Foe); // The enhancement option for fighting styles has to be added to each class separately AddFeatureChoice(ClassList.rangerua.features.spellcasting, true, "Martial Versatility (ua)", UACFV_Ranger_Martial_Versatility, "Optional 2nd-level ranger features"); AddFeatureChoice(ClassList.rangerua.features.spellcasting, true, "Expanded Spell List (ua)", UACFV_Ranger_Expanded_Spell_List, "Optional 2nd-level ranger features"); AddFeatureChoice(ClassList.rangerua.features.spellcasting, true, "Spell Versatility (ua)", UACFV_Ranger_Spell_Versatility, "Optional 2nd-level ranger features"); CreateClassFeatureVariant("rangerua", "primeval awareness", "Primal Awareness (ua)", UACFV_Primal_Awareness); CreateClassFeatureVariant("rangerua", "hide in plain sight", "Fade Away (ua)", UACFV_Fade_Away); } // Rogue alternative class feature enhancement AddFeatureChoice(ClassList.rogue.features["cunning action"], true, "Cunning Action: Aim (ua)", { name : "Cunning Action: Aim", extraname : "Optional Rogue 2", source : [["UA:CFV", 9]], description : desc([ "I can also use my cunning action bonus action to carefully aim my next attack", "If I don't move in my turn, I give myself adv. on my next attack in the current turn", "After I use cunning action to aim, my speed is 0 until the end of the current turn" ]) }, "Optional 2nd-level rogue features"); // Sorcerer alternative class features and enhancements AddFeatureChoice(ClassList.sorcerer.features.spellcasting, true, "Expanded Spell List (ua)", { name : "Expanded Sorcerer Spell List", extraname : "Optional Sorcerer 1", source : [["UA:CFV", 9]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "sorcerer" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["primal savagery", "grease", "protection from evil and good", "flame blade", "flaming sphere", "vampiric touch", "fire shield", "flesh to stone", "demiplane", "foresight"]); }, "This alternative class feature enhancement expands the spell list of the sorcerer class with the following spells (spell level in brackets): Primal Savagery (cantrip), Grease (1), Protection from Evil and Good (1), Flame Blade (2), Flaming Sphere (2), Vampiric Touch (3), Fire Shield (4), Flesh to Stone (6), Demiplane (8), and Foresight (9)." ] } }, "Optional sorcerer features"); AddFeatureChoice(ClassList.sorcerer.features.spellcasting, true, "Spell Versatility (ua)", { name : "Spell Versatility", extraname : "Optional Sorcerer 1", source : [["UA:CFV", 10]], description: desc("After a long rest, I can swap a sorcerer cantrip/spell I know for another of the same level") }, "Optional sorcerer features"); // Font of Magic options AddFeatureChoice(ClassList.sorcerer.features["font of magic"], true, "Empowering Reserves", { name : "Empowering Reserves", extraname : "Optional Sorcerer 2", source : [["UA:CFV", 10]], description : " [2 sorcery points]\n When I make an ability check on my turn, I can gain advantage on the check" }, "Optional 2nd-level sorcerer features"); AddFeatureChoice(ClassList.sorcerer.features["font of magic"], true, "Imbuing Touch", { name : "Imbuing Touch", extraname : "Optional Sorcerer 2", source : [["UA:CFV", 10]], description : " [2 sorcery points]\n As an action, I can touch a nonmagical weapon and make it count as magical for 1 minute", action : [["action", " (2 sorcery points)"]] }, "Optional 2nd-level sorcerer features"); AddFeatureChoice(ClassList.sorcerer.features["font of magic"], true, "Sorcerous Fortitude (ua)", { name : "Sorcerous Fortitude", extraname : "Optional Sorcerer 2", source : [["UA:CFV", 10]], description : " [1+ sorcery points]\n As an action, I can gain 1d4 temporary hit points per sorcery point I spend", action : [["action", " (1+ sorcery points)"]] }, "Optional 2nd-level sorcerer features"); // Metamagic options AddFeatureChoice(ClassList.sorcerer.features["metamagic"], true, "Elemental Spell (ua)", { name : "Elemental Spell", source : [["UA:CFV", 10]], additional: "1 sorcery point", description : desc([ "If the spell deals one of the below damage types, I can change it to another on the list", "These damage types are: acid, cold, fire, lightning, or thunder" ]) }); AddFeatureChoice(ClassList.sorcerer.features["metamagic"], true, "Seeking Spell (ua)", { name : "Seeking\xA0Spell", source : [["UA:CFV", 10]], additional: "1 sorcery point", description : desc([ "I can ignore half- and three-quarters cover for the one spell I'm casting", "This applies both to my spell attack rolls as to the Dexterity saving throws of the targets" ]) }); AddFeatureChoice(ClassList.sorcerer.features["metamagic"], true, "Unerring Spell (ua)", { name : "Unerring Spell", source : [["UA:CFV", 10]], additional: "2 sorcery points", description : desc([ "If I make an attack roll for a spell and miss, I can use this to reroll the attack once", "I can use unerring spell even if I already used another metamagic option for the spell" ]) }); // Warlock alternative class features and enhancements AddFeatureChoice(ClassList.warlock.features["pact magic"], true, "Spell Versatility (ua)", { name : "Spell Versatility", extraname : "Optional Warlock 1", source : [["UA:CFV", 10]], description: desc("After a long rest, I can swap a warlock cantrip or spell I know for another of the same level") }, "Optional 1st-level warlock features"); AddFeatureChoice(ClassList.warlock.features["pact magic"], true, "Expanded Spell List (ua)", { name : "Expanded Warlock Spell List", extraname : "Optional Warlock 1", source : [["UA:CFV", 10]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "warlock" || (spType.indexOf("bonus") !== -1 && (!spList["class"] || spList["class"] !== "warlock"))) return; spList.extraspells = spList.extraspells.concat(["thunderwave", "knock", "animate dead", "life transference", "greater invisibility", "phantasmal killer", "mislead", "modify memory", "planar binding", "teleportation circle", "create homunculus", "magic jar", "project image", "abi-dalzim's horrid wilting", "gate", "shapechange", "weird"]); }, "This alternative class feature enhancement expands the spell list of the warlock class with the following spells (spell level in brackets): Thunderwave (1), Knock (2), Animate Dead (3), Life Transference (3), Greater Invisibility (4), Phantasmal Killer (4), Mislead (5), Modify Memory (5), Planar Binding (5), Teleportation Circle (5), Create Homunculus (6), Magic Jar (6), Project Image (7), Abi-Dalzim's Horrid Wilting (8), Gate (9), Shapechange (9), and Weird (9)." ] } }, "Optional 1st-level warlock features"); // New Eldritch Invocations AddWarlockInvocation("Bond of the Talisman (prereq: level 12 warlock, Pact of the Talisman) (ua)", { name : "Bond of the\xA0Talisman", source : [["UA:CFV", 11]], submenu : "[improves Pact of the Talisman]", description : desc([ "As an action, I can teleport to the unoccupied space closest to the wearer of my talisman", "The talisman's wearer can do the same to teleport to me; Only works if both on same plane" ]), prereqeval : function(v) { return classes.known.warlock.level >= 12 && GetFeatureChoice('class', 'warlock', 'pact boon').indexOf("pact of the talisman") !== -1; }, action : [["action", ""]] }); AddWarlockInvocation("Chain Master's Fury (prereq: level 9 warlock, Pact of the Chain)", { name : "Chain Master's Fury", source : [["UA:CFV", 11]], submenu : "[improves Pact of the Chain]", description: desc("As a bonus action, I can command my familiar to make one attack"), prereqeval : function(v) { return classes.known.warlock.level >= 9 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the chain'; }, action : [["bonus action", ""]] }); AddWarlockInvocation("Eldritch Armor (prereq: Pact of the Blade)", { name : "Eldritch Armor", source : [["UA:CFV", 11]], submenu : "[improves Pact of the Blade]", description : desc([ "As an action, I can touch an unattended suit of armor and instantly don it", "I am proficient with this suit of armor until it is removed" ]), prereqeval : function(v) { return GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the blade'; }, action : [["action", ""]] }); AddWarlockInvocation("Eldritch Mind (prereq: Pact of the Tome)", { name : "Eldritch Mind", source : [["UA:CFV", 11]], submenu : "[improves Pact of the Tome]", description: desc("I have advantage on my Constitution saving throws to maintain concentration on a spell"), prereqeval : function(v) { return GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the tome'; }, savetxt : { text : "Adv. on Con (Concentration) saves" } }); AddWarlockInvocation("Far Scribe (prereq: level 5 warlock, Pact of the Tome) (ua)", { name : "Far\xA0Scribe", source : [["UA:CFV", 11]], submenu : "[improves Pact of the Tome]", description : desc([ "My book of shadows has a new page; As an action, a creature can write its name on it", "This page can hold my Cha mod (min 1) in creature names; I can remove one as an action", "I can cast Sending without a spell slot or material components, targeting one on the page", "Instead of saying the message, I write it on the page and any reply appears there as well", "This writing disappears after 1 minute; The target still hears the message in their mind" ]), prereqeval : function(v) { return classes.known.warlock.level >= 5 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the tome'; }, action : [["action", " (erase name)"]], spellcastingBonus : [{ name : "Far Scribe", spells : ["sending"], selection : ["sending"], firstCol : "atwill" }], spellChanges : { "sending" : { components : "V,S", compMaterial : "", description : "Send 25 word message to crea named in book of shadows; it recognizes me and can respond 25 words", changes : "By using Far Scribe, I can cast Sending without using a spell slot or material components, but only to target one of the creatures that wrote their name in my book of shadows. Instead of speaking the message, I write it in my book and any response appears there as well, lasting for 1 minute. The target still hears the message in their mind." } } }); AddWarlockInvocation("Gift of the Protectors (prereq: level 9 warlock, Pact of the Tome) (ua)", { name : "Gift of the\xA0Protectors", source : [["UA:CFV", 11]], submenu : "[improves Pact of the Tome]", description : desc([ "My book of shadows has a new page; As an action, a creature can write its name on it", "This page can hold my Cha mod (min 1) in creature names; I can remove one as an action", "If a creature whose name is on the page drops to 0 HP, it magically drops to 1 HP instead", "This doesn't work if the creature would be killed outright" ]), prereqeval : function(v) { return classes.known.warlock.level >= 9 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the tome'; }, action : [["action", " (erase name)"]], usages : 1, recovery : "long rest" }); AddWarlockInvocation("Investment of the Chain Master (prereq: Pact of the Chain) (ua)", { name : "Investment of the Chain\xA0Master", source : [["UA:CFV", 11]], submenu : "[improves Pact of the Chain]", description : desc([ "When I cast Find Familiar, the summoned create has additional benefits:", "\u2022 It gains a flying or swimming speed of 40 ft (my choice at casting)", "\u2022 It no longer needs to breathe", "\u2022 Its weapon attacks are considered magical for overcoming immunities and resistances", "\u2022 If it forces a creature to make a saving throw, it uses my spell save DC" ]), prereqeval : function(v) { return GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the chain'; }, calcChanges : { companionCallback : [function(prefix, oCrea, bAdd, sCompType) { if (sCompType !== "pact_of_the_chain") return; var strFea = "##\u25C6 Investment of the Chain Master (UA:CFV 11)##.: The familiar gains 40 ft fly or swim speed (my choice), doesn't need to breathe, its attacks are considered magical, and it can use my spell save DC instead of its own DC's (if any)."; var strSpd = "fly or swim 40 ft"; if (What("Unit System") === "metric") { strFea = ConvertToMetric(strFea, 0.5); strSpd = ConvertToMetric(strSpd, 0.5); } var aFnc = bAdd ? AddString : RemoveString; aFnc(prefix + "Comp.Use.Features", strFea, true); aFnc(prefix + "Comp.Use.Speed", strSpd, typePF ? ",\n" : ", "); for (var i = 1; i <= 3; i++) { var baseFld = prefix + "Comp.Use.Attack." + i; var weaDescrFld = baseFld + ".Description"; var strWeaDescr = What(weaDescrFld); if (bAdd && What(baseFld + ".Weapon Selection") && !(/(,|;)? ?counts as magical/i).test(strWeaDescr)) { AddString(weaDescrFld, "Counts as magical", "; "); } else if (!bAdd) { Value(weaDescrFld, strWeaDescr.replace(/(,|;)? ?counts as magical/i, '')); } } }, "My pact of the chain familiars gain an extra feature listing the extra bonuses they gain."] } }); AddWarlockInvocation("Protection of the Talisman (prereq: level 9 warlock, Pact of the Talisman) (ua)", { name : "Protection of the\xA0Talisman", source : [["UA:CFV", 12]], submenu : "[improves Pact of the Talisman]", description: desc("The wearer of my talisman adds 1d4 to saving throw rolls in which they lack proficiency"), prereqeval : function(v) { return classes.known.warlock.level >= 9 && GetFeatureChoice('class', 'warlock', 'pact boon').indexOf("pact of the talisman") !== -1; }, savetxt : { text : ["+1d4 to nonproficient saves"] } }); AddWarlockInvocation("Rebuke of the Talisman (prereq: Pact of the Talisman) (ua)", { name : "Rebuke of the\xA0Talisman", source : [["UA:CFV", 12]], submenu : "[improves Pact of the Talisman]", description : desc([ "As a reaction when the wearer of my talisman is hit, I deal damage and push the attacker", "To be able to do this, I have to see the attacker and it has to be within 30 ft of me", "I deal it my Cha mod in psychic damage (min 1) and push it 10 ft away from the talisman" ]), prereqeval : function(v) { return GetFeatureChoice('class', 'warlock', 'pact boon').indexOf("pact of the talisman") !== -1; }, action : [["reaction", ""]] }); // Pact Boon option AddWarlockPactBoon("Pact of the Talisman (ua)", { name : "Pact of the\xA0Talisman", source : [["UA:CFV", 12]], description : desc([ "The wearer of this amulet adds 1d4 to checks with skills in which they lack proficiency", "I can give the talisman to others to use; The talisman turns to ash when I die", "If I lose my talisman, I can perform a 1-hour ceremony to gain a replacement", "This ceremony destroys the previous amulet and can be done during a short or long rest" ]) }); // Wizard alternative class features and enhancements AddFeatureChoice(ClassList.wizard.features.spellcasting, true, "Cantrip Versatility (ua)", { name : "Cantrip Versatility", extraname : "Optional Wizard 1", source : [["UA:CFV", 12]], description: desc("Whenever I gain a wizard level, I can replace a wizard cantrip I know with another") }, "Optional 1st-level wizard features"); AddFeatureChoice(ClassList.wizard.features.spellcasting, true, "Expanded Spell List (ua)", { name : "Expanded Wizard Spell List", extraname : "Optional Wizard 1", source : [["UA:CFV", 12]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "wizard" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["augury", "enhance ability", "speak with dead", "divination"]); }, "This alternative class feature enhancement expands the spell list of the wizard class with the following spells (spell level in brackets): Augury (2), Enhance Ability (2), Speak with Dead (3), and Divination (4)." ] } }, "Optional 1st-level wizard features"); // ua_20191125_Fighter-Rogue-and-Wizard.js // This file adds the content from the Unearthed Arcana: Fighter, Rogue, and Wizard (psionics) article to MPMB's Character Record Sheet // Define the source SourceList["UA:FRnW"] = { name : "Unearthed Arcana: Fighter, Rogue, and Wizard", abbreviation : "UA:FRnW", group : "Unearthed Arcana", url : "https://media.wizards.com/2019/dnd/downloads/UA-PsychicSoulPsionics.pdf", date : "2019/11/25" }; // Add a subclass for the Fighter AddSubClass("fighter", "psychic warrior-ua", { regExpSearch : /^(?=.*psychic)(?=.*warrior).*$/i, subname : "Psychic Warrior", source : [["UA:FRnW", 1]], fullname : "Psychic Warrior", abilitySave : 4, features : { "subclassfeature3" : { name : "Psionic Armament", source : [["UA:FRnW", 1]], minlevel : 3, description : function () { var a = desc([ "When I finish a long rest, I can choose to augment my defenses or strikes until the next", " \u2022 As a reaction, augmented defenses allow me to reduce the damage taken by 1d10", " I can reduce the damage taken by myself or by a creature that I can see within 30 ft", " \u2022 Once per turn, augmented strikes adds +1d4 psychic damage to my weapon attack" ]); return levels.map(function (n) { return n < 10 ? a : a.replace('1d10', '1d12').replace('1d4', '1d6'); }); }(), additional : levels.map(function (n) { return n < 3 ? "" : n < 10 ? "1d10 defense; 1d4 offense" : "1d12 defense; 1d6 offense"; }), action : [["reaction", "Augmented Defenses"]] }, "subclassfeature3.1" : { name : "Telekinetic Hand", source : [["UA:FRnW", 1]], minlevel : 3, description: desc("I learn the Mage Hand cantrip, can cast it without components, and can make it invisible"), spellcastingBonus : [{ name : "Telekinetic Hand", spells : ["mage hand"], selection : ["mage hand"], firstCol : "atwill" }], spellChanges : { "mage hand" : { components : "", description : "Create invisible spectral hand for simple tasks or carry up to 10 lb; 1 a to control; can't have multiples", changes : "My Telekinetic Hand class feature allows me to cast Mage Hand without components and I can make the spectral hand invisible." } } }, "subclassfeature7" : { name : "Strength of Mind", source : [["UA:FRnW", 1]], minlevel : 7, description : desc([ "As a bonus action, I can have a creature I can see within 20 ft make a Strength save", "It takes 2d6 + Int mod psychic damage \u0026 moves 15 ft away or towards me (my choice)", "If its save succeeds, it takes half damage and isn't moved; DC 8 + Prof Bonus + Int mod" ]), action : [["bonus action", ""]], usages : "Intelligence modifier per ", usagescalc : "event.value = Math.max(1, What('Int Mod'));", recovery : "long rest" }, "subclassfeature10" : { name : "Telekinetic Bulwark", source : [["UA:FRnW", 1]], minlevel : 10, description : desc([ "When I take the Attack action, I can forgo one of the attacks to project psionic power", "Myself and my allies within 10 ft of me gain half cover and adv. on Strength saves", "This 10-ft radius bastion around me lasts for 1 minute or until I'm incapacitated", "I regain the usage of this feature after I use my second wind feature" ]), recovery : "long rest", usages : 1, limfeaname : "Telekinetic Bulwark [Second Wind regains]" }, "subclassfeature15" : { name : "Agonizing Strikes", source : [["UA:FRnW", 2]], minlevel : 15, description : desc([ "When I hit a creature with a weapon attack, I can deal an extra +2d10 psychic damage", "The target also has to make a Constitution save (DC 8 + my Prof Bonus + my Int mod)", "If it fails, it falls prone and has disadv. on its next ability check until my next turn starts" ]), usages : "Intelligence modifier per ", usagescalc : "event.value = Math.max(1, What('Int Mod'));", recovery : "long rest" }, "subclassfeature18" : { name : "Psychic Dreadnaught", source : [["UA:FRnW", 2]], minlevel : 18, description : desc([ "As a reaction when I take damage, I can give myself the following benefits for 1 minute:", " \u2022 At the start of each of my turns, I regain 10 hit points", " \u2022 My walking speed increases by +10 ft", " \u2022 If I'm prone, I can stand up by spending 5 ft of movement", "These benefits also end when I'm incapacitated" ]), recovery : "long rest", usages : 1, action : [["reaction", ""]] } } }); // Add a subclass for the Rogue AddSubClass("rogue", "soulknife-ua", { regExpSearch : /soulknife/i, subname : "Soulknife", source : [["UA:FRnW", 2]], fullname : "Soulknife", abilitySave : 4, features : { "subclassfeature3" : { name : "Psychic Blade", source : [["UA:FRnW", 2]], minlevel : 3, description : desc([ "As a bonus action, I can create a magical blade from one or both of my hands", "Disappear if I'm incapacitated, leave my hand (not thrown), or I dismiss it (no action)" ]), action : [["bonus action", " (create)"]], weaponOptions : [{ regExpSearch : /^(?=.*soulknife)(?=.*psychic)(?=.*blade).*$/i, name : "Soulknife's Psychic Blade", source : [["UA:FRnW", 2]], ability : 1, type : "Simple", damage : [1, 6, "psychic"], range : "Melee, 30/60 ft", description : "Finesse, light, thrown", abilitytodamage : true, isSoulknifePsychicBlade : true, selectNow : true }] }, "subclassfeature3.1" : { name : "Psionic Enhancement", source : [["UA:FRnW", 2]], minlevel : 3, description : desc([ "When I finish a long rest, I can choose one of these benefits until my next long rest:", " \u2022 Talk telepathically with those I can see in 30 ft; Can respond if they know a language", " \u2022 Increase my walking speed by 5 ft", " \u2022 Increase my maximum and current HP with my Intelligence modifier plus rogue level" ]) }, "subclassfeature9" : { name : "Terrifying Blade", source : [["UA:FRnW", 3]], minlevel : 9, description : desc([ "When I damage a creature with my psychic blade, it must make a Wisdom saving throw", "If it fails, it is frightened of me until my the start of my next turn", "If it succeeds, it is immune to this for 24 hours; DC 8 + my Prof Bonus + my Int mod" ]), calcChanges : { atkAdd : [ function (fields, v) { if (v.isSoulknifePsychicBlade) { fields.Description += (fields.Description ? '; ' : '') + 'Wis save or frightened for 1 round'; }; } ] } }, "subclassfeature13" : { name : "Psychic Veil", source : [["UA:FRnW", 3]], minlevel : 13, description : desc([ "As an action, I can become invisible along with everything I'm wearing or carrying", "This ends after 10 minutes, if I make an attack, or if I force a creature to make a save" ]), action : [["action", ""]], usages : "Intelligence modifier per ", usagescalc : "event.value = Math.max(1, What('Int Mod'));", recovery : "long rest" }, "subclassfeature17" : { name : "Rend Mind", source : [["UA:FRnW", 3]], minlevel : 17, description : desc([ "As an action, I can deal 12d6 psychic damage to a creature I can see within 30 ft", "It also makes an Int save or is stunned until my next turn starts; Half damage on success", "It has disadv. on the save if I'm hidden from it; DC 10 + my Prof Bonus + my Int mod", "I must have a psychic blade manifested to do so and one vanishes when I use this feature" ]), action : [["action", ""]], usages : "Intelligence modifier per ", usagescalc : "event.value = Math.max(1, What('Int Mod'));", recovery : "long rest" } } }); // Add a subclass for the Wizard AddSubClass("wizard", "psionics-ua", { regExpSearch : /^((?=.*(wizard|mage|magus))(?=.*psionics)|(?=.*(psionicist|mentalist)))(?!.*(wild mage|\bpsion\b|mystic)).*$/i, subname : "Psionics", source : [["UA:FRnW", 3]], fullname : "Psionicist", features : { "subclassfeature2" : { name : "Psionic Focus", source : [["UA:FRnW", 3]], minlevel : 2, description : desc([ "I learn to channel psionic energy through an object special to me, my psionic focus", "It allows me to reroll a roll of 1 on any psychic or force damage die for my wizard spells", "I can use this as my spellcasting focus; If lost, I can recreate it by meditating for 1 hour" ]) }, "subclassfeature2.1" : { name : "Psionic Devotion", source : [["UA:FRnW", 4]], minlevel : 2, description : desc([ 'I learn one cantrip: Friends, Mage Hand, or Message; Use "Choose Feature" button above', "While my psionic focus is on me, I can cast it as a bonus action without components" ]), choices : ["Friends", "Mage Hand", "Message"], "friends" : { name : "Psionic Devotion: Friends", description : desc([ "I learn the Friends cantrip and while my psionic focus in on me, I am better at casting it", "I can cast it as a bonus action without components and the target doesn't become hostile" ]), spellcastingBonus : [{ name : "Psionic Devotion", spells : ["friends"], selection : ["friends"], firstCol : "atwill" }], spellChanges : { "friends" : { time : "1 bns", components : "", compMaterial : "", description : "Adv. on Cha checks vs. 1 crea currently not hostile; when spell ends, crea realizes I used magic", changes : "While my psionic focus is on my person, I can cast Friends as a bonus action without requiring any components and when the spell ends, the target doesn't become hostile to me." } } }, "mage hand" : { name : "Psionic Devotion: Mage Hand", description : desc([ "I learn Mage Hand and while my psionic focus in on me, I am better at casting it", "I can then cast it as a bonus action without components and can make the hand invisible", "Also, I can control the hand as a bonus action instead of an action" ]), spellcastingBonus : [{ name : "Psionic Devotion", spells : ["mage hand"], selection : ["mage hand"], firstCol : "atwill" }], spellChanges : { "mage hand" : { time : "1 bns", components : "", description : "Create invisible hand for simple tasks or carry up to 10 lb; 1 bns action to control; can't have multiples", changes : "While my psionic focus is on my person, I can cast Mage Hand as a bonus action without requiring any components, can make the hand invisible, and controlling the hand is a bonus action for me." } } }, "message" : { name : "Psionic Devotion: Message", description : desc([ "I learn the Message cantrip and while my psionic focus in on me, I'm better at casting it", "I can then cast it as a bonus action without components", "Also, I don't need to point at the target or whisper the message out loud" ]), spellcastingBonus : [{ name : "Psionic Devotion", spells : ["message"], selection : ["message"], firstCol : "atwill" }], spellChanges : { "message" : { time : "1 bns", components : "", compMaterial : "", description : "1 crea hears message I think; can reply with a whisper; nobody can overhear; needs no straight line", changes : "While my psionic focus is on my person, I can cast Message as a bonus action without requiring any components, don't need to point toward the target, and I don't need to whisper my message out loud." } } } }, "subclassfeature6" : { name : "Thought Form", source : [["UA:FRnW", 4]], minlevel : 6, description : desc([ "As a bonus action, I can use my psionic focus to transform my body into luminous energy", "I chose the shape (my size); It sheds 5-ft radius dim light; My equipment melds into it", "My psionic focus hovers within the energy; In this form, I have the following benefits:", " \u2022 Spells I cast require no verbal, somatic, or material components without a gold cost", " \u2022 I have resistance to psychic and nonmagical bludgeoning/piercing/slashing damage", "This lasts for 10 minutes or until I'm incapacitated, die, or use a bonus action to end it" ]), action : [["bonus action", ""]], usages : "Intelligence modifier per ", usagescalc : "event.value = Math.max(1, What('Int Mod'));", recovery : "long rest" }, "subclassfeature10" : { name : "Mental Discipline", source : [["UA:FRnW", 4]], minlevel : 10, description : desc([ 'I learn one spell: Dominate Person, Scrying, or Telekinesis; Use "Choose Feature" button', "I can cast the spell without a spell slot once per long rest (and normally with a spell slot)" ]), usages : 1, recovery : "long rest", choices : ["Dominate Person", "Scrying", "Telekinesis"], "dominate person" : { name : "Mental Discipline: Dominate Person", description : desc([ "I add Dominate Person to my spellbook and can cast it without requiring components", "Once per long rest, I can cast it without using a spell slot; I can also prepare it as normal" ]), limfeaname : "Dominate Person (without spell slot)", spellcastingBonus : [{ name : "Mental Discipline", spells : ["dominate person"], selection : ["dominate person"] }], spellChanges : { "dominate person" : { components : "", changes : "I can cast Dominate Person without requiring any components. Once per long rest, I can cast it without using a spell slot. I can also cast it by using spell slots as normal." } } }, "scrying" : { name : "Mental Discipline: Scrying", description : desc([ "I add Scrying to my spellbook and can cast it without requiring components", "Once per long rest, I can cast it without using a spell slot; I can also prepare it as normal" ]), limfeaname : "Scrying (without spell slot)", spellcastingBonus : [{ name : "Mental Discipline", spells : ["scrying"], selection : ["scrying"] }], spellChanges : { "scrying" : { components : "", compMaterial : "", changes : "I can cast Scrying without requiring any components. Once per long rest, I can cast it without using a spell slot. I can also cast it by using spell slots as normal." } } }, "telekinesis" : { name : "Mental Discipline: Telekinesis", description : desc([ "I add Telekinesis to my spellbook and can cast it without requiring components", "Once per long rest, I can cast it without using a spell slot; I can also prepare it as normal" ]), limfeaname : "Telekinesis (without spell slot)", spellcastingBonus : [{ name : "Mental Discipline", spells : ["telekinesis"], selection : ["telekinesis"] }], spellChanges : { "telekinesis" : { components : "", changes : "I can cast Telekinesis without requiring any components. Once per long rest, I can cast it without using a spell slot. I can also cast it by using spell slots as normal." } } } }, "subclassfeature10.1" : { name : "Empowered Psionics", source : [["UA:FRnW", 5]], minlevel : 10, description: desc("I add my Int modifier to one target of my wizard spells that do psychic or force damage"), calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { if (spName.indexOf("wizard") != -1) { return genericSpellDmgEdit(spellKey, spellObj, "force|psychic", "Int", true); } }, "When I deal psychic or force damage with a wizard spell, I can add my Intelligence modifier to the damage against one of the spell's targets." ] } }, "subclassfeature14" : { name : "Thought Travel", source : [["UA:FRnW", 5]], minlevel : 14, description : desc([ "While in my thought form, I gain a fly speed equal to my walking speed and I can hover", "I can then also move through creatures and objects as if they were difficult terrain", "I take 1d10 force damage if I end my turn inside an object", "If I end my thought form while inside an object, I'm shunted to the nearest empty space", "I then take 1d10 force damage for every 5 ft traveled" ]) } } }); // The new spells SpellsList["ego whip-ua"] = { name : "Ego Whip", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["UA:FRnW", 7]], level : 4, school : "Ench", time : "1 a", range : "30 ft", components : "V", duration : "Conc, 1 min", save : "Int", description : "1 crea save or can't cast spells and disadv. on atks, checks, and saves; save end of each turn to end", descriptionFull : "You lash the mind of one creature you can see within range, filling it with despair. The target must succeed on an Intelligence saving throw or suffer disadvantage on attack rolls, ability checks, and saving throws, and it can't cast spells. At the end of each of its turns, the target can make another Intelligence saving throw. On a success, the spell ends on the target." }; SpellsList["id insinuation-ua"] = { name : "Id Insinuation", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["UA:FRnW", 7]], level : 1, school : "Ench", time : "1 a", range : "60 ft", components : "V,S", duration : "Conc, 1 min", save : "Wis", description : "1 crea save or incapacitated and end of each turn 1d12 Psychic damage, after which it can save to end", descriptionShorter : "1 crea save or incapacitated \u0026 end of each turn 1d12 Psychic damage, can save to end after", descriptionFull : "You unleash a torrent of conflicting desires in the mind of one creature you can see within range, impairing its ability to make decisions. The target must succeed on a Wisdom saving throw or be incapacitated. At the end of each of its turns, it takes 1d12 psychic damage, and it can then make another Wisdom saving throw. On a success, the spell ends on the target." }; SpellsList["intellect fortress-ua_frnw"] = { // completely different than later iterations in UA:POR and TCoE name : "Intellect Fortress", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["UA:FRnW", 7]], level : 5, school : "Abjur", time : "1 a", range : "Self", components : "V,S", duration : "Conc, 10 min", description : "I have advantage on all saves and I can use my reaction to have a creature in 30 ft reroll a failed save", descriptionFull : "You create a faintly shimmering barrier of protective psychic power around you. For the duration, you have advantage on all saving throws.\n When another creature that you can see within 30 feet of you fails a saving throw, you can use your reaction to allow them to reroll the save. They must use the new roll." }; SpellsList["mental barrier-ua"] = { name : "Mental Barrier", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["UA:FRnW", 7]], level : 2, school : "Abjur", time : "1 rea", timeFull : "1 reaction, which you take when you are forced to make an Intelligence, a Wisdom, or a Charisma saving throw", range : "Self", components : "V", duration : "1 rnd", description : "I have Psychic damage resistance and adv. on Int, Wis, and Cha saves until the start of my next turn", descriptionFull : "You protect your mind with a wall of looping, repetitive thought. Until the start of your next turn, you have advantage on Intelligence, Wisdom, and Charisma saving throws, and you have resistance to psychic damage." }; SpellsList["mind thrust-ua"] = { // rather different than later iterations in UA:POR and TCoE name : "Mind Thrust", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["UA:FRnW", 7]], level : 2, school : "Ench", time : "1 bns", range : "60 ft", components : "V,S", duration : "1 rnd", save : "Int", description : "1+1/SL crea, all max 30 ft apart, 3d6 Psychic dmg, only Dash/Diseng. next turn; save half, any action", descriptionFull : "You propel a lance of psionic disruption into the mind of one creature you can see within range. The target must make an Intelligence saving throw. On a failed save, the target takes 3d6 psychic damage, and it can use its action only to Dash or Disengage on its next turn. On a successful save, the target takes half as much damage, and this spell doesn't limit its action options." + AtHigherLevels + "When you cast this spell using a spell slot of 3rd level or higher, you can target one additional creature for each slot level above 2nd. The creatures must be within 30 feet of each other when you target them." }; SpellsList["psionic blast-ua"] = { name : "Psionic Blast", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["UA:FRnW", 8]], level : 3, school : "Evoc", time : "1 a", range : "30-ft cone", components : "V", duration : "Instantaneous", save : "Dex", description : "All crea 5d8+1d8/SL Force dmg, 20 ft pushed away, knocked prone; save half, not pushed or prone", descriptionShorter : "All 5d8+1d8/SL Force dmg, 20 ft pushed away, knocked prone; save half, not pushed or prone", descriptionFull : "You unleash a destructive wave of mental power in a 30-foot cone. Each creature in the area must make a Dexterity saving throw. On a failed save, a target takes 5d8 force damage, is pushed 20 feet directly away from you, and is knocked prone. On a successful save, a target takes half as much damage and isn't pushed or knocked prone." + AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d8 for each slot level above 3rd." }; SpellsList["psychic crush-ua"] = { name : "Psychic Crush", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["UA:FRnW", 8]], level : 6, school : "Ench", time : "1 a", range : "60 ft", components : "V,S", duration : "1 min", save : "Int", description : "1 crea 12d6 Psychic damage and stunned for 1 min; save half, not stunned; save at turn end to stop", descriptionFull : "You overload the mind of one creature you can see within range, filling its psyche with discordant emotions. The target must make an Intelligence saving throw. On a failed save, the target takes 12d6 psychic damage and is stunned for 1 minute. On a successful save, the target takes half as much damage and isn't stunned.\n The stunned target can make an Intelligence saving throw at the end of each of its turns. On a successful save, the spell ends on the target.", dynamicDamageBonus : { multipleDmgMoments : false } }; SpellsList["thought shield-ua"] = { name : "Thought Shield", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["UA:FRnW", 8]], level : 2, school : "Abjur", time : "1 a", range : "Touch", components : "V,S", duration : "8 h", description : "1 crea's mind can't be read/detected, telepathy only if wanted, adv. on saves vs. lie detecting effects", descriptionFull : "You weave a clouding veil over the mind of one creature you touch. For the duration, the target's mind can't be read or detected, creatures can't telepathically communicate with the target unless the target allows it, and the target has advantage on saving throws against any effect that would determine whether it is telling the truth." }; // Add the two psionic-themed feats FeatsList["telekinetic-ua"] = { name : "Telekinetic", source : [["UA:FRnW", 8]], descriptionFull : "You learn to move things with your mind. You gain the following benefits:\n \u2022 Increase your Intelligence score by 1, to a maximum of 20.\n \u2022 You learn the mage hand cantrip. You can cast it without verbal or somatic components, and you can make the spectral hand invisible.\n \u2022 As a bonus action, you can try to shove one creature you can see within 5 feet of the spectral hand created by your mage hand spell. When you do so, the target must succeed on a Strength saving throw (DC 8 + your proficiency bonus + your Intelligence modifier) or be pushed 5 feet away from you.", description : "I learn the Mage Hand cantrip, can cast it without components, and can make it invisible. As a bonus action, I can use it to try and shove a creature I can see within 5 ft of it. The target must make a Str save (Int based) or be shoved 5 ft away from me. [+1 Intelligence]", scores : [0, 0, 0, 1, 0, 0], spellcastingBonus : [{ name : "Telekinetic", spellcastingAbility : 4, spells : ["mage hand"], selection : ["mage hand"], firstCol : "atwill" }], spellChanges : { "mage hand" : { components : "", save : "Str", description : "Invisible hand, simple tasks, carries 10 lb; 1 a to control; not multiple; 1 bns 1 crea save or shove 5 ft", changes : "My Telekinetic feat allows me to cast Mage Hand without verbal or somatic components and I can make the spectral hand invisible." } } }; FeatsList["telepathic-ua"] = { name : "Telepathic", source : [["UA:FRnW", 8]], descriptionFull : "You awaken the ability to mentally connect with others. You gain the following benefits:\n \u2022 Increase your Intelligence score by 1, to a maximum of 20.\n \u2022 You gain proficiency in one skill of your choice from the following list: Deception, Insight, Intimidation, or Persuasion.\n \u2022 You can communicate telepathically with any creature you can see within 30 feet of you. If it understands at least one language, it can respond to you telepathically.", description : "I gain proficiency with one skill chosen from Deception, Insight, Intimidation, or Persuasion. I can communicate telepathically with any creature I can see within 30 feet of me. If it understands at least one language, it can respond to me telepathically. [+1 Intelligence]", scores : [0, 0, 0, 1, 0, 0], choices : ["Deception", "Insight", "Intimidation", "Persuasion"], "deception" : { description : "I gain proficiency with Deception. I can communicate telepathically with any creature I can see within 30 ft of me. If the creature understands at least one language, it can respond to me telepathically. [+1 Intelligence]", skills : ["Deception"] }, "insight" : { description : "I gain proficiency with Insight. I can communicate telepathically with any creature I can see within 30 ft of me. If the creature understands at least one language, it can respond to me telepathically. [+1 Intelligence]", skills : ["Insight"] }, "intimidation" : { description : "I gain proficiency with Intimidation. I can communicate telepathically with any creature I can see within 30 ft of me. If the creature understands at least one language, it can respond to me telepathically. [+1 Intelligence]", skills : ["Intimidation"] }, "persuasion" : { description : "I gain proficiency with Persuasion. I can communicate telepathically with any creature I can see within 30 ft of me. If the creature understands at least one language, it can respond to me telepathically. [+1 Intelligence]", skills : ["Persuasion"] } }; // ua_20200114_Subclasses-Part-1.js // This file adds the content from the Unearthed Arcana 2020: Subclasses, Part 1 article to MPMB's Character Record Sheet // Define the source SourceList["UA:SP1"] = { name : "Unearthed Arcana: Subclasses, Part 1", abbreviation : "UA:SP1", group : "Unearthed Arcana", url : "https://media.wizards.com/2020/dnd/downloads/UA2020-Subclasses01.pdf", date : "2020/01/14" }; // Add a subclasses for the Barbarian, Monk, Paladin, and Warlock AddSubClass("barbarian", "path of the beast-ua", { regExpSearch : /^(?=.*\bbeast\b)(?=.*(warrior|marauder|barbarian|viking|(norse|tribes?|clans?)(wo)?m(a|e)n)).*$/i, subname : "Path of the Beast", subnameShort: "Beast", source : [["UA:SP1", 1]], abilitySave : 3, features : { "subclassfeature3" : { name : "Form of the Beast", source : [["UA:SP1", 1]], minlevel : 3, description : desc([ "When I enter my rage, I can transform to gain a bite, tail, or claws attack for that rage", "The bite attack allows me to regain my Con mod in HP on a hit once on my turn", "The claws attack allows me to make one extra attack when I use it in my Attack action" ]), weaponOptions : [{ regExpSearch : /^(?=.*(bestial|beast))(?=.*bite).*$/i, name : "Bestial Bite", source : [["UA:SP1", 1]], ability : 1, type : "Natural", damage : [1, 8, "piercing"], range : "Melee", description : "Only in rage; On a hit once on my turn, regain Con mod in HP", abilitytodamage : true, bestialNaturalWeapon : true, selectNow : true }, { regExpSearch : /^(?=.*(bestial|beast))(?=.*claws?).*$/i, name : "Bestial Claws", source : [["UA:SP1", 1]], ability : 1, type : "Natural", damage : [1, 6, "slashing"], range : "Melee", description : "Only in rage; Extra attack if used as part of Attack action", abilitytodamage : true, bestialNaturalWeapon : true, selectNow : true }, { regExpSearch : /^(?=.*(bestial|beast))(?=.*tail).*$/i, name : "Bestial Tail", source : [["UA:SP1", 1]], ability : 1, type : "Natural", damage : [1, 12, "piercing"], range : "Melee", description : "Reach; Only in rage", abilitytodamage : true, bestialNaturalWeapon : true, selectNow : true }], additional : levels.map(function(n) { return n < 6 ? "" : "chosen weapon counts as magical"; }) }, "subclassfeature6" : { name : "Bestial Soul", source : [["UA:SP1", 1]], minlevel : 6, description : desc([ "When I finish a short rest, I can choose one of the following benefits until my next rest:", " \u2022 Swimming speed equal to my walking speed and I can breathe underwater", " \u2022 Climb speed (same as walking) and no check to climb difficult surfaces or upside down", " \u2022 Once per turn when I jump, I can extend it by the result of an Athletics check in feet" ]), calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.bestialNaturalWeapon && !v.thisWeapon[1] && !v.theWea.isMagicWeapon && !(/counts as( a)? magical/i).test(fields.Description)) { fields.Description += (fields.Description ? '; ' : '') + 'Counts as magical'; }; }, "The natural melee weapon that I gain from Form of the Beast count as magical for the purpose of overcoming resistance and immunity to nonmagical attacks and damage." ] } }, "subclassfeature10" : { name : "Infectious Fury", source : [["UA:SP1", 2]], minlevel : 10, description : desc([ "In rage, when I hit a creature with my natural weapon, I can have it make a Wis save", "If it fails (DC 8 + my Prof Bonus + my Con mod) it suffers one effect of my choice:", " \u2022 It uses its reaction to make a melee attack against one creature I can see of my choice", " \u2022 It takes 2d12 psychic damage" ]), usages : "Constitution modifier per ", usagescalc : "event.value = Math.max(1, What('Con Mod'));", recovery : "long rest" }, "subclassfeature14" : { name : "Call the Hunt", source : [["UA:SP1", 2]], minlevel : 14, description : desc([ "When I enter rage, I can choose my Con mod of willing creatures I can see within 30 ft", "The targets gain the Reckless Attack feature and I have adv. on saves vs. being frightened", "I also gain 5 temporary hit points per creature that accepts this benefit" ]), usages : "Constitution modifier per ", usagescalc : "event.value = Math.max(1, What('Con Mod'));", recovery : "long rest" } } }); AddSubClass("monk", "way of mercy-ua", { regExpSearch : /^(?=.*mercy)((?=.*(monk|monastic))|((?=.*martial)(?=.*(artist|arts)))|((?=.*spiritual)(?=.*warrior))).*$/i, subname : "Way of Mercy", subnameShort: "Mercy", source : [["UA:SP1", 2]], features : { "subclassfeature3" : { name : "Implements of Mercy", source : [["UA:SP1", 2]], minlevel : 3, description : desc([ "I gain proficiency with the herbalism and poisoner's kit, and either Insight or Medicine", 'Use the "Choose Feature" button above to select the skill proficiency, Insight or Medicine' ]), toolProfs : ["Herbalism kit", "Poisoner's kit"], choices : ["proficiency with Insight", "proficiency with Medicine"], "proficiency with insight" : { name : "Implements of Mercy - Insight", source : [["UA:SP1", 2]], description: desc("I gain proficiency in the Insight skill and with the herbalism kit and the poisoner's kit"), skills : ["Insight"] }, "proficiency with medicine" : { name : "Implements of Mercy - Medicine", source : [["UA:SP1", 2]], description: desc("I gain proficiency in the Medicine skill and with the herbalism kit and the poisoner's kit"), skills : ["Medicine"] }, "hands of healing" : { name : "Hands of Healing", extraname : "Way of Mercy 3", source : [["UA:SP1", 2]], description : levels.map(function (n) { var a = "As an action, I can spend 1 ki point to touch a creature and restore a number of its HP"; var b6 = "It also recovers from one disease or the blinded, deafened, paralyzed, or poisoned condition"; var c = "When I use Flurry of Blows, I can do this instead of one unarmed strike (no extra ki cost)"; return desc( n < 6 ? [a, c] : [a, b6, n < 11 ? c : c.replace("one", "each")] ); }), action : [["action", ""]], additional : levels.map(function (n) { return n < 3 ? "" : "1 ki point; heal 1d" + (n < 5 ? 4 : n < 11 ? 6 : n < 17 ? 8 : 10) + " + Wisdom modifier"; }) }, "hands of harm" : { name : "Hands of Harm", extraname : "Way of Mercy 3", source : [["UA:SP1", 3]], description : desc([ "When I hit a creature with an unarmed strike, I can spend 1 ki point to deal extra damage", "Only once per turn; If the target is incapacitated or poisoned, I roll the damage die 3 times" ]), additional : levels.map(function (n) { return n < 3 ? "" : "1 ki point; 1d" + (n < 5 ? 4 : n < 11 ? 6 : n < 17 ? 8 : 10) + " necrotic damage"; }) }, autoSelectExtrachoices : [{ extrachoice : "hands of healing" }, { extrachoice : "hands of harm" }] }, "subclassfeature6" : { name : "Noxious Aura", source : [["UA:SP1", 3]], minlevel : 6, additional: "1 ki point", description : desc([ "As a bonus action, I can spend 1 ki point to gain a 5-ft radius toxic aura for 1 minute", "While active, ranged attacks have disadv. vs. me; It ends if I'm incapacitated or dismiss it", "Others who start their turn in it must make a Con save or be poisoned and take damage", "They take my Wis mod in poison damage (min 0); Poisoned lasts until my next turn ends" ]), action : [["bonus action", ""]] }, "subclassfeature11" : { name : "Healing Technique", source : [["UA:SP1", 3]], minlevel : 11, description: desc("With hands of healing I can also end: 1 disease, blinded, deafened, paralyzed, or poisoned"), "hand of mercy" : { name : "Hand of Mercy", extraname : "Way of Mercy 17", source : [["UA:SP1", 3]], description : desc([ "As an action, I can use 4 ki to have a touched creature make a Con save (can fail willingly)", "If failed, it becomes paralyzed in a state of suspended animation for my monk level in days", "It also has immunity to all damage, and curses, diseases, poisons affecting it are suspended", "The creature appears dead to all inspection and to spells used to determine its status", "I can end the effect at will (no action required); I can have only one affected at a time" ]), action : [["action", ""]], additional : levels.map(function (n) { return n < 17 ? "" : "4 ki points; " + n + " days"; }) }, autoSelectExtrachoices : [{ extrachoice : "hand of mercy", minlevel : 17 }] } } }); AddSubClass("paladin", "oath of the watchers-ua", { regExpSearch : /^(?=.*watchers)((?=.*paladin)|((?=.*(exalted|sacred|holy|divine))(?=.*(knight|fighter|warrior|warlord|trooper)))).*$/i, subname : "Oath of the Watchers", subnameShort: "Watchers", source : [["UA:SP1", 3]], features : { "subclassfeature3" : { name : "Channel Divinity: Watcher's Will", source : [["UA:SP1", 4]], minlevel : 3, description: desc("As an action, Cha mod of creatures I see in 30 ft adv. on Int/Wis/Cha saves for 1 min"), action : [["action", ""]], spellcastingExtra : ["alarm", "chromatic orb", "augury", "moonbeam", "counterspell", "nondetection", "aura of purity", "banishment", "hold monster", "hallow"] }, "subclassfeature3.1" : { name : "Channel Divinity: Abjure the Extraplanar", source : [["UA:SP1", 4]], minlevel : 3, description : desc([ "As an action, elementals, fey, fiends, and aberrations within 30 ft must make a Wis save", "Succeeds if it can't hear me; On fail, turned for 1 minute or until it takes any damage", "Turned: move away, never within 30 ft of me, no reactions or actions other than Dash", "Turned: may Dodge instead of Dash when nowhere to move and unable to escape bonds" ]), action : [["action", ""]] }, "subclassfeature7" : { name : "Aura of the Sentinel", source : [["UA:SP1", 4]], minlevel : 7, description: desc("If I'm not incapacitated, chosen creatures in range and I add my Cha mod to Initiative"), additional : levels.map(function (n) { return n < 7 ? "" : (n < 18 ? 10 : 30) + "-foot aura"; }), addMod : [{ type : "skill", field : "Init", mod : "max(Cha|1)", text : "I can add my Charisma modifier (min +1) to initiative rolls." }] }, "subclassfeature15" : { name : "Vigilant Rebuke", source : [["UA:SP1", 4]], minlevel : 15, description : desc([ "As a reaction when I or another I can see saves against a spell, I can damage the caster", "Has to succeed save within 30 ft of me vs. unwanted spell; 2d8 + Cha mod force damage" ]), action : [["reaction", ""]] }, "subclassfeature20" : { name : "Mortal Bulwark", source : [["UA:SP1", 4]], minlevel : 20, description : desc([ "As a bonus action, I can gain the following benefits for 1 minute:", " \u2022 Truesight out to 120 ft and adv. on attacks vs. elementals, fey, fiends, and aberrations", " \u2022 I can force creatures I hit and damage with an attack to make a Charisma save", " If failed, the target is banished to its native plane of existence if it's not currently there", " If successful, the creature can't be banished by this feature for 24 hours" ]), recovery : "long rest", usages : 1, action : [["bonus action", ""]] } } }); AddSubClass("warlock", "the noble genie-ua", { regExpSearch : /^(?=.*warlock)(?=.*noble)(?=.*\b(genie|djinni|dao|efreeti)\b).*$/i, subname : "the Noble Genie", source : [["UA:SP1", 4]], spellcastingExtra : ["fog cloud", "sleep", "enlarge/reduce", "phantasmal force", "create food and water", "protection from energy", "polymorph", "phantasmal killer", "bigby's hand", "creation"], features : { "subclassfeature1" : { name : "Collector's Vessel", source : [["UA:SP1", 5]], minlevel : 1, description : desc([ "My patron gives me a magical vessel, a Tiny object which I can use as a spellcasting focus", "If I lose it, I can perform a 1-hour ceremony during a rest to receive a replacement", "As an action while holding it, I can create a tether to a willing target I can see in 100 ft", "This lasts for 1 hour, until I do this again, or the tethered target is reduced to 0 HP", "It also ends when the tethered target ends its turn further than 100 ft from me", "While the tether lasts, I add my Cha mod (min +1) to my Wis (Perception) checks", "Also, I can have spells I cast originate from the tethered creature's space" ]), action : [["action", ""]], usages : "Charisma modifier per ", usagescalc : "event.value = Math.max(1, What('Cha Mod'));", recovery : "long rest" }, "subclassfeature6" : { name : "Elemental Resistance", source : [["UA:SP1", 5]], minlevel : 6, description : desc([ "When I finish a long rest, I can gain acid, cold, fire, or lightning resistance (my choice)", "This lasts until I finish my next long rest; A creature tethered to my vessel also gains this" ]) }, "subclassfeature10" : { name : "Protective Wish", source : [["UA:SP1", 5]], minlevel : 10, description : desc([ "As a reaction when I or my tethered creature is hit by an attack, we can swap places", "As we both teleport to each others location, the one hit by the attack switches as well" ]), action : [["reaction", ""]] }, "subclassfeature10.1" : { name : "Genie's Entertainment", source : [["UA:SP1", 6]], minlevel : 10, description : desc([ "As an action, I can have a creature I can see within 90 ft make a Charisma save", "If failed, it is drawn into my vessel and teleported to my patron's court for 1 minute", "In there it is stunned but unharmed; At the end of each of its turns it can save to return" ]), recovery : "long rest", usages : 1 }, "subclassfeature14" : { name : "Collector's Call", source : [["UA:SP1", 6]], minlevel : 14, description : desc([ "As an action, I can implore my patron if I make a Persuasion check vs. my spell save DC", "If I fail, the use is wasted; If I succeed, I can choose one of the following effects:", " \u2022 A creature I can see in 60 ft heals 8d6 HP and 1 disease or condition affecting it ends", " This condition can be blinded, charmed, deafened, frightened, paralyzed, or poisoned", " \u2022 A creature I can see in 60 ft has disadv. on attacks \u0026 saves until my next turn starts", " \u2022 I can cast Legend Lore without using material components", "I can regain a use of this by sacrificing 500 gp of nonmagical treasure to my patron" ]), action : [["action", ""]], recovery : "long rest", usages : 1, spellcastingBonus : [{ name : "Collector's Call", spells : ["legend lore"], selection : ["legend lore"], firstCol : 'Sp' }], spellChanges : { "legend lore" : { components : "V,S", compMaterial : "", description : "Learn summary of lore of named or described person, place, or object", changes : "When I use my Collector's Call feature to cast Legend Lore, it doesn't require any material components." } } } } }); // ua_20200206_Subclasses-Part-2.js // This file adds the content from the Unearthed Arcana 2020: Subclasses, Part 2 article to MPMB's Character Record Sheet // Define the source SourceList["UA:SP2"] = { name : "Unearthed Arcana: Subclasses, Part 2", abbreviation : "UA:SP2", group : "Unearthed Arcana", url : "https://media.wizards.com/2020/dnd/downloads/UA2020_02_06_Subclasses2.pdf", date : "2020/02/06" }; // Add a subclass for the Bard and the functionality for its Dancing Item AddSubClass("bard", "college of creation-ua", { regExpSearch : /^(?=.*(college|bard|minstrel|troubadour|jongleur))(?=.*creation).*$/i, subname : "College of Creation", subnameShort: "Creation", source : [["UA:SP2", 1]], features : { "subclassfeature3" : { name : "Note of Potential", source : [["UA:SP2", 1]], minlevel : 3, description : desc([ "I can also grant a note of potential to whomever I give a bardic inspiration die", "This tiny, invulnerable object orbits in 5 ft; It enhances the use of the inspiration die:", "\u2022 Note of Destruction (used for attack roll): others within 5 ft must make a Con save", " If failed, they take the die roll in thunder damage; This uses my spell save DC", "\u2022 Note of Protection (used for save): Grants temp HP equal to the roll + my Cha mod", "\u2022 Note of Ingenuity (used for check): Roll the die twice and choose which result to use" ]) }, "subclassfeature6" : { name : "Animating Performance", source : [["UA:SP2", 1]], minlevel : 6, description : desc([ "As an action, I can animate a Large or smaller nonmagical item I can see within 30 ft", "It lasts for 1 hour or until it has 0 HP; I control it and it acts on my initiative, after me", "Unless I use a bonus action to command it, it only takes the Dodge action on its turn", "When I use bardic inspiration, I can command the item as part of the same bonus action", "I can't have multiple at once; Select \"Dancing Item\" on a companion page for its stats", "I can do this once per long rest, or by expending a 3rd-level or higher spell slot (SS 3+)" ]), action : [["action", ""], ["bonus action", "Command Dancing Item"]], usages : 1, recovery : "long rest", altResource : "SS 3+", creaturesAdd : [["Dancing Item"]], creatureOptions : [{ name : "Dancing Item", source : [["UA:SP2", 2]], size : 4, type : "Construct", alignment : "Neutral", ac : 16, hp : 33, hd : [], speed : "40 ft", scores : [18, 12, 16, 4, 10, 6], damage_immunities : "poison", condition_immunities : "charmed, exhaustion, poisoned, frightened", passivePerception : 10, senses : "Darkvision 60 ft", languages : "understands the languages of its creator but can't speak", challengeRating : "1", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Force-Empowered Slam", ability : 6, damage : [1, 10, "force"], range : "Melee (5 ft)", modifiers : ["", "oCha"], abilitytodamage : false, useSpellMod : "bard" }], features : [{ name : "Creator", description : "The item obeys the commands of its creator and uses its creator's spell attack modifier for its attack rolls. It takes its turn immediately after its creator, on the same initiative count. It can move and take reactions on its own, but only takes the Dodge action on its turn unless its creator takes a bonus action to command to do otherwise, in which case it can only take the Dash, Force-Empowered Slam (and possibly Endless Waltz), Disengage, Help, Hide, or Search action." }], actions : [{ name : "Immutable Form", description : "The item is immune to any spell or effect that would alter its form." }, { name : "Endless Waltz", description : "Immediately after the item makes a slam attack, it can take the Dodge action as a bonus action." }], header : 'Animated', calcChanges : { hp : function (totalHD, HDobj, prefix) { if (!classes.known.bard) return; var chaMod = Number(What('Cha Mod')); var brdLvl = classes.known.bard.level; var brdLvl5 = 5 * brdLvl; HDobj.alt.push(HDobj.conMod + chaMod + brdLvl5); HDobj.altStr.push(" = " + HDobj.conMod + " from its Constitution modifier\n + " + chaMod + " from its creator's Charisma modifier\n + 5 \xD7 " + brdLvl + " from five times its creator's bard level (" + brdLvl5 + ")"); }, setAltHp : true, hpForceRecalc : true } }] }, "subclassfeature14" : { name : "Performance of Creation", source : [["UA:SP2", 2]], minlevel : 14, description : levels.map(function (n) { return desc([ "As an action, I create a Large or smaller nonmagical item in an empty space in 10 ft", "Max " + (20 * n) + " gp value; I can't have multiple, creating more makes the first one vanish", "It vanishes when my next turn ends, unless I use my action to extend its life 1 extra turn", "If I sustain it for 1 minute this way, it continues to exists for my bard level in hours", "I can do this once per long rest, or by expending a 5th-level or higher spell slot (SS 5+)" ]); }), action : [["action", ""]], usages : 1, recovery : "long rest", altResource : "SS 5+" } } }); // Add a subclass for the Cleric AddSubClass("cleric", "unity domain-ua", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*unity).*$/i, subname : "Unity Domain", source : [["UA:SP2", 2]], spellcastingExtra : ["heroism", "shield of faith", "aid", "warding bond", "beacon of hope", "sending", "aura of purity", "guardian of faith", "greater restoration", "rary's telepathic bond"], features : { "subclassfeature1" : { name : "Emboldening Bond", source : [["UA:SP2", 3]], minlevel : 1, description : function () { var descr = desc([ "As an action, I can magically bond two willing targets I can see in 30 ft (can be me)", "While within 30 ft of the other, a bonded target can add +d4 to a save, attack, or check", "This can only be added once per turn; The bond lasts for 1 hour or until I use this again", "I can do this once per long rest, after which I can do so by expending a spell slot (SS 1+)" ]); var descr17 = descr.replace('While within 30 ft of the other', 'While on the same plane'); return levels.map(function (n) { return n < 17 ? descr : descr17; }); }(), action : [["action", ""]], usages : 1, recovery : "long rest", altResource : "SS 1+" }, "subclassfeature2" : { name : "Channel Divinity: Shared Burden", source : [["UA:SP2", 3]], minlevel : 2, description : desc([ "As a reaction when a creature I can see in 30 ft takes damage, I can divide that damage", "I then choose a number of willing creatures that I can see equal to my Wis mod (min 1)", "I distribute the damage over these and the original target, each taking at least 1 damage", "Damage resistances and vulnerabilities are only applied after the damage is distributed" ]), action : [["reaction", ""]] }, "subclassfeature6" : { name : "Protective Bond", source : [["UA:SP2", 3]], minlevel : 6, description : desc([ "My emboldening bond now also allows the two bonded to shield each other of damage", "When the other takes damage, one can use its reaction to give it resistance to all damage", "This resistance lasts until the end of the current turn" ]), additional : levels.map(function (n) { return n < 6 ? "" : n < 17 ? "the bonded must be within 30 ft" : "the bonded must be on the same plane"; }) }, "subclassfeature8" : { name : "Potent Spellcasting", source : [["UA:SP2", 3]], minlevel : 8, description : desc("I add my Wisdom modifier to the damage I deal with my cleric cantrips"), calcChanges : GenericClassFeatures["potent spellcasting"].calcChanges }, "subclassfeature17" : { name : "Enduring Unity", source : [["UA:SP2", 3]], minlevel : 17, description : desc([ "The 30 ft restriction no longer applies to my emboldening and protective bond features", "My emboldening bond now also empowers a bonded if the other is reduced to 0 HP", "If that happens, the bonded creature above 0 HP gains the following benefits:", " \u2022 Advantage on attack rolls, ability checks, and saving throws; Resistance to all damage", " \u2022 As an action, it can touch its bonded partner to expend and roll HD to heal", "These benefits lasts for 1 minute or until the downed creature regains at least 1 HP" ]) } } }); // Add a subclass for the Sorcerer AddSubClass("sorcerer", "clockwork soul-ua", { regExpSearch : /^((?=.*(sorcerer|witch))(?=.*mechanus)|(?=.*clockwork)(?=.*soul)).*$/i, subname : "Clockwork Soul", source : [["UA:SP2", 4]], fullname : "Clockwork Soul", spellcastingExtra : ["alarm", "protection from evil and good", "find traps", "heat metal", "counterspell", "glyph of warding", "arcane eye", "otiluke's resilient sphere", "animate objects", "wall of force"], spellcastingExtraApplyNonconform : true, features : { "subclassfeature1" : { name : "Clockwork Magic", source : [["UA:SP2", 4]], minlevel : 1, description: desc("I learn additional spells, which do not count towards the number of spell I can know") }, "subclassfeature1.1" : { name : "Restore Balance", source : [["UA:SP2", 4]], minlevel : 1, description : desc([ "As a reaction when a creature I can see in 60 ft is about to roll a d20 with adv./disadv.,", "I can prevent that roll from being affected by advantage and disadvantage." ]), usages : "Charisma modifier per ", usagescalc : "event.value = Math.max(1, What('Cha Mod'));", recovery : "long rest", action : [["reaction", ""]] }, "subclassfeature6" : { name : "Bulwark of Law", source : [["UA:SP2", 4]], minlevel : 6, description : desc([ "As an action, I can imbue a creature I can see within 30 ft with a magical ward", "I grant it a number of d8s equal to the number of sorcery points I expend when I do this", "When it takes damage, it can use its reaction to spend and roll any number of those dice", "The dice roll reduces the damage; The ward lasts until I finish a long rest or do this again" ]), additional : "1-5 sorcery points; 1d8 per point", action : [["action", ""]] }, "subclassfeature14" : { name : "Trance of Order", source : [["UA:SP2", 4]], minlevel : 14, description : desc([ "As a bonus action, I can enter a state of clockwork consciousness for 1 minute", "While in this state, attack rolls against me can't benefit from advantage", "Also, I can then treat a d20 roll below 9 as a 10 for my attack rolls, checks, and saves", "I can do this once per long rest, or by expending a 5 sorcery points (5 SP)" ]), action : [["bonus action", ""]], usages : 1, recovery : "long rest", altResource : "5 SP" }, "subclassfeature18" : { name : "Clockwork Cavalcade", source : [["UA:SP2", 5]], minlevel : 18, description : desc([ "As an action, I can call spirits to bring balance in a 30-ft cube originating from me", "Inside the cube, the intangible spirits do all the following before vanishing:", " \u2022 Restore up to 100 HP, divided among the creatures in the cube as I see fit", " \u2022 Repair all damaged objects in the cube", " \u2022 End spells of my choice of 6th-level or lower on objects or creatures in the cube", "I can do this once per long rest, or by expending a 7 sorcery points (7 SP)" ]), action : [["action", ""]], usages : 1, recovery : "long rest", altResource : "7 SP" } } }); // ua_20200206_Subclasses-Part-3.js // This file adds the content from the Unearthed Arcana 2020: Subclasses, Part 3 article to MPMB's Character Record Sheet // Define the source SourceList["UA:SP3"] = { name : "Unearthed Arcana: Subclasses, Part 3", abbreviation : "UA:SP3", group : "Unearthed Arcana", url : "https://media.wizards.com/2020/dnd/downloads/UA2020-Subclasses03_0224.pdf", date : "2020/02/24" }; // Add a subclass for the Artificer (but after all other scripts, so that all armour options are present) RunFunctionAtEnd(function () { if (!ClassList.artificer) { return; }; var UASP3_artificerSubclassArmorerUA = AddSubClass("artificer", "armorer-ua", { regExpSearch : /^(?=.*armou?rer)(?!.*wizard).*$/i, subname : "Armorer", fullname : "Armorer", source : [["UA:SP3", 1]], attacks : [1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], features : { "subclassfeature3" : { name : "Tools of the Trade", source : [["UA:SP3", 1]], minlevel : 3, description : " [proficient with heavy armor \u0026 smith's tools]", toolProfs : ["Smith's tools"], armorProfs : [false, false, true, false], spellcastingExtra : ["magic missile", "shield", "mirror image", "shatter", "hypnotic pattern", "lightning bolt", "fire shield", "greater invisibility", "passwall", "wall of force"] }, "subclassfeature3.1" : { name : "Power Armor", source : [["UA:SP3", 1]], minlevel : 3, description : desc([ "As an action, I can use smith's tool to turn a suit of heavy armor into power armor", "It continues to be power armor until I doff it, don another armor, or I die", "It can't be removed against my will, covers all my limbs, and even replaces missing limbs", "I ignore the Strength requirement of power armor and can use it as a spellcasting focus" ]), action : [["action", ""]] }, "subclassfeature3.2" : { name : "Armor Model", source : [["UA:SP3", 2]], minlevel : 3, description : desc([ "When I finish a rest, I can use smith's tools to change the model of my arcane armor", 'Select a model using the "Choose Feature" button; See "Notes" page for features of each' ]), additional : "also see notes page", toNotesPage : [{ name : "Power Armor Model Features", note : desc([ "I can customize my power armor to the guardian or infiltrator model whenever I finish a short or long rest, provided I have smith's tools in hand.", "Each model includes a special weapon. When I attack with that weapon, I can use my Intelligence modifier, instead of Strength or Dexterity, for the attack and damage rolls." ]) + "\n\n\u25C6 Guardian Power Armor (Armorer 3, UA:SP3 2)" + desc([ "\u2022 Thunder Gauntlets: The armored fists of the guardian power armor each count as a simple melee weapon, and each deals 1d8 thunder damage on a hit. A creature hit by the gauntlet has disadvantage on attack rolls against targets other than me until the start of me next turn, as the armor magically emits a distracting pulse when the creature attacks someone else.", "\u2022 Defensive Field: As a bonus action, I can gain temporary hit points equal to my artificer level, replacing any temporary hit points I already have. I lose these temporary hit points if I doff the armor." ]) + "\n\n\u25C6 Infiltrator Power Armor (Armorer 3, UA:SP3 2)" + desc([ "\u2022 Lightning Launcher: A gemlike node on one of the armored fists or on the chest (my choice) counts as a simple ranged weapon, with a normal range of 90 ft and a long range of 300 ft. It deals 1d6 lightning damage on a hit. Once on each of my turns when I hit a creature with it, I can deal an extra 1d6 lightning damage to that target.", "\u2022 Powered Steps: My walking speed increases by 5 feet.", "\u2022 Second Skin: The armor's weight is negligible, and it becomes formfitting and wearable under clothing. If the armor normally imposes disadvantage on Dexterity (Stealth) checks, the power armor doesn't." ]) }], choices : [], choiceDependencies : [{ feature : "subclassfeature15", choiceAttribute : true }], weaponOptions : [{ regExpSearch : /^(?=.*thunder)(?=.*gauntlet).*$/i, name : "Thunder Gauntlets", source : [["UA:SP3", 2]], ability : 4, type : "Simple", damage : [1, 8, "thunder"], range : "Melee", description : "Target hit disadv. on attacks vs. others than me until my next turn starts", abilitytodamage : true, monkweapon : true }, { regExpSearch : /^(?=.*lightning)(?=.*launcher).*$/i, name : "Lightning Launcher", source : [["UA:SP3", 2]], ability : 4, type : "Simple", damage : [1, 6, "lightning"], range : "90/300 ft", description : "Once per turn on hit, +1d6 lightning damage", abilitytodamage : true }], // Do this in the parent object, so that it is always visible and people printing the sheet can more easily switch between the two models action : [["bonus action", "Defensive Field (Guardian Model)"]] }, "subclassfeature9" : { name : "Armor Modifications", source : [["UA:SP3", 2]], minlevel : 9, description : desc([ "Power armor now counts as armor, boots, bracers, and a weapon for holding infusions", "I can infuse two of those after a rest without counting towards the number of items" ]), additional : "+2 infused items, if used on power armor" }, "subclassfeature15" : { name : "Perfected Armor", source : [["UA:SP3", 2]], minlevel : 15, description : desc([ 'My armor gets additional features, based on the model; Use "Choose Feature" to select it', "The guardian gets the ability to pull a creature closer as a reaction and make an attack", "The infiltrator gets an upgrade to its lightning launcher weapon attack" ]), toNotesPage : [{ name : "Guardian Perfected Armor Features", popupName : "Perfected Armor: Model Features", note : desc([ "Tinkering with my armor's energy system leads me to discover a powerful pulling force.", "As a reaction when a creature I can see ends its turn within 30 ft of me, I can force the creature to succeed on a Strength saving throw against my spell save DC or be pulled up to 30 ft toward me to an unoccupied space. If I pull the target to space within 5 ft of me, I can make a melee weapon attack against it as part of this reaction.", "I can use this reaction a number of times equal to my Intelligence modifier (min 1). I regain all expended uses of it when I finish a long rest." ]) + "\n\n\u25C6 Infiltrator Perfected Armor Features (Armorer 15, UA:SP3 2)" + desc([ "Any creature that takes lightning damage from my Lightning Launcher glimmers with light until the start of my next turn.", "The glimmering creature sheds dim light in a 5-ft radius, and the next attack roll against it by a creature other than me has advantage. If that attack hits, it deals an extra 1d6 lightning damage." ]), amendTo : "Power Armor Model Features" }], choices : ["guardian", "infiltrator"], choicesNotInMenu : true, "guardian" : { name : "Perfected Armor: Guardian", additional: "Intelligence modifier per long rest", description : desc([ "As a reaction when a creature I can see ends its turn in 30 ft, I have it make a Str save", "If it fails, I pull it up to 30 ft towards me to an empty space", "If I pull it within 5 ft, I can make a melee weapon attack vs. it as part of this reaction" ]) }, "infiltrator" : { name : "Perfected Armor: Infiltrator", description : desc([ "Those hit by my lightning launcher shed 5-ft radius dim light until my next turn starts", "Also, the next attack roll made by another than me vs. the target has advantage", "If that attack hits, it deals an extra 1d6 lightning damage" ]) }, // Do these in the parent object, so that they are always visible and people printing the sheet can more easily switch between the two models // Also, the armor model can be changed on a short rest, but the limited feature only resets on a long rest, so shouldn't be removed action : [["reaction", "Perfected Armor: Guardian"]], extraLimitedFeatures : [{ name : "Perfected Armor: Guardian", usages : "Intelligence modifier per ", recovery : "long rest", usagescalc : "event.value = Math.max(1, What('Int Mod'));" }] } } }); if (!UASP3_artificerSubclassArmorerUA || !ClassSubList[UASP3_artificerSubclassArmorerUA]) return; var itsFea = ClassSubList[UASP3_artificerSubclassArmorerUA].features["subclassfeature3.2"]; var guardianTxt = desc([ "Both fists are Thunder Gauntlets, simple melee weapons that distract those hit by it", "As a bonus action, I can activate a defensive shield to gain my artificer level in temp HP" ]) var guardianAdditional = levels.map(function (n) { return n + " temp HP; see notes page"; }) var infiltratorTxt = desc([ "+5 ft walking speed; Gemlike node in fist/chest is a ranged weapon, Lightning Launcher", "The power armor is formfitting, has negligible weight, and doesn't give disadv. on Stealth" ]) var prereqFunc = function(v) { var sParsed = ParseArmor(v.choice.replace(/(Guardian|Infiltrator) arcane /i, '')); return sParsed && testSource(sParsed, ArmourList[sParsed], "armorExcl") ? "skip" : true; }; for (var armor in ArmourList) { var anArm = ArmourList[armor]; if (anArm.type != "heavy" || anArm.isMagicArmor || !anArm.weight || (CurrentVars.extraArmour && CurrentVars.extraArmour[armor])) continue; // Add the Guardian variant of the armor var gArmName = "Guardian Power " + anArm.name; itsFea[gArmName.toLowerCase()] = { name : (typePF || anArm.name.length < 16 ? "Armor " : "") + "Model: Guardian " + anArm.name, submenu : "Guardian Power Armor", description : guardianTxt, additional : guardianAdditional, armorAdd : { select : gArmName, options : [gArmName] }, weaponsAdd : { select : ["Thunder Gauntlets"] }, prereqeval : prereqFunc, dependentChoices : "guardian" } // And now add the Infiltrator variant of the armor var iArm = newObj(anArm); iArm.name = "Infiltrator Power " + anArm.name; iArm.weight = 0; iArm.stealthdis = false; iArm.strReq = 0; iArm.selectNow = true; if (iArm.regExpSearch.indexOf(".*$/") == -1) { iArm.regExpSearch = iArm.regExpSearch.replace(/^/, "infiltrator.*"); } else { iArm.regExpSearch = iArm.regExpSearch.replace(/\.\*\$$/, "(?=.infiltrator).*$"); }; itsFea[iArm.name.toLowerCase()] = { name : "Armor Model: Infiltrator " + anArm.name, submenu : "Infiltrator Power Armor", description : infiltratorTxt, speed : { walk : {spd : "+5", enc : "+5" } }, weaponsAdd : { select : ["Lightning Launcher"] }, prereqeval : prereqFunc, armorOptions : [iArm], dependentChoices : "infiltrator" } // Lastly push both choices to the array itsFea.choices.push(gArmName, iArm.name); } }); // Add the new Artificer infusions if (ClassList.artificer && ClassList.artificer.features["infuse item"]) { AddFeatureChoice(ClassList.artificer.features["infuse item"], true, "Armor of Magical Strength (ua) (prereq: level 10 artificer)", { name : "Armor of Magical Strength", source : [["UA:SP3", 3]], description : desc([ "The wearer of the armor can use its Int mod instead of its Str mod for Str checks/saves", "The armor has 4 charges, regaining 1d4 expended charges daily at dawn", "As a reaction when being knocked prone, the wearer can use 1 charge to not be prone" ]), additional : "suit of armor; requires attunement", prereqeval : function(v) { return classes.known.artificer.level >= 10; }, magicitemsAdd : ["Armor of Magical Strength (UA)"] }); MagicItemsList["armor of magical strength-ua"] = { name : "Armor of Magical Strength (UA)", nameTest : "of Magical Strength (UA)", source : [["UA:SP3", 3]], type : "armor (light, medium, or heavy)", description : "This armor has 4 charges and regains 1d4 charges daily at dawn. As a reaction when I would be knocked prone, I can expend 1 charge to not be knocked prone. It allows me to use my Intelligence modifier instead of my Strength modifier when making Strength checks or Strength saves.", descriptionFull : "While wearing this armor, a creature can use its Intelligence modifier in place of its Strength modifier when making Strength checks and Strength saving throws.\n The armor has 4 charges. As a reaction when it would be knocked prone, the wearer can expend 1 charge to not be knocked prone. The armor regains 1d4 expended charges daily at dawn.", attunement : true, action : [["reaction", ""]], chooseGear : { type : "armor", prefixOrSuffix : "prefix" }, usages : 4, recovery : "dawn", additional : "regains 1d4", addMod : [{ type : "save", field : "Str", mod : "max(Int-Str|0)", text : "While attuned to the Armor of Magical Strength (UA), I can use my Intelligence modifier instead of my Strength modifier for Strength saving throws." }, { type : "skill", field : "Athletics", mod : "max(Int-Str|0)", text : "While attuned to the Armor of Magical Strength (UA), I can use my Intelligence modifier instead of my Strength modifier for Strength checks." }] }; AddFeatureChoice(ClassList.artificer.features["infuse item"], true, "Armor of Tools", { name : "Armor of Tools", source : [["UA:SP3", 3]], description : desc([ "The armor can have a set of artisan's or thieves' tools integrated into it as an action", "The tools remain integrated for 8 hours, or until removed as an action", "The wearer can add its Intelligence modifier to checks made with the integrated tools" ]), additional : "suit of armor", magicitemsAdd : ["Armor of Tools"] }); MagicItemsList["armor of tools-ua"] = { name : "Armor of Tools", source : [["UA:SP3", 3]], type : "armor (light, medium, or heavy)", description : "As an action, I can integrate a set of artisan's or thieves' tools into this magic studded leather armor, which can hold only one set at a time. The tools remain integrated for 8 hours or until I remove them as an action. I can add my Intelligence modifier as a bonus to any ability checks I make with the integrated tools.", descriptionFull : "As an action, a creature wearing this infused armor can integrate into it artisan's tools or thieves' tools. The tools remain integrated in the armor for 8 hours or until the wearer removes the tools as an action. The armor can have only one tool integrated at a time.\n The wearer can add its Intelligence modifier to any ability checks it makes with the integrated tool. The wearer must have a hand free to use the tool.", action : [["action", ""]] }; AddFeatureChoice(ClassList.artificer.features["infuse item"], true, "Mind Sharpener (ua)", { name : "Mind Sharpener", source : [["UA:SP3", 3]], description: desc("The wearer can use its reaction to ignore a failed Con save to maintain concentration"), additional : "suit of armor or robes", magicitemsAdd : ["Mind Sharpener (UA)"] }); MagicItemsList["mind sharpener-ua"] = { name : "Mind Sharpener (UA)", source : [["UA:SP3", 3]], description : "This magic armor or robes can send a jolt to refocus my mind. Whenever I fail a Constitution saving throw to maintain concentration on a spell, I can use my reaction to succeed instead.", descriptionFull : "The infused item can send a jolt to the wearer to refocus their mind. While wearing this infused item, whenever the creature fails a Constitution saving throw to maintain concentration on a spell, it can use its reaction to succeed instead.", action : [["reaction", ""]], choices : ["Mind Sharpener Armor", "Mind Sharpener Robes"], "mind sharpener armor" : { name : "Mind\u200A Sharpener (UA)", type : "armor (light, medium, or heavy)", description : "This magic armor can send a jolt to refocus my mind. Whenever I fail a Constitution saving throw to maintain concentration on a spell, I can use my reaction to succeed instead.", chooseGear : { type : "armor", prefixOrSuffix : "brackets", itemName1stPage : ["suffix", "Mind Sharpener"], descriptionChange : ["prefix", "armor"] } }, "mind sharpener robes" : { name : "Mind Sharpener (UA) (Robes)", type : "wondrous item", description : "These magic robes can send a jolt to refocus my mind. Whenever I fail a Constitution saving throw to maintain concentration on a spell, I can use my reaction to succeed instead." } }; AddFeatureChoice(ClassList.artificer.features["infuse item"], true, "Spell-Refueling Ring (ua) (prereq: level 6 artificer)", { name : "Spell-Refueling Ring", source : [["UA:SP3", 3]], description : desc([ "As an action once per dawn, the wearer of this ring can recover one expended spell slot", "The maximum level of the spell slot is equal to the number of magic items it is attuned to" ]), additional : "ring; requires attunement", prereqeval : function(v) { return classes.known.artificer.level >= 6; }, magicitemsAdd : ["Spell-Refueling Ring (UA)"] }); MagicItemsList["spell-refueling ring-ua"] = { name : "Spell-Refueling Ring (UA)", source : [["UA:SP3", 3]], type : "ring", description : "As an action, I can activate this magic ring to recover one expended spell slot. The maximum level of the recovered slot is equal to the number of magic items I am attuned to when I activate this ring. Once used, the ring can't be used again until the next dawn.", descriptionFull : "While wearing this ring, the creature can recover one expended spell slot as an action. The maximum level of the recovered slot is equal to the number of magic items the wearer is currently attuned to. Once used, the ring can't be used again until the next dawn.", attunement : true, action : [["action", ""]], usages : 1, recovery : "dawn" }; } AddSubClass("druid", "circle of the stars-ua", { regExpSearch : /^(?=.*(druid|shaman))(?=.*circle)(?=.*stars).*$/i, subname : "Circle of the Stars", subnameShort: "Stars", source : [["UA:SP3", 3]], features : { "subclassfeature2" : { name : "Star Map", source : [["UA:SP3", 3]], minlevel : 2, description : desc([ "I've created a star map, a Tiny object which I can use as my spellcasting focus", "If I lose it, I can perform a 1-hour ceremony during a rest to create a replacement", "I can use it to cast Augury or Guiding Bolt, even unprepared, without using a spell slot" ]), spellcastingBonus : [{ name : "Star Map", spells : ["guiding bolt", "augury"], selection : ["guiding bolt", "augury"], firstCol : "Sp", times : 2 }], usages : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest" }, "subclassfeature2.1" : { name : "Starry Form", source : [["UA:SP3", 3]], minlevel : 2, description : desc([ "As an action, I can expend a use of wild shape to take on a starry form for 10 minutes", "In that form I shed bright light in a 10-ft radius and dim light for an extra 10-ft radius", "When I do so, I choose one constellation below to grant me benefits in my starry form:", "\u2022 Chalice: When I use a spell slot to cast a healing spell, I also heal a creature in 30 ft", " This can be myself or the original target; I restore 1d8 + half my druid level in HP", "\u2022 Archer: As a bonus action, I can make a ranged spell attack to hurl a luminous arrow", " This has a range of 60 ft and deals radiant damage equal to 1d8 + my Wisdom mod", "\u2022 Dragon: I can treat a roll below 10 as a 10 for Int/Wis checks and concentration saves" ]), action : [["bonus action", " (Archer Constellation)"]], additional : levels.map(function (n) { return n < 2 ? "" : "Chalice: heals 1d8+" + Math.floor(n/2) + " HP"; }), weaponOptions : [{ regExpSearch : /^(?=.*luminous)(?=.*arrow).*$/i, name : "Luminous Arrow", source : [["UA:SP3", 3]], ability : 5, type : "Spell", damage : [1, 8, "radiant"], range : "60 ft", description : "Use as bonus action", abilitytodamage : true, selectNow : true }] }, "subclassfeature6" : { name : "Cosmic Omen", source : [["UA:SP3", 3]], minlevel : 6, description : desc([ "When I finish a long rest, I can roll a die to gain an omen based on the result (odd/even)", "As a reaction when a creature I can see in 30 ft makes an attack, check, or save, I can:", "\u2022 Weal (even): add 1d6 to the number rolled for the attack, check, or save", "\u2022 Woe (odd): subtract 1d6 from the number rolled for the attack, check, or save" ]), action : [["reaction", ""]], usages : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest" }, "subclassfeature10" : { name : "Full of Stars", source : [["UA:SP3", 3]], minlevel : 10, description: desc("While in my starry form, I have resistance to bludgeoning, piercing, and slashing damage"), dmgres : [ ["Bludgeoning", "Bludgeon. (in form)"], ["Piercing", "Piercing (in form)"], ["Slashing", "Slashing (in form)"] ], "star flare" : { name : "Star Flare", extraname : "Circle of the Stars 14", source : [["UA:SP3", 3]], description : desc([ "As an action, I conjure a 30-ft radius sphere of light on a point within 120 ft I can see", "I then teleport each willing creature in that sphere to an empty space within 30 ft of it", "Creatures left within the sphere must make a Con save or take 4d10 radiant damage", "Those that failed the save are also blinded until the end of my next turn", "I can do this once per long rest, or by expending a 5th-level or higher spell slot (SS 5+)" ]), action : [["action", ""]], usages : 1, recovery : "long rest", altResource : "SS 5+" }, autoSelectExtrachoices : [{ extrachoice : "star flare", minlevel : 14 }] } } }); var UASP3_rangerSubclassFeyWandererUA = AddSubClass("ranger", "fey wanderer-ua", { regExpSearch : /^(?=.*fey)(?=.*wanderer).*$/i, subname : "Fey Wanderer", source : [["UA:SP3", 5]], fullname : "Fey Wanderer", features : { "subclassfeature3" : { name : "Fey Wanderer Magic", source : [["UA:SP3", 5]], minlevel : 3, description: desc("I get bonus spells known, which do not count against the number of spells I can know"), spellcastingExtra : ["charm person", "misty step", "dispel magic", "banishment", "mislead"], spellcastingExtraApplyNonconform : true }, "subclassfeature3.1" : { name : "Cunning Will", source : [["UA:SP3", 5]], minlevel : 3, description: desc("Adv. on saves vs. charm/frightened; Proficiency in Deception, Performance, or Persuasion"), skillstxt : "Choose one from: Deception, Performance, or Persuasion", savetxt : { adv_vs : ["charmed", "frightened"] } }, "subclassfeature3.2" : { name : "Dreadful Strikes", source : [["UA:SP3", 5]], minlevel : 3, description : desc([ "As a bonus action, I can imbue the weapons I'm holding with magic until my turn ends", "They count as magical and deal +1d6 psychic damage, but only once to a single creature", "I can also do this as part of the same bonus action as making an off-hand attack" ]), action : [["bonus action", ""]] }, "subclassfeature7" : { name : "Blessings of the Courts", source : [["UA:SP3", 5]], minlevel : 7, description : desc([ "Once per turn when I hit a weapon attack, I can expend a spell slot for extra damage", "The target takes +3d6 psychic damage and must make a Wis save or be frightened of me", "This lasts until the end of my next turn; In addition, I add my Wis mod to Cha checks" ]), addMod : ["Deception", "Intimidation", "Performance", "Persuasion"].map(function(skill){return {type : "skill", field : skill, mod : "Wis", text : "I add my Wisdom modifier to my Charisma checks"};}) }, "subclassfeature11" : { name : "Beguiling Twist", source : [["UA:SP3", 6]], minlevel : 11, description : desc([ "As a reaction when a creature I can see in 120 ft succeeds a save vs. charmed/frightened", "I can have another I can see in 120 ft make a Wis save or suffer one effect of my choice:", " \u2022 For 1 min, it's frightened of me or charmed; It can save again at the end of its turns", " \u2022 It takes 3d10 psychic damage" ]), action : [["reaction", ""]], "misty presence" : { name : "Misty Presence", extraname : "Fey Wanderer 15", source : [["UA:SP3", 6]], description : desc([ "As a bonus action, I can have a creature I can see within 30 ft make a Wisdom save", "On a failed save, it cannot see or hear me for 24 hours or until I use this feature again", "The target can repeat its save if I hit it with an attack, force it to save, or deal it damage", "On a successful save, the creature is immune to my use of this feature for 7 days", "I can do this once per long rest, or by expending a 4th-level or higher spell slot (SS 4+)" ]), action : [["bonus action", ""]], usages : 1, recovery : "long rest", altResource : "SS 4+" }, autoSelectExtrachoices : [{ extrachoice : "misty presence", minlevel : 15 }] } } }); if (ClassList.rangerua) { ClassList.rangerua.subclasses[1].push(UASP3_rangerSubclassFeyWandererUA); }; // ua_20200512_Subclasses-Revisited.js // This file adds the content from the Unearthed Arcana: Fighter, Ranger, and Rogue article to MPMB's Character Record Sheet // This file contains contributions by Undrhil and Metacomet10 SourceList["UA:SR"] = { name : "Unearthed Arcana: Subclasses Revisited", abbreviation : "UA:SR", group : "Unearthed Arcana", url : "https://media.wizards.com/2020/dnd/downloads/UA2020_SubclassesRevisited_0512.pdf", date : "2020/05/12" }; AddSubClass("rogue", "phantom-ua", { regExpSearch : /^(?!.*(barbarian|bard|cleric|druid|fighter|monk|paladin|ranger|sorcerer|warlock|wizard))(?=.*phantom).*$/i, subname : "Phantom", source : [["UA:SR", 1]], fullname : "Phantom", features : { "subclassfeature3" : { name : "Whispers of the Dead", source : [["UA:SR", 1]], minlevel : 3, description : desc([ "Whenever I finish a short or long rest, I can gain one skill or tool proficiency of my choice", "This proficiency lasts until I use this feature again to gain a different proficiency" ]), skillstxt : "Choose one skill or tool; I can change the choice whenever I finish a short or long rest" }, "subclassfeature3.1" : { name : "Wails from the Grave", source : [["UA:SR", 1]], minlevel : 3, description : levels.map(function (n) { var a = [ "Directly after I deal sneak attack damage to a creature on my turn, I " + (n < 17 ? "can" : "also") + " harm another", n < 17 ? "I then deal half my sneak attack in psychic damage to a creature I can see within 30 ft" : "I deal half my sneak attack in psychic damage to both it and another I can see in 30 ft" ]; return desc(a); }), usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", additional : levels.map(function (n) { return Math.ceil(n / 4) + "d6"; }), }, "subclassfeature9" : { name : "Tokens of the Departed", source : [["UA:SR", 2]], minlevel : 9, description : " [max Proficiency Bonus of soul trinkets]" + desc([ "As a reaction when I see a creature within 30 ft die, I can create a Tiny soul trinket", "The token of its life essence appears in my free hand; The DM determines its appearance", "While a soul trinket is on my person, I have advantage on death and Constitution saves", "As an action, I can destroy one of my soul trinkets and ask its associated spirit a question", "Its spirit appears and answers concisely in a language it knew; Trinket can be anywhere" ]), action : [ ["reaction", "Create Soul Trinket"], ["action", "Destroy Soul Trinket"] ], extraLimitedFeatures : [{ name : "Soul Trinkets (max Prof Bonus)", usages : "", recovery : "Special" }], savetxt : { text : ["While soul trinket is on me, Adv. on Con and death saves"] } }, "subclassfeature13" : { name : "Ghost Walk", source : [["UA:SR", 2]], minlevel : 13, description : desc([ "As a bonus action, I can assume a spectral form with 10 ft flying speed and can hover", "Attacks vs. me have disadv.; I can move through creatures and objects as difficult terrain", "This lasts 10 min; I take 1d10 force damage if I end my turn inside a creature or object", "I can assume this form once per long rest, or by destroying one of my soul trinkets (ST)" ]), action : [["bonus action", " (start/end)"]], usages : 1, recovery : "long rest", altResource : "ST" }, "subclassfeature17" : { name : "Death Knoll", source : [["UA:SR", 2]], minlevel : 17, description : desc([ "Wails from the Grave now also deals damage to the target of the original sneak attack" ]) } } }); /* This UA version of Order of Scribes is not done yet AddSubClass("wizard","order of scribes-ua", { regExpSearch : /^(?=.*wizard)(?=.*order)(?=.*scribes?).*$|scrivener/i, subname : "Order of Scribes", source : [["UA:SR", 4]], features : { "subclassfeature2" : { name : "Wizardly Quill", source : [["UA:SR", 4]], minlevel : 2, description : desc([ "As a bonus action, I can magically create a Tiny quill with the following properties:", " \u2022 It doesn't require ink and produces ink in the color of my choice when writing with it", " \u2022 The gold and time required to transcribe spells into my spellbook with it are halved", " \u2022 As a bonus action, I can use it to erase a text written with it if within 5 ft of the text", "The quill disappear if I create another or if I die" ]), action : [["bonus action", " (create/erase)"]] }, "subclassfeature2.1" : { name : "Awakened Spellbook", source : [["UA:SR", 4]], minlevel : 2, description : desc ([ "My spellbook gains sentience and grants me the following benefits while I am holding it:", " \u2022 I can use the book as a spellcasting focus for my wizard spells", " \u2022 When I cast a wizard spell using a spell slot, I can temporarily replace its damage type", " The new damage type must appear in another spell in my awakened spellbook", " \u2022 Once per long rest, I can ritual cast a wizard spell without 10 min extra casting time", "I can replace it over a short rest, transferring its spells and sentience to a blank book" ]), additional : "fast ritual cast", usages : 1, recovery : "long rest" }, "subclassfeature6" : { name : "Master Scrivener", source : [["UA:SR", 4]], minlevel : 6, description : desc([ "When I finish a long rest, I can write a spell in my awakened spellbook on a blank paper", "It must be a level 1 or 2 spell with 1 action casting time; My spellbook must be in 5 ft", "As an action, I can use this scroll to cast the spell on it at one higher level than normal", "Only I can use the scroll; The scroll turns blank again when I use it or finish a long rest", "Also, using my Wizardly Quill, the gold and time I need to craft spell scrolls is halved" ]), action : [["action", " (cast scroll)"]], usages : 1, recovery : "long rest" }, // Finished until here "subclassfeature10" : { name : "Manifest Mind", source : [["UA:SR", 5]], minlevel : 10, description : desc('As a bonus action, I can cause my Awakened Spellbook to manifest. See "Note" page'), toNotesPage : [{ name : "Manifest Mind", source : [["UA:SR", 5]], page3notes : false, note : desc (["As a bonus action with my Awakened Spellbook on my person, I can cause the mind to", "manifest as a Tiny spectral construct, hovering in an unoccupied space of my choice within", "60 ft. It is intangible and doesn't occupy its space, and it sheds dim light in a 10 ft radius.", "It looks like a ghostly tome, a cascade of text, or a scholar from the past \(my choice.\).", "\(See Companion Page for statistics for this construct.\)", "While manifested, it can hear and see and has darkvision with a range of 60 ft. As an", "action, I can hear and see using its senses instead of my own, until my concentration", "ends \(as if concentrating on a spell\).", "Whenever I cast a wizard spell on my turn, I can cast it as if I were in the spectral mind's", "space, using its senses. I can do this a number of times per day equal to my proficiency", "bonus, and I regain all uses when I finish a long rest.", "As a bonus action, I can cause it to hover up to 30 ft to an unoccupied space that I or it", "can see. It can pass through creatures but not objects. It stops manifesting if it is ever", "more than 300 ft away from me, if it drops to 0 hit points, if I die, or if I dismiss it as", "a bonus action." ]) }], eval : function() { var companionFunctions = ClassList.artificer ? ClassList.artificer.artificerCompFunc : ClassList.wizard.artificer.CompFunc; companionFunctions.add("Manifest Mind"); ClassList.wizard.wizardCompFunc.update(10, What('Int mod'),What('AC'),What('Str mod'),What('Dex mod'),What('Con mod'),What('Wis mod'),What('Cha mod')); }, removeeval : function() { var companionFunctions = ClassList.artificer ? ClassList.artificer.artificerCompFunc : ClassList.wizard.artificerCompFunc; companionFunctions.remove("Manifest Mind"); }, action : [["bonus action",""],["bonus action","Hover spellbook 30ft"],["bonus action","dismiss Manifestation"]], usages : "Prof Bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature14" : { name : "One with the Word", source : [["UA:SR", 5]], minlevel : 14, description : desc([ "While I am holding my Awakened Spellbook and it is manifest, I can take an action to", "swap places with the manifestation. I can do this a number of times equal to my", "proficiency bonus and I regain all expended uses when I finish a long rest.", "If I die but at least one spell remains in my Awakened Spellbook, I can return to", "life after 1 minute within 5 ft of the book. I revive with 1 hit point. I then roll", "3d6 and the spellbook loses spells of my choice that have a combined spell level", "equal to that roll or higher. I am incapable of casting the lost spells, even if I", "find them on a scroll or in another spellbook. I can only restore my ability to cast", "one of these spells with the wish spell, which will restore one spell per casting." ]), action : [["action","Swap places with spellbook"]], usages : "Prof Bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" } } }); */ // ua_20200713_Feats-2020.js // This file adds the content from the Unearthed Arcana 2020: Feats article to MPMB's Character Record Sheet // All content in this file contains contributions by AelarTheElfRogue // Define the source SourceList["UA:F2"] = { name : "Unearthed Arcana: Feats 2020", abbreviation : "UA:F2", group : "Unearthed Arcana", url : "https://media.wizards.com/2020/dnd/downloads/UA2020_Feats.pdf", date : "2020/07/13" }; FeatsList["crusher-ua"] = { name : "Crusher", source : [["UA:F2", 1]], descriptionFull : "You are practiced in the art of crushing your enemies, granting you the following benefits:\n \u2022 Increase your Strength or Dexterity by 1, to a maximum of 20.\n \u2022 Once per turn, when you hit a creature with an attack that deals bludgeoning damage, you can move it 5 feet to an unoccupied space, provided the target is no more than one size larger than you.\n \u2022 When you score a critical hit that deals bludgeoning damage to a creature, attack rolls against that creature are made with advantage until the end of your next turn.", description : "Once per turn, when I hit a creature no more than one size larger than me with an attack that deals bludgeoning damage, I can move it 5 ft to an unoccupied space. If I score a critical hit that deals bludgeoning damage, attacks against the creature hit gain advantage until the start of my next turn. [+1 " + (typePF ? "Str or Dex" : "Strength or Dexterity") + "]", scorestxt : "+1 Strength or Dexterity" }; FeatsList["practiced expert-ua"] = { name : "Practiced Expert", source : [["UA:F2", 3]], descriptionFull : "You have honed your proficiency with particular skills or tools, gaining the following benefits:\n \u2022 Increase one ability score of your choice by 1, to a maximum of 20.\n \u2022 You gain proficiency with one skill or tool of your choice.\n \u2022 Choose one of your skill or tool proficiencies. Your proficiency bonus is doubled for any ability check you make that uses the chosen proficiency.", description : "I gain proficiency in one skill or tool, and expertise in that same skill or tool, or another skill or tool I'm proficient with. [+1 to one ability score of my choice]", skillstxt : "Proficiency with one skill or tool, and\n Expertise with one skill or tool I'm proficient with", scorestxt : "+1 to one ability score of my choice" }; FeatsList["shadow touched-ua"] = { name : "Shadow Touched", source : [["UA:F2", 3]], descriptionFull : "You learn how to bend shadows from your experience with the Shadowfell. You gain the following benefits:\n \u2022 Increase your Intelligence, Wisdom, or Charisma score by 1, to a maximum of 20.\n \u2022 You learn the darkness spell and one 1st-level spell of your choice. The 1st-level spell must be from the illusion or necromancy school of magic. You can cast each of these spells without expending a spell slot. Once you cast either of these spells in this way, you can't cast that spell in this way again until you finish a long rest. You can also cast these spells using spell slots you have of the appropriate level. The spells' spellcasting ability is the ability increased by this feat.", description : "I learn Darkness and one 1st level illusion or necromancy spell. I can cast each once per long rest at their lowest level without expending a spell slot, and can cast them if I have a spell slot to do so. My spellcasting ability is the ability I choose to increase when I gain this feat. [+1 Intelligence, Wisdom, or Charisma]", spellcastingBonus : [{ name : "Darkness", spells : ["darkness"], selection : ["darkness"], firstCol : "oncelr+markedbox" }, { name : "1st-level Illus/Necro spell", 'class' : "any", school : ["Illus", "Necro"], level : [1, 1], firstCol : "oncelr+markedbox" }], spellcastingAbility : 4, allowUpCasting : true, choices : ["Intelligence", "Wisdom", "Charisma"], "intelligence" : { description : "I learn Darkness and one 1st level illusion or necromancy spell. I can cast each once per long rest at their lowest level without expending a spell slot, and can cast them by expending a spell slot as normal. Intelligence is my spellcasting ability for these spells. [+1 Intelligence]", spellcastingAbility : 4, scores : [0, 0, 0, 1, 0, 0] }, "wisdom" : { description : "I learn Darkness and one 1st level illusion or necromancy spell. I can cast each once per long rest at their lowest level without expending a spell slot, and can cast them by expending a spell slot as normal. Wisdom is my spellcasting ability for these spells. [+1 Wisdom]", spellcastingAbility : 5, scores : [0, 0, 0, 0, 1, 0] }, "charisma" : { description : "I learn Darkness and one 1st level illusion or necromancy spell. I can cast each once per long rest at their lowest level without expending a spell slot, and can cast them by expending a spell slot as normal. Charisma is my spellcasting ability for these spells. [+1 Charisma]", spellcastingAbility : 6, scores : [0, 0, 0, 0, 0, 1] } }; FeatsList["shield training-ua"] = { name : "Shield Training", source : [["UA:F2", 3]], descriptionFull : "You've trained in the effective use of shields. You gain the following benefits:\n \u2022 Increase your Strength, Dexterity, or Constitution score by 1, to a maximum of 20.\n \u2022 You gain proficiency with shields.\n \u2022 In combat, you can don or doff a shield as the free object interaction on your turn.\n \u2022 If you have the Spellcasting or Pact Magic feature, you can use a shield as a spellcasting focus.", description : "I gain proficiency with shields. I can don or doff a shield as the free object interaction on my turn. If I have the Spellcasting or Pact Magic feature, I can use my shield as a spellcasting focus. [+1 Strength, Dexterity, or Constitution]", scorestxt : "+1 Strength, Dexterity, or Constitution", armorProfs : [false, false, false, true] }; FeatsList["tandem tactician-ua"] = { name : "Tandem Tactician", source : [["UA:F2", 3]], descriptionFull : "Your presence in a scrap tends to elevate your comrades. You gain the following benefits:\n \u2022 You can use the Help action as a bonus action.\n \u2022 When you use the Help action to aid an ally in attacking a creature, increase the range of the Help action by 10 feet. Additionally, you can help two allies targeting the same creature within range when you use the Help action this way.", description : "I can use the Help action as a bonus action. When I use the Help action to aid an ally in attacking a creature, the range of the Help action increases with 10 ft. I can help two allies targeting the same creature within range when I use the Help action this way.", action : [["bonus action", ""]] }; FeatsList["tracker-ua"] = { name : "Tracker", source : [["UA:F2", 3]], descriptionFull : "You have spent time hunting creatures and honed your skills, gaining the following benefits:\n \u2022 Increase your Wisdom score by 1, to a maximum of 20.\n \u2022 You learn the hunter's mark spell. You can cast it once without expending a spell slot, and you must finish a long rest before you can cast it in this way again. You can also cast the spell using any spell slots you have. Wisdom is your spellcasting ability for this spell.\n \u2022 You have advantage on Wisdom (Survival) checks to track creatures.", description : "I can cast Hunter's Mark once per long rest at its lowest level without expending a spell slot, and can cast it by expending a spell slot as normal. Wisdom is my spellcasting ability for this. I have advantage on Wisdom (Survival) checks to track creatures. [+1 Wisdom]", scores : [0, 0, 0, 0, 1, 0], spellcastingBonus : [{ name : "1\xD7/LR \u0026 spell slot", spellcastingAbility : 5, allowUpCasting : true, spells : ["hunter's mark"], selection : ["hunter's mark"], firstCol : "oncelr+markedbox" }] }; // ua_20200805_Subclasses-Part-4.js // This file adds the content from the Unearthed Arcana 2020: Subclasses, Part 4 article to MPMB's Character Record Sheet // This file contains contributions by AelarTheElfRogue // Define the source SourceList["UA:SP4"] = { name : "Unearthed Arcana: Subclasses, Part 4", abbreviation : "UA:SP4", group : "Unearthed Arcana", url : "https://media.wizards.com/2020/dnd/downloads/UA2020_Subclasses04.pdf", date : "2020/08/05" }; AddSubClass("bard", "college of spirits-ua",{ regExpSearch : /^(?=.*(college|bard|minstrel|troubadour|jongleur))(?=.*spirits?).*$/i, subname : "College of Spirits", subnameShort: "Spirits", source : [["UA:SP4", 1]], features : { "subclassfeature3" : { name : "Guiding Whispers", source : [["UA:SP4", 1]], minlevel : 3, description : desc([ "I learn the Guidance cantrip and can cast it with a range of 60 ft" ]), spellcastingBonus : [{ name : "Guiding Whispers", spells : ["guidance"], selection : ["guidance"], firstCol : "atwill" }], spellChanges : { "guidance" : { range : "60 ft", changes : "I can cast Guidance with a range of 60 ft." } } }, "subclassfeature3.1" : { name : "Spiritual Focus", source : [["UA:SP4", 1]], minlevel : 3, description : " [only for bard spells]" + desc([ "I can use a candle, crystal ball, skull, spirit board, or tarokka deck as a spellcasting focus" ]) }, "subclassfeature3.2" : { name : "Tales from Beyond", source : [["UA:SP4", 1]], minlevel : 3, description : desc([ "As a bonus action, I can expend a bardic inspiration die to roll on the Spirits' Tales table", "I retain the rolled tale in my mind until I bestow its effects or finish a short or long rest", "I can only retain one tale at a time; I need to hold a spiritual focus to roll on the table", "As an action, I can choose a creature I see in 30 ft or myself to bestow the tale's effect", "The tales use my spell save DC; See the Notes page for the Spirits' Tales table" ]), action : [["bonus action", " (roll on table)"], ["action", " (use effect)"]], toNotesPage : [{ name : "Spirits' Tales Table", note : desc([ "As a bonus action while I'm holding my spiritual focus, I can reach out to spirits who tell their tales through me. I expend one use of my Bardic Inspiration and roll on the table below using my Bardic Inspiration die to determine the tale. I retain the tale in mind until I bestow the tale's effect or finish a short or long rest.", "I can retain only one of these tales in mind at a time, and rolling on the table immediately ends the effect of the previous tale.", "As an action, I can choose myself or one creature I can see within 30 ft to be the target of the tale's effect. If the tale requires a saving throw, the DC equals my spell save DC.", "\nRoll " + (typePF ? "" : " ") + "Tale" ])+ desc([ " 1 Beast: I recite the tale of a clever animal. For 1 minute, the target has advantage on Wisdom (Perception) checks and advantage on attack rolls against a creature if another enemy is within 5 ft of it, and that enemy isn't incapacitated.", " 2 Warrior: I recount the story of a renowned duelist. Make a melee spell attack against the target as an attacking spectral warrior briefly appears in a unoccupied space within 5 ft of the target before vanishing. On a hit, the target takes force damage equal to two rolls of my Bardic Inspiration die + my Charisma modifier.", " 3 Friends: I recite the tale of friends who found each other in the afterlife. The target and another creature of its choice it can see within 5 ft of it regains hit points equal to a roll of my Bardic Inspiration die + my Charisma modifier.", " 4 Runaway: I tell the tale of an adventurer that could escape any confinement. The target can immediately use its reaction to teleport up to 30 ft to an unoccupied space it can see. When the target teleports, it can choose a number of creatures it can see within 30 ft of it up to my Charisma modifier (minimum of 1) to immediately use the same reaction.", " 5 Avenger: I recount the tale of an avenging knight. For 1 minute, whenever a creature the target can see within 30 ft of it is damaged by a creature, the target can use its reaction to deal force damage equal to a roll of my Bardic Inspiration die to the attacker.", " 6 Hero: I speak the tale of an epic hero. The target gains temporary hit points equal to a roll of my Bardic Inspiration die + my bard level. While it has these temporary hit points, the target's walking speed increases by 10 ft.", " 7 Fey: I recount the tale of a mischievous fey. The target must succeed on a Wisdom saving throw or become charmed by me until the end of its next turn. The charmed target must use its action to make a melee attack against a creature other than itself that I mentally choose. The target can act normally on its turn if I choose no other creature.", " 8 Dark Spirit: I speak a dreadful tale of a slayer in the dark. The target becomes invisible until the end of its next turn or until it hits a creature with an attack. If it hits a creature with an attack during this invisibility, that creature takes necrotic damage equal to a roll of my Bardic Inspiration die and is frightened of the target until the end of its next turn.", " 9 Giant: I speak of the deeds of a mighty giant. Each creature of the target's choice it can see within 30 ft of it must make a Strength saving throw, taking force damage equal to two rolls of my Bardic Inspiration die on a failed save and is knocked prone. A creature that succeeds on its saving throw takes half as much damage and isn't knocked prone.", " 10 Dragon: I breathe a poem of a wrathful dragon. The target magically spews fire from their mouth in a 30-ft cone. Each creature in that area must make a Dexterity saving throw, taking fire damage equal to three rolls of my Bardic Inspiration die on a failed save, or half as much damage on a successful one.", " 11 Celestial: I speak of the exalted deeds of a celestial. The target regains hit points equal to two rolls of my Bardic Inspiration die + my bard level, and I end one disease or a condition from the following list affecting the target: blinded, deafened, paralyzed, petrified, or poisoned.", " 12 Unknown: I utter an incomprehensible fable from a being beyond the stars. The target must succeed on an Intelligence saving throw or take psychic damage equal to three rolls of my Bardic Inspiration die, and the target is unable to speak any language for 1 minute." ], "\n") }] }, "subclassfeature6" : { name : "Spiritual Focus: Improve spells", source : [["UA:SP4", 2]], minlevel : 6, description : desc([ "While holding a spiritual focus, I can add 1d6 to one damage or healing roll of bard spells" ]), calcChanges : { atkAdd : [ function (fields, v, output) { if (v.thisWeapon[3] && SpellsList[v.thisWeapon[3]] && v.thisWeapon[4].indexOf("bard") !== -1) { // If RAW is selected, first test if this spell is eligible to use with a spellcasting focus var isRAW = GetFeatureChoice("classes", "bard", "subclassfeature6") === "raw: only +1d6 for spells with non-costly material components"; var spellObj = SpellsList[v.thisWeapon[3]]; if (isRAW && (!spellObj.components || !/\bM\b/.test(spellObj.components) || /M\u0192|M\u2020/.test(spellObj.components))) return; fields.Damage_Die = fields.Damage_Die.replace(/D/g, 'd'); var d6Regex = /(\d+)d6/; if (fields.Damage_Die.indexOf('Bd6') != -1) { fields.Damage_Die = fields.Damage_Die.replace('Bd6', 'Cd6'); } else if (fields.Damage_Die.indexOf('Cd6') != -1) { fields.Damage_Die = fields.Damage_Die.replace('Cd6', 'Qd6'); } else if (d6Regex.test(fields.Damage_Die)) { fields.Damage_Die = fields.Damage_Die.replace(d6Regex, Number(fields.Damage_Die.replace(d6Regex, '$1')) + 1 + 'd6'); } else if (v.thisWeapon[3] == "eldritch blast") { fields.Description += (fields.Description ? '; ' : '') + "One ray +1d6 dmg"; } else { fields.Damage_Die += '+1d6'; } } }, 'When I cast a bard spell, I can use my spiritual focus to add 1d6 to one damage roll or roll to restore hit points.\n Going by rules as written (RAW), the spiritual focus has to be used as a spellcasting focus for this bonus to be added. This means that it can only be used on spells with a non-costly material component. Most DMs will forgo this technicality and that is why this sheet will add the 1d6 to any damage/healing spell by default. You can enable to use the stricter rules as written with the "Choose Feature" button on the second page.' ], spellAdd : [ function (spellKey, spellObj, spName) { // Do not process if a psionic, not a bard spell, or, if RAW is selected, not eligible to use with a spellcasting focus var isRAW = GetFeatureChoice("classes", "bard", "subclassfeature6") === "raw: only +1d6 for spells with non-costly material components"; if (spellObj.psionic || spName !== "bard" || (isRAW && (!spellObj.components || !/\bM\b/.test(spellObj.components) || /M\u0192|M\u2020/.test(spellObj.components)))) return; if (genericSpellDmgEdit(spellKey, spellObj, "\\w+\\.?", "1d6", true, true) || genericSpellDmgEdit(spellKey, spellObj, "heal", "1d6", true, true)) { return true; } }, 'When I cast a bard spell, I can use my spiritual focus to add 1d6 to one damage roll or roll to restore hit points.\n Going by rules as written (RAW), the spiritual focus has to be used as a spellcasting focus for this bonus to be added. This means that it can only be used on spells with a non-costly material component. Most DMs will forgo this technicality and that is why this sheet will add the 1d6 to any damage/healing spell by default. You can enable to use the stricter rules as written with the "Choose Feature" button on the second page.' ] }, choices : ["RAW: only +1d6 for spells with non-costly material components", "Allow +1d6 for any bard spell"], "raw: only +1d6 for spells with non-costly material components" : { name : "Spiritual Focus: Improve spells", description : desc([ "If I use a spiritual focus to cast a bard spell, I can add 1d6 to one damage or healing roll" ]) }, "allow +1d6 for any bard spell" : { name : "Spiritual Focus: Improve spells", description : desc([ "While holding a spiritual focus, I can add 1d6 to one damage or healing roll of bard spells" ]) }, defaultChoice : "allow +1d6 for any bard spell" }, "subclassfeature6.1" : { name : "Spirit Session", source : [["UA:SP4", 2]], minlevel : 6, description : desc([ "Using my spiritual focus, I can conduct a hour-long ritual to channel spirit during a rest", "The number of willing participants, me included, can be up to my Proficiency Bonus", "At the end, I learn a divination or necromancy spell of my choice until I start a long rest", "The spell can't be higher level than the number of participants and of a level I can cast" ]), usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Spirit Session", school : ["Div", "Necro"], firstCol : "SS" }] }, "subclassfeature14" : { name : "Mystical Connection", source : [["UA:SP4", 3]], minlevel : 14, description : desc([ "I can roll a d6 instead of expending a bardic inspiration die when I do Tales from Beyond", "Even if I roll a d6, I still roll my bardic inspiration die for the effect, but not expend it" ]) } } }); AddSubClass("warlock", "the undead-ua",{ regExpSearch : /^(?=.*undead)(?=.*warlock).*$/i, subname : "the Undead", source : [["UA:SP4", 1]], spellcastingExtra : ["bane", "false life", "blindness/deafness", "phantasmal force", "phantom steed", "speak with dead", "death ward", "greater invisibility", "antilife shell", "cloudkill"], features : { "subclassfeature1" : { name : "Form of Dread", source : [["UA:SP4", 3]], minlevel : 1, description : desc([ "As a bonus action, I can transform for 1 minute and gain the following benefits:", " \u2022 I gain temporary hit points equal to 1d10 + my warlock level", " \u2022 I am immune to the frightened condition", " \u2022 Once per turns when I hit an attack, I can force the target to make a Wis save", " If the target fails this save, it is frightened of me until the end of my next turn" ]), additional : levels.map(function (n) { return "1d10+" + n + " temp HP"; }), usages : "Prof Bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", action : [["bonus action", ""]], savetxt : { immune : ["frightened (Form of Dread)"] } }, "subclassfeature6" : { name : "Grave Touched", source : [["UA:SP4", 3]], minlevel : 3, description : desc([ "I no longer need to eat, drink, or breathe", "When I damage a creature with an attack, I can change the damage type to necrotic", "While I'm in my Form of Dread, I can roll one extra damage die for this necrotic damage" ]) }, "subclassfeature10" : { name : "Mortal Husk", source : [["UA:SP4", 4]], minlevel : 10, description : desc([ "I have resistance to necrotic damage, or immunity while I'm in my Form of Dread", "When I'm reduced to 0 HP, I can cause my body to explode and I revive with 1 HP after", "Each creature of my choice within 30 ft takes 2d10 + my warlock level necrotic damage", "After this, I gain 1 level of exhaustion and must complete 1d4 long rests to do so again" ]), additional : levels.map(function (n) { return n < 10 ? "" : "2d10+" + n + " damage, 1\xD7 per 1d4 long rests" }), dmgres : [["Necrotic"]], savetxt : { immune : ["necrotic (Form of Dread)"] }, extraLimitedFeatures : [{ name : "Mortal Husk (revive)", usages : 1, recovery : "1d4 LR" }] }, "subclassfeature14" : { name : "Spirit Projection", source : [["UA:SP4", 4]], minlevel : 14, description : desc([ "As an action, I can project my spirit from my body, leaving it suspended and unconscious", "This lasts 1 hour or until my concentration is broken; Damage and effects affect both", "When it ends, I can have my spirit return to my body or my body teleport to my spirit", "My spirit has my abilities, but no gear; While projecting I gain the following benefits:", " \u2022 My spirit and body gain resistance to bludgeoning, piercing, and slashing damage", " \u2022 My conjuration/necromancy spells need no verbal, somatic, non-costly material comp.", " \u2022 I gain a flying speed equal to my walking speed and can hover", " \u2022 Move through creatures/objects as difficult terrain; 1d10 force damage if end turn in", " \u2022 While in my Form of Dread, once per turns when I deal necrotic damage, I can heal", " I regain hit points equal to half the amount of necrotic damage dealt" ]), usages : 1, recovery : "long rest", action : [["action", ""]] } } }); // ua_20201026_Subclasses-Part-5.js // This file adds the content from the Unearthed Arcana 2020: Subclasses, Part 5 article to MPMB's Character Record Sheet // This file contains contributions by WondrousLittleWizard // Define the source SourceList["UA:SP5"] = { name : "Unearthed Arcana: Subclasses, Part 5", abbreviation : "UA:SP5", group : "Unearthed Arcana", url : "https://media.wizards.com/2020/dnd/downloads/UA2020_102620_Subclasses05.pdf", date : "2020/10/26" }; AddSubClass("monk", "ascendant dragon-ua", { regExpSearch : /^(?=.*ascendant)(?=.*(dragon|draconic))((?=.*(monk|monastic))|((?=.*martial)(?=.*(artist|arts)))|((?=.*spiritual)(?=.*warrior))).*$/i, subname : "Way of the Ascendant Dragon", subnameShort: "Ascendant Dragon", source : [["UA:SP5", 1]], features : { "subclassfeature3" : { name : "Draconic Disciple", source : [["UA:SP5", 1]], minlevel : 3, description : desc([ "I can change the damage type of my unarmed strikes to acid, cold, fire, lightning, poison", "As a reaction when I fail an Intimidation or Persuasion check, I can reroll the check", "If this turns it into a success, I can't do so again until I finish a long rest; I learn Draconic" ]), languageProfs : ["Draconic"], action : [["reaction", " (reroll check)"]], usages : 1, recovery : "long rest", additional : "reroll", calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName === "unarmed strike") { fields.Description += (fields.Description ? '; ' : '') + "Change type to acid/cold/fire/lightning/poison"; }; }, "When I damage a target with an unarmed strike, I can change the damage type to acid, cold, fire, lightning or poison." ] }, "breath of the dragon" : { name : "Breath of the Dragon", extraname : "Ascendant Dragon 3", source : [["UA:SP5", 1]], description : levels.map(function (n) { var iMonkDie = n < 5 ? 4 : n < 11 ? 6 : n < 17 ? 8 : 10;; var aDesc = [ "When I take the Attack action on my turn, I can replace one attack with a breath weapon", "This deals " + (n < 11 ? 2 : 3) + "d" + iMonkDie + " acid, cold, fire, lightning, or poison (my choice) damage to all in the area", "The area can be a 20-ft cone or a 5-ft wide, 30-ft line; Dex save to halve the damage", "I can do this my Proficiency Bonus times per long rest, or by expending 1 ki point" ]; if (n < 17) return desc(aDesc); var aDesc17 = [ "From 17th-level, the energy clings to those damaged by this, hurting them every turn", "At the start of each of their turns, they take 1d" + iMonkDie + " damage of the chosen type", "At the end of each of their turns, they can repeat the save to end this effect on themselves" ]; return desc(aDesc.concat(aDesc17)); }), usages : "Prof B. per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", altResource : "1 ki", additional : levels.map(function (n) { return n < 3 ? "" : (n < 11 ? 2 : 3) + "d" + (n < 5 ? 4 : n < 11 ? 6 : n < 17 ? 8 : 10); }), weaponOptions : [{ regExpSearch : /^(?=.*breath)(?=.*dragon).*$/i, name : "Breath of the Dragon", source : [["UA:SP5", 1]], ability : 5, type : "Natural", damage : [2, 4, "My choice"], range : "5-ft \xD7 30-ft line", description : "All in area; Dex save for half damage; Alt: 20-ft cone; Type: acid/cold/fire/lightning/poison", dc : true, monkweapon : false, abilitytodamage : false, UA_WotAD_BreathWeapon : true, selectNow : true }], calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.monk && classes.known.monk.level && v.theWea.UA_WotAD_BreathWeapon) { var n = classes.known.monk.level; var aMonkDie = n < 5 ? 4 : n < 11 ? 6 : n < 17 ? 8 : 10;; fields.Damage_Die = (n < 11 ? 2 : 3) + "d" + aMonkDie; if (n >= 17) fields.Description += (fields.Description ? '; ' : '') + 'Clings to targets'; }; }, "My Breath of the Dragon deals damage equal to two rolls of my Martials Arts die. At 11th level, this increases to three rolls of my Martial Arts die. At 17th level, the energy clings to the target. At the start of each of a target's turns, it takes damage of the type the breath dealt equal to one roll of my Martial Arts die. At the end of its turn, the creature can repeat the save, ending the effect on itself on a success." ] } }, autoSelectExtrachoices : [{ extrachoice : "breath of the dragon" }] }, "subclassfeature6" : { name : "Wings Unfurled", source : [["UA:SP5", 2]], minlevel : 6, additional: "Prof B. / long rest or 1 ki", description : desc([ "When I use Step of the Wind, I can gain a flying speed equal to my walking speed", "I can do this Prof Bonus per long rest, or by using 2 ki points to use Step of the Wind" ]), extraLimitedFeatures : [{ name : "Wings Unfurled", usages : "Proficiency bonus per ", recovery : "long rest", usagescalc : "event.value = How('Proficiency Bonus');", altResource : "1 ki" }], "aspect of the wyrm" : { name : "Aspect of the Wyrm", extraname : "Ascendant Dragon 11", source : [["UA:SP5", 2]], description : levels.map(function (n) { var aDesc = [ "As a bonus action, I can activate a 30 ft aura of draconic power that lasts for 1 minute", "I choose acid, cold, fire, lightning, or poison damage when I activate this aura", "From 17th-level, all creatures of my choosing in the aura take 4d10 damage of this type", "My allies in the aura and myself gain resistance to the chosen damage type", "When an attack hits one of us, the one hit can use their reaction to damage the attacker", "This damage is of the chosen damage type, equal to one roll of my martial arts", "I can activate this aura once per long rest, or by expending 4 ki points" ]; if (n < 17) aDesc.splice(2,1); return desc(aDesc); }), usages : 1, recovery : "long rest", altResource : "4 ki", additional : levels.map(function (n) { return n < 11 ? "" : "1d" + (n < 17 ? 8 : 10); }), action : [["bonus action", " (activate)"], ["reaction", " (if active)"]] }, autoSelectExtrachoices : [{ extrachoice : "aspect of the wyrm", minlevel : 11 }] }, "subclassfeature17" : { name : "Ascendant Aspect", source : [["UA:SP5", 2]], minlevel : 17, description: desc("I gain 30 ft blindsight and both Breath of the Dragon and Aspect of the Wyrm improve"), vision : [["blindsight", 30]] } } }); var UASP5_Ranger_Subclass_Drakewarden = AddSubClass("ranger", "drakewarden-ua", { regExpSearch : /^(?=.*(drake|dragon|draconic))(?=.*(warden|ranger|trainer)).*$/i, subname : "Drakewarden", source : [["UA:SP5", 2]], fullname : "Drakewarden", features : { "subclassfeature3" : { name : "Draconic Gift", source : [["UA:SP5", 3]], minlevel : 3, description : desc([ "I learn the Draconic language and the Thaumaturgy cantrip" ]), languageProfs : ["Draconic"], spellcastingBonus : [{ name : "Draconic Gift", spells : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : "atwill" }] }, "subclassfeature3.1" : { name : "Drake Companion", source : [["UA:SP5", 3]], minlevel : 3, description : desc([ "As an action, I can summon my drake to an empty space within 30 ft that I can see", 'Select a "Drake Companion" on the companion page for its stats and rules', "I can do this once per long rest, or by expending a 1st-level or higher spell slot (SS 1+)" ]), usages : 1, recovery : "long rest", altResource : "SS 1+", action : [["action", " (summon)"], ["bonus action", " (command)"]], creaturesAdd : [["Drake Companion", true]], creatureOptions : [{ name : "Drake Companion", source : [["UA:SP5", 3]], size : 4, type : "Dragon", alignment : "Unaligned", ac : "14+Prof", hp : 20, hd : [3, 10], hdLinked : ["ranger", "rangerua"], minlevelLinked : ["ranger", "rangerua"], speed : "40 ft", scores : [16, 12, 15, 8, 14, 8], saves : ["", 3, "", "", 4, ""], damage_immunities : "the chosen Draconic Essence damage type", senses : "Darkvision 60 ft", passivePerception : 12, languages : "Draconic", challengeRating : "0", proficiencyBonus : 2, proficiencyBonusLinked : true, attacksAction : 1, attacks : [{ name : "Bite", ability : 1, damage : [1, 6, "piercing"], modifiers : ["", "Prof"], range : "Melee (5 ft)", description : "Only 1d6 is piercing damage, the rest is of the chosen Draconic Essence damage type", abilitytodamage : false }], features : [{ name : "Warden", description : "The drake obeys the commands of its warden and shares its proficiency bonus. It takes its turn immediately after that of its warden, on the same initiative. It can move and take reactions on its own, but only takes the Dodge action on its turn unless its warden takes a bonus action to command it to take another action. If its warden is incapacitated, the drake can take any action, not just Dodge. The drake vanishes after a number of hours equal to its proficiency bonus, when it is reduced to 0 hit points, when its warden summons another drake, or when its warden dies." }], traits : [{ name : "Draconic Essence", description : "When the drake is summoned, choose a damage type: acid, cold, fire, lightning, or poison." }, { name : "Infused Strikes", description : "As a reaction when another creature within 30 ft of the drake that it can see hits with a weapon attack, the drake can infuse the strike with its essence, causing the attack to deal an extra 1d6 damage of its chosen Draconic Essence damage type" }, { name : "Bond of Fang and Scale (Drakewarden 7)", minlevel : 7, description : "When the drake is summoned, it gains either a 40 ft swimming speed and can breathe underwater, or a 40 ft flying speed and has wings. The drake's bite deals an extra 1d6 damage of its chosen Draconic Essence type.", addMod : [{ type : "", field : "BlueText.Comp.Use.Attack.1.Damage Die", mod : "1d6", text : "The drake's bite attack deals an extra 1d6 damage of the type chosen for its Draconic Essence." }], eval : function(prefix, lvl) { var sMoveStr = (typePF ? ",\n" : ", ") + "fly/swim 40 ft"; if (What("Unit System") === "metric") sMoveStr = ConvertToMetric(sMoveStr, 0.5); tDoc.getField(prefix + "Comp.Use.Speed").value += sMoveStr; }, removeeval : function(prefix, lvl) { var sMoveStr = (typePF ? ",\n" : ", ") + "fly/swim 40 ft"; if (What("Unit System") === "metric") sMoveStr = ConvertToMetric(sMoveStr, 0.5); Value(prefix + "Comp.Use.Speed", What(prefix + "Comp.Use.Speed").replace(sMoveStr, "")); } }, { name : "Perfected Bond (Drakewarden 15)", minlevel : 15, description : "The drake's size is now Large and its bite attack deals an extra 1d6 damage (for a total of +2d6) of its chosen Draconic Essence type.", addMod : [{ type : "", field : "BlueText.Comp.Use.Attack.1.Damage Die", mod : "1d6", text : "The drake's bite attack deals another extra 1d6 damage (for a total of +2d6) of the type chosen for its Draconic Essence." }], eval : function(prefix, lvl) { PickDropdown(prefix + "Comp.Desc.Size", 2); // Large }, removeeval : function(prefix, lvl) { PickDropdown(prefix + "Comp.Desc.Size", 4); // Small } }], calcChanges : { hp : function (totalHD, HDobj, prefix) { if (!classes.known.ranger && !classes.known.rangerua) return; var rngrLvl = classes.known.ranger ? classes.known.ranger.level : classes.known.rangerua.level; var rngrLvlM = 5 * rngrLvl; HDobj.alt.push(5 + rngrLvlM); HDobj.altStr.push(" = 5 as a base\n + 5 \xD7 " + rngrLvl + " from five times its warden's ranger level (" + rngrLvlM + ")"); }, setAltHp : true } }] }, "subclassfeature7" : { name : "Bond of Fang and Scale", source : [["UA:SP5", 4]], minlevel : 7, description : desc([ "When I summon my drake I can choose for it to have 40 ft flying or swimming speed", "If I choose swimming, it also gains the ability to breathe underwater", "The drake's bite attack deals an extra 1d6 damage chosen by its Draconic Essense", "While it is summoned, I gain resistance to the damage type of its Draconic Essense" ]), dmgres : ["(See Drake)"] }, "subclassfeature11" : { name : "Drake's Breath", source : [["UA:SP5", 4]], minlevel : 11, description : desc([ "As an action, I can cause my drake or myself to exhale a 30-ft cone breath weapon", "Its damage type is acid, cold, fire, lightning, or poison; Dex save to halve the damage", "I can do this once per long rest, or by expending a 3rd-level or higher spell slot (SS 3+)" ]), additional : levels.map(function (n) { return n < 11 ? "" : (n < 15 ? 6 : 8) + "d6 damage"; }), action : [["action", ""]], usages : 1, recovery : "long rest", altResource : "SS 3+", weaponOptions : [{ regExpSearch : /^(?=.*drake)(?=.*breath).*$/i, name : "Drake's Breath", source : [["UA:SP5", 4]], ability : 5, type : "Natural", damage : [6, 6, "My choice"], range : "30-ft cone", description : "Hits all in area; Dex save for half damage; Damage type: acid, cold, fire, lightning, or poison", abilitytodamage : false, dc : true, useSpellMod : ["ranger", "rangerua"], DrakewardenDrakeBreath : true, selectNow : true }], calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.DrakewardenDrakeBreath && (classes.known.rangerua || classes.known.ranger)) { var rngrLvl = classes.known.ranger ? classes.known.ranger.level : classes.known.rangerua.level; fields.Damage_Die = (rngrLvl < 15 ? 6 : 8) + 'd6'; }; }, "", 1 ] } }, "subclassfeature15" : { name : "Perfected Bond", source : [["UA:SP5", 4]], minlevel : 15, description : desc([ "My drake is now Large and its bite deals +1d6 damage chosen by its Draconic Essence", "As a reaction when the drake or I take damage while within 30 ft of each other,", "I can give myself or the drake resistance to that instance of damage", ]), action : [["reaction", ""]] } } }); if (ClassList.rangerua) { ClassList.rangerua.subclasses[1].push(UASP5_Ranger_Subclass_Drakewarden); }; // ua_20210126_Gothic-Lineages.js // This file adds the content from the Unearthed Arcana 2021: Gothic Lineages article to MPMB's Character Record Sheet // This file contains contributions by Metacomet10, MarvinTheParanoidAndroid, and CountVladmir SourceList["UA:GL"] = { name : "Unearthed Arcana: Gothic Lineages", abbreviation : "UA:GL", group : "Unearthed Arcana", campaignSetting : "Ravenloft", url : "https://media.wizards.com/2021/dnd/downloads/UA2021_GothicLineages.pdf", date : "2021/01/26" }; RaceList["dhampir-ua"] = { regExpSearch : /dhampir/i, name : "Dhampir", source : [["UA:GL", 2]], plural : "Dhampirs", size : [3, 4], speed : { walk : { spd : 35, enc : 25 }, climb : { spd : "walk", enc : "walk" } }, languageProfs : ["Common", 1], vision : [["Darkvision", 60]], weaponOptions : [{ regExpSearch : /^(?=.*vampiric)(?=.*bite).*$/i, name : "Vampiric Bite", source : [["VRGtR", 17]], ability : 3, type : "Simple", damage : [1, 4, "piercing"], range : "Melee", description : "Adv. while at or below half HP; Can empower myself on hit", isAlwaysProf : true, abilitytodamage : true, monkweapon : true, selectNow : true }], extraLimitedFeatures : [{ name : "Vampiric Bite", additional : "empower myself", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus')", recovery : "long rest" }], scorestxt : "+2 to one ability score, and +1 to a different score of my choice", trait : "Dhampir" + (typePF ? "\n " : "\t") + "\u2022 Type: My creature type is both Humanoid and Undead." + "\n \u2022 Spider Climb: Climbing speed equal to walking speed. At 3rd level, I can move up, down, and across vertical surfaces and upside down along ceilings, while leaving my hands free." + "\n \u2022 Vampiric Bite: Uses Constitution and has adv. on the attack roll if I'm at or below half HP. My Proficiency Bonus per long rest, when I hit a creature other than a construct or undead, I can empower myself. I either regain HP or gain a bonus on my next ability check or attack roll. The bonus is equal to the piercing damage dealt." }; RaceList["hexblood-ua"] = { regExpSearch : /hexblood/i, name : "Hexblood", source : [["UA:GL", 4]], plural : "Hexbloods", size : [3, 4], speed : { walk : { spd : 30, enc : 20 } }, scorestxt : "+2 to one ability score, and +1 to a different score of my choice", trait : "Hexblood" + (typePF ? "\n " : "\t") + "\u2022 Fey Resilience: I'm both Humanoid and Fey. I have adv. on saves vs. charms." + "\n \u2022 Magic Token: As an action once per long rest, I can harmlessly remove a lock of my hair, one of my nails or teeth and imbue this token with magic until I finish a long rest. While the token is imbued in this way, I can telepathically speak to a creature holding it or see and hear around it. See the Notes page for more information." + "\n \u2022 Hex Magic: I known Disguise Self and Hex. I can cast each spell once per long rest without using a spell slot, or by using a spell slot.", toNotesPage : [{ name : "Hexblood's Magic Token", note : ["As an action, I can harmlessly pull out one of my nails, a tooth, or a lock of hair. This token is imbued with magic until I finish a long rest.", "While the token is imbued in this way, I can use an action to send a telepathic message to the creature holding or carrying the token, as long as I'm on the same plane of existence and are within 10 miles of it. The message can contain up to twenty-five words.", "In addition, while I'm within 10 miles of the token, I can use an action to enter a trance for 1 minute, during which I can see and hear from the token as if I was located where it is. While I'm using my senses at the token's location, I'm blinded and deafened in regard to my own surroundings. Afterward, the token is harmlessly destroyed.", "Once I create a token using this feature, I can't do so again until I finish a long rest, at which point my missing part regrows."] }], savetxt : { adv_vs : ["charmed"] }, languageProfs : ["Common", 1], vision : [["Darkvision", 60]], action : [["action", "Magic Token"]], extraLimitedFeatures : [{ name : "Magic Token", usages : 1, recovery : "long rest" }], spellcastingAbility : [4, 5, 6], features : { "hex magic" : { name : "Hex Magic", minlevel : 1, spellcastingBonus : [{ name : "Hex Magic", spells : ["disguise self", "hex"], selection : ["disguise self", "hex"], firstCol : 'oncelr+markedbox', times : 2, allowUpCasting : true }], } } }; RaceList["reborn-ua"] = { regExpSearch : /reborn/i, name : "Reborn", source : [["UA:GL", 5]], plural : "Reborns", size : 3, speed : { walk : { spd : 30, enc : 20 } }, scoresGeneric : true, trait : "Reborn" + (typePF ? "\n " : " ") + "\u2022 Type: My creature type is Humanoid, as well as Construct or Undead (my choice)." + "\n \u2022 Deathless Nature: I don't need to sleep, eat, drink, or breathe. I have adv. on saves vs. disease, poison, and death saves. I have resistance to poison damage. Magic can't put me to sleep and I can finish a long rest in 4 hours if I spend it inactive and motionless." + "\n \u2022 Knowledge from a Past Life: When I make an ability check that uses a skill, I can add +1d6 to the roll after seeing the d20 result. I can do this a number of times equal to my Proficiency Bonus and regain all expended uses when I finish a long rest.", vision : [["Darkvision", 60]], dmgres : ["Poison"], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["disease", "poison", "death saves"], }, extraLimitedFeatures : [{ name : "Knowledge from a Past Life", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus')", recovery : "long rest" }], useFromPreviousRace : { message : "If you replace a race with the Reborn lineage, you can keep the following elements of that race:"+ desc(["its size,", "any skill proficiencies you gained from it,", "any climbing, flying, or swimming speed you gained from it, and", "any languages it knows and gain no new languages."], "\n \u2022 ")+ "\n\nIf you don't keep any of those elements or you choose this lineage at character creation, you instead:"+ desc(["are size Medium or Small (your choice),", "gain proficiency in two skills of your choice, and", "can speak, read, and write Common and one other language that you and your DM agree is appropriate."], "\n \u2022 "), defaultTraits : { size : [3, 4], skillstxt : "Choose any two skills" }, gainTraits : ["size", "age", "height", "weight", "heightMetric", "weightMetric", "languageProfs", "skillstxt", "skills", "speed.climb", "speed.fly", "speed.swim"], updateName : "suffix" } }; AddRacialVariant("reborn-ua", "undead", { regExpSearch : /undead/i, source : [["UA:GL", 5]], trait : RaceList["reborn-ua"].trait.replace("Humanoid, as well as Construct or Undead (my choice)", "both Humanoid and Undead").replace(" ", "\t") }); AddRacialVariant("reborn-ua", "construct", { regExpSearch : /construct/i, source : [["UA:GL", 5]], trait : RaceList["reborn-ua"].trait.replace("Humanoid, as well as Construct or Undead (my choice)", "both Humanoid and Construct").replace(" ", "\t") }); // ua_20210311_Folk-of-the-Feywild.js // This file adds the content from the Unearthed Arcana 2021: Folk of the Feywild article to MPMB's Character Record Sheet // This file contains contributions by CountVladmir and othercrow SourceList["UA:FotF"] = { name : "Unearthed Arcana: Folk of the Feywild", abbreviation : "UA:FotF", group : "Unearthed Arcana", url : "https://media.wizards.com/2021/dnd/downloads/UA2021_FeyFolk.pdf", date : "2021/03/11" }; RaceList["fairy-ua"] = { regExpSearch : /fairy/i, name : "Fairy", source : [["UA:FotF", 2]], plural : "Fairies", size : 4, speed : { walk : { spd : 30, enc : 20 }, fly : { spd : "walk", enc : "walk" } }, languageProfs : ["Common", 1], scorestxt : "+2 to one ability score and +1 to a different score of my choice, -or- +1 to three different scores of my choice", spellcastingAbility : [4, 5, 6], spellcastingBonus : [{ name : "Fairy Magic", spells : ["druidcraft"], selection : ["druidcraft"], firstCol : "atwill" }], features : { "fairy magic" : { name : "Fairy Magic", minlevel : 1, spellcastingBonus : [{ name : "Fairy Magic", spells : ["faerie fire"], selection : ["faerie fire"], firstCol : 'oncelr', allowUpCasting : true }], extraLimitedFeatures : [{ name : "Faerie Fire", usages : 1, recovery : "long rest", altResource : "SS 1+" }] } }, trait : "Fairy"+ "\n \u2022 Fey: My creature type is fey, rather than humanoid."+ "\n \u2022 Fairy Flight: I have a magical flying speed equal to my walking speed and can hover."+ "\n \u2022 Fairy Magic: I know the Druidcraft and Faerie Fire spells, and can cast the latter without using a spell slot once per long rest, as well as using slots as normal."+ "\n \u2022 Fey Passage: I can squeeze through a space as narrow as 1 inch wide." }; RaceList["feywild hobgoblin-ua"] = { regExpSearch : /^(?=.*feywild)(?=.*hobgoblin).*$/i, name : "Feywild hobgoblin", sortname : "Hobgoblin, Feywild", source : [["UA:FotF", 2]], plural : "Feywild hobgoblins", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", 1], scorestxt : "+2 to one ability score and +1 to a different score of my choice, -or- +1 to three different scores of my choice", vision : [["Darkvision", 60]], savetxt : { adv_vs : ["charmed"] }, features : { "fey gift" : { name : "Fey Gift", minlevel : 1, usages : "Proficiency bonus per ", action : [["bonus action", " (Help action)"]], usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "fortune from the many" : { name : "Fortune from the Many", minlevel : 1, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "fey gift - additional effect" : { name : "Fey Gifts - Additional Effects", minlevel : 3, toNotesPage : [{ name : "Fey Gifts - Additional Effects", page3notes : true, note : [ "Whenever I take the Help action, I can choose one of the following effects:", " \u2022 Hospitality: The target and I each gain 1d6 + my Proficiency Bonus in temporary HP", " \u2022 Passage: The target and I gain +10 ft walking speed until my next turn starts", " \u2022 Spite: Enhances the first attack by the target or me that hits before my next turn starts", " The creature hit has disadvantage on its next attack roll it makes within the next minute" ] }] } }, trait : "Feywild hobgoblin"+ "\n \u2022 Fey Gift: I can take the Help action as a bonus action my Proficiency Bonus per long rest."+ "\n \u2022 Fortune from the Many: When I miss an attack or fail an ability check or a save, I can gain a bonus to the roll equal to the number of allies I can see within 30 ft of me (max +5). I can do this a number of times per long rest equal to my Proficiency Bonus."+ '\n \u2022 From 3rd-level onwards, whenever I take the Help action, I can choose to produce an additional effect: Hospitality, Passage, or Spite. See the 3rd page "Notes" section.' }; RaceList["owlfolk-ua"] = { regExpSearch : /owlfolk/i, name : "Owlfolk", source : [["UA:FotF", 3]], plural : "Owlfolk", size : [3, 4], speed : { walk : { spd : 30, enc : 20 }, fly : { spd : "walk", enc : "walk" } }, skills : ["Stealth"], vision : [["Darkvision", 90]], languageProfs : ["Common", 1], scorestxt : "+2 to one ability score and +1 to a different score of my choice, -or- +1 to three different scores of my choice", spellcastingAbility : [4, 5, 6], spellcastingBonus : [{ name : "Magic Sight", spells : ["detect magic"], selection : ["detect magic"] }], action : [["reaction", "Nimble Flight"]], trait : "Owlfolk"+ "\n \u2022 Magic Sight: I know the spell Detect Magic and can cast as a ritual or by using spell slots as normal."+ "\n \u2022 Nimble Flight: My wings give me a flying speed equal to my walking speed. As a reaction when I fall, I can make a Dexterity saving throw (DC 10) to stop falling and fly in place until the start of my next turn."+ "\n \u2022 Silent Feathers: I have proficiency in the Stealth skill." }; RaceList["rabbitfolk-ua"] = { regExpSearch : /rabbitfolk/i, name : "Rabbitfolk", source : [["UA:FotF", 3]], plural : "Rabbitfolk", size : [3, 4], speed : { walk : { spd : 30, enc : 20 }, }, skills : ["Perception"], addMod : [{ type : "skill", field : "Init", mod : "Prof", text : "I can add my proficiency bonus to initiative rolls." }], languageProfs : ["Common", 1], scorestxt : "+2 to one ability score and +1 to a different score of my choice, -or- +1 to three different scores of my choice", action : [["reaction", "Lucky Footwork"]], trait : "Rabbitfolk"+ "\n \u2022 Hare-Trigger: I add my proficiency bonus to initiative rolls."+ "\n \u2022 Leporine Senses: I have proficiency in the Perception skill."+ "\n \u2022 Lucky Footwork: As a reaction when I fail a Dexterity saving throw, I can add +1d4 to the result, potentially making it a success."+ "\n \u2022 Rabbit Hop: Once during each of my turns when I walk at least 5 ft, I can hop an extra 1d12 ft without it costing any extra movement. I can only do this if my speed isn't 0." }; // ua_20210414_Draconic-Options.js // This file adds the content from the Unearthed Arcana 2021: Draconic Options article to MPMB's Character Record Sheet // Define the source SourceList["UA:DO"] = { name : "Unearthed Arcana: Draconic Options", abbreviation : "UA:DO", group : "Unearthed Arcana", url : "https://media.wizards.com/2021/downloads/Unearthed-Arcana-2021-Draconic-Options.pdf", date : "2021/04/14" }; // Draconic Races var UADO_dragonborns_add = function () { // New dragonborn variants var objDragonborns = { Chromatic : { regExpSearch : /^(?=.*chromatic)(?=.*dragonborn).*$/i, source : [["UA:DO", 2]], variants : [["Black", "Acid"], ["Blue", "Lightning"], ["Green", "Poison"], ["Red", "Fire"], ["White", "Cold"]], breathWeaponShape : "5-ft by 30-ft line", trait : desc([ ">>TYPE<< Breath Weapon: When I take the Attack action, I can replace one attack with a breath weapon that deals 2d8 >>type<< damage to all in a 5-ft by 30-ft line, Dex save halves (DC 8 + Con mod + Proficiency Bonus). I can do this my Proficiency Bonus per long rest. The damage increases to 3d8 at 5th level, 4d8 at 11th level, and 5d8 at 17th level.", "Chromatic Warding: From 3rd level, I can protect myself using my draconic energies. As an action once per long rest, I can become immune to >>type<< damage for 10 minutes." ], "\n \u2022 "), features : { "chromatic warding" : { name : "Chromatic Warding", source : [["UA:DO", 2]], minlevel : 3, usages : 1, recovery : "long rest", action : [["action", ""]] } } }, Metallic : { regExpSearch : /^(?=.*metallic)(?=.*dragonborn).*$/i, source : [["UA:DO", 2]], variants : [["Brass", "Fire"], ["Bronze", "Lightning"], ["Copper", "Acid"], ["Gold", "Fire"], ["Silver", "Cold"]], breathWeaponShape : "15-ft cone", trait : desc([ ">>TYPE<< Breath Weapon: When I take the Attack action, I can replace one attack with a breath weapon that deals 2d8 >>type<< damage to all in a 15-ft cone, Dex save halves (DC 8 + Con mod + Proficiency Bonus). I can do this my Proficiency Bonus per long rest.", "Metallic Breath Weapon: At 3rd level I gain a second breath weapon once per long rest, that works just like the first. It doesn't deal damage, but I can choose one effect: Str save or pushed 20 ft and prone, or Con save or incapacitated until my next turn starts." ], "\n \u2022 "), features : { "metallic breath weapon" : { name : "Metallic Breath Weapon", source : [["UA:DO", 3]], minlevel : 3, usages : 1, recovery : "long rest", weaponOptions : [{ regExpSearch : /^(?=.*metallic)(?=.*breath)(?=.*weapon).*$/i, name : "Metallic breath weapon", source : [["UA:DO", 3]], ability : 3, type : 'Natural', damage : ['Str save or', '', 'Con save'], range : "15-ft cone", description : "Str save or pushed 20 ft and knocked prone -or- Con save or incapacitated until my next turn starts", abilitytodamage : false, dc : true, selectNow : true }] } } }, Gem : { regExpSearch : /^(?=.*gem)(?=.*dragonborn).*$/i, source : [["UA:DO", 3]], variants : [["Amethyst", "Force"], ["Crystal", "Radiant"], ["Emerald", "Psychic"], ["Sapphire", "Thunder"], ["Topaz", "Necrotic"]], breathWeaponShape : "15-ft cone", trait : desc([ ">>TYPE<< Breath Weapon: When I take the Attack action, I can replace one attack with a breath weapon that deals 2d8 >>type<< damage to all in a 15-ft cone, Dex save halves (DC 8 + Con mod + Proficiency Bonus). I can do this my Proficiency Bonus per long rest.", "Psionic Mind: I can speak telepathically to " + (typePF ? "any creature I can see within 30 ft that understands a language but it can't respond." : "a creature with a language I can see in 30 ft."), "Gem Flight: From 3rd level, I can temporarily fly. As a bonus action once per long rest, I can gain a flying speed equal to my walking speed and can hover. This lasts for 1 minute." ], "\n \u2022 "), features : { "gem flight" : { name : "Gem Flight", source : [["UA:DO", 3]], minlevel : 3, usages : 1, recovery : "long rest" } } } } for (var sDrBrn in objDragonborns) { var sDrBrnLC = sDrBrn.toLowerCase(); var oDrBrn = objDragonborns[sDrBrn]; RaceList[sDrBrnLC + " dragonborn-ua"] = { regExpSearch : oDrBrn.regExpSearch, name : sDrBrn + " Dragonborn", sortname : "Dragonborn, " + sDrBrn, source : oDrBrn.source, plural : sDrBrn + " Dragonborn", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", 1], weaponOptions : [{ regExpSearch : /^(?=.*breath)(?=.*weapon).*$/i, name : "Breath weapon", source : oDrBrn.source, ability : 3, type : 'Natural', damage : ['Q', 8, 'fire'], range : oDrBrn.breathWeaponShape.replace('by', '\xD7'), description : "Hits all in area; Dex save, success - half damage", abilitytodamage : false, dc : true, dbBreathWeapon : true, selectNow : true }], age : " reach adulthood by 15 and live around 80 years", height : " stand well over 6 feet tall (5'6\" + 2d8\")", weight : " weigh around 240 lb (175 + 2d8 \xD7 2d6 lb)", heightMetric : " stand well over 1,8 metres tall (170 + 5d8 cm)", weightMetric : " weigh around 110 kg (80 + 5d8 \xD7 4d6 / 10 kg)", scorestxt : "+2 to one ability score and +1 to a different score of my choice, -or- +1 to three different scores of my choice", trait : sDrBrn + " Dragonborn"+ "\n \u2022 " + sDrBrn + ' Ancestry: Choose a type of dragon using the "Racial Options" button. The damage type of my resistance and my breath weapon are determined by the dragon type chosen.'+ + oDrBrn.trait.replace(/>>type<< /ig, ""), features : { "breath weapon" : { name : "Breath Weapon", minlevel : 1, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", additional : levels.map(function (n) { return (n < 5 ? 2 : n < 11 ? 3 : n < 17 ? 4 : 5) + 'd8'; }), calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.dbBreathWeapon && (/dragonborn/i).test(CurrentRace.known) && CurrentRace.variant) { fields.Damage_Type = CurrentRace.dmgres[0]; } }, '', 1 ] } } }, variants : [] }; if (oDrBrn.features) { for (var sFea in oDrBrn.features) { RaceList[sDrBrnLC + " dragonborn-ua"].features[sFea] = oDrBrn.features[sFea]; } } for (var i = 0; i < oDrBrn.variants.length; i++) { var sDrBrnVar = oDrBrn.variants[i][0]; var sDrBrnDmg = oDrBrn.variants[i][1]; AddRacialVariant(sDrBrnLC + " dragonborn-ua", sDrBrnVar.toLowerCase(), { regExpSearch : RegExp(sDrBrnVar, "i"), name : sDrBrnVar + " " + sDrBrnLC + " dragonborn", trait : sDrBrnVar + " " + sDrBrnLC + " dragonborn"+ oDrBrn.trait.replace(/>>TYPE<>type<= 4 && CurrentFeats.known.indexOf("initiate of high sorcery-ua") !== -1 && !(/good/i).test(What("Alignment")); }, spellcastingBonus : [{ name : "2nd-level Evoc/Necro spell", "class" : "any", school : ["Evoc", "Necro"], level : [2, 2], firstCol : "oncelr+markedbox" }], spellcastingAbility : 4, allowUpCasting : true, choices : ["Intelligence", "Wisdom", "Charisma"], selfChoosing : function () { var iHghSrcyInit = CurrentFeats.known.indexOf("initiate of high sorcery-ua"); if (iHghSrcyInit !== -1 && CurrentFeats.choices[iHghSrcyInit]) { return CurrentFeats.choices[iHghSrcyInit].toString().split(" ")[0].charAt(0).toUpperCase() + CurrentFeats.choices[iHghSrcyInit].toString().split(" ")[0].slice(1); } }, "intelligence" : { description : "I learn one 2nd-level Evoc or Necro spell. I can cast this spell 1/LR w/out using a spell slot, and can cast it normally. Int is my ability for this spell. If creature I can see within 60 ft fails a save vs my spell I can spend HD equal to spell's level. I roll half that many HD and the creature takes that much additional damage.", spellcastingAbility : 4 }, "wisdom" : { description : "I learn one 2nd-level Evoc or Necro spell. I can cast this spell 1/LR w/out using a spell slot, and can cast it normally. Wis is my ability for this spell. If creature I can see within 60 ft fails a save vs my spell I can spend HD equal to spell's level. I roll half that many HD and the creature takes that much additional damage.", spellcastingAbility : 5 }, "charisma" : { description : "I learn one 2nd-level Evoc or Necro spell. I can cast this spell 1/LR w/out using a spell slot, and can cast it normally. Cha is my ability for this spell. If creature I can see within 60 ft fails a save vs my spell I can spend HD equal to spell's level. I roll half that many HD and the creature takes that much additional damage.", spellcastingAbility : 6 } }; FeatsList["adept of the red robes-ua"] = { name : "Adept of the Red Robes", source : [["UA:HoK", 5]], description : "I learn one 2nd-level Div or Trans spell. I can cast this spell 1/LR w/out using a spell slot, and can cast it normally. Int is my ability for this spell. If I roll less than a 10 on an atk, check, or save, I can use my reaction to treat it as a 10. I can do this a number of times equal to my proficiency bonus per long rest.", descriptionFull : "Your pursuit of truth and dedication to maintaining the balance between all things has been recognized by the Order of the Red Robes, granting you these benefits:\n" + toUni("Insightful Magic.") + " You learn one 2nd-level spell of your choice. The 2nd-level spell must be from the divination or transmutation school of magic. You can cast this feat's 2nd-level spell without a spell slot, and you must finish a long rest before you can cast it in this way again. You can also cast this spell using spell slots you have of the appropriate level. The spell's spellcasting ability is the one chosen when you gain the Initiate of High Sorcery feat.\n" + toUni("Magical Balance.") + " When you make an attack roll, an ability check, or a saving throw, and roll a 9 or lower on the d20, you can use your reaction to balance fate and treat the roll as a 10. you can use this reaction a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th level, Initiate of High Sorcery feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("initiate of high sorcery-ua") !== -1; }, spellcastingBonus : [{ name : "2nd-level Div/Trans spell", "class" : "any", school : ["Div", "Trans"], level : [2, 2], firstCol : "oncelr+markedbox" }], action : [["reaction", "Magical Balance"]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", spellcastingAbility : 4, allowUpCasting : true, choices : ["Intelligence", "Wisdom", "Charisma"], selfChoosing : function () { var iHghSrcyInit = CurrentFeats.known.indexOf("initiate of high sorcery-ua"); if (iHghSrcyInit !== -1 && CurrentFeats.choices[iHghSrcyInit]) { return CurrentFeats.choices[iHghSrcyInit].toString().split(" ")[0].charAt(0).toUpperCase() + CurrentFeats.choices[iHghSrcyInit].toString().split(" ")[0].slice(1); } }, "intelligence" : { description : "I learn one 2nd-level Div or Trans spell. I can cast this spell 1/LR w/out using a spell slot, and can cast it normally. Int is my ability for this spell. If I roll less than a 10 on an atk, check, or save, I can use my reaction to treat it as a 10. I can do this a number of times equal to my proficiency bonus per long rest.", spellcastingAbility : 4 }, "wisdom" : { description : "I learn one 2nd-level Div or Trans spell. I can cast this spell 1/LR w/out using a spell slot, and can cast it normally. Wis is my ability for this spell. If I roll less than a 10 on an atk, check, or save, I can use my reaction to treat it as a 10. I can do this a number of times equal to my proficiency bonus per long rest.", spellcastingAbility : 5 }, "charisma" : { description : "I learn one 2nd-level Div or Trans spell. I can cast this spell 1/LR w/out using a spell slot, and can cast it normally. Cha is my ability for this spell. If I roll less than a 10 on an atk, check, or save, I can use my reaction to treat it as a 10. I can do this a number of times equal to my proficiency bonus per long rest.", spellcastingAbility : 6 } }; FeatsList["adept of the white robes-ua"] = { name : "Adept of the White Robes", source : [["UA:HoK", 5]], description : "I learn one 2nd-level Abjur or Conj spell. I can cast this spell 1/LR w/out using a spell slot, and can cast it normally. Choose an ability for this spell. When a creature w/in 30 ft takes damage I can use a reaction to expend a spell slot and roll d4s equal to the spell's level and reduce the damage by that much + my SC ability mod.", descriptionFull : "Your oath to use magic to make the world a better place has been recognized by the Order of the White Robes, granting you these benefits:\n" + toUni("Protective Magic.") + " You learn one 2nd-level spell of you choice. The 2nd-level spell must be from the abjuration or conjuration school of magic. You can cast this feat's 2nd-level spell without a spell slot, and you must finish a long rest before you can cast it in this way again. You can also cast this spell using spell slots you have of the appropriate level. The spell's spellcasting ability is the one chosen when you gain the Initiate of High Sorcery feat.\n" + toUni("Protective Ward.") + " When you or a creature you can see within 30 feet of you takes damage, you can use your reaction to expend a spell slot and weave protective magic around the target. Roll a number of d4s equal to the level of the spell slot expended and reduce the damage the target takes by the total rolled on those dice + your spellcasting ability modifier.", prerequisite : "4th level, Initiate of High Sorcery feat, Any Non-Evil Alignment", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("initiate of high sorcery-ua") !== -1 && !(/evil/i).test(What("Alignment")); }, spellcastingBonus : [{ name : "2nd-level Abjur/Conj spell", "class" : "any", school : ["Abjur", "Conj"], level : [2, 2], firstCol : "oncelr+markedbox" }], spellcastingAbility : 4, allowUpCasting : true, choices : ["Intelligence", "Wisdom", "Charisma"], selfChoosing : function () { var iHghSrcyInit = CurrentFeats.known.indexOf("initiate of high sorcery-ua"); if (iHghSrcyInit !== -1 && CurrentFeats.choices[iHghSrcyInit]) { return CurrentFeats.choices[iHghSrcyInit].toString().split(" ")[0].charAt(0).toUpperCase() + CurrentFeats.choices[iHghSrcyInit].toString().split(" ")[0].slice(1); } }, "intelligence" : { description : "I learn one 2nd-level Abjur or Conj spell. I can cast this spell 1/LR w/out using a spell slot, and can cast it normally. Int is my ability for this spell. When a creature w/in 30 ft takes damage I can use a reaction to expend a spell slot and roll d4s equal to the spell's level and reduce the damage by that much + my SC ability mod.", spellcastingAbility : 4 }, "wisdom" : { description : "I learn one 2nd-level Abjur or Conj spell. I can cast this spell 1/LR w/out using a spell slot, and can cast it normally. Wis is my ability for this spell. When a crea w/in 30 ft takes dmg I can use a reaction to expend a spell slot and roll d4s equal to the spell's level and reduce the dmg by that much + my SC ability mod.", spellcastingAbility : 5 }, "charisma" : { description : "I learn one 2nd-level Abjur or Conj spell. I can cast this spell 1/LR w/out using a spell slot, and can cast it normally. Cha is my ability for this spell. When a crea w/in 30 ft takes dmg I can use a reaction to expend a spell slot and roll d4s equal to the spell's level and reduce the dmg by that much + my SC ability mod.", spellcastingAbility : 6 } }; // Feat tree for Divinely Favored FeatsList["divinely favored-ua"] = { name : "Divinely Favored", source : [["UA:HoK", 5]], description : "I learn Thaumaturgy and one 1st-level spell based on my alignment. I can cast the 1st level spell once per long rest without a spell slot, and I can cast it normally. I choose Int, Wis, or Cha as my spellcasting ability for this. I can use a holy symbol as a spellcasting focus for any spells that use the chosen ability.", descriptionFull : "A god has chosen you to carry a spark of their divine power.\n You learn the thaumaturgy cantrip and one 1st-level spell based on the alignment of your character, as specified in the Alignment Spells table.\n You can cast the chosen 1st-level spell without a spell slot, and you must finish a long rest before you can cast it in this way again. You can also cast the spell using any spell slots you have.\n Your spellcasting ability for this feat's spells is Intelligence, Wisdom, or Charisma (choose when you select this feat).\n\n" + toUni("Alignment Spells") + "\n" + toUni("Alignment") + " " + toUni("1st-level Spell") + "\nEvil\t Choose one 1st level warlock or wizard spell.\nGood\t Choose one 1st-level cleric or wizard spell.\nNeutral\t Choose one 1st-level druid or wizard spell.\n\n In addition, you can use a holy symbol as a spellcasting focus for any spell you cast that uses the spellcasting ability you choose when you select this feat.", choices : ["Intelligence - Good", "Intelligence - Neutral", "Intelligence - Evil", "Wisdom - Good", "Wisdom - Neutral", "Wisdom - Evil", "Charisma - Good", "Charisma - Neutral", "Charisma - Evil"], // nine choices, one for each alignment and ability pair "intelligence - good" : { description : "I learn Thaumaturgy and one 1st-level cleric or wizard spell. I can cast the 1st level spell once per long rest without a spell slot, and I can cast it normally. Intelligence is my spellcasting ability for these spells. I can use a holy symbol as a spellcasting focus for all my spells that use Intelligence.", allowUpCasting : true, spellcastingAbility : 4, spellcastingBonus : [{ name : "Thaumaturgy", spells : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : "atwill" }, { name : "1st-level Cleric/Wizard Spell", "class" : ["cleric", "wizard"], level : [1, 1], firstCol : "oncelr+markedbox" }] }, "intelligence - neutral" : { description : "I learn Thaumaturgy and one 1st-level druid or wizard spell. I can cast the 1st level spell once per long rest without a spell slot, and I can cast it normally. Intelligence is my spellcasting ability for these spells. I can use a holy symbol as a spellcasting focus for all my spells that use Intelligence.", allowUpCasting : true, spellcastingAbility : 4, spellcastingBonus : [{ name : "Thaumaturgy", spells : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : "atwill" }, { name : "1st-level Druid/Wizard Spell", "class" : ["druid", "wizard"], level : [1, 1], firstCol : "oncelr+markedbox" }] }, "intelligence - evil" : { description : "I learn Thaumaturgy and one 1st-level warlock or wizard spell. I can cast the 1st level spell once per long rest without a spell slot, and I can cast it normally. Intelligence is my spellcasting ability for these spells. I can use a holy symbol as a spellcasting focus for all my spells that use Intelligence.", allowUpCasting : true, spellcastingAbility : 4, spellcastingBonus : [{ name : "Thaumaturgy", spells : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : "atwill" }, { name : "1st-level Warlock/Wizard Spell", "class" : ["warlock", "wizard"], level : [1, 1], firstCol : "oncelr+markedbox" }] }, "wisdom - good" : { description : "I learn Thaumaturgy and one 1st-level cleric or wizard spell. I can cast the 1st level spell once per long rest without a spell slot, and I can cast it normally. Wisdom is my spellcasting ability for these spells. I can use a holy symbol as a spellcasting focus for all my spells that use Wisdom.", allowUpCasting : true, spellcastingAbility : 5, spellcastingBonus : [{ name : "Thaumaturgy", spells : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : "atwill" }, { name : "1st-level Cleric/Wizard Spell", "class" : ["cleric", "wizard"], level : [1, 1], firstCol : "oncelr+markedbox" }] }, "wisdom - neutral" : { description : "I learn Thaumaturgy and one 1st-level druid or wizard spell. I can cast the 1st level spell once per long rest without a spell slot, and I can cast it normally. Wisdom is my spellcasting ability for these spells. I can use a holy symbol as a spellcasting focus for all my spells that use Wisdom.", allowUpCasting : true, spellcastingAbility : 5, spellcastingBonus : [{ name : "Thaumaturgy", spells : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : "atwill" }, { name : "1st-level Druid/Wizard Spell", "class" : ["druid", "wizard"], level : [1, 1], firstCol : "oncelr+markedbox" }] }, "wisdom - evil" : { description : "I learn Thaumaturgy and one 1st-level warlock or wizard spell. I can cast the 1st level spell once per long rest without a spell slot, and I can cast it normally. Wisdom is my spellcasting ability for these spells. I can use a holy symbol as a spellcasting focus for all my spells that use Wisdom.", allowUpCasting : true, spellcastingAbility : 5, spellcastingBonus : [{ name : "Thaumaturgy", spells : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : "atwill" }, { name : "1st-level Warlock/Wizard Spell", "class" : ["warlock", "wizard"], level : [1, 1], firstCol : "oncelr+markedbox" }] }, "charisma - good" : { description : "I learn Thaumaturgy and one 1st-level cleric or wizard spell. I can cast the 1st level spell once per long rest without a spell slot, and I can cast it normally. Charisma is my spellcasting ability for these spells. I can use a holy symbol as a spellcasting focus for all my spells that use Charisma.", allowUpCasting : true, spellcastingAbility : 6, spellcastingBonus : [{ name : "Thaumaturgy", spells : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : "atwill" }, { name : "1st-level Cleric/Wizard Spell", "class" : ["cleric", "wizard"], level : [1, 1], firstCol : "oncelr+markedbox" }] }, "charisma - neutral" : { description : "I learn Thaumaturgy and one 1st-level druid or wizard spell. I can cast the 1st level spell once per long rest without a spell slot, and I can cast it normally. Charisma is my spellcasting ability for these spells. I can use a holy symbol as a spellcasting focus for all my spells that use Charisma.", allowUpCasting : true, spellcastingAbility : 6, spellcastingBonus : [{ name : "Thaumaturgy", spells : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : "atwill" }, { name : "1st-level Druid/Wizard Spell", "class" : ["druid", "wizard"], level : [1, 1], firstCol : "oncelr+markedbox" }] }, "charisma - evil" : { description : "I learn Thaumaturgy and one 1st-level warlock or wizard spell. I can cast the 1st level spell once per long rest without a spell slot, and I can cast it normally. Charisma is my spellcasting ability for these spells. I can use a holy symbol as a spellcasting focus for all my spells that use Charisma.", allowUpCasting : true, spellcastingAbility : 6, spellcastingBonus : [{ name : "Thaumaturgy", spells : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : "atwill" }, { name : "1st-level Warlock/Wizard Spell", "class" : ["warlock", "wizard"], level : [1, 1], firstCol : "oncelr+markedbox" }] } }; FeatsList["divine communications-ua"] = { name : "Divine Communications", source : [["UA:HoK", 5]], description : "I learn Augury and Commune. I can cast these spells without a spell slot, then must wait 1d4 long rests before doing so again, and I can cast it normally. My chosen ability from Divinely Favored is my spellcasting ability for these spells", descriptionFull : "Your connection to your god deepens, granting you these benefits:\n" + toUni("Ability Score Increase.") + " Increase the ability score of the spellcasting ability chosen when you gained the Divinely Favored feat by 1, to a maximum of 20.\n" + toUni("Celestial Tongues.") + " You learn to speak, read, and write Celestial, and two other languages of your choice.\n" + toUni("Divine Omens.") + " You can cast the augury and commune spell without a spell slot, and you must finish 1d4 long rests before you can cast it in this way again. You can also cast the spell using the spell slots you have of the appropriate level. The spell's spellcasting ability is the one chosen when you gained the Divinely Favored feat.", prerequisite : "4th level, Divinely Favored feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("divinely favored-ua") !== -1; }, languageProfs : ["Celestial", 2], spellcastingBonus : [{ name : "Augury and Commune", spells : ["augury", "commune"], selection : ["augury", "commune"], times : 2 }], choices : ["Intelligence", "Wisdom", "Charisma"], selfChoosing : function () { // extract just the ability from the divinely favored choices var iDvnFav = CurrentFeats.known.indexOf("divinely favored-ua"); if (iDvnFav !== -1 && CurrentFeats.choices[iDvnFav]) { return CurrentFeats.choices[iDvnFav].toString().split(" ")[0].charAt(0).toUpperCase() + CurrentFeats.choices[iDvnFav].toString().split(" ")[0].slice(1); } }, "intelligence" : { description : "I learn Augury and Commune. I can cast these spells without a spell slot, then must wait 1d4 long rests before doing so again, and I can cast it normally. Intelligence is my spellcasting ability for these spells", spellcastingAbility : 4, scores : [0, 0, 0, 1, 0, 0] }, "wisdom" : { description : "I learn Augury and Commune. I can cast these spells without a spell slot, then must wait 1d4 long rests before doing so again, and I can cast it normally. Wisdom is my spellcasting ability for these spells", spellcastingAbility : 5, scores : [0, 0, 0, 0, 1, 0] }, "charisma" : { description : "I learn Augury and Commune. I can cast these spells without a spell slot, then must wait 1d4 long rests before doing so again, and I can cast it normally. Charisma is my spellcasting ability for these spells", spellcastingAbility : 6, scores : [0, 0, 0, 0, 0, 1] } }; // Feats tree for Squire of Solamnia FeatsList["squire of solamnia-ua"] = { name : "Squire of Solamnia", source : [["UA:HoK", 6]], description : "As a reaction once per long rest when I see another creature 30 ft make a save, I can give them advantage if they can hear and understand me. I gain proficiency with with medium armor and martial weapons. I have advantage on saves to avoid falling off a mount.", descriptionFull : "Your training in the ways of the Knights of Solamnia grants you these benefits:\n" + toUni("Martial Training.") + " You gain proficiency with medium armor and martial weapons.\n" + toUni("Defensive Rider.") + " You have advantage on saving throws made to avoid falling off a mount.\n" + toUni("Encouraging Rally.") + " When another creature you can see within 30 feet of you makes a saving throw, you can use your reaction to inspire them. If the target can hear you and understands you, it gains advantage on the saving throw. Once you use this reaction, you can't do so again until you finish a long rest.", prerequisite : "Squireship in the Knights of Solamnia", armorProfs : [false, true, false, false], weaponProfs : [false, true], savetxt : { adv_vs : ["falling off a mount"]}, action : [["reaction", "Encouraging Rally (Squire of Solamnia)"]], extraLimitedFeatures : [{ name : "Encouraging Rally (Squire of Solamnia)", usages : 1, recovery : "long rest" }] }; FeatsList["knight of the crown-ua"] = { name : "Knight of the Crown", source : [["UA:HoK", 6]], description : "When a creature within 30 ft makes an attack roll against another creature within 5 ft, I can use my reaction to grant advantage on the attack roll. I can do this a number of times equal to my Proficiency Bonus and regain all expended uses when I finish a long rest.", descriptionFull : "You are a Knight of Solamnia aligned with the Order of the Crown, a group that extols the virtues of cooperation, loyalty, and obedience. You excel in group combat and gain these benefits:\n" + toUni("Ability Score Increase.") + " Increase your Strength or Dexterity score by 1, to a maximum of 20.\n" + toUni("Tactical Teamwork.") + " When a creature you can see within 30 feet of you makes an attack roll against another creature that is within 5 feet of you, you can use your reaction to grant advantage on the attack roll. You can use this reaction a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th level, Squire of Solamnia feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("squire of solamnia-ua") !== -1; }, scorestxt : "+1 Strength or Dexterity", action : [["reaction", "Tactical Teamwork (Knight of the Crown)"]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }; FeatsList["knight of the sword-ua"] = { name : "Knight of the Sword", source : [["UA:HoK", 6]], description : "I gain proficiency in the chosen ability saving throw. After I or a creature I can see within 30 feet fails an Int, Wis, or Cha save, I can expend a HD. I roll that die and increase the save by that much. Once I change a fail into a success, I can't do so again until a long rest.", descriptionFull : "You are a Knight of Solamnia aligned with the Order of the Sword, a group devoted to heroism and courage. Bravery steels your spirit, granting you these benefits:\n" + toUni("Disciplined Spirit.") + " You gain proficiency in Intelligence, Wisdom, or Charisma saving throws (your choice when you take this feat).\n" + toUni("Willpower.") + " Immediately after you or a creature you can see within 30 feet of you fail an Intelligence, Wisdom, or Charisma saving throw, you can expend a Hit Die. The saving throw increases by an amount equal to a roll of that Hit Die, potentially turning a failure into a success. Once you turn a failed saving throw into a successful one using this feat, you can't do so again until you finish a long rest.", prerequisite : "4th level, Squire of Solamnia feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("squire of solamnia-ua") !== -1; }, choices : ["Intelligence", "Wisdom", "Charisma"], "intelligence" : { saves : ["Int"] }, "wisdom" : { saves : ["Wis"] }, "charisma" : { saves : ["Cha"] }, usages : 1, recovery : "long rest" }; FeatsList["knight of the rose-ua"] = { name : "Knight of the Rose", source : [["UA:HoK", 6]], description : "When I roll initiative I can choose up to 3 other creatures I can see within 30 ft. They gain temp HP equal to a roll of my HD + my proficiency bonus + the modifier of the score increased by this feat. I can do this a number of times equal to my Proficiency Bonus and regain all expended uses when I finish a long rest.", descriptionFull : "You are a Knight of Solamnia aligned with the Order of the Rose, a group known for leadership, justice, and wisdom. Your resolve grants you these benefits:\n" + toUni("Ability Score Increase.") + " Increase your Constitution or Charisma score by 1, to a maximum of 20.\n" + toUni("Bolstering Rally.") + " When you roll initiative, you can choose up to three other creatures you can see within 30 feet of you. Each creature can gain temporary hit points equal to a roll of your Hit Die + your proficiency bonus + the ability modifier of the ability score increased by this feat. You can use this feature a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th level, Squire of Solamnia feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("squire of solamnia-ua") !== -1; }, scorestxt : "+1 Constitution or Charisma", choices : ["Constitution", "Charisma"], "constitution" : { description : "When I roll initiative I can choose up to 3 other creatures I can see within 30 ft. They gain temp HP equal to a roll of my HD + my proficiency bonus + my Constitution modifier. I can do this a number of times equal to my Proficiency Bonus and regain all expended uses when I finish a long rest.", scores : [0, 0, 1, 0, 0, 0] }, "charisma" : { description : "When I roll initiative I can choose up to 3 other creatures I can see within 30 ft. They gain temp HP equal to a roll of my HD + my proficiency bonus + my Charisma modifier. I can do this a number of times equal to my Proficiency Bonus and regain all expended uses when I finish a long rest.", scores : [0, 0, 0, 0, 0, 1] }, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }; // This file adds the content from the Unearthed Arcana 2022: Heroes of Krynn Revisited article to MPMB's Character Record Sheet // Contains contributions by Thravieus Windhelm / PoetOfGod (GitHub) / @PoetOfGod#6077 (Discord) // ua_20220425_Heroes-of-Krynn-Revisited.js SourceList["UA:HoKR"] = { name : "Unearthed Arcana: Heroes of Krynn Revisited", abbreviation : "UA:HoKR", group : "Unearthed Arcana", url : "https://media.wizards.com/2022/dnd/downloads/UA2022-HeroesofKrynnRevisited.pdf", date : "2022/04/25" }; RaceList["kender-ua2"] = { regExpSearch : /kender/i, name : "Kender", source : [["UA:HoKR", 1]], plural : "Kender", size : 4, speed : { walk : { spd : 30, enc : 20 } }, scoresGeneric : true, savetxt : { immune : ["frightened"]}, skillstxt : "Choose one from Insight, Investigation, Sleight of Hand, Stealth, or Survival", abilitySave : [4, 5, 6], features : { "taunt" : { name : "Taunt", minlevel : 1, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", action : [["bonus action", ""]] } }, trait : "Kender"+ "\n \u2022 Fearless: I am immune to the frightened condition."+ "\n \u2022 Taunt: As a bonus action, I can taunt a creature within 60 ft of me that can hear and understand me. They must make a Wisdom saving throw or have disadvantage on attack rolls not made against me until the start of my next turn. I can do this a number of times per long rest equal to my proficiency bonus. The DC equals 8 + proficiency bonus + Intelligence, Wisdom, or Charisma modifier (one-time choice)." }; // Feats tree for Squire of Solamnia var UA_HoKR_KnightlyManeuvers_Notes = function (n) { // Get the name, source, and description from the maneuver of the Battle Master subclass, if that subclass is present if (ClassSubList["fighter-battle master"] && ClassSubList["fighter-battle master"].features["subclassfeature3.1"] && ClassSubList["fighter-battle master"].features["subclassfeature3.1"][n]) { var sourceObj = ClassSubList["fighter-battle master"].features["subclassfeature3.1"][n]; } else { // Subclass or maneuver not found, thus only add the name var sourceObj = { name : n.capitalize(), source : [["P", 74]], description : "" }; } return { name : sourceObj.name, source : sourceObj.source, note : sourceObj.description, page3notes : true, additional : "Knightly Maneuver" }; }; FeatsList["squire of solamnia-ua2"] = { name : "Squire of Solamnia", source : [["UA:HoKR", 5]], description : "Mounting/dismounting costs a 5-ft move. I learn one Knightly Maneuver: Lunging Attack, Precision Attack, or Pushing Attack. I can change which I know after each long rest. The DC is 8 + Prof B + Str or Dex mod (my choice). I gain Prof Bonus of Superiority Dice (d6) to use with these, regaining them after a long rest.", calculate : "event.value = 'Mounting/dismounting costs a 5-ft move. I learn one Knightly Maneuver: Lunging Attack, Precision Attack, or Pushing Attack. DC is ' + (8 + Number(How('Proficiency Bonus')) + Math.max(Number(What('Str Mod')), Number(What('Dex Mod')))) + ' (8 + Prof Bonus + Str/Dex mod). I can change which I know after each long rest. I gain Prof Bonus of Superiority Dice (d6) to use with these, regaining them after a long rest.';", descriptionFull : "Your training in the ways of the Knights of Solamnia grants you these benefits:"+ "\n " + toUni("Mount Up") + ". Mounting or dismounting costs you only 5 feet of movement."+ "\n " + toUni("Squire Maneuvers") + ". You learn the Lunging Attack, Precision Attack, or Pushing Attack maneuver from the Battle Master subclass of the fighter in the Player's Handbook (choose the maneuver when you gain this feat). If the maneuver requires a saving throw, the save's DC equals 8 + your proficiency bonus + your Strength or Dexterity modifier (your choice). Whenever you finish a long rest, you can replace the maneuver you learned from this feat with another one from the list above."+ "\n " + toUni("Superiority Dice") + ". You gain a number of superiority dice equal to your proficiency bonus. These dice are d6s, and you can use them only with the maneuver you gain from this feat and with any maneuvers you gain from feats that have this feat as a prerequisite. A superiority die is expended when you use it, and you regain all expended superiority dice when you finish a long rest.", prerequisite : "Fighter or Paladin Class or Knight of Solamnia Background", prereqeval : function (v) { return classes.known.fighter || classes.known.paladin || CurrentBackground.known.indexOf('knight of solamnia') !== -1; }, limfeaname : "Knightly Superiority Dice", usages : "Proficiency bonus per ", usagescalc : "var total = CurrentFeats.known.indexOf('squire of solamnia-ua2') === -1 ? 0 : Number(How('Proficiency Bonus')); for (var i = 0; i < CurrentFeats.known.length; i++) { var oFeat = FeatsList[CurrentFeats.known[i]]; if (oFeat && oFeat.knightlySuperiority && oFeat.knightlySuperiority.use) { total += oFeat.knightlySuperiority.use; }; }; event.value = total;", // complex because it works for all feats recovery : "long rest", additional : 'd6', knightlySuperiority : { die : 6, prereq : true }, toNotesPage : ["lunging attack", "precision attack", "pushing attack"].map(UA_HoKR_KnightlyManeuvers_Notes) }; FeatsList["knight of the crown-ua2"] = { name : "Knight of the Crown", source : [["UA:HoKR", 5]], description : "I learn one extra Knightly Maneuver: Distracting Strike or Goading Attack. I can change which one of these I know after each long rest. I gain two extra Knightly Superiority Dice and the dice become d8s. [+1 Strength or Dexterity]", descriptionFull : "You are a Knight of Solamnia aligned with the Order of the Crown, a group that extols the virtues of cooperation, loyalty, and obedience. You excel in group combat and gain these benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase your Strength or Dexterity score by 1, to a maximum of 20."+ "\n " + toUni("Crown Maneuvers") + ". You learn the Distracting Strike or the Goading Attack maneuver from the Battle Master subclass of the fighter in the Player's Handbook (choose the maneuver when you gain this feat). If the maneuver requires a saving throw, the save's DC equals 8 + your proficiency bonus + your Strength or Dexterity modifier (your choice). Whenever you finish a long rest, you can replace the maneuver you learned from this feat with the other maneuver offered by it."+ "\n " + toUni("Superiority Dice") + ". You gain two superiority dice, which you add to the dice you have from the Squire of Solamnia feat. All the dice are now d8s.", prerequisite : "4th level, Squire of Solamnia feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("squire of solamnia-ua2") !== -1; }, scorestxt : "+1 Strength or Dexterity", knightlySuperiority : { die : 8, use : 2 }, toNotesPage : ["distracting strike", "goading attack"].map(UA_HoKR_KnightlyManeuvers_Notes) }; FeatsList["knight of the sword-ua2"] = { name : "Knight of the Sword", source : [["UA:HoKR", 5]], description : "I learn one extra Knightly Maneuver: Maneuvering Attack or Menacing Attack. I can change which one of these I know after each long rest. I gain two extra Knightly Superiority Dice and the dice become d8s. [+1 Intelligence, Wisdom, or Charisma]", descriptionFull : "You are a Knight of Solamnia aligned with the Order of the Sword, a group devoted to heroism and courage. Bravery steels your spirit, granting you these benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase your Intelligence, Wisdom, or Charisma score by 1, to a maximum of 20."+ "\n " + toUni("Sword Maneuvers") + ". You learn the Maneuvering Attack or the Menacing Attack maneuver from the Battle Master subclass of the fighter in the Player's Handbook (choose the maneuver when you gain this feat). If the maneuver requires a saving throw, the save's DC equals 8 + your proficiency bonus + your Strength or Dexterity modifier (your choice). Whenever you finish a long rest, you can replace the maneuver you learned from this feat with the other maneuver offered by it."+ "\n " + toUni("Superiority Dice") + ". You gain two superiority dice, which you add to the dice you have from the Squire of Solamnia feat. All the dice are now d8s.", prerequisite : "4th level, Squire of Solamnia feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("squire of solamnia-ua2") !== -1; }, scorestxt : "+1 Intelligence, Wisdom, or Charisma", knightlySuperiority : { die : 8, use : 2 }, toNotesPage : ["maneuvering attack", "menacing attack"].map(UA_HoKR_KnightlyManeuvers_Notes) }; FeatsList["knight of the rose-ua2"] = { name : "Knight of the Rose", source : [["UA:HoKR", 5]], description : "I learn one extra Knightly Maneuver: Commander's Strike or Rally. I can change which one of these I know after each long rest. I gain two extra Knightly Superiority Dice and the dice become d8s. [+1 Constitution or Charisma]", descriptionFull : "You are a Knight of Solamnia aligned with the Order of the Rose, a group known for leadership, justice, and wisdom. Your resolve grants you these benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase your Constitution or Charisma score by 1, to a maximum of 20."+ "\n " + toUni("Rose Maneuvers") + ". You learn the Commander's Strike or Rally maneuver from the Battle Master subclass of the fighter in the Player's Handbook (choose the maneuver when you gain this feat). Whenever you finish a long rest, you can replace the maneuver you learned from this feat with the other maneuver offered by it."+ "\n " + toUni("Superiority Dice") + ". You gain two superiority dice, which you add to the dice you have from the Squire of Solamnia feat. All the dice are now d8s.", prerequisite : "4th level, Squire of Solamnia feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("squire of solamnia-ua2") !== -1; }, scorestxt : "+1 Constitution or Charisma", knightlySuperiority : { die : 8, use : 2 }, action : [ ["bonus action", "Commander's Strike (with Attack action)"], ["bonus action", "Rally"] ], toNotesPage : ["commander's strike", "rally"].map(UA_HoKR_KnightlyManeuvers_Notes) }; // This file adds the content from the Unearthed Arcana 2022: Giant Options article to MPMB's Character Record Sheet // Contains contributions by Thravieus Windhelm / PoetOfGod (GitHub) / @PoetOfGod#6077 (Discord) // ua_20220523_Giant-Options.js SourceList["UA:GO"] = { name : "Unearthed Arcana: Giant Options", abbreviation : "UA:GO", group : "Unearthed Arcana", url : "https://media.wizards.com/2022/dnd/downloads/UA2022-drjwf73f8n.pdf", date : "2022/05/23" }; AddSubClass("barbarian", "giant-ua", { regExpSearch : /^((?=.*(marauder|barbarian|viking|(norse|tribes?|clans?)(wo)?m(a|e)n))|((?=.*(warrior|fighter))(?=.*(feral|tribal))))(?=.*giant).*$/i, subname : "Path of the Giant", subnameShort: "Giant", source : [["UA:GO", 1]], abilitySave : 1, spellcastingAbility : 5, features : { "subclassfeature3" : { name : "Giant Power", source : [["UA:GO", 1]], minlevel : 3, description : desc("I learn Giant, and the Druidcraft or Thaumaturgy cantrip with Wis as spellcasting ability"), languageProfs : ["Giant"], spellcastingBonus : [{ name : "Giant Power", spells : ["druidcraft", "thaumaturgy"], firstCol : "atwill" }] }, "subclassfeature3.1" : { name : "Giant's Havoc", source : [["UA:GO", 1]], minlevel : 3, description : levels.map(function (n) { return desc([ "While raging, I add the bonus damage to ranged thrown weapon attacks that use Str,", "I gain +" + (n < 14 ? 5 : 10) + " ft reach, and I become " + (n < 14 ? 'Large' : 'Huge') + " along with what I'm wearing, if there is room" ]); }) }, "subclassfeature6" : { name : "Elemental Cleaver", source : [["UA:GO", 1]], minlevel : 6, description : levels.map(function (n) { return desc([ "When I rage, I can infuse a weapon I'm holding with acid, cold, fire, thunder, or lightning", "While raging, its damage type changes to the chosen type and it deals +" + (n < 14 ? 1 : 2) + "d6 damage,", "it gains the thrown (20/60 ft) property, and reappears instantly after a thrown attack", "As a bonus action, I can change the chosen type; The bonuses only function for me" ]); }), action : [["bonus action", " (change type)"]], calcChanges : { atkAdd : [ function (fields, v) { if ((v.isMeleeWeapon || v.isRangedWeapon) && classes.known.barbarian && classes.known.barbarian.level && /^(?=.*elemental)(?=.*cleaver).*$/i.test(v.WeaponTextName)) { fields.Damage_Type = "Varies"; var isThrownWeapon = /\bthrown\b/i.test(v.WeaponText); var extraDmg = classes.known.barbarian.level < 14 ? '+1d6 damage' : '+2d6 damage'; var extraProp = v.isRangedWeapon && !isThrownWeapon ? 'Thrown (20/60 ft), returning; ' : isThrownWeapon ? 'Returning; ' : 'Thrown, returning; '; var hasRange = /\d+ ?(f.{0,2}t|m)/i.test(fields.Range); if (!hasRange) { fields.Range += ', 20/60 ft'; } else if ((!v.isRangedWeapon || isThrownWeapon) && hasRange) { var rangeNmbr = fields.Range.match(/\d+([.,]\d+)?/g); if (rangeNmbr.length === 1) { var longRange = Number(rangeNmbr[0].replace(',', '.')); if (longRange < 60) tempRange = fields.Range.replace(longRange,"long_range"); } else { var shortRange = Number(rangeNmbr[0].replace(',', '.')); var longRange = Number(rangeNmbr[1].replace(',', '.')); tempRange = fields.Range; if (shortRange < 20) tempRange = tempRange.replace(shortRange,"short_range"); if (longRange < 60) tempRange = tempRange.replace(longRange,"long_range"); } fields.Range = tempRange.replace("short_range", 20).replace("long_range", 60); } fields.Description += (fields.Description ? '; ' : '') + extraProp + extraDmg; } }, "If I include the words 'Elemental Cleaver' in a weapon's name, the Elemental Cleaver infused weapon properties will be added to it and its damage type will be set to 'Acid'. Also, my Rage's bonus damage will be added to it if it is a melee weapon that uses Strength." ], atkCalc : [ function (fields, v, output) { if (v.isMeleeWeapon && fields.Mod === 1 && classes.known.barbarian && classes.known.barbarian.level && /^(?!.*\brage\b)(?=.*elemental)(?=.*cleaver).*$/i.test(v.WeaponTextName)) { output.extraDmg += classes.known.barbarian.level < 9 ? 2 : classes.known.barbarian.level < 16 ? 3 : 4; } }, "" ] } }, "subclassfeature10" : { name : "Mighty Impel", source : [["UA:GO", 1]], minlevel : 10, description : levels.map(function (n) { return " [DC 8 + Prof Bonus + Str mod]" + desc([ "As a bonus action while raging, I can hurl a " + (n < 14 ? 'Medium' : 'Large') + " or smaller creature within my reach", "I move it to an empty space I can see within 30 ft; Unwilling can save to avoid this", "If it doesn't end this movement on a surface that can support it, it falls and lands prone" ]); }), action : [["bonus action", ""]] }, "subclassfeature14" : { name : "Demiurgic Colossus", source : [["UA:GO", 1]], minlevel : 14, description : desc([ "While raging, my reach increases by 10 ft, and my size can increase to Huge", "Mighty Impel works on Large creatures; Elemental Cleaver increases to +2d6 damage", ]) } } }); AddSubClass("druid", "circle of the primeval-ua", { regExpSearch : /^(?=.*(druid|shaman))(?=.*(primeval|behemoth)).*$/i, subname : "Circle of the Primeval", subnameShort: "Primeval", source : [["UA:GO", 2]], features : { "subclassfeature2" : { name : "Keeper of Old", source : [["UA:GO", 2]], minlevel : 2, description : desc("I gain proficiency in History; I can add d4 to my Intelligence (History) checks"), skills : ["History"] }, "subclassfeature2.1" : { name : "Primeval Companion", source : [["UA:GO", 2]], minlevel : 2, description : desc([ "As an action, I can expend a use of wild shape to summon a primeval companion", "The companion appears in an empty spot within 30 ft with the appearance of my choice", "It vanishes when reduced to 0 hit points, when I die, and when I summon another one" ]), action : [ ["action", "Summon Primeval Companion"], ["bonus action", "Command Primeval Companion"] ], creaturesAdd : [["Primeval Companion", true]], creatureOptions : [{ name : "Primeval Companion", source : [["UA:GO", 2]], size : 3, type : "Beast", alignment : "Neutral", ac : "11+Dex+Prof", hp : 20, hd : [2, 10], hdLinked : ["druid"], minlevelLinked : ["druid"], speed : "30 ft", scores : [15, 15, 17, 6, 12, 8], saves : ["", 4, 5, "", "", ""], senses : "Darkvision 60 ft", passivePerception : 11, languages : "Understands the languages of its summoner", challengeRating : "0", proficiencyBonus : 2, proficiencyBonusLinked : true, attacksAction : 1, attacks : [{ name : "Strike", ability : 1, damage : [1, 8, "bludgeoning"], modifiers : ["", "Prof"], range : "Melee (5 ft)", description : "My choice of bludgeoning, piercing, or slashing damage", abilitytodamage : false }], features : [{ name : "Primeval Companion", description : "The primeval companion obeys the commands of its summoner and shares its proficiency bonus. It takes its turn immediately after that of its summoner, on the same initiative. It can move and take reactions on its own, but only takes the Dodge action on its turn unless its summoner takes a bonus action to command it to take another action. If its summoner is incapacitated, the companion can take any action, not just Dodge. The companion vanishes when it is reduced to 0 hit points, when its summoner summons another companion, or when its summoner dies." }], traits : [{ name : "Intercept attack", description : "As a reaction when a creature the companion can see hits a target within 5 ft of the companion with an attack, the target instead takes half the damage. The companion takes the remainder of the damage" }, { name : "Prehistoric Conduit (Circle of the Primeval 6)", minlevel : 6, description : "Spells cast by the companion's summoner with a range other than self can originate from the companion instead. Also, the companion has advantage on saving throws against spells cast by its summoner. If the companion would normally take half damage on a successful save against these spells, instead, it takes no damage on a success and half and no other effects on a fail." }, { name : "Titanic Bond (Circle of the Primeval 10)", minlevel : 10, description : "The companion's size is now Large and it gains either a swimming or climbing speed equal to its walking speed.", eval : function(prefix, lvl) { PickDropdown(prefix + "Comp.Desc.Size", 2); // Large var sMoveStr = (typePF ? ",\n" : ", ") + "swim/climb 30 ft"; if (What("Unit System") === "metric") sMoveStr = ConvertToMetric(sMoveStr, 0.5); tDoc.getField(prefix + "Comp.Use.Speed").value += sMoveStr; }, removeeval : function(prefix, lvl) { PickDropdown(prefix + "Comp.Desc.Size", 3); // Medium var sMoveStr = (typePF ? ",\n" : ", ") + "swim or climb 30 ft"; if (What("Unit System") === "metric") sMoveStr = ConvertToMetric(sMoveStr, 0.5); Value(prefix + "Comp.Use.Speed", What(prefix + "Comp.Use.Speed").replace(sMoveStr, "")); } }], calcChanges : { hp : function (totalHD, HDobj, prefix) { if (!classes.known.druid) return; var drdLvl = classes.known.druid.level; var drdLvlM = 5 * drdLvl; HDobj.alt.push(10 + drdLvlM); HDobj.altStr.push(" = 10 as a base\n + 5 \xD7 " + drdLvl + " from five times its summoner's druid level (" + drdLvlM + ")"); }, setAltHp : true } }] }, "subclassfeature6" : { name : "Prehistoric Conduit", source : [["UA:GO", 2]], minlevel : 6, description : desc([ "Spells I cast with the range of touch can originate from my primeval companion", "The primeval companion has advantage on saving throws against my spells", "If the companion would take half damage on a successful save against a spell I cast,", "it instead takes no damage on a success and half damage and no other effects on a fail" ]) }, "subclassfeature10" : { name : "Titanic Bond", source : [["UA:GO", 2]], minlevel : 10, description : desc([ "My companion grows to Large; it gains a climb or swim speed equal to its walking speed", "When I hit an attack or spell damage a creature I can see, I can have it make a Wis save", "If failed, the target is frightened of me until the end of my next turn", "I can do this only while my primeval companion is summoned, and only once per turn" ]) }, "subclassfeature14" : { name : "Scourge of the Ancients", source : [["UA:GO", 3]], minlevel : 14, description : desc([ "When I use a bonus action to command my companion, I can expend a spell slot so that:", " \u2022 It becomes Huge if there is room, and gains 10 times the spell slot level in temp HP", " \u2022 On a hit, the companion's Strike deals an extra 1d8 + the spell slot level damage", " \u2022 Its walking (and climbing or swimming) speed increases with 5 ft per spell slot level", "These benefits last for 1 hour, until the companion vanishes, or until I use this again" ]) } } }); AddSubClass("wizard", "runecrafter-ua", { regExpSearch : /runecrafting|runecrafter/i, subname : "Tradition of Runecrafting", subnameShort: "Runecrafting", fullname : "Runecrafter", source : [["UA:GO", 3]], features : { "subclassfeature2" : { name : "Runes of Understanding", source : [["UA:GO", 3]], minlevel : 2, description : desc([ "I always have Comprehend Languages prepared and can cast it without using a spell slot", "It doesn't count against the number of spells I can prepare" ]), spellcastingBonus : [{ name : "Runes of Understanding", spells : ["comprehend languages"], selection : ["comprehend languages"], firstCol : "atwill" }] }, "subclassfeature2.1" : { name : "Runic Empowerment", source : [["UA:GO", 3]], minlevel : 2, description : desc([ "When I cast a spell using a spell slot, I can invoke one of the following runes:", " \u2022 Life Rune: Me or a creature I can see within 30 ft gains 5 temp HP per spell slot level", " \u2022 War Rune: A creature I can see within 30 ft is marked until the end of my next turn", " Attack rolls against it gain a bonus equal to half the spell slot level, rounded up", " \u2022 Wind Rune: Until my next turn starts, my speed increases by 5 ft per spell slot level", " Additionally, my movement doesn't provoke opportunity attacks" ]), usages : "Prof Bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature6" : { name : "Sigils of Warding", source : [["UA:GO", 3]], minlevel : 6, description : desc([ "As a reaction when I fail a Strength, Dexterity, or Constitution save, I can call on a rune", "I expend a use of my Runic Empowerment feature and succeed on the save instead" ]), action : [["reaction", ""]] }, "subclassfeature10" : { name : "Rune Maven", source : [["UA:GO", 3]], minlevel : 10, description : desc([ "Whenever I use Arcane Recovery, I also regain uses of Runic Empowerment", "I regain a number of uses equal to half my Intelligence modifier, rounded up (min 1)" ]) }, "subclassfeature14" : { name : "Engraved Enmity", source : [["UA:GO", 3]], minlevel : 14, description : desc([ "As a bonus action, I can have a creature I can see within 60 ft make a Wisdom save", "If failed, it is marked by an enmity rune for 1 min, or until I lose my concentration", "A glowing energy mote hovers over the marked and it suffers the following effects:", " \u2022 The marked has disadvantage on saving throws against spells I cast", " \u2022 The glow makes the marked visible even if invisible, and they can't become invisible", " \u2022 When marking and as a bonus action on subsequent turns, I can curse the creature", " The next time an ally hits the cursed with an attack, it also takes 1d8 force damage", "I can do this once per long rest, or by expending a 3rd-level or higher spell slot (SS 3+)" ]), recovery : "long rest", usages : 1, altResource : "SS 3+", action : [["bonus action", ""]] } } }); /* Feats All the below feats are the work of PoetOfGod and have not been double-checked by Safety-Orange, because the "Revised" article "Wonders of the Multiverse" has already been published, superseding all these feats with newer versions. */ FeatsList["elemental touched-ua"] = { name : "Elemental Touched", source : [["UA:GO", 4]], descriptionFull : "You've been exposed to the primordial magic of the Elemental Planes, granting you a measure of control over the natural world around you. You learn either the druidcraft or thaumaturgy cantrip, using Intelligence, Wisdom, or Charisma as the spellcasting ability (choose when you gain this feat).\n Whenever you finish a long rest, you can choose which element you are attuned to: Air, Earth, Fire, or Water. Depending on your choice, you can use a bonus action to cause one of the following effects:"+ "\n\n" + toUni("Air") + ". You gain a fly speed equal to your walking speed until the end of your turn. If you are airborne at the end of your turn after using this movement and aren't held aloft by other means, you fall."+ "\n" + toUni("Earth") + ". You cause the ground within 30 feet of you to become difficult terrain for 1 minute or until you create this effect again. During that time, you can move across ground that is difficult terrain without spending extra movement."+ "\n" + toUni("Fire") + ". You surround yourself in a cloud of ash and smoke. Until the end of your turn, your movement doesn't provoke opportunity attacks."+ "\n" + toUni("Water") + ". You can create a forceful surge of water directed at a creature within 15 feet of you that you can see. The creature must succeed on a Strength saving throw (which it can choose to fail) against a DC equal to 8 + your spellcasting ability modifier + your proficiency bonus or be pushed up to 10 feet away from you. The water vanishes immediately after the creature succeeds or fails."+ "\n\nYou can create this effect a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", description : "I learn druidcraft or thaumaturgy. End of a LR pick Air, Earth, Fire, Water, as a bns action: Air. Gain fly spd = to walk spd, fall at end of turn; Earth. 30 ft rad diff terr for 1 min, move freely through diff terr; Fire. No opp atks this turn; Water. 1 visible crea w/in 15 ft Str save DC 8 + SC mod + Prof or pushed 10 ft away. Prof Uses / LR.", spellcastingAbility : [4, 5, 6], action : [["bonus action", ""]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", choices : ["Druidcraft", "Thaumaturgy"], "druidcraft" : { description : "I learn druidcraft. End of a LR pick Air, Earth, Fire, Water, as a bns action: Air. Gain fly spd = to walk spd, fall at end of turn; Earth. 30 ft rad diff terr for 1 min, move freely through diff terr; Fire. No opp atks this turn; Water. 1 visible crea w/in 15 ft Str save DC 8 + SC mod + Prof or pushed 10 ft away. Prof Uses / LR.", spellcastingBonus : [{ name : "Elemental Touched", spells : ["druidcraft"], selection : ["druidcraft"] }] }, "thaumaturgy" : { description : "I learn thaumaturgy. End of a LR pick Air, Earth, Fire, Water, as a bns action: Air. Gain fly spd = to walk spd, fall at end of turn; Earth. 30 ft rad diff terr for 1 min, move freely through diff terr; Fire. No opp atks this turn; Water. 1 visible crea w/in 15 ft Str save DC 8 + SC mod + Prof or pushed 10 ft away. Prof Uses / LR.", spellcastingBonus : [{ name : "Elemental Touched", spells : ["thaumaturgy"], selection : ["thaumaturgy"] }] } }; FeatsList["outsized might-ua"] = { name : "Outsized Might", source : [["UA:GO", 5]], descriptionFull : "You have absorbed primeval magic that allows you, despite your relatively small stature, to embody the might of titanic creatures. This grants you the following benefits:"+ "\n\n" + toUni("Little but Mighty") + ". You gain proficiency in either the Athletics or Acrobatics skill."+ "\n" + toUni("Powerful Build") + ". You count as one size larger when determining your carrying capacity and the amount you can push, drag, or lift."+ "\n" + toUni("Stalwart") + ". You have advantage on saving throws against being moved or knocked prone.", description : "I gain proficiency in Athletics or Acrobatics. I count as one size larger when determining my carrying capacity and the amount I can push, drag, or lift. I have advantage on saving throws against being moved or knocked prone.", skillstxt : "Choose Athletics or Acrobatics", carryingCapacity : 2, savetxt : { adv_vs : ["moved", "prone"]} }; // X of the X Giant feats FeatsList["ember of the fire giant-ua"] = { name : "Ember of the Fire Giant", source : [["UA:GO", 4]], prerequisite : "8th level", prereqeval : function(v) { return v.characterLevel >= 8; }, descriptionFull : "You've manifested the fiery combat emblematic of fire giants, granting you the following benefits:"+ "\n\n" + toUni("Born of Flame") + ". You have resistance to fire damage."+ "\n" + toUni("Searing Ignition") + ". When you take the Attack action on your turn, you can replace one of your attacks with a magical burst of flame. Each creature of your choice within 15 feet of you that can see you must make a Dexterity saving throw (DC equals 8 + your proficiency bonus + your Constitution modifier). On a failed save, a creature takes fire damage equal to 2d6 + your proficiency bonus and is blinded until the start of your next turn; on a successful save, the creature takes half as much damage with no additional effects. You can use your Searing Ignition a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", description : "I gain resistance to fire damage. When I take the Attack action on my turn I can use an attack to instead make each creature I choose within 15 ft roll a Dex save DC 8 + Prof + Con mod. On a fail they take 2d6 + Prof Fire dmg, blinded until the start of my next turn. Success halves and no other effect. Prof Uses / LR.", action : [["action", "Searing Ignition (as Attack action)"]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", dmgres : ["Fire"] }; FeatsList["fury of the frost giant-ua"] = { name : "Fury of the Frost Giant", source : [["UA:GO", 4]], prerequisite : "4th level", prereqeval : function(v) { return v.characterLevel >= 4; }, descriptionFull : "You've manifested the icy might emblematic of frost giants, granting you the following benefits:"+ "\n\n" + toUni("Born of Ice") + ". You have resistance to cold damage."+ "\n" + toUni("Frigid Vengeance") + ". When a creature hits you with an attack roll, you can use your reaction to retaliate with a burst of magical ire. The creature must succeed on a Wisdom saving throw (DC equals 8 + your proficiency bonus + your Consitution modifier) or be frightened of you until the start of its next turn. You can use your reaction in this way a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", description : "I gain resistance to cold damage. When I am hit with an attack roll I can use my reaction to make them roll a Wis save DC 8 + Prof + Con mod. On a failure they are frightened until the start of their next turn. Prof Uses / LR.", action : [["reaction", "Frigid Vengeance"]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", dmgres : ["Cold"] }; FeatsList["guile of the cloud giant-ua"] = { name : "Guile of the Cloud Giant", source : [["UA:GO", 4]], prerequisite : "8th level", prereqeval : function(v) { return v.characterLevel >= 8; }, descriptionFull : "You've manifested the airy speech and magic emblematic of cloud giants, granting you the following benefits:"+ "\n\n" + toUni("Misty Form") + ". You can cast the blur spell without using a spell slot or material components. When you cast the spell in this way, the spell doesn't require you to maintain concentration on it. Once you cast the spell in this way, you can't do so again until you finish a long rest. You can also cast this spell in the normal way using spell slots you have of appropriate level."+ "\nIntelligence, Wisdom, or Charisma is your spellcasting ability for this feature (choose when you gain this feat)."+ "\n" + toUni("Silver Tongue") + ". You gain proficiency in either the Deception or Persuasion skill. Your proficiency bonus is doubled for any ability check you make using this skill.", description : "I gain proficiency and expertise in Deception or Persuasion. Once per long rest I can cast Blur without using a spell slot, material components, or concentration. I can also cast it normally with spell slots.", skillstxt : "Choose Deception or Persuasion. You also gain expertise with that skill", spellcastingAbility : [4, 5, 6], spellcastingBonus : [{ name : "Guile of the Cloud Giant", spells : ["blur"], selection : ["blur"], firstCol : "oncelr+markedbox", allowUpCasting : true }] }; FeatsList["keenness of the stone giant-ua"] = { name : "Keenness of the Stone Giant", source : [["UA:GO", 5]], prerequisite : "4th level", prereqeval : function(v) { return v.characterLevel >= 4; }, descriptionFull : "You've manifested the protection and spellcasting emblematic of stone giants, granting you the following benefits:"+ "\n\n" + toUni("Dreamer's Magic") + " You learn the detect thoughts spell and one 1st-level spell of your choice. The 1st-level spell must be from the abjuration or the divination school of magic. You can cast each of these spells without expending a spell slot. Once you cast either of these spells in this way, you can't cast that spell in this way again until you finish a long rest. You can also cast these spells using spell slots you have of the appropriate level."+ "\nIntelligence, Wisdom, or Charisma is your spellcasting ability for this feature (choose when you gain this feat)."+ "\n" + toUni("Mountain Sight") + ". You gain darkvision out to a range of 60 feet. If you already have darkvision from another source, its range increases by 30 feet", description : "I learn detect thoughts and a 1st level Abjur or Div spell. I can cast these without a spell slot once per long rest, or as normal. I gain 60 ft of Darkvision or if I already have darkvision I get an extra 30 feet of Darkvision.", spellcastingAbility : [4, 5, 6], spellcastingBonus : [{ name : "Keenness of the Stone Giant", spells : ["detect thoughts"], selection : ["detect thoughts"], firstCol : "oncelr+markedbox", allowUpCasting : true }, { name : "1st-level Abjur/Div spell", "class" : "any", school : ["Abjur", "Div"], level : [1, 1], firstCol : "oncelr+markedbox", allowUpCasting : true }], vision : [["Darkvision", "fixed 60"], ["Darkvision", "+30"]] }; FeatsList["soul of the storm giant-ua"] = { name : "Soul of the Storm Giant", source : [["UA:GO", 5]], prerequisite : "8th level", prereqeval : function(v) { return v.characterLevel >= 8; }, descriptionFull : "You've manifested divination abilities and tempest magic emblematic of storm giants, granting you the following benefits:"+ "\n\n" + toUni("Maelstrom Aura") + ". As a bonus action, you surround yourself in an aura of magical wind and lightning that extends 10 feet from you in every direction but not through total cover. The aura lasts for 1 minute or until you are incapacitated. While the aura is active, attack rolls against you have disadvantage, and whenever a creature starts its turn within the sphere, you can force the creature's speed to be halved until the start of its next turn. Once you use this bonus action, you can't do so again until you finish a long rest."+ "\n" + toUni("Storm's Oracle") + ". You can cast the divination spell as a ritual, without needing amterial components.\n Intelligence, Wisdom, or Charisma is your spellcasting ability for this feature (choose when you gain this feat). Once you cast the spell in this way, you can't do so again until you finish a long rest.", description : "I learn Divination and can cast it once per long rest as a ritual without using a spell slot or materials. Once per long rest as a bonus action I create a 10 ft rad that lasts for 1 min or until I am incapacitated. Atks against me have disadv, when creas start their turn in the area I can halve their spd until their next turn.", action : [["bonus action", "Maelstrom Aura"]], usages : 1, recovery : "long rest", spellcastingAbility : [4, 5, 6], spellcastingBonus : [{ name : "Storm's Oracle", spells : ["divination"], selection : ["divination"], firstCol : "oncelr" }], spellChanges : { "divination" : { components : "V,S", compMaterial : "" } } }; FeatsList["vigor of the hill giant-ua"] = { name : "Vigor of the Hill Giant", source : [["UA:GO", 5]], prerequisite : "4th level", prereqeval : function(v) { return v.characterLevel >= 4; }, descriptionFull : "You've manifested the resilience emblematic of hill giants, granting you the following benefits:"+ "\n\n" + toUni("Bulwark") + ". When you are subjected to an effect that would move you at least 5 feet or knock you prone, you can use your reaction to steady yourself. You are then neither moved nor knocked prone."+ "\n" + toUni("Hearty Health") + ". When you are subjected to a spell that restores your hit points, you can regain additional hit points equal to your Constitution modifier. You can regain these additional hit points a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", description : "When I would be moved or knocked prone I can use my reaction to not. When I would restore hit points from a spell I can regain an additional Con mod hit points, I can regain hit points this way Prof Uses / LR.", action : [["reaction", "Bulwark"]] }; // Rune Carver Apprentice feat tree FeatsList["rune carver apprentice-ua"] = { name : "Rune Carver Apprentice", source : [["UA:GO", 5]], descriptionFull : "You've begun studying the art of runecraft, which allows you to temporarily mark your items and imbue them with magic."+ "\n Whenever you finish a long rest, you can mark one nonmagical weapon, armor, piece of clothing, or other object you can touch with a rune of your choice. You temporarily learn one 1st-level spell based on the rune you choose, as specified in the table below, and you know the spell until you finish a long rest, when the rune fades."+ "\n\n" + toUni("Rune\tSpell")+ "\nBlood\tFalse life"+ "\nCloud\tFog cloud"+ "\nDeath\tRay of sickness"+ "\nDragon\tChromatic orb"+ "\nEnemy\tBane"+ "\nFire\tBurning hands"+ "\nFriend\tBless"+ "\nFrost\tArmor of Agathys"+ "\nHill\tGoodberry"+ "\nJourney\tLongstrider"+ "\nKing\tCommand"+ "\nLight\tGuiding bolt"+ "\nLife\tCure wounds"+ "\nMountain\tJump"+ "\nShield\tShield"+ "\nStone\tSanctuary"+ "\nStorm\tThunderwave"+ "\nWar\tHeroism"+ "\nWind\tFeather fall"+ "\n\nWhile you are wearing or carrying the rune-marked object, you can cast the chosen spell associated with the rune once without using a spell slot or material components, and you can also cast the spell using any spell slots you have."+ "\n Your spellcasting ability for this feat is Intelligence, Wisdom, or Charisma (choose when you gain this feat).", description : "At the end of a long rest, I can mark a nonmagical object I can touch with a rune. I learn a 1st-level spell until I finish a long rest when the rune fades. While wearing or carrying the object I can cast the spell once without using a spell slot or material components, or as normal.", spellcastingAbility : [4, 5, 6], spellcastingBonus : [{ name : "Rune Carver", spells : ["false life", "fog cloud", "ray of sickness", "chromatic orb", "bane", "burning hands", "bless", "armor of agathys", "goodberry", "longstrider", "command", "guiding bolt", "cure wounds", "jump", "shield", "sanctuary", "thunderwave", "heroism", "feather fall"], selection : ["false life", "fog cloud", "ray of sickness", "chromatic orb", "bane", "burning hands", "bless", "armor of agathys", "goodberry", "longstrider", "command", "guiding bolt", "cure wounds", "jump", "shield", "sanctuary", "thunderwave", "heroism", "feather fall"], times : 19, firstCol : "R", allowUpCasting : true }] }; FeatsList["rune carver adept-ua"] = { name : "Rune Carver Adept", source : [["UA:GO", 5]], prerequisite : "4th level, Rune Carver Apprentice feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("rune carver apprentice") !== -1; }, descriptionFull : "Your skill with the art of runecraft has increased.\n Whenever you finish a long rest, you can now mark a number of objects equal to your proficiency bonus with a rune from the Rune Carver Apprentice feat. An object can have only one rune at a time, and you must inscribe a different rune on each object.", description : "At the end of a long rest, when using the Rune Carver apprentice feat, I can now inscribe a number of objects up to my Proficiency Bonus. Each object can only have one rune, and each rune must be different." }; // This file adds the content from the Unearthed Arcana 2022: Wonders of the Multiverse article to MPMB's Character Record Sheet // ua_20220718_Wonders-of-the-Multiverse.js SourceList["UA:WotM"] = { name : "Unearthed Arcana: Wonders of the Multiverse", abbreviation : "UA:WotM", group : "Unearthed Arcana", url : "https://media.wizards.com/2022/dnd/downloads/UA2022-WondersoftheMultiverse.pdf", date : "2022/07/18" }; // Race RaceList["glitchling-ua"] = { regExpSearch : /glitchling/i, name : "Glitchling", source : [["UA:WotM", 2]], plural : "Glitchlings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, scoresGeneric : true, savetxt : { adv_vs : ["charmed"] }, armorOptions : [{ regExpSearch : /^(?=.*armou?red)(?=.*plating).*$/i, name : "Armored Plating", source : [["UA:WotM", 2]], ac : 14, selectNow : true }], features : { "balance chaos" : { name : "Balance Chaos", minlevel : 1, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "vestigial wings" : { name : "Vestigial Wings", minlevel : 1, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" } }, trait : "Glitchling (my type is Construct)"+ "\n \u2022 Armored Plating: My base AC is 14 + my Dexterity modifier."+ "\n \u2022 Living Construct: Life preserving spells that normally don't affect constructs work on me." + (typePF ? " (e.g. Cure Wounds, Spare the Dying)." : "")+ "\n \u2022 Ordered Mind: I have adv. on Wis (Insight) checks and on saves against being charmed."+ "\n \u2022 Balance Chaos: " + (typePF ? "My proficiency bonus per long rest, I can treat an attack roll or save roll of 9 or lower as a 10 instead." : "Prof Bonus per long rest, I can treat a save/attack roll below 10 as a 10.")+ "\n \u2022 Vestigial Wings: Prof Bonus per long rest, I can gain a flying speed equal to my walking speed for 1 turn, but fall if I end my turn aloft." }; // Subclass AddSubClass("cleric", "fate-ua", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*(fate|destiny)).*$/i, subname : "Fate Domain", source : [["UA:WotM", 2]], spellcastingExtra : ["dissonant whispers", "heroism", "see invisibility", "warding bond", "beacon of hope", "clairvoyance", "death ward", "divination", "commune", "geas"], features : { "subclassfeature1" : { name : "Omens and Portents", source : [["UA:WotM", 2]], minlevel : 1, description : desc([ "I can cast Augury once per long rest without using a spell slot or requiring components", "Once I do, my divination spells have -25% of no/random answer until I finish a long rest" ]), usages : 1, recovery : "long rest", additional : "Augury", spellcastingBonus : [{ name : "Omens and Portents", spells : ["augury"], selection : ["augury"], firstCol : 'oncelr' }], spellChanges : { "augury" : { components : "", compMaterial : "", changes : "Using Omens and Portents, I can cast Augury once per long rest without expending a spell slot or requiring components." } } }, "subclassfeature1.1" : { name : "Thies That Bind", source : [["UA:WotM", 2]], minlevel : 1, description : desc([ "As an action, I can magically tie my fate to a creature or object I touch for 1 hour", "Unwilling creatures can make a Wisdom save to resist; It ends early if I do this again", "I know the direction to a bound target's location and the direction of its movement", "Once per turn, a spell I cast on the target using a spell slot gets +1d6 damage or healing" ]), action : [["action", ""]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature2" : { name : "Channel Divinity: Strands of Fate", source : [["UA:WotM", 3]], minlevel : 2, description : desc([ "As a bonus action, I can manipulate the strands of fate for 1 minute while concentrating", "As a reaction when a creature I see makes a check or attack, I can impose adv. or disadv." ]), action : [["bonus action", " (activate)"], ["reaction", " (if active)"]] }, "subclassfeature6" : { name : "Insightful Striking", source : [["UA:WotM", 3]], minlevel : 6, description : desc([ "As a bonus action, I can gain a brief vision of the defenses of a creature I see within 30 ft", "Until the end of my next turn, I gain one of the following effects:", " \u2022 I add 1d6 to my next attack roll against the target ", " \u2022 The target subtracts 1d6 from the next saving throw it makes against a spell I cast" ]), action : [["bonus action", ""]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature8" : { name : "Potent Spellcasting", source : [["UA:WotM", 3]], minlevel : 8, description : desc("I add my Wisdom modifier to the damage I deal with my cleric cantrips"), calcChanges : GenericClassFeatures["potent spellcasting"].calcChanges }, "subclassfeature17" : { name : "Visions of the Future", source : [["UA:WotM", 3]], minlevel : 17, description : desc(["Once per long rest, I can cast Foresight without a spell slot with a duration of 1 minute"]), usages : 1, recovery : "long rest", limfeaname : "Visions of the Future (Foresight)", spellcastingBonus : [{ name : "Visions of the Future", spells : ["foresight"], selection : ["foresight"], firstCol : 'oncelr' }], spellChanges : { "foresight" : { duration : "1 min", changes : "Using Visions of the Future, I can cast Foresight once per long rest without expending a spell slot; when I cast the spell in this way, the spell's duration is 1 minute for that casting." } } } } }); // Backgrounds, first those not reprinted exactly as in this UA BackgroundList["giant foundling-ua"] = { regExpSearch : /^(?=.*giant)(?=.*foundling).*$/i, name : "Giant Foundling", source : [["UA:WotM", 4]], skills : ["Intimidation", "Survival"], gold : 10, languageProfs : [2], equipleft : [ ["Backpack", "", 5], ["Small stone/sprig reminding of home", "", ""] ], equipright : [ ["Traveler's clothes", "", 4], ["Pouch (with coins)", "", 1] ], feature : "Strike of the Giants", trait : [ "What I lack in stature, I make up for with sheer spite.", "Sometimes size does matter, okay? If I see a beast bigger than me, I'm immediately running away.", "Crowded spaces make me uncomfortable. I'd much rather be in a wide-open field than a bustling tavern.", "I like being small. It helps me stay unnoticed\u2014and underestimated.", "Size is just half the story. Every avalanche begins as a single pebble.", "The world always feels too big, and I'm afraid I'll never find my place in it." ], extra : [ "Select an Origin Story", "Found as a baby" + (typePF ? "": " by nomadic giants"), "Rescued from mountain crag" + (typePF ? "": " by stone giants"), "Found as a child lost in a jungle" + (typePF ? "": " by a frost giant"), "Home/family killed by warring giants" ] }; BackgroundList["planar philosopher-ua"] = { regExpSearch : /^(?=.*planar)(?=.*philosopher).*$/i, name : "Planar Philosopher", source : [["UA:WotM", 4]], skills : ["Arcana", "Persuasion"], gold : 10, languageProfs : [2], equipright : [ ["Common clothes", "", 3], ["Pouch (with coins from different planes)", "", 1] ], feature : "Conviction", trait : [ "I don't venerate any gods; we can be as powerful or greater than them.", "Experience is everything, live in the moment.", "When things crumble, I find meaning in the ashes.", "Life thrives through order; I won't tolerate disruptions.", "When others make plans, the multiverse laughs and so do I.", "I know what's right, and no one will stand in my way." ], extra : [ "Select a Trinket", "Inscribed locket with image of mentor", "Bleached rat skull with glass eyes", "Torn parchment with half a puzzle", "Bracelet of twisted razorvine stems", "Fragment of verdigris bronze blade", "Smooth stone with holy symbols" ] }; BackgroundList["rune carver-ua"] = { regExpSearch : /^(?=.*rune)(?=.*carver).*$/i, name : "Rune Carver", source : [["UA:WotM", 5]], skills : ["History", "Perception"], gold : 10, languageProfs : ["Giant", 1], equipleft : [ ["Set of artisan's tools", "", ""], ["Small knife", "", 0.5], ["Whetstone", "", 1] ], equipright : [ ["Common clothes", "", 3], ["Pouch (with coins)", "", 1] ], feature : "Rune Carver Apprentice", trait : [ "Is it practical to learn an ancient language that is rarely used in everyday speech? No. But is it fun? Very.", "I learned one of my ancestors was a lauded rune carver whose story was lost to time. I seek to rekindle that legacy.", "The old, traditional markings of runecraft look so boring. Why not give your runes some flair?", "In my studies of runes, I strive to understand how great civilizations of the past fell, so that I may prevent it from happening to societies of the present.", "Life may be a whirlwind of chaos around me, but whenever I create my runes, I feel at peace.", "My brain struggles to process ink words written on paper, but the tactile feeling of carved runes makes my mind sing." ], extra : [ "Select a Rune Style", "Use fine metal needle to inscribe", "On small wooden figurines", "On glass beads in necklace/bracelet", "Stitched into the hems of clothing", "Carved on set of animal bones", "Drawn into candles" ] }; BackgroundFeatureList["rune carver apprentice"] = { description : "I've dedicated my life to studying the practice of runecraft. Whether I was personally taught by a master rune carver or learned by poring over engravings in ancient ruins, I understand how to tap into the supernatural power held within runes. Also, I gain the Rune Carver Apprentice feat.", source : [["UA:WotM", 5]], featsAdd: ["Rune Carver Apprentice"], }; // Then the backgrounds that haven't been altered in the book // Feats FeatsList["cartomancer-ua"] = { name : "Cartomancer", source : [["UA:WotM", 6]], description : 'I can use a deck of cards as a spellcasting focus. When doing so, Prof Bonus per long rest I can add +1d4 to the damage of one target of a spell I cast. I know Prestidigitation and can also cast it to do stage magic, concealing its components. When I finish a long rest, I can store a spell into a card, see "Hidden Ace" notes.', descriptionFull : "You have learned to channel your magic through a deck of playing cards, granting you these benefits:"+ "\n " + toUni("Card Focus") + ". You can use a deck of cards as your spellcasting focus. When you use the deck as a focus to cast a spell that deals damage, roll a d4. You gain a bonus to one damage roll of the spell equal to the number rolled. This bonus applies to one creature of your choice that you can see damaged by the spell; you can use this benefit a number of times equal to your proficiency bonus, and you regain all expended uses of it when you finish a long rest."+ "\n " + toUni("Card Tricks") + ". You learn the prestidigitation cantrip and can use it to create illusions that duplicate the effects of stage magic. When you use prestidigitation in this way, you can conceal the verbal and somatic components of the spell as mundane conversation and card-handling."+ "\n " + toUni("Hidden Ace") + ". When you finish a long rest, you can choose one spell you know and imbue it into a card; the chosen spell must have a casting time of 1 action, and its level must be less than or equal to your proficiency bonus. While the card is imbued with the spell, you can use your bonus action to flourish the card and cast the spell within. The card then immediately loses its magic.", prerequisite : "4th-level; Sorcerer, Warlock, or Wizard Class", prereqeval : function (v) { return v.characterLevel >= 4 && (classes.known.wizard || classes.known.warlock || classes.known.sorcerer); }, extraLimitedFeatures : [{ name : "Cartomancer (+1d4 spell damage)", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }], action : [["bonus action", "Hidden Ace (use imbued card)"]], toNotesPage : [{ name : "Hidden Ace", page3notes : true, note : [ "Whenever I finish a long rest, I can imbue a spell I know into a card until I flourish the card", "The spell must have a casting time of 1 action and a level no more than my Prof Bonus", "As a bonus action, I can flourish the card to cast the stored spell, ousting it from the card" ] }] }; // Scion of the Outer Planes feat tree FeatsList["scion of the outer planes-ua"] = { name : "Scion of the Outer Planes", source : [["UA:WotM", 9]], description : "I am adept at navigating planar pathways and the strange realities of the outer planes. I can select a plane and gain resistance to a damage type and learn a cantrip associated with that plane. I can cast the cantrip without material components. I can choose Int, Wis, or Cha as my spellcasting ability for this.", descriptionFull : "You are influenced by and adept at navigating planar pathways and the strange realities of the Outer Planes."+ "\n Whether planar essence infuses you or you have extraplanar ancestry, your connection to a plane infuses you with the energies found there. Choose a type of plane listed in the table below. Your choice gives you resistance to a damage type and the ability to cast a cantrip, as specified in the table. You can cast this cantrip without material components, and your spellcasting ability for it is Intelligence, Wisdom, or Charisma (choose when you select this feat)."+ toUni("\n\nPlane\t\tResistance\tCantrip")+ "\nAstral\t\tPsychic\t\tMessage"+ "\nChaotic Outer\tNecrotic\t\tMinor Illusion"+ "\nEvil Outer \tNecrotic\t\tChill Touch"+ "\nGood Outer \tRadiant\t\tSacred Flame"+ "\nLawful Outer\tRadiant\t\tGuidance"+ "\nThe Outlands\tPsychic\t\tMage Hand", spellcastingAbility : [4,5,6], choices : ['Astral Plane (Psychic, Message)', 'Chaotic Outer Plane (Necrotic, Minor Illusion)', 'Evil Outer Plane (Necrotic, Chill Touch)', 'Good Outer Plane (Radiant, Sacred Flame)', 'Lawful Outer Plane (Radiant, Guidance)', 'The Outlands (Psychic, Mage Hand)'], 'astral plane (psychic, message)' : { name : "Scion of the Outer Planes (Astral Plane)", description : "I am adept at navigating planar pathways and the strange realities of the outer planes. My connection to the astral plane gives me resistance to psychic damage and I know the Message cantrip, which I can cast without material components. I can choose Int, Wis, or Cha as my spellcasting ability for this.", spellcastingAbility : [4,5,6], allowUpCasting : true, spellcastingBonus : [{ name : "Astral Plane", spell : ["message"], selection : ["message"], firstCol : "atwill" }], dmgres : ["Psychic"], spellChanges : { "message" : { components : "V,S", compMaterial : "", changes : "Using Scion of the Outer Planes, I can cast Message without material components." } } }, 'chaotic outer plane (necrotic, minor illusion)' : { name : "Scion of the Outer Planes (Chaotic Outer Plane)", description : "I am adept at navigating planar pathways and the strange realities of the outer planes. My connection to a chaotic outer plane gives me resistance to necrotic damage and I know the Minor Illusion cantrip, which requires no material components. I can choose Int, Wis, or Cha as my spellcasting ability for this.", spellcastingAbility : [4,5,6], allowUpCasting : true, spellcastingBonus : [{ name : "Chaotic Outer Plane", spells : ["minor illusion"], selection : ["minor illusion"], firstCol : "atwill" }], dmgres : ["Necrotic"], spellChanges : { "minor illusion" : { components : "S", compMaterial : "", changes : "Using Scion of the Outer Planes, I can cast Minor Illusion without material components." } } }, 'evil outer plane (necrotic, chill touch)' : { name : "Scion of the Outer Planes (Evil Outer Plane)", description : "I am adept at navigating planar pathways and the strange realities of the outer planes. I'm infused with or have ancestry from an evil outer plane. This connection gives me resistance to necrotic damage and I know the Chill Touch cantrip. I can choose Int, Wis, or Cha as my spellcasting ability for this.", spellcastingAbility : [4,5,6], allowUpCasting : true, spellcastingBonus : [{ name : "Evil Outer Plane", spells : ["chill touch"], selection : ["chill touch"], firstCol : "atwill" }], dmgres : ["Necrotic"] }, 'good outer plane (radiant, sacred flame)' : { name : "Scion of the Outer Planes (Good Outer Plane)", description : "I am adept at navigating planar pathways and the strange realities of the outer planes. I'm infused with or have ancestry from an good outer plane. This connection gives me resistance to radiant damage and I know the Sacred Flame cantrip. I can choose Int, Wis, or Cha as my spellcasting ability for this.", spellcastingAbility : [4,5,6], allowUpCasting : true, spellcastingBonus : [{ name : "Good Outer Plane", spells : ["sacred flame"], selection : ["sacred flame"], firstCol : "atwill" }], dmgres : ["Radiant"] }, 'lawful outer plane (radiant, guidance)' : { name : "Scion of the Outer Planes (Lawful Outer Plane)", description : "I am adept at navigating planar pathways and the strange realities of the outer planes. I'm infused with or have ancestry from an lawful outer plane. This connection gives me resistance to radiant damage and I know the Guidance cantrip. I can choose Int, Wis, or Cha as my spellcasting ability for this.", spellcastingAbility : [4,5,6], allowUpCasting : true, spellcastingBonus : [{ name : "Lawful Outer Plane", spells : ["guidance"], selection : ["guidance"], firstCol : "atwill" }], dmgres : ["Radiant"] }, 'the outlands (psychic, mage hand)' : { name : "Scion of the Outer Planes (The Outlands)", description : "I am adept at navigating planar pathways and the strange realities of the outer planes. I'm infused with or have ancestry from a plane of the outlands. This gives me resistance to psychic damage and I know the Mage Hand cantrip. I can choose Int, Wis, or Cha as my spellcasting ability for this.", spellcastingAbility : [4,5,6], allowUpCasting : true, spellcastingBonus : [{ name : "The Outlands", spells : ["mage hand"], selection : ["mage hand"], firstCol : "atwill" }], dmgres : ["Psychic"] } }; FeatsList["agent of order-ua"] = { name : "Agent of Order", source : [["UA:WotM", 6]], description : "Once per turn when I damage a creature I see within 60 ft, I can deal +1d8 force damage to it, and it must succeed on a Wis save (DC 8 + Prof Bonus + the modifier of the ability score increased by this feat) or be restrained until my next turn starts. I can do this a number of times equal to my Prof Bonus per long rest.", descriptionFull : "You can channel cosmic forces of order that lock the multiverse into patterns. Your actions are your own to choose, but these forces grant you the following benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase an ability score of your choice by 1, to a maximum of 20."+ "\n " + toUni("Stasis Strike") + ". Once per turn when you damage a creature you can see within 60 feet of yourself, you can deal an extra 1d8 force damage to the target, and it must succeed on a Wisdom saving throw (DC equal to 8 + your proficiency bonus + the modifier of the ability score increased by this feat) or be restrained by spectral bindings until the start of your next turn. These bindings manifest as chains, gears, encasing stone, or some other symbol of stasis. You can use this benefit a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th-level, Scion of the Outer Planes (Lawful Outer Plane) feat", prereqeval : function(v) { var iParentFeat = CurrentFeats.known.indexOf("scion of the outer planes-ua"); return v.characterLevel >= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'lawful outer plane (radiant, guidance)'; }, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", choices : ["Strength", "Dexterity", "Constitution", "Intelligence", "Wisdom", "Charisma"], "strength" : { calculate : "event.value = 'Once per turn when I damage a creature I see within 60 ft, I can deal +1d8 force damage to it, and it must succeed on a Wis save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Str Mod'))) + ' (8 + Prof Bonus + Str mod) or be restrained until my next turn starts. I can do this a number of times equal to my Prof Bonus per long rest. [+1 Strength]';", scores : [1, 0, 0, 0, 0, 0] }, "dexterity" : { calculate : "event.value = 'Once per turn when I damage a creature I see within 60 ft, I can deal +1d8 force damage to it, and it must succeed on a Wis save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Dex Mod'))) + ' (8 + Prof Bonus + Dex mod) or be restrained until my next turn starts. I can do this a number of times equal to my Prof Bonus per long rest. [+1 Dexterity]';", scores : [0, 1, 0, 0, 0, 0] }, "constitution" : { calculate : "event.value = 'Once per turn when I damage a creature I see within 60 ft, I can deal +1d8 force damage to it, and it must succeed on a Wis save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Con Mod'))) + ' (8 + Prof Bonus + Con mod) or be restrained until my next turn starts. I can do this a number of times equal to my Prof Bonus per long rest. [+1 Constitution]';", scores : [0, 0, 1, 0, 0, 0] }, "intelligence" : { calculate : "event.value = 'Once per turn when I damage a creature I see within 60 ft, I can deal +1d8 force damage to it, and it must succeed on a Wis save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Int Mod'))) + ' (8 + Prof Bonus + Int mod) or be restrained until my next turn starts. I can do this a number of times equal to my Prof Bonus per long rest. [+1 Intelligence]';", scores : [0, 0, 0, 1, 0, 0] }, "wisdom" : { calculate : "event.value = 'Once per turn when I damage a creature I see within 60 ft, I can deal +1d8 force damage to it, and it must succeed on a Wis save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Wis Mod'))) + ' (8 + Prof Bonus + Wis mod) or be restrained until my next turn starts. I can do this a number of times equal to my Prof Bonus per long rest. [+1 Wisdom]';", scores : [0, 0, 0, 0, 1, 0] }, "charisma" : { calculate : "event.value = 'Once per turn when I damage a creature I see within 60 ft, I can deal +1d8 force damage to it, and it must succeed on a Wis save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Cha Mod'))) + ' (8 + Prof Bonus + Cha mod) or be restrained until my next turn starts. I can do this a number of times equal to my Prof Bonus per long rest. [+1 Charisma]';", scores : [0, 0, 0, 0, 0, 1] } }; FeatsList["baleful scion-ua"] = { name : "Baleful Scion", source : [["UA:WotM", 6]], description : "Once per turn, when I hit a creature with a melee weapon attack, I can also deal 1d6 + my Proficiency Bonus necrotic damage to it. I then regain a number of hit points equal to this necrotic damage dealt. I can do this a number of times equal to my Proficiency Bonus per long rest. [+1 to any one ability score]", descriptionFull : "You can channel cosmic forces of evil that cause pain but invigorate your being. You can choose your own actions despite this malign connection. You gain the following benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase an ability score of your choice by 1, to a maximum of 20."+ "\n " + toUni("Life-Draining Grasp") + ". Once per turn, when you hit a creature with a melee weapon attack, you can also deal necrotic damage to it. The damage equals 1d6 + your proficiency bonus, and you regain a number of hit points equal to this necrotic damage dealt. You can use this feature a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th-level, Scion of the Outer Planes (Evil Outer Plane) feat", prereqeval : function(v) { var iParentFeat = CurrentFeats.known.indexOf("scion of the outer planes-ua"); return v.characterLevel >= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'evil outer plane (necrotic, chill touch)'; }, scorestxt : "+1 to one ability score of your choice", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }; FeatsList["cohort of chaos-ua"] = { name : "Cohort of Chaos", source : [["UA:WotM", 6]], description : "When I roll a 1 or a 20 on an attack roll or save, a the magic of chaos flares up and I roll on the Chaotic Flare table to determine what happens (see notes for table). As a bonus action, my Proficiency Bonus per long rest, I can force a flare to happen. [+1 to any one ability score]", descriptionFull : "You can channel the cosmic forces of chaos that drive the multiverse toward both freedom and disarray. Your actions are still yours to choose, but you gain these benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase an ability score of your choice by 1, to a maximum of 20."+ "\n " + toUni("Chaotic Flare") + ". When you roll a 1 or a 20 on an attack roll or a saving throw, the magic of chaos flows through you. Roll on the table below to determine what happens. A flare lasts until the end of your next turn, and a new flare can't occur until after the first flare ends."+ toUni("\n\nd4\tFlare")+ "\n 1\tDisruption Field: Waves of energy ripple in a 10-foot sphere centered on you. Every creature other than you that starts its turn in that area, or that moves into that area for the first time on a turn, takes 1d8 force damage."+ "\n 2\tBattle Fury: A creature of your choice that you can see is filled with reckless fury. The creature has advantage on attack rolls and disadvantage on ability checks."+ "\n 3\tUnbound: When you move, you can use some or all of your walking speed to teleport once, along with any equipment you're wearing or carrying, up to the distance used to an unoccupied space that you can see."+ "\n 4\tWailing Winds: Howling winds swirl around you in a 60-foot radius. You and any creature in that radius has disadvantage on Wisdom saving throws."+ "\n\n You can also forcibly release a chaotic flare as a bonus action, rolling on the table as normal to determine the effects. You can use this bonus action a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th-level, Scion of the Outer Planes (Chaotic Outer Plane) feat", prereqeval : function(v) { var iParentFeat = CurrentFeats.known.indexOf("scion of the outer planes-ua"); return v.characterLevel >= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'chaotic outer plane (necrotic, minor illusion)'; }, scorestxt : "+1 to one ability score of your choice", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", additional : "force flare", action : [["bonus action", " (force flare)"]], toNotesPage : [{ name : "Chaotic Flare Table", note : [ "When I roll a 1 or a 20 on an attack roll or a saving throw, the magic of chaos flows through me. I roll on the table below to determine what happens. A flare lasts until the end of my next turn, and a new flare can't occur until after the first flare ends.", "As a bonus action, I can forcibly release a chaotic flare, rolling on the table as normal to determine the effects. I can use this bonus action a number of times equal to my proficiency bonus, and I regain all expended uses when you finish a long rest.", "\n d4 Flare", "1 Disruption Field: Waves of energy ripple in a 10-ft sphere centered on me. Every creature other than me that starts its turn in that area, or that moves into that area for the first time on a turn, takes 1d8 force damage.", "2 Battle Fury: A creature of my choice that I can see is filled with reckless fury. The creature has advantage on attack rolls and disadvantage on ability checks.", "3 Unbound: When I move, I can use some or all of my walking speed to teleport once, along with any equipment I'm wearing or carrying, up to the distance used to an unoccupied space that I can see.", "4 Wailing Winds: Howling winds swirl around me in a 60-ft radius. I and any creature in that radius have disadvantage on Wisdom saving throws." ] }] }; FeatsList["outlands envoy-ua"] = { name : "Outlands Envoy", source : [["UA:WotM", 7]], description : "I can cast Misty Step and Tongues each once per long rest without requiring a spell slot or material components. I can also cast them using a spell slot as normal. My spellcasting ability for these spells is the same as the one for the Scion of the Outer Planes feat. [+1 to any one ability score]", descriptionFull : "You have spent significant time in Sigil or elsewhere in the Outlands, the crossroads of the multiverse. Being steeped in converging planar energies grants you these benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase an ability score of your choice by 1, to a maximum of 20."+ "\n " + toUni("Crossroads Emissary") + ". You learn the misty step and tongues spells. You can cast each spell once using this feat without a spell slot, and you must finish a long rest before you can cast that spell in this way again. When you cast tongues using this feat, you require no material components. You can also cast these spells using spell slots you have of the appropriate level. The spell's spellcasting ability is the one chosen when you gained the Scion of the Outer Planes feat.", prerequisite : "4th-level, Scion of the Outer Planes feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("scion of the outer planes-ua") !== -1; }, scorestxt : "+1 to one ability score of your choice", spellcastingAbility : "scion of the outer planes-ua", spellcastingBonus : [{ name : "Crossroads Emissary", spells : ["misty step", "tongues"], selection : ["misty step", "tongues"], firstCol : "oncelr+markedbox", times : 2 }], spellChanges : { "tongues" : { components : SpellsList.tongues.components.replace("M", "M*"), compMaterial : "When using a spell slot: "+SpellsList.tongues.compMaterial, changes : "Using Outlands Envoy, I can cast Tongues once per long rest without expending a spell slot or requiring material components." } } }; FeatsList["planar wanderer-ua"] = { name : "Planar Wanderer", source : [["UA:WotM", 7]], description : "After each long rest, I can gain acid, cold, or fire resistance, that lasts until my next long rest ends. I know the direction to the last portal I used while on the same plane as it. As an action, I can try to open or close a portal (portal cracker). As an action once per long rest, I can detect portals (portal sense). See notes.", descriptionFull : "You can draw on the forces of the multiverse to survive cosmic extremes and to traverse its infinite realms. You gain these benefits:"+ "\n " + toUni("Planar Adaptation") + ". When you finish a long rest, you gain resistance to either acid, cold, or fire damage (your choice) until you finish your next long rest."+ "\n " + toUni("Portal Cracker") + ". Your experience with portals allows you to operate them without the proper portal key. As an action, you can concentrate on a portal you're aware of that is within 5 feet of you and make a DC 20 Wisdom (Survival) check. On a failure, you take 3d8 force damage and you can't use this feature on that portal again until you finish a long rest. On a success, you can force the portal open or closed for 1 hour. For that duration, a portal closed in this way doesn't respond to its portal key unless a creature employing the key succeeds on a DC 20 Intelligence (Arcana) check as an action."+ "\n " + toUni("Portal Sense") + ". You know the direction to the last planar portal you used while you and the portal are on the same plane. Moreover, as an action, you can detect the location of any portals within 30 feet of you that aren't behind total cover. Once you detect a portal with this action, you can't use the action again until you finish a long rest.", prerequisite : "4th-level, Scion of the Outer Planes feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("scion of the outer planes-ua") !== -1; }, dmgres : ["Acid/Cold/Fire"], action : [["action", " (Portal Cracker)"], ["action", " (Portal Sense)"]], usages : 1, recovery : "long rest", additional : "Portal Sense", toNotesPage : [{ name : "Portal Cracker", note : [ "My experience with portals allows me to operate them without the proper portal key.", "As an action, I can concentrate on a portal I'm aware of that is within 5 ft of me and make a DC 20 Wisdom (Survival) check.", "On a failure, I take 3d8 force damage and I can't use this feature on that portal again until I finish a long rest.", "On a success, I can force the portal open or closed for 1 hour. For that duration, a portal closed in this way doesn't respond to its portal key unless a creature employing the key succeeds on a DC 20 Intelligence (Arcana) check as an action." ] }, { name : "Portal Sense", additional : "1\xD7 per long rest", note : [ "I know the direction to the last planar portal I used while I and the portal are on the same plane.", "As an action, I can detect the location of any portals within 30 ft of me that aren't behind total cover.", "Once I detect a portal with this action, I can't use the action again until I finish a long rest." ], amendTo : "Portal Cracker" }] }; FeatsList["righteous heritor-ua"] = { name : "Righteous Heritor", source : [["UA:WotM", 8]], description : "As a reaction when I or a creature I can see within 30 ft takes damage, I can reduce the damage taken by 1d10 + my Proficiency Bonus. I can do this a number of times equal to my Proficiency Bonus per long rest. [+1 to any one ability score]", descriptionFull : "You can channel the cosmic forces of good that foster serenity and fellowship. You are still free to choose your own actions, but gain these benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase an ability score of your choice by 1, to a maximum of 20."+ "\n " + toUni("Soothe Pain") + ". When you or a creature you can see within 30 feet of you takes damage, you can use your reaction to dull its suffering and reduce the damage it takes by 1d10 + your proficiency bonus. You can use this benefit a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th-level, Scion of the Outer Planes (Good Outer Plane) feat", prereqeval : function(v) { var iParentFeat = CurrentFeats.known.indexOf("scion of the outer planes-ua"); return v.characterLevel >= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'good outer plane (radiant, sacred flame)'; }, scorestxt : "+1 to one ability score of your choice", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", action : [["reaction", ""]] }; // Strike of the Giants feat tree FeatsList["strike of the giants-ua"] = { name : "Strike of the Giants", source : [["UA:WotM", 9]], description : "As a bonus action, I can call on the power of my giant magic to imbue my attacks with additional power. The next time I hit a target with a melee or thrown weapon attack within the next minute, the attack has an additional effect depending on the origin of my giant magic (hill, stone, frost, fire, cloud or storm).", descriptionFull : "You have absorbed primeval magic that gives you an echo of the might of giants. Choose one of the kinds of giants listed below. As a bonus action, you can call on the power of your giant magic to imbue your attacks with additional power. The next time you hit a target with a melee or thrown weapon attack within the next minute, the attack has an additional effect depending on the origin of your giant magic:"+ desc([ toUni("Hill Giant") + ". The target takes an extra 1d6 damage of the weapon's type. If the target is a creature, it must succeed on a Strength saving throw or be knocked prone.", toUni("Stone Giant") + ". The target takes an extra 1d6 force damage. If the target is a creature, it must succeed on a Strength saving throw or be pushed 10 feet away from you in a straight line.", toUni("Frost Giant") + ". The target takes an extra 1d6 cold damage. If the target is a creature, it must succeed on a Constitution saving throw, or its speed is reduced to 0 until the start of your next turn.", toUni("Fire Giant") + ". The target takes an extra 1d8 fire damage.", toUni("Cloud Giant") + ". The target takes an extra 1d4 thunder damage. If the target is a creature, it must succeed on a Wisdom saving throw, or you become invisible to it until the start of your next turn.", toUni("Storm Giant") + ". The target takes an extra 1d6 lightning damage. If the target is a creature, it must succeed on a Constitution saving throw, or it has disadvantage on attack rolls until the start of your next turn.\n", "The saving throw DC for these effects equals 8 + your proficiency bonus + your Strength or Constitution modifier.", "You can use this bonus action a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest." ]), usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", action : [["bonus action", ""]], choices : ["Hill Giant", "Stone Giant", "Frost Giant", "Fire Giant", "Cloud Giant", "Storm Giant"], "hill giant" : { calculate : "event.value = 'As a bonus action my Prof Bonus per long rest, I can call on the might of hill giants. The next time I hit with a melee or thrown weapon attack within the next minute, it deals +1d6 damage and if the target is a creature, it must make a Strength save DC ' + (8 + Number(How('Proficiency Bonus')) + Math.max(Number(What('Str Mod')), Number(What('Con Mod')))) + ' (8 + Prof Bonus + Str/Con mod) or be knocked prone.';" }, "stone giant" : { calculate : "event.value = 'As a bonus action my Prof Bonus per long rest, I can call on the might of stone giants. My next hit in the next minute with a melee or thrown weapon attack deals +1d6 force damage and the target must make a Strength save DC ' + (8 + Number(How('Proficiency Bonus')) + Math.max(Number(What('Str Mod')), Number(What('Con Mod')))) + ' (8 + Prof Bonus + Str/Con mod) or be pushed 10 ft away from me in a straight line.';" }, "frost giant" : { calculate : "event.value = 'As a bonus action my Prof Bonus per long rest, I can call on the might of frost giants. The next hit with my melee or thrown weapon attack within 1 minute deals +1d6 cold damage, and if the target is a creature, it must make a Con save DC ' + (8 + Number(How('Proficiency Bonus')) + Math.max(Number(What('Str Mod')), Number(What('Con Mod')))) + ' (8 + Prof Bonus + Str/Con mod) or its speed is 0 until my next turn starts.';" }, "fire giant" : { description : "I have absorbed primeval magic that gives me an echo of the might of fire giants. As a bonus action, I can call on this power and the next time I hit a target with a melee or thrown weapon attack within the next minute, that attack deals +1d8 fire damage. I can do this my Proficiency Bonus per long rest." }, "cloud giant" : { calculate : "event.value = 'As a bonus action my Prof Bonus per long rest, I can call on the might of cloud giants. My next hit within 1 minute with a melee or thrown weapon attack deals +1d4 thunder damage, and the target must make a Wisdom save DC ' + (8 + Number(How('Proficiency Bonus')) + Math.max(Number(What('Str Mod')), Number(What('Con Mod')))) + ' (8 + Prof Bonus + Str/Con mod) or I become invisible to it until my next turn starts.';" }, "storm giant" : { calculate : "event.value = 'As a bonus action my Prof Bonus per long rest, I can call on the might of storm giants. My next hit within 1 minute with a melee or thrown weapon attack deals +1d6 lightning damage, and the target must make a Con save DC ' + (8 + Number(How('Proficiency Bonus')) + Math.max(Number(What('Str Mod')), Number(What('Con Mod')))) + ' (8 + Prof Bonus + Str/Con mod) or it has disadv. on attack rolls until my next turn starts.';" } }; FeatsList["ember of the fire giant-ua2"] = { name : "Fury of the Fire Giant", source : [["UA:WotM", 7]], description : "I have fire resistance. My Prof Bonus per long rest, I can replace one attack of an Attack action on my turn with Searing Ignition: Chosen creatures I can see within 15 ft take 1d8+Prof Bonus fire damage & are blinded until my next turn starts. Dex save (8 + Prof B. + Str/Con/Wis mod) for half damage & not blinded.", descriptionFull : "You've manifested the fiery combat emblematic of fire giants, granting you the following benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase your Strength, Constitution, or Wisdom score by 1, to a maximum of 20."+ "\n " + toUni("Born of Flame") + ". You have resistance to fire damage."+ "\n " + toUni("Searing Ignition") + ". When you take the Attack action on your turn, you can replace a single attack with a magical burst of flame. Each creature of your choice within 15 feet of you that can see you must make a Dexterity saving throw (DC equals 8 + your proficiency bonus + the modifier of the ability increased by this feat). On a failed save, a creature takes fire damage equal to 1d8 + your proficiency bonus, and it is blinded until the start of your next turn. On a successful save, the creature takes half as much damage and isn't blinded. You can use your Searing Ignition a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th-level, Strike of the Giants (Fire Giant) feat", prereqeval : function(v) { var iParentFeat = CurrentFeats.known.indexOf("strike of the giants-ua"); return v.characterLevel >= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'fire giant'; }, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", dmgres : ["Fire"], choices : ["Strength", "Constitution", "Wisdom"], "strength" : { calculate : "event.value = 'I have fire resistance. My Prof Bonus per long rest, I can replace one attack of an Attack action on my turn with Searing Ignition: Chosen creatures I can see within 15 ft take 1d8+' + How('Proficiency Bonus') + ' (Prof B.) fire damage \u0026 are blinded until my next turn starts. Dex save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Str Mod'))) + ' (8 + Prof B. + Str mod) for half damage \u0026 not blinded. [+1 Str]';", scores : [1, 0, 0, 0, 0, 0], weaponOptions : [{ regExpSearch : /^(?=.*searing)(?=.*ignition).*$/i, name : "Searing Ignition", source : [["UA:WotM", 7]], ability : 1, type : "Spell", damage : [1, 8, "fire"], range : "15-ft radius", description : "Hits all of my choice in range; Dex save for half damage; Failed - blinded until my next turn starts", dc : true, abilitytodamage : false, modifiers : ["", "Prof"], selectNow : true }] }, "constitution" : { calculate : "event.value = 'I have fire resistance. My Prof Bonus per long rest, I can replace one attack of an Attack action on my turn with Searing Ignition: Chosen creatures I can see within 15 ft take 1d8+' + How('Proficiency Bonus') + ' (Prof B.) fire damage \u0026 are blinded until my next turn starts. Dex save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Con Mod'))) + ' (8 + Prof B.+ Con mod) for half damage \u0026 not blinded. [+1 Con]';", scores : [0, 0, 1, 0, 0, 0], weaponOptions : [{ regExpSearch : /^(?=.*searing)(?=.*ignition).*$/i, name : "Searing Ignition", source : [["UA:WotM", 7]], ability : 3, type : "Spell", damage : [1, 8, "fire"], range : "15-ft radius", description : "Hits all of my choice in range; Dex save for half damage; Failed - blinded until my next turn starts", dc : true, abilitytodamage : false, modifiers : ["", "Prof"], selectNow : true }] }, "wisdom" : { calculate : "event.value = 'I have fire resistance. My Prof Bonus per long rest, I can replace one attack of an Attack action on my turn with Searing Ignition: Chosen creatures I can see within 15 ft take 1d8+' + How('Proficiency Bonus') + ' (Prof B.) fire damage \u0026 are blinded until my next turn starts. Dex save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Wis Mod'))) + ' (8 + Prof B. + Wis mod) for half damage \u0026 not blinded. [+1 Wis]';", scores : [0, 0, 0, 0, 1, 0], weaponOptions : [{ regExpSearch : /^(?=.*searing)(?=.*ignition).*$/i, name : "Searing Ignition", source : [["UA:WotM", 7]], ability : 5, type : "Spell", damage : [1, 8, "fire"], range : "15-ft radius", description : "Hits all of my choice in range; Dex save for half damage; Failed - blinded until my next turn starts", dc : true, abilitytodamage : false, modifiers : ["", "Prof"], selectNow : true }] } }; FeatsList["fury of the frost giant-ua2"] = { name : "Fury of the Frost Giant", source : [["UA:WotM", 7]], description : "I have cold resistance. As a reaction my Prof Bonus per long rest, when a creature I can see within 30 ft hits and deals damage with an attack, I can have it make a Con save (DC 8 + Prof B. + Str/Con/Wis mod) or take 1d8 + Prof Bonus cold damage and have its speed reduced by half until my next turn ends.", descriptionFull : "You've manifested the icy might emblematic of frost giants, granting you the following benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase your Strength, Constitution, or Wisdom score by 1, to a maximum of 20."+ "\n " + toUni("Born of Ice") + ". You have resistance to cold damage."+ "\n " + toUni("Frigid Retaliation") + ". Immediately after a creature you can see within 30 feet of you hits you with an attack roll and deals damage, you can use your reaction to retaliate with a conjured blast of ice. The creature must make a Constitution saving throw (DC equals 8 + your proficiency bonus + the modifier of the ability increased by this feat). On a failed save, it takes 1d8 + your proficiency bonus cold damage, and its speed is halved until the end of its next turn. You can use this reaction a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th-level, Strike of the Giants (Frost Giant) feat", prereqeval : function(v) { var iParentFeat = CurrentFeats.known.indexOf("strike of the giants-ua"); return v.characterLevel >= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'frost giant'; }, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", dmgres : ["Cold"], action : [["reaction", ""]], choices : ["Strength", "Constitution", "Wisdom"], "strength" : { calculate : "event.value = 'I have cold resistance. As a reaction my Prof Bonus per long rest, when a creature I can see within 30 ft hits and deals damage with an attack, I can have it make a Constitution save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Str Mod'))) + ' (8 + Prof B. + Str mod) or take 1d8+' + How('Proficiency Bonus') + ' (Prof Bonus) cold damage and have its speed reduced by half until my next turn ends. [+1 Str]';", scores : [1, 0, 0, 0, 0, 0] }, "constitution" : { calculate : "event.value = 'I have cold resistance. As a reaction my Prof Bonus per long rest, when a creature I can see within 30 ft hits and deals damage with an attack, I can have it make a Constitution save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Con Mod'))) + ' (8 + Prof B. + Con mod) or take 1d8+' + How('Proficiency Bonus') + ' (Prof B.) cold damage and have its speed reduced by half until my next turn ends. [+1 Con]';", scores : [0, 0, 1, 0, 0, 0] }, "wisdom" : { calculate : "event.value = 'I have cold resistance. As a reaction my Prof Bonus per long rest, when a creature I can see within 30 ft hits and deals damage with an attack, I can have it make a Constitution save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Wis Mod'))) + ' (8 + Prof B. + Wis mod) or take 1d8+' + How('Proficiency Bonus') + ' (Prof Bonus) cold damage and have its speed reduced by half until my next turn ends. [+1 Wis]';", scores : [0, 0, 0, 0, 1, 0] } }; FeatsList["guile of the cloud giant-ua2"] = { name : "Guile of the Cloud Giant", source : [["UA:WotM", 7]], description : "As a reaction when a creature I can see hits me with an attack roll, I can give myself resistance to that attack's damage. I then teleport to an unoccupied space that I can see within 30 ft. I can do this a number of times equal to half my Proficiency Bonus (rounded up) per long rest. [+1 Dex, Con, or Cha]", descriptionFull : "You've manifested the airy speech and magic emblematic of cloud giants, granting you the following benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase your Dexterity, Constitution, or Charisma score by 1, to a maximum of 20."+ "\n " + toUni("Cloudy Escape") + ". When a creature you can see hits you with an attack roll, you can use your reaction to give yourself resistance to that attack's damage. You then teleport to an unoccupied space that you can see within 30 feet of yourself. You can use this reaction a number of times equal to half your proficiency bonus (rounded up), and you regain all expended uses when you finish a long rest.", prerequisite : "4th-level, Strike of the Giants (Cloud Giant) feat", prereqeval : function(v) { var iParentFeat = CurrentFeats.known.indexOf("strike of the giants-ua"); return v.characterLevel >= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'cloud giant'; }, scorestxt : "+1 Dexterity, Constitution, or Charisma", usages : "Half proficiency bonus (rounded up) per ", usagescalc : "event.value = Math.ceil(Number(How('Proficiency Bonus'))/2);", recovery : "long rest", action : [["reaction", ""]] }; FeatsList["keenness of the stone giant-ua2"] = { name : "Keenness of the Stone Giant", source : [["UA:WotM", 8]], description : "I gain +60 ft darkvision. As a bonus action my Prof Bonus per long rest, I can imbue a rock with magic until I finish a long rest or hit with it. I can use it as a proficient thrown weapon, 60/180 ft, 1d10 bludgeoning damage. Target hit must make a Str save DC 10 (8 + Prof B. + Str/Con/Wis mod) or be knocked prone.", descriptionFull : "You've manifested the physical talents emblematic of stone giants, granting you the following benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase your Strength, Constitution, or Wisdom score by 1, to a maximum of 20."+ "\n " + toUni("Stone Throw") + ". As a bonus action, you can touch a rock that can fit in the palm of your hand and imbue it with magic. While the rock is imbued with magic and you are wielding it, the rock is a magic ranged weapon with which you're proficient, and it has the thrown property with a normal range of 60 feet and a long range of 180 feet. On a hit, the rock deals 1d10 bludgeoning damage, and if the target is a creature, it must succeed on a Strength saving throw (DC equals 8 + your proficiency bonus + the modifier of the ability increased by this feat) or be knocked prone. The magic remains in the rock until you hit with it or finish a long rest. You can imbue a number of rocks equal to your proficiency bonus with this bonus action, and you regain all expended uses when you finish a long rest."+ "\n " + toUni("Cavernous Sight") + ". You gain darkvision out to a range of 60 feet. If you already have darkvision from another source, its range increases by 60 feet.", prerequisite : "4th-level, Strike of the Giants (Stone Giant) feat", prereqeval : function(v) { var iParentFeat = CurrentFeats.known.indexOf("strike of the giants-ua"); return v.characterLevel >= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'stone giant'; }, vision : [["Darkvision", "fixed 60"], ["Darkvision", "+60"]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", additional : "Imbue Stone", action : [["bonus action", " (Imbue Stone)"]], choices : ["Strength", "Constitution", "Wisdom"], "strength" : { calculate : "event.value = 'I gain +60 ft darkvision. As a bonus action my Prof Bonus per long rest, I can imbue a rock with magic until I finish a long rest or hit with it. I can use it as a proficient thrown weapon, ' + (What('Unit System') === 'metric' ? '18/54 m' : '60/180 ft') + ', 1d10 bludgeoning damage. Target hit must make a Str save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Str Mod'))) + ' (8 + Prof B. + Str mod) or be knocked prone. [+1 Str]';", scores : [1, 0, 0, 0, 0, 0], weaponOptions : [{ regExpSearch : /^(?=.*stone)(?=.*giant)(?=.*throw).*$/i, name : "Stone Giant's Stone Throw", source : [["UA:WotM", 8]], ability : 1, type : "AlwaysProf", damage : [1, 10, "bludgeoning"], range : "60/180 ft", description : "Thrown; On hit: Str save (DC 8 + To Hit) or knocked prone; Counts as magical", abilitytodamage : true, isMagicWeapon : true, selectNow : true }] }, "constitution" : { calculate : "event.value = 'I gain +60 ft darkvision. As a bonus action my Prof Bonus per long rest, I can imbue a rock with magic until I finish a long rest or hit with it. I can use it as a proficient thrown weapon, ' + (What('Unit System') === 'metric' ? '18/54 m' : '60/180 ft') + ', 1d10 bludgeoning damage. Target hit must make a Str save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Con Mod'))) + ' (8 + Prof B. + Con mod) or be knocked prone. [+1 Con]';", scores : [0, 0, 1, 0, 0, 0], weaponOptions : [{ regExpSearch : /^(?=.*stone)(?=.*giant)(?=.*throw).*$/i, name : "Stone Giant's Stone Throw", source : [["UA:WotM", 8]], ability : 3, type : "AlwaysProf", damage : [1, 10, "bludgeoning"], range : "60/180 ft", description : "Thrown; On hit: Str save (DC 8 + To Hit) or knocked prone; Counts as magical", abilitytodamage : true, selectNow : true }] }, "wisdom" : { calculate : "event.value = 'I gain +60 ft darkvision. As a bonus action my Prof Bonus per long rest, I can imbue a rock with magic until I finish a long rest or hit with it. I can use it as a proficient thrown weapon, ' + (What('Unit System') === 'metric' ? '18/54 m' : '60/180 ft') + ', 1d10 bludgeoning damage. Target hit must make a Str save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Wis Mod'))) + ' (8 + Prof B. + Wis mod) or be knocked prone. [+1 Wis]';", scores : [0, 0, 0, 0, 1, 0], weaponOptions : [{ regExpSearch : /^(?=.*stone)(?=.*giant)(?=.*throw).*$/i, name : "Stone Giant's Stone Throw", source : [["UA:WotM", 8]], ability : 5, type : "AlwaysProf", damage : [1, 10, "bludgeoning"], range : "60/180 ft", description : "Thrown; On hit: Str save (DC 8 + To Hit) or knocked prone; Counts as magical", abilitytodamage : true, selectNow : true }] } }; FeatsList["soul of the storm giant-ua2"] = { name : "Soul of the Storm Giant", source : [["UA:WotM", 9]], description : "As an action my Prof Bonus per long rest, I can give myself a 10-ft radius magical aura until my next turn starts. This imposes disadv. on attacks against me and when a creature starts its turn within, I can have it make a Str save (DC 8 + Prof Bonus + Int/Wis/Cha mod) or halve its speed until my next turn starts.", descriptionFull : "You've manifested divination abilities and tempest magic emblematic of storm giants, granting you the following benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase your Intelligence, Wisdom, or Charisma score by 1, to a maximum of 20."+ "\n " + toUni("Maelstrom Aura") + ". As a bonus action, you surround yourself in an aura of magical wind and lightning that extends 10 feet from you in every direction but not through total cover. The aura lasts until the start of your next turn or until you are incapacitated. While the aura is active, attack rolls against you have disadvantage, and whenever a creature starts its turn within the aura, you can force the creature to make a Strength saving throw (DC equals 8 + your proficiency bonus + the ability modifier of the score increased by this feat). On a failed save, the creature's speed is halved until the start of its next turn. You can use this bonus action a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th-level, Strike of the Giants (Storm Giant) feat", prereqeval : function(v) { var iParentFeat = CurrentFeats.known.indexOf("strike of the giants-ua"); return v.characterLevel >= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'storm giant'; }, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", action : [["action", ""]], choices : ["Intelligence", "Wisdom", "Charisma"], "intelligence" : { calculate : "event.value = 'As an action my Prof Bonus per long rest, I can give myself a 10-ft radius magical aura until my next turn starts. This imposes disadv. on attacks against me and when a creature starts its turn within, I can have it make a Str save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Int Mod'))) + ' (8 + Prof Bonus + Int mod) or halve its speed until my next turn starts. [+1 Int]';", scores : [0, 0, 0, 1, 0, 0] }, "wisdom" : { calculate : "event.value = 'As an action my Prof Bonus per long rest, I can give myself a 10-ft radius magical aura until my next turn starts. This imposes disadv. on attacks against me and when a creature starts its turn within, I can have it make a Str save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Wis Mod'))) + ' (8 + Prof Bonus + Wis mod) or halve its speed until my next turn starts. [+1 Wis]';", scores : [0, 0, 0, 0, 1, 0] }, "charisma" : { calculate : "event.value = 'As an action my Prof Bonus per long rest, I can give myself a 10-ft radius magical aura until my next turn starts. This imposes disadv. on attacks against me and when a creature starts its turn within, I can have it make a Str save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Cha Mod'))) + ' (8 + Prof Bonus + Cha mod) or halve its speed until my next turn starts. [+1 Cha]';", scores : [0, 0, 0, 0, 0, 1] } }; FeatsList["vigor of the hill giant-ua2"] = { name : "Vigor of the Hill Giant", source : [["UA:WotM", 10]], description : "When I'm subjected to an effect that would move me at least 5 ft or knock me prone, I can use my reaction to steady myself and stop this from happening. Whenever I eat food as part of a short rest and spend one or more HD to regain HP, I regain additional HP equal to my Con mod + my Proficiency Bonus. [+1 Con]", descriptionFull : "You've manifested the resilience emblematic of hill giants, granting you the following benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase your Constitution score by 1, to a maximum of 20."+ "\n " + toUni("Bulwark") + ". When you are subjected to an effect that would move you at least 5 feet or knock you prone, you can use your reaction to steady yourself. You are then neither moved nor knocked prone."+ "\n " + toUni("Iron Stomach") + ". Whenever you eat food as part of a short rest and spend one or more Hit Dice to regain hit points, you regain additional hit points equal to your Constitution modifier + your proficiency bonus.", prerequisite : "4th-level, Strike of the Giants (Hill Giant) feat", prereqeval : function(v) { var iParentFeat = CurrentFeats.known.indexOf("strike of the giants-ua"); return v.characterLevel >= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'hill giant'; }, scores : [0, 0, 1, 0, 0, 0], action : [["reaction", ""]] }; // Rune Carver Apprentice feat tree FeatsList["rune carver apprentice-ua2"] = { name : "Rune Carver Apprentice", source : [["UA:WotM", 8]], description : "I know Comprehend Languages and cast it once per long rest without a spell slot. I know two runes, which I can inscribe and use to cast their associated spell once per long rest without a spell slot or material components. I can also cast all three spells with spell slots as normal. See notes page.", descriptionFull : "You've begun studying the art of runecraft." + desc([ "You learn the comprehend languages spell. You can cast this spell without expending a spell slot, and you must finish a long rest before you can cast it in this way again. You can also cast this spell using any spell slots you have.", "You know two runes of your choice from the Rune Spells table. Whenever you finish a long rest, you can mark one nonmagical weapon, armor, piece of clothing, or other object you touch with a rune you know. You temporarily learn one 1st-level spell based on the rune you inscribed, as specified in the Rune Spells table, and you know the spell until you finish a long rest, when the rune fades.\n", toUni("Rune\t\tSpell"), "Death\t\tRay of sickness", "Dragon\t\tChromatic orb", "Enemy\t\tDisguise self", "Friend\t\tSpeak with animals", "Journey \tLongstrider", "King\t\tCommand", "Mountain\tEntangle", "Sacred\t\tSanctuary\n", "While you are wearing or carrying the rune-marked object, you can cast the spell associated with the chosen rune once without using a spell slot or material components, and you can also cast the spell using any spell slots you have.", "Your spellcasting ability for this feat is Intelligence, Wisdom, or Charisma (choose when you select this feat).", "Each time you gain a level, you can replace one of the runes you know with a different one from the Rune Spells table." ]), spellcastingAbility : [4,5,6], spellcastingBonus : [{ name : "Once per long rest", spells : ["comprehend languages"], selection : ["comprehend languages"], firstCol : "oncelr+markedbox" }, { name : "Select Rune Spell", spells : ["ray of sickness", "chromatic orb", "disguise self", "speak with animals", "longstrider", "command", "entangle", "sanctuary"], firstCol : "oncelr+markedbox", times : 2, allowUpCasting : true }], calcChanges : { spellAdd : [ function (spellKey, spellObj, spName, isDuplicate) { if (spName === "rune carver apprentice-ua2" && spellKey !== "comprehend languages") { spellObj.components = spellObj.components.replace(/M(\u0192)?/, "M*"); spellObj.description = spellObj.description.replace(/(\d+) ?gp/, "$1*gp"); spellObj.ritual = false; return true; } }, "If the rune spells that I know are inscribed on something in my possession, I can cast each once per long rest without without using a spell slot or material components, or I can cast them using spell slots as normal." ] }, toNotesPage : [{ name : "Features", note : [ "I know Comprehend Languages and can cast it without expending a spell slot once per long rest. I can also cast this spell using any spell slots I have.", "I know two runes of my choice from the list below. Whenever I finish a long rest, I can mark one nonmagical weapon, armor, piece of clothing, or other object I touch with a rune I know. I temporarily learn one 1st-level spell based on the rune I inscribed and I know the spell until I finish a long rest, when the rune fades.", "While I'm wearing or carrying the rune-marked object, I can cast its associated spell once per long rest without using a spell slot or material components. I can also cast the spell using any spell slots I have.", "My spellcasting ability for this is Intelligence, Wisdom, or Charisma (choose when selecting this feat).", "Each time I gain a level, I can replace one of the runes I know with a different one from the list.\n", "RUNE\t\tSPELL\t\tSCHOOL", "Death\t\tRay of Sickness\tNecromancy", "Dragon\t\tChromatic Orb\tEvocation", "Enemy\t\tDisguise Self \tIllusion", "Friend\t\tSpeak With Animals\tDivination", "Journey\t\tLongstrider\t\tTransmutation", "King\t\tCommand\t\tEnchantment", "Mountain\t\tEntangle\t\tConjuration", "Sacred\t\tSanctuary\t\tAbjuration" ] }] }; FeatsList["rune carver adept-ua2"] = { name : "Rune Carver Adept", source : [["UA:WotM", 8]], description : "My Prof Bonus per long rest, whenever I cast a spell of a school that one of my runes belongs to, I can grant a creature I can see within 30 ft a benefit: \u2022 +10 ft walking speed and its movement provokes no opportunity attacks until its turn ends, \u2022 my level in temp HP, or \u2022 adv. on its next attack until its turn ends.", descriptionFull : "Your ability to draw out power from runes has grown." + desc([ "Increase the ability score of the spellcasting ability chosen when you gained the Rune Carver Apprentice feat by 1, to a maximum of 20.", "Whenever you cast a spell from the Rune Spells table, or a spell of a school of magic associated with the spell you marked on an object from your Rune Carver Apprentice feat, you can invoke runic power, granting you one of these benefits of your choice:", toUni("Battle Runes") + ". Choose one creature you can see within 30 feet of yourself. Until the end of that creature's next turn, it has advantage on the next attack roll it makes.", toUni("Healing Runes") + ". Choose one creature you can see within 30 feet of yourself. That creature gains temporary hit points equal to your level.", toUni("Runic Winds") + ". Choose one creature you can see within 30 feet of yourself. Until the end of that creature's turn, its movement doesn't provoke opportunity attacks, and its walking speed increases by 10 feet.", "You can invoke runic power a number of times equal to your proficiency bonus, but no more than once per spell you cast. You regain all expended uses when you finish a long rest." ]), prerequisite : "4th-level, Rune Carver Apprentice feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("rune carver apprentice-ua2") !== -1; }, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", selfChoosing : function() { if (CurrentSpells["rune carver apprentice-ua2"] && !isNaN(CurrentSpells["rune carver apprentice-ua2"].ability)) { return AbilityScores.names[CurrentSpells["rune carver apprentice-ua2"].ability - 1].toLowerCase(); } }, choices : ["Intelligence", "Wisdom", "Charisma"], "intelligence" : { description : "My Prof Bonus per long rest, whenever I cast a spell of a school that one of my runes belongs to, I can grant a creature I can see within 30 ft a benefit: \u2022 +10 ft walking speed and its movement provokes no opportunity attacks until its turn ends, \u2022 my level in temp HP, or \u2022 adv. on its next attack until its turn ends. [+1 Int]';", scores : [0, 0, 0, 1, 0, 0], scorestxt : "+1 to the ability score of the spellcasting ability chosen for the Rune Carver Apprentice feat (Intelligence)" }, "wisdom" : { description : "My Prof Bonus per long rest, whenever I cast a spell of a school that one of my runes belongs to, I can grant a creature I can see within 30 ft a benefit: \u2022 +10 ft walking speed and its movement provokes no opportunity attacks until its turn ends, \u2022 my level in temp HP, or \u2022 adv. on its next attack until its turn ends. [+1 Wis]';", scores : [0, 0, 0, 0, 1, 0], scorestxt : "+1 to the ability score of the spellcasting ability chosen for the Rune Carver Apprentice feat (Wisdom)" }, "charisma" : { description : "My Prof Bonus per long rest, whenever I cast a spell of a school that one of my runes belongs to, I can grant a creature I can see within 30 ft a benefit: \u2022 +10 ft walking speed and its movement provokes no opportunity attacks until its turn ends, \u2022 my level in temp HP, or \u2022 adv. on its next attack until its turn ends. [+1 Cha]';", scores : [0, 0, 0, 0, 0, 1], scorestxt : "+1 to the ability score of the spellcasting ability chosen for the Rune Carver Apprentice feat (Charisma)" } }; // Scion of Elemental X FeatsList["scion of elemental air-ua"] = { name : "Scion of Elemental Air", source : [["UA:WotM", 8]], description : "I know the Minor Illusion cantrip (choice of Int, Wis, or Cha spellcasting ability). As a bonus action, I can gain a flying speed equal to my walking speed until my turn ends, but fall after this movement if I'm airborne and not held aloft by other means. I can do this bonus action my Proficiency Bonus per long rest.", descriptionFull : "You've been exposed to the primordial magic of the Elemental Plane of Air, granting you the following benefits:"+ "\n " + toUni("Elemental Magic") + ". You learn the minor illusion cantrip, using Intelligence, Wisdom, or Charisma as the spellcasting ability (choose when you select this feat)."+ "\n " + toUni("Wind's Glide") + ". You can use a bonus action to gain a flying speed equal to your walking speed until the end of your turn. If you are airborne at the end of your turn after using this movement and aren't held aloft by other means, you fall. You can use this bonus action a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", spellcastingAbility : [4,5,6], spellcastingBonus : [{ name : "Elemental Magic", spell : ["minor illusion"], selection : ["minor illusion"], firstCol : "atwill" }], action : [["bonus action", ""]] }; FeatsList["scion of elemental earth-ua"] = { name : "Scion of Elemental Earth", source : [["UA:WotM", 8]], description : "I know the Druidcraft cantrip (choice of Int, Wis, or Cha spellcasting ability). As a bonus action, I can conjure a bulwark of earth that provides half cover to me or a creature of my choice within 30 ft of myself, until the start of my next turn. I can create this bulwark my Proficiency Bonus per long rest.", descriptionFull : "You've been exposed to the primordial magic of the Elemental Plane of Earth, granting you the following benefits:"+ "\n " + toUni("Elemental Magic") + ". You learn the druidcraft cantrip, using Intelligence, Wisdom, or Charisma as the spellcasting ability (choose when you select this feat)."+ "\n " + toUni("Earthen Shield") + ". You can use a bonus action to conjure a bulwark of earth that provides half cover to you or a creature of your choice within 30 feet of yourself. The bulwark remains until the start of your next turn. You can create this bulwark a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", spellcastingAbility : [4,5,6], spellcastingBonus : [{ name : "Elemental Magic", spell : ["druidcraft"], selection : ["druidcraft"], firstCol : "atwill" }], action : [["bonus action", ""]] }; FeatsList["scion of elemental fire-ua"] = { name : "Scion of Elemental Fire", source : [["UA:WotM", 9]], description : "I know the Dancing Lights and Produce Flame cantrips. I can choose Int, Wis, or Cha as my spellcasting ability for this.. I can cast Produce Flame as normal, and I can also cast it as a bonus action a number of times equal to my Proficiency Bonus, regaining all expended uses when I finish a long rest.", descriptionFull : "You've been exposed to the primordial magic of the Elemental Plane of Fire, granting you the following benefits:"+ "\n " + toUni("Elemental Magic") + ". You learn the dancing lights cantrip, using Intelligence, Wisdom, or Charisma as the spellcasting ability (choose when you select this feat)."+ "\n " + toUni("Fervent Blaze") + ". You learn the produce flame cantrip, using the same spellcasting ability chosen for this feat's Elemental Magic benefit. You can cast produce flame as normal, and you can also cast it as a bonus action a number of times equal to your proficiency bonus, regaining all expended uses when you finish a long rest.", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", spellcastingAbility : [4,5,6], spellcastingBonus : [{ name : "Elemental Magic", spell : ["dancing lights"], selection : ["dancing lights"], firstCol : "atwill" }, { name : "Fervent Blaze", spell : ["produce flame"], selection : ["produce flame"] }, { name : "Fervent Blaze (bonus action)", spell : ["produce flame"], selection : ["produce flame"] }], calcChanges : { spellAdd : [ function (spellKey, spellObj, spName, isDuplicate) { if (spName === "scion of elemental fire-ua" && spellKey === "produce flame") { if (isDuplicate) { spellObj.firstCol = "SP"; spellObj.time = "1 bns"; return true; } else { spellObj.firstCol = "atwill"; } } }, "I can cast Produce Flame as a bonus action a number of times equal to my proficiency bonus, regaining all expended uses when I finish a long rest." ] } }; FeatsList["scion of elemental water-ua"] = { name : "Scion of Elemental Water", source : [["UA:WotM", 9]], description : "", descriptionFull : "You've been exposed to the primordial magic of the Elemental Plane of Water, granting you the following benefits:"+ "\n " + toUni("Elemental Magic") + ". You learn the thaumaturgy cantrip, using Intelligence, Wisdom, or Charisma as the spellcasting ability (choose when you select this feat)."+ "\n " + toUni("Wave Surge") + ". You can use a bonus action to create a forceful surge of water directed at a creature within 15 feet of you that you can see. The target must make a Strength saving throw; the DC for this save is equal to 8 + your proficiency bonus + the spellcasting ability modifier chosen for this feat, and a creature can choose to fail this saving throw. On a failure, the target is pushed up to 10 feet away from you or pulled up to 10 feet toward you (your choice). The water vanishes immediately after the creature succeeds or fails. You can create this effect a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", spellcastingBonus : [{ name : "Elemental Magic", spell : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : "atwill" }], action : [["bonus action", ""]], choices : ["Intelligence", "Wisdom", "Charisma"], "intelligence" : { calculate : "event.value = 'I know the Thaumaturgy cantrip using Int as spellcasting ability. As a bonus action my Proficiency Bonus per long rest, I can have a creature within 15 ft that I can see make a Str save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Int Mod'))) + ' (8 + Prof Bonus + Int mod) or be pushed away from me or pulled towards me for up to 10 ft (my choice). The target can opt to fail.';", spellcastingBonus : [{ name : "Elemental Magic", spell : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : "atwill" }], spellcastingAbility : 4 }, "wisdom" : { calculate : "event.value = 'I know the Thaumaturgy cantrip using Wis as spellcasting ability. As a bonus action my Proficiency Bonus per long rest, I can have a creature within 15 ft that I can see make a Str save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Wis Mod'))) + ' (8 + Prof Bonus + Wis mod) or be pushed away from me or pulled towards me for up to 10 ft (my choice). The target can opt to fail.';", spellcastingBonus : [{ name : "Elemental Magic", spell : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : "atwill" }], spellcastingAbility : 5 }, "charisma" : { calculate : "event.value = 'I know the Thaumaturgy cantrip using Cha as spellcasting ability. As a bonus action my Proficiency Bonus per long rest, I can have a creature within 15 ft that I can see make a Str save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Cha Mod'))) + ' (8 + Prof Bonus + Cha mod) or be pushed away from me or pulled towards me for up to 10 ft (my choice). The target can opt to fail.';", spellcastingBonus : [{ name : "Elemental Magic", spell : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : "atwill" }], spellcastingAbility : 6 } }; // Spells SpellsList["antagonize-ua"] = { name : "Antagonize", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["UA:WotM", 10]], level : 3, school : "Ench", time : "1 a", range : "30 ft", components : "V,S,M", compMaterial : "A playing card depicting a rogue", duration : "Instantaneous", save : "Wis", description : "1 crea save or 4d4+1d4/SL Psychic dmg & melee atk vs. chosen crea; if none in range, dis. on next atk", descriptionShorter : "1 crea save or 4d4+1d4/SL Psychic dmg & melee atk vs. chosen crea; if no in range, dis. next atk", descriptionFull : "You whisper magical words that antagonize one creature of your choice within range. The target must make a Wisdom saving throw. On a failed save, it takes 4d4 psychic damage and must immediately use its reaction, if available, to make a melee attack against another creature of your choice that you can see. If no other creature is within range, the target has disadvantage on the next attack roll it makes before the start of your next turn."+ AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d4 for each slot level above 4th." }; SpellsList["house of cards-ua"] = { name : "House of Cards", classes : ["artificer", "bard", "sorcerer", "wizard"], source : [["UA:WotM", 10]], level : 3, school : "Conj", time : "1 min", range : "Touch", components : "V,S,M\u0192", compMaterial : "A deck of cards", duration : "24 h", description : "30-ft high tower, lifts up; 3 floors, 10-ft sq top floor; 5\xD710 ft card: AC 10, 1 HP; all in half cover (5 sp)", descriptionMetric : "10-m high tower, lifts up; 3 floors, 3-m sq top floor; 1,5\xD73m card: AC 10, 1 HP; all in half cover (5 sp)", descriptionFull : "You touch the ground and conjure forth a defensive structure made of enormous playing cards. The structure rises with you at its center, harmlessly lifting you and any creatures in the area. The house of cards has a square base that is 30 feet on each side, and it has three floors with 10-foot-high ceilings. The second floor is 20 feet on each side, and the top floor is 10 feet on each side\u2014both centered above the bottom floor. Ramps connect the interior of each floor, and empty doorframes connect the interior and exterior of each level. Creatures inside or on top of the structure have half cover."+ "\n Each card that comprises the house is 5 feet wide and 10 feet tall and is very fragile. A card has AC 10 and 1 hit point. The cards are immune to poison and psychic damage. Reducing a card to 0 hit points destroys it. Every time a card is destroyed, roll 1d6. If you roll a 5 or a 6, the house collapses, ending the spell."+ "\n The house and all its cards vanish when the spell ends." }; SpellsList["spirit of death-ua"] = { name : "Spirit of Death", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:WotM", 10]], level : 4, school : "Necro", time : "1 a", range : "60 ft", components : "V,S,M\u0192", compMaterial : "A gilded playing card depicting an avatar of death worth at least 400 gp", duration : "Conc, 1 min", description : "Summon spirit to atk 1 crea; obeys commands; takes turn after me; ends if it or target at 0 hp (400gp)", descriptionFull : "You call forth a spirit that embodies death itself. Choose a creature you can see within range. The spirit manifests in an unoccupied space that you can see within 10 feet of the target, and the target becomes haunted by the spirit. The spirit uses the Reaper Spirit stat block. The spirit disappears when it or the haunted creature is reduced to 0 hit points, or when the spell ends."+ "\n The reaper spirit is an ally to you and your companions. In combat, the spirit shares your initiative count, but it takes its turn immediately after yours. It obeys your verbal commands (no action required by you), but it will only attack the haunted creature. If you don't issue the spirit any commands, it takes the Dodge action and uses its move to avoid danger."+ AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, use the higher level wherever the spell's level appears in the stat block." }; SpellsList["spray of cards-ua"] = { name : "Spray of Cards", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["UA:WotM", 11]], level : 2, school : "Conj", time : "1 a", range : "15-ft cone", components : "V,S,M\u0192", compMaterial : "A deck of cards", duration : "Instantaneous", save : typePF ? "W/D" : "W/d", description : "All in area either: Wis save or blinded 1 rnd; or 2d10+1d10/2SL Force dmg, Dex save halves (5sp)", descriptionFull : "You spray spectral cards from your hands or sleeve; the cards blind or slash at your enemies, and then vanish. Choose one of the following effects for the cards."+ "\n " + toUni("Blinding Cards") + ". Each creature in a 15-foot cone must succeed on a Wisdom saving throw or be blinded until the end of their next turn."+ "\n " + toUni("Cutting Cards") + ". Each creature in a 15-foot cone must make a Dexterity saving throw. A creature takes 2d10 force damage on a failed save or half as much damage on a successful one."+ AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, the damage of cutting cards increases by 1d10 for every two slot levels above 2nd." }; SpellsList["summon warrior spirit-ua"] = { name : "Summon Warrior Spirit", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:WotM", 11]], level : 3, school : "Conj", time : "1 a", range : "90 ft", components : "V,S,M\u0192", compMaterial : "A gilded playing card depicting a knight worth at least 300 gp", duration : "Conc, 1 h", description : "Summon choice of Warrior Spirit; obeys commands; takes turn after mine; disappears at 0 hp (300gp)", descriptionFull : "You call forth a warrior spirit from the legendary Deck of Many Things. It manifests in an unoccupied space that you can see within range. This corporeal form uses the Warrior Spirit stat block. When you cast the spell, choose a type of warrior: barbarian, fighter, or monk. The warrior resembles a humanoid armed appropriately to the chosen class, which determines certain traits in its stat block. The warrior disappears when it drops to 0 hit points or when the spell ends."+ "\n The warrior is an ally to you and your companions. In combat, the warrior shares your initiative count, but it takes its turn immediately after yours. It obeys your verbal commands (no action required by you). If you don't issue any, it takes the Dodge action and uses its move to avoid danger."+ AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, the creature assumes the higher level for that casting wherever it uses the spell's level in its stat block." }; ================================================ FILE: WotC material/ps_20160427_Zendikar.js ================================================ var iFileName = "ps_20160427_Zendikar.js"; RequiredSheetVersion("14.0.5-beta"); // This file adds all material from the Plane Shift: Zendikar article (https://magic.wizards.com/en/articles/archive/feature/plane-shift-zendikar-2016-04-27) to MPMB's Character Record Sheet // This code contains mostly contributions by SoilentBrad // Define the source SourceList["PS:Z"] = { name : "Plane Shift: Zendikar", abbreviation : "PS:Z", group : "Plane Shift", campaignSetting : "Magic: The Gathering", url : "https://media.wizards.com/2016/downloads/magic/Plane%20Shift%20Zendikar.pdf", date : "2016/04/27" }; // Adds 11 races RaceList["kor"] = { regExpSearch : /\bkor\b/i, name : "Kor", source : [["PS:Z", 11]], plural : "Kor", size : 3, speed : { walk : { spd : 30, enc : 20 }, climb : { spd : 30, enc : 0 } }, savetxt : { adv_vs : ["frightened"] }, skills : ["Acrobatics", "Athletics"], languageProfs : ["Common", "Kor (silent speech)"], age : " reach adulthood in their late teens and live less than a century", height : " average nearly 6 feet tall (4'9\" + 2d8\")", weight : " are more slender than humans", scores : [0, 2, 0, 0, 1, 0], trait : "Kor (+2 Dexterity, +1 Wisdom)\nKor Climbling: I have proficiency in the Athletics and Acrobatics skills.\nLucky: When I roll a 1 on the d20 for an attack roll, ability check, or saving throw, I can reroll the die and must use the new roll.\nBrave: I have advantage on saving throws against being frightened." }; RaceList["emeria merfolk"] = { regExpSearch : /^(?=.*\b(emeria|wind))(?=.*(merfolk|mermaid|merman)\b).*$/i, name : "Emeria Creed Merfolk", sortname : "Merfolk, Emeria Creed", source : [["PS:Z", 13]], plural : "Emeria Creed Merfolk", size : 3, speed : { walk : { spd : 30, enc : 20 }, swim : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Merfolk", 1], age : " reach adulthood around 20 and live considerably longer than humans, often reaching well over 100 years", height : " stand between 6 and 7 feet tall", weight : " average around 300 pounds", heightMetric : " stand between 1,8 and 2,2 metres tall", skills : ["Deception", "Persuasion"], scores : [0, 0, 0, 0, 2, 1], trait : "Emeria Creed Merfolk (+2 Wisdom, +1 Charisma)\nAmphibious: I can breathe air and water.\nWind Creed Manipulation: I have proficiency in the Deception and Persuasion skills.\nCantrip: I know one cantrip of my choice from the druid spell list. Wisdom is my spellcasting ability for it.", spellcastingAbility : 5, spellcastingBonus : [{ name : "Emeria Creed Cantrip", "class" : "druid", level : [0, 0], firstCol : 'atwill' }] }; RaceList["ula merfolk"] = { regExpSearch : /^(?=.*\b(ula|water))(?=.*(merfolk|mermaid|merman)\b).*$/i, name : "Ula Creed Merfolk", sortname : "Merfolk, Ula Creed", source : [["PS:Z", 13]], plural : "Ula Creed Merfolk", size : 3, speed : { walk : { spd : 30, enc : 20 }, swim : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Merfolk", 1], age : " reach adulthood around 20 and live considerably longer than humans, often reaching well over 100 years", height : " stand between 6 and 7 feet tall", weight : " average around 300 pounds", heightMetric : " stand between 1,8 and 2,2 metres tall", skills : ["Survival"], toolProfs : ["Navigator's tools"], scores : [0, 0, 0, 2, 0, 1], trait : "Ula Creed Merfolk (+2 Intelligence, +1 Charisma)\nAmphibious: I can breathe air and water.\nWater Creed Navigation: I have proficiency with navigator's tools and in the Survival skill.\nCantrip: I know one cantrip of my choice from the wizard spell list. Intelligence is my spellcasting ability for it.", spellcastingAbility : 4, spellcastingBonus : [{ name : "Ula Creed Cantrip", "class" : "wizard", level : [0, 0], firstCol : 'atwill' }] }; RaceList["cosi merfolk"] = { regExpSearch : /^(?=.*\b(cosi|trickster))(?=.*(merfolk|mermaid|merman)\b).*$/i, name : "Cosi Creed Merfolk", sortname : "Merfolk, Cosi Creed", source : [["PS:Z", 13]], plural : "Cosi Creed Merfolk", size : 3, speed : { walk : { spd : 30, enc : 20 }, swim : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Merfolk", 1], age : " reach adulthood around 20 and live considerably longer than humans, often reaching well over 100 years", height : " stand between 6 and 7 feet tall", weight : " average around 300 pounds", heightMetric : " stand between 1,8 and 2,2 metres tall", skills : ["Sleight of Hand", "Stealth"], scores : [0, 0, 0, 1, 0, 2], trait : "Ula Creed Merfolk (+1 Intelligence, +2 Charisma)\nAmphibious: I can breathe air and water.\nCreed of the Trickster: I have proficiency in the Sleight of Hand and Stealth skills.\nCantrip: I know one cantrip of my choice from the bard spell list. Charisma is my spellcasting ability for it.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Cosi Creed Cantrip", "class" : "bard", level : [0, 0], firstCol : 'atwill' }] }; RaceList["zendikar vampire"] = { regExpSearch : /^(?=.*vampire)(?=.*zendikar).*$/i, name : "Vampire", sortname : "Vampire, Zendikar", source : [["PS:Z", 15]], plural : "Vampires", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Vampire"], vision : [["Darkvision", 60]], dmgres : ["Necrotic"], weaponOptions : [{ regExpSearch : /^(?=.*blood)(?=.*thirst).*$/i, name : "Blood Thirst", source : [["PS:Z", 15]], ability : 1, type : "Natural", damage : [1, 6, "necrotic"], range : "Melee", description : "+1 piercing damage; Reduces max HP by the necrotic damage, while healing me for the same", abilitytodamage : false, monkweapon : false, selectNow : true }], age : " don't mature and age in the same way that other races do. Every living vampire is either a bloodchief, infected by Ulamog's influence in the distant reaches of history, or was spawned by a bloodchief from a living human. Most vampires are thus very old, but few have any memory of their earliest years.", scores : [0, 0, 0, 1, 0, 2], trait : "Vampire (+1 Intelligence, +2 Charisma)\nBlood Thirst: I can drain blood and life energy from a willing creature, or one that is grappled by me, incapacitated, or restrained. With a melee attack, I deal 1 piercing and 1d6 necrotic damage. The target's max HP is reduced by the necrotic damage amount and I regain HP for the same. This max HP reduction lasts until the target finished a long rest.\nNull Transformation: A humanoid killed by my blood thirst ability becomes a null." }; RaceList["grotag tribe goblin"] = { regExpSearch : /^(?=.*\bgrotag)(?=.*goblin\b).*$/i, name : "Grotag tribe goblin", sortname : "Goblin, Grotag Tribe", source : [["PS:Z", 17]], plural : "Grotag tribe goblins", size : 4, speed : { walk : { spd : 25, enc : 15 } }, languageProfs : ["Common", "Goblin"], vision : [["Darkvision", 60]], dmgres : ["Fire", "Psychic"], skills : ["Animal Handling"], armourOptions : [{ regExpSearch : /^(?=.*goblin)(?=.*grit).*$/i, name : "Goblin Grit", source : [["PS:Z", 17]], ac : 11, selectNow : true }], age : " reach adulthood at around 12 and rarely live longer than 50 years", height : " average about 3 feet tall (3'\" + 2d4\")", weight : " weigh about 40 lb (35 + 2d4 \xD7 1d4 lb)", heightMetric : " average about 100 cm tall (100 + 5d4 cm)", weightMetric : " weigh about 20 kg (17 + 5d4 \xD7 2d4 / 10 kg)", scores : [0, 0, 2, 0, 0, 0], trait : "Grotag Tribe Goblin (+2 Constitution)\nGrit: I have resistance to fire damage and psychic damage.\n In addition, when I am wearing no armor, my AC is equal to 11 + my Dexterity modifier." }; RaceList["lavastep tribe goblin"] = { regExpSearch : /^(?=.*\blavastep)(?=.*goblin\b).*$/i, name : "Lavastep tribe goblin", sortname : "Goblin, Lavastep Tribe", source : [["PS:Z", 17]], plural : "Lavastep tribe goblins", size : 4, speed : { walk : { spd : 25, enc : 15 } }, languageProfs : ["Common", "Goblin"], vision : [["Darkvision", 60]], dmgres : ["Fire", "Psychic"], armourOptions : [{ regExpSearch : /^(?=.*goblin)(?=.*grit).*$/i, name : "Goblin Grit", source : [["PS:Z", 17]], ac : 11, selectNow : true }], age : " reach adulthood at around 12 and rarely live longer than 50 years", height : " average about 3 feet tall (3'\" + 2d4\")", weight : " weigh about 40 lb (35 + 2d4 \xD7 1d4 lb)", heightMetric : " average about 100 cm tall (100 + 5d4 cm)", weightMetric : " weigh about 20 kg (17 + 5d4 \xD7 2d4 / 10 kg)", scores : [0, 0, 2, 0, 0, 0], trait : "Lavastep Tribe Goblin (+2 Constitution)\nGrit: I have resistance to fire damage and psychic damage.\n In addition, when I am wearing no armor, my AC is equal to 11 + my Dexterity modifier.\nLavastep Grit: I have advantage on Dexterity (Stealth) checks made to hide in rocky or subterranean environments." }; RaceList["tuktuk tribe goblin"] = { regExpSearch : /^(?=.*\btuktuk)(?=.*goblin\b).*$/i, name : "Tuktuk tribe goblin", sortname : "Goblin, Tuktuk Tribe", source : [["PS:Z", 17]], plural : "Tuktuk tribe goblins", size : 4, speed : { walk : { spd : 25, enc : 15 } }, languageProfs : ["Common", "Goblin"], vision : [["Darkvision", 60]], dmgres : ["Fire", "Psychic"], toolProfs : [["Thieves' tools", "Dex"]], armourOptions : [{ regExpSearch : /^(?=.*goblin)(?=.*grit).*$/i, name : "Goblin Grit", source : [["PS:Z", 17]], ac : 11, selectNow : true }], age : " reach adulthood at around 12 and rarely live longer than 50 years", height : " average about 3 feet tall (3'\" + 2d4\")", weight : " weigh about 40 lb (35 + 2d4 \xD7 1d4 lb)", heightMetric : " average about 100 cm tall (100 + 5d4 cm)", weightMetric : " weigh about 20 kg (17 + 5d4 \xD7 2d4 / 10 kg)", scores : [0, 0, 2, 0, 0, 0], trait : "Tuktuk Tribe Goblin (+2 Constitution)\nGrit: I have resistance to fire damage and psychic damage.\n In addition, when I am wearing no armor, my AC is equal to 11 + my Dexterity modifier." }; RaceList["tajuru elf"] = { regExpSearch : /^(?!.*half)(?=.*\b(elfs?|elves|elvish|elven)\b)(?=.*\btajuru\b).*$/i, name : "Tajuru elf", sortname : "Elf, Tajuru", source : [["PS:Z", 19]], plural : "Tajuru elves", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Elvish"], vision : [["Darkvision", 60]], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["charmed"] }, skills : ["Perception"], skillstxt : "Perception and choose any two skills or tools", age : " typically claim adulthood around age 100 and can live to be 750 years old", height : " range from under 5 to over 6 feet tall (4'6\" + 2d10\")", weight : " weigh around 115 lb (90 + 2d10 \xD7 1d4 lb)", heightMetric : " range from under 1,5 to over 1,8 metres tall (140 + 5d10 cm)", weightMetric : " weigh around 55 kg (40 + 5d10 \xD7 2d4 / 10 kg)", scores : [0, 0, 0, 0, 2, 1], trait : "Tajuru Elf (+2 Wisdom, +1 Charisma)\nTajuru Nation: Tajuru elves are the most open to people of other races, seeing their skills and perspectives as valuable new tools for survival." }; RaceList["joraga elf"] = { regExpSearch : /^(?!.*half)(?=.*\b(elfs?|elves|elvish|elven)\b)(?=.*\bjoraga\b).*$/i, name : "Joraga elf", sortname : "Elf, Joraga", source : [["PS:Z", 19]], plural : "Joraga elves", size : 3, speed : { walk : { spd : 35, enc : 25 } }, languageProfs : ["Common", "Elvish"], vision : [["Darkvision", 60]], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["charmed"] }, weaponProfs : [false, false, ["longsword", "shortsword", "longbow", "shortbow"]], skills : ["Perception"], age : " typically claim adulthood around age 100 and can live to be 750 years old", height : " range from under 5 to over 6 feet tall (4'6\" + 2d10\")", weight : " weigh around 115 lb (90 + 2d10 \xD7 1d4 lb)", heightMetric : " range from under 1,5 to over 1,8 metres tall (140 + 5d10 cm)", weightMetric : " weigh around 55 kg (40 + 5d10 \xD7 2d4 / 10 kg)", scores : [0, 1, 0, 0, 2, 0], trait : "Joraga Elf (+1 Dexterity, +2 Wisdom)\nMask of the Wild: I can attempt to hide even when I am only lightly obscured by foliage, heavy rain, falling snow, mist, and other natural phenomena." }; RaceList["mul daya elf"] = { regExpSearch : /^(?!.*half)(?=.*\b(elfs?|elves|elvish|elven)\b)(?=.*\bmul)(?=.*daya\b).*$/i, name : "Mul Daya elf", sortname : "Elf, Mul Daya", source : [["PS:Z", 19]], plural : "Mul Daya elves", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Elvish"], vision : [["Darkvision", 120], ["Sunlight Sensitivity", 0]], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["charmed"] }, skills : ["Perception"], weaponProfs : [false, false, ["longsword", "shortsword", "longbow", "shortbow"]], age : " typically claim adulthood around age 100 and can live to be 750 years old", height : " range from under 5 to over 6 feet tall (4'6\" + 2d10\")", weight : " weigh around 115 lb (90 + 2d10 \xD7 1d4 lb)", heightMetric : " range from under 1,5 to over 1,8 metres tall (140 + 5d10 cm)", weightMetric : " weigh around 55 kg (40 + 5d10 \xD7 2d4 / 10 kg)", scores : [1, 0, 0, 0, 2, 0], trait : "Mul Daya Elf (+1 Strength, +2 Wisdom)\nSunlight Sensitivity: Disadvantage on attack rolls and Wisdom (Perception) checks that rely on sight when I or what I am trying to attack/perceive is in direct sunlight.\nMul Daya Magic: 1st level: Chill Touch cantrip; 3rd level: Hex; 5th level: Darkness. Both spells can be used once per long rest. Wisdom is my spellcasting ability for these.", spellcastingAbility : 5, spellcastingBonus : [{ name : "Mul Daya Magic (level 1)", spells : ["chill touch"], selection : ["chill touch"], firstCol : 'atwill' }], features : { "faerie fire" : { name : "Mul Daya Magic (level 3)", minlevel : 3, spellcastingBonus : [{ name : "Mul Daya Magic (level 3)", spells : ["hex"], selection : ["hex"], firstCol : 'oncelr' }] }, "darkness" : { name : "Mul Daya Magic (level 5)", minlevel : 5, spellcastingBonus : [{ name : "Mul Daya Magic (level 5)", spells : ["darkness"], selection : ["darkness"], firstCol : 'oncelr' }] } } }; // Adds 7 creatures, 6 beasts and the null for the vampire's racial feature CreatureList["woodcrasher baloth"] = { name : "Woodcrasher Baloth", source : [["PS:Z", 33]], size : 1, type : "Beast", alignment : "Unaligned", ac : 13, hp : 95, hd : [10, 12], speed : "50 ft, climb 30 ft", scores : [22, 9, 17, 2, 11, 5], passivePerception : 10, challengeRating : "5", proficiencyBonus : 3, attacksAction : 1, attacks : [{ name : "Gore", ability : 1, damage : [4, 8, "bludgeoning"], range : "Melee (5 ft)", description : "If used after moving 20 ft straight in the same round, see Trampling Charge trait" }, { name : "Stomp", ability : 1, damage : [3, 10, "bludgeoning"], range : "Melee (5 ft)", description : "Can only be used on prone creatures (also see Trampling Charge trait)" } ], traits : [{ name : "Trampling Charge", description : "If the baloth moves at least 20 ft straight toward a creature and then hits it with a gore attack on the same turn, that target must succeed on a DC 13 Strength saving throw or be knocked prone. If the target is prone, the baloth can make one stomp attack against it as a bonus action." } ] }; CreatureList["gnarlid"] = { name : "Gnarlid", source : [["PS:Z", 34]], size : 3, type : "Beast", alignment : "Unaligned", ac : 11, hp : 17, hd : [2, 10], speed : "40 ft, climb 30 ft", scores : [19, 10, 16, 2, 13, 7], skills : { "perception" : 3, }, senses : "Adv. on Wis (Perception) checks using smell", passivePerception : 13, challengeRating : "1", proficiencyBonus : 2, attacksAction : 2, attacks : [{ name : "Bite", ability : 1, damage : [1, 4, "piercing"], range : "Melee (5 ft)", description : "1d8 when enlarged; One bite and one claws attack as an Attack action", modifiers : [-1, ""], }, { name : "Claws", ability : 1, damage : [1, 6, "slashing"], range : "Melee (5 ft)", description : "2d6 when enlarged; One claws and one bite attack as an Attack action", modifiers : [-1, ""] }], actions : [{ name : "Multiattack", description : "As an action on its turn, the gnarlid can make one Bite and one Claws attack." }], traits : [{ name : "Keen Smell", description : "The gnarlid has advantage on Wisdom (Perception) checks that rely on smell.", }, { name : "Enlarge", description : "As an action, the gnarlid can enlarge. When enlarged, its HP maximum and damage dealt is doubled." }] }; CreatureList["ox"] = { name : "Ox", source : [["PS:Z", 34]], size : 2, type : "Beast", alignment : "Unaligned", ac : 11, hp : 19, hd : [3, 10], speed : "40 ft", scores : [17, 11, 12, 3, 12, 6], passivePerception : 11, challengeRating : "1/2", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Ram", ability : 1, damage : [2, 4, "bludgeoning"], range : "Melee (5 ft)", description : "If used after moving 20 ft straight in the same round, see Charge trait" }], traits : [{ name : "Charge", description : "If the ox hits with a ram attack after moving at least 20 ft straight toward a target on the same turn, the target takes an extra 2d4 bludgeoning damage. If the target is a creature, it must succeed on a DC 13 Strength saving throw or be knocked prone." }] }; CreatureList["terastodon"] = { name : "Terastodon", source : [["PS:Z", 34]], size : 1, type : "Beast", alignment : "Unaligned", ac : 13, hp : 126, hd : [11, 12], speed : "40 ft", scores : [24, 9, 21, 3, 11, 6], passivePerception : 10, challengeRating : "6", proficiencyBonus : 3, attacksAction : 1, attacks : [{ name : "Gore", ability : 1, damage : [4, 8, "bludgeoning"], range : "Melee (10 ft)", description : "If used after moving 20 ft straight in the same round, see Trampling Charge trait", }, { name : "Stomp", ability : 1, damage : [4, 10, "bludgeoning"], range : "Melee (5 ft)", description : "Can only be used on prone creatures (also see Trampling Charge trait)" }], traits : [{ name : "Trampling Charge", description : "If the terastodon moves at least 20 ft straight toward a creature and then hits it with a gore attack on the same turn, that target must succeed on a DC 18 Strength saving throw or be knocked prone. If the target is prone, the terastodon can make one stomp attack against it as a bonus action." }] }; CreatureList["terra stomper"] = { name : "Terra Stomper", source : [["PS:Z", 34]], size : 1, type : "Beast", alignment : "Unaligned", ac : 13, hp : 136, hd : [13, 12], speed : "50 ft", scores : [25, 10, 19, 2, 12, 9], skills : { "perception" : 4, }, passivePerception : 14, challengeRating : "8", proficiencyBonus : 3, attacksAction : 2, attacks : [{ name : "Tail", ability : 1, damage : [3, 8, "bludgeoning"], range : "Melee (10 ft)", description : "Medium or smaller target is grappled and restrained (escape DC 17); can't use bite again until grapple ends", }, { name : "Bite", ability : 1, damage : [4, 12, "piercing"], range : "Melee (10 ft)", description : "One bite and one tail attack to a different as an Attack action" }], actions : [{ name : "Multiattack", description : "As an action on its turn, the terra stomper can make one Bite and one Tail attack. It can't make both attacks against the same target." }] }; CreatureList["timbermaw"] = { name : "Timbermaw", source : [["PS:Z", 34]], size : 3, type : "Beast", alignment : "Unaligned", ac : 14, hp : 27, hd : [6, 8], speed : "30 ft, climb 30 ft", scores : [14, 14, 11, 3, 14, 5], damage_resistances : "bludgeoning, piercing, and slashing from nonmagical weapons", senses : "Darkvision 60 ft", passivePerception : 12, challengeRating : "2", proficiencyBonus : 2, attacksAction : 2, attacks : [{ name : "Tentacles", ability : 1, damage : [2, 6, "slashing"], range : "Melee", description : "On hit, can make beak attack" }, { name : "Beak", ability : 1, damage : [1, 6, "piercing"], range : "Melee", description : "Only on hit with a tentacle attack" }], traits : [{ name : "Forest Camouflage", description : "The timbermaw has advantage on Dexterity (Stealth) checks made to hide in woodland terrain." }] }; CreatureList["vampire null"] = { name : "Vampire Null", source : [["PS:Z", 28]], size : 3, type : "Undead", alignment : "Neutral Evil", ac : 8, hp : 22, hd : [3, 8], speed : "30 ft", scores : [13, 6, 16, 3, 6, 5], saves : ["", "", "", "", 0, ""], damage_immunities : "poison", condition_immunities : "poisoned", senses : "Darkvision 60 ft", passivePerception : 8, languages : "understands all languages it knew in life but can't speak", challengeRating : "1/4", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Slam", ability : 1, damage : [1, 6, "bludgeoning"], range : "Melee (5 ft)", description : "" }], traits : [{ name : "Undead Fortitude", description : "If damage reduces the null to 0 hit points, it must make a Constitution saving throw with a DC of 5 + the damage taken, unless the damage is radiant or from a critical hit. On a success, the null drops to 1 hit point instead." }] }; ================================================ FILE: WotC material/ps_20160712_Innistrad.js ================================================ var iFileName = "ps_20160712_Innistrad.js"; RequiredSheetVersion("13.0.8"); // This file adds all material from the Plane Shift: Innistrad article (https://www.dragonmag.com/5.0/#!/article/106375/102161027) to MPMB's Character Record Sheet // This code contains mostly contributions by SoilentBrad // Define the source SourceList["PS:I"] = { name : "Plane Shift: Innistrad", abbreviation : "PS:I", group : "Plane Shift", campaignSetting : "Magic: The Gathering", url : "https://media.wizards.com/2016/dnd/downloads/Plane_Shift_Innistrad.pdf", date : "2016/07/12" }; // Adds 4 human subraces RaceList["gavony human"] = { regExpSearch : /^(?=.*\bgavonian?s?\b).*$/i, name : "Gavonian", sortname : "Human, Gavony", source : [["PS:I", 8]], plural : "Gavonians", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", 1], age : " reach adulthood in their late teens and live less than a century", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scorestxt : "+1 to each ability score", scores : [1, 1, 1, 1, 1, 1], trait : "Gavonian Human (+1 to each ability score)\nGavonian: Whether safe behind the walls of the High City of Thraben or out in the moors with little more than shuttered windows, barred doors, and grim determination to stand against the horrors of the night, my people are the most well-rounded of Innistrad." }; RaceList["kessig human"] = { regExpSearch : /^(?=.*\bkessig(er)?s?\b).*$/i, name : "Kessiger", sortname : "Human, Kessig", source : [["PS:I", 8]], plural : "Kessigers", size : 3, speed : { walk : { spd : 40, enc : 30 } }, skills : ["Survival"], languageProfs : ["Common", 1], age : " reach adulthood in their late teens and live less than a century", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 1, 0, 0, 1, 0], trait : "Kessiger Human (+1 Dexterity, +1 Wisdom)\nSure-Footed: When I use the Dash action, difficult terrain doesn't cost extra movement on that turn.\nSpring Attack: When I make a melee attack against a creature, I don't provoke opportunity attacks from that creature for the rest of my turn, whether I hit or not." }; RaceList["nephalia human"] = { regExpSearch : /^(?=.*\bnephalian?s?\b).*$/i, name : "Nephalian", sortname : "Human, Nephalia", source : [["PS:I", 8]], plural : "Nephalians", size : 3, speed : { walk : { spd : 30, enc : 20 } }, skillstxt : "Any combination of four skills and tools", languageProfs : ["Common", 1], age : " reach adulthood in their late teens and live less than a century", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 0, 0, 1, 0, 1], trait : "Nephalian Human (+1 Intelligence, +1 Charima)\nBreadth of Knowledge: I gain proficiency in any combination of four skills or four tools of my choice." }; RaceList["stensia human"] = { regExpSearch : /^(?=.*\bstensian?s?\b).*$/i, name : "Stensian", sortname : "Human, Stensia", source : [["PS:I", 8]], plural : "Stensians", size : 3, speed : { walk : { spd : 30, enc : 20 } }, skills : ["Intimidation"], languageProfs : ["Common", 1], age : " reach adulthood in their late teens and live less than a century", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [1, 0, 1, 0, 0, 0], trait : "Stensian Human (+1 Strength, +1 Constitution)\nDaunting: I have proficiency in the Intimidation skill.\nTough: My hit point maximum increases by 2, and it increases by 2 every time I gain a level.", calcChanges : { hp : function (totalHD) { return [totalHD * 2, '\n + ' + totalHD + ' \xD7 2 from the Stensian Tough feature (' + (totalHD * 2) + ')', true]; } } }; // Adds 1 background BackgroundList["inquisitor"] = { regExpSearch : /inquisitor/i, name : "Inquisitor", source : [["PS:I", 12]], skills : ["Investigation", "Religion"], gold : 15, equipright : [ ["Traveler's clothes", "", 3], ["Holy symbol", "", ""], ["Belt pouch (with coins)", "", 1] ], feature : "Legal Authority", trait : [ "It will all go smoothly if everyone just does as I say.", "Despair is an extravagance we can ill afford.", "I know the writings of Saint Raban backward and forward.", "I try to see the bright side in the very worst situations.", "It helps me feel better when others show sympathy or appreciation for the horrors I've endured.", "I prefer to face evil with a strong group of friends in front of me.", "I want to see the wicked burn for the evil they've brought on us.", "I feel the sin being purged from me as I help cleanse the world." ], ideal : [ ["Honesty", "Honesty: The smallest deception paves the way to grievous sin. (Lawful)" ], ["Piety", "Piety: Devotion to the angels and the rites of the church is all that keeps the world from destruction. (Good)" ], ["Order", "Order: The laws of Avacyn are meant to preserve the social order\u2014everything in its proper place. (Lawful)" ], ["Humanity", "Humanity: Human life is to be cherished and preserved against the horrors of the night. (Good)" ], ["Knowledge", "Knowledge: The path to holiness comes through understanding of the world. (Any)" ], ["Punishment", "Punishment: It is better for the innocent to suffer than for the guilty to escape their due. (Evil)" ] ], bond : [ "Thraben is the heart of the world. The cathedral must stand even if the hinterlands are lost.", "One day, I will claim vengeance against the monster that took my family from me.", "My weapon is all I have to remember my beloved mentor by.", "The geist of my beloved speaks to me sometimes.", "My dear sibling is now a werewolf.", "A small crossways chapel is my spiritual home." ], flaw : [ "I am troubled by the wild rage and bloodlust that lurks in my own heart.", "I have come to believe that I executed an innocent person.", "I enjoy the prestige of my position more than service to the angels.", "I drink to forget the horrors I've seen.", "I might have made a promise to a demon that I can't keep.", "I'll do whatever grim task must be done, for my soul is already lost." ], toolProfs : [["Artisan's tools", 1], ["Thieves' tools", "Dex"]], variant : [] }; BackgroundFeatureList["legal authority"] = { description : "As an inquisitor of the church, I have the authority to arrest criminals. In the absence of other authorities, I am authorized to pass judgment and even carry out sentencing. If I abuse this power, however, my superiors in the church might strip it from me.", source : [["PS:I", 12]] }; ================================================ FILE: WotC material/ps_20170216_Kaladesh.js ================================================ var iFileName = "ps_20170216_Kaladesh.js"; RequiredSheetVersion("14.0.5-beta"); // This file adds all material from the Plane Shift: Kaladesh article (https://magic.wizards.com/en/articles/archive/feature/plane-shift-kaladesh-2017-02-16) to MPMB's Character Record Sheet // This code contains contributions by SoilentBrad and userZynx_name // Define the source SourceList["PS:K"] = { name : "Plane Shift: Kaladesh", abbreviation : "PS:K", group : "Plane Shift", campaignSetting : "Magic: The Gathering", url : "https://media.wizards.com/2017/downloads/magic/Plane-Shift_Kaladesh.pdf", date : "2017/02/16" }; // Adds a subclass for the Sorcerer AddSubClass("sorcerer", "pyromancer", { // Includes contributions by userZynx_name regExpSearch : /pyromanc(er|y)/i, subname : "Pyromancy", source : [["PS:K", 9]], fullname : "Pyromancer", features : { "subclassfeature1" : { name : "Heart of Fire", source : [["PS:K", 9]], minlevel : 1, description : desc([ "When I start casting a spell (not cantrip) that deals fire damage, flames erupt from me", "Chosen creatures within 10 ft that I can see take half my sorcerer level in fire damage" ]), additional : levels.map( function(n) { return (n > 1 ? Math.floor(n/2) : 1) + " fire damage"; }) }, "subclassfeature6" : { name : "Fire in the Veins", source : [["PS:K", 9]], minlevel : 6, description: desc("I have resistance to fire damage and spells I cast ignore resistance to fire damage"), dmgres : ["Fire"] }, "subclassfeature14" : { name : "Pyromancer's Fury", source : [["PS:K", 9]], minlevel : 14, description : desc([ "As a reaction when hit by a melee attack, I can deal fire damage to the attacker", "The damage is equal to my sorcerer level and ignores resistance to fire damage" ]), action : [["reaction", ""]], additional : levels.map( function(n) { return n < 14 ? "" : n + " fire damage"; }) }, "subclassfeature18" : { name : "Fiery Soul", source : [["PS:K", 9]], minlevel : 18, description : desc([ "I have immunity to fire damage", "Any spell or effect I create treats immunity to fire damage as resistance to fire damage" ]), savetxt : { immune : ["fire"] } } } }); // Adds 2 feats FeatsList["quicksmithing"] = { // Includes contributions by userZynx_name name : "Quicksmithing", source : [["PS:K", 13]], descriptionFull : "You have mastered the art of on-the-fly invention, improvement, and jury-rigging. You can use your talents to create immediate, short-term magical effects similar to spells, given time and an adequate supply of aether.\n When you choose this feat, you master two magical effects, each of which recreates the effect of a 1st-level spell that has the ritual tag. These spells can come from any class list, but Intelligence is your spellcasting ability for them.\n If you come across a schematic geared toward quicksmithing or study with another quicksmith, you might be able to add another spell to the effects you have mastered. The spell's level can be no higher than half your level (rounded up), and it must have the ritual tag. The process of mastering the spell takes 2 hours per level of the spell, and costs 50 gp per level. The cost represents aether you use as you experiment with the spell effect to master it.\n In addition, you have proficiency with artisan's tools (quicksmith's tools). Using those tools, you can spend 1 hour and 10 gp worth of materials to construct a Tiny clockwork device (AC 5, 1 hp). The device ceases to function after 24 hours unless you spend 1 hour repairing it to keep it functioning. You can use your action to dismantle the device, at which point you can reclaim the materials used to create it. You can have up to three such devices active at a time.\n When you create a device, choose one of the following options:\n " + toUni("Clockwork Toy") + ". This toy is a clockwork animal, monster, or person, such as a frog, mouse, bird, dragon, or soldier. When placed on the ground, the toy moves 5 feet across the ground on each of your turns in a random direction. It makes noises as appropriate to the creature it represents.\n " + toUni("Fire Starter") + ". This device produces a miniature flame, which you can use to light a candle, torch, or campfire. Using the device requires your action.\n " + toUni("Music Box") + ". When opened, this music box plays a single song at a moderate volume. The box stops playing when it reaches the song's end or when it is closed.", description : "I gain the Tinker ability of a Rock Gnome, including proficiency with tinker's tools. I learn two 1st-level ritual spells and can learn more if found and no higher spell level than half my character level. I can cast these as rituals with Intelligence as my spellcasting ability.", prerequisite : "Intelligence 13 or higher", prereqeval : function (v) { return What('Int') >= 13; }, eval : function () { CurrentSpells['quicksmithing'] = { name : 'Quicksmithing Ritual Spells', ability : 4, list : {'class' : 'any', ritual : true}, known : { spells : 'book' }, refType : "feat" }; SetStringifieds('spells'); CurrentUpdates.types.push('spells'); }, removeeval : function () { delete CurrentSpells['quicksmithing']; SetStringifieds('spells'); CurrentUpdates.types.push('spells'); } }; FeatsList["servo crafting"] = { // Includes contributions by userZynx_name name : "Servo Crafting", source : [["PS:K", 13]], descriptionFull : "You are skilled in the creation of servos\u2014tiny constructs that function as personal assistants. You can cast the find familiar spell as a ritual, creating a servo to serve as your familiar instead of an animal. A servo's statistics appear in the \"Artifact Creatures\" section of the Plane Shift: Kaladesh document. In every other way, a servo familiar functions as described in the find familiar spell.\n You can communicate telepathically with your servo familiar and perceive through its senses as long as you are on the same plane of existence. You can speak through your servo in your own voice.\n Additionally, when you take the Attack action, you can forgo one of your own attacks to allow your servo familiar to make one attack of its own.", description : "I can cast Find Familiar as a ritual, creating a servo instead of an animal. I can telepathically communicate with it, perceive its senses, and speak through it in my own voice. When I use the Attack action, I can forfeit one attack for it to attack.", prerequisite : "Intelligence 13 or higher", prereqeval : function (v) { return What('Int') >= 13; }, spellcastingBonus : [{ name : "Servo Crafting", spellcastingAbility : 4, spells : ["find familiar"], selection : ["find familiar"], firstCol : SpellRitualTag, }] }; // Adds 4 races RaceList["aetherborn"] = { // Includes contributions by SoilentBrad regExpSearch : /aetherborn/i, name : "Aetherborn", sortname : "Aetherborn", source : [["PS:K", 17]], plural : "Aetherborn", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", 2], vision : [["Darkvision", 60]], dmgres : ["Necrotic"], skills : ["Intimidation"], age : " come into being as adults and live no more than a few years", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 100 lb, and get lighter as they age", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", scorestxt : "+2 Charisma, +1 to two others of your choice", scores : [0, 0, 0, 0, 0, 2], trait : "Aetherborn (+2 Charisma, +1 to two others of your choice)\nBorn of Aether: I have resistance to necrotic damage.\nMenacing: I gain proficiency in the Intimidation skill.", }; RaceList["kaladesh dwarf"] = { // Includes contributions by SoilentBrad regExpSearch : /^(?=.*\b(dwarfs?|dwarves|dwarfish|dwarvish|dwarven)\b)(?=.*\bkaladesh\b).*$/i, name : "Kaladesh dwarf", sortname : "Dwarf, Kaladesh", source : [["PS:K", 19]], plural : "Kaladesh dwarves", size : 3, speed : { walk : { spd : 25, enc : 25 } }, languageProfs : ["Common", "Dwarvish"], vision : [["Darkvision", 60]], savetxt : { adv_vs : ["poison"] }, dmgres : ["Poison"], toolProfs : [["Artisan's tools", 2]], age : " are considered young until they are 50 and live about 350 years", height : " stand between 4 and 5 feet tall (3'8\" + 2d4\")", weight : " weigh around 150 lb (115 + 2d4 \xD7 2d6 lb)", heightMetric : " stand between 1,2 and 1,5 metres tall (110 + 5d4 cm)", weightMetric : " weigh around 70 kg (55 + 5d4 \xD7 4d6 / 10 kg)", scores : [0, 0, 2, 0, 1, 0], trait : "Kaladesh Dwarf (+2 Constitution, +1 Wisdom)\nArtisan's Expertise: I have proficiency and expertise with two artisan's tools of my choice.\n Whenever I make an Intelligence (History) check related to the origin of any architectural construction, I am considered proficient in the History skill and add double my proficiency bonus to the check, instead of my normal proficiency bonus.\nDwarven Toughness: My hit point maximum increases by 1 for every level I have.", calcChanges : { hp : function (totalHD) { return [totalHD, "Dwarven Toughness"]; } } }; RaceList["vahadar elf"] = { // Includes contributions by SoilentBrad regExpSearch : /^(?!.*half)((?=.*\bvahadar\b)|((?=.*\b(elfs?|elves|elvish|elven)\b)(?=.*\bcity\b))).*$/i, name : "Vahadar", sortname : "Elf, Vahadar", source : [["PS:K", 21]], plural : "Vahadar", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Elvish", 1], vision : [["Darkvision", 60]], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["charmed"] }, weaponProfs : [false, false, ["longsword", "shortsword", "longbow", "shortbow"]], skills : ["Perception"], age : " typically claim adulthood around age 100 and can live to be 750 years old", height : " range from under 5 to over 6 feet tall (4'6\" + 2d10\")", weight : " weigh around 115 lb (90 + 2d10 \xD7 1d4 lb)", heightMetric : " range from under 1,5 to over 1,8 metres tall (140 + 5d10 cm)", weightMetric : " weigh around 55 kg (40 + 5d10 \xD7 2d4 / 10 kg)", scores : [0, 2, 0, 0, 1, 0], trait : "Vahadar (+2 Dexterity, +1 Wisdom)\nTrance: Elves don't need to sleep, but meditate semiconsciously, for 4 hours a day. While meditating, I can dream after a fashion; such dreams are actually mental exercises that have become reflexive through years of practice. After resting in this way, I gain the same benefit that a human does from 8 hours of sleep, but I still need 8 hours for a long rest.\nCantrip: I know one cantrip of my choice from the druid spell list. Wisdom is my spellcasting ability for it.", spellcastingAbility : 5, spellcastingBonus : [{ name : "Vahadar Cantrip", "class" : "druid", level : [0, 0], firstCol : 'atwill' }] }; RaceList["bishtahar elf"] = { regExpSearch : /^(?!.*half)(?=.*\bbishtahar\b).*$/i, name : "Bishtahar", sortname : "Elf, Bishtahar", source : [["PS:K", 21]], plural : "Bishtahar", size : 3, speed : { walk : { spd : 35, enc : 25 } }, languageProfs : ["Common", "Elvish"], vision : [["Darkvision", 60]], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["charmed"] }, weaponProfs : [false, false, ["longsword", "shortsword", "longbow", "shortbow"]], skills : ["Perception"], age : " typically claim adulthood around age 100 and can live to be 750 years old", height : " range from under 5 to over 6 feet tall (4'6\" + 2d10\")", weight : " weigh around 115 lb (90 + 2d10 \xD7 1d4 lb)", heightMetric : " range from under 1,5 to over 1,8 metres tall (140 + 5d10 cm)", weightMetric : " weigh around 55 kg (40 + 5d10 \xD7 2d4 / 10 kg)", scores : [0, 2, 0, 0, 1, 0], trait : "Bishtahar (+2 Dexterity, +1 Wisdom)\nTrance: Elves don't need to sleep, but meditate semiconsciously, for 4 hours a day. While meditating, I can dream after a fashion; such dreams are actually mental exercises that have become reflexive through years of practice. After resting in this way, I gain the same benefit that a human does from 8 hours of sleep, thus needing only 4 hours for a long rest.\nMask of the Wild: I can attempt to hide even when I am only lightly obscured by foliage, heavy rain, falling snow, mist, and other natural phenomena." }; RaceList["tirahar elf"] = { regExpSearch : /^(?!.*half)(?=.*\btirahar\b).*$/i, name : "Tirahar", sortname : "Elf, Tirahar", source : [["PS:K", 21]], plural : "Tirahar", size : 3, speed : { walk : { spd : 35, enc : 25 } }, languageProfs : ["Common", "Elvish"], vision : [["Darkvision", 60]], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["charmed"] }, weaponProfs : [false, false, ["longsword", "shortsword", "longbow", "shortbow"]], skills : ["Perception"], age : " typically claim adulthood around age 100 and can live to be 750 years old", height : " range from under 5 to over 6 feet tall (4'6\" + 2d10\")", weight : " weigh around 115 lb (90 + 2d10 \xD7 1d4 lb)", heightMetric : " range from under 1,5 to over 1,8 metres tall (140 + 5d10 cm)", weightMetric : " weigh around 55 kg (40 + 5d10 \xD7 2d4 / 10 kg)", scores : [0, 2, 0, 0, 1, 0], trait : "Tirahar (+2 Dexterity, +1 Wisdom)\nTrance: Elves don't need to sleep, but meditate semiconsciously, for 4 hours a day. While meditating, I can dream after a fashion; such dreams are actually mental exercises that have become reflexive through years of practice. After resting in this way, I gain the same benefit that a human does from 8 hours of sleep, thus needing only 4 hours for a long rest.\nMask of the Wild: I can attempt to hide even when I am only lightly obscured by foliage, heavy rain, falling snow, mist, and other natural phenomena." }; RaceList["vedalken-psk"] = { // Includes contributions by SoilentBrad regExpSearch : /vedalken/i, name : "Vedalken", sortname : "Vedalken", source : [["PS:K", 24]], plural : "Vedalken", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Vedalken"], savetxt : { text : ["Adv. on Int/Wis/Cha saves vs. magic"] }, age : " reach adulthood around 40 and live up to 500 years", height : " range from 6 to 6 1/2 feet tall", weight : " weigh less than 200 lb", scores : [0, 0, 0, 2, 1, 0], trait : "Vedalken (+2 Intelligence, +1 Wisdom)\nVedalken Cunning: I have advantage on all Intelligence, Wisdom, and Charisma saving throws against magic.\nAether Lore: Whenever I make an Intelligence (History) check related to magic items or aether-powered technological devices, I can add twice my proficiency bonus, instead of any proficiency bonus I normally apply." }; // Adds 3 creatures, 2 beast and 1 optional familiar CreatureList["gremlin"] = { // Includes contributions by SoilentBrad name : "Gremlin", source : [["PS:K", 26]], size : 4, type : "Beast", alignment : "Unaligned", ac : 11, hp : 27, hd : [5, 8], speed : "40 ft", scores : [12, 13, 13, 3, 13, 6], passivePerception : 11, senses : "Darkvision 60 ft", challengeRating : "1/2", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Claws", ability : 1, damage : [1, 8, "slashing"], range : "Melee (5 ft)", description : "" } ], traits : [{ name : "Aether Scent", description : "The gremlin can pinpoint, by scent, the location of refined or unrefined aether within 30 feet of it.", } ], actions : [{ name : "Siphon", description : "The gremlin drains aether from an aether-powered device it can see within 5 feet of it. If the object isn't being worn or carried, the touch automatically drains aether. If the object is being worn or carried by a creature, the creature must succeed on a DC 11 Dexterity saving throw to keep it out of the gremlin's reach. If the aether-powered device grants any bonus (to attack rolls, damage rolls, Armor Class, and so on), that bonus is reduced by 1. If the device has charges, it loses 1 charge. Otherwise, it stops functioning for 1 round. Left unhindered, a gremlin can completely destroy an aether-powered device." } ] }; CreatureList["sky whale"] = { // Includes contributions by SoilentBrad name : "Sky Whale", nameAlt : ["Whale, Sky"], source : [["PS:K", 28]], size : 1, type : "Beast", alignment : "Unaligned", ac : 14, hp : 85, hd : [9, 12], speed : "fly 50 ft (hover)", scores : [21, 9, 17, 2, 10, 7], skills : { "stealth" : 5 }, passivePerception : 10, challengeRating : "5", proficiencyBonus : 3, attacksAction : 2, attacks : [{ name : "Flipper", ability : 1, damage : [2, 8, "bludgeoning"], range : "Melee (10 ft)", description : "Target must succeed on a DC 16 Strength saving throw or be knocked prone" }, { name : "Tail", ability : 1, damage : [2, 8, "bludgeoning"], range : "Melee (10 ft)", description : "Target must succeed on a DC 16 Strength saving throw or be knocked prone" } ], actions : [{ name : "Multiattack", description : "As an action on its turn, the whale can make one Flipper and one Tail attack." }], traits : [{ name : "Hold Breath", description : "The whale can hold its breath for 30 minutes." }] }; CreatureList["servo"] = { // Includes contributions by userZynx_name name : "Servo", source : [["PS:K", 32]], size : 5, type : "Construct", companion : "familiar_not_al", alignment : "Unaligned", ac : 11, hp : 10, hd : [3, 4], speed : "20 ft", scores : [4, 11, 12, 3, 10, 7], passivePerception : 10, damage_immunities : "poison", condition_immunities : "charmed, poisoned", challengeRating : "0", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Claw", ability : 1, damage : [1, "", "slashing"], range : "Melee", description : "", modifiers : [1, ""], abilitytodamage : false } ] }; ================================================ FILE: WotC material/ps_20170705_Amonkhet.js ================================================ var iFileName = "ps_20170705_Amonkhet.js"; RequiredSheetVersion("14.0.5-beta"); // This file adds all material from the Plane Shift: Amonkhet article (https://dnd.wizards.com/articles/features/plane-shift-amonkhet) to MPMB's Character Record Sheet // This code contains contributions by /u/MILKB0T and /u/juju2569 // Define the source SourceList["PS:A"] = { name : "Plane Shift: Amonkhet", abbreviation : "PS:A", group : "Plane Shift", campaignSetting : "Magic: The Gathering", url : "https://media.wizards.com/2017/downloads/magic/plane-shift_amonkhet.pdf", date : "2017/07/05" }; // Adds 2 backgrounds and 3 background features BackgroundList["initiate"] = { regExpSearch : /initiate/i, name : "Initiate", source : [["PS:A", 8]], skills : ["Athletics", "Intimidation"], gold : 15, equipright : [ ["Common clothes", "", 3], ["Belt pouch (with coins)", "", 1] ], equipleft : [ ["Simple puzzle box", "", 1], ["Scroll with divine teachings", "", ""], ["Gaming set", "", ""], ["Earned cartouches", "", ""] ], feature : "Trials of the Five Gods", trait : [ "I always have a joke on hand when the mood gets too serious.", "I use sarcasm and insults to keep a distance between myself and my crop-mates, because I don't want to get attached to them.", "I'll settle for nothing less than perfection\u2014in myself, in my cropmates, in everything.", "I'm so focused on the glorious afterlife that nothing in this life can shake my calm resolve.", "I enjoy using my skills to help those who lack those same skills.", "I train hard so that I can play hard at the end of the day. I fully expect to play even harder in the glorious afterlife, but I'm not in a hurry to get there.", "I'm perfectly happy letting others pick up the slack for me while I take it easy.", "I'm constantly sizing up everyone around me, thinking about what kind of opponent they'll be in the final trial." ], ideal : [ ["Solidarity", "Solidarity: The thing that matters most of all is that we're there for each other. (Lawful)" ], ["Knowledge", "Knowledge: The world is a puzzle\u2014a mystery waiting to be solved. (Neutral)" ], ["Strength", "Strength: All that matters to me is my own perfection. Let everyone else seek that perfection in their own way. (Any)" ], ["Ambition", "Ambition: I'm going to prove that I deserve only the best\u2014of everything. (Evil)" ], ["Zeal", "Zeal: Anything worth doing is worth throwing my whole self into. (Any)" ], ["Redemption", "Redemption: I will train all the harder to make up for the doubt I entertained when I was younger. (Any)" ] ], bond : [ "One of my crop-mates is my dearest friend, and I hope we will face each other in the final trial.", "I am in love with a vizier.", "I am particularly drawn to one of the five gods, and I want nothing more than to win that god's particular favor.", "I am more devoted to Naktamun and its people than I am to any of the ideals of the gods.", "My weapon was a gift from a beloved trainer who died in an accident.", "I carry a memento of my time as an acolyte, and I treasure it above all other things." ], flaw : [ "I'm easily distracted by an attractive person, which could be the death of me in the trials.", "I really wanted to be a vizier, and I'm angry at the god who didn't choose me.", "Training for a lifetime to die in the end seems like a big waste of energy.", "I'm not at all sure I'll be able to grant a glorified death to any of my crop-mates.", "I have a lasting grudge against one of my crop-mates, and each of us wants to see the other fail.", "I think I've figured out that this world is not what it seems. Something dark is going on here." ], toolProfs : [["Gaming set", 1], "Vehicles (land)"], variant : [] }; BackgroundList["vizier"] = { regExpSearch : /vizier/i, name : "Vizier", source : [["PS:A", 10]], skills : ["History", "Religion"], gold : 25, equipright : [ ["Fine clothes", "", 6], ["Belt pouch (with coins)", "", 1] ], equipleft : [ ["Scroll with divine teachings", "", ""], ["Artisan's tools or musical instrument", "", ""], ["Vizier's cartouche", "", ""] ], feature : "Voice of Authority", trait : [ "Everything I do, I do gracefully and deliberately, and with complete confidence. (Oketra)", "Nothing can shake my rock-hard focus. (Oketra)", "When I am at peace, I am an oasis of perfect calm in the world. When I am roused to anger, I am an embodiment of terror. (Kefnet)", "I enjoy teasing acolytes and initiates with juicy tidbits of knowledge wrapped up in fiendishly difficult puzzles. (Kefnet)", "I have the utmost faith in myself and my abilities. (Rhonas)", "I get restless when life in the city feels too tame, too safe. (Rhonas)", "I enjoy solitude as an opportunity to plan my victory. (Bontu)", "I use satire as a way to undermine the teachings of the other gods. (Bontu)", "I love, fight, and feast with equal zeal. (Hazoret)", "I think of those in my care as my family, in a way that most people have trouble understanding. (Hazoret)" ], ideal : [ ["Solidarity", "Solidarity: The worthy must respect the worthy. In the afterlife, all will be united in goal and action. (Oketra)" ], ["Knowledge", "Knowledge: The worthy shall cultivate a nimble mind, so as to perceive the wonders beyond imagination that wait in the afterlife. (Kefnet)" ], ["Strength", "Strength: The worthy shall hone a strong body that can withstand the boundless energies of the afterlife. (Rhonas)" ], ["Ambition", "Ambition: The worthy shall strive for greatness, for supremacy in life leads to supremacy in the afterlife. (Bontu)" ], ["Zeal", "Zeal: The worthy shall rush to the God-Pharaoh's side with relentless passion, rising to overcome every obstacle in their way. (Hazoret)" ], ["Naktamun", "Naktamun: The life of the city is ordered according to the plan of the God-Pharaoh, and that order must be preserved at all costs." ] ], bond : [ "My loyalty to my companions embodies the ideal of loyalty to my god. (Oketra)", "The teachings of my god are more precious to me than any possession. (Kefnet)", "I would do anything to defend the temple of my god from any harm or desecration. (Rhonas)", "I am committed to the service of my god\u2014because it's my sure ticket into the afterlife. (Bontu)", "I love my god and never want my service to end. (Hazoret)", "I have a close friend or lover who is also a vizier." ], flaw : [ "I am in love with an initiate, and I want to shield this person from death in the trials.", "I secretly wish I had not been chosen as a vizier, so I could participate in the trials as an initiate.", "I secretly question whether the gods care at all about us or what we do.", "A vizier of another god seeks my death in retribution for a past insult.", "I am terrified of what lies beyond the Gate to the Afterlife.", "I secretly believe the God-Pharaoh's return will not bring blessing to this world." ], toolProfs : [["Artisan's tools", 1], ["Musical instrument", 1]], variant : [] }; BackgroundFeatureList["trials of the five gods"] = { description : "I live to do the five trials to determine my worthiness in the afterlife. While preparing for these, I have access to training, a place to live, and regular meals. I can enjoy these benefits only as long as I obey the societal norms of Naktamun, obeying the orders of the gods and the instructions of their viziers. If I violate these norms, I risk being treated as a dissenter.", source : [["PS:A", 9]] }; BackgroundFeatureList["voice of authority"] = { description : "My voice is the voice of my god, at least in theory. My job might include training and instructing initiates, and they are required to obey me. In any circumstance, an initiate is expected to defer to my voice and obey my commands. If I abuse this authority, though, my god might personally punish me.", source : [["PS:A", 10]] }; BackgroundFeatureList["shelter of dissenters"] = { description : "If dissenters wish to have any hope of survival, whether hiding within the city or cast out into the desert, they must help each other. I can find a place to hide, rest, or recuperate among other dissenters. They will help shield me from those who hunt me, possibly even risking their lives for me.", source : [["PS:A", 11]] }; // Adds 5 races RaceList["ibis-headed aven"] = { // Includes contributions by /u/MILKB0T regExpSearch : /^(?=.*aven)(?=.*ibis).*$/i, name : "Ibis-Headed Aven", sortname : "Aven, Ibis-Headed", source : [["PS:A", 16]], plural : "Ibis-Headed Avens", size : 3, speed : { walk : { spd : 25, enc : 15 }, fly : { spd : 30, enc : 0 } }, languageProfs : ["Common", "Aven"], age : " age like humans and can live into their 80s", height : " stand between 5 and 6 feet tall", weight : " are very slender and their bones are partially hollow to facilitate their flight", heightMetric : " stand between 1,5 and 1,8 metres tall", scores : [0, 2, 0, 1, 0, 0], trait : "Ibis-Headed Aven (+2 Dexterity, +1 Intelligence)\n\nKefnet's Blessing: I can add half my proficiency bonus, rounded down, to any Intelligence check I make that doesn't already include my proficiency bonus." }; if (!SourceList["PS:D"]) { RaceList["hawk-headed aven"] = { // Includes contributions by /u/MILKB0T regExpSearch : /^(?=.*aven)(?=.*hawk).*$/i, name : "Hawk-Headed Aven", sortname : "Aven, Hawk-Headed", source : [["PS:A", 16], ["PS:D", 6]], plural : "Hawk-Headed Avens", size : 3, speed : { walk : { spd : 25, enc : 15 }, fly : { spd : 30, enc : 0 } }, languageProfs : ["Common", "Aven"], skills : ["Perception"], age : " age like humans and can live into their 80s", height : " stand between 5 and 6 feet tall", weight : " are very slender and their bones are partially hollow to facilitate their flight", heightMetric : " stand between 1,5 and 1,8 metres tall", scores : [0, 2, 0, 0, 2, 0], trait : "Hawk-Headed Aven (+2 Dexterity, +2 Wisdom)\n\nHawkeyed: I have proficiency in the Perception skill.\n\nAttacking at long range doesn't impose disadvantage on my ranged weapon attack rolls." }; }; RaceList["khenra"] = { // Includes contributions by /u/juju2569 regExpSearch : /khenra/i, name : "Khenra", source : [["PS:A", 18]], plural : "Khenra", size : 3, speed : { walk : { spd : 35, enc : 25 } }, languageProfs : ["Common", "Khenra"], weaponProfs : [false, false, ["javelin", "khopesh", "spear"]], age : " reaching adulthood in their early teens and rarely live past 60, even without a violent death", height : " range from under 5 to over 6 feet tall (4'6\" + 2d10\")", weight : " weigh around 115 lb (90 + 2d10 \xD7 1d4 lb)", heightMetric : " range from under 1,5 to over 1,8 metres tall (140 + 5d10 cm)", weightMetric : " weigh around 55 kg (40 + 5d10 \xD7 2d4 / 10 kg)", scores : [1, 2, 0, 0, 0, 0], trait : "Khenra (+2 Dexterity, +1 Strength)\n\nKhenra Twins: If my twin is alive and I can see my twin, I can reroll the die once whenever I roll a 1 on an attack roll, ability check, or saving throw. I must then use the new roll. If my twin is dead (or if I was born without a twin), I can't be frightened." }; RaceList["amonkhet minotaur"] = { // Includes contributions by /u/juju2569 regExpSearch : /^(?=.*amonkhet)(?=.*minotaur).*$/i, name : "Amonkhet Minotaur", sortname : "Minotaur, Amonkhet", source : [["PS:A", 20]], plural : "Amonkhet Minotaurs", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Minotaur"], weaponOptions : [{ baseWeapon : "unarmed strike", regExpSearch : /\bhorns?\b/i, name : "Horns", source : [["PS:A", 20]], damage : [1, 6, "bludgeoning"], selectNow : true }], skills : ["Intimidation"], age : " reach full maturity around the age of 20, but rarely live beyond 40", height : " are well over 6 feet tall", weight : " have strong, stocky builds", heightMetric : " are well over 1,8 metres tall", scores : [2, 0, 1, 0, 0, 0], features : { "relentless endurance" : { name : "Relentless Endurance", minlevel : 1, usages : 1, recovery : "long rest" }, "savage attacks" : { name : "Savage Attacks", minlevel : 1, calcChanges : { atkAdd : [ function (fields, v) { if (v.isMeleeWeapon && (/d\d+/).test(fields.Damage_Die)) { if (v.extraCritM) { v.extraCritM += 1; var extraCritRegex = /\d+(d\d+ extra on a crit(ical)?( hit)? in melee)/i; fields.Description = fields.Description.replace(extraCritRegex, v.extraCritM + '$1'); } else { v.extraCritM = 1; fields.Description += (fields.Description ? '; ' : '') + v.extraCritM + fields.Damage_Die.replace(/.*(d\d+).*/, '$1') + ' extra on a crit in melee'; } } }, "My melee weapon attacks roll 1 additional dice on a critical hit.", 900 ] } } }, trait : "Amonkhet Minotaur (+2 Strength, +1 Constitution)\nHorns: I can use my horns to make unarmed strikes, doing 1d6 damage instead of 1.\nRelentless Endurance: When I am reduced to 0 hit points but not killed outright, I can drop to 1 hit point instead. I can't use this feature again until I finish a long rest.\nSavage Attacks: When I score a critical hit with a melee weapon attack, I can roll one of the weapon's damage dice one additional time and add it to the extra damage of the critical hit." }; RaceList["naga"] = { // Includes contributions by /u/juju2569 regExpSearch : /naga/i, name : "Naga", source : [["PS:A", 22]], plural : "Nagas", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Naga"], toolProfs : ["Poisoner's kit"], savetxt : { immune : ["poison"] }, weaponOptions : [{ // Includes contributions by /u/juju2569 regExpSearch : /^(?=.*naga)(?=.*bite).*$/i, name : "Naga Bite", source : [["PS:A", 22]], ability : 1, type : "Natural", damage : [1, 4, "piercing"], range : "Melee", description : "Target must make Constitution save (DC 8 + Prof Bonus + Con mod) or take +1d4 poison damage", abilitytodamage : true, selectNow : true }, { regExpSearch : /\bconstrict\b/i, name : "Constrict", source : [["PS:A", 22]], ability : 1, type : "Natural", damage : [1, 6, "bludgeoning"], range : "Melee", description : "Target is grappled and restrained (escape DC 8+Prof+Str mod); Can't use constrict again until grapple ends", abilitytodamage : true, selectNow : true }], age : " reach adulthood in their late teens and show no signs of aging beyond that point except for growing larger. They could live well over a century.", height : " stand about 5 feet tall when upright, but the total length of their bodies, head to tail, ranges from 10 to as much as 20 feet", weight : " weigh around 200 lb", heightMetric : " stand about 1,5 metres tall when upright, but the total length of their bodies, head to tail, ranges from 3 to as much as 6 metres", weightMetric : " weigh around 100 kg", scores : [0, 0, 2, 1, 0, 0], trait : "Naga (+1 Intelligence, +2 Constitution)\nSpeed Burst: As a bonus action on my turn, if I have both hands free, I can increase my walking speed by 5 ft until the end of my turn. By lowering my body to the ground and propelling myself with my arms, I can move more quickly for a time.\nNatural Weapons: I can bite with my fanged maw to poison a creature and constrict with my serpentine body. If I hit with a constrict attack, the target is grappled and restrained. Until this grapple ends, I can't use constrict on another target." }; // Add weapons for races WeaponsList.longsword.regExpSearch = WeaponsList.longsword.regExpSearch.replace("|", "|khopesh|"); // Adds 4 subclasses for the Cleric AddSubClass("cleric", "solidarity domain", { // Includes contributions by /u/juju2569 regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*\b(solidarity|teamwork|oketra)\b).*$/i, subname : "Solidarity Domain", subnameShort: "Solidarity", source : [["PS:A", 24]], spellcastingExtra : ["bless", "guiding bolt", "aid", "warding bond", "beacon of hope", "crusader's mantle", "aura of life", "guardian of faith", "circle of power", "mass cure wounds"], features : { "subclassfeature1" : { name : "Bonus Proficiency", source : [["PS:A", 24]], minlevel : 1, description : desc("I gain proficiency with heavy armor"), armorProfs : [false, false, true, false] }, "subclassfeature1.1" : { name : "Solidarity's Action", source : [["PS:A", 24]], minlevel : 1, description : desc("When I do the Help action to aid an ally, I can make a weapon attack as a bonus action"), usages : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest", action : [["bonus action", " (with Help action)"]] }, "subclassfeature2" : { name : "Channel Divinity: Preserve Life", source : [["PS:A", 24]], minlevel : 2, description : desc([ "As an action, I heal chosen living creatures within 30 ft of me, up to half their max HP", "I can heal five times my cleric level in HP, which I have to divide over the subjects." ]), additional : levels.map(function (n) { return n < 2 ? "" : Math.floor(n*5) + " HP to divide"; }), action : [["action", ""]] }, "subclassfeature6" : { name : "Channel Divinity: Oketra's Blessing", source : [["PS:A", 24]], minlevel : 6, description : desc([ "As a reaction, when a creature within 30 ft makes an attack roll, I can grant a bonus", "The creature then adds a +10 bonus to the roll; I can do this after seeing the d20 roll" ]), action : [["reaction", ""]] }, "subclassfeature8" : { name : "Divine Strike", source : [["PS:A", 25]], minlevel : 8, description : desc("Once per turn, when I hit a creature with a weapon attack, I can do extra damage"), additional : levels.map(function (n) { return n < 8 ? "" : "+" + (n < 14 ? 1 : 2) + "d8 weapon damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && v.isWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.cleric.level < 14 ? 1 : 2) + 'd8 damage'; } }, "Once per turn, I can have one of my weapon attacks that hit do extra damage." ] } }, "subclassfeature17" : { name : "Supreme Healing", source : [["PS:A", 25]], minlevel : 17, description : desc("When I cast a healing spell, all dice for determining HP are treated as rolling maximum"), } } }); AddSubClass("cleric", "strength domain", { // Includes contributions by /u/juju2569 regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*\b(strength|toughness|rhonas)\b).*$/i, subname : "Strength Domain", subnameShort: "Strength", source : [["PS:A", 25]], spellcastingExtra : ["divine favor", "shield of faith", "enhance ability", "protection from poison", "haste", "protection from energy", "dominate beast", "stoneskin", "destructive wave", "insect plague"], features : { "subclassfeature1" : { name : "Acolyte of Strength", source : [["PS:A", 26]], minlevel : 1, description : desc([ "I learn a druid cantrip", "I gain proficiency with one skill: Animal Handling, Athletics, Nature, or Survival" ]), skillstxt : "Choose one from: Animal Handling, Athletics, Nature, or Survival", spellcastingBonus : [{ name : "Acolyte of Strength", "class" : "druid", level : [0, 0], firstCol : 'atwill' }] }, "subclassfeature1.1" : { name : "Bonus Proficiency", source : [["PS:A", 26]], minlevel : 1, description : desc("I gain proficiency with heavy armor"), armorProfs : [false, false, true, false] }, "subclassfeature2" : { name : "Channel Divinity: Feat of Strength", source : [["PS:A", 26]], minlevel : 2, description : desc([ "When I make an attack roll, ability check, or save using Strength, I can bless it", "I can then add a +10 bonus to the roll; I can do this after seeing the d20 roll" ]) }, "subclassfeature6" : { name : "Channel Divinity: Rhonas's Blessing", source : [["PS:A", 26]], minlevel : 6, description : desc([ "As a reaction if any within 30 ft do an attack, check, or save using Str, I can bless it", "The subject adds a +10 bonus to the roll; I can do this after seeing the d20 roll" ]), action : [["reaction", ""]] }, "subclassfeature8" : { name : "Divine Strike", source : [["PS:A", 26]], minlevel : 8, description : desc("Once per turn, when I hit a creature with a weapon attack, I can do extra damage"), additional : levels.map(function (n) { return n < 8 ? "" : "+" + (n < 14 ? 1 : 2) + "d8 weapon damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && v.isWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.cleric.level < 14 ? 1 : 2) + 'd8 damage'; } }, "Once per turn, I can have one of my weapon attacks that hit do extra damage." ] } }, "subclassfeature17" : { name : "Avatar of Battle", source : [["PS:A", 26]], minlevel : 17, description : desc("I have resistance to bludgeoning/piercing/slashing damage from nonmagical weapons"), dmgres : [["Bludgeoning", "Bludg. (nonmagical)"], ["Piercing", "Pierc. (nonmagical)"], ["Slashing", "Slash. (nonmagical)"]] } } }); AddSubClass("cleric", "ambition domain", { // Includes contributions by /u/juju2569 regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*\b(ambition|bontu)\b).*$/i, subname : "Ambition Domain", subnameShort: "Ambition", source : [["PS:A", 27]], spellcastingExtra : ["bane", "disguise self", "mirror image", "ray of enfeeblement", "bestow curse", "vampiric touch", "death ward", "dimension door", "dominate person", "modify memory"], features : { "subclassfeature1" : { name : "Warding Flare", source : [["PS:A", 27]], minlevel : 1, description : desc([ "When a creature within 30 ft attacks me and I can see it, I can interpose divine light", "As a reaction, I impose disadv. on the attacker's attack roll (unless it can't be blinded)" ]), usages : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest", action : [["reaction", ""]] }, "subclassfeature2" : { name : "Channel Divinity: Invoke Duplicity", source : [["PS:A", 27]], minlevel : 2, description : desc([ "As an action, I create illusory duplicates of myself within 30 ft of me for 1 min (conc)", "As a bonus action, I can move them 30 ft to space(s) I can see within 120 ft of me", "I can cast spells as though I was in an duplicate's space, using my own senses", "I have advantage on attacks if the target is within 5 ft of a duplicate and me" ]), additional : levels.map(function (n) { return n < 2 ? "" : (n < 17 ? 1 : 2) + " illusory duplicate" + (n < 17 ? "" : "s"); }), action : [["action", ""], ['bonus action', 'Move Duplicate(s)']] }, "subclassfeature6" : { name : "Channel Divinity: Cloak of Shadows", source : [["PS:A", 27]], minlevel : 6, description : desc("As an action, I become invisible until the end of my next turn or I attack/cast a spell"), action : [["action", ""]] }, "subclassfeature8" : { name : "Potent Spellcasting", source : [["PS:A", 27]], minlevel : 8, description : desc("I add my Wisdom modifier to the damage I deal with my cleric cantrips"), calcChanges : GenericClassFeatures["potent spellcasting"].calcChanges }, "subclassfeature17" : { name : "Improved Duplicity", source : [["PS:A", 27]], minlevel : 17, description : desc([ "When I use Invoke Duplicity, I make four illusory duplicates instead of one", "I can move any number of the illusory duplicates as part of the same bonus action" ]) } } }); AddSubClass("cleric", "zeal domain", { // Includes contributions by /u/MILKB0T regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*\b(zeal|hazoret)\b).*$/i, subname : "Zeal Domain", subnameShort: "Zeal", source : [["PS:A", 28]], spellcastingExtra : ["searing smite", "thunderous smite", "magic weapon", "shatter", "haste", "fireball", "fire shield", "freedom of movement", "destructive wave", "flame strike"], features : { "subclassfeature1" : { name : "Bonus Proficiency", source : [["PS:A", 28]], minlevel : 1, description : desc("I gain proficiency with martial weapons and heavy armor"), armorProfs : [false, false, true, false], weaponProfs : [false, true] }, "subclassfeature1.1" : { name : "Priest of Zeal", source : [["PS:A", 28]], minlevel : 1, description : desc("When I use the Attack action, I can make a weapon attack as a bonus action"), usages : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest", action : [["bonus action", " (with Attack action)"]] }, "subclassfeature2" : { name : "Channel Divinity: Consuming Fervor", source : [["PS:A", 28]], minlevel : 2, description : desc("Instead of rolling, I can do maximum damage when I do fire or thunder damage") }, "subclassfeature6" : { name : "Resounding Strike", source : [["PS:A", 28]], minlevel : 6, description : desc("When I deal thunder damage to a Large or smaller foe, I can push it up to 10 ft away") }, "subclassfeature8" : { name : "Divine Strike", source : [["PS:A", 28]], minlevel : 8, description : desc("Once per turn, when I hit a creature with a weapon attack, I can do extra damage"), additional : levels.map(function (n) { return n < 8 ? "" : "+" + (n < 14 ? 1 : 2) + "d8 weapon damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && v.isWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.cleric.level < 14 ? 1 : 2) + 'd8 damage'; } }, "Once per turn, I can have one of my weapon attacks that hit do extra damage." ] } }, "subclassfeature17" : { name : "Blaze of Glory", source : [["PS:A", 28]], minlevel : 17, description : desc([ "As a reaction when I'm reduced to 0 HP or killed outright, I can do a final heroic act", "I move my speed towards my attacker and attack it once in melee with advantage", "If the attack hits, it does an extra 5d10 fire and extra 5d10 weapon damage", "After this, I suffer the consequences of the damage as I would normally do" ]), usages : 1, recovery : "long rest", action : [["reaction"]] } } }); // Adds 1 creature CreatureList["serpopard"] = { name : "Serpopard", source : [["PS:A", 37]], size : 2, type : "Beast", alignment : "Unaligned", ac : 12, hp : 52, hd : [7, 10], speed : "40 ft", scores : [18, 14, 15, 3, 12, 8], skills : { "perception" : 3, "stealth" : 6 }, senses : "Adv. on Wis (Perception) checks using smell", passivePerception : 13, challengeRating : "3", proficiencyBonus : 2, attacksAction : 2, attacks : [{ name : "Claw", // No Claw attack in the stat block, but logical considering the Pounce trait and CR 3 ability : 1, damage : [1, 8, "slashing"], range : "Melee (5 ft)", description : "If used after moving 20 ft straight in the same round, see Pounce trait" }, { name : "Bite", ability : 1, damage : [1, 10, "piercing"], range : "Melee (5 ft)", description : "Target also takes 3d6 poison damage, half on a DC 14 Constitution saving throw" } ], traits : [{ name : "Keen Smell", description : "The serpopard has advantage on Wisdom (Perception) checks that rely on smell." }, { name : "Pounce", description : "If the serpopard moves at least 20 ft straight toward a creature and then hits it with a claw attack on the same turn, that target must succeed on a DC 14 Strength saving throw or be knocked prone. If the target is prone, the serpopard can make one bite attack against it as a bonus action." } ] }; CreatureList["cerodon"] = { name : "Cerodon", source : [["PS:A", 37]], size : 1, type : "Beast", alignment : "Unaligned", ac : 13, hp : 126, hd : [11, 12], speed : "40 ft", scores : [24, 9, 21, 3, 11, 6], passivePerception : 10, challengeRating : "6", proficiencyBonus : 3, attacksAction : 1, attacks : [{ name : "Gore", ability : 1, damage : [4, 8, "bludgeoning"], range : "Melee (10 ft)", description : "If used after moving 20 ft straight in the same round, see Trampling Charge trait" }, { name : "Stomp", ability : 1, damage : [4, 10, "bludgeoning"], range : "Melee (5 ft)", description : "Can only be used on prone creatures (also see Trampling Charge trait)" } ], traits : [{ name : "Trampling Charge", description : "If the cerodon moves at least 20 ft straight toward a creature and then hits it with a gore attack on the same turn, that target must succeed on a DC 18 Strength saving throw or be knocked prone. If the target is prone, the cerodon can make one stomp attack against it as a bonus action." }, { name : "Siege Monster", description : "The cerodon deals double damage to objects and structures." } ] }; CreatureList["hippopotamus"] = { name : "Hippopotamus", source : [["PS:A", 37]], size : 1, type : "Beast", alignment : "Unaligned", ac : 12, hp : 76, hd : [8, 12], speed : "40 ft, swim 30 ft", scores : [22, 9, 17, 3, 11, 6], passivePerception : 10, challengeRating : "4", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Bite", ability : 1, damage : [3, 8, "piercing"], range : "Melee (5 ft)", description : "If used after moving 20 ft straight in the same round, see Trampling Charge trait" }, { name : "Stomp", ability : 1, damage : [3, 10, "bludgeoning"], range : "Melee (5 ft)", description : "Can only be used on prone creatures (also see Trampling Charge trait)" } ], traits : [{ name : "Hold Breath", description : "The hippopotamus can hold its breath for 30 minutes." }, { name : "Trampling Charge", description : "If the hippopotamus moves at least 20 ft straight toward a creature and then hits it with a Bit attack on the same turn, that target must succeed on a DC 12 Strength saving throw or be knocked prone. If the target is prone, the hippopotamus can make one stomp attack against it as a bonus action." } ] }; ================================================ FILE: WotC material/ps_20180109_Ixalan.js ================================================ var iFileName = "ps_20180109_Ixalan.js"; RequiredSheetVersion("14.0.5-beta"); // This file adds all material from the Plane Shift: Ixalan article (https://magic.wizards.com/en/articles/archive/feature/plane-shift-ixalan-2018-01-09) to MPMB's Character Record Sheet // Define the source SourceList["PS:X"] = { name : "Plane Shift: Ixalan", abbreviation : "PS:X", group : "Plane Shift", campaignSetting : "Magic: The Gathering", url : "https://media.wizards.com/2018/downloads/magic/plane-shift_ixalan.pdf", date : "2018/01/09" }; // Adds 6 races RaceList["green merfolk"] = { regExpSearch : /^(?=.*green)(?=.*(merfolk|mermaid|merman)\b).*$/i, name : "Green Merfolk", sortname : "Merfolk, Green", source : [["PS:X", 12]], plural : "Green Merfolk", size : 3, speed : { walk : { spd : 30, enc : 20 }, swim : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Merfolk", 1], age : " reach adulthood around 20 and live considerably longer than humans, often reaching well over 100 years", height : " stand between 6 and 7 feet tall", weight : " average around 300 pounds", heightMetric : " stand between 1,8 and 2,2 metres tall", weightMetric : " average around 135 kg", scores : [0, 0, 0, 0, 2, 1], trait : "Green Merfolk (+2 Wisdom, +1 Charisma)\nAmphibious: I can breathe air and water.\nMask of the Wild: I can attempt to hide even when I am only lightly obscured by foliage, heavy rain, falling snow, mist, and other natural phenomena.\nCantrip: I know one cantrip of my choice from the druid spell list. Wisdom is my spellcasting ability for it.", spellcastingAbility : 5, spellcastingBonus : [{ name : "Cantrip", "class" : "druid", level : [0, 0], firstCol : 'atwill' }] }; RaceList["blue merfolk"] = { regExpSearch : /^(?=.*blue)(?=.*(merfolk|mermaid|merman)\b).*$/i, name : "Blue Merfolk", sortname : "Merfolk, Blue", source : [["PS:X", 12]], plural : "Blue Merfolk", size : 3, speed : { walk : { spd : 30, enc : 20 }, swim : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Merfolk", 1], age : " reach adulthood around 20 and live considerably longer than humans, often reaching well over 100 years", height : " stand between 6 and 7 feet tall", weight : " average around 300 pounds", heightMetric : " stand between 1,8 and 2,2 metres tall", weightMetric : " average around 135 kg", skills : ["History", "Nature"], scores : [0, 0, 0, 2, 0, 1], trait : "Blue Merfolk (+2 Intelligence, +1 Charisma)\nAmphibious: I can breathe air and water.\nLore of the Waters: I have proficiency with the History and Nature skills.\nCantrip: I know one cantrip of my choice from the wizard spell list. Intelligence is my spellcasting ability for it.", spellcastingAbility : 4, spellcastingBonus : [{ name : "Ula Creed Cantrip", "class" : "wizard", level : [0, 0], firstCol : 'atwill' }] }; RaceList["ixalan vampire"] = { regExpSearch : /^(?=.*vampire)(?=.*ixalan).*$/i, name : "Vampire", sortname : "Vampire, Ixalan", source : [["PS:X", 14]], plural : "Vampires", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Vampire"], vision : [["Darkvision", 60]], dmgres : ["Necrotic"], weaponOptions : [{ regExpSearch : /^(?=.*blood)(?=.*thirst).*$/i, name : "Blood Thirst", source : [["PS:X", 14]], ability : 1, type : "Natural", damage : [1, 6, "necrotic"], range : "Melee", description : "+1 piercing damage; Reduces max HP by the necrotic damage, while healing me for the same", abilitytodamage : false, monkweapon : false, selectNow : true }], age : " don't mature and age in the same way that other races do", scores : [0, 0, 0, 0, 1, 2], trait : "Vampire (+1 Wisdom, +2 Charisma)\nBlood Thirst: I can drain blood and life energy from a willing creature, or one that is grappled by me, incapacitated, or restrained. With a melee attack, I deal 1 piercing and 1d6 necrotic damage. The target's max HP is reduced by the necrotic damage amount and I regain HP for the same. This max HP reduction lasts until the target finished a long rest.\nFeast of Blood: After using my blood thirst ability to drain blood, I gain +10 ft speed and advantage on Strength and Dexterity checks and saving throws for 1 minute." }; RaceList["ixalan orc"] = { regExpSearch : /^(?=.*ixalan)(?=.*orc).*$/i, name : "Ixalan orc", sortname : "Orc, Ixalan", source : [["PS:X", 15]], plural : "Ixalan orcs", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Orc"], vision : [["Darkvision", 60]], skills : ["Intimidation"], age : " reach adulthood at age 14 and rarely live longer than 75 years", height : " are usually over 6 feet tall (5'4\" + 2d8\")", weight : " weigh between 230 and 280 lb (175 + 2d8 \xD7 2d6 lb)", heightMetric : " are usually over 1,8 metres tall (160 + 5d8 cm)", weightMetric : " weigh between 100 and 125 kg (80 + 5d8 \xD7 4d6 / 10 kg)", scores : [2, 0, 1, 0, 0, 0], features : { "relentless endurance" : { name : "Relentless Endurance", minlevel : 1, usages : 1, recovery : "long rest" }, "savage attacks" : { name : "Savage Attacks", minlevel : 1, calcChanges : { atkAdd : [ function (fields, v) { if (v.isMeleeWeapon && (/d\d+/).test(fields.Damage_Die)) { if (v.extraCritM) { v.extraCritM += 1; var extraCritRegex = /\d+(d\d+ extra on a crit(ical)?( hit)? in melee)/i; fields.Description = fields.Description.replace(extraCritRegex, v.extraCritM + '$1'); } else { v.extraCritM = 1; fields.Description += (fields.Description ? '; ' : '') + v.extraCritM + fields.Damage_Die.replace(/.*(d\d+).*/, '$1') + ' extra on a crit in melee'; } } }, "My melee weapon attacks roll 1 additional dice on a critical hit.", 900 ] } } }, trait : "Ixalan Orc (+2 Strength, +1 Constitution)" + (typePF ? "\n" : " ") + "\nRelentless Endurance: When I am reduced to 0 hit points but not killed outright, I can drop to 1 hit point instead. I can't use this feature again until I finish a long rest.\n\nSavage Attacks: When I score a critical hit with a melee weapon attack, I can roll one of the weapon's damage dice one additional time and add it to the extra damage of the critical hit." }; RaceList["ixalan goblin"] = { regExpSearch : /^(?=.*ixalan)(?=.*goblin).*$/i, name : "Ixalan goblin", sortname : "Goblin, Ixalan", source : [["PS:X", 16]], plural : "Ixalan goblins", size : 4, speed : { walk : { spd : 25, enc : 15 }, climb : { spd : 25, enc : 0 } }, languageProfs : ["Common", "Goblin"], vision : [["Darkvision", 60]], age : " reach adulthood at around 12 and rarely live longer than 50 years", height : " average about 3 feet tall (3'\" + 2d4\")", weight : " weigh about 40 lb (35 + 2d4 \xD7 1d4 lb)", heightMetric : " average about 100 cm tall (100 + 5d4 cm)", weightMetric : " weigh about 20 kg (17 + 5d4 \xD7 2d4 / 10 kg)", scores : [0, 2, 0, 0, 0, 0], trait : "Ixalan Goblin (+2 Dexterity)\nAgile Climber: I have a climbing speed of 25 ft, but can't use this while encumbered or wearing medium or heavy armor." }; RaceList["siren"] = { regExpSearch : /\bsiren\b/i, name : "Siren", source : [["PS:X", 17]], plural : "Sirens", size : 3, speed : { walk : { spd : 25, enc : 15 }, fly : { spd : 30, enc : 0 } }, languageProfs : ["Common", "Siren"], height : " range from 5 to 6 feet tall (4'9\" + 2d8\")", weight : " have slender bodies and their bones partially hollow to facilitate their flight", heightMetric : " range from 1,5 to 1,8 metres tall (145 + 5d8 cm)", scores : [0, 2, 0, 0, 0, 0], trait : "Siren (+2 Charisma)\n\nFlight: I have a flying speed of 30 ft, but can't use this while encumbered or wearing medium or heavy armor.\n\nSiren's Song: I know the friends cantrip and can cast it without material components.", spellcastingBonus : [{ name : "Siren's Song", spells : ["friends"], selection : ["friends"], firstCol : 'atwill' }] }; FeatsList["vampiric exultation"] = { name : "Vampiric Exultation", source : [["PS:X", 14]], prerequisite : "Being an Ixalan Vampire", prereqeval : function () { return CurrentRace.known == 'ixalan vampire' }, descriptionFull : "As an action, you can transform the lower half of your body into an inky black vapor, allowing you to float through the air. While transformed, you have a flying speed of 30 feet. You can maintain this form for up to 10 minutes. Once you use this ability, you can't use it again until you finish a short or long rest.", description : "As an action, I can transform the lower half of my body into an inky black vapor for up to 10 minutes. While transformed, I have a flying speed of 30 ft. Once I use this ability, I can't use it again until I finish a short or long rest.", action : [["action", ""]], usages : 1, recovery : "short rest" }; // Adds 1 creature, a beast CreatureList["frilled deathspitter"] = { name : "Frilled Deathspitter", source : [["PS:X", 30]], size : 4, type : "Beast", alignment : "Unaligned", ac : 13, hp : 18, hd : [4, 6], speed : "40 ft", scores : [12, 16, 13, 4, 12, 6], skills : { "perception" : 3 }, passivePerception : 13, challengeRating : "1/2", proficiencyBonus : 2, attacksAction : 3, attacks : [{ name : "Bite", ability : 2, damage : [1, 6, "piercing"], range : "Melee (5 ft)", description : "One bite and two claw attacks as an Attack action" }, { name : "Claw", ability : 2, damage : [1, 6, "slashing"], range : "Melee (5 ft)", description : "Two claw and one bite attack as an Attack action" }, { name : "Spit Poison", ability : 2, damage : [4, 8, "poison"], range : "15/30 ft", description : "Target blinded til end of next turn; DC 13 Con save for half damage and not blinded", abilitytodamage : false }], actions : [{ name : "Multiattack", description : "As an action on its turn, the deathspitter can make two Claw and one Bite attack." }] }; ================================================ FILE: WotC material/ps_20180731_Dominaria.js ================================================ var iFileName = "ps_20180731_Dominaria.js"; RequiredSheetVersion("13.0.8"); // This file adds all material from the Plane Shift: Dominaria article (https://magic.wizards.com/en/articles/archive/feature/plane-shift-dominaria-2018-07-31) to MPMB's Character Record Sheet // Define the source SourceList["PS:D"] = { name : "Plane Shift: Dominaria", abbreviation : "PS:D", group : "Plane Shift", campaignSetting : "Magic: The Gathering", url : "https://media.wizards.com/2018/downloads/magic/Plane_Shift_Dominaria.pdf", date : "2018/07/31" }; // Adds the 'Aven' race, which is identical to the Hawk-Headed Aven from Plane Shift: Amonkhet if (!SourceList["PS:A"]) { RaceList["aven"] = { regExpSearch : /aven/i, name : "Aven", source : [["PS:A", 16], ["PS:D", 6]], plural : "Avens", size : 3, speed : { walk : { spd : 25, enc : 15 }, fly : { spd : 30, enc : 0 } }, languageProfs : ["Common", "Aven"], age : " age like humans and can live into their 80s", height : " stand between 5 and 6 feet tall", weight : " are very slender and their bones are partially hollow to facilitate their flight", heightMetric : " stand between 1,5 and 1,8 metres tall", scores : [0, 2, 0, 0, 2, 0], trait : "Aven (+2 Dexterity, +2 Wisdom)\n\nHawkeyed: I have proficiency in the Perception skill.\n\nAttacking at long range doesn't impose disadvantage on my ranged weapon attack rolls." }; }; // Add a new human race RaceList["keldon human"] = { regExpSearch : /^((?=.*\bkeldon?s?\b)|(?=.*keld)(?=.*human)).*$/i, name : "Keldon", sortname : "Human, Keldon", source : [["PS:D", 19]], plural : "Keldons", size : 3, speed : { walk : { spd : 30, enc : 20 } }, skills : ["Athletics"], saves : ["Str"], languageProfs : ["Common", "Keldon"], age : " reach adulthood in their late teens and live less than a century", height : " stand over 6 feet tall, reaching heights of above 7 feet", weight : " heavier than the human norms of other cultures", heightMetric : " stand over 1,8 metres tall, reaching heights of above 2,1 metres", scores : [2, 0, 1, 0, 0, 0], trait : "Keldon Human (+2 Strength, +1 Constitution)\n Natural Athlete: I am proficient with the Athletics skill.\n Keldon Resilience: I am proficient with Strength saving throws.\n Icehaven Born: I am naturally adapted to cold climates." }; // Add 2 beasts CreatureList["kavu predator"] = { name : "Kavu Predator", source : [["PS:D", 24]], size : 2, type : "Beast", alignment : "Unaligned", ac : 15, hp : 75, hd : [10, 10], speed : "30 ft, climb 30 ft", scores : [18, 12, 15, 6, 14, 8], skills : { "perception" : 4, "stealth" : 5 }, senses : "Darkvision 60 ft", passivePerception : 14, languages : "understands Elvish", challengeRating : "2", proficiencyBonus : 2, attacksAction : 2, attacks : [{ name : "Bite", ability : 1, damage : [1, 10, "piercing"], range : "Melee (5 ft)", description : "Can be used in combination with claw while pouncing (see Pounce trait)" }, { name : "Claw", ability : 1, damage : [1, 6, "slashing"], range : "Melee (5 ft)", description : "2 claw attacks as 1 action; If used after moving 20 ft straight in the same round, see Pounce trait" }], traits : [{ name : "Pounce", description : "If the kavu moves at least 20 ft straight toward a creature and then hits it with a claw attack on the same turn, that target must succeed on a DC 14 Strength saving throw or be knocked prone. If the target is prone, the kavu can make one bite attack against it as a bonus action." }] }; CreatureList["steel leaf kavu"] = { name : "Steel Leaf Kavu", nameAlt : ["Kavu, Steel Leaf"], source : [["PS:D", 24]], size : 2, type : "Beast", alignment : "Unaligned", ac : 16, hp : 142, hd : [15, 10], speed : "30 ft, climb 30 ft", scores : [20, 12, 18, 6, 14, 8], skills : { "perception" : 4 }, senses : "Darkvision 60 ft", passivePerception : 14, languages : "understands Elvish", challengeRating : "4", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Bite", ability : 1, damage : [2, 8, "piercing"], range : "Melee (5 ft)", description : "If used after moving 20 ft straight in the same round, see Raking Charge trait" }, { name : "Rend", ability : 1, damage : [4, 8, "slashing"], range : "Melee (5 ft)", description : "Can only be used if target is prone" }], traits : [{ name : "Raking Charge", description : "If the kavu moves at least 20 ft straight toward a creature and then hits it with a bit attack on the same turn, that target must succeed on a DC 15 Strength saving throw or be knocked prone. If the target is prone, the kavu can make one rend attack against it as a bonus action." }] }; ================================================ FILE: WotC material/pub_20140715_LMoP.js ================================================ var iFileName = "pub_20140715_LMoP.js"; RequiredSheetVersion("13.1.14"); // This file adds the magic items from the Lost Mines of Phandelver adventure from the D&D 5e starter set to MPMB's Character Record Sheet // Define the source SourceList["LMoP"] = { name : "Lost Mines of Phandelver [items]", abbreviation : "LMoP", group : "Adventure Books", campaignSetting : "Forgotten Realms", url : "https://www.dndbeyond.com/sources/lmop", date : "2014/07/15" }; // Magic Items MagicItemsList["dragonguard"] = { name : "Dragonguard", source : [["LMoP", 48], ["PaBTSO", 72]], type : "armor (breastplate)", rarity : "rare", magicItemTable : "G", description : "This +1 breastplate has a gold dragon motif worked into its design. It grants its wearer advantage on saving throws against the breath weapons of creatures that have the dragon type.", descriptionFull : "This +1 breastplate has a gold dragon motif worked into its design. Created for a human hero of Neverwinter named Tergon, it grants its wearer advantage on saving throws against the breath weapons of creatures that have the dragon type.", weight : 20, armorOptions : [{ regExpSearch : /dragonguard/i, name : "Dragonguard", source : [["LMoP", 48], ["PaBTSO", 72]], type : "medium", ac : "14+1", weight : 20, selectNow : true }], savetxt : { adv_vs : ["breath weapons of dragons"] } } MagicItemsList["hew"] = { name : "Hew", source : [["LMoP", 33], ["PaBTSO", 54]], type : "weapon (battleaxe)", rarity : "uncommon", magicItemTable : "F", description : 'Dwarvish runes on the head of this rusty battleaxe read "Hew". It adds a +1 bonus to attack and damage rolls made with it and deals maximum damage against plant creatures or objects made of wood. While carrying it, I feel uneasy when I travel through a forest, as its creator was a dwarf smith who feuded with dryads.', descriptionFull : 'This rusty old battleaxe of dwarven manufacture has runes in Dwarvish on the axe head which read "Hew". Hew is a +1 battleaxe that deals maximum damage when the wielder hits a plant creature or an object made of wood. The axe\'s creator was a dwarf smith who feuded with the dryads of a forest where he used it for protection while he cut firewood. Whoever carries the axe feels uneasy whenever he or she travels through a forest.', weight : 4, weaponOptions : [{ baseWeapon : "battleaxe", regExpSearch : /\bhew\b/i, name : '"Hew"', source : [["LMoP", 33], ["PaBTSO", 54]], description : "Versatile (1d10); Max damage against plant creatures and wooden objects", modifiers : [1, 1], selectNow : true }] } MagicItemsList["lightbringer"] = { name : "Lightbringer", source : [["LMoP", 48], ["PaBTSO", 54]], type : "weapon (mace)", rarity : "uncommon", magicItemTable : "F", description : "This mace adds a +1 bonus to attack and damage rolls made with it. It is made for a cleric of the god of dawn, with its head shaped like a sunburst and made of solid brass. I can command it to glow as bright as a torch. While glowing, the mace deals an extra 1d6 radiant damage to undead creatures.", descriptionFull : "This +1 mace was made for a cleric of Lathander, the god of dawn. The head of the mace is shaped like a sunburst and is made of solid brass. Named Lightbringer, this weapon glows as bright as a torch when its wielder commands. While glowing, the mace deals an extra 1d6 radiant damage to undead creatures.", weight : 4, weaponOptions : [{ baseWeapon : "mace", regExpSearch : /lightbringer/i, name : "Lightbringer", source : [["LMoP", 48], ["PaBTSO", 54]], description : "Command to glow as torch and deal +1d6 radiant damage to undead", modifiers : [1, 1], selectNow : true }] } MagicItemsList["spider staff"] = { // changed to the new version introduced in Phandelver and Below: The Shattered Obelisk with the prerequisite name : "Spider Staff", source : [["LMoP", 53], ["PaBTSO", 220]], type : "staff", rarity : "rare", magicItemTable : "G", description : "Attacks with this black adamantine quarterstaff topped with a spider deal +1d6 poison damage on a hit. It has 10 charges and regains 1d6+4 expended charges at dawn. If I use its last charge, roll a d20. On a 1, it is destroyed. I can use its charges to cast Spider Climb (1 charge) or Web (2 charges, spell save DC 15).", descriptionFull : "The top of this black, adamantine staff is shaped like a spider. The staff weighs 6 pounds. You must be attuned to the staff to gain its benefits and cast its spells. The staff can be wielded as a quarterstaff. It deals 1d6 extra poison damage on a hit when used to make a weapon attack.\n The staff has 10 charges, which are used to fuel the spells within it. With the staff in hand, you can use your action to cast one of the following spells from the staff if the spell is on your class's spell list: Spider Climb (1 charge) or Web (2 charges, spell save DC 15). No components are required.\n The staff regains 1d6+4 expended charges each day at dusk. If you expend the staff's last charge, roll a d20. On a 1, the staff crumbles to dust and is destroyed.", attunement : true, prerequisite : "Requires attunement by a bard, sorcerer, warlock, or wizard", prereqeval : function(v) { return classes.known.bard || classes.known.sorcerer || classes.known.warlock || classes.known.wizard ? true : false; }, weight : 6, // kept to the original weight usages : 10, recovery : "dawn", additional : "regains 1d6+4", weaponOptions : [{ baseWeapon : "quarterstaff", regExpSearch : /^(?=.*spider)(?=.*staff).*$/i, name : "Spider Staff", source : [["LMoP", 53], ["PaBTSO", 220]], description : "Versatile (1d8); +1d6 poison damage", selectNow : true }], fixedDC : 15, spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "1 charge", spells : ["spider climb"], selection : ["spider climb"], firstCol : 1 }, { name : "2 charges", spells : ["web"], selection : ["web"], firstCol : 2 }] } MagicItemsList["staff of defense"] = { // changed to the new version introduced in Phandelver and Below: The Shattered Obelisk with the prerequisite name : "Staff of Defense", source : [["LMoP", 53]], type : "staff", rarity : "rare", magicItemTable : "G", description : "This slender, hollow staff is made of glass yet is as strong as oak. While holding it, I gain a +1 bonus to AC. It has 10 charges and regains 1d6+4 expended charges at dawn. If I use its last charge, roll a d20. On a 1, it is destroyed. I can use its charges to cast Mage Armor (1 charge) or Shield (2 charges) as an action.", descriptionFull : "This slender, hollow staff is made of glass yet is as strong as oak. It weighs 3 pounds. You must be attuned to the staff to gain its benefits and cast its spells.\n While holding the staff, you have a +1 bonus to your Armor Class.\n The staff has 10 charges, which are used to fuel the spells within it. With the staff in hand, you can use your action to cast one of the following spells from the staff if the spell is on your class's spell list: Mage Armor (1 charge) or Shield (2 charges). No components are required.\n The staff regains 1d6+4 expended charges each day at dawn. If you expend the staff's last charge, roll a d20. On a 1, the staff shatters and is destroyed.", attunement : true, prerequisite : "Requires attunement by a bard, sorcerer, warlock, or wizard", prereqeval : function(v) { return classes.known.bard || classes.known.sorcerer || classes.known.warlock || classes.known.wizard ? true : false; }, weight : 3, usages : 10, recovery : "dawn", additional : "regains 1d6+4", spellcastingAbility : "class", spellFirstColTitle : "Ch", weaponsAdd : { options : ["Staff of Defense"] }, spellcastingBonus : [{ name : "1 charge", spells : ["mage armor"], selection : ["mage armor"], firstCol : 1 }, { name : "2 charges", spells : ["shield"], selection : ["shield"], firstCol : 2 }], spellChanges : { "shield" : { time : "1 a", changes : "Cast as an action." } }, extraAC : [{name : "Staff of Defense", mod : 1, magic : true, text : "I gain a +1 bonus to AC while holding the Staff of Defense."}], } ================================================ FILE: WotC material/pub_20140818_PHB.js ================================================ var iFileName = "pub_20140818_PHB.js"; RequiredSheetVersion("14.0.6-beta"); // This file adds all material from the Player's Handbook to MPMB's Character Record Sheet // Define the source SourceList.P={ name : "Player's Handbook", abbreviation : "PHB", abbreviationSpellsheet : "P", group : "Core Sources", url : "https://dnd.wizards.com/products/rpg_playershandbook", date : "2014/08/19" }; // (sub)Races that are not in the SRD RaceList["mountain dwarf"] = { regExpSearch : /^((?=.*(hylar|daewar))|((?=.*\b(dwarfs?|dwarves|dwarfish|dwarvish|dwarven)\b)(?=.*\b(mountain|shield)\b))).*$/i, name : "Mountain dwarf", sortname : "Dwarf, Mountain", source : [["P", 20]], plural : "Mountain dwarves", size : 3, speed : { walk : { spd : 25, enc : 25 } }, languageProfs : ["Common", "Dwarvish"], vision : [["Darkvision", 60]], savetxt : { adv_vs : ["poison"] }, dmgres : ["Poison"], weaponProfs : [false, false, ["battleaxe", "handaxe", "warhammer", "light hammer"]], armorProfs : [true, true, false, false], toolProfs : [["Smith, brewer, or mason tools", 1]], age : " are considered young until they are 50 and live about 350 years", height : " stand between 4 and 5 feet tall (4' + 2d4\")", weight : " weigh around 150 lb (130 + 2d4 \xD7 2d6 lb)", heightMetric : " stand between 1,2 and 1,5 metres tall (120 + 5d4 cm)", weightMetric : " weigh around 75 kg (60 + 5d4 \xD7 4d6 / 10 kg)", scores : [2, 0, 2, 0, 0, 0], trait : "Mountain Dwarf (+2 Strength, +2 Constitution)\n\nStonecunning:\n Whenever I make an Intelligence (History) check related to the origin of stonework, I am considered proficient in the History skill and add double my proficiency bonus to the check, instead of my normal proficiency bonus." }; RaceList["dark elf"] = { regExpSearch : /^(?!.*half)((?=.*drow)|((?=.*\b(elfs?|elves|elvish|elven)\b)(?=.*\b(dark|underdarks?|deep|depths?)\b))).*$/i, name : "Drow", sortname : "Elf, Dark (Drow)", source : [["P", 24]], plural : "Drow", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Elvish"], vision : [["Darkvision", 120], ["Sunlight Sensitivity", 0]], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["charmed"] }, weaponProfs : [false, false, ["rapier", "shortsword", "hand crossbow"]], skills : ["Perception"], age : " typically claim adulthood around age 100 and can live to be 750 years old", height : " range from under 5 to 5 1/2 feet tall (4'5\" + 2d6\")", weight : " weigh around 100 lb (75 + 2d6 \xD7 1d6 lb)", heightMetric : " range from under 1,5 to 1,7 metres tall (135 + 5d6 cm)", weightMetric : " weigh around 45 kg (35 + 5d6 \xD7 2d6 / 10 kg)", scores : [0, 2, 0, 0, 0, 1], trait : "Drow (+2 Dexterity, +1 Charisma)\nTrance: Elves don't need to sleep, but meditate semiconsciously, for 4 hours a day. This gives the same benefit as a human gets from 8 hours of sleep (long rest takes only 4 hours).\nSunlight Sensitivity: Disadvantage on attack rolls and Wisdom (Perception) checks that rely on sight when I or what I am trying to attack/perceive is in direct sunlight.\nDrow Magic: 1st level: Dancing Lights cantrip; 3rd level: Faerie Fire; 5th level: Darkness. Both spells can be used once per long rest. Charisma is my spellcasting ability for these.", // errata to specify once per day is long rest spellcastingAbility : 6, spellcastingBonus : [{ name : "Drow Magic (level 1)", spells : ["dancing lights"], selection : ["dancing lights"], }], features : { "faerie fire" : { name : "Drow Magic (level 3)", limfeaname : "Faerie Fire", minlevel : 3, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Drow Magic (level 3)", spells : ["faerie fire"], selection : ["faerie fire"], firstCol : "oncelr" }] }, "darkness" : { name : "Drow Magic (level 5)", limfeaname : "Darkness", minlevel : 5, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Drow Magic (level 5)", spells : ["darkness"], selection : ["darkness"], firstCol : "oncelr" }] } } }; RaceList["wood elf"] = { regExpSearch : /^(?!.*half)((?=.*(grugach|kagonesti|silhana))|((?=.*\b(elfs?|elves|elvish|elven)\b)(?=.*\b(woodlands?|woods?|forests?|wilds?|green)\b))).*$/i, name : "Wood elf", sortname : "Elf, Wood", source : [["P", 24]], plural : "Wood elves", size : 3, speed : { walk : { spd : 35, enc : 25 } }, languageProfs : ["Common", "Elvish"], vision : [["Darkvision", 60]], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["charmed"] }, weaponProfs : [false, false, ["longsword", "shortsword", "longbow", "shortbow"]], skills : ["Perception"], age : " typically claim adulthood around age 100 and can live to be 750 years old", height : " range from under 5 to over 6 feet tall (4'6\" + 2d10\")", weight : " weigh around 125 lb (100 + 2d10 \xD7 1d4 lb)", heightMetric : " range from under 1,5 to over 1,8 metres tall (140 + 5d10 cm)", weightMetric : " weigh around 60 kg (45 + 5d10 \xD7 2d4 / 10 kg)", scores : [0, 2, 0, 0, 1, 0], trait : "Wood Elf (+2 Dexterity, +1 Wisdom)\nTrance: Elves don't need to sleep, but meditate semiconsciously, for 4 hours a day. While meditating, I can dream after a fashion; such dreams are actually mental exercises that have become reflexive through years of practice. After resting in this way, I gain the same benefit that a human does from 8 hours of sleep, thus needing only 4 hours for a long rest.\nMask of the Wild: I can attempt to hide even when I am only lightly obscured by foliage, heavy rain, falling snow, mist, and other natural phenomena." }; RaceList["forest gnome"] = { regExpSearch : /^((?=.*\bgnomes?\b)(?=.*\b(woods?|forests?|wilds?|green)\b)).*$/i, name : "Forest gnome", sortname : "Gnome, Forest", source : [["P", 37]], plural : "Forest gnomes", size : 4, speed : { walk : { spd : 25, enc : 15 } }, languageProfs : ["Common", "Gnomish"], vision : [["Darkvision", 60]], savetxt : { text : ["Adv. on Int/Wis/Cha saves vs. magic"] }, age : " start adult life around age 40 and can live 350 to almost 500 years", height : " are 3 to 4 feet tall (2'11\" + 2d4\")", weight : " weigh around 40 lb (35 + 2d4 lb)", heightMetric : " are 90 to 120 cm tall (2'11\" + 5d4)", weightMetric : " weigh around 18 kg (16 + 5d4 / 10 kg)", scores : [0, 1, 0, 2, 0, 0], trait : "Forest Gnome (+1 Dexterity, +2 Intelligence)" + (typePF ? "\n" : " ") + "\nNatural Illusionist:\n I know the Minor Illusion cantrip. Intelligence is my spellcasting ability for it.\n\nSpeak with Small Beasts:\n Through sounds and gestures, I can communicate simple ideas with Small or smaller beasts.", spellcastingAbility : 4, spellcastingBonus : [{ name : "Natural Illusionist", spells : ["minor illusion"], selection : ["minor illusion"], }] }; RaceList["stout halfling"] = { regExpSearch : /^(?=.*\b(halflings?|hobbits?)\b)(?=.*stout).*$/i, name : "Stout halfling", sortname : "Halfling, Stout", source : [["P", 28]], plural : "Stout halflings", size : 4, speed : { walk : { spd : 25, enc : 15 } }, languageProfs : ["Common", "Halfling"], savetxt : { adv_vs : ["frightened", "poison"] }, dmgres : ["Poison"], age : " reach adulthood at age 20 and live around 150 years", height : " average about 3 feet tall (2'7\" + 2d4\")", weight : " weigh around 40 lb (35 + 2d4 lb)", heightMetric : " average about 90 cm tall (80 + 5d4)", weightMetric : " weigh around 18 kg (16 + 5d4 / 10 kg)", scores : [0, 2, 1, 0, 0, 0], trait : "Stout Halfling (+2 Dexterity, +1 Constitution)\n\nLucky: When I roll a 1 on an attack roll, ability check, or saving throw, I can reroll the die and must use the new roll.\n\nHalfling Nimbleness: I can move through the space of any creature that is of a size larger than me." }; // Add racial variants that are not part of the SRD AddRacialVariant("human", "variant", { regExpSearch : /variant/i, source : [["P", 31]], skillstxt : "Choose any one skill", scorestxt : "+1 to two different ability scores of my choice", scores : [0, 0, 0, 0, 0, 0], trait : "Human (+1 to two different ability scores of my choice)\n\nSkills: I gain proficiency in one skill of my choice.\n\nFeat: I gain one feat of my choice.", featsAdd: [{ type: /^(?!.*(blessing|boon|gift|fighting style)).*$/i }], }); // Add the subclasses that are not in the SRD AddSubClass("barbarian", "totem warrior", { regExpSearch : /^(?=.*totem)(?=.*(warrior|fighter|marauder|barbarian|viking|(norse|tribes?|clans?)(wo)?m(a|e)n)).*$/i, subname : "Path of the Totem Warrior", fullname : "Totem Warrior", source : [["P", 50]], features : { "subclassfeature3" : { name : "Spirit Seeker", source : [["P", 50]], minlevel : 3, description: desc("I can cast Beast Sense and Speak with Animals as rituals (PHB 217 \u0026 277)"), spellcastingBonus : [{ name : "Spirit Seeker", spells : ["beast sense", "speak with animals"], selection : ["beast sense", "speak with animals"], firstCol : SpellRitualTag, times : 2 }], spellChanges : { "beast sense" : { time : "10 min", changes : "I can cast this spell only as a ritual, thus its casting time is 10 minutes longer." }, "speak with animals" : { time : "10 min", changes : "I can cast this spell only as a ritual, thus its casting time is 10 minutes longer." } } }, "subclassfeature3.1" : { name : "Totem Spirit", source : [["P", 50]], minlevel : 3, description: desc('Choose Bear, Eagle, Elk, Wolf, or Tiger Spirit using the "Choose Feature" button above'), choices : ["Bear", "Eagle", "Wolf"], "bear" : { name : "Bear Spirit", description: desc("While raging, I have resistance to all damage types except psychic"), dmgres : [["All -Psychic", "All -Psychic (rage)"]], eval : function() { processResistance(false, 'Barbarian: Rage', ClassList.barbarian.features.rage.dmgres); }, removeeval : function() { processResistance(true, 'Barbarian: Rage', ClassList.barbarian.features.rage.dmgres); } }, "eagle" : { name : "Eagle Spirit", description: desc([ "While raging without heavy armor, others have disadv. on opportunity attacks vs. me", "I can use the Dash action as a bonus action", ]), action : [["bonus action", " (Dash)"]] }, "wolf" : { name : "Wolf Spirit", description: desc("While raging, friends have advantage on melee attacks vs. hostiles within 5 ft of me") } }, "subclassfeature6" : { name : "Aspect of the Beast", source : [["P", 50]], minlevel : 6, description: desc('Choose Bear, Eagle, Elk, Wolf, or Tiger Aspect using the "Choose Feature" button above'), choices : ["Bear", "Eagle", "Wolf"], "bear" : { name : "Aspect of the Bear", description: desc("Advantage on Strength checks to push/pull/lift/break; Carrying capacity is doubled"), carryingCapacity : 2 }, "eagle" : { name : "Aspect of the Eagle", description: desc("I can see up to 1 mile away perfectly; No disadvantage on Perception from dim light") }, "wolf" : { name : "Aspect of the Wolf", description: desc("I can track while traveling at a fast pace; I can move stealthily at a normal pace") } }, "subclassfeature10" : { name : "Spirit Walker", source : [["P", 50]], minlevel : 10, description: desc("I can cast Commune with Nature as a ritual"), spellcastingBonus : [{ name : "Spirit Walker", spells : ["commune with nature"], selection : ["commune with nature"], firstCol : SpellRitualTag, }], spellChanges : { "commune with nature" : { time : "11 min", changes : "I can cast this spell only as a ritual, thus its casting time is 10 minutes longer." } } }, "subclassfeature14" : { name : "Totemic Attunement", source : [["P", 50]], minlevel : 14, description: desc('Choose Bear, Eagle, Elk, Wolf, or Tiger Attunement using the "Choose Feature" button'), choices : ["Bear", "Eagle", "Wolf"], "bear" : { name : "Bear Attunement", description: desc([ "While raging, any creature that sees me within 5 ft has disadv. on attacks vs. others", "Enemies that can't perceive me or be frightened are immune", ]), }, "eagle" : { name : "Eagle Attunement", description: desc("While raging, I can fly at my current speed, but I can only stay aloft during my turn") }, "wolf" : { name : "Wolf Attunement", description: desc("If my melee attack hits while raging, I can knock prone as a bonus action (up to Large)"), action : [["bonus action", " (raging: knock prone)"]] } } } }); AddSubClass("bard", "college of valor", { regExpSearch : /^(?=.*(college|bard|minstrel|troubadour|jongleur))(?=.*valor).*$/i, subname : "College of Valor", subnameshort: "Valor", source : [["P", 55]], attacks : [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], features : { "subclassfeature3" : { name : "Bonus Proficiencies", source : [["P", 55]], minlevel : 3, description: desc("I gain proficiency with medium armor, shields, and martial weapons"), armorProfs : [false, true, false, true], weaponProfs : [false, true] }, "subclassfeature3.1" : { name : "Combat Inspiration", source : [["P", 55]], minlevel : 3, description: desc([ "My Bardic Inspiration can also be used to add the die to a weapon damage roll", "Alternatively, it can be used as a reaction to add the die to AC against one attack", ]), }, "subclassfeature14" : { name : "Battle Magic", source : [["P", 55]], minlevel : 14, description: desc("As a bonus action when I use my action to cast a bard spell, I can make a weapon attack"), action : [["bonus action", " (with Bard spell)"]] } } }); AddSubClass("cleric", "knowledge domain", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*(knowledge|wisdom|learning)).*$/i, subname : "Knowledge Domain", subnameshort: "Knowledge", source : [["P", 59]], spellcastingExtra : ["command", "identify", "augury", "suggestion", "nondetection", "speak with dead", "arcane eye", "confusion", "legend lore", "scrying"], features : { "subclassfeature1" : { name : "Blessings of Knowledge", source : [["P", 59]], minlevel : 1, description: desc([ "I learn two languages and gain proficiency and expertise with two skills", "I can choose from the following: Arcana, History, Nature, or Religion", ]), skillstxt : "Choose two from Arcana, History, Nature, and Religion. You also gain expertise with these skills", languageProfs : [2] }, "subclassfeature2" : { name : "Channel Divinity: Knowledge of Ages", source : [["P", 59]], minlevel : 2, description: desc("As an action, I gain proficiency with a chosen skill or tool for 10 minutes"), action : [["action", ""]] }, "subclassfeature6" : { name : "Channel Divinity: Read Thoughts", source : [["P", 59]], minlevel : 6, description: desc([ "As an action, one creature within 60 ft I can see must make a Wisdom save", "If it fails, I can read its surface thoughts for 1 min, as long as it's within 60 ft of me", "As an action, I can end this and cast Suggestion on it (it fails its save automatically)", "If it succeeded on its save, I can't use this feature again on it until I finish a long rest", ]), action : [["action", ""]] }, "subclassfeature8" : { name : "Potent Spellcasting", source : [["P", 60]], minlevel : 8, description : desc("I add my Wisdom modifier to the damage I deal with my cleric cantrips"), calcChanges : GenericClassFeatures["potent spellcasting"].calcChanges }, "subclassfeature17" : { name : "Visions of the Past", source : [["P", 60]], minlevel : 17, description : desc([ "I can see recent events of an object or area by concentrating and praying for 1 min", "I can meditate this way for up to a number of minutes equal to my Wisdom score", "\u2022 Object Reading (after meditating for 1 minute per owner):", " If an owner owned it in the last Wis score in days, I learn how that owner got/lost it", " I also learn the most recent significant event involving the object and the owner", "\u2022 Area Reading (my immediate surroundings, up to a 50-foot cube):", " Going back my Wisdom score in days, per minute I meditate, I learn about one event", " This starts with the most recent event; It can be significant or just important to me" ]), usages : 1, recovery : "short rest" } } }); AddSubClass("cleric", "light domain", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*\b(light|sun|shining)\b).*$/i, subname : "Light Domain", source : [["P", 61]], spellcastingExtra : ["burning hands", "faerie fire", "flaming sphere", "scorching ray", "daylight", "fireball", "guardian of faith", "wall of fire", "flame strike", "scrying"], features : { "subclassfeature1" : { name : "Bonus Cantrip", source : [["P", 61]], minlevel : 1, description: desc("I learn the Light cantrip if I didn't already know it"), spellcastingBonus : [{ name : "Bonus Cantrip (Light)", spells : ["light"], selection : ["light"] }] }, "subclassfeature1.1" : { name : "Warding Flare", source : [["P", 61]], minlevel : 1, description : desc([ "When a creature within 30 ft attacks me and I can see it, I can interpose divine light", "As a reaction, I impose disadv. on the attacker's attack roll (unless it can't be blinded)" ]), usages : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest", action : [["reaction", ""]] }, "subclassfeature2" : { name : "Channel Divinity: Radiance of the Dawn", source : [["P", 61]], minlevel : 2, description: desc([ "As an action, in 30 ft, magical darkness is dispelled and hostiles must make a Con save", "Each takes radiant damage, saves for half, and negates with total cover", ]), additional : ["", "2d10 + 2 damage", "2d10 + 3 damage", "2d10 + 4 damage", "2d10 + 5 damage", "2d10 + 6 damage", "2d10 + 7 damage", "2d10 + 8 damage", "2d10 + 9 damage", "2d10 + 10 dmg", "2d10 + 11 dmg", "2d10 + 12 dmg", "2d10 + 13 dmg", "2d10 + 14 dmg", "2d10 + 15 dmg", "2d10 + 16 dmg", "2d10 + 17 dmg", "2d10 + 18 dmg", "2d10 + 19 dmg", "2d10 + 20 dmg"], action : [["action", ""]] }, "subclassfeature6" : { name : "Improved Flare", source : [["P", 61]], minlevel : 6, description: desc("I can also use my Warding Flare if another is attacked by a creature within 30 ft of me") }, "subclassfeature8" : { name : "Potent Spellcasting", source : [["P", 61]], minlevel : 8, description : desc("I add my Wisdom modifier to the damage I deal with my cleric cantrips"), calcChanges : GenericClassFeatures["potent spellcasting"].calcChanges }, "subclassfeature17" : { name : "Corona of Light", source : [["P", 61]], minlevel : 17, description: desc([ "As an action, I have an aura of 60 ft sunlight and 30 ft dim light for 1 min", "Enemies in the sunlight have disadv. on saves vs. spells that deal fire or radiant damage", ]), action : [["action", " (start/stop)"]] } } }); AddSubClass("cleric", "nature domain", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*\b(nature|natural|animal|element(s|al)?)\b).*$/i, subname : "Nature Domain", source : [["P", 62]], spellcastingExtra : ["animal friendship", "speak with animals", "barkskin", "spike growth", "plant growth", "wind wall", "dominate beast", "grasping vine", "insect plague", "tree stride"], features : { "subclassfeature1" : { name : "Bonus Proficiency", source : [["P", 62]], minlevel : 1, description: desc("I gain proficiency with heavy armor"), armorProfs : [false, false, true, false] }, "subclassfeature1.1" : { name : "Acolyte of Nature", source : [["P", 62]], minlevel : 1, description: desc("I learn a druid cantrip and proficiency with a skill: Animal Handling, Nature, Survival"), skillstxt : "Choose one from Animal Handling, Nature, or Survival", spellcastingBonus : [{ name : "Acolyte of Nature", "class" : "druid", level : [0, 0] }] }, "subclassfeature2" : { name : "Channel Divinity: Charm Animals and Plants", source : [["P", 62]], minlevel : 2, description: desc([ "As an action, all beasts and plants within 30 ft that I can see must make a Wis save", "If failed, each is charmed and friendly to allies and me for 1 min or until damaged", ]), action : [["action", ""]] }, "subclassfeature6" : { name : "Dampen Elements", source : [["P", 62]], minlevel : 6, description: desc([ "As a reaction, if an ally in 30 ft or I takes acid/cold/fire/lightning/thunder damage,", "I can grant resistance against that instance of damage", ]), action : [["reaction", ""]] }, "subclassfeature8" : { name : "Divine Strike", source : [["P", 62]], minlevel : 8, description: desc("Once per turn, when I hit a creature with a weapon attack, I can do extra damage"), additional : levels.map(function (n) { return n < 8 ? "" : "+" + (n < 14 ? 1 : 2) + "d8 cold/fire/lightning damage (choice)"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && v.isWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.cleric.level < 14 ? 1 : 2) + 'd8 cold/fire/lightning damage'; } }, "Once per turn, I can have one of my weapon attacks that hit do extra cold, fire, or lightning damage (my choice)." ] } }, "subclassfeature17" : { name : "Master of Nature", source : [["P", 62]], minlevel : 17, description: desc("As a bonus action, I can command creatures that are charmed by my Channel Divinity"), action : [["bonus action", ""]] } } }); AddSubClass("cleric", "tempest domain", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*\b(tempest|destruction|storm)\b).*$/i, subname : "Tempest Domain", source : [["P", 62]], spellcastingExtra : ["fog cloud", "thunderwave", "gust of wind", "shatter", "call lightning", "sleet storm", "control water", "ice storm", "destructive wave", "insect plague"], features : { "subclassfeature1" : { name : "Bonus Proficiency", source : [["P", 62]], minlevel : 1, description: desc("I gain proficiency with martial weapons and heavy armor"), armorProfs : [false, false, true, false], weaponProfs : [false, true] }, "subclassfeature1.1" : { name : "Wrath of the Storm", source : [["P", 62]], minlevel : 1, description: desc([ "As a reaction, when a creature I can see within 5 ft hits me, I can thunderously rebuke", "It takes 2d8 lightning or thunder damage (my choice) that a Dex save can halve", ]), usages : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest", action : [["reaction", ""]] }, "subclassfeature2" : { name : "Channel Divinity: Destructive Wrath", source : [["P", 62]], minlevel : 2, description: desc("Instead of rolling, I can do maximum damage when I do lightning or thunder damage") }, "subclassfeature6" : { name : "Thunderbolt Strike", source : [["P", 62]], minlevel : 6, description: desc("When I deal lightning damage to a Large or smaller foe, I can push it up to 10 ft away") }, "subclassfeature8" : { name : "Divine Strike", source : [["P", 62]], minlevel : 8, description: desc("Once per turn, when I hit a creature with a weapon attack, I can do extra damage"), additional : levels.map(function (n) { if (n < 8) return ""; return "+" + (n < 14 ? 1 : 2) + "d8 thunder damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && v.isWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.cleric.level < 14 ? 1 : 2) + 'd8 thunder damage'; } }, "Once per turn, I can have one of my weapon attacks that hit do extra thunder damage." ] } }, "subclassfeature17" : { name : "Stormborn", source : [["P", 62]], minlevel : 17, description: desc("Whenever I'm not underground or indoors, I have a fly speed equal to my current speed"), speed : { fly : { spd : "walk", enc : "walk" } } } } }); AddSubClass("cleric", "trickery domain", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*(trickery|trickster|illusion)).*$/i, subname : "Trickery Domain", subnameshort: "Trickery", source : [["P", 63]], spellcastingExtra : ["charm person", "disguise self", "mirror image", "pass without trace", "blink", "dispel magic", "dimension door", "polymorph", "dominate person", "modify memory"], features : { "subclassfeature1" : { name : "Blessing of the Trickster", source : [["P", 63]], minlevel : 1, description: desc([ "As an action, a willing creature I touch (not me) has adv. on Dex (Stealth) checks", "This lasts for 1 hour or until I use it again", ]), action : [["action", ""]] }, "subclassfeature2" : { name : "Channel Divinity: Invoke Duplicity", source : [["P", 63]], minlevel : 2, description : desc([ "As an action, I create illusory duplicates of myself within 30 ft of me for 1 min (conc)", "As a bonus action, I can move them 30 ft to space(s) I can see within 120 ft of me", "I can cast spells as though I were in a duplicate's space, using my own senses", "I have advantage on attacks if the target is within 5 ft of a duplicate and me" ]), additional : levels.map(function (n) { return n < 2 ? "" : (n < 17 ? 1 : 2) + " illusory duplicate" + (n < 17 ? "" : "s"); }), action : [["action", ""], ["bonus action", "Move Duplicate(s)"]] }, "subclassfeature6" : { name : "Channel Divinity: Cloak of Shadows", source : [["P", 63]], minlevel : 6, description: desc("As an action, I become invisible until the end of my next turn or I attack/cast a spell"), action : [["action", ""]] }, "subclassfeature8" : { name : "Divine Strike", source : [["P", 63]], minlevel : 8, description: desc("Once per turn, when I hit a creature with a weapon attack, I can do extra damage"), additional : levels.map(function (n) { return n < 8 ? "" : "+" + (n < 14 ? 1 : 2) + "d8 poison damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && v.isWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.cleric.level < 14 ? 1 : 2) + 'd8 poison damage'; } }, "Once per turn, I can have one of my weapon attacks that hit do extra poison damage." ] } }, "subclassfeature17" : { name : "Improved Duplicity", source : [["P", 63]], minlevel : 17, description : desc([ "When I use Invoke Duplicity, I make four illusory duplicates instead of one", "I can move any number of the illusory duplicates as part of the same bonus action" ]) } } }); AddSubClass("cleric", "war domain", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*\b(war|fighting|conflict)\b).*$/i, subname : "War Domain", source : [["P", 63]], spellcastingExtra : ["divine favor", "shield of faith", "magic weapon", "spiritual weapon", "crusader's mantle", "spirit guardians", "freedom of movement", "stoneskin", "flame strike", "hold monster"], features : { "subclassfeature1" : { name : "Bonus Proficiency", source : [["P", 63]], minlevel : 1, description: desc("I gain proficiency with martial weapons and heavy armor"), armorProfs : [false, false, true, false], weaponProfs : [false, true] }, "subclassfeature1.1" : { name : "War Priest", source : [["P", 63]], minlevel : 1, description: desc("When I use the Attack action, I can make a weapon attack as a bonus action"), usages : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest", action : [["bonus action", " (with Attack action)"]] }, "subclassfeature2" : { name : "Channel Divinity: Guided Strike", source : [["P", 63]], minlevel : 2, description: desc("When I make an attack roll, I can add a +10 bonus to the roll after seeing the d20 roll") }, "subclassfeature6" : { name : "Channel Divinity: War God's Blessing", source : [["P", 63]], minlevel : 6, description : desc([ "As a reaction, when a creature within 30 ft makes an attack roll, I can bless its attack", "The creature then adds a +10 bonus to the roll; I can do this after seeing the d20 roll" ]), action : [["reaction", ""]] }, "subclassfeature8" : { name : "Divine Strike", source : [["P", 63]], minlevel : 8, description: desc("Once per turn, when I hit a creature with a weapon attack, I can do extra damage"), additional : levels.map(function (n) { if (n < 8) return ""; return "+" + (n < 14 ? 1 : 2) + "d8 damage of the weapon's type"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && v.isWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.cleric.level < 14 ? 1 : 2) + 'd8 damage'; } }, "Once per turn, I can have one of my weapon attacks that hit do extra damage." ] } }, "subclassfeature17" : { name : "Avatar of Battle", source : [["P", 63]], minlevel : 17, description: desc("I have resistance to bludgeoning/piercing/slashing damage from nonmagical weapons"), dmgres : [["Bludgeoning", "Bludg. (nonmagical)"], ["Piercing", "Pierc. (nonmagical)"], ["Slashing", "Slash. (nonmagical)"]] } } }); AddSubClass("druid", "circle of the moon", { regExpSearch : /^(?=.*(druid|shaman))((?=.*\bmoon\b)|((?=.*\bmany\b)(?=.*\bforms?\b))).*$/i, subname : "Circle of the Moon", subnameshort: "Moon", source : [["P", 69]], features : { "subclassfeature2" : { name : "Circle Forms", source : [["P", 69]], minlevel : 2, description: desc("I am able to transform into more dangerous animal forms when using Wild Shape") }, "subclassfeature2.wild shape" : { name : "Wild Shape", source : [["P", 66]], minlevel : 2, description : desc([ "As a bonus action, I assume the shape of a beast I have seen before with these rules:", " \u2022 I gain all its game statistics except Intelligence, Wisdom, or Charisma", " \u2022 I get its skill/saving throw prof. while keeping my own, using whichever is higher", " \u2022 I assume the beast's HP and HD; I get mine back when I revert back", " \u2022 I can't cast spells in beast form, but transforming doesn't break concentration", " \u2022 I retain features from class, race, etc., but I don't retain special senses", " \u2022 I can choose whether equipment falls to the ground, merges, or stays worn", " \u2022 I revert if out of time or unconscious; if KOd by damage, excess damage carries over" ]), usages : ClassList.druid.features["subclassfeature2.wild shape"].usages, recovery : "short rest", additional : levels.map(function (n) { if (n < 2) return ""; var cr = Math.max(1, Math.floor(n/3)); var hr = Math.floor(n/2); var limits = n < 4 ? ", no fly/swim" : n < 8 ? ", no fly" : ""; return "CR " + cr + limits + "; " + hr + (limits.length ? " h" : " hours"); }), action : [["bonus action", " (start/stop)"]], eval : function() { processActions(false, "Druid: Wild Shape", ClassList.druid.features["subclassfeature2.wild shape"].action, "Wild Shape"); }, wildshapePageInfo: { uses: ClassList.druid.features["subclassfeature2.wild shape"].wildshapePageInfo.uses, duration: ClassList.druid.features["subclassfeature2.wild shape"].wildshapePageInfo.duration, limitations: levels.map(function (n) { var CR = Math.max(1, Math.floor(n/3)); var limits = n < 4 ? ", no fly/swim" : ", no fly speed"; return n < 8 ? "max CR " + CR + limits : "CR " + CR + "or lower"; }), }, }, "subclassfeature2.1" : { name : "Combat Wild Shape", source : [["P", 69]], minlevel : 2, description: desc([ "As a bonus action while in Wild Shape, I can expend spell slots to heal myself", "I regain 1d8 HP per expended spell slot level; I can use Wild Shape as a bonus action", ]), action : [["bonus action", " (heal)"]], removeeval : function() { processActions(true, "Druid: Wild Shape", ClassList.druid.features["subclassfeature2.wild shape"].action, "Wild Shape"); } }, "subclassfeature6" : { name : "Primal Strike", source : [["P", 69]], minlevel : 6, description: desc("My attacks count as magical while in Wild Shape") }, "subclassfeature10" : { name : "Elemental Wild Shape", source : [["P", 69]], minlevel : 10, description: desc("I can transform into an air/earth/fire/water elemental by expending 2 Wild Shape uses") }, "subclassfeature14" : { name : "Thousand Forms", source : [["P", 69]], minlevel : 14, description: desc("I can cast Alter Self at will without using a spell slot"), spellcastingBonus : [{ name : "Thousand Forms", spells : ["alter self"], selection : ["alter self"], firstCol : "atwill", }] } } }); AddSubClass("fighter", "battle master", { regExpSearch : /^(?=.*(war|fighter|battle|martial))(?=.*master).*$/i, subname : "Battle Master", fullname : "Battle Master", source : [["P", 73]], abilitySave : 1, abilitySaveAlt : 2, features : { "subclassfeature3" : { name : "Combat Superiority", source : [["P", 73]], minlevel : 3, description: desc([ "I gain a number of superiority dice that I can use to fuel special Maneuvers", "I regain all superiority dice after a short rest", ]), additional : ["", "", "d8", "d8", "d8", "d8", "d8", "d8", "d8", "d10", "d10", "d10", "d10", "d10", "d10", "d10", "d10", "d12", "d12", "d12"], usages : [0, 0, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6], recovery : "short rest" }, "subclassfeature3.1" : { name : "Maneuvers", source : [["P", 73]], minlevel : 3, description: desc([ 'Use the "Choose Feature" button above to add a Maneuver to the third page', "I can use a Maneuver by expending a superiority die (only one Maneuver per attack)", ]), additional : levels.map(function (n) { return n < 3 ? "" : (n < 7 ? 3 : n < 10 ? 5 : n < 15 ? 7 : 9) + " known"; }), extraname : "Maneuver", extrachoices : ["Commander's Strike", "Disarming Attack", "Distracting Strike", "Evasive Footwork", "Feinting Attack", "Goading Attack", "Lunging Attack", "Maneuvering Attack", "Menacing Attack", "Parry", "Precision Attack", "Pushing Attack", "Rally", "Riposte", "Sweeping Attack", "Trip Attack"], extraTimes : levels.map(function (n) { return n < 3 ? 0 : n < 7 ? 3 : n < 10 ? 5 : n < 15 ? 7 : 9; }), "commander's strike" : { name : "Commander's Strike", source : [["P", 74]], description: desc([ "I forgo one attack of my Attack action to use a bonus action to direct an ally I see/hear", "The ally can use a reaction to make an attack, adding the superiority die to damage", ]), action : [["bonus action", " (with Attack action)"]] }, "disarming attack" : { name : "Disarming Attack", source : [["P", 74]], description: desc([ "Use after hitting a creature; I add the superiority die to my attack's damage", "Target makes a Strength save or drops a held object of my choice to its feet", ]), }, "distracting strike" : { name : "Distracting Strike", source : [["P", 74]], description: desc([ "Use after hitting a creature; I add the superiority die to my attack's damage", "The next attack of an ally before my next turn has adv. against the creature", ]), }, "evasive footwork" : { name : "Evasive Footwork", source : [["P", 74]], description: desc("Use when moving; I add the superiority die to my AC until I stop moving") }, "feinting attack" : { name : "Feinting Attack", source : [["P", 74]], description: desc([ "As a bonus action, I can feint to gain adv. on my next attack this turn vs. a target in 5 ft", "If the attack hits, I add the superiority die to my attack's damage", ]), action : [["bonus action", ""]] }, "goading attack" : { name : "Goading Attack", source : [["P", 74]], description: desc([ "Use after hitting a creature; I add the superiority die to my attack's damage", "Target makes a Wis save or has disadv. vs. other targets until the end of my next turn", ]), }, "lunging attack" : { name : "Lunging Attack", source : [["P", 74]], description: desc([ "I can spend a superiority die to increase the reach of a melee weapon attack by 5 ft", "If the attack hits, I add the superiority die to my attack's damage", ]), }, "maneuvering attack" : { name : "Maneuvering Attack", source : [["P", 74]], description: desc([ "Use after hitting a creature; I add the superiority die to my attack's damage", "Ally can use reaction to move half speed without opportunity attack from the target", ]), }, "menacing attack" : { name : "Menacing Attack", source : [["P", 74]], description: desc([ "Use after hitting a creature; I add the superiority die to my attack's damage", "Target makes a Wisdom save or is frightened of me until the end of my next turn", ]), }, "parry" : { name : "Parry", source : [["P", 74]], description: desc("When damaged in melee, I can use a reaction to reduce it by superiority die + Dex mod"), action : [["reaction", " (when damaged in melee)"]] }, "precision attack" : { name : "Precision Attack", source : [["P", 74]], description: desc("I add the superiority die to my attack roll, either before or after rolling") }, "pushing attack" : { name : "Pushing Attack", source : [["P", 74]], description: desc([ "Use after hitting a creature; I add the superiority die to the attack's damage", "If target is Large or smaller, it must make a Strength save or be pushed up to 15 ft away", ]), }, "rally" : { name : "Rally", source : [["P", 74]], description: desc("Ally that can see/hear me gets temporary HP equal to superiority die + Charisma mod"), action : [["bonus action", ""]] }, "riposte" : { name : "Riposte", source : [["P", 74]], description: desc([ "When missed in melee, I can use my reaction to make one melee attack vs. the attacker", "If the attack hits, I add the superiority die to my attack's damage", ]), action : [["reaction", " (after missed in melee)"]] }, "sweeping attack" : { name : "Sweeping Attack", source : [["P", 74]], description: desc([ "Use after hitting a creature and a second creature is within 5 ft of the first", "If the original attack roll hits this second creature, it takes the superiority die in damage", ]), }, "trip attack" : { name : "Trip Attack", source : [["P", 74]], description: desc([ "Use after hitting a creature; I add the superiority die to the attack's damage", "If target is Large or smaller, it must make a Strength save or be knocked prone", ]), } }, "subclassfeature3.2" : { name : "Student of War", source : [["P", 73]], minlevel : 3, description: desc("I have proficiency with one artisan's tool set of my choice"), toolProfs : [["Artisan's tools", 1]] }, "subclassfeature7" : { name : "Know Your Enemy", source : [["P", 73]], minlevel : 7, description: desc("If I spend 1 min studying someone, the DM will tell me info about him/her") }, "subclassfeature10" : { name : "Improved Combat Superiority", source : [["P", 74]], minlevel : 10, description: desc("My superiority dice turn into d10s at 10th level and into d12s at 18th level") }, "subclassfeature15" : { name : "Relentless", source : [["P", 74]], minlevel : 15, description: desc("I regain one superiority die if I have no more remaining when I roll initiative") } } }); AddSubClass("fighter", "eldritch knight", { regExpSearch : /^(?!.*(exalted|sacred|holy|divine|nature|natural|purple.*dragon|green|arcane archer))(?=.*(knight|fighter|warrior|militant|warlord|phalanx|gladiator|trooper))(?=.*\b(eldritch|arcane|magic|mage|witch)\b).*$/i, subname : "Eldritch Knight", fullname : "Eldritch Knight", source : [["P", 75]], abilitySave : 4, spellcastingFactor : 3, spellcastingList : { "class" : "wizard", school : ["Evoc", "Abjur"], level : [0, 4] }, spellcastingKnown : { cantrips : [0, 0, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3], spells : [0, 0, 2, 3, 3, 3, 4, 4, 4, 5, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9] }, features : { "action surge" : { name : "Action Surge", source : [["P", 72]], minlevel : 2, description: desc("I can take one additional action on my turn on top of my normally allowed actions"), usages : [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2], recovery : "short rest", additional : ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "30 ft teleport", "30 ft teleport", "30 ft teleport", "30 ft teleport", "30 ft teleport", "30 ft teleport"] }, "subclassfeature3" : { name : "Spellcasting", source : [["P", 75]], minlevel : 3, description: desc("I can cast known wizard cantrips/spells, using Intelligence as my spellcasting ability"), additional : ["", "", "2 cantrips \u0026 3 spells known", "2 cantrips \u0026 4 spells known", "2 cantrips \u0026 4 spells known", "2 cantrips \u0026 4 spells known", "2 cantrips \u0026 5 spells known", "2 cantrips \u0026 6 spells known", "2 cantrips \u0026 6 spells known", "3 cantrips \u0026 7 spells known", "3 cantrips \u0026 8 spells known", "3 cantrips \u0026 8 spells known", "3 cantrips \u0026 9 spells known", "3 cantrips \u0026 10 spells known", "3 cantrips \u0026 10 spells known", "3 cantrips \u0026 11 spells known", "3 cantrips \u0026 11 spells known", "3 cantrips \u0026 11 spells known", "3 cantrips \u0026 12 spells known", "3 cantrips \u0026 13 spells known"], spellcastingBonus : [{ // the spells gained at level 3, 8, 14, 20 name : "From any school", "class" : "wizard", times : [0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4], level : [1, 4] }] }, "subclassfeature3.1" : { name : "Weapon Bond", source : [["P", 75]], minlevel : 3, description: desc([ "I can bond with up to two weapons by spending a short rest with each", "I can't be disarmed of a bonded weapon and I can summon one as a bonus action", ]), action : [["bonus action", ""]] }, "subclassfeature7" : { name : "War Magic", source : [["P", 75]], minlevel : 7, description: desc("When I use my action to cast a cantrip, I can make a weapon attack as a bonus action"), action : [["bonus action", ""]] }, "subclassfeature10" : { name : "Eldritch Strike", source : [["P", 75]], minlevel : 10, description: desc([ "A creature hit by my weapon attack has disadv. on the save vs. the next spell I cast", "This lasts until the end of my next turn", ]), }, "subclassfeature15" : { name : "Arcane Charge", source : [["P", 75]], minlevel : 15, description: desc([ "When I use Action Surge, I can also teleport up to 30 ft to an empty space I can see", "I can do so before or after the extra action", ]), }, "subclassfeature18" : { name : "Improved War Magic", source : [["P", 75]], minlevel : 18, description: desc("When I use my action to cast a spell, I can make a weapon attack as a bonus action"), action : [["bonus action", ""]] } } }); AddSubClass("monk", "way of the four elements", { regExpSearch : /^(?=.*\b(four|4)\b)((?=.*elements?)|((?=.*earth)|(?=.*(wind|air))|(?=.*fire)|(?=.*water)))((?=.*(monk|monastic))|(((?=.*martial)(?=.*(artist|arts)))|((?=.*spiritual)(?=.*warrior)))).*$/i, subname : "Way of the Four Elements", subnameshort: "Four Elements", source : [["P", 80]], features : { "subclassfeature3" : { name : "Disciple of the Elements", source : [["P", 80]], minlevel : 3, description: desc([ "I know Elemental Attunement and additional Elemental Disciplines, depending on level", 'Use the "Choose Feature" button above to add Elemental Disciplines to the third page', "From 5th level onward, I can use additional ki points to increase their spell slot level", "I can trade known Elemental Disciplines for others when I gain new ones", ]), additional : levels.map(function (n) { return n < 3 ? "" : ((n < 6 ? 2 : n < 11 ? 3 : n < 17 ? 4 : 5) + " known; ") + (n < 5 ? 2 : n < 9 ? 3 : n < 13 ? 4 : n < 17 ? 5 : 6) + " max ki"; }), extraname : "Elemental Discipline", extrachoices : ["Breath of Winter (prereq: level 17 monk)", "Clench of the North Wind (prereq: level 6 monk)", "Elemental Attunement", "Eternal Mountain Defense (prereq: level 17 monk)", "Fangs of the Fire Snake", "Fist of Four Thunders", "Fist of Unbroken Air", "Flames of the Phoenix (prereq: level 11 monk)", "Gong of the Summit (prereq: level 6 monk)", "Mist Stance (prereq: level 11 monk)", "Ride the Wind (prereq: level 11 monk)", "River of Hungry Flame (prereq: level 17 monk)", "Rush of the Gale Spirits", "Shape the Flowing River", "Sweeping Cinder Strike", "Water Whip", "Wave of Rolling Earth (prereq: level 17 monk)"], extraTimes : levels.map(function (n) { return n < 3 ? 0 : n < 6 ? 2 : n < 11 ? 3 : n < 17 ? 4 : 5; }), autoSelectExtrachoices : [{ extrachoice : "elemental attunement" }], "elemental attunement" : { name : "Elemental Attunement", source : [["P", 81]], description: desc([ "As an action, I can briefly control elemental forces within 30 ft of me", "I can make a harmless sensory effect, light/snuff light, chill/warm 1 lb for 1 hour,", "or I cause earth/fire/water/mist in a 1 ft cube to shape itself into a form for 1 minute", ]), action : [["action", ""]] }, "breath of winter (prereq: level 17 monk)" : { name : "Breath of Winter", source : [["P", 81]], additional: "6 ki points", description: desc("As an action, I can cast Cone of Cold without material components"), spellcastingBonus : [{ name : "Breath of Winter", spells : ["cone of cold"], selection : ["cone of cold"], firstCol : 6 }], spellFirstColTitle : "Ki", prereqeval : function(v) { return classes.known.monk.level >= 17; }, spellChanges : { "cone of cold" : { components : "V,S", compMaterial : "", allowUpCasting : false, changes : "With the Breath of Winter discipline, I can cast Cone of Cold without a material component." } } }, "clench of the north wind (prereq: level 6 monk)" : { name : "Clench of the North Wind", source : [["P", 81]], additional: "3 ki points", description: desc("As an action, I can cast Hold Person without material components"), spellcastingBonus : [{ name : "Clench of the North Wind", spells : ["hold person"], selection : ["hold person"], firstCol : 3 }], spellFirstColTitle : "Ki", prereqeval : function(v) { return classes.known.monk.level >= 6; }, spellChanges : { "hold person" : { components : "V,S", compMaterial : "", allowUpCasting : false, changes : "With the Clench of the North Wind discipline, I can cast Hold Person without a material component." } } }, "eternal mountain defense (prereq: level 17 monk)" : { // errata from level 11 to level 17 name : "Eternal Mountain Defense", source : [["P", 81]], additional: "5 ki points", description: desc("As an action, I can cast Stoneskin on myself without material components"), spellcastingBonus : [{ name : "Eternal Mountain Defense", spells : ["stoneskin"], selection : ["stoneskin"], firstCol : 5 }], spellFirstColTitle : "Ki", prereqeval : function(v) { return classes.known.monk.level >= 17; }, spellChanges : { "stoneskin" : { range : "Self", components : "V,S", compMaterial : "", description : "I gain resistance to nonmagical Bludgeoning, Piercing, and Slashing damage", changes : "With the Eternal Mountain Defense discipline, I can cast Stoneskin without a material component but only on myself." } } }, "fangs of the fire snake" : { name : "Fangs of the Fire Snake", source : [["P", 81]], additional: "1 ki point", description: desc([ "With Attack action, my unarmed strikes +10 ft reach and deal fire damage this turn", "Also, I can spent an additional 1 ki point to cause an attack to deal +1d10 fire damage", ]), calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == "unarmed strike" && (/^(?=.*fire)(?=.*snake).*$/i).test(v.WeaponTextName)) { fields.Description += (fields.Description ? '; ' : '') + 'After hit, spend 1 ki point for +1d10 fire damage'; fields.Range = 'Melee (15 ft reach)'; fields.Damage_Type = 'fire'; }; }, "If I include the words 'Fire Snake' in the name of an unarmed strike, it gets +10 ft reach, does fire damage, and gains the option to deal +1d10 fire damage by spending 1 additional ki point." ] } }, "fist of four thunders" : { name : "Fist of Four Thunders", source : [["P", 81]], additional: "2 ki points", description: desc("As an action, I can cast Thunderwave"), spellcastingBonus : [{ name : "Fist of Four Thunders", spells : ["thunderwave"], selection : ["thunderwave"], firstCol : 2 }], spellFirstColTitle : "Ki", spellChanges : { "thunderwave" : { allowUpCasting : false, changes : "With the Fist of Four Thunders discipline, I can cast Thunderwave." } } }, "fist of unbroken air" : { name : "Fist of Unbroken Air", source : [["P", 81]], additional: "2 ki points; +1d10/extra ki point", description: desc([ "As an action, target within 30 ft takes 3d10 bludgeoning damage (spend ki for more)", "It is also pushed up to 20 ft away from me and knocked prone", "It can make a Strength save to halve damage and avoid being pushed and knocked prone", ]), action : [["action", ""]] }, "flames of the phoenix (prereq: level 11 monk)" : { name : "Flames of the Phoenix", source : [["P", 81]], additional: "4 ki points", description: desc("As an action, I can cast Fireball without material components"), spellcastingBonus : [{ name : "Flames of the Phoenix", spells : ["fireball"], selection : ["fireball"], firstCol : 4 }], spellFirstColTitle : "Ki", prereqeval : function(v) { return classes.known.monk.level >= 11; }, spellChanges : { "fireball" : { components : "V,S", compMaterial : "", allowUpCasting : false, changes : "With the Flames of the Phoenix discipline, I can cast Fireball without a material component." } } }, "gong of the summit (prereq: level 6 monk)" : { name : "Gong of the Summit", source : [["P", 81]], additional: "3 ki points", description: desc("As an action, I can cast Shatter without material components"), spellcastingBonus : [{ name : "Gong of the Summit", spells : ["shatter"], selection : ["shatter"], firstCol : 3 }], spellFirstColTitle : "Ki", prereqeval : function(v) { return classes.known.monk.level >= 6; }, spellChanges : { "shatter" : { components : "V,S", compMaterial : "", allowUpCasting : false, changes : "With the Gong of the Summit discipline, I can cast Shatter without a material component." } } }, "mist stance (prereq: level 11 monk)" : { name : "Mist Stance", source : [["P", 81]], additional: "4 ki points", description: desc("As an action, I can cast Gaseous Form on myself without material components"), spellcastingBonus : [{ name : "Mist Stance", spells : ["gaseous form"], selection : ["gaseous form"], firstCol : 4 }], spellFirstColTitle : "Ki", prereqeval : function(v) { return classes.known.monk.level >= 11; }, spellChanges : { "gaseous form" : { range : "Self", components : "V,S", compMaterial : "", description : "I turn into a misty cloud with fly 10 ft, resist. to nonmagical dmg, adv. on Str/Dex/saves", changes : "With the Mist Stance discipline, I can cast Gaseous Form without a material component, but only on myself." } } }, "ride the wind (prereq: level 11 monk)" : { name : "Ride the Wind", source : [["P", 81]], additional: "4 ki points", description: desc("As an action, I can cast Fly on myself without material components"), spellcastingBonus : [{ name : "Ride the Wind", spells : ["fly"], selection : ["fly"], firstCol : 4 }], spellFirstColTitle : "Ki", prereqeval : function(v) { return classes.known.monk.level >= 11; }, spellChanges : { "fly" : { range : "Self", components : "V,S", compMaterial : "", description : "I gain 60 ft flying speed", changes : "With the Ride the Wind discipline, I can cast Fly without a material component but only on myself." } } }, "river of hungry flame (prereq: level 17 monk)" : { name : "River of Hungry Flame", source : [["P", 81]], additional: "5 ki points", description: desc("As an action, I can cast Wall of Fire without material components"), spellcastingBonus : [{ name : "River of Hungry Flame", spells : ["wall of fire"], selection : ["wall of fire"], firstCol : 5 }], spellFirstColTitle : "Ki", prereqeval : function(v) { return classes.known.monk.level >= 17; }, spellChanges : { "wall of fire" : { components : "V,S", compMaterial : "", allowUpCasting : false, changes : "With the River of Hungry Flame discipline, I can cast Wall of Fire without a material component." } } }, "rush of the gale spirits" : { name : "Rush of the Gale Spirits", source : [["P", 81]], additional: "2 ki points", description: desc("As an action, I can cast Gust of Wind without material components"), spellcastingBonus : [{ name : "Rush of the Gale Spirits", spells : ["gust of wind"], selection : ["gust of wind"], firstCol : 2 }], spellFirstColTitle : "Ki", spellChanges : { "gust of wind" : { components : "V,S", compMaterial : "", changes : "With the Rush of the Gale Spirits discipline, I can cast Gust of Wind without a material component." } } }, "shape the flowing river" : { name : "Shape the Flowing River", source : [["P", 81]], additional: "1 ki point", description: desc([ "As an action, I can affect ice/water up to a 30-foot cube within 120 ft", "I can switch it between water/ice states and reshape ice up to half its largest dimension", ]), action : [["action", ""]] }, "sweeping cinder strike" : { name : "Sweeping Cinder Strike", source : [["P", 81]], additional: "2 ki points", description: desc("As an action, I can cast Burning Hands"), spellcastingBonus : [{ name : "Sweeping Cinder Strike", spells : ["burning hands"], selection : ["burning hands"], firstCol : 2 }], spellFirstColTitle : "Ki", spellChanges : { "burning hands" : { components : "V,S", compMaterial : "", allowUpCasting : false, changes : "With the Sweeping Cinder Strike discipline, I can cast Burning Hands." } } }, "water whip" : { name : "Water Whip", source : [["P", 81]], additional: "2 ki points; +1d10/extra ki point", description: desc([ "As an action, a creature within 30 ft takes 3d10 bludgeoning damage (spend ki for more)", "It is also knocked prone or pulled up to 25 ft closer to me (my choice)", "It can make a Dexterity save to halve damage and avoid being pulled or knocked prone", ]), action : [["action", ""]] }, "wave of rolling earth (prereq: level 17 monk)" : { name : "Wave of Rolling Earth", source : [["P", 81]], additional: "6 ki points", description: desc("As an action, I can cast Wall of Stone without material components"), spellcastingBonus : [{ name : "Wave of Rolling Earth", spells : ["wall of stone"], selection : ["wall of stone"], firstCol : 6 }], spellFirstColTitle : "Ki", prereqeval : function(v) { return classes.known.monk.level >= 17; }, spellChanges : { "wall of stone" : { components : "V,S", compMaterial : "", changes : "With the Wave of Rolling Earth discipline, I can cast Wall of Stone without a material component." } } } } } }); AddSubClass("monk", "way of shadow", { regExpSearch : /^(?=.*shadow)((?=.*(monk|monastic))|(((?=.*martial)(?=.*(artist|arts)))|((?=.*spiritual)(?=.*warrior)))).*$/i, subname : "Way of Shadow", subnameshort: "Shadow", source : [["P", 80]], features : { "subclassfeature3" : { name : "Shadow Arts", source : [["P", 80]], minlevel : 3, description: desc("I know the Minor Illusion cantrip and can cast certain spells by using ki (see page 3)"), spellcastingBonus : [{ name : "Shadow Arts", spells : ["minor illusion"], selection : ["minor illusion"], }], spellFirstColTitle : "Ki", "shadow spells" : { name : "Shadow Spells", extraname : "Shadow Arts", source : [["P", 80]], additional: "2 ki points", description: desc([ "As an action, I can cast Darkness, Darkvision, Pass Without Trace, or Silence", "I don't require spell slots or material components to cast these spells like this, just ki points", ]), action : [["action", ""]], spellcastingBonus : [{ name : "Shadow Arts", spells : ["darkness", "darkvision", "pass without trace", "silence"], selection : ["darkness", "darkvision", "pass without trace", "silence"], firstCol : 2, times : 4 }] }, autoSelectExtrachoices : [{ extrachoice : "shadow spells" }], spellChanges : { "darkness" : { components : "V", compMaterial : "", changes : "Spell cast with my Shadow Arts don't require material components." }, "darkvision" : { components : "V,S", compMaterial : "", changes : "Spell cast with my Shadow Arts don't require material components." }, "pass without trace" : { components : "V,S", compMaterial : "", changes : "Spell cast with my Shadow Arts don't require material components." } } }, "subclassfeature6" : { name : "Shadow Step", source : [["P", 80]], minlevel : 6, description: desc([ "As a bonus action, I can teleport from and into dim light or darkness within 60 ft", "After I do this, I have adv. on the next melee attack I make before the end of my turn", ]), action : [["bonus action", ""]] }, "subclassfeature11" : { name : "Cloak of Shadows", source : [["P", 80]], minlevel : 11, description: desc("As an action, I can become invisible in dim light or darkness until I attack/cast"), action : [["action", ""]] }, "subclassfeature17" : { name : "Opportunist", source : [["P", 80]], minlevel : 17, description: desc("As a reaction, if a creature in 5 ft is hit by another, I can make a melee attack vs. it"), action : [["reaction", ""]] } } }); AddSubClass("paladin", "oath of the ancients", { regExpSearch : /^(((?=.*(ancient|nature|natural|green|fey|horned))((?=.*paladin)|((?=.*(exalted|sacred|holy|divine))(?=.*(knight|fighter|warrior|warlord|trooper)))))|((?=.*(green|fey|horned))(?=.*(knight|fighter|warrior|warlord|trooper)))).*$/i, subname : "Oath of the Ancients", subnameshort: "Ancients", source : [["P", 87]], features : { "subclassfeature3" : { name : "Channel Divinity: Nature's Wrath", source : [["P", 87]], minlevel : 3, description: desc([ "As an action, a creature I can see within 10 ft must make a Str/Dex save (its choice)", "If it fails this save, it is restrained until it succeeds on a save at the end of its turn", ]), action : [["action", ""]], spellcastingExtra : ["ensnaring strike", "speak with animals", "moonbeam", "misty step", "plant growth", "protection from energy", "ice storm", "stoneskin", "commune with nature", "tree stride"] }, "subclassfeature3.1" : { name : "Channel Divinity: Turn the Faithless", source : [["P", 87]], minlevel : 3, description: desc([ "As an action, all fey/fiends within 30 ft that can hear me must make a Wisdom save", "If one fails, it is turned for 1 minute or until it takes damage and must show true form", "Turned: move away, never within 30 ft of me, no reactions or actions other than Dash", "Turned: may Dodge instead of Dash when nowhere to move and unable to escape bonds", ]), action : [["action", ""]] }, "subclassfeature7" : { name : "Aura of Warding", source : [["P", 87]], minlevel : 7, description: desc("Allies within range and I have resistance to damage from spells"), additional : ["", "", "", "", "", "", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "30-foot aura", "30-foot aura", "30-foot aura"], dmgres : ["Spells"] }, "subclassfeature15" : { name : "Undying Sentinel", source : [["P", 87]], minlevel : 15, description: desc([ "If dropped to 0 hit points and not killed outright, I can choose to stay at 1 hit point", "Additionally, I suffer no drawbacks of old age and can't be aged magically", ]), recovery : "long rest", usages : 1 }, "subclassfeature20" : { name : "Elder Champion", source : [["P", 87]], minlevel : 20, description : desc([ "As an action, I assume the form of a force of nature for 1 minute and gain benefits:", " \u2022 At the start of each of my turns, I regain 10 hit points", " \u2022 I can cast paladin spells with a casting time of 1 action as a bonus action instead", " \u2022 Enemies within 10 ft have disadv. on saves vs. my paladin spells and channel divinity" ]), recovery : "long rest", usages : 1, action : [["action", ""]] } } }); AddSubClass("paladin", "oath of vengeance", { regExpSearch : /^(((?=.*(vengeance|wrath|justice))((?=.*paladin)|((?=.*(exalted|sacred|holy|divine))(?=.*(knight|fighter|warrior|warlord|trooper)))))|((?=.*dark)(?=.*knight))|(?=.*avenger)).*$/i, subname : "Oath of Vengeance", subnameshort: "Vengeance", source : [["P", 88]], features : { "subclassfeature3" : { name : "Channel Divinity: Abjure Enemy", source : [["P", 88]], minlevel : 3, description: desc([ "As an action, one creature within 60 ft that I can see me must make a Wisdom save", "If failed, it is frightened and its speed is 0 despite bonuses; if success, its speed is halved", "This lasts for 1 minute or until it takes damage; Undead/fiends have disadv. on save", ]), action : [["action", ""]], spellcastingExtra : ["bane", "hunter's mark", "hold person", "misty step", "haste", "protection from energy", "banishment", "dimension door", "hold monster", "scrying"] }, "subclassfeature3.1" : { name : "Channel Divinity: Vow of Enmity", source : [["P", 88]], minlevel : 3, description: desc([ "As a bonus action, I utter a vow against a creature I can see within 10 ft", "I get adv. on attacks against it for 1 minute or until it drops to 0 HP or falls unconscious", ]), action : [["bonus action", ""]] }, "subclassfeature7" : { name : "Relentless Avenger", source : [["P", 88]], minlevel : 7, description: desc([ "After I hit with an opportunity attack, I can move 1/2 my speed in the same reaction", "This movement doesn't provoke opportunity attacks", ]), }, "subclassfeature15" : { name : "Soul of Vengeance", source : [["P", 88]], minlevel : 15, description: desc([ "When an enemy I have an active Vow of Enmity against makes an attack, I can react", "As a reaction, I can make a melee weapon attack against it if it is within range", ]), action : [["reaction", " (with Vow of Enmity)"]] }, "subclassfeature20" : { name : "Avenging Angel", source : [["P", 88]], minlevel : 20, description : desc([ "As an action, I gain a flying speed of 60 ft and a 30 ft aura of menace for 1 hour", "When a creature first enters or starts its turn in the aura, it must make a Wis save", "If failed, for 1 min or until it takes damage, it is frightened and attacks vs. it have adv." ]), recovery : "long rest", usages : 1, action : [["action", ""]] } } }); AddSubClass("ranger", "beast master", { regExpSearch : /^(?=.*(animal|beast))((?=.*(master|ranger|strider))|((?=.*(nature|natural|green))(?=.*(knight|fighter|warrior|warlord|trooper)))).*$/i, subname : "Beast Master", fullname : "Beast Master", source : [["P", 93]], features : { "subclassfeature3" : { name : "Ranger's Companion", source : [["P", 93]], minlevel : 3, description : desc([ "It adds my proficiency bonus to AC, attacks, damage, and save/skill proficiencies", "Its hit point maximum equals four times my ranger level if higher than its normal HP", "It takes a turn on my initiative; It takes the Dodge action unless I command it otherwise", "As an action, I can have it take the Attack, Dash, Disengage, or Help action on its turn", "I can still use Extra Attack while commanding it to Attack; No action to order to move" ]), additional : "Beast \u2264Medium and CR \u22641/4", creaturesAdd : [["Ranger's Companion", false, function(AddRemove, prefix) { if (!AddRemove) return; var cObj = MakeCompMenu_CompOptions(prefix, "justCompanions"); if (!cObj.companion || !cObj.companion.length) { var selectedRace = "Wolf"; } else { var compOptions = cObj.companion.map(function(n) { return n[0] }); var selectedRace = AskUserOptions("Select Ranger's Companion", "Select which beast you would like to have as your ranger's companion.\nThis can be any beast that is no larger than Medium and that has a challenge rating of 1/4 or lower.\nYou can change the beast at any time using the \"Companion Options\" button at the top of the Companion page.", compOptions, "radio", true); } ApplyCompRace(selectedRace, prefix, "companion"); }]] }, "subclassfeature7" : { name : "Exceptional Training", source : [["P", 93]], minlevel : 7, description : desc([ "My beast's attacks count as magical for overcoming resistances and immunities", "As a bonus action, I can command it to take the Dash/Disengage/Help action on its turn" ]) }, "subclassfeature11" : { name : "Bestial Fury", source : [["P", 93]], minlevel : 11, description: desc("When I command my beast to use the Attack action, it can attack twice on its turn") }, "subclassfeature15" : { name : "Share Spells", source : [["P", 93]], minlevel : 15, description: desc("When I cast a spell on myself, I can have it also affect my beast if it is within 30 ft") } } }); AddSubClass("rogue", "arcane trickster", { regExpSearch : /^(?=.*(trickster|rogue|miscreant))(?=.*\b(eldritch|arcane|magic|mage|witch)\b).*$/i, subname : "Arcane Trickster", fullname : "Arcane Trickster", source : [["P", 98]], abilitySave : 4, spellcastingFactor : 3, spellcastingList : { "class" : "wizard", school : ["Ench", "Illus"], level : [0, 4] }, spellcastingKnown : { cantrips : [0, 0, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3], spells : [0, 0, 2, 3, 3, 3, 4, 4, 4, 5, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9] }, features : { "subclassfeature3" : { name : "Spellcasting", source : [["P", 98]], minlevel : 3, description: desc("I can cast known wizard cantrips/spells, using Intelligence as my spellcasting ability"), additional : ["", "", "3 cantrips \u0026 3 spells known", "3 cantrips \u0026 4 spells known", "3 cantrips \u0026 4 spells known", "3 cantrips \u0026 4 spells known", "3 cantrips \u0026 5 spells known", "3 cantrips \u0026 6 spells known", "3 cantrips \u0026 6 spells known", "4 cantrips \u0026 7 spells known", "4 cantrips \u0026 8 spells known", "4 cantrips \u0026 8 spells known", "4 cantrips \u0026 9 spells known", "4 cantrips \u0026 10 spells known", "4 cantrips \u0026 10 spells known", "4 cantrips \u0026 11 spells known", "4 cantrips \u0026 11 spells known", "4 cantrips \u0026 11 spells known", "4 cantrips \u0026 12 spells known", "4 cantrips \u0026 13 spells known"], spellcastingBonus : [{ name : "Mage Hand cantrip", // the Mage Hand cantrip gained at level 1 spells : ["mage hand"], selection : ["mage hand"] }, { name : "From any school", // the spells gained at level 3, 8, 14, 20 "class" : "wizard", times : [0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4], level : [1, 4] }] }, "subclassfeature3.1" : { name : "Mage Hand Legerdemain", source : [["P", 98]], minlevel : 3, description : desc([ "As a bonus action, I can direct my Mage Hand", "With a Dex (Sleight of Hand) vs. Wis (Perception) checks, I can do so discreetly", "I can make it invisible and perform the following tasks:", " \u2022 Stow/retrieve an object the hand is holding in a container worn/carried by another", " \u2022 Use thieves' tools to pick locks and disarm traps at range" ]), action : [["bonus action", ""]], spellChanges : { "mage hand" : { description : "Invisible hand, carries 10 lb; 1 bns to control, use thieves' tools, or stow/retrieve obj; only 1 instance", changes : "My Mage Hand Legerdemain class feature expands my use of the Mage Hand cantrip and makes the spectral hand invisible." } } }, "subclassfeature9" : { name : "Magical Ambush", source : [["P", 98]], minlevel : 9, description: desc("When I cast a spell while hidden, the target(s) have disadvantage against that spell") }, "subclassfeature13" : { name : "Versatile Trickster", source : [["P", 98]], minlevel : 13, description: desc("As a bonus action, gain adv. on attacks this turn on creature within 5 ft of Mage Hand"), action : [["bonus action", ""]] }, "subclassfeature17" : { name : "Spell Thief", source : [["P", 98]], minlevel : 17, description: desc([ "As a reaction, after a spell is cast at me, I can try to negate and steal it", "The caster makes a save against my spell DC with his/her spellcasting ability", "On failure, the caster forgets how to cast that spell for eight hours", "If I have a spell slot of a high enough level for it, I learn how to cast it during this time", ]), action : [["reaction", ""]], recovery : "long rest", usages : 1 } } }); AddSubClass("rogue", "assassin", { regExpSearch : /^(?!.*(barbarian|bard|cleric|druid|fighter|monk|paladin|ranger|sorcerer|warlock|wizard))(?=.*assassin).*$/i, subname : "Assassin", fullname : "Assassin", source : [["P", 97]], abilitySave : 2, features : { "subclassfeature3" : { name : "Bonus Proficiencies", source : [["P", 97]], minlevel : 3, description: desc("I am proficient with disguise kits and poisoner's kits"), toolProfs : ["Disguise kit", "Poisoner's kit"] }, "subclassfeature3.1" : { name : "Assassinate", source : [["P", 97]], minlevel : 3, description: desc([ "I have adv. on attack rolls against creatures that have not taken a turn in combat yet", "Any hit I score against a creature that is surprised is a critical hit", ]), }, "subclassfeature9" : { name : "Infiltration Expertise", source : [["P", 97]], minlevel : 9, description: desc("I can create false identities in 7 days for 25 gp") }, "subclassfeature13" : { name : "Imposter", source : [["P", 97]], minlevel : 13, description: desc([ "After 3 hours of studying a person, I can mimic speech, writing, and behavior", "I have advantage on Charisma (Deception) checks to maintain this ruse", ]), }, "subclassfeature17" : { name : "Death Strike", source : [["P", 97]], minlevel : 17, description: desc("When I hit a surprised creature, it must make a Con save or take double damage"), additional : "Save DC: 8 + Dex mod + Proficiency bonus" } } }); AddSubClass("sorcerer", "wild magic", { regExpSearch : /^(?=.*(mage|magus|sorcerer|witch))(?=.*(wild|chaos|chaotic|limbo)).*$/i, subname : "Wild Magic", fullname : "Wild Mage", source : [["P", 103]], features : { "subclassfeature1" : { name : "Wild Magic Surge", source : [["P", 103]], minlevel : 1, description : desc([ "Wild Magic Surges can happen 5% of the time that I cast a sorcerer spell", "This doesn't happen with cantrips and I only take this chance if the DM tells me to", "Metamagic can't affect spells cast because of the surge, but they require no concentration", '"See the "Notes" page for the table"', ]), toNotesPage : [{ name : "Wild Magic Surge Table", source : [["P", 104]], popupName : "Wild Mage's Wild Magic Surge Table, part 1", additional : "results 01-50", note : [ "My spellcasting can unleash surges of untamed magic. Immediately after I cast a sorcerer spell of 1st level or higher, the DM can have me roll a d20. If I roll a 1, a Wild Magic Surge happens. Roll on the table below to create a random magical effect. A surge can happen only once per turn.", "If a Wild Magic effect is a spell, it's too wild to be affected by Metamagic. If it normally requires concentration, it doesn't require concentration in this case; the spell lasts for its full duration.", "d100 Effect", "01-02 Roll on this table at the start of each of your turns for the next minute, ignoring this result on subsequent rolls.", "03-04 For the next minute, you can see any invisible creature if you have line of sight to it.", "05-06 A modron chosen and controlled by the DM appears in an unoccupied space within 5 ft of you, then disappears 1 minute later.", "07-08 You cast fireball as a 3rd-level spell centered on yourself.", "09-10 You cast magic missile as a 5th-level spell.", "11-12 Roll a d10. Your height changes by a number of inches equal to the roll. If the roll is odd, you shrink. If the roll is even, you grow.", "13-14 You cast confusion centered on yourself.", "15-16 For the next minute, you regain 5 hit points at the start of each of your turns.", "17-18 You grow a long beard made of feathers that remains until you sneeze, at which point the feathers explode out from your face.", "19-20 You cast grease centered on yourself.", "21-22 Creatures have disadvantage on saving throws against the next spell you cast in the next minute that involves a saving throw.", "23-24 Your skin turns a vibrant shade of blue. A remove curse spell can end this effect.", "25-26 An eye appears on your forehead for the next minute.", "27-28 For the next minute, all your spells with a casting time feet of 1 action have a casting time of 1 bonus action.", "29-30 You teleport up to 60 ft to an unoccupied space of your choice that you can see.", "31-32 You are transported to the Astral Plane until the end of your next turn, after which time you return to the space you previously occupied or the nearest unoccupied space if that space is occupied.", "33-34 Maximize the damage of the next damaging spell you cast within the next minute.", "35-36 Roll a d10. Your age changes by a number of years equal to the roll. If the roll is odd, you get younger (minimum 1 year old). If the roll is even, you get older.", "37-38 1d6 flumphs controlled by the DM appear in unoccupied spaces within 60 ft of you and are frightened of you. They vanish after 1 minute.", "39-40 You regain 2d10 hit points.", "41-42 You turn into a potted plant until the start of your next turn. While a plant, you are incapacitated and have vulnerability to all damage. If you drop to 0 hit points, your pot breaks, and your form reverts.", "43-44 For the next minute, you can teleport up to 20 ft as a bonus action on each of your turns.", "45-46 You cast levitate on yourself.", "47-48 A unicorn controlled by the DM appears in a space within 5 ft of you, then disappears 1 minute later.", "49-50 You can't speak for the next minute. Whenever you try, pink bubbles float out of your mouth." ] }, { name : "Wild Magic Surge Table", source : [["P", 104]], popupName : "Wild Mage's Wild Magic Surge Table, part 2", additional : "results 51-100", note : [ "d100 Effect", "51-52 A spectral shield hovers near you for the next minute, granting you a +2 bonus to AC and immunity to magic missile.", "53-54 You are immune to being intoxicated by alcohol for the next 5d6 days.", "55-56 Your hair falls out but grows back within 24 hours.", "57-58 For the next minute, any flammable object you touch that isn't being worn or carried by another creature bursts into flame.", "59-60 You regain your lowest-level expended spell slot.", "61-62 For the next minute, you must shout when you speak.", "63-64 You cast fog cloud centered on yourself.", "65-66 Up to three creatures you choose within 30 ft of you take 4d10 lightning damage.", "67-68 You are frightened by the nearest creature until the end of your next turn.", "69-70 Each creature within 30 ft of you becomes invisible for the next minute. The invisibility ends on a creature when it attacks or casts a spell.", "71-72 You gain resistance to all damage for the next minute.", "73-74 A random creature within 60 ft of you becomes poisoned for 1d4 hours.", "75-76 You glow with bright light in a 30-ft radius for the next minute. Any creature that ends its turn within 5 ft of you is blinded until the end of its next turn.", "79-80 Illusory butterflies and flower petals flutter in the air within 10 ft of you for the next minute.", "77-78 You cast polymorph on yourself. If you fail the saving throw, you turn into a sheep for the spell's duration.", "81-82 You can take one additional action immediately.", "83-84 Each creature within 30 ft of you takes 1d10 necrotic damage. You regain hit points equal to the sum of the necrotic damage dealt.", "85-86 You cast mirror image.", "87-88 You cast fly on a random creature within 60 ft of you.", "89-90 You become invisible for the next minute. During that time, other creatures can't hear you. The invisibility ends if you attack or cast a spell.", "91-92 If you die within the next minute, you immediately come back to life as if by the reincarnate spell.", "93-94 Your size increases by one size category for the next minute.", "95-96 You and all creatures within 30 ft of you gain vulnerability to piercing damage for the next minute.", "97-98 You are surrounded by faint, ethereal music for the next minute.", "99-100 You regain all expended sorcery points." ] }] }, "subclassfeature1.1" : { name : "Tides of Chaos", source : [["P", 103]], minlevel : 1, description: desc([ "I can gain advantage on either one attack roll, ability check, or saving throw", "After I cast a 1st-level or higher sorcerer spell, the DM can impose a Wild Magic Surge", "After I roll on the Wild Magic Surge table, I regain my use of Tides of Chaos", ]), recovery : "long rest", usages : 1 }, "subclassfeature6" : { name : "Bend Luck", source : [["P", 103]], minlevel : 6, description: desc("As a reaction, I can add/subtract 1d4 from another's attack roll, ability check, or save"), action : [["reaction", " (2 sorcery points)"]], additional : "2 sorcery points" }, "subclassfeature14" : { name : "Controlled Chaos", source : [["P", 103]], minlevel : 14, description: desc("Whenever I roll on the Wild Magic Surge table, I can roll twice and use either result") }, "subclassfeature18" : { name : "Spell Bombardment", source : [["P", 103]], minlevel : 18, description: desc([ "Once per turn, when I roll spell damage, I can take one damage die that rolled max", "I can then roll this die again and add it to the spell's damage", ]), } } }); AddSubClass("warlock", "the archfey", { regExpSearch : /^(?=.*fey)(?=.*warlock).*$/i, subname : "the Archfey", source : [["P", 109]], spellcastingExtra : ["faerie fire", "sleep", "calm emotions", "phantasmal force", "blink", "plant growth", "dominate beast", "greater invisibility", "dominate person", "seeming"], features : { "subclassfeature1" : { name : "Fey Presence", source : [["P", 109]], minlevel : 1, description: desc([ "As an action, all creatures in a 10-ft cube around me must make a Wisdom save", "If failed, they're all charmed or frightened (my choice) until the end of my next turn", ]), recovery : "short rest", usages : 1, action : [["action", ""]] }, "subclassfeature6" : { name : "Misty Escape", source : [["P", 109]], minlevel : 6, description: desc([ "As a reaction, when I take damage, I can turn invisible and teleport up to 60 ft", "I stay invisible until the start of my next turn or until I attack or cast a spell", ]), action : [["reaction", " (taking damage)"]], recovery : "short rest", usages : 1 }, "subclassfeature10" : { name : "Beguiling Defenses", source : [["P", 109]], minlevel : 10, description: desc([ "As a reaction, when a creature tries to charm me, I can turn the charm back on it", "It must make a Wis save or be charmed by me for 1 minute or until taking damage", "I am immune to being charmed", ]), action : [["reaction", " (when charmed)"]], savetxt : { immune : ["charmed"] } }, "subclassfeature14" : { name : "Dark Delirium", source : [["P", 109]], minlevel : 14, description: desc([ "As an action, a creature within 60 ft must make a Wis save or be charmed/frightened", "This lasts for 1 minute or until my concentration is broken or it takes damage", "During this time, it can't see or hear anything but the illusion, me, and itself", ]), recovery : "short rest", usages : 1, action : [["action", ""]] } } }); AddSubClass("warlock", "the great old one", { regExpSearch : /^(((?=.*(tharizdun|cthulhu))(?=.*warlock))|((?=.*(great|dread))(?=.*(ancient|old))(?=.*\b(one|entity)\b))).*$/i, subname : "the Great Old One", source : [["P", 110]], spellcastingExtra : ["dissonant whispers", "tasha's hideous laughter", "detect thoughts", "phantasmal force", "clairvoyance", "sending", "dominate beast", "evard's black tentacles", "dominate person", "telekinesis"], features : { "subclassfeature1" : { name : "Awakened Mind", source : [["P", 110]], minlevel : 1, description: desc("I can telepathically speak to creatures I can see within 30 ft if they know a language"), // 'to' not 'with', so one-way }, "subclassfeature6" : { name : "Entropic Ward", source : [["P", 110]], minlevel : 6, description: desc([ "As a reaction, when I'm attacked, I can impose disadvantage to that attack roll", "If it misses me, I have adv. on my next attack vs. the attacker during my next turn", ]), action : [["reaction", " (when attacked)"]], recovery : "short rest", usages : 1 }, "subclassfeature10" : { name : "Thought Shield", source : [["P", 110]], minlevel : 10, description: desc([ "No one can read my mind unless I allow it; I have resistance to psychic damage", "When I take psychic damage, the dealer of the psychic damage takes the same amount", ]), dmgres : ["Psychic"] }, "subclassfeature14" : { name : "Create Thrall", source : [["P", 110]], minlevel : 14, description: desc([ "As an action, I can charm an incapacitated humanoid by touch", "While it is charmed, I can communicate with it telepathically if it is on the same plane", "This lasts until the charm is removed (can be by Remove Curse) or I use this again", ]), action : [["action", ""]] } } }); AddSubClass("wizard", "abjuration", { regExpSearch : /abjuration|abjurer/i, subname : "School of Abjuration", subnameshort: "Abjuration", fullname : "Abjurer", source : [["P", 115]], features : { "subclassfeature2" : { name : "Abjuration Savant", source : [["P", 115]], minlevel : 2, description: desc("I halve the gp and time needed to copy abjuration spells into my spellbook") }, "subclassfeature2.1" : { name : "Arcane Ward", source : [["P", 115]], minlevel : 2, description: desc([ "Whenever I cast an 1st-level or higher abjuration spell, I make/heal a ward", "I make it at max HP; When I cast again, it heals two HP per spell level", "It stays active at 0 HP and doesn't go away until my next long rest", "If I take damage, the ward takes the damage instead, but excess damage carries over", ]), additional : levels.map( function(n) { return n < 2 ? "" : "Ward max HP: " + (n * 2) + "+Int mod"; }), usages : 1, recovery : "long rest" }, "subclassfeature6" : { name : "Projected Ward", source : [["P", 115]], minlevel : 6, description: desc("As a reaction, my Arcane Ward can absorb damage done to a creature within 30 ft"), action : [["reaction", ""]] }, "subclassfeature10" : { name : "Improved Abjuration", source : [["P", 115]], minlevel : 10, description: desc("When I cast an abjuration spell requiring an ability check, I add my proficiency bonus"), calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { if (spellKey === "dispel magic" || spellKey === "counterspell") { var profB = Number(How("Proficiency Bonus")); var checkStr = "(" + AbilityScores.names.join("|") + "|spell(casting)?( ability )?) check"; var checkRx = RegExp(checkStr + " \\(([+-]?\\d+)\\)", "i"); var theBonus = profB; if (checkRx.test(spellObj.description)) { var theMatch = spellObj.description.match(checkRx); theBonus += Number(theMatch[2]); if (tDoc.getField("Remarkable Athlete").isBoxChecked(0) === 1 && theMatch[1].test(/Str|Dex|Con/i)) { theBonus -= Math.ceil(profB/2); } else if (tDoc.getField("Jack of All Trades").isBoxChecked(0) === 1) { theBonus -= Math.floor(profB/2); } } else { var theMatch = spellObj.description.match(RegExp(checkStr, "i")); } spellObj.description = spellObj.description.replace(theMatch[0], theMatch[1] + " check (" + (theBonus >= 0 ? "+" : "") + theBonus + ")"); return true; }; }, "I add my proficiency bonus to ability checks required by abjuration spells. This is shown on the spell sheet by a lowered DC or higher bonus on the check." ] } }, "subclassfeature14" : { name : "Spell Resistance", source : [["P", 116]], minlevel : 14, description: desc("I have adv. on spell saves and resistance to damaging spells"), dmgres : ["Spells"], savetxt : { adv_vs : ["spells"] } } } }); AddSubClass("wizard", "conjuration", { regExpSearch : /conjuration|conjurer/i, subname : "School of Conjuration", subnameshort: "Conjuration", fullname : "Conjurer", source : [["P", 116]], features : { "subclassfeature2" : { name : "Conjuration Savant", source : [["P", 116]], minlevel : 2, description: desc("I halve the gp and time needed to copy conjuration spells into my spellbook") }, "subclassfeature2.1" : { name : "Minor Conjuration", source : [["P", 116]], minlevel : 2, description: desc([ "As an action, I can conjure an object up to 3 ft on each side and no more than 10 lbs", "It must be of a form of a nonmagical object I have seen and is created within 10 ft", "The object disappears after 1 hour, if it takes or deals damage, or when I use this again", ]), action : [["action", ""]] }, "subclassfeature6" : { name : "Benign Transposition", source : [["P", 116]], minlevel : 6, description: desc([ "As an action, I can teleport to a place within 30 ft that I can see", "Instead, I can swap places with a willing Small/Medium creature in 30 ft that I can see", "I can do this again after a long rest or casting a 1st-level or higher conjuration spell", ]), usages : 1, recovery : "long rest", action : [["action", ""]] }, "subclassfeature10" : { name : "Focused Conjuration", source : [["P", 116]], minlevel : 10, description: desc("While I am concentrating on a conjuration spell, it can't be broken by taking damage") }, "subclassfeature14" : { name : "Durable Summons", source : [["P", 116]], minlevel : 14, description: desc("Any creature I summon or create with a conjuration spell has 30 temporary hit points"), calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { if (spellKey.indexOf("conjure") !== -1 && !(/barrage|volley|knowbot/i).test(spellKey)) { spellObj.description = spellObj.description.replace(/verbal commands/i, "command").replace(/^summon /i, '') + "; +30 temp hp"; return true; } else if ((/find (greater )?(steed|familiar)/i).test(spellKey)) { spellObj.description = spellObj.description.replace(/Gain the services of a ([^;]+)/i, "A $1 (+30 temp hp)"); return true; } }, "Any creature I summon or create with a conjuration spell gains 30 temporary hit points." ] } } } }); AddSubClass("wizard", "divination", { regExpSearch : /divination|diviner|divinator/i, subname : "School of Divination", subnameshort: "Divination", fullname : "Diviner", source : [["P", 116]], features : { "subclassfeature2" : { name : "Divination Savant", source : [["P", 116]], minlevel : 2, description: desc("I halve the gp and time needed to copy divination spells into my spellbook") }, "subclassfeature2.1" : { name : "Portent", source : [["P", 116]], minlevel : 2, description : desc([ "After a long rest, I roll dice and keep the results to be used before my next long rest", "A result can replace an attack/save/ability check made by me or a creature I can see", "I choose to switch them before the dice to be replaced are rolled; Max once per turn" ]), additional : levels.map( function(n) { return n < 2 ? "" : (n < 14 ? 2 : 3) + "d20 after a long rest"; }) }, "subclassfeature6" : { name : "Expert Divination", source : [["P", 116]], minlevel : 6, description: desc("When I cast a divination spell, I recover a spell slot of a lower level than the one I cast"), additional : "Spell slot < 6th-level" }, "subclassfeature10" : { name : "The Third Eye", source : [["P", 116]], minlevel : 10, description: desc([ "As an action, I gain one of the following until my next short or long rest:", "Darkvision 60ft, see the Ethereal Plane 60ft, read any language, or see invisibility 10ft", ]), recovery : "short rest", usages : 1, action : [["action", ""]] }, "subclassfeature14" : { name : "Greater Portent", source : [["P", 117]], minlevel : 14, description: desc("I can roll 3d20 instead of 2d20 when using my Portent feature") } } }); AddSubClass("wizard", "enchantment", { regExpSearch : /enchantment|enchanter/i, subname : "School of Enchantment", subnameshort: "Enchantment", fullname : "Enchanter", source : [["P", 117]], features : { "subclassfeature2" : { name : "Enchantment Savant", source : [["P", 117]], minlevel : 2, description: desc("I halve the gp and time needed to copy enchantment spells into my spellbook") }, "subclassfeature2.1" : { name : "Hypnotic Gaze", source : [["P", 117]], minlevel : 2, description: desc([ "As an action, a seen enemy within 5 ft must make a Wis save or be charmed", "This doesn't work if it can't see/hear me; It's also incapacitated and reduced to 0 speed", "This lasts until the end of my next turn, but I can use an action to extend the duration", "It also ends if it takes damage, can't see or hear me, or is more than 5 ft from me", "On success or once it ends, I can't use this on it again until after a long rest", ]), action : [["action", ""]], usages : 1, recovery : "long rest" }, "subclassfeature6" : { name : "Instinctive Charm", source : [["P", 117]], minlevel : 6, description: desc([ "As a reaction, when someone I can see in 30 ft attacks me, it must make a Wis save", "If failed, it must instead attack the closest creature within range (not me or self)", "On a success, the target is immune to this until after my long rest; This is a charm effect", ]), action : [["reaction", " (when attacked)"]] }, "subclassfeature10" : { name : "Split Enchantment", source : [["P", 117]], minlevel : 10, description: desc([ "When I cast an enchantment spell with only one target, I can target a second in range", "This does not apply to cantrips", ]), calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { if (spellObj.psionic || !spellObj.level || spellObj.school !== "Ench") return; var startDescr = spellObj.description; switch(spellKey) { case "animal messenger" : spellObj.description = spellObj.description.replace("Tiny beast delivers", "2 tiny beasts deliver single"); break; case "antipathy/sympathy" : spellObj.description = spellObj.description.replace("Creature,", "2 crea, 1"); break; case "heroism" : case "command" : spellObj.description = spellObj.description.replace(/, halt| as spell lasts/i, ""); default : spellObj.description = spellObj.description.replace("1+1/SL", "2 or 1+1/SL").replace(/1 (crea(ture)?|beast|humanoid)/i, "2 $1s").replace(/creas\b/gi, "crea"); } return startDescr !== spellObj.description; }, "My enchantment, single-target 1st-level or higher spells can affect two targets instead of only one." ] } }, "subclassfeature14" : { name : "Alter Memories", source : [["P", 117]], minlevel : 14, description: desc([ "When I cast an enchantment spell that charms, I can have one target be unaware of it", "Also, once before that spell ends, I can have that target forget time while affected", "It must make an Intelligence save or lose up to 1 + Charisma modifier hours of memory", ]), } } }); AddSubClass("wizard", "illusion", { regExpSearch : /illusion|illusionist|illusionary/i, subname : "School of Illusion", subnameshort: "Illusion", fullname : "Illusionist", source : [["P", 118]], features : { "subclassfeature2" : { name : "Illusion Savant", source : [["P", 118]], minlevel : 2, description: desc("I halve the gp and time needed to copy illusion spells into my spellbook") }, "subclassfeature2.1" : { name : "Improved Minor Illusion", source : [["P", 118]], minlevel : 2, description: desc([ "I gain the knowledge of the Minor Illusion cantrip (or another if I already knew it)", "When I cast it, I can create both a sound and an image with a single casting", ]), spellcastingBonus : [{ name : "Minor Illusion cantrip", spells : ["minor illusion"], selection : ["minor illusion"] }], spellChanges : { "minor illusion" : { description : "5-ft cube illusion includes visible and audible; Int(Investigation) check vs. Spell DC; see book", changes : "My Improved Minor Illusion class feature allows me to make both a sound and an image with a single casting." } } }, "subclassfeature6" : { name : "Malleable Illusion", source : [["P", 118]], minlevel : 6, description: desc("After I cast an illusion spell that lasts 1 min or longer, I can use an action to change it"), action : [["action", ""]] }, "subclassfeature10" : { name : "Illusory Self", source : [["P", 118]], minlevel : 10, description: desc("As a reaction, when I'm attacked, I can impose an illusion that makes the attack miss"), action : [["reaction", ""]], recovery : "short rest", usages : 1 }, "subclassfeature14" : { name : "Illusory Reality", source : [["P", 118]], minlevel : 14, description: desc([ "As a bonus action, after I cast a 1st-level or higher illusion spell, I can make it real", "One inanimate, nonmagical object that is part of the illusion becomes real for 1 minute", "The object can't be something that directly harms someone", ]), action : [["bonus action", ""]] } } }); AddSubClass("wizard", "necromancy", { regExpSearch : /necromancy|necromancer|necromantic/i, subname : "School of Necromancy", subnameshort: "Necromancy", fullname : "Necromancer", source : [["P", 118]], features : { "subclassfeature2" : { name : "Necromancy Savant", source : [["P", 118]], minlevel : 2, description: desc("I halve the gp and time needed to copy necromancy spells into my spellbook"), }, "subclassfeature2.1" : { name : "Grim Harvest", source : [["P", 118]], minlevel : 2, description: desc([ "Once per turn, when I kill something with a 1st-level or higher spell, I regain hit points", "The number of hit points regained is 2\xD7 the spell's level (or 3\xD7 with necromancy spells)", "This doesn't occur for constructs/undead", ]), }, "subclassfeature6" : { name : "Undead Thralls", source : [["P", 119]], minlevel : 6, description: desc([ "I add Animate Dead to my spellbook and can have an additional target when casting it", "Undead created by my necromancy spells have the following benefits:", "They add my proficiency bonus to damage and my wizard level to their HP maximums", ]), spellcastingBonus : [{ name : "Undead Thralls", spells : ["animate dead"], selection : ["animate dead"], }], spellChanges : { "animate dead" : { description : "Turn corpses into 2+2/SL Skeletons or Zombies; control for 24h; bns a command within 60 ft", changes : "My Undead Thralls class feature allows me to animate one more corpse than normal with Animate Dead.", }, }, }, "subclassfeature10" : { name : "Inured to Undead", source : [["P", 119]], minlevel : 10, description: desc("I have resistance to necrotic damage and my hit point maximum can't be reduced"), dmgres : ["Necrotic"] }, "subclassfeature14" : { name : "Command Undead", source : [["P", 11]], minlevel : 14, description: desc([ "As an action, an undead within 60 ft that I can see must make a Charisma save", "If its Int is > 7, it has adv. on the save; If its Int is > 11, it repeats the save every hour", "If failed, it becomes friendly to me and obeys my commands until I use this on another", "On success, it becomes permanently immune to my further attempts", ]), action : [["action", ""]] } } }); AddSubClass("wizard", "transmutation", { regExpSearch : /transmutation|transmuter/i, subname : "School of Transmutation", subnameshort: "Transmutation", fullname : "Transmuter", source : [["P", 119]], features : { "subclassfeature2" : { name : "Transmutation Savant", source : [["P", 119]], minlevel : 2, description: desc("I halve the gp and time needed to copy transmutation spells into my spellbook") }, "subclassfeature2.1" : { name : "Minor Alchemy", source : [["P", 119]], minlevel : 2, description: desc([ "I can transform an object of wood/stone/iron/copper/silver into another of those", "For each 10 min I spend, I can transform up to 1 cubic foot of the material", "It reverts back when I lose concentration or after 1 hour", ]), }, "subclassfeature6" : { name : "Transmuter's Stone", source : [["P", 119]], minlevel : 6, description : desc([ "In 8 hours, I can create a transmuter's stone that gives its wielder one of the following:", " \u2022 Darkvision 60 ft", " \u2022 10 ft increase to speed while unencumbered", " \u2022 Proficiency in Constitution saving throws", " \u2022 Resistance to either acid, cold, fire, lightning, or thunder damage", "The benefit is chosen at creation; I can have only one active stone at a time", "I can change the benefit when I cast a 1st-level or higher transmutation spell with it" ]) }, "subclassfeature10" : { name : "Shapechanger", source : [["P", 119]], minlevel : 10, description: desc([ "I add Polymorph to my spellbook; I can cast it on myself without using a spell slot", "When I do that, I can only transform into a beast with a challenge rating of 1 or lower", ]), recovery : "short rest", usages : 1, spellcastingBonus : [{ name : "Add to spellbook", spells : ["polymorph"], selection : ["polymorph"] }, { name : "1/SR no spell slot", spells : ["polymorph"], selection : ["polymorph"], firstCol : "oncesr" }], spellChanges : { "polymorph" : { name : "Polymorph (special)", range : "Self", description : "I transformed into a beast of my choice with a CR 1 or lower; see book", changes : "Using my Shapechanger class feature, I can cast Polymorph once per short rest without using a spell slot, but when I do so I can only cast it on myself and transform into a beast." } } }, "subclassfeature14" : { name : "Master Transmuter", source : [["P", 119]], minlevel : 14, description: desc([ "As an action, I can destroy my transmuter's stone and do one of the four following:", "##\u2022 Major Transformation##.", " In 10 minutes, I transmute one nonmagical object up to 5 cubic foot into another", " This new, nonmagical object must be of similar size and mass and equal or less value", "##\u2022 Panacea##.", " One touched has all curses, diseases, and poisons removed and is healed to max HP", "##\u2022 Restore Life##.", " I cast Raise Dead without using spell slots or needing to have it in my spellbook", "##\u2022 Restore Youth##.", " A touched creature's apparent age is reduced by 3d10 years (to a minimum of 13)", ]), action : [["action", ""]] } } }); // Companions CompanionList["undead_thrall"] = { name: "Undead Thralls", nameOrigin: "School of Necromancy 6", nameMenu : "Undead Thrall (School of Necromancy feature)", source: [["P", 119]], includeCheck: function(sCrea, objCrea, iCreaCR, bIsAL) { return /undead/i.test(objCrea.type); }, attributesChange: function(sCrea, objCrea) { objCrea.hp += classes.known.wizard ? classes.known.wizard.level : classes.totallevel; if (!objCrea.attacks) return; objCrea.attacks = objCrea.attacks.map(function(oAtk) { if (oAtk.abilitytodamage !== false && !oAtk.dc) { if (!oAtk.modifiers) { oAtk.modifiers = ["", "oProf"]; } else { oAtk.modifiers[1] += "+oProf"; } } return oAtk; }); }, calcChanges: { hp: function (totalHD, HDobj, prefix) { if (classes.known.wizard) { return [classes.known.wizard.level, "Undead Thralls (wizard level)"]; } else { return [classes.totallevel, "Undead Thralls (character level)"]; } }, }, notes: [{ name: "Undead I create with a necromancy spell", description: "add my wizard level to their hit point maximum and add my proficiency bonus to their weapon damage rolls.", joinString: " ", }], eval: function(prefix, lvl) { // Set HP to use average value, so that the level bonus is automatically included var sHPfld = prefix + "Comp.Use.HP.Max"; var aHPsets = How(sHPfld).split(","); aHPsets[3] = "average"; AddTooltip(sHPfld, undefined, aHPsets.toString()); }, }; // Add the backgrounds that are not in the SRD BackgroundList["charlatan"] = { regExpSearch : /charlatan/i, name : "Charlatan", source : [["P", 128], ["ALbackground", 0]], skills : ["Deception", "Sleight of Hand"], gold : 15, equipleft : [ ["Disguise kit", "", 3], ["Tools for chosen con", "", ""] ], equipright : [ ["Fine clothes", "", 6], ["Belt pouch (with coins)", "", 1] ], feature : "False Identity", trait : [ "I fall in and out of love easily, and am always pursuing someone.", "I have a joke for every occasion, especially occasions where humor is inappropriate.", "Flattery is my preferred trick for getting what I want.", "I'm a born gambler who can't resist taking a risk for a potential payoff.", "I lie about almost everything, even when there's no good reason to.", "Sarcasm and insults are my weapons of choice.", "I keep multiple holy symbols on me and invoke whatever deity might come in useful at any given moment.", "I pocket anything I see that might have some value." ], ideal : [ ["Independence", "Independence: I am a free spirit \u2015 no one tells me what to do. (Chaotic)" ], ["Fairness", "Fairness: I never target people who can't afford to lose a few coins. (Lawful)" ], ["Charity", "Charity: I distribute the money I acquire to the people who really need it. (Good)" ], ["Creativity", "Creativity: I never run the same con twice. (Chaotic)" ], ["Friendship", "Friendship: Material goods come and go. Bonds of friendship last forever. (Good)" ], ["Aspiration", "Aspiration: I'm determined to make something of myself. (Any)" ] ], bond : [ "I fleeced the wrong person and must work to ensure that this individual never crosses paths with me or those I care about.", "I owe everything to my mentor \u2015 a horrible person who's probably rotting in jail somewhere.", "Somewhere out there, I have a child who doesn't know me. I'm making the world better for him or her.", "I come from a noble family, and one day I'll reclaim my lands and title from those who stole them from me.", "A powerful person killed someone I love. Someday soon, I'll have my revenge.", "I swindled and ruined a person who didn't deserve it. I seek to atone for my misdeeds but might never be able to forgive myself." ], flaw : [ "I can't resist a pretty face.", "I'm always in debt. I spend my ill-gotten gains on decadent luxuries faster than I bring them in.", "I'm convinced that no one could ever fool me the way I fool others.", "I'm too greedy for my own good. I can't resist taking a risk if there's money involved.", "I can't resist swindling people who are more powerful than me.", "I hate to admit it and will hate myself for it, but I'll run and preserve my own hide if the going gets tough." ], extra : [ "Select a Favorite Scheme", "Cheat at games of chance", "Shave coins, forge documents", "User/manipulator", "Change identity", "Sleight-of-hand cons", "Sell junk as expensive necessities" ], toolProfs : ["Disguise kit", "Forgery kit"], lifestyle : "comfortable" }; BackgroundList["criminal"] = { regExpSearch : /criminal/i, name : "Criminal", source : [["P", 129], ["ALbackground", 0]], skills : ["Deception", "Stealth"], gold : 15, equipright : [ ["Dark, common clothes with hood", "", 3], ["Crowbar", "", 5], ["Belt pouch (with coins)", "", 1] ], feature : "Criminal Contact", trait : [ "I always have a plan for what to do when things go wrong.", "I am always calm, no matter the situation. I never raise my voice or let my emotions control me.", "The first thing I do in a new place is note the locations of everything valuable \u2015 or where such things could be hidden.", "I would rather make a new friend than a new enemy.", "I am incredibly slow to trust. Those who seem the fairest often have the most to hide.", "I don't pay attention to the risks in a situation. Never tell me the odds.", "The best way to get me to do something is to tell me I can't do it.", "I blow up at the slightest insult." ], ideal : [ ["Honor", "Honor: I don't steal from others in the trade. (Lawful)" ], ["Freedom", "Freedom: Chains are meant to be broken, as are those who would forge them. (Chaotic)" ], ["Charity", "Charity: I steal from the wealthy so that I can help people in need. (Good)" ], ["Greed", "Greed: I will do whatever it takes to become wealthy. (Evil)" ], ["People", "People: I'm loyal to my friends, not to any ideals, and everyone else can take a trip down the Styx for all I care. (Neutral)" ], ["Redemption", "Redemption: There's a spark of good in everyone. (Good)" ] ], bond : [ "I'm trying to pay off an old debt I owe to a generous benefactor.", "My ill-gotten gains go to support my family.", "Something important was taken from me, and I aim to steal it back.", "I will become the greatest thief that ever lived.", "I'm guilty of a terrible crime. I hope I can redeem myself for it.", "Someone I loved died because of a mistake I made. That will never happen again." ], flaw : [ "When I see something valuable, I can't think about anything but how to steal it.", "When faced with a choice between money and my friends, I usually choose the money.", "If there's a plan, I'll forget it. If I don't forget it, I'll ignore it.", "I have a \"tell\" that reveals when I'm lying.", "I turn tail and run when things look bad.", "An innocent person is in prison for a crime that I committed. I'm okay with that." ], extra : [ "Select a Criminal Specialty", "Blackmailer", "Burglar", "Enforcer", "Fence", "Highway robber", "Hired killer", "Pickpocket", "Smuggler", "Spy" ], toolProfs : [["Gaming set", 1], ["Thieves' tools", "Dex"]], lifestyle : "poor" }; BackgroundList["entertainer"] = { regExpSearch : /(entertainer|actor|dancer|fire.?eater|jester|juggler|instrumentalist|poet|singer|storyteller|tumbler)/i, name : "Entertainer", source : [["P", 130], ["ALbackground", 0]], skills : ["Acrobatics", "Performance"], gold : 15, equipright : [ ["Costume", "", 4], ["Favor of an admirer", "", ""], ["Belt pouch (with coins)", "", 1], ["Musical instrument of my choice", "", ""] ], feature : "By Popular Demand", trait : [ "I know a story relevant to almost every situation.", "Whenever I come to a new place, I collect local rumors and spread gossip.", "I'm a hopeless romantic, always searching for that 'special someone'.", "Nobody stays angry at me or around me for long, since I can defuse any amount of tension.", "I love a good insult, even one directed at me.", "I get bitter if I'm not the center of attention.", "I'll settle for nothing less than perfection.", "I change my mood or my mind as quickly as I change key in a song." ], ideal : [ ["Beauty", "Beauty: When I perform, I make the world better than it was. (Good)" ], ["Tradition", "Tradition: The stories, legends, and songs of the past must never be forgotten, for they teach us who we are. (Lawful)" ], ["Creativity", "Creativity: The world is in need of new ideas and bold action. (Chaotic)" ], ["Greed", "Greed: I'm only in it for the money and fame. [Evil]" ], ["People", "People: I like seeing the smiles on people's faces when I perform. That's all that matters. (Neutral)" ], ["Honesty", "Honesty: Art should reflect the soul; it should come from within and reveal who we really are. (Any)" ] ], bond : [ "My instrument is my most treasured possession, and it reminds me of someone I love.", "Someone stole my precious instrument, and someday I'll get it back.", "I want to be famous, whatever it takes.", "I idolize a hero of the old tales and measure my deeds against that person's.", "I will do anything to prove myself superior to my hated rival.", "I would do anything for the other members of my old troupe." ], flaw : [ "I'll do anything to win fame and renown.", "I'm a sucker for a pretty face.", "A scandal prevents me from ever going home again. That kind of trouble seems to follow me around.", "I once satirized a noble who still wants my head. It was a mistake that I will likely repeat.", "I have trouble keeping my true feelings hidden. My sharp tongue lands me in trouble.", "Despite my best efforts, I am unreliable to my friends." ], extra : [ "Select an Entertainer Routine", "Actor", "Dancer", "Fire-eater", "Jester", "Juggler", "Instrumentalist", "Poet", "Singer", "Storyteller", "Tumbler" ], toolProfs : ["Disguise kit", ["Musical instrument", 1]], lifestyle : "modest" }; BackgroundList["folk hero"] = { regExpSearch : /^(?=.*folk)(?=.*hero).*$/i, name : "Folk Hero", source : [["P", 131], ["ALbackground", 0]], skills : ["Animal Handling", "Survival"], gold : 10, equipleft : [ ["Set of artisan's tools", "", ""], ["Shovel", "", 5], ["Iron pot", "", 10] ], equipright : [ ["Common clothes", "", 3], ["Belt pouch (with coins)", "", 1] ], feature : "Rustic Hospitality", trait : [ "I judge people by their actions, not their words.", "If someone is in trouble, I'm always ready to lend help.", "When I set my mind to something, I follow through no matter what gets in my way.", "I have a strong sense of fair play and always try to find the most equitable solution to arguments.", "I'm confident in my own abilities and do what I can to instill confidence in others.", "Thinking is for other people. I prefer action.", "I misuse long words in an attempt to sound smarter.", "I get bored easily. When am I going to get on with my destiny?" ], ideal : [ ["Respect", "Respect: People deserve to be treated with dignity and respect. (Good)" ], ["Fairness", "Fairness: No one should get preferential treatment before the law, and no one is above the law. (Lawful)" ], ["Freedom", "Freedom: Tyrants must not be allowed to oppress the people. (Chaotic)" ], ["Might", "Might: If I become strong, I can take what I want\u2015 what I deserve. (Evil)" ], ["Sincerity", "Sincerity: There's no good in pretending to be something I'm not. (Neutral)" ], ["Destiny", "Destiny: Nothing and no one can steer me away from my higher calling. (Any)" ] ], bond : [ "I have a family, but I have no idea where they are. One day, I hope to see them again.", "I worked the land, I love the land, and I will protect the land.", "A proud noble once gave me a horrible beating, and I will take my revenge on any bully I encounter.", "My tools are symbols of my past life, and I carry them so that I will never forget my roots.", "I protect those who cannot protect themselves.", "I wish my childhood sweetheart had come with me to pursue my destiny." ], flaw : [ "The tyrant who rules my land will stop at nothing to see me killed.", "I'm convinced of the significance of my destiny, and blind to my shortcomings and the risk of failure.", "The people who knew me when I was young know my shameful secret, so I can never go home again.", "I have a weakness for the vices of the city, especially hard drink.", "Secretly, I believe that things would be better if I were a tyrant lording over the land.", "I have trouble trusting in my allies." ], extra : [ "Select a Defining Event", "I stood up to a tyrant's agents", "I saved people during a natural disaster", "I stood alone against a terrible monster", "I stole from a corrupt merchant for the poor", "I led a militia to fight off an invading army", "I stole weapons from a tyrant to arm the people", "I trained peasantry to fight a tyrant with farm tools", "A decree was rescinded after I led a protest against it", "A magical creature gave me a blessing or insight", "I rose to leadership in a lord's army" ], toolProfs : [["Artisan's tools", 1], "Vehicles (land)"], lifestyle : "modest" }; BackgroundList["guild artisan"] = { regExpSearch : /^(?=.*guild)(?=.*artisan).*$/i, name : "Guild Artisan", source : [["P", 132], ["ALbackground", 0]], skills : ["Insight", "Persuasion"], gold : 15, equipleft : [ ["Set of artisan's tools", "", ""], ["Letter of introduction from guild", "", ""] ], equipright : [ ["Traveler's clothes", "", 4], ["Belt pouch (with coins)", "", 1] ], feature : "Guild Membership", trait : [ "I believe that anything worth doing is worth doing right. I can't help it\u2015 I'm a perfectionist.", "I'm a snob who looks down on those who can't appreciate fine art.", "I always want to know how things work and what makes people tick.", "I'm full of witty aphorisms and have a proverb for every occasion.", "I'm rude to people who lack my commitment to hard work and fair play.", "I like to talk at length about my profession.", "I don't part with my money easily and will haggle tirelessly to get the best deal possible.", "I'm well known for my work, and I want to make sure everyone appreciates it. I'm always taken aback when people haven't heard of me." ], ideal : [ ["Community", "Community: It is the duty of all civilized people to strengthen the bonds of community and the security of civilization. (Lawful)" ], ["Generosity", "Generosity: My talents were given to me so that I could use them to benefit the world. (Good)" ], ["Freedom", "Freedom: Everyone should be free to pursue his or her own livelihood. (Chaotic)" ], ["Greed", "Greed: I'm only in it for the money. (Evil)" ], ["People", "People: I'm committed to the people I care about, not to ideals. (Neutral)" ], ["Aspiration", "Aspiration: I work hard to be the best there is at my craft. (Any)" ] ], bond : [ "The workshop where I learned my trade is the most important place in the world to me.", "I created a great work for someone, and then found them unworthy to receive it. I'm still looking for someone worthy.", "I owe my guild a great debt for forging me into the person I am today.", "I pursue wealth to secure someone's love.", "One day I will return to my guild and prove that I am the greatest artisan of them all.", "I will get revenge on the evil forces that destroyed my place of business and ruined my livelihood." ], flaw : [ "I'll do anything to get my hands on something rare or priceless.", "I'm quick to assume that someone is trying to cheat me.", "No one must ever learn that I once stole money from guild coffers.", "I'm never satisfied with what I have\u2015 I always want more.", "I would kill to acquire a noble title.", "I'm horribly jealous of anyone who can outshine my handiwork. Everywhere I go, I'm surrounded by rivals." ], extra : [ "Select a Guild Business", "Alchemists and apothecaries", "Armorers, locksmiths, and finesmiths", "Brewers, distillers, and vintners", "Calligraphers, scribes, and scriveners", "Carpenters, roofers, and plasterers", "Cartographers, surveyors, and chart-makers", "Cobblers and shoemakers", "Cooks and bakers", "Glassblowers and glaziers", "Jewelers and gemcutters", "Leatherworkers, skinners, and tanners", "Masons and stonecutters", "Painters, limners, and sign-makers", "Potters and tile-makers", "Shipwrights and sailmakers", "Smiths and metal-forgers", "Tinkers, pewterers, and casters", "Wagon-makers and wheelwrights", "Weavers and dyers", "Woodcarvers, coopers, and bowyers" ], toolProfs : [["Artisan's tools", 1]], languageProfs : [1], lifestyle : "comfortable" }; BackgroundList["hermit"] = { regExpSearch : /hermit/i, name : "Hermit", source : [["P", 134], ["ALbackground", 0]], skills : ["Medicine", "Religion"], gold : 5, equipleft : [ ["Winter blanket", "", 3], ["Herbalism kit", "", 3] ], equipright : [ ["Common clothes", "", 3], ["Scroll case with notes", "", 1] ], feature : "Discovery", trait : [ "I've been isolated for so long that I rarely speak, preferring gestures and the occasional grunt.", "I am utterly serene, even in the face of disaster.", "The leader of my community had something wise to say on every topic, and I am eager to share that wisdom.", "I feel tremendous empathy for all who suffer.", "I'm oblivious to etiquette and social expectations.", "I connect everything that happens to me to a grand, cosmic plan.", "I often get lost in my own thoughts and contemplation, becoming oblivious to my surroundings.", "I am working on a grand philosophical theory and love sharing my ideas." ], ideal : [ ["Greater Good", "Greater Good: My gifts are meant to be shared with all, not used for my own benefit. (Good)" ], ["Logic", "Logic: Emotions must not cloud our sense of what is right and true, or our logical thinking. (Lawful)" ], ["Free Thinking", "Free Thinking: Inquiry and curiosity are the pillars of progress. (Chaotic)" ], ["Power", "Power: Solitude and contemplation are paths toward mystical or magical power. (Evil)" ], ["Live and Let Live", "Live and Let Live: Meddling in the affairs of others only causes trouble. (Neutral)" ], ["Self-Knowledge", "Self-Knowledge: If you know yourself, there's nothing left to know. (Any)" ] ], bond : [ "Nothing is more important than the other members of my hermitage, order, or association.", "I entered seclusion to hide from the ones who might still be hunting me. I must someday confront them.", "I'm still seeking the enlightenment I pursued in my seclusion, and it still eludes me.", "I entered seclusion because I loved someone I could not have.", "Should my discovery come to light, it could bring ruin to the world.", "My isolation gave me great insight into a great evil that only I can destroy." ], flaw : [ "Now that I've returned to the world, I enjoy its delights a little too much.", "I harbor dark, bloodthirsty thoughts that my isolation and meditation failed to quell.", "I am dogmatic in my thoughts and philosophy.", "I let my need to win arguments overshadow friendships and harmony.", "I'd risk too much to uncover a lost bit of knowledge.", "I like keeping secrets and won't share them with anyone." ], extra : [ "Select a Life of Seclusion", "Searching for spiritual enlightenment", "Living in accordance with a religious order", "Exiled for a crime I didn't commit", "Retreated from society after a life-altering event", "Worked on my art, literature, music, or manifesto", "Commune with nature, far from civilization", "Caretaker of an ancient ruin or relic", "Pilgrim in search of a thing of spiritual significance" ], toolProfs : ["Herbalism kit"], languageProfs : [1], lifestyle : "poor" }; BackgroundList["noble"] = { regExpSearch : /^(?!.*(waterdhavian|waterdeep|knight))(?=.*noble).*$/i, name : "Noble", source : [["P", 135], ["ALbackground", 0]], skills : ["History", "Persuasion"], gold : 25, equipleft : [ ["Scroll of pedigree", "", ""] ], equipright : [ ["Fine clothes", "", 6], ["Signet ring", "", ""], ["Purse (with coins)", "", 1] ], feature : "Position of Privilege", trait : [ "My eloquent flattery makes everyone I talk to feel like the most wonderful and important person in the world.", "The common folk love me for my kindness and generosity.", "No one could doubt by looking at my regal bearing that I am a cut above the unwashed masses.", "I take great pains to always look my best and follow the latest fashions.", "I don't like to get my hands dirty, and I won't be caught dead in unsuitable accommodations.", "Despite my noble birth, I do not place myself above other folk. We all have the same blood.", "My favor, once lost, is lost forever.", "If you do me an injury, I will crush you, ruin your name, and salt your fields." ], ideal : [ ["Respect", "Respect: Respect is due to me because of my position, but all people regardless of station deserve to be treated with dignity. (Good)" ], ["Responsibility", "Responsibility: It is my duty to respect the authority of those above me, just as those below me must respect mine. (Lawful)" ], ["Independence", "Independence: I must prove that I can handle myself without the coddling of my family. (Chaotic)" ], ["Power", "Power: If I can attain more power, no one will tell me what to do. (Evil)" ], ["Family", "Family: Blood runs thicker than water. (Any)" ], ["Noble Obligation", "Noble Obligation: It is my duty to protect and care for the people beneath me. (Good)" ] ], bond : [ "I will face any challenge to win the approval of my family.", "My house's alliance with another noble family must be sustained at all costs.", "Nothing is more important than the other members of my family.", "I am in love with the heir of a family that my family despises.", "My loyalty to my sovereign is unwavering.", "The common folk must see me as a hero of the people." ], flaw : [ "I secretly believe that everyone is beneath me.", "I hide a truly scandalous secret that could ruin my family forever.", "I too often hear veiled insults and threats in every word addressed to me, and I'm quick to anger.", "I have an insatiable desire for carnal pleasures.", "In fact, the world does revolve around me.", "By my words and actions, I often bring shame to my family." ], toolProfs : [["Gaming set", 1]], languageProfs : [1], lifestyle : "wealthy" }; BackgroundList["outlander"] = { regExpSearch : /^(?!.*urban)(?=.*(outlander|forester|trapper|homesteader|guide|exile|outcast|bounty.?hunter|tribal nomad|hunter-gatherer|tribal.?marauder)).*$/i, name : "Outlander", source : [["P", 136], ["ALbackground", 0]], skills : ["Athletics", "Survival"], gold : 10, equipright : [ ["Traveler's clothes", "", 4], ["Staff", "", 4], ["Hunting trap", "", 25], ["Trophy from animal", "", ""], ["Belt pouch (with coins)", "", 1] ], feature : "Wanderer", trait : [ "I'm driven by a wanderlust that led me away from home.", "I watch over my friends as if they were a litter of newborn pups.", "I once ran twenty-five miles without stopping to warn to my clan of an approaching orc horde. I'd do it again if I had to.", "I have a lesson for every situation, drawn from observing nature.", "I place no stock in wealthy or well-mannered folk. Money and manners won't save you from a hungry owlbear.", "I'm always picking things up, absently fiddling with them, and sometimes accidentally breaking them.", "I feel far more comfortable around animals than people.", "I was, in fact, raised by wolves." ], ideal : [ ["Change", "Change: Life is like the seasons, in constant change, and we must change with it. (Chaotic)" ], ["Greater Good", "Greater Good: It is each person's responsibility to make the most happiness for the whole tribe. (Good)" ], ["Honor", "Honor: If I dishonor myself, I dishonor my whole clan. (Lawful)" ], ["Might", "Might: The strongest are meant to rule. (Evil)" ], ["Nature", "Nature: The natural world is more important than all the constructs of civilization. (Neutral)" ], ["Glory", "Glory: I must earn glory in battle, for myself and my clan. (Any)" ] ], bond : [ "My family, clan, or tribe is the most important thing in my life, even when they are far from me.", "An injury to the unspoiled wilderness of my home is an injury to me.", "I will bring terrible wrath down on the evildoers who destroyed my homeland.", "I am the last of my tribe, and it is up to me to ensure their names enter legend.", "I suffer awful visions of a coming disaster and will do anything to prevent it.", "It is my duty to provide children to sustain my tribe." ], flaw : [ "I am too enamored of ale, wine, and other intoxicants.", "There's no room for caution in a life lived to the fullest.", "I remember every insult I've received and nurse a silent resentment toward anyone who's ever wronged me.", "I am slow to trust members of other races, tribes, and societies.", "Violence is my answer to almost any challenge.", "Don't expect me to save those who can't save themselves. It is nature's way that the strong thrive and the weak perish." ], extra : ["Select an Origin", "Forester", "Trapper", "Homesteader", "Guide", "Exile or outcast", "Bounty hunter", "Pilgrim", "Tribal nomad", "Hunter-gatherer", "Tribal marauder" ], toolProfs : [["Musical instrument", 1]], languageProfs : [1], lifestyle : "poor" }; BackgroundList["sage"] = { regExpSearch : /(sage|alchemist|astronomer|academic|librarian|professor|researcher|apprentice|scribe)/i, name : "Sage", source : [["P", 137], ["ALbackground", 0]], skills : ["Arcana", "History"], gold : 10, equipleft : [ ["Ink, 1 ounce bottle of", 1, ""], ["Ink pen (quill)", "", ""], ["Small knife", "", 0.5], ["Letter from dead colleague", "", ""] ], equipright : [ ["Common clothes", "", 3], ["Belt pouch (with coins)", "", 1] ], feature : "Researcher", trait : [ "I use polysyllabic words that convey the impression of great erudition.", "I've read every book in the world's greatest libraries\u2015 or I like to boast that I have.", "I'm used to helping out those who aren't as smart as I am, and I patiently explain anything and everything to others.", "There's nothing I like more than a good mystery.", "I'm willing to listen to every side of an argument before I make my own judgment.", "I . . . speak . . . slowly . . . when talking . . . to idiots, . . . which . . . almost. . . everyone . . . is . . . compared . . . to me.", "I am horribly, horribly awkward in social situations.", "I'm convinced that people are always trying to steal my secrets." ], ideal : [ ["Knowledge", "Knowledge: The path to power and self-improvement is through knowledge. (Neutral)" ], ["Beauty", "Beauty: What is beautiful points us beyond itself toward what is true. (Good)" ], ["Logic", "Logic: Emotions must not cloud our logical thinking. (Lawful)" ], ["No Limits", "No Limits: Nothing should fetter the infinite possibility inherent in all existence. (Chaotic)" ], ["Power", "Power: Knowledge is the path to power and domination. (Evil)" ], ["Self-Improvement", "Self-Improvement: The goal of a life of study is the betterment of oneself. (Any)" ] ], bond : [ "It is my duty to protect my students.", "I have an ancient text that holds terrible secrets that must not fall into the wrong hands.", "I work to preserve a library, university, scriptorium, or monastery.", "My life's work is a series of tomes related to a specific field of lore.", "I've been searching my whole life for the answer to a certain question.", "I sold my soul for knowledge. I hope to do great deeds and win it back." ], flaw : [ "I am easily distracted by the promise of information.", "Most people scream and run when they see a demon. I stop and take notes on its anatomy.", "Unlocking an ancient mystery is worth the price of a civilization.", "I overlook obvious solutions in favor of complicated ones.", "I speak without really thinking through my words, invariably insulting others.", "I can't keep a secret to save my life, or anyone else's." ], extra : ["Select a Specialty", "Alchemist", "Astronomer", "Discredited academic", "Librarian", "Professor", "Researcher", "Wizard's apprentice", "Scribe" ], languageProfs : [2], lifestyle : "modest" }; BackgroundList["sailor"] = { regExpSearch : /sailor/i, name : "Sailor", source : [["P", 139], ["ALbackground", 0]], skills : ["Athletics", "Perception"], gold : 10, equipleft : [ ["Silk rope, feet of", 50, 0.1] ], equipright : [ ["Common clothes", "", 3], ["Belaying pin (club)", "", 2], ["Lucky charm", "", ""], ["Belt pouch (with coins)", "", 1] ], feature : "Ship's Passage", trait : [ "My friends know they can rely on me, no matter what.", "I work hard so that I can play hard when the work is done.", "I enjoy sailing into new ports and making new friends over a flagon of ale.", "I stretch the truth for the sake of a good story.", "To me, a tavern brawl is a nice way to get to know a new city.", "I never pass up a friendly wager.", "My language is as foul as an otyugh nest.", "I like a job well done, especially if I can convince someone else to do it." ], ideal : [ ["Respect", "Respect: The thing that keeps a ship together is mutual respect between captain and crew. (Good)" ], ["Fairness", "Fairness: We all do the work, so we all share in the rewards. (Lawful)" ], ["Freedom", "Freedom: The sea is freedom\u2015 the freedom to go anywhere and do anything. (Chaotic)" ], ["Mastery", "Mastery: I'm a predator, and the other ships on the sea are my prey. (Evil)" ], ["People", "People: I'm committed to my crewmates, not to ideals. (Neutral)" ], ["Aspiration", "Aspiration: Someday I'll own my own ship and chart my own destiny. (Any)" ] ], bond : [ "I'm loyal to my captain first, everything else second.", "The ship is most important\u2015 crewmates and captains come and go.", "I'll always remember my first ship.", "In a harbor town, I have a paramour whose eyes nearly stole me from the sea.", "I was cheated out of my fair share of the profits, and I want to get my due.", "Ruthless pirates murdered my captain and crewmates, plundered our ship, and left me to die. Vengeance will be mine." ], flaw : [ "I follow orders, even if I think they're wrong.", "I'll say anything to avoid having to do extra work.", "Once someone questions my courage, I never back down no matter how dangerous the situation.", "Once I start drinking, it's hard for me to stop.", "I can't help but pocket loose coins and other trinkets I come across.", "My pride will probably lead to my destruction." ], toolProfs : ["Navigator's tools", "Vehicles (water)"], lifestyle : "modest", }; BackgroundList["soldier"] = { regExpSearch : /^(?!.*mercenary)(?=.*soldier).*$/i, name : "Soldier", source : [["P", 140], ["ALbackground", 0]], skills : ["Athletics", "Intimidation"], gold : 10, equipright : [ ["Common clothes", "", 3], ["Insignia of rank", "", ""], ["Trophy from fallen enemy", "", ""], ["Bone dice or playing cards", "", ""], ["Belt pouch (with coins)", "", 1] ], feature : "Military Rank", trait : [ "I'm always respectful and polite.", "I'm haunted by memories of war. I can't get the violent images out of my mind.", "I'm slow to make new friends, because I've lost too many old ones.", "I'm full of inspiring and cautionary tales from my military experience with some relevance to almost every type of combat situation.", "I can stare down an owlbear without flinching.", "I enjoy my strength and like to break things.", "I have a rough sense of humor.", "I approach problems head-on. A simple, direct course is the best path to a solution." ], ideal : [ ["Greater Good", "Greater Good: Our fate is to give our lives in the defense of others. (Good)" ], ["Responsibility", "Responsibility: I do what I have to and follow just authority. (Lawful)" ], ["Independence", "Independence: When people obey orders blindly, they affirm a kind of tyranny. (Chaotic)" ], ["Might", "Might: In life as in war, the mightier force prevails. (Evil)" ], ["Live and Let Live", "Live and Let Live: Ideals aren't worth killing over or going to war for. (Neutral)" ], ["Nation", "Nation: My city, state, or people are the only things that matter. (Any)" ] ], bond : [ "I would still give my life for the people I have served with.", "Someone saved my life on the battlefield. Even now, I would never leave a friend behind.", "My honor is my life.", "I'll never forget the crushing defeat my company endured or the foes who inflicted it.", "Those who fight with me are those worth laying down my life for.", "I fight for those who cannot fight for themselves." ], flaw : [ "The atrocious enemy we faced in battle still leaves me trembling with fear.", "I have little respect for those who are not a tested warrior.", "A disastrous mistake I made in battle cost many lives\u2015 I will do anything to keep that mistake a secret.", "My hatred of my foes is blind and unreasoning. ", "I uphold the law, even if the law causes suffering.", "I'd rather eat my weapon than admit when I'm wrong." ], extra : ["Select a Specialty", "Officer", "Scout", "Infantry", "Cavalry", "Healer", "Quartermaster", "Standard-bearer", "Support staff" ], toolProfs : [["Gaming set", 1], "Vehicles (land)"], lifestyle : "modest" }; BackgroundList["urchin"] = { regExpSearch : /urchin/i, name : "Urchin", source : [["P", 141], ["ALbackground", 0]], skills : ["Sleight of Hand", "Stealth"], gold : 10, equipleft : [ ["Map of the city", "", ""], ["Small knife", "", 0.5] ], equipright : [ ["Common clothes", "", 3], ["Token from my parents", "", ""], ["Pet mouse", "", 0.1], ["Belt pouch (with coins)", "", 1] ], feature : "City Secrets", trait : [ "I keep scraps of food and trinkets hidden away in my pockets.", "I ask questions all the time.", "I like to squeeze into compact places where nobody can harm me.", "I sleep with my back to solid surface, with all that I own embraced tightly in my arms.", "I have bad manners and eat like a pig.", "I expect that anybody who's nice to me is hiding malicious intent.", "I eschew bathing.", "I say, without reserve, what other people are implying or masking." ], ideal : [ ["Respect", "Respect: Everybody, no matter their riches, deserves respect. (Good)" ], ["Community", "Community: We have to take look out for each other, because nobody else will do it for us. (Lawful)" ], ["Change", "Change: The low rise up, and the high and mighty come down. Change is natural. (Chaotic)" ], ["Retribution", "Retribution: The rich need to be shown how it is to live and die in the poor quarters. (Evil)" ], ["People", "People: I help those who help me\u2015 that is what lets us stay alive. (Neutral)" ], ["Aspiration", "Aspiration: I'm going to prove that I'm worthy of a better life. (Any)" ] ], bond : [ "My town or city is my home, and I'll battle those that threaten it.", "I'm the benefactor of an orphanage so others may be kept from enduring what I was forced to endure.", "I owe my life to another urchin who taught me the ways of living in the gutters.", "I owe a debt I can never repay to the person who showed me sympathy.", "I got away from my life of poverty by robbing an influential person, and I'm wanted for it.", "No one else should have to suffer the difficulties I've been through." ], flaw : [ "I will run away from a fight if I'm outnumbered.", "A gold piece already has a lot of value to me, and I'll do just about anything for more of it.", "I will never completely trust another. I only trust myself.", "I would rather use an unfair advantage than fight honorably.", "It's not theft if I have more use for it than someone else.", "People who are incapable of taking care of themselves get what they deserve." ], toolProfs : ["Disguise kit", ["Thieves' tools", "Dex"]], lifestyle : "modest" }; // Add the background variants AddBackgroundVariant("entertainer", "gladiator", { regExpSearch : /gladiator/i, name : "Gladiator", source : [["P", 131], ["ALbackground", 0]], equipright : [ ["Costume", "", 4], ["Favor of an admirer", "", ""], ["Belt pouch (with coins)", "", 1], ["Inexpensive, unusual weapon", "", ""] ], feature : "Are You Entertained?", extra : "" }); AddBackgroundVariant("guild artisan", "guild merchant", { regExpSearch : /^(?=.*guild)(?=.*merchant).*$/i, name : "Guild Merchant", source : [["P", 133], ["ALbackground", 0]], equipleft : [ ["Letter of introduction from guild", "", ""] ], equipright : [ ["Traveler's clothes", "", 4], ["Belt pouch (with coins)", "", 1], ["Cart", "", ""], ["Mule", "", ""] ], extra : [ "Select a Guild Business", "Traders", "Caravan masters", "Shopkeepers" ], toolProfs : ["Navigator's tools (or language)"] }); AddBackgroundVariant("noble", "knight", { regExpSearch : /^(?!.*order)(?=.*knight).*$/i, name : "Knight", source : [["P", 136], ["ALbackground", 0]], equipright : [ ["Fine clothes", "", 6], ["Signet ring", "", ""], ["Purse (with coins)", "", 1], ["Banner or token from devoted love", "", ""] ], feature : "Retainers" }); AddBackgroundVariant("sailor", "pirate", { regExpSearch : /pirate/i, name : "Pirate", source : [["P", 139], ["ALbackground", 0]], feature : "Bad Reputation" }); // Add the backgrounds features that are not in the SRD BackgroundFeatureList["are you entertained?"] = { description : "I can always find a place to perform (arena/pit fight), where I receive free lodging and food of a modest or comfortable standard, as long as I perform each night. In addition, my performance makes me something of a local figure. When strangers recognize me in a town where I have performed, they typically take a liking to me.", source : [["P", 131], ["ALbackground", 0]] }; BackgroundFeatureList["bad reputation"] = { description : "No matter where I go, people are afraid of me due to my reputation. When I am in a civilized settlement, I can get away with minor criminal offenses, such as refusing to pay for food at a tavern or breaking down doors at a local shop, since most people will not report my activity to the authorities.", source : [["P", 139], ["ALbackground", 0]] }; BackgroundFeatureList["by popular demand"] = { description : "I can always find a place to perform (inn/tavern/circus/etc.), where I receive free lodging and food of a modest or comfortable standard, as long as I perform each night. In addition, my performance makes me something of a local figure. When strangers recognize me in a town where I have performed, they typically take a liking to me.", source : [["P", 130], ["ALbackground", 0]] }; BackgroundFeatureList["city secrets"] = { description : "I know the secret patterns and flow to cities and can find passages through the urban sprawl that others would miss. When I am not in combat, I (and companions I lead) can travel between any two locations in the city twice as fast as my speed would normally allow.", source : [["P", 141], ["ALbackground", 0]] }; BackgroundFeatureList["criminal contact"] = { description : "I have a reliable and trustworthy contact who acts as my liaison to a network of other criminals. I know how to get messages to and from my contact, even over great distances; specifically, I know the local messengers, corrupt caravan masters, and seedy sailors who can deliver my messages.", source : [["P", 129], ["ALbackground", 0]] }; BackgroundFeatureList["discovery"] = { description : "The quiet seclusion of my extended hermitage gave me access to a unique and powerful discovery. The exact nature of this revelation depends on the nature of my seclusion. It might be a great truth, a hidden site, a long forgotten fact, or unearthed some relic of the past that could rewrite history.", source : [["P", 134], ["ALbackground", 0]] }; BackgroundFeatureList["false identity"] = { description : "I have created a second identity that includes documentation, established acquaintances, and disguises that allow me to assume that persona. Additionally, I can forge documents, including official papers and personal letters, as long as I have seen an example of the kind of document or the handwriting I am trying to copy.", source : [["P", 128], ["ALbackground", 0]] }; BackgroundFeatureList["guild membership"] = { description : "5 gp membership fees per month: The guild offers lodging if possible. In case of being accused of a crime, the guild will support me if a good case can be made for my innocence or the crime is justifiable. I can also gain access to powerful political figures through the guild, as long as I'm in good standing and the guild is paid enough.", source : [["P", 133], ["ALbackground", 0]] }; BackgroundFeatureList["military rank"] = { description : "I have a military rank from my career as a soldier. Soldiers loyal to my former military organization still recognize my authority and influence. I can invoke my rank to influence soldiers and temporarily requisition simple equipment or horses. I can usually gain access to friendly military encampments and fortresses where my rank is recognized.", source : [["P", 140], ["ALbackground", 0]], }; BackgroundFeatureList["position of privilege"] = { description : "I am welcome in high society, and people assume I have the right to be wherever I am. The common folk make every effort to accommodate me and avoid my displeasure, and other people of high birth treat me as a member of the same social sphere. I can secure an audience with a local noble if I need to.", source : [["P", 135], ["ALbackground", 0]] }; BackgroundFeatureList["researcher"] = { description : "When I attempt to learn or recall a piece of lore, if I do not know that information, I often know where and from whom I can obtain it. Usually, this information comes from a library, scriptorium, university, or a sage or other learned person or creature. Unearthing the deepest secrets of the multiverse can require an adventure or even a whole campaign.", source : [["P", 138], ["ALbackground", 0]] }; BackgroundFeatureList["retainers"] = { description : "I have the service of three retainers loyal to my family, one of whom is another noble and my squire. My other retainers are commoners who can perform mundane tasks for me, but they do not fight for me, will not follow me into obviously dangerous areas (such as dungeons), and will leave if they are frequently endangered or abused.", source : [["P", 136], ["ALbackground", 0]] }; BackgroundFeatureList["rustic hospitality"] = { description : "Since I come from the ranks of the common folk, I fit in among them with ease. I can find a place to hide, rest, or recuperate among other commoners, unless I have shown myself to be a danger to them. They will shield me from the law or anyone else searching for me, though they will not risk their lives for me.", source : [["P", 131], ["ALbackground", 0]] }; BackgroundFeatureList["ship's passage"] = { description : "When I need to, I can secure free passage on a sailing ship for myself and my companions. I might sail on the ship I served on, or another ship I have good relations with. Because I'm calling in a favor, I can't be certain of a schedule or route that will meet my every need. My companions and I are expected to assist the crew during the voyage.", source : [["P", 139], ["ALbackground", 0]] }; BackgroundFeatureList["wanderer"] = { description : "I have an excellent memory for maps and geography, and I can always recall the general layout of terrain, settlements, and other features around me. In addition, I can find food and fresh water for myself and up to five other people each day, provided that the land offers berries, small game, water, and so forth.", source : [["P", 136], ["ALbackground", 0]] }; // Add the feats that are not in the SRD FeatsList["actor"] = { name : "Actor", source : [["P", 165]], descriptionFull : "Skilled at mimicry and dramatics, you gain the following benefits:\n \u2022 Increase your Charisma score by 1, to a maximum of 20.\n \u2022 You have advantage on Charisma (Deception) and Charisma (Performance) checks when trying to pass yourself off as a different person.\n \u2022 You can mimic the speech of another person or the sounds made by other creatures. You must have heard the person speaking, or heard the creature make the sound, for at least 1 minute. A successful Wisdom (Insight) check contested by your Charisma (Deception) check allows a listener to determine that the effect is faked.", description : "Advantage on Charisma (Deception) and (Performance) if trying to pass as another. I can mimic a person's speech or other creature's sounds if I've heard it for at least 1 minute. Wisdom (Insight) vs. Charisma (Deception) to determine the sound is faked. [+1 Charisma]", scores : [0, 0, 0, 0, 0, 1] }; FeatsList["alert"] = { name : "Alert", source : [["P", 165]], descriptionFull : "Always on the lookout for danger, you gain the following benefits:\n \u2022 You gain a +5 bonus to initiative.\n \u2022 You can't be surprised while you are conscious.\n \u2022 Other creatures don't gain advantage on attack rolls against you as a result of being unseen by you.", description : "I can't be surprised while I'm conscious. I have a +5 bonus on initiative rolls. Other creatures don't gain advantage on attack rolls against me as a result of being hidden from me.", addMod : { type : "skill", field : "Init", mod : 5, text : "I have a +5 bonus on initiative rolls." } }; FeatsList["athlete"] = { name : "Athlete", source : [["P", 165]], descriptionFull : "You have undergone extensive physical training to gain the following benefits:\n \u2022 Increase your Strength or Dexterity score by 1, to a maximum of 20.\n \u2022 When you are prone, standing up uses only 5 feet of your movement.\n \u2022 Climbing doesn't cost you extra movement.\n \u2022 You can make a running long jump or a running high jump after moving only 5 feet on foot, rather than 10 feet.", description : "Standing up from prone uses only 5 ft of movement. Climbing doesn't cost me extra movement. I can make a running long jump or a running high jump after moving only 5 feet on foot, rather than 10 feet. [+1 Strength or Dexterity]", scorestxt : "+1 Strength or Dexterity" }; FeatsList["charger"] = { name : "Charger", source : [["P", 165]], descriptionFull : "When you use your action to Dash, you can use a bonus action to make one melee weapon attack or to shove a creature.\n If you move at least 10 feet in a straight line immediately before taking this bonus action, you either gain a +5 bonus to the attack's damage roll (if you chose to make a melee attack and hit) or push the target up to 10 feet away from you (if you chose to shove and you succeed).", description : "As a bonus action after taking the Dash action, I can make one melee weapon attack or shove a creature. If I move at least 10 ft in a straight line before this bonus action, I add +5 damage to the attack or increase the distance up to 10 ft for the shove.", action : [["bonus action", " (after Dash action)"]] }; FeatsList["crossbow expert"] = { name : "Crossbow Expert", source : [["P", 165]], descriptionFull : "Thanks to extensive practice with the crossbow, you gain the following benefits:\n \u2022 You ignore the loading quality of crossbows with which you are proficient.\n \u2022 Being within 5 feet of a hostile creature doesn't impose disadvantage on your ranged attack rolls.\n \u2022 When you use the Attack action and attack with a one-handed weapon, you can use a bonus action to attack with a hand crossbow you are holding.", description : "I ignore the loading quality of crossbows I'm proficient with. I don't suffer disadv. on ranged attack rolls for being within 5 ft of a hostile. When I attack with a one-handed weapon in my Attack action, I can use a bonus action to attack with a hand crossbow I'm holding.", action : [["bonus action", " (with Attack action)"]], calcChanges : { atkAdd : [ function (fields, v) { if (/crossbow/i.test(v.baseWeaponName) && fields.Proficiency) { fields.Description = fields.Description.replace(/(,? ?loading|loading,? ?)/i, ''); }; }, "I ignore the loading quality of crossbows I'm proficient with." ] } }; FeatsList["defensive duelist"] = { name : "Defensive Duelist", source : [["P", 165]], descriptionFull : "When you are wielding a finesse weapon with which you are proficient and another creature hits you with a melee attack, you can use your reaction to add your proficiency bonus to your AC for that attack, potentially causing the attack to miss you.", description : "When wielding a finesse weapon with which I am proficient and another creature hits me with a melee attack, I can use my reaction to add my proficiency bonus to my AC for that attack, potentially causing the attack to miss me.", prerequisite : "Dexterity 13 or higher", prereqeval : function(v) { return What('Dex') >= 13; }, action : [["reaction", " (when hit in melee)"]] }; FeatsList["dual wielder"] = { name : "Dual Wielder", source : [["P", 165]], descriptionFull : "You master fighting with two weapons, gaining the following benefits:\n \u2022 You gain a +1 bonus to AC while you are wielding a separate melee weapon in each hand.\n \u2022 You can use two-weapon fighting even when the one-handed melee weapons you are wielding aren't light.\n \u2022 You can draw or stow two one-handed weapons when you would normally be able to draw or stow only one.", description : "I can use two-weapon fighting even when the one-handed melee weapons I'm wielding aren't light. I can draw or stow two one-handed weapons when I would normally be able to draw or stow only one. +1 AC while wielding separate melee weapons in each hand.", extraAC : { mod : 1, text : "I gain a +1 bonus to AC when holding a melee weapon in each hand.", stopeval : function (v) { return v.usingShield && !(/animated/i).test(What("AC Shield Bonus Description")); } } }; FeatsList["dungeon delver"] = { name : "Dungeon Delver", source : [["P", 166]], descriptionFull : "Alert to the hidden traps and secret doors found in many dungeons, you gain the following benefits:\n \u2022 You have advantage on Wisdom (Perception) and Intelligence (Investigation) checks made to detect the presence of secret doors.\n \u2022 You have advantage on saving throws made to avoid or resist traps.\n \u2022 You have resistance to the damage dealt by traps.\n \u2022 Traveling at a fast pace doesn't impose the normal -5 penalty on your passive Wisdom (Perception) score.", description : "I have adv. on Wis (Perception) and Int (Investigation) checks made to detect the presence of secret doors. I have resistance to damage dealt by traps and advantage on saves to avoid or resist traps. Travelling at a fast pace doesn't impose -5 on my passive Perception.", dmgres : ["Traps"], savetxt : { adv_vs : ["traps"] }, vision : [["Adv. on Perception and Investigation for secret doors", 0], ["No -5 for travelling at fast pace", 0]] }; FeatsList["durable"] = { name : "Durable", source : [["P", 166]], descriptionFull : "Hardy and resilient, you gain the following benefits:\n \u2022 Increase your Constitution score by 1, to a maximum of 20.\n \u2022 When you roll a Hit Die to regain hit points, the minimum number of hit points you regain from the roll equals twice your Constitution modifier (minimum of 2).", description : "When I roll a hit die to regain hit points, the minimum number of hit points I regain from the roll equals twice my Constitution modifier (minimum of 2). [+1 Constitution]", scores : [0, 0, 1, 0, 0, 0] }; FeatsList["elemental adept"] = { name : "Elemental Adept", source : [["P", 166]], descriptionFull : "When you gain this feat, choose one of the following damage types: acid, cold, fire, lightning, or thunder.\n Spells you cast ignore resistance to damage of the chosen type. In addition, when you roll damage for a spell you cast that deals damage of that type, you can treat any 1 on a damage die as a 2.\n\nYou can select this feat multiple times. Each time you do so, you must choose a different damage type.", description : "Choose one of the damage types: acid, cold, fire, lightning, or thunder. Spells I cast ignore resistance to damage from this damage type. For any spell I cast that deals this damage type, I can treat any 1 on a damage die as a 2.", prerequisite : "The ability to cast at least one spell", prereqeval : function(v) { return v.isSpellcaster; }, allowDuplicates : true, choices : ["acid", "cold", "fire", "lightning", "thunder"], "acid" : { description : "Spells I cast ignore resistance to acid damage. For any spell I cast that deals acid damage, I can treat any 1 on a damage die as a 2." }, "cold" : { description : "Spells I cast ignore resistance to cold damage. For any spell I cast that deals cold damage, I can treat any 1 on a damage die as a 2." }, "fire" : { description : "Spells I cast ignore resistance to fire damage. For any spell I cast that deals fire damage, I can treat any 1 on a damage die as a 2." }, "lightning" : { description : "Spells I cast ignore resistance to lightning damage. For any spell I cast that deals lightning damage, I can treat any 1 on a damage die as a 2." }, "thunder" : { description : "Spells I cast ignore resistance to thunder damage. For any spell I cast that deals thunder damage, I can treat any 1 on a damage die as a 2." } }; FeatsList["great weapon master"] = { name : "Great Weapon Master", source : [["P", 167]], descriptionFull : "You've learned to put the weight of a weapon to your advantage, letting its momentum empower your strikes. You gain the following benefits:\n \u2022 On your turn, when you score a critical hit with a melee weapon or reduce a creature to 0 hit points with one, you can make one melee weapon attack as a bonus action.\n \u2022 Before you make a melee attack with a heavy weapon that you are proficient with, you can choose to take a -5 penalty to the attack roll. If the attack hits, you add +10 to the attack's damage.", description : "If I score a critical hit or reduce a creature to 0 hit points with a melee weapon in my turn, I can make one melee weapon attack as a bonus action. With a heavy melee weapon, I can choose to take a -5 penalty on the attack roll for +10 on the attack's damage.", action : [["bonus action", " (after crit or take-down)"]], calcChanges : { atkCalc : [ function (fields, v, output) { if (v.isMeleeWeapon && (/heavy/i).test(fields.Description) && (/\bgwm\b|power.{0,3}attack|great.{0,3}weapon.{0,3}master/i).test(v.WeaponText)) { output.extraDmg += 10; output.extraHit -= 5; }; }, "If I include the words 'Power Attack', 'Great Weapon Master', or just 'GWM' in a heavy melee weapon's name or description, the calculation will put a -5 penalty on the attack's To Hit and +10 on its Damage." ] } }; FeatsList["healer"] = { name : "Healer", source : [["P", 167]], descriptionFull : "You are an able physician, allowing you to mend wounds quickly and get your allies back in the fight. You gain the following benefits:\n \u2022 When you use a healer's kit to stabilize a dying creature, that creature also regains 1 hit point.\n \u2022 As an action, you can spend one use of a healer's kit to tend to a creature and restore 1d6+4 hit points to it, plus additional hit points equal to the creature's maximum number of Hit Dice. The creature can't regain hit points from this feat again until it finishes a short or long rest.", description : "Using a healer's kit to stabilize someone gives them 1 hit point as well. As an action, I can spend one use of a healer's kit to restore 1d6 + 4 + (creature's HD) hit points. After that, the creature can't gain hit points from this feat again until it finishes a short rest.", action : [["action", " (1d6+4+HD with healing kit)"]] }; FeatsList["heavily armored"] = { name : "Heavily Armored", source : [["P", 167]], descriptionFull : "You have trained to master the use of heavy armor, gaining the following benefits:\n \u2022 Increase your Strength score by 1, to a maximum of 20.\n \u2022 You gain proficiency with heavy armor.", description : "I gain proficiency with heavy armor. [+1 Strength]", prerequisite : "Proficiency with medium armor", prereqeval : function(v) { return v.mediumArmorProf; }, scores : [1, 0, 0, 0, 0, 0], armorProfs : [false, false, true, false] }; FeatsList["heavy armor master"] = { name : "Heavy Armor Master", source : [["P", 167]], descriptionFull : "You can use your armor to deflect strikes that would kill others. You gain the following benefits:\n \u2022 While you are wearing heavy armor, bludgeoning, piercing, and slashing damage that you take from nonmagical weapons is reduced by 3.", description : "While wearing heavy armor, bludgeoning, piercing, and slashing damage taken from nonmagical weapons is reduced by 3. [+1 Strength]", prerequisite : "Proficiency with heavy armor", prereqeval : function(v) { return v.heavyArmorProf; }, scores : [1, 0, 0, 0, 0, 0] }; FeatsList["inspiring leader"] = { name : "Inspiring Leader", source : [["P", 167]], descriptionFull : "You can spend 10 minutes inspiring your companions, shoring up their resolve to fight. When you do so, choose up to six friendly creatures (which can include yourself) within 30 feet of you who can see or hear you and who can understand you. Each creature can gain temporary hit points equal to your level + your Charisma modifier. A creature can't gain temporary hit points from this feat again until it has finished a short or long rest.", calculate : "event.value = 'I can spend 10 minutes inspiring up to 6 friendly creatures within 30 feet who can see or hear and can understand me. Each gains lvl (' + What('Character Level') + ') + Cha mod (' + What('Cha Mod') + \") temporary hit points. One can't gain temporary hit points from this feat again until after a short rest.\";", prerequisite : "Charisma 13 or higher", prereqeval : function(v) { return What('Cha') >= 13; } }; FeatsList["keen mind"] = { name : "Keen Mind", source : [["P", 167]], descriptionFull : "You have a mind that can track time, direction, and detail with uncanny precision. You gain the following benefits:\n \u2022 Increase your Intelligence score by 1, to a maximum of 20.\n \u2022 You always know which way is north.\n \u2022 You always know the number of hours left before the next sunrise or sunset.\n \u2022 You can accurately recall anything you have seen or heard within the past month.", description : "I always know which way is north and the number of hours left before the next sunrise or sunset. I can accurately recall anything I have seen or heard within the past month. [+1 Intelligence]", scores : [0, 0, 0, 1, 0, 0] }; FeatsList["lightly armored"] = { name : "Lightly Armored", source : [["P", 167]], descriptionFull : "You have trained to master the use of light armor, gaining the following benefits:\n \u2022 Increase your Strength or Dexterity score by 1, to a maximum of 20.\n \u2022 You gain proficiency with light armor.", description : "I gain proficiency with light armor. [+1 Strength or Dexterity]", scorestxt : "+1 Strength or Dexterity", armorProfs : [true, false, false, false] }; FeatsList["linguist"] = { name : "Linguist", source : [["P", 167]], descriptionFull : "You have studied languages and codes, gaining the following benefits:\n \u2022 Increase your Intelligence score by 1, to a maximum of 20.\n \u2022 You learn three languages of your choice.\n \u2022 You can ably create written ciphers. Others can't decipher a code you create unless you teach them, they succeed on an Intelligence check (DC equal to your Intelligence score + your proficiency bonus), or they use magic to decipher it.", calculate : "event.value = \"I can ably create written ciphers that others can't decipher unless I teach them, they succeed on an Intelligence check DC \" + (Number(What('Int')) + Number(How('Proficiency Bonus'))) + ' (Intelligence score + proficiency bonus), or they use magic to decipher it. I learn three languages of my choice. [+1 Intelligence]';", scores : [0, 0, 0, 1, 0, 0], languageProfs : [3] }; FeatsList["lucky"] = { name : "Lucky", source : [["P", 167]], descriptionFull : "You have inexplicable luck that seems to kick in at just the right moment.\n You have 3 luck points. Whenever you make an attack roll, an ability check, or a saving throw, you can spend one luck point to roll an additional d20. You can choose to spend one of your luck points after you roll the die, but before the outcome is determined. You choose which of the d20s is used for the attack roll, ability check, or saving throw.\n You can also spend one luck point when an attack roll is made against you. Roll a d20, and then choose whether the attack uses the attacker's roll or yours. If more than one creature spends a luck point to influence the outcome of a roll, the points cancel each other out; no additional dice are rolled.\n You regain your expended luck points when you finish a long rest.", description : "Use one of three luck points to roll an extra d20 for attacking, being attacked, an ability check, or a saving throw before the outcome is determined. If more than one creature uses luck, no extra dice are rolled. I regain expended luck points when I finish a long rest.", usages : 3, recovery : "long rest", additional : "attack/check/save" }; FeatsList["mage slayer"] = { name : "Mage Slayer", source : [["P", 168]], descriptionFull : "You have practiced techniques useful in melee combat against spellcasters, gaining the following benefits:\n \u2022 When a creature within 5 feet of you casts a spell, you can use your reaction to make a melee weapon attack against that creature.\n \u2022 When you damage a creature that is concentrating on a spell, that creature has disadvantage on the saving throw it makes to maintain its concentration.\n \u2022 You have advantage on saving throws against spells cast by creatures within 5 feet of you.", description : "As a reaction, I can make a melee weapon attack on a creature within 5 ft of me that casts a spell. Concentration checks from damage from me are made with disadvantage. I have advantage on saving throws against spells cast by creatures within 5 feet of me.", savetxt : { adv_vs : ["spells cast within 5 ft"] }, action : [["reaction", "Melee weapon attack (if spell cast in 5 ft)"]] }; FeatsList["magic initiate"] = { name : "Magic Initiate", source : [["P", 168]], descriptionFull : "Choose a class: bard, cleric, druid, sorcerer, warlock, or wizard. You learn two cantrips of your choice from that class's spell list.\n In addition, choose one 1st-level spell to learn from that same list. Using this feat, you can cast the spell once at its lowest level, and you must finish a long rest before you can cast it in this way again.\n Your spellcasting ability for these spells depends on the class you chose: Charisma for bard, sorcerer, or warlock; Wisdom for cleric or druid: or Intelligence for wizard.", description : "Select a spellcasting class using the square button on this feat line. I learn two cantrips and one 1st-level spell of my choice from that class' spell list. I can cast the 1st-level spell at its lowest level once per long rest without using a spell slot.", calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { if (spName.indexOf("magic initiate") === 0 && spellObj.level > 0) { // test if levels in same class var casterClass = spName.replace(/magic initiate[_-]*/i, ''); if (classes.known[casterClass]) { spellObj.firstCol = "oncelr+markedbox"; } } } ] }, choices : ["Bard", "Cleric", "Druid", "Sorcerer", "Warlock", "Wizard"], "bard" : { description : "I learn two cantrips and one 1st-level spell of my choice from the bard's spell list. I can cast the 1st-level spell at its lowest level once per long rest without using a spell slot. If I'm a bard, I can also cast the 1st-level spell by expending a spell slot as normal. Charisma is my spellcasting ability for these spells.", spellcastingBonus : [{ name : "Bard cantrip", spellcastingAbility : 6, 'class' : 'bard', level : [0, 0], times : 2, }, { name : "Bard 1st-level spell", 'class' : 'bard', level : [1, 1], firstCol : "oncelr", }] }, "cleric" : { description : "I learn two cantrips and one 1st-level spell of my choice from the cleric's spell list. I can cast the 1st-level spell at its lowest level once per long rest without using a spell slot. If I'm a cleric, I can also cast the 1st-level spell by expending a spell slot as normal. Wisdom is my spellcasting ability for these spells.", spellcastingBonus : [{ name : "Cleric cantrip", spellcastingAbility : 5, 'class' : 'cleric', level : [0, 0], times : 2, }, { name : "Cleric 1st-level spell", 'class' : 'cleric', level : [1, 1], firstCol : "oncelr", }] }, "druid" : { description : "I learn two cantrips and one 1st-level spell of my choice from the druid's spell list. I can cast the 1st-level spell at its lowest level once per long rest without using a spell slot. If I'm a druid, I can also cast the 1st-level spell by expending a spell slot as normal. Wisdom is my spellcasting ability for these spells.", spellcastingBonus : [{ name : "Druid cantrip", spellcastingAbility : 5, 'class' : 'druid', level : [0, 0], times : 2, }, { name : "Druid 1st-level spell", 'class' : 'druid', level : [1, 1], firstCol : "oncelr", }] }, "sorcerer" : { description : "I learn two cantrips and one 1st-level spell of my choice from the sorcerer's spell list. I can cast the 1st-level spell at its lowest level once per long rest without using a spell slot. If I'm a sorcerer, I can also cast the 1st-level spell by expending a spell slot as normal. Charisma is my spellcasting ability for these spells.", spellcastingBonus : [{ name : "Sorcerer cantrip", spellcastingAbility : 6, 'class' : 'sorcerer', level : [0, 0], times : 2, }, { name : "Sorcerer 1st-level spell", 'class' : 'sorcerer', level : [1, 1], firstCol : "oncelr", }] }, "warlock" : { description : "I learn two cantrips and one 1st-level spell of my choice from the warlock's spell list. I can cast the 1st-level spell at its lowest level once per long rest without using a spell slot. If I'm a warlock, I can also cast the 1st-level spell by expending a spell slot as normal. Charisma is my spellcasting ability for these spells.", spellcastingBonus : [{ name : "Warlock cantrip", spellcastingAbility : 6, 'class' : 'warlock', level : [0, 0], times : 2, }, { name : "Warlock 1st-level spell", 'class' : 'warlock', level : [1, 1], firstCol : "oncelr", }] }, "wizard" : { description : "I learn two cantrips and one 1st-level spell of my choice from the wizard's spell list. I can cast the 1st-level spell at its lowest level once per long rest without using a spell slot. If I'm a wizard, I can also cast the 1st-level spell by expending a spell slot as normal. Intelligence is my spellcasting ability for these spells.", spellcastingBonus : [{ name : "Wizard cantrip", spellcastingAbility : 4, 'class' : 'wizard', level : [0, 0], times : 2, }, { name : "Wizard 1st-level spell", 'class' : 'wizard', level : [1, 1], firstCol : "oncelr", }] } }; FeatsList["martial adept"] = { name : "Martial Adept", source : [["P", 168]], descriptionFull : "You have martial training that allows you to perform special combat maneuvers. You gain the following benefits:\n \u2022 You learn two maneuvers of your choice from among those available to the Battle Master archetype in the fighter class. If a maneuver you use requires your target to make a saving throw to resist the maneuver's effects, the saving throw DC equals 8 + your proficiency bonus + your Strength or Dexterity modifier (your choice).\n \u2022 You gain one superiority die, which is a d6 (this die is added to any superiority dice you have from another source). This die is used to fuel your maneuvers. A superiority die is expended when you use it. You regain your expended superiority dice when you finish a short or long rest.", description : "", calculate : "event.value = 'I learn two maneuvers of my choice from those available to the Battle Master (2nd page \"Choose Feature\" button). The saving throw DC for this is ' + (8 + Number(How('Proficiency Bonus')) + Math.max(Number(What('Str Mod')), Number(What('Dex Mod')))) + ' (8 + proficiency bonus + Str/Dex mod). I gain one superiority die (d6), which I regain when I finish a short rest.';", bonusClassExtrachoices : [{ "class" : "fighter", "subclass" : "fighter-battle master", "feature" : "subclassfeature3.1", "bonus" : 2 }], extraLimitedFeatures : [{ name : "Combat Superiority", usages : 1, additional : 'd6', recovery : "short rest", addToExisting : true }] }; FeatsList["medium armor master"] = { name : "Medium Armor Master", source : [["P", 168]], descriptionFull : "You have practiced moving in medium armor to gain the following benefits:\n \u2022 Wearing medium armor doesn't impose disadvantage on your Dexterity (Stealth) checks.\n \u2022 When you wear medium armor, you can add 3, rather than 2, to your AC if you have a Dexterity of 16 or higher.", description : "Wearing medium armor doesn't impose disadvantage on my Dexterity (Stealth) checks. When I wear medium armor, I can add up to 3, rather than 2, to my AC if my Dexterity is 16 or higher.", prerequisite : "Proficiency with medium armor", prereqeval : function(v) { return v.mediumArmorProf; }, eval : function () { Value('Medium Armor Max Mod', 3); ApplyArmor(What("AC Armor Description")); }, removeeval : function () { tDoc.resetForm(['Medium Armor Max Mod']); ApplyArmor(What("AC Armor Description")); } }; FeatsList["mobile"] = { name : "Mobile", source : [["P", 168]], descriptionFull : "You are exceptionally speedy and agile. You gain the following benefits:\n \u2022 Your speed increases by 10 feet.\n \u2022 When you use the Dash action, difficult terrain doesn't cost you extra movement on that turn.\n \u2022 When you make a melee attack against a creature, you don't provoke opportunity attacks from that creature for the rest of the turn, whether you hit or not.", description : "When I use the Dash action, difficult terrain doesn't cost me extra movement that turn. When I make a melee attack against a creature, I don't provoke opportunity attacks from that creature for the rest of the turn, whether I hit or not. [+10 ft speed]", speed : { allModes : { bonus : "+10" } } }; FeatsList["moderately armored"] = { name : "Moderately Armored", source : [["P", 168]], descriptionFull : "You have trained to master the use of medium armor and shields, gaining the following benefits:\n \u2022 Increase your Strength or Dexterity score by 1, to a maximum of 20.\n \u2022 You gain proficiency with medium armor and shields.", description : "I gain proficiency with medium armor and shields. [+1 Strength or Dexterity]", prerequisite : "Proficiency with light armor", prereqeval : function(v) { return v.lightArmorProf; }, scorestxt : "+1 Strength or Dexterity", armorProfs : [false, true, false, true] }; FeatsList["mounted combatant"] = { name : "Mounted Combatant", source : [["P", 168]], descriptionFull : "You are a dangerous foe to face while mounted. While you are mounted and aren't incapacitated, you gain the following benefits:\n \u2022 You have advantage on melee attack rolls against any unmounted creature that is smaller than your mount.\n \u2022 You can force an attack targeted at your mount to target you instead.\n \u2022 If your mount is subjected to an effect that allows it to make a Dexterity saving throw to take only half damage, it instead takes no damage if it succeeds on the saving throw, and only half damage if it fails.", description : "I have advantage on melee attack rolls against unmounted creatures smaller than my mount. I can force attacks targeting my mount to target me instead. When a Dex save would halve damage, my mount takes no damage on success and half damage on failure." }; FeatsList["observant"] = { name : "Observant", source : [["P", 168]], descriptionFull : "Quick to notice details of your environment, you gain the following benefits:\n \u2022 Increase your Intelligence or Wisdom score by 1, to a maximum of 20.\n \u2022 If you can see a creature's mouth while it is speaking a language you understand, you can interpret what it's saying by reading its lips.\n \u2022 You have a +5 bonus to your passive Wisdom (Perception) and passive Intelligence (Investigation) scores.", description : "If I can see a creature's mouth while it is speaking a language I understand, I can interpret what it's saying by reading its lips. I have a +5 bonus to passive Wisdom (Perception) and passive Intelligence (Investigation) scores. [+1 Intelligence or Wisdom]", scorestxt : "+1 Intelligence or Wisdom", addMod : { type : "skill", field : "passive perception", mod : 5, text : "I have a +5 bonus to passive Wisdom (Perception)." } }; FeatsList["polearm master"] = { name : "Polearm Master", source : [["P", 168]], descriptionFull : "You can keep your enemies at bay with reach weapons. You gain the following benefits:\n \u2022 When you take the Attack action and attack with only a glaive, halberd, quarterstaff, or spear, you can use a bonus action to make a melee attack with the opposite end of the weapon; this attack uses the same ability modifier as the primary attack. The weapon's damage die for this attack is a d4, and the attack deals bludgeoning damage.\n \u2022 While you are wielding a glaive, halberd, pike, quarterstaff, or spear, other creatures provoke an opportunity attack from you when they enter your reach.", description : "As a bonus action when I do the Attack action with a glaive/" + (typePF ? " " : "") + "halberd/quarterstaff/spear, I can make a 1d4 bludgeoning attack with its butt end." + (typePF ? "\n" : " ") + "While wielding a glaive/halberd/" + (typePF ? "" : " ") + "pike/quarterstaff/spear, I get an opportunity attack when a creature enters my reach.", weaponOptions : [{ regExpSearch : /^(?=.*(polearm|(glaive|guandao|bisento|naginata)|(halberd|\bji\b|kamayari)|(quarterstaff|\bstaff\b|\bbo\b)|(spear|qiang|\byaris?\b)))(?=.*butt)(?=.*end).*$/i, name : "Polearm Butt End", source : [["P", 168]], ability : 1, type : "polearm butt end", damage : [1, 4, "bludgeoning"], range : "Melee", description : "As bonus action after Attack action with only a glaive, halberd, spear, or quarterstaff", abilitytodamage : true, selectNow : true }], action : ['bonus action', 'Butt End Attack (after attack with polearm)'], weaponProfs : [false, false, ["polearm butt end"]] }; FeatsList["resilient"] = { name : "Resilient", source : [["P", 168]], descriptionFull : "Choose one ability score. You gain the following benefits:\n \u2022 Increase the chosen ability score by 1, to a maximum of 20.\n \u2022 You gain proficiency in saving throws using the chosen ability.", description : "Select an ability score using the square button on this feat line. I gain proficiency with the saving throw of that ability score and a +1 added to it.", choices : ["Strength", "Dexterity", "Constitution", "Intelligence", "Wisdom", "Charisma"], "strength" : { description : "I gain proficiency with Strength saving throws. [+1 Strength]", scores : [1, 0, 0, 0, 0, 0], saves : ["Str"] }, "dexterity" : { description : "I gain proficiency with Dexterity saving throws. [+1 Dexterity]", scores : [0, 1, 0, 0, 0, 0], saves : ["Dex"] }, "constitution" : { description : "I gain proficiency with Constitution saving throws. [+1 Constitution]", scores : [0, 0, 1, 0, 0, 0], saves : ["Con"] }, "intelligence" : { description : "I gain proficiency with Intelligence saving throws. [+1 Intelligence]", scores : [0, 0, 0, 1, 0, 0], saves : ["Int"] }, "wisdom" : { description : "I gain proficiency with Wisdom saving throws. [+1 Wisdom]", scores : [0, 0, 0, 0, 1, 0], saves : ["Wis"] }, "charisma" : { description : "I gain proficiency with Charisma saving throws. [+1 Charisma]", scores : [0, 0, 0, 0, 0, 1], saves : ["Cha"] } }; FeatsList["ritual caster"] = { name : "Ritual Caster", source : [["P", 169]], descriptionFull : "You have learned a number of spells that you can cast as rituals. These spells are written in a ritual book, which you must have in hand while casting one of them.\n When you choose this feat, you acquire a ritual book holding two 1st-level spells of your choice. Choose one of the following classes: bard, cleric, druid, sorcerer, warlock, or wizard. You must choose your spells from that class's spell list, and the spells you choose must have the ritual tag. The class you choose also determines your spellcasting ability for these spells: Charisma for bard, sorcerer, or warlock; Wisdom for cleric or druid; or Intelligence for wizard.\n If you come across a spell in written form, such as a magical spell scroll or a wizard's spellbook, you might be able to add it to your ritual book. The spell must be on the spell list for the class you chose, the spell's level can be no higher than half your level (rounded up), and it must have the ritual tag. The process of copying the spell into your ritual book takes 2 hours per level of the spell, and costs 50 gp per level. The cost represents material components you expend as you experiment with the spell to master it, as well as the fine inks you need to record it.", description : "Select a spellcasting class using the square button on this feat line. I gain a book with two 1st-level ritual spells from that class' spell list. I can transcribe more ritual spells into this book and cast them as rituals only.", prerequisite : "Intelligence or Wisdom 13 or higher", prereqeval : function(v) { return What('Int') >= 13 || What('Wis') >= 13; }, commoneval : function(chc, spellAbility) { if (!chc) return; CurrentSpells['ritual caster ' + chc] = { name : 'Ritual Book [' + chc.capitalize() + ']', ability : spellAbility, list : {"class" : chc, ritual : true}, known : {spells : 'book'}, refType : "feat" }; SetStringifieds('spells'); CurrentUpdates.types.push('spells'); }, commonremoveeval : function(chc) { if (!chc) return; delete CurrentSpells['ritual caster ' + chc]; SetStringifieds('spells'); CurrentUpdates.types.push('spells'); }, calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { if (!spellObj.ritualCasterFeatChange && spName.indexOf("ritual caster ") !== -1) { spellObj.ritualCasterFeatChange = true; spellObj.firstCol = SpellRitualTag; if (!(/.*(\d+ ?h\b|special|see b).*/i).test(spellObj.time)) { var numMinutes = Number(spellObj.time.replace(/(\d+) ?min.*/, "$1")); if (isNaN(numMinutes)) numMinutes = 0; spellObj.time = (numMinutes + 10) + " min"; } return true; }; }, "By the Ritual Caster feat, I can cast ritual spells from my Ritual Book. Casting a spell as a ritual means adding 10 minutes to its casting time." ] }, choices : ["Bard", "Cleric", "Druid", "Sorcerer", "Warlock", "Wizard"], "bard" : { description : "I can cast spells in my ritual book as rituals only. I gain two 1st-level ritual bard spells.\nI can copy ritual bard spells that I find into my book if they are not more than half my level (2 hours and 50 gp per spell level). Charisma is my spellcasting ability for these.", eval : function(lvl, chc) { FeatsList["ritual caster"].commoneval(chc[1], 6); }, removeeval : function(lvl, chc) { FeatsList["ritual caster"].commonremoveeval(chc[0]); } }, "cleric" : { description : "I can cast spells in my ritual book as rituals only. I gain two 1st-level ritual cleric spells.\nI can copy ritual cleric spells that I find into my book if they are not more than half my level (2 hours and 50 gp per spell level). Wisdom is my spellcasting ability for these.", eval : function(lvl, chc) { FeatsList["ritual caster"].commoneval(chc[1], 5); }, removeeval : function(lvl, chc) { FeatsList["ritual caster"].commonremoveeval(chc[0]); } }, "druid" : { description : "I can cast spells in my ritual book as rituals only. I gain two 1st-level ritual druid spells.\nI can copy ritual druid spells that I find into my book if they are not more than half my level (2 hours and 50 gp per spell level). Wisdom is my spellcasting ability for these.", eval : function(lvl, chc) { FeatsList["ritual caster"].commoneval(chc[1], 5); }, removeeval : function(lvl, chc) { FeatsList["ritual caster"].commonremoveeval(chc[0]); } }, "sorcerer" : { description : "I can cast spells in my ritual book as rituals only. I gain two 1st-level ritual sorcerer spells.\nI can copy ritual sorcerer spells that I find into my book if they are not more than half my level (2 hours and 50 gp per spell level). Charisma is my spellcasting ability for these.", eval : function(lvl, chc) { FeatsList["ritual caster"].commoneval(chc[1], 6); }, removeeval : function(lvl, chc) { FeatsList["ritual caster"].commonremoveeval(chc[0]); } }, "warlock" : { description : "I can cast spells in my ritual book as rituals only. I gain two 1st-level ritual warlock spells.\nI can copy ritual warlock spells that I find into my book if they are not more than half my level (2 hours and 50 gp per spell level). Charisma is my spellcasting ability for these.", eval : function(lvl, chc) { FeatsList["ritual caster"].commoneval(chc[1], 6); }, removeeval : function(lvl, chc) { FeatsList["ritual caster"].commonremoveeval(chc[0]); } }, "wizard" : { description : "I can cast spells in my ritual book as rituals only. I gain two 1st-level ritual wizard spells.\nI can copy ritual wizard spells that I find into my book if they are not more than half my level (2 hours and 50 gp per spell level). Intelligence is my spellcasting ability for these.", eval : function(lvl, chc) { FeatsList["ritual caster"].commoneval(chc[1], 4); }, removeeval : function(lvl, chc) { FeatsList["ritual caster"].commonremoveeval(chc[0]); } } }; FeatsList["savage attacker"] = { name : "Savage Attacker", source : [["P", 169]], descriptionFull : "Once per turn when you roll damage for a melee weapon attack, you can reroll the weapon's damage dice and use either total.", description : "Once per turn, when I roll damage for a melee weapon attack, I can reroll the weapon's damage dice and use either total." }; FeatsList["sentinel"] = { name : "Sentinel", source : [["P", 169]], descriptionFull : "You have mastered techniques to take advantage of every drop in any enemy's guard, gaining the following benefits:\n \u2022 When you hit a creature with an opportunity attack, the creature's speed becomes 0 for the rest of the turn.\n \u2022 Creatures provoke opportunity attacks from you even if they take the Disengage action before leaving your reach.\n \u2022 When a creature within 5 feet of you makes an attack against a target other than you (and that target doesn't have this feat), you can use your reaction to make a melee weapon attack against the attacking creature.", description : "Creatures I hit with opportunity attacks have 0 speed for this turn. The Disengage action doesn't work on me. When a creature within 5 ft makes an attack against a target other than me, I can use my reaction to make a melee weapon attack against the attacker.", action : [["reaction", " (after attack on ally)"]] }; FeatsList["sharpshooter"] = { name : "Sharpshooter", source : [["P", 170]], descriptionFull : "You have mastered ranged weapons and can make shots that others find impossible. You gain the following benefits:\n \u2022 Attacking at long range doesn't impose disadvantage on your ranged weapon attack rolls.\n \u2022 Your ranged weapon attacks ignore half cover and three-quarters cover.\n \u2022 Before you make an attack with a ranged weapon that you are proficient with, you can choose to take a -5 penalty to the attack roll. If the attack hits, you add +10 to the attack's damage.", description : "My ranged weapon attacks don't have disadvantage on long range and ignore half cover and three-quarters cover. With a ranged weapon that I am proficient with, I can choose to take a -5 penalty on the attack roll for +10 on the attack's damage.", calcChanges : { atkAdd : [ function (fields, v) { if (v.isRangedWeapon || v.isThrownWeapon) { fields.Description += (fields.Description ? '; ' : '') + "No disadv. at long range; Ignore \u00BD and \u00BE cover"; }; }, "My ranged weapon attacks suffer no disadvantage for long range and ignore half cover and three-quarters cover. This includes thrown weapons.\n \u2022 If I include the words 'Power Attack', 'Sharpshooter', or 'Sharpshot' in the name or description of a ranged weapon that I'm proficient with, the calculation will put a -5 penalty on the attack's To Hit and a +10 bonus to its Damage. This does not work with thrown weapons." ], atkCalc : [ function (fields, v, output) { if (v.isRangedWeapon && fields.Proficiency && /power.{0,3}attack|sharp.{0,3}shoo?t/i.test(v.WeaponText)) { output.extraDmg += 10; output.extraHit -= 5; }; }, '' ] } }; FeatsList["shield master"] = { name : "Shield Master", source : [["P", 170]], descriptionFull : "You use shields not just for protection but also for offense. You gain the following benefits while you are wielding a shield:\n \u2022 If you take the Attack action on your turn, you can use a bonus action to try to shove a creature within 5 feet of you with your shield.\n \u2022 If you aren't incapacitated, you can add your shield's AC bonus to any Dexterity saving throw you make against a spell or other harmful effect that targets only you.\n \u2022 If you are subjected to an effect that allows you to make a Dexterity saving throw to take only half damage, you can use your reaction to take no damage if you succeed on the saving throw, interposing your shield between yourself and the source of the effect.", description : "As a bonus action, when I use the Attack action, I can shove someone within 5 ft with my shield. I add my shield's AC bonus to Dex saves vs. effects targeting only me. As a reaction, if I succeed on a Dex save for half damage, I can interpose my shield to avoid the damage.", action : [['bonus action', 'Shove with shield (with Attack action)'], ['reaction', 'Interpose shield (if Dex save half dmg)']] }; FeatsList["skilled"] = { name : "Skilled", source : [["P", 170]], descriptionFull : "You gain proficiency in any combination of three skills or tools of your choice.", description : "I gain proficiency with any combination of three skills or tools of my choice.", skillstxt : "Choose three skills or tools" }; FeatsList["skulker"] = { name : "Skulker", source : [["P", 170]], descriptionFull : "You are expert at slinking through shadows. You gain the following benefits:\n \u2022 You can try to hide when you are lightly obscured from the creature from which you are hiding.\n \u2022 When you are hidden from a creature and miss it with a ranged weapon attack, making the attack doesn't reveal your position.\n \u2022 Dim light doesn't impose disadvantage on your Wisdom (Perception) checks relying on sight.", description : "I can try to hide when I am lightly obscured. My position is not revealed when I am hidden from a creature and miss it with a ranged weapon attack. Dim light doesn't impose disadvantage on my Wisdom (Perception) checks relying on sight.", prerequisite : "Dexterity 13 or higher", prereqeval : function(v) { return What('Dex') >= 13; }, vision : [["No disadv. on Perception in dim light", 0]] }; FeatsList["spell sniper"] = { name : "Spell Sniper", source : [["P", 170]], descriptionFull : "You have learned techniques to enhance your attacks with certain kinds of spells, gaining the following benefits:\n \u2022 When you cast a spell that requires you to make an attack roll, the spell's range is doubled.\n \u2022 Your ranged spell attacks ignore half cover and three-quarters cover.\n \u2022 You learn one cantrip that requires an attack roll. Choose the cantrip from the bard, cleric, druid, sorcerer, warlock, or wizard spell list. Your spellcasting ability for this cantrip depends on the spell list you chose from: Charisma for bard, sorcerer, or warlock; Wisdom for cleric or druid; or Intelligence for wizard.", description : "Select a spellcasting class using the square button on this feat line. I learn one cantrip requiring an attack roll from the spell list of the chosen class. Any spell I cast requiring an attack roll has its range doubled and ignores half and 3/4 cover.", prerequisite : "The ability to cast at least one spell", prereqeval : function(v) { return v.isSpellcaster; }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.spellSniper && !v.isDC && v.isSpell && (/\d+ ?(f.{0,2}t|m)/i).test(fields.Range)) { v.spellSniper = true; var rangeNmbr = fields.Range.match(/\d+([.,]\d+)?/g); var notNmbrs = fields.Range.split(RegExp(rangeNmbr.join('|'))); fields.Range = ''; rangeNmbr.forEach(function (dR, idx) { fields.Range += (notNmbrs[idx] ? notNmbrs[idx] : '') + (parseFloat(dR.toString().replace(',', '.') * 2)); }); if (notNmbrs.length > rangeNmbr.length) { fields.Range += notNmbrs[notNmbrs.length - 1]; }; if (!v.rangeM) { v.rangeM = 2; } else { v.rangeM *= 2; } }; }, "My spells and cantrips that require an attack roll have their range doubled.", 700 ], spellAdd : [ function (spellKey, spellObj, spName) { if ( !spellObj.spellSniper && !spellObj.psionic && (/spell attack/i).test(spellObj.description + spellObj.descriptionFull) && (/^(?!.*(S:|rad|touch|self|cone|cube)).*\d+([.,]\d+)?[\- ]?(f.{0,2}t|m).*$/i).test(spellObj.range) ) { spellObj.spellSniper = true; var rangeNmbr = spellObj.range.match(/\d+([.,]\d+)?/g); var notNmbrs = spellObj.range.split(RegExp(rangeNmbr.join('|'))); spellObj.range = ''; rangeNmbr.forEach(function (dR, idx) { spellObj.range += (notNmbrs[idx] ? notNmbrs[idx] : '') + (parseFloat(dR.toString().replace(',', '.') * 2)); }); if (notNmbrs.length > rangeNmbr.length) { spellObj.range += notNmbrs[notNmbrs.length - 1]; }; if (!spellObj.rangeM) { spellObj.rangeM = 2; } else { spellObj.rangeM *= 2; } return true; }; }, "My spells and cantrips that require an attack roll have their range doubled.", 700 ] }, choices : ["Bard", "Cleric", "Druid", "Sorcerer", "Warlock", "Wizard"], "bard" : { description : "Any spell that I cast that requires an attack roll has its range doubled. My ranged spell attacks ignore half cover and three-quarters cover. I learn one bard cantrip that requires an attack roll. Charisma is my spellcasting ability for this.", spellcastingBonus : [{ name : "Spell Attack Cantrip", spellcastingAbility : 6, 'class' : 'bard', level : [0, 0], attackOnly : true, }] }, "cleric" : { description : "Any spell that I cast that requires an attack roll has its range doubled. My ranged spell attacks ignore half cover and three-quarters cover. I learn one cleric cantrip that requires an attack roll. Wisdom is my spellcasting ability for this.", spellcastingBonus : [{ name : "Spell Attack Cantrip", spellcastingAbility : 5, 'class' : 'cleric', level : [0, 0], attackOnly : true, }] }, "druid" : { description : "Any spell that I cast that requires an attack roll has its range doubled. My ranged spell attacks ignore half cover and three-quarters cover. I learn one druid cantrip that requires an attack roll. Wisdom is my spellcasting ability for this.", spellcastingBonus : [{ name : "Spell Attack Cantrip", spellcastingAbility : 5, 'class' : 'druid', level : [0, 0], attackOnly : true, }] }, "sorcerer" : { description : "Any spell that I cast that requires an attack roll has its range doubled. My ranged spell attacks ignore half cover and three-quarters cover. I learn one sorcerer cantrip that requires an attack roll. Charisma is my spellcasting ability for this.", spellcastingBonus : [{ name : "Spell Attack Cantrip", spellcastingAbility : 6, 'class' : 'sorcerer', level : [0, 0], attackOnly : true, }] }, "warlock" : { description : "Any spell that I cast that requires an attack roll has its range doubled. My ranged spell attacks ignore half cover and three-quarters cover. I learn one warlock cantrip that requires an attack roll. Charisma is my spellcasting ability for this.", spellcastingBonus : [{ name : "Spell Attack Cantrip", spellcastingAbility : 6, 'class' : 'warlock', level : [0, 0], attackOnly : true, }] }, "wizard" : { description : "Any spell that I cast that requires an attack roll has its range doubled. My ranged spell attacks ignore half cover and three-quarters cover. I learn one wizard cantrip that requires an attack roll. Intelligence is my spellcasting ability for this.", spellcastingBonus : [{ name : "Spell Attack Cantrip", spellcastingAbility : 4, 'class' : 'wizard', level : [0, 0], attackOnly : true, }] } }; FeatsList["tavern brawler"] = { name : "Tavern Brawler", source : [["P", 170]], descriptionFull : "Accustomed to rough-and-tumble fighting using whatever weapons happen to be at hand, you gain the following benefits:\n \u2022 Increase your Strength or Constitution score by 1, to a maximum of 20.\n \u2022 You are proficient with improvised weapons.\n \u2022 Your unarmed strike uses a d4 for damage.\n \u2022 When you hit a creature with an unarmed strike or an improvised weapon on your turn, you can use a bonus action to attempt to grapple the target.", description : "I am proficient with improvised weapons. My unarmed strike does 1d4 damage. When I hit a creature with an unarmed strike or improvised weapon on my turn, I can attempt to grapple the target as a bonus action. [+1 Strength or Constitution]", scorestxt : "+1 Strength or Constitution", action : ['bonus action', 'Grapple (on hit with unarmed/improv.)'], weaponProfs : [false, false, ["Improvised weapons"]], calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == "unarmed strike" || v.baseWeaponName == "improvised weapon" || /improvised/i.test(v.WeaponName + v.baseWeaponName) || /improvised weapon/i.test(v.theWea.type)) { fields.Proficiency = true; if (v.isMeleeWeapon) fields.Description += (fields.Description ? '; ' : '') + 'After hit, can attempt to grapple as a bonus action'; }; if (v.baseWeaponName == "unarmed strike" && fields.Damage_Die == 1) { fields.Damage_Die = '1d4'; }; }, "My unarmed strikes deal 1d4 damage instead of 1.\n \u2022 After hitting a creature with an unarmed strike or improvised weapon in melee, I can attempt to start a grapple as a bonus action." ] } }; FeatsList["tough"] = { name : "Tough", source : [["P", 170]], descriptionFull : "Your hit point maximum increases by an amount equal to twice your level when you gain this feat. Whenever you gain a level thereafter, your hit point maximum increases by an additional 2 hit points.", description : "My hit point maximum increases by an amount equal to twice my character level.", calcChanges : { hp : function (totalHD) { return [totalHD * 2, '\n + ' + totalHD + ' \xD7 2 from the Tough feat (' + (totalHD * 2) + ')', true]; } } }; FeatsList["war caster"] = { name : "War Caster", source : [["P", 170]], prerequisite : "The ability to cast at least one spell", prereqeval : function(v) { return v.isSpellcaster; }, descriptionFull : "You have practiced casting spells in the midst of combat, learning techniques that grant you the following benefits:\n \u2022 You have advantage on Constitution saving throws that you make to maintain your concentration on a spell when you take damage.\n \u2022 You can perform the somatic components of spells even when you have weapons or a shield in one or both hands.\n \u2022 When a hostile creature's movement provokes an opportunity attack from you, you can use your reaction to cast a spell at the creature, rather than making an opportunity attack. The spell must have a casting time of 1 action and must target only that creature.", description : "Advantage on Con saves to maintain concentration on spells when damaged. Perform somatic components even when holding weapons or shield in one or both hands. Cast spell of 1 action casting time that targets only one creature instead of an opportunity attack.", action : [["reaction", " - Opportunity Spell"]], savetxt : { text : "Adv. on Con (Concentration) saves when damaged" } }; FeatsList["weapon master"] = { name : "Weapon Master", source : [["P", 170]], descriptionFull : "You have practiced extensively with a variety of weapons, gaining the following benefits:\n \u2022 Increase your Strength or Dexterity score by 1, to a maximum of 20.\n \u2022 You gain proficiency with four simple or martial weapons of your choice.", description : "I gain proficiency with four simple or martial weapons of my choice.\n[+1 Strength or Dexterity]", scorestxt : "+1 Strength or Dexterity" }; // Add attack entry that is not in the SRD WeaponsList["thorn whip"] = { regExpSearch : /^(?=.*thorn)(?=.*whip).*$/i, name : "Thorn Whip", source : [["P", 282]], list : "spell", ability : 5, type : "Cantrip", damage : ["C", 6, "piercing"], range : "Melee, 30 ft", description : "Melee spell attack, pull target up to 10 ft closer", abilitytodamage : false }; // Add spells that are not in the SRD SpellsList["arcane gate"] = { name : "Arcane Gate", classes : ["sorcerer", "warlock", "wizard"], source : [["P", 214]], level : 6, school : "Conj", time : "1 a", range : "500 ft", components : "V,S", duration : "Conc, 10 min", description : "Two portals, up to 500 ft apart, teleport any to other side; portals are filled with opaque mist", descriptionFull : "You create linked teleportation portals that remain open for the duration. Choose two points on the ground that you can see, one point within 10 feet of you and one point within 500 feet of you. A circular portal, 10 feet in diameter, opens over each point. If the portal would open in the space occupied by a creature, the spell fails, and the casting is lost." + "\n " + "The portals are two-dimensional glowing rings filled with mist, hovering inches from the ground and perpendicular to it at the points you choose. A ring is visible only from one side (your choice), which is the side that functions as a portal." + "\n " + "Any creature or object entering the portal exits from the other portal as if the two were adjacent to each other, passing through a portal from the non-portal side has no effect. The mist that fills each portal is opaque and blocks vision through it. On your turn, you can rotate the rings as a bonus action so that the active side faces in a different direction." }; SpellsList["armor of agathys"] = { name : "Armor of Agathys", classes : ["warlock"], source : [["P", 215]], level : 1, school : "Abjur", time : "1 a", range : "Self", components : "V,S,M", compMaterial : "A cup of water", duration : "1 h", description : "5+5/SL temp HP; as long as temp HP last any crea that hits in melee takes 5+5/SL Cold dmg", descriptionFull : "A protective magical force surrounds you, manifesting as a spectral frost that covers you and your gear. You gain 5 temporary hit points for the duration. If a creature hits you with a melee attack while you have these hit points, the creature takes 5 cold damage." + AtHigherLevels + "When you cast this spell using a spell slot of 2nd level or higher, both the temporary hit points and the cold damage increase by 5 for each slot level above 1st." }; SpellsList["arms of hadar"] = { name : "Arms of Hadar", classes : ["warlock"], source : [["P", 215]], level : 1, school : "Conj", time : "1 a", range : "S:10-ft rad", components : "V,S", duration : "Instantaneous", save : "Str", description : "2d6+1d6/SL Necrotic dmg; save halves; on failed save no reactions until next turn", descriptionFull : "You invoke the power of Hadar, the Dark Hunger. Tendrils of dark energy erupt from you and batter all creatures within 10 feet of you. Each creature in that area must make a Strength saving throw. On a failed save, a target takes 2d6 necrotic damage and can't take reactions until its next turn. On a successful save, the creature takes half damage, but suffers no other effect." + AtHigherLevels + "When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d6 for each slot level above 1st." }; SpellsList["aura of life"] = { name : "Aura of Life", classes : ["paladin"], source : [["P", 216]], level : 4, school : "Abjur", time : "1 a", range : "S:30-ft rad", components : "V", duration : "Conc, 10 min", description : "Me + any crea while in area Necrotic dmg resist.; at turn start, 0 HP living in area heal 1 HP", descriptionFull : "Life-preserving energy radiates from you in an aura with a 30-foot radius. Until the spell ends, the aura moves with you, centered on you. Each non-hostile creature in the aura (including you) has resistance to necrotic damage, and its hit point maximum can't be reduced. In addition, a non-hostile, living creature regains 1 hit point when it starts its turn in the aura with 0 hit points." }; SpellsList["aura of purity"] = { name : "Aura of Purity", classes : ["paladin"], source : [["P", 216]], level : 4, school : "Abjur", time : "1 a", range : "S:30-ft rad", components : "V", duration : "Conc, 10 min", description : "Me + any crea while in area Poison dmg resist., immune to disease, adv. on saves vs. conditions", descriptionFull : "Purifying energy radiates from you in an aura with a 30-foot radius. Until the spell ends, the aura moves with you, centered on you. Each non-hostile creature in the aura (including you) can't become diseased, has resistance to poison damage, and has advantage on saving throws against effects that cause any of the following conditions - blinded, charmed, deafened, frightened, paralyzed, poisoned, and stunned." }; SpellsList["aura of vitality"] = { name : "Aura of Vitality", classes : ["paladin"], source : [["P", 216]], level : 3, school : "Evoc", time : "1 a", range : "S:30-ft rad", components : "V", duration : "Conc, 1 min", description : "As a bonus action for the duration, I can heal 2d6 HP to 1 creature in range (can be me)", descriptionFull : "Healing energy radiates from you in an aura with a 30-foot radius. Until the spell ends, the aura moves with you, centered on you. You can use a bonus action to cause one creature in the aura (including you) to regain 2d6 hit points." }; SpellsList["banishing smite"] = { name : "Banishing Smite", classes : ["paladin"], source : [["P", 216]], level : 5, school : "Abjur", time : "1 bns", range : "Self", components : "V", duration : "Conc, 1 min", description : "Next weapon hit +5d10 Force dmg; if this brings target HP<50, I banish it until spell ends", descriptionFull : "The next time you hit a creature with a weapon attack before this spell ends, your weapon crackles with force, and the attack deals an extra 5d10 force damage to the target. Additionally, if this attack reduces the target to 50 hit points of fewer, you banish it. If the target is native to a different plane of existence than the one you're on, the target disappears, returning to its home plane. If the target is native to the plane you're on, the creature vanishes into a harmless demiplane. While there, the target is incapacitated. It remains there until the spell ends, at which point the tart reappears in the space it left or in the nearest unoccupied space if that space is occupied." }; SpellsList["beast sense"] = { name : "Beast Sense", classes : ["druid", "ranger"], source : [["P", 217]], ritual : true, level : 2, school : "Div", time : "1 a", range : "Touch", components : "S", duration : "Conc, 1 h", description : "Use 1 willing beast's senses; I'm blinded and deafened while doing so", descriptionFull : "You touch a willing beast. For the duration of the spell, you can use your action to see through the beast's eyes and hear what it hears, and continue to do so until you use your action to return to your normal senses. While perceiving through the beast's senses, you gain the benefits of any special senses possessed by that creature, though you are blinded and deafened to your own surroundings." }; SpellsList["blade ward"] = { name : "Blade Ward", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["P", 218]], level : 0, school : "Abjur", time : "1 a", range : "Self", components : "V,S", duration : "1 rnd", description : "Until the end of my next turn, Bludgeoning, Piercing, and Slashing dmg resist. vs. weapons", descriptionFull : "You extend your hand and trace a sigil of warding in the air. Until the end of your next turn, you have resistance against bludgeoning, piercing, and slashing damage dealt by weapon attacks." }; SpellsList["blinding smite"] = { name : "Blinding Smite", classes : ["paladin"], source : [["P", 219]], level : 3, school : "Evoc", time : "1 bns", range : "Self", components : "V", duration : "Conc, 1 min", save : "Con", description : "Next melee weapon hit +3d8 Radiant dmg; save or blinded; extra save at end of every turn", descriptionFull : "The next time you hit a creature with a melee weapon attack during this spell's duration, you weapon flares with a bright light, and the attack deals an extra 3d8 radiant damage to the target. Additionally, the target must succeed on a Constitution saving throw or be blinded until the spell ends." + "\n " + "A creature blinded by this spell makes another Constitution saving throw at the end of each of its turns. On a successful save, it is no longer blinded." }; SpellsList["chromatic orb"] = { name : "Chromatic Orb", classes : ["sorcerer", "wizard"], source : [["P", 221]], level : 1, school : "Evoc", time : "1 a", range : "90 ft", components : "V,S,M\u0192", compMaterial : "A diamond worth at least 50 gp", duration : "Instantaneous", description : "Spell attack for 3d8+1d8/SL Acid, Cold, Fire, Lightning, Poison or Thunder dmg (50gp)", descriptionFull : "You hurl a 4-inch-diameter sphere of energy at a creature that you can see within range. You choose acid, cold, fire, lightning, poison, or thunder for the type of orb you create, and then make a ranged spell attack against the target. If the attack hits, the creature takes 3d8 damage of the type you chose." + AtHigherLevels + "When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d8 for each slot level above 1st.", dynamicDamageBonus : { multipleDmgTypes : { dmgTypes : ["acid", "cold", "fire", "lightning", "poison", "thunder"], inDescriptionAs :"Acid, Cold, Fire, Lightning, Poison or Thunder" } } }; SpellsList["circle of power"] = { name : "Circle of Power", classes : ["paladin"], source : [["P", 221]], level : 5, school : "Abjur", time : "1 a", range : "S:30-ft rad", components : "V", duration : "Conc, 10 min", description : "Any crea while in area adv. on saves vs. magical effects; if save would half dmg it takes no dmg", descriptionFull : "Divine energy radiates from you, distorting and diffusing magical energy within 30 feet of you. Until the spell ends, the sphere moves with you, centered on you. For the duration, each friendly creature in the area (including you) has advantage on saving throws against spells and other magical effects. Additionally, when an affected creature succeeds on a saving throw made against a spell or magical effect that allows it to make a saving throw to take only half damage, it instead takes no damage if it succeeds on the saving throw." }; SpellsList["cloud of daggers"] = { name : "Cloud of Daggers", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["P", 222]], level : 2, school : "Conj", time : "1 a", range : "60 ft", components : "V,S,M", compMaterial : "A sliver of glass", duration : "Conc, 1 min", description : "5-ft cube 4d4+2d4/SL Slashing dmg to all that enter or start turn in area", descriptionFull : "You fill the air with spinning daggers in a cube 5 feet on each side, centered on a point you choose within range. A creature takes 4d4 slashing damage when it enters the spell's area for the first time on a turn or starts its turn there." + AtHigherLevels + "when you cast this spell using a spell slot of 3rd level or higher, the damage increases by 2d4 for each slot level above 2nd." }; SpellsList["compelled duel"] = { name : "Compelled Duel", classes : ["paladin"], source : [["P", 224]], level : 1, school : "Ench", time : "1 bns", range : "30 ft", components : "V", duration : "Conc, 1 min", save : "Wis", description : "1 crea save or dis. on attacks vs. not-me and save if moving more than 30 ft away", descriptionFull : "You attempt to compel a creature into a duel. One creature that you can see within range must make a Wisdom saving throw. On a failed save, the creature is drawn to you, compelled by your divine demand. For the duration, it has disadvantage on attack rolls against creatures other than you, and must make a Wisdom saving throw each time it attempts to move to a space that is more than 30 feet away from you, if it succeeds on this saving throw, this spell doesn't restrict the target's movement for that turn." + "\n " + "The spell ends if you attack any other creature, if you cast a spell that targets a hostile creature other than the target, if a creature friendly to you damages the target or casts a harmful spell on it, or if you end your turn more than 30 feet away from the target." }; SpellsList["conjure barrage"] = { name : "Conjure Barrage", classes : ["ranger"], source : [["P", 225]], level : 3, school : "Conj", time : "1 a", range : "S:60" + (typePF ? "-" : "") + "ft cone", components : "V,S,M", compMaterial : "One piece of ammunition or a thrown weapon", duration : "Instantaneous", save : "Dex", description : "Throw weapon or ammo; copies rain down for 3d8 dmg; dmg type as weapon; save halves", descriptionFull : "You throw a nonmagical weapon or fire a piece of nonmagical ammunition into the air to create a cone of identical weapons that shoot forward and then disappear. Each creature in a 60-foot cone must succeed on a Dexterity saving throw. A creature takes 3d8 damage on a failed save, or half as much damage on a successful one. The damage type is the same as that of the weapon or ammunition used as a component." }; SpellsList["conjure volley"] = { name : "Conjure Volley", classes : ["ranger"], source : [["P", 226]], level : 5, school : "Conj", time : "1 a", range : "150 ft", components : "V,S,M", compMaterial : "One piece of ammunition or one thrown weapon", duration : "Instantaneous", save : "Dex", description : "Turn ammo/thrown wea into volley; 40-ft rad 20-ft high 8d8 dmg; dmg type as weapon; save halves", descriptionFull : "You fire a piece of nonmagical ammunition from a ranged weapon or throw a nonmagical weapon into the air and choose a point within range. Hundreds of duplicates of the ammunition or weapon fall in a volley from above and then disappear. Each creature in a 40-foot-radius. 20-foot-high cylinder centered on that point must make a Dexterity saving throw. A creature takes 8d8 damage on a failed save, or half as much damage on a successful one. The damage type is the same as that of the ammunition or weapon." }; SpellsList["cordon of arrows"] = { name : "Cordon of Arrows", classes : ["ranger"], source : [["P", 228]], level : 2, school : "Trans", time : "1 a", range : "5 ft", components : "V,S,M", compMaterial : "Four or more arrows or bolts", duration : "8 h", save : "Dex", description : "4+2/SL arrows/bolts attack first crea in 30 ft one at a time for 1d6 Piercing dmg; save halves", descriptionFull : "You plant four pieces of nonmagical ammunition - arrows or crossbow bolts - in the ground within range and lay magic upon them to protect an area. Until the spell ends, whenever a creature other than you comes within 30 feet of the ammunition for the first time on a turn or ends its turn there, one piece of ammunition flies up to strike it. The creature must succeed on a Dexterity saving throw or take 1d6 piercing damage. The piece of ammunition is then destroyed. The spell ends when no ammunition remains." + "\n " + "When you cast this spell, you can designate any creatures you choose, and the spell ignores them." + AtHigherLevels + "When you cast this spell using a spell slot of 3rd level or higher, the amount of ammunition that can be affected increases by two for each slot level above 2nd." }; SpellsList["crown of madness"] = { name : "Crown of Madness", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["P", 229]], level : 2, school : "Ench", time : "1 a", range : "120 ft", components : "V,S", duration : "Conc, 1 min", save : "Wis", description : "1 humanoid save or charmed and must melee attack against crea chosen by me; extra save/rnd", descriptionFull : "One humanoid of your choice that you can see within range must succeed on a Wisdom saving throw or become charmed by you for the duration. While the target is charmed in this way, a twisted crown of jagged iron appears on its head, and a madness glows in its eyes." + "\n " + "The charmed target must use its action before moving on each of its turns to make a melee attack against a creature other than itself that you mentally choose. The target can act normally on its turn if you choose no creature or if none are within its reach." + "\n " + "On your subsequent turns, you must use your action to maintain control over the target, or the spell ends. Also, the target can make a Wisdom saving throw at the end of each of its turns. On a success, the spell ends." }; SpellsList["crusader's mantle"] = { name : "Crusader's Mantle", classes : ["paladin"], source : [["P", 230]], level : 3, school : "Evoc", time : "1 a", range : "S:30-ft rad", components : "V", duration : "Conc, 1 min", description : "Me and allies in range deal extra 1d4 Radiant dmg with weapon attacks", descriptionFull : "Holy power radiates from you in an aura with a 30-foot radius, awakening boldness in friendly creatures. Until the spell ends, the aura moves with you, centered on you. While in the aura, each non-hostile creature in the aura (including you) deals an extra 1d4 radiant damage when it hits with a weapon attack." }; SpellsList["destructive wave"] = { name : "Destructive Wave", classes : ["paladin"], source : [["P", 231]], level : 5, school : "Evoc", time : "1 a", range : "S:30-ft rad", components : "V", duration : "Instantaneous", save : "Con", description : "Any crea 5d6 Thunder dmg \u0026 5d6 Radiant or Necrotic dmg \u0026 knocked prone; save halves, not prone", descriptionShorter : "Any crea 5d6 Thunder dmg \u0026 5d6 Radiant or Necrotic dmg \u0026 prone; save half, not prone", descriptionFull : "You strike the ground, creating a burst of divine energy that ripples outward from you. Each creature you choose within 30 feet of you must succeed on a Constitution saving throw or take 5d6 thunder damage, as well as 5d6 radiant or necrotic damage (your choice), and be knocked prone. A creature that succeeds on its saving throw takes half as much damage and isn't knocked prone.", dynamicDamageBonus : { allDmgTypesSingleMoment : true, multipleDmgTypes : { dmgTypes : ["radiant", "necrotic"], inDescriptionAs : "Radiant or Necrotic" } } }; SpellsList["dissonant whispers"] = { name : "Dissonant Whispers", classes : ["bard"], source : [["P", 234]], level : 1, school : "Ench", time : "1 a", range : "60 ft", components : "V", duration : "Instantaneous", save : "Wis", description : "1 crea 3d6+1d6/SL Psychic dmg and flee; save halves and no fleeing; deaf crea are immune", descriptionFull : "You whisper a discordant melody that only one creature of your choice within range can hear, wracking it with terrible pain. The target must make a Wisdom saving throw. On a failed save, it takes 3d6 psychic damage and must immediately use its reaction, if available, to move as far as its speed allows away from you. The creature doesn't move into obviously dangerous ground, such as a fire or a pit. On a successful save, the target takes half as much damage and doesn't have to move away. A deafened creature automatically succeeds on the save." + AtHigherLevels + "When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d6 for each slot level above 1st." }; SpellsList["elemental weapon"] = { name : "Elemental Weapon", classes : ["artificer", "paladin"], source : [["P", 237]], level : 3, school : "Trans", time : "1 a", range : "Touch", components : "V,S", duration : "Conc, 1 h", description : "+1 magical weapon; +1d4 Acid, Cold, Fire, Lightning, or Thunder dmg; SL5: +2/+2d4, SL7: +3/+3d4", descriptionShorter : "+1 wea; +1d4 Acid/Cold/Fire/Lightning/Thunder dmg; SL5: +2/+2d4, SL7: +3/+3d4", descriptionFull : "A nonmagical weapon you touch becomes a magic weapon. Choose one of the following damage types - acid, cold, fire, lightning, or thunder. For the duration, the weapon has a +1 bonus to attack rolls and deals an extra 1d4 damage of the chosen type when it hits." + AtHigherLevels + "When you cast this spell using a spell slot of 5th or 6th level, the bonus to attack rolls increases to +2 and the extra damage increases to 2d4. When you use a spell slot of 7th level or higher, the bonus increases to +3 and the extra damage increases to 3d4.", dynamicDamageBonus : { multipleDmgTypes : { dmgTypes : ["acid", "cold", "fire", "lightning", "thunder"], inDescriptionAs : "Acid, Cold, Fire, Lightning, or Thunder|Acid/Cold/Fire/Lightning/Thunder" } } }; SpellsList["ensnaring strike"] = { name : "Ensnaring Strike", classes : ["ranger"], source : [["P", 237]], level : 1, school : "Conj", time : "1 bns", range : "Self", components : "V", duration : "Conc, 1 min", save : "Str", description : "Next crea hit save (Large adv.) or restrained, 1d6+1d6/SL Piercing dmg/rnd; Str check to escape", descriptionShorter : "Next crea hit save (Large adv.) or restrained, 1d6+1d6/SL Piercing dmg/rnd; Str chk escape", descriptionFull : "The next time you hit a creature with a weapon attack before this spell ends, a writhing mass of thorny vines appears at the point of impact, and the target must succeed on a Strength saving throw or be restrained by the magical vines until the spell ends. A Large or larger creature has advantage on this saving throw. If the target succeeds on the save, the vines shrivel away." + "\n " + "While restrained by this spell, the target takes 1d6 piercing damage at the start of each of its turns. A creature restrained by the vines or one that can touch the creature can use its action to make a Strength check against your spell save DC. On a success, the target is freed." + AtHigherLevels + "If you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d6 for each slot level above 1st." }; SpellsList["feign death"] = { name : "Feign Death", classes : ["bard", "cleric", "druid", "wizard"], source : [["P", 240]], ritual : true, level : 3, school : "Necro", time : "1 a", range : "Touch", components : "V,S,M", compMaterial : "A pinch of graveyard dirt", duration : "1 h (D)", description : "Willing creature appears dead; it is blinded, incapacitated, has dmg resist. all but Psychic, and speed 0", descriptionFull : "You touch a willing creature and put it into a cataleptic state that is indistinguishable from death." + "\n " + "For the spell's duration, or until you use an action to touch the target and dismiss the spell, the target appears dead to all outward inspection and to spells used to determine the target's status. The target is blinded and incapacitated, and its speed drops to 0. The target has resistance to all damage except psychic damage. If the target is diseased or poisoned when you cast the spell, or becomes diseased or poisoned while under the spell's effect, the disease and poison have no effect until the spell ends." }; SpellsList["friends"] = { name : "Friends", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["P", 244]], level : 0, school : "Ench", time : "1 a", range : "Self", components : "S,M", compMaterial : "A small amount of makeup applied to the face as this spell is cast", duration : "Conc, 1 min", description : "Adv. on Cha checks vs. 1 crea currently not hostile; when spell ends, crea knows and becomes hostile", descriptionFull : "For the duration, you have advantage on all Charisma checks directed at one creature of your choice that isn't hostile toward you. When the spell ends, the creature realizes that you used magic to influence its mood and becomes hostile toward you. A creature prone to violence might attack you. Another creature might seek retribution in other ways (at the DM's discretion), depending on the nature of your interaction with it." }; SpellsList["grasping vine"] = { name : "Grasping Vine", classes : ["druid", "ranger"], source : [["P", 246]], level : 4, school : "Conj", time : "1 bns", range : "30 ft", components : "V,S", duration : "Conc, 1 min", save : "Dex", description : "Conjure vine with 30 ft reach; bns a to direct to 1 crea save or pulled 20 ft to vine", descriptionFull : "You conjure a vine that sprouts from the ground in an unoccupied space of your choice that you can see within range. When you cast this spell, you can direct the vine to lash out at a creature within 30 feet of it that you can see. That creature must succeed on a Dexterity saving throw or be pulled 20 feet directly toward the vine." + "\n " + "Until the spell ends, you can direct the vine to lash out at the same creature or another one as a bonus action on each of your turns." }; SpellsList["hail of thorns"] = { name : "Hail of Thorns", classes : ["ranger"], source : [["P", 249]], level : 1, school : "Conj", time : "1 bns", range : "Self", components : "V", duration : "Conc, 1 min", save : "Dex", description : "Next ranged weapon hit, all within 5 ft of target 1d10+1d10/SL Piercing dmg; save halves", descriptionFull : "The next time you hit a creature with a ranged weapon attack before the spell ends, this spell creates a rain of thorns that sprouts from your ranged weapon or ammunition. In addition to the normal effect of the attack, the target of the attack and each creature within 5 feet of it must make a Dexterity saving throw. A creature takes 1d10 piercing damage on a failed save, or half as much damage on a successful one." + AtHigherLevels + "If you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d10 for each slot level above 1st (to a maximum of 6d10).", dynamicDamageBonus : { multipleDmgMoments : false } }; SpellsList["hex"] = { name : "Hex", classes : ["warlock"], source : [["P", 251]], level : 1, school : "Ench", time : "1 bns", range : "90 ft", components : "V,S,M", compMaterial : "The petrified eye of a newt", duration : "Conc, 1 h", description : "1 crea +1d6 Necrotic dmg from my atks; dis. on chosen ability checks; SL3: conc, 8h; SL5: conc, 24h", descriptionShorter : "1 crea +1d6 Necrotic dmg from my atks; dis. chosen abi chks; SL3: conc, 8h; SL5: conc, 24h", descriptionFull : "You place a curse on a creature that you can see within range. Until the spell ends, you deal an extra 1d6 necrotic damage to the target whenever you hit it with an attack. Also, choose one ability when you cast the spell. The target has disadvantage on ability checks made with the chosen ability." + "\n " + "If the target drops to 0 hit points before this spell ends, you can use a bonus action on a subsequent turn of yours to curse a new creature." + "\n " + "A remove curse cast on the target ends this spell early." + AtHigherLevels + "When you cast this spell using a spell slot of 3rd or 4th level, you can maintain your concentration on the spell for up to 8 hours. When you use a spell slot of 5th level or higher, you can maintain your concentration on the spell for up to 24 hours." }; SpellsList["hunger of hadar"] = { name : "Hunger of Hadar", classes : ["warlock"], source : [["P", 251]], level : 3, school : "Conj", time : "1 a", range : "150 ft", components : "V,S,M", compMaterial : "A pickled octopus tentacle", duration : "Conc, 1 min", save : "Dex", description : "20-ft rad all: blind while in, start turn in 2d6 Cold dmg, end turn in save or 2d6 Acid dmg", descriptionFull : "You open a gateway to the dark between the stars, a region infested with unknown horrors. A 20-foot-radius sphere of blackness and bitter cold appears, centered on a point with range and lasting for the duration. This void is filled with a cacophony of soft whispers and slurping noises that can be heard up to 30 feet away. No light, magical or otherwise, can illuminate the area, and creatures fully within the area are blinded." + "\n " + "The void creates a warp in the fabric of space, and the area is difficult terrain. Any creature that starts its turn in the area takes 2d6 cold damage. Any creature that ends its turn in the area must succeed on a Dexterity saving throw or take 2d6 acid damage as milky, otherworldly tentacles rub against it." }; SpellsList["lightning arrow"] = { name : "Lightning Arrow", classes : ["ranger"], source : [["P", 255]], level : 3, school : "Trans", time : "1 bns", range : "Self", components : "V,S", duration : "Conc, 1 min", save : "Dex", description : "Next rngd wea atk 4d8+1d8/SL Lightn. dmg, miss half; 10 ft all 2d8+1d8/SL Lightn. dmg, save half", descriptionShorter : "Next atk 4d8+1d8/SL Lightn. dmg, miss h" + (typePF ? "a" : "") + "lf; 10 ft all 2d8+1d8/SL Lightn. dmg, save half", descriptionFull : "The next time you make a ranged weapon attack during the spell's duration, the weapon's ammunition, or the weapon itself if it's a thrown weapon, transforms into a bolt of lightning. Make the attack roll as normal. The target takes 4d8 lightning damage on a hit, or half as much damage on a miss, instead of the weapon's normal damage." + "\n " + "Whether you hit or miss, each creature within 10 feet of the target must make a Dexterity saving throw. Each of these creatures takes 2d8 lightning damage on a failed save, or half as much damage on a successful one." + "\n " + "The piece of ammunition or weapon then returns to its normal form." + AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, the damage for both effects of the spell increases by 1d8 for each slot level above 3rd.", dynamicDamageBonus : { multipleDmgMoments : false, skipDmgGroupIfNotMultiple : /(atk .*?lightn\. dmg.*?)/i } }; SpellsList["phantasmal force"] = { name : "Phantasmal Force", classes : ["bard", "sorcerer", "wizard"], source : [["P", 264]], level : 2, school : "Illus", time : "1 a", range : "60 ft", components : "V,S,M", compMaterial : "A bit of fleece", duration : "Conc, 1 min", save : "Int", description : "1 crea save or sees 10 ft cube illusion that does 1d6 Psychic dmg/rnd; Int(Investigation) vs. spell DC", descriptionShorter : "1 crea save or sees 10 ft cube illusion that does 1d6 Psychic dmg/rnd; Investigation vs. DC", descriptionFull : "You craft an illusion that takes root in the mind of a creature that you can see within range. The target must make an Intelligence saving throw. On a failed save, you create a phantasmal object, creature, or other visible phenomenon of your choice that is no larger than a 10-foot cube and that is perceivable only to the target for the duration. This spell has no effect on undead or constructs." + "\n " + "The phantasm includes sound, temperature, and other stimuli, also evident only to the creature." + "\n " + "The target can use its action to examine the phantasm with an Intelligence (Investigation) check against your spell save DC. If the check succeeds, the target realizes that the phantasm is an illusion, and the spell ends." + "\n " + "While a target is affected by the spell, the target treats the phantasm as if it were real. The target rationalizes any illogical outcomes from interacting with the phantasm. For example, a target attempting to walk across a phantasmal bridge that spans a chasm falls once it steps onto the bridge. If the target survives the fall, it still believes that the bridge exists and comes up with some other explanation for its fall - it was pushed, it slipped, or a strong wind might have knocked it off." + "\n " + "An affected target is so convinced of the phantasm's reality that it can even take damage from the illusion. A phantasm created to appear as a creature can attack the target. Similarly, a phantasm created to appear as fire, a pool of acid, or lava can burn the target. Each round on your turn, the phantasm can deal 1d6 psychic damage to the target if it is in the phantasm's area or within 5 feet of the phantasm, provided that the illusion is of a creature or hazard that could logically deal damage, such as by attacking. The target perceives the damage as a type appropriate to the illusion." }; SpellsList["power word heal"] = { name : "Power Word Heal", classes : ["bard"], source : [["P", 266]], level : 9, school : "Evoc", time : "1 a", range : "Touch", components : "V,S", duration : "Instantaneous", description : "1 crea heals all HP and stops being charmed, frightened, paralyzed, stunned; it can use rea to stand up", descriptionShorter : "1 crea heals all HP, not charmed, frightened, paralyzed, stunned; rea to stand up", descriptionFull : "A wave of healing energy washes over the creature you touch. The target regains all its hit points. If the creature is charmed, frightened, paralyzed, or stunned, the condition ends. If the creature is prone, it can use its reaction to stand up. This spell has no effect on undead or constructs." }; SpellsList["ray of sickness"] = { name : "Ray of Sickness", classes : ["sorcerer", "wizard"], source : [["P", 271]], level : 1, school : "Necro", time : "1 a", range : "60 ft", components : "V,S", duration : "Instantaneous", save : "Con", description : "Spell attack for 2d8+1d8/SL Poison dmg; save or also poisoned until end of my next turn", descriptionFull : "A ray of sickening greenish energy lashes out toward a creature within range. Make a ranged spell attack against the target. On a hit, the target takes 2d8 poison damage and must make a Constitution saving throw. On a failed save, it is also poisoned until the end of your next turn." + AtHigherLevels + "When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d8 for each slot level above 1st." }; SpellsList["searing smite"] = { name : "Searing Smite", classes : ["paladin"], source : [["P", 274]], level : 1, school : "Evoc", time : "1 bns", range : "Self", components : "V", duration : "Conc, 1 min", save : "Con", description : "Next melee weapon hit +1d6+1d6/SL Fire dmg and target ignites: start of turn save to end or 1d6 dmg", descriptionShorter : "Next melee wea hit +1d6+1d6/SL Fire dmg \u0026 ignites: start of turn save to end or 1d6 dmg", descriptionFull : "The next time you hit a creature with a melee weapon attack during the spell's duration, your weapon flares with white-hot intensity, and the attack deals an extra 1d6 fire damage to the target and causes the target to ignite in flames. At the start of each of its turns until the spell ends, the target must make a Constitution saving throw. On a failed save, it takes 1d6 fire damage. On a successful save, the spell ends. If the target or a creature within 5 feet of it uses an action to put out the flames, or if some other effect douses the flames (such as the target being submerged in water), the spell ends." + AtHigherLevels + "When you cast this spell using a spell slot of 2nd level or higher, the initial extra damage dealt by the attack increases by 1d6 for each slot above the 1st.", dynamicDamageBonus : { extraDmgGroupsSameType : /(end or )((?:\+?\d+d?\d*)+)/i } }; SpellsList["staggering smite"] = { name : "Staggering Smite", classes : ["paladin"], source : [["P", 278]], level : 4, school : "Evoc", time : "1 bns", range : "Self", components : "V", duration : "Conc, 1 min", save : "Wis", description : "Next melee weapon hit +4d6 Psychic dmg and save or dis. on atks/chks, no rea, until end next turn", descriptionFull : "The next time you hit a creature with a melee weapon attack during this spell's duration, your weapon pierces both body and mind, and the attack deals an extra 4d6 psychic damage to the target. The target must make a Wisdom saving throw. On a failed save, it has disadvantage on attack rolls and ability checks, and can't take reactions, until the end of its next turn." }; SpellsList["swift quiver"] = { name : "Swift Quiver", classes : ["ranger"], source : [["P", 279]], level : 5, school : "Trans", time : "1 bns", range : "Touch", components : "V,S,M", compMaterial : "A quiver containing at least one piece of ammunition", duration : "Conc, 1 min", description : "Quiver gives nonmagical ammo; bns a to make 2 atks with weapon that uses ammo from that quiver", descriptionFull : "You transmute your quiver so it produces an endless supply of nonmagical ammunition, which seems to leap into your hand when you reach for it." + "\n " + "On each of your turns until the spell ends, you can use a bonus action to make two attacks with a weapon that uses ammunition from the quiver. Each time you make such a ranged attack, your quiver magically replaces the piece of ammunition you used with a similar piece of nonmagical ammunition. Any pieces of ammunition created by this spell disintegrate when the spell ends. If the quiver leaves your possession, the spell ends." }; SpellsList["telepathy"] = { name : "Telepathy", classes : ["wizard"], source : [["P", 281]], level : 8, school : "Evoc", time : "1 a", range : "Unlimited", components : "V,S,M", compMaterial : "A pair of linked silver rings", duration : "24 h", description : "1 willing crea Int>0 and I telepathic link; share words, sensory information if on same plane", descriptionFull : "You create a telepathic link between yourself and a willing creature with which you are familiar. The creature can be anywhere on the same plane of existence as you. The spell ends if you or the target are no longer on the same plane." + "\n " + "Until the spell ends, you and the target can instantaneously share words, images, sounds, and other sensory messages with one another through the link, and the target recognizes you as the creature it is communicating with. The spell enables a creature with an Intelligence score of at least 1 to understand the meaning of your words and take in the scope of any sensory messages you send to it." }; SpellsList["thorn whip"] = { name : "Thorn Whip", classes : ["artificer", "druid"], source : [["P", 282]], level : 0, school : "Trans", time : "1 a", range : "30 ft", components : "V,S,M", compMaterial : "The stem of a plant with thorns", duration : "Instantaneous", description : "Melee spell atk for 1d6 Piercing dmg and pull crea up to 10 ft towards me; +1d6 at CL 5, 11, and 17", descriptionCantripDie : "Melee spell attack for `CD`d6 Piercing dmg and pull crea up to 10 ft towards me", descriptionFull : "You create a long, vine-like whip covered in thorns that lashes out at your command toward a creature in range. Make a melee spell attack against the target. If the attack hits, the creature takes 1d6 piercing damage, and if the creature is Large or smaller, you pull the creature up to 10 feet closer to you." + "\n " + "This spell's damage increases by 1d6 when you reach 5th level (2d6), 11th level (3d6), and 17th level (4d6)." }; SpellsList["thunderous smite"] = { name : "Thunderous Smite", classes : ["paladin"], source : [["P", 282]], level : 1, school : "Evoc", time : "1 bns", range : "Self", components : "V", duration : "Conc, 1 min", save : "Str", description : "Next melee weapon hit +2d6 Thunder dmg and save or 10 ft push and prone; audible in 300 ft", descriptionFull : "The first time you hit with a melee weapon attack during this spell's duration, your weapon rings with thunder that is audible within 300 feet of you, and the attack deals an extra 2d6 thunder damage to the target. Additionally, if the target is a creature, it must succeed on a Strength saving throw or be pushed 10 feet away from you and knocked prone." }; SpellsList["tsunami"] = { name : "Tsunami", classes : ["druid"], source : [["P", 284]], level : 8, school : "Conj", time : "1 min", range : "Sight", components : "V,S", duration : "Conc, 6 rnds", save : "Str", description : "300\xD750\xD7300ft (l\xD7w\xD7h) wall of water moves away at 50 ft/rnd; 6d10 Bludg. dmg; save halves; see B", descriptionShorter : "300\xD750\xD7300ft (l\xD7w\xD7h) wave moves away at 50 ft/rnd; 6d10 Bludg. dmg; save half; see B", descriptionMetric : "90\xD715\xD790m (l\xD7w\xD7h) wall of water moves away at 15 m/rnd; 6d10 Bludg. dmg; save halves; see B", descriptionShorterMetric : "90\xD715\xD790m (l\xD7w\xD7h) wave moves away at 15 m/rnd; 6d10 Bludg. dmg; save half; see B", descriptionFull : "A wall of water springs into existence at a point you choose within range. You can make the wall up to 300 feet long, 300 feet high, and 50 feet thick. The wall lasts for the duration." + "\n " + "When the wall appears, each creature within its area must make a Strength saving throw. On a failed save, a creature takes 6d10 bludgeoning damage, or half as much damage on a successful save." + "\n " + "At the start of each of your turns after the wall appears, the wall, along with any creatures in it, moves 50 feet away from you. Any Huge or smaller creature inside the wall or whose space the wall enters when it moves must succeed on a Strength saving throw or take 5d10 bludgeoning damage. A creature can take this damage only once per round. At the end of the turn, the wall's height is reduced by 50 feet, and the damage creatures take from the spell on subsequent rounds is reduced by 1d10. When the wall reaches 0 feet in height, the spell ends." + "\n " + "A creature caught in the wall can move by swimming. Because of the force of the wave, though, the creature must make a successful Strength (Athletics) check against your spell save DC in order to move at all. If it fails the check, it can't move. A creature that moves out of the area falls to the ground." }; SpellsList["witch bolt"] = { name : "Witch Bolt", classes : ["sorcerer", "warlock", "wizard"], source : [["P", 289]], level : 1, school : "Evoc", time : "1 a", range : "30 ft", components : "V,S,M", compMaterial : "A twig from a tree that has been struck by lightning", duration : "Conc, 1 min", description : "Rngd spell atk 1d12+1d12/SL Lightn. dmg; 1 a 1d12 Lightn. dmg; ends if out of range or I do other a", descriptionShorter : "Rngd atk 1d12+1d12/SL Lightn. dmg; 1 a 1d12 Lightn. dmg; end: out of range/do other a", descriptionFull : "A beam of crackling, blue energy lances out toward a creature within range, forming a sustained arc of lightning between you and the target. Make a ranged spell attack against that creature. On a hit, the target takes 1d12 lightning damage, and on each of your turns for the duration, you can use your action to deal 1d12 lightning damage to the target automatically. The spell ends if you use your action to do anything else. The spell also ends if the target is ever outside the spell's range or if it has total cover from you." + AtHigherLevels + "When you cast this spell using a spell slot of 2nd level or higher, the initial damage increases by 1d12 for each slot level above 1st.", dynamicDamageBonus : { multipleDmgMoments : false, extraDmgGroupsSameType : /(1 a )(.*?)( Lightn. dmg)/i } }; SpellsList["wrathful smite"] = { name : "Wrathful Smite", classes : ["paladin"], source : [["P", 289]], level : 1, school : "Evoc", time : "1 bns", range : "Self", components : "V", duration : "Conc, 1 min", save : "Wis", description : "Next melee weapon hit +1d6 Psychic dmg and save or frightened; it can take 1 a for extra save", descriptionFull : "The next time you hit with a melee weapon attack during this spell's duration, your attack deals an extra 1d6 psychic damage. Additionally, if the target is a creature, it must make a Wisdom saving throw or be frightened of you until the spell ends. As an action, the creature can make a Wisdom check against your spell save DC to steel its resolve and end this spell." }; ================================================ FILE: WotC material/pub_20140819_HotDQ+20141104_RoT.js ================================================ var iFileName = "pub_20140819_HotDQ+20141104_RoT.js"; RequiredSheetVersion("13.1.14"); // This file adds the background features and magic items from the Hoard of the Dragon Queen and Rise of Tiamat adventure books to MPMB's Character Record Sheet // Define the source SourceList.HotDQ={ name : "Hoard of the Dragon Queen [background features, items]", abbreviation : "HotDQ", group : "Adventure Books", campaignSetting : "Forgotten Realms", url : "https://wpn.wizards.com/en/products/tyranny-of-dragons", date : "2014/08/19" }; SourceList.RoT = { name : "Rise of Tiamat [items]", abbreviation : "RoT", group : "Adventure Books", campaignSetting : "Forgotten Realms", url : "https://wpn.wizards.com/en/products/tyranny-of-dragons", date : "2014/11/04" }; // Background features BackgroundFeatureList["cult of the dragon infiltrator"] = { description : "I have infiltrated the ranks of the Cult of the Dragon. Having spied on the organization for quite some time, I am familiar with its inner workings and customs. I have a second identity as an initiate of the cult, enough of a facade to blend in as a simple grunt or servant.", source : [["HotDQ", 87], ["ALbackground", 0]] }; BackgroundFeatureList["dragon scholar"] = { description : "I have studied dragons and their lore for many years. I can automatically identify locations built or used by dragons, and I can identify dragon eggs and scales by sight. If I fail an Intelligence check to recall lore relating to dragons, I know someone or some book that I can consult for the answer unless the DM rules that the lore is unknown.", source : [["HotDQ", 87], ["ALbackground", 0]] }; // Magic Items // The magic cauldron on page 79 is omitted as its only magic is that it functions as the material component for the Augury spell. Not something an adventurer is likely to use, with it being 50 lb. MagicItemsList["dragongleam"] = { name : "Dragongleam", source : [["HotDQ", 69]], type : "weapon (spear)", rarity : "rare", magicItemTable : "F", description : "This rusty spear is engraved with draconic runes on its crossguard which read \"Tiamat's Eyes Shine\". The spear has 10 charges. As an action while holding it, I can say this command and expend 1 charge to cast Daylight. The spear loses its magic once all charges are expended.", descriptionFull : "This rusty spear is engraved with draconic runes on its crossguard which read \"Tiamat's Eyes Shine\". The spear has 10 charges. While holding it, you can say the command and expend 1 charge as an action to cast the Daylight spell. The spear loses this property if it has no charges left.", weight : 3, usages : 10, recovery : "Never", spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "1 charge", spells : ["daylight"], selection : ["daylight"], firstCol : 1 }], spellChanges : { "daylight" : { component : "V,M\u0192" } }, weaponOptions : [{ baseWeapon : "spear", regExpSearch : /dragongleam/i, name : "Dragongleam", source : [["HotDQ", 69]], selectNow : true }] } MagicItemsList["tankard of plenty"] = { name : "Tankard of Plenty", source : [["HotDQ", 74]], type : "wondrous item", rarity : "uncommon", magicItemTable : "A", description : 'This golden stein is decorated with dancing dwarves and grain patterns. Speaking the command word "Illefarn" while grasping the handle fills the tankard with three pints of rich dwarven ale. This power can be used up to three times per day.', descriptionFull : 'This golden stein is decorated with dancing dwarves and grain patterns. Speaking the command word ("Illefarn") while grasping the handle fills the tankard with three pints of rich dwarven ale. This power can be used up to three times per day.', usages : 3, recovery : "Day" } var HotDQ_tempDragonMaskNoteTxt = [ desc([ toUni("Damage Absorption") + ". You have resistance against DTYPE damage. If you already have resistance to DTYPE damage from another source, you instead have immunity to DTYPE damage. If you already have immunity to DTYPE damage from another source, whenever you are subjected to DTYPE damage, you take none of that damage and regain a number of hit points equal to half the damage dealt of that type.", toUni("Draconic Majesty") + ". While you are wearing no armor, you can add your Charisma bonus to your Armor Class.", toUni("Dragon Breath") + ". If you have a breath weapon that requires rest to recharge, it gains a recharge of 6.", toUni("Dragon Sight") + ". You gain darkvision out to 60 feet, or to an additional 60 feet if you already have that sense. Once per day, you can gain blindsight out to 30 feet for 5 minutes.", toUni("Dragon Tongue") + ". You can speak and understand Draconic. You also have advantage on any Charisma check you make against DCOLOUR dragons.", toUni("Legendary Resistance (1/Day)") + ". If you fail a saving throw, you can choose to succeed instead." ]), [ " It reshapes to fit my face and head when I attuned to it. While I'm wearing a dragon mask and attuned to it, it grants me the following benefits.", "\u2022 Damage Absorption. I have resistance against DTYPE damage. If I already have resistance to DTYPE damage from another source, I instead gain immunity to DTYPE damage. If I already have immunity to DTYPE damage from another source, whenever I am subjected to DTYPE damage, I take none of that damage and instead regain a number of hit points equal to half the DTYPE damage dealt.", "\u2022 Draconic Majesty. While I am wearing no armor, I can add my Charisma bonus to my Armor Class.", "\u2022 Dragon Breath. If I have a breath weapon that requires rest to recharge, it gains a recharge of 6.", "\u2022 Dragon Sight. I gain darkvision out to 60 ft, or to an additional 60 ft if I already have that sense. Once per day, I can gain blindsight out to 30 ft for 5 minutes.", "\u2022 Dragon Tongue. I can speak and understand Draconic. I also have advantage on any Charisma check I make against DCOLOUR dragons.", "\u2022 Legendary Resistance. Once per day when I fail a saving throw, I can choose to succeed instead." ].join("\n ") ]; MagicItemsList["dragon mask"] = { name : "Dragon Mask", source : [["HotDQ", 94]], type : "wondrous item", rarity : "legendary", storyItemAL : true, description : "This mask reshapes to fit my head. It grants me the ability to absorb associated damage type, darkvision 60 ft, blindsight 30 ft (1/day), Legendary Resistance (1/day), adv. on Cha checks vs. a dragon type, the ability speak Draconic, and lets me add my Cha mod to AC while not wearing armor, see Notes page.", descriptionFull : "Each dragon mask is a legendary wondrous item that reshapes to fit the face and head of a wearer attuned to it. While you are wearing any dragon mask and attuned to it, you gain the following benefits." + HotDQ_tempDragonMaskNoteTxt[0].replace(/You have resistance against DTYPE damage.*?\n/, "You have resistance against the mask's damage type. If you already have resistance to that damage type from another source, you instead have immunity to that damage type. If you already have immunity to that damage type from another source, whenever you are subjected to damage of that type, you take none of that damage and regain a number of hit points equal to half the damage dealt of that type.\n").replace("DCOLOUR dragons", "dragons that share the mask's color"), attunement : true, languageProfs : ["Draconic"], vision : [["Darkvision", "fixed 60"], ["Darkvision", "+60"]], usages : 1, recovery : "Day", additional : "Legendary Resistance", extraLimitedFeatures : [{ name : "Dragon Mask (Blindsight 30 ft, 5 min)", usages : 1, recovery : "Day" }], extraAC : [{ mod : "Cha", magic : true, text : "I add my Charisma modifier to AC while I'm not wearing armor.", stopeval : function (v) { return v.wearingArmor; } }], calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.dbBreathWeapon || (/^(?=.*breath)(?=.*weapon).*$/i).test(v.theWea.name)) { fields.Description = fields.Description.replace(/(Us(e|able)( only)? )?once per (short|long) rest/i, 'Recharge 6'); }; } ] }, incrementDamageRes : function (dType, dRes) { SetProf( "savetxt", CurrentProfs.resistance[dRes] && CurrentProfs.resistance[dRes].src.length > 1, { immune : [dRes] }, !dType ? "Mask of the Dragon Queen (magic item)" : dType + " Dragon Mask (magic item)" ); }, choices : ["Black", "Blue", "Green", "Red", "White", "Mask of the Dragon Queen"], choicesNotInMenu : true, "black" : { name : "Black Dragon Mask", description : "This mask reshapes to fit my head. It grants me the ability to absorb acid damage, darkvision 60 ft, blindsight 30 ft (1/day), Legendary Resistance (1/day), adv. on Cha checks vs. black dragons, the ability speak Draconic, and lets me add my Cha mod to AC while not wearing armor, and more, see Notes page.", descriptionLong : "This horned mask of glossy ebony has horns and a skull-like mien. The mask reshapes to fit my face and head when I attuned to it. It grants me the ability to absorb acid damage, depending on how resistant I'm to it already. Additionally, it gives me darkvision 60 ft (or +60 ft) and blindsight 30 ft once per day for 5 min, the ability speak Draconic, advantage on Charisma checks against black dragons, lets me add my Charisma modifier to AC while I'm not wearing armor, and water breathing. Once per day when I fail a saving throw, I can use the mask to succeed on it instead. See Notes page.", descriptionFull : "This horned mask of glossy ebony has horns and a skull-like mien. The mask reshapes to fit a wearer attuned to it. While you are wearing the mask and attuned to it, you can access the following properties." + HotDQ_tempDragonMaskNoteTxt[0].replace(/DTYPE/g, "acid").replace("DCOLOUR", "black") + "\n " + toUni("Water Breathing") + ". You can breathe underwater.", dmgres : ["Acid"], changeeval : function () { MagicItemsList["dragon mask"].incrementDamageRes("Black", "acid"); }, toNotesPage : [{ name : "Features", note : "\n This horned mask of glossy ebony has horns and a skull-like mien." + HotDQ_tempDragonMaskNoteTxt[1].replace(/DTYPE/g, "acid").replace("DCOLOUR", "black") + "\n Water Breathing. I can breathe underwater." }] }, /* Although the adventure book only includes the Black Dragon Mask, this code also includes the Blue, Green, Red, and White Dragon Masks. The rules for these are found in the Rise of Tiamat Online Supplement, here: https://media.wizards.com/2014/downloads/dnd/RiseTiamatSupplementv0.2_Printer.pdf */ "blue" : { name : "Blue Dragon Mask", source : [["HotDQ", 0], ["RoTOS", 4]], description : "This mask reshapes to fit my head. It grants me the ability to absorb lightning damage, darkvision 60 ft, blindsight 30 ft (1/day), Legendary Resistance (1/day), adv. Cha checks vs. blue dragons, the ability speak Draconic, and lets me add my Cha mod to AC while not wearing armor, and more, see Notes page.", descriptionLong : "This mask of glossy azure has spikes around its edges and a ridged horn in its center. The mask reshapes to fit my face and head when I attuned to it. It grants me the ability to absorb lightning damage, depending on how resistant I'm to it already. Additionally, it gives me darkvision 60 ft (or +60 ft) and blindsight 30 ft once per day for 5 min, the ability speak Draconic, advantage on Charisma checks against blue dragons, lets me add my Charisma modifier to AC while I'm not wearing armor, and Lingering Shock. Once per day when I fail a saving throw, I can use the mask to succeed on it instead. See Notes page.", descriptionFull : "This mask of glossy azure has spikes around its edges and a ridged horn in its center. The mask reshapes to fit a wearer attuned to it. While you are wearing the mask and attuned to it, you can access the following properties." + HotDQ_tempDragonMaskNoteTxt[0].replace(/DTYPE/g, "lightning").replace("DCOLOUR", "blue") + "\n " + toUni("Lingering Shock") + ". If you deal lightning damage to a creature, it can't take reactions until its next turn.", dmgres : ["Lightning"], changeeval : function () { MagicItemsList["dragon mask"].incrementDamageRes("Blue", "lightning"); }, toNotesPage : [{ name : "Features", note : "\n This mask of glossy azure has spikes around its edges and a ridged horn in its center." + HotDQ_tempDragonMaskNoteTxt[1].replace(/DTYPE/g, "lightning").replace("DCOLOUR", "blue") + "\n Lingering Shock. If I deal lightning damage to a creature, it can't take reactions until its next turn." }] }, "green" : { name : "Green Dragon Mask", source : [["HotDQ", 0], ["RoTOS", 4]], description : "This mask reshapes to fit my head. It grants me the ability to absorb poison damage, darkvision 60 ft, blindsight 30 ft (1/day), Legendary Resistance (1/day), adv. on Cha checks vs. green dragons, the ability speak Draconic, and lets me add my Cha mod to AC while not wearing armor, and more, see Notes page.", descriptionLong : "This mottled green mask is surmounted by a frilled crest and has spikes along its jaw. The mask reshapes to fit my face and head when I attuned to it. It grants me the ability to absorb poison damage, depending on how resistant I'm to it already. Additionally, it gives me darkvision 60 ft (or +60 ft) and blindsight 30 ft once per day for 5 min, the ability speak Draconic, advantage on Charisma checks against green dragons, lets me add my Charisma modifier to AC while I'm not wearing armor, and water breathing. Once per day when I fail a saving throw, I can use the mask to succeed on it instead. See Notes page.", descriptionFull : "This mottled green mask is surmounted by a frilled crest and has leathery spiked plates along its jaw. The mask reshapes to fit a wearer attuned to it. While you are wearing the mask and attuned to it, you can access the following properties." + HotDQ_tempDragonMaskNoteTxt[0].replace(/DTYPE/g, "poison").replace("DCOLOUR", "green") + "\n " + toUni("Water Breathing") + ". You can breathe underwater.", dmgres : ["Poison"], changeeval : function () { MagicItemsList["dragon mask"].incrementDamageRes("Green", "poison"); }, toNotesPage : [{ name : "Features", note : "\n This mottled green mask is surmounted by a frilled crest and has leathery spiked plates along its jaw." + HotDQ_tempDragonMaskNoteTxt[1].replace(/DTYPE/g, "poison").replace("DCOLOUR", "green") + "\n Water Breathing. I can breathe underwater." }] }, "red" : { name : "Red Dragon Mask", source : [["HotDQ", 0], ["RoTOS", 4]], description : "This mask reshapes to fit my head. It grants me the ability to absorb fire damage, darkvision 60 ft, blindsight 30 ft (1/day), Legendary Resistance (1/day), adv. on Cha checks vs. red dragons, the ability speak Draconic, and lets me add my Cha mod to AC while not wearing armor, and more, see Notes page.", descriptionLong : "This mask of glossy crimson has swept-back horns and spiked cheek ridges. The mask reshapes to fit my face and head when I attuned to it. It grants me the ability to absorb fire damage, depending on how resistant I'm to it already. Additionally, it gives me darkvision 60 ft (or +60 ft) and blindsight 30 ft once per day for 5 min, the ability speak Draconic, advantage on Charisma checks against red dragons, lets me add my Charisma modifier to AC while I'm not wearing armor, and Dragon Fire. Once per day when I fail a saving throw, I can use the mask to succeed on it instead. See Notes page.", descriptionFull : "This mask of glossy crimson has swept-back horns and spiked cheek ridges. The mask reshapes to fit a wearer attuned to it. While you are wearing the mask and attuned to it, you can access the following properties." + HotDQ_tempDragonMaskNoteTxt[0].replace(/DTYPE/g, "fire").replace("DCOLOUR", "red") + "\n " + toUni("Dragon Fire") + ". If you deal fire damage to a creature or flammable object, it starts burning. At the start of each of its turns, a creature burning in this way takes 1d6 fire damage. A creature that can reach the burning target can use an action to extinguish the fire.", dmgres : ["Fire"], changeeval : function () { MagicItemsList["dragon mask"].incrementDamageRes("red", "fire"); }, toNotesPage : [{ name : "Features", note : "\n This mask of glossy crimson has swept-back horns and spiked cheek ridges." + HotDQ_tempDragonMaskNoteTxt[1].replace(/DTYPE/g, "fire").replace("DCOLOUR", "red") + "\n Dragon Fire. If I deal fire damage to a creature or flammable object, it starts burning. At the start of each of its turns, a creature burning in this way takes 1d6 fire damage. A creature that can reach the burning target can use an action to extinguish the fire." }] }, "white" : { name : "White Dragon Mask", source : [["HotDQ", 0], ["RoTOS", 4]], description : "This mask reshapes to fit my head. It grants me the ability to absorb cold damage, darkvision 60 ft, blindsight 30 ft (1/day), Legendary Resistance (1/day), adv. on Cha checks vs. white dragons, the ability speak Draconic, and lets me add my Cha mod to AC while not wearing armor, and more, see Notes page.", descriptionLong : "This gleaming mask is white with highlights of pale blue and is topped by a spined crest. The mask reshapes to fit my face and head when I attuned to it. It grants me the ability to absorb cold damage, depending on how resistant I'm to it already. Additionally, it gives me darkvision 60 ft (or +60 ft) and blindsight 30 ft once per day for 5 min, the ability speak Draconic, advantage on Charisma checks against white dragons, lets me add my Charisma modifier to AC while I'm not wearing armor, and Winter's Fury. Once per day when I fail a saving throw, I can use the mask to succeed on it instead. See Notes page.", descriptionFull : "This gleaming mask is white with highlights of pale blue and is topped by a spined crest. The mask reshapes to fit a wearer attuned to it. While you are wearing the mask and attuned to it, you can access the following properties." + HotDQ_tempDragonMaskNoteTxt[0].replace(/DTYPE/g, "cold").replace("DCOLOUR", "white") + "\n " + toUni("Winter's Fury") + ". While your current hit points are equal to or less than half your hit point maximum, you deal an extra 1d8 cold damage with your melee attacks.", dmgres : ["Cold"], changeeval : function () { MagicItemsList["dragon mask"].incrementDamageRes("white", "cold"); }, toNotesPage : [{ name : "Features", note : "\n This gleaming mask is white with highlights of pale blue and is topped by a spined crest." + HotDQ_tempDragonMaskNoteTxt[1].replace(/DTYPE/g, "cold").replace("DCOLOUR", "white") + "\n Winter's Fury. While my current hit points are equal to or less than half my hit point maximum, I deal an extra 1d8 cold damage with my melee attacks." }] }, "mask of the dragon queen" : { name : "Mask of the Dragon Queen", source : [["RoT", 94]], description : "This mask reshapes to fit my head. It allows to absorb acid, cold, fire, lightning, and poison damage, darkvision 60 ft, blindsight 30 ft (1/day), Legendary Resistance (5/day), adv. on Cha checks vs. dragons, the ability speak Draconic, and lets me add my Cha mod to AC while not wearing armor, and more, see Notes page.", descriptionLong : "This mask gives me a draconic visage and covers my face, neck, and shoulders. The mask reshapes to fit my face and head when I attuned to it. It grants me the ability to absorb acid, cold, fire, lightning, and poison damage, depending on how resistant I'm already. Additionally, it gives me darkvision 60 ft (or +60 ft) and blindsight 30 ft once per day for 5 min, the ability speak Draconic, advantage on Charisma checks against dragons, lets me add my Charisma modifier to AC while not wearing armor, and more. 5 times per day when I fail a saving throw, I can use the mask to succeed on it instead. See Notes page.", descriptionFull : "When two or more of the dragon masks are assembled they magically transform into the Mask of the Dragon Queen. Each mask shrinks to become the modeled head of a chromatic dragon, appearing to roar its devotion to Tiamat where all the masks brought together are arranged crown-like on the wearer's head. Below the five masks, a new mask shapes itself, granting the wearer a draconic visage that covers the face, neck, and shoulders. The mask reshapes to fit a wearer attuned to it. While you are wearing the mask and attuned to it, you can access the following properties." + HotDQ_tempDragonMaskNoteTxt[0].replace(/You have resistance against DTYPE damage.*?\n/, "You have resistance against acid, cold, fire, lightning, and poison damage. If you already have resistance to a damage type from another source, you instead have immunity to that damage type. If you already have immunity to a damage type from another source, whenever you are subjected to that damage type, you take none of that damage and regain a number of hit points equal to half the damage dealt of that type.\n").replace("DCOLOUR ", "").replace(toUni("(1/Day)"), toUni("(5/Day)")) + "\n\n It can have the properties of any one of the colored masks, but only can have one active at a time. These are the following:\n " + toUni("Water Breathing (black and green)") + ". You can breathe underwater.\n " + toUni("Lingering Shock (blue)") + ". If you deal lightning damage to a creature, it can't take reactions until its next turn.\n " + toUni("Dragon Fire (red)") + ". If you deal fire damage to a creature or flammable object, it starts burning. At the start of each of its turns, a creature burning in this way takes 1d6 fire damage. A creature that can reach the burning target can use an action to extinguish the fire.\n " + toUni("Winter's Fury (white)") + ". While your current hit points are equal to or less than half your hit point maximum, you deal an extra 1d8 cold damage with your melee attacks.", dmgres : ["Acid", "Cold", "Fire", "Lightning", "Poison"], changeeval : function () { MagicItemsList["dragon mask"].incrementDamageRes("", "acid"); MagicItemsList["dragon mask"].incrementDamageRes("", "cold"); MagicItemsList["dragon mask"].incrementDamageRes("", "fire"); MagicItemsList["dragon mask"].incrementDamageRes("", "lightning"); MagicItemsList["dragon mask"].incrementDamageRes("", "poison"); }, toNotesPage : [{ name : "Features", note : "\n When two or more of the dragon masks are assembled they magically transform into the Mask of the Dragon Queen. Each mask shrinks to become the modeled head of a chromatic dragon, appearing to roar its devotion to Tiamat where all the masks brought together are arranged crown-like on the wearer's head. Below the five masks, a new mask shapes itself, granting the wearer a draconic visage that covers the face, neck, and shoulders." + HotDQ_tempDragonMaskNoteTxt[1].replace(/Damage Absorption.*?\n/, "Damage Absorption. I have resistance to acid, cold, fire, lightning, and poison damage. If I already have resistance to a damage type from another source, I instead have immunity to that damage type. If I already have immunity to a damage type from another source, whenever I am subjected to that damage type, I take none of that damage and regain a number of hit points equal to half the damage dealt of that type.\n").replace("DCOLOUR ", "").replace("Once per day when", "Five times per day when") + "\n \u2022 Special Properties. I can access the properties of any one of the colored masks, but only can have one active at a time. These are the following:"+ "\n \u25E6 Water Breathing (black and green). I can breathe underwater."+ "\n \u25E6 Lingering Shock (blue). If I deal lightning damage to a creature, it can't take reactions until its next turn."+ "\n \u25E6 Dragon Fire (red). If I deal fire damage to a creature or flammable object, it starts burning. At the start of each of its turns, a creature burning in this way takes 1d6 fire damage. A creature that can reach the burning target can use an action to extinguish the fire."+ "\n \u25E6 Winter's Fury (white). While my current hit points are equal to or less than half my hit point maximum, I deal an extra 1d8 cold damage with my melee attacks." }], usages : 5, recovery : "Day", additional : "Legendary Resistance" } } MagicItemsList["hazirawn"] = { name : "Hazirawn", source : [["HotDQ", 94]], type : "weapon (greatsword)", rarity : "legendary", storyItemAL : true, description : "This sentient, neutral evil, greatsword functions depend on whether you are attuned to it or not.", descriptionFull : "A sentient (neutral evil) greatsword, Hazirawn is capable of speech in Common and Netherese. Even if you aren't attuned to the sword, you gain a +1 bonus on attack and damage rolls made with this weapon and you deal an extra 1d6 necrotic damage when you hit with the weapon.\n " + toUni("Increased Potency") + ". While you are attuned to this weapon, its bonus on attack and damage rolls increases to +2, and a hit deals an extra 2d6 necrotic damage (instead of 1d6).\n " + toUni("Spells") + ". Hazirawn has 4 charges to cast spells. As long as the sword is attuned to you and you are holding it in your hand, you can cast Detect Magic (1 charge), Detect Evil and Good (1 charge), or Detect Thoughts (2 charges). Each night at midnight, Hazirawn regains 1d4 expended charges.\n " + toUni("Wounding") + ". While you are attuned to the weapon, any creature that you hit with Hazirawn can't regain hit points for 1 minute. The target can make a DC 15 Constitution saving throw at the end of each of its turns, ending this effect early on a success.", weight : 6, choices : ["not attuned", "attuned"], "not attuned" : { name : "Hazirawn\u200A", description : "A sentient (neutral evil) greatsword, Hazirawn is capable of speech in Common and Netherese. While I'm not attuned to the sword, I gain a +1 bonus on attack and damage rolls made with it. It also deals an extra 1d6 necrotic damage on attacks made with the sword.", weaponOptions : [{ baseWeapon : "greatsword", regExpSearch : /hazirawn/i, name : "Hazirawn", source : [["HotDQ", 94]], description : "Heavy, two-handed; +1d6 necrotic damage", modifiers : [1, 1], selectNow : true }] }, "attuned" : { name : "Hazirawn\u200A\u200A", attunement : true, description : "This sentient, neutral evil, greatsword adds +2 to damage and to hit rolls, deals +2d6 necrotic damage, and those hit with it can't regain HP for 1 min, but can make a DC 15 Con save at the end of each turn to stop this effect. It has 4 charges to cast spells, regaining 1d4 at midnight. It speaks Common and Netherese.", extraLimitedFeatures : [{ name : "Hazirawn (regains 1d4)", usages : 4, recovery : "Midnight" }], weaponOptions : [{ baseWeapon : "greatsword", regExpSearch : /hazirawn/i, name : "Hazirawn", source : [["HotDQ", 94]], description : "Heavy, two-handed; +2d6 necrotic damage; Wounding (can't regain HP for 1 min, DC 15 Con save to stop)", modifiers : [2, 2], selectNow : true }], spellcastingBonus : [{ name : "1 charge", spells : ["detect evil and good", "detect magic"], selection : ["detect evil and good", "detect magic"], firstCol : 1, times : 2 }, { name : "2 charges", spells : ["detect thoughts"], selection : ["detect thoughts"], firstCol : 2 }], fixedDC : 15, // assumed from the fact that its Wounding property has DC 15 spellFirstColTitle : "Ch" } } MagicItemsList["insignia of claws"] = { name : "Insignia of Claws", source : [["HotDQ", 94]], type : "wondrous item", rarity : "uncommon", magicItemTable : "F", description : "The jewels in the insignia flare with purple light when I enter combat, empowering my fists. While wearing the insignia, I gain a +1 bonus to the attack rolls and the damage rolls of my unarmed strikes and natural weapons. Such attacks are considered to be magical.", descriptionFull : "The jewels in the insignia of the Cult of the Dragon flare with purple light when you enter combat, empowering your natural fists or natural weapons.\n While wearing the insignia you gain a +1 bonus to the attack rolls and the damage rolls you make with unarmed strikes and natural weapons. Such attacks are considered to be magical.", calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == "unarmed strike" && !(/counts as( a)? magical/i).test(fields.Description)) { fields.Description += (fields.Description ? '; ' : '') + 'Counts as magical'; }; }, "My unarmed strikes gain a +1 bonus to their attack and damage rolls, and count as magical." ], atkCalc : [ function (fields, v, output) { if (v.baseWeaponName == "unarmed strike") { output.magic += 1; } }, '' ] } } MagicItemsList["wand of winter"] = { name : "Wand of Winter", source : [["HotDQ", 94]], type : "wand", rarity : "rare", attunement : true, magicItemTable : "G", description : "This wand looks and feels like an icicle and has 7 charges, regaining 1d6+1 expended charges at dawn. If I use its last charge, roll a d20. On a 20, it melts away. I can use its charges to cast spells with DC 15/+5 to hit: Ray of Frost (0 charges: 1d8, 1 charge: 2d8), Sleet Storm (3 charges), or Ice Storm (4 charges).", descriptionFull : "This wand looks and feels like an icicle. You must be attuned to the wand to use it.\n The wand has 7 charges, which are used to fuel the spells within it. With the wand in hand, you can use your action to cast one of the following spells from the wand, even if you are incapable of casting spells: Ray of Frost (no charges, or 1 charge to cast at 5th level; +5 to hit with ranged spell attack), Sleet Storm (3 charges; spell save DC 15), or Ice Storm (4 charges; spell save DC 15). No components are required. The wand regains 1d6+1 expended charges each day at dawn. If you expend the wand's last charge, roll a d20. On a 20, the wand melts away, forever destroyed.", weight : 1, usages : 7, recovery : "dawn", additional : "regains 1d6+1", fixedDC : 15, fixedSpAttack : 5, spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "1 charge", spells : ["ray of frost"], selection : ["ray of frost"], firstCol : 1 }, { name : "0 charges (at will)", spells : ["ray of frost"], selection : ["ray of frost"], firstCol : "atwill" }, { name : "3 charges", spells : ["sleet storm"], selection : ["sleet storm"], firstCol : 3 }, { name : "4 charges", spells : ["ice storm"], selection : ["ice storm"], firstCol : 4 }], calcChanges : { spellAdd : [ function (spellKey, spellObj, spName, isDuplicate) { if (spellKey == "ray of frost" && spName == "wand of winter") { if (isDuplicate) { spellObj.firstCol = "1"; spellObj.description = "Spell attack for 2d8 Cold dmg and -10 ft speed until start of my next turn"; } else { spellObj.description = "Spell attack for 1d8 Cold dmg and -10 ft speed until start of my next turn"; } return true; }; }, "" ] } } MagicItemsList["dragontooth dagger"] = { name : "Dragontooth Dagger", source : [["RoT", 94]], type : "weapon (dagger)", rarity : "rare", magicItemTable : "H", description : "This dagger is fashioned from the tooth of a dragon. Its handle is its leather wrapped root and there is no crossguard. It adds a +1 bonus to attack and damage rolls made with it and deals +1d6 acid damage on a hit. Against the enemies of the Cult of the Dragon this increases to a +2 bonus and +2d6 acid damage.", descriptionFull : "A dagger fashioned from the tooth of a dragon. While the blade is obviously a fang or predator's tooth, the handle is leather wrapped around the root of the tooth, and there is no crossguard.\n You gain a +1 bonus to attack and damage rolls made with this weapon. On a hit with this weapon, the target takes an extra 1d6 acid damage.\n " + toUni("Draconic Potency") + ". Against enemies of the Cult of the Dragon, the dagger's bonus to attack and damage rolls increases to 2, and the extra acid damage increases to 2d6.", weight : 1, weaponOptions : [{ baseWeapon : "dagger", regExpSearch : /^(?=.*dragontooth)(?=.*dagger).*$/i, name : "Dragontooth Dagger", source : [["RoT", 94]], description : "Finesse, light, thrown; +1d6 acid damage; Vs. Cult of the Dragon enemies: +2 magic \u0026 +2d6 acid damage", modifiers : [1, 1], selectNow : true }] } // Beast // Sled dog is just a wolf under a different name, it has been added to the SRD code as a `nameAlt` ================================================ FILE: WotC material/pub_20140930_MM.js ================================================ var iFileName = "pub_20140930_MM.js"; RequiredSheetVersion("14.0.5-beta"); // This file adds all the player-material from the Monster Manual to MPMB's Character Record Sheet // Define the source SourceList.M={ name : "Monster Manual", abbreviation : "MM", group : "Core Sources", url : "https://dnd.wizards.com/products/monster-manual", date : "2014/09/30" }; // Dinosaurs not in the SRD CreatureList["allosaurus"] = { name : "Allosaurus", source : [["M", 79]], size : 2, //Large type : "Beast", alignment : "Unaligned", ac : 13, hp : 51, hd : [6, 10], //[#, die] speed : "60 ft", scores : [19, 13, 17, 2, 12, 5], //[Str, Dex, Con, Int, Wis, Cha] skills : { "perception" : 5 }, passivePerception : 15, challengeRating : "2", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Claw", ability : 1, damage : [1, 8, "slashing"], //[#, die, type] "" for die is allowed range : "Melee (5 ft)", description : "If used after moving 30 ft straight in the same round, see Pounce trait" }, { name : "Bite", ability : 1, damage : [2, 10, "piercing"], //[#, die, type] "" for die is allowed range : "Melee (5 ft)", description : "Can be used in combination with claw while pouncing (see Pounce trait)" }], traits : [{ name : "Pounce", description : "If the allosaurus moves at least 30 ft straight toward a creature and then hits it with a claw attack on the same turn, that target must succeed on a DC 13 Strength saving throw or be knocked prone. If the target is prone, the allosaurus can make one bite attack against it as a bonus action." }] }; CreatureList["ankylosaurus"] = { name : "Ankylosaurus", source : [["M", 79]], size : 1, //Huge type : "Beast", alignment : "Unaligned", ac : 15, hp : 68, hd : [8, 12], //[#, die] speed : "30 ft", scores : [19, 11, 15, 2, 12, 5], //[Str, Dex, Con, Int, Wis, Cha] passivePerception : 11, challengeRating : "3", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Tail", ability : 1, damage : [4, 6, "bludgeoning"], //[#, die, type] "" for die is allowed range : "Melee (10 ft)", description : "Target must succeed on a DC 14 Strength saving throw or be knocked prone", modifiers : [1, ""] }] }; CreatureList["pteranodon"] = { name : "Pteranodon", source : [["M", 79]], size : 3, //Medium type : "Beast", alignment : "Unaligned", ac : 13, hp : 13, hd : [3, 8], //[#, die] speed : "10 ft, fly 60 ft", scores : [12, 15, 10, 2, 9, 5], //[Str, Dex, Con, Int, Wis, Cha] skills : { "perception" : 1 }, passivePerception : 11, challengeRating : "1/4", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Bite", ability : 1, damage : [1, 6, "piercing"], //[#, die, type] "" for die is allowed range : "Melee (5 ft)", description : "" }], traits : [{ name : "Flyby", description : "The pteranodon doesn't provoke opportunity attacks when it flies out of an enemy's reach." }] }; // Special familiars not in the SRD CreatureList["faerie dragon"] = { // With contributions by Patrick O. name : "Faerie Dragon", nameAlt : ["Dragon, Faerie"], source : [["M", 133]], size : 5, //Tiny type : "Dragon", alignment : "Chaotic Good", ac : 15, hp : 14, hd : [4, 4], speed : "10 ft, fly 60 ft", scores : [3, 20, 13, 14, 12, 16], //[Str, Dex, Con, Int, Wis, Cha] skills : { "arcana" : 4, "perception" : 3, "stealth" : 7 }, senses : "Darkvision 60 ft", passivePerception : 13, languages : "Draconic, Sylvan", challengeRating : "1", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Bite", ability : 2, damage : [1, "", "piercing"], range : "Melee (5 ft)", description : "", abilitytodamage : false }, { name : "Euphoria Breath (Recharge 5-6)", ability : 3, damage : ["Wis save", "", "Euphoria"], range : "5 ft", description : "For 1 min, target rolls d6 at turn start: 1-4 move random (no actions), 5-6 save again (no actions/move)", dc : true, abilitytodamage : false, tooltip : "The dragon exhales a puff of euphoria gas at one creature within 5 feet of it. The target must succeed on a DC 11 Wisdom saving throw, or for 1 minute, the target can't take reactions and must roll a d6 at the start of each of its turns to determine its behavior during the turn: 1-4 - the target takes no action or bonus action and uses all its movement to move in a random direction. 5-6 - the target doesn't move, and the only thing it can do on its turn is make a DC 11 Wisdom saving throw, ending the effect on itself on a success." }], traits : [{ name : "Superior Invisibility", description : "As a bonus action, the dragon can magically turn invisible until its concentration ends (as with a spell). Anything it wears or carries is invisible with it." }, { name : "Limited Telepathy", description : "Using telepathy, the dragon can magically communicate with any other faerie dragon within 60 feet of it." }, { name : "Magic Resistance", description : "The dragon has advantage on saves against spells and magical effects." }, { name : "Euphoria Breath (Recharge 5-6)", description : "Exhale a puff of euphoria gas at a creature within 5 ft. It must succeed on a DC 11 Wisdom save, or for 1 minute, it can't take reactions and must roll a d6 at the start of each of its turns:\n 1-4 - No action or bonus action, using all movment to move in a random direction.\n 5-6 - The target does nothing except attempt another save to try end the effect on itself." }], features : [{ name : "Innate Spellcasting", description : "Cast spells using Charisma (save DC 13), requiring no material components. The spells it knows depends on its age (and stack):\n Red: 1/day - Dancing Lights, Mage Hand, Minor Illusion\n Orange (6-10 years): 1/day - Color Spray\n Yellow (11-20 years): 1/day - Mirror Image\n Green (21-30 years): 1/day - Suggestion\n Blue (31-40 years): 1/day - Major Image\n Indigo (41-50 years): 1/day - Hallucinatory Terrain\n Violet (51+ years): 1/day - Polymorph" }] }; CreatureList["crawling claw"] = { name : "Crawling Claw", source : [["M", 44]], size : 5, //Tiny type : "Undead", companion : "familiar_not_al", alignment : "Neutral Evil", ac : 12, hp : 2, hd : [1, 4], //[#, die] speed : "20 ft, climb 20 ft", scores : [13, 14, 11, 5, 10, 4], //[Str, Dex, Con, Int, Wis, Cha] senses : "Blindsight 30 ft (blind beyond this radius)", damage_immunities : "poison", condition_immunities : "charmed, exhaustion, poisoned", passivePerception : 10, languages : "understands Common but can't speak", challengeRating : "0", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Claw", ability : 1, damage : [1, 4, "bludgeoning"], //[#, die, type] "" for die is allowed range : "Melee (5 ft)", description : "Does bludgeoning or slashing damage (claw's choice)" }], traits : [{ name : "Turn Immunity", description : "The claw is immune to effects that turn undead." }] }; CreatureList["peryton"] = { name : "Peryton", source : [["M", 251]], size : 3, //Medium type : "Monstrosity", companion : "steed", alignment : "Chaotic Evil", ac : 13, hp : 33, hd : [6, 8], //[#, die] speed : "20 ft, fly 60 ft", scores : [16, 12, 13, 9, 12, 10], //[Str, Dex, Con, Int, Wis, Cha] skills : { "perception" : 5 }, senses : "Adv. on Wis (Perception) checks using sight/smell", passivePerception : 16, languages : "understands Common and Elvish, but can't speak", challengeRating : "2", proficiencyBonus : 2, attacksAction : 2, attacks : [{ name : "Gore", ability : 1, damage : [1, 8, "piercing"], //[#, die, type] "" for die is allowed range : "Melee (5 ft)", description : "One gore and one talons attack as an Attack action; +2d8 after 30 ft dive straight down" }, { name : "Talons", ability : 1, damage : [2, 4, "piercing"], //[#, die, type] "" for die is allowed range : "Melee (5 ft)", description : "One talons and one gore attack as an Attack action; +2d8 after 30 ft dive straight down" }], actions : [{ name : "Multiattack", description : "As an action on its turn, the peryton can make one Gore and one Talon attack." }], traits : [{ name : "Dive Attack", description : "If the peryton is flying and dives at least 30 ft. straight toward a target and then hits it with a melee weapon attack, the attack deals an extra 9 (2d8) damage to the target." }, { name : "Flyby", description : "The peryton doesn't provoke an opportunity attack when it flies out of an enemy's reach." }, { name : "Keen Sight and Smell", description : "The peryton has advantage on Wisdom (Perception) checks that rely on sight or smell." }] }; // Blights and spores CreatureList["needle blight"] = { name : "Needle Blight", nameAlt : ["Blight, Needle"], source : [["M", 32]], size : 3, //Medium type : "Plant", alignment : "Neutral Evil", ac : 12, hp : 11, hd : [2, 8], //[#, die] speed : "30 ft", scores : [12, 12, 13, 4, 8, 3], //[Str, Dex, Con, Int, Wis, Cha] condition_immunities : "blinded, deafened", senses : "Blindsight 60 ft (blind beyond this radius).", passivePerception : 9, languages : "understands Common but can't speak", challengeRating : "1/4", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Claws", ability : 2, damage : [2, 4, "piercing"], //[#, die, type] "" for die is allowed range : "Melee (5 ft)", description : "" }, { name : "Needles", ability : 2, damage : [2, 6, "piercing"], //[#, die, type] "" for die is allowed range : "30/60 ft", description : "" }] }; CreatureList["twig blight"] = { name : "Twig Blight", nameAlt : ["Blight, Twig"], source : [["M", 32]], size : 4, //Small type : "Plant", alignment : "Neutral Evil", ac : 13, hp : 4, hd : [1, 6], //[#, die] speed : "20 ft", scores : [6, 13, 12, 4, 8, 3], //[Str, Dex, Con, Int, Wis, Cha] damage_vulnerabilities : "fire", condition_immunities : "blinded, deafened", senses : "Blindsight 60 ft (blind beyond this radius).", passivePerception : 9, languages : "understands Common but can't speak", challengeRating : "1/8", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Claws", ability : 2, damage : [1, 4, "piercing"], //[#, die, type] "" for die is allowed range : "Melee (5 ft)", description : "" }], traits : [{ name : "False Appearance", description : "While the blight remains motionless, it is indistinguishable from a dead shrub." }] }; CreatureList["vine blight"] = { name : "Vine Blight", nameAlt : ["Blight, Vine"], source : [["M", 32]], size : 3, //Medium type : "Plant", alignment : "Neutral Evil", ac : 12, hp : 26, hd : [4, 8], //[#, die] speed : "10 ft", scores : [15, 8, 14, 5, 10, 3], //[Str, Dex, Con, Int, Wis, Cha] skills : { "stealth" : 1 }, condition_immunities : "blinded, deafened", senses : "Blindsight 60 ft (blind beyond this radius).", passivePerception : 9, languages : "Common", challengeRating : "1/2", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Constrict", ability : 1, damage : [2, 6, "bludgeoning"], //[#, die, type] "" for die is allowed range : "Melee (10 ft)", description : "Large or smaller target is grappled and restrained (escape DC 12); Can't use constrict again until grapple ends" }], traits : [{ name : "False Appearance", description : "While the blight remains motionless, it is indistinguishable from a tangle of vines." }], actions : [{ name : "Entangling Plants (Recharge 5-6)", description : "As an action, grasping roots and vines sprout in a 15-ft radius centered on the blight, withering away after 1 minute. For the duration, that area is difficult terrain for nonplant creatures. In addition, each creature of the blight's choice in that area when the plants appear must succeed on a DC 12 Strength saving throw or become restrained. A creature can use its action to make a DC 12 Strength check, freeing it self or another entangled creature within reach on a success." }], wildshapeString : [ (typePF ? "##Senses##. " : "") + "Blindsight 60 ft (blind beyond).", "##Immunities##. Blinded, deafened.", "##Entangling Plants (Recharge 5-6)##. As an action, 15-ft radius is difficult terrain for nonplant creatures for 1 min. Chosen creatures in it must make a DC 12 Str save or become restrained. A creature can use its action to free itself or another within reach with a DC 12 Str check.", "##False Appearance##. While motionless, it's indistinguishable from a tangle of vines.", ].join(typePF ? "\n" : " "), }; CreatureList["gas spore"] = { name : "Gas Spore", source : [["M", 138]], size : 2, //Large type : "Plant", alignment : "Unaligned", ac : 5, hp : 1, hd : [1, 10], //[#, die] speed : "fly 10 ft (hover)", scores : [5, 1, 3, 1, 1, 1], //[Str, Dex, Con, Int, Wis, Cha] condition_immunities : "blinded, deafened, frightened", senses : "Blindsight 30 ft (blind beyond this radius).", passivePerception : 5, challengeRating : "1/2", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Touch", ability : 1, damage : [1, "", "poison"], //[#, die, type] "" for die is allowed range : "Melee (5 ft)", description : "DC 10 Con save or infected with Death Burst disease, see traits", modifiers : [1, ""], abilitytodamage : false }], traits : [{ name : "Death Burst", description : "The gas spore explodes when it drops to 0 hit points. Each creature within 20 feet of it must succeed on a DC 15 Constitution saving throw or take 10 (3d6) poison damage and become infected with a disease on a failed save. Creatures immune to the poisoned condition are immune to this disease.\n Spores invade an infected creature's system, killing the creature in a number of hours equal to 1d12+the creature's Constitution score, unless the disease is removed. In half that time, the creature becomes poisoned for the rest of the duration. After the creature dies, it sprouts 2d4 Tiny gas spores that grow to full size in 7 days." }, { name : "Eerie Resemblance", description : "The gas spore resembles a beholder. A creature that can see the gas spore can discern its true nature with a successful DC 15 Intelligence (Nature) check." }], wildshapeString : [ (typePF ? "##Senses##. " : "") + "Blindsight 30 ft (blind beyond).", "##Immunities##. Blinded, deafened, frightened.", "##Eerie Resemblance##. Distinguishable form a beholder only with a DC 15 Nature check. ##Death Burst##. Explodes at 0 HP: all within 20 ft DC 15 Con save or 3d6 poison damage and infected with disease that kills a creature in 1d12+its Con score of hours. After half that, it's poisoned for the remainder. When dies, sprouts 2d4 Tiny gas spores that grow to full size in 7 days.", ].join(typePF ? "\n" : " "), }; // Even though the shield guardian is in the SRD, the description for its control amulet is only found in the Monster Manual MagicItemsList["shield guardian amulet"] = { name : "Shield Guardian Amulet", source : [["M", 271], ["RotF", 149]], type : "wondrous item", rarity : "rare", attunement : true, notLegalAL : true, prerequisite : "Requires attunement by a humanoid", prereqeval : function(v) { return !CurrentRace.known || !RaceList[CurrentRace.known] || !/creature type/i.test(RaceList[CurrentRace.known].trait); }, description : "A shield guardian is magically linked to this amulet. It has AC 10, 10 HP, and immunity to poison and psychic damage. I know the distance and direction of the guardian while I'm wearing the amulet and I'm on the same plane as it. While within 10 ft of it, I can use the amulet to reactivate it with a DC 20 Arcana check.", descriptionFull : "The amulet is a 4-inch-wide disk composed of silver-framed wood, with a rune carved into its face. A detect magic spell reveals a magical aura of enchantment around the amulet."+ "\n Every shield guardian has an amulet magically linked to it. A shield guardian can have only one corresponding amulet, and if that amulet is destroyed, the shield guardian is incapacitated until a replacement amulet is created."+ "\n A shield guardian's amulet is subject to direct attack if it isn't being worn or carried. It has AC 10, 10 hit points, and immunity to poison and psychic damage. Crafting an amulet requires 1 week and costs 1,000 gp in components."+ "\n A shield guardian's solitary focus is to protect the amulet's wearer. The amulet's wearer can command the guardian to attack its enemies or to guard the wielder against attack. If an attack threatens to injure the wearer, the construct can magically absorb the blow into its own body, even at a distance."+ "\n A humanoid that attunes to this amulet knows the distance and direction of the shield guardian, provided the amulet and the guardian are on the same plane of existence. As an action, the amulet's attuned wearer can try to reactivate the shield guardian, doing so with a successful DC 20 Intelligence (Arcana) check. Reactivation can only be attempted while the amulet and guardian are within 10 feet of each other.", creaturesAdd : [["Shield Guardian"]] }; // Player characters as Lycanthropes race - even though they are in the SRD, the rules for applying their abilities to player characters are not (added in v13.1.13) /* Gains: - speed in non-humanoid form - damage immunities - traits - actions that don't involve equipment P.S. multiattack is a weird one, going with the interpretation here: https://rpg.stackexchange.com/questions/70694 */ var MM_lycanthrope = { createDefaultTraits : function(sLycanName, sLycanPlural) { // the traits of a human var obj = { name : "Human " + sLycanName, plural : "Human " + sLycanPlural, languageProfs : ["Common", 1], age : " reach adulthood in their late teens and live less than 100 years", height : " range from barely 5 to well over 6 feet tall (4'8\" + 2d10\")", weight : " weigh around 165 lb (110 + 2d10 \xD7 2d4 lb)", heightMetric : " range from barely 1,5 to well over 1,8 metres tall (145 + 5d10 cm)", weightMetric : " weigh around 75 kg (50 + 5d10 \xD7 4d4 / 10 kg)", scorestxt : "+1 to all ability scores", scores : [1, 1, 1, 1, 1, 1, 1] } return obj; }, createMessage : function(sLycanName, aOtherGains) { var aGained = [ "Its speed in nonhumanoid form.", "Natural attacks in nonhumanoid form (e.g. bite/claw).", "Damage immunity to bludgeoning, piercing, and slashing from nonmagical attacks that aren't silvered.", "Shapechanger trait." ].concat(aOtherGains); return "The lycanthrope races are template races. All features and traits of the base race are retained and all the " + sLycanName + "'s features are added to it."+ "\nIf you choose not to use a previous race as the base race or you selected a " + sLycanName + " at character creation, a human (non-variant) will be used as the base race."+ "\nThe " + sLycanName + "'s features added to the base race are:"+ desc(aGained, "\n \u2022 ")+ "\n\nThe possible alignment change and moon-related limitations of lycanthrope are not mentioned in this race. Discuss with your DM how they want to handle lycanthrope." }, }; RaceList["lycanthrope-werebear"] = { regExpSearch : /were.?bear|^(?=.*lycanthrope)(?=.*bear).*$/i, name : "Werebear", source : [["M", 208]], plural : "Werebears", size : 3, speed : { walk : { spd : 30, enc : 20 } }, trait : "Human Werebear (+1 to all ability scores; min 19 Str)" + desc([ "Shapechanger: As an action, I can polymorph into a Large bear-hybrid, into a Large bear, or back. In those forms, I gain 40 ft walking speed, 30 ft climb speed, +1 AC, and a bite and claw attack. My stats don't otherwise change when transformed, but my equipment doesn't change and I revert back when I die. Humanoids hit by my bite must save or be cursed with werebear lycanthrope.", "Keen Smell: I have adv. on Wis (Perception) checks using smell." ], "\n \u2022 "), features : { lycanthrope_features : { name : "Lycanthrope", source : [["M", 208]], minlevel : 1, toNotesPage : [{ name : "Lycanthrope", note : [ "My Strength score increases to 19 unless it was already higher", "As an action, I can polymorph into a Large bear-hybrid, into a Large bear, or back", "In my bear and hybrid forms, I gain 40 ft walking speed, 30 ft climb speed, and +1 AC", "In these forms I also gain a bite and claw attack, but can't use bite as part of a multiattack", "My stats don't otherwise change, my equipment doesn't transform and I revert back if I die", "Humanoids hit by my bite must make a Con save or be cursed with werebear lycanthrope", "The DC to avoid this curse is 8 + my Proficiency bonus + my Constitution modifier" ], page3notes : true }, { name : "Multiattack", note : [ "As an action, I can make two attacks, none of which can be with my werebear bite" ], page3notes : true }], action : [ ["action", "Shapechange (bear/hybrid/back)"], ["action", "Multiattack (2 attacks, no bite)"] ], scoresOverride : [19, 0, 0, 0, 0, 0], savetxt : { immune : ["bludgeoning, piercing, and slashing damage unless from magic/silver"] }, weaponOptions : [{ name : "Werebear Bite", regExpSearch : /^(?=.*(werebear|lycanthrope))(?=.*bite).*$/i, source : [["M", 208]], ability : 1, type : "Natural", damage : [2, 10, "piercing"], range : "Melee", description : "Bear and Hybrid form only; Humanoids Con save or cursed", abilitytodamage : true, selectNow : true }, { name : "Werebear Claw", regExpSearch : /^(?=.*(werebear|lycanthrope))(?=.*\bclaws?\b).*$/i, source : [["M", 208]], ability : 1, type : "Natural", damage : [2, 8, "slashing"], range : "Melee", description : "Bear and Hybrid form only", abilitytodamage : true, selectNow : true }], extraAC : [{ name : "+1 in bear/hybrid form", mod : 0, text : "I gain a +1 bonus to AC while I'm in my bear or bear-hybrid form. This bonus is not added by default, it has to be added/removed manually when changing form." }] }, lycanthrope_keen_senses : { name : "Keen Smell", source : [["M", 208]], minlevel : 1, toNotesPage : [{ name : "Keen Smell", note : [ "I have advantage on Wisdom (Perception) checks that rely on smell" ], page3notes : true }], vision : [["Keen Smell", 0]] } }, useFromPreviousRace : { updateName : "prefix", // e.g. "Drow Werebear" message : MM_lycanthrope.createMessage("werebear", [ "Strength increase to 19 unless it was already higher.", "Keen Smell trait." ]), defaultTraits : MM_lycanthrope.createDefaultTraits("Werebear", "Werebears"), gainTraits : ["everything"] } }; RaceList["lycanthrope-wereboar"] = { regExpSearch : /were.?boar|^(?=.*lycanthrope)(?=.*boar).*$/i, name : "Wereboar", source : [["M", 209]], plural : "Wereboars", size : 3, speed : { walk : { spd : 30, enc : 20 } }, trait : "Human Wereboar (+1 to all ability scores; min 17 Str)" + desc([ "Shapechanger: As an action, I can polymorph into a boar-" + (typePF ? "" : "humanoid ") + "hybrid, into a boar, or back. In those forms, I gain 40 ft walking speed, +1 AC, and a tusks attack. My stats don't otherwise change when transformed, but my equipment doesn't change and I revert back when I die. Humanoids hit by my tusks must save or be cursed" + (typePF ? "." : " with lycanthrope."), "Relentless: If I'm reduced to 0 HP by 14 damage or less, I can instead drop to 1 HP.", "Charge: If I move 15 ft straight before a tusks hit, +2d6 damage and Str save or prone." ], "\n \u2022 "), features : { lycanthrope_features : { name : "Lycanthrope", source : [["M", 209]], minlevel : 1, toNotesPage : [{ name : "Lycanthrope", note : [ "My Strength score increases to 17 unless it was already higher", "As an action, I can polymorph into a boar-humanoid hybrid, into a boar, or back", "In my boar and hybrid forms, I gain 40 ft walking speed, a tusks attack, and +1 AC", "I also gain a bite and claw attack; As an action, I can make two claw attacks (multiattack)", "My stats don't otherwise change, my equipment doesn't transform and I revert back if I die", "Humanoids hit by my bite must make a Con save or be cursed with wereboar lycanthrope", "The DC to avoid this curse is 8 + my Proficiency bonus + my Constitution modifier" ], page3notes : true }, { name : "Multiattack", note : [ "As an action, I can make two attacks, only one of which can be with my wereboar tusks" ], page3notes : true, additional : "in humanoid or hybrid form only" }], action : [ ["action", "Shapechange (boar/hybrid/back)"], ["action", "Multiattack (2 attacks, max 1 tusks)"] ], scoresOverride : [17, 0, 0, 0, 0, 0], savetxt : { immune : ["bludgeoning, piercing, and slashing damage unless from magic/silver"] }, weaponOptions : [{ name : "Wereboar Tusks", regExpSearch : /^(?=.*(wereboar|lycanthrope))(?=.*tusks).*$/i, source : [["M", 209]], ability : 1, type : "Natural", damage : [2, 6, "slashing"], range : "Melee", description : "Boar/hybrid form only; Humanoids Con save or cursed; Charge for +2d6 damage", abilitytodamage : true, selectNow : true }], extraAC : [{ name : "+1 in boar/hybrid form", mod : 0, text : "I gain a +1 bonus to AC while I'm in my boar or boar-hybrid form. This bonus is not added by default, it has to be added/removed manually when changing form." }] }, wereboar_relentless : { name : "Relentless", source : [["M", 209]], minlevel : 1, toNotesPage : [{ name : "Relentless", note : [ "If I'm reduced to 0 HP by an affect dealing 14 damage or less, I can instead drop to 1 HP" ], page3notes : true, additional : "in boar or hybrid form only" }], usages : 1, recovery : "short rest" }, wereboar_charge : { name : "Charge", source : [["M", 209]], minlevel : 1, toNotesPage : [{ name : "Charge", note : [ "If, in one turn, I move straight for 15 ft and then hit with my tusks, I deal +2d6 damage", "Those hit like this must make a Str save or be knocked prone (DC 8 + Prof B. + Str mod)" ], page3notes : true, additional : "in boar or hybrid form only" }] } }, useFromPreviousRace : { updateName : "prefix", // e.g. "High Elf Wereboar" message : MM_lycanthrope.createMessage("wereboar", [ "Strength increase to 17 unless it was already higher.", "Relentless and Charge traits." ]), defaultTraits : MM_lycanthrope.createDefaultTraits("Wereboar", "Wereboars"), gainTraits : ["everything"] }, abilitySave : 1 // for charge trait }; RaceList["lycanthrope-wererat"] = { regExpSearch : /were.?rat|^(?=.*lycanthrope)(?=.*rat).*$/i, name : "Wererat", source : [["M", 209]], plural : "Wererats", size : 3, speed : { walk : { spd : 30, enc : 20 } }, trait : "Human Wererat (+1 to all ability scores; min 15 Dex)" + desc([ "Shapechanger: As an action, I can transform into a rat-humanoid hybrid, into a giant rat, or back. In those forms, I gain a bite attack, which can use Strength or Dexterity. In my giant rat form, I also become small and gain Darkvision 60 ft My stats don't otherwise change when transformed, but my equipment doesn't change and I revert back when I die. Humanoids hit by my bite must save or be cursed with wererat lycanthrope.", "Keen Smell: I have adv. on Wis (Perception) checks using smell." ], "\n \u2022 "), features : { lycanthrope_features : { name : "Lycanthrope", source : [["M", 209]], minlevel : 1, toNotesPage : [{ name : "Lycanthrope", note : [ "My Dexterity score increases to 15 unless it was already higher", "As an action, I can transform into a rat-humanoid hybrid, into a giant rat (Small), or back", "In my rat and hybrid forms, I gain a bite attack that can use either Strength or Dexterity", "In my giant rat form, I also become small and gain Darkvision 60 ft", "My stats don't otherwise change, my equipment doesn't transform and I revert back if I die", "Humanoids hit by my bite must make a Con save or be cursed with wererat lycanthrope", "The DC to avoid this curse is 8 + my Proficiency bonus + my Constitution modifier" ], page3notes : true }, { name : "Multiattack", note : [ "As an action, I can make two attacks, only one of which can be with my wererat bite" ], page3notes : true, additional : "in humanoid or hybrid form only" }], action : [ ["action", "Shapechange (giant rat/hybrid/back)"], ["action", "Multiattack (2 attacks, max 1 bite)"] ], scoresOverride : [0, 15, 0, 0, 0, 0], savetxt : { immune : ["bludgeoning, piercing, and slashing damage unless from magic/silver"] }, weaponOptions : [{ name : "Wererat Bite", regExpSearch : /^(?=.*(wererat|lycanthrope))(?=.*bite).*$/i, source : [["M", 209]], ability : 2, type : "Natural", damage : [1, 4, "piercing"], range : "Melee", description : "Rat and Hybrid form only; Humanoids Con save or cursed", abilitytodamage : true, isWereratBite : true, // for calcChanges.atkAdd selectNow : true }], calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.isWereratBite) fields.Mod = v.StrDex; }, 'I can use Strength or Dexterity for my Wererat Bite, whichever is higher.' ] } }, lycanthrope_keen_senses : { name : "Keen Smell", source : [["M", 209]], minlevel : 1, toNotesPage : [{ name : "Keen Smell", note : [ "I have advantage on Wisdom (Perception) checks that rely on smell" ], page3notes : true }], vision : [["Keen Smell", 0]] } }, useFromPreviousRace : { updateName : "prefix", // e.g. "Lizardfolk Wererat" message : MM_lycanthrope.createMessage("wererat", [ "Dexterity increase to 15 unless it was already higher.", "Keen Smell trait." ]), defaultTraits : MM_lycanthrope.createDefaultTraits("Wererat", "Wererats"), gainTraits : ["everything"] } }; RaceList["lycanthrope-weretiger"] = { regExpSearch : /were.?tiger|^(?=.*lycanthrope)(?=.*tiger).*$/i, name : "Weretiger", source : [["M", 210]], plural : "Weretigers", size : 3, speed : { walk : { spd : 30, enc : 20 } }, trait : "Human Weretiger (+1 to all ability scores; min 15 Str)" + desc([ "Shapechanger: As an action, I can polymorph into a tiger-humanoid hybrid, into a Large tiger, or back. In those forms, I gain 40 ft walking speed, a bite attack, and a claw attack. My stats don't otherwise change when transformed, but my equipment doesn't transform and I revert back when I die. Humanoids hit by my bite must save or be cursed with weretiger lycanthrope."+ (typePF ? "\n \u2022 Pounce: " : " ") + "I can pounce in my tiger and hybrid form, see notes.", "Keen Hearing and Smell: I have adv. on Wis (Perception) checks using hearing or smell." ], "\n \u2022 "), features : { lycanthrope_features : { name : "Lycanthrope", source : [["M", 210]], minlevel : 1, toNotesPage : [{ name : "Lycanthrope", note : [ "My Strength score increases to 17 unless it was already higher; I gain 60 ft darkvision", "As an action, I can polymorph into a tiger-humanoid hybrid, into a Large tiger, or back", "In my tiger and hybrid forms, I gain 40 ft walking speed, a bite attack, and a claw attack", "My stats don't otherwise change, my equipment doesn't transform and I revert back if I die", "Humanoids hit by my bite must make a Con save or be cursed with weretiger lycanthrope", "The DC to avoid this curse is 8 + my Proficiency bonus + my Constitution modifier" ], page3notes : true }, { name : "Multiattack", note : [ "As an action, I can make two attacks, none of which can be with my weretiger bite" ], page3notes : true, additional : "in humanoid or hybrid form only" }], action : [ ["action", "Shapechange (tiger/hybrid/back)"], ["action", "Multiattack (2 attacks, no bite)"] ], scoresOverride : [17, 0, 0, 0, 0, 0], savetxt : { immune : ["bludgeoning, piercing, and slashing damage unless from magic/silver"] }, weaponOptions : [{ name : "Weretiger Bite", regExpSearch : /^(?=.*(weretiger|lycanthrope))(?=.*bite).*$/i, source : [["M", 210]], ability : 1, type : "Natural", damage : [1, 10, "piercing"], range : "Melee", description : "Tiger and Hybrid form only; Humanoids Con save or cursed", abilitytodamage : true, selectNow : true }, { name : "Weretiger Claw", regExpSearch : /^(?=.*(weretiger|lycanthrope))(?=.*\bclaws?\b).*$/i, source : [["M", 210]], ability : 1, type : "Natural", damage : [1, 8, "slashing"], range : "Melee", description : "Tiger and Hybrid form only; Can be use to pounce", abilitytodamage : true, selectNow : true }], vision : [["Darkvision", 60]] }, lycanthrope_keen_senses : { name : "Keen Hearing and Smell", source : [["M", 210]], minlevel : 1, toNotesPage : [{ name : "Keen Hearing and Smell", note : [ "I have advantage on Wisdom (Perception) checks that rely on hearing or smell" ], page3notes : true }], vision : [["Keen Hearing and Smell", 0]] }, weretiger_pounce : { name : "Pounce", source : [["M", 210]], minlevel : 1, toNotesPage : [{ name : "Pounce", note : [ "If, in one turn, I move straight for 15 ft and then hit with my claw, I can pounce a target", "The creature must make a Str save or be knocked prone (DC 8 + Prof Bonus + Str mod)", "If I knocked someone prone, I can then make a bite attack against them as a bonus action" ], page3notes : true, additional : "in tiger or hybrid form only" }], action : [["bonus action", "Bite after successful Pounce"]] } }, useFromPreviousRace : { updateName : "prefix", // e.g. "Mountain Dwarf Weretiger" message : MM_lycanthrope.createMessage("weretiger", [ "Strength increase to 17 unless it was already higher.", "Keen Hearing and Smell trait." ]), defaultTraits : MM_lycanthrope.createDefaultTraits("Weretiger", "Weretigers"), gainTraits : ["everything"] }, abilitySave : 1 // for pounce trait }; RaceList["lycanthrope-werewolf"] = { regExpSearch : /were.?wol(f|ve)|^(?=.*lycanthrope)(?=.*wol(f|ve)).*$/i, name : "Werewolf", source : [["M", 211]], plural : "Werewolves", size : 3, speed : { walk : { spd : 30, enc : 20 } }, trait : "Human Werewolf (+1 to all ability scores; min 15 Str)" + desc([ "Shapechanger: As an action, I can polymorph into a wolf-humanoid hybrid, into a wolf, or back. In those forms, I gain 40 ft walking speed, a bite attack, and +1 AC. In my hybrid form, I also gain a claws attack. My stats don't otherwise change when transformed, but my equipment doesn't transform and I revert back when I die. Humanoids hit by my bite must save or be cursed with werewolf lycanthrope.", "Keen Hearing and Smell: I have adv. on Wis (Perception) checks using hearing or smell." ], "\n \u2022 "), features : { lycanthrope_features : { name : "Lycanthrope", source : [["M", 211]], minlevel : 1, toNotesPage : [{ name : "Lycanthrope", note : [ "My Strength score increases to 15 unless it was already higher", "As an action, I can polymorph into a wolf-humanoid hybrid, into a wolf, or back", "In my wolf and hybrid forms, I gain 40 ft walking speed, a bite attack, and +1 AC", "In my hybrid form, I also gain a claws attack", "My stats don't otherwise change, my equipment doesn't transform and I revert back if I die", "Humanoids hit by my bite must make a Con save or be cursed with werewolf lycanthrope", "The DC to avoid this curse is 8 + my Proficiency bonus + my Constitution modifier" ], page3notes : true }, { name : "Multiattack", note : [ "As an action, I can make two attacks, only one of which can be with my werewolf bite" ], page3notes : true, additional : "in humanoid or hybrid form only" }], action : [ ["action", "Shapechange (wolf/hybrid/back)"], ["action", "Multiattack (2 attacks, max 1 bite)"] ], scoresOverride : [15, 0, 0, 0, 0, 0], savetxt : { immune : ["bludgeoning, piercing, and slashing damage unless from magic/silver"] }, weaponOptions : [{ name : "Werewolf Bite", regExpSearch : /^(?=.*(werewolf|lycanthrope))(?=.*bite).*$/i, source : [["M", 211]], ability : 1, type : "Natural", damage : [1, 8, "piercing"], range : "Melee", description : "Wolf and Hybrid form only; Humanoids Con save or cursed", abilitytodamage : true, selectNow : true }, { name : "Wolf-hybrid Claws", regExpSearch : /^(?=.*wolf)(?=.*hybrid)(?=.*\bclaws?\b).*$/i, source : [["M", 211]], ability : 1, type : "Natural", damage : [2, 4, "slashing"], range : "Melee", description : "Hybrid form only", abilitytodamage : true, selectNow : true }], extraAC : [{ name : "+1 in wolf/hybrid form", mod : 0, text : "I gain a +1 bonus to AC while I'm in my wolf or wolf-hybrid form. This bonus is not added by default, it has to be added/removed manually when changing form." }] }, lycanthrope_keen_senses : { name : "Keen Hearing and Smell", source : [["M", 211]], minlevel : 1, toNotesPage : [{ name : "Keen Hearing and Smell", note : [ "I have advantage on Wisdom (Perception) checks that rely on hearing or smell" ], page3notes : true }], vision : [["Keen Hearing and Smell", 0]] } }, useFromPreviousRace : { updateName : "prefix", // e.g. "Rock Gnome Werewolf" message : MM_lycanthrope.createMessage("werewolf", [ "Strength increase to 15 unless it was already higher.", "Keen Hearing and Smell trait." ]), defaultTraits : MM_lycanthrope.createDefaultTraits("Werewolf", "Werewolves"), gainTraits : ["everything"] } }; ================================================ FILE: WotC material/pub_20141209_DMG.js ================================================ var iFileName = "pub_20141209_DMG.js"; RequiredSheetVersion("13.2.0"); // This file adds all the player-material from the Dungeon Master's Guide to MPMB's Character Record Sheet // Define the source SourceList.D={ name : "Dungeon Master's Guide", abbreviation : "DMG", group : "Core Sources", url : "https://dnd.wizards.com/products/dungeon-masters-guide", date : "2014/12/09" }; // Races RaceList["aasimar"] = { regExpSearch : /^(?!.*(fallen|protector|scourge))((?=.*aasimar)|((?=.*planetouched)(?=.*(celestial|angel)))).*$/i, name : "Aasimar", source : [["D", 286]], plural : "Aasimar", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Celestial"], vision : [["Darkvision", 60]], dmgres : ["Necrotic", "Radiant"], age : " reach adulthood in their late teens and live around 160 years", height : " range from barely 5 to well over 6 feet tall (4'8\" + 2d10\")", weight : " weigh around 165 lb (110 + 2d10 \xD7 2d4 lb)", heightMetric : " range from barely 1,5 to well over 1,8 metres tall (145 + 5d10 cm)", weightMetric : " weigh around 75 kg (50 + 5d10 \xD7 4d4 / 10 kg)", scores : [0, 0, 0, 0, 1, 2], trait : "Aasimar (+1 Wisdom, +2 Charisma)\n\nCelestial Legacy:\n I know the Light cantrip.\n Once I reach 3rd level, I can cast the Lesser Restoration spell once per long rest.\n Once I reach 5th level, I can cast the Daylight spell once per long rest.\n Charisma is my spellcasting ability for these spells.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Celestial Legacy (level 1)", spells : ["light"], selection : ["light"], firstCol : 'atwill' }], features : { "lesser restoration" : { name : "Celestial Legacy (level 3)", limfeaname : "Lesser Restoration", usages : 1, minlevel : 3, recovery : "long rest", spellcastingBonus : [{ name : "Celestial Legacy (level 3)", spells : ["lesser restoration"], selection : ["lesser restoration"], firstCol : 'oncelr' }] }, "daylight" : { name : "Celestial Legacy (level 5)", limfeaname : "Daylight", usages : 1, minlevel : 5, recovery : "long rest", spellcastingBonus : [{ name : "Celestial Legacy (level 5)", spells : ["daylight"], selection : ["daylight"], firstCol : 'oncelr' }] } } }; RaceList["eladrin"] = { regExpSearch : /^(?!.*half)((?=.*eladrin)|((?=.*\b(elfs?|elves|elvish|elven)\b)(?=.*\b(feys?|feywild)\b))).*$/i, name : "Eladrin", sortname : "Elf, Fey (Eladrin)", source : [["D", 286]], plural : "Eladrin", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Elvish"], vision : [["Darkvision", 60]], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["charmed"] }, weaponProfs : [false, false, ["longsword", "shortsword", "longbow", "shortbow"]], skills : ["Perception"], age : " typically claim adulthood around age 100 and can live to be 750 years old", height : " range from under 5 to over 6 feet tall (4'6\" + 2d12\")", weight : " weigh around 115 lb (90 + 2d12 \xD7 1d4 lb)", heightMetric : " range from under 1,5 to over 1,8 metres tall (140 + 5d12 cm)", weightMetric : " weigh around 55 kg (40 + 5d12 \xD7 2d4 / 10 kg)", scores : [0, 2, 0, 1, 0, 0], trait : "Eladrin (+2 Dexterity, +1 Intelligence)\nTrance: Elves don't need to sleep, but meditate semiconsciously, for 4 hours a day. While meditating, I can dream after a fashion; such dreams are actually mental exercises that have become reflexive through years of practice. After resting in this way, I gain the same benefit that a human does from 8 hours of sleep, thus needing only 4 hours for a long rest.\nFey Step: I can cast the Misty Step spell once using this trait. I regain the ability to do so when I finish a short rest.", spellcastingAbility : 4, features : { "fey step" : { name : "Fey Step", limfeaname : "Misty Step", minlevel : 1, usages : 1, recovery : "short rest", spellcastingBonus : [{ name : "Fey Step", spells : ["misty step"], selection : ["misty step"], firstCol : 'oncesr' }] } } }; // Subclasses AddSubClass("cleric", "death domain", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*(death|dead|dying)).*$/i, subname : "Death Domain", source : [["D", 96]], spellcastingExtra : ["false life", "ray of sickness", "blindness/deafness", "ray of enfeeblement", "animate dead", "vampiric touch", "blight", "death ward", "antilife shell", "cloudkill"], features : { "subclassfeature1" : { name : "Bonus Proficiency", source : [["D", 96]], minlevel : 1, description: desc("I gain proficiency with martial weapons"), weaponProfs : [false, true] }, "subclassfeature1.1" : { name : "Reaper", source : [["D", 96]], minlevel : 1, description: desc([ "I learn one necromancy cantrip of my choice from any spell list", "My necromancy, single-target cantrips can affect two targets within 5 ft of each other", ]), spellcastingBonus : [{ name : "Reaper", "class" : "any", school : ["Necro"], level : [0, 0] }], calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { if (spellObj.school == "Necro" && spellObj.level === 0) { var startDescr = spellObj.description; switch (spellKey) { case "chill touch" : spellObj.description = spellObj.description.replace("Spell attack", "2 crea in 5 ft spell atk").replace("Necrotic", "Necro.").replace("at CL 5, 11, and 17", "CL 5/11/17"); break; case "spare the dying" : spellObj.description = spellObj.description.replace("1 living creature", "1 living creature (or 2 within 5 ft of each other)"); break; case "toll the dead" : default : spellObj.description = spellObj.description.replace(/1 crea(ture)?/i, "2 crea in 5 ft").replace("disadvantage", "disadv.").replace("save halves", "save half"); } return startDescr !== spellObj.description; }; }, "My necromancy, single-target cantrips can affect two targets within 5 ft of each other." ] } }, "subclassfeature2" : { name : "Channel Divinity: Touch of Death", source : [["D", 97]], minlevel : 2, description: desc("When I hit a creature with a melee attack, I can deal extra necrotic damage"), additional : ["", "+9 damage", "+11 damage", "+13 damage", "+15 damage", "+17 damage", "+19 damage", "+21 damage", "+23 damage", "+25 damage", "+27 damage", "+29 damage", "+31 damage", "+33 damage", "+35 damage", "+37 damage", "+39 damage", "+41 damage", "+43 damage", "+45 damage"] }, "subclassfeature6" : { name : "Inescapable Destruction", source : [["D", 97]], minlevel : 6, description: desc("When I deal necrotic damage with spells or Channel Divinity, I ignore resistance to it") }, "subclassfeature8" : { name : "Divine Strike", source : [["D", 97]], minlevel : 8, description: desc("Once per turn, when I hit a creature with a weapon attack, I can do extra damage"), additional : levels.map(function (n) { if (n < 8) return ""; return "+" + (n < 14 ? 1 : 2) + "d8 necrotic damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && v.isWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.cleric.level < 14 ? 1 : 2) + 'd8 necrotic damage'; } }, "Once per turn, I can have one of my weapon attacks that hit do extra necrotic damage." ] } }, "subclassfeature17" : { name : "Improved Reaper", source : [["D", 97]], minlevel : 17, description: desc([ "If I cast a 5th-level or lower necromancy spell that has one target, I can target two", "They need to be within 5 ft of each other; I have to provide material comp. for both", ]), calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { if (spellObj.school == "Necro" && spellObj.level && spellObj.level < 6) { var startDescr = spellObj.description; switch (spellKey) { case "blindness/deafness" : // only 2 target if not cast at higher SL spellObj.description = "2 crea in 5 ft or " + spellObj.description; break; case "contagion" : case "inflict wounds" : case "ray of enfeeblement" : spellObj.description = spellObj.description.replace(/(Melee )?spell attack/i, "2 " + "$1".toLowerCase() + "spell atk in 5 ft").replace("spell ends", "ends"); break; case "cause fear" : spellObj.description = "2 crea in 5 ft or 1+1/SL crea max 30 ft apart (no constr/undead), save or frightened; save end of turn"; break; case "feign death" : spellObj.description = "2 willing crea in 5 ft appear dead; Are blinded, incapacitated, dmg resist. all but Psychic, speed 0"; break; case "gentle repose" : spellObj.description = spellObj.description.replace("1 corpse protected from", "2 corpses in 5 ft suffer no"); break; case "raise dead" : case "revivify" : spellObj.description = spellObj.description.replace("a creature's body that has", "body of 2 crea in 5 ft that").replace("cons.)", "cons. \xD72)"); spellObj.compMaterial += " (once for each target)"; break; case "speak with dead" : spellObj.description = spellObj.description.replace("1 corpse with mouth answers 5 questions", "2 corpses in 5 ft answer 5 questions each"); break; case "enervation" : spellObj.description = spellObj.description.replace("action", "1 a").replace("see book", "see B"); case "bestow curse" : case "blight" : case "cause fear-uass" : case "life transference" : case "negative energy flood" : default : spellObj.description = spellObj.description.replace(/1 crea(ture)?/i, "2 crea in 5 ft").replace("disadvantage", "disadv.").replace("save halves", "save half"); } return startDescr !== spellObj.description; }; }, "My necromancy, single-target 5th-level or lower spells can affect two targets within 5 ft of each other if both are within range of the spell. The spells still require material components for each target separately." ] } } } }); AddSubClass("paladin", "oathbreaker", { regExpSearch : /^((?=.*blackguard)|((?=.*(oath.*breaker|breaker.*oath))((?=.*paladin)|((?=.*(exalted|sacred|holy|divine))(?=.*(knight|fighter|warrior|warlord|trooper)))))).*$/i, subname : "Oathbreaker", source : [["D", 97]], features : { "subclassfeature3" : { name : "Channel Divinity: Control Undead", source : [["D", 97]], minlevel : 3, description: desc([ "As an action, one undead (CR < paladin level) I can see in 30 ft must make a Wis save", "If failed, it must obey my commands for 24 hours or until I use this on another", ]), action : [["action", ""]], spellcastingExtra : ["hellish rebuke", "inflict wounds", "crown of madness", "darkness", "animate dead", "bestow curse", "blight", "confusion", "contagion", "dominate person"] }, "subclassfeature3.1" : { name : "Channel Divinity: Dreadful Aspect", source : [["D", 97]], minlevel : 3, description: desc([ "As an action, anyone I choose within 30 ft that can see me must make a Wisdom save", "If failed, it is frightened for 1 min or until it succeeds a save at the end of its turns", "It can't save at the end of its turn if it's still within 30 ft of me", ]), action : [["action", ""]] }, "subclassfeature7" : { name : "Aura of Hate", source : [["D", 97]], minlevel : 7, description: desc([ "Fiends/undead within range and I add my Cha mod as bonus on melee weapon damage", "Multiple Auras of Hate don't stack; only the strongest applies", ]), additional : ["", "", "", "", "", "", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "30-foot aura", "30-foot aura", "30-foot aura"], calcChanges : { atkAdd : [ function (fields, v) { if (v.isMeleeWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Cha mod added to damage'; } }, "I add my Charisma modifier to my melee weapon damage." ], atkCalc : [ function (fields, v, output) { if (v.isMeleeWeapon) { output.extraDmg += Number(What("Cha Mod")); }; } ] } }, "subclassfeature15" : { name : "Supernatural Resistance", source : [["D", 97]], minlevel : 15, description: desc("I have resistance to bludgeoning/piercing/slashing damage from nonmagical weapons"), dmgres : [["Bludgeoning", "Bludg. (nonmagical)"], ["Piercing", "Pierc. (nonmagical)"], ["Slashing", "Slash. (nonmagical)"]] }, "subclassfeature20" : { name : "Dread Lord", source : [["D", 97]], minlevel : 20, description: desc([ "As an action, I gain a 30-ft aura of gloom that reduces bright light to dim for 1 min", "If frightened of me, foes starting their turn in the aura take 4d10 psychic damage", "Attacks vs. my allies and me inside the aura have disadvantage if attackers need sight", "As a bonus action, I can make a melee spell attack vs. a target inside the aura", "If this attack hits, it does 3d10 + Charisma modifier necrotic damage", ]), recovery : "long rest", usages : 1, action : [["action", ""]] } } }); // Magic Items not found in the SRD MagicItemsList["alchemy jug"] = { name : "Alchemy Jug", source : [["D", 150]], type : "wondrous item", rarity : "uncommon", magicItemTable : "B", description : "As an action, command the jug to produce liquid; or an action to uncorked it and pour 2 gal/min. After producing, it only makes the same up to its max, until next dawn. Oil (1 qt), acid (8 fl oz), basic poison (1/2 fl oz), beer (4 gal), honey/wine (1 gal), fresh water (8 gal), mayonnaise/vinegar (2 gal), salt water (12 gal).", descriptionLong : "A heavy ceramic jug. As an action, the jug can be commanded to hold a chosen liquid. With another action, I can uncork the jug and pour the liquid out at 2 gallons per minute. Once commanded to produce a liquid, it can't produce a different one or more than the maximum of one, until the next dawn.\rLiquids (with maximum): acid (8 fl. oz.), basic poison (1/2 fl. oz.), beer (4 gallons), honey (1 gallon), mayonnaise (2 gallons), oil (1 quart), vinegar (2 gallons), fresh water (8 gallons), salt water (12 gallons), wine (1 gallon).", descriptionFull : "This ceramic jug appears to be able to hold a gallon of liquid and weighs 12 pounds whether full or empty. Sloshing sounds can be heard from within the jug when it is shaken, even if the jug is empty."+ "\n You can use an action and name one liquid from the table below to cause the jug to produce the chosen liquid. Afterward, you can uncork the jug as an action and pour that liquid out, up to 2 gallons per minute. The maximum amount of liquid the jug can produce depends on the liquid you named."+ "\n Once the jug starts producing a liquid, it can't produce a different one, or more of one that has reached its maximum, until the next dawn.\n\n"+ toUni("Max \tLiquid\t\tMax \tLiquid")+ "\n8 ounces \tAcid\t\t1 quart \tOil"+ "\n1/2 ounce\tBasic poison\t2 gallons \tVinegar"+ "\n4 gallons \tBeer\t\t8 gallons \tWater, fresh"+ "\n1 gallon \tHoney\t\t12 gallons\tWater, salt"+ "\n2 gallons \tMayonnaise\t1 gallon \tWine", weight : 12 } MagicItemsList["cap of water breathing"] = { name : "Cap of Water Breathing", source : [["D", 157]], type : "wondrous item", rarity : "uncommon", magicItemTable : "B", description : "While wearing this cap underwater, I can speak its command word as an action to create a bubble of air around my head. It allows me to breathe normally underwater. This bubble stays with me until I speak the command word again, the cap is removed, or I am no longer underwater.", descriptionFull : "While wearing this cap underwater, you can speak its command word as an action to create a bubble of air around your head. It allows you to breathe normally underwater. This bubble stays with you until you speak the command word again, the cap is removed, or you are no longer underwater.", action : [["action", ""]] } MagicItemsList["cloak of invisibility"] = { name : "Cloak of Invisibility", source : [["D", 158]], type : "wondrous item", rarity : "legendary", magicItemTable : "I", description : "As an action, I can pull the hood of this cloak down or up over my head, making myself invisible (down) or visible again (up). While invisible, anything I carry or wear is invisible as well. It functions for 2 hours, usable in increments of 1 minute. It regains 1 hour of duration for every 12 hours not being used.", descriptionFull : "While wearing this cloak, you can pull its hood over your head to cause yourself to become invisible. While you are invisible, anything you are carrying or wearing is invisible with you. You become visible when you cease wearing the hood. Pulling the hood up or down requires an action.\n Deduct the time you are invisible, in increments of 1 minute, from the cloak's maximum duration of 2 hours. After 2 hours of use, the cloak ceases to function. For every uninterrupted period of 12 hours the cloak goes unused, it regains 1 hour of duration.", attunement : true, action : [["action", " (hood up/down)"]], usages : "120 min", recovery : "Special", additional : "regain 1h/12h" } MagicItemsList["driftglobe"] = { name : "Driftglobe", source : [["D", 166]], type : "wondrous item", rarity : "uncommon", magicItemTable : ["A", "B"], description : "By speaking its command word while within 60 ft, this glass sphere casts Light or Daylight on itself. Daylight only works once per dawn. While lit up, I can use an action to speak another command word to make it hover 5 ft off the ground and follow me at a distance of 60 ft. It stops hovering when grasped.", descriptionFull : "This small sphere of thick glass weighs 1 pound. If you are within 60 feet of it, you can speak its command word and cause it to emanate the Light or Daylight spell. Once used, the Daylight effect can't be used again until the next dawn.\n You can speak another command word as an action to make the illuminated globe rise into the air and float no more than 5 feet off the ground. The globe hovers in this way until you or another creature grasps it. If you move more than 60 feet from the hovering globe, it follows you until it is within 60 feet of you. It takes the shortest route to do so. If prevented from moving, the globe sinks gently to the ground and becomes inactive, and its light winks out.", weight : 1, action : [["action", " (hover)"]], usages : 1, recovery : "dawn", additional : "Daylight", spellcastingBonus : [{ name : "On globe", spells : ["light"], selection : ["light"], firstCol : "atwill" }, { name : "On globe", spells : ["daylight"], selection : ["daylight"], firstCol : "oncelr" }], spellChanges : { "light" : { range : "Globe", description : "Driftglobe sheds bright light in a 20-ft radius and dim light in an additional 20-ft radius", changes : "The spell can only affect the globe." }, "daylight" : { range : "Globe", description : "Driftglobe shed 60-ft rad bright light + 60-ft dim light; only magical darkness of SL 4+ works in it", changes : "The spell can only affect the globe." } } } MagicItemsList["efreeti chain"] = { name : "Efreeti Chain", source : [["D", 167]], type : "armor (chain mail)", rarity : "legendary", magicItemTable : "I", description : "While wearing this armor, I gain a +3 bonus to AC, I am immune to fire damage, and I can understand and speak Primordial. In addition, I can stand on and walk across molten rock as if it were solid ground.", descriptionFull : "While wearing this armor, you gain a +3 bonus to AC, you are immune to fire damage, and you can understand and speak Primordial. In addition, you can stand on and walk across molten rock as if it were solid ground.", attunement : true, weight : 55, languageProfs : ["Primordial"], savetxt : { immune : ["fire"] }, armorOptions : [{ regExpSearch : /^(?=.*efreeti)(?=.*chain).*$/i, name : "Efreeti Chain", source : [["D", 167]], type : "heavy", ac : "16+3", stealthdis : true, weight : 55, strReq : 13, selectNow : true }] } MagicItemsList["elixir of health"] = { name : "Elixir of Health", source : [["D", 168]], type : "potion", rarity : "rare", magicItemTable : "C", description : "Once as an action, I can drink this potion or administer it to another to cure any disease, and removing the blinded, deafened, paralyzed, and poisoned conditions. The potion's clear red liquid has tiny bubbles of light in it.", descriptionFull : "When you drink this potion, it cures any disease afflicting you, and it removes the blinded, deafened, paralyzed, and poisoned conditions. The clear red liquid has tiny bubbles of light in it.", weight : 0.5 } MagicItemsList["gloves of thievery"] = { name : "Gloves of Thievery", source : [["D", 172]], type : "wondrous item", rarity : "uncommon", magicItemTable : "F", description : "These gloves are invisible while worn. While wearing them, I gain a +5 bonus to Dexterity (Sleight of Hand) checks and Dexterity checks made to pick locks.", descriptionFull : "These gloves are invisible while worn. While wearing them, you gain a +5 bonus to Dexterity (Sleight of Hand) checks and Dexterity checks made to pick locks.", addMod : [{ type: "skill", field : "Sleight of Hand", mod : 5, text : "I gain a +5 bonus to Dexterity (Sleight of Hand) checks while wearing Gloves of Thievery." }] } MagicItemsList["instrument of the bards"] = { name : "Instrument of the Bards", source : [["D", 176]], type : "wondrous item (instrument)", description : "If I play this exquisite, magical instruments while casting a spell that has a somatic or material component and charms on a failed save, it imposes disadvantage on that save. I can also use it to cast a set of spells, each once per dawn, using my spellcasting ability and spell save DC.", descriptionFull : "An instrument of the bards is an exquisite example of its kind, superior to an ordinary instrument in every way. Seven types of these instruments exist, each named after a legendary bard college. A creature that attempts to play the instrument without being attuned to it must succeed on a DC 15 Wisdom saving throw or take 2d4 psychic damage.\n You can use an action to play the instrument and cast one of its spells. Once the instrument has been used to cast a spell, it can't be used to cast that spell again until the next dawn. The spells use your spellcasting ability and spell save DC.\n You can play the instrument while casting a spell that causes any of its targets to be charmed on a failed saving throw, thereby imposing disadvantage on the save. This effect applies only if the spell has a somatic or a material component.\n All instruments of the bards can be used to cast the following spells: Fly, Invisibility, Levitate, and Protection from Evil and Good.", attunement : true, weight : 3, // Magic of Faerûn (2001) page 161 prerequisite : "Requires attunement by a bard", prereqeval : function(v) { return classes.known.bard ? true : false; }, choices : ["Anstruth Harp (very rare)", "Canaith Mandolin (rare)", "Cli Lyre (rare)", "Doss Lute (uncommon)", "Fochlucan Bandore (uncommon)", "Mac-Fuirmidh Cittern (uncommon)", "Ollamh Harp (legendary)"], "anstruth harp (very rare)" : { name : "Anstruth Harp [Instrument of the Bards]", sortname : "Instrument of the Bards, Anstruth Harp", rarity : "very rare", magicItemTable : "H", descriptionFull : "An instrument of the bards is an exquisite example of its kind, superior to an ordinary instrument in every way. Seven types of these instruments exist, each named after a legendary bard college. A creature that attempts to play the instrument without being attuned to it must succeed on a DC 15 Wisdom saving throw or take 2d4 psychic damage.\n You can use an action to play the instrument and cast one of its spells. Once the instrument has been used to cast a spell, it can't be used to cast that spell again until the next dawn. The spells use your spellcasting ability and spell save DC.\n You can play the instrument while casting a spell that causes any of its targets to be charmed on a failed saving throw, thereby imposing disadvantage on the save. This effect applies only if the spell has a somatic or a material component.\n All instruments of the bards can be used to cast the following spells: Fly, Invisibility, Levitate, and Protection from Evil and Good.\n In addition, the Anstruth harp can be used to cast Control Weather, Cure Wounds (5th level), and Wall of Thorns.", spellcastingBonus : [{ name : "Once per long rest", spells : ["fly", "invisibility", "levitate", "protection from evil and good", "control weather", "cure wounds", "wall of thorns"], selection : ["fly", "invisibility", "levitate", "protection from evil and good", "control weather", "cure wounds", "wall of thorns"], firstCol : "oncelr", times : 7, spellcastingAbility : "class" }], spellChanges : { "cure wounds" : { description : "1 living creature heals 5d8+spellcasting ability modifier HP", changes : "When using the Anstruth Harp to cast Cure Wounds, it is cast at 5th-level." }, "control weather" : { time : "1 a", changes : "Casting time is only an action." } } }, "canaith mandolin (rare)" : { name : "Canaith Mandolin [Instrument of the Bards]", sortname : "Instrument of the Bards, Canaith Mandolin", rarity : "rare", magicItemTable : "G", descriptionFull : "An instrument of the bards is an exquisite example of its kind, superior to an ordinary instrument in every way. Seven types of these instruments exist, each named after a legendary bard college. A creature that attempts to play the instrument without being attuned to it must succeed on a DC 15 Wisdom saving throw or take 2d4 psychic damage.\n You can use an action to play the instrument and cast one of its spells. Once the instrument has been used to cast a spell, it can't be used to cast that spell again until the next dawn. The spells use your spellcasting ability and spell save DC.\n You can play the instrument while casting a spell that causes any of its targets to be charmed on a failed saving throw, thereby imposing disadvantage on the save. This effect applies only if the spell has a somatic or a material component.\n All instruments of the bards can be used to cast the following spells: Fly, Invisibility, Levitate, and Protection from Evil and Good.\n In addition, the Canaith mandolin can be used to cast Cure Wounds (3rd level), Dispel Magic, and Protection from Energy (lightning only).", spellcastingBonus : [{ name : "Once per long rest", spells : ["fly", "invisibility", "levitate", "protection from evil and good", "cure wounds", "dispel magic", "protection from energy"], selection : ["fly", "invisibility", "levitate", "protection from evil and good", "cure wounds", "dispel magic", "protection from energy"], firstCol : "oncelr", times : 7, spellcastingAbility : "class" }], spellChanges : { "cure wounds" : { description : "1 living creature heals 3d8+spellcasting ability modifier HP", changes : "When using the Canaith Mandolin to cast Cure Wounds, it is cast at 3rd-level." }, "protection from energy" : { description : "1 creature gains resistance to Lightning damage for the duration", changes : "When using the Canaith Mandolin to cast Protection from Energy, it can only grant resistance to lightning damage." } } }, "cli lyre (rare)" : { name : "Cli Lyre [Instrument of the Bards]", sortname : "Instrument of the Bards, Cli Lyre", rarity : "rare", magicItemTable : "G", descriptionFull : "An instrument of the bards is an exquisite example of its kind, superior to an ordinary instrument in every way. Seven types of these instruments exist, each named after a legendary bard college. A creature that attempts to play the instrument without being attuned to it must succeed on a DC 15 Wisdom saving throw or take 2d4 psychic damage.\n You can use an action to play the instrument and cast one of its spells. Once the instrument has been used to cast a spell, it can't be used to cast that spell again until the next dawn. The spells use your spellcasting ability and spell save DC.\n You can play the instrument while casting a spell that causes any of its targets to be charmed on a failed saving throw, thereby imposing disadvantage on the save. This effect applies only if the spell has a somatic or a material component.\n All instruments of the bards can be used to cast the following spells: Fly, Invisibility, Levitate, and Protection from Evil and Good.\n In addition, the Cli lyre can be used to cast Stone Shape, Wall of Fire, and Wind Wall.", spellcastingBonus : [{ name : "Once per long rest", spells : ["fly", "invisibility", "levitate", "protection from evil and good", "stone shape", "wall of fire", "wind wall"], selection : ["fly", "invisibility", "levitate", "protection from evil and good", "stone shape", "wall of fire", "wind wall"], firstCol : "oncelr", times : 7, spellcastingAbility : "class" }] }, "doss lute (uncommon)" : { name : "Doss Lute [Instrument of the Bards]", sortname : "Instrument of the Bards, Doss Lute", rarity : "uncommon", magicItemTable : "F", descriptionFull : "An instrument of the bards is an exquisite example of its kind, superior to an ordinary instrument in every way. Seven types of these instruments exist, each named after a legendary bard college. A creature that attempts to play the instrument without being attuned to it must succeed on a DC 15 Wisdom saving throw or take 2d4 psychic damage.\n You can use an action to play the instrument and cast one of its spells. Once the instrument has been used to cast a spell, it can't be used to cast that spell again until the next dawn. The spells use your spellcasting ability and spell save DC.\n You can play the instrument while casting a spell that causes any of its targets to be charmed on a failed saving throw, thereby imposing disadvantage on the save. This effect applies only if the spell has a somatic or a material component.\n All instruments of the bards can be used to cast the following spells: Fly, Invisibility, Levitate, and Protection from Evil and Good.\n In addition, the Doss lute can be used to cast Animal Friendship, Protection from Energy (fire only), and Protection from Poison.", spellcastingBonus : [{ name : "Once per long rest", spells : ["fly", "invisibility", "levitate", "protection from evil and good", "animal friendship", "protection from energy", "protection from poison"], selection : ["fly", "invisibility", "levitate", "protection from evil and good", "animal friendship", "protection from energy", "protection from poison"], firstCol : "oncelr", times : 7, spellcastingAbility : "class" }], spellChanges : { "protection from energy" : { description : "1 creature gains resistance to Fire damage for the duration", changes : "When using the Doss Lute to cast Protection from Energy, it can only grant resistance to fire damage." } } }, "fochlucan bandore (uncommon)" : { name : "Fochlucan Bandore [Instrument of the Bards]", sortname : "Instrument of the Bards, Fochlucan Bandore", rarity : "uncommon", magicItemTable : "F", descriptionFull : "An instrument of the bards is an exquisite example of its kind, superior to an ordinary instrument in every way. Seven types of these instruments exist, each named after a legendary bard college. A creature that attempts to play the instrument without being attuned to it must succeed on a DC 15 Wisdom saving throw or take 2d4 psychic damage.\n You can use an action to play the instrument and cast one of its spells. Once the instrument has been used to cast a spell, it can't be used to cast that spell again until the next dawn. The spells use your spellcasting ability and spell save DC.\n You can play the instrument while casting a spell that causes any of its targets to be charmed on a failed saving throw, thereby imposing disadvantage on the save. This effect applies only if the spell has a somatic or a material component.\n All instruments of the bards can be used to cast the following spells: Fly, Invisibility, Levitate, and Protection from Evil and Good.\n In addition, the Fochlucan bandore can be used to cast Entangle, Faerie Fire, Shillelagh, and Speak with Animals.", spellcastingBonus : [{ name : "Once per long rest", spells : ["fly", "invisibility", "levitate", "protection from evil and good", "entangle", "faerie fire", "shillelagh", "speak with animals"], selection : ["fly", "invisibility", "levitate", "protection from evil and good", "entangle", "faerie fire", "shillelagh", "speak with animals"], firstCol : "oncelr", times : 8, spellcastingAbility : "class" }] }, "mac-fuirmidh cittern (uncommon)" : { name : "Mac-Fuirmidh Cittern [Instrument of the Bards]", sortname : "Instrument of the Bards, Mac-Fuirmidh Cittern", rarity : "uncommon", magicItemTable : "F", descriptionFull : "An instrument of the bards is an exquisite example of its kind, superior to an ordinary instrument in every way. Seven types of these instruments exist, each named after a legendary bard college. A creature that attempts to play the instrument without being attuned to it must succeed on a DC 15 Wisdom saving throw or take 2d4 psychic damage.\n You can use an action to play the instrument and cast one of its spells. Once the instrument has been used to cast a spell, it can't be used to cast that spell again until the next dawn. The spells use your spellcasting ability and spell save DC.\n You can play the instrument while casting a spell that causes any of its targets to be charmed on a failed saving throw, thereby imposing disadvantage on the save. This effect applies only if the spell has a somatic or a material component.\n All instruments of the bards can be used to cast the following spells: Fly, Invisibility, Levitate, and Protection from Evil and Good.\n In addition, the Mac-Fuirmidh cittern can be used to cast Barkskin, Cure Wounds, and Fog Cloud.", spellcastingBonus : [{ name : "Once per long rest", spells : ["fly", "invisibility", "levitate", "protection from evil and good", "barkskin", "cure wounds", "fog cloud"], selection : ["fly", "invisibility", "levitate", "protection from evil and good", "barkskin", "cure wounds", "fog cloud"], firstCol : "oncelr", times : 7, spellcastingAbility : "class" }] }, "ollamh harp (legendary)" : { name : "Ollamh Harp [Instrument of the Bards]", sortname : "Instrument of the Bards, Ollamh Harp", rarity : "legendary", magicItemTable : "I", descriptionFull : "An instrument of the bards is an exquisite example of its kind, superior to an ordinary instrument in every way. Seven types of these instruments exist, each named after a legendary bard college. A creature that attempts to play the instrument without being attuned to it must succeed on a DC 15 Wisdom saving throw or take 2d4 psychic damage.\n You can use an action to play the instrument and cast one of its spells. Once the instrument has been used to cast a spell, it can't be used to cast that spell again until the next dawn. The spells use your spellcasting ability and spell save DC.\n You can play the instrument while casting a spell that causes any of its targets to be charmed on a failed saving throw, thereby imposing disadvantage on the save. This effect applies only if the spell has a somatic or a material component.\n All instruments of the bards can be used to cast the following spells: Fly, Invisibility, Levitate, and Protection from Evil and Good.\n In addition, the Ollamh harp can be used to cast Confusion, Control Weather, and Fire Storm.", spellcastingBonus : [{ name : "Once per long rest", spells : ["fly", "invisibility", "levitate", "protection from evil and good", "confusion", "control weather", "fire storm"], selection : ["fly", "invisibility", "levitate", "protection from evil and good", "confusion", "control weather", "fire storm"], firstCol : "oncelr", times : 7, spellcastingAbility : "class" }], spellChanges : { "control weather" : { time : "1 a", changes : "Casting time is only an action." } } } } MagicItemsList["mariner's armor"] = { name : "Mariner's Armor", nameTest : "Mariner's", source : [["D", 188]], type : "armor (light, medium, or heavy)", rarity : "uncommon", magicItemTable : "B", description : "While wearing this armor, I have a swimming speed equal to my walking speed. In addition, whenever I start my turn underwater with 0 hit points, the armor causes me to rise 60 ft toward the surface. The armor is decorated with fish and shell motifs.", descriptionFull : "While wearing this armor, you have a swimming speed equal to your walking speed. In addition, whenever you start your turn underwater with 0 hit points, the armor causes you to rise 60 feet toward the surface. The armor is decorated with fish and shell motifs.", allowDuplicates : true, chooseGear : { type : "armor", prefixOrSuffix : "suffix", descriptionChange : ["prefix", "armor"] }, speed : { swim : { spd : "walk", enc : "walk" } } } MagicItemsList["potion of fire breath"] = { name : "Potion of Fire Breath", source : [["D", 187]], type : "potion", rarity : "uncommon", magicItemTable : "B", description : "Once as an action, I can drink this potion or administer it to another to, for 1 hour, use a bonus action to do 4d6 fire damage at a target within 30 ft, Dex save DC 13 halves. This can be done 3 times. This potion's orange liquid flickers, and smoke fills the top of the container and wafts out whenever it is opened.", descriptionFull : "After drinking this potion, you can use a bonus action to exhale fire at a target within 30 feet of you. The target must make a DC 13 Dexterity saving throw, taking 4d6 fire damage on a failed save, or half as much damage on a successful one. The effect ends after you exhale the fire three times or when 1 hour has passed. This potion's orange liquid flickers, and smoke fills the top of the container and wafts out whenever it is opened.", weight : 0.5 } MagicItemsList["potion of invulnerability"] = { name : "Potion of Invulnerability", source : [["D", 188]], type : "potion", rarity : "rare", magicItemTable : "C", description : "Once as an action, I can drink this potion or administer it to another to have resistance to all damage for 1 minute. The potion's syrupy liquid looks like liquefied iron.", descriptionFull : "For 1 minute after you drink this potion, you have resistance to all damage. The potion's syrupy liquid looks like liquefied iron.", weight : 0.5 } MagicItemsList["potion of longevity"] = { name : "Potion of Longevity", source : [["D", 188]], type : "potion", rarity : "very rare", magicItemTable : "D", description : "Once as an action, I can drink this potion or administer it to another to reduce the consumer's physical age is by 1d6+6 years, to a minimum of 13 years. Subsequent consumptions of this type of potion have a 10% cumulative chance to instead age the consumer by 1d6+6 years.", descriptionLong : "Once as an action, I can drink this potion or administer it to another to reduce the consumer's physical age is by 1d6+6 years, to a minimum of 13 years. Subsequent consumptions of this type of potion have a 10% cumulative chance to instead age the consumer by 1d6+6 years. Suspended in this amber liquid are a scorpion's tail, an adder's fang, a dead spider, and a tiny heart that, against all reason, is still beating. These ingredients vanish when the potion is opened.", descriptionFull : "When you drink this potion, your physical age is reduced by 1d6+6 years, to a minimum of 13 years. Each time you subsequently drink a potion of longevity, there is 10 percent cumulative chance that you instead age by 1d6+6 years. Suspended in this amber liquid are a scorpion's tail, an adder's fang, a dead spider, and a tiny heart that, against all reason, is still beating. These ingredients vanish when the potion is opened.", weight : 0.5 } MagicItemsList["potion of vitality"] = { name : "Potion of Vitality", source : [["D", 188]], type : "potion", rarity : "very rare", magicItemTable : "D", description : "Once as an action, I can drink this potion or administer it to another to remove any exhaustion, disease, and poison affecting the consumer. For the next 24 hours, the consumer regains the maximum number of HP for any HD used. The potion's crimson liquid regularly pulses with dull light, calling to mind a heartbeat.", descriptionFull : "When you drink this potion, it removes any exhaustion you are suffering and cures any disease or poison affecting you. For the next 24 hours, you regain the maximum number of hit points for any Hit Die you spend. The potion's crimson liquid regularly pulses with dull light, calling to mind a heartbeat.", weight : 0.5 } MagicItemsList["rod of resurrection"] = { name : "Rod of Resurrection", source : [["D", 197]], type : "rod", rarity : "legendary", magicItemTable : "I", description : "This rod has 5 charges and regains 1 expended charge daily at dawn. While I hold it, I can use an action to expend 1 charge and cast Heal from it, or expend 5 charges and cast Resurrection from it. If the rod is reduced to 0 charges, roll a d20. On a 1, the rod disappears in a burst of radiance.", descriptionFull : "The rod has 5 charges. While you hold it, you can use an action to cast one of the following spells from it: Heal (expends 1 charge) or Resurrection (expends 5 charges).\n The rod regains 1 expended charge daily at dawn. If the rod is reduced to 0 charges, roll a d20. On a 1, the rod disappears in a burst of radiance.", attunement : true, weight : 2, prerequisite : "Requires attunement by a cleric, druid, or paladin", prereqeval : function(v) { return classes.known.cleric || classes.known.druid || classes.known.paladin ? true : false; }, usages : 5, recovery : "dawn", additional : "regains 1", spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "1 charge", spells : ["heal"], selection : ["heal"], firstCol : 1 }, { name : "5 charges", spells : ["resurrection"], selection : ["resurrection"], firstCol : 5 }], spellChanges : { "resurrection" : { time : "1 a", changes : "Casting time is only 1 action instead of 1 hour." } } } MagicItemsList["rod of the pact keeper, +1, +2, or +3"] = { name : "Rod of the Pact Keeper, +1, +2, or +3", source : [["D", 197]], type : "rod", description : "While holding this rod, I gain a bonus to spell attack rolls and to the saving throw DCs of my warlock spells, determined by the rod's rarity: uncommon (+1), rare (+2), or very rare (+3). As an action once per long rest, I can regain one warlock spell slot while holding the rod.", descriptionFull : "While holding this rod, you gain a bonus to spell attack rolls and to the saving throw DCs of your warlock spells. The bonus is determined by the rod's rarity: uncommon (+1), rare (+2), or very rare (+3).\n In addition, you can regain one warlock spell slot as an action while holding the rod. You can't use this property again until you finish a long rest.", attunement : true, weight : 2, prerequisite : "Requires attunement by a warlock", prereqeval : function(v) { return classes.known.warlock; }, usages : 1, recovery : "long rest", limfeaname : "Rod of the Pact Keeper (warlock spell slot)", action : [["action", ""]], allowDuplicates : true, choices : ["+1 Rod (uncommon)", "+2 Rod (rare)", "+3 Rod (very rare)"], "+1 rod (uncommon)" : { name : "Rod of the Pact Keeper +1", rarity : "uncommon", magicItemTable : "F", description : "While holding this rod, I gain a +1 bonus to spell attack rolls and to the saving throw DCs of my warlock spells. As an action once per long rest, I can regain one warlock spell slot while holding the rod.", calcChanges : { spellCalc : [ function (type, spellcasters, ability) { if (type !== "prepare" && spellcasters.indexOf('warlock') !== -1) return 1; }, "While holding the Rod of the Pact Keeper, I gain a +1 bonus to spell attack rolls and to the saving throw DCs of my warlock spells." ] } }, "+2 rod (rare)" : { name : "Rod of the Pact Keeper +2", rarity : "rare", magicItemTable : "G", description : "While holding this rod, I gain a +2 bonus to spell attack rolls and to the saving throw DCs of my warlock spells. As an action once per long rest, I can regain one warlock spell slot while holding the rod.", calcChanges : { spellCalc : [ function (type, spellcasters, ability) { if (type !== "prepare" && spellcasters.indexOf('warlock') !== -1) return 2; }, "While holding the Rod of the Pact Keeper, I gain a +2 bonus to spell attack rolls and to the saving throw DCs of my warlock spells." ] } }, "+3 rod (very rare)" : { name : "Rod of the Pact Keeper +3", rarity : "very rare", magicItemTable : "H", description : "While holding this rod, I gain a +3 bonus to spell attack rolls and to the saving throw DCs of my warlock spells. As an action once per long rest, I can regain one warlock spell slot while holding the rod.", calcChanges : { spellCalc : [ function (type, spellcasters, ability) { if (type !== "prepare" && spellcasters.indexOf('warlock') !== -1) return 3; }, "While holding the Rod of the Pact Keeper, I gain a +3 bonus to spell attack rolls and to the saving throw DCs of my warlock spells." ] } } } MagicItemsList["saddle of the cavalier"] = { name : "Saddle of the Cavalier", source : [["D", 199]], type : "wondrous item", rarity : "uncommon", magicItemTable : "B", description : "While in this saddle on a mount, I can't be dismounted against my will if I am conscious, and attack rolls against the mount have disadvantage.", descriptionFull : "While in this saddle on a mount, you can't be dismounted against your will if you're conscious, and attack rolls against the mount have disadvantage.", weight : 25 } MagicItemsList["scroll of protection"] = { name : "Scroll of Protection", source : [["D", 199]], type : "scroll", rarity : "rare", magicItemTable : "C", description : "Once as an action, I can use this to make a 5-ft radius, 10-ft high invisible barrier around myself for 5 min that moves with me and stops a creature type from entering or affecting anything within. As an action, a creature can make a DC 15 Cha check to stop being affected.", descriptionFull : "Each scroll of protection works against a specific type of creature chosen by the DM or determined randomly by rolling on the following table.\n\n" + [ toUni("d100\tCreature Type\td100\tCreature Type"), "01-10\tAberrations\t41-50\tFey", "11-20\tBeasts\t\t51-75\tFiends", "21-30\tCelestials \t76-80\tPlants", "31-40\tElementals\t81-00\tUndead", ].join("\n") + "\nUsing an action to read the scroll encloses you in an invisible barrier that extends from you to form a 5-foot-radius, 10-foot-high cylinder. For 5 minutes, this barrier prevents creatures of the specified type from entering or affecting anything within the cylinder.\n The cylinder moves with you and remains centered on you. However, if you move in such a way that an aberration would be inside the cylinder, the effect ends.\n A creature can attempt to overcome the barrier by using an action to make a DC 15 Charisma check. On a success, the creature ceases to be affected by the barrier.", choices : ["Aberrations", "Beasts", "Celestials", "Elementals", "Fey", "Fiends", "Plants", "Undead"], "aberrations" : { name : "Scroll of Protection from Aberrations", description : "Once as an action, I can use this to make a 5-ft radius, 10-ft high invisible barrier around myself for 5 min that moves with me and stops aberrations from entering or affecting anything within. As an action, a creature can make a DC 15 Cha check to stop being affected. If I move so the barrier includes an aberration, it ends." }, "beasts" : { name : "Scroll of Protection from Beasts", description : "Once as an action, I can use this to make a 5-ft radius, 10-ft high invisible barrier around myself for 5 minutes that moves with me and stops beasts from entering or affecting anything within. As an action, a creature can make a DC 15 Charisma check to stop being affected. If I move so the barrier includes a beast, it ends." }, "celestials" : { name : "Scroll of Protection from Celestials", description : "Once as an action, I can use this to make a 5-ft radius, 10-ft high invisible barrier around myself for 5 min that moves with me and stops celestials from entering or affecting anything within. As an action, a creature can make a DC 15 Cha check to stop being affected. If I move so the barrier includes a celestial, it ends." }, "elementals" : { name : "Scroll of Protection from Elementals", description : "Once as an action, I can use this to make a 5-ft radius, 10-ft high invisible barrier around myself for 5 min that moves with me and stops elementals from entering or affecting anything within. As an action, a creature can make a DC 15 Cha check to stop being affected. If I move so the barrier includes an elemental, it ends." }, "fey" : { name : "Scroll of Protection from Fey", description : "Once as an action, I can use this to make a 5-ft radius, 10-ft high invisible barrier around myself for 5 minutes that moves with me and stops fey from entering or affecting anything within. As an action, a creature can make a DC 15 Charisma check to stop being affected. If I move so the barrier includes a fey, it ends." }, "fiends" : { name : "Scroll of Protection from Fiends", description : "Once as an action, I can use this to make a 5-ft radius, 10-ft high invisible barrier around myself for 5 minutes that moves with me and stops fiends from entering or affecting anything within. As an action, a creature can make a DC 15 Charisma check to stop being affected. If I move so the barrier includes a fiend, it ends." }, "plants" : { name : "Scroll of Protection from Plants", description : "Once as an action, I can use this to make a 5-ft radius, 10-ft high invisible barrier around myself for 5 minutes that moves with me and stops plants from entering or affecting anything within. As an action, a creature can make a DC 15 Charisma check to stop being affected. If I move so the barrier includes a plant, it ends." }, "undead" : { name : "Scroll of Protection from Undead", description : "Once as an action, I can use this to make a 5-ft radius, 10-ft high invisible barrier around myself for 5 minutes that moves with me and stops undead from entering or affecting anything within. As an action, a creature can make a DC 15 Cha check to stop being affected. If I move so the barrier includes a undead, it ends." } } MagicItemsList["sending stones"] = { name : "Sending Stones", source : [["D", 199]], type : "wondrous item", rarity : "uncommon", magicItemTable : "C", description : "While I touch one of this pair of stones, I can use an action to cast Sending, targeting the bearer of the other stone. If no creature has the other stone, the spell won't cast. Once it is cast, neither stone can be used again until the next dawn. Sending allows each bearer to communicate up to 25 words.", descriptionFull : "Sending stones come in pairs, with each smooth stone carved to match the other so the pairing is easily recognized. While you touch one stone, you can use an action to cast the Sending spell from it. The target is the bearer of the other stone. If no creature bears the other stone, you know that fact as soon as you use the stone and don't cast the spell.\n Once Sending is cast through the stones, they can't be used again until the next dawn. If one of the stones in a pair is destroyed, the other one becomes nonmagical.", spellcastingBonus : [{ name : "To other stone bearer only", spells : ["sending"], selection : ["sending"], firstCol : "oncelr" }], usages : 1, recovery : "dawn", spellChanges : { "sending" : { description : "Send a 25 word message to the bearer of the other Sending Stone, who can respond with 25 words", changes : "Using one stone of a pair of Sending Stones, the spell can only target the bearer of the other stone of the pair." } } } MagicItemsList["sentinel shield"] = { name : "Sentinel Shield", source : [["D", 199]], type : "shield", rarity : "uncommon", magicItemTable : "F", description : "While holding this shield, I have advantage on initiative rolls and Wisdom (Perception) checks. The shield is emblazoned with a symbol of an eye.", descriptionFull : "While holding this shield, you have advantage on initiative rolls and Wisdom (Perception) checks. The shield is emblazoned with a symbol of an eye.", weight : 6, shieldAdd : "Sentinel Shield", advantages : [["Initiative", true], ["Perception", true]], vision : [["Adv. on Perception checks", 0]] } MagicItemsList["staff of the adder"] = { name : "Staff of the Adder", source : [["D", 203]], type : "staff", rarity : "uncommon", magicItemTable : "F", description : "As a bonus action, I can speak this staff's command word to animate its snake head for 1 minute or make it inanimate again. While animated, I can use it in melee (1d6 piercing + DC 15 Con save or 3d6 poison), but it can be attacked and has AC 15 and 20 HP (full every time). If it reaches 0 HP, the staff is destroyed.", descriptionFull : "You can use a bonus action to speak this staff's command word and make the head of the staff become that of an animate poisonous snake for 1 minute. By using another bonus action to speak the command word again, you return the staff to its normal inanimate form.\n You can make a melee attack using the snake head, which has a reach of 5 feet. Your proficiency bonus applies to the attack roll. On a hit, the target takes 1d6 piercing damage and must succeed on a DC 15 Constitution saving throw or take 3d6 poison damage.\n The snake head can be attacked while it is animate. It has an Armor Class of 15 and 20 hit points. If the head drops to 0 hit points, the staff is destroyed. As long as it's not destroyed, the staff regains all lost hit points when it reverts to its inanimate form.", attunement : true, weight : 4, prerequisite : "Requires attunement by a cleric, druid, or warlock", prereqeval : function(v) { return classes.known.cleric || classes.known.druid || classes.known.warlock ? true : false; }, action : [["bonus action", " (animate/end)"]], weaponOptions : [{ regExpSearch : /^(?=.*snake)(?=.*head)(?=.*staff)(?=.*adder).*$/i, name : "Animated Snake Head from Staff of the Adder", source : [["D", 203]], list : "melee", ability : 1, type : "Natural", damage : [1, 6, "piercing"], range : "Melee", weight : 4, description : "DC 15 Constitution save or 3d6 poison damage", abilitytodamage : false, selectNow : true }] } MagicItemsList["sword of answering"] = { name : "Sword of Answering", source : [["D", 206]], type : "weapon (longsword)", rarity : "legendary", magicItemTable : "I", description : "I gain a +3 bonus to attack and damage rolls made with this magical longsword that has a gem set in its pommel. As a reaction when a creature within my reach damages me, I can make one melee attack with this sword with advantage. This attack ignores damage immunities and resistances of the target.", descriptionFull : 'In the world of Greyhawk, only nine of these blades are known to exist. Each is patterned after the legendary sword Fragarach, which is variously translated as "Final Word." Each of the nine swords has its own name and alignment, and each bears a different gem in its pommel.\n You gain a +3 bonus to attack and damage rolls made with this sword. In addition, while you hold the sword, you can use your reaction to make one melee attack with it against any creature in your reach that deals damage to you. You have advantage on the attack roll, and any damage dealt with this special attack ignores any damage immunity or resistance the target has.\n\n' + [ toUni("Name\t\tAlignment\tGem"), "Answerer \tChaotic good\tEmerald", "Back Talker\tChaotic evil\tJet", "Concluder \tLawful neutral\tAmethyst", "Last Quip \tChaotic neutral\tTourmaline", "Rebutter\t\tNeutral good\tTopaz", "Replier\t\tNeutral\t\tPeridot", "Retorter\t\tLawful good\tAquamarine", "Scather\t\tLawful evil\tGarnet", "Squelcher \tNeutral evil\tSpinel" ].join("\n"), attunement : true, weight : 3, action : [["reaction", ""]], weaponOptions : [{ baseWeapon : "longsword", regExpSearch : /^(?=.*sword)(?=.*answering).*$/i, name : "Sword of Answering", source : [["D", 206]], modifiers : [3, 3], selectNow : true }], choices : ["Answerer (chaotic good)", "Back Talker (chaotic evil)", "Concluder (lawful neutral)", "Last Quip (chaotic neutral)", "Rebutter (neutral good)", "Replier (neutral)", "Retorter (lawful good)", "Scather (lawful evil)", "Squelcher (neutral evil)"], "answerer (chaotic good)" : { name : "Sword of Answering [Answerer]", prerequisite : "Requires attunement by a creature with the chaotic good alignment", prereqeval : function(v) { return (/^(?=.*chaotic)(?=.*good).*$/i).test(What("Alignment")); }, description : "I gain a +3 bonus to attack and damage rolls made with this magical longsword that has an emerald set in its pommel. As a reaction when a creature within my reach damages me, I can make one melee attack with this sword with advantage. This attack ignores damage immunities and resistances of the target." }, "back talker (chaotic evil)" : { name : "Sword of Answering [Back Talker]", prerequisite : "Requires attunement by a creature with the chaotic evil alignment", prereqeval : function(v) { return (/^(?=.*chaotic)(?=.*evil).*$/i).test(What("Alignment")); }, description : "I gain a +3 bonus to attack and damage rolls made with this magical longsword that has jet set in its pommel. As a reaction when a creature within my reach damages me, I can make one melee attack with this sword with advantage. This attack ignores damage immunities and resistances of the target." }, "concluder (lawful neutral)" : { name : "Sword of Answering [Concluder]", prerequisite : "Requires attunement by a creature with the lawful neutral alignment", prereqeval : function(v) { return (/^(?=.*lawful)(?=.*neutral).*$/i).test(What("Alignment")); }, description : "I gain a +3 bonus to attack and damage rolls made with this magical longsword that has an amethyst set in its pommel. As a reaction when a creature within my reach damages me, I can make one melee attack with this sword with advantage. This attack ignores damage immunities and resistances of the target." }, "last quip (chaotic neutral)" : { name : "Sword of Answering [Last Quip]", prerequisite : "Requires attunement by a creature with the chaotic neutral alignment", prereqeval : function(v) { return (/^(?=.*chaotic)(?=.*neutral).*$/i).test(What("Alignment")); }, description : "I gain a +3 bonus to attack and damage rolls made with this magical longsword that has a tourmaline set in its pommel. As a reaction when a creature within my reach damages me, I can make one melee attack with this sword with advantage. This attack ignores damage immunities and resistances of the target." }, "rebutter (neutral good)" : { name : "Sword of Answering [Rebutter]", prerequisite : "Requires attunement by a creature with the neutral good alignment", prereqeval : function(v) { return (/^(?=.*neutral)(?=.*good).*$/i).test(What("Alignment")); }, description : "I gain a +3 bonus to attack and damage rolls made with this magical longsword that has a topaz set in its pommel. As a reaction when a creature within my reach damages me, I can make one melee attack with this sword with advantage. This attack ignores damage immunities and resistances of the target." }, "replier (neutral)" : { name : "Sword of Answering [Replier]", prerequisite : "Requires attunement by a creature with the neutral alignment", prereqeval : function(v) { return (/^(?=.*neutral)(?!.*(chaotic|lawful|evil|good)).*$/i).test(What("Alignment")); }, description : "I gain a +3 bonus to attack and damage rolls made with this magical longsword that has a peridot set in its pommel. As a reaction when a creature within my reach damages me, I can make one melee attack with this sword with advantage. This attack ignores damage immunities and resistances of the target." }, "retorter (lawful good)" : { name : "Sword of Answering [Retorter]", prerequisite : "Requires attunement by a creature with the lawful good alignment", prereqeval : function(v) { return (/^(?=.*lawful)(?=.*good).*$/i).test(What("Alignment")); }, description : "I gain a +3 bonus to attack and damage rolls made with this magical longsword that has an aquamarine set in its pommel. As a reaction when a creature within my reach damages me, I can make one melee attack with this sword with advantage. This attack ignores damage immunities and resistances of the target." }, "scather (lawful evil)" : { name : "Sword of Answering [Scather]", prerequisite : "Requires attunement by a creature with the lawful evil alignment", prereqeval : function(v) { return (/^(?=.*lawful)(?=.*evil).*$/i).test(What("Alignment")); }, description : "I gain a +3 bonus to attack and damage rolls made with this magical longsword that has a garnet set in its pommel. As a reaction when a creature within my reach damages me, I can make one melee attack with this sword with advantage. This attack ignores damage immunities and resistances of the target." }, "squelcher (neutral evil)" : { name : "Sword of Answering [Squelcher]", prerequisite : "Requires attunement by a creature with the neutral evil alignment", prereqeval : function(v) { return (/^(?=.*neutral)(?=.*evil).*$/i).test(What("Alignment")); }, description : "I gain a +3 bonus to attack and damage rolls made with this magical longsword that has a spinel set in its pommel. As a reaction when a creature within my reach damages me, I can make one melee attack with this sword with advantage. This attack ignores damage immunities and resistances of the target." } } MagicItemsList["sword of vengeance"] = { name : "Sword of Vengeance", nameTest : "of Vengeance", source : [["D", 206]], type : "weapon (any sword)", rarity : "uncommon", magicItemTable : "F", attunement : true, description : "This sword gives +1 to hit and damage and is cursed. I can't part with this sword and have disadv. on attacks with other weapons. If I take damage in combat, I must make a DC 15 Wis save or I will attack the attacker until it drops to 0 HP or I can't attack it in melee anymore.", descriptionFull : "You gain a +1 bonus to attack and damage rolls made with this magic weapon.\n " + toUni("Curse") + ". This sword is cursed and possessed by a vengeful spirit. Becoming attuned to it extends the curse to you. As long as you remain cursed, you are unwilling to part with the sword, keeping it on your person at all times. While attuned to this weapon, you have disadvantage on attack rolls made with weapons other than this one.\n In addition, while the sword is on your person, you must succeed on a DC 15 Wisdom saving throw whenever you take damage in combat. On a failed save you must attack the creature that damaged you until you drop to 0 hit points or it does, or until you can't reach the creature to make a melee attack against it.\n You can break the curse in the usual ways. Alternatively, casting banishment on the sword forces the vengeful spirit to leave it. The sword then becomes a +1 weapon with no other properties.", chooseGear : { type : "weapon", prefixOrSuffix : "prefix", descriptionChange : ["replace", "sword"], excludeCheck : function (inObjKey, inObj) { var testRegex = /sword|scimitar|rapier/i; return !(testRegex).test(inObjKey) && (!inObj.baseWeapon || !(testRegex).test(inObj.baseWeapon)); } }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && v.isMeleeWeapon && (/sword|scimitar|rapier/i).test(v.baseWeaponName) && (/of vengeance/i).test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + 'Cursed'; } }, 'If I include the words "of Vengeance" in the name of a sword, it will be treated as the magic weapon Sword of Vengeance. It has +1 to hit and damage, but also bears a curse.' ], atkCalc : [ function (fields, v, output) { if (v.isMeleeWeapon && (/sword|scimitar|rapier/i).test(v.baseWeaponName) && (/of vengeance/i).test(v.WeaponTextName)) { output.magic = v.thisWeapon[1] + 1; } }, '' ] } } MagicItemsList["tentacle rod"] = { name : "Tentacle Rod", source : [["D", 208]], type : "rod", rarity : "rare", magicItemTable : "G", description : "As an action, all 3 tentacles of this rod attack with 15 ft reach, +9 to hit, dealing 1d6 bludgeoning damage. If a target is hit by all 3 it must make a DC 15 Con save or have half speed, disadv. on Dex saves, no reactions, and do action or bonus action, not both, for 1 min. It can repeat the save at the end of each of its turns.", descriptionLong : "As an action while holding the rod, I can direct each of its three tentacles to attack a creature I can see within 15 ft. Each tentacle makes a melee attack roll, +9 to hit, dealing 1d6 bludgeoning damage. If a target is hit by all three tentacles, it must make a DC 15 Constitution saving throw. On a failure, the creature's speed is halved, it has disadvantage on Dexterity saving throws, and it can't use reactions for 1 minute. Moreover, on each of its turns, it can take either an action or a bonus action, but not both. At the end of each of its turns, it can repeat the saving throw, ending the effect on itself on a success.", descriptionFull : "Made by the drow, this rod is a magic weapon that ends in three rubbery tentacles. While holding the rod, you can use an action to direct each tentacle to attack a creature you can see within 15 feet of you. Each tentacle makes a melee attack roll with a +9 bonus. On a hit, the tentacle deals 1d6 bludgeoning damage. If you hit a target with all three tentacles, it must make a DC 15 Constitution saving throw. On a failure, the creature's speed is halved, it has disadvantage on Dexterity saving throws, and it can't use reactions for 1 minute. Moreover, on each of its turns, it can take either an action or a bonus action, but not both. At the end of each of its turns, it can repeat the saving throw, ending the effect on itself on a success.", attunement : true, weight : 2, action : [["action", ""]], weaponOptions : [{ regExpSearch : /^(?=.*tentacle)(?=.*rod).*$/i, name : "Tentacle Rod", source : [["D", 208]], ability : 0, type : "Magic Item", damage : [1, 6, "bludgeoning"], range : "Melee (15 ft)", description : "Action to use, 3 attacks; If all 3 hit same target, it DC 15 Con save, see magic item", abilitytodamage : false, modifiers : [9, ""], weight : 2, isAlwaysProf : false, selectNow : true }] } MagicItemsList["tome of the stilled tongue"] = { name : "Tome of the Stilled Tongue", source : [["D", 208]], type : "wondrous item", rarity : "legendary", magicItemTable : "I", description : "I can use this thick leather-bound tome as a spellbook and an arcane focus. Once per dawn while holding it, I can use a bonus action to cast a spell I have written in it, without expending a spell slot or using any verbal or somatic components. Removing the tongue on the cover erases all spells within.", descriptionLong : "The first few pages of this thick leather-bound tome are filled with indecipherable scrawls. The remaining pages are blank and pristine. I can use it as a spellbook and an arcane focus. Once per dawn while holding it, I can use a bonus action to cast a spell I have written in the tome, without expending a spell slot or using any verbal or somatic components. While attuned to the book, I can remove the tongue from the book's cover, permanently erasing all spells within. Vecna watches the user or this tome and sometimes has cryptic messages appear in it at midnight and fade away after they are read.", descriptionFull : "This thick leather-bound volume has a desiccated tongue pinned to the front cover. Five of these tomes exist, and it's unknown which one is the original. The grisly cover decoration on the first tome of the stilled tongue once belonged to a treacherous former servant of the lich-god Vecna, keeper of secrets. The tongues pinned to the covers of the four copies came from other spellcasters who crossed Vecna. The first few pages of each tome are filled with indecipherable scrawls. The remaining pages are blank and pristine.\n If you can attune to this item, you can use it as a spellbook and an arcane focus. In addition, while holding the tome, you can use a bonus action to cast a spell you have written in this tome, without expending a spell slot or using any verbal or somatic components. Once used, this property of the tome can't be used again until the next dawn.\n While attuned to the book, you can remove the tongue from the book's cover. If you do so, all spells written in the book are permanently erased.\n Vecna watches anyone using this tome. He can also write cryptic messages in the book. These messages appear at midnight and fade away after they are read.", attunement : true, weight : 5, prerequisite : "Requires attunement by a wizard", prereqeval : function(v) { return classes.known.wizard ? true : false; }, action : [["bonus action", ""]], usages : 1, recovery : "dawn" } MagicItemsList["weapon of warning"] = { name : "Weapon of Warning", nameTest : "of Warning", source : [["D", 213]], type : "weapon (any)", rarity : "uncommon", magicItemTable : "F", description : "While this magic weapon is on my person, I have advantage on initiative rolls. In addition, both me and my allies within 30 ft of me can't be surprised and the weapon magically awakens us when combat starts, except those incapacitated by something other than nonmagical sleep.", descriptionFull : "This magic weapon warns you of danger. While the weapon is on your person, you have advantage on initiative rolls. In addition, you and any of your companions within 30 feet of you can't be surprised, except when incapacitated by something other than nonmagical sleep. The weapon magically awakens you and your companions within range if any of you are sleeping naturally when combat begins.", attunement : true, chooseGear : { type : "weapon", prefixOrSuffix : "prefix", descriptionChange : ["replace", "weapon"] }, advantages : [["Initiative", true]], calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && !v.isSpell && (/warning/i).test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); } }, 'If I include the word "Warning" in the name of a weapon, it will be treated as the magic weapon Weapon of Warning.' ] }, savetxt : { immune : ["surprised"] } } // Sentient Items var DMG_blackrazorFullDescription = [ "Hidden in the dungeon of White Plume Mountain, Blackrazor shines like a piece of night sky filled with stars. Its black scabbard is decorated with pieces of cut obsidian.", "You gain a +3 bonus to attack and damage rolls made with this magic weapon. It has the following additional properties.", ">>Devour Soul<<. Whenever you use it to reduce a creature to 0 hit points, the sword slays the creature devours its soul, unless it is a construct or an undead. A creature whose soul has been devoured by Blackrazor can be restored to life only by a Wish spell.", "When it devours a soul, Blackrazor grants you temporary hit points equal to the slain creature's hit point maximum. These hit points fade after 24 hours. As long as these temporary hit points last and you keep Blackrazor in hand, you have advantage on attack rolls, saving throws, and ability checks.", "If you hit an undead with this weapon, you take 1d10 necrotic damage and the target regains 1d10 hit points. If this necrotic damage reduces you to 0 hit points, Blackrazor devours your soul.", ">>Soul Hunter<<. While you hold the weapon, you are aware of the presence of Tiny or larger creatures within 60 feet of you that aren't constructs or undead. You also can't be charmed or frightened.", "Blackrazor can cast the Haste spell on you once per day. It decides when to cast the spell and maintains concentration on it so that you don't have to.", ">>Sentience<<. Blackrazor is a sentient chaotic neutral weapon with an Intelligence of 17, a Wisdom of 10, and a Charisma of 19. It has hearing and darkvision out to a range of 120 feet.", "The weapon can speak, read, and understand Common, and can communicate with its wielder telepathically. Its voice is deep and echoing. While you are attuned to it, Blackrazor also understands every language you know.", ">>Personality<<. Blackrazor speaks with an imperious tone, as though accustomed to being obeyed.", "The sword's purpose is to consume souls. It doesn't care whose souls it eats, including the wielder's. The sword believes that all matter and energy sprang from a void of negative energy and will one day return to it. Blackrazor is meant to hurry that process along.", "Despite its nihilism, Blackrazor feels a strange kinship to Wave and Whelm, two other weapons locked away under White Plume Mountain. It wants the three weapons to be united again and wielded together in combat, even though it violently disagrees with Whelm and finds Wave tedious.", "Blackrazor's hunger for souls must be regularly fed. If the sword goes three days or more without consuming a soul, a conflict between it and its wielder occurs at the next sunset." ]; MagicItemsList["blackrazor"] = { name : "Blackrazor", source : [["D", 216]], type : "weapon (greatsword)", rarity : "legendary", notLegalAL : true, description : "This sentient greatsword adds +3 to hit and damage and makes me immune to being charmed or frightened. Once per day it can cast Haste on me as it sees fit. If I use it to bring a creature to 0 HP, it devours the creature's soul, granting me temporary HP equal to the creature's max HP for 24 hours. See Notes page.", descriptionFull : DMG_blackrazorFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)<>Sentience<<. Wave is a sentient weapon of neutral alignment, with an Intelligence of 14, a Wisdom of 10, and a Charisma of 18. It has hearing and darkvision out to a range of 120 feet.", "The weapon communicates telepathically with its wielder and can speak, read, and understand Aquan. It can also speak with aquatic animals as if using a Speak with Animals spell, using telepathy to involve its wielder in the conversation.", ">>Personality<<. When it grows restless, Wave has a habit of humming tunes that vary from sea chanteys to sacred hymns of the sea gods.", "Wave zealously desires to convert mortals to the worship of one or more sea gods, or else to consign the faithless to death. Conflict arises if the wielder fails to further the weapon's objectives in the world. The trident has a nostalgic attachment to the place where it was forged, a desolate island called Thunderforge. A sea god imprisoned a family of storm giants there, and the giants forged Wave in an act of devotion to\u2014or rebellion against\u2014that god.", "Wave harbors a secret doubt about its own nature and purpose. For all its devotion to the sea gods, Wave fears that it was intended to bring about a particular sea god's demise. This destiny is something Wave might not be able to avert." ]; if (MagicItemsList["trident of fish command"] && MagicItemsList["weapon of warning"] && MagicItemsList["cap of water breathing"] && MagicItemsList["cube of force"]) { MagicItemsList["wave"] = { name : "Wave", source : [["D", 218]], type : "weapon (trident)", rarity : "legendary", notLegalAL : true, description : "This sentient trident adds +3 to hit and damage and if I score a critical hit with it, the target takes extra necrotic damage equal to half its max HP. It also functions as a trident of fish command, a weapon of warning, cap of water breathing while I hold it, and I can use it as a cube of force. See Notes page.", descriptionFull : DMG_waveFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)<>Thrown Weapon<<. Whelm has the thrown property, with a normal range of 20 feet and a long range of 60 feet. When you hit with a ranged weapon attack using it, the target takes an extra 1d8 bludgeoning damage, or an extra 2d8 bludgeoning damage if the target is a giant. Each time you throw the weapon, it flies back to your hand after the attack. If you don't have a hand free, the weapon lands at your feet.", ">>Shock Wave<<. You can use an action to strike the ground with Whelm and send a shock wave out from the point of impact. Each creature of your choice on the ground within 60 feet of that point must succeed on a DC 15 Constitution saving throw or become stunned for 1 minute. A creature can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success. Once used, this property can't be used again until the next dawn.", ">>Supernatural Awareness<<. While you are holding the weapon, it alerts you to the location of any secret or concealed doors within 30 feet of you. In addition, you can use an action to cast Detect Evil and Good or Locate Object from the weapon. Once you cast either spell, you can't cast it from the weapon again until the next dawn.", ">>Sentience<<. Whelm is a sentient lawful neutral weapon with an Intelligence of 15, a Wisdom of 12, and a Charisma of 15. It has hearing and darkvision out to a range of 120 feet.", "The weapon communicates telepathically with its wielder and can speak, read, and understand Dwarvish. Giant, and Goblin. It shouts battle cries in Dwarvish when used in combat.", ">>Personality<<. Whelm's purpose is to slaughter giants and goblinoids. It also seeks to protect dwarves against all enemies. Conflict arises if the wielder fails to destroy goblins and giants or to protect dwarves. Whelm has ties to the dwarf clan that created it, variously called the Dankil or the Mightyhammer clan. It longs to be returned to that clan. It would do anything to protect those dwarves from harm. The hammer also carries a secret shame. Centuries ago, a dwarf named Ctenmiir wielded it valiantly for a time. But Ctenmiir was turned into a vampire. His will was strong enough that he bent Whelm to his evil purposes, even killing members of his own clan." ]; MagicItemsList["whelm"] = { name : "Whelm", source : [["D", 218]], type : "weapon (warhammer)", rarity : "legendary", notLegalAL : true, description : "This sentient warhammer adds +3 to hit and damage, has the thrown property, deals extra damage when thrown, and returns to my hand when thrown. I can use it to create a shock wave. It makes me afraid of the outdoors, so while I can see the daytime sky, I have disadv. on attacks, saves, and checks. See Notes page.", descriptionFull : DMG_whelmFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)< 2 && (/\brage\b/i).test(v.WeaponTextName)) { var theDMG = GetFeatureChoice('class', 'barbarian', 'subclassfeature3'); if (!theDMG) return; fields.Description += (fields.Description ? '; ' : '') + '+1d6+' + Math.floor(classes.known.barbarian.level / 2) + ' ' + GetFeatureChoice('class', 'barbarian', 'subclassfeature3') + ' on first hit each turn'; }; }, "If I include the word 'Rage' in a melee weapon's name, it will show in its description that its first hit does extra damage." ] } }, "subclassfeature3.1" : { name : "Warrior of the Gods", source : [["X", 11]], minlevel : 3, description : desc("Spells restoring me to life (not undeath or anything else) don't require material comp.") }, "subclassfeature6" : { name : "Fanatical Focus", source : [["X", 11]], minlevel : 6, description : desc([ "When I fail a saving throw while raging, I can reroll it and must use the new roll", "I can use this ability only once per rage" ]), usages : 1, recovery : "rage" }, "subclassfeature10" : { name : "Zealous Presence", source : [["X", 11]], minlevel : 10, description : desc([ "As a bonus action, I choose up to 10 creatures within 60 ft that can hear my battle cry", "These creatures gain adv. on attacks and saves until the start of my next turn" ]), usages : 1, recovery : "long rest", action : [["bonus action", ""]] }, "subclassfeature14" : { name : "Rage Beyond Death", source : [["X", 11]], minlevel : 14, description : desc([ "While raging, having 0 hit points doesn't knock me unconscious", "I still must make death saves, and I suffer the normal effects of taking damage", "I only die due to failed death saves if my rage ends while I'm at 0 HP" ]) } } }); // Add 3 subclasses for the Bard AddSubClass("bard", "college of glamour", { regExpSearch : /^(?=.*(college|bard|minstrel|troubadour|jongleur))(?=.*glamour).*$/i, subname : "College of Glamour", subnameShort: "Glamour", source : [["X", 14]], features : { "subclassfeature3" : { name : "Mantle of Inspiration", source : [["X", 14]], minlevel : 3, description : desc([ "As a bonus action, I expend one Bardic Inspiration die to aid those within 60 ft of me", "My Cha mod (min 1) of creatures that I can see and can see me gain temporary HP", "They can immediately use a reaction to move their speed, without opportunity attacks" ]), additional : levels.map(function (n) { return n < 3 ? "" : "1 inspiration die; " + (n < 5 ? 5 : n < 10 ? 8 : n < 15 ? 11 : 14) + " temp HP"; }), action : [["bonus action", ""]] }, "subclassfeature3.1" : { name : "Enthralling Performance", source : [["X", 14]], minlevel : 3, recovery : "short rest", usages : 1, description : desc([ "By performing for at least 1 minute, I can charm humanoids within 60 ft of me", "After the performance, my Cha mod (min 1) number of targets must make a Wis save", "On a fail, a target is charmed for 1 hour; If success, it doesn't knows I tried to charm it", "While charmed, the target idolizes me, hinders those opposing me, and avoids violence", "This lasts until a target takes damage, I attack it, or if it sees me attacking its allies" ]) }, "subclassfeature6" : { name : "Mantle of Majesty", source : [["X", 14]], minlevel : 6, recovery : "long rest", usages : 1, action : [["bonus action", ""]], description : desc([ "As a bonus action, I appear unearthly beautiful while I concentrate, up to 1 minute", "At the same time, and as a bonus action during, I can cast Command without a spell slot", "Creatures charmed by me automatically fail their saves against these Command spells" ]), spellcastingBonus : [{ name : "Mantle of Majesty", spells : ["command"], selection : ["command"], firstCol : 'oncelr' }], spellChanges : { "command" : { time : "1 bns", description : "1 crea save or follow one word command, e.g. approach, drop, flee, halt", changes : "Using my Mantle of Majesty class feature, I can cast Command as a bonus action once per long rest without using a spell slot, thus only affect a single target." } } }, "subclassfeature14" : { name : "Unbreakable Majesty", source : [["X", 14]], minlevel : 14, recovery : "short rest", usages : 1, action : [["bonus action", ""]], description : desc([ "As a bonus action, I gain a magically majestic presence for 1 min or until incapacitated", "During this, the first time a creature attacks me each turn they must make a Cha save", "If failed, it can't attack me this turn and must choose another target or lose its attack", "If successful, it can attack, but has disadv. on all saves against my spells on my next turn" ]) } } }); AddSubClass("bard", "college of swords", { regExpSearch : /^(?=.*(college|bard|minstrel|troubadour|jongleur))(?=.*\bswords?\b).*$/i, subname : "College of Swords", subnameShort: "Swords", source : [["X", 15]], attacks : [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], features : { "subclassfeature3" : { name : "Bonus Proficiencies", source : [["X", 15]], minlevel : 3, description : desc([ "I gain proficiency with medium armor and scimitars", "My bardic spellcasting focus can be any simple or martial weapon I'm proficient with" ]), armorProfs : [false, true, false, false], weaponProfs : [false, false, ["scimitar"]] }, "subclassfeature3.1" : { name : "Fighting Style", source : [["X", 15]], minlevel : 3, description : desc('Select a Fighting Style for the college of swords using the "Choose Feature" button above'), choices : ["Dueling", "Two-Weapon Fighting"], "dueling" : FightingStyles.dueling, "two-weapon fighting" : FightingStyles.two_weapon }, "subclassfeature3.2" : { name : "Blade Flourish", source : [["X", 15]], minlevel : 3, description : desc([ "When I take the Attack action on my turn, I gain bonus speed and special attack options", "I gain +10 ft to my walking speed until the end of the current turn", "Once per turn when I hit with a weapon attack, I can expend a Bardic Inspiration die", "The roll of that die is added to the weapon's damage, in addition to one of the following:", "\u2022 Defensive Flourish: the result is also added to my AC until the start of my next turn", "\u2022 Slashing Flourish: the extra damage is also dealt to any of my choosing in 5 ft of me", "\u2022 Mobile Flourish: the target is also pushed 5 plus the die result in feet away from me", " As a reaction after this push, I can move my speed to a space within 5 ft of the target" ]) }, "subclassfeature14" : { name : "Master Flourish", source : [["X", 16]], minlevel : 14, description : desc("When I do a Blade Flourish, I can use a d6 instead of expending a Bardic Inspiration die") } } }); AddSubClass("bard", "college of whispers", { regExpSearch : /^(?=.*(college|bard|minstrel|troubadour|jongleur))(?=.*whispers).*$/i, subname : "College of Whispers", subnameShort: "Whispers", source : [["X", 16]], features : { "subclassfeature3" : { name : "Psychic Blades", source : [["X", 16]], minlevel : 3, description : desc([ "When I hit a creature with a weapon attack, I can expend one use of Bardic Inspiration", "If so, the attack does extra psychic damage; I can do so only once per round, on my turn" ]), additional : levels.map(function (n) { return n < 3 ? "" : "1 Bardic Inspiration for +" + (n < 5 ? 2 : n < 10 ? 3 : n < 15 ? 5 : 8) + "d6 damage"; }) }, "subclassfeature3.1" : { name : "Words of Terror", source : [["X", 16]], minlevel : 3, recovery : "short rest", usages : 1, description : desc([ "By speaking privately with a humanoid for at least 1 minute, I can try to inspire terror", "After the talk, it must make a Wis save or be frightened of me or someone of my choice", "If the save is successful, the target doesn't know I tried to frighten it", "This lasts for 1 hour, or until it sees its allies or itself being attacked or damaged" ]) }, "subclassfeature6" : { name : "Mantle of Whispers", source : [["X", 16]], minlevel : 6, recovery : "short rest", usages : 1, action : [["reaction", ""]], description : desc([ "As a reaction when a humanoid dies within 30 ft of me, I can capture its shadow", "As an action, I can use it to make me look just like the dead person did while it was alive", "While disguised, I know general information about it and its memories, but not its secrets", "Others can see through the disguise with a Wis (Insight) check vs. my Cha (Deception) +5", "A shadow lasts until used or next long rest; The disguise ends as a bonus action or 1 hour" ]), action : [['action', 'Shadow Disguise (start)'], ['bonus action', 'Shadow Disguise (end)']] }, "subclassfeature14" : { name : "Shadow Lore", source : [["X", 16]], minlevel : 14, recovery : "long rest", usages : 1, action : [["action", ""]], description : desc([ "As an action, I whisper to a creature within 30 ft that can hear and understand me", "Only the target can hear me; It must make a Wis save or be charmed by me for 8 hours", "If failed, it thinks I know its most mortifying secret, otherwise it only hears mumbling", "While charmed, the target obeys my commands, but won't fight or risk its life for me", "This lasts for 8 hours, or until I or my allies attack it, damage it, or have it make a save" //"When the effect ends, the target has no idea why it was so afraid of me" ]) } } }); // Add 2 subclasses for the Cleric AddSubClass("cleric", "forge domain", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*(forge|forgery|blacksmith)).*$/i, subname : "Forge Domain", source : [["X", 18]], spellcastingExtra : ["identify", "searing smite", "heat metal", "magic weapon", "elemental weapon", "protection from energy", "fabricate", "wall of fire", "animate objects", "creation"], features : { "subclassfeature1" : { name : "Bonus Proficiency", source : [["X", 19]], minlevel : 1, description : desc("I gain proficiency with heavy armor and smith's tools"), armorProfs : [false, false, true, false], toolProfs : ["Smith's tools"] }, "subclassfeature1.1" : { name : "Blessing of the Forge", source : [["X", 19]], minlevel : 1, action : [["action", ""]], usages : 1, recovery : "long rest", description : desc([ "At the end of a long rest, I can imbue magic into a nonmagical weapon or armor", "It becomes magical: +1 AC if armor, or +1 to attack and damage rolls if a weapon", "This lasts until the end of my next long rest or until I die" ]) }, "subclassfeature2" : { name : "Channel Divinity: Artisan's Blessing", source : [["X", 19]], minlevel : 2, description : desc([ "With an hour-long ritual, I can craft a nonmagical item that is at least part metal", "Including: suit of armor, simple or martial weapon, set of tools, 10 pieces of ammunition", "The creation can be worth up to 100 gp, and I must expend metals of equal value to it", "The metals irretrievably coalesce into the new item, forming even nonmetal parts of it", "The item can be an exact duplicate of a nonmagical item if I possess the original", "The item comes into existence at the end of the hour in an unoccupied space within 5 ft" ]) }, "subclassfeature6" : { name : "Soul of the Forge", source : [["X", 19]], minlevel : 6, description : desc("I gain resistance to fire damage and +1 to AC while wearing medium or heavy armor"), dmgres : ["Fire"], extraAC : { mod : 1, text : "I gain a +1 bonus to AC while wearing Medium or Heavy armor.", stopeval : function (v) { return !v.mediumArmor && !v.heavyArmor; } } }, "subclassfeature8" : { name : "Divine Strike", source : [["X", 19]], minlevel : 8, description : desc("Once per turn, when I hit a creature with a weapon attack, I can do extra damage"), additional : levels.map(function (n) { if (n < 8) return ""; return "+" + (n < 14 ? 1 : 2) + "d8 fire damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && v.isWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.cleric.level < 14 ? 1 : 2) + 'd8 fire damage'; } }, "Once per turn, I can have one of my weapon attacks that hit do extra fire damage." ] } }, "subclassfeature17" : { name : "Saint of Forge and Fire", source : [["X", 19]], minlevel : 17, description : desc([ "I gain immunity to fire damage", "When wearing heavy armor, I'm resistant to nonmagical bludg./piercing/slashing damage" ]), savetxt : { immune : ["fire"] }, dmgres : [["Bludgeoning", "Bludg. (nonmagical)"], ["Piercing", "Pierc. (nonmagical)"], ["Slashing", "Slash. (nonmagical)"]] } } }); AddSubClass("cleric", "grave domain", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*grave).*$/i, subname : "Grave Domain", source : [["X", 19]], spellcastingExtra : ["bane", "false life", "gentle repose", "ray of enfeeblement", "revivify", "vampiric touch", "blight", "death ward", "antilife shell", "raise dead"], features : { "subclassfeature1" : { name : "Circle of Mortality", source : [["X", 20]], minlevel : 1, action : [["bonus action", ""]], description : desc([ "Spells I cast to heal a living creature at 0 HP have their dice count as their max result", "I learn Spare the Dying, which I can cast as a bonus action with a range of 30 ft" ]), spellcastingBonus : [{ name : "Circle of Mortality", spells : ["spare the dying"], selection : ["spare the dying"], firstCol : 'atwill' }], spellChanges : { "spare the dying" : { time : "1 bns", range : "30 ft", changes : "I can cast Spare the Dying as a bonus action instead of an action, and it has a range of 30 ft instead of touch." } } }, "subclassfeature1.1" : { name : "Eyes of the Grave", source : [["X", 20]], minlevel : 1, usages : typePF ? "Wisdom mod per " : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest", description : desc([ "As an action, I sense undead within 60 ft that aren't protected from divination magic", "Until the end of my next turn, I sense the location of any undead not behind total cover" ]) }, "subclassfeature2" : { name : "Channel Divinity: Path to the Grave", source : [["X", 20]], minlevel : 2, action : [["action", ""]], description : desc([ "As an action, I can curse a creature within 30 ft until the end of my next turn", "It is vulnerable to all the damage from the next attack by me or my allies that hits it" ]) }, "subclassfeature6" : { name : "Sentinel at Death's Door", source : [["X", 20]], minlevel : 6, usages : typePF ? "Wisdom mod per " : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest", action : [["reaction", ""]], description : desc("As a reaction, I turn a critical hit to me or an ally I see within 30 ft to a normal hit") }, "subclassfeature8" : { name : "Potent Spellcasting", source : [["X", 20]], minlevel : 8, description : desc("I add my Wisdom modifier to the damage I deal with my cleric cantrips"), calcChanges : GenericClassFeatures["potent spellcasting"].calcChanges }, "subclassfeature17" : { name : "Keeper of Souls", source : [["X", 20]], minlevel : 17, description : desc([ "Once per round, if I'm not incapacitated, I can manipulate the energy of the dying", "When an enemy I can see dies within 60 ft of me, I or an ally within 60 ft regain HP", "The HP regained is equal to the enemy's number of Hit Dice" ]) } } }); // Add 2 subclasses for the Druid AddSubClass("druid", "circle of dreams", { regExpSearch : /^(?=.*(druid|shaman))(?=.*\bdreams\b).*$/i, subname : "Circle of Dreams", subnameShort: "Dreams", source : [["X", 22]], features : { "subclassfeature2" : { name : "Balm of the Summer Court", source : [["X", 22]], minlevel : 2, description : desc([ "I have a pool of fey energy represented by a number of d6s equal to my druid level", "As a bonus action, I can spend dice to heal an ally within 120 ft of me that I can see", "I can spend up to half my druid level worth of dice from the pool at once", "The ally heals an amount equal to the total rolled and gains 1 temp HP per die spent" ]), usages : levels.map(function (n) { return n < 2 ? "" : n + "d6 per "; }), recovery : "long rest", action : [["bonus action", ""]] }, "subclassfeature6" : { name : "Hearth of Moonlight and Shadow", source : [["X", 22]], minlevel : 6, description : desc([ "At the start of a rest, I can create a 30-ft radius invisible magical sphere", "The sphere extends from a point in space I touch, but doesn't extend through total cover", "Within this area, my allies and I gain +5 on Wis (Perception) and Dex (Stealth) checks", "Also, any light from open flames that are in the sphere is invisible from outside the area", "This effect lasts until the end of the rest or when I leave the sphere" ]) }, "subclassfeature10" : { name : "Hidden Paths", source : [["X", 22]], minlevel : 10, description : desc([ "As a bonus action, I can teleport myself up to 60 ft to a spot I can see", "As an action, I can teleport a willing ally I touch up to 30 ft to a spot I can see" ]), usages : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest", action : [["bonus action", ""], ['action', ' (on ally)']] }, "subclassfeature14" : { name : "Walker in Dreams", source : [["X", 23]], minlevel : 14, usages : 1, recovery : "long rest", description : desc([ "When I finish a short rest, I can cast either Dream, Scrying, or Teleportation Circle", "This doesn't require a spell slot or material components; Dream uses me as the messenger", "Teleportation Circle connects to the last place I finished a long rest, if on the same plane" ]), spellcastingBonus : [{ name : "Walker in Dreams", spells : ["dream"], selection : ["dream"], firstCol : 'oncelr' }, { name : "Walker in Dreams", spells : ["scrying"], selection : ["scrying"], firstCol : 'oncelr' }, { name : "Walker in Dreams", spells : ["teleportation circle"], selection : ["teleportation circle"], firstCol : 'oncelr' }], spellChanges : { "dream" : { components : "V,S", compMaterial : "", changes : "Using Walker in Dreams, I can cast either Dream, Scrying, or Teleportation Circle once per long rest without requiring material components." }, "scrying" : { components : "V,S", compMaterial : "", description : "1 crea save or sensor follows it around; or create sensor in familiar location; see book", changes : "Using Walker in Dreams, I can cast either Dream, Scrying, or Teleportation Circle once per long rest without requiring material components." }, "teleportation circle" : { components : "V", compMaterial : "", description : "Create a circle to teleport to the place where I finished my last long rest, if on the same plane; see book", changes : "Using Walker in Dreams, I can cast either Dream, Scrying, or Teleportation Circle once per long rest without requiring material components.\n \u2022 The teleportation circle brings me back to the place where I finished my last long rest." } } } } }); AddSubClass("druid", "circle of the shepherd", { regExpSearch : /^(?=.*(druid|shaman))(?=.*shepherd).*$/i, subname : "Circle of the Shepherd", subnameShort: "Shepherd", source : [["X", 23]], features : { "subclassfeature2" : { name : "Speech of the Woods", source : [["X", 23]], minlevel : 2, description : desc([ "I can talk with beasts, they understand me and I them, to the limit of their intelligence", "This doesn't automatically make me friends with all beasts; Additionally, I learn Sylvan" ]), languageProfs : ["Sylvan"] }, "subclassfeature2.1" : { name : "Spirit Totem", source : [["X", 23]], minlevel : 2, description : desc([ "As a bonus action, I can summon, or move, a spirit to a point I can see within 60 ft", "It is a spectral form of a Bear, Hawk, or Unicorn (my choice), with a 30-ft radius aura", "It is incorporeal, immobile, doesn't counts as a creature or object, and persists for 1 min", "The spirit persists for 1 minute or until I'm incapacitated", "\u2022 Bear: my allies and I, if in the aura, immediately gain 5 + my druid level in temp HP", " While in the aura, my allies and I gain advantage on Strength checks and saves", "\u2022 Hawk: As a reaction, I can grant advantage on an attack vs. a target in the aura", " While in the aura, my allies and I gain advantage on Wisdom (Perception) checks", "\u2022 Unicorn: my allies and I gain advantage on ability checks to detect targets in the aura", " When I cast a healing spell with a spell slot, allies in the aura heal my druid level in HP" ]), usages : 1, recovery : "short rest", action : [["bonus action", ""]] }, "subclassfeature6" : { name : "Mighty Summoner", source : [["X", 24]], minlevel : 6, description : desc("Beasts or Fey I summon with spells get +2 HP per HD and their attacks count as magical"), calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { switch (spellKey) { case "conjure animals" : case "conjure fey" : spellObj.description += "; each +2 HP/HD, magical natural attacks"; return true; case "conjure woodland beings" : spellObj.description = spellObj.description.replace(/fey.*/, "fey; obeys commands if its align. agrees; breaks free if break conc.; +2 HP/HD, magic atks"); return true; } }, "When I use a spell that summons beast or fey creatures, those summons have +2 HP per HD and their attacks count as magical." ] } }, "subclassfeature10" : { name : "Guardian Spirit", source : [["X", 24]], minlevel : 10, description : desc("When a Beast or Fey that I summoned ends its turn in my Spirit Totem aura, it heals"), additional : levels.map(function (n) { return n < 10 ? "" : "heals " + Math.floor(n / 2) + " HP"; }) }, "subclassfeature14" : { name : "Faithful Summons", source : [["X", 24]], minlevel : 14, description : desc([ "When I am reduced to 0 HP or incapacitated against my will, I can cast Conjure Animals", "This is done as if using a 9th-level spell slot to summon 4 beast of my choice up to CR 2", "They appear within 20 ft of me, last 1 hour, and protect me from harm and attack foes" ]), usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Faithful Summons", spells : ["conjure animals"], selection : ["conjure animals"], firstCol : "oncelr" }], spellChanges : { "conjure animals" : { nameShort : "Conjure Animals (level 9)", range : "20 ft", duration : "1 h", description : "Summon 4 CR 2 beasts; protect me from harm and attack foes", changes : "Using my Faithful Summons class feature when I'm reduced to 0 HP, I can cast Conjure Animals as if using a 9th-level spell slot. This then summons 4 beast of my choice up to CR 2 within 20 ft of me without needing concentration." } } } } }); // Add 3 subclasses for the Fighter AddSubClass("fighter", "arcane archer", { regExpSearch : /^(?=.*arcane)(?=.*archer).*$/i, subname : "Arcane Archer", source : [["X", 28]], fullname : "Arcane Archer", abilitySave : 4, features : { "subclassfeature3" : { name : "Arcane Archer's Lore", source : [["X", 28]], minlevel : 3, description : desc([ "I gain proficiency with either the Arcana or Nature skill", "I also learn either the Prestidigitation or the Druidcraft cantrip" ]), skillstxt : "Arcana or Nature", spellcastingBonus : [{ name : "Arcane Archer's Lore", spells : ["druidcraft", "prestidigitation"] }] }, "subclassfeature3.1" : { name : "Arcane Shot", source : [["X", 28]], minlevel : 3, description : desc([ "I can unleash magical effects when I fire an arrow from a short- or longbow", "I can use this once per turn as part of the Attack action, after an attack hits", "I know a number of Arcane Shot Options and learn additional at certain levels", 'Use the "Choose Feature" button above to add Arcane Shots Options to the third page' ]), usages : 2, recovery : "short rest", additional : levels.map( function(n) { return n < 3 ? "" : (n < 7 ? 2 : n < 10 ? 3 : n < 15 ? 4 : n < 18 ? 5 : 6) + " options known"; }), extraname : "Arcane Shot Option", extrachoices : ["Banishing Arrow [Abjuration]", "Beguiling Arrow [Enchantment]", "Bursting Arrow [Evocation]", "Enfeebling Arrow [Necromancy]", "Grasping Arrow [Conjuration]", "Piercing Arrow [Transmutation]", "Seeking Arrow [Divination]", "Shadow Arrow [Illusion]"], extraTimes : levels.map(function (n) { return n < 3 ? 0 : n < 7 ? 2 : n < 10 ? 3 : n < 15 ? 4 : n < 18 ? 5 : 6; }), "banishing arrow [abjuration]" : { name : "Banishing Arrow [Abjuration]", source : [["X", 29]], description : desc([ "The target makes a Cha save or is banished to the Feywild until the end of its next turn", "While banished, its speed is 0 and is incapacitated; It re-appearing in the same spot", "When I reach 18th level, this Arcane Shot Option also does an extra 2d6 force damage" ]), additional : levels.map( function(n) { return n < 18 ? "" : "+2d6 force damage"; }) }, "beguiling arrow [enchantment]" : { name : "Beguiling Arrow [Enchantment]", source : [["X", 29]], description : desc([ "The target takes extra psychic damage and must succeed on a Wisdom save", "If failed, it is charmed by one of my allies within 30 ft of it that I choose", "This lasts until my next turn starts or until the chosen ally attacks the target in any way" ]), additional : levels.map( function(n) { return n < 3 ? "" : "+" + (n < 18 ? 2 : 4) + "d6 damage"; }) }, "bursting arrow [evocation]" : { name : "Bursting Arrow [Evocation]", source : [["X", 29]], description : desc("The target, in addition to the shot, and all creatures within 10 ft of it take damage"), additional : levels.map( function(n) { return n < 3 ? "" : "+" + (n < 18 ? 2 : 4) + "d6 force damage"; }) }, "enfeebling arrow [necromancy]" : { name : "Enfeebling Arrow [Necromancy]", source : [["X", 29]], description : desc([ "The target takes extra necrotic damage and must make a Constitution save", "If failed, the damage of the target's attacks are halved until the start of my next turn" ]), additional : levels.map( function(n) { return n < 3 ? "" : "+" + (n < 18 ? 2 : 4) + "d6 necrotic damage"; }) }, "grasping arrow [conjuration]" : { name : "Grasping Arrow [Conjuration]", source : [["X", 29]], description : desc([ "The target takes extra poison damage as brambles wrap around it for 1 minute", "The brambles give it -10 ft speed and do it slashing damage every round it moves", "These can be removed by it or another as an action with Strength (Athletics) vs. my DC" ]), additional : levels.map( function(n) { return n < 3 ? "" : (n < 18 ? 2 : 4) + "d6 poison/slash. damage"; }) }, "piercing arrow [transmutation]" : { name : "Piercing Arrow [Transmutation]", source : [["X", 29]], description : desc([ "With this I don't roll for the attack, but shoot the arrow in a 30-ft long, 1-ft wide line", "It passes through objects, ignoring cover, but all creatures in the area take damage", "The damage is the same as a normal hit from my attack, plus extra piercing damage", "A creature can make a Dexterity save to reduce the damage by half" ]), additional : levels.map( function(n) { return n < 3 ? "" : "+" + (n < 18 ? 1 : 2) + "d6 piercing damage"; }) }, "seeking arrow [divination]" : { name : "Seeking Arrow [Divination]", source : [["X", 30]], description : desc([ "With this I don't roll for the attack, but I choose a target I have seen in the last minute", "The seeking arrow moves around corners, obstacles, and ignores cover to hit the target", "It is hit if it is within the weapon's range and there is a path for the arrow to get to it", "The target takes the full damage of the attack plus extra force damage", "It can make a Dexterity save to reduce the damage by half; If failed, I know its location" ]), additional : levels.map( function(n) { return n < 3 ? "" : "+" + (n < 18 ? 1 : 2) + "d6 force damage"; }) }, "shadow arrow [illusion]" : { name : "Shadow Arrow [Illusion]", source : [["X", 30]], description : desc([ "The target takes extra psychic damage and must succeed on a Wisdom save", "If failed, the target can't see anything beyond 5 ft until the end of my next turn" ]), additional : levels.map( function(n) { return n < 3 ? "" : "+" + (n < 18 ? 2 : 4) + "d6 psychic damage"; }) } }, "subclassfeature7" : { name : "Magic Arrow", source : [["X", 28]], minlevel : 7, description : desc("Whenever I fire a nonmagical arrow from a short- or longbow, I can make it magical") }, "subclassfeature7.1" : { name : "Curving Shot", source : [["X", 28]], minlevel : 7, description : desc([ "Once per turn when I miss with a magic arrow, I can use a bonus action to redirect it", "I reroll the attack against a different target within 60 ft of the original target" ]), action : [["bonus action", ""]] }, "subclassfeature15" : { name : "Ever-Ready Shot", source : [["X", 28]], minlevel : 15, description : desc("I regain one use of Arcane Shot if I have no more remaining when I roll initiative") } } }); AddSubClass("fighter", "cavalier", { regExpSearch : /cavalier/i, subname : "Cavalier", source : [["X", 30]], fullname : "Cavalier", abilitySave : 1, features : { "subclassfeature3" : { name : "Bonus Proficiency", source : [["X", 30]], minlevel : 3, description : desc([ "I gain proficiency with Animal Handling, History, Insight, Performance, or Persuasion", 'Alternatively, I learn one language; Use the "Choose Feature" button above for this' ]), choices : ["Language proficiency", "Skill proficiency: Animal Handling, History, Insight, Performance, or Persuasion"], "language proficiency" : { name : "Bonus Proficiency", description : desc("I learn one language of my choice"), languageProfs : [1] }, "skill proficiency: animal handling, history, insight, performance, or persuasion" : { name : "Bonus Proficiency", description : desc("I gain proficiency with Animal Handling, History, Insight, Performance, or Persuasion"), skillstxt : "Choose one from: Animal Handling, History, Insight, Performance, or Persuasion" } }, "subclassfeature3.1" : { name : "Born in the Saddle", source : [["X", 30]], minlevel : 3, description : desc([ "I have advantage on saves to avoid falling off my mount, and land on my feet if I fail", "Mounting or dismounting a creature costs me only 5 ft of movement instead of half" ]), savetxt : { adv_vs : ["falling off my mount"] } }, "subclassfeature3.2" : { name : "Unwavering Mark", source : [["X", 30]], minlevel : 3, description : desc([ "If I hit a creature with a melee weapon attack, I mark it until the end of my next turn", "While it is within 5 ft of me, a marked target has disadv. on attacks not directed at me", "If it damages anybody but me, I can make a special melee attack vs. it in my next turn", "This takes a bonus action, but has adv. and adds half my fighter level to the damage", "A mark ends early if I'm incapacitated, die, or somebody else marks the target" ]), usages : "Strength modifier per ", usagescalc : "event.value = Math.max(1, What('Str Mod'));", recovery : "long rest", additional : levels.map(function (n) { return n < 3 ? "" : "+" + Math.floor(n/2) + " damage"; }), calcChanges : { atkCalc : [ function (fields, v, output) { if (v.isMeleeWeapon && classes.known.fighter && classes.known.fighter.level > 2 && (/\b(unwavering.?mark|marked)\b/i).test(v.WeaponTextName)) { output.extraDmg += Math.floor(classes.known.fighter.level / 2); }; }, "If I include the words 'Unwavering Mark' or 'Marked' in the name of a melee weapon, it gets half my fighter level added to its Damage." ] } }, "subclassfeature7" : { name : "Warding Maneuver", source : [["X", 30]], minlevel : 7, description : desc([ "As a reaction when I or a creature within 5 ft is hit, I can try to fend off the strike", "I add 1d8 to the target's AC; If the attack still hits, the target has resistance against it", "I can only do this while wielding a melee weapon or a shield" ]), usages : "Constitution modifier per ", usagescalc : "event.value = Math.max(1, What('Con Mod'));", recovery : "long rest", action : [["reaction", ""]], }, "subclassfeature10" : { name : "Hold the Line", source : [["X", 30]], minlevel : 10, description : desc([ "Creatures provoke opportunity attacks when moving 5 ft or more while within my reach", "If I hit an opportunity attack, the target's speed is reduced to 0 until the end of the turn" ]) }, "subclassfeature15" : { name : "Ferocious Charger", source : [["X", 31]], minlevel : 15, description : desc([ "If I hit a creature after moving 10 ft in a straight line, it must make a Strength save", "If failed, the target is knocked prone; I can do this only once per turn" ]) }, "subclassfeature18" : { name : "Vigilant Defender", source : [["X", 31]], minlevel : 18, description : desc([ "I can make opportunity attacks without using my reaction", "I can do this only once on every creature's turn, except on my own turn", "I can't do this on the same turn that I use my normal reaction" ]) } } }); AddSubClass("fighter", "samurai", { regExpSearch : /samurai/i, subname : "Samurai", source : [["X", 31]], fullname : "Samurai", features : { "subclassfeature3" : { name : "Bonus Proficiency", source : [["X", 31]], minlevel : 3, description : desc([ "I gain proficiency with History, Insight, Performance, or Persuasion", 'Alternatively, I learn one language; Use the "Choose Feature" button above for this' ]), choices : ["Language proficiency", "Skill proficiency: History, Insight, Performance, or Persuasion"], "language proficiency" : { name : "Bonus Proficiency", description : desc("I learn one language of my choice"), languageProfs : [1] }, "skill proficiency: history, insight, performance, or persuasion" : { name : "Bonus Proficiency", description : desc("I gain proficiency with History, Insight, Performance, or Persuasion"), skillstxt : "Choose one from: History, Insight, Performance, or Persuasion" } }, "subclassfeature3.1" : { name : "Fighting Spirit", source : [["X", 31]], minlevel : 3, description : desc([ "As a bonus action, I can give myself advantage on weapon attacks and temporary HP", "This advantage on weapon attack rolls lasts until the end of my current turn" ]), recovery : "long rest", usages : 3, additional : levels.map(function (n) { return n < 3 ? "" : (n < 10 ? 5 : n < 15 ? 10 : 15) + " temporary HP"; }), action : [["bonus action", ""]] }, "subclassfeature7" : { name : "Elegant Courtier", source : [["X", 31]], minlevel : 7, description : desc([ "I can add my Wisdom modifier to any Charisma (Persuasion) checks I make", "I gain proficiency with Wis saves, or if I'm already proficient, either Int or Cha saves" ]), saves : ["Wis"], addMod : { type : "skill", field : "Pers", mod : "max(Wis|0)", text : "I can add my Wisdom modifier to any Charisma (Persuasion) checks I make." } }, "subclassfeature10" : { name : "Tireless Spirit", source : [["X", 31]], minlevel : 10, description : desc("I regain one use of Fighting Spirit if I have no more remaining when I roll initiative") }, "subclassfeature15" : { name : "Rapid Strike", source : [["X", 31]], minlevel : 15, description : desc([ "With the Attack action, I can forgo advantage on one attack to make one extra attack", "This extra attack is part of the same action; I can do this only once per turn" ]) }, "subclassfeature18" : { name : "Strength Before Death", source : [["X", 31]], minlevel : 18, description : desc([ "If I'm reduced to 0 HP but not killed outright, I can delay falling unconscious", "I then immediately take a bonus turn, interrupting the current turn", "While I'm at 0 HP, I suffer damage normally and die if I have 3 failed death saves", "If I'm still at 0 HP at the end of this bonus turn, I fall unconscious" ]), recovery : "long rest", usages : 1 } } }); // Add 3 subclasses for the Monk AddSubClass("monk", "way of the drunken master", { regExpSearch : /^((?=.*drunken)(?=.*master))|((?=.*drunk)((?=.*(monk|monastic))|((?=.*martial)(?=.*(artist|arts)))|((?=.*spiritual)(?=.*warrior)))).*$/i, subname : "Way of the Drunken Master", subnameShort: "Drunken Master", fullname : "Drunken Master", source : [["X", 33]], features : { "subclassfeature3" : { name : "Bonus Proficiencies", source : [["X", 34]], minlevel : 3, description : desc("I gain proficiency with the Performance skill and brewer's supplies"), skills : ["Performance"], toolProfs : ["Brewer's supplies"] }, "subclassfeature3.1" : { name : "Drunken Technique", source : [["X", 34]], minlevel : 3, description : desc("When using Flurry of Blows, I gain the benefits of a Disengage and +10 ft speed this turn") }, "subclassfeature6" : { name : "Tipsy Sway", source : [["X", 34]], minlevel : 6, description : desc("1 ki point: as a reaction if missed in melee, attacker instead hits other I see within 5 ft"), additional : "Standing up from prone costs only 5 ft", action : [["reaction", ""]] }, "subclassfeature11" : { name : "Drunkard's Luck", source : [["X", 34]], minlevel : 11, description : desc("By spending 2 ki points, I can remove disadv. from an ability check, attack roll, or save"), additional : "2 ki points" }, "subclassfeature17" : { name : "Intoxicated Frenzy", source : [["X", 34]], minlevel : 17, description : desc("I can make 3 extra attacks with Flurry of Blows if each is used on a different target") } } }); // Create the Kensei and its weapon options last, so we benefit of all possible weapons that were added RunFunctionAtEnd(function () { var theKenseiSubclassName = AddSubClass("monk", "way of the kensei", { regExpSearch : /kensei/i, subname : "Way of the Kensei", subnameShort: "Kensei", fullname : "Kensei", source : [["X", 34]], features : { "subclassfeature3" : { name : "Path of the Kensei", source : [["X", 34]], minlevel : 3, description : desc([ "I gain proficiency with either calligrapher's supplies or painter's supplies", "Some weapons, that don't have the heavy or special property, are kensei weapons for me", "At least one ranged and one melee weapon, more at higher levels (longbow does qualify)", "With these: proficient, count as a monk weapons, special bonuses depending on type held:", "\u2022 Melee: if I do unarmed strike during an Attack action, +2 AC until my next turn starts", "\u2022 Ranged: as a bonus action, ranged weapon attacks deal +1d4 damage in current turn" ]), action : [["bonus action", " (with ranged)"]], additional : levels.map( function(n) { return n < 3 ? "" : (n < 6 ? 2 : n < 11 ? 3 : n < 17 ? 4 : 5) + " kensei weapons"; }), toolProfs : ["calligrapher's or painter's supplies"], extraname : "Kensei Weapon", extrachoices : [], // add these dynamically, see below extraTimes : levels.map( function(n) { return n < 3 ? 0 : n < 6 ? 2 : n < 11 ? 3 : n < 17 ? 4 : 5; }), calcChanges : { atkAdd : [ function (fields, v) { var theKenseiWeapons = GetFeatureChoice("class", "monk", "subclassfeature3", true); if (theKenseiWeapons.indexOf(v.baseWeaponName) != -1 || ((/kensei/i).test(v.WeaponTextName) && !v.theWea.special && (!(/heavy|special/i).test(fields.Description) || v.baseWeaponName === 'longbow'))) { v.theWea.monkweapon = true; v.theWea.kenseiweapon = true; if (v.isRangedWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'As bonus action with Attack action, +1d4 damage'; }; fields.Proficiency = true; }; }, "For the weapons that I select using the \"Choose Feature\" button on the second page or when I include the word 'Kensei' in the name of a weapon that doesn't have the Heavy or Special attribute, or that is a longbow, that weapon gains the same benefits as any other 'Monk Weapon'.\nIn addition, with ranged 'Kensei Weapons', I can take a bonus action to have that hit, and any other hit after that as part of the same action, do +1d4 damage.", 1 ] } }, "ki-empowered strikes" : { name : "One with the Blade", source : [["X", 34]], minlevel : 6, description : desc("My unarmed strikes and kensei weapon attacks count as magical"), calcChanges : { atkAdd : [ function (fields, v) { if (!v.isSpell && !v.thisWeapon[1] && !v.theWea.isMagicWeapon && !(/counts as( a)? magical/i).test(fields.Description) && (v.baseWeaponName === "unarmed strike" || v.theWea.kenseiweapon)) { fields.Description += (fields.Description ? '; ' : '') + 'Counts as magical'; }; }, "My unarmed strikes and any Kensei Weapons count as magical for overcoming resistances and immunities." ] }, "deft strike" : { name : "Deft Strike", extraname : "Way of the Kensei 6", source : [["X", 35]], description : desc("Once per turn when I hit with a kensei weapon, I can do a martial arts die extra damage"), additional : "1 ki point" }, "sharpen the blade" : { name : "Sharpen the Blade", extraname : "Way of the Kensei 11", source : [["X", 35]], description : desc([ "As a bonus action, I can grant my kensei weapon a bonus to attack and damage rolls", "This bonus is equal to the number of ki points I spend and doesn't stack with magic", "This lasts for 1 minute or until I use this feature again" ]), additional : "1 to 3 ki points", action : [["bonus action", ""]] }, autoSelectExtrachoices : [{ extrachoice : "deft strike" }, { extrachoice : "sharpen the blade", minlevel : 11 }] }, "subclassfeature17" : { name : "Unerring Accuracy", source : [["X", 35]], minlevel : 17, description : desc("Once per turn, if I miss a monk weapon attack on my turn, I can reroll the attack roll") } } }); var itsFea = ClassSubList[theKenseiSubclassName].features.subclassfeature3; for (var weapon in WeaponsList) { var aWea = WeaponsList[weapon]; // skip attacks that are not simple or martial weapons, that have the heavy or special property, are magic weapons, or those that are spells or cantrips if (weapon !== "longbow" && (aWea.isMagicWeapon || !(/simple|martial/i).test(aWea.type) || (/heavy|special/i).test(aWea.description) || aWea.special || (/improvised|gear|spell|cantrip/i).test(aWea.list))) continue; itsFea.extrachoices.push(aWea.name); itsFea[aWea.name.toLowerCase()] = { name : aWea.name, description : "", source : aWea.source, weaponProfs : [false, false, [weapon]], weaponsAdd : { select : [aWea.name] }, submenu : ((/simple/i).test(aWea.type) ? "\x1BSimple weapon, " : "Martial weapon, ") + ((/^(?!.*melee).*\d+.*$/i).test(aWea.range) ? "ranged" : "melee"), prereqeval : 'testSource("' + weapon + '", WeaponsList["' + weapon + '"], "weapExcl") ? "skip" : true;' } } }); // dupl_start if (!ClassSubList["monk-way of the sun soul"] && (!SourceList.S || SourceList.S.abbreviation.toLowerCase() !== "scag")) { // the Way of the Sun Soul subclass is identical to the one in SCAG, so only add if it that one doesn't exist yet AddSubClass("monk", "way of the sun soul", { regExpSearch : /^(?=.*\bsun)(?=.*\b(soul|spirit))((?=.*(warrior|monk|monastic))|(((?=.*martial)(?=.*(artist|arts)))|((?=.*spiritual)(?=.*warrior)))).*$/i, subname : "Way of the Sun Soul", subnameShort: "Sun Soul", source : [["S", 131], ["X", 35]], features : { "subclassfeature3" : { name : "Radiant Sun Bolt", source : [["S", 131], ["X", 35]], minlevel : 3, additional : "1 ki point for 2 extra attacks", description : desc([ "I gain a ranged spell attack that I can use as an attack in the Attack action", "If I do this and spend 1 ki point, I can make 2 of these attacks as a bonus action" ]), action : [["bonus action", " (2\xD7 with Attack action)"]], weaponOptions : [{ regExpSearch : /^(?=.*radiant)(?=.*(sun|light))(?=.*bolt).*$/i, name : "Radiant Sun Bolt", source : [["S", 131], ["X", 35]], ability : 2, type : "Spell", damage : [1, 4, "radiant"], range : "30 ft", description : "If used in an Attack action, spend 1 ki point to use it twice as a bonus action", monkweapon : true, abilitytodamage : true, selectNow : true }], "searing arc strike" : { name : "Searing Arc Strike", extraname : "Way of the Sun Soul 6", source : [["S", 131], ["X", 35]], description : desc([ "After taking the Attack action, I can cast Burning Hands as a bonus action [PHB 220]", "For every additional ki point I spend, Burning hands is cast at 1 higher spell level", "The maximum total ki points I can spend for this (including the 2) is half my Monk level" ]), additional : levels.map(function (n) { if (n < 3) return ""; var xtrKi = Math.max(0,Math.floor(n/2) - 2); return "2 ki points + max " + xtrKi + " ki point" + (xtrKi == 1 ? "" : "s"); }), action : [["bonus action", " (after Attack action)"]], spellcastingBonus : [{ name : "Searing Arc Strike", spells : ["burning hands"], selection : ["burning hands"], firstCol : 2 }], spellFirstColTitle : "Ki", spellChanges : { "burning hands" : { time : "1 bns", description : "3d6+1d6/extra Ki Fire dmg; save halves; unattended flammable objects ignite (ki max 1/2 monk lvl)", changes : "After I use the Attack action, I can cast Burning Hands as a bonus action by spending 2 ki points. I can even spend additional ki points to increase its spell level. The total amount of ki points I can spend on it is half my monk level." } } }, autoSelectExtrachoices : [{ extrachoice : "searing arc strike", minlevel : 6 }] }, "subclassfeature11" : { name : "Searing Sunburst", source : [["S", 131], ["X", 35]], minlevel : 11, description : desc([ "As an action, anyone in a 20-ft radius light on a point within 150 ft makes a Con save", "If failed and not behind opaque total cover, take 2d6 (+ 2d6/ki point) radiant damage" ]), action : [["action", ""]], additional : "0 ki points + max 3 ki points", weaponOptions : [{ regExpSearch : /^(?=.*searing)(?=.*sunburst).*$/i, name : "Searing Sunburst", source : [["S", 131], ["X", 35]], ability : 5, type : "Spell", damage : [2, 6, "radiant"], range : "150 ft", description : "All in 20-ft radius; Con save - success no damage; +2d6 damage per ki point (max +6d6)", abilitytodamage : false, dc : true, useSpellMod : "monk", selectNow : true }] }, "subclassfeature17" : { name : "Sun Shield", source : [["S", 131], ["X", 35]], minlevel : 17, description : desc([ "As a reaction, when I'm hit by a melee attack, I can deal 5 + Wis mod radiant damage", "I can only do this while my light aura is on; I can turn it on/off as a bonus action" ]), action : [["bonus action", " (start/stop)"], ["reaction", " (hit in melee)"]], additional : "30-ft rad bright + 30-ft dim light" } } }); }; // dupl_end // Add 2 subclasses for the Paladin AddSubClass("paladin", "oath of conquest", { regExpSearch : /^((?=.*(knight tyrant|iron mongers))|((?=.*(conquest|tyranny|tyrant))(((?=.*paladin)|((?=.*(exalted|sacred|holy|divine))(?=.*(knight|fighter|warrior|warlord|trooper))))))).*$/i, subname : "Oath of Conquest", subnameShort: "Conquest", source : [["X", 37]], features : { "subclassfeature3" : { name : "Channel Divinity: Conquering Presence", source : [["X", 38]], minlevel : 3, description : desc([ "As an action, all creatures of my choice within a 30-ft radius must make a Wisdom save", "If failed, a target is frightened for 1 minute; It can save again at the end of each turn" ]), action : [["action", ""]], spellcastingExtra : ["armor of agathys", "command", "hold person", "spiritual weapon", "bestow curse", "fear", "dominate beast", "stoneskin", "cloudkill", "dominate person"] }, "subclassfeature3.1" : { name : "Channel Divinity: Guided Strike", source : [["X", 38]], minlevel : 3, description : desc("When I make an attack roll, I can add a +10 bonus to the roll after seeing the d20 roll") }, "subclassfeature7" : { name : "Aura of Conquest", source : [["X", 38]], minlevel : 7, description : desc([ "Creatures that are frightened of me have their speed reduced to 0 while in my aura", "They also take psychic damage whenever they start theirs turn within my aura" ]), additional : levels.map(function (n) { if (n < 7) return ""; return (n < 18 ? 10 : 30) + "-foot aura; " + Math.floor(n / 2) + " psychic damage"; }) }, "subclassfeature15" : { name : "Scornful Rebuke", source : [["X", 38]], minlevel : 15, description : desc([ "Whenever I'm hit with an attack while I'm not incapacitated, the attacker takes damage", "This is psychic damage equal to my Charisma modifier (minimum of 1)" ]) }, "subclassfeature20" : { name : "Invincible Conqueror", source : [["X", 38]], minlevel : 20, description : desc([ "As an action, I can gain the following benefits for 1 minute:", " - I have resistance to all damage", " - I can make an additional attack as part of my Attack action", " - My melee weapons score critical hits on a roll of 19 or 20" ]), recovery : "long rest", usages : 1, action : [["action", ""]] } } }); AddSubClass("paladin", "oath of redemption", { regExpSearch : /^((?=.*redeemer)|((?=.*redemption)(((?=.*paladin)|((?=.*(exalted|sacred|holy|divine))(?=.*(knight|fighter|warrior|warlord|trooper))))))).*$/i, subname : "Oath of Redemption", subnameShort: "Redemption", source : [["X", 38]], features : { "subclassfeature3" : { name : "Channel Divinity: Emissary of Peace", source : [["X", 39]], minlevel : 3, description : desc("As a bonus action, I grant myself +5 on Charisma (Persuasion) checks for 10 minutes"), action : [["bonus action", ""]], spellcastingExtra : ["sanctuary", "sleep", "calm emotions", "hold person", "counterspell", "hypnotic pattern", "otiluke's resilient sphere", "stoneskin", "hold monster", "wall of force"] }, "subclassfeature3.1" : { name : "Channel Divinity: Rebuke the Violent", source : [["X", 39]], minlevel : 3, description : desc([ "As a reaction after a creature within 30 ft attacks and damages another, I can rebuke it", "It takes the same damage as it dealt but as radiant damage, with a Wis save to halve it" ]), action : [["reaction", ""]] }, "subclassfeature7" : { name : "Aura of the Guardian", source : [["X", 39]], minlevel : 7, description : desc([ "As a reaction when an ally within my aura takes damage, I instead take the damage", "This damage can't be reduced in any way; Other effects might still apply to my ally" ]), additional : levels.map(function (n) { return n < 7 ? "" : (n < 18 ? 10 : 30) + "-foot aura"; }), action : [["reaction", ""]] }, "subclassfeature15" : { name : "Protective Spirit", source : [["X", 39]], minlevel : 15, description : desc("At the end of my turn when I'm below half HP and not incapacitated, I regain HP"), additional : levels.map(function (n) { return n < 15 ? "" : "1d6+" + Math.floor(n/2) + " HP"; }) }, "subclassfeature20" : { name : "Emissary of Redemption", source : [["X", 39]], minlevel : 20, description : desc([ "When taking damage from a creature, I take only half and it takes the other half", "This stops working on any that I attack or force to make a save, until I have a long rest" ]), dmgres : ["All from creatures"] } } }); // Add 3 subclasses for the Ranger var XGtE_Ranger_Subclass_Gloom_Stalker = AddSubClass("ranger", "gloom stalker", { regExpSearch : /^(?=.*gloom)(?=.*stalker).*$/i, subname : "Gloom Stalker", source : [["X", 41]], fullname : "Gloom Stalker", features : { "subclassfeature3" : { name : "Dread Ambusher", source : [["X", 42]], minlevel : 3, description : desc([ "I can add my Wisdom modifier to my initiative rolls", "In the first turn of combat I get +10 ft speed and an extra attack with the Attack action", "If I take the Attack action and that extra attack hits, it does +1d8 damage" ]), addMod : { type : "skill", field : "Init", mod : "max(Wis|0)", text : "I can add my Wisdom modifier to my initiative rolls." } }, "subclassfeature3.1" : { name : "Gloom Stalker Magic", source : [["X", 42]], minlevel : 3, description : desc([ "I add a spell to my known spells at level 3, 5, 9, 13, and 17", "These count as ranger spells, but do not count against the number of spells I can know" ]), spellcastingExtra : ["disguise self", "rope trick", "fear", "greater invisibility", "seeming"], spellcastingExtraApplyNonconform : true }, "subclassfeature3.2" : { name : "Umbral Sight", source : [["X", 42]], minlevel : 3, description : desc([ "I gain 60 ft darkvision, or add 30 ft to darkvision if I already had it because of my race", "When I'm in darkness, others gain no benefit from darkvision to detect me" ]), vision : [["Darkvision", "fixed 60"], ["Darkvision", "+30"]] }, "subclassfeature7" : { name : "Iron Mind", source : [["X", 42]], minlevel : 7, description : desc("I gain proficiency with Wis saves, or if I'm already proficient, either Int or Cha saves"), saves : ["Wis"] }, "subclassfeature11" : { name : "Stalker's Flurry", source : [["X", 42]], minlevel : 11, description : desc("Once on each of my turns when I miss a weapon attack, I can make an extra attack") }, "subclassfeature15" : { name : "Shadowy Dodge", source : [["X", 42]], minlevel : 15, description : desc("As a reaction when I'm attacked without adv., I can impose disadv. on the attack roll"), action : [["reaction", " (when attacked)"]] } } }); var XGtE_Ranger_Subclass_Horizon_Walker = AddSubClass("ranger", "horizon walker", { regExpSearch : /^(?=.*horizon)(?=.*walker).*$/i, subname : "Horizon Walker", source : [["X", 42]], fullname : "Horizon Walker", features : { "subclassfeature3" : { name : "Detect Portal", source : [["X", 42]], minlevel : 3, description : desc("As an action, I sense the distance and direction to the closest planar portal within 1 mile"), usages : 1, recovery : "short rest", action : [["action", ""]] }, "subclassfeature3.1" : { name : "Horizon Walker Magic", source : [["X", 42]], minlevel : 3, description : desc([ "I add a spell to my known spells at level 3, 5, 9, 13, and 17", "These count as ranger spells, but do not count against the number of spells I can know" ]), spellcastingExtra : ["protection from evil and good", "misty step", "haste", "banishment", "teleportation circle"], spellcastingExtraApplyNonconform : true }, "subclassfeature3.2" : { name : "Planar Warrior", source : [["X", 42]], minlevel : 3, description : desc([ "As a bonus action, I choose one creature that I can see within 30 ft of me", "All damage from my first weapon attack that hits it on this turn becomes force damage", "In addition, that first hit does extra damage" ]), additional : levels.map(function (n) { return n < 3 ? "" : "+" + (n < 11 ? 1 : 2) + "d8 force damage"; }), action : [["bonus action", ""]] }, "subclassfeature7" : { name : "Ethereal Step", source : [["X", 43]], minlevel : 7, description : desc("As a bonus action, I can cast the Etherealness spell, which lasts until the end of my turn"), usages : 1, recovery : "short rest", spellcastingBonus : [{ name : "Ethereal Step", spells : ["etherealness"], selection : ["etherealness"], firstCol : 'oncesr' }], spellChanges : { "etherealness" : { time : "1 bns", duration : "1 rnd", description : "I go to Ethereal Plane; move there, but able to perceive 60 ft into the normal plane", changes : "Using my Ethereal Step class feature I can cast Etherealness as a bonus action once per short rest, but it only affects myself and lasts until the end of my turn." } } }, "subclassfeature11" : { name : "Distant Strike", source : [["X", 43]], minlevel : 11, description : desc([ "With the Attack action, I can teleport 10 ft before each attack, to a place I can see", "If I attack two different creatures with this action, I get an extra attack against a third" ]) }, "subclassfeature15" : { name : "Spectral Defense", source : [["X", 43]], minlevel : 15, description : desc("As a reaction when an attack damages me, I can give myself resistance vs. that attack"), action : [["reaction", ""]] } } }); var XGtE_Ranger_Subclass_Monster_Slayer = AddSubClass("ranger", "monster slayer", { regExpSearch : /^(?=.*monster)(?=.*slayer).*$/i, subname : "Monster Slayer", source : [["X", 43]], fullname : "Monster Slayer", features : { "subclassfeature3" : { name : "Hunter's Sense", source : [["X", 43]], minlevel : 3, description : desc([ "As an action, I learn vulnerabilities/immunities/resistances of a target I see within 60 ft", "If it is protected from divination magic, I sense it has none of these" ]), action : [["action", ""]], usages : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest" }, "subclassfeature3.1" : { name : "Monster Slayer Magic", source : [["X", 43]], minlevel : 3, description : desc("I get bonus spells known, which do not count against the number of spells I can know"), spellcastingExtra : ["protection from evil and good", "zone of truth", "magic circle", "banishment", "hold monster"], spellcastingExtraApplyNonconform : true }, "subclassfeature3.2" : { name : "Slayer's Prey", source : [["X", 43]], minlevel : 3, description : desc([ "As a bonus action, I designate a creature I see within 60 ft; This lasts until I do this again", "My first hit to the target with a weapon attack on each of my turns does +1d6 damage" ]), action : [["bonus action", ""]] }, "subclassfeature7" : { name : "Supernatural Defense", source : [["X", 43]], minlevel : 7, description : desc([ "I add 1d6 to saving throws the current target of my Slayer's Prey forces me to make", "In addition, I also add 1d6 to checks to escape that target's grapple" ]) }, "subclassfeature11" : { name : "Magic-User's Nemesis", source : [["X", 43]], minlevel : 11, description : desc([ "As a reaction when I see someone within 60 ft casting a spell or teleporting, I can foil it", "The target must make a Wisdom save or have its spell or teleport fail and be wasted" ]), action : [["reaction", ""]], usages : 1, recovery : "short rest" }, "subclassfeature15" : { name : "Slayer's Counter", source : [["X", 43]], minlevel : 15, description : desc([ "As a reaction when the target of my Slayer's Prey has me make a save, I can attack it", "I can make one weapon attack; If this hits, I automatically succeed on the saving throw" ]), action : [["reaction", ""]] } } }); // Add all three subclasses to the revised ranger as well, if it exists if (ClassList.rangerua) { ClassList.rangerua.subclasses[1].push(XGtE_Ranger_Subclass_Gloom_Stalker, XGtE_Ranger_Subclass_Horizon_Walker, XGtE_Ranger_Subclass_Monster_Slayer); }; // Add 4 subclasses for the Rogue AddSubClass("rogue", "inquisitive", { regExpSearch : /^(?=.*(rogue|miscreant))(?=.*inquisitive).*$/i, subname : "Inquisitive", source : [["X", 45]], features : { "subclassfeature3" : { name : "Ear for Deceit", source : [["X", 45]], minlevel : 3, description : desc("For Wis (Insight) to sense if another is lying, I can treat a die roll of 7 or lower as an 8") }, "subclassfeature3.1" : { name : "Eye for Detail", source : [["X", 46]], minlevel : 3, description : desc([ "As a bonus action, I can do either of the following:", "\u2022 Make a Wisdom (Perception) check to spot a hidden creature or object", "\u2022 Make an Intelligence (Investigation) check to uncover or decipher clues" ]), action : [["bonus action", ""]] }, "subclassfeature3.2" : { name : "Insightful Fighting", source : [["X", 46]], minlevel : 3, description : desc([ "As a bonus action, I can decipher the tactics of another I can see that's not incapacitated", "I have to make a Wisdom (Insight) check vs. the target's Charisma (Deception) check", "If I succeed, I can use my sneak attack on it even if I don't have adv. (but not if disadv.)", "This benefit lasts for 1 minute or until I successfully use Insightful Fighting again" ]), action : [["bonus action", ""]] }, "subclassfeature9" : { name : "Steady Eye", source : [["X", 46]], minlevel : 9, description : desc([ "I'm more perceptive when I don't move more than half my speed in the same turn", "If so, I gain adv. on Wis (Perception) and Int (Investigation) checks during that turn" ]) }, "subclassfeature13" : { name : "Unerring Eye", source : [["X", 46]], minlevel : 13, description : desc([ "As an action, I can sense magical deceptions within 30 feet of me, but not what it does", "I learn the presence of illusions, shapechanged creatures, or magic designed to deceive" ]), action : [["action", ""]], usages : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest" }, "subclassfeature17" : { name : "Eye for Weakness", source : [["X", 46]], minlevel : 17, description : desc("While my Insightful Fighting is active, I add 3d6 to sneak attacks against that target") } } }); // dupl_start if (!ClassSubList["rogue-mastermind"] && (!SourceList.S || SourceList.S.abbreviation.toLowerCase() !== "scag")) { // the Mastermind subclass is identical to the one in SCAG, so only add if it that one doesn't exist yet AddSubClass("rogue", "mastermind", { regExpSearch : /^(?!.*(barbarian|bard|cleric|druid|fighter|monk|paladin|ranger|sorcerer|warlock|wizard))(?=.*(mastermind|strategist)).*$/i, subname : "Mastermind", fullname : "Mastermind", source : [["S", 135], ["X", 46]], features : { "subclassfeature3" : { name : "Master of Intrigue", source : [["S", 135], ["X", 46]], minlevel : 3, description : desc([ "I gain proficiency with disguise kits, forgery kits, one gaming set, and two languages", "I can mimic speech patterns and accents if I've heard them for at least 1 minute" ]), languageProfs : [2], toolProfs : ["Disguise kit", "Forgery kit", ["Gaming set", 1]] }, "subclassfeature3.1" : { name : "Master of Tactics", source : [["S", 135], ["X", 46]], minlevel : 3, description : desc([ "I can use the Help action as a bonus action", "This even works if the ally attacks a target within 30 ft of me that can see or hear me" ]), action : [["bonus action", ""]] }, "subclassfeature9" : { name : "Insightful Manipulator", source : [["S", 135], ["X", 46]], minlevel : 9, description : desc([ "By spending 1 minute observing/interacting outside of combat I can learn capabilities", "The DM tells me if the target is my equal, superior, or inferior in regard to two things:", " - Intelligence score - Wisdom score - Charisma score - Class levels (if any)" ]) }, "subclassfeature13" : { name : "Misdirection", source : [["S", 135], ["X", 46]], minlevel : 13, description : desc([ "As a reaction, I can redirect an attack meant for me to a creature within 5 ft of me", "This only works if the creature is providing me with cover against the attack" ]), action : [["reaction", ""]] }, "subclassfeature17" : { name : "Soul of Deceit", source : [["S", 135], ["X", 46]], minlevel : 17, description : desc([ "My thoughts can't be read by telepathy or similar means; I can project false thoughts", "For that, I must pass a Cha (Deception) vs. Wis (Insight) check to fool the mind reader", "Magic always determines I'm truthful; I can't be magically compelled to tell the truth" ]) } } }); }; // dupl_end AddSubClass("rogue", "scout", { regExpSearch : /scout/i, subname : "Scout", source : [["X", 47]], features : { "subclassfeature3" : { name : "Skirmisher", source : [["X", 47]], minlevel : 3, description : desc([ "As a reaction when a hostile ends its turn within 5 ft of me, I can move half my speed", "This movement does not provoke attacks of opportunity" ]), action : [["reaction", ""]] }, "subclassfeature3.1" : { name : "Survivalist", source : [["X", 47]], minlevel : 3, description : desc("I gain proficiency and expertise with the Nature and Survival skills"), skills : [['Nature', 'full'], ['Survival', 'full']] }, "subclassfeature9" : { name : "Superior Mobility", source : [["X", 47]], minlevel : 9, description : desc("I gain +10 ft to my walking speed (and swimming/climbing speed, if applicable)"), speed : { allModes : { bonus : "+10", exclude : ["fly", "burrow"] } } }, "subclassfeature13" : { name : "Ambush Master", source : [["X", 47]], minlevel : 13, description : desc([ "I gain advantage on Initiative rolls", "The first creature I hit in the first round of combat becomes an easy target", "Until the start of my next turn, all attacks against the target have advantage" ]), advantages : [["Initiative", true]] }, "subclassfeature17" : { name : "Sudden Strike", source : [["X", 47]], minlevel : 17, description : desc([ "With the Attack action, I can make one additional attack as a bonus action", "This attack can benefit from my Sneak Attack even if I already used it this turn", "However, I still can't use Sneak Attack on a single target more than once per turn" ]), action : [["bonus action", " (with Attack action)"]] } } }); // dupl_start if (!ClassSubList["rogue-swashbuckler"] && (!SourceList.S || SourceList.S.abbreviation.toLowerCase() !== "scag")) { // the Swashbuckler subclass is identical to the one in SCAG, so only add if it that one doesn't exist yet AddSubClass("rogue", "swashbuckler", { regExpSearch : /^(?!.*(barbarian|bard|cleric|druid|fighter|monk|paladin|ranger|sorcerer|warlock|wizard))(?=.*swashbuckl).*$/i, subname : "Swashbuckler", fullname : "Swashbuckler", source : [["S", 135], ["X", 47]], features : { "subclassfeature3" : { name : "Fancy Footwork", source : [["S", 135], ["X", 47]], minlevel : 3, description : desc([ "Enemies I make a melee attack against in my turn can't use opportunity attacks on me", "This lasts until the end of my current turn" ]) }, "subclassfeature3.1" : { name : "Rakish Audacity", source : [["S", 136], ["X", 47]], minlevel : 3, description : desc([ "I don't need advantage to sneak attack if my target is the only one within 5 ft of me", "I still can't sneak attack if I have disadv.; I add my Charisma modifier to initiative rolls" ]), addMod : { type : "skill", field : "Init", mod : "max(Cha|0)", text : "I can add my Charisma modifier to initiative rolls." } }, "subclassfeature9" : { name : "Panache", source : [["S", 136], ["X", 47]], minlevel : 9, description : desc([ "As an action, I can beguile a creature that hears and understands me, for 1 minute", "It must succeed a Wis (Insight) check opposed by my Cha (Persuasion) or be affected as:", "\u2022 A hostile target gains disadv. on attacks and can't do opportunity attacks vs. not-me", " This effect ends if an ally attacks or casts a spell vs. it, or if it and I are 60 ft apart", "\u2022 Targets that are not hostile are charmed and regard me as a friendly acquaintance", " This effect ends if me or an ally do anything harmful to it" ]), action : [["action", ""]] }, "subclassfeature13" : { name : "Elegant Maneuver", source : [["S", 136], ["X", 47]], minlevel : 13, description : desc("As a bonus action, I can gain adv. on my next Dex (Acrobatics) or Str (Athletics) check"), action : [["bonus action", ""]] }, "subclassfeature17" : { name : "Master Duelist", source : [["S", 136], ["X", 47]], minlevel : 17, description : desc("Once per short rest, when I miss with an attack roll, I can roll again with advantage"), recovery : "short rest", usages : 1 } } }); }; // dupl_end // Add 3 subclasses for the Sorcerer AddSubClass("sorcerer", "divine soul", { // this code includes contributions by SoilentBrad regExpSearch : /^(?=.*divine)(?=.*soul).*$/i, subname : "Divine Soul", source : [["X", 50]], fullname : "Divine Soul", spellcastingList : { "class" : ["cleric", "sorcerer"] }, features : { "subclassfeature1" : { name : "Divine Magic", source : [["X", 50]], minlevel : 1, description : desc([ "When I learn spells/cantrips or replace known, I can also pick from the cleric spell list", "These cleric spells count as sorcerer spells for me", 'I also learn a spell based on my affinity, use the "Choose Feature" button above for this' ]), choices : ["Good", "Evil", "Law", "Chaos", "Neutrality"], "good" : { name : "Divine Magic: Good", description : desc([ "When I learn spells/cantrips or replace known, I can also pick from the cleric spell list", "I also learn Cure Wounds, which doesn't count against my number of spells known", "These count as sorcerer spells for me; I can only replace the bonus spell with a cleric spell" ]), spellcastingBonus : [{ name : "Divine Magic (Good)", "class" : "cleric", level : [1,9], selection : ["cure wounds"] }], dependentChoices : "eagle" }, "evil" : { name : "Divine Magic: Evil", description : desc([ "When I learn spells/cantrips or replace known, I can also pick from the cleric spell list", "I also learn Inflict Wounds, which doesn't count against my number of spells known", "These count as sorcerer spells for me; I can only replace the bonus spell with a cleric spell" ]), spellcastingBonus : [{ name : "Divine Magic (Evil)", "class" : "cleric", level : [1,9], selection : ["inflict wounds"] }], dependentChoices : "bat" }, "law" : { name : "Divine Magic: Law", description : desc([ "When I learn spells/cantrips or replace known, I can also pick from the cleric spell list", "I also learn Bless, which doesn't count against my number of spells known", "These count as sorcerer spells for me; I can only replace the bonus spell with a cleric spell" ]), spellcastingBonus : [{ name : "Divine Magic (Law)", "class" : "cleric", level : [1,9], selection : ["bless"] }], dependentChoices : "eagle" }, "chaos" : { name : "Divine Magic: Chaos", description : desc([ "When I learn spells/cantrips or replace known, I can also pick from the cleric spell list", "I also learn Bane, which doesn't count against my number of spells known", "These count as sorcerer spells for me; I can only replace the bonus spell with a cleric spell" ]), spellcastingBonus : [{ name : "Divine Magic (Chaos)", "class" : "cleric", level : [1,9], selection : ["bane"] }], dependentChoices : "bat" }, "neutrality" : { name : "Divine Magic: Neutrality", description : desc([ "When I learn spells/cantrips or replace known, I can also pick from the cleric spell list", "I learn Protection from Evil \xD7 Good; It doesn't count against my number of spells known", "These count as sorcerer spells for me; I can only replace the bonus spell with a cleric spell" ]), spellcastingBonus : [{ name : "Divine Magic (Neutrality)", "class" : "cleric", level : [1,9], selection : ["protection from evil and good"] }], dependentChoices : "dragonfly" }, choiceDependencies : [{ feature : "subclassfeature14", choiceAttribute : true }] }, "subclassfeature1.2" : { name : "Favored by the Gods", source : [["X", 50]], minlevel : 1, description : desc("If I fail a saving throw or miss with an attack roll, I can add 2d4 to the total"), recovery : "short rest", usages : 1 }, "subclassfeature6" : { name : "Empowered Healing", source : [["X", 50]], minlevel : 6, description : desc([ "Once per turn, when I or an ally in 5 ft roll dice to healing with a spell, I can reroll dice", "By spending 1 sorcery point; I can reroll any number of those dice for that spell once" ]), additional : "1 sorcery point" }, "subclassfeature14" : { name : "Otherworldy Wings", source : [["X", 50]], minlevel : 14, description : desc([ "As a bonus action, I can manifest a pair of spectral wings that give me 30 ft fly speed", "These wings last until I become incapacitated or I dismiss them as a bonus action" ]), choices : ["eagle", "bat", "dragonfly"], choicesNotInMenu : true, "eagle" : { name : "Otherworldy Wings", description : desc([ "As a bonus action, I manifest a pair of spectral eagle wings, giving me 30 ft fly speed", "These wings last until I become incapacitated or I dismiss them as a bonus action" ]) }, "bat" : { name : "Otherworldy Wings", description : desc([ "As a bonus action, I manifest a pair of spectral bat wings, giving me 30 ft fly speed", "These wings last until I become incapacitated or I dismiss them as a bonus action" ]) }, "dragonfly" : { name : "Otherworldy Wings", description : desc([ "As a bonus action, I create a pair of spectral dragonfly wings, giving me 30 ft fly speed", "These wings last until I become incapacitated or I dismiss them as a bonus action" ]) }, action : [["bonus action", ""]], speed : { fly : { spd : 30, enc : 20 } } }, "subclassfeature18" : { name : "Unearthly Recovery", source : [["X", 50]], minlevel : 18, description : desc([ "As a bonus action when I have less than half of my max HP remaining, I can heal myself", "I regain a number of HP equal to half my hit point maximum" ]), action : [["bonus action", ""]], recovery : "long rest", usages : 1 } } }); AddSubClass("sorcerer", "shadow magic", { regExpSearch : /^(?=.*(sorcerer|witch))(?=.*shadow).*$/i, subname : "Shadow Magic", source : [["X", 50]], fullname : "Shadow Sorcerer", features : { "subclassfeature1" : { name : "Eyes of the Dark", source : [["X", 51]], minlevel : 1, description : desc("I gain 120 ft darkvision"), vision : [["Darkvision", 120]] }, "subclassfeature1.1" : { name : "Strength of the Grave", source : [["X", 51]], minlevel : 1, description : desc([ "When damage reduces me to 0 HP, that isn't radiant damage or a critical hit,", "I can make a Charisma save (DC 5 + damage taken) to drop to 1 HP instead" ]), usages : 1, recovery : "long rest" }, "subclassfeature3" : { name : "Darkness", source : [["X", 51]], minlevel : 3, description : desc([ "I learn Darkness, which doesn't count against my number of spells known", "I can also cast it by spending 2 sorcery points and then I can see through it normally" ]), additional : "2 sorcery points", action : [["action", " (2 sorcery points)"]], spellcastingBonus : [{ name : "Eyes of the Dark", spells : ["darkness"], selection : ["darkness"] }] }, "subclassfeature6" : { name : "Hound of Ill Omen", source : [["X", 51]], minlevel : 6, description : desc([ "As a bonus action, I summon a hound within 30 ft of a creature I see within 120 ft", "The hound has all the stats of a dire wolf with the following exceptions:", "\u2022 It is medium size and counts as a monstrosity not a beast", "\u2022 It starts with a number of temporary hit points equal to half my sorcerer level", "\u2022 At the start of its turn, it automatically knows where the (hidden) target is", "\u2022 It can only move towards and make (opportunity) attack against the target", "\u2022 It can move through other creatures and objects as if they were difficult terrain", "\u2022 It takes 5 force damage if it ends its turn inside an object", "The target has disadvantage on saves vs. my spells while the hound is within 5 ft of it", "It disappears if reduced to 0 HP, if the target is reduced to 0 HP, or after 5 minutes" ]), additional : levels.map(function (n) { return n < 6 ? "" : "3 sorcery points; " + Math.floor(n/2) + " temporary HP"; }), action : [["bonus action", " (3 sorcery points)"]], creaturesAdd : [["Hound of Ill Omen", true]], creatureOptions : [{ name : "Hound of Ill Omen", source : [["X", 51]], size : 3, type : "Monstrosity", alignment : "Unaligned", ac : 14, hp : 37, hd : [5, 10], speed : "50 ft", scores : [17, 15, 15, 3, 12, 7], skills : { "perception" : 3, "stealth" : 4 }, senses : "Adv. on Wis (Perception) checks using hearing/smell;\nAt the start of each turn, knows where the target is", passivePerception : 13, challengeRating : "1", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Bite", ability : 1, damage : [2, 6, "piercing"], range : "Melee (5 ft)", description : "Target must succeed on a DC 13 Strength saving throw or be knocked prone" }], traits : [{ name : "Keen Hearing and Smell", description : "The hound has advantage on Wisdom (Perception) checks that rely on hearing or smell." }, { name : "Pack Tactics", description : "The hound has advantage on an attack roll against a creature if at least one of the hound's allies is within 5 ft of the creature and the ally isn't incapacitated." }], features : [{ name : "Actions", description : "The hound can only move towards its targets and make attacks or opportunity attacks against its target." }, { name : "Temporary Hit Points", description : "When the hound is summoned, it gains temporary HP equal to half my sorcerer level." }, { name : "Shadowy Form", description : "The hound can move through other creatures and objects as if they were difficult terrain. It takes 5 force damage if it ends its turn inside an object." }, { name : "Sign of Ill Omen", description : "While the hound is within 5 ft of its target, that target has disadvantage on saving throws versus my spells." }], header : "Summoned", eval : function(prefix, lvl) { AddTooltip(prefix + 'Comp.Use.HP.Temp', "The hound of ill omen gains half my sorcerer level as temporary HP when created."); }, removeeval : function(prefix, lvl) { AddTooltip(prefix + 'Comp.Use.HP.Temp', ""); }, changeeval : function (prefix, lvl) { if (!classes.known.sorcerer) return; Value(prefix + 'Comp.Use.HP.Temp', Math.floor(classes.known.sorcerer.level / 2)); } }] }, "subclassfeature14" : { name : "Shadow Walk", source : [["X", 51]], minlevel : 14, description : desc([ "As a bonus action when I'm in dim light or darkness, I can teleport up to 120 ft", "The destination has to be unoccupied, within line of sight, and in dim light or darkness" ]), action : [["bonus action", ""]] }, "subclassfeature18" : { name : "Umbral Form", source : [["X", 51]], minlevel : 18, additional : "6 sorcery points", description : desc([ "As a bonus action, I transform into a shadow form for 1 minute", "While transformed, I have resistance to all damage except force and radiant damage", "Also, I can move through other creatures and objects as if they were difficult terrain", "I take 5 force damage if I end my turn inside an object", "This ends early if I end it as a bonus action, I die, or I'm incapacitated" ]), action : [["bonus action", " (6 sorcery points)"]] } } }); // dupl_start if (!ClassSubList["sorcerer-storm sorcery"] && (!SourceList.S || SourceList.S.abbreviation.toLowerCase() !== "scag")) { // the Storm Sorcery subclass is identical to the one in SCAG, so only add if it that one doesn't exist yet AddSubClass("sorcerer", "storm sorcery", { regExpSearch : /^(?=.*(sorcerer|witch))((?=.*(storm|tempest|hurricane))|((?=.*air)(?=.*element))).*$/i, subname : "Storm Sorcery", fullname : "Storm Sorcerer", source : [["S", 137], ["X", 51]], features : { "subclassfeature1" : { name : "Wind Speaker", source : [["S", 137], ["X", 52]], minlevel : 1, description : desc("I can speak, read, and write Primordial (and its dialects Aquan, Auran, Ignan, Terran)"), languageProfs : ["Primordial"] }, "subclassfeature1.1" : { name : "Tempestuous Magic", source : [["S", 137], ["X", 52]], minlevel : 1, description : desc([ "As a bonus action, before or after casting a 1st-level or higher spell, I can fly 10 ft", "This movement doesn't provoke opportunity attacks as whirling gust of air surround me" ]), action : [["bonus action", " (with casting)"]] }, "subclassfeature6" : { name : "Heart of the Storm", source : [["S", 137], ["X", 52]], minlevel : 6, description : desc([ "I have resistance to lightning and thunder damage", "When I start casting a 1st-level or higher spell that deals lightning or thunder damage,", "I deal lightning or thunder damage to creatures of my choice that I can see within 10 ft" ]), additional : levels.map(function (n) { return n < 6 ? "" : Math.floor(n/2) + " damage"; }), dmgres : ["Lightning", "Thunder"] }, "subclassfeature6.1" : { name : "Storm Guide", source : [["S", 137], ["X", 52]], minlevel : 6, description : desc([ "As an action, I can stop rain around me in 20-ft radius; bonus action for it to resume", "As a bonus action, I can choose the direction of wind around me in a 100-ft radius", "This lasts until the end of my next turn and doesn't alter the wind's speed" ]), action : [["bonus action", ""]] }, "subclassfeature14" : { name : "Storm's Fury", source : [["S", 137], ["X", 52]], minlevel : 14, description : desc([ "As a reaction when hit by a melee attack, I can deal lightning damage to the attacker", "The attacker must also make a Strength save or be pushed up to 20 ft away from me" ]), action : [["reaction", ""]], additional : levels.map(function (n) { return n < 14 ? "" : n + " lightning damage"; }) }, "subclassfeature18" : { name : "Wind Soul", source : [["S", 137], ["X", 52]], minlevel : 18, description : desc([ "I have immunity to lightning and thunder damage and gain magical 60 ft fly speed", "As an action, I reduce my fly speed to 30 ft and give allies 30 ft fly speed for 1 hour", "I can do this once per short rest for up to 3 + my Charisma modifier allies within 30 ft" ]), action : [["action", ""]], savetxt : { immune : ["lightning", "thunder"] }, speed : { fly : { spd : "fixed 60", enc : "fixed 60" } }, usages : 1, recovery : "short rest" } } }); }; // dupl_end // Add 2 subclasses for the Warlock AddSubClass("warlock", "the celestial", { regExpSearch : /^(?=.*warlock)(?=.*celestial).*$/i, subname : "the Celestial", source : [["X", 54]], spellcastingExtra : ["cure wounds", "guiding bolt", "flaming sphere", "lesser restoration", "daylight", "revivify", "guardian of faith", "wall of fire", "flame strike", "greater restoration"], features : { "subclassfeature1" : { name : "Bonus Cantrips", source : [["X", 54]], minlevel : 1, description : desc("I learn the Light and Sacred Flame cantrips, not counting for the number I can know"), spellcastingBonus : [{ name : "Bonus Cantrips", spells : ["light"], selection : ["light"] }, { name : "Bonus Cantrips", spells : ["sacred flame"], selection : ["sacred flame"] }] }, "subclassfeature1.1" : { name : "Healing Light", source : [["X", 54]], minlevel : 1, description : desc([ "As a bonus action, I can heal a creature I can see within 60 ft by expending dice", "I can expend up to my Charisma modifier (min 1) of dice from my pool at a time", "The target heals HP equal to the roll of the dice; I regain all expended dice on a long rest" ]), usages : levels.map(function (n) { return (n + 1) + "d6 per "; }), usagescalc : "event.value = !classes.known.warlock ? '' : (1 + classes.known.warlock.level) + 'd6';", recovery : "long rest", action : [["bonus action", ""]] }, "subclassfeature6" : { name : "Radiant Soul", source : [["X", 55]], minlevel : 6, description : desc([ "I add my Cha modifier once to the fire or radiant damage of cantrips and spells I cast", "This bonus only applies to one target; Also, I have resistance to radiant damage" ]), dmgres : ["Radiant"], calcChanges : { atkCalc : [ function (fields, v, output) { if (v.isSpell && (/fire|radiant/i).test(fields.Damage_Type)) { output.extraDmg += What('Cha Mod'); }; }, "Cantrips and spells that fire or radiant damage get my Charisma modifier added to their damage to one target." ], spellAdd : [ function (spellKey, spellObj, spName) { if (!spellObj.psionic) return genericSpellDmgEdit(spellKey, spellObj, "fire|radiant", "Cha", true); }, "Cantrips and spells that fire or radiant damage get my Charisma modifier added to their damage to one target." ] } }, "subclassfeature10" : { name : "Celestial Resilience", source : [["X", 55]], minlevel : 10, description : desc([ "When I finish a short or long rest, I and up to five allies gain temporary hit points", "I get my warlock level + Cha mod, while my allies get half my warlock level + Cha mod" ]), additional : levels.map(function (n) { return n < 10 ? "" : "Me: " + n + "+Cha mod; Allies: " + Math.floor(n / 2) + "+Cha mod"; }) }, "subclassfeature14" : { name : "Searing Vengeance", source : [["X", 55]], minlevel : 14, description : desc([ "At the start of my turn when I would make a death save, I can instead spring back up", "I recover HP equal to half my current HP maximum, and can then stand up if I choose", "When I do, creatures of my choice within 30 ft take 2d8 + Cha mod in radiant damage", "Damaged creatures are blinded until the end of my current turn" ]), usages : 1, recovery : "long rest" } } }); AddSubClass("warlock", "the hexblade", { // this code includes contributions by SoilentBrad regExpSearch : /^(?=.*hexblade)(?=.*warlock).*$/i, subname : "the Hexblade", source : [["X", 55]], spellcastingExtra : ["shield", "wrathful smite", "blur", "branding smite", "blink", "elemental weapon", "phantasmal killer", "staggering smite", "banishing smite", "cone of cold"], features : { "subclassfeature1" : { name : "Hexblade's Curse", source : [["X", 55]], minlevel : 1, description : desc([ "As a bonus action, I can curse a creature I can see within 30 ft of me for 1 minute", "\u2022 I add my proficiency bonus to damage rolls against the cursed target", "\u2022 My attack rolls against the curse target score a critical hit on a roll of 19 and 20", "\u2022 If the target dies while cursed, I regain HP equal to my warlock level + Cha mod", "The curse ends after 1 minute, when the target dies, I die, or I'm incapacitated" ]), recovery : "short rest", usages : 1, action : [["bonus action", ""]], calcChanges : { atkAdd : [ function (fields, v) { if (!v.isDC && /curse/i.test(v.WeaponTextName) && !v.CritChance) { v.CritChance = 19; fields.Description += (fields.Description ? '; ' : '') + 'Crit on 19-20'; } }, "If I include the word 'Curse' in the name of a weapon, the automation will treat the attack as being against a target of the Hexblade's Curse: adding my proficiency bonus to the damage and adding the increased chance of a critical hit to the description.", 19 ], atkCalc : [ function (fields, v, output) { if ((/curse/i).test(v.WeaponTextName)) output.extraDmg += output.prof; }, ""] } }, "subclassfeature1.1" : { name : "Hex Warrior", source : [["X", 55]], minlevel : 1, description : desc([ "I gain proficiency with medium armor, shields, and martial weapons", "When I finish a long rest, I can imbue one weapon I touch with my will", "Until my next long rest, I can use it with Charisma instead of Strength or Dexterity", "I have to be proficient with the weapon and it can't have the two-handed property", "This benefit also works with every weapon from Pact of the Blade, with no restriction" ]), armorProfs : [false, true, false, true], weaponProfs : [false, true], calcChanges : { atkAdd : [ function (fields, v) { if (What('Cha Mod') > What(AbilityScores.abbreviations[fields.Mod - 1] + ' Mod') && (v.pactWeapon || v.theWea.pactWeapon || /^(?=.*hexblade)(?!.*((^|[^+-]\b)2|\btwo).?hand(ed)?s?\b).*$/i.test(v.WeaponText))) { fields.Mod = 6; }; }, "If I include the word 'Hexblade' in the name of a weapon that is not two-handed, it gets treated as the weapon I imbued to use Charisma instead of Strength or Dexterity, if my Charisma modifier is higher than the ability it would otherwise use. Alternatively, if I have the Pact of the Blade feature, this will also work for any weapons set to be my Pact Weapon." ] } }, "subclassfeature6" : { name : "Accursed Specter", source : [["X", 56]], minlevel : 6, description : desc([ "When I slay a humanoid, I can curse its soul and have it rise as a specter from its corpse", "It has the stats of a specter with temporary hit points equal to half my warlock level", "It rolls initiative and has its own turns, obeying my verbal commands", "It gains a bonus to attack rolls equal to my Charisma modifier (min +0)", "The specter remains until the end of my next long rest, at which point it vanishes" ]), additional : levels.map( function(n) { return n < 6 ? "" : Math.floor(n/2) + " temp HP"; }), usages : 1, recovery : "long rest", creaturesAdd : [["Accursed Specter", true]], creatureOptions : [{ name : "Accursed Specter", nameAlt : ["Accursed Spectre"], source : [["X", 56]], size : 3, type : "Undead", alignment : "Chaotic Evil", ac : 12, hp : 22, hd : [5, 8], speed : "fly 50 ft (hover)", scores : [1, 14, 11, 10, 10, 12], damage_resistances : "acid; cold; fire; lightning; thunder; bludgeoning, piercing, and slashing from nonmagical weapons", damage_immunities : "necrotic, poison", condition_immunities : "charmed, exhaustion, grappled, paralyzed, petrified, poisoned, prone, restrained, unconscious", senses : "Darkvision 60 ft; While in sunlight, disadv. on Wis (Perception) checks using sight", passivePerception : 10, languages : "all languages it knew in life, but can't speak", challengeRating : "1", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Life Drain", ability : 2, damage : [3, 6, "necrotic"], range : "Melee (5 ft)", description : "DC 10 Con save or HP max reduced by same as damage taken until a long rest", modifiers : ["max(oCha|0)", ""], abilitytodamage : false, tooltip : "A target of the specter's life drain must succeed on a DC 10 Constitution saving throw or its hit point maximum is reduced by an amount equal to the damage taken. This reduction lasts until the creature finishes a long rest. The target dies if this effect reduces its hit point maximum to 0." }], traits : [{ name : "Incorporeal Movement", description : "The specter can move through other creatures and objects as if they were difficult terrain. It takes 5 (1d10) force damage if it ends its turn inside an object." }, { name : "Sunlight Sensitivity", description : "While in sunlight, the specter has disadvantage on attack rolls, as well as on Wisdom (Perception) checks that rely on sight." }, { name : "Life Drain", description : "A target of the specter's life drain must succeed on a DC 10 Constitution saving throw or its hit point maximum is reduced by an amount equal to the damage taken. This reduction lasts until the creature finishes a long rest. The target dies if this effect reduces its hit point maximum to 0." }], features : [{ name : "Bound Spirit", description : "The specter obeys my verbal commands and remains in my service until the end of my next long rest, at which point it vanishes to the afterlife. It acts on its own turn with its own initiative." }], header : "Bound Spirit", eval : function(prefix) { AddTooltip(prefix + 'Comp.Use.HP.Temp', "The accursed specter gains half my warlock level as temporary HP when created."); }, removeeval : function(prefix) { AddTooltip(prefix + 'Comp.Use.HP.Temp', ""); }, changeeval : function (prefix, newLvl) { if (!classes.known.warlock) return; Value(prefix + 'Comp.Use.HP.Temp', Math.floor(classes.known.warlock.level / 2)); } }] }, "subclassfeature10" : { name : "Armor of Hexes", source : [["X", 56]], minlevel : 10, description : desc([ "As a reaction when a Hexblade's Curse recipient hits me with an attack, I can roll a d6", "On a result of 4 or higher, the attacks misses me instead, regardless of its d20 roll" ]) }, "subclassfeature14" : { name : "Master of Hexes", source : [["X", 56]], minlevel : 14, description : desc([ "When the target of my Hexblade's Curse dies, I can curse another I can see within 30 ft", "I can't do this while incapacitated and I don't regain HP from the death of the previous" ]) } } }); // Add Warlock Invocations AddWarlockInvocation("Aspect of the Moon (prereq: Pact of the Tome)", { name : "Aspect of the Moon", description : desc("I don't need sleep nor can be forced to by any means; I can rest while doing light activity"), source : [["X", 56], ["UA:RCO", 5]], submenu : "[improves Pact of the Tome]", prereqeval : function(v) { return GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the tome'; }, savetxt : { text : ["Nothing can force me to sleep"] } }); AddWarlockInvocation("Cloak of Flies (prereq: level 5 warlock)", { name : "Cloak of Flies", description : desc([ "As a bonus action, I can surround myself with a 5-ft radius magical aura of buzzing flies", "It lasts until I'm incapacitated or dismiss it as a bonus action; Total cover block the aura", "The aura grants me adv. on Cha (Intimidation), but disadv. on all other Cha checks", "Creatures starting their turn in the aura take my Cha mod (min 0) in poison damage" ]), source : [["X", 56], ["UA:RCO", 5]], submenu : "[warlock level 5+]", prereqeval : function(v) { return classes.known.warlock.level >= 5; }, recovery : "short rest", usages : 1, action : [["bonus action", " (start/stop)"]] }); AddWarlockInvocation("Eldritch Smite (prereq: level 5 warlock, Pact of the Blade)", { name : "Eldritch Smite", description : desc([ "Once per turn when I hit a creature with my pact weapon, I can empower the strike", "By expending a warlock spell slot, the creature takes extra damage and is knocked prone", "It takes 1d8 force damage and another 1d8 force damage per level of the spell slot", "The target is only knocked prone if it is Huge or smaller" ]), source : [["X", 56]], submenu : "[improves Pact of the Blade]", prereqeval : function(v) { return classes.known.warlock.level >= 5 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the blade'; } }); AddWarlockInvocation("Ghostly Gaze (prereq: level 7 warlock)", { name : "Ghostly Gaze", description : desc([ "As an action, I can gain darkvision, and the ability to see through solid objects, out to 30 ft", "Objects appear ghostly to me; This lasts up to 1 minute, while I'm concentrating on this" ]), source : [["X", 56]], submenu : "[warlock level 7+]", prereqeval : function(v) { return classes.known.warlock.level >= 7; }, recovery : "short rest", usages : 1, action : [["action", ""]] }); AddWarlockInvocation("Gift of the Depths (prereq: level 5 warlock)", { name : "Gift of the Depths", description : desc([ "I can breathe underwater and I have a swim speed equal to my walking speed", "Once per long rest, I can cast Water Breathing without using a spell slot (PHB 287)" ]), source : [["X", 57], ["UA:RCO", 6]], submenu : "[warlock level 5+]", spellcastingBonus : [{ name : "Gift of the Depths", spells : ["water breathing"], selection : ["water breathing"], firstCol : 'oncelr' }], prereqeval : function(v) { return classes.known.warlock.level >= 5; }, speed : { swim : { spd : "walk", enc : "walk" } } }); AddWarlockInvocation("Gift of the Ever-Living Ones (prereq: Pact of the Chain)", { name : "Gift of the Ever-Living Ones", description : desc("When I regain HP while my familiar is within 100 ft, I regain the max the dice can roll"), source : [["X", 57], ["UA:RCO", 6]], submenu : "[improves Pact of the Chain]", prereqeval : function(v) { return GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the chain'; } }); AddWarlockInvocation("Grasp of Hadar (prereq: Eldritch Blast cantrip)", { name : "Grasp of Hadar", description : desc("Once per turn when my Eldritch Blast hits a creature, I can move it 10 ft closer to me"), source : [["X", 57], ["UA:RCO", 6]], submenu : "[improves Eldritch Blast]", prereqeval : function(v) { return v.hasEldritchBlast; }, calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == 'eldritch blast') fields.Description += '; Target moved 10 ft to me'; }, "When I hit a creature with my Eldritch Blast cantrip once or more times in a turn, I can move it in a straight line 10 ft closer to me." ] } }); AddWarlockInvocation("Improved Pact Weapon (prereq: Pact of the Blade)", { name : "Improved Pact Weapon", description : desc([ "I can use any pact weapon I create as my spellcasting focus for warlock spells", "Any pact weapon I create is a +1 magic weapon, if it isn't already a +1 magic weapon", "I can now also conjure a shortbow, longbow, or light or heavy crossbow as my pact weapon" ]), source : [["X", 57]], submenu : "[improves Pact of the Blade]", prereqeval : function(v) { return GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the blade'; }, calcChanges : { atkCalc : [ function (fields, v, output) { if ((/^(shortbow|longbow|light crossbow|heavy crossbow)$/).test(v.baseWeaponName) && (/\bpact\b/i).test(v.WeaponTextName)) { v.pactWeapon = true; } // Test if this is a pact weapon, has no + bonus from somewhere else, and doesn't already have a improved pact weapon bonus if (v.pactWeapon && !output.magic) { var bContinue = true; // Now test if this isn't a weaponOptions addition with a static + bonus set to the modifier fields if (v.theWea.isMagicWeapon && v.theWea.modifiers) { // Test the first two modifiers to see if both offer a +1 or more. Returns `true` if one contains no numbers or is less than the improved pact weapon bonus var bContinue = v.theWea.modifiers.slice(0, 2).some(function (n) { if (!n || !/\d/.test(n)) { var nmbr = 0; } else if (isNaN(n)) { var nmbr = n.match(/(^|\+|-)\d+\b/g); nmbr = !nmbr ? 0 : nmbr.reduce(function(a, b) {return Number(a) + Number(b)}); } else { var nmbr = Number(n); } return nmbr < 1; }); } // if the continue boolean wasn't set to false, we can proceed if (bContinue) { v.pactMag = 1; output.magic = 1; } }; }, "If I include the word 'Pact' in a the name of a melee weapon, shortbow, longbow, light crossbow, or heavy crossbow, it will be treated as my Pact Weapon.\n \u2022 If my Pact Weapon doesn't already include a magical bonus in its name and is not a magic weapon with at least a +1 bonus, the calculation will add +1 to its To Hit and Damage.", 290 ], atkAdd : [ function (fields, v) { if ((/^(shortbow|longbow|light crossbow|heavy crossbow)$/).test(v.baseWeaponName) && (/\bpact\b/i).test(v.WeaponTextName)) { v.pactWeapon = true; }; }, "", 90] } }); AddWarlockInvocation("Lance of Lethargy (prereq: Eldritch Blast cantrip)", { name : "Lance of Lethargy", description : desc([ "Once per turn when my Eldritch Blast hits a creature, I can reduce its speed by 10 ft", "This speed reduction lasts until the end of my next turn" ]), source : [["X", 57]], submenu : "[improves Eldritch Blast]", prereqeval : function(v) { return v.hasEldritchBlast; }, calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == 'eldritch blast') fields.Description += '; 1 target -10 ft speed'; }, "Once on each of my turns when I hit a creature with my Eldritch Blast cantrip, I can reduce its speed by 10 ft until the end of my next turn." ] } }); AddWarlockInvocation("Maddening Hex (prereq: level 5 warlock, Hex spell or warlock feature that curses)", { name : "Maddening Hex", description : desc([ "As a bonus action, I cause pain around a target hexed by me that I can see within 30 ft", "It and any of my choice I can see in 5 ft of it take my Cha mod (min 1) in psychic damage", "The Hex spell and all of my warlock features that curse are considered a hex for this" ]), source : [["X", 57]], submenu : "[improves Hex spell or warlock feature that curses]", prereqeval : function(v) { return classes.known.warlock.level >= 5 && (isSpellUsed('hex', true) || (/hexblade/).test(classes.known.warlock.subclass)); }, action : [["bonus action", ""]] }); AddWarlockInvocation("Relentless Hex (prereq: level 7 warlock, Hex spell or warlock feature that curses)", { name : "Relentless Hex", description : desc([ "As a bonus action, I can teleport to a target hexed by me that I can see within 30 ft", "I teleport up to 30 ft to an unoccupied space that I can see within 5 ft of the target" ]), source : [["X", 57]], submenu : "[improves Hex spell or warlock feature that curses]", prereqeval : function(v) { return classes.known.warlock.level >= 7 && (isSpellUsed('hex', true) || (/hexblade/).test(classes.known.warlock.subclass)); }, action : [["bonus action", ""]] }); AddWarlockInvocation("Shroud of Shadow (prereq: level 15 warlock)", { name : "Shroud of Shadow", description : desc("I can cast Invisibility at will, without using spell slots (PHB 254)"), source : [["X", 57], ["UA:RCO", 6]], submenu : "[warlock level 15+]", spellcastingBonus : [{ name : "Shroud of Shadow", spells : ["invisibility"], selection : ["invisibility"], firstCol : 'atwill' }], prereqeval : function(v) { return classes.known.warlock.level >= 15; }, spellChanges : { "invisibility" : { description : "1 crea invisible; attacking/casting makes the crea visible; anything worn/carried also invisible", changes : "With the Shroud of Shadow invocation I can cast Invisibility at will, but when I do so I am unable to cast it using a higher level spell slot." } } }); AddWarlockInvocation("Tomb of Levistus (prereq: level 5 warlock)", { name : "Tomb of Levistus", description : desc([ "As a reaction when I take damage, I can entomb myself in ice until the end of my turn", "During, I get 10 temp. HP per warlock level, which I use to absorb the triggering damage", "After, till the ice is gone, I also get vulnerability to fire, 0 speed, and am incapacitated" ]), source : [["X", 57], ["UA:RCO", 6]], submenu : "[warlock level 5+]", prereqeval : function(v) { return classes.known.warlock.level >= 5; }, recovery : "short rest", usages : 1, action : [["reaction", ""]], additional : levels.map( function(n) { return (n * 10) + " temp HP"; }) }); AddWarlockInvocation("Trickster's Escape (prereq: level 7 warlock)", { name : "Trickster's Escape", description : desc("Once per long rest, I can cast Freedom of Movement on myself without using a spell slot"), source : [["X", 57], ["UA:RCO", 7]], submenu : "[warlock level 7+]", spellcastingBonus : [{ name : "Trickster's Escape", spells : ["freedom of movement"], selection : ["freedom of movement"], firstCol : 'oncelr' }], prereqeval : function(v) { return classes.known.warlock.level >= 7; }, spellChanges : { "freedom of movement" : { range : "Self", description : "Magic can't reduce my speed, paralyze or restrain me; I can use 5 ft to escape nonmagical restrains", changes : "With the Trickster's Escape invocation I can cast Freedom of Movement, but only on myself." } } }); // Add 1 subclass for the Wizard AddSubClass("wizard", "war magic", { regExpSearch : /^(?=.*war)(?=.*(wizard|magic|mage)).*$/i, subname : "War Magic", fullname : "War Mage", source : [["X", 59]], features : { "subclassfeature2" : { //has to be identical to a feature named in the ClassList name : "Arcane Deflection", source : [["X", 59]], minlevel : 2, description : desc([ "As a reaction when I'm hit by an attack, I can gain +2 to my AC against that attack", "As a reaction when I fail a save, I can gain +4 bonus to that saving throw", "After I do either, I can't cast spells other than cantrips until the end of my next turn" ]), action : [["reaction", ""]] }, "subclassfeature2.1" : { name : "Tactical Wit", source : [["X", 60]], minlevel : 2, description : desc("I gain a bonus to my initiative rolls equal to my Intelligence modifier"), addMod : { type : "skill", field : "Init", mod : "max(Int|0)", text : "I can add my Intelligence modifier to initiative rolls." } }, "subclassfeature6" : { name : "Power Surge", source : [["X", 60]], minlevel : 6, description : desc([ "I have a pool of stored power surges that I can use to empower my damaging spells", "I gain a power surge whenever I successfully end a spell with Dispel Magic or Counterspell", "This pool can store a number of power surges equal to my Intelligence modifier (min 1)", "It resets to 1 power surge after a long rest or when I have 0 surges left after a short rest", "When I deal damage with a wizard spell, I can spend a power surge to do extra damage", "One target takes half my wizard level in force damage; I can do this only once per turn" ]), usages : "Resets to 1 after ", usagescalc : "event.value = !event.value || event.value == 'Resets to 1 after ' ? 1 : event.value;", recovery : "long rest", additional : levels.map( function(n) { return n < 6 ? "" : "+" + Math.floor(n/2) + " force damage"; }) }, "subclassfeature10" : { name : "Durable Magic", source : [["X", 60]], minlevel : 10, description : desc("While I'm maintaining concentration on a spell, I gain +2 to AC and all saving throws") }, "subclassfeature14" : { name : "Deflecting Shroud", source : [["X", 60]], minlevel : 14, description : desc([ "When I use my Arcane Deflection feature, magical energy arcs from me to creatures", "Up to 3 targets I can see within 60 ft of me take half my wizard level in force damage" ]), additional : levels.map( function(n) { return n < 14 ? "" : Math.floor(n/2) + " force damage"; }) } } }); // Add feats FeatsList["bountiful luck"] = { name : "Bountiful Luck", source : [["X", 73]], prerequisite : "Being a Halfling", prereqeval : function(v) { return CurrentRace.known.indexOf('halfling') !== -1; }, descriptionFull : "Your people have extraordinary luck, which you have learned to mystically lend to your companions when you see them falter. You're not sure how you do it; you just wish it, and it happens. Surely a sign of fortune's favor!\n When an ally you can see within 30 feet of you rolls a 1 on the d20 for an attack roll, an ability check, or a saving throw, you can use your reaction to let the ally reroll the die. The ally must use the new roll\n When you use this ability, you can't use your Lucky racial trait before the end of your next turn.", description : "When an ally I can see within 30 ft of me rolls a 1 on an attack roll, an ability check, or a saving throw, I can use my reaction to let the ally reroll the die. The ally must use the new roll. When I use this, I can't use my racial Lucky trait until the end of my next turn.", action : [["reaction", ""]] }; FeatsList["dragon fear"] = { name : "Dragon Fear", source : [["X", 74]], prerequisite : "Being a Dragonborn", prereqeval : function(v) { return CurrentRace.known.indexOf('dragonborn') !== -1; }, descriptionFull : "When angered, you radiate menace. You gain the following benefits:\n \u2022 Increase your Strength, Constitution, or Charisma score by 1, to a maximum of 20.\n \u2022 Instead of exhaling destructive energy, you can expend a use of your Breath Weapon trait to roar, forcing each creature of your choice within 30 feet of you to make a Wisdom saving throw (DC 8 + your proficiency bonus + your Charisma modifier). A target automatically succeeds on the save if it can't hear or see you. On a failed save, a target becomes frightened of you for 1 minute. If the frightened target takes any damage, it can repeat the saving throw, ending the effect on itself on a success.", calculate : "event.value = 'I can use my Breath Weapon to roar instead. Chosen creatures within 30 ft that see and hear me must make a DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Cha Mod'))) + ' Wis save (8 + Prof Bonus + Cha mod) or be frightened of me for 1 min. A target can repeat the save whenever it takes damage. [+1 Str, Con, or Cha]';", scorestxt : "+1 Strength, Constitution, or Charisma", action : [['action', 'Breath Weapon or Dragon Fear', 'Breath Weapon']] }; FeatsList["dragon hide"] = { name : "Dragon Hide", source : [["X", 74]], prerequisite : "Being a Dragonborn", prereqeval : function(v) { return CurrentRace.known.indexOf('dragonborn') !== -1; }, descriptionFull : "You manifest scales and claws reminiscent of your draconic ancestors. You gain the following benefits:\n \u2022 Increase your Strength, Constitution, or Charisma score by 1, to a maximum of 20.\n \u2022 Your scales harden. While you aren't wearing armor, you can calculate your AC as 13 + your Dexterity modifier. You can use a shield and still gain this benefit.\n \u2022 You grow retractable claws from the tips of your fingers. Extending or retracting the claws requires no action. The claws are natural weapons, which you can use to make unarmed strikes. If you hit with them, you deal slashing damage equal to 1d4 + your Strength modifier, instead of the normal bludgeoning damage for an unarmed strike.", description : "I gain retractable claws that I can retract or extend, requiring no action. While extended, my unarmed strikes deal 1d4 slashing damage. My scales harden, giving me an AC of 13 + Dexterity modifier + shield when I'm not wearing armor. [+1 Str, Con, or Cha]", scorestxt : "+1 Strength, Constitution, or Charisma", weaponOptions : [{ baseWeapon : "unarmed strike", regExpSearch : /^(?=.*(retractable|dragon))(?=.*claw).*$/i, name : "Retractable Claws", source : [["X", 74]], damage : [1, 4, "slashing"], selectNow : true }], armorOptions : [{ regExpSearch : /^(?=.*(dragon|draconic|scaly))(?=.*(hide|skin|scales|resilience)).*$/i, name : "Dragon Hide", source : [["X", 74]], ac : 13, selectNow : true }] }; FeatsList["drow high magic"] = { name : "Drow High Magic", source : [["X", 74]], prerequisite : "Being a Drow (Dark Elf)", prereqeval : function(v) { return CurrentRace.known.indexOf('dark elf') !== -1; }, descriptionFull : "You learn more of the magic typical of dark elves. You learn the Detect Magic spell and can cast it at will, without expending a spell slot. You also learn Levitate and Dispel Magic, each of which you can cast once without expending a spell slot. You regain the ability to cast those two spells in this way when you finish a long rest. Charisma is your spellcasting ability for all three spells.", description : "I can cast Detect Magic at will, without expending a spell slot. I can also cast Levitate and Dispel Magic without expending a spell slot, but each only once per long rest. Charisma is my spellcasting ability for these three spells.", spellcastingBonus : [{ name : "At will", spellcastingAbility : 6, spells : ["detect magic"], selection : ["detect magic"], firstCol : 'atwill' }, { name : "Once per long rest", spells : ["levitate"], selection : ["levitate"], firstCol : 'oncelr' }, { name : "Once per long rest", spells : ["dispel magic"], selection : ["dispel magic"], firstCol : 'oncelr' }] }; FeatsList["dwarven fortitude"] = { name : "Dwarven Fortitude", source : [["X", 74]], prerequisite : "Being a Dwarf", prereqeval : function(v) { return CurrentRace.known.indexOf('dwarf') !== -1; }, descriptionFull : "You have the blood of dwarf heroes flowing through your veins. You gain the following benefits:\n \u2022 Increase your Constitution score by 1, to a maximum of 20.\n \u2022 Whenever you take the Dodge action in combat, you can spend one Hit Die to heal yourself. Roll the die, add your Constitution modifier, and regain a number of hit points equal to the total (minimum of 1).", description : "Whenever I take the Dodge action in combat, I can spend one Hit Die to heal myself. I roll the die, add my Constitution modifier, and regain a number of hit points equal to the total (minimum of 1). [+1 Constitution]", scores : [0, 0, 1, 0, 0, 0] }; FeatsList["elven accuracy"] = { name : "Elven Accuracy", source : [["X", 74]], prerequisite : "Being an Elf or a Half-Elf", prereqeval : function(v) { return (/elf|eladrin|avariel|grugach|shadar-kai/i).test(CurrentRace.known); }, descriptionFull : "The accuracy of elves is legendary, especially that of elf archers and spellcasters. You have uncanny aim with attacks that rely on precision rather than brute force. You gain the following benefits:\n \u2022 Increase your Dexterity, Intelligence, Wisdom, or Charisma score by 1, to a maximum of 20.\n \u2022 Whenever you have advantage on an attack roll using Dexterity, Intelligence, Wisdom, or Charisma, you can reroll one of the dice once.", description : "Whenever I have advantage on an attack roll that uses Dexterity, Intelligence, Wisdom, or Charisma, I can reroll one of the dice once. [+1 Dexterity, Intelligence, Wisdom, or Charisma]", scorestxt : "+1 Dexterity, Intelligence, Wisdom, or Charisma" }; FeatsList["fade away"] = { name : "Fade Away", source : [["X", 74]], prerequisite : "Being a Gnome", prereqeval : function(v) { return CurrentRace.known.indexOf('gnome') !== -1; }, descriptionFull : "Your people are clever, with a knack for illusion magic. You have learned a magical trick for fading away when you suffer harm. You gain the following benefits:\n \u2022 Increase your Dexterity or Intelligence score by 1, to a maximum of 20.\n \u2022 Immediately after you take damage, you can use a reaction to magically become invisible until the end of your next turn or until you attack, deal damage, or force someone to make a saving throw. Once you use this ability, you can't do so again until you finish a short or long rest.", description : "As a reaction when I take damage, I can magically become invisible until the end of my next turn or until I attack, deal damage, or force someone to make a saving throw. Once I do this, I can't do so again until I finish a short rest. [+1 Dexterity or Intelligence]", scorestxt : "+1 Dexterity or Intelligence", action : [["reaction", ""]], usages : 1, recovery : "short rest" }; FeatsList["fey teleportation"] = { // this code includes contributions by SoilentBrad name : "Fey Teleportation", source : [["X", 74]], prerequisite : "Being a High Elf", prereqeval : function(v) { return CurrentRace.known.indexOf('high elf') !== -1; }, descriptionFull : "Your study of high elven lore has unlocked fey power that few other elves possess, except your eladrin cousins. Drawing on your fey ancestry, you can momentarily stride through the Feywild to shorten your path from one place to another. You gain the following benefits:\n \u2022 Increase your Intelligence or Charisma score by 1, to a maximum of 20.\n \u2022 You learn to speak, read, and write Sylvan.\n \u2022 You learn the Misty Step spell and can cast it once without expending a spell slot. You regain the ability to cast it in this way when you finish a short or long rest. Intelligence is your spellcasting ability for this spell.", description : "I can cast Misty Step without using a spell slot. I can do so once per short rest. Intelligence is my spellcasting ability for this spell. I also learn to speak, read, and write Sylvan. [+1 Intelligence or Charisma]", scorestxt : "+1 Intelligence or Charisma", spellcastingBonus : [{ name : "Once per short rest", spellcastingAbility : 4, spells : ["misty step"], selection : ["misty step"], firstCol : 'oncesr' }], languageProfs : ["Sylvan"], usages : 1, recovery : "short rest" }; FeatsList["flames of phlegethos"] = { name : "Flames of Phlegethos", source : [["X", 74]], prerequisite : "Being a Tiefling", prereqeval : function(v) { return CurrentRace.known.indexOf('tiefling') !== -1; }, descriptionFull : "You learn to call on hellfire to serve your commands. You gain the following benefits:\n \u2022 Increase your Intelligence or Charisma score by 1, to a maximum of 20.\n \u2022 When you roll fire damage for a spell you cast, you can reroll any roll of 1 on the fire damage dice, but you must use the new roll, even if it is another 1.\n \u2022 Whenever you cast a spell that deals fire damage, you can cause flames to wreathe you until the end of your next turn. The flames don't harm you or your possessions, and they shed bright light out to 30 feet and dim light for an additional 30 feet. While the flames are present, any creature within 5 feet of you that hits you with a melee attack takes 1d4 fire damage.", description : "When I cast a fire damage spell, I can reroll any 1 on fire damage dice once. I then sheathe myself in flame until my next turn ends. These shed bright light in 30 ft, dim light in 30 ft and cause any within 5 ft that hit me in melee to take 1d4 fire damage. [+1 Int or Cha]", scorestxt : "+1 Intelligence or Charisma" }; FeatsList["infernal constitution"] = { name : "Infernal Constitution", source : [["X", 75]], prerequisite : "Being a Tiefling", prereqeval : function(v) { return CurrentRace.known.indexOf('tiefling') !== -1; }, descriptionFull : "Fiendish blood runs strong in you, unlocking a resilience akin to that possessed by some fiends. You gain the following benefits:\n \u2022 Increase your Constitution score by 1, to a maximum of 20.\n \u2022 You have resistance to cold and poison damage.\n \u2022 You have advantage on saving throws against being poisoned.", description : "I have resistance to cold and poison damage and I have advantage on saving throws against being poisoned.\n[+1 Constitution]", scores : [0, 0, 1, 0, 0, 0], dmgres : ["Cold", "Poison"], savetxt : { adv_vs : ["poison"] } }; FeatsList["orcish fury"] = { name : "Orcish Fury", source : [["X", 75]], prerequisite : "Being a Half-Orc", prereqeval : function(v) { return (/^(?=.*half)(?=.*orc).*$/i).test(CurrentRace.known); }, descriptionFull : "Your fury burns tirelessly. You gain the following benefits:\n \u2022 Increase your Strength or Constitution score by 1, to a maximum of 20.\n \u2022 When you hit with an attack using a simple or martial weapon, you can roll one of the weapon's damage dice an additional time and add it as extra damage of the weapon's damage type. Once you use this ability, you can't use it again until you finish a short or long rest.\n \u2022 Immediately after you use your Relentless Endurance trait, you can use your reaction to make one weapon attack.", description : "Once per short rest, I can roll an extra damage die for an attack with a simple or martial weapon. In addition, Immediately after I use my Relentless Endurance trait, I can use my reaction to make one weapon attack. [+1 Strength or Constitution]", scorestxt : "+1 Strength or Constitution", action : [["reaction", " (after Relentless Endurance)"]], usages : 1, recovery : "short rest", additional : "extra damage" }; FeatsList["prodigy"] = { name : "Prodigy", source : [["X", 75]], prerequisite : "Being a Half-Elf, Half-Orc, or Human", prereqeval : function(v) { return (/human|^(?=.*half)(?=.*(elf|orc)).*$/i).test(CurrentRace.known); }, descriptionFull : "You have a knack for learning new things. You gain the following benefits:\n \u2022 You gain one skill proficiency of your choice, one tool proficiency of your choice, and fluency in one language of your choice.\n \u2022 Choose one skill in which you have proficiency. You gain expertise with that skill, which means your proficiency bonus is doubled for any ability check you make with it. The skill you choose must be one that isn't already benefiting from a feature, such as Expertise, that doubles your proficiency bonus.", description : "I gain proficiency with one skill of my choice and expertise with it, or expertise with another skill of my choice that I'm already proficient with. I also gain proficiency with one tool of my choice and fluency in one language of my choice.", skillstxt : "Proficiency with any one skill and Expertise with any one skill that you are already proficient with", languageProfs : [1], toolProfs : [["Any tool", 1]] }; FeatsList["second chance"] = { name : "Second Chance", source : [["X", 75]], prerequisite : "Being a Halfling", prereqeval : function(v) { return CurrentRace.known.indexOf('halfling') !== -1; }, descriptionFull : "Fortune favors you when someone tries to strike you. You gain the following benefits:\n \u2022 Increase your Dexterity, Constitution, or Charisma score by 1, to a maximum of 20.\n \u2022 When a creature you can see hits you with an attack roll, you can use your reaction to force that creature to reroll. Once you use this ability, you can't use it again until you roll initiative at the start of combat or until you finish a short or long rest.", description : "When a creature I can see hits me with an attack roll, I can use my reaction to force that creature to reroll. Once I use this ability, I can't do so again until I roll initiative at the start of combat or I finish a short rest. [+1 Dexterity, Constitution, or Charisma]", scorestxt : "+1 Dexterity, Constitution, or Charisma", action : [["reaction", ""]], usages : 1, recovery : "Combat" }; FeatsList["squat nimbleness"] = { name : "Squat Nimbleness", source : [["X", 75]], prerequisite : "Being a Dwarf or a small race", prereqeval : function(v) { return (/dwarf/i).test(CurrentRace.known) || tDoc.getField('Size Category').currentValueIndices === 4; }, descriptionFull : "You are uncommonly nimble for your race. You gain the following benefits:\n \u2022 Increase your Strength or Dexterity score by 1, to a maximum of 20.\n \u2022 Increase your walking speed by 5 feet.\n \u2022 You gain proficiency in the Acrobatics or Athletics skill (your choice).\n \u2022 You have advantage on any Strength (Athletics) or Dexterity (Acrobatics) check you make to escape from being grappled.", description : "My walking speed increases by 5 ft. I gain proficiency in either the Acrobatics or the Athletics skill. I have advantage on Dexterity (Acrobatics) and Strength (Athletics) checks I make to escape from being grappled. [+1 Strength or Dexterity]", scorestxt : "+1 Strength or Dexterity", skillstxt : "Acrobatics or Athletics", speed : { walk : {spd : "+5", enc : "+5" } } }; FeatsList["wood elf magic"] = { name : "Wood Elf Magic", source : [["X", 75]], prerequisite : "Being a Wood Elf", prereqeval : function(v) { return CurrentRace.known.indexOf('wood elf') !== -1; }, descriptionFull : "You learn the magic of the primeval woods, which are revered and protected by your people. You learn one druid cantrip of your choice. You also learn the Longstrider and Pass Without Trace spells, each of which you can cast once without expending a spell slot. You regain the ability to cast these two spells in this way when you finish a long rest. Wisdom is your spellcasting ability for all three spells.", description : "I learn a druid cantrip. In addition, I can cast Longstrider and Pass Without Trace, without expending a spell slot, but each only once per long rest. Wisdom is my spellcasting ability for these three spells.", spellcastingBonus : [{ name : "Druid Cantrip", spellcastingAbility : 5, "class" : "druid", level : [0, 0], firstCol : 'atwill' }, { name : "Once per long rest", spells : ["longstrider"], selection : ["longstrider"], firstCol : 'oncelr' }, { name : "Once per long rest", spells : ["pass without trace"], selection : ["pass without trace"], firstCol : 'oncelr' }] }; // [dupl_start] Add spells, first those taken from the Elemental Evil Player's Companion, if not already present if (!SourceList.E || !(/Elemental.*Evil.*Player.*Companion/i).test(SourceList.E.name)) { SpellsList["abi-dalzim's horrid wilting"] = { name : "Abi-Dalzim's Horrid Wilting", nameShort : "Abi-D's Horrid Wilting", nameAlt : "Horrid Wilting", classes : ["sorcerer", "wizard"], source : [["X", 150], ["E", 15]], level : 8, school : "Necro", time : "1 a", range : "150 ft", components : "V,S,M", compMaterial : "A bit of sponge", duration : "Instantaneous", save : "Con", description : "30-ft cube all crea 12d8 Necrotic dmg; save halves; plants/water elem. dis. const/undead immune", descriptionFull : "You draw the moisture from every creature in a 30-foot cube centered on a point you choose within range. Each creature in that area must make a Constitution saving throw. Constructs and undead aren't affected, and plants and water elementals make this saving throw with disadvantage. A creature takes 12d8 necrotic damage on a failed save, or half as much damage on a successful one." + "\n " + "Nonmagical plants in the area that aren't creatures, such as trees and shrubs, wither and die instantly." }; SpellsList["absorb elements"] = { name : "Absorb Elements", classes : ["artificer", "druid", "ranger", "sorcerer", "wizard"], source : [["X", 150], ["E", 15]], level : 1, school : "Abjur", time : "1 rea", timeFull : "1 reaction, which you take when you take acid, cold, fire, lightning, or thunder damage", range : "Self", components : "S", duration : "1 rnd", description : "Acid, Cold, Fire, Lightning, or Thunder resistance till next turn start; first melee hit +1d6+1d6/SL dmg", descriptionFull : "The spell captures some of the incoming energy, lessening its effect on you and storing it for your next melee attack. You have resistance to the triggering damage type until the start of your next turn. Also, the first time you hit with a melee attack on your next turn, the target takes an extra 1d6 damage of the triggering type, and the spell ends." + AtHigherLevels + "When you cast this spell using a spell slot of 2nd level or higher, the extra damage increases by 1d6 for each slot level above 1st." }; SpellsList["aganazzar's scorcher"] = { name : "Aganazzar's Scorcher", nameAlt : "Scorch", //as per the Spell Compandium's (DnD 3.5e) alternative name classes : ["sorcerer", "wizard"], source : [["X", 150], ["E", 15]], level : 2, school : "Evoc", time : "1 a", range : "30-ft line", components : "V,S,M", compMaterial : "A red dragon's scale", duration : "Instantaneous", save : "Dex", description : "30-ft long 5-ft wide line all creatures 3d8+1d8/SL Fire dmg; save halves", descriptionFull : "A line of roaring flame 30 feet long and 5 feet wide emanates from you in a direction you choose. Each creature in the line must make a Dexterity saving throw. A creature takes 3d8 fire damage on a failed save, or half as much damage on a successful one." + AtHigherLevels + "When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d8 for each slot level above 2nd." }; SpellsList["beast bond"] = { name : "Beast Bond", classes : ["druid", "ranger"], source : [["X", 150], ["E", 15]], level : 1, school : "Div", time : "1 a", range : "Touch", components : "V,S,M", compMaterial : "A bit of fur wrapped in a cloth", duration : "Conc, 10 min", description : "Telepathic link with 1 beast Int<4 while in line of sight; beast has adv. on attacks vs. crea I can see", descriptionFull : "You establish a telepathic link with one beast you touch that is friendly to you or charmed by you. The spell fails if the beast's Intelligence is 4 or higher. Until the spell ends, the link is active while you and the beast are within line of sight of each other. Through the link, the beast can understand your telepathic messages to it, and it can telepathically communicate simple emotions and concepts back to you. While the link is active, the beast gains advantage on attack rolls against any creature within 5 feet of you that you can see." }; SpellsList["bones of the earth"] = { name : "Bones of the Earth", classes : ["druid"], source : [["X", 150], ["E", 15]], level : 6, school : "Trans", time : "1 a", range : "120 ft", components : "V,S", duration : "Instantaneous", save : "Dex", description : "6+2/SL 5-ft dia stone lift up 30 ft; \u2265Medium crea save or lifted, 6d6 Bludg. dmg if hit ceiling; see B", descriptionShorter : "6+2/SL 5-ft dia stone lift up 30 ft; \u2265Medium crea save or lift, 6d6 Bludg. dmg if hit ceiling; see B", descriptionShorterMetric : "6+2/SL 1,5-m dia stone lift 9 m; \u2265Medium crea save or lift, 6d6 Bludg. dmg if hit ceiling; see B", descriptionFull : "You cause up to six pillars of stone to burst from places on the ground that you can see within range. Each pillar is a cylinder that has a diameter of 5 feet and a height of up to 30 feet. The ground where a pillar appears must be wide enough for its diameter, and you can target the ground under a creature if that creature is Medium or smaller. Each pillar has AC 5 and 30 hit points. When reduced to 0 hit points, a pillar crumbles into rubble, which creates an area of difficult terrain with a 10-foot radius that lasts until the rubble is cleared. Each 5-foot-diameter portion of the area requires at least 1 minute to clear by hand.\n If a pillar is created under a creature, that creature must succeed on a Dexterity saving throw or be lifted by the pillar. A creature can choose to fail the save.\n If a pillar is prevented from reaching its full height because of a ceiling or other obstacle, a creature on the pillar takes 6d6 bludgeoning damage and is restrained, pinched between the pillar and the obstacle. The restrained creature can use an action to make a Strength or Dexterity check (the creature's choice) against the spell's save DC. On a success, the creature is no longer restrained and must either move off the pillar or fall off it." + AtHigherLevels + "When you cast this spell using a spell slot of 7th level or higher, you can create two additional pillars for each slot level above 6th." }; SpellsList["catapult"] = { name : "Catapult", classes : ["artificer", "sorcerer", "wizard"], source : [["X", 150], ["E", 15]], level : 1, school : "Trans", time : "1 a", range : "60 ft", components : "S", duration : "Instantaneous", save : "Dex", description : "Send 5+5/SL lb unattended object in 90 ft straight line; if crea hit, save or 3d8+1d8/SL Bludg. dmg", descriptionFull : "Choose one object weighing 1 to 5 pounds within range that isn't being worn or carried. The object flies in a straight line up to 90 feet in a direction you choose before falling to the ground, stopping early if it impacts against a solid surface. If the object would strike a creature, that creature must make a Dexterity saving throw. On a failed save, the object strikes the target and stops moving. When the object strikes something, the object and what it strikes each take 3d8 bludgeoning damage." + AtHigherLevels + "When you cast this spell using a spell slot of 2nd level or higher, the maximum weight of objects that you can target with this spell increases by 5 pounds, and the damage increases by 1d8, for each slot level above 1st." }; SpellsList["control flames"] = { name : "Control Flames", classes : ["druid", "sorcerer", "wizard"], source : [["X", 152], ["E", 16]], level : 0, school : "Trans", time : "1 a", range : "60 ft", components : "S", duration : "Instant. or 1 h", description : "Nonmagical flame up to 5 cu ft; instant: expand/extinguish, 1h: brighten/dim/color/create shapes", descriptionFull : "You choose nonmagical flame that you can see within range and that fits within a 5-foot cube. You affect it in one of the following ways." + "\n \u2022 " + "You instantaneously expand the flame 5 feet in one direction, provided that wood or other fuel is present in the new location." + "\n \u2022 " + "You instantaneously extinguish the flames within the cube." + "\n \u2022 " + "You double or halve the area of bright light and dim light cast by the flame, change its color, or both. The change lasts for 1 hour." + "\n \u2022 " + "You cause simple shapes-such as the vague form of a creature, an inanimate object, or a location-to appear within the flames and animate as you like. The shapes last for 1 hour." + "\n " + "If you cast this spell multiple times, you can have up to three of its non-instantaneous effects active at a time, and you can dismiss such an effect as an action." }; SpellsList["control winds"] = { name : "Control Winds", classes : ["druid", "sorcerer", "wizard"], source : [["X", 152], ["E", 16], ["UA:D", 8]], level : 5, school : "Trans", time : "1 a", range : "300 ft", components : "V,S", duration : "Conc, 1 h", description : "100-ft cube of air either gusts, downdraft, or updraft; affects flying/jump/ranged; 1 a change; see B", descriptionFull : "You take control of the air in a 100-foot cube that you can see within range. Choose one of the following effects when you cast the spell. The effect lasts for the spell's duration, unless you use your action on a later turn to switch to a different effect. You can also use your action to temporarily halt the effect or to restart one you've halted." + "\n " + toUni("Gusts") + ": A wind picks up within the cube, continually blowing in a horizontal direction you designate. You choose the intensity of the wind: calm, moderate, or strong. If the wind is moderate or strong, ranged weapon attacks that enter or leave the cube or pass through it have disadvantage on their attack rolls. If the wind is strong, any creature moving against the wind must spend 1 extra foot of movement for each foot moved." + "\n " + toUni("Downdraft") + ": You cause a sustained blast of strong wind to blow downward from the top of the cube. Ranged weapon attacks that pass through the cube or that are made against targets within it have disadvantage on their attack rolls. A creature must make a Strength saving throw if it flies into the cube for the first time on a turn or starts its turn there flying. On a failed save, the creature is knocked prone." + "\n " + toUni("Updraft") + ": You cause a sustained updraft within the cube, rising upward from the cube's bottom side. Creatures that end a fall within the cube take only half damage from the fall. When a creature in the cube makes a vertical jump, the creature can jump up to 10 feet higher than normal." }; SpellsList["create bonfire"] = { name : "Create Bonfire", classes : ["artificer", "druid", "sorcerer", "warlock", "wizard"], source : [["X", 152], ["E", 16]], level : 0, school : "Conj", time : "1 a", range : "60 ft", components : "V,S", duration : "Conc, 1 min", save : "Dex", description : "5-ft cube all crea now/enter/end turn save or 1d8 Fire dmg; ignites flammable; +1d8 at CL 5/11/17", descriptionShorter : "5-ft cube all now/enter/end save or 1d8 Fire dmg; ignites flammable; +1d8 at CL 5/11/17", descriptionCantripDie : "5-ft cube all crea at casting, entering, or end turn in save or `CD`d8 Fire dmg; ignites flammable", descriptionFull : "You create a bonfire on ground that you can see within range. Until the spell ends, the magic bonfire fills a 5-foot cube. Any creature in the bonfire's space when you cast the spell must succeed on a Dexterity saving throw or take 1d8 fire damage. A creature must also make the saving throw when it moves into the bonfire's space for the first time on a turn or ends its turn there." + "\n " + "The bonfire ignites flammable objects in its area that aren't being worn or carried." + "\n " + "The spell's damage increases by 1d8 when you reach 5th level (2d8), 11th level (3d8), and 17th level (4d8)." }; SpellsList["dust devil"] = { name : "Dust Devil", classes : ["druid", "sorcerer", "wizard"], source : [["X", 154], ["E", 17]], level : 2, school : "Conj", time : "1 a", range : "60 ft", components : "V,S,M", compMaterial : "A pinch of dust", duration : "Conc, 1 min", save : "Str", description : "5-ft cube; all in 5-ft 1d8+1d8/SL Bludg. dmg and pushed 10 ft away; save halves, no push; see book", descriptionFull : "Choose an unoccupied 5-foot cube of air that you can see within range. An elemental force that resembles a dust devil appears in the cube and lasts for the spell's duration." + "\n " + "Any creature that ends its turn within 5 feet of the dust devil must make a Strength saving throw. On a failed save, the creature takes 1d8 bludgeoning damage and is pushed 10 feet away from the dust devil. On a successful save, the creature takes half as much damage and isn't pushed." + "\n " + "As a bonus action, you can move the dust devil up to 30 feet in any direction. If the dust devil moves over sand, dust, loose dirt, or light gravel, it sucks up the material and forms a 10-foot-radius cloud of debris around itself that lasts until the start of your next turn. The cloud heavily obscures its area." + AtHigherLevels + "When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d8 for each slot level above 2nd." }; SpellsList["earthbind"] = { name : "Earthbind", classes : ["druid", "sorcerer", "warlock", "wizard"], source : [["X", 154], ["E", 17]], level : 2, school : "Trans", time : "1 a", range : "300 ft", components : "V", duration : "Conc, 1 min", save : "Str", description : "1 creatures save or fly speed is reduced to 0; airborne creatures safely descend at 60 ft per round", descriptionFull : "Choose one creature you can see within range. Yellow strips of magical energy loop around the creature. The target must succeed on a Strength saving throw, or its flying speed (if any) is reduced to 0 feet for the spell's duration. An airborne creature affected by this spell safely descends at 60 feet per round until it reaches the ground or the spell ends." }; SpellsList["earth tremor"] = { name : "Earth Tremor", classes : ["bard", "druid", "sorcerer", "wizard"], source : [["X", 155], ["E", 17]], level : 1, school : "Evoc", time : "1 a", range : "10 ft", components : "V,S", duration : "Instantaneous", save : "Dex", description : "All crea in range except me save or 1d6+1d6/SL Bludgeoning dmg and prone; loose ground is dif. ter.", descriptionFull : "You cause a tremor in the ground within range. Each creature other than you in that area must make a Dexterity saving throw. On a failed save, a creature takes 1d6 bludgeoning damage and is knocked prone. If the ground in that area is loose earth or stone, it becomes difficult terrain until cleared, with each 5-foot-diameter portion requiring at least 1 minute to clear by hand." + AtHigherLevels + "When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d6 for each slot level above 1st." }; SpellsList["elemental bane"] = { name : "Elemental Bane", classes : ["artificer", "druid", "warlock", "wizard"], source : [["X", 155], ["E", 17]], level : 4, school : "Trans", time : "1 a", range : "90 ft", components : "V,S", duration : "Conc, 1 min", save : "Con", description : "1+1/SL crea, each max 30 ft apart, save or 1 energy: lose resist. to it \u0026 +2d6 to first dmg with it/turn", descriptionShorter : "1+1/SL crea, each max 30 ft apart, save or 1 energy: lose resist. \u0026 +2d6 first dmg/turn", descriptionFull : "Choose one creature you can see within range, and choose one of the following damage types - acid, cold, fire, lightning, or thunder. The target must succeed on a Constitution saving throw or be affected by the spell for its duration. The first time each turn the affected target takes damage of the chosen type, the target takes an extra 2d6 damage of that type. Moreover, the target loses any resistance to that damage type until the spell ends." + AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, you can target one additional creature for each slot level above 4th. The creatures must be within 30 feet of each other when you target them.", dynamicDamageBonus : { multipleDmgTypes : { dmgTypes : ["acid", "cold", "fire", "lightning", "thunder"], inDescriptionAs : "first" } } }; SpellsList["erupting earth"] = { name : "Erupting Earth", classes : ["druid", "sorcerer", "wizard"], source : [["X", 155], ["E", 17]], level : 3, school : "Trans", time : "1 a", range : "120 ft", components : "V,S,M", compMaterial : "A piece of obsidian", duration : "Instantaneous", save : "Dex", description : "20-ft cube all crea 3d12+1d12/SL Bludgeoning dmg; save halves; area becomes difficult terrain", descriptionFull : "Choose a point you can see on the ground within range. A fountain of churned earth and stone erupts in a 20-foot cube centered on that point. Each creature in that area must make a Dexterity saving throw. A creature takes 3d12 bludgeoning damage on a failed save, or half as much damage on a successful one. Additionally, the ground in that area becomes difficult terrain until cleared. Each 5-foot-square portion of the area requires at least 1 minute to clear by hand." + AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d12 for each slot level above 3rd." }; SpellsList["flame arrows"] = { name : "Flame Arrows", classes : ["artificer", "druid", "ranger", "sorcerer", "wizard"], source : [["X", 156], ["E", 18]], level : 3, school : "Trans", time : "1 a", range : "Touch", components : "V,S", duration : "Conc, 1 h", description : "12+2/SL ammunition drawn from touched quiver do +1d6 Fire damage on a successful hit", descriptionFull : "You touch a quiver containing arrows or bolts. When a target is hit by a ranged weapon attack using a piece of ammunition drawn from the quiver, the target takes an extra 1d6 fire damage. The spell's magic ends on the piece of ammunition when it hits or misses, and the spell ends when twelve pieces of ammunition have been drawn from the quiver." + AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, the number of pieces of ammunition you can affect with this spell increases by two for each slot level above 3rd." }; SpellsList["frostbite"] = { name : "Frostbite", classes : ["artificer", "druid", "sorcerer", "warlock", "wizard"], source : [["X", 156], ["E", 18]], level : 0, school : "Evoc", time : "1 a", range : "60 ft", components : "V,S", duration : "Instantaneous", save : "Con", description : "1 crea save or 1d6 Cold dmg and dis. on next weapon attack roll; +1d6 at CL 5, 11, and 17", descriptionCantripDie : "1 crea save or `CD`d6 Cold dmg and dis. on next weapon attack roll", descriptionFull : "You cause numbing frost to form on one creature that you can see within range. The target must make a Constitution saving throw. On a failed save, the target takes 1d6 cold damage, and it has disadvantage on the next weapon attack roll it makes before the end of its next turn." + "\n " + "The spell's damage increases by 1d6 when you reach 5th level (2d6), 11th level (3d6), and 17th level (4d6)." }; SpellsList["gust"] = { name : "Gust", classes : ["druid", "sorcerer", "wizard"], source : [["X", 157], ["E", 19], ["E:RLW", 50], ["UA:D", 6], ["WGtE", 107]], level : 0, school : "Trans", time : "1 a", range : "30 ft", components : "V,S", duration : "Instantaneous", save : "Str", description : "Med. or smaller crea save or push 5 ft; or push unattended 5 lb obj 10 ft; or harmless sensory effect", descriptionFull : "You seize the air and compel it to create one of the following effects at a point you can see within range." + "\n " + "\u2022 One Medium or smaller creature that you choose must succeed on a Strength saving throw or be pushed up to 5 feet away from you." + "\n " + "\u2022 You create a small blast of air capable of moving one object that is neither held nor carried and that weighs no more than 5 pounds. The object is pushed up to 10 feet away from you. It isn't pushed with enough force to cause damage." + "\n " + "\u2022 You create a harmless sensory affect using air, such as causing leaves to rustle, wind to slam shutters shut, or your clothing to ripple in a breeze." }; SpellsList["ice knife"] = { name : "Ice Knife", classes : ["druid", "sorcerer", "wizard"], source : [["X", 157], ["E", 19]], level : 1, school : "Conj", time : "1 a", range : "60 ft", components : "S,M", compMaterial : "A drop of water or piece of ice", duration : "Instantaneous", save : "Dex", description : "Ranged atk for 1d10 Piercing dmg; hit/miss 5-ft rad on target all crea save or 2d6+1d6/SL Cold dmg", descriptionShorter : "Ranged atk 1d10 Piercing dmg; on target 5-ft rad all crea save or 2d6+1d6/SL Cold dmg", descriptionFull : "You create a shard of ice and fling it at one creature within range. Make a ranged spell attack against the target. On a hit, the target takes 1d10 piercing damage. Hit or miss, the shard then explodes. The target and each creature within 5 feet of it must succeed on a Dexterity saving throw or take 2d6 cold damage." + AtHigherLevels + "When you cast this spell using a spell slot of 2nd level or higher, the cold damage increases by 1d6 for each slot level above 1st.", dynamicDamageBonus : { skipDmgGroupIfNotMultiple : /(atk .*piercing dmg.*?)/i } }; SpellsList["immolation"] = { name : "Immolation", classes : ["sorcerer", "wizard"], source : [["X", 158], ["E", 19]], level : 5, school : "Evoc", time : "1 a", range : "90 ft", components : "V", duration : "Conc, 1 min", save : "Dex", description : "1 crea save or 8d6 Fire dmg \u0026 burns for 4d6 Fire dmg/rnd; save each rnd to end; save half, no burning", descriptionShorter : "1 crea save or 8d6 Fire dmg \u0026 4d6 Fire dmg/rnd; save each rnd to end; save half, no rnds", descriptionFull : "Flames wreathe one creature you can see within range. The target must make a Dexterity saving throw. It takes 8d6 fire damage on a failed save, or half as much damage on a successful one. On a failed save, the target also burns for the spell's duration. The burning target sheds bright light in a 30-foot radius and dim light for an additional 30 feet. At the end of each of its turns, the target repeats the saving throw. It takes 4d6 fire damage on a failed save, and the spell ends on a successful one. These magical flames can't be extinguished by nonmagical means." + "\n " + "If damage from this spell kills a target, the target is turned to ash.", dynamicDamageBonus : { multipleDmgMoments : false } }; SpellsList["investiture of flame"] = { name : "Investiture of Flame", classes : ["druid", "sorcerer", "warlock", "wizard"], source : [["X", 159], ["E", 19]], level : 6, school : "Trans", time : "1 a", range : "Self", components : "V,S", duration : "Conc, 10 min", save : "Dex", description : "Fire immune; Cold res.; 1d10 Fire dmg in 5 ft; 1 a 15-ft long 5-ft wide all crea 4d8 Fire dmg, save half", descriptionShorter : "Fire im.; Cold res.; 1d10 Fire dmg in 5 ft; 1a 15-ft long 5-ft wide all 4d8 Fire dmg, save half", descriptionShorterMetric : "Fire immune; Cold res.; 1d10 Fire dmg in 1,5 m; 1 a 4,5-m long all 4d8 Fire dmg, save half", descriptionFull : "Flames race across your body, shedding bright light in a 30-foot radius and dim light for an additional 30 feet for the spell's duration. The flames don't harm you. Until the spell ends, you gain the following benefits." + "\n " + "\u2022 You are immune to fire damage and have resistance to cold damage." + "\n " + "\u2022 Any creature that moves within 5 feet of you for the first time on a turn or ends its turn there takes 1d10 fire damage." + "\n " + "\u2022 You can use your action to create a line of fire 15 feet long and 5 feet wide extending from you in a direction you choose. Each creature in the line must make a Dexterity saving throw. A creature takes 4d8 fire damage on a failed save, or half as much damage on a successful one." }; SpellsList["investiture of ice"] = { name : "Investiture of Ice", classes : ["druid", "sorcerer", "warlock", "wizard"], source : [["X", 159], ["E", 19]], level : 6, school : "Trans", time : "1 a", range : "Self", components : "V,S", duration : "Conc, 10 min", save : "Con", description : "Cold im.; Fire res.; 10-ft rad dif. ter.; 1 a 15-ft cone all crea 4d6 Cold dmg, half spd; save half, no spd", descriptionShorter : "Cold im.; Fire res.; 10-ft rad dif. ter.; 1 a 15-ft cone all 4d6 Cold dmg, half speed; save half", descriptionFull : "Until the spell ends, ice rimes your body, and you gain the following benefits." + "\n " + "\u2022 You are immune to cold damage and have resistance to fire damage." + "\n " + "\u2022 You can move across difficult terrain created by ice or snow without spending extra movement." + "\n " + "\u2022 The ground in a 10-foot radius around you is icy and is difficult terrain for creatures other than you. The radius moves with you." + "\n " + "\u2022 You can use your action to create a 15-foot cone of freezing wind extending from your outstretched hand in a direction you choose. Each creature in the cone must make a Constitution saving throw. A creature takes 4d6 cold damage on a failed save, or half as much damage on a successful one. A creature that fails its save against this effect has its speed halved until the start of your next turn." }; SpellsList["investiture of stone"] = { name : "Investiture of Stone", classes : ["druid", "sorcerer", "warlock", "wizard"], source : [["X", 159], ["E", 19]], level : 6, school : "Trans", time : "1 a", range : "Self", components : "V,S", duration : "Conc, 10 min", save : "Dex", description : "Nonmagical Bludg/Pierc/Slash resist.; 1 a 15-ft rad all crea save or prone; move through earth/stone", descriptionFull : "Until the spell ends, bits of rock spread across your body, and you gain the following benefits:" + "\n \u2022 " + "You have resistance to bludgeoning, piercing, and slashing damage from nonmagical attacks." + "\n \u2022 " + "You can use your action to create a small earthquake on the ground in a 15-foot radius centered on you. Other creatures on that ground must succeed on a Dexterity saving throw or be knocked prone." + "\n \u2022 " + "You can move across difficult terrain made of earth or stone without spending extra movement. You can move through solid earth or stone as if it was air and without destabilizing it, but you can't end your movement there. If you do so, you are ejected to the nearest unoccupied space, this spell ends, and you are stunned until the end of your next turn." }; SpellsList["investiture of wind"] = { name : "Investiture of Wind", classes : ["druid", "sorcerer", "warlock", "wizard"], source : [["X", 160], ["E", 20]], level : 6, school : "Trans", time : "1 a", range : "Self", components : "V,S", duration : "Conc, 10 min", save : "Con", description : "Rngd wea atks dis. vs. me; fly 60 ft; 1 a 15-ft cube in 60 ft all 2d10 Bludg. dmg, push 10 ft, save half", descriptionShorter : "Rngd wea atk dis; fly 60 ft; 1 a 15-ft cu in 60 ft all 2d10 Bludg. dmg, push 10 ft, save half", descriptionFull : "Until the spell ends, wind whirls around you, and you gain the following benefits." + "\n " + "\u2022 Ranged weapon attacks made against you have disadvantage on the attack roll." + "\n " + "\u2022 You gain a flying speed of 60 feet. If you are still flying when the spell ends, you fall, unless you can somehow prevent it." + "\n " + "\u2022 You can use your action to create a 15-foot cube of swirling wind centered on a point you can see within 60 feet of you. Each creature in that area must make a Constitution saving throw. A creature takes 2d10 bludgeoning damage on a failed save, or half as much damage on a successful one. If a Large or smaller creature fails the save, that creature is also pushed up to 10 feet away from the center of the cube." }; SpellsList["maelstrom"] = { name : "Maelstrom", classes : ["druid"], source : [["X", 160], ["E", 20]], level : 5, school : "Evoc", time : "1 a", range : "120 ft", components : "V,S,M", compMaterial : "Paper or leaf in the shape of a funnel", duration : "Conc, 1 min", save : "Str", description : "5-ft deep 30-ft rad dif. ter.; all crea starting turn in save or 6d6 Bludg. dmg and pulled 10 ft to center", descriptionShorter : "5-ft deep 30-ft rad dif. ter.; all start turn in save or 6d6 Bludg. dmg \u0026 pull 10 ft to center", descriptionFull : "A mass of 5-foot-deep water appears and swirls in a 30-foot radius centered on a point you can see within range. The point must be on ground or in a body of water. Until the spell ends, that area is difficult terrain, and any creature that starts its turn there must succeed on a Strength saving throw or take 6d6 bludgeoning damage and be pulled 10 feet toward the center." }; SpellsList["magic stone"] = { name : "Magic Stone", classes : ["artificer", "druid", "warlock"], source : [["X", 160], ["E", 20]], level : 0, school : "Trans", time : "1 bns", range : "Touch", components : "V,S", duration : "1 min", description : "Imbue 3 pebbles for spell attacks, thrown 60 ft or with sling, do 1d6+spellcasting mod Bludg. dmg", descriptionShorter : "Imbue 3 pebbles for spell atk, thrown 60 ft or sling, do 1d6+spellcasting mod Bludg. dmg", descriptionFull : "You touch one to three pebbles and imbue them with magic. You or someone else can make a ranged spell attack with one of the pebbles by throwing it or hurling it with a sling. If thrown, it has a range of 60 feet. If someone else attacks with the pebble, that attacker adds your spellcasting ability modifier, not the attacker's, to the attack roll. On a hit, the target takes bludgeoning damage equal to 1d6 + your spellcasting ability modifier. Hit or miss, the spell then ends on the stone." + "\n " + "If you cast this spell again, the spell ends early on any pebbles still affected by it." }; SpellsList["maximilian's earthen grasp"] = { name : "Maximilian's Earthen Grasp", nameShort : "Max's Earthen Grasp", nameAlt : "Earthen Grasp", classes : ["sorcerer", "wizard"], source : [["X", 161], ["E", 20]], level : 2, school : "Trans", time : "1 a", range : "30 ft", components : "V,S,M", compMaterial : "A miniature hand sculpted from clay", duration : "Conc, 1 min", save : "Str", description : "Medium hand atks 1 crea: save or 2d6 Bludg. dmg \u0026 restrained; 1 a hand moves/atks, releases; see B", descriptionShorter : "Medium hand atk 1 crea: save or 2d6 Bludg. dmg \u0026 restrained; 1 a move/atk, release; see B", descriptionFull : "You choose a 5-foot-square unoccupied space on the ground that you can see within range. A Medium hand made from compacted soil rises there and reaches for one creature you can see within 5 feet of it. The target must make a Strength saving throw. On a failed save, the target takes 2d6 bludgeoning damage and is restrained for the spell's duration." + "\n " + "As an action, you can cause the hand to crush the restrained target, which must make a Strength saving throw. The target takes 2d6 bludgeoning damage on a failed save, or half as much damage on a successful one." + "\n " + "To break out, the restrained target can use its action to make a Strength check against your spell save DC. On a success, the target escapes and is no longer restrained by the hand." + "\n " + "As an action, you can cause the hand to reach for a different creature or to move to a different unoccupied space within range. The hand releases a restrained target if you do either." }; SpellsList["melf's minute meteors"] = { name : "Melf's Minute Meteors", nameAlt : "Minute Meteors", classes : ["sorcerer", "wizard"], source : [["X", 161], ["E", 20]], level : 3, school : "Evoc", time : "1 a", range : "Self", components : "V,S,M", compMaterial : "Niter, sulfur, and pine tar formed into a bead", duration : "Conc, 10 min", save : "Dex", description : "6+2/SL meteors; at casting/bns a send up to two 120 ft for 5-ft rad all crea 2d6 Fire dmg; save half", descriptionShorter : "6+2/SL meteors; at cast/bns a send up to two 120 ft for 5-ft rad all 2d6 Fire dmg; save half", descriptionFull : "You create six tiny meteors in your space. They float in the air and orbit you for the spell's duration. When you cast the spell-and as a bonus action on each of your turns thereafter-you can expend one or two of the meteors, sending them streaking toward a point or points you choose within 120 feet of you. Once a meteor reaches its destination or impacts against a solid surface, the meteor explodes. Each creature within 5 feet of the point where the meteor explodes must make a Dexterity saving throw. A creature takes 2d6 fire damage on a failed save, or half as much damage on a successful one." + AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, the number of meteors created increases by two for each slot level above 3rd." }; SpellsList["mold earth"] = { name : "Mold Earth", classes : ["druid", "sorcerer", "wizard"], source : [["X", 162], ["E", 21]], level : 0, school : "Trans", time : "1 a", range : "30 ft", components : "S", duration : "Instant. or 1 h", description : "5 cu ft earth; instant.: excavate; 1h: change to difficult or normal terrain, or change shape and color", descriptionFull : "You choose a portion of dirt or stone that you can see within range and that fits within a 5-foot cube. You manipulate it in one of the following ways." + "\n " + "\u2022 If you target an area of loose earth, you can instantaneously excavate it, move it along the ground, and deposit it up to 5 feet away. This movement doesn't have enough force to cause damage." + "\n " + "\u2022 You cause shapes, colors, or both to appear on the dirt or stone, spelling out words, creating images, or shaping patterns. The changes last for 1 hour." + "\n " + "\u2022 If the dirt or stone you target is on the ground, you cause it to become difficult terrain. Alternatively, you can cause the ground to become normal terrain if it is already difficult terrain. This change lasts for 1 hour." + "\n\n" + "If you cast this spell multiple times, you can have no more than two of its non-instantaneous effects active at a time, and you can dismiss such an effect as an action." }; SpellsList["primordial ward"] = { name : "Primordial Ward", classes : ["druid"], source : [["X", 163], ["E", 21]], level : 6, school : "Abjur", time : "1 a", range : "Self", components : "V,S", duration : "Conc, 1 min", description : "Acid, Cold, Fire, Lightning, and Thunder resistance; use rea to gain 1 immunity for 1 rnd, spell ends", descriptionFull : "You have resistance to acid, cold, fire, lightning, and thunder damage for the spell's duration." + "\n " + "When you take damage of one of those types, you can use your reaction to gain immunity to that type of damage, including against the triggering damage. If you do so, the resistances end, and you have the immunity until the end of your next turn, at which time the spell ends." }; SpellsList["pyrotechnics"] = { name : "Pyrotechnics", classes : ["artificer", "bard", "sorcerer", "wizard"], source : [["X", 163], ["E", 21]], level : 2, school : "Trans", time : "1 a", range : "60 ft", components : "V,S", duration : "Instantaneous", save : "Con", description : "5 cu ft nonma. flame extinguish, or 10-ft rad all crea save or blind 1 rnd, or 20-ft rad hvy obsc. 1 min", descriptionFull : "Choose an area of nonmagical flame that you can see and that fits within a 5-foot cube within range. You can extinguish the fire in that area, and you create either fireworks or smoke when you do so." + "\n " + toUni("Fireworks") + ": The target explodes with a dazzling display of colors. Each creature within 10 feet of the target must succeed on a Constitution saving throw or become blinded until the end of your next turn." + "\n " + toUni("Smoke") + ": Thick black smoke spreads out from the target in a 20-foot radius, moving around corners. The area of the smoke is heavily obscured. The smoke persists for 1 minute or until a strong wind disperses it." }; SpellsList["shape water"] = { name : "Shape Water", classes : ["druid", "sorcerer", "wizard"], source : [["X", 164], ["E", 21], ["W", 172]], level : 0, school : "Trans", time : "1 a", range : "30 ft", components : "S", duration : "Instant. or 1 h", description : "5 cu ft water; instant: move/change flow; 1h: simple shapes/change color or opacity/freeze", descriptionFull : "You choose an area of water that you can see within range and that fits within a 5-foot cube. You manipulate it in one of the following ways." + "\n " + "\u2022 You instantaneously move or otherwise change the flow of the water as you direct, up to 5 feet in any direction. This movement doesn't have enough force to cause damage." + "\n " + "\u2022 You cause the water to form into simple shapes and animate at your direction. This change lasts for 1 hour." + "\n " + "\u2022 You change the water's color or opacity. The water must be changed in the same way throughout. This change lasts for 1 hour." + "\n " + "\u2022 You freeze the water, provided that there are no creatures in it. The water unfreezes in 1 hour." + "\n\n" + "If you cast this spell multiple times, you can have no more than two of its non-instantaneous effects active at a time, and you can dismiss such an effect as an action." }; SpellsList["skywrite"] = { name : "Skywrite", classes : ["artificer", "bard", "druid", "wizard"], source : [["X", 165], ["E", 22]], ritual : true, level : 2, school : "Trans", time : "1 a", range : "Sight", components : "V,S", duration : "Conc, 1 h", description : "Write up to 10 words with clouds in a part of the sky I can see; strong wind can diperse the clouds", descriptionFull : "You cause up to ten words to form in a part of the sky you can see. The words appear to be made of cloud and remain in place for the spell's duration. The words dissipate when the spell ends. A strong wind can disperse the clouds and end the spell early." }; SpellsList["snilloc's snowball swarm"] = { name : "Snilloc's Snowball Swarm", nameAlt : "Snowball Swarm", classes : ["sorcerer", "wizard"], source : [["X", 165], ["E", 22]], level : 2, school : "Evoc", time : "1 a", range : "90 ft", components : "V,S,M", compMaterial : "A piece of ice or a small white rock chip", duration : "Instantaneous", save : "Dex", description : "5-ft radius all creatures 3d6+1d6/SL Cold damage; save halves", descriptionFull : "A flurry of magic snowballs erupts from a point you choose within range. Each creature in a 5-foot-radius sphere centered on that point must make a Dexterity saving throw. A creature takes 3d6 cold damage on a failed save, or half as much damage on a successful one." + AtHigherLevels + "When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d6 for each slot level above 2nd." }; SpellsList["storm sphere"] = { name : "Storm Sphere", classes : ["sorcerer", "wizard"], source : [["X", 166], ["E", 22]], level : 4, school : "Evoc", time : "1 a", range : "150 ft", components : "V,S", duration : "Conc, 1 min", save : "Str", description : "20-ft rad dif. ter., all now/end turn save or 2d6 Bludg. dmg; bns a 60 ft atk 4d6 Lightn. dmg; +1d6/SL", descriptionShorter : "20-ft rad dif. ter., all save/turn 2d6 Bludg. dmg; bns a 60 ft atk 4d6 Lightn. dmg; +1d6/SL", descriptionFull : "A 20-foot-radius sphere of whirling air springs into existence centered on a point you choose within range. The sphere remains for the spell's duration. Each creature in the sphere when it appears or that ends its turn there must succeed on a Strength saving throw or take 2d6 bludgeoning damage. The sphere's space is difficult terrain." + "\n " + "Until the spell ends, you can use a bonus action on each of your turns to cause a bolt of lightning to leap from the center of the sphere toward one creature you choose within 60 feet of the center. Make a ranged spell attack. You have advantage on the attack roll if the target is in the sphere. On a hit, the target takes 4d6 lightning damage." + "\n " + "Creatures within 30 feet of the sphere have disadvantage on Wisdom (Perception) checks made to listen." + AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, the damage increases for each of its effects by 1d6 for each slot level above 4th." }; SpellsList["thunderclap"] = { name : "Thunderclap", classes : ["artificer", "bard", "druid", "sorcerer", "warlock", "wizard"], source : [["X", 168], ["E", 22]], level : 0, school : "Evoc", time : "1 a", range : "5 ft", components : "S", duration : "Instantaneous", save : "Con", description : "100-ft rad audible; all crea but me in area save or 1d6 Thunder dmg; +1d6 at CL 5, 11, and 17", descriptionCantripDie : "100-ft rad audible; all crea but me in area save or `CD`d6 Thunder dmg", descriptionFull : "You create a burst of thunderous sound that can be heard up to 100 feet away. Each creature within range, other than you, must succeed on a Constitution saving throw or take 1d6 thunder damage." + "\n " + "The spell's damage increases by 1d6 when you reach 5th level (2d6), 11th level (3d6), and 17th level (4d6)." }; SpellsList["tidal wave"] = { name : "Tidal Wave", classes : ["druid", "sorcerer", "wizard"], source : [["X", 168], ["E", 22]], level : 3, school : "Conj", time : "1 a", range : "120 ft", components : "V,S,M", compMaterial : "A drop of water", duration : "Instantaneous", save : "Dex", description : "30-ft x 10-ft, 10-ft high all crea 4d8 Bludg. dmg and prone; save halves not prone; extinguish flames", descriptionFull : "You conjure up a wave of water that crashes down on an area within range. The area can be up to 30 feet long, up to 10 feet wide, and up to 10 feet tall. Each creature in that area must make a Dexterity saving throw. On a failed save, a creature takes 4d8 bludgeoning damage and is knocked prone. On a successful save, a creature takes half as much damage and isn't knocked prone. The water then spreads out across the ground in all directions, extinguishing unprotected flames in its area and within 30 feet of it, and then it vanishes." }; SpellsList["transmute rock"] = { name : "Transmute Rock", classes : ["artificer", "druid", "wizard"], source : [["X", 169], ["E", 22]], level : 5, school : "Trans", time : "1 a", range : "120 ft", components : "V,S,M", compMaterial : "Clay and water", duration : "Until dispelled", description : "40 cu ft stone to mud or mud to stone; mud and stone restrains; mud from ceiling falls; see book", descriptionFull : "You choose an area of stone or mud that you can see that fits within a 40-foot cube and is within range, and choose one of the following effects." + "\n " + toUni("Transmute Rock to Mud") + ": Nonmagical rock of any sort in the area becomes an equal volume of thick, flowing mud that remains for the spell's duration." + "\n " + "The ground in the spell's area becomes muddy enough that creatures can sink into it. Each foot that a creature moves through the mud costs 4 feet of movement, and any creature on the ground when you cast the spell must make a Strength saving throw. A creature must also make the saving throw when it moves into the area for the first time on a turn or ends its turn there. On a failed save, a creature sinks into the mud and is restrained, though it can use an action to end the restrained condition on itself by pulling itself free of the mud." + "\n " + "If you cast the spell on a ceiling, the mud falls. Any creature under the mud when it falls must make a Dexterity saving throw. A creature takes 4d8 bludgeoning damage on a failed save, or half as much damage on a successful one." + "\n " + toUni("Transmute Mud to Rock") + ": Nonmagical mud or quicksand in the area no more than 10 feet deep transforms into soft stone for the spell's duration. Any creature in the mud when it transforms must make a Dexterity saving throw. On a successful save, a creature is shunted safely to the surface in an unoccupied space. On a failed save, a creature becomes restrained by the rock. A restrained creature, or another creature within reach, can use an action to try to break the rock by succeeding on a DC 20 Strength check or by dealing damage to it. The rock has AC 15 and 25 hit points, and it is immune to poison and psychic damage." }; SpellsList["vitriolic sphere"] = { name : "Vitriolic Sphere", classes : ["sorcerer", "wizard"], source : [["X", 170], ["E", 23]], level : 4, school : "Evoc", time : "1 a", range : "150 ft", components : "V,S,M", compMaterial : "A drop of giant slug bile", duration : "Instantaneous", save : "Dex", description : "20-ft rad all crea 10d4+2d4/SL Acid dmg, +5d4 dmg next turn end; save half \u0026 no dmg next turn", descriptionShorter : "20-ft rad all crea 10d4+2d4/SL Acid dmg, +5d4 dmg next turn; save half \u0026 no next turn", descriptionFull : "You point at a location within range, and a glowing, 1-foot-diameter ball of emerald acid streaks there and explodes in a 20-foot-radius sphere. Each creature in that area must make a Dexterity saving throw. On a failed save, a creature takes 10d4 acid damage and another 5d4 acid damage at the end of its next turn. On a successful save, a creature takes half the initial damage and no damage at the end of its next turn." + AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, the initial damage increases by 2d4 for each slot level above 4th.", dynamicDamageBonus : { multipleDmgMoments : false, extraDmgGroupsSameType : /((?:\+?\d+d?\d*)+)( dmg next turn)/i } }; SpellsList["wall of sand"] = { name : "Wall of Sand", classes : ["wizard"], source : [["X", 170], ["E", 23]], level : 3, school : "Evoc", time : "1 a", range : "90 ft", components : "V,S,M", compMaterial : "A handful of sand", duration : "Conc, 10 min", description : "30\xD710\xD710ft (l\xD7w\xD7h) wall on the ground; blocks line of sight; blinded while inside; 1/3 move", descriptionMetric : "9\xD73\xD73m (l\xD7w\xD7h) wall on the ground; blocks line of sight; blinded while inside; 1/3 move", descriptionFull : "You conjure up a wall of swirling sand on the ground at a point you can see within range. You can make the wall up to 30 feet long, 10 feet high, and 10 feet thick, and it vanishes when the spell ends. It blocks line of sight but not movement. A creature is blinded while in the wall's space and must spend 3 feet of movement for every 1 foot it moves there." }; SpellsList["wall of water"] = { name : "Wall of Water", classes : ["druid", "sorcerer", "wizard"], source : [["X", 170], ["E", 23], ["V", 116], ["MOT", 27]], level : 3, school : "Evoc", time : "1 a", range : "60 ft", components : "V,S,M", compMaterial : "A drop of water", duration : "Conc, 10 min", description : "30\xD71\xD710ft (l\xD7w\xD7h) or 20-ft rad 20-ft high; dif. ter.; range wea dis.; Fire dmg half; Cold dmg freezes", descriptionMetric : "9\xD70,3\xD73m (l\xD7w\xD7h) or 6-m rad 6-m high; dif. ter.; ranged wea dis.; Fire dmg half; Cold dmg freezes", descriptionFull : "You conjure up a wall of water on the ground at a point you can see within range. You can make the wall up to 30 feet long, 10 feet high, and 1 foot thick, or you can make a ringed wall up to 20 feet in diameter, 20 feet high, and 1 foot thick. The wall vanishes when the spell ends. The wall's space is difficult terrain." + "\n " + "Any ranged weapon attack that enters the wall's space has disadvantage on the attack roll, and fire damage is halved if the fire effect passes through the wall to reach its target. Spells that deal cold damage that pass through the wall cause the area of the wall they pass through to freeze solid (at least a 5-foot square section is frozen). Each 5-foot-square frozen section has AC 5 and 15 hit points. Reducing a frozen section to 0 hit points destroys it. When a section is destroyed, the wall's water doesn't fill it." }; SpellsList["warding wind"] = { name : "Warding Wind", classes : ["bard", "druid", "sorcerer", "wizard"], source : [["X", 170], ["E", 23]], level : 2, school : "Evoc", time : "1 a", range : "S:10-ft rad", components : "V", duration : "Conc, 10 min", description : "Strong (20 mph) wind around me deafens/extinguishes unprotected flames/dif. ter./ranged wea dis.", descriptionMetric : "Strong (32 kph) wind around me deafens/extinguishes unprotected flames/dif. ter./ranged wea dis.", descriptionFull : "A strong wind (20 miles per hour) blows around you in a 10-foot radius and moves with you, remaining centered on you. The wind lasts for the spell's duration.\n The wind has the following effects."+ "\n \u2022 It deafens you and other creatures in its area."+ "\n \u2022 It extinguishes unprotected flames in its area that are torch-sized or smaller."+ "\n \u2022 The area is difficult terrain for creatures other than you."+ "\n \u2022 The attack rolls of ranged weapon attacks have disadvantage if they pass in or out of the wind."+ "\n \u2022 It hedges out vapor, gas, and fog that can be dispersed by strong wind." }; SpellsList["watery sphere"] = { name : "Watery Sphere", classes : ["druid", "sorcerer", "wizard"], source : [["X", 170], ["E", 23]], level : 4, school : "Conj", time : "1 a", range : "90 ft", components : "V,S,M", compMaterial : "A droplet of water", duration : "Conc, 1 min", save : "Str", description : "5-ft rad all crea < Huge save or restrained; on save ejected; save each rnd; 1 a move sphere 30 ft", descriptionFull : "You conjure up a sphere of water with a 5-foot radius at a point you can see within range. The sphere can hover but no more than 10 feet off the ground. The sphere remains for the spell's duration." + "\n " + "Any creature in the sphere's space must make a Strength saving throw. On a successful save, a creature is ejected from that space to the nearest unoccupied space of the creature's choice outside the sphere. A Huge or larger creature succeeds on the saving throw automatically, and a Large or smaller creature can choose to fail it. On a failed save, a creature is restrained by the sphere and is engulfed by the water. At the end of each of its turns, a restrained target can repeat the saving throw, ending the effect on itself on a success." + "\n " + "The sphere can restrain as many as four Medium or smaller creatures or one Large creature. If the sphere restrains a creature that causes it to exceed this capacity, a random creature that was already restrained by the sphere falls out of it and lands prone in a space within 5 feet of it." + "\n " + "As an action, you can move the sphere up to 30 feet in a straight line. If it moves over a pit, a cliff, or other drop-off, it safely descends until it is hovering 10 feet above the ground. Any creature restrained by the sphere moves with it. You can ram the sphere into creatures, forcing them to make the saving throw." + "\n " + "When the spell ends, the sphere falls to the ground and extinguishes all normal flames within 30 feet of it. Any creature restrained by the sphere is knocked prone in the space where it falls. The water then vanishes." }; SpellsList["whirlwind"] = { name : "Whirlwind", classes : ["druid", "sorcerer", "wizard"], source : [["X", 171], ["E", 24]], level : 7, school : "Evoc", time : "1 a", range : "300 ft", components : "V,M", compMaterial : "A piece of straw", duration : "Conc, 1 min", save : "Dex", description : "10-ft rad 30-ft high all crea 10d6 Bludg. dmg; save halves; restrains; 1 a move 30 ft; see book", descriptionFull : "A whirlwind howls down to a point that you can see on the ground within range. The whirlwind is a 10-foot-radius, 30-foot-high cylinder centered on that point. Until the spell ends, you can use your action to move the whirlwind up to 30 feet in any direction along the ground. The whirlwind sucks up any Medium or smaller objects that aren't secured to anything and that aren't worn or carried by anyone." + "\n " + "A creature must make a Dexterity saving throw the first time on a turn that it enters the whirlwind or that the whirlwind enters its space, including when the whirlwind first appears. A creature takes 10d6 bludgeoning damage on a failed save, or half as much damage on a successful one. In addition, a Large or smaller creature that fails the save must succeed on a Strength saving throw or become restrained in the whirlwind until the spell ends. When a creature starts its turn restrained by the whirlwind, the creature is pulled 5 feet higher inside it, unless the creature is at the top. A restrained creature moves with the whirlwind and falls when the spell ends, unless the creature has some means to stay aloft." + "\n " + "A restrained creature can use an action to make a Strength or Dexterity check against your spell save DC. If successful, the creature is no longer restrained by the whirlwind and is hurled 3d6 \xD7 10 feet away from it in a random direction." }; }; // dupl_end // Then add the new spells from XGtE (contains contributions by SoilentBrad) SpellsList["catnap"] = { name : "Catnap", classes : ["artificer", "bard", "sorcerer", "wizard"], source : [["X", 151]], level : 3, school : "Ench", time : "1 a", range : "30 ft", components : "S,M", compMaterial : "A pinch of sand", duration : "10 min", description : "3+1/SL willing crea unconscious for 10 min to gain benefits of short rest; Ends if dmg or 1 a to wake", descriptionFull : "You make a calming gesture, and up to three willing creatures of your choice that you can see within range fall unconscious for the spell's duration. The spell ends on a target early if it takes damage or someone uses an action to shake or slap it awake. If a target remains unconscious for the full duration, that target gains the benefit of a short rest, and it can't be affected by this spell again until it finishes a long rest." + AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, you can target one additional willing creature for each slot level above 3rd." }; SpellsList["cause fear"] = { name : "Cause Fear", classes : ["warlock", "wizard"], source : [["X", 151]], level : 1, school : "Necro", time : "1 a", range : "60 ft", components : "V", duration : "Conc, 1 min", save : "Wis", description : "1+1/SL crea (not construct/undead), each max 30 ft apart, save or frightened; save end of each turn", descriptionFull : "You awaken the sense of mortality in one creature you can see within range. A construct or an undead is immune to this effect. The target must succeed on a Wisdom saving throw or become frightened of you until the spell ends. The frightened target can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success." + AtHigherLevels + "When you cast this spell using a spell slot of 2nd level or higher, you can target one additional creature for each slot level above 1st. The creatures must be within 30 feet of each other when you target them." }; SpellsList["ceremony"] = { name : "Ceremony", classes : ["cleric", "paladin"], source : [["X", 151]], ritual : true, level : 1, school : "Abjur", time : "1 h", range : "Touch", components : "V,S,M\u2020", compMaterial : "25 gp worth of powdered silver, which the spell consumes", duration : "Instantaneous", description : "Perform religious ceremony on target(s) within 10 ft throughout the casting; see book (25gp cons.)", descriptionFull : "You perform a special religious ceremony that is infused with magic. When you cast the spell, choose one of the following rites, the target of which must be within 10 feet of you throughout the casting." + "\n " + toUni("Atonement") + ": You touch one willing creature whose alignment has changed, and you make a DC 20 Wisdom (Insight) check. On a successful check, you restore the target to its original alignment." + "\n " + toUni("Bless Water") + ": You touch one vial of water and cause it to become holy water." + "\n " + toUni("Coming of Age") + ": You touch one humanoid who is a young adult. For the next 24 hours, whenever the target makes an ability check, it can roll a d4 and add the number rolled to the ability check. A creature can benefit from this rite only once." + "\n " + toUni("Dedication") + ": You touch one humanoid who wishes to be dedicated to your god's service. For the next 24 hours, whenever the target makes a saving throw, it can roll a d4 and add the number rolled to the save. A creature can benefit from this rite only once." + "\n " + toUni("Funeral Rite") + ": You touch one corpse, and for the next 7 days, the target can't become undead by any means short of a wish spell." + "\n " + toUni("Wedding") + ": You touch adult humanoids willing to be bonded together in marriage. For the next 7 days, each target gains a +2 bonus to AC while they are within 30 feet of each other. A creature can benefit from this rite again only if widowed." }; SpellsList["chaos bolt"] = { name : "Chaos Bolt", classes : ["sorcerer"], source : [["X", 151], ["G", 67]], level : 1, school : "Evoc", time : "1 a", range : "120 ft", components : "V,S", duration : "Instantaneous", description : "Spell atk 2d8+1d6+1d6/SL dmg, d8s set dmg type, see B; double on d8s: new atk vs. crea in 30 ft", descriptionShorter : "Spell atk 2d8+1d6+1d6/SL dmg, d8s set type, see B; double on d8s: new atk vs. crea in 30 ft", descriptionFull : "You hurl an undulating, warbling mass of chaotic energy at one creature in range. Make a ranged spell attack against the target. On a hit, the target takes 2d8 + 1d6 damage. Choose one of the d8s. The number rolled on that die determines the attack's damage type, as shown below." + "\n\n" + toUni("d8") + "\t" + toUni("Damage Type") + "\n 1\tAcid" + "\n 2\tCold" + "\n 3\tFire" + "\n 4\tForce" + "\n 5\tLightning" + "\n 6\tPoison" + "\n 7\tPsychic" + "\n 8\tThunder" + "\n\n " + "If you roll the same number on both d8s, the chaotic energy leaps from the target to a different creature of your choice within 30 feet of it. Make a new attack roll against the new target, and make a new damage roll, which could cause the chaotic energy to leap again." + "\n " + "A creature can be targeted only once by each casting of this spell." + AtHigherLevels + "When you cast this spell using a spell slot of 2nd level or higher, each target takes 1d6 extra damage of the type rolled for each slot level above 1st.", dynamicDamageBonus : { multipleDmgTypes : { dmgTypes : ["acid", "cold", "fire", "force", "lightning", "poison", "psychic", "thunder"], inDescriptionAs : '' } } }; SpellsList["charm monster"] = { name : "Charm Monster", classes : ["bard", "druid", "sorcerer", "warlock", "wizard"], source : [["X", 151]], level : 4, school : "Ench", time : "1 a", range : "30 ft", components : "V,S", duration : "1 h", save : "Wis", description : "1+1/SL creatures, each max 30 ft apart, save or charmed; adv. on save if me/ally is fighting it", descriptionFull : "You attempt to charm a creature you can see within range. It must make a Wisdom saving throw, and it does so with advantage if you or your companions are fighting it. If it fails the saving throw, it is charmed by you until the spell ends or until you or your companions do anything harmful to it. The charmed creature is friendly to you. When the spell ends, the creature knows it was charmed by you." + AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, you can target one additional creature for each slot level above 4th. The creatures must be within 30 feet of each other when you target them." }; SpellsList["create homunculus"] = { name : "Create Homunculus", classes : ["wizard"], source : [["X", 152]], level : 6, school : "Trans", time : "1 h", range : "Touch", components : "V,S,M\u0192", compMaterial : "Clay, ash, and mandrake root, all of which the spell consumes, and a jewel-encrusted dagger worth at least 1,000 gp", duration : "Instantaneous", description : "I take 2d4 piercing dmg to create a homunculus as my faithful companion; see book (1000gp)", descriptionFull : "While speaking an intricate incantation, you cut yourself with a jewel-encrusted dagger, taking 2d4 piercing damage that can't be reduced in any way. You then drip your blood on the spell's other components and touch them, transforming them into a special construct called a homunculus." + "\n " + "The statistics of the homunculus are in the Monster Manual. It is your faithful companion, and it dies if you die. Whenever you finish a long rest, you can spend up to half your Hit Dice if the homunculus is on the same plane of existence as you. When you do so, roll each die and add your Constitution modifier to it. Your hit point maximum is reduced by the total, and the homunculus's hit point maximum and current hit points are both increased by it. This process can reduce you to no lower than 1 hit point, and the change to your and the homunculus's hit points ends when you finish your next long rest. The reduction to your hit point maximum can't be removed by any means before then, except by the homunculus's death." + "\n " + "You can have only one homunculus at a time. If you cast this spell while your homunculus lives, the spell fails.", dynamicDamageBonus : { doNotProcess : true } // You don't want to do yourself more damage do you? }; SpellsList["crown of stars"] = { name : "Crown of Stars", classes : ["sorcerer", "warlock", "wizard"], source : [["X", 152]], level : 7, school : "Evoc", time : "1 a", range : "Self", components : "V,S", duration : "1 h", description : "7+2/SL motes shed 30-ft light; bonus action to fire one as 120 ft ranged atk for 4d12 Radiant dmg", descriptionShorter : "7+2/SL motes shed 30-ft light; bns a to fire one as 120 ft ranged atk for 4d12 Radiant dmg", descriptionFull : "Seven star-like motes of light appear and orbit your head until the spell ends. You can use a bonus action to send one of the motes streaking toward one creature or object within 120 feet of you. When you do so, make a ranged spell attack. On a hit, the target takes 4d12 radiant damage. Whether you hit or miss, the mote is expended. The spell ends early if you expend the last mote." + "\n " + "If you have four or more motes remaining, they shed bright light in a 30-foot radius and dim light for an additional 30 feet. If you have one to three motes remaining, they shed dim light in a 30-foot radius." + AtHigherLevels + "When you cast this spell using a spell slot of 8th level or higher, the number of motes created increases by two for each slot level above 7th." }; SpellsList["danse macabre"] = { name : "Danse Macabre", classes : ["warlock", "wizard"], source : [["X", 153]], level : 5, school : "Necro", time : "1 a", range : "60 ft", components : "V,S", duration : "Conc, 1 h", description : "5+2/SL small/medium corpses as zombie/skeleton; spellc. mod to atk/dmg; bns a command in 60 ft", descriptionFull : "Threads of dark power leap from your fingers to pierce up to five Small or Medium corpses you can see within range. Each corpse immediately stands up and becomes undead. You decide whether it is a zombie or a skeleton (the statistics for zombies and skeletons are in the Monster Manual), and it gains a bonus to its attack and damage rolls equal to your spellcasting ability modifier." + "\n " + "You can use a bonus action to mentally command the creatures you make with this spell, issuing the same command to all of them. To receive the command, a creature must be within 60 feet of you. You decide what action the creatures will take and where they will move during their next turn, or you can issue a general command, such as to guard a chamber or passageway against your foes. If you issue no commands, the creatures do nothing except defend themselves against hostile creatures. Once given an order, the creatures continue to follow it until their task is complete." + "\n " + "The creatures are under your control until the spell ends, after which they become inanimate once more" + AtHigherLevels + "When you cast this spell using a spell slot of 6th level or higher, you animate up to two additional corpses for each slot level above 5th." }; SpellsList["dawn"] = { name : "Dawn", classes : ["cleric", "wizard"], source : [["X", 153]], level : 5, school : "Evoc", time : "1 a", range : "60 ft", components : "V,S,M\u0192", compMaterial : "A sunburst pendant worth at least 100 gp", duration : "Conc, 1 min", save : "Con", description : "30-ft rad 40-ft high all crea 4d10 Radiant dmg at cast/end turn; bns a move it 60 ft (100gp)", descriptionFull : "The light of dawn shines down on a location you specify within range. Until the spell ends, a 30-foot-radius, 40-foot-high cylinder of bright light glimmers there. This light is sunlight." + "\n " + "When the cylinder appears, each creature in it must make a Constitution saving throw, taking 4d10 radiant damage on a failed save, or half as much damage on a successful one. A creature must also make this saving throw whenever it ends its turn in the cylinder." + "\n " + "If you're within 60 feet of the cylinder, you can move it up to 60 feet as a bonus action on your turn." }; SpellsList["dragon's breath"] = { name : "Dragon's Breath", classes : ["sorcerer", "wizard"], source : [["X", 154]], level : 2, school : "Trans", time : "1 bns", range : "Touch", components : "V,S,M", compMaterial : "A hot pepper", duration : "Conc, 1 min", save : "Dex", description : "1 willing crea: 1 a breathe 15-ft cone all 3d6+1d6/SL Acid/Cold/Fire/Lightn./Poison dmg; save half", descriptionShorter : "1 willing crea: 1 a 15-ft cone 3d6+1d6/SL Acid/Cold/Fire/Lightn/Poison dmg; save half", descriptionFull : "You touch one willing creature and imbue it with the power to spew magical energy from its mouth, provided it has one. Choose acid, cold, fire, lightning, or poison. Until the spell ends, the creature can use an action to exhale energy of the chosen type in a 15-foot cone. Each creature in that area must make a Dexterity saving throw, taking 3d6 damage of the chosen type on a failed save, or half as much damage on a successful one." + AtHigherLevels + "When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d6 for each slot level above 2nd.", dynamicDamageBonus : { multipleDmgTypes : { dmgTypes : ["acid", "cold", "fire", "lightning", "poison"], inDescriptionAs : "Acid/Cold/Fire/Lightn.?/Poison" } } }; SpellsList["druid grove"] = { name : "Druid Grove", classes : ["druid"], source : [["X", 154]], level : 6, school : "Abjur", time : "10 min", range : "Touch", components : "V,S,M\u2020", compMaterial : "Mistletoe, which the spell consumes, that was harvested with a golden sickle under the light of a full moon", duration : "24 h", description : "Protect 30-ft to 90-ft cube outdoors or underground; see book for effects", descriptionFull : "You invoke the spirits of nature to protect an area outdoors or underground. The area can be as small as a 30-foot cube or as large as a 90-foot cube. Buildings and other structures are excluded from the affected area. If you cast this spell in the same area every day for a year, the spell lasts until dispelled." + "\n " + "The spell creates the following effects within the area. When you cast this spell, you can specify creatures as friends who are immune to the effects. You can also specify a password that, when spoken aloud, makes the speaker immune to these effects." + "\n " + "The entire warded area radiates magic. A dispel magic cast on the area, if successful, removes only one of the following effects, not the entire area. That spell's caster chooses which effect to end. Only when all its effects are gone is this spell dispelled." + "\n " + toUni("Solid Fog") + ": You can fill any number of 5-foot squares on the ground with thick fog, making them heavily obscured. The fog reaches 10 feet high. In addition, every foot of movement through the fog costs 2 extra feet. To a creature immune to this effect, the fog obscures nothing and looks like soft mist, with motes of green light floating in the air." + "\n " + toUni("Grasping Undergrowth") + ": You can fill any number of 5-foot squares on the ground that aren't filled with fog with grasping weeds and vines, as if they were affected by an entangle spell. To a creature immune to this effect, the weeds and vines feel soft and reshape themselves to serve as temporary seats or beds." + "\n " + toUni("Grove Guardians") + ": You can animate up to four trees in the area, causing them to uproot themselves from the ground. These trees have the same statistics as an awakened tree, which appears in the Monster Manual, except they can't speak, and their bark is covered with druidic symbols. If any creature not immune to this effect enters the warded area, the grove guardians fight until they have driven off or slain the intruders. The grove guardians also obey your spoken commands (no action required by you) that you issue while in the area. If you don't give them commands and no intruders are present, the grove guardians do nothing. The grove guardians can't leave the warded area. When the spell ends, the magic animating them disappears, and the trees take root again if possible." + "\n " + toUni("Additional Spell Effects") + ": You can place your choice of one of the following magical effects within the warded area:" + "\n \u2022 " + "A constant gust of wind in two locations of your choice" + "\n \u2022 " + "Spike growth in one location of your choice" + "\n \u2022 " + "Wind wall in two locations of your choice" + "\n " + "To a creature immune to this effect, the winds are a fragrant, gentle breeze, and the area of spike growth is harmless." }; SpellsList["enemies abound"] = { name : "Enemies Abound", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["X", 155]], level : 3, school : "Ench", time : "1 a", range : "120 ft", components : "V,S", duration : "Conc, 1 min", save : "Int", description : "1 crea save or regard all creatures it can see as enemies, random targeting; save when damaged to end", descriptionFull : "You reach into the mind of one creature you can see and force it to make an Intelligence saving throw. A creature automatically succeeds if it is immune to being frightened. On a failed save, the target loses the ability to distinguish friend from foe, regarding all creatures it can see as enemies until the spell ends. Each time the target takes damage, it can repeat the saving throw, ending the effect on itself on a success." + "\n " + "Whenever the affected creature chooses another creature as a target, it must choose the target at random from among the creatures it can see within range of the attack, spell, or other ability it's using. If an enemy provokes an opportunity attack from the affected creature, the creature must make that attack if it is able to." }; SpellsList["enervation"] = { name : "Enervation", classes : ["sorcerer", "warlock", "wizard"], source : [["X", 155]], level : 5, school : "Necro", time : "1 a", range : "60 ft", components : "V,S", duration : "Conc, 1 min", save : "Dex", description : "1 crea 2d8+1d8/SL Necrotic dmg, saved: ends; fail: +2d8 dmg and Act to repeat; I heal half; see B", descriptionShorter : "1 crea 2d8+1d8/SL Necro. dmg, save: ends; fail: +2d8 dmg & Act repeat; I heal half; see B", descriptionFull : "A tendril of inky darkness reaches out from you, touching a creature you can see within range to drain life from it. The target must make a Dexterity saving throw. On a successful save, the target takes 2d8 necrotic damage, and the spell ends. On a failed save, the target takes 4d8 necrotic damage, and until the spell ends, you can use your action on each of your turns to automatically deal 4d8 necrotic damage to the target. The spell ends if you use your action to do anything else, if the target is ever outside the spell's range, or if the target has total cover from you." + "\n " + "Whenever the spell deals damage to a target, you regain hit points equal to half the amount of necrotic damage the target takes." + AtHigherLevels + "When you cast this spell using a spell slot of 6th level or higher, the damage increases by 1d8 for each slot level above 5th.", }; SpellsList["far step"] = { name : "Far Step", classes : ["sorcerer", "warlock", "wizard"], source : [["X", 155]], level : 5, school : "Conj", time : "1 bns", range : "Self", components : "V", duration : "Conc, 1 min", description : "At casting and as bonus action for duration, I can teleport 60 ft to a space I can see", descriptionFull : "You teleport up to 60 feet to an unoccupied space you can see. On each of your turns before the spell ends, you can use a bonus action to teleport in this way again." }; SpellsList["find greater steed"] = { name : "Find Greater Steed", classes : ["paladin"], source : [["X", 156]], level : 4, school : "Conj", time : "10 min", range : "30 ft", components : "V,S", duration : "Instantaneous", description : "Gain the services of a steed; can communicate with it telepathically; can share spells with it; see book", descriptionFull : "You summon a spirit that assumes the form of a loyal, majestic mount. Appearing in an unoccupied space within range, the spirit takes on a form you choose: a griffon, a pegasus, a peryton, a dire wolf, a rhinoceros, or a saber-toothed tiger. The creature has the statistics provided in the Monster Manual for the chosen form, though it is a celestial, a fey, or a fiend (your choice) instead of its normal creature type. Additionally, if it has an Intelligence score of 5 or lower, its Intelligence becomes 6, and it gains the ability to understand one language of your choice that you speak." + "\n " + "You control the mount in combat. While the mount is within 1 mile of you, you can communicate with it telepathically. While mounted on it, you can make any spell you cast that targets only you also target the mount." + "\n " + "The mount disappears temporarily when it drops to 0 hit points or when you dismiss it as an action. Casting this spell again re-summons the bonded mount, with all its hit points restored and any conditions removed." + "\n " + "You can't have more than one mount bonded by this spell or find steed at the same time. As an action, you can release a mount from its bond, causing it to disappear permanently." + "\n " + "Whenever the mount disappears, it leaves behind any objects it was wearing or carrying." }; SpellsList["guardian of nature"] = { name : "Guardian of Nature", classes : ["druid", "ranger"], source : [["X", 157]], level : 4, school : "Trans", time : "1 bns", range : "Self", components : "V", duration : "Conc, 1 min", description : "I transform into a Primal Beast (offensive bonuses) or a Great Tree (defensive bonuses); see book", descriptionFull : "A nature spirit answers your call and transforms you into a powerful guardian. The transformation lasts until the spell ends. You choose one of the following forms to assume: Primal Beast or Great Tree." + "\n\n" + toUni("Primal Beast") + ": Bestial fur covers your body, your facial features become feral, and you gain the following benefits:" + "\n \u2022 " + "Your walking speed increases by 10 feet." + "\n \u2022 " + "You gain darkvision with a range of 120 feet." + "\n \u2022 " + "You make Strength-based attack rolls with advantage." + "\n \u2022 " + "Your melee weapon attacks deal an extra 1d6 force damage on a hit." + "\n\n" + toUni("Great Tree") + ": Your skin appears barky, leaves sprout from your hair, and you gain the following benefits:" + "\n \u2022 " + "You gain 10 temporary hit points." + "\n \u2022 " + "You make Constitution saving throws with advantage." + "\n \u2022 " + "You make Dexterity- and Wisdom-based attack rolls with advantage." + "\n \u2022 " + "While you are on the ground, the ground within 15 feet of you is difficult terrain for your enemies." }; SpellsList["healing spirit"] = { // limited usages (https://media.wizards.com/2020/dnd/downloads/XGtE-Errata.pdf) name : "Healing Spirit", classes : ["druid", "ranger"], source : [["X", 157]], level : 2, school : "Conj", time : "1 bns", range : "60 ft", components : "V,S", duration : "Conc, 1 min", description : "5-ft cube; any living crea I see start/enter heals 1d6+1d6/SL HP; 1+spell mod uses; bns a move it 30 ft", descriptionShorter : "5-ft cube; any living start/enter heals 1d6+1d6/SL HP; 1+spell mod uses; bns a move 30 ft", descriptionFull : "You call forth a nature spirit to soothe the wounded. The intangible spirit appears in a space that is a 5-foot cube you can see within range. The spirit looks like a transparent beast or fey (your choice)." + "\n " + "Until the spell ends, whenever you or a creature you can see moves into the spirit's space for the first time on a turn or starts its turn there, you can cause the spirit to restore 1d6 hit points to that creature (no action required). The spirit can't heal constructs or undead. The spirit can heal a number of times equal to 1 + your spellcasting ability modifier (minimum of twice). After healing that number of times, the spirit disappears." + "\n " + "As a bonus action on your turn, you can move the spirit up to 30 feet to a space you can see." + AtHigherLevels + "When you cast this spell using a spell slot of 3rd level or higher, the healing increases by 1d6 for each slot level above 2nd." }; SpellsList["holy weapon"] = { name : "Holy Weapon", classes : ["cleric", "paladin"], source : [["X", 157]], level : 5, school : "Evoc", time : "1 bns", range : "Touch", components : "V,S", duration : "Conc, 1 h", save : "Con", description : "Wea +2d8 Radiant dmg; bns a end spell: 30-ft rad all crea 4d8 Radiant dmg, blind; save half, no blind", descriptionShorter : "wea +2d8 Radiant dmg; bns a end: 30-ft rad all 4d8 Radiant dmg, blind; save half, no blind", descriptionFull : "You imbue a weapon you touch with holy power. Until the spell ends, the weapon emits bright light in a 30-foot radius and dim light for an additional 30 feet. In addition, weapon attacks made with it deal an extra 2d8 radiant damage on a hit. If the weapon isn't already a magic weapon, it becomes one for the duration." + "\n " + "As a bonus action on your turn, you can dismiss this spell and cause the weapon to emit a burst of radiance. Each creature of your choice that you can see within 30 feet of the weapon must make a Constitution saving throw. On a failed save, a creature takes 4d8 radiant damage, and it is blinded for 1 minute. On a successful save, a creature takes half as much damage and isn't blinded. At the end of each of its turns, a blinded creature can make a Constitution saving throw, ending the effect on itself on a success.", dynamicDamageBonus : { multipleDmgMoments : false, skipDmgGroupIfNotMultiple : /(wea .*?radiant dmg.*?)/i } }; SpellsList["illusory dragon"] = { name : "Illusory Dragon", classes : ["wizard"], source : [["X", 157]], level : 8, school : "Illus", time : "1 a", range : "120 ft", components : "S", duration : "Conc, 1 min", save : "W/I", description : "Huge shadowy dragon; see: Wis save or fright.; bns a move 60 ft \u0026 breath wea 7d6 dmg; Int save half", descriptionShorter : "Huge illus.; see: Wis save or fright.; bns a move 60 ft \u0026 breath wea 7d6 dmg; Int save half", descriptionFull : "By gathering threads of shadow material from the Shadowfell, you create a Huge shadowy dragon in an unoccupied space that you can see within range. The illusion lasts for the spell's duration and occupies its space, as if it were a creature." + "\n " + "When the illusion appears, any of your enemies that can see it must succeed on a Wisdom saving throw or become frightened of it for 1 minute. If a frightened creature ends its turn in a location where it doesn't have line of sight to the illusion, it can repeat the saving throw, ending the effect on itself on a success." + "\n " + "As a bonus action on your turn, you can move the illusion up to 60 feet. At any point during its movement, you can cause it to exhale a blast of energy in a 60-foot cone originating from its space. When you create the dragon, choose a damage type: acid, cold, fire, lightning, necrotic, or poison. Each creature in the cone must make an Intelligence saving throw, taking 7d6 damage of the chosen damage type on a failed save, or half as much damage on a successful one." + "\n " + "The illusion is tangible because of the shadow stuff used to create it, but attacks miss it automatically, it succeeds on all saving throws, and it is immune to all damage and conditions. A creature that uses an action to examine the dragon can determine that it is an illusion by succeeding on an Intelligence (Investigation) check against your spell save DC. If a creature discerns the illusion for what it is, the creature can see through it and has advantage on saving throws against its breath.", dynamicDamageBonus : { multipleDmgTypes : { dmgTypes : ["radiant", "necrotic"], inDescriptionAs : '' } } }; SpellsList["infernal calling"] = { name : "Infernal Calling", classes : ["warlock", "wizard"], source : [["X", 158]], level : 5, school : "Conj", time : "1 min", range : "90 ft", components : "V,S,M\u0192", compMaterial : "A ruby worth at least 999 gp", duration : "Conc, 1 h", description : "Summon 1 devil of CR 6+1/SL; hostile to all, obeys my command if to its liking or Cha check; see B", descriptionFull : "Uttering a dark incantation, you summon a devil from the Nine Hells. You choose the devil's type, which must be one of challenge rating 6 or lower, such as a barbed devil or a bearded devil. The devil appears in an unoccupied space that you can see within range. The devil disappears when it drops to 0 hit points or when the spell ends." + "\n " + "The devil is unfriendly toward you and your companions. Roll initiative for the devil, which has its own turns. It is under the Dungeon Master's control and acts according to its nature on each of its turns, which might result in its attacking you if it thinks it can prevail, or trying to tempt you to undertake an evil act in exchange for limited service. The DM has the creature's statistics." + "\n " + "On each of your turns, you can try to issue a verbal command to the devil (no action required by you). It obeys the command if the likely outcome is in accordance with its desires, especially if the result would draw you toward evil. Otherwise, you must make a Charisma (Deception, Intimidation, or Persuasion) check contested by its Wisdom (Insight) check. You make the check with advantage if you say the devil's true name. If your check fails, the devil becomes immune to your verbal commands for the duration of the spell, though it can still carry out your commands if it chooses. If your check succeeds, the devil carries out your command \u2014 such as “attack my enemies,” “explore the room ahead,” or “bear this message to the queen” \u2014 until it completes the activity, at which point it returns to you to report having done so." + "\n " + "If your concentration ends before the spell reaches its full duration, the devil doesn't disappear if it has become immune to your verbal commands. Instead, it acts in whatever manner it chooses for 3d6 minutes, and then it disappears." + "\n " + "If you possess an individual devil's talisman, you can summon that devil if it is of the appropriate challenge rating plus 1, and it obeys all your commands, with no Charisma checks required." + AtHigherLevels + "When you cast this spell using a spell slot of 6th level or higher, the challenge rating increases by 1 for each slot level above 5th." }; SpellsList["infestation"] = { name : "Infestation", classes : ["druid", "sorcerer", "warlock", "wizard"], source : [["X", 158]], level : 0, school : "Conj", time : "1 a", range : "30 ft", components : "V,S,M", compMaterial : "A living flea", duration : "Instantaneous", save : "Con", description : "1 crea save or 1d6 Poison dmg and moved 5 ft in random direction; +1d6 at CL 5, 11, and 17", descriptionCantripDie : "1 crea save or `CD`d6 Poison dmg and moved 5 ft in random direction", descriptionFull : "You cause a cloud of mites, fleas, and other parasites to appear momentarily on one creature you can see within range. The target must succeed on a Constitution saving throw, or it takes 1d6 poison damage and moves 5 feet in a random direction if it can move and its speed is at least 5 feet. Roll a d4 for the direction:" + "\n\n" + toUni("d4") + "\t" + toUni("Direction") + "\n 1\tNorth" + "\n 2\tSouth" + "\n 3\tEast" + "\n 4\tWest" + "\n\n " + "This movement doesn't provoke opportunity attacks, and if the direction rolled is blocked, the target doesn't move." + "\n " + "The spell's damage increases by 1d6 when you reach 5th level (2d6), 11th level (3d6), and 17th level (4d6)." }; SpellsList["invulnerability"] = { name : "Invulnerability", classes : ["wizard"], source : [["X", 160]], level : 9, school : "Abjur", time : "1 a", range : "Self", components : "V,S,M\u2020", compMaterial : "A small piece of adamantine worth at least 500 gp, which the spell consumes", duration : "Conc, 10 min", description : "Immune to all damage until the spell ends (500gp cons.)", descriptionFull : "You are immune to all damage until the spell ends." }; SpellsList["life transference"] = { // can't reduce damage taken (https://media.wizards.com/2020/dnd/downloads/XGtE-Errata.pdf) name : "Life Transference", classes : ["cleric", "wizard"], source : [["X", 160]], level : 3, school : "Necro", time : "1 a", range : "30 ft", components : "V,S", duration : "Instantaneous", description : "I take 4d8+1d8/SL Necrotic dmg (in full) and 1 crea in range I can see heals twice that in HP", descriptionFull : "You sacrifice some of your health to mend another creature's injuries. You take 4d8 necrotic damage, which can't be reduced in any way, and one creature of your choice that you can see within range regains a number of hit points equal to twice the necrotic damage you take." + AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d8 for each slot level above 3rd." }; SpellsList["maddening darkness"] = { name : "Maddening Darkness", classes : ["warlock", "wizard"], source : [["X", 160]], level : 8, school : "Evoc", time : "1 a", range : "150 ft", components : "V,M", compMaterial : "A drop of pitch mixed with a drop of mercury", duration : "Conc, 10 min", save : "Wis", description : "60-ft rad darkness; darkvision, no light works; all crea starting turn in 8d8 Psychic dmg, save halves", descriptionShorter : "60-ft rad darkness; darkvision, no light works; all start turn in 8d8 Psychic dmg, save half", descriptionFull : "Magical darkness spreads from a point you choose within range to fill a 60-foot-radius sphere until the spell ends. The darkness spreads around corners. A creature with darkvision can't see through this darkness. Nonmagical light, as well as light created by spells of 8th level or lower, can't illuminate the area." + "\n " + "Shrieks, gibbering, and mad laughter can be heard within the sphere. Whenever a creature starts its turn in the sphere, it must make a Wisdom saving throw, taking 8d8 psychic damage on a failed save, or half as much damage on a successful one." }; SpellsList["mass polymorph"] = { name : "Mass Polymorph", classes : ["bard", "sorcerer", "wizard"], source : [["X", 160]], level : 9, school : "Trans", time : "1 a", range : "120 ft", components : "V,S,M", compMaterial : "A caterpillar cocoon", duration : "Conc, 1 h", save : "Wis", description : "10 crea save or take chosen beast form of CR \u2264 its CR or half its char. level; can only act as beast; see B", descriptionFull : "You transform up to ten creatures of your choice that you can see within range. An unwilling target must succeed on a Wisdom saving throw to resist the transformation. An unwilling shapechanger automatically succeeds on the save." + "\n " + "Each target assumes a beast form of your choice, and you can choose the same form or different ones for each target. The new form can be any beast you have seen whose challenge rating is equal to or less than the target's (or half the target's level, if the target doesn't have a challenge rating). The target's game statistics, including mental ability scores, are replaced by the statistics of the chosen beast, but the target retains its hit points, alignment, and personality." + "\n " + "Each target gains a number of temporary hit points equal to the hit points of its new form. These temporary hit points can't be replaced by temporary hit points from another source. A target reverts to its normal form when it has no more temporary hit points or it dies. If the spell ends before then, the creature loses all its temporary hit points and reverts to its normal form." + "\n " + "The creature is limited in the actions it can perform by the nature of its new form. It can't speak, cast spells, or do anything else that requires hands or speech." + "\n " + "The target's gear melds into the new form. The target can't activate, use, wield, or otherwise benefit from any of its equipment." }; SpellsList["mental prison"] = { name : "Mental Prison", classes : ["sorcerer", "warlock", "wizard"], source : [["X", 161]], level : 6, school : "Illus", time : "1 a", range : "60 ft", components : "S", duration : "Conc, 1 min", save : "Int", description : "1 crea 5d10 Psychic dmg; save or restrained, blind, deaf, and if moved: 10d10 dmg, ends; charm effect", descriptionShorter : "1 crea 5d10 Psychic dmg; save or restrained, blind, deaf, if move: 10d10 dmg, ends; charm", descriptionFull : "You attempt to bind a creature within an illusory cell that only it perceives. One creature you can see within range must make an Intelligence saving throw. The target succeeds automatically if it is immune to being charmed. On a successful save, the target takes 5d10 psychic damage, and the spell ends. On a failed save, the target takes 5d10 psychic damage, and you make the area immediately around the target's space appear dangerous to it in some way. You might cause the target to perceive itself as being surrounded by fire, floating razors, or hideous maws filled with dripping teeth. Whatever form the illusion takes, the target can't see or hear anything beyond it and is restrained for the spell's duration. If the target is moved out of the illusion, makes a melee attack through it, or reaches any part of its body through it, the target takes 10d10 psychic damage, and the spell ends.", dynamicDamageBonus : { multipleDmgMoments : false, extraDmgGroupsSameType : /(if moved?: )((?:\+?\d+d?\d*)+)/i } }; SpellsList["mighty fortress"] = { name : "Mighty Fortress", classes : ["wizard"], source : [["X", 161]], level : 8, school : "Conj", time : "1 min", range : "1 mile", components : "V,S,M\u2020", compMaterial : "A diamond worth at least 500 gp, which the spell consumes", duration : "Instantaneous", description : "Create a stone fortress 120 ft on a side for 7 days; see book for effects (500gp cons.)", descriptionFull : "A fortress of stone erupts from a square area of ground of your choice that you can see within range. The area is 120 feet on each side, and it must not have any buildings or other structures on it. Any creatures in the area are harmlessly lifted up as the fortress rises." + "\n " + "The fortress has four turrets with square bases, each one 20 feet on a side and 30 feet tall, with one turret on each corner. The turrets are connected to each other by stone walls that are each 80 feet long, creating an enclosed area. Each wall is 1 foot thick and is composed of panels that are 10 feet wide and 20 feet tall. Each panel is contiguous with two other panels or one other panel and a turret. You can place up to four stone doors in the fortress's outer wall." + "\n " + "A small keep stands inside the enclosed area. The keep has a square base that is 50 feet on each side, and it has three floors with 10-foot-high ceilings. Each of the floors can be divided into as many rooms as you like, provided each room is at least 5 feet on each side. The floors of the keep are connected by stone staircases, its walls are 6 inches thick, and interior rooms can have stone doors or open archways as you choose. The keep is furnished and decorated however you like, and it contains sufficient food to serve a nine-course banquet for up to 100 people each day. Furnishings, food, and other objects created by this spell crumble to dust if removed from the fortress." + "\n " + "A staff of one hundred invisible servants obeys any command given to them by creatures you designate when you cast the spell. Each servant functions as if created by the unseen servant spell." + "\n " + "The walls, turrets, and keep are all made of stone that can be damaged. Each 10-foot-by-10-foot section of stone has AC 15 and 30 hit points per inch of thickness. It is immune to poison and psychic damage. Reducing a section of stone to 0 hit points destroys it and might cause connected sections to buckle and collapse at the DM's discretion." + "\n " + "After 7 days or when you cast this spell somewhere else, the fortress harmlessly crumbles and sinks back into the ground, leaving any creatures that were inside it safely on the ground." + "\n " + "Casting this spell on the same spot once every 7 days for a year makes the fortress permanent." }; SpellsList["mind spike"] = { // +1d8 at higher levels errata (https://media.wizards.com/2020/dnd/downloads/XGtE-Errata.pdf) name : "Mind Spike", classes : ["sorcerer", "warlock", "wizard"], source : [["X", 162]], level : 2, school : "Div", time : "1 a", range : "60 ft", components : "S", duration : "Conc, 1 h", save : "Wis", description : "1 crea 3d8+1d8/SL Psychic dmg, know its location, can't be invis for me; save half, no other benefits", descriptionShorter : "1 crea 3d8+1d8/SL Psychic dmg, know its location, can't be invis for me; save half, not rest", descriptionFull : "You reach into the mind of one creature you can see within range. The target must make a Wisdom saving throw, taking 3d8 psychic damage on a failed save, or half as much damage on a successful one. On a failed save, you also always know the target's location until the spell ends, but only while the two of you are on the same plane of existence. While you have this knowledge, the target can't become hidden from you, and if it's invisible, it gains no benefit from that condition against you." + AtHigherLevels + "When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d8 for each slot level above 2nd.", dynamicDamageBonus : { multipleDmgMoments : false } }; SpellsList["negative energy flood"] = { name : "Negative Energy Flood", classes : ["warlock", "wizard"], source : [["X", 163]], level : 5, school : "Necro", time : "1 a", range : "60 ft", components : "V,M", compMaterial : "A broken bone and a square of black silk", duration : "Instantaneous", save : "Con", description : "1 crea: living 5d12 Necrotic dmg, save halves, rises as zombie if killed; undead 5d12/2 temp HP", descriptionFull : "You send ribbons of negative energy at one creature you can see within range. Unless the target is undead, it must make a Constitution saving throw, taking 5d12 necrotic damage on a failed save, or half as much damage on a successful one. A target killed by this damage rises up as a zombie at the start of your next turn. The zombie pursues whatever creature it can see that is closest to it. Statistics for the zombie are in the Monster Manual." + "\n " + "If you target an undead with this spell, the target doesn't make a saving throw. Instead, roll 5d12. The target gains half the total as temporary hit points." }; SpellsList["power word pain"] = { name : "Power Word Pain", classes : ["sorcerer", "warlock", "wizard"], source : [["X", 163]], level : 7, school : "Ench", time : "1 a", range : "60 ft", components : "V", duration : "Instantaneous", description : "1 crea with 100 HP or less disadv. atk/check/save, conc. save to cast; save/rnd to end; charm effect", descriptionFull : "You speak a word of power that causes waves of intense pain to assail one creature you can see within range. If the target has 100 hit points or fewer, it is subject to crippling pain. Otherwise, the spell has no effect on it. A target is also unaffected if it is immune to being charmed." + "\n " + "While the target is affected by crippling pain, any speed it has can be no higher than 10 feet. The target also has disadvantage on attack rolls, ability checks, and saving throws, other than Constitution saving throws. Finally, if the target tries to cast a spell, it must first succeed on a Constitution saving throw, or the casting fails and the spell is wasted." + "\n " + "A target suffering this pain can make a Constitution saving throw at the end of each of its turns. On a successful save, the pain ends." }; SpellsList["primal savagery"] = { name : "Primal Savagery", classes : ["druid"], source : [["X", 163]], level : 0, school : "Trans", time : "1 a", range : "Self", components : "S", duration : "Instantaneous", description : "Melee spell attack, 5 ft range, for 1d10 Acid dmg; +1d10 at CL 5, 11, and 17", descriptionCantripDie : "Melee spell attack, 5 ft range, for `CD`d10 Acid dmg", descriptionFull : "You channel primal magic to cause your teeth or fingernails to sharpen, ready to deliver a corrosive attack. Make a melee spell attack against one creature within 5 feet of you. On a hit, the target takes 1d10 acid damage. After you make the attack, your teeth or fingernails return to normal." + "\n " + "The spell's damage increases by 1d10 when you reach 5th level (2d10), 11th level (3d10), and 17th level (4d10)." }; SpellsList["psychic scream"] = { name : "Psychic Scream", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["X", 163]], level : 9, school : "Ench", time : "1 a", range : "90 ft", components : "S", duration : "Instantaneous", save : "Int", description : "10 crea Int>2 save or 14d6 Psychic dmg and stunned; save halves, no stun; end of turn save to stop", descriptionFull : "You unleash the power of your mind to blast the intellect of up to ten creatures of your choice that you can see within range. Creatures that have an Intelligence score of 2 or lower are unaffected." + "\n " + "Each target must make an Intelligence saving throw. On a failed save, a target takes 14d6 psychic damage and is stunned. On a successful save, a target takes half as much damage and isn't stunned. If a target is killed by this damage, its head explodes, assuming it has one." + "\n " + "A stunned target can make an Intelligence saving throw at the end of each of its turns. On a successful save, the stunning effect ends." }; SpellsList["scatter"] = { name : "Scatter", classes : ["sorcerer", "warlock", "wizard"], source : [["X", 164]], level : 6, school : "Conj", time : "1 a", range : "30 ft", components : "V", duration : "Instantaneous", save : "Wis", description : "Up to 5 creatures in range, save or teleported 120 ft to a different space I can see on the ground", descriptionFull : "The air quivers around up to five creatures of your choice that you can see within range. An unwilling creature must succeed on a Wisdom saving throw to resist this spell. You teleport each affected target to an unoccupied space that you can see within 120 feet of you. That space must be on the ground or on a floor." }; SpellsList["shadow blade"] = { name : "Shadow Blade", classes : ["sorcerer", "warlock", "wizard"], source : [["X", 164]], level : 2, school : "Illus", time : "1 bns", range : "Self", components : "V,S", duration : "Conc, 1 min", description : "Sword 2d8 Psychic dmg, finesse, light, thrown (20/60 ft), adv. if target in dim/dark; +1d8 at SL3/5/7", descriptionMetric : "Sword: 2d8 Psychic dmg, finesse, light, thrown (6/18 m), adv. if target in dim/dark; +1d8 at SL3/5/7", descriptionShorter : "Sword 2d8 Psychic dmg, finesse, light, thrown (20/60ft), adv. in dim/dark; +1d8 SL3/5/7", descriptionShorterMetric : "Sword 2d8 Psychic dmg, finesse, light, thrown (6/18 m), adv. in dim/dark; +1d8 SL3/5/7", descriptionFull : "You weave together threads of shadow to create a sword of solidified gloom in your hand. This magic sword lasts until the spell ends. It counts as a simple melee weapon with which you are proficient. It deals 2d8 psychic damage on a hit and has the finesse, light, and thrown properties (range 20/60). In addition, when you use the sword to attack a target that is in dim light or darkness, you make the attack roll with advantage." + "\n " + "If you drop the weapon or throw it, it dissipates at the end of the turn. Thereafter, while the spell persists, you can use a bonus action to cause the sword to reappear in your hand." + AtHigherLevels + "When you cast this spell using a 3rd- or 4th-level spell slot, the damage increases to 3d8. When you cast it using a 5th- or 6th-level spell slot, the damage increases to 4d8. When you cast it using a spell slot of 7th level or higher, the damage increases to 5d8." }; WeaponsList["shadow blade"] = { regExpSearch : /(?=.*shadow)(?=.*blade).*$/i, name : "Shadow Blade", source : [["X", 164]], list : "spell", ability : 1, type : "Simple", damage : [2, 8, "psychic"], range : "Melee, 20/60 ft", description : "Finesse, light, thrown; +1d8 at SL3/5/7; Adv. if target in dim light/darkness", abilitytodamage : true, isAlwaysProf : true, useSpellcastingAbility : false }; SpellsList["shadow of moil"] = { name : "Shadow of Moil", classes : ["warlock"], source : [["X", 164]], level : 4, school : "Necro", time : "1 a", range : "Self", components : "V,S,M\u0192", compMaterial : "An undead eyeball encased in a gem worth at least 150 gp", duration : "Conc, 1 min", description : "Me: heavy obsc., Radiant resistance; 10-ft rad: 1 step darker, hit vs. me get 2d8 Necrotic dmg (150gp)", descriptionShorter : "Me: hvy obsc., Radiant resist; 10-ft rad: 1 step darker, hit vs. me 2d8 Necrotic dmg (150gp)", descriptionFull : "Flame-like shadows wreathe your body until the spell ends, causing you to become heavily obscured to others. The shadows turn dim light within 10 feet of you into darkness, and bright light in the same area to dim light." + "\n " + "Until the spell ends, you have resistance to radiant damage. In addition, whenever a creature within 10 feet of you hits you with an attack, the shadows lash out at that creature, dealing it 2d8 necrotic damage." }; SpellsList["sickening radiance"] = { name : "Sickening Radiance", classes : ["sorcerer", "warlock", "wizard"], source : [["X", 164]], level : 4, school : "Evoc", time : "1 a", range : "120 ft", components : "V,S", duration : "Conc, 10 min", save : "Con", description : "30-ft rad all enter/start turn save or 4d10 Radiant dmg, 1 level of exhaustion, and emit 5-ft rad light", descriptionShorter : "30-ft rad all enter/start turn save or 4d10 Radiant dmg, 1 lvl exhaust., emit 5-ft rad light", descriptionFull : "Dim, greenish light spreads within a 30-foot-radius sphere centered on a point you choose within range. The light spreads around corners, and it lasts until the spell ends." + "\n " + "When a creature moves into the spell's area for the first time on a turn or starts its turn there, that creature must succeed on a Constitution saving throw or take 4d10 radiant damage, and it suffers one level of exhaustion and emits a dim, greenish light in a 5-foot radius. This light makes it impossible for the creature to benefit from being invisible. The light and any levels of exhaustion caused by this spell go away when the spell ends." }; SpellsList["skill empowerment"] = { name : "Skill Empowerment", classes : ["artificer", "bard", "sorcerer", "wizard"], source : [["X", 165]], level : 5, school : "Trans", time : "1 a", range : "Touch", components : "V,S", duration : "Conc, 1 h", description : "1 willing creature gains expertise in one skill of my choice that it is proficient with for the duration", descriptionFull : "Your magic deepens a creature's understanding of its own talent. You touch one willing creature and give it expertise in one skill of your choice; until the spell ends, the creature doubles its proficiency bonus for ability checks it makes that use the chosen skill." + "\n " + "You must choose a skill in which the target is proficient and that isn't already benefiting from an effect, such as Expertise, that doubles its proficiency bonus." }; SpellsList["snare"] = { name : "Snare", classes : ["artificer", "druid", "ranger", "wizard"], source : [["X", 165]], level : 1, school : "Abjur", time : "1 min", range : "Touch", components : "S,M\u2020", compMaterial : "25 feet of rope, which the spell consumes", duration : "8 h, till trigger", save : "Dex", description : "5-ft rad trap; Investigation vs spell DC to see; save or restrained 3 ft in the air; save each rnd (5sp)", descriptionFull : "As you cast this spell, you use the rope to create a circle with a 5-foot radius on the ground or the floor. When you finish casting, the rope disappears and the circle becomes a magic trap." + "\n " + "This trap is nearly invisible, requiring a successful Intelligence (Investigation) check against your spell save DC to be discerned." + "\n " + "The trap triggers when a Small, Medium, or Large creature moves onto the ground or the floor in the spell's radius. That creature must succeed on a Dexterity saving throw or be magically hoisted into the air, leaving it hanging upside down 3 feet above the ground or the floor. The creature is restrained there until the spell ends." + "\n " + "A restrained creature can make a Dexterity saving throw at the end of each of its turns, ending the effect on itself on a success. Alternatively, the creature or someone else who can reach it can use an action to make an Intelligence (Arcana) check against your spell save DC. On a success, the restrained effect ends." + "\n " + "After the trap is triggered, the spell ends when no creature is restrained by it." }; SpellsList["soul cage"] = { name : "Soul Cage", classes : ["warlock", "wizard"], source : [["X", 165]], level : 6, school : "Necro", time : "1 rea", timeFull : "1 reaction, which you take when a humanoid you can see within 60 feet of you dies", range : "60 ft", components : "V,S,M\u0192", compMaterial : "A tiny silver cage worth 100 gp", duration : "8 h", description : "As a reaction when humanoid in range dies, I capture their soul in a tiny cage; see book (100gp)", descriptionFull : "This spell snatches the soul of a humanoid as it dies and traps it inside the tiny cage you use for the material component. A stolen soul remains inside the cage until the spell ends or until you destroy the cage, which ends the spell. While you have a soul inside the cage, you can exploit it in any of the ways described below. You can use a trapped soul up to six times. Once you exploit a soul for the sixth time, it is released, and the spell ends. While a soul is trapped, the dead humanoid it came from can't be revived." + "\n " + toUni("Steal Life") + ": You can use a bonus action to drain vigor from the soul and regain 2d8 hit points." + "\n " + toUni("Query Soul") + ": You ask the soul a question (no action required) and receive a brief telepathic answer, which you can understand regardless of the language used. The soul knows only what it knew in life, but it must answer you truthfully and to the best of its ability. The answer is no more than a sentence or two and might be cryptic." + "\n " + toUni("Borrow Experience") + ": You can use a bonus action to bolster yourself with the soul's life experience, making your next attack roll, ability check, or saving throw with advantage. If you don't use this benefit before the start of your next turn, it is lost." + "\n " + toUni("Eyes of the Dead") + ": You can use an action to name a place the humanoid saw in life, which creates an invisible sensor somewhere in that place if it is on the plane of existence you're currently on. The sensor remains for as long as you concentrate, up to 10 minutes (as if you were concentrating on a spell). You receive visual and auditory information from the sensor as if you were in its space using your senses" + "\n " + "A creature that can see the sensor (such as one using see invisibility or truesight) sees a translucent image of the tormented humanoid whose soul you caged." }; SpellsList["steel wind strike"] = { name : "Steel Wind Strike", classes : ["ranger", "wizard"], source : [["X", 166]], level : 5, school : "Conj", time : "1 a", range : "30 ft", components : "S,M\u0192", compMaterial : "A melee weapon worth at least 1 sp", duration : "Instantaneous", description : "Melee spell attack vs. 5 crea in range; 6d10 Force dmg on hit; after, I teleport next to one target", descriptionFull : "You flourish the weapon used in the casting and then vanish to strike like the wind. Choose up to five creatures you can see within range. Make a melee spell attack against each target. On a hit, a target takes 6d10 force damage." + "\n " + "You can then teleport to an unoccupied space you can see within 5 feet of one of the targets you hit or missed." }; SpellsList["summon greater demon"] = { name : "Summon Greater Demon", classes : ["warlock", "wizard"], source : [["X", 166]], level : 4, school : "Conj", time : "1 a", range : "60 ft", components : "V,S,M", compMaterial : "A vial of blood from a humanoid killed within the past 24 hours", duration : "Conc, 1 h", save : "Cha", description : "Summon 1 demon of CR 5+1/SL that obeys me; end of each of its turn, save to break free; see book", descriptionFull : "You utter foul words, summoning one demon from the chaos of the Abyss. You choose the demon's type, which must be one of challenge rating 5 or lower, such as a shadow demon or a barlgura. The demon appears in an unoccupied space you can see within range, and the demon disappears when it drops to 0 hit points or when the spell ends." + "\n " + "Roll initiative for the demon, which has its own turns. When you summon it and on each of your turns thereafter, you can issue a verbal command to it (requiring no action on your part), telling it what it must do on its next turn. If you issue no command, it spends its turn attacking any creature within reach that has attacked it." + "\n " + "At the end of each of the demon's turns, it makes a Charisma saving throw. The demon has disadvantage on this saving throw if you say its true name. On a failed save, the demon continues to obey you. On a successful save, your control of the demon ends for the rest of the duration, and the demon spends its turns pursuing and attacking the nearest non-demons to the best of its ability. If you stop concentrating on the spell before it reaches its full duration, an uncontrolled demon doesn't disappear for 1d6 rounds if it still has hit points." + "\n " + "As part of casting the spell, you can form a circle on the ground with the blood used as a material component. The circle is large enough to encompass your space. While the spell lasts, the summoned demon can't cross the circle or harm it, and it can't target anyone within it. Using the material component in this manner consumes it when the spell ends." + AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, the challenge rating increases by 1 for each slot level above 4th." }; SpellsList["summon lesser demons"] = { name : "Summon Lesser Demons", classes : ["warlock", "wizard"], source : [["X", 167]], level : 3, school : "Conj", time : "1 a", range : "60 ft", components : "V,S,M", compMaterial : "A vial of blood from a humanoid killed within the past 24 hours", duration : "Conc, 1 h", description : "Summon up to 8 (16 at SL6, 24 at SL8) CR \u22641 1 demons, DM choice; attack nearest non-demons", descriptionFull : "You utter foul words, summoning demons from the chaos of the Abyss. Roll on the following table to determine what appears." + "\n\n " + toUni("d6") + "\t" + toUni("Demons Summoned") + "\n 1-2\tTwo demons of challenge rating 1 or lower" + "\n 3-4\tFour demons of challenge rating 1/2 or lower" + "\n 5-6\tEight demons of challenge rating 1/4 or lower" + "\n\n " + "The DM chooses the demons, such as manes or dretches, and you choose the unoccupied spaces you can see within range where they appear. A summoned demon disappears when it drops to 0 hit points or when the spell ends." + "\n " + "The demons are hostile to all creatures, including you. Roll initiative for the summoned demons as a group, which has its own turns. The demons pursue and attack the nearest non-demons to the best of their ability." + "\n " + "As part of casting the spell, you can form a circle on the ground with the blood used as a material component. The circle is large enough to encompass your space. While the spell lasts, the summoned demons can't cross the circle or harm it, and they can't target anyone within it. Using the material component in this manner consumes it when the spell ends." + AtHigherLevels + "When you cast this spell using a spell slot of 6th or 7th level, you summon twice as many demons. If you cast it using a spell slot of 8th or 9th level, you summon three times as many demons." }; SpellsList["synaptic static"] = { name : "Synaptic Static", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["X", 167]], level : 5, school : "Ench", time : "1 a", range : "120 ft", components : "V,S", duration : "Instant, 1 min", save : "Int", description : "20-ft rad all crea Int>2 save or 8d6 Psychic dmg, -1d6 on atks/check/conc. save; save half, no -1d6", descriptionShorter : "20-ft rad all crea Int>2 save or 8d6 Psychic dmg, -1d6 on atk/chk/conc save; save half, no -1d6", descriptionFull : "You choose a point within range and cause psychic energy to explode there. Each creature in a 20-foot-radius sphere centered on that point must make an Intelligence saving throw. A creature with an Intelligence score of 2 or lower can't be affected by this spell. A target takes 8d6 psychic damage on a failed save, or half as much damage on a successful one." + "\n " + "After a failed save, a target has muddled thoughts for 1 minute. During that time, it rolls a d6 and subtracts the number rolled from all its attack rolls and ability checks, as well as its Constitution saving throws to maintain concentration. The target can make an Intelligence saving throw at the end of each of its turns, ending the effect on itself on a success." }; SpellsList["temple of the gods"] = { name : "Temple of the Gods", classes : ["cleric"], source : [["X", 167]], level : 7, school : "Conj", time : "1 h", range : "120 ft", components : "V,S,M\u0192", compMaterial : "A holy symbol worth at least 5 gp", duration : "24 h", description : "Create a temple 120 ft on a side to the deity of a holy symbol used; see book for effects", descriptionFull : "You cause a temple to shimmer into existence on ground you can see within range. The temple must fit within an unoccupied cube of space, up to 120 feet on each side. The temple remains until the spell ends. It is dedicated to whatever god, pantheon, or philosophy is represented by the holy symbol used in the casting." + "\n " + "You make all decisions about the temple's appearance. The interior is enclosed by a floor, walls, and a roof, with one door granting access to the interior and as many windows as you wish. Only you and any creatures you designate when you cast the spell can open or close the door." + "\n " + "The temple's interior is an open space with an idol or altar at one end. You decide whether the temple is illuminated and whether that illumination is bright light or dim light. The smell of burning incense fills the air within, and the temperature is mild." + "\n " + "The temple opposes types of creatures you choose when you cast this spell. Choose one or more of the following: celestials, elementals, fey, fiends, or undead. If a creature of the chosen type attempts to enter the temple, that creature must make a Charisma saving throw. On a failed save, it can't enter the temple for 24 hours. Even if the creature can enter the temple, the magic there hinders it; whenever it makes an attack roll, an ability check, or a saving throw inside the temple, it must roll a d4 and subtract the number rolled from the d20 roll." + "\n " + "In addition, the sensors created by divination spells can't appear inside the temple, and creatures within can't be targeted by divination spells." + "\n " + "Finally, whenever any creature in the temple regains hit points from a spell of 1st level or higher, the creature regains additional hit points equal to your Wisdom modifier (minimum 1 hit point)." + "\n " + "The temple is made from opaque magical force that extends into the Ethereal Plane, thus blocking ethereal travel into the temple's interior. Nothing can physically pass through the temple's exterior. It can't be dispelled by dispel magic, and antimagic field has no effect on it. A disintegrate spell destroys the temple instantly." + "\n " + "Casting this spell on the same spot once every 7 days for a year makes this effect permanent." }; SpellsList["tenser's transformation"] = { name : "Tenser's Transformation", classes : ["wizard"], source : [["X", 168]], level : 6, school : "Trans", time : "1 a", range : "Self", components : "V,S,M", compMaterial : "A few hairs from a bull", duration : "Conc, 10 min", description : "50 temp HP; prof Str/Con save, all wea/arm; extra atk; adv., wea atks +2d12 Force dmg; no spellc.", descriptionShorter : "50 temp HP; prof Str/Con save, wea/arm; +1 atk; adv, wea atks +2d12 Force dmg; no spellc", descriptionFull : "You endow yourself with endurance and martial prowess fueled by magic. Until the spell ends, you can't cast spells, and you gain the following benefits:" + "\n \u2022 " + "You gain 50 temporary hit points. If any of these remain when the spell ends, they are lost." + "\n \u2022 " + "You have advantage on attack rolls that you make with simple and martial weapons." + "\n \u2022 " + "When you hit a target with a weapon attack, that target takes an extra 2d12 force damage." + "\n \u2022 " + "You have proficiency with all armor, shields, simple weapons, and martial weapons." + "\n \u2022 " + "You have proficiency in Strength and Constitution saving throws." + "\n \u2022 " + "You can attack twice, instead of once, when you take the Attack action on your turn. You ignore this benefit if you already have a feature, like Extra Attack, that gives you extra attacks." + "\n " + "Immediately after the spell ends, you must succeed on a DC 15 Constitution saving throw or suffer one level of exhaustion." }; SpellsList["thunder step"] = { name : "Thunder Step", classes : ["sorcerer", "warlock", "wizard"], source : [["X", 168]], level : 3, school : "Conj", time : "1 a", range : "90 ft", components : "V", duration : "Instantaneous", save : "Con", description : "Me + 1 willing crea teleport 90 ft; all crea in 10 ft of origin 3d10+1d10/SL Thunder dmg; save half", descriptionShorter : "Me + 1 willing crea teleport 90 ft; all in 10 ft of origin 3d10+1d10/SL Thunder dmg; save half", descriptionFull : "You teleport yourself to an unoccupied space you can see within range. Immediately after you disappear, a thunderous boom sounds, and each creature within 10 feet of the space you left must make a Constitution saving throw, taking 3d10 thunder damage on a failed save, or half as much damage on a successful one. The thunder can be heard from up to 300 feet away." + "\n " + "You can bring along objects as long as their weight doesn't exceed what you can carry. You can also teleport one willing creature of your size or smaller who is carrying gear up to its carrying capacity. The creature must be within 5 feet of you when you cast this spell, and there must be an unoccupied space within 5 feet of your destination space for the creature to appear in; otherwise, the creature is left behind." + AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d10 for each slot level above 3rd." }; SpellsList["tiny servant"] = { name : "Tiny Servant", classes : ["artificer", "wizard"], source : [["X", 168]], level : 3, school : "Trans", time : "1 min", range : "Touch", components : "V,S", duration : "8 h", description : "Animate 1+2/SL Tiny, nonmagical, unattended obj as tiny servants; bns a to command telepathically", descriptionFull : "You touch one Tiny, nonmagical object that isn't attached to another object or a surface and isn't being carried by another creature. The target animates and sprouts little arms and legs, becoming a creature under your control until the spell ends or the creature drops to 0 hit points. See the Tiny Servant stat block for its statistics." + "\n " + "As a bonus action, you can mentally command the creature if it is within 120 feet of you. (If you control multiple creatures with this spell, you can command any or all of them at the same time, issuing the same command to each one.) You decide what action the creature will take and where it will move during its next turn, or you can issue a simple, general command, such as to fetch a key, stand watch, or stack some books. If you issue no commands, the servant does nothing other than defend itself against hostile creatures. Once given an order, the servant continues to follow that order until its task is complete." + "\n " + "When the creature drops to 0 hit points, it reverts to its original form, and any remaining damage carries over to that form." + AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, you can animate two additional objects for each slot level above 3rd." }; SpellsList["toll the dead"] = { name : "Toll the Dead", classes : ["cleric", "warlock", "wizard"], source : [["X", 169], ["UA:SS", 4]], level : 0, school : "Necro", time : "1 a", range : "60 ft", components : "V,S", duration : "Instantaneous", save : "Wis", description : "1 crea save or 1d12 Necrotic dmg (d8 instead of d12 if at full HP); +1d12/1d8 at CL 5, 11, \u0026 17", descriptionCantripDie : "1 crea save or `CD`d12 Necrotic damage (d8 instead of d12 if at full HP)", descriptionFull : "You point at one creature you can see within range, and the sound of a dolorous bell fills the air around it for a moment. The target must succeed on a Wisdom saving throw or take 1d8 necrotic damage. If the target is missing any of its hit points, it instead takes 1d12 necrotic damage." + "\n " + "The spell's damage increases by one die when you reach 5th level (2d8 or 2d12), 11th level (3d8 or 3d12), and 17th level (4d8 or 4d12)." }; SpellsList["wall of light"] = { name : "Wall of Light", classes : ["sorcerer", "warlock", "wizard"], source : [["X", 170]], level : 5, school : "Evoc", time : "1 a", range : "120 ft", components : "V,S,M", compMaterial : "A hand mirror", duration : "Conc, 10 min", save : "Con", description : "60\xD75\xD710ft (l\xD7w\xD7h) 4d8+1d8/SL Radiant dmg \u0026 blind; save half, not blind; 1 a rngd spell atk; see B", descriptionShorter : "60|5|10ft (l|w|h) 4d8+1d8/SL Radiant dmg, blind; save half, no blind; 1 a rngd atk; see B", descriptionMetric : "18\xD71,5\xD73m (l\xD7w\xD7h) 4d8+1d8/SL Radiant dmg \u0026 blind; save half, not blind; 1 a rngd spell atk; see B", descriptionShorterMetric : "18|1,5|3m (l|w|h) 4d8+1d8/SL Radiant dmg, blind; save half, no blind; 1 a rngd atk; see B", descriptionFull : "A shimmering wall of bright light appears at a point you choose within range. The wall appears in any orientation you choose: horizontally, vertically, or diagonally. It can be free floating, or it can rest on a solid surface. The wall can be up to 60 feet long, 10 feet high, and 5 feet thick. The wall blocks line of sight, but creatures and objects can pass through it. It emits bright light out to 120 feet and dim light for an additional 120 feet." + "\n " + "When the wall appears, each creature in its area must make a Constitution saving throw. On a failed save, a creature takes 4d8 radiant damage, and it is blinded for 1 minute. On a successful save, it takes half as much damage and isn't blinded. A blinded creature can make a Constitution saving throw at the end of each of its turns, ending the effect on itself on a success." + "\n " + "A creature that ends its turn in the wall's area takes 4d8 radiant damage." + "\n " + "Until the spell ends, you can use an action to launch a beam of radiance from the wall at one creature you can see within 60 feet of it. Make a ranged spell attack. On a hit, the target takes 4d8 radiant damage. Whether you hit or miss, reduce the length of the wall by 10 feet. If the wall's length drops to 0 feet, the spell ends." + AtHigherLevels + "When you cast this spell using a spell slot of 6th level or higher, the damage increases by 1d8 for each slot level above 5th." }; SpellsList["word of radiance"] = { name : "Word of Radiance", classes : ["cleric"], source : [["X", 171]], level : 0, school : "Evoc", time : "1 a", range : "5 ft", components : "V,M", compMaterial : "A holy symbol", duration : "Instantaneous", save : "Con", description : "Any crea within range save or 1d6 Radiant damage; +1d6 at CL 5, 11, and 17", descriptionCantripDie : "Any crea within range save or `CD`d6 Radiant damage", descriptionFull : "You utter a divine word, and burning radiance erupts from you. Each creature of your choice that you can see within range must succeed on a Constitution saving throw or take 1d6 radiant damage." + "\n " + "The spell's damage increases by 1d6 when you reach 5th level (2d6), 11th level (3d6), and 17th level (4d6)." }; SpellsList["wrath of nature"] = { name : "Wrath of Nature", classes : ["druid", "ranger"], source : [["X", 171]], level : 5, school : "Evoc", time : "1 a", range : "120 ft", components : "V,S", duration : "Conc, 1 min", description : "60-ft cu dif. ter.; rock: rngd atk 3d8 Bludg. dmg; tree: Dex or 4d6 Slash. dmg; root: Str or restr.; see B", descriptionShorter : "60-ft cu dif. ter.; rock: atk 3d8 Bludg. dmg; tree: Dex or 4d6 Slash. dmg; root: Str or restrain", descriptionFull : "You call out to the spirits of nature to rouse them against your enemies. Choose a point you can see within range. The spirits cause trees, rocks, and grasses in a 60-foot cube centered on that point to become animated until the spell ends." + "\n " + toUni("Grasses and Undergrowth") + ": Any area of ground in the cube that is covered by grass or undergrowth is difficult terrain for your enemies." + "\n " + toUni("Trees") + ": At the start of each of your turns, each of your enemies within 10 feet of any tree in the cube must succeed on a Dexterity saving throw or take 4d6 slashing damage from whipping branches." + "\n " + toUni("Roots and Vines") + ": At the end of each of your turns, one creature of your choice that is on the ground in the cube must succeed on a Strength saving throw or become restrained until the spell ends. A restrained creature can use an action to make a Strength (Athletics) check against your spell save DC, ending the effect on itself on a success." + "\n " + toUni("Rocks") + ": As a bonus action on your turn, you can cause a loose rock in the cube to launch at a creature you can see in the cube. Make a ranged spell attack against the target. On a hit, the target takes 3d8 nonmagical bludgeoning damage, and it must succeed on a Strength saving throw or fall prone." }; SpellsList["zephyr strike"] = { name : "Zephyr Strike", classes : ["ranger"], source : [["X", 171]], level : 1, school : "Trans", time : "1 bns", range : "Self", components : "V", duration : "Conc, 1 min", description : "Moving doesn't provoke opportunity atks; once: adv. on wea atk, +1d8 Force dmg, +30 ft spd for turn", descriptionShorter : "Moving doesn't provoke opport. atks; once: adv. on wea atk, +1d8 Force dmg, +30 ft spd for turn", descriptionFull : "You move like the wind. Until the spell ends, your movement doesn't provoke opportunity attacks." + "\n " + "Once before the spell ends, you can give yourself advantage on one weapon attack roll on your turn. That attack deals an extra 1d8 force damage on a hit. Whether you hit or miss, your walking speed increases by 30 feet until the end of that turn.", dynamicDamageBonus : { multipleDmgMoments : false } }; // Add weapons (attack cantrips) WeaponsList["create bonfire"] = { regExpSearch : /^(?=.*create)(?=.*bonfire).*$/i, name : "Create Bonfire", source : [["X", 152], ["E", 16]], list : "spell", ability : 6, type : "Cantrip", damage : ["C", 8, "fire"], range : "60 ft", description : "5-ft cube; Dex save at casting or when moved into, success - no damage; Conc, 1 min", abilitytodamage : false, dc : true }; WeaponsList["frostbite"] = { regExpSearch : /frostbite/i, name : "Frostbite", source : [["X", 156], ["E", 18]], list : "spell", ability : 6, type : "Cantrip", damage : ["C", 6, "cold"], range : "60 ft", description : "Con save, success - no damage, fail - also disadv. on next weapon attack roll in next turn; 1 creature", abilitytodamage : false, dc : true }; WeaponsList["infestation"] = { regExpSearch : /infestation/i, name : "Infestation", source : [["X", 158]], list : "spell", ability : 6, type : "Cantrip", damage : ["C", 6, "poison"], range : "30 ft", description : "Con save, success - no damage, fail - target also moved 5 ft in random direction", abilitytodamage : false, dc : true }; WeaponsList["magic stone"] = { regExpSearch : /^(?=.*magic)(?=.*stone).*$/i, name : "Magic Stone", source : [["X", 160], ["E", 20]], list : "spell", ability : 5, type : "Cantrip", damage : [1, 6, "bludgeoning"], range : "60/120 ft", description : "Produces 3 stones that each can be thrown (60 ft) or hurled with a sling (120 ft) as a spell attack", abilitytodamage : true }; WeaponsList["primal savagery"] = { regExpSearch : /^(?=.*primal)(?=.*savagery).*$/i, name : "Primal Savagery", source : [["X", 169]], list : "spell", ability : 5, type : "Cantrip", damage : ["C", 10, "acid"], range : "Melee (5 ft)", description : "", abilitytodamage : false }; WeaponsList["thunderclap"] = { regExpSearch : /thunderclap/i, name : "Thunderclap", source : [["X", 168], ["E", 22]], list : "spell", ability : 6, type : "Cantrip", damage : ["C", 6, "thunder"], range : "5-ft radius", description : "Con save, success - no damage; all creatures in area; audible in 100 ft", abilitytodamage : false, dc : true }; WeaponsList["toll the dead"] = { regExpSearch : /^(?=.*toll)(?=.*the)(?=.*dead).*$/i, name : "Toll the Dead", source : [["X", 169], ["UA:SS", 4]], list : "spell", ability : 5, type : "Cantrip", damage : ["C", 12, "necrotic"], range : "60 ft", description : "Wis save, success - no damage; If target is at full HP, d8 instead of d12 damage", abilitytodamage : false, dc : true }; WeaponsList["word of radiance"] = { regExpSearch : /^(?=.*word)(?=.*radiance).*$/i, name : "Word of Radiance", source : [["X", 171]], list : "spell", ability : 5, type : "Cantrip", damage : ["C", 6, "radiant"], range : "5-ft radius", description : "Con save, success - no damage; Only chosen creatures I can see are affected", abilitytodamage : false, dc : true }; // Companion options (Find Greater Steed spell) CompanionList.steed = { name : "Find Greater Steed", nameTooltip : "the Find Greater Steed spell", nameOrigin : "4th-level conjuration spell", nameMenu : "Greater steed (Find Greater Steed spell)", source : [["X", 156]], action : [["action", "Find Greater Steed (dismiss)"]], attributesAdd : { header : "Mount", type : ["Celestial", "Fey", "Fiend"], subtype : "", features : [{ name : "Find Greater Steed", description : "If dropped to 0 HP, the steed disappears, leaving behind no physical form." }], languages : "understands one language its master speaks (master's choice)" }, attributesChange : function(sCrea, objCrea) { if (objCrea.scores[3] < 6) objCrea.scores[3] = 6; }, notes : function() { if (!CompanionList.mount) return; var a = newObj(CompanionList.mount.notes); a[0].description = a[0].description.replace(/It assumes a chosen form.*/i, "It has the chosen form: griffon, pegasus, peryton, dire wolf, rhinoceros, or saber-toothed tiger"); return a; }() }; // Add creatures CreatureList["tiny servant"] = { // Stats for the Tiny Servant spell (contains contributions by SoilentBrad) name : "Tiny Servant", source : [["X", 169]], size : 5, type : "Construct", alignment : "Unaligned", ac : 15, hp : 10, hd : [4, 4], speed : "30 ft, climb 30 ft", scores : [4, 16, 10, 2, 10, 1], damage_immunities : "poison, psychic", condition_immunities : "blinded, charmed, deafened, exhaustion, frightened, paralyzed, petrified, poisoned", senses : "Blindsight 60 ft (blind beyond this radius)", passivePerception : 10, challengeRating : "0", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Slam", ability : 2, damage : [1, 4, "bludgeoning"], range : "Melee (5 ft)", description : "" }] }; // Magic Items MagicItemsList["adamantine ammunition"] = { name : "Adamantine Ammunition", source : [["X", 78]], type : "weapon (any ammunition)", rarity : "unknown", description : "Whenever a ammunition made or coated with adamantine hits an object, the hit is a critical hit. The adamantine version of ten pieces of ammunition costs 500 gp more than the normal version, whether the ammunition is made of the metal or coated with it.", descriptionFull : "Ammunition made of or coated with adamantine is unusually effective when used to break objects. Whenever a piece of adamantine ammunition hits an object, the hit is a critical hit.\n The adamantine version of ten pieces of ammunition costs 500 gp more than the normal version, whether the ammunition is made of the metal or coated with it.", allowDuplicates : true, chooseGear : { type : "ammo", prefixOrSuffix : "brackets", itemName1stPage : ["suffix", "Adamantine"], descriptionChange : ["replace", "ammunition"], excludeCheck : function (inObjKey, inObj) { return /vials|flasks/i.test(inObj.icon); } } } MagicItemsList["adamantine weapon"] = { name : "Adamantine Weapon", source : [["X", 78]], type : "weapon (any melee)", rarity : "unknown", description : "Whenever a weapon made or coated with adamantine hits an object, the hit is a critical hit. The adamantine version of a melee weapon costs 500 gp more than the normal version, whether the weapon is made of the metal or coated with it.", descriptionFull : "Melee weapons made of or coated with adamantine are unusually effective when used to break objects. Whenever an adamantine weapon hits an object, the hit is a critical hit.\n The adamantine version of a melee weapon costs 500 gp more than the normal version, whether the weapon is made of the metal or coated with it.", allowDuplicates : true, chooseGear : { type : "weapon", prefixOrSuffix : "brackets", itemName1stPage : ["suffix", "Adamantine"], descriptionChange : ["replace", "weapon"], excludeCheck : function (inObjKey, inObj) { return inObj.list != "melee"; } }, calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.list == "melee" && /adamantine/i.test(v.WeaponTextName)) { fields.Description += (fields.Description ? '; ' : '') + 'Always critical hits on objects'; } }, 'If I include the word "Adamantine" in the name of a melee weapon, it will be treated as the magic item Adamantine Weapon. Whenever it hits an object, it automatically scores a critical hit.' ] } } MagicItemsList["armor of gleaming"] = { name : "Armor of Gleaming", nameTest : "of Gleaming", source : [["X", 136]], type : "armor (medium, or heavy)", rarity : "common", description : "This armor never gets dirty.", descriptionFull : "This armor never gets dirty.", allowDuplicates : true, chooseGear : { type : "armor", prefixOrSuffix : "prefix", descriptionChange : ["prefix", "armor"], excludeCheck : function (inObjKey, inObj) { return !(/medium|heavy/i).test(inObj.type); } } } MagicItemsList["bead of nourishment"] = { name : "Bead of Nourishment", source : [["X", 136]], type : "wondrous item", rarity : "common", description : "Once I can eat this spongy, flavorless, gelatinous bead. It dissolves on my tongue and provides as much nourishment as 1 day of rations.", descriptionFull : "This spongy, flavorless, gelatinous bead dissolves on your tongue and provides as much nourishment as 1 day of rations." } MagicItemsList["bead of refreshment"] = { name : "Bead of Refreshment", source : [["X", 136]], type : "wondrous item", rarity : "common", description : "Once I can drop this spongy, flavorless, gelatinous bead in liquid. It dissolves in the liquid and transforms up to a pint of it into fresh, cold drinking water. The bead has no effect on magical liquids or harmful substances such as poison.", descriptionFull : "This spongy, flavorless, gelatinous bead dissolves in liquid, transforming up to a pint of the liquid into fresh, cold drinking water. The bead has no effect on magical liquids or harmful substances such as poison." } MagicItemsList["boots of false tracks"] = { name : "Boots of False Tracks", source : [["X", 136]], type : "wondrous item", rarity : "common", description : "Only humanoids can wear these boots. While wearing the boots, I can choose to have them leave tracks like those of another kind of humanoid of my size.", descriptionFull : "Only humanoids can wear these boots. While wearing the boots, you can choose to have them leave tracks like those of another kind of humanoid of your size." } MagicItemsList["candle of the deep"] = { name : "Candle of the Deep", source : [["X", 136]], type : "wondrous item", rarity : "common", description : "The flame of this candle is not extinguished when immersed in water. It gives off light and heat like a normal candle.", descriptionFull : "The flame of this candle is not extinguished when immersed in water. It gives off light and heat like a normal candle." } MagicItemsList["cast-off armor"] = { name : "Cast-Off Armor", nameTest : "Cast-Off", source : [["X", 136]], type : "armor (light, medium, or heavy)", rarity : "common", description : "As an action, I can doff this armor.", descriptionFull : "You can doff this armor as an action.", chooseGear : { type : "armor", prefixOrSuffix : "suffix", descriptionChange : ["prefix", "armor"] }, action : [["action", ""]] } MagicItemsList["charlatan's die"] = { name : "Charlatan's Die", source : [["X", 136]], type : "wondrous item", rarity : "common", description : "Whenever I roll this six-sided die, I can control which number it rolls.", descriptionFull : "Whenever you roll this six-sided die, you can control which number it rolls.", attunement : true } MagicItemsList["cloak of billowing"] = { name : "Cloak of Billowing", source : [["X", 136]], type : "wondrous item", rarity : "common", description : "As a bonus action while wearing this cloak, I can make it billow dramatically.", descriptionFull : "While wearing this cloak, you can use a bonus action to make it billow dramatically.", action : [["bonus action", ""]] } MagicItemsList["cloak of many fashions"] = { name : "Cloak of Many Fashions", source : [["X", 136], ["WBtW", 208]], type : "wondrous item", rarity : "common", description : "As a bonus action while wearing this cloak, I can change its style, color, and apparent qualities. The cloak's weight doesn't change. Regardless of its appearance, the cloak can't be anything but a cloak. Although it can duplicate the appearance of other magic cloaks, it doesn't gain their magical properties.", descriptionFull : "While wearing this cloak, you can use a bonus action to change the style, color, and apparent quality of the garment. The cloak's weight doesn't change. Regardless of its appearance, the cloak can't be anything but a cloak. Although it can duplicate the appearance of other magic cloaks, it doesn't gain their magical properties.", action : [["bonus action", ""]] } MagicItemsList["clockwork amulet"] = { name : "Clockwork Amulet", source : [["X", 137]], type : "wondrous item", rarity : "common", description : "Once per dawn when I make an attack roll while wearing this copper amulet, I can forgo rolling the d20 to get a 10 on the die. The amulet contains tiny interlocking gears powered by magic from Mechanus, a plane of clockwork predictability. When I hold it up to my ear, I can hear faint ticking and whirring noises.", descriptionFull : "This copper amulet contains tiny interlocking gears and is powered by magic from Mechanus, a plane of clockwork predictability. A creature that puts an ear to the amulet can hear faint ticking and whirring noises coming from within.\n When you make an attack roll while wearing the amulet, you can forgo rolling the d20 to get a 10 on the die. Once used, this property can't be used again until the next dawn.", usages : 1, recovery : "dawn" } MagicItemsList["clothes of mending"] = { name : "Clothes of Mending", source : [["X", 137]], type : "wondrous item", rarity : "common", description : "This elegant outfit of traveler's clothes magically mends itself to counteract daily wear and tear. Pieces of the outfit that are destroyed can't be repaired in this way.", descriptionFull : "This elegant outfit of traveler's clothes magically mends itself to counteract daily wear and tear. Pieces of the outfit that are destroyed can't be repaired in this way.", weight : 4 } MagicItemsList["dark shard amulet"] = { name : "Dark Shard Amulet", source : [["X", 137]], type : "wondrous item", rarity : "common", description : "I can use this amulet of extraplanar material from the realm of my warlock patron as a spellcasting focus for my warlock spells. Once per long rest, I can use it to cast a warlock cantrip that I don't know. To do so, I must make a DC 10 Intelligence (Arcana) check, wasting the attempt as well as my action if I fail.", descriptionFull : "This amulet is fashioned from a single shard of resilient extraplanar material originating from the realm of your warlock patron. While you are wearing it, you gain the following benefits:\n \u2022 You can use the amulet as a spellcasting focus for your warlock spells.\n \u2022 You can try to cast a cantrip that you don't know. The cantrip must be on the warlock spell list, and you must make a DC 10 Intelligence (Arcana) check. If the check succeeds, you cast the spell. If the check fails, so does the spell, and the action used to cast the spell is wasted. In either case, you can't use this property again until you finish a long rest.", attunement : true, prerequisite : "Requires attunement by a warlock", prereqeval : function (v) { return classes.known.warlock ? true : false; }, usages : 1, recovery : "long rest", spellcastingAbility: "warlock", spellFirstColTitle: "", spellcastingPreparedCantrips: { 'class': 'warlock' }, allowUpCasting: true, spellcastingBonus: [{ name: 'Select 1 cantrip or enable', 'class': 'warlock', level: [0, 0], }, { name: '"Prepare cantrips just like', spells: [], }, { name: 'spells" on the bottom left.', spells: [], }], calcChanges : { spellList : [ function(spList, spName, spType) { // Remove the already known cantrips, from any source except magic items if (spName.indexOf('dark shard amulet') !== -1) { var allSpellsKnown = []; for (var sCast in CurrentSpells) { if (sCast.refType === "item") continue; var oCast = CurrentSpells[sCast]; if (oCast.selectCa) allSpellsKnown = allSpellsKnown.concat(oCast.selectCa); if (oCast.selectBo) allSpellsKnown = allSpellsKnown.concat(oCast.selectBo); } var knownCantrips = OrderSpells(allSpellsKnown, "single", false, false, 0); if (!spList.notspells) spList.notspells = []; spList.notspells = spList.notspells.concat(knownCantrips); } }, ], spellAdd : [ function (spellKey, spellObj, spName, isDuplicate) { if (spName.indexOf('dark shard amulet') !== -1) { spellObj.firstCol = ""; }; }, ], }, } MagicItemsList["dread helm"] = { name : "Dread Helm", source : [["X", 137], ["WBtW", 209]], type : "wondrous item", rarity : "common", description : "This fearsome steel helm makes my eyes glow red while I wear it.", descriptionFull : "This fearsome steel helm makes your eyes glow red while you wear it.", weight : 1 } MagicItemsList["ear horn of hearing"] = { name : "Ear Horn of Hearing", source : [["X", 137]], type : "wondrous item", rarity : "common", description : "While held up to my ear, this horn suppresses the effects of the deafened condition on me, allowing me to hear normally.", descriptionFull : "While held up to your ear, this horn suppresses the effects of the deafened condition on you, allowing you to hear normally.", savetxt : { immune : ["deafened"] }, weight : 1 } MagicItemsList["enduring spellbook"] = { name : "Enduring Spellbook", source : [["X", 137]], type : "wondrous item", rarity : "common", description : "This spellbook, along with anything written on its pages, can't be damaged by fire or immersion in water. In addition, the spellbook doesn't deteriorate with age.", descriptionFull : "This spellbook, along with anything written on its pages, can't be damaged by fire or immersion in water. In addition, the spellbook doesn't deteriorate with age.", weight : 5 } MagicItemsList["ersatz eye"] = { name : "Ersatz Eye", source : [["X", 137], ["W", 267]], type : "wondrous item", rarity : "common", description : "This artificial eye replaces a real one that was lost or removed. While the ersatz eye is embedded in my eye socket, it can't be removed by anyone other than me, and I can see through the tiny orb as though it were a normal eye.", descriptionFull : "This artificial eye replaces a real one that was lost or removed. While the ersatz eye is embedded in your eye socket, it can't be removed by anyone other than you, and you can see through the tiny orb as though it were a normal eye.", attunement : true } MagicItemsList["hat of vermin"] = { name : "Hat of Vermin", source : [["X", 137]], type : "wondrous item", rarity : "common", description : "This hat has 3 charges, regaining all at dawn. As an action while holding it, I can expend 1 charge and speak a command word to have one bat, frog, or rat appear in the hat. The creature acts as an ordinary member of its kind and disappears after 1 hour or when it has 0 HP. It is not under my control.", descriptionFull : "This hat has 3 charges. While holding the hat, you can use an action to expend 1 of its charges and speak a command word that summons your choice of a bat, a frog, or a rat. The summoned creature magically appears in the hat and tries to get away from you as quickly as possible. The creature is neither friendly nor hostile, and it isn't under your control. It behaves as an ordinary creature of its kind and disappears after 1 hour or when it drops to 0 hit points. The hat regains all expended charges daily at dawn.", action : [["action", ""]], usages : 3, recovery : "dawn" } MagicItemsList["hat of wizardry"] = { name : "Hat of Wizardry", source : [["X", 137]], type : "wondrous item", rarity : "common", description : "I can use this antiquated, cone-shaped hat adorned with gold crescent moons and stars as a spellcasting focus for my wizard spells. Once per long rest, I can use it to cast a wizard cantrip that I don't know. To do so, I must make a DC 10 Intelligence (Arcana) check, wasting the attempt as well as my action if I fail.", descriptionFull : "This antiquated, cone-shaped hat is adorned with gold crescent moons and stars. While you are wearing it, you gain the following benefits:\n \u2022 You can use the hat as a spellcasting focus for your wizard spells.\n \u2022 You can try to cast a cantrip that you don't know. The cantrip must be on the wizard spell list, and you must make a DC 10 Intelligence (Arcana) check. If the check succeeds, you cast the spell. If the check fails, so does the spell, and the action used to cast the spell is wasted. In either case, you can't use this property again until you finish a long rest.", attunement : true, prerequisite : "Requires attunement by a wizard", prereqeval : function (v) { return classes.known.wizard ? true : false; }, usages : 1, recovery : "long rest", spellcastingAbility: "wizard", spellFirstColTitle: "", spellcastingPreparedCantrips: { 'class': 'wizard' }, allowUpCasting: true, spellcastingBonus: [{ name: 'Select 1 cantrip or enable', 'class': 'wizard', level: [0, 0], }, { name: '"Prepare cantrips just like', spells: [], }, { name: 'spells" on the bottom left.', spells: [], }], calcChanges : { spellList : [ function(spList, spName, spType) { // Remove the already known cantrips, from any source except magic items if (spName.indexOf('hat of wizardry') !== -1) { var allSpellsKnown = []; for (var sCast in CurrentSpells) { if (sCast.refType === "item") continue; var oCast = CurrentSpells[sCast]; if (oCast.selectCa) allSpellsKnown = allSpellsKnown.concat(oCast.selectCa); if (oCast.selectBo) allSpellsKnown = allSpellsKnown.concat(oCast.selectBo); } var knownCantrips = OrderSpells(allSpellsKnown, "single", false, false, 0); if (!spList.notspells) spList.notspells = []; spList.notspells = spList.notspells.concat(knownCantrips); } } ], spellAdd : [ function (spellKey, spellObj, spName, isDuplicate) { if (spName.indexOf('hat of wizardry') !== -1) { spellObj.firstCol = ""; }; } ] }, } MagicItemsList["heward's handy spice pouch"] = { name : "Heward's Handy Spice Pouch", source : [["X", 137]], type : "wondrous item", rarity : "common", description : "This belt pouch appears empty. It has 10 charges, regaining 1d6+4 expended charges at dawn. As an action while holding it, I can speak the name of any nonmagical food seasoning (e.g. salt, pepper, or saffron), and remove a pinch of the desired seasoning from the pouch. A pinch is enough to season a single meal.", descriptionFull : "This belt pouch appears empty and has 10 charges. While holding the pouch, you can use an action to expend 1 of its charges, speak the name of any nonmagical food seasoning (such as salt, pepper, saffron, or cilantro), and remove a pinch of the desired seasoning from the pouch. A pinch is enough to season a single meal. The pouch regains 1d6+4 expended charges daily at dawn.", weight : 1, usages : 10, recovery : "dawn", additional : "regains 1d6+4", action : [["action", ""]] } MagicItemsList["horn of silent alarm"] = { name : "Horn of Silent Alarm", source : [["X", 137]], type : "wondrous item", rarity : "common", description : "This horn has 4 charges, regaining 1d4 expended charges daily at dawn. As an action, I can expend 1 charge and blow it, have only one creature within 600 ft of my choice hear the horn's blare, provided it isn't deafened. No other creature hears sound coming from the horn.", descriptionFull : "This horn has 4 charges. When you use an action to blow it, one creature of your choice can hear the horn's blare, provided the creature is within 600 feet of the horn and not deafened. No other creature hears sound coming from the horn. The horn regains 1d4 expended charges daily at dawn.", weight : 2, usages : 4, recovery : "dawn", additional : "regains 1d4", action : [["action", ""]] } MagicItemsList["instrument of illusions"] = { // contains contributions by AelarTheElFRogue name : "Instrument of Illusions", source : [["X", 137]], type : "wondrous item (instrument)", rarity : "common", description : "While I am playing this musical instrument, I can create harmless, illusory visual effects within a 5-ft-radius (15-ft for bards) sphere centered on the instrument. The magical effects have neither substance nor sound, and they are obviously illusory. The effects end when I stop playing.", descriptionFull : "While you are playing this musical instrument, you can create harmless, illusory visual effects within a 5-foot-radius sphere centered on the instrument. If you are a bard, the radius increases to 15 feet. Sample visual effects include luminous musical notes, a spectral dancer, butterflies, and gently falling snow. The magical effects have neither substance nor sound, and they are obviously illusory. The effects end when you stop playing.", attunement : true, weight : 3, // same as instrument of the bards choices : ["Bard (15-ft radius)", "Not a Bard (5-ft radius)"], selfChoosing : function () { return classes.known.bard ? "bard (15-ft radius)" : "not a bard (5-ft radius)"; }, "bard (15-ft radius)" : { name : "Instrument\u200A of Illusions", description : "While I am playing this musical instrument, I can create harmless, illusory visual effects within a 15-ft-radius sphere centered on the instrument. The magical effects have neither substance nor sound, and they are obviously illusory. The effects end when I stop playing." }, "not a bard (5-ft radius)" : { name : "Instrument\u200A\u200A of Illusions", description : "While I am playing this musical instrument, I can create harmless, illusory visual effects within a 5-ft-radius sphere centered on the instrument. The magical effects have neither substance nor sound, and they are obviously illusory. The effects end when I stop playing." } } MagicItemsList["instrument of scribing"] = { name : "Instrument of Scribing", source : [["X", 138], ["WBtW", 212]], type : "wondrous item (instrument)", rarity : "common", description : "As an action while I'm playing this musical instrument, I can write a magical message on a nonmagical surface that I can see within 30 ft. The message can be up to 6 (or 7) words in a language I know and fades away after 24 hours or when Dispel Magic is cast on it. The instrument can be used like this 3 times per dawn.", descriptionFull : "This musical instrument has 3 charges. While you are playing it, you can use an action to expend 1 charge from the instrument and write a magical message on a nonmagical object or surface that you can see within 30 feet of you. The message can be up to six words long and is written in a language you know. If you are a bard, you can scribe an additional seven words and choose to make the message glow faintly, allowing it to be seen in nonmagical darkness. Casting Dispel Magic on the message erases it. Otherwise, the message fades away after 24 hours.\n The instrument regains all expended charges daily at dawn.", attunement : true, weight : 3, // same as instrument of the bards choices : ["Bard (15-ft radius)", "Not a Bard (5-ft radius)"], selfChoosing : function () { return classes.known.bard ? "bard (15-ft radius)" : "not a bard (5-ft radius)"; }, "bard (15-ft radius)" : { name : "Instrument\u200A of Scribing", description : "As an action while I'm playing this musical instrument, I can write a magical message on a nonmagical surface that I can see within 30 ft. The message can be up to 7 words in a language I know and I can have it glow faintly. Dispel Magic erases it, otherwise it fades away after 24 hours. This can be used 3 times per dawn." }, "not a bard (5-ft radius)" : { name : "Instrument\u200A\u200A of Scribing", description : "As an action while I'm playing this musical instrument, I can write a magical message on a nonmagical surface that I can see within 30 ft. The message can be up to 6 words in a language I know and fades away after 24 hours or when Dispel Magic is cast on it. The instrument can be used like this 3 times per dawn." } } MagicItemsList["lock of trickery"] = { name : "Lock of Trickery", source : [["X", 138]], type : "wondrous item", rarity : "common", description : "This lock appears to be an ordinary lock and comes with a single key. The tumblers in this lock magically adjust to thwart burglars. Without the key, a creature proficient with thieves' tools can pick this lock with a successful DC 15 Dexterity check, but has disadvantage on that check.", descriptionFull : "This lock appears to be an ordinary lock and comes with a single key. The tumblers in this lock magically adjust to thwart burglars. Dexterity checks made to pick the lock have disadvantage. Thus, without the key, a creature proficient with thieves' tools can pick this lock with a successful DC 15 Dexterity check, but has disadvantage on that check.", weight : 1 } MagicItemsList["moon-touched sword"] = { name : "Moon-Touched Sword", nameTest : "Moon-Touched", source : [["X", 138]], type : "weapon (any sword)", rarity : "common", description : "In darkness, the unsheathed blade of this sword sheds moonlight, creating bright light in a 15-ft radius and dim light for an additional 15 ft.", descriptionFull : "In darkness, the unsheathed blade of this sword sheds moonlight, creating bright light in a 15-foot radius and dim light for an additional 15 feet.", chooseGear : { type : "weapon", prefixOrSuffix : "suffix", descriptionChange : ["replace", "sword"], excludeCheck : function (inObjKey, inObj) { var testRegex = /sword|scimitar|rapier/i; return !(testRegex).test(inObjKey) && (!inObj.baseWeapon || !(testRegex).test(inObj.baseWeapon)); } }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && v.isMeleeWeapon && /sword|scimitar|rapier/i.test(v.baseWeaponName) && /moon.touched/i.test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); } }, 'If I include the words "Moon-Touched" in the name of a sword, it will be treated as the magic weapon Moon-Touched Sword.' ] } } MagicItemsList["mystery key"] = { name : "Mystery Key", source : [["X", 138]], type : "wondrous item", rarity : "common", description : "A question mark is worked into the head of this key. The key has a 5% chance of unlocking any lock into which it's inserted. Once it unlocks something, the key disappears.", descriptionFull : "A question mark is worked into the head of this key. The key has a 5% chance of unlocking any lock into which it's inserted. Once it unlocks something, the key disappears." } MagicItemsList["orb of direction"] = { name : "Orb of Direction", source : [["X", 138], ["WBtW", 212]], type : "wondrous item", rarity : "common", description : "As an action while holding this orb, I can determine which way is north. This property functions only on the Material Plane.", descriptionFull : "While holding this orb, you can use an action to determine which way is north. This property functions only on the Material Plane.", weight : 3, action : [["action", ""]] } MagicItemsList["orb of time"] = { name : "Orb of Time", source : [["X", 138]], type : "wondrous item", rarity : "common", description : "As an action while holding this orb, I can determine whether it is morning, afternoon, evening, or nighttime outside. This property functions only on the Material Plane.", descriptionFull : "While holding this orb, you can use an action to determine whether it is morning, afternoon, evening, or nighttime outside. This property functions only on the Material Plane.", weight : 3, action : [["action", ""]] } MagicItemsList["perfume of bewitching"] = { name : "Perfume of Bewitching", source : [["X", 138]], type : "wondrous item", rarity : "common", description : "Once as an action, I can apply the perfume in this tiny vial to myself and its effect lasts 1 hour. For the duration, I have advantage on all Charisma checks directed at humanoids of challenge rating 1 or lower. Those subjected to the perfume's effect are not aware that they've been influenced by magic.", descriptionFull : "This tiny vial contains magic perfume, enough for one use. You can use an action to apply the perfume to yourself, and its effect lasts 1 hour. For the duration, you have advantage on all Charisma checks directed at humanoids of challenge rating 1 or lower. Those subjected to the perfume's effect are not aware that they've been influenced by magic." } MagicItemsList["pipe of smoke monsters"] = { name : "Pipe of Smoke Monsters", source : [["X", 138], ["WBtW", 212]], type : "wondrous item", rarity : "common", description : "As an action while smoking this pipe, I can exhale a puff of smoke that takes the form of a single creature, such as a dragon, a flumph, or a froghemoth. The form must be small enough to fit in a 1-ft cube and loses its shape after a few seconds, becoming an ordinary puff of smoke.", descriptionFull : "While smoking this pipe, you can use an action to exhale a puff of smoke that takes the form of a single creature, such as a dragon, a flumph, or a froghemoth. The form must be small enough to fit in a 1-foot cube and loses its shape after a few seconds, becoming an ordinary puff of smoke." } MagicItemsList["pole of angling"] = { name : "Pole of Angling", source : [["X", 138]], type : "wondrous item", rarity : "common", description : "While holding this 10 ft pole, I can speak a command word and transform it into a fishing pole with a hook, a line, and a reel. Speaking the command word again changes the fishing pole back into a normal 10 ft pole.", descriptionFull : "While holding this 10-foot pole, you can speak a command word and transform it into a fishing pole with a hook, a line, and a reel. Speaking the command word again changes the fishing pole back into a normal 10-foot pole.", weight : 7 } MagicItemsList["pole of collapsing"] = { name : "Pole of Collapsing", source : [["X", 138], ["WBtW", 212]], type : "wondrous item", rarity : "common", description : "As an action while holding this 10 ft pole, I can speak a command word to have it collapse into a 1-ft-long rod. The pole's weight doesn't change. As an action while holding the rod, I can speak a different command word to have it elongate back to a pole, but only as long as the surrounding space allows.", descriptionFull : "While holding this 10-foot pole, you can use an action to speak a command word and cause it to collapse into a 1-foot-long rod, for ease of storage. The pole's weight doesn't change. You can use an action to speak a different command word and cause the rod to revert to a pole; however, the rod will elongate only as far as the surrounding space allows.", weight : 7, action : [["action", ""]] } MagicItemsList["pot of awakening"] = { name : "Pot of Awakening", source : [["X", 138]], type : "wondrous item", rarity : "common", description : "If I plant an ordinary shrub in this 10 lb clay pot and let it grow for 30 days, the shrub magically transforms into an awakened shrub at the end of that time. When the shrub awakens, its roots break the pot, destroying it. The awakened shrub is friendly toward me. Absent commands from me, it does nothing.", descriptionFull : "If you plant an ordinary shrub in this 10-pound clay pot and let it grow for 30 days, the shrub magically transforms into an awakened shrub at the end of that time. When the shrub awakens, its roots break the pot, destroying it.\n The awakened shrub is friendly toward you. Absent commands from you, it does nothing.", weight : 10 } MagicItemsList["rope of mending"] = { name : "Rope of Mending", source : [["X", 138]], type : "wondrous item", rarity : "common", description : "I can cut this 50-foot coil of hempen rope into any number of smaller pieces, and then use an action to speak a command word and cause the pieces to knit back together. The pieces must be in contact with each other and not otherwise in use. A rope of mending is forever shortened if a section of it is lost.", descriptionFull : "You can cut this 50-foot coil of hempen rope into any number of smaller pieces, and then use an action to speak a command word and cause the pieces to knit back together. The pieces must be in contact with each other and not otherwise in use. A rope of mending is forever shortened if a section of it is lost or destroyed.", action : [["action", ""]], weight : 10 } MagicItemsList["ruby of the war mage"] = { name : "Ruby of the War Mage", source : [["X", 138]], type : "wondrous item", rarity : "common", description : "By pressing this 1-inch-diameter ruby etched with eldritch runes to a simple or martial weapon for 10 minutes, it attaches itself to the weapon. I can then use that weapon as a spellcasting focus. Once attached, it can't be removed unless my attunement ends, I detach it as an action, or the weapon is destroyed.", descriptionFull : "Etched with eldritch runes, this 1-inch-diameter ruby allows you to use a simple or martial weapon as a spellcasting focus for your spells. For this property to work, you must attach the ruby to the weapon by pressing the ruby against it for at least 10 minutes. Thereafter, the ruby can't be removed unless you detach it as an action or the weapon is destroyed. Not even an Antimagic Field causes it to fall off. The ruby does fall off the weapon if your attunement to the ruby ends.", attunement : true, prerequisite : "Requires attunement by a spellcaster", prereqeval : function(v) { return v.isSpellcaster; } } MagicItemsList["shield of expression"] = { name : "Shield of Expression", source : [["X", 139]], type : "shield", rarity : "common", description : "The front of this shield is shaped in the likeness of a face. As a bonus action while bearing the shield, I can have the shield alter the expression of the face.", descriptionFull : "The front of this shield is shaped in the likeness of a face. While bearing the shield, you can use a bonus action to alter the face's expression.", weight : 6, shieldAdd : "Shield of Expression", action : [["bonus action", ""]] } MagicItemsList["smoldering armor"] = { name : "Smoldering Armor", nameTest : "Smoldering", source : [["X", 139]], type : "armor (light, medium, or heavy)", rarity : "common", description : "Wisps of harmless, odorless smoke rise from this armor while it is worn.", descriptionFull : "Wisps of harmless, odorless smoke rise from this armor while it is worn.", chooseGear : { type : "armor", prefixOrSuffix : "suffix", descriptionChange : ["prefix", "armor"] } } MagicItemsList["staff of adornment"] = { name : "Staff of Adornment", source : [["X", 139]], type : "staff", rarity : "common", description : "If I place an object up to 1 lb above the tip of the staff while holding it, the object floats 1 inch from its tip and remains there until it is removed or until I no longer possess the staff. It can have up to three objects floating over its tip at any given time and I can make one or more objects slowly spin or turn in place.", descriptionFull : "If you place an object weighing no more than 1 pound (such as a shard of crystal, an egg, or a stone) above the tip of the staff while holding it, the object floats an inch from the staff's tip and remains there until it is removed or until the staff is no longer in your possession. The staff can have up to three such objects floating over its tip at any given time. While holding the staff, you can make one or more of the objects slowly spin or turn in place.", weight : 4 } MagicItemsList["staff of birdcalls"] = { name : "Staff of Birdcalls", source : [["X", 139]], type : "staff", rarity : "common", description : "This staff has 10 charges, regaining 1d6+4 at dawn, 5% chance it is destroyed when its last charge is used. As an action, I can use 1 charge to create a sound out to a range of 60 ft: a finch's chirp, raven's caw, duck's quack, chicken's cluck, goose's honk, loon's call, turkey's gobble, seagull's cry, owl's hoot, or eagle's shriek.", descriptionFull : "This wooden staff is decorated with bird carvings. It has 10 charges. While holding it, you can use an action to expend 1 charge from the staff and cause it to create one of the following sounds out to a range of 60 feet: a finch's chirp, a raven's caw, a duck's quack, a chicken's cluck, a goose's honk, a loon's call, a turkey's gobble, a seagull's cry, an owl's hoot, or an eagle's shriek.\n The staff regains 1d6+4 expended charges daily at dawn. If you expend the last charge, roll a d20. On a 1, the staff explodes in a harmless cloud of bird feathers and is lost forever.", weight : 4, usages : 10, recovery : "dawn", additional : "regains 1d6+4", action : [["action", ""]] } MagicItemsList["staff of flowers"] = { name : "Staff of Flowers", source : [["X", 139]], type : "staff", rarity : "common", description : "This staff has 10 charges, regaining 1d6+4 at dawn, 5% chance it is destroyed when its last charge is used. As an action, I can use 1 charge to cause a flower of my choice to sprout from a patch of earth or soil within 5 ft or from the staff itself. The flower is nonmagical and grows or withers as a normal flower would.", descriptionFull : "This wooden staff has 10 charges. While holding it, you can use an action to expend 1 charge from the staff and cause a flower to sprout from a patch of earth or soil within 5 feet of you, or from the staff itself. Unless you choose a specific kind of flower, the staff creates a mildscented daisy. The flower is harmless and nonmagical, and it grows or withers as a normal flower would. The staff regains 1d6+4 expended charges daily at dawn. If you expend the last charge, roll a d20. On a 1, the staff turns into flower petals and is lost forever.", weight : 4, usages : 10, recovery : "dawn", additional : "regains 1d6+4", action : [["action", ""]] } MagicItemsList["talking doll"] = { name : "Talking Doll", source : [["X", 139], ["WBtW", 214]], type : "wondrous item", rarity : "common", attunement : true, description : "During a short rest with this doll within 5 ft of me, I can tell it to say up to 6 phrases of up to 6 words each, and set an observable condition under which the doll speaks each phrase. Conditions must happen within 5 ft of the doll. The doll can remember only 6 phrases that are lost when my attunement to it ends.", descriptionFull : "While this stuffed doll is within 5 feet of you, you can spend a short rest telling it to say up to six phrases, none of which can be more than six words long, and set an observable condition under which the doll speaks each phrase. You can also replace old phrases with new ones. Whatever the condition, it must occur within 5 feet of the doll to make it speak. For example, whenever someone picks up the doll, it might say, \"I want a piece of candy.\" The doll's phrases are lost when your attunement to the doll ends." } MagicItemsList["tankard of sobriety"] = { name : "Tankard of Sobriety", source : [["X", 139]], type : "wondrous item", rarity : "common", description : "This tankard has a stern face sculpted into one side. I can drink ale, wine, or any other nonmagical alcoholic beverage poured into it without becoming inebriated. The tankard has no effect on magical liquids or harmful substances such as poison.", descriptionFull : "This tankard has a stern face sculpted into one side. You can drink ale, wine, or any other nonmagical alcoholic beverage poured into it without becoming inebriated. The tankard has no effect on magical liquids or harmful substances such as poison.", weight : 1 } MagicItemsList["unbreakable arrow"] = { name : "Unbreakable Arrow", source : [["X", 139]], type : "weapon (arrow)", rarity : "common", description : "This arrow can't be broken, except when it is within an Antimagic Field.", descriptionFull : "This arrow can't be broken, except when it is within an Antimagic Field.", weight : 0.05 } MagicItemsList["veteran's cane"] = { name : "Veteran's Cane", source : [["X", 139]], type : "wondrous item", rarity : "common", description : "Once as a bonus action, I can grasp this walking cane and speak its command word to have it transform into an ordinary longsword. Once transformed, the longsword is nonmagical and can't revert back to a walking cane.", descriptionFull : "When you grasp this walking cane and use a bonus action to speak the command word, it transforms into an ordinary longsword and ceases to be magical.", weight : 4, action : [["bonus action", ""]] } MagicItemsList["walloping ammunition"] = { name : "Walloping Ammunition", nameTest : "Walloping", source : [["X", 139]], type : "weapon (any ammunition)", rarity : "common", description : "This magic ammunition packs a wallop. A creature hit by the ammunition must succeed on a DC 10 Strength saving throw or be knocked prone.", descriptionFull : "This ammunition packs a wallop. A creature hit by the ammunition must succeed on a DC 10 Strength saving throw or be knocked prone.", allowDuplicates : true, chooseGear : { type : "ammo", prefixOrSuffix : "suffix", descriptionChange : ["replace", "ammunition"], excludeCheck : function (inObjKey, inObj) { return /vials|flasks/i.test(inObj.icon); } } } MagicItemsList["wand of conducting"] = { name : "Wand of Conducting", source : [["X", 140]], type : "wand", rarity : "common", description : "This wand has 3 charges, regaining all at dawn. As an action, I can wave it around and expend 1 charge to create orchestral music that can be heard out to a range of 60 ft and ends when I stop waving the wand. If I use its last charge, roll a d20. On a 1, a sad tuba sound plays as the wand crumbles to dust.", descriptionFull : "This wand has 3 charges. While holding it, you can use an action to expend 1 of its charges and create orchestral music by waving it around. The music can be heard out to a range of 60 feet and ends when you stop waving the wand.\n The wand regains all expended charges daily at dawn. If you expend the wand's last charge, roll a d20. On a 1, a sad tuba sound plays as the wand crumbles to dust and is destroyed.", weight : 1, action : [["action", ""]], usages : 3, recovery : "dawn" } MagicItemsList["wand of pyrotechnics"] = { name : "Wand of Pyrotechnics", source : [["X", 140]], type : "wand", rarity : "common", description : "This wand has 7 charges, regaining 1d6+1 at dawn, 5% chance it is destroyed when its last charge is used. As an action, I can expend 1 charge to create a harmless burst of sound light at a point I can see up to 60 ft away, with the noise travelling 300 ft. The light is as bright as a torch flame but lasts only a second.", descriptionFull : "This wand has 7 charges. While holding it, you can use an action to expend 1 of its charges and create a harmless burst of multicolored light at a point you can see up to 60 feet away. The burst of light is accompanied by a crackling noise that can be heard up to 300 feet away. The light is as bright as a torch flame but lasts only a second.\n The wand regains 1d6+1 expended charges daily at dawn. If you expend the wand's last charge, roll a d20. On a 1, the wand erupts in a harmless pyrotechnic display and is destroyed.", weight : 1, action : [["action", ""]], usages : 7, recovery : "dawn", additional : "regains 1d6+1" } MagicItemsList["wand of scowls"] = { name : "Wand of Scowls", source : [["X", 140], ["WBtW", 214]], type : "wand", rarity : "common", description : "This wand has 3 charges, regain all at dawn. As an action, I can expend 1 of its charges and target a humanoid I can see within 30 ft. The target must succeed on a DC 10 Charisma save or be forced to scowl for 1 minute. If I expend the wand's last charge, roll a d20. On a 1, the wand transforms into a wand of smiles.", descriptionFull : "This wand has 3 charges. While holding it, you can use an action to expend 1 of its charges and target a humanoid you can see within 30 feet of you. The target must succeed on a DC 10 Charisma saving throw or be forced to scowl for 1 minute.\n The wand regains all expended charges daily at dawn. If you expend the wand's last charge, roll a d20. On a 1, the wand transforms into a wand of smiles.", weight : 1, action : [["action", ""]], usages : 3, recovery : "dawn" } MagicItemsList["wand of smiles"] = { name : "Wand of Smiles", source : [["X", 140], ["WBtW", 214]], type : "wand", rarity : "common", description : "This wand has 3 charges, regain all at dawn. As an action, I can expend 1 of its charges and target a humanoid I can see within 30 ft. The target must succeed on a DC 10 Charisma save or be forced to smile for 1 minute. If I expend the wand's last charge, roll a d20. On a 1, the wand transforms into a wand of scowls.", descriptionFull : "This wand has 3 charges. While holding it, you can use an action to expend 1 of its charges and target a humanoid you can see within 30 feet of you. The target must succeed on a DC 10 Charisma saving throw or be forced to smile for 1 minute.\n The wand regains all expended charges daily at dawn. If you expend the wand's last charge, roll a d20. On a 1, the wand transforms into a wand of scowls.", weight : 1, action : [["action", ""]], usages : 3, recovery : "dawn" } ================================================ FILE: WotC material/pub_20180529_MToF.js ================================================ var iFileName = "pub_20180529_MToF.js"; RequiredSheetVersion("13.1.14"); // This file adds all the player-material from Mordenkainen's Tome of Foes to MPMB's Character Record Sheet // Define the source SourceList.MToF={ name : "Mordenkainen's Tome of Foes", abbreviation : "MToF", group : "Primary Sources", url : "https://dnd.wizards.com/products/mordenkainens-tome-foes", date : "2018/05/29" }; // Tiefling subraces RaceList["baalzebul tiefling"] = { regExpSearch : /^(?=.*baalzebul)(?=.*tiefling|planetouched).*$/i, name : "Baalzebul tiefling", sortname : "Tiefling, Baalzebul", source : [["MToF", 21], ["UA:FO", 1]], plural : "Baalzebul tieflings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Infernal"], vision : [["Darkvision", 60]], dmgres : ["Fire"], age : " reach adulthood in their late teens and live around 100 years", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 0, 0, 1, 0, 2], trait : "Baalzebul Tiefling (+1 Intelligence, +2 Charisma)\n\nLegacy of Maladomini:\n I know the Thaumaturgy cantrip.\n At 3rd level, I can cast Ray of Sickness once per long rest as a 2nd-level spell.\n At 5th level, I can also cast Crown of Madness once per long rest.\n Charisma is my spellcasting ability for these spells.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Legacy of Maladomini (1)", spells : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : 'atwill' }], features : { "ray of sickness" : { name : "Legacy of Maladomini (level 3)", minlevel : 3, spellcastingBonus : [{ name : "Legacy of Maladomini (3)", spells : ["ray of sickness"], selection : ["ray of sickness"], firstCol : 'oncelr' }], spellChanges : { "ray of sickness" : { description : "Spell attack for 3d8 Poison dmg; save or also poisoned until end of my next turn", changes : "Using Legacy of Maladomini, I cast Ray of Sickness as if I'm using a 2nd-level spell slot." } } }, "crown of madness" : { name : "Legacy of Maladomini (level 5)", minlevel : 5, spellcastingBonus : [{ name : "Legacy of Maladomini (5)", spells : ["crown of madness"], selection : ["crown of madness"], firstCol : 'oncelr' }] } } }; RaceList["dispater tiefling"] = { regExpSearch : /^(?=.*dispater)(?=.*tiefling|planetouched).*$/i, name : "Dispater tiefling", sortname : "Tiefling, Dispater", source : [["MToF", 21]], plural : "Dispater tieflings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Infernal"], vision : [["Darkvision", 60]], dmgres : ["Fire"], age : " reach adulthood in their late teens and live around 100 years", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 1, 0, 0, 0, 2], trait : "Dispater Tiefling (+1 Dexterity, +2 Charisma)\n\nLegacy of Dis:\n I know the Thaumaturgy cantrip.\n At 3rd level, I can cast Disguise Self once per long rest.\n At 5th level, I can also cast Detect Thoughts once per long rest.\n Charisma is my spellcasting ability for these spells.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Legacy of Dis (level 1)", spells : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : 'atwill' }], features : { "disguise self" : { name : "Legacy of Dis (level 3)", minlevel : 3, spellcastingBonus : [{ name : "Legacy of Dis (level 3)", spells : ["disguise self"], selection : ["disguise self"], firstCol : 'oncelr' }] }, "detect thoughts" : { name : "Legacy of Dis (level 5)", minlevel : 5, spellcastingBonus : [{ name : "Legacy of Dis (level 5)", spells : ["detect thoughts"], selection : ["detect thoughts"], firstCol : 'oncelr' }] } } }; RaceList["fierna tiefling"] = { regExpSearch : /^(?=.*fierna)(?=.*tiefling|planetouched).*$/i, name : "Fierna tiefling", sortname : "Tiefling, Fierna", source : [["MToF", 21], ["UA:FO", 1]], plural : "Fierna tieflings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Infernal"], vision : [["Darkvision", 60]], dmgres : ["Fire"], age : " reach adulthood in their late teens and live around 100 years", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 0, 0, 0, 1, 2], trait : "Fierna Tiefling (+1 Wisdom, +2 Charisma)\n\nLegacy of Phlegethos:\n I know the Friends cantrip.\n At 3rd level, I can cast Charm Person once per long rest as a 2nd-level spell.\n At 5th level, I can also cast Suggestion once per long rest.\n Charisma is my spellcasting ability for these spells.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Legacy of Phlegethos (1)", spells : ["friends"], selection : ["friends"], firstCol : 'atwill' }], features : { "charm person" : { name : "Legacy of Phlegethos (level 3)", minlevel : 3, spellcastingBonus : [{ name : "Legacy of Phlegethos (3)", spells : ["charm person"], selection : ["charm person"], firstCol : 'oncelr' }], spellChanges : { "charm person" : { description : "2 humanoids, max 30 ft apart, save or charmed; adv. on save if me/ally is fighting it", changes : "Using Legacy of Phlegethos, I cast Charm Person as if I'm using a 2nd-level spell slot." } } }, "suggestion" : { name : "Legacy of Phlegethos (level 5)", minlevel : 5, spellcastingBonus : [{ name : "Legacy of Phlegethos (5)", spells : ["suggestion"], selection : ["suggestion"], firstCol : 'oncelr' }] } } }; RaceList["glasya tiefling"] = { regExpSearch : /^(?=.*glasya)(?=.*tiefling|planetouched).*$/i, name : "Glasya tiefling", sortname : "Tiefling, Glasya", source : [["MToF", 22], ["UA:FO", 2]], plural : "Glasya tieflings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Infernal"], vision : [["Darkvision", 60]], dmgres : ["Fire"], age : " reach adulthood in their late teens and live around 100 years", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 1, 0, 0, 0, 2], trait : "Glasya Tiefling (+1 Dexterity, +2 Charisma)\n\nLegacy of Malbolge:\n I know the Minor Illusion cantrip.\n At 3rd level, I can cast Disguise Self once per long rest.\n At 5th level, I can also cast Invisibility once per long rest.\n Charisma is my spellcasting ability for these spells.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Legacy of Malbolge (1)", spells : ["minor illusion"], selection : ["minor illusion"], firstCol : 'atwill' }], features : { "disguise self" : { name : "Legacy of Malbolge (level 3)", minlevel : 3, spellcastingBonus : [{ name : "Legacy of Malbolge (3)", spells : ["disguise self"], selection : ["disguise self"], firstCol : 'oncelr' }] }, "invisibility" : { name : "Legacy of Malbolge (level 5)", minlevel : 5, spellcastingBonus : [{ name : "Legacy of Malbolge (5)", spells : ["invisibility"], selection : ["invisibility"], firstCol : 'oncelr' }] } } }; RaceList["levistus tiefling"] = { regExpSearch : /^(?=.*levistus)(?=.*tiefling|planetouched).*$/i, name : "Levistus tiefling", sortname : "Tiefling, Levistus", source : [["MToF", 22], ["UA:FO", 2]], plural : "Levistus tieflings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Infernal"], vision : [["Darkvision", 60]], dmgres : ["Fire"], age : " reach adulthood in their late teens and live around 100 years", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 0, 1, 0, 0, 2], trait : "Levistus Tiefling (+1 Constitution, +2 Charisma)\n\nLegacy of Stygia:\n I know the Ray of Frost cantrip.\n At 3rd level, I can cast Armor of Agathys once per long rest as a 2nd-level spell.\n At 5th level, I can also cast Darkness once per long rest.\n Charisma is my spellcasting ability for these spells.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Legacy of Stygia (1)", spells : ["ray of frost"], selection : ["ray of frost"], firstCol : 'atwill' }], features : { "armor of agathys" : { name : "Legacy of Stygia (level 3)", minlevel : 3, spellcastingBonus : [{ name : "Legacy of Stygia (3)", spells : ["armor of agathys"], selection : ["armor of agathys"], firstCol : 'oncelr' }], spellChanges : { "armor of agathys" : { description : "10 temp HP; as long as temp HP last any crea that hits in melee takes 10 Cold dmg", changes : "Using Legacy of Stygia, I cast Armor of Agathys as if I'm using a 2nd-level spell slot." } } }, "darkness" : { name : "Legacy of Stygia (level 5)", minlevel : 5, spellcastingBonus : [{ name : "Legacy of Stygia (5)", spells : ["darkness"], selection : ["darkness"], firstCol : 'oncelr' }] } } }; RaceList["mammon tiefling"] = { regExpSearch : /^(?=.*mammon)(?=.*tiefling|planetouched).*$/i, name : "Mammon tiefling", sortname : "Tiefling, Mammon", source : [["MToF", 22], ["UA:FO", 2]], plural : "Mammon tieflings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Infernal"], vision : [["Darkvision", 60]], dmgres : ["Fire"], age : " reach adulthood in their late teens and live around 100 years", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 0, 0, 1, 0, 2], trait : "Mammon Tiefling (+1 Intelligence, +2 Charisma)\nLegacy of Minauros:\n I know the Mage Hand cantrip.\n At 3rd level, I can cast Tenser's Floating Disk once per short rest.\n At 5th level, I can also cast Arcane Lock without a material component once per long rest.\n Charisma is my spellcasting ability for these spells.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Legacy of Minauros (1)", spells : ["mage hand"], selection : ["mage hand"], firstCol : 'atwill' }], features : { "tenser's floating disk" : { name : "Legacy of Minauros (level 3)", minlevel : 3, spellcastingBonus : [{ name : "Legacy of Minauros (3)", spells : ["tenser's floating disk"], selection : ["tenser's floating disk"], firstCol : 'oncesr' }] }, "arcane lock" : { name : "Legacy of Minauros (level 5)", minlevel : 5, spellcastingBonus : [{ name : "Legacy of Minauros (5)", spells : ["arcane lock"], selection : ["arcane lock"], firstCol : 'oncelr' }], spellChanges : { "arcane lock" : { components : "V,S", compMaterial : "", changes : "I can cast this spell once per long rest without requiring material components." } } } } }; RaceList["mephistopheles tiefling"] = { regExpSearch : /^(?=.*mephistopheles)(?=.*tiefling|planetouched).*$/i, name : "Mephistopheles tiefling", sortname : "Tiefling, Mephistopheles", source : [["MToF", 23]], plural : "Mephistopheles tieflings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Infernal"], vision : [["Darkvision", 60]], dmgres : ["Fire"], age : " reach adulthood in their late teens and live around 100 years", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 0, 0, 1, 0, 2], trait : "Mephistopheles Tiefling (+1 Intelligence, +2 Charisma)\n\nLegacy of Cania:\n I know the Mage Hand cantrip.\n At 3rd level, I can cast Burning Hands once per long rest as a 2nd-level spell.\n At 5th level, I can also cast Flame Blade once per long rest.\n Charisma is my spellcasting ability for these spells.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Legacy of Cania (level 1)", spells : ["mage hand"], selection : ["mage hand"], firstCol : 'atwill' }], features : { "burning hands" : { name : "Legacy of Cania (level 3)", minlevel : 3, spellcastingBonus : [{ name : "Legacy of Cania (level 3)", spells : ["burning hands"], selection : ["burning hands"], firstCol : 'oncelr' }], spellChanges : { "burning hands" : { description : "All in area 4d6 Fire dmg; save halves; unattended flammable objects ignite", changes : "Using Legacy of Cania, I cast Burning Hands as if I'm using a 2nd-level spell slot." } } }, "flame blade" : { name : "Legacy of Cania (level 5)", minlevel : 5, spellcastingBonus : [{ name : "Legacy of Cania (level 5)", spells : ["flame blade"], selection : ["flame blade"], firstCol : 'oncelr' }] } } }; RaceList["zariel tiefling"] = { regExpSearch : /^(?=.*zariel)(?=.*tiefling|planetouched).*$/i, name : "Zariel tiefling", sortname : "Tiefling, Zariel", source : [["MToF", 23], ["UA:FO", 2]], plural : "Zariel tieflings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Infernal"], vision : [["Darkvision", 60]], dmgres : ["Fire"], age : " reach adulthood in their late teens and live around 100 years", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [1, 0, 0, 0, 0, 2], trait : "Zariel Tiefling (+1 Strength, +2 Charisma)\n\nLegacy of Avernus:\n I know the Thaumaturgy cantrip.\n At 3rd level, I can cast Searing Smite once per long rest as a 2nd-level spell.\n At 5th level, I can also cast Branding Smite once per long rest.\n Charisma is my spellcasting ability for these spells.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Legacy of Avernus (1)", spells : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : 'atwill' }], features : { "searing smite" : { name : "Legacy of Avernus (level 3)", minlevel : 3, spellcastingBonus : [{ name : "Legacy of Avernus (3)", spells : ["searing smite"], selection : ["searing smite"], firstCol : 'oncelr' }], spellChanges : { "searing smite" : { description : "Next melee weapon hit +2d6 Fire dmg and target ignites; save to end spell or 1d6 Fire dmg", changes : "Using Legacy of Avernus, I cast Searing Smite as if I'm using a 2nd-level spell slot." } } }, "branding smite" : { name : "Legacy of Avernus (level 5)", minlevel : 5, spellcastingBonus : [{ name : "Legacy of Avernus (5)", spells : ["branding smite"], selection : ["branding smite"], firstCol : 'oncelr' }] } } }; // Elf subraces RaceList["eladrin-mtof"] = { regExpSearch : /^(?!.*half)((?=.*eladrin)|((?=.*\b(elfs?|elves|elvish|elven)\b)(?=.*\b(feys?|feywild)\b))).*$/i, name : "Eladrin", sortname : "Elf, Fey (Eladrin)", source : [["MToF", 61]], plural : "Eladrin", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Elvish"], vision : [["Darkvision", 60]], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["charmed"] }, skills : ["Perception"], age : " typically claim adulthood around age 100 and can live to be 750 years old", height : " range from under 5 to over 6 feet tall (4'6\" + 2d12\")", weight : " weigh around 115 lb (90 + 2d12 \xD7 1d4 lb)", heightMetric : " range from under 1,5 to over 1,8 metres tall (140 + 5d12 cm)", weightMetric : " weigh around 55 kg (40 + 5d12 \xD7 2d4 / 10 kg)", scores : [0, 2, 0, 0, 0, 1], abilitySave : 6, trait : "Eladrin (+2 Dexterity, +1 Charisma)" + desc([ "Trance: Elves don't need to sleep, but meditate semiconsciously, for 4 hours a day. This gives the same benefit as a human gets from 8 hours of sleep (long rest takes only 4 hours).", "Fey Step: Once per short rest, as a bonus action, I can magically teleport up to 30 ft to an unoccupied space I can see. Once I reach 3rd level, this gains an additional effect, based on the current season I'm aligned with. See the third page notes section for the effects.", "Shifting Seasons: After I finish a long rest, I can align myself with a season of my choice." ]), features : { "fey step" : { name : "Fey Step", minlevel : 1, usages : 1, recovery : "short rest", action : [["bonus action", ""]] } }, toNotesPage : [{ name : "Eladrin Season Features", source : [["MToF", 62]], popupName : "Eladrin Shifting Season Features", additional : "save DC 8 + Cha mod + Prof Bonus", page3notes : true, note : "\n \u2022 Autumn (Eladrin Season, MToF 62)" + desc([ " After using Fey Step, up to 2 creatures I can see within 10 ft of me must make a Wis save", " If failed, a target is charmed by me for 1 minute, or until I or my allies damage it" ]) + "\n \u2022 Winter (Eladrin Season, MToF 62)" + desc([ " When I use Fey Step, one target in 5 ft of where I teleported from must make a Wis save", " If failed, it is frightened of me until the end of my next turn" ]) + "\n \u2022 Spring (Eladrin Season, MToF 62)" + desc([ " When I use Fey Step, I can instead teleport one willing creature I touch within 5 ft of me", " It teleports to an unoccupied space of my choice that I can see within 30 ft of me" ]) + "\n \u2022 Summer (Eladrin Season, MToF 62)" + desc([ " After using Fey Step, each creature of my choice within 5 ft of me takes fire damage", " This fire damage is equal to my Charisma modifier (minimum 1)" ]) }] }; RaceList["sea elf"] = { regExpSearch : /^(?!.*half)((?=.*\b(elfs?|elves|elvish|elven)\b)(?=.*\b(seas?|oceans?|water)\b)).*$/i, name : "Sea elf", sortname : "Elf, Sea", source : [["MToF", 62], ["W", 163], ["UA:ES", 1]], plural : "Sea elves", size : 3, speed : { walk : { spd : 30, enc : 20 }, swim : { spd : 30, enc : 20 } }, weaponProfs : [false, false, ["spear", "trident", "light crossbow", "net"]], languageProfs : ["Common", "Elvish", "Aquan", "Friend of the Sea"], vision : [["Darkvision", 60]], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["charmed"] }, skills : ["Perception"], age : " typically claim adulthood around age 100 and can live to be 750 years old", height : " range from under 5 to almost 6 feet tall (4'6\" + 2d8\")", weight : " weigh around 115 lb (90 + 2d8 \xD7 1d4 lb)", heightMetric : " range from under 1,5 to almost 1,8 metres tall (140 + 5d8 cm)", weightMetric : " weigh around 52 kg (40 + 5d8 \xD7 2d4 / 10 kg)", scores : [0, 2, 1, 0, 0, 0], trait : "Sea Elf (+2 Dexterity, +1 Constitution)" + desc([ "Trance: Elves don't need to sleep, but meditate semiconsciously, for 4 hours a day. While meditating, I can dream after a fashion. After resting in this way, I gain the same benefit that a human does from 8 hours of sleep, thus needing only 4 hours for a long rest.", "Child of the Sea. I have 30 ft swimming speed and can breathe air and water.", "Friend of the Sea: Through sounds and gestures, I can communicate simple ideas with any beast that has an inborn swimming speed." ]) }; RaceList["shadar-kai elf"] = { regExpSearch : /^(?!.*half)((?=.*shadar-kai)|((?=.*\b(elfs?|elves|elvish|elven)\b)(?=.*\b(shadows?|shadowfell)\b))).*$/i, name : "Shadar-kai", sortname : "Elf, Shadow (Shadar-kai)", source : [["MToF", 62]], plural : "Shadar-kai", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Elvish"], vision : [["Darkvision", 60]], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["charmed"] }, dmgres : ["Necrotic"], skills : ["Perception"], age : " typically claim adulthood around age 100 and can live to be 750 years old", height : " range from under 5 to over 6 feet tall (4'8\" + 2d8\")", weight : " weigh around 115 lb (90 + 2d8 \xD7 1d4 lb)", heightMetric : " range from under 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 52 kg (40 + 5d8 \xD7 2d4 / 10 kg)", scores : [0, 2, 1, 0, 0, 0], trait : "Shadar-kai (+2 Dexterity, +1 Constitution)" + desc([ "Trance: Elves don't need to sleep, but meditate semiconsciously, for 4 hours a day. This gives the same benefit as a human gets from 8 hours of sleep (long rest takes only 4 hours).", "Blessing of the Raven Queen: Once per long rest, as a bonus action, I can magically teleport up to 30 ft to an unoccupied space I can see.", "Once I reach 3rd level, after I use the Blessing of the Raven Queen, I appear translucent and have resistance to all damage until the start of my next turn." ]), features : { "blessing of the raven queen" : { name : "Blessing of the Raven Queen", minlevel : 1, usages : 1, recovery : "long rest", action : [["bonus action", ""]] } } }; // Gith and its two subraces RaceList["githyanki-mtof"] = { regExpSearch : /githyanki/i, name : "Githyanki", source : [["MToF", 96]], plural : "Githyanki", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Gith", 1], armorProfs : [true, true, false, false], weaponProfs : [false, false, ["shortsword", "longsword", "greatsword"]], skillstxt : "Choose any one skill or tool", age : " reach adulthood in their late teens and live for about a century", height : " are more leaner and taller than humans, most are a slender 6 feet tall (5'0\" + 2d12\")", weight : " weigh around 135 lb (100 + 2d12 \xD7 2d4 lb)", heightMetric : " are more leaner and taller than humans, most are a slender 1,8 metres tall (150 + 5d12 cm)", weightMetric : " weigh around 61 kg (45 + 5d10 \xD7 4d4 / 10 kg)", scores : [2, 0, 0, 1, 0, 0], trait : "Githyanki (+2 Strength, +1 Intelligence)\n" + (typePF ? "\n" : "") + "Githyanki Psionics:" + desc([ "I know the Mage Hand cantrip, but the hand is invisible.", "At 3rd level, I can cast Jump once per long rest.", "At 5th level, I can also cast Misty Step once per long rest.", "Intelligence is my spellcasting ability for these spells.", "I don't require components to cast these spells." ]), spellcastingAbility : 4, spellcastingBonus : [{ name : "Githyanki Psionics (1)", spells : ["mage hand"], selection : ["mage hand"], firstCol : 'atwill' }], spellChanges : { "mage hand" : { components : "", description : "Create invisible spectral hand for simple tasks or carry up to 10 lb; 1 a to control; can't have multiple", changes : "Using Githyanki Psionics, I can cast Mage Hand without requiring components and the spectral hand is invisible." } }, features : { "jump" : { name : "Githyanki Psionics (level 3)", minlevel : 3, spellcastingBonus : [{ name : "Githyanki Psionics (3)", spells : ["jump"], selection : ["jump"], firstCol : 'oncelr' }], spellChanges : { "jump" : { components : "", compMaterial : "", changes : "Using Githyanki Psionics, I can cast Jump once per long rest without requiring components." } } }, "misty step" : { name : "Githyanki Psionics (level 5)", minlevel : 5, spellcastingBonus : [{ name : "Githyanki Psionics (5)", spells : ["misty step"], selection : ["misty step"], firstCol : 'oncelr' }], spellChanges : { "misty step" : { components : SpellsList["misty step"].components + "*", changes : "Using Githyanki Psionics, I can cast Misty Step once per long rest without requiring components." } } } } }; AddRacialVariant("githyanki-mtof", "tool proficiency", { regExpSearch : /tool proficiency/i, skillstxt : "", toolProfs : [["Any tool", 1]] }); AddRacialVariant("githyanki-mtof", "skill proficiency", { regExpSearch : /skill proficiency/i, skillstxt : "Choose any one skill" }); RaceList["githzerai-mtof"] = { regExpSearch : /githzerai/i, name : "Githzerai", source : [["MToF", 96]], plural : "Githzerai", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Gith"], age : " reach adulthood in their late teens and live for about a century", height : " are more leaner and taller than humans, most are a slender 6 feet tall (4'11\" + 2d12\")", weight : " weigh around 115 lb (90 + 2d12 \xD7 1d4 lb)", heightMetric : " are more leaner and taller than humans, most are a slender 1,8 metres tall (150 + 5d12 cm)", weightMetric : " weigh around 55 kg (40 + 5d10 \xD7 2d4 / 10 kg)", scores : [0, 0, 0, 1, 2, 0], trait : "Githzerai (+1 Intelligence, +2 Wisdom)\n" + (typePF ? "\n" : "") + "Githzerai Psionics:" + desc([ "I know the Mage Hand cantrip, but the hand is invisible.", "At 3rd level, I can cast Shield once per long rest.", "At 5th level, I can also cast Detect Thoughts once per long rest.", "Wisdom is my spellcasting ability for these spells.", "I don't require components to cast these spells." ]), savetxt : { adv_vs : ["charmed", "frightened"] }, spellcastingAbility : 5, spellcastingBonus : [{ name : "Githzerai Psionics (1)", spells : ["mage hand"], selection : ["mage hand"], firstCol : 'atwill' }], spellChanges : { "mage hand" : { components : "", description : "Create invisible spectral hand for simple tasks or carry up to 10 lb; 1 a to control; can't have multiple", changes : "Using Githzerai Psionics, I can cast Mage Hand without requiring components and the spectral hand is invisible." } }, features : { "shield" : { name : "Githzerai Psionics (level 3)", minlevel : 3, spellcastingBonus : [{ name : "Githzerai Psionics (3)", spells : ["shield"], selection : ["shield"], firstCol : 'oncelr' }], spellChanges : { "shield" : { components : "", changes : "Using Githzerai Psionics, I can cast Shield once per long rest without requiring components." } } }, "detect thoughts" : { name : "Githzerai Psionics (level 5)", minlevel : 5, spellcastingBonus : [{ name : "Githzerai Psionics (5)", spells : ["detect thoughts"], selection : ["detect thoughts"], firstCol : 'oncelr' }], spellChanges : { "detect thoughts" : { components : "", compMaterial : "", changes : "Using Githzerai Psionics, I can cast Detect Thoughts once per long rest without requiring components." } } } } }; // [dupl_start] Reprint from Sword Coast Adventure Guide if (!RaceList["gray dwarf"]) { RaceList["gray dwarf"] = { regExpSearch : /^((?=.*\bduergars?\b)|((?=.*\b(dwarfs?|dwarves|dwarfish|dwarvish|dwarven)\b)(?=.*\b(grey|gray|underdark)\b))).*$/i, name : "Duergar", sortname : "Dwarf, Gray (Duergar)", source : [["S", 104], ["MToF", 81]], plural : "Duergar", size : 3, speed : { walk : { spd : 25, enc : 25 } }, languageProfs : ["Common", "Dwarvish", "Undercommon"], vision : [["Darkvision", 120], ["Sunlight Sensitivity", 0]], savetxt : { adv_vs : ["charmed", "illusions", "paralyzed", "poison"] }, dmgres : ["Poison"], weaponProfs : [false, false, ["battleaxe", "handaxe", "warhammer", "light hammer"]], toolProfs : [["Smith, brewer, or mason tools", 1]], age : " are considered young until they are 50 and live about 350 years", height : " stand between 4 and 5 feet tall (3'8\" + 2d4\")", weight : " weigh around 150 lb (115 + 2d4 \xD7 2d6 lb)", heightMetric : " stand between 1,2 and 1,5 metres tall (110 + 5d4 cm)", weightMetric : " weigh around 70 kg (55 + 5d4 \xD7 4d6 / 10 kg)", scores : [1, 0, 2, 0, 0, 0], trait : "Duergar (+2 Constitution, +1 Strength)\nStonecunning: Whenever I make an Int (History) check related to the origin of stonework, I am considered proficient in the skill and add double my proficiency bonus to the check.\nSunlight Sensitivity: Disadvantage on attack rolls and Wisdom (Perception) checks that rely on sight when I or what I am trying to attack/perceive is in direct sunlight.\nDuergar Magic: 3rd: Enlarge/Reduce to enlarge; 5th: Invisibility. If not in direct sunlight," + (!typePF ? "\n" : " ") + "I can cast both spells on myself once per long rest without material components, using Int.", spellcastingAbility : 4, features : { "enlarge" : { name : "Duergar Magic (level 3)", minlevel : 3, spellcastingBonus : [{ name : "Duergar Magic (level 3)", spells : ["enlarge/reduce"], selection : ["enlarge/reduce"], firstCol : 'oncelr' }], spellChanges : { "enlarge/reduce" : { name : "Enlarge", range : "Self", components : "V,S", compMaterial : "", description : "I'm enlarged, adv. on Str checks/aves and +1d4 on weapon dmg; Can't cast this in direct sunlight", changes : "Using Duergar Magic, I cast Enlarge/Reduce while I'm not in direct sunlight, but only to enlarge myself." } } }, "invisibility" : { name : "Duergar Magic (level 5)", minlevel : 5, spellcastingBonus : [{ name : "Duergar Magic (level 5)", spells : ["invisibility"], selection : ["invisibility"], firstCol : 'oncelr' }], spellChanges : { "invisibility" : { range : "Self", components : "V,S", compMaterial : "", description : "I and worn/carried invisible until I attack or cast; Can't cast this spell in direct sunlight", changes : "Me and my worn/carried invisible until I attack or cast; Can't cast this spell in direct sunlight" } } } } }; } // Reprint from Elemental Evil Player's Companion and Sword Coast Adventure Guide if (!RaceList["deep gnome"]) { RaceList["deep gnome"] = { regExpSearch : /^((?=.*svirfneblin)|((?=.*\bgnomes?\b)(?=.*\b(underdarks?|deep|depths?)\b))).*$/i, name : "Svirfneblin", sortname : "Gnome, Deep (Svirfneblin)", source : [["E", 7], ["S", 115], ["MToF", 113]], plural : "Svirfneblin", size : 4, speed : { walk : { spd : 25, enc : 15 } }, languageProfs : ["Common", "Gnomish", "Undercommon"], vision : [["Darkvision", 120]], savetxt : { text : ["Adv. on Int/Wis/Cha saves vs. magic"] }, age : " are considered full-grown adults when they reach 25 and live 200 to 250 years", height : " stand between 3 and 3 1/2 feet tall (2'9\" + 2d4\")", weight : " weigh around 90 lb (80 + 2d4 \xD7 1d4 lb)", heightMetric : " stand between 90 and 105 cm tall (85 + 5d4 cm)", weightMetric : " weigh around 50 kg (35 + 5d4 \xD7 4d4 / 10 kg)", scores : [0, 1, 0, 2, 0, 0], trait : "Svirfneblin (+1 Dexterity, +2 Intelligence)\n\nStone Camouflage:\n I have advantage on Dexterity (stealth) checks to hide in rocky terrain." }; } // Feat reprint from Elemental Evil Player's Companion if (!FeatsList["svirfneblin magic"]) { FeatsList["svirfneblin magic"] = { name : "Svirfneblin Magic", source : [["E", 7], ["S", 115], ["MToF", 114]], prerequisite : "Being a Svirfneblin (Deep Gnome)", prereqeval : function(v) { return CurrentRace.known === 'deep gnome'; }, descriptionFull : "You have inherited the innate spellcasting ability of your ancestors. This ability allows you to cast Nondetection on yourself at will, without needing a material component. You can also cast each of the following spells once with this ability: Blindness/Deafness, Blur, and Disguise Self. You regain the ability to cast these spells when you finish a long rest.\n Intelligence is your spellcasting ability for these spells, and you cast them at their lowest possible levels.", description : "I can cast Nondetection on myself at will, without a material component. I can also cast the spells Blindness/Deafness, Blur, and Disguise Self once each. I regain the ability to cast these spells when I finish a long rest. Intelligence is my spellcasting ability for these spells.", spellcastingBonus : [{ name : "at will (self only)", spellcastingAbility : 4, spells : ["nondetection"], selection : ["nondetection"], firstCol : 'atwill' }, { name : "1\xD7 long rest (self only)", spells : ["blindness/deafness", "blur", "disguise self"], selection : ["blindness/deafness", "blur", "disguise self"], firstCol : 'oncelr', times : 3 }], spellChanges : { "nondetection" : { range : "Self", components : "V,S", compMaterial : "", description : "I am hidden from all divination magic", changes : "Using Svirfneblin Magic, I can cast Nondetection without a material component, but only on myself." } } }; } // dupl_end // Magic Items MagicItemsList["greater silver sword"] = { name : "Greater Silver Sword", source : [["MToF", 89]], type : "weapon (greatsword)", rarity : "legendary", description : "This magic greatsword gives +1 to hit and damage. While holding it, I have adv. on Int, Wis, and Cha saves, immunity to being charmed, and resistance to psychic damage. If I score a critical hit with it on a creature's astral body, I can cut the cord tethering it to its material body, instead of dealing damage.", descriptionFull : "This magic weapon grants a +3 bonus to attack and damage rolls made with it. While you hold the sword, you have advantage on Intelligence, Wisdom, and Charisma saving throws, you are immune to being charmed, and you have resistance to psychic damage. In addition, if you score a critical hit with it against a creature's astral body, you can cut the silvery cord that tethers the target to its material body, instead of dealing damage.", attunement : true, weight : 6, prerequisite : "Requires attunement by a creature that has psionic ability", prereqeval : function (v) { if (!v.isSpellcaster) return false; if ((/psion|mystic/i).test(What("Racial Traits"))) return true; for (var aCast in CurrentSpells) { var spCast = CurrentSpells[aCast]; if ((/psion|mystic/i).test(spCast.name) || (spCast.list && spCast.list.psionic)) return true; if (!spCast.bonus) continue; for (var aBon in spCast.bonus) { if ((/psion|mystic/i).test(aBon) || (/psion|mystic/i).test(spCast.bonus[aBon].name)) return true; } } }, weaponOptions : [{ baseWeapon : "greatsword", regExpSearch : /^(?=.*greater)(?=.*silver)(?=.*sword).*$/i, name : "Greater Silver Sword", source : [["MToF", 89]], description : "Heavy, two-handed; On crit vs. astral body, cut cord instead of damage", modifiers : [3, 3], selectNow : true }], savetxt : { text : ["Adv. on Int, Wis, and Cha saves"], immune : ["charmed"] }, advantages : [["Intelligence", true], ["Wisdom", true], ["Charisma", true]], dmgres : ["Psychic"] } MagicItemsList["infernal tack"] = { name : "Infernal Tack", source : [["MToF", 167], ["DiA", 224]], type : "wondrous item", rarity : "legendary", notLegalAL : true, description : "While wearing the spurs of this set, the nightmare equipped with the bridle, bit, reins, saddle, and stirrups is under my command. As an action, I can have it appear in 20 ft at the start of my next turn. It acts on as my ally on my initiative, remains for 1 day, until I or it dies, or I dismiss it as an action. If it dies, it reforms in 24 h.", descriptionLong : "This tack consists of a bridle, bit, reins, saddle, stirrups, and spurs. A nightmare equipped with the tack serves whoever wears the spurs until the wearer dies or the tack is removed. As an action, I can clash the spurs together or scrape them through blood, causing the nightmare to appear within 20 ft at the start of my next turn. It acts as my ally on my initiative count, remains for 1 day, until I or it dies, or until I dismiss it as an action. If it dies, it reforms within 24 hours, after which I can summon it again. The tack doesn't create a nightmare from thin air; one must first be subdued so the tack can be placed on it.", descriptionFull : "A narzugon binds a nightmare to its service with infernal tack, which consists of a bridle, bit, reins, saddle, stirrups, and spurs. A nightmare equipped with infernal tack must serve whoever wears the spurs until the wearer dies or the tack is removed.\n You can use an action to call a nightmare equipped with infernal tack by clashing the spurs together or scraping them through blood. The nightmare appears at the start of your next turn, within 20 feet of you. It acts as your ally and takes its turn on your initiative count. It remains for 1 day, until you or it dies, or until you dismiss it as an action. If the nightmare dies, it reforms in the Nine Hells within 24 hours, after which you can summon it again.\n The tack doesn't conjure a nightmare from thin air; one must first be subdued so the tack can be placed on it. No nightmare accepts this forced servitude willingly, but some eventually form strong loyalties to their masters and become true partners in evil.", attunement : true, weight : 26, // riding saddle (25) + bit and bridle (1) prerequisite : "Requires attunement by a creature of evil alignment", prereqeval : function(v) { return (/evil/i).test(What("Alignment")); }, action : [["action", ""]], creaturesAdd : [["Nightmare", true, function (AddRemove, prefix) { if (!AddRemove) return; // Show equipment section MakeCompMenu_CompOptions(prefix, ["companion", "visible", "comp.eqp"], true); // Add equipment when added var equip = ["bit and bridle", "riding"]; for (var i = 0; i < equip.length; i++) { var gear = GearList[equip[i]]; if (!gear) continue; AddToInv(prefix + "comp", "l", gear.name, gear.amount, gear.weight, "", false, false, false, false); } // Add notes var note = "I can use an action to call a nightmare equipped with infernal tack by clashing the spurs together or scraping them through blood. The nightmare appears at the start of my next turn, within 20 ft of me.\nThe nightmare acts as my ally and takes its turn on my initiative count. It remains for 1 day, until I or it dies, or until I dismiss it as an action. If the nightmare dies, it reforms in the Nine Hells within 24 hours, after which I can summon it again."; Value(prefix + "Comp.eqp.Notes", What("Unit System") === "metric" ? ConvertToMetric(note, 0.5) : note); }]] } ================================================ FILE: WotC material/pub_20180723_WGtE_dupl.js ================================================ var iFileName = "pub_20180723_WGtE.js"; RequiredSheetVersion("14.0.5-beta"); // This file adds the content from Wayfinder's Guide to Eberron to MPMB's Character Record Sheet // Be aware that this script is for the version from 9th of October 2018, not the original version, // nor the updated version of November 2019 that uses the identical rules to Eberron: Rising from the Last War. // Define the sources SourceList.WGtE = { name : "Wayfinder's Guide to Eberron (2018)", abbreviation : "WGtE", group : "Playtest Material", url : "https://www.dmsguild.com/product/247882/Wayfinders-Guide-to-Eberron-5e", date : "2018/10/09" // the original is from 2018/07/23, but this script is based on the newer version that includes (most of) the UA:Dragonmark changes, but not on the latest version that is identical to what is in Eberron: Rising from the Last War }; if (!SourceList["UA:RoE"]) { // The changeling RaceList["changeling-ua2"] = { regExpSearch : /changeling/i, name : "Changeling", source : [["WGtE", 61], ["UA:RoE", 2]], plural : "Changelings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, skillstxt : "Choose two from Deception, Intimidation, Insight, and Persuasion", languageProfs : ["Common", 2], toolProfs : [["Any tool", 1]], age : " reach adulthood in their early teens and live around 80 years", height : " stand between 5 and 6 feet tall (5'1\" + 2d4\")", weight : " weigh around 140 lb (115 + 2d4 \xD7 2d4 lb)", heightMetric : " stand between 1,5 to over 1,8 metres tall (155 + 5d4 cm)", weightMetric : " weigh around 65 kg (52 + 5d4 \xD7 4d4 / 10 kg)", scorestxt : "+2 Charisma, and +1 Dexterity or +1 Intelligence", scores : [0, 0, 0, 0, 0, 2], trait : "Changeling (+2 Charisma, and +1 Dexterity or +1 Intelligence)\nChange Appearance: As an action, I can polymorph to or from a humanoid form of my size I have seen, not changing my equipment. I revert back if I die and have adv. on Deception.\nUnsettling Visage: As a reaction once per short rest when I'm attacked by a seen attacker, I can impose disadv. Doing this reveals my shapeshifting nature to all within 30 ft.\nDivergent Persona: I have proficiency with one tool, and an alternate persona. While in the alternate form, my proficiency bonus with that tool is doubled.", action : [["action", "Change Appearance"]], features : { "unsettling visage" : { name : "Unsettling Visage", minlevel : 1, usages : 1, recovery : "short rest", action : [["reaction", ""]] } } }; // The kalashtar RaceList["kalashtar-ua"] = { //this code includes contributions by /u/SoilentBrad regExpSearch : /kalashtar/i, name : "Kalashtar", source : [["WGtE", 63], ["UA:RoE", 4]], plural : "Kalashtar", size : 3, speed : { walk : { spd : 30, enc : 20 } }, skillstxt : "Advantage with either Insight, Intimidation, Performance, or Persuasion", languageProfs : ["Common", "Quori", 1], savetxt : { immune : ["effects that require me to dream"] }, dmgres : ["Psychic"], age : " reach adulthood in their late teens and live less than 100 years", height : " range from 5 and a half to well over 6 feet tall (5'4\" + 2d6\")", weight : " weigh around 145 lb (110 + 2d6 \xD7 1d6 lb)", heightMetric : " range from 1,7 to 1,9 metres tall (160 + 5d6 cm)", weightMetric : " weigh around 65 kg (50 + 5d6 \xD7 2d6 / 10 kg)", scorestxt : "+1 Wisdom, +1 Charisma, and +1 to one other ability score of my choice", scores : [0, 0, 0, 0, 1, 1], trait : "Kalashtar (+1 Wisdom, +1 Charisma, and +1 to one other" + (typePF ? "" : " ability score of my choice") + ")\nDual Mind: As a reaction after I roll a Wis" + (typePF ? " save, I can gain adv." : "dom saving throw, I can gain advantage") + " on it.\nMind Link: I can speak telepathically to any creature I can see within 60 ft, as long as it can speak at least one language. As a bonus action, I can give that creature the ability to speak telepathically back to me until the start of my next turn.\nPsychic Glamour: I have adv. on Insight, Intimidation, Performance, or Persuasion checks.\nSevered from Dreams: I don't dream and thus immune to spells that affect dreams.", action : [['bonus action', 'Mind Link'], ['reaction', 'Dual Mind']] }; // The four subraces of the shifter RaceList["beasthide shifter-ua"] = { regExpSearch : /^(?=.*shifter)(?=.*beast)(?=.*hide).*$/i, name : "Beasthide shifter", sortname : "Shifter, Beasthide", source : [["WGtE", 66], ["UA:RoE", 6]], plural : "Beasthide shifters", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common"], vision : [["Darkvision", 60]], skills : ["Athletics", "Perception"], age : " reach young adulthood at age 10 and rarely live over 70", height : " range from under 5 to almost 6 feet tall (4'6\" + 2d8\")", weight : " weigh around 135 lb (90 + 2d8 \xD7 2d4 lb)", heightMetric : " range from under 1,5 to 1,8 metres tall (4'6\" + 5d8 cm)", weightMetric : " weigh around 65 kg (40 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 1, 2, 0, 0, 0], trait : "Beasthide Shifter: (+1 Dexterity, +2 Constitution)\n\nShifting: As a bonus action once per short rest, I can assume a more bestial appearance.\nThis transformation lasts for 1 minute, until I die, or until I revert back as a bonus action.\nWhen I shift, I gain temporary HP equal to 1d6 + my level + my Constitution modifier (minimum 1 temporary hit point).\nWhile transformed like this, I have a +1 bonus to AC", features : { "shift" : { name : "Shift", minlevel : 1, usages : 1, recovery : "short rest", action : [["bonus action", " (start/end)"]] } } }; RaceList["longtooth shifter-ua"] = { regExpSearch : /^(?=.*shifter)(?=.*long)(?=.*(tooth|teeth)).*$/i, name : "Longtooth shifter", sortname : "Shifter, Longtooth", source : [["WGtE", 66], ["UA:RoE", 6]], plural : "Longtooth shifters", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common"], weaponOptions : [{ baseWeapon : "unarmed strike", regExpSearch : /^(?=.*fangs?)(?=.*long)(?=.*(tooth|teeth)).*$/i, name : "Longtooth Fangs", source : [["WGtE", 66], ["UA:RoE", 6]], damage : [1, 6, "piercing"], description : "Only while shifted; One attack as bonus action", selectNow : true }], vision : [["Darkvision", 60]], skills : ["Intimidation", "Perception"], age : " reach young adulthood at age 10 and rarely live over 70", height : " range from under 5 to almost 6 feet tall (4'6\" + 2d8\")", weight : " weigh around 135 lb (90 + 2d8 \xD7 2d4 lb)", heightMetric : " range from under 1,5 to 1,8 metres tall (4'6\" + 5d8 cm)", weightMetric : " weigh around 65 kg (40 + 5d8 \xD7 4d4 / 10 kg)", scores : [2, 1, 0, 0, 0, 0], trait : "Longtooth Shifter: (+2 Strength, +1 Dexterity)\nShifting: As a bonus action once per short rest, I can assume a more bestial appearance.\nThis transformation lasts for 1 minute, until I die, or until I revert back as a bonus action.\nWhen I shift, I gain temporary HP equal to my level + my Constitution modifier (minimum 1 temporary hit point).\nWhile transformed like this, I use my elongated fangs to make unarmed strikes, dealing 1d6 piercing damage. As a bonus action, I can maken one attack with my fangs.", action : ['bonus action', 'Attack with Longtooth Fangs'], features : { "shift" : { name : "Shift", minlevel : 1, usages : 1, recovery : "short rest", action : [["bonus action", " (start/end)"]] } } }; RaceList["swiftstride shifter-ua"] = { regExpSearch : /^(?=.*shifter)(?=.*swift)(?=.*stride).*$/i, name : "Swiftstride shifter", sortname : "Shifter, Swiftstride", source : [["WGtE", 66], ["UA:RoE", 6]], plural : "Swiftstride shifters", size : 3, speed : { walk : { spd : 35, enc : 25 } }, languageProfs : ["Common"], vision : [["Darkvision", 60]], skills : ["Acrobatics", "Perception"], age : " reach young adulthood at age 10 and rarely live over 70", height : " range from under 5 to almost 6 feet tall (4'6\" + 2d8\")", weight : " weigh around 135 lb (90 + 2d8 \xD7 2d4 lb)", heightMetric : " range from under 1,5 to 1,8 metres tall (4'6\" + 5d8 cm)", weightMetric : " weigh around 65 kg (40 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 2, 0, 0, 0, 1], trait : "Swiftstride Shifter: (+2 Dexterity, +1 Charisma)\nShifting: As a bonus action once per short rest, I can assume a more bestial appearance.\nThis transformation lasts for 1 minute, until I die, or until I revert back as a bonus action.\nWhen I shift, I gain temporary HP equal to my level + my Con" + (typePF ? "stitution modifier (minimum 1 temporary hit point" : " mod (minimum 1 temp HP") + ").\nWhile transformed like this, my walking speed increases with 5 ft.\nAs a reaction when an enemy ends its turn within 5 ft of me while I'm shifted, I can move 10 ft without provoking opportunity attacks.", action : ['reaction', 'Stride (while shifted)'], features : { "shift" : { name : "Shift", minlevel : 1, usages : 1, recovery : "short rest", action : [["bonus action", " (start/end)"]] } } }; RaceList["wildhunt shifter-ua"] = { regExpSearch : /^(?=.*shifter)(?=.*wild)(?=.*hunt).*$/i, name : "Wildhunt shifter", sortname : "Shifter, Wildhunt", source : [["WGtE", 66], ["UA:RoE", 6]], plural : "Wildhunt shifters", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common"], vision : [["Darkvision", 60]], skills : ["Perception", "Survival"], age : " reach young adulthood at age 10 and rarely live over 70", height : " range from under 5 to almost 6 feet tall (4'6\" + 2d8\")", weight : " weigh around 135 lb (90 + 2d8 \xD7 2d4 lb)", heightMetric : " range from under 1,5 to 1,8 metres tall (4'6\" + 5d8 cm)", weightMetric : " weigh around 65 kg (40 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 1, 0, 0, 2, 0], trait : "Wildhunt Shifter: (+1 Dexterity, +2 Wisdom)\nShifting: As a bonus action once per short rest, I can transform and get adv. on Wis checks." + (typePF ? " " : "\n") + "This transformation lasts for 1 minute, until I die, or until I revert back as a bonus action.\nWhen I shift, I gain temporary HP equal to my level + my Con" + (typePF ? "stitution modifier (minimum 1 temporary hit point" : " mod (minimum 1 temp HP") + ").\nMark the Scent: As a bonus action once per short rest, I can mark a creature that I can see within 10 ft. Until the end of my next long rest, my proficiency bonus is doubled for checks to find this target, and I always know its location if it is within 60 ft of me.", features : { "shift" : { name : "Shift", minlevel : 1, usages : 1, recovery : "short rest", action : [["bonus action", " (start/end)"]] }, "mark the scent" : { name : "Mark the Scent", minlevel : 1, usages : 1, recovery : "short rest", action : [["bonus action", ""]] } } }; // The three subraces of the warforged RaceList["envoy warforged-ua"] = { regExpSearch : /^(?=.*warforged)(?=.*envoy).*$/i, name : "Envoy warforged", sortname : "Warforged, Envoy", source : [["WGtE", 69], ["UA:RoE", 9]], plural : "Envoy warforged", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", 1], toolProfs : [["Any tool", 1]], skillstxt : "Choose any one skill, any one tool, and expertise with any one tool I'm proficient with", savetxt : { text : ["Magic can't put me to sleep"], immune : ["disease", "exhaustion from lack of rest"], adv_vs : ["poison"] }, dmgres : ["Poison"], age : " are created as adults and will only start to show signs of physical deterioration after 150 years, but have no further aging effects", height : " stand between 6 and 7 feet tall (5'10\" + 2d6\")", weight : " weigh around 300 lb (270 + 2d6 \xD7 4 lb)", heightMetric : " stand between 1,8 and 2,1 metres tall (178 + 5d6 cm)", weightMetric : " weigh around 135 kg (125 + 5d6 \xD7 8 / 10 kg)", scorestxt : "+1 Constitution and +1 to two other ability scores of my choice", scores : [0, 0, 1, 0, 0, 0], trait : "Envoy Warforged (+1 Constitution and +1 to two other abilit" + (typePF ? "ies" : "y scores of my choice") + ")\nWarforged Resilience: I do not need to sleep, eat, drink, or breathe.\nSentry's Rest: To benefit from a long rest, I need to enter an inactive state for 6 hours, during which I am not rendered unconscious and can see and hear as normal.\nIntegrated Protection: My AC depends on armor proficiency: none (11+Dex), light (11+Dex+Prof B.), medium (13+Dex+Prof B.), heavy (16+Prof B.; Stealth disadv.). I can use a shield.\nIntegrated Tool: I have expertise with one tool and it is integrated into my body.", eval : function() { var lightProf = tDoc.getField('Proficiency Armor Light').isBoxChecked(0); if (tDoc.getField('Proficiency Armor Heavy').isBoxChecked(0)) { CurrentRace.armorAdd.select = 'Heavy Plating'; } else if (tDoc.getField('Proficiency Armor Medium').isBoxChecked(0) && ((What('Dex') < 18 && lightProf) || !lightProf)) { CurrentRace.armorAdd.select = 'Composite Plating'; } else { CurrentRace.armorAdd.select = 'Darkwood Core' + (lightProf ? " (Prof)" : ""); }; }, removeeval : function () { if ((/darkwood core|composite plating|heavy plating/).test(CurrentArmour.known)) { tDoc.resetForm(['AC Armor Description']); }; }, armorAdd : { select : "" }, armorOptions : [{ regExpSearch : /^(?=.*darkwood)(?=.*core).*$/i, name : "Darkwood core", source : [["WGtE", 69], ["UA:RoE", 9]], ac : 11 }, { regExpSearch : /^(?=.*darkwood)(?=.*core)(?=.*prof).*$/i, name : "Darkwood core (Prof)", source : [["WGtE", 69], ["UA:RoE", 9]], ac : "11+Prof" }, { regExpSearch : /^(?=.*composite)(?=.*plating).*$/i, name : "Composite plating", source : [["WGtE", 69], ["UA:RoE", 9]], type : "medium", ac : "13+Prof", dex : 2 }, { regExpSearch : /^(?=.*heavy)(?=.*plating).*$/i, name : "Heavy plating", source : [["WGtE", 69], ["UA:RoE", 9]], type : "heavy", ac : "16+Prof", stealthdis : true }] }; RaceList["juggernaut warforged-ua"] = { regExpSearch : /^(?=.*warforged)(?=.*juggernaut).*$/i, name : "Juggernaut warforged", sortname : "Warforged, Juggernaut", source : [["WGtE", 70], ["UA:RoE", 9]], plural : "Juggernaut warforged", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common"], weaponOptions : [{ baseWeapon : "unarmed strike", regExpSearch : /^(?=.*warforged)(?=.*iron)(?=.*fists?).*$/i, name : "Warforged Iron Fists", source : [["WGtE", 70], ["UA:RoE", 9]], damage : [1, 4, "bludgeoning"], selectNow : true }], savetxt : { text : ["Magic can't put me to sleep"], immune : ["disease", "exhaustion from lack of rest"], adv_vs : ["poison"] }, dmgres : ["Poison"], age : " are created as adults and will only start to show signs of physical deterioration after 150 years, but have no further aging effects", height : " stand between 6 and 7 feet tall (5'10\" + 2d6\")", weight : " weigh around 300 lb (270 + 2d6 \xD7 4 lb)", heightMetric : " stand between 1,8 and 2,1 metres tall (178 + 5d6 cm)", weightMetric : " weigh around 135 kg (125 + 5d6 \xD7 8 / 10 kg)", scores : [2, 0, 1, 0, 0, 0], trait : "Juggernaut Warforged (+2 Strength, +1 Constitution)" + (typePF ? "" : " Iron Fists: unarmed strikes do 1d4.") + "\nWarforged Resilience: I do not need to sleep, eat, drink, or breathe.\nSentry's Rest: To benefit from a long rest, I need to enter an inactive state for 6 hours, during which I am not rendered unconscious and can see and hear as normal.\nIntegrated Protection: My AC depends on armor proficiency: none (11+Dex), light (11+Dex+Prof B.), medium (13+Dex+Prof B.), heavy (16+Prof B.; Stealth disadv.). I can use a shield.\nPowerful Build: I count as one size larger for my carrying capacity, push, drag, and lift." + (typePF ? " Iron Fists: My unarmed strikes do 1d4 damage." : ""), carryingCapacity : 2, eval : function() { var lightProf = tDoc.getField('Proficiency Armor Light').isBoxChecked(0); if (tDoc.getField('Proficiency Armor Heavy').isBoxChecked(0)) { CurrentRace.armorAdd.select = 'Heavy Plating'; } else if (tDoc.getField('Proficiency Armor Medium').isBoxChecked(0) && ((What('Dex') < 18 && lightProf) || !lightProf)) { CurrentRace.armorAdd.select = 'Composite Plating'; } else { CurrentRace.armorAdd.select = 'Darkwood Core' + (lightProf ? " (Prof)" : ""); }; }, removeeval : function () { if ((/darkwood core|composite plating|heavy plating/).test(CurrentArmour.known)) { tDoc.resetForm(['AC Armor Description']); }; }, armorAdd : { select : "" }, armorOptions : [{ regExpSearch : /^(?=.*darkwood)(?=.*core).*$/i, name : "Darkwood core", source : [["WGtE", 69], ["UA:RoE", 9]], ac : 11 }, { regExpSearch : /^(?=.*darkwood)(?=.*core)(?=.*prof).*$/i, name : "Darkwood core (Prof)", source : [["WGtE", 69], ["UA:RoE", 9]], ac : "11+Prof" }, { regExpSearch : /^(?=.*composite)(?=.*plating).*$/i, name : "Composite plating", source : [["WGtE", 69], ["UA:RoE", 9]], type : "medium", ac : "13+Prof", dex : 2 }, { regExpSearch : /^(?=.*heavy)(?=.*plating).*$/i, name : "Heavy plating", source : [["WGtE", 69], ["UA:RoE", 9]], type : "heavy", ac : "16+Prof", stealthdis : true }] }; RaceList["skirmisher warforged-ua"] = { regExpSearch : /^(?=.*warforged)(?=.*skirmisher).*$/i, name : "Skirmisher warforged", sortname : "Warforged, Skirmisher", source : [["WGtE", 70], ["UA:RoE", 9]], plural : "Skirmisher warforged", size : 3, speed : { walk : { spd : 35, enc : 25 } }, languageProfs : ["Common"], savetxt : { text : ["Magic can't put me to sleep"], immune : ["disease", "exhaustion from lack of rest"], adv_vs : ["poison"] }, dmgres : ["Poison"], age : " are created as adults and will only start to show signs of physical deterioration after 150 years, but have no further aging effects", height : " stand between 6 and 7 feet tall (5'10\" + 2d6\")", weight : " weigh around 300 lb (270 + 2d6 \xD7 4 lb)", heightMetric : " stand between 1,8 and 2,1 metres tall (178 + 5d6 cm)", weightMetric : " weigh around 135 kg (125 + 5d6 \xD7 8 / 10 kg)", scores : [0, 2, 1, 0, 0, 0], trait : "Skirmisher Warforged (+2 Dexterity, +1 Constitution)\nWarforged Resilience: I do not need to sleep, eat, drink, or breathe.\nSentry's Rest: To benefit from a long rest, I need to enter an inactive state for 6 hours, during which I am not rendered unconscious and can see and hear as normal.\nIntegrated Protection: My AC depends on armor proficiency: none (11+Dex), light (11+Dex+Prof B.), medium (13+Dex+Prof B.), heavy (16+Prof B.; Stealth disadv.). I can use a shield.\nLight Step: If I travel alone for an hour or more, I can move stealthily at a normal pace.", eval : function() { var lightProf = tDoc.getField('Proficiency Armor Light').isBoxChecked(0); if (tDoc.getField('Proficiency Armor Heavy').isBoxChecked(0)) { CurrentRace.armorAdd.select = 'Heavy Plating'; } else if (tDoc.getField('Proficiency Armor Medium').isBoxChecked(0) && ((What('Dex') < 18 && lightProf) || !lightProf)) { CurrentRace.armorAdd.select = 'Composite Plating'; } else { CurrentRace.armorAdd.select = 'Darkwood Core' + (lightProf ? " (Prof)" : ""); }; }, removeeval : function () { if ((/darkwood core|composite plating|heavy plating/).test(CurrentArmour.known)) { tDoc.resetForm(['AC Armor Description']); }; }, armorAdd : { select : "" }, armorOptions : [{ regExpSearch : /^(?=.*darkwood)(?=.*core).*$/i, name : "Darkwood core", source : [["WGtE", 69], ["UA:RoE", 9]], ac : 11 }, { regExpSearch : /^(?=.*darkwood)(?=.*core)(?=.*prof).*$/i, name : "Darkwood core (Prof)", source : [["WGtE", 69], ["UA:RoE", 9]], ac : "11+Prof" }, { regExpSearch : /^(?=.*composite)(?=.*plating).*$/i, name : "Composite plating", source : [["WGtE", 69], ["UA:RoE", 9]], type : "medium", ac : "13+Prof", dex : 2 }, { regExpSearch : /^(?=.*heavy)(?=.*plating).*$/i, name : "Heavy plating", source : [["WGtE", 69], ["UA:RoE", 9]], type : "heavy", ac : "16+Prof", stealthdis : true }] }; } // Elf Variants if (RaceList["wood elf"]) { AddRacialVariant("wood elf", "aereni", { regExpSearch : /aereni/i, name : "Aereni wood elf", source : [["WGtE", 73]], plural : "Aereni wood elves", weaponProfs : "", skillstxt : "Proficiency and expertise with any one skill or tool", trait : "Aereni " + RaceList["wood elf"].trait }); AddRacialVariant("wood elf", "valenar", { regExpSearch : /valenar/i, name : "Valenar wood elf", source : [["WGtE", 73]], plural : "Valenar wood elves", weaponProfs : [false, false, ["scimitar", "double-bladed scimitar", "longbow", "shortbow"]], trait : "Valenar " + RaceList["wood elf"].trait }); } AddRacialVariant("high elf", "aereni", { regExpSearch : /aereni/i, name : "Aereni high elf", source : [["WGtE", 73]], plural : "Aereni high elves", weaponProfs : "", skillstxt : "Proficiency and expertise with any one skill or tool", trait : "Aereni " + RaceList["high elf"].trait }); AddRacialVariant("high elf", "valenar", { regExpSearch : /valenar/i, name : "Valenar high elf", source : [["WGtE", 73]], plural : "Valenar high elves", weaponProfs : [false, false, ["scimitar", "double-bladed scimitar", "longbow", "shortbow"]], trait : "Valenar " + RaceList["high elf"].trait }); // Double bladed scimitar if (!WeaponsList["double-bladed scimitar"]){ WeaponsList["double-bladed scimitar"] = { regExpSearch : /^(?=.*double)(?=.*scimitar).*$/i, name : "Double-bladed scimitar", nameAlt : ["Scimitar, Double-bladed"], source : [["E:RLW", 22], ["WGtE", 74]], list : "melee", ability : 1, type : "Martial", damage : [2, 4, "slashing"], range : "Melee", weight : 6, description : "Two-handed; With Attack action, one attack as bonus action for 1d4", special : true, abilitytodamage : true }; } // Revenant blade feat FeatsList["revenant blade-wgte"] = { name : "Revenant Blade", source : [["WGtE", 74]], prerequisite : "Being an Elf", prereqeval : function(v) { return (/^(?!.*half)(?=.*(elf|eladrin|avariel|grugach|shadar-kai)).*$/i).test(CurrentRace.known); }, descriptionFull : "You are descended from a master of the double blade and their skills have passed on to you. You gain the following benefits:\n \u2022 Increase your Dexterity or Strength score by 1, to a maximum of 20.\n \u2022 While wielding a double-bladed weapon with two hands, the weapon has the finesse trait for your attacks with it, and you gain +1 AC.\n \u2022 On your turn, when you use a bonus action to make a melee attack with the blade at the opposite end of the weapon, the weapon's damage die for this attack increases to 2d4, instead of 1d4.", description : "As a bonus action with the Attack action, I can make an extra with a double-bladed weapon for 2d4 slashing damage. I treat double-bladed weapons as having the finesse trait. +1 AC while wielding a double-bladed weapon with two hands. [+1 Strength or Dexterity]", scorestxt : "+1 Strength or Dexterity", action : [["bonus action", " (with Attack action)"]], calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == 'double-bladed scimitar' && fields.Proficiency) { fields.Description = fields.Description.replace('Two-handed; With Attack action, one attack as bonus action for 1d4', 'Finesse, two-handed; With Attack action, one attack as bonus action'); fields.Mod = v.StrDex; }; }, "Double-bladed weapons count as having finesse for me and I can make an extra attack with them as a bonus action when taking the Attack action." ] }, extraAC : { mod : 1, text : "I gain a +1 bonus to AC while I'm wielding a double-bladed weapon in two hands.", stopeval : function (v) { return v.usingShield && !(/animated/i).test(What("AC Shield Bonus Description")) || !CurrentWeapons.known.some(function (n) { return n[0] == "double-bladed scimitar" || (WeaponsList[n[0]] && WeaponsList[n[0]].baseWeapon == "double-bladed scimitar"); }); } } }; // Creature CreatureList["clawfoot raptor"] = { name : "Clawfoot Raptor", source : [["WGtE", 81]], size : 3, type : "Beast", alignment : "Unaligned", ac : 14, hp : 16, hd : [3, 8], speed : "50 ft", scores : [17, 17, 13, 2, 12, 10], skills : { "athletics" : 5, "perception" : 5, "stealth" : 5 }, passivePerception : 15, challengeRating : "1/2", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Claw", ability : 1, damage : [2, 6, "slashing"], range : "Melee (5 ft)", description : "If used after moving 30 ft straight in the same round, see Pounce trait" }, { name : "Bite", ability : 1, damage : [2, 4, "piercing"], range : "Melee (5 ft)", description : "Can be used in combination with claw while pouncing (see Pounce trait)" }], traits : [{ name : "Pounce", description : "If the clawfoot moves at least 30 ft straight toward a creature and then hits it with a claw attack on the same turn, that target must succeed on a DC 13 Strength saving throw or be knocked prone. If the target is prone, the clawfoot can make one bite attack against it as a bonus action." }] }; // House Agent backgrounds if (!BackgroundList["house agent"]) { BackgroundList["house agent"] = { // the default is House Cannith regExpSearch : /^(?=.*agent)(?=.*house)(?=.*(noble|cannith)).*$/i, name : "Agent of House Cannith", source : [["E:RLW", 53], ["WGtE", 94]], skills : ["Investigation", "Persuasion"], gold : 20, equipleft : [["Signet ring of house Cannith", "", ""]], equipright : [ ["Fine clothes", "", 6], ["ID papers", "", ""], ["Purse (with coins)", "", 1] ], feature : "House Connections", trait : [ "I never let emotion complicate work.", "I'm always looking to improve efficiency.", "I share trivia about my house's business (medicine, ships, warforged).", "I hold myself and anyone I work with to extremely high standards.", "I never forget an insult made against myself or my house.", "I'm very excited and enthusiastic about everything my house does.", "I'm representing my house and take great pride in my personal appearance.", "I'm critical of monarchies and opposed to any restrictions on the houses." ], ideal : [ ["Common Good", "Common Good: My house serves a vital function, and its prosperity will help everyone. (Good)" ], ["Tradition", "Tradition: I uphold traditions of my house and bring honor to my family. (Lawful)" ], ["Innovation", "Innovation: Abandon old traditions and find better ways to do things. (Chaotic)" ], ["Power", "Power: I want to ensure the prosperity of my house and wield its power myself. (Evil)" ], ["Discovery", "Discovery: I want to learn all I can, both for my house and for my own curiosity. (Any)" ], ["Comfort", "Comfort: I want to ensure that me and friends of mine enjoy the best things in life. (Any)" ] ], bond : [ "My house is my family, and I would do anything for my family.", "I love someone from another house, but the relationship is forbidden.", "Someone I love was killed by a rival faction within my house, and I will have revenge.", "I don't care about the house as a whole, but I would do anything for my old mentor.", "I believe my house needs to evolve to survive, and I need to lead that change.", "I'm determined to impress the leaders of my house, and to become a leader myself." ], flaw : [ "I'm overly concerned with following established procedures and protocols.", "I'm obsessed with conspiracy theories and worried about secret societies and hidden demons.", "I believe that my house and bloodline makes me better than everyone else.", "I'm concealing a secret that could get me driven from my house.", "I have strong religious beliefs that aren't widespread in my house.", "I'm working for a hidden faction in my house that gives me secret assignments." ], extra : [ "Select an House Agent Role", "Acquisition", "Investigation", "Research \u0026 Development", "Security", "Intimidation", "Exploration", "Negotiation", "Covert Operations" ], toolProfs : ["Alchemist's supplies", "Tinker's tools"] }; AddBackgroundVariant("house agent", "deneith", { regExpSearch : /^(?=.*agent)(?=.*house)(?=.*deneith).*$/i, name : "Agent of House Deneith", source : [["E:RLW", 53], ["WGtE", 94]], equipleft : [["Signet ring of house Deneith", "", ""]], toolProfs : [["Gaming set", 1], "Vehicles (land)"] }); AddBackgroundVariant("house agent", "ghallanda", { regExpSearch : /^(?=.*agent)(?=.*house)(?=.*ghallanda).*$/i, name : "Agent of House Ghallanda", source : [["E:RLW", 53], ["WGtE", 94]], equipleft : [["Signet ring of house Ghallanda", "", ""]], toolProfs : ["Brewer's supplies", "Cook's utensils"] }); AddBackgroundVariant("house agent", "jorasco", { regExpSearch : /^(?=.*agent)(?=.*house)(?=.*jorasco).*$/i, name : "Agent of House Jorasco", source : [["E:RLW", 53], ["WGtE", 94]], equipleft : [["Signet ring of house Jorasco", "", ""]], toolProfs : ["Alchemist's supplies", "Herbalism kit"] }); AddBackgroundVariant("house agent", "kundarak", { regExpSearch : /^(?=.*agent)(?=.*house)(?=.*kundarak).*$/i, name : "Agent of House Kundarak", source : [["E:RLW", 53], ["WGtE", 94]], equipleft : [["Signet ring of house Kundarak", "", ""]], toolProfs : [["Thieves' tools", "Dex"], "Tinker's tools"] }); AddBackgroundVariant("house agent", "lyrandar", { regExpSearch : /^(?=.*agent)(?=.*house)(?=.*lyrandar).*$/i, name : "Agent of House Lyrandar", source : [["E:RLW", 53], ["WGtE", 94]], equipleft : [["Signet ring of house Lyrandar", "", ""]], toolProfs : ["Navigator's tools", "Vehicles (sea/air)"] }); AddBackgroundVariant("house agent", "medani", { regExpSearch : /^(?=.*agent)(?=.*house)(?=.*medani).*$/i, name : "Agent of House Medani", source : [["E:RLW", 53], ["WGtE", 94]], equipleft : [["Signet ring of house Medani", "", ""]], toolProfs : ["Disguise kit", ["Thieves' tools", "Dex"]] }); AddBackgroundVariant("house agent", "orien", { regExpSearch : /^(?=.*agent)(?=.*house)(?=.*orien).*$/i, name : "Agent of House Orien", source : [["E:RLW", 53], ["WGtE", 94]], equipleft : [["Signet ring of house Orien", "", ""]], toolProfs : [["Gaming set", 1], "Vehicles (land)"] }); AddBackgroundVariant("house agent", "phiarlan", { regExpSearch : /^(?=.*agent)(?=.*house)(?=.*phiarlan).*$/i, name : "Agent of House Phiarlan", source : [["E:RLW", 53], ["WGtE", 94]], equipleft : [["Signet ring of house Phiarlan", "", ""]], toolProfs : ["Disguise kit", ["Musical instrument", 1]] }); AddBackgroundVariant("house agent", "sivis", { regExpSearch : /^(?=.*agent)(?=.*house)(?=.*sivis).*$/i, name : "Agent of House Sivis", source : [["E:RLW", 53], ["WGtE", 94]], equipleft : [["Signet ring of house Sivis", "", ""]], toolProfs : ["Calligrapher's tools", "Forgery kit"] }); AddBackgroundVariant("house agent", "tharashk", { regExpSearch : /^(?=.*agent)(?=.*house)(?=.*tharashk).*$/i, name : "Agent of House Tharashk", source : [["E:RLW", 53], ["WGtE", 94]], equipleft : [["Signet ring of house Tharashk", "", ""]], toolProfs : [["Gaming set", 1], ["Thieves' tools", "Dex"]] }); AddBackgroundVariant("house agent", "thuranni", { regExpSearch : /^(?=.*agent)(?=.*house)(?=.*thuranni).*$/i, name : "Agent of House Thuranni", source : [["E:RLW", 53], ["WGtE", 94]], equipleft : [["Signet ring of house Thuranni", "", ""]], toolProfs : [["Musical instrument", 1], "Poisoner's kit"] }); AddBackgroundVariant("house agent", "vadalis", { regExpSearch : /^(?=.*agent)(?=.*house)(?=.*vadalis).*$/i, name : "Agent of House Vadalis", source : [["E:RLW", 53], ["WGtE", 94]], equipleft : [["Signet ring of house Vadalis", "", ""]], toolProfs : ["Herbalism kit", "Vehicles (land)"] }); BackgroundFeatureList["house connections"] = { description : "As an agent of my house, I can always get food and lodging for my friends at a house enclave. My house usually provides me with necessary supplies and transportation if it assigns me a mission. I have many old friends, mentors, and rivals in my house that I might run into and be willing to help me depending on my current standing in the house.", source : [["E:RLW", 53], ["WGtE", 95]] }; } // Dragonmarks subraces RaceList["dragonmark passage human-wgte"] = { // different than UA: Dragonmarks regExpSearch : /^((?=.*mark)(?=.*passage)|(?=.*house)(?=.*orien)).*$/i, name : "Human (dragonmark)", sortname : "Dragonmark, Passage (Human)", source : [["WGtE", 102]], plural : "Humans (dragonmark)", size : 3, speed : { walk : { spd : 40, enc : 30 } }, languageProfs : ["Common", 1], age : " reach adulthood in their late teens and live less than 100 years", height : " range from barely 5 to well over 6 feet tall (4'8\" + 2d10\")", weight : " weigh around 165 lb (110 + 2d10 \xD7 2d4 lb)", heightMetric : " range from barely 1,5 to well over 1,8 metres tall (145 + 5d10 cm)", weightMetric : " weigh around 75 kg (50 + 5d10 \xD7 4d4 / 10 kg)", scorestxt : "+2 Dexterity and +1 to another ability score of my choice", scores : [0, 2, 0, 0, 0, 0], trait : "Human, Dragonmark of Passage (+2 Dexterity and +1 to another ability score)\n Intuitive Motion: I can add my Intuition Die (1d4) to my Strength (Athletics) checks and any ability checks involving operating or maintaining a land vehicle.\n Determined Stride: When I use the Dash action, difficult terrain doesn't cost me extra movement for that turn.\n Shared Passage: As a bonus action once per long rest, I can teleport myself and a willing ally within 5 ft a distance up to my walking speed to an unoccupied space I can see.", features : { "shared passage" : { name : "Shared Passage", minlevel : 1, usages : 1, recovery : "long rest", action : [["bonus action", ""]] } } }; if (!SourceList["UA:D"]) { RaceList["dragonmark detection half-elf-ua"] = { regExpSearch : /^((?=.*mark)(?=.*detection)|(?=.*house)(?=.*medani)).*$/i, name : "Half-elf (dragonmark)", sortname : "Dragonmark, Detection (Half-Elf)", source : [["WGtE", 96], ["UA:D", 2]], plural : "Half-elves (dragonmark)", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Elvish"], vision : [["Darkvision", 60]], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["charmed"] }, age : " reach adulthood around age 20 and often live over 180 years", height : " range from 5 to 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scorestxt : "+1 Intelligence, +1 Charisma, and +1 to any one ability score of my choice", scores : [0, 0, 0, 1, 0, 1], trait : "Half-Elf, Dragonmark of Detection (+1 Intelligence, +1 Charisma, and +1 to any one ability score of my choice)\n" + (typePF ? "\n" : " ") + "Deductive Intuition: I can add my Intuition Die (1d4) to my Intelligence (Investigation) and Wisdom (Insight) checks.\n" + (typePF ? "\n" : " ") + "Sense Threats: I can cast Detect Magic and Detect Poison and Disease as rituals using Intelligence as my spellcasting ability.", spellcastingAbility : 4, spellcastingBonus : [{ name : "Sense Threats", spells : ["detect magic", "detect poison and disease"], selection : ["detect magic", "detect poison and disease"], firstCol : SpellRitualTag, times : 2 }], spellChanges : { "detect magic" : { time : "10 min", changes : "I can cast this spell only as a ritual, thus its casting time is 10 minutes longer." }, "detect poison and disease" : { time : "10 min", changes : "I can cast this spell only as a ritual, thus its casting time is 10 minutes longer." } } }; RaceList["dragonmark finding half-orc-ua"] = { regExpSearch : /^(?=.*half)(?=.*\bor(c|k))((?=.*mark)(?=.*finding)|(?=.*house)(?=.*tharashk)).*$/i, name : "Half-orc (dragonmark)", sortname : "Dragonmark, Finding (Half-Orc)", source : [["WGtE", 97], ["UA:D", 2]], plural : "Half-orcs (dragonmark)", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Orc"], vision : [["Darkvision", 60]], age : " reach adulthood around age 14 and rarely live longer than 75 years", height : " range from 5 to well over 6 feet tall (4'10\" + 2d10\")", weight : " weigh around 215 lb (140 + 2d10 \xD7 2d6 lb)", heightMetric : " range from 1,5 to well over 1,8 metres tall (150 + 5d10 cm)", weightMetric : " weigh around 100 kg (65 + 5d10 \xD7 4d6 / 10 kg)", scorestxt : "+1 Strength, +1 Wisdom, and +1 to any one ability score of my choice", scores : [1, 0, 0, 0, 1, 0], trait : "Half-Orc, Dragonmark of Finding (+1 Str" + (typePF ? ", +1 Wis, +1 to one ability" : "ength, +1 Wisdom, +1 to any one ability score") + ")\n Hunter's Intuition: I add my Intuition Die (1d4) to my Perception and Survival checks.\n Imprint Prey: As a bonus action once per short rest, I imprint a target I can see in 30 ft or with a Survival check when tracking it, lasting until it dies or I use this again. I double my Intuition Die for tracking it, sense its general location in 60 ft, my attacks vs. it ignore half cover and don't have disadv. if I can't see it, and it has no adv. vs. me if I can't see it.\n" + (typePF ? "Nature's Voice: cast Locate Animals/Plants as a ritual from 3rd level." : " Nature's Voice: Once I reach 3rd level, I can cast Locate Animals or Plants as a ritual."), features : { "imprint prey" : { name : "Imprint Prey", minlevel : 1, usages : 1, recovery : "short rest", action : [["bonus action", ""]] }, "locate animals or plants" : { name : "Locate Animals or Plants", minlevel : 3, spellcastingBonus : [{ name : "Nature's Voice", spells : ["locate animals or plants"], selection : ["locate animals or plants"], firstCol : SpellRitualTag, }], spellChanges : { "locate animals or plants" : { time : "10 min", changes : "I can cast this spell only as a ritual, thus its casting time is 10 minutes longer." } } } } }; RaceList["dragonmark handling human-ua"] = { regExpSearch : /^((?=.*mark)(?=.*handling)|(?=.*house)(?=.*vadalis)).*$/i, name : "Human (dragonmark)", sortname : "Dragonmark, Handling (Human)", source : [["WGtE", 98], ["UA:D", 3]], plural : "Humans (dragonmark)", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", 1], age : " reach adulthood in their late teens and live less than 100 years", height : " range from barely 5 to well over 6 feet tall (4'8\" + 2d10\")", weight : " weigh around 165 lb (110 + 2d10 \xD7 2d4 lb)", heightMetric : " range from barely 1,5 to well over 1,8 metres tall (145 + 5d10 cm)", weightMetric : " weigh around 75 kg (50 + 5d10 \xD7 4d4 / 10 kg)", scorestxt : "+1 Dexterity, +1 Wisdom, and +1 to any one ability score of my choice", scores : [0, 1, 0, 0, 1, 0], trait : "Human, Dragonmark of Handling (+1 Dex" + (typePF ? ", +1 Wis, +1 to one ability" : "terity, +1 Wisdom, +1 to any one ability score") + ")\n Wild Intuition: I can add my Intuition Die (1d4) to my Wisdom (Animal Handling) and Intelligence (Nature) checks.\n Expert Handling: I can use the Help action to aid an ally animal companion or mount even when they are within 30 ft of me, rather than just within 5 ft.\n Primal Connection: Once per short rest, I can cast Animal Friendship using Wisdom " + (typePF ? "as my spellcasting ability" : "") + ".\n " + (typePF ? "The Bigger They Are: My spells that normally affect only beasts now also affect monstrosities with an Intelligence of 3 or lower." : "Bigger They Are: My spells that affect only beasts, also affect monstrosities with Int < 4."), spellcastingAbility : 5, features : { "animal friendship" : { name : "Primal Connection", limfeaname : "Animal Friendship", minlevel : 1, usages : 1, recovery : "short rest", spellcastingBonus : [{ name : "Primal Connection", spells : ["animal friendship"], selection : ["animal friendship"], firstCol : 'oncesr' }] } }, calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { switch (spellKey) { case "animal friendship" : spellObj.description = spellObj.description.replace("beasts", "beasts/monstrosities"); return true; case "beast bond" : spellObj.description = "Telepathic link with 1 beast/monstrosity Int<4 while in sight; it has adv. on atks vs. crea I can see"; return true; case "beast sense" : spellObj.description = "Use senses of 1 willing monstrosity Int<4 or beast; I'm blinded and deafened while doing so"; return true; case "dominate beast" : spellObj.description = "1 monstrosity Int<4 or beast save or charmed, follows telepathic commands, 1 a for complete control"; return true; case "speak with animals" : spellObj.description = "Communicate verbally with monstrosities Int<4 or beasts for duration; interactions limited by their Int"; return true; } }, "Spells I cast that only affect beasts can also affect monstrosities with an Intelligence score of 3 or lower." ] } }; RaceList["dragonmark healing halfling-ua"] = { regExpSearch : /^((?=.*mark)(?=.*healing)|(?=.*house)(?=.*jorasco)).*$/i, name : "Halfling (dragonmark)", sortname : "Dragonmark, Healing (Halfling)", source : [["WGtE", 99], ["UA:D", 3]], plural : "Halflings (dragonmark)", size : 4, speed : { walk : { spd : 25, enc : 15 } }, languageProfs : ["Common", "Halfling"], savetxt : { adv_vs : ["frightened"] }, age : " reach adulthood at age 20 and live around 150 years", height : " average about 3 feet tall (2'7\" + 2d4\")", weight : " weigh around 40 lb (35 + 2d4 lb)", heightMetric : " average about 90 cm tall (80 + 5d4)", weightMetric : " weigh around 18 kg (16 + 5d4 / 10 kg)", scores : [0, 2, 0, 0, 1, 0], trait : "Halfling, Dragonmark of Healing (+2 Dexterity, +1 Wisdom)" + (typePF ? "\n " : "") + " Lucky: When I roll a 1 on an attack roll, ability check, or saving throw, I can reroll the die and must use the new roll." + desc([ "Halfling Nimbleness: I can move through the space of Medium and larger creatures.", "Medical Intuition: I " + (typePF ? "" : "can") + " add my Intuition Die (1d4) to " + (typePF ? "Medicine" : "my Wisdom (Medicine)") + " checks.", "Healing Touch: As an action once per short rest, I can spend one of my Hit Dice to heal myself or a creature I touch. I heal the roll of the die plus my Wisdom modifier.", "Jorasco's Blessing: I know the Spare the Dying cantrip." ]), features : { "healing touch" : { name : "Healing Touch", minlevel : 1, usages : 1, recovery : "short rest", action : [["action", ""]] } }, spellcastingAbility : 6, spellcastingBonus : [{ name : "Jorasco's Blessing", spells : ["spare the dying"], selection : ["spare the dying"], firstCol : 'atwill' }] }; RaceList["dragonmark hospitality halfling-ua"] = { regExpSearch : /^((?=.*mark)(?=.*hospitality)|(?=.*house)(?=.*ghallanda)).*$/i, name : "Halfling (dragonmark)", sortname : "Dragonmark, Hospitality (Halfling)", source : [["WGtE", 100], ["UA:D", 4]], plural : "Halflings (dragonmark)", size : 4, speed : { walk : { spd : 25, enc : 15 } }, languageProfs : ["Common", "Halfling"], savetxt : { adv_vs : ["frightened"] }, age : " reach adulthood at age 20 and live around 150 years", height : " average about 3 feet tall (2'7\" + 2d4\")", weight : " weigh around 40 lb (35 + 2d4 lb)", heightMetric : " average about 90 cm tall (80 + 5d4)", weightMetric : " weigh around 18 kg (16 + 5d4 / 10 kg)", scores : [0, 2, 0, 0, 0, 1], trait : "Halfling, Dragonmark of Hospitality (+2 Dexterity, +1 Charisma)\nLucky: When I roll a 1 on an attack roll, ability check, or saving throw, I can reroll the die and must use the new roll.\nHalfling Nimbleness: I can move through the space of Medium and larger creatures.\nEver Hospitable: I can add my Intuition Die (1d4) to my Charisma (Persuasion) checks and ability checks involving brewer's supplies or cook's utensils.\nInnkeeper's Charms: I know Friends and Prestidigitation with Cha as my spellcasting ability.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Innkeeper's Charms", spells : ["friends", "prestidigitation"], selection : ["friends", "prestidigitation"], firstCol : 'atwill', times : 2 }] }; RaceList["dragonmark making human-ua"] = { regExpSearch : /^((?=.*mark)(?=.*making)|(?=.*house)(?=.*cannith)).*$/i, name : "Human (dragonmark)", sortname : "Dragonmark, Making (Human)", source : [["WGtE", 101], ["UA:D", 4]], plural : "Humans (dragonmark)", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", 1], toolProfs : [["Artisan's tools", 1]], age : " reach adulthood in their late teens and live less than 100 years", height : " range from barely 5 to well over 6 feet tall (4'8\" + 2d10\")", weight : " weigh around 165 lb (110 + 2d10 \xD7 2d4 lb)", heightMetric : " range from barely 1,5 to well over 1,8 metres tall (145 + 5d10 cm)", weightMetric : " weigh around 75 kg (50 + 5d10 \xD7 4d4 / 10 kg)", scorestxt : "+1 Dexterity, +1 Intelligence, and another +1 to either Dexterity or Intelligence", scores : [0, 1, 0, 1, 0, 0], trait : "Human, Dragonmark of Making (+1 Dex" + (typePF ? ", +2 Int or +2 Dex, +1 Int" : "terity, +1 Intelligence, +1 to Dex or Int, my choice") + ")\nArtisan's Intuition: I can add my Intuition Die (1d4) to ability checks with artisan's tools.\nMagecraft: I can create a magic item that gives me the ability to cast one wizard cantrip of my choice, using Intelligence as my spellcasting ability. This works while the item is in my possession. At the end of a long rest, I can replace it with a new item and cantrip.\nSpellsmith: Once per long rest, I can spend 1 minute to make a nonmagical armor or weapon gain a +1 bonus for the next hour. Maker's Gift: I know the mending cantrip.", features : { "spellsmith" : { name : "Spellsmith", minlevel : 1, usages : 1, recovery : "long rest" } }, eval : function () { CurrentSpells['dragonmark making human'] = { name : 'Human (dragonmark)', ability : 4, list : { 'class' : 'wizard', level : [0, 0] }, known : { cantrips : 1, spells : 'list' }, bonus : { bonus1 : { name : "Maker's Gift", spells : ['mending'], selection : ['mending'], firstCol : 'atwill' } }, typeList : 2, refType : "race" }; SetStringifieds('spells'); CurrentUpdates.types.push('spells'); }, removeeval : function () { delete CurrentSpells['dragonmark making human']; SetStringifieds('spells'); CurrentUpdates.types.push('spells'); } }; RaceList["dragonmark scribing gnome-ua"] = { regExpSearch : /^((?=.*mark)(?=.*scribing)|(?=.*house)(?=.*sivis)).*$/i, name : "Gnome (dragonmark)", sortname : "Dragonmark, Scribing (Gnome)", source : [["WGtE", 103], ["UA:D", 5]], plural : "Gnomes (dragonmark)", size : 4, speed : { walk : { spd : 25, enc : 15 } }, languageProfs : ["Common", "Gnomish", 1], toolProfs : ["Calligrapher's supplies", "Forgery kits"], vision : [["Darkvision", 60]], savetxt : { text : ["Adv. on Int/Wis/Cha saves vs. magic"] }, age : " start adult life around age 40 and can live 350 to almost 500 years", height : " are 3 to 4 feet tall (2'11\" + 2d4\")", weight : " weigh around 40 lb (35 + 2d4 lb)", heightMetric : " are 90 to 120 cm tall (2'11\" + 5d4)", weightMetric : " weigh around 18 kg (16 + 5d4 / 10 kg)", scores : [0, 0, 0, 2, 0, 1], trait : "Gnome, Dragonmark of Scribing (+2 Intelligence, +1 Charisma)\n Gifted Scribe: I can add my Intuition Die (1d4) to ability checks involving calligrapher's supplies or forgery kits. I am proficient with both of these tools.\n Whispering Wind: I know the Message cantrip.\n Scribe's Insight: I can cast Comprehend Languages once per long rest.\nIntelligence is my spellcasting ability for the spells gained from being a gnome, dragonmark of scribing.", spellcastingAbility : 4, spellcastingBonus : [{ name : "Whispering Wind", spells : ["message"], selection : ["message"], firstCol : 'atwill' }], features : { "comprehend languages" : { name : "Scribe's Insight", limfeaname : "Comprehend Languages", minlevel : 1, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Scribe's Insight", spells : ["comprehend languages"], selection : ["comprehend languages"], firstCol : 'oncelr' }] } } }; RaceList["dragonmark sentinel human-ua"] = { regExpSearch : /^((?=.*mark)(?=.*sentinel)|(?=.*house)(?=.*deneith)).*$/i, name : "Human (dragonmark)", sortname : "Dragonmark, Sentinel (Human)", source : [["WGtE", 104], ["UA:D", 5]], plural : "Humans (dragonmark)", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", 1], age : " reach adulthood in their late teens and live less than 100 years", height : " range from barely 5 to well over 6 feet tall (4'8\" + 2d10\")", weight : " weigh around 165 lb (110 + 2d10 \xD7 2d4 lb)", heightMetric : " range from barely 1,5 to well over 1,8 metres tall (145 + 5d10 cm)", weightMetric : " weigh around 75 kg (50 + 5d10 \xD7 4d4 / 10 kg)", scorestxt : "+1 Strength, +1 Wisdom, and +1 to any one ability score of my choice", scores : [1, 0, 0, 0, 1, 0], trait : "Human, Dragonmark of Sentinel (+1 Str" + (typePF ? ", +1 Wis, +1 to one ability" : "ength, +1 Wisdom, +1 to any one ability score") + ")\n Sentinel's Intuition: I can add my Intuition Die (1d4) to Initiative rolls and my Wisdom (Perception) checks.\n Sentinel's Shield: I know the Blade Ward cantrip. I can cast Shield once per short rest.\n Vigilant Guardian: As an action, I can designate an ally as my ward, gaining adv. on Insight and Perception checks to spot threats to it. As a reaction when I see my ward being attacked while within 5 ft, I can swap places with it, becoming the target of the attack.", action : [['action', 'Vigilant Guardian (designate ward)'], ['reaction', 'Vigilant Guardian (swap with ward)']], features : { "shield" : { name : "Sentinel's Shield", limfeaname : "Shield", minlevel : 1, usages : 1, recovery : "short rest", action : [["reaction", ""]], spellcastingBonus : [{ name : "Sentinel's Shield", spells : ["blade ward"], selection : ["blade ward"], firstCol : 'atwill' }, { name : "Sentinel's Shield", spells : ["shield"], selection : ["shield"], firstCol : 'oncesr' }] } } }; RaceList["dragonmark shadow elf-ua"] = { regExpSearch : /^((?=.*mark)(?=.*shadow)|(?=.*house)(?=.*(phiarlan|thuranni))).*$/i, name : "Elf (dragonmark)", sortname : "Dragonmark, Shadow (Elf)", source : [["WGtE", 105], ["UA:D", 6]], plural : "Elves (dragonmark)", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Elvish"], vision : [["Darkvision", 60]], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["charmed"] }, skills : ["Perception"], skillstxt : "Perception and proficiency with either Performance or one musical instrument", age : " typically claim adulthood around age 100 and can live to be 750 years old", height : " range from under 5 to over 6 feet tall (4'6\" + 2d10\")", weight : " weigh around 115 lb (90 + 2d10 \xD7 1d4 lb)", heightMetric : " range from under 1,5 to over 1,8 metres tall (140 + 5d10 cm)", weightMetric : " weigh around 55 kg (40 + 5d10 \xD7 2d4 / 10 kg)", scores : [0, 2, 0, 0, 0, 1], trait : "Elf, Dragonmark of Shadow (+2 Dexterity, +1 Charisma)\nTrance: Elves don't need to sleep, but meditate semiconsciously, for 4 hours a day. This gives the same benefit as a human gets from 8 hours of sleep (long rest takes only 4 hours).\nGift of the Shadows: I can add my Intuition Die (1d4) to Performance and Stealth checks.\nShape Shadows: I know the Minor Illusion cantrip using Charisma as my spellcasting ability.\nSlip Into Shadow: As a bonus action once per short rest, I can use the Hide action even while I have no cover or if I'm being observed.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Shape Shadows", spells : ["minor illusion"], selection : ["minor illusion"], firstCol : 'atwill' }], features : { "slip into shadow" : { name : "Slip Into Shadow", minlevel : 1, usages : 1, recovery : "short rest", action : [["bonus action", ""]] } } }; AddRacialVariant("dragonmark shadow elf-ua", "performance, ", { regExpSearch : /performance/i, source : [["WGtE", 105], ["UA:D", 6]], skills : ["Perception", "Performance"], skillstxt : "" }); AddRacialVariant("dragonmark shadow elf-ua", "musical instrument, ", { regExpSearch : /musical instrument/i, source : [["WGtE", 105], ["UA:D", 6]], skillstxt : "", toolProfs : [["Musical instrument", 1]] }); RaceList["dragonmark storm half-elf-ua"] = { regExpSearch : /^((?=.*mark)(?=.*storm)|(?=.*house)(?=.*lyrandar)).*$/i, name : "Half-elf (dragonmark)", sortname : "Dragonmark, Storm (Half-Elf)", source : [["WGtE", 106], ["UA:D", 6]], plural : "Half-elves (dragonmark)", size : 3, speed : { walk : { spd : 30, enc : 20 }, swim : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Elvish"], vision : [["Darkvision", 60]], dmgres : ["Lightning"], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["charmed"] }, age : " reach adulthood around age 20 and often live over 180 years", height : " range from 5 to 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scorestxt : "+1 Dexterity, +1 Charisma, and +1 to any one ability score of my choice", scores : [0, 1, 0, 0, 0, 1], trait : "Half-Elf, Dragonmark of Storm (+1 Dexterity, +1 Charisma, and +1 to any one ability score of my choice)\n" + (typePF ? "\n" : " ") + "Windwright's Intuition: I can add my Intuition Die (1d4) to my Dexterity (Acrobatics) checks and any ability checks involving operating or maintaining a water or air vehicle.\n" + (typePF ? "\n" : " ") + "Headwinds: I know the Gust cantrip. Once I reach 3rd level, I can cast Gust of Wind once per long rest. Charisma is my spellcasting ability for these spells.", spellcastingAbility : 6, // Not mentioned in WGtE, but essential! spellcastingBonus : [{ name : "Headwinds (level 1)", spells : ["gust"], selection : ["gust"], firstCol : 'atwill' }], features : { "gust of wind" : { name : "Headwinds (level 3)", limfeaname : "Gust of Wind", minlevel : 3, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Headwinds (level 3)", spells : ["gust of wind"], selection : ["gust of wind"], firstCol : 'oncelr' }] } } }; RaceList["dragonmark warding dwarf-ua"] = { regExpSearch : /^((?=.*mark)(?=.*warding)|(?=.*house)(?=.*kundarak)).*$/i, name : "Dwarf (dragonmark)", sortname : "Dragonmark, Warding (Dwarf)", source : [["WGtE", 108], ["UA:D", 7]], plural : "Dwarves (dragonmark)", size : 3, speed : { walk : { spd : 25, enc : 25 } }, languageProfs : ["Common", "Dwarvish"], vision : [["Darkvision", 60]], savetxt : { adv_vs : ["poison"] }, dmgres : ["Poison"], weaponProfs : [false, false, ["battleaxe", "handaxe", "warhammer", "light hammer"]], toolProfs : [["Smith, brewer, or mason tools", 1]], age : " are considered young until they are 50 and live about 350 years", height : " stand between 4 and 5 feet tall (4' + 2d4\")", weight : " weigh around 150 lb (130 + 2d4 \xD7 2d6 lb)", heightMetric : " stand between 1,2 and 1,5 metres tall (120 + 5d4 cm)", weightMetric : " weigh around 75 kg (60 + 5d4 \xD7 4d6 / 10 kg)", scores : [0, 1, 2, 1, 0, 0], trait : "Dwarf, Dragonmark of Warding (+1 Dex" + (typePF ? ", +2 Con, +1 Int" : "terity, +2 Constitution, +1 Intelligence") + ")\n Stonecunning: When I make an Intelligence (History) check related to the origin of stonework, I am considered having expertise in the History skill.\n Master of Locks: I can add my Intuition Die (1d4) to Intelligence (History), Intelligence (Investigation), and ability checks with thieves' tools, if it involves lock or trap mechanisms.\n Wards and Seals: I can cast Alarm as a ritual. Once I reach 3rd level, I can cast Arcane Lock once per long rest. Intelligence is my spellcasting ability for these.", spellcastingAbility : 4, spellcastingBonus : [{ name : "Wards and Seals (level 1)", spells : ["alarm"], selection : ["alarm"], firstCol : SpellRitualTag, }], spellChanges : { "alarm" : { time : "11 min", changes : "I can cast this spell only as a ritual, thus its casting time is 10 minutes longer." } }, features : { "arcane lock" : { name : "Wards and Seals (level 3)", limfeaname : "Arcane Lock", minlevel : 3, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Wards and Seals (level 3)", spells : ["arcane lock"], selection : ["arcane lock"], firstCol : 'oncelr' }] } } }; // Greater Dragonmark feats FeatsList["greater dragonmark-ua"] = { name : "Greater Dragonmark", source : [["WGtE", 110], ["UA:D", 7]], descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase one ability score by 1, to a maximum of 20. The abilities available to you are based on your mark, as shown on the Greater Dragonmark Benefits table.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn a set of spells, each of which you can cast once without expending a spell slot or using a material component. The list of spells, the spellcasting ability for them, and the type of rest you must complete to regain the use of these spells are shown on the Greater Dragonmark Benefits table.", description : "Select the type of greater dragonmark using the square button on this feat line.\nMy Intuition Die increases with one step (for example d4 to d6), I gain spellcating abilities, and an increase to one ability score.", eval : function () { var raceTrait = What('Racial Traits'); if ((/my Intuition Die \(1d4\)/i).test(raceTrait)) { Value('Racial Traits', raceTrait.replace(/my Intuition Die \(1d4\)/i, 'my Intuition Die (1d6)')); }; }, removeeval : function () { var raceTrait = What('Racial Traits'); if ((/my Intuition Die \(1d6\)/i).test(raceTrait)) { Value('Racial Traits', raceTrait.replace(/my Intuition Die \(1d6\)/i, 'my Intuition Die (1d4)')); }; }, choices : ["Detection", "Finding", "Handling", "Healing", "Hospitality", "Making", "Passage", "Scribing", "Sentinel", "Shadow", "Storm", "Warding"], "detection" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Detection", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*detection).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Charisma or Intelligence score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells See Invisibility and True Seeing, each of which you can cast once without expending a spell slot or using a material component. Intelligence is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a long rest before you can do so again.", description : "My Intuition Die increases with one step (d4 to d6, for example). I can cast See Invisibility and True Seeing each once per long rest without using spell slots or requiring material components. Intelligence is my spellcasting ability for these. [+1 Charisma or Intelligence]", scorestxt : "+1 Charisma or Intelligence", spellcastingBonus : [{ name : "1\xD7 per long", spells : ["see invisibility", "true seeing"], selection : ["see invisibility", "true seeing"], spellcastingAbility : 4, firstCol : 'oncelr', times : 2 }], spellChanges : { "see invisibility" : { components : "V,S", compMaterial : "", changes : "Spells cast through my Greater Dragonmark don't require material components." }, "true seeing" : { components : "V,S", compMaterial : "", description : "1 willing crea gains truesight 120 ft; see through illusions, hidden doors, ethereal plane", changes : "Spells cast through my Greater Dragonmark don't require material components." } } }, "finding" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Finding", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*finding).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Dexterity, Strength, or Wisdom score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells Locate Creature and Find the Path, each of which you can cast once without expending a spell slot or using a material component. Wisdom is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a long rest before you can do so again.", description : "My Intuition Die increases with one step (d4 to d6, for example). I can cast Locate Creature and Find the Path each once per long rest without using spell slots or requiring material components. Wisdom is my spellcasting ability for these. [+1 " + (typePF ? "Strength, Dexterity, or Wisdom]" : "Str, Dex, or Wis]"), scorestxt : "+1 Strength, Dexterity, or Wisdom", spellcastingBonus : [{ name : "1\xD7 per long", spells : ["locate creature", "find the path"], selection : ["locate creature", "find the path"], spellcastingAbility : 5, firstCol : 'oncelr', times : 2 }], spellChanges : { "locate creature" : { components : "V,S", compMaterial : "", changes : "Spells cast through my Greater Dragonmark don't require material components." }, "find the path" : { components : "V,S", compMaterial : "", description : "Know the shortest route to a location I am familiar with and are on the same plane with", changes : "Spells cast through my Greater Dragonmark don't require material components." } } }, "handling" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Handling", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*handling).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Dexterity or Wisdom score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells Beast Sense and Dominate Beast, each of which you can cast once without expending a spell slot or using a material component. Wisdom is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a long rest before you can do so again.", description : "My Intuition Die increases with one step (d4 to d6, for example). I can cast Beast Sense and Dominate Beast each once per long rest without using spell slots or requiring material components. Wisdom is my spellcasting ability for these. [+1 Dexterity or Wisdom]", scorestxt : "+1 Dexterity or Wisdom", spellcastingBonus : [{ name : "1\xD7 per long", spells : ["beast sense", "dominate beast"], selection : ["beast sense", "dominate beast"], spellcastingAbility : 5, firstCol : 'oncelr', times : 2 }] }, "healing" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Healing", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*healing).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Dexterity or Wisdom score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells Mass Healing Word and Greater Restoration, each of which you can cast once without expending a spell slot or using a material component. Wisdom is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a long rest before you can do so again.", description : "My Intuition Die increases with one step (d4 to d6, for example). I can cast Mass Healing Word and Greater Restoration each once per long rest without using spell slots or requiring material components. Wisdom is my spellcasting ability for these. [+1 Dexterity or Wisdom]", scorestxt : "+1 Dexterity or Wisdom", spellcastingBonus : [{ name : "1\xD7 per long", spells : ["mass healing word", "greater restoration"], selection : ["mass healing word", "greater restoration"], spellcastingAbility : 5, firstCol : 'oncelr', times : 2 }], spellChanges : { "greater restoration" : { components : "V,S", compMaterial : "", description : "Reduce exhaustion or end charm, petrify, curse, stat or max HP reduction", changes : "Spells cast through my Greater Dragonmark don't require material components." } } }, "hospitality" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Hospitality", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*hospitality).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Dexterity or Charisma score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells Sanctuary and Mordenkainen's Magnificent Mansion, each of which you can cast once without expending a spell slot or using a material component. Charisma is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a long rest before you can do so again.", description : "My Intuition Die increases with one step (d4 to d6, for example). I can cast Sanctuary and " + (typePF ? "Mordenkainen's " : "") + "Magnificent Mansion each once per long rest without using spell slots or requiring material components. Charisma is my spellcasting ability for these. [+1 Dexterity or Charisma]", scorestxt : "+1 Dexterity or Charisma", spellcastingBonus : [{ name : "1\xD7 per long", spells : ["sanctuary", "mordenkainen's magnificent mansion"], selection : ["sanctuary", "mordenkainen's magnificent mansion"], spellcastingAbility : 6, firstCol : 'oncelr', times : 2 }], spellChanges : { "sanctuary" : { components : "V,S", compMaterial : "", changes : "Spells cast through my Greater Dragonmark don't require material components." }, "mordenkainen's magnificent mansion" : { components : "V,S", compMaterial : "", description : "Create extradimensional mansion with rooms, food and servants to serve 100 people; see book", changes : "Spells cast through my Greater Dragonmark don't require material components." } } }, "making" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Making", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*making).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Dexterity or Intelligence score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells Fabricate and Creation, each of which you can cast once without expending a spell slot or using a material component. Intelligence is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a long rest before you can do so again.", description : "My Intuition Die increases with one step (d4 to d6, for example). I can cast Fabricate and Creation each once per long rest without using spell slots or requiring material components. Intelligence is my spellcasting ability for these. [+1 Dexterity or Intelligence]", scorestxt : "+1 Dexterity or Intelligence", spellcastingBonus : [{ name : "1\xD7 per long", spells : ["fabricate", "creation"], selection : ["fabricate", "creation"], spellcastingAbility : 4, firstCol : 'oncelr', times : 2 }], spellChanges : { "creation" : { components : "V,S", compMaterial : "", changes : "Spells cast through my Greater Dragonmark don't require material components." } } }, "passage" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Passage", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*passage).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Dexterity or Constitution score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells Blink and Teleportation Circle, each of which you can cast once without expending a spell slot or using a material component. Constitution is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a long rest before you can do so again.", description : "My Intuition Die increases with one step (d4 to d6, for example). I can cast Blink and Teleportation Circle each once per long rest without using spell slots or requiring material components. Constitution is my spellcasting ability for these. [+1 Dexterity or Constitution]", scorestxt : "+1 Dexterity or Constitution", spellcastingBonus : [{ name : "1\xD7 per long", spells : ["blink", "teleportation circle"], selection : ["blink", "teleportation circle"], spellcastingAbility : 3, firstCol : 'oncelr', times : 2 }], spellChanges : { "teleportation circle" : { components : "V,S", compMaterial : "", description : "Create a circle to teleport to another teleportation circle on same plane; see book", changes : "Spells cast through my Greater Dragonmark don't require material components." } } }, "scribing" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Scribing", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*scribing).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Intelligence or Charisma score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells Sending and Tongues, each of which you can cast once without expending a spell slot or using a material component. Intelligence is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a short or long rest before you can do so again.", description : "My Intuition Die increases with one step (d4 to d6, for example). I can cast Sending and Tongues each once per short rest without using spell slots or requiring material components. Intelligence is my spellcasting ability for these. [+1 Intelligence or Charisma]", scorestxt : "+1 Intelligence or Charisma", spellcastingBonus : [{ name : "1\xD7 per short", spells : ["sending", "tongues"], selection : ["sending", "tongues"], spellcastingAbility : 4, firstCol : 'oncesr', times : 2 }], spellChanges : { "sending" : { components : "V,S", compMaterial : "", changes : "Spells cast through my Greater Dragonmark don't require material components." }, "tongues" : { components : "V,S", compMaterial : "", changes : "Spells cast through my Greater Dragonmark don't require material components." } } }, "sentinel" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Sentinel", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*sentinel).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Strength or Wisdom score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells Compelled Duel, Warding Bond, each of which you can cast once without expending a spell slot or using a material component. Wisdom is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a short or long rest before you can do so again.", description : "My Intuition Die increases with one step (d4 to d6, for example). I can cast Compelled Duel and Warding Bond each once per short rest without using spell slots or requiring material components. Wisdom is my spellcasting ability for these. [+1 Strength or Wisdom]", scorestxt : "+1 Strength or Wisdom", spellcastingBonus : [{ name : "1\xD7 per short", spells : ["compelled duel", "warding bond"], selection : ["compelled duel", "warding bond"], spellcastingAbility : 5, firstCol : 'oncesr', times : 2 }], spellChanges : { "warding bond" : { components : "V,S", compMaterial : "", description : "1 crea +1 AC, +1 saves, resistance all dmg; if it takes dmg I take same dmg; ends if >60 ft away", changes : "Spells cast through my Greater Dragonmark don't require material components." } } }, "shadow" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Shadow", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*shadow).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Dexterity or Charisma score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells Nondetection and Mislead, each of which you can cast once without expending a spell slot or using a material component. Charisma is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a long rest before you can do so again.", description : "My Intuition Die increases with one step (d4 to d6, for example). I can cast Nondetection and Mislead each once per long rest without using spell slots or requiring material components. Charisma is my spellcasting ability for these. [+1 Dexterity or Charisma]", scorestxt : "+1 Dexterity or Charisma", spellcastingBonus : [{ name : "1\xD7 per long", spells : ["nondetection", "mislead"], selection : ["nondetection", "mislead"], spellcastingAbility : 6, firstCol : 'oncelr', times : 2 }], spellChanges : { "nondetection" : { components : "V,S", compMaterial : "", description : "1 crea or object up to 10 cu ft hidden from all divination magic", changes : "Spells cast through my Greater Dragonmark don't require material components." } } }, "storm" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Storm", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*storm).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Dexterity or Charisma score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells Control Water and Control Winds, each of which you can cast once without expending a spell slot or using a material component. Charisma is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a long rest before you can do so again.", description : "My Intuition Die increases with one step (d4 to d6, for example). I can cast Control Water and Control Winds each once per long rest without using spell slots or requiring material components. Charisma is my spellcasting ability for these. [+1 Dexterity or Charisma]", scorestxt : "+1 Dexterity or Charisma", spellcastingBonus : [{ name : "1\xD7 per long", spells : ["control water", "control winds"], selection : ["control water", "control winds"], spellcastingAbility : 6, firstCol : 'oncelr', times : 2 }], spellChanges : { "control water" : { components : "V,S", compMaterial : "", changes : "Spells cast through my Greater Dragonmark don't require material components." } } }, "warding" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Warding", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*warding).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Dexterity or Intelligence score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells Knock, Glyph of Warding and Leomund's Secret Chest*, each of which you can cast once without expending a spell slot or using a material component. Intelligence is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a long rest before you can do so again.\n\n* To cast Leomund's Secret Chest using this feat, you must have a Siberys dragonshard with a value of at least 100 gp. While you have this dragonshard in hand, it serves as the spell's focus, and you can use it to summon and dismiss the chest.", description : "My Intuition Die increases one step. I can cast Knock, Secret Chest, and Glyph of Warding each once per long rest without spell slot or material component. Secret Chest requires a 100 gp Siberys dragonshard as a focus. These use Int as spellcasting ability. [+1 Dex or Int]", scorestxt : "+1 Dexterity or Intelligence", spellcastingBonus : [{ name : "1\xD7 per long", spells : ["knock", "glyph of warding"], selection : ["knock", "glyph of warding"], spellcastingAbility : 4, firstCol : 'oncelr', times : 2 }, { name : "with Siberys dragonshard", spells : ["leomund's secret chest"], selection : ["leomund's secret chest"], firstCol : 'oncelr' }], spellChanges : { "glyph of warding" : { components : "V,S", compMaterial : "", description : "Create a glyph that triggers on set condition; Int(Investigation) vs. Spell DC; see book", changes : "Spells cast through my Greater Dragonmark don't require material components." }, "leomund's secret chest" : { compMaterial : "A Siberys dragonshard with a value of at least 100 gp", description : "Hide chest with content in Ethereal Plane for 60 days, after that chance of loss; 1 a reappear (100gp)", changes : "Leomund's Secret Chest cast through my Greater Dragonmark of Warding requires a Siberys dragonshard as a focus instead of an exquisite chest and its tiny replica." } } } }; // Aberrant Dragonmark feat FeatsList["aberrant dragonmark-ua"] = { name : "Aberrant Dragonmark", source : [["WGtE", 112], ["UA:D", 9]], prerequisite : "Not having a dragonmark", prereqeval : function(v) { return !(/dragonmark/i).test(CurrentRace.known); }, descriptionFull : "You have manifested an aberrant dragonmark. Determine its appearance and the flaw associated with it (see the table below for examples). You gain the following benefits:\n \u2022 Increase your Constitution score by 1, to a maximum of 20.\n \u2022 You learn a cantrip from the sorcerer spell list. In addition, choose a 1st-level spell from the sorcerer spell list. You learn that spell and can cast it at its lowest level. Once you cast it, you must finish a long rest before you can cast it again. Constitution is your spellcasting ability for these spells.\n \u2022 You can increase the power of your aberrant spells at the risk of your own vitality. When you cast a spell with your aberrant mark, you can use one of your Hit Dice to increase the spell's level by 1. Immediately after you cast the spell, roll the Hit Die. You take damage equal to the number rolled.\n\n" + toUni("1d8") + "\t" + toUni("Aberrant Mark Flaw") + "\n1\tYour mark is a source of constant physical pain.\n2\tYour mark whispers to you, though you may not understand what it says.\n3\tIn times of stress, your mark may trigger a cantrip effect involuntarily.\n4\tThe skin around your mark has an unusual appearance: burned, scaly, withered, etc.\n5\tMundane animals become uneasy around you.\n6\tYou have dramatic mood swings any time you use your mark.\n7\tYour appearance changes in a minor way every time you use your mark.\n8\tYou have horrific nightmares after you use your mark.", description : "I learn a sorcerer cantrip and a 1st-level sorcerer spell, using Con as my spellcasting ability. I can cast the spell once per long rest without a spell slot. I can use a Hit Die when casting the spell, casting it as if with a level 2 spell slot and taking the HD as damage. [+1 Con]", scores : [0, 0, 1, 0, 0, 0], spellcastingAbility : 3, spellcastingBonus : [{ name : "Sorcerer cantrip", 'class' : 'sorcerer', level : [0, 0], firstCol : 'atwill' }, { name : "Sorcerer 1st-level spell", 'class' : 'sorcerer', level : [1, 1], firstCol : 'oncelr' }] }; } // Gust cantrip reprint if (!SpellsList["gust"]) { SpellsList["gust"] = { name : "Gust", classes : ["druid", "sorcerer", "wizard"], source : [["X", 157], ["E", 19], ["E:RLW", 50], ["UA:D", 6], ["WGtE", 107]], level : 0, school : "Trans", time : "1 a", range : "30 ft", components : "V,S", duration : "Instantaneous", save : "Str", description : "Med. or smaller crea save or push 5 ft; or push unattended 5 lb obj 10 ft; or harmless sensory effect", descriptionFull : "You seize the air and compel it to create one of the following effects at a point you can see within range." + "\n " + "\u2022 One Medium or smaller creature that you choose must succeed on a Strength saving throw or be pushed up to 5 feet away from you." + "\n " + "\u2022 You create a small blast of air capable of moving one object that is neither held nor carried and that weighs no more than 5 pounds. The object is pushed up to 10 feet away from you. It isn't pushed with enough force to cause damage." + "\n " + "\u2022 You create a harmless sensory affect using air, such as causing leaves to rustle, wind to slam shutters shut, or your clothing to ripple in a breeze." }; } // Magic Items if (!SourceList["UA:MIoE"]) { // Duplicates from Eberron: Rising from the Last War if (!SourceList["E:RLW"]) { MagicItemsList["cleansing stone"] = { name : "Cleansing Stone", source : [["E:RLW", 276], ["WGtE", 115], ["UA:MIoE", 2]], type : "wondrous item", rarity : "common", description : "This stone sphere is 1 ft in diameter and engraved with mystic sigils. As an action while touching it, I can activate it to remove dirt and grime from my garments and my person.", descriptionFull : "A cleansing stone is a stone sphere one foot in diameter, engraved with mystic sigils. When touching the stone, you can use an action to activate it and remove dirt and grime from your garments and your person. Cleansing stones are often embedded into pedestals in public squares in Aundair or found in high-end Ghallanda inns.", action : [["action", ""]], weight : 88 // using average marble/limestone density of 2.711 g/cm3 } MagicItemsList["everbright lantern"] = { name : "Everbright Lantern", source : [["E:RLW", 277], ["WGtE", 115], ["UA:MIoE", 2]], type : "wondrous item", rarity : "common", description : "This bullseye lantern is powered by a dragonshard imbued with the effect of a Continual Flame spell. The light never goes out, but it can be shuttered off. It casts bright light in a 60-ft cone and dim light for an additional 60 ft.", descriptionFull : "An everbright lantern contains an Eberron dragonshard imbued with the effect of a continual flame spell. This bright light is mounted inside a normal bullseye lantern, allowing the light to be shuttered off. An everbright lantern provides clear illumination in a 60-foot cone and shadowy illumination in a 120-foot cone, just like a mundane bullseye lantern, but its flame never goes out.", weight : 2 } MagicItemsList["imbued wood focus"] = { // Note that this item is implemented here against RAW, // because according to PHB page 203 a spellcasting focus can only be used for // spells with a material component that is neither costly nor consumed. // See also https://dnd.wizards.com/articles/sage-advice/rules-spellcasting // This would mean that the Imbued Wood Focus in only useful for a limited number of spells. // Instead, this code just applies the damage bonus to all damage spells that roll for their damage. name : "Imbued Wood Focus", source : [["E:RLW", 277], ["WGtE", 114], ["UA:MIoE", 1]], type : "wondrous item", rarity : "common", description : "This rod, wand, or staff is cut from a tree infused with extraplanar energy. I can use it as spellcasting focus for all my spells. If I do so, spells I cast that deal the associated damage type add a +1 bonus to one of their damage rolls.", descriptionFull : "An imbued wood focus is a rod, staff, or wand cut from a tree infused with extraplanar energy. If you're a spell­caster, you can use this orb as a spellcasting focus.\n When you cast a damage-dealing spell using this item as your spellcasting focus, you gain a +1 bonus to one damage roll of the spell, provided the damage is of the type associated with the item's wood. The types of wood and their associated damage types are listed in the table below.\n\n" + toUni("Wood\t\t\tDamage Type") + "\nFernian Ash\t\tFire\nIrian Rosewood\t\tRadiant\nKythrian Manchineel \tAcid or Poison\nLamannian Oak\t\tLightning or Thunder\nMabaran Ebony\t\tNecrotic\nRisian Pine\t\tCold\nShavarran Birch\t\tForce\nXorian Wenge\t\tPsychic", attunement : true, allowDuplicates : true, weight : 2, choices : ["Fernian Ash (fire)", "Irian Rosewood (radiant)", "Kythrian Manchineel (acid and poison)", "Lamannian Oak (lightning and thunder)", "Mabaran Ebony (necrotic)", "Risian Pine (cold)", "Shavarran Birch (force)", "Xorian Wenge (psychic)"], "fernian ash (fire)" : { name : "Fernian Ash Rod, Wand, or Staff", sortname : "Imbued Wood Focus, Fernian Ash (fire)", nameTest : /^(?=.*fernian)(?=.*ash)(?=.*(rod|wand|staff)).*$/i, description : "This rod, wand, or staff made of Fernian ash, wood infused with extraplanar energy. I can use it as spellcasting focus for all my spells. If I do so, spells I cast that deal fire damage add a +1 bonus to one of their damage rolls.", calcChanges : { atkCalc : [ function (fields, v, output) { if (v.thisWeapon[3] && (/fire/i).test(fields.Damage_Type)) output.extraDmg += 1; }, "When I use this as my spellcasting focus, spells I cast that deal fire damage get a +1 bonus added to one of their damage rolls." ], spellAdd : [ function (spellKey, spellObj, spName) { if (!spellObj.psionic) return genericSpellDmgEdit(spellKey, spellObj, "fire", 1, true, true); }, "When I use this as my spellcasting focus, spells I cast that deal fire damage get a +1 bonus added to one of their damage rolls." ] } }, "irian rosewood (radiant)" : { name : "Irian Rosewood Rod, Wand, or Staff", sortname : "Imbued Wood Focus, Irian Rosewood (radiant)", nameTest : /^(?=.*irian)(?=.*rosewood)(?=.*(rod|wand|staff)).*$/i, description : "This rod, wand, or staff made of Irian rosewood, wood infused with extraplanar energy. I can use it as spellcasting focus for all my spells. If I do so, spells I cast that deal radiant damage add a +1 bonus to one of their damage rolls.", calcChanges : { atkCalc : [ function (fields, v, output) { if (v.thisWeapon[3] && (/radiant/i).test(fields.Damage_Type)) output.extraDmg += 1; }, "When I use this as my spellcasting focus, spells I cast that deal radiant damage get a +1 bonus added to one of their damage rolls." ], spellAdd : [ function (spellKey, spellObj, spName) { if (!spellObj.psionic) return genericSpellDmgEdit(spellKey, spellObj, "radiant", 1, true, true); }, "When I use this as my spellcasting focus, spells I cast that deal radiant damage get a +1 bonus added to one of their damage rolls." ] } }, "kythrian manchineel (acid and poison)" : { name : "Kythrian Manchineel Rod, Wand, or Staff", sortname : "Imbued Wood Focus, Kythrian Manchineel (acid and poison)", nameTest : /^(?=.*kythrian)(?=.*manchineel)(?=.*(rod|wand|staff)).*$/i, description : "This rod, wand, or staff made of Kythrian manchineel, wood infused with extraplanar energy. I can use it as spellcasting focus for all my spells. If I do so, spells I cast that deal acid or poison damage add a +1 bonus to one of their damage rolls.", calcChanges : { atkCalc : [ function (fields, v, output) { if (v.thisWeapon[3] && (/acid|poison/i).test(fields.Damage_Type)) output.extraDmg += 1; }, "When I use this as my spellcasting focus, spells I cast that deal acid or poison damage get a +1 bonus added to one of their damage rolls." ], spellAdd : [ function (spellKey, spellObj, spName) { if (!spellObj.psionic) return genericSpellDmgEdit(spellKey, spellObj, "acid|poison", 1, true, true); }, "When I use this as my spellcasting focus, spells I cast that deal acid or poison damage get a +1 bonus added to one of their damage rolls." ] } }, "lamannian oak (lightning and thunder)" : { name : "Lamannian Oak Rod, Wand, or Staff", sortname : "Imbued Wood Focus, Lamannian Oak (lightning and thunder)", nameTest : /^(?=.*lamannian)(?=.*oak)(?=.*(rod|wand|staff)).*$/i, description : "This rod, wand, or staff made of Lamannian oak, wood infused with extraplanar energy. I can use it as spellcasting focus for all my spells. If I do so, spells I cast that deal lightning or thunder damage add a +1 bonus to one of their damage rolls.", calcChanges : { atkCalc : [ function (fields, v, output) { if (v.thisWeapon[3] && (/lightning|thunder/i).test(fields.Damage_Type)) output.extraDmg += 1; }, "When I use this as my spellcasting focus, spells I cast that deal lightning or thunder damage get a +1 bonus added to one of their damage rolls." ], spellAdd : [ function (spellKey, spellObj, spName) { if (!spellObj.psionic) return genericSpellDmgEdit(spellKey, spellObj, "lightning|thunder", 1, true, true); }, "When I use this as my spellcasting focus, spells I cast that deal lightning or thunder damage get a +1 bonus added to one of their damage rolls." ] } }, "mabaran ebony (necrotic)" : { name : "Mabaran Ebony Rod, Wand, or Staff", sortname : "Imbued Wood Focus, Mabaran Ebony (necrotic)", nameTest : /^(?=.*mabaran)(?=.*ebony)(?=.*(rod|wand|staff)).*$/i, description : "This rod, wand, or staff made of Mabaran ebony, wood infused with extraplanar energy. I can use it as spellcasting focus for all my spells. If I do so, spells I cast that deal necrotic damage add a +1 bonus to one of their damage rolls.", calcChanges : { atkCalc : [ function (fields, v, output) { if (v.thisWeapon[3] && (/necrotic/i).test(fields.Damage_Type)) output.extraDmg += 1; }, "When I use this as my spellcasting focus, spells I cast that deal necrotic damage get a +1 bonus added to one of their damage rolls." ], spellAdd : [ function (spellKey, spellObj, spName) { if (!spellObj.psionic) return genericSpellDmgEdit(spellKey, spellObj, "necro\\.?|necrotic", 1, true, true); }, "When I use this as my spellcasting focus, spells I cast that deal necrotic damage get a +1 bonus added to one of their damage rolls." ] } }, "risian pine (cold)" : { name : "Risian Pine Rod, Wand, or Staff", sortname : "Imbued Wood Focus, Risian Pine (cold)", nameTest : /^(?=.*risian)(?=.*pine)(?=.*(rod|wand|staff)).*$/i, description : "This rod, wand, or staff made of Risian pine, wood infused with extraplanar energy. I can use it as spellcasting focus for all my spells. If I do so, spells I cast that deal cold damage add a +1 bonus to one of their damage rolls.", calcChanges : { atkCalc : [ function (fields, v, output) { if (v.thisWeapon[3] && (/cold/i).test(fields.Damage_Type)) output.extraDmg += 1; }, "When I use this as my spellcasting focus, spells I cast that deal cold damage get a +1 bonus added to one of their damage rolls." ], spellAdd : [ function (spellKey, spellObj, spName) { if (!spellObj.psionic) return genericSpellDmgEdit(spellKey, spellObj, "cold", 1, true, true); }, "When I use this as my spellcasting focus, spells I cast that deal cold damage get a +1 bonus added to one of their damage rolls." ] } }, "shavarran birch (force)" : { name : "Shavarran Birch Rod, Wand, or Staff", sortname : "Imbued Wood Focus, Shavarran Birch (force)", nameTest : /^(?=.*shavarran)(?=.*birch)(?=.*(rod|wand|staff)).*$/i, description : "This rod, wand, or staff made of Shavarran birch, wood infused with extraplanar energy. I can use it as spellcasting focus for all my spells. If I do so, spells I cast that deal force damage add a +1 bonus to one of their damage rolls.", calcChanges : { atkAdd : [ function (fields, v) { if (v.thisWeapon[3] && v.thisWeapon[3] == "eldritch blast") { fields.Description += (fields.Description ? '; ' : '') + "One ray +1 dmg"; } }, "When I use this as my spellcasting focus, spells I cast that deal force damage get a +1 bonus added to one of their damage rolls." ], atkCalc : [ function (fields, v, output) { if (v.thisWeapon[3] && v.thisWeapon[3] != "eldritch blast" && (/force/i).test(fields.Damage_Type)) output.extraDmg += 1; } ], spellAdd : [ function (spellKey, spellObj, spName) { if (!spellObj.psionic) return genericSpellDmgEdit(spellKey, spellObj, "force", 1, true, true); }, "When I use this as my spellcasting focus, spells I cast that deal force damage get a +1 bonus added to one of their damage rolls." ] } }, "xorian wenge (psychic)" : { name : "Xorian Wenge Rod, Wand, or Staff", sortname : "Imbued Wood Focus, Xorian Wenge (psychic)", nameTest : /^(?=.*xorian)(?=.*wenge)(?=.*(rod|wand|staff)).*$/i, description : "This rod, wand, or staff made of Xorian wenge, wood infused with extraplanar energy. I can use it as spellcasting focus for all my spells. If I do so, spells I cast that deal psychic damage add a +1 bonus to one of their damage rolls.", calcChanges : { atkCalc : [ function (fields, v, output) { if (v.thisWeapon[3] && (/psychic/i).test(fields.Damage_Type)) output.extraDmg += 1; }, "When I use this as my spellcasting focus, spells I cast that deal psychic damage get a +1 bonus added to one of their damage rolls." ], spellAdd : [ function (spellKey, spellObj, spName) { if (!spellObj.psionic) return genericSpellDmgEdit(spellKey, spellObj, "psychic", 1, true, true); }, "When I use this as my spellcasting focus, spells I cast that deal psychic damage get a +1 bonus added to one of their damage rolls." ] } } } MagicItemsList["orb of shielding"] = { name : "Orb of Shielding", source : [["E:RLW", 278], ["WGtE", 114], ["UA:MIoE", 1]], type : "wondrous item", rarity : "common", description : "An orb of shielding is made from crystal or stone aligned to one of the planes. I can use it as my spellcasting focus. While I am holding the orb and take damage of the type associated with the material the orb is made from, I can use my reaction to reduce the damage by 1d4 (to a minimum of 0).", descriptionFull : "An orb of shielding is made from crystal or stone aligned to one of the planes. While you are holding the orb and take damage of the type associated with the material your orb is made from, you can use your reaction to reduce the damage by 1d4. The materials and their associated damage types are listed below.\n" + "\n \u2022 Fernian basalt: Fire damage" + "\n \u2022 Irian quartz: Radiant damage" + "\n \u2022 Kythrian skarn: Acid or poison damage" + "\n \u2022 Lamannian flint: Lightning or thunder damage" + "\n \u2022 Mabaran obsidian: Necrotic damage" + "\n \u2022 Quori celestine, Xorian marble: Psychic damage" + "\n \u2022 Risian shale: Cold damage" + "\n \u2022 Shavaran chert: Force damage", attunement : true, allowDuplicates : true, weight : 3, action : [["reaction", ""]], choices : ["Fernian Basalt (fire)", "Irian Quartz (radiant)", "Kythrian Skarn (acid or poison)", "Lamannian Flint (lightning or thunder)", "Mabaran Obsidian (necrotic)", "Quori Celestine (psychic)", "Risian Shale (cold)", "Shavaran Chert (force)", "Xorian Marble (psychic)"], "fernian basalt (fire)" : { name : "Orb of Shielding [Fernian Basalt]", description : "This stone orb is made from fernian basalt. I can use it as my spellcasting focus. As a reaction while I am holding the orb and take fire damage, I can reduce the damage by 1d4 (to a minimum of 0)." }, "irian quartz (radiant)" : { name : "Orb of Shielding [Irian Quartz]", description : "This crystal orb is made from irian quartz. I can use it as my spellcasting focus. As a reaction while I am holding the orb and take radiant damage, I can reduce the damage by 1d4 (to a minimum of 0)." }, "kythrian skarn (acid or poison)" : { name : "Orb of Shielding [Kythrian Skarn]", description : "This stone orb is made from kythrian skarn. I can use it as my spellcasting focus. As a reaction while I am holding the orb and take acid or poison damage, I can reduce the damage by 1d4 (to a minimum of 0)." }, "lamannian flint (lightning or thunder)" : { name : "Orb of Shielding [Lamannian Flint]", description : "This stone orb is made from lamannian flint. I can use it as my spellcasting focus. As a reaction while I am holding the orb and take lightning or thunder damage, I can reduce the damage by 1d4 (to a minimum of 0)." }, "mabaran obsidian (necrotic)" : { name : "Orb of Shielding [Mabaran Obsidian]", description : "This crystal orb is made from mabaran obsidian. I can use it as my spellcasting focus. As a reaction while I am holding the orb and take necrotic damage, I can reduce the damage by 1d4 (to a minimum of 0)." }, "quori celestine (psychic)" : { name : "Orb of Shielding [Quori Celestine]", description : "This crystal orb is made from quori celestine. I can use it as my spellcasting focus. As a reaction while I am holding the orb and take psychic damage, I can reduce the damage by 1d4 (to a minimum of 0)." }, "risian shale (cold)" : { name : "Orb of Shielding [Risian Shale]", description : "This stone orb is made from risian shale. I can use it as my spellcasting focus. As a reaction while I am holding the orb and take cold damage, I can reduce the damage by 1d4 (to a minimum of 0)." }, "shavaran chert (force)" : { name : "Orb of Shielding [Shavaran Chert]", description : "This stone orb is made from shavaran chert. I can use it as my spellcasting focus. As a reaction while I am holding the orb and take force damage, I can reduce the damage by 1d4 (to a minimum of 0)." }, "xorian marble (psychic)" : { name : "Orb of Shielding [Xorian Marble]", description : "This stone orb is made from xorian marble. I can use it as my spellcasting focus. As a reaction while I am holding the orb and take psychic damage, I can reduce the damage by 1d4 (to a minimum of 0)." } } MagicItemsList["spellshard"] = { name : "Spellshard", source : [["E:RLW", 279], ["WGtE", 115], ["UA:MIoE", 3]], type : "wondrous item", description : "This dragonshard is imbued with a text. By concentrating while holding it, I can see its pages in my mind's eye and it will draw me to the right section if I think of a topic. I can add content to it with a simple ritual and can use it as a wizard's spellbook, costing 1 gp per \"page\" I add to the shard.", allowDuplicates : true, choices : ["normal", "advanced"], "normal" : { name : "Spellshard ", allowDuplicates : true, rarity : "common", description : "This dragonshard is imbued with a work of literature. By holding it and concentrating, I can see its pages in my mind's eye and it will draw me to the right section if I think of a topic. I can add content to it with a simple ritual and can use it as a wizard's spellbook, costing 1 gp per \"page\" I add to the shard.", descriptionLong : "This polished dragonshard fits into the palm of my hand. It is imbued with a particular work of literature. By holding it and concentrating, I can see its pages in my mind's eye. Thinking of a particular phrase or topic will draw me to the first section that addresses it. I can add content to it with a simple ritual, allowing me to use it as a wizard's spellbook costing 1 gp per \"page\" in the shard, but otherwise functions as a mundane spellbook. Spellshards can also be used as diaries or journals." }, "advanced" : { name : "Advanced Spellshard", allowDuplicates : true, rarity : "uncommon", description : "This dragonshard is imbued with a text. By concentrating and speaking the passphrase, I can see its pages in my mind's eye and it will draw me to the right section if I think of a topic. I can add content to it with a simple ritual and can use it as a wizard's spellbook, costing 1 gp per \"page\" I add to the shard.", descriptionLong : "This polished dragonshard fits into the palm of my hand. It is imbued with a particular work of literature. By holding it, concentrating, and speaking its passphrase, I can see its pages in my mind's eye. Thinking of a particular phrase or topic will draw me to the first section that addresses it. I can add content to it with a simple ritual, allowing me to use it as a wizard's spellbook costing 1 gp per \"page\" in the shard, but otherwise functions as a mundane spellbook. Spellshards can also be used as diaries or journals." } } } // Different or not available in Eberron: Rising from the Last War MagicItemsList["band of loyalty-ua"] = { name : "Band of Loyalty", source : [["WGtE", 115], ["UA:MIoE", 2]], type : "ring", rarity : "common", description : "If I'm reduced to zero hit points while attuned to this ring, I instantly die. These rings are favored by spies who can't afford to fall into enemy hands.", descriptionFull : "If you are reduced to zero hit points while attuned to a band of loyalty, you instantly die. These rings are favored by spies who can't afford to fall into enemy hands.", attunement : true } var ERftLW_docentFullDescription = [ "A docent is a small metal sphere, approximately 2 inches across, studded with dragonshards. Despite a strong magical aura, it has no obvious abilities. When you attune to a docent, the sphere becomes embedded in your chest and comes to life\u2014literally.", ">>Sentience<<. A docent is a sentient neutral item with an Intelligence of 16, a Wisdom of 14, and a Charisma of 14. It can perceive the world through your senses.", "A docent communicates telepathically with its wielder and can speak, read, and understand Common and Giant.", ">>Personality<<. A docent is designed to advise and assist the warforged it's attached to. One of the simple functions of a docent is to serve as a translator. The docent's properties are under its control, and if you have a bad relationship with your docent it may refuse to assist you… or simply lie about information that it obtains. However, if you treat your docent well it could serve as a useful ally.", "The origin of docents is a great mystery. House Cannith created the first warforged thirty years ago. But the docents come from the distant land of Xen'drik and appear to be thousands of years old. Were they created to interface with some other form of construct? Or are the modern warforged a new interpretation of an ancient design? The docents claim to have forgotten their creators… but this is a mystery waiting to be unraveled. While all docents come from Xen'drik, some have been brought to Khorvaire by explorers and it's possible to encounter them in the Five Nations.", ">>Languages<<. All docents understand Common and Giant, but a docent knows up to four additional languages. Elvish and Draconic are common options. If a docent knows less than six languages in total, it can add new languages to its repertoire after encountering them. So a docent found in Xen'drik may have never encountered a dwarf before… but after spending some time in Khorvaire studying dwarves, it could pick up the Dwarvish language.", ">>Properties<<. A docent possesses up to three of the following properties:", "\u2022 The docent can cast the detect magic spell at will.", "\u2022 The docent can cast the detect evil and good spell at will.", "\u2022 The docent can detect any form of divination or scrying targeting it and its warforged host.", "\u2022 The docent has a +7 bonus to Intelligence (Arcana) checks.", "\u2022 The docent has a +7 bonus to Intelligence (History) checks.", "\u2022 The docent has a +7 bonus to Intelligence (Investigation) checks.", "\u2022 The docent has a +7 bonus to Intelligence (Nature) checks.", "\u2022 The docent has a +6 bonus to Wisdom (Insight) checks.", "\u2022 The docent has a +6 bonus to Wisdom (Perception) checks.", "\u2022 The docent has a +6 bonus to Wisdom (Medicine) checks targeting its warforged host. If the host is rendered unconscious, the docent will automatically attempt to stabilize them once each turn.", "You can use a bonus action on your turn to request that the docent use one of its properties on your behalf." ]; MagicItemsList["docent-ua"] = { name : "Docent", source : [["WGtE", 121], ["UA:MIoE", 3]], type : "wondrous item", rarity : "rare", description : "I can embed this sentient small metal sphere studded with dragonshards into my chest. I can communicate telepathically with it. It can serve me as an advisor and a translator, as it knowns 6 languages. It also knows spells and/or skills that I can have it use as a bonus action. See Notes page.", descriptionFull : ERftLW_docentFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)<>Hurling<<. The battleaxe has 3 charges. You can expend 1 charge and make a ranged attack with the axe, hurling it as if it had the thrown property with a normal range of 60 feet and a long range of 180 feet. Whether it hits or misses, the axe flies back to you at the end of the current turn, landing in your open hand or at your feet in your space (as you choose). The axe regains all expended charges daily at dawn.", ">>Illumination<<. While holding the axe, you can use an action to cause the axe to glow blue or to quench the glow. This glow sheds bright light in a 30-foot radius and dim light for an additional 30 feet.", ">>Sentience<<. Azuredge is a sentient lawful neutral weapon with an Intelligence of 12, a Wisdom of 15, and a Charisma of 15. It has hearing and darkvision out to a range of 120 feet.", "The weapon communicates telepathically with its wielder and can speak, read, and understand Common. It has a calm, delicate voice. The weapon can sense the presence of non-lawful creatures within 120 feet of it.", ">>Personality<<. Azuredge is sworn to protect Waterdeep, and it desires to be wielded by a law-abiding person willing to dedicate everything to the city's defense. The weapon is patient and takes its time finding its ideal wielder.", "If someone tries to use Azuredge against its will, the axe can become ten times heavier than normal, and can magically adhere to any Medium or larger object or surface it comes into contact with. Once it does so, the axe can't be wielded. Nothing short of a Wish spell can separate the axe from the item or surface to which it is adhered without destroying one or the other, though the axe can choose to end the effect at any time." ]; MagicItemsList["azuredge"] = { name : "Azuredge", source : [["WDH", 189]], type : "weapon (battleaxe)", rarity : "legendary", storyItemAL : true, description : "This battleaxe is sentient, adds +3 to hit and damage, and deals +2d6 radiant damage vs. fiends/undead. As an action, I can stop or start its glow of bright light in a 30-ft radius and dim light for another 30 ft. It has 3 charges, regaining all at dawn, which can be used to throw it, after which it returns to my hand. See Notes.", descriptionFull : WDH_azuredgeFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)<>Power Strike<<. When you hit with a melee attack using the staff, you can expend 1 charge to deal an extra 1d6 force damage to the target.\n >>Spells<<. While holding this staff, you can use an action to expend 1 or more of its charges to cast one of the following spells from it, using your spell save DC and spell attack bonus: Cone of Cold (5 charges), Fireball (5th-level version, 5 charges), Globe of Invulnerability (6 charges), Hold Monster (5 charges), Levitate (2 charges). Lightning Bolt (5th-level version, 5 charges), Magic Missile (1 charge), Ray of Enfeeblement (1 charge), or Wall of Force (5 charges).\n >>Retributive Strike<<. You can use an action to break the staff over your knee or against a solid surface, performing a retributive strike. The staff is destroyed and releases its remaining magic in an explosion that expands to fill a 30-foot-radius sphere centered on it.\n You have a 50% chance to instantly travel to a random plane of existence, avoiding the explosion. If you fail to avoid the effect, you take force damage equal to 16 \xD7 the number of charges in the staff. Every other creature in the area must make a DC 17 Dexterity saving throw. On a failed save, a creature takes an amount of damage based on how far away it is from the point of origin, as shown in the following table. On a successful save, a creature takes half as much damage.\n\n>>Distance from Origin\tEffect<<\n10 ft. away or closer\t8 \xD7 the number of charges in the staff\n11 to 20 ft. away\t6 \xD7 the number of charges in the staff\n21 to 30 ft. away\t4 \xD7 the number of charges in the staff\n\n\n >>Animate Walking Statues<<. You can expend 1 or more of the staff's charges as an action to animate or deactivate one or more of the walking statues of Waterdeep. You must be in the city to use this property, and you can animate or deactivate one statue for each charge expended. An animated statue obeys the telepathic commands of Khelben Arunsun's spirit, which is trapped inside the staff (see \"Personality\" below). A walking statue becomes inanimate if deactivated or if the staff is broken.\n >>Dispel Magic<<. You can expend 1 of the staff's charges as a bonus action to cast Dispel Magic on a creature, an object, or a magical effect that you touch with the tip of the staff. If the target is an unwilling creature or an object in the possession of such a creature, you must hit the creature with a melee attack using the Blackstaff before you can expend the charge to cast the spell.\n >>Drain Magic<<. This property affects only creatures that use spell slots. When you hit such a creature with a melee attack using the Blackstaff, you can expend 1 of the staff's charges as a bonus action, causing the target to expend one spell slot of the highest spell level it can cast without casting a spell. If the target has already expended all its spell slots, nothing happens. Spell slots that are expended in this fashion are regained when the target finishes a long rest, as normal.\n >>Master of Enchantment<<. When you cast an enchantment spell of 1st level or higher while holding the staff, you can make an Intelligence (Arcana) check with a DC of 10 + the level of the spell. If the check succeeds, you cast the spell without expending a spell slot.\n >>Sentience<<. The Blackstaff is a sentient staff of neutral alignment, with an Intelligence of 22, a Wisdom of 15, and a Charisma of 18. It has hearing and darkvision out to a range of 120 feet, and it can communicate telepathically with any creature that is holding it.\n >>Personality<<. The staff has the spirits of all previous Blackstaffs trapped within it. Its creator, Khelben Arunsun, is the dominant personality among them. Like Khelben, the staff is extremely devious and manipulative. It prefers to counsel its owner without exerting outright control. The staff's primary goal is to protect Waterdeep and its Open Lord, currently Laeral Silverhand. Its secondary goal is to help its wielder become more powerful.\n In the event that the holder of the office of the Blackstaff no longer serves the staff's wishes, the staff ceases to function until it finds a worthy inheritor\u2014someone whose loyalty to Waterdeep is beyond reproach.\n >>Spirit Trap<<. When the Blackstaff dies, the spirit of that individual becomes trapped in the staff along with the spirits of the previous Blackstaffs. (A Blackstaff whose spirit is trapped in the staff can't be raised from the dead.)\n Destroying the staff would release the spirits trapped inside it, but in that event, Khelben's spirit can lodge itself inside any one piece of the staff that remains. The piece containing Khelben's spirit has the staff's Sentience property but none of its other properties. As long as this piece of the staff exists, Khelben's spirit can make the staff whole again whenever he wishes. When the staff is remade, the spirits of the previous Blackstaffs become trapped inside it again."; if (MagicItemsList["staff of power"]) { MagicItemsList["blackstaff"] = { name : "Blackstaff", source : [["WDH", 190]], type : "staff", rarity : "legendary", storyItemAL : true, description : "This +2 quarterstaff gives me a +2 bonus on saves, AC, and spell attacks. It has 20 charges, regaining 2d8+4 at dawn, which can be used to cast spells, deal +1d6 force damage in melee, drain magic from a target hit in melee, or animate walking statues. It is sentient and has more features, see Notes page.", descriptionFull : WDH_blackstaffFullDescription.replace(/>>(.*?)<3", changes : "Can cast as a bonus action, but only on something touched by the staff. It might first require an attack by the staff to be able to cast it on" } }, toNotesPage : [{ name : "Features", note : "\n " + WDH_blackstaffFullDescription.replace(/>>(.*?)< 1; var hasBonus = How(aFld).indexOf(iTxt) !== -1; if (hasBonus !== addIt) { processMods( addIt, iName + " (magic item)", [{ type : "skill", field : aSkill, mod : 1, text : iTxt }] ); } } AddFeatureChoice(MagicItemsList["ioun stone"], false, "Supreme Intellect", { source : [["LLoK", 55]], rarity : "rare", magicItemTable : "G", description : "As an action, I can make this faceted sphere orbit my head at 1d3 ft or retrieve it. Others can catch it as an action with an attack or Acrobatics check (AC/DC 24). It has 10 HP and resistance to all damage. While it orbits my head, I gain a +1 bonus on Intelligence checks.", descriptionFull : "An Ioun stone is named after Ioun, a god of knowledge and prophecy revered on some worlds. Many types of Ioun stone exist, each type a distinct combination of shape and color.\n When you use an action to toss one of these stones into the air, the stone orbits your head at a distance of 1d3 feet and confers a benefit to you. Thereafter, another creature must use an action to grasp or net the stone to separate it from you, either by making a successful attack roll against AC 24 or a successful DC 24 Dexterity (Acrobatics) check. You can use an action to seize and stow the stone, ending its effect.\n A stone has AC 24, 10 hit points, and resistance to all damage. It is considered to be an object that is being worn while it orbits your head.\n You gain a +1 bonus to Intelligence checks while this faceted sphere orbits your head.", addMod : [ { type : "skill", field : "Arcana", mod : 1, text : "While the Ioun stone of Supreme Intellect orbits my head, I gain a +1 bonus on Intelligence checks." }, { type : "skill", field : "History", mod : 1, text : "While the Ioun stone of Supreme Intellect orbits my head, I gain a +1 bonus on Intelligence checks." }, { type : "skill", field : "Investigation", mod : 1, text : "While the Ioun stone of Supreme Intellect orbits my head, I gain a +1 bonus on Intelligence checks." }, { type : "skill", field : "Nature", mod : 1, text : "While the Ioun stone of Supreme Intellect orbits my head, I gain a +1 bonus on Intelligence checks." }, { type : "skill", field : "Religion", mod : 1, text : "While the Ioun stone of Supreme Intellect orbits my head, I gain a +1 bonus on Intelligence checks." } ] }); AddFeatureChoice(MagicItemsList["ioun stone"], false, "Historical Knowledge", { source : [["LLoK", 55]], rarity : "rare", magicItemTable : "G", description : "As an action, I can make this polished, steely sphere orbit my head at 1d3 ft or retrieve it. Others can catch it as an action with an attack or Acrobatics check (AC/DC 24). It has resistance to all damage and 10 HP. While it orbits my head, I gain proficiency in the History skill, or a +1 bonus with it if I'm already proficient.", descriptionFull : "An Ioun stone is named after Ioun, a god of knowledge and prophecy revered on some worlds. Many types of Ioun stone exist, each type a distinct combination of shape and color.\n When you use an action to toss one of these stones into the air, the stone orbits your head at a distance of 1d3 feet and confers a benefit to you. Thereafter, another creature must use an action to grasp or net the stone to separate it from you, either by making a successful attack roll against AC 24 or a successful DC 24 Dexterity (Acrobatics) check. You can use an action to seize and stow the stone, ending its effect.\n A stone has AC 24, 10 hit points, and resistance to all damage. It is considered to be an object that is being worn while it orbits your head.\n You gain proficiency in the History skill, or a +1 bonus to checks with that skill if already proficient, while this polished, steely sphere orbits your head.", skills : ["History"], changeeval : function () { MagicItemsList["ioun stone"].incrementSkill("His", "Historical Knowledge"); }, removeeval : function () { MagicItemsList["ioun stone"].incrementSkill("His", "Historical Knowledge", true); } }); AddFeatureChoice(MagicItemsList["ioun stone"], false, "Natural Knowledge", { source : [["LLoK", 55]], rarity : "rare", magicItemTable : "G", description : "As an action, I can make this burnished, brassy stone orbit my head at 1d3 ft or retrieve it. Others can catch it as an action with an attack or Acrobatics check (AC/DC 24). It has resistance to all damage and 10 HP. While it orbits my head, I gain proficiency in the Nature skill, or a +1 bonus with it if I'm already proficient.", descriptionFull : "An Ioun stone is named after Ioun, a god of knowledge and prophecy revered on some worlds. Many types of Ioun stone exist, each type a distinct combination of shape and color.\n When you use an action to toss one of these stones into the air, the stone orbits your head at a distance of 1d3 feet and confers a benefit to you. Thereafter, another creature must use an action to grasp or net the stone to separate it from you, either by making a successful attack roll against AC 24 or a successful DC 24 Dexterity (Acrobatics) check. You can use an action to seize and stow the stone, ending its effect.\n A stone has AC 24, 10 hit points, and resistance to all damage. It is considered to be an object that is being worn while it orbits your head.\n You gain proficiency in the Nature skill, or a +1 bonus to checks with that skill if already proficient, while this burnished, brassy stone orbits your head.", skills : ["Nature"], changeeval : function () { MagicItemsList["ioun stone"].incrementSkill("Nat", "Natural Knowledge"); }, removeeval : function () { MagicItemsList["ioun stone"].incrementSkill("Nat", "Natural Knowledge", true); } }); AddFeatureChoice(MagicItemsList["ioun stone"], false, "Religious Knowledge", { source : [["LLoK", 55]], rarity : "rare", magicItemTable : "G", description : "As an action, I can make this tiny golden gem orbit my head at 1d3 ft or retrieve it. Others can catch it as an action with an attack or Acrobatics check (AC/DC 24). It has resistance to all damage and 10 HP. While it orbits my head, I gain proficiency in the Religion skill, or a +1 bonus with it if I'm already proficient.", descriptionFull : "An Ioun stone is named after Ioun, a god of knowledge and prophecy revered on some worlds. Many types of Ioun stone exist, each type a distinct combination of shape and color.\n When you use an action to toss one of these stones into the air, the stone orbits your head at a distance of 1d3 feet and confers a benefit to you. Thereafter, another creature must use an action to grasp or net the stone to separate it from you, either by making a successful attack roll against AC 24 or a successful DC 24 Dexterity (Acrobatics) check. You can use an action to seize and stow the stone, ending its effect.\n A stone has AC 24, 10 hit points, and resistance to all damage. It is considered to be an object that is being worn while it orbits your head.\n You gain proficiency in the Religion skill, or a +1 bonus to checks with that skill if already proficient, while this tiny golden gem orbits your head.", skills : ["Religion"], changeeval : function () { MagicItemsList["ioun stone"].incrementSkill("Rel", "Religious Knowledge"); }, removeeval : function () { MagicItemsList["ioun stone"].incrementSkill("Rel", "Religious Knowledge", true); } }); AddFeatureChoice(MagicItemsList["ioun stone"], false, "Language Knowledge", { source : [["LLoK", 55]], rarity : "rare", magicItemTable : "G", description : "As an action, I can make this pulsating bit of red jeweled crystal orbit my head at 1d3 ft or retrieve it. Others can catch it as an action with an attack or Acrobatics check (AC/DC 24). It has 10 HP and resistance to all damage. While it orbits my head, I am fluent in one additional language chosen by the DM.", descriptionFull : "An Ioun stone is named after Ioun, a god of knowledge and prophecy revered on some worlds. Many types of Ioun stone exist, each type a distinct combination of shape and color.\n When you use an action to toss one of these stones into the air, the stone orbits your head at a distance of 1d3 feet and confers a benefit to you. Thereafter, another creature must use an action to grasp or net the stone to separate it from you, either by making a successful attack roll against AC 24 or a successful DC 24 Dexterity (Acrobatics) check. You can use an action to seize and stow the stone, ending its effect.\n A stone has AC 24, 10 hit points, and resistance to all damage. It is considered to be an object that is being worn while it orbits your head.\n You are fluent in one additional language while this pulsating bit of red jeweled crystal orbits your head. The DM chooses the language bestowed by the stone.", languageProfs : [1] }); AddFeatureChoice(MagicItemsList["ioun stone"], false, "Self-Preservation", { source : [["LLoK", 55]], rarity : "rare", description : "As an action, I can make this silvery gem orbit my head at 1d3 ft or retrieve it. Others can catch it as an action with an attack or Acrobatics check (AC/DC 24). It has 10 HP and resistance to all damage. While it orbits my head, I gain a +1 bonus to Intelligence saving throws.", descriptionFull : "An Ioun stone is named after Ioun, a god of knowledge and prophecy revered on some worlds. Many types of Ioun stone exist, each type a distinct combination of shape and color.\n When you use an action to toss one of these stones into the air, the stone orbits your head at a distance of 1d3 feet and confers a benefit to you. Thereafter, another creature must use an action to grasp or net the stone to separate it from you, either by making a successful attack roll against AC 24 or a successful DC 24 Dexterity (Acrobatics) check. You can use an action to seize and stow the stone, ending its effect.\n A stone has AC 24, 10 hit points, and resistance to all damage. It is considered to be an object that is being worn while it orbits your head.\n You gain a +1 bonus to Intelligence saving throws while this silvery gem orbits your head.", addMod : [{ type : "save", field : "Int", mod : 1, text : "While the Ioun stone of Self-Preservation orbits my head, I gain a +1 bonus to Intelligence saving throws." }] }, false, true); // force sorting on the last one } var LLoK_leatherGolemArmorFullDescription = [ "Strange rituals have repurposed the body of a flesh golem into this partially sentient suit of leather armor. While wearing this armor, you gain the following benefits:", "\u2022 You gain a +1 bonus to AC and to saving throws against spells and other magical effects.", "\u2022 >>Immutable Form<<. You are immune to any spell or effect that would alter your form.", "\u2022 >>Lightning Absorption<<. You gain resistance to lightning damage. Whenever you take lightning damage, you gain 5 temporary hit points.", ">>Curse<<. This armor is cursed, and it extends to whomever becomes attuned to it. Until the curse is broken with a remove curse spell or similar magic, you are unwilling to part with the armor. In addition, while you wear the cursed armor, you gain the following properties:", "\u2022 >>Aversion of Fire<<. If you take fire damage, you have disadvantage on attack rolls and ability checks until the end of your next turn.", "\u2022 >>Berserk<<. Whenever you suffer a critical hit, roll a d6. On a 6, you go beserk because of the armor. On each of your turns while berserk, you attack the nearest creature you can see. If no creature is near enough to move to and attack, you attack an object, with preference for an object smaller than yourself. Once you go beserk because of the armor, it cannot be removed. You continue to attack until you are incapacitated or until another creature is able to change your state of mind with appropriate magic (such as a calm emotions spell) or a successful DC 15 Charisma (Persuasion) check." ]; MagicItemsList["leather golem armor"] = { name : "Leather Golem Armor", source : [["LLoK", 55]], type : "armor (leather)", rarity : "rare", magicItemTable : "G", description : "I am unwilling to part with this leather armor until its curse is lifted from me, see Notes page. The curse makes me go berserk and have an aversion to fire. It gives me a +1 bonus to AC and saves vs. spells and magical effects. I have resistance to lightning damage and when I suffer such damage, I gain 5 temporary HP.", descriptionFull : LLoK_leatherGolemArmorFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)<>d20\tNew Form \td20\tNew Form<<", " 1\tTyrannosaurus\t 11\tWolf", " 2\tGiant ape \t 12\tHorse", " 3\tElephant \t 13\tOx", " 4\tGiant scorpion\t 14\tGiant frog", " 5\tRhinoceros \t 15\tPoisonous snake", " 6\tPolar bear \t 16\tHawk", " 7\tGiant toad \t 17\tOctopus", " 8\tGiant eagle \t 18\tCat", " 9\tBlack bear \t 19\tRat", "10\tCrocodile \t 20\tRabbit", "A creature is immune to this effect if it is immune to damage of the weapon's type, is a shapechanger, or has legendary actions.", ">>Curse<<. This weapon is cursed, and it extends to whomever becomes attuned to it. Until the curse is broken with a Remove Curse spell or similar magic, you are unwilling to part with the weapon. Whenever you attack a creature with this weapon and roll a 1 on the attack roll, you suffer the effect of a polymorph spell for 1 hour, rolling on the table to determine your new form." ]; MagicItemsList["polymorph blade"] = { name : "Polymorph Blade", nameTest : "Polymorph", source : [["LLoK", 59]], type : "weapon (any sword)", rarity : "very rare", magicItemTable : "H", description : "I'm unwilling to part with this magic sword. When I attack a creature with it and roll a 20 to hit, the creature must make a DC 15 Wisdom save or be polymorphed for 1 hour into a random beast (see Notes page). However, on a roll of 1 to hit, I am the one being polymorphed for 1 hour without a save.", descriptionFull : LLoK_polymorphBladeFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)< lvlA[0] && cLvl <= lvlA[1]) { // level gained spCast[knowSel] = spCast[knowSel].concat(knownObj[knownType][cLvl]); } else if (cLvl <= lvlA[0] && cLvl > lvlA[1]) { // level lost var removeSp = knownObj[knownType][cLvl]; for (var i = 0; i < removeSp.length; i++) { var indx = spCast[knowSel].indexOf(removeSp[i]); if (indx == -1) continue; spCast[knowSel].splice(indx, 1); } } } } }, regExpSearch : /^(?=.*(spellcaster|mage|healer))(?=.*sidekick).*$/i, name : "Spellcaster (sidekick)", source : [["DnDEK", 63]], primaryAbility : "Intelligence or Wisdom", prereqs : "Can't multiclass", improvements : [0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3], die : 8, saves : ["Wis"], skills : { primary : ["Arcana", "Investigation", "Religion"] }, armorProfs : { primary : [true, false, false, false] }, weaponProfs : { primary : [true, false] }, equipment : "Spellcaster starting equipment:" + "\n \u2022 A quarterstaff;" + "\n \u2022 Leather armor.", subclasses : ["Magical Role", []], subclassGainedLevel : 100, attacks : [1], features : { "sidekick" : { name : "Sidekick", source : [["DnDEK", 63]], minlevel : 1, description : desc([ "Unlike other classes, a sidekick has preset ability scores and skill proficiencies", "A sidekick gains 2 HD at 1st level, but doesn't get max HP for its 1st level", "If the DM allows it, a race can be selected and have its racial traits applied", "A sidekick does not get the benefits of a background, nor can it take feats or multiclass" ]), scorestxt : "Starts with 10 Strength, 12 Dexterity, 10 Constitution, 15 Intelligence, 14 Wisdom, and 13 Charisma", weaponsAdd : { select : ["Quarterstaff"] }, armorAdd : { select : "Leather" }, languageProfs : ["Common", 1], eval : function (lvlA, choiceA) { ClassList["sidekick-expert"].loadSidekickStats(true, [10, 12, 10, 15, 14, 13]); }, removeeval : function (lvlA, choiceA) { ClassList["sidekick-expert"].loadSidekickStats(false, [10, 12, 10, 15, 14, 13]); }, changeeval : function (lvlA, choiceA) { ClassList["sidekick-expert"].fixSidekickLevelDeps("sidekick-warrior", lvlA); }, calcChanges : { hp : function (totalHD, HDobj) { ClassList["sidekick-expert"].amendSidekickHP(HDobj); } } }, "subclassfeature1" : { name : "Magical Role", source : [["DnDEK", 63]], minlevel : 1, description : desc('Choose the magical role of the sidekick, mage or healer, and put it in the "Class" field') }, "potent cantrips" : { name : "Potent Cantrips", source : [["DnDEK", 64]], minlevel : 6, description: desc("I add my spellcasting ability modifier to the damage I deal with any cantrip"), calcChanges : { atkCalc : [ function (fields, v, output) { var subclass = classes.known["sidekick-spellcaster"].subclass; if (!subclass || !ClassSubList[subclass].abilitySave) return; var spAbiMod = Number(What(AbilityScores.abbreviations[ClassSubList[subclass].abilitySave - 1] + ' Mod')); if (spAbiMod > 0 && v.thisWeapon[3] && SpellsList[v.thisWeapon[3]].level === 0) { output.extraDmg += spAbiMod; }; }, "My cantrips get my spellcasting ability modifier added to their damage." ], spellAdd : [ function (spellKey, spellObj, spName) { var subclass = classes.known["sidekick-spellcaster"].subclass; if (!subclass || !ClassSubList[subclass].abilitySave || spellObj.psionic || spellObj.level !== 0) return; var spAbi = AbilityScores.abbreviations[ClassSubList[subclass].abilitySave - 1]; var spAbiMod = Number(What(spAbi + ' Mod')); if (spAbiMod < 1) return; return genericSpellDmgEdit(spellKey, spellObj, "\\w+\\.?", spAbi); }, "My cantrips get my spellcasting ability modifier added to their damage." ] } } } } AddSubClass("sidekick-spellcaster", "mage", { regExpSearch : /^(?=.*mage)(?=.*sidekick).*$/i, subname : "Mage", fullname : "Mage (sidekick)", source : [["DnDEK", 63]], abilitySave : 4, spellcastingFactor : 1, spellcastingList : { "class" : "wizard", level : [0, 6] }, spellcastingKnown : { cantrips : [2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5], spells : [1, 2, 3, 3, 4, 4, 8, 9,10,11,12,12] }, spellcastingTable : [[0, 0, 0, 0, 0, 0, 0, 0, 0]].concat(levels.slice(0,12).map(function (n) { return defaultSpellTable[n < 7 ? Math.ceil(n / 2) : n]; })), features : { "subclassfeature1" : { name : "Spellcasting", source : [["DnDEK", 63]], minlevel : 1, description: desc("I can cast wizard cantrips/spells I know, using Intelligence as my spellcasting ability"), weaponsAdd : { select : ["Fire Bolt"] }, changeeval : function (lvlA, choiceA) { if (!lvlA[1]) return; // set the spells known for the level var knownObj = { Ca : { "1" : ["fire bolt", "light"], "4" : ["mage hand"], "7" : ["minor illusion"], "10" : ["shocking grasp"] }, Sp : { "1" : ["sleep"], "2" : ["burning hands"], "3" : ["shield"], "5" : ["invisibility"], "7" : ["flaming sphere", "fireball", "fly", "wall of fire"], "8" : ["polymorph"], "9" : ["cone of cold"], "10" : ["hold monster"], "11" : ["chain lightning"] } } ClassList["sidekick-spellcaster"].setSidekickSpells(knownObj, lvlA); } } } }); AddSubClass("sidekick-spellcaster", "healer", { regExpSearch : /^(?=.*healer)(?=.*sidekick).*$/i, subname : "Healer", fullname : "Healer (sidekick)", source : [["DnDEK", 63]], abilitySave : 5, spellcastingFactor : 1, spellcastingList : { "class" : "cleric", level : [0, 6] }, spellcastingKnown : { cantrips : [2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5], spells : [1, 2, 3, 3, 4, 4, 8, 9,10,11,12,12] }, spellcastingTable : [[0, 0, 0, 0, 0, 0, 0, 0, 0]].concat(levels.slice(0,12).map(function (n) { return defaultSpellTable[n < 7 ? Math.ceil(n / 2) : n]; })), features : { "subclassfeature1" : { name : "Spellcasting", source : [["DnDEK", 63]], minlevel : 1, description: desc("I can cast cleric cantrips/spells I know, using Wisdom as my spellcasting ability"), weaponsAdd : { select : ["Sacred Flame"] }, changeeval : function (lvlA, choiceA) { if (!lvlA[1]) return; // set the spells known for the level var knownObj = { Ca : { "1" : ["guidance", "sacred flame"], "4" : ["resistance"], "7" : ["light"], "10" : ["spare they dying"] }, Sp : { "1" : ["cure wounds"], "2" : ["bless"], "3" : ["shield of faith"], "5" : ["aid"], "7" : ["lesser restoration", "protection from energy", "revivify", "death ward"], "8" : ["banishment"], "9" : ["greater restoration"], "10" : ["mass cure wounds"], "11" : ["heal"] } } ClassList["sidekick-spellcaster"].setSidekickSpells(knownObj, lvlA); } } } }); ================================================ FILE: WotC material/pub_20190917_DiA.js ================================================ var iFileName = "pub_20190917_DiA.js"; RequiredSheetVersion("13.1.14"); // This file adds all material from the Baldur's Gate: Descent into Avernus adventure to MPMB's Character Record Sheet // Define the source SourceList["DiA"] = { name : "Baldur's Gate: Descent into Avernus [background, items]", abbreviation : "DiA", group : "Adventure Books", campaignSetting : "Forgotten Realms", url : "https://dnd.wizards.com/products/baldurs-gate-descent-into-avernus", date : "2019/09/17" }; BackgroundList["faceless"] = { regExpSearch : /faceless/i, name : "Faceless", source : [["DiA", 203]], skills : ["Deception", "Intimidation"], gold : 10, languageProfs : [1], toolProfs : ["Disguise kit"], equipleft : [ ["Disguise kit", "", 3] ], equipright : [ ["Costume", "", 4], ["Belt pouch (with coins)", "", 1] ], feature : "Dual Personalities", trait : [ "I'm earnest and uncommonly direct.", "I strive to have no personality\u2014it's easier to forget what's hardly there.", "I treasure a memento of the person or instance that set me upon my path.", "I sleep just as much as I need to and on an unusual schedule.", "I think far ahead, a detachedness often mistaken for daydreaming.", "I cultivate a single obscure hobby or study and eagerly discuss it at length.", "I am ever learning how to be among others\u2014when to stay quiet, when to laugh.", "I behave like an extreme opposite of my persona." ], ideal : [ ["Justice", "Justice. Place in society shouldn't determine one's access to what is right. (Good)" ], ["Security", "Security. Doing what must be done can't bring the innocent to harm. (Lawful)" ], ["Confusion", "Confusion. Deception is a weapon. Strike from where your foes won't expect. (Chaotic)" ], ["Infamy", "Infamy. My name will be a malediction, a curse that fulfills my will. (Evil)" ], ["Incorruptibility", "Incorruptibility. Be a symbol, and leave your flawed being behind. (Any)" ], ["Anonymity", "Anonymity. It's my deeds that should be remembered, not their instrument. (Any)" ] ], bond : [ "I do everything for my family. My first thought is keeping them safe.", "What I do, I do for the world. The people don't realize how much they need me.", "I've seen too many in need. I must not fail them as everyone else has.", "I stand in opposition, lest the wicked go unopposed.", "I am exceptional. I do this because no one else can, and no one can stop me.", "I do everything for those who were taken from me." ], flaw : [ "I am callous about death. It comes to us all eventually.", "I never make eye contact or hold it unflinchingly.", "I have no sense of humor. Laughing is uncomfortable and embarrassing.", "I overexert myself, sometimes needing to recuperate for a day or more.", "I think far ahead, a detachedness often mistaken for daydreaming.", "I see morality entirely in black and white." ], extra : [ "Select a Faceless Persona", "Flamboyant spy or brigand", "Incarnation of nation or people", "Scoundrel with masked guise", "Vengeful spirit", "Manifestation of deity or faith", "Beauty accented with makeup", "Impersonation of another hero", "Embodiment of a school of magic", "Warrior with distinctive armor", "Fear-inspiring monstrous disguise" ] }; BackgroundFeatureList["religious community"] = { description : "I'm tightly connected with the religious community of the city. I know if a deity has a following in the city, any places that faith openly congregates, and the neighborhoods those faithful typically inhabit. While this isn't remarkable for most of the city's larger faiths, keeping track of the hundreds of religions newcomers bring with them is no mean feat.", source : [["DiA", 202], ["ALbackground", 0]] }; BackgroundFeatureList["long-lost heir"] = { description : "I can pose as the long-lost heir to some imaginary or dead lineage. I'm well-versed in the mannerisms and idiosyncrasies of nobility, imitating them smoothly enough to convince anybody of my authenticity. However, any true test is likely to reveal my deception. I can enter places that only nobility can and might be able to bluff other through with me.", source : [["DiA", 202], ["ALbackground", 0]] }; BackgroundFeatureList["criminal connections"] = { description : "In a big city, crime is just another business. As a result, I can arrange a meeting with a low-ranking operative of nearly any business, noble family, crew, government institution, or guild. This operative will hear me out and, at their discretion, take my information or request up their chain of command. These meetings almost always occur in shady venues.", source : [["DiA", 202], ["ALbackground", 0]] }; BackgroundFeatureList["backstage pass"] = { description : "I know that most of the real business, in entertainment or otherwise, happens behind the scenes. It's easy for me to case what sorts of audiences attend a venue. After a successful performance, I may meet an enthusiastic member of the crowd\u2014someone of an occupation or social class that frequents the venue, who is delighted to talk with me, and to listen.", source : [["DiA", 202], ["ALbackground", 0]] }; BackgroundFeatureList["dual personalities"] = { description : "The world knows me as my persona and those who seek to learn more about me find themselves stymied by my disguise. I'm unidentifiable as my true self while disguised and behaving as my persona, allowing me to change appearances between my two personalities as I wish. My deception might lose its effectiveness if someone realize the connection.", source : [["DiA", 204], ["ALbackground", 0]] }; BackgroundFeatureList["social vengeance"] = { description : "I've lived my whole life amongst the lower class of the city, seeing the upper class flaunt their wealth while my hardworking neighbors struggled. I know their eagerness to give the wealthy their comeuppance. I can convince 1d6 commoners in a busy area in 2d10 min" + (typePF ? "utes" : "") + " to perform a non-illegal act that inconveniences a guard, noble, or wealthy looking individual.", source : [["DiA", 204], ["ALbackground", 0]] }; BackgroundFeatureList["professional courtesy"] = { description : "I conduct my business in one of the city's districts and I'm familiar with its local crews, their territories, and inter-crew politics. When I need information about something in my district, I can learn the local gossip from crew members. Within my district, I can gain entry to nearly any bank, guild hall, place of business, workhouse, or crew meeting place.", source : [["DiA", 205], ["ALbackground", 0]] }; BackgroundFeatureList["the real city"] = { description : "I know the city that most of its inhabitants ignore, the dog-eat-dog world of the homeless and unfortunate. I know where to go for anonymity. In these slums and alley camps, I can get a damp bed and a bad meal, but also a degree of privacy and no questions asked. Living here isn't comfortable, but it's unlikely any will find me\u2014and I can stay as long as I want.", source : [["DiA", 205], ["ALbackground", 0]] }; BackgroundFeatureList["patriar"] = { description : "As a member of an elite family of the city, I may pass through without paying tolls, enter the better part of town and stay there after dark, mingle among the nobility unquestioned, and impress those looking for wealthy patrons. My word is accepted over others' without question, and any corruption among guards or officials tends to work in my favor.", source : [["DiA", 206], ["ALbackground", 0]] }; BackgroundFeatureList["immigrant experience"] = { description : "Even after my short time in the city, I've learned it holds more walls and gates than those the guards patrol. I'm known within the city's immigrant communities. Should I ever need to learn about a foreign land, people, tradition, or history, I know where to find someone with firsthand experience\u2014likely somewhere in the poorer part of town.", source : [["DiA", 206], ["ALbackground", 0]] }; BackgroundFeatureList["rumor monger"] = { description : "Via my personal rumor mill and published articles, I can surmise a great deal about the secrets of the city's inhabitants\u2014necromancy, spying, smuggling, dealing in magical wares. Whenever a noteworthy crime or happening occurs in the city, I immediately have a list of 1d4 suspects who, if they aren't involved, have a strong chance of knowing who is.", source : [["DiA", 206], ["ALbackground", 0]] }; BackgroundFeatureList["smuggler's sense"] = { description : "I'm familiar with the docks of the city, the movement of inspectors and tax collectors, the way cargo and coin flows, the movements of the harbor guards, and how to operate the port's machinery for moving wares. As a result, it's easy for me to hustle a load of cargo ashore or see such a cargo onto a cooperative ship without attracting suspicion or taxation.", source : [["DiA", 207], ["ALbackground", 0]] }; BackgroundFeatureList["city guard: lower city (the flaming fists)"] = { description : "I'm required to take a regular shift patrolling the lower or outer city and I must report for training once every ten days. In return, I have access to the guard's fortresses and a direct line of communication with officers and other soldiers. I can also pass through the city's gates and go to the upper city without question, but can't bring guests to the upper city.", source : [["DiA", 207], ["ALbackground", 0]] }; BackgroundFeatureList["city guard: upper city (the watch)"] = { description : "I'm required to take a regular shift patrolling the upper city or its gates and I must report for training once every ten days. In return, I have access to the citadel and a direct line of communication with officers and officials. My word carries considerable weight. I can escort people into the upper city unimpeded, but I'm regarded with suspicion in the lower city.", source : [["DiA", 207], ["ALbackground", 0]] }; BackgroundFeatureList["loyalty test"] = { description : "I can spot the behaviors common to corrupt guards and military officers a mile away. While this doesn't equate to evidence, and my sense isn't foolproof, my instinct proves a starting point to determine who might take a bribe, who might turn a blind eye to a crime, who might have criminal connections, or who might fulfill their duties strictly by the book.", source : [["DiA", 207], ["ALbackground", 0]] }; BackgroundFeatureList["gateguide connection"] = { description : "I've associated with enough of the Gateguides crew that I know their torch-based code. From the lighting, placement, and type of torch arranged on or near a structure, I can gather information about those who live or do business there\u2014if they deal fairly with strangers, have guild or government connections, or their standing with the Gateguides.", source : [["DiA", 207], ["ALbackground", 0]] }; // Creatures // Peacock is just a vulture under a different name, it has been added to the SRD code as a `nameAlt` CreatureList["abyssal chicken"] = { name : "Abyssal Chicken", nameAlt : ["Chicken, Abyssal"], source : [["DiA", 97]], size : 5, type : "Fiend", subtype : "demon", companion : "familiar_not_al", alignment : "Chaotic Evil", ac : 13, hp : 10, hd : [3, 4], speed : "30 ft, fly 30 ft", scores : [6, 14, 13, 4, 9, 5], damage_resistances : "cold, fire, lightning", damage_immunities : "poison", condition_immunities : "blinded, poisoned", senses : "Blindsight 30 ft (blind beyond this radius)", passivePerception : 9, languages : "understands Abyssal but can't speak", challengeRating : "1/4", proficiencyBonus : 2, attacksAction : 2, attacks : [{ name : "Bite", ability : 2, damage : [1, 4, "piercing"], range : "Melee (5 ft)", description : "One bite and one claws attack as an Attack action" }, { name : "Claws", ability : 2, damage : [1, 6, "piercing"], range : "Melee (5 ft)", description : "One claws and one bite attack as an Attack action" }], actions : [{ name : "Multiattack", description : "As an action on its turn, the chicken can make one Bite and one Claws attack." }], traits : [{ name : "Bad Flier", description : "The chicken falls at the end of a turn if it's airborne and the only thing holding it aloft is its flying speed." }] } MagicItemsList["candle mace"] = { // contributed by Nod_Hero name : "Candle Mace", source : [["DiA", 39]], type : "weapon (mace)", rarity : "uncommon", description : "This mace adds a +1 bonus to attack and damage rolls made with it. The head of this mace sheds bright light in a 5-ft radius and dim light for an additional 5 ft. As an action when I wield this mace, I can extinguish or ignite its light.", descriptionFull : "This +1 mace was made for a cleric of Lathander, the god of dawn. The head of this mace sheds bright light in a 5-foot-radius and dim light for an additional 5 feet. When you wield this mace, you can extinguish or ignite its light as an action.", weight : 4, action : [["action", " (on/off)"]], weaponOptions : [{ baseWeapon : "mace", regExpSearch : /^(?=.*candle)(?=.*mace).*$/i, name : "Candle Mace", source : [["DiA", 39]], modifiers : [1, 1], selectNow : true }] } MagicItemsList["battle standard of infernal power"] = { name : "Battle Standard of Infernal Power", source : [["DiA", 223]], type : "wondrous item", rarity : "very rare", description : "While holding the banner, my weapon attacks and those of my allies within 300 ft of me count as magical for the purposes of overcoming damage immunities and resistances. The standard has a small unopenable cage with an incapacitated quasit within. It turns to smoke if killed or released and a new one appears.", descriptionLong : "While holding the banner, my weapon attacks and those of my allies within 300 ft of me count as magical for the purposes of overcoming damage immunities and resistances.\nThis hell-forged battle standard is made of infernal iron and fitted with a small, unopenable cage containing a quasit. The trapped quasit is incapacitated, and its cage has AC 19, 10 hit points, and immunity to all types of damage except force damage. If killed or somehow released, the quasit disappears in a cloud of smoke, and a new one appears in the cage, provided the cage is intact.", descriptionFull : "This hell-forged battle standard is made of infernal iron and fitted with a small, unopenable cage containing a quasit. The trapped quasit is incapacitated, and its cage has AC 19, 10 hit points, and immunity to all types of damage except force damage. If killed or somehow released, the quasit disappears in a cloud of smoke, and a new one appears in the cage, provided the cage is intact.\n While you hold the banner, your weapon attacks and those of all allied creatures within 300 feet of you count as magical for the purposes of overcoming damage immunities and resistances.", attunement : true, calcChanges : { atkAdd : [ function (fields, v) { if (!v.isSpell && !v.thisWeapon[1] && !v.theWea.isMagicWeapon && !(/counts as( a)? magical/i).test(fields.Description)) { fields.Description += (fields.Description ? '; ' : '') + 'Counts as magical'; }; }, "My weapon attacks count as magical for overcoming resistances and immunities." ] } } MagicItemsList["gauntlets of flaming fury"] = { name : "Gauntlets of Flaming Fury", source : [["DiA", 223]], type : "wondrous item", rarity : "rare", description : "While wearing both these steel gauntlets, any weapons I grasp with them count as magical. As a bonus action once per dawn, I can use them to envelop one or two melee weapons in my grasp with magical flames, causing them to deal an extra 1d6 fire damage on a hit. This lasts until I sheathe or let go of a weapon.", descriptionFull : "While you wear both of these steel gauntlets, any non- magical weapon you grasp with either gauntlet is treated as a magic weapon. As a bonus action, you can use the gauntlets to cause magical flames to envelop one or two melee weapons in your grasp. Each flaming weapon deals an extra 1d6 fire damage on a hit. The flames last until you sheathe or let go of either weapon. Once used, this property can't be used again until the next dawn.", attunement : true, action : [["bonus action", ""]], usages : 1, recovery : "dawn", calcChanges : { atkAdd : [ function (fields, v) { if (!v.isSpell && !v.isNaturalWeapon && !v.thisWeapon[1] && !v.theWea.isMagicWeapon && !(/dancing|counts as( a)? magical/i).test(fields.Description)) { fields.Description += (fields.Description ? '; ' : '') + 'Counts as magical'; }; }, "Any nonmagical weapons that I grasp with my Gauntlets of Flaming Fury count as magical for overcoming resistances and immunities." ] } } MagicItemsList["fane-eater"] = { name : "Fane-Eater", source : [["DiA", 223]], type : "weapon (battleaxe)", rarity : "legendary", description : "This battleaxe adds a +3 bonus to attack and damage rolls made with it. When I use it to attack a creature and roll a 20 on the attack roll, the creature takes an extra 2d8 necrotic damage, and I regain a number of hit points equal to the necrotic damage taken.", descriptionFull : "Fane-Eater is a battleaxe belonging to Arkhan the Cruel.\n You gain a +3 bonus to attack and damage rolls with Fane-Eater. If you attack a creature with this weapon and roll a 20 on the attack roll, the creature takes an extra 2d8 necrotic damage, and you regain a number of hit points equal to the necrotic damage taken.", attunement : true, prerequisite : "Requires attunement by an evil cleric or paladin", prereqeval : function(v) { return (classes.known.paladin || classes.known.cleric) && (/evil/i).test(What("Alignment")); }, weight : 4, weaponOptions : [{ baseWeapon : "battleaxe", regExpSearch : /fane-eater/i, name : "Fane-Eater", source : [["DiA", 223]], description : "Versatile (1d10); On 20 to hit: +2d8 necrotic damage and I heal same amount", selectNow : true }] } MagicItemsList["hellfire weapon"] = { name : "Hellfire Weapon", nameTest : "Hellfire", source : [["DiA", 223]], type : "weapon (any)", rarity : "uncommon", description : "This weapon is fashioned from infernal iron and traced with veins of hellfire that shed dim light in a 5-ft radius. Any humanoid killed by an attack made with this weapon has its soul funneled into the River Styx, where it's reborn instantly as a lemure devil.", descriptionFull : "This weapon is fashioned from infernal iron and traced with veins of hellfire that shed dim light in a 5-foot-radius.\n Any humanoid killed by an attack made with this weapon has its soul funneled into the River Styx, where it's reborn instantly as a lemure devil.", chooseGear : { type : "weapon", prefixOrSuffix : "suffix", descriptionChange : ["replace", "weapon"] }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && (/hellfire/i).test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + 'Humanoids killed lose their soul'; } }, 'If I include the word "Hellfire" in a the name of a weapon, it will be treated as the magic weapon Hellfire Weapon. Any humanoid killed by the weapon has its soul funneled into the River Styx, and are instantly reborn as a lemure devil.' ] } } MagicItemsList["helm of devil command"] = { name : "Helm of Devil Command", source : [["DiA", 223]], type : "wondrous item", rarity : "very rare", description : "This helm has 3 charges, regaining all 24 h after using the last. I can use 1 charge to cast Dominate Monster on a devil, but it knows I tried to charm it. It allows me to know the exact location of all devils within 1000 ft and I can telepathically communicate with one of them at a time, or broadcast my thoughts to all.", descriptionLong : "This bulky, eyeless helmet resizes to fit my head and allows me to see out of it as if I was not wearing it. It has 3 charges, regaining all 24 hours after using the last charge. I can use 1 charge to cast Dominate Monster on a devil, but if it can see me do so, the devil knows I tried to charm it. The helm also allows me to know the exact location of all devils within 1000 ft and I can telepathically communicate with one of them at a time, or broadcast my thoughts to all within range, but they have no special means of replying. If I use its dominating power while I'm on the Nine Hells, there is a chance it attracts a narzugon.", descriptionFull : "This bulky, eyeless helmet is made for a pit fiend but magically resizes to fit the heads of other wearers.\n While wearing the helm, you can see out of it as though you weren't wearing it. In addition, you know the exact location and type of all devils within 1,000 feet of you. You can telepathically communicate with a devil within range, or you can broadcast your thoughts to all devils within range. The devils receiving your broadcasted thoughts have no special means of replying to them.\n The helm has 3 charges. As an action, you can expend 1 charge to cast dominate monster (save DC 21), which affects devils only. (The spell fails and the charge is wasted if you target any creature that's not a devil.) If a devil can see you when you cast this spell on it, the devil knows you tried to charm it. The helm regains all its charges 24 hours after its last charge is expended.\n If you are not a devil, using the helm's dominate monster property in the Nine Hells has a 20 percent chance of attracting a narzugon, which arrives on the back of a nightmare mount in 1d4 hours. The narzugon tries to recover the helm, killing you if necessary to obtain it. If it gets the helm, the narzugon tries to deliver it to its infernal master.", attunement : true, prerequisite : "Requires attunement by a creature that can speak infernal", prereqeval : function(v) { return (/infernal/i).test(v.languageProfs); }, usages : 3, recovery : "Special", fixedDC : 21, spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "1 charge", spells : ["dominate monster"], selection : ["dominate monster"], firstCol : 1 }], spellChanges : { "dominate monster" : { description : "Devil save or charmed, follows telepathic commands, 1 a for complete control; save on dmg", changes : "Can only affect a devil." } } } MagicItemsList["infernal puzzle box"] = { name : "Infernal Puzzle Box", source : [["DiA", 224]], type : "wondrous item", rarity : "uncommon", description : "This cube-shaped container is around 15 cm on a side and is composed of airtight, interlocking parts. It can't be magically opened and is immune to all damage. I can figure out how to open it in 1 hour with a DC 30 Investigation check. If failed by 5 or more, I take 12d6 psychic damage, Wis DC 18 halves.", descriptionLong : "This cube-shaped container is around 15 cm on a side and is composed of airtight, interlocking parts made from materials found in the Nine Hells. It can't be magically opened and is immune to all damage while shut. Every infernal puzzle box has an unique mundane way of opening it. I can figure out how to open this box in 1 hour with a DC 30 Investigation check, but if I fail this check by 5 or more, I take 12d6 psychic damage, Wisdom save DC 18 halves. Once I figure out the trick or sequence of steps needed to open this box, I can open it as an action, allowing access to the box's contents.", descriptionFull : "An infernal puzzle box is a cube-shaped container 5 to 6 inches on a side, composed of airtight, interlocking parts made from materials found in the Nine Hells. Most of these boxes are made of infernal iron, though some are carved from bone or horn. Infernal puzzle boxes are used to safeguard diabolical contracts signed between devils and mortals, even after the terms of these contracts are fulfilled. An empty infernal puzzle box weighs 3 pounds regardless of the materials used to fashion it.\n When an object small enough to fit inside an infernal puzzle box is placed in it, the container magically seals shut around the object, and no magic can force the box open. The sealed box becomes immune to all damage as well. Every infernal puzzle box is constructed with a unique means of opening it. The trick to solving the puzzle is always mundane, never magical. Once a creature figures out the trick or sequence of steps needed to open a particular infernal puzzle box, that creature can open the box as an action, allowing access to the box's contents.\n A creature that spends 1 hour holding an infernal puzzle box while trying to open it can make a DC 30 Intelligence (Investigation) check. If the check succeeds, the creature figures out the trick or sequence of steps needed to open the box. If the check fails by 5 or more, the creature must make a DC 18 Wisdom saving throw, taking 42 (12d6) psychic damage on a failed save, or half as much damage on a successful one.", weight : 3 } // [dupl_start] reprint from Mordenkainen's Tome of Foes if (!SourceList.MToF) { MagicItemsList["infernal tack"] = { name : "Infernal Tack", source : [["MToF", 167], ["DiA", 224]], type : "wondrous item", rarity : "legendary", notLegalAL : true, description : "While wearing the spurs of this set, the nightmare equipped with the bridle, bit, reins, saddle, and stirrups is under my command. As an action, I can have it appear in 20 ft at the start of my next turn. It acts on as my ally on my initiative, remains for 1 day, until I or it dies, or I dismiss it as an action. If it dies, it reforms in 24 h.", descriptionLong : "This tack consists of a bridle, bit, reins, saddle, stirrups, and spurs. A nightmare equipped with the tack serves whoever wears the spurs until the wearer dies or the tack is removed. As an action, I can clash the spurs together or scrape them through blood, causing the nightmare to appear within 20 ft at the start of my next turn. It acts as my ally on my initiative count, remains for 1 day, until I or it dies, or until I dismiss it as an action. If it dies, it reforms within 24 hours, after which I can summon it again. The tack doesn't create a nightmare from thin air; one must first be subdued so the tack can be placed on it.", descriptionFull : "A narzugon binds a nightmare to its service with infernal tack, which consists of a bridle, bit, reins, saddle, stirrups, and spurs. A nightmare equipped with infernal tack must serve whoever wears the spurs until the wearer dies or the tack is removed.\n You can use an action to call a nightmare equipped with infernal tack by clashing the spurs together or scraping them through blood. The nightmare appears at the start of your next turn, within 20 feet of you. It acts as your ally and takes its turn on your initiative count. It remains for 1 day, until you or it dies, or until you dismiss it as an action. If the nightmare dies, it reforms in the Nine Hells within 24 hours, after which you can summon it again.\n The tack doesn't conjure a nightmare from thin air; one must first be subdued so the tack can be placed on it. No nightmare accepts this forced servitude willingly, but some eventually form strong loyalties to their masters and become true partners in evil.", attunement : true, weight : 26, // riding saddle (25) + bit and bridle (1) prerequisite : "Requires attunement by a creature of evil alignment", prereqeval : function(v) { return (/evil/i).test(What("Alignment")); }, action : [["action", ""]], creaturesAdd : [["Nightmare", true, function (AddRemove, prefix) { if (!AddRemove) return; // Show equipment section MakeCompMenu_CompOptions(prefix, ["companion", "visible", "comp.eqp"], true); // Add equipment when added var equip = ["bit and bridle", "riding"]; for (var i = 0; i < equip.length; i++) { var gear = GearList[equip[i]]; if (!gear) continue; AddToInv(prefix + "comp", "l", gear.name, gear.amount, gear.weight, "", false, false, false, false); } // Add notes var note = "I can use an action to call a nightmare equipped with infernal tack by clashing the spurs together or scraping them through blood. The nightmare appears at the start of my next turn, within 20 ft of me.\nThe nightmare acts as my ally and takes its turn on my initiative count. It remains for 1 day, until I or it dies, or until I dismiss it as an action. If the nightmare dies, it reforms in the Nine Hells within 24 hours, after which I can summon it again."; Value(prefix + "Comp.eqp.Notes", What("Unit System") === "metric" ? ConvertToMetric(note, 0.5) : note); }]] } } // dupl_end MagicItemsList["matalotok"] = { name : "Matalotok", source : [["DiA", 224]], type : "weapon (warhammer)", rarity : "legendary", description : "This ancient warhammer, the Frost Father, was fashioned by Thrym. It is frigid to the touch and wreathed in mist. I'm immune to cold damage while holding it. Whenever I deal damage to a creature with it, it radiates a burst of intense cold in a 30-ft radius sphere, dealing 3d6 cold damage to all creatures within.", descriptionFull : "Matalotok, the Frost Father, is an ancient hammer fashioned by Thrym, the god of frost giants. The favored weapon of the demon lord Kostchtchie, Matalotok is frigid to the touch and wreathed in mist.\n You are immune to cold damage while holding Matalotok. Whenever it deals damage to a creature, the hammer radiates a burst of intense cold in a 30-foot-radius sphere. Each creature in that area takes 10 (3d6) cold damage.", attunement : true, weight : 2, weaponOptions : [{ baseWeapon : "warhammer", regExpSearch : /matalotok/i, name : "Matalotok", source : [["DiA", 224]], description : "Versatile (1d10); On hit: all in 30-ft radius take 3d6 cold damage", selectNow : true }], savetxt : { immune : ["cold"] } } MagicItemsList["obsidian flint dragon plate"] = { name : "Obsidian Flint Dragon Plate", source : [["DiA", 224]], type : "armor (plate)", rarity : "legendary", description : "I gain a +2 bonus to AC and resistance to poison damage while I wear this plate armor. In addition, I gain advantage on ability checks and saving throws made to avoid or end the grappled condition on myself.", descriptionFull : "You gain a +2 bonus to AC and resistance to poison damage while you wear this armor. In addition, you gain advantage on ability checks and saving throws made to avoid or end the grappled condition on yourself.", armorOptions : [{ regExpSearch : /^(?=.*obsidian)(?=.*flint)(?=.*dragon)(?=.*plate).*$/i, name : "Obsidian Flint Dragon Plate", source : [["DiA", 224]], type : "heavy", ac : "18+2", stealthdis : true, weight : 65, strReq : 15, selectNow : true }], dmgres : ["Poison"], savetxt : { adv_vs : ["grappled"] }, weight : 65 } var DiA_shieldOfTheHiddenLordFullDescription = [ "The Shield of the Hidden Lord is of celestial origin and serves as a prison for the pit fiend Gargauth, whose mortal followers revere it as a god. Over time, Gargauth's evil has warped the shield's appearance, so that its celestial motif and designs have become twisted into a fiendish face that subtly moves in disturbing ways.", "While holding this shield, you gain a +2 bonus to AC and resistance to fire damage.", ">>Sentience<<. The Shield of the Hidden Lord is sentient as long as it imprisons Gargauth. While sentient, the shield has the following properties:", "\u2022 The shield has an Intelligence of 22, a Wisdom of 18, and a Charisma of 24, as well as hearing and truesight out to a range of 120 feet.", "\u2022 The shield can speak, read, and understand Common and Infernal, and it can communicate telepathically with any creature it can sense within 120 feet of it. Its voice is a deep, hollow whisper.", "\u2022 The shield has 3 charges. You can use an action to expend 1 charge to cast Fireball or 2 charges to cast Wall of Fire from the shield (save DC 21 for each). The Wall of Fire spell lasts for 1 minute (no concentration required). The shield regains all expended charges daily at dawn.", "\u2022 Anytime during your turn, the shield can choose to radiate an aura of dread for 1 minute. (This is not a power of the shield that you control.) Any creature hostile to you that starts its turn within 20 feet of the shield must make a DC 18 Wisdom saving throw. On a failed save, the creature is frightened until the start of its next turn. On a successful save, the creature is immune to this power of the shield for the next 24 hours. Once the shield uses this power, it can't use it again until the next dawn.\n", ">>Gargauth's Personality<<. Gargauth desperately seeks freedom but can't escape on its own. The pit fiend won't reveal its true nature, referring to itself only as the Hidden Lord. It drops hints and subtle suggestions that it is an angel trapped in an unholy prison. If released from the shield, the pit fiend honors the terms of whatever bargain it struck to facilitate its escape.", "While trapped in the shield, Gargauth carefully steers the shield's current owner toward committing acts of cruelty and domination, hoping to condemn the individual's soul to the Nine Hells. Conflict occurs if the shield's owner does anything that would make it more difficult for Gargauth to escape its prison, such as leaving the shield in a place where others are unlikely to find it.", "Gargauth doesn't know how to escape from the shield. The pit fiend believes (incorrectly) that it can break free of the shield if it's brought to the Nine Hells, for it's convinced that the shield's powers are weaker there.", ">>Freeing Gargauth<<. Casting dispel evil and good on the shield has a 1 percent chance of freeing the pit fiend, or automatically succeeds if the spell is cast by a solar, a planetar, or an archdevil. A god can release the pit fiend by touching the shield and speaking Gargauth's name. When released, Gargauth appears in a random, unoccupied space as close to the shield as possible." ]; MagicItemsList["shield of the hidden lord"] = { name : "Shield of the Hidden Lord", source : [["DiA", 225]], type : "shield", rarity : "legendary", storyItemAL : true, description : 'This shield grants me +2 bonus to AC and resistance to fire damage. It has 3 charges, regaining all at dawn. I can expend 1 charge to cast Fireball or 2 charges to cast Wall of Fire from it at DC 21. The shield is sentient and can communicate telepathically with any creature within 120 ft of it. See "Notes" page for more.', descriptionFull : DiA_shieldOfTheHiddenLordFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)<>Carrying Soul Coins<<. To hold a soul coin is to feel the soul bound within it\u2014overcome with rage or fraught with despair.", "An evil creature can carry as many soul coins as it wishes (up to its maximum weight allowance). A non-evil creature can carry a number of soul coins equal to or less than its Constitution modifier without penalty. A non-evil creature carrying a number of soul coins greater than its Constitution modifier has disadvantage on its attack rolls, ability checks, and saving throws.", ">>Using a Soul Coin<<. A soul coin has 3 charges. A creature carrying the coin can use its action to expend 1 charge from a soul coin and use it to do one of the following:", "\u2022 >>Drain Life<<. You siphon away some of the soul's essence and gain 1d10 temporary hit points.", "\u2022 >>Query<<. You telepathically ask the soul a question and receive a brief telepathic response, which you can understand. The soul knows only what it knew in life, but it must answer you truthfully and to the best of its ability. The answer is no more than a sentence or two and might be cryptic.\n", ">>Freeing a Soul<<. Casting a spell that removes a curse on a soul coin frees the soul trapped within it, as does expending all of the coin's charges. The coin itself rusts from within and is destroyed once the soul is released. A freed soul travels to the realm of the god it served or the outer plane most closely tied to its alignment (DM's choice). The souls of lawful evil creatures released from soul coins typically emerge from the River Styx as lemure devils.", "A soul can also be freed by destroying the coin that contains it. A soul coin has AC 19, 1 hit point for each charge it has remaining, and immunity to all damage except that which is dealt by a hellfire weapon or an infernal war machine's furnace.", "Freeing a soul from a soul coin is considered a good act, even if the soul belongs to an evil creature.", ">>Hellish Currency<<. Soul coins are a currency of the Nine Hells and are highly valued by devils. The coins are used among the infernal hierarchy to barter for favors, bribe the unwilling, and reward the faithful for services rendered.", "Soul coins are created by Mammon and his greater devils on Minauros, the third layer of the Nine Hells, in a vast chamber where the captured souls of evil mortals are bound into the coins. These coins are then distributed throughout the Nine Hells to be used for goods and services, infernal deals, dark bargains, and bribes." ]; MagicItemsList["soul coin"] = { name : "Soul Coin", source : [["DiA", 225], ["CoA", 269]], type : "wondrous item", rarity : "uncommon", description : "Each coin traps a unique soul, whose rage or despair is felt by me while I hold it. A coin has 3 charges. As an action, I can expend 1 charge to either siphon the soul's essence to grant me 1d10 temporary HP or telepathically ask the soul a question which it must answer truthfully. See \"Notes\" page for more.", descriptionFull : DiA_soulCoinFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)< 4 ? "my arcane firearm, " : classes.known.artificer.subclass.indexOf("armorer") !== -1 && classes.known.artificer.level > 2 ? "my arcane armor, " : ""; spellObj.compMaterial = (spellObj.compMaterial ? spellObj.compMaterial + ".\n\nAlso a" : "A") + "lways requires my artificer spellcasting focus: thieves' tools, any set of artisan's tools I'm proficient with, " + extraFocus + "or an item infused by me."; if (GetFeatureChoice("classes", "artificer", "spellcasting", true).indexOf("don't change component column on spell sheet") != -1) { // do nothing if set to do so } else if (!spellObj.components) { spellObj.components = "M\u0192"; } else if (spellObj.components.indexOf("M") == -1) { spellObj.components += ",M\u0192"; } else if ((/M([^\u0192\u2020]|$)/).test(spellObj.components)) { spellObj.components = spellObj.components.replace("M", "M\u0192"); } return true; } return false; }, "My artificer spells always require me to use a spellcasting focus: thieves' tools, artisan's tools I'm proficient with, or an item infused by me." ] }, extrachoices : ["Don't change component column on spell sheet"], extraname : "Artificer Spellcasting", "don't change component column on spell sheet" : { name : "[Meta] Don't alter spell sheets", source : [["E:RLW", 55], ["T", 11]], description: desc("The automation will not add M\u0192 to each artificer spell on the generated spell sheets") } }, "infuse item" : { name : "Infuse Item", source : [["E:RLW", 57], ["T", 12]], minlevel : 2, description : desc('Use the "Choose Feature" button above to add Artificer Infusions to the third page'), additional : levels.map(function (n) { return n < 2 ? "" : (n < 6 ? 4 : n < 10 ? 6 : n < 14 ? 8 : n < 18 ? 10 : 12) + " infusions known; max " + (n < 6 ? 2 : n < 10 ? 3 : n < 14 ? 4 : n < 18 ? 5 : 6) + " infused items"; }), extraname : "Artificer Infusion", extrachoices : ["Boots of the Winding Path (prereq: level 6 artificer)", "Enhanced Arcane Focus", "Enhanced Defense (armor)", "Enhanced Defense (shield)", "Enhanced Weapon", "Homunculus Servant", "Radiant Weapon (prereq: level 6 artificer)", "Repeating Shot", "Repulsion Shield (prereq: level 6 artificer)", "Resistant Armor (prereq: level 6 artificer)", "Returning Weapon"], extraTimes : levels.map(function (n) { return n < 2 ? 0 : n < 6 ? 4 : n < 10 ? 6 : n < 14 ? 8 : n < 18 ? 10 : 12; }), "boots of the winding path (prereq: level 6 artificer)" : { name : "Boots of the Winding Path", source : [["E:RLW", 62], ["T", 21]], description : desc([ "The wearer can use a bonus action to teleport up to 15 ft to an unoccupied space it can see", "It must be a space that the wearer had occupied some time during the current turn" ]), additional : "pair of boots; requires attunement", prereqeval : function(v) { return classes.known.artificer.level >= 6; }, magicitemsAdd : ["Boots of the Winding Path"] }, "enhanced arcane focus" : { name : "Enhanced Arcane Focus", source : [["E:RLW", 62], ["T", 21]], description: desc("The holder has a bonus to spell attack rolls and ignores half cover with spell attacks"), additional : levels.map(function (n) { return "rod/staff/wand; attunement; +" + (n < 10 ? 1 : 2); }), eval : function (lvl, chc) { AddMagicItem("Enhanced Arcane Focus +" + (classes.known.artificer.level < 10 ? 1 : 2)); }, removeeval : function (lvl, chc) { RemoveMagicItem("enhanced arcane focus, +1 or +2"); } }, "enhanced defense (armor)" : { name : "Enhanced Defense", source : [["E:RLW", 62], ["T", 21]], description : "", additional : levels.map(function (n) { return "armor/shield; +" + (n < 10 ? 1 : 2) + " magical"; }), prereqeval : function(v) { return GetFeatureChoice("classes", "artificer", "infuse item", true).indexOf("enhanced defense (shield)") == -1; }, eval : function (lvl, chc) { AddMagicItem("Armor +" + (classes.known.artificer.level < 10 ? 1 : 2)); }, removeeval : function (lvl, chc) { RemoveMagicItem("armor, +1, +2, or +3"); } }, "enhanced defense (shield)" : { name : "Enhanced Defense", source : [["E:RLW", 62], ["T", 21]], description : "", additional : levels.map(function (n) { return "armor/shield; +" + (n < 10 ? 1 : 2) + " magical"; }), prereqeval : function(v) { return GetFeatureChoice("classes", "artificer", "infuse item", true).indexOf("enhanced defense (armor)") == -1; }, eval : function (lvl, chc) { AddMagicItem("Shield +" + (classes.known.artificer.level < 10 ? 1 : 2)); }, removeeval : function (lvl, chc) { RemoveMagicItem("shield, +1, +2, or +3"); } }, "enhanced weapon" : { name : "Enhanced Weapon", source : [["E:RLW", 62], ["T", 21]], description : "", additional : levels.map(function (n) { return "simple/martial weapon; +" + (n < 10 ? 1 : 2) + " magical"; }), eval : function (lvl, chc) { AddMagicItem("Weapon +" + (classes.known.artificer.level < 10 ? 1 : 2)); }, removeeval : function (lvl, chc) { RemoveMagicItem("weapon, +1, +2, or +3"); } }, "homunculus servant" : { name : "Homunculus Servant", source : [["E:RLW", 62], ["T", 21]], description : desc([ "The item I infuse becomes the heart of a homunculus that immediately forms around it", "I determine its appearance; It is friendly to me and my allies and obeys my commands", 'See "Homunculus Servant" on a companion page to see its game statistics' ]), additional : "gem or crystal of 100+ gp", action : [["bonus action", " (command)"]], creaturesAdd : [["Homunculus Servant"]], creatureOptions : [{ name : "Homunculus Servant", source : [["E:RLW", 62], ["T", 22]], size : 5, type : "Construct", alignment : "Neutral", ac : 13, hp : 3, hd : [2, 4], hdLinked : ["artificer"], speed : "20 ft, fly 30 ft", scores : [4, 15, 12, 10, 10, 7], saves : ["", 4, "", "", "", ""], skills : { "perception" : 4, "stealth" : 4 }, damage_immunities : "poison", condition_immunities : "exhaustion, poisoned", senses : "Darkvision 60 ft", passivePerception : 14, languages : "understands the languages of its creator but can't speak", challengeRating : "0", proficiencyBonus : 2, proficiencyBonusLinked : true, attacksAction : 1, attacks : [{ name : "Force Strike", ability : 4, damage : [1, 4, "force"], range : "30 ft", description : "", modifiers : ["", "Prof"], abilitytodamage : false, useSpellMod : "artificer" }], features : [{ name : "Creator", description : "The homunculus obeys the commands of its creator and has the same proficiency bonus. It takes its turn immediately after its creator, on the same initiative count. It can move and take reactions on its own, but only takes the Dodge action on its turn unless its creator takes a bonus action to command it to take another action. If its creator is incapacitated, it can take any action, not just Dodge." }], traits : [{ name : "Healing", description : "The homunculus regains 2d6 hit points whenever the Mending spell is cast on it. Its HP total is equal to 1 + its creator's artificer level + its creator's Intelligence modifier. If it or its creator dies, the homunculus vanishes, leaving its heart in its space." }, { name : "Evasion", description : "If the homunculus is subjected to an effect that allows it to make a Dexterity saving throw to take only half damage, it instead takes no damage if it succeeds on the saving throw, and only half damage if it fails. It can't use this trait if it's incapacitated." }], actions : [{ name : "Channel Magic", description : "As a reaction, the homunculus delivers a spell cast by its creator that has a range of touch. The homunculus must be within 120 ft of its creator to do so." }], header : "Construct", calcChanges : { hp : function (totalHD, HDobj, prefix) { if (!classes.known.artificer) return; var intMod = Number(What('Int Mod')); var artLvl = classes.known.artificer.level; HDobj.alt.push(1 + intMod + artLvl); HDobj.altStr.push(" = 1 as a base\n + " + intMod + " from its creator's Intelligence modifier\n + " + artLvl + " from its creator's artificer level"); }, setAltHp : true, hpForceRecalc : true } }] }, "radiant weapon (prereq: level 6 artificer)" : { name : "Radiant Weapon", source : [["E:RLW", 62], ["T", 22]], description : desc([ "The weapon has a +1 bonus to attack and damage rolls made with it and it sheds light", "As a bonus action, its wielder can start/stop the light, 30-ft radius bright + 30 ft dim light", "The weapon has 4 charges, regaining 1d4 expended charges daily at dawn", "As a reaction when hit by an attack, the wielder can expend 1 charge to blind its attacker", "The attacker makes a Con save (my spell save DC) or is blinded until its next turn ends" ]), additional : "simple/martial weapon; requires attunement", prereqeval : function(v) { return classes.known.artificer.level >= 6; }, magicitemsAdd : ["Radiant Weapon"] }, "repeating shot" : { name : "Repeating Shot", source : [["E:RLW", 62], ["T", 22]], description : desc([ "The weapon requiring ammunition has a +1 bonus to attack and damage rolls made with it", "It magically produces one piece of ammunition whenever it is used to make a ranged attack", "Thus, it doesn't require ammunition and ignores the loading property if it has it" ]), additional : "weapon with ammo; requires attunement", magicitemsAdd : ["Repeating Shot"] }, "repulsion shield (prereq: level 6 artificer)" : { name : "Repulsion Shield", source : [["E:RLW", 63], ["T", 23]], description : desc([ "The shield gives its wearer an extra +1 bonus to AC; It has 4 charges, regaining 1d4 daily", "As a reaction when hit in melee, the wearer can use 1 charge to push the attacker 15 ft" ]), additional : "shield; requires attunement", prereqeval : function(v) { return classes.known.artificer.level >= 6; }, magicitemsAdd : ["Repulsion Shield"] }, "resistant armor (prereq: level 6 artificer)" : { name : "Resistant Armor", source : [["E:RLW", 63], ["T", 23]], description : desc([ "The armor gives its wearer resistance to one type of damage, chosen at the time of infusion", "Choose from: acid, cold, fire, force, lightning, necrotic, poison, psychic, radiant, or thunder" ]), additional : "suit of armor; requires attunement", prereqeval : function(v) { return classes.known.artificer.level >= 6; }, magicitemsAdd : ["Armor of Resistance"] }, "returning weapon" : { name : "Returning Weapon", source : [["E:RLW", 63], ["T", 23]], description : "After being used for a ranged attack, the weapon returns immediately; +1 magical bonus", additional : "weapon with the thrown property", magicitemsAdd : ["Returning Weapon"] } }, "the right tool for the job" : { name : "The Right Tool for the Job", source : [["E:RLW", 57], ["T", 13]], minlevel : 3, description: " [using thieves' or artisan's tools]" + desc("In 1 hour (during a rest) I can create a set of artisan's tools that last until I do so again"), }, "subclassfeature3" : { name : "Artificer Specialist", source : [["E:RLW", 57], ["T", 13]], minlevel : 3, description : desc([ 'Choose a specialism and put it in the "Class" field on the first page', "Choose either alchemist, artillerist, or battle smith" ]) }, "tool expertise" : { name : "Tool Expertise", source : [["E:RLW", 57], ["T", 13]], minlevel : 6, description : " [expertise with all tools I'm proficient with]", skillstxt : "Expertise with all tools I'm proficient with", eval : function () { Checkbox('Too Exp', true); }, removeeval : function () { Checkbox('Too Exp', false); } }, "flash of genius" : { name : "Flash of Genius", source : [["E:RLW", 57], ["T", 13]], minlevel : 7, description: desc("As a reaction when I or another in 30 ft make a check/save, I can add my Int mod to it"), action : [["reaction", ""]], usages : "Intelligence modifier per ", usagescalc : "event.value = Math.max(1, What('Int Mod'));", recovery : "long rest" }, "magic item adept" : { name : "Magic Item Adept", source : [["E:RLW", 57], ["T", 13]], minlevel : 10, description: desc("It takes me half the normal time and gold to craft common and uncommon magic items"), additional : levels.map(function (n) { return n < 10 ? "" : "attune to " + (n < 14 ? 4 : n < 18 ? 5 : 6) + " magic items"; }) }, "spell-storing item" : { name : "Spell-Storing Item", source : [["E:RLW", 58], ["T", 13]], minlevel : 11, description : desc([ "When I finish a long rest, I can infuse a 1st-/2nd-level artificer spell into an item I touch", "It has to be a weapon or spellcasting focus for me; Stored spells are lost if I do this again", "The spell must have a casting time of 1 action, but I need not have it prepared", "A creature holding an infused item can use an action to cast the spell, using my abilities" ]), additional : "cast stored spell", usages : "2\xD7 Int mod per ", usagescalc : "event.value = Math.max(2, Number(What('Int Mod')) * 2);", recovery : typePF ? "LR" : "long rest" }, "magic item savant" : { name : "Magic Item Savant", source : [["E:RLW", 58], ["T", 14]], minlevel : 14, description : " [ignore class/race/spell/level attune require.]" }, "soul of artifice" : { name : "Soul of Artifice", source : [["E:RLW", 58], ["T", 14]], minlevel : 20, description : " [+1 on all saves per attuned magic item]\n As a reaction when I'm reduced to 0 HP, I can end one infusion to drop to 1 HP instead", action : [["reaction", ""]], savetxt : { text : ["+1 to all saves per attuned magic item"] } } }, prereqLvl6 : function(v) { return classes.known.artificer.level >= 6; }, prereqLvl10 : function(v) { return classes.known.artificer.level >= 10; }, prereqLvl14 : function(v) { return classes.known.artificer.level >= 14; }, }; // Set the Artificer infusion list for Replicate Magic Item RunFunctionAtEnd(function() { var artMi = [ // 2nd-level artificer ["alchemy jug", 2], ["bag of holding", 2], ["cap of water breathing", 2], ["goggles of night", 2], ["rope of climbing", 2], ["sending stones", 2], ["wand of magic detection", 2], ["wand of secrets", 2], // 6th-level artificer ["boots of elvenkind", 6], ["cloak of elvenkind", 6], ["cloak of the manta ray", 6], ["eyes of charming", 6], ["gloves of thievery", 6], ["lantern of revealing", 6], ["pipes of haunting", 6], ["ring of water walking", 6], // 10th-level artificer ["boots of striding and springing", 10], ["boots of the winterlands", 10], ["bracers of archery", 10], ["brooch of shielding", 10], ["cloak of protection", 10], ["eyes of the eagle", 10], ["gauntlets of ogre power", 10], ["gloves of missile snaring", 10], ["gloves of swimming and climbing", 10], ["hat of disguise", 10], ["headband of intellect", 10], ["helm of telepathy", 10], ["medallion of thoughts", 10], ["necklace of adaptation", 10], // TCoE addition ["periapt of wound closure", 10], ["pipes of the sewers", 10], ["quiver of ehlonna", 10], ["ring of jumping", 10], ["ring of mind shielding", 10], ["slippers of spider climbing", 10], ["ventilating lung", 10], ["winged boots", 10], // 14th-level artificer ["amulet of health", 14], ["arcane propulsion arm", 14], ["belt of giant strength", 14, "hill (str 21, rare)"], ["boots of levitation", 14], ["boots of speed", 14], ["bracers of defense", 14], ["cloak of the bat", 14], ["dimensional shackles", 14], ["gem of seeing", 14], ["horn of blasting", 14], ["ring of free action", 14], ["ring of protection", 14], ["ring of the ram", 14] ]; // add all common items (except potions and scrolls) for (var mi in MagicItemsList) { var aMI = MagicItemsList[mi]; if (aMI.type && !(/potion|scroll/i).test(aMI.type) && ( (!aMI.rarity && aMI.choices) || (aMI.rarity && aMI.rarity.toLowerCase() === "common") ) ) { // only look at choices if the main object has no rarity (i.e. the choices have different rarities) if (!aMI.rarity && aMI.choices) { for (var c = 0; c < aMI.choices.length; c++) { var choiceNmLC = aMI.choices[c].toLowerCase(); var aMIchoice = aMI[choiceNmLC]; // skip if not common rarity or a potion or a scroll if (!aMIchoice || !aMIchoice.rarity || aMIchoice.rarity.toLowerCase() !== "common" || (/potion|scroll/i).test(aMIchoice.type)) continue; artMi.push([mi, 0, choiceNmLC]); } } else { // the main object has rarity "common", so add it as a whole artMi.push([mi]); } } } var theObj = ClassList.artificer.features["infuse item"]; for (var a = 0; a < artMi.length; a++) { var MI0 = artMi[a][0]; var MI1 = artMi[a][1]; var MI2 = artMi[a][2]; var anArtMi = MagicItemsList[MI0]; if (!anArtMi) continue; if (MI2 && anArtMi[MI2]) { anArtMi = { name : anArtMi[MI2].name ? anArtMi[MI2].name : anArtMi.name + " [" + MI2.capitalize() + "]", rarity : anArtMi[MI2].rarity ? anArtMi[MI2].rarity : anArtMi.rarity, source : anArtMi[MI2].source ? anArtMi[MI2].source : anArtMi.source, attunement : anArtMi[MI2].attunement !== undefined ? anArtMi[MI2].attunement : anArtMi.attunement } } var theI = anArtMi.name + (MI1 ? " (prereq: level " + MI1 + " artificer)" : ""); var theILC = theI.toLowerCase(); if (theObj[theILC]) continue; theObj[theILC] = { name : anArtMi.name, description : "", source : anArtMi.source, magicitemsAdd : [anArtMi.name], additional : anArtMi.attunement ? "requires attunement" : undefined, prereqeval : MI1 && MI1 > 2 ? ClassList.artificer["prereqLvl" + MI1] : undefined, submenu : "Replicate Magic Item" + (MI1 ? " (prereq: level " + (" "+MI1).slice(-2) + " artificer)" : " (common magic items) [" + getLetterRange(anArtMi.name, ["A-F", "G-Q", "R-Z"]) + "]") }; theObj.extrachoices.push(theI); }; }); // Add the Alchemist specialism AddSubClass("artificer", "alchemist", { regExpSearch : /^(?=.*alchemist)(?!.*wizard).*$/i, subname : "Alchemist", fullname : "Alchemist", source : [["E:RLW", 58], ["T", 14]], features : { "subclassfeature3" : { name : "Tools Proficiency", source : [["E:RLW", 58], ["T", 14]], minlevel : 3, description : " [proficient with alchemist's supplies]", toolProfs : ["Alchemist's supplies"], spellcastingExtra : ["healing word", "ray of sickness", "flaming sphere", "melf's acid arrow", "gaseous form", "mass healing word", "blight", "death ward", "cloudkill", "raise dead"] }, "subclassfeature3.1" : { name : "Experimental Elixir", source : [["E:RLW", 58], ["T", 14]], minlevel : 3, description : desc([ "When I finish a long rest I can produce a number of elixirs in empty flasks I touch", "Also, as an action, I can expend a spell slot to create one elixir in a touched empty flask", "I need alchemist supplies on my person to do this; An elixir lasts until my next long rest", "For their effects, see the experimental elixir table on a Notes page; They work like potions" ]), additional : levels.map(function (n) { return n < 3 ? "" : (n < 6 ? 1 : n < 15 ? 2 : 3) + " elixir" + (n < 6 ? "" : "s"); }), action : [["action", ""]], toNotesPage : [{ name : "Experimental Elixir Table", note : [ "Whenever I finish a long rest, I can magically produce a number of experimental elixir in empty flasks I touch. I can create one at 3rd level, two at 6th level, and three at 15th level.", "Creating an experimental elixir requires me to have alchemist's supplies on my person, and any elixir created like this lasts until it is drunk or until the end of my next long rest.", "I can create additional experimental elixirs by expending a spell slot of 1st level or higher for each one. When I do so, I use my action to create the elixir in an empty flask I touch.", "As an action, a creature can drink the elixir or administer it to an incapacitated creature.", "The effect of an elixir when someone drinks it is found on the table below. Roll to determine the effect for each elixir I create when finishing a long rest. I can choose the effect from the table for those created by expending a spell slot.", "\n D6\tEFFECT", "1\tHealing: The drinker regains a number of hit points equal to 2d4 + my Intelligence modifier.", "2\tSwiftness: The drinker's walking speed increases by 10 ft for 1 hour.", "3\tResilience: The drinker gains a +1 bonus to AC for 10 minutes.", "4\tBoldness: The drinker can roll a d4 and add the number rolled to every attack roll and saving throw they make for the next minute.", "5\tFlight: The drinker gains a flying speed of 10 ft for 10 minutes.", "6\tTransformation: The drinker's body is transformed as if by the alter self spell. The drinker determines the transformation caused by the spell, the effects of which last for 10 minutes." ] }] }, "subclassfeature5" : { name : "Alchemical Savant", source : [["E:RLW", 58], ["T", 15]], minlevel : 5, description : desc([ "When I cast spells using alchemist's supplies as my spellcasting focus, I can enhance them", "I add my Int mod to one roll of acid, fire, necrotic, or poison damage, or restoring HP" ]), calcChanges : { atkCalc : [ function (fields, v, output) { if (v.thisWeapon[3] && v.thisWeapon[4].indexOf("artificer") !== -1 && (/acid|fire|necrotic|poison/i).test(fields.Damage_Type)) { output.extraDmg += Math.max(Number(What("Int Mod")), 1); } }, "Artificer spells that deal acid, fire, necrotic, or poison damage which I cast while using alchemist's supplies as my spellcasting focus, have my Intelligence modifier (min 1) added to one damage die roll." ], spellAdd : [ function (spellKey, spellObj, spName) { if (spellObj.psionic || spName !== "artificer") return; var toAdd = Math.max(Number(What("Int Mod")), 1); if (genericSpellDmgEdit(spellKey, spellObj, "acid|fire|necro\\.?|necrotic|poison", toAdd, true, true) || genericSpellDmgEdit(spellKey, spellObj, "heal", toAdd, true, true)) { return true; } }, "Artificer spells I cast using alchemist's supplies as my spellcasting focus, have my Intelligence modifier (min 1) added to one die rolled for dealing acid, fire, necrotic, or poison damage, or when restoring hit points." ] } }, "subclassfeature9" : { name : "Restorative Reagents", source : [["E:RLW", 59], ["T", 15]], minlevel : 9, description : desc([ "Drinking my experimental elixirs now also grants 2d6 + my Int mod in temp HP (min 1)", "I can cast Lesser Restoration with alchemist's supplies without a spell slot (Int mod times)" ]), usages : "Int mod per ", usagescalc : "event.value = Math.max(1, What('Int Mod'));", recovery : "long rest", limfeaname : "Restorative Reagents: Lesser Restoration", spellcastingBonus : [{ name : "Restorative Reagents", spells : ["lesser restoration"], selection : ["lesser restoration"], firstCol : "Sp" }], spellChanges : { "lesser restoration" : { components : "V,S,M\u0192", compMaterial : "Alchemist's supplies", changes : "When using my Restorative Reagents class feature, I can cast Lesser Restoration a number of times per long rest equal to my Intelligence modifier. To do so, I have to use alchemist's supplies as my spellcasting focus." } } }, "subclassfeature15" : { name : "Chemical Mastery", source : [["E:RLW", 59], ["T", 15]], minlevel : 15, additional: "each spell 1\xD7 per long rest", description : desc([ "I have resistance to acid and poison damage and immunity to being poisoned", "I can cast Greater Restoration and Heal each once per long rest without a spell slot", "I need alchemist's supplies as a focus for it, but the spells require no material components" ]), dmgres : ["Acid", "Poison"], savetxt : { immune : ["poisoned condition"] }, spellcastingBonus : [{ name : "Chemical Mastery", spells : ["greater restoration", "heal"], selection : ["greater restoration", "heal"], firstCol : "oncelr", times : 2 }], spellChanges : { "greater restoration" : { components : "V,S,M\u0192", compMaterial : "Alchemist's supplies", description : "Reduce exhaustion 1 lvl or end charm, petrify, curse, one ability score reduction, or max HP reduction", changes : "When using my Chemical Mastery class feature and alchemist's supplies as my spellcasting focus, I can cast Greater Restoration once per long rest without using a spell slot or requiring other material components." }, "heal" : { components : "V,S,M\u0192", compMaterial : "Alchemist's supplies", allowUpCasting : false, changes : "When using my Chemical Mastery class feature and alchemist's supplies as my spellcasting focus, I can cast Heal once per long rest without using a spell slot." } } } } }); // Add the Artillerist specialism AddSubClass("artificer", "artillerist", { regExpSearch : /^(?=.*artillerist)(?!.*wizard).*$/i, subname : "Artillerist", fullname : "Artillerist", source : [["E:RLW", 59], ["T", 17]], features : { "subclassfeature3" : { name : "Tools Proficiency", source : [["E:RLW", 59], ["T", 17]], minlevel : 3, description : " [proficient with woodcarver's tools]", toolProfs : ["Woodcarver's tools"], spellcastingExtra : ["shield", "thunderwave", "scorching ray", "shatter", "fireball", "wind wall", "ice storm", "wall of fire", "cone of cold", "wall of force"] }, "subclassfeature3.1" : { name : "Eldritch Cannon", source : [["E:RLW", 59], ["T", 17]], minlevel : 3, description : desc([ "As an action, I can use woodcarver's or smith's tools to create an eldritch cannon in 5 ft", "I can do this once per long rest, or by expending a spell slot (SS 1+) to create one cannon", "I decide its size (Small/Tiny), appearance, type: flamethrower, force ballista, or protector", "It disappears after 1 hour, when reduced to 0 HP, or if I dismiss it as an action", "As a bonus action when within 60 ft of it, I can activate it to move and do its action", "I can't have multiple cannons; Select \"Eldritch Cannon\" on a companion page for its stats" ]), usages : 1, recovery : "long rest", altResource : "SS 1+", additional : levels.map(function(n) { return n < 3 ? "" : n < 15 ? "1 cannon" : "2 cannons"; }), action : [["action", " (create/dismiss)"], ["bonus action", " (activate)"]], creaturesAdd : [["Eldritch Cannon"]], creatureOptions : [{ name : "Eldritch Cannon", source : [["E:RLW", 59], ["T", 17]], size : [4, 5], type : "Object", alignment : "", ac : 18, hp : 5, hd : ["", ""], speed : "15 ft, climb 15 ft", scores : [10, 10, 10, 10, 10, 10], damage_immunities : "poison, psychic", passivePerception : 10, challengeRating : "1", proficiencyBonus : 2, proficiencyBonusLinked : true, attacksAction : 0, attacks : [{ name : "Flamethrower", ability : 4, damage : [2, 8, "fire"], range : "15-ft cone", description : "Dex save, success - half damage; Unattended flammable objects ignite", dc : true, useSpellMod : "artificer", abilitytodamage : false, tooltip : "The cannon exhales fire in an adjacent 15-ft cone that its creator designates. Each creature in that area must make a Dexterity saving throw against its creator's artificer spell save DC, taking 2d8 fire damage on a failed save or half as much damage on a successful one. The fire ignites any flammable objects in the area that aren't being worn or carried." }, { name : "Force Ballista", ability : 4, damage : [2, 8, "force"], range : "120 ft", description : "Creature hit is pushed 5 ft away", useSpellMod : "artificer", abilitytodamage : false, tooltip : "The cannon's creator makes a ranged spell attack, originating from the cannon, at one creature or object within 120 ft of it. On a hit, the target takes 2d8 force damage, and if the target is a creature, it is pushed up to 5 ft away from the cannon." }, { name : "Detonate", ability : 4, damage : [3, 8, "force"], range : "20-ft radius", description : "Dex save, success - half damage; Destroys cannon", dc : true, useSpellMod : "artificer", abilitytodamage : false, tooltip : "As an action, its creator can command the cannon to detonate if its creator is within 60 ft of it. Doing so destroys the cannon and forces each creature within 20 ft of it to make a Dexterity saving throw against its creator's artificer spell save DC, taking 3d8 force damage on a failed save or half as much damage on a successful one." }], features : [{ name : "Healing", description : "The cannon regains 2d6 HP whenever Mending is cast on it." }, { name : "Cannon Type", description : "Upon creation, the creator decides what type of cannon it is: Flamethrower, Force Ballista, or Protector. What feature/attack it can use depends on its type." }, { name : "Protector", description : "The cannon emits a burst of positive energy that grants itself and each creature of its creator's choice within 10 ft of it a number of temporary hit points equal to 1d8 + its creator's Intelligence modifier (minimum of +1)." }], traits : [{ name : "Creator", description : "As an object, the cannon only acts when activated by its creator, uses its creator's artificer spell attack and save DC, and has five times the artificer level in HP. It disappears after 1 hour, when reduced to 0 HP, or when its creator dismisses it as an action." }, { name : "Activation", description : "The creator of the cannon can activate it as a bonus action while within 60 ft of it. Once activated, the cannon does as instructed, moves and uses the action associated with its type: flamethrower attack, force ballista attack, or protector feature." }, { name : "Detonate (Artillerist 9)", minlevel : 9, description : "The creator of the cannon, can use an action to detonate the cannon when within 60 ft of it, see the attack section. The cannon's attacks now deal 3d8 damage.", eval : function(prefix, lvl) { // add the Detonate attack entry Value(prefix + "Comp.Use.Attack.3.Weapon Selection", "Detonate"); // Upgrade the damage for the attacks for (var i = 1; i <= 2; i++) { Value(prefix + "BlueText.Comp.Use.Attack." + i + ".Damage Die", "3d8"); } }, removeeval : function(prefix, lvl) { // remove the Detonate attack entry Value(prefix + "Comp.Use.Attack.3.Weapon Selection", ""); // Reset the damage for the attacks for (var i = 1; i <= 2; i++) { Value(prefix + "BlueText.Comp.Use.Attack." + i + ".Damage Die", "2d8"); } } }, { name : "Shimmering Field (Artillerist 15)", minlevel : 15, description : "The creator of the cannon and their allies have half cover while within 10 ft of the cannon." }], minlevelLinked : ["artificer"], header : "Object", calcChanges : { hp : function (totalHD, HDobj, prefix) { if (!classes.known.artificer) return; var artLvl = classes.known.artificer.level; HDobj.alt.push(5 * artLvl); HDobj.altStr.push(" = 5 \xD7 " + artLvl + " from five times its creator's artificer level"); }, setAltHp : true }, eval : function(prefix, lvl) { // remove the Detonate attack if adding this creature before artificer level 9 if (lvl[0] < 9) Value(prefix + "Comp.Use.Attack.3.Weapon Selection", ""); } }] }, "subclassfeature5" : { name : "Arcane Firearm", source : [["E:RLW", 59], ["T", 18]], minlevel : 5, description : " [lasts until I use this feature again]" + desc([ "After a long rest, I can use woodcarver's tools to enhance a wand, staff, or rod", "If I use this as my spellcasting focus for an artificer spell, I add +1d8 to one damage" ]), calcChanges : { atkAdd : [ function (fields, v) { if (v.thisWeapon[3] && v.thisWeapon[4].indexOf("artificer") !== -1) { fields.Damage_Die = fields.Damage_Die.replace(/D/g, 'd'); var d8Regex = /(\d+)d8/; if (fields.Damage_Die.indexOf('Bd8') != -1) { fields.Damage_Die = fields.Damage_Die.replace('Bd8', 'Cd8'); } else if (fields.Damage_Die.indexOf('Cd8') != -1) { fields.Damage_Die = fields.Damage_Die.replace('Cd8', 'Qd8'); } else if (d8Regex.test(fields.Damage_Die)) { fields.Damage_Die = fields.Damage_Die.replace(d8Regex, Number(fields.Damage_Die.replace(d8Regex, '$1')) + 1 + 'd8'); } else if (v.thisWeapon[3] == "eldritch blast") { fields.Description += (fields.Description ? '; ' : '') + "One ray +1d8 dmg"; } else { fields.Damage_Die += '+1d8'; } } }, "If I use my arcane firearm as a spellcasting focus for an artificer spell, I can add +1d8 to one of the spell's damage rolls.", 10 ], spellAdd : [ function (spellKey, spellObj, spName) { if (spellObj.psionic || spName !== "artificer") return; return genericSpellDmgEdit(spellKey, spellObj, "\\w+\\.?", "1d8", true, true); }, "If I use my arcane firearm as a spellcasting focus for an artificer spell, I can add +1d8 to one of the spell's damage rolls." ] } }, "subclassfeature9" : { name : "Explosive Cannon", source : [["E:RLW", 60], ["T", 18]], minlevel : 9, description: desc("My eldritch cannons deal +1d8 damage; As an action, I can detonate a cannon in 60 ft"), action : [["action", "Eldritch Cannon (detonate)"]] }, "subclassfeature15" : { name : "Fortified Position", source : [["E:RLW", 60], ["T", 18]], minlevel : 15, description : " [cannons grant half cover in 10 ft to allies]" + desc([ "I can now have two cannons at the same time and activate both with one bonus action", "I can create 2 eldritch cannons with the same action (still only one with a spell slot)" ]) } } }); // Add the Battle Smith specialism AddSubClass("artificer", "battle smith", { regExpSearch : /^(?=.*battle)(?=.*smith)(?!.*wizard).*$/i, subname : "Battle Smith", fullname : "Battle Smith", source : [["E:RLW", 60], ["T", 18]], attacks : [1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], features : { "subclassfeature3" : { name : "Battle Ready \u0026 Tool Proficiency", source : [["E:RLW", 61], ["T", 19]], minlevel : 3, description : desc([ "I gain proficiency with martial weapons and smith's tools", "I can use my Intelligence modifier instead of Strength or Dexterity for magic weapons" ]), toolProfs : ["Smith's tools"], spellcastingExtra : ["heroism", "shield", "branding smite", "warding bond", "aura of vitality", "conjure barrage", "aura of purity", "fire shield", "banishing smite", "mass cure wounds"], weaponProfs : [false, true], calcChanges : { atkAdd : [ function (fields, v) { if (!v.isSpell && (v.theWea.isMagicWeapon || v.thisWeapon[1]) && (fields.Mod === 1 || fields.Mod === 2) && Number(What("Int")) > Number(What(fields.Mod === 1 ? "Str" : "Dex"))) { fields.Mod = 4; } }, 'I can use my Intelligence modifier instead of Strength or Dexterity for the attack and damage rolls of magic weapons.' ] } }, "subclassfeature3.1" : { name : "Steel Defender", source : [["E:RLW", 61], ["T", 19]], minlevel : 3, description : desc([ "When I end a long rest, I can use smith's tools to create a steel defender", "I determine its appearance; It obeys my commands and it acts on my initiative, after me", "Unless I use a bonus action to command it, it only takes the Dodge action on its turn", "It can take reactions and move on its turn even if I don't command it", "I can't have multiple at once; Select \"Steel Defender\" on a companion page for its stats" ]), action : [["bonus action", " (command)"], ["action", " (restore)"]], creaturesAdd : [["Steel Defender"]], creatureOptions : [{ name : "Steel Defender", source : [["E:RLW", 61], ["T", 19]], size : 3, type : "Construct", alignment : "Neutral", ac : 15, hp : 12, hd : [2, 8], hdLinked : ["artificer"], speed : "40 ft", scores : [14, 12, 14, 4, 10, 6], saves : ["", 3, 4, "", "", ""], skills : { "athletics" : 4, "perception" : 4 }, damage_immunities : "poison", condition_immunities : "charmed, exhaustion, poisoned", passivePerception : 14, senses : "Darkvision 60 ft", languages : "understands the languages of its creator but can't speak", challengeRating : "1", proficiencyBonus : 2, proficiencyBonusLinked : true, attacksAction : 1, attacks : [{ name : "Force-Empowered Rend", ability : 4, damage : [1, 8, "piercing"], range : "Melee (5 ft)", description : "", modifiers : ["", "Prof"], abilitytodamage : false, useSpellMod : "artificer" }, { name : "Deflect Attack (reaction)", ability : 0, damage : [1, 4, "force"], range : "Melee (5 ft)", description : "After using the reaction, the attacker takes this damage, no attack roll required", modifiers : ["-Prof", "oInt"], abilitytodamage : false }], features : [{ name : "Creator", description : "The steel defender obeys the commands of its creator and shares its proficiency bonus. It takes its turn immediately after its creator, on the same initiative count. It can move and take reactions on its own, but only takes the Dodge action on its turn unless its creator takes a bonus action to command it to take another action. If its creator is incapacitated, it can take any action, not just Dodge." }, { name : "Vigilant", description : "The " + (typePF ? "" : "steel ") + "defender can't be surprised." }], traits : [{ name : "Healing", description : "The steel defender regains 2d6 HP whenever the Mending spell is cast on it. Its HP total is equal to 2 + its creator's artificer level times five + its creator's Int mod. Within an hour of its death, while within 5 ft, its creator can take an action to use smith's tools and expend a spell slot to have it return to full HP after 1 minute. If its creator dies, " + (typePF ? "the steel defender also perishes" : "so does it") + "." }], actions : [{ name : "Repair (3/Day)", description : "As an action, the " + (typePF ? "" : "magical mechanisms inside the ") + "steel defender restore" + (typePF ? "s" : "") + " 2d8 + its proficiency bonus in HP to itself or to one construct or object within 5 ft of it." }, { name : "Deflect Attack (reaction)", description : typePF ? "As a reaction, the steel defender imposes disadvantage on the attack roll of one creature it can see that is within 5 ft of it, provided the attack roll is against a creature other than the defender." : "As a reaction, the defender imposes disadv. on the attack roll of one creature it can see within 5 ft, provided the creature attacks another than the defender." }, { name : "Arcane Jolt (Battle Smith 9)", minlevel : 9, eval : function(prefix, lvl) { Value(prefix + "Comp.Use.Attack.1.Description", "Arcane Jolt (1d6): On hit, deal force damage or heal target in 30 ft"); }, removeeval : function(prefix, lvl) { Value(prefix + "Comp.Use.Attack.1.Description", ""); } }, { name : "Improved Defender (Battle Smith 15)", minlevel : 15, description : "The steel defender's Deflect Attack now deals 1d4 + its creator's Intelligence modifier in force damage to the attacker.", addMod : [{ type : "", field : "Comp.Use.AC", mod : 2, text : "The steel defender gains a +2 bonus to its AC (base AC of 15)." }], eval : function(prefix, lvl) { Value(prefix + "Comp.Use.Attack.1.Description", What(prefix + "Comp.Use.Attack.1.Description").replace("Arcane Jolt (1d6)", "Arcane Jolt (2d6)")); Value(prefix + "Comp.Use.Attack.2.Weapon Selection", "Deflect Attack (reaction)"); }, removeeval : function(prefix, lvl) { Value(prefix + "Comp.Use.Attack.1.Description", What(prefix + "Comp.Use.Attack.1.Description").replace("Arcane Jolt (2d6)", "Arcane Jolt (1d6)")); Value(prefix + "Comp.Use.Attack.2.Weapon Selection", ""); } }], minlevelLinked : ["artificer"], header : "Construct", calcChanges : { hp : function (totalHD, HDobj, prefix) { if (!classes.known.artificer) return; var intMod = Number(What('Int Mod')); var artLvl = classes.known.artificer.level; var artLvl5 = 5 * artLvl; HDobj.alt.push(2 + intMod + artLvl5); HDobj.altStr.push(" = 2 as a base\n + " + intMod + " from its creator's Intelligence modifier\n + 5 \xD7 " + artLvl + " from five times its creator's artificer level (" + artLvl5 + ")"); }, setAltHp : true, hpForceRecalc : true }, eval : function(prefix, lvl) { // remove the Deflect Attack (reaction) attack if adding this creature before artificer level 15 if (lvl[0] < 15) Value(prefix + "Comp.Use.Attack.2.Weapon Selection", ""); } }] }, "subclassfeature9" : { name : "Arcane Jolt", source : [["E:RLW", 61], ["T", 20]], minlevel : 9, description : function () { var descr9 = desc([ "Once per turn when my steel defender or magic weapon hits a target, I can have it:", " \u2022 Deal an extra +2d6 force damage to the target", " \u2022 Restore 2d6 HP to another target within 30 ft of the one that was hit" ]); var descr15 = descr9.replace(/2d6/g, '4d6'); return levels.map(function (n) { return n < 9 ? "" : n < 15 ? descr9 : descr15; }); }(), usages : "Intelligence modifier per ", usagescalc : "event.value = Math.max(1, What('Int Mod'));", recovery : "long rest", additional : levels.map(function (n) { return n < 9 ? "" : (n < 15 ? 2 : 4) + "d6"; }), calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.isMagicWeapon || v.thisWeapon[1]) { fields.Description += (fields.Description ? '; ' : '') + 'Arcane Jolt (' + (classes.known.artificer && classes.known.artificer.level >= 15 ? 4 : 2) + 'd6)'; } }, "Once per turn when I hit with a magic weapon or my steel defender hits with its attack, I can use my Arcane Jolt class feature to have the hit either deal extra force damage or heal somebody within 30 ft of the target hit." ] } }, "subclassfeature15" : { name : "Improved Defender", source : [["E:RLW", 61], ["T", 20]], minlevel : 15, description : desc([ "My defender's Deflect Attack now deals its attacker 1d4 + my Int mod force damage", "My arcane jolt damage/healing increases to 4d6; My steel defender gains +2 AC" ]) } } }); // Add the new special magic items for the artificer class (infusions) MagicItemsList["boots of the winding path"] = { name : "Boots of the Winding Path", source : [["E:RLW", 62], ["T", 21], ["UA:A2", 9], ["UA:A3", 12]], type : "wondrous item", description : "While wearing these boots, I can teleport up to 15 ft as a bonus action to an unoccupied space I can see, as long as I occupied that space at some point during the current turn.", descriptionFull : "While wearing these boots, a creature can teleport up to 15 feet as a bonus action to an unoccupied space the creature can see. The creature must have occupied that space at some point during the current turn.", attunement : true, action : [["bonus action", ""]] } MagicItemsList["enhanced arcane focus, +1 or +2"] = { name : "Enhanced Arcane Focus, +1 or +2", nameTest : /^(?=.*enhanced)(?=.*(arcane focus|rod|wand|staff)).*$/i, source : [["E:RLW", 62], ["T", 21]], type : "wondrous item", description : "While I am holding this arcane focus (rod, staff, or wand), I gain a +1 bonus to spell attack rolls (or +2 if the artificer that created it is level 10 or higher). In addition, I ignore half cover when making a spell attack.", descriptionFull : "While holding this rod, staff, or wand, a creature gains a +1 bonus to spell attack rolls. In addition, the creature ignores half cover when making a spell attack.\n The bonus increases to +2 when it is created by someone with 10 levels or more in the artificer class.", attunement : true, weight : 1, prerequisite : "Requires attunement by a spellcaster", prereqeval : function(v) { return v.isSpellcaster; }, choices : ["+1 to spell attacks", "+2 to spell attacks (artificer level 10+)"], "+1 to spell attacks" : { name : "Enhanced Arcane Focus +1", nameTest : /^(?=.*enhanced)(?=.*(arcane focus|rod|wand|staff))(?=.*\+1)(?!.*\+2).*$/i, description : "While I am holding this arcane focus (rod, staff, or wand), I gain a +1 bonus to spell attack rolls and I ignore half cover when making a spell attack.", calcChanges : { spellCalc : [ function (type, spellcasters, ability) { if (type == "attack") return 1; }, "I gain a +1 bonus to spell attack rolls." ] } }, "+2 to spell attacks (artificer level 10+)" : { name : "Enhanced Arcane Focus +2", nameTest : /^(?=.*enhanced)(?=.*(arcane focus|rod|wand|staff))(?!.*\+1)(?=.*\+2).*$/i, description : "While I am holding this arcane focus (rod, staff, or wand), I gain a +2 bonus to spell attack rolls and I ignore half cover when making a spell attack.", calcChanges : { spellCalc : [ function (type, spellcasters, ability) { if (type == "attack") return 2; }, "I gain a +2 bonus to spell attack rolls." ] } } } MagicItemsList["radiant weapon"] = { name : "Radiant Weapon", nameTest : "Radiant", source : [["E:RLW", 62], ["T", 22]], type : "weapon (any)", description : "This item adds a +1 on its to hit and damage, has 4 charges, and regains 1d4 at dawn. As a bonus action, I can have it start/stop shedding light, bright in 30 ft, dim in another 30 ft. As a reaction if hit by an attack, I can use 1 charge to blind the attacker until the end of its next turn unless it makes a Con save (my spell DC).", descriptionFull : "This magic weapon grants a +1 bonus to attack and damage rolls made with it. While holding it, the wielder can take a bonus action to cause it to shed bright light in a 30-foot radius and dim light for an additional 30 feet. The wielder can extinguish the light as a bonus action.\n The weapon has 4 charges. As a reaction immediately after being hit by an attack, the wielder can expend 1 charge and cause the attacker to be blinded until the end of the attacker's next turn, unless the attacker succeeds on a Constitution saving throw against your spell save DC. The weapon regains 1d4 expended charges daily at dawn.", attunement : true, usages : 4, recovery : "dawn", additional : "blind attacker; regains 1d4", action : [["bonus action", " (start/stop light)"], ["reaction", " (1 charge; after hit)"]], chooseGear : { type : "weapon", prefixOrSuffix : "suffix", descriptionChange : ["replace", "weapon"] }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && !v.isSpell && (/radiant/i).test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + 'Reaction to blind attacker'; } }, 'If I include the word "Radiant" in the name of a weapon, it will be treated as the magic weapon Radiant Weapon. It has +1 to hit and damage and can be used to shed light and to blind an attacker.' ], atkCalc : [ function (fields, v, output) { if (v.isMeleeWeapon && !v.isSpell && (/radiant/i).test(v.WeaponTextName)) { output.magic = v.thisWeapon[1] + 1; } } ] } } MagicItemsList["repeating shot"] = { name : "Repeating Shot", source : [["E:RLW", 62], ["T", 22], ["UA:A3", 13]], type : "weapon (any with ammunition)", description : "When I use this magic weapon to make a ranged attack, it magically produces one piece of ammunition and grants a +1 bonus to its attack and damage rolls. Thus, it doesn't require ammunition and ignores the loading property if it has it. The produced ammunition vanishes once it hits or misses a target.", descriptionFull : "This magic weapon grants a +1 bonus to attack and damage rolls made with it when it's used to make a ranged attack, and it ignores the loading property if it has it.\n If you load no ammunition in the weapon, it produces its own, automatically creating one piece of magic ammunition when you make a ranged attack with it. The ammunition created by the weapon vanishes the instant after it hits or misses a target.", attunement : true, chooseGear : { type : "weapon", prefixOrSuffix : "suffix", descriptionChange : ["replace", "weapon"], excludeCheck : function (inObjKey, inObj) { return !(/ammunition/i).test(inObj.description); } }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && !v.isSpell && (/^(?=.*repeating shot)(?=.*ammunition).*$/i).test(v.WeaponText)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, '').replace(/(;|,)? ?loading/i, ''); } }, 'If I include the words "Repeating Shot" in the name of a weapon with the ammunition property, it will be treated as the magic weapon Repeating Shot. It has +1 to hit and damage and produces its own ammunition, thus its loading property is removed if it has it.' ], atkCalc : [ function (fields, v, output) { if ((/^(?=.*repeating shot)(?=.*ammunition).*$/i).test(v.WeaponText) && !v.isSpell) { output.magic = v.thisWeapon[1] + 1; } }, '' ] } } MagicItemsList["repulsion shield"] = { name : "Repulsion Shield", source : [["E:RLW", 63], ["T", 23]], type : "shield", description : "I gain an additional +1 bonus to Armor Class while wielding this shield. The shield has 4 charges and regains 1d4 expended charges daily at dawn. As a reaction immediately after being hit by a melee attack, I can expend 1 charge to push the attacker up to 15 ft away.", descriptionFull : "A creature gains a +1 bonus to Armor Class while wielding this shield.\n The shield has 4 charges. While holding it, the wielder can use a reaction immediately after being hit by a melee attack to expend 1 of the shield's charges and push the attacker up to 15 feet away. The shield regains 1d4 expended charges daily at dawn.", weight : 6, attunement : true, usages : 4, additional : "regains 1d4", recovery : "dawn", action : [["reaction", " (1 charge)"]], shieldAdd : ["Repulsion Shield", 3, 6] } MagicItemsList["returning weapon"] = { name : "Returning Weapon", nameTest : "Returning", source : [["E:RLW", 63], ["T", 23], ["UA:A3", 14], ["UA:A2", 10]], type : "weapon (any thrown)", description : "This magic weapon grants a +1 bonus to attack and damage rolls I make with it. It returns to my hand immediately after I use it to make a ranged attack.", descriptionFull : "This magic weapon grants a +1 bonus to attack and damage rolls made with it, and it returns to the wielder's hand immediately after it is used to make a ranged attack.", chooseGear : { type : "weapon", prefixOrSuffix : "suffix", descriptionChange : ["replace", "weapon"], excludeCheck : function (inObjKey, inObj) { return !/\bthrown\b/i.test(inObj.description); } }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && v.isThrownWeapon && /returning/i.test(v.WeaponText)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + 'Returns immediately after ranged attack'; } }, 'If I include the word "Returning" in the name of a thrown weapon, it will be treated as the magic weapon Returning Weapon. It has +1 to hit and damage and returns to my hand immediately after I use it to make a ranged attack.' ], atkCalc : [ function (fields, v, output) { if (v.isThrownWeapon && /returning/i.test(v.WeaponText)) { output.magic = v.thisWeapon[1] + 1; } }, '' ] } } // Magic Items MagicItemsList["arcane propulsion arm"] = { name : "Arcane Propulsion Arm", source : [["E:RLW", 276]], type : "wondrous item", rarity : "very rare", description : "Once attached to my wrist, elbow, or shoulder, this prosthetic magically forms a copy of the appendage it's replacing. It can't be removed against my will, but I can as an action. I can use it as a proficient melee weapon with the thrown property. After a throwing attack with it, it returns and reattaches immediately.", descriptionFull : "This prosthetic appendage was developed by artificers of House Cannith. To attune to this item, you must attach it to your arm at the wrist, elbow, or shoulder, at which point the prosthetic magically forms a copy of the appendage it's replacing.\n\nWhile attached, the prosthetic provides these benefits:\n \u2022 The prosthetic is a fully capable part of your body.\n \u2022 You can take an action to remove the prosthetic, and it removes itself if your attunement to it ends. It can't be removed against your will.\n \u2022 The prosthetic is a magic melee weapon with which you're proficient. It deals 1d8 force damage on a hit and has the thrown property, with a normal range of 20 feet and a long range of 60 feet. When thrown, the prosthetic detaches and flies at the target of the attack, then immediately returns to you and reattaches.", attunement : true, prerequisite : "Requires attunement by a creature missing a hand or an arm", prereqeval : function (v) { return false; }, weaponOptions : [{ regExpSearch : /^(?=.*arcane)(?=.*propulsion)(?=.*arm).*$/i, name : "Arcane Propulsion Arm", source : [["E:RLW", 276]], ability : 1, type : "AlwaysProf", damage : [1, 8, "force"], range : "Melee, 20/60 ft", description : "Thrown; Returns immediately after thrown", abilitytodamage : true, selectNow : true }] } MagicItemsList["armblade"] = { name : "Armblade", source : [["E:RLW", 276]], type : "weapon (any one-handed melee weapon)", rarity : "common", description : "While attuned to it, this magic weapon is attached to my arm and inseparable from me. As a bonus action, I can retract it into my forearm or extend it from there. While it is extended, I can use the weapon as if I was holding it, and I can't use that hand for other purposes.", descriptionFull : "An armblade is a magic weapon that attaches to your arm, becoming inseparable from you as long as you're attuned to it. To attune to this item, you must hold it against your forearm for the entire attunement period.\n As a bonus action, you can retract the armblade into your forearm or extend it from there. While it is extended, you can use the weapon as if you were holding it, and you can't use that hand for other purposes.", attunement : true, prerequisite : "Requires attunement by a warforged", prereqeval : function (v) { return (/warforged/i).test(CurrentRace.known); }, allowDuplicates : true, chooseGear : { type : "weapon", prefixOrSuffix : "brackets", descriptionChange : ["replace", "weapon"], excludeCheck : function (inObjKey, inObj) { return (!inObj.description || (/two.{0,3}handed/i).test(inObj.description)) || (!inObj.range || !(/melee/i).test(inObj.range)); } } } MagicItemsList["belashyrra's beholder crown"] = { name : "Belashyrra's Beholder Crown", nameAlt : "Beholder Crown", source : [["E:RLW", 276]], type : "wondrous item", rarity : "legendary", description : "This symbiotic crown of dark purple and mauve stone attaches to my skull and removing it requires ending a curse. It allows me to see normally in magical and normal darkness (devil's sight) out to 120 ft. It has 10 charges, regaining 1d6+3 at dawn, which I can use to cast several spells with spell save DC 16.", descriptionLong : "This symbiotic crown of dark purple and mauve stone attaches to my skull once I attune to it and removing it requires ending a curse. It allows me to see normally in magical and normal darkness (devil's sight) out to 120 ft. It has 10 charges, regaining 1d6+3 at dawn, which I can use to cast several spells with spell save DC 16. These are: Charm Person (1 charge), Disintegrate (6 charges), Fear (3 charges), Finger of Death (7 charges), Flesh to Stone (6 charges), Hold Person (2 charges), Ray of Enfeeblement (2 charges), Sleep (1 charge), Slow (3 charges), and Telekinesis (5 charges).", descriptionFull : "This symbiotic crown is carved from dark purple and mauve stone, with ten points like stalks set with gemstones resembling the eyestalks of a beholder. To attune to this item, you must wear it on your head for the entire attunement period, during which the crown's hidden tendrils burrow into your scalp to bond with your skull.\n While wearing the crown, you can see normally in darkness, both magical and nonmagical, to a distance of 120 feet.\n " + toUni("Spells") + ". The crown has 10 charges. While wearing it, you can use an action to expend some of its charges to cast one of the following spells from it (spell save DC 16): charm person (1 charge), disintegrate (6 charges), fear (3 charges), finger of death (7 charges), flesh to stone (6 charges), hold person (2 charges), ray of enfeeblement (2 charges), sleep (1 charge), slow (3 charges), telekinesis (5 charges).\n The crown regains 1d6 + 3 expended charges daily at dawn.\n " + toUni("Symbiotic Nature") + ". The crown can't be removed from you while you're attuned to it, and you can't voluntarily end your attunement to it. If you're targeted by a spell that ends a curse, your attunement to the crown ends, and it detaches from you.\n The daelkyr Belashyrra made these crowns. While on the same plane of existence as the crown, Belashyrra can see through its eyestalks.", attunement : true, usages : 10, recovery : "dawn", additional : "regains 1d6+3", fixedDC : 16, spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "1 charge", spells : ["charm person", "sleep"], selection : ["charm person", "sleep"], firstCol : 1, times : 2 }, { name : "2 charges", spells : ["hold person", "ray of enfeeblement"], selection : ["hold person", "ray of enfeeblement"], firstCol : 2, times : 2 }, { name : "3 charges", spells : ["fear", "slow"], selection : ["fear", "slow"], firstCol : 3, times : 2 }, { name : "5 charges", spells : ["telekinesis"], selection : ["telekinesis"], firstCol : 5 }, { name : "6 charges", spells : ["disintegrate", "flesh to stone"], selection : ["disintegrate", "flesh to stone"], firstCol : 6, times : 2 }, { name : "7 charges", spells : ["finger of death"], selection : ["finger of death"], firstCol : 7 }] } MagicItemsList["cleansing stone"] = { name : "Cleansing Stone", source : [["E:RLW", 276], ["WGtE", 115], ["UA:MIoE", 2]], type : "wondrous item", rarity : "common", description : "This stone sphere is 1 ft in diameter and engraved with mystic sigils. As an action while touching it, I can activate it to remove dirt and grime from my garments and my person.", descriptionFull : "A cleansing stone is a sphere 1 foot in diameter, engraved with mystic sigils. When touching the stone, you can use an action to activate it and remove dirt and grime from your garments and your person.\n Such stones are often embedded in pedestals in public squares in Aundair or in high-end Ghallanda inns.", action : [["action", ""]], weight : 88 // using average marble/limestone density of 2.711 g/cm3 } var ERftLW_docentFullDescription = [ "A docent is a small metal sphere, about 2 inches across, studded with dragonshards. To attune to a docent, you must embed the item somewhere on your body, such as your chest or your eye socket.", '>>Sentience<<. A docent is a sentient item of any alignment with an Intelligence of 16, a Wisdom of 14, and a Charisma of 14. It perceives the world through your senses. It communicates telepathically with you and can speak, read, and understand any language it knows (see "Random Properties" below).', ">>Life Support<<. Whenever you end your turn with 0 hit points, the docent can make a Wisdom (Medicine) check with a +6 bonus. If this check succeeds, the docent stabilizes you.", ">>Random Properties<<. A docent has the following properties:", " \u2022 >>Languages<<. The docent knows Common, Giant, and 1d4 additional languages chosen by the DM. If a docent knows fewer than six languages, it can learn a new language after it hears or reads the language through your senses.", " \u2022 >>Skills<<. The docent has a +7 bonus to one of the following skills (roll a d4): (1) Arcana, (2) History, (3) Investigation, or (4) Nature.", " \u2022 >>Spells<<. The docent knows one of the following spells and can cast it at will, requiring no components (roll a d6): (1–2) detect evil and good or (3–6) detect magic. The docent decides when to cast the spell.", ">>Personality<<. A docent is designed to advise and assist the warforged it's attached to. One of the simple functions of a docent is to serve as a translator. The docent's properties are under its control, and if you have a bad relationship with your docent, it might refuse to assist you." ]; MagicItemsList["docent"] = { name : "Docent", source : [["E:RLW", 276]], type : "wondrous item", rarity : "rare", description : "I can embed this sentient small metal sphere studded with dragonshards into my chest or eye socket. I can communicate telepathically with it and it uses my senses. It can serve me as an advisor and a translator. It knowns 6 languages, a spells, an Intelligence skill, and can stabilize me. See Notes page.", descriptionFull : ERftLW_docentFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)<= 0 ? "Con" : "Dex"; return capitailzedDmgType + " Breath Weapon: As an action once per short rest, I can deal 2d6 " + dmgType + " damage to all in a " + shapeStr + ", " + saveStat + " save halves (DC 8 + Con mod + Prof Bonus).\nThis damage increases to 3d6 at level 6, 4d6 at level 11, and 5d6 at level 16."; }; var EGtW_draconicAncestryFeature = { name : "Draconic Ancestry", limfeaname : "Breath Weapon", minlevel : 1, usages : 1, additional : levels.map(function (n) { return (n < 6 ? 2 : n < 11 ? 3 : n < 16 ? 4 : 5) + 'd6'; }), recovery : "short rest", action : [['action', ""]], calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.dbBreathWeapon && (/dragonborn/i).test(CurrentRace.known)) { fields.Damage_Die = (CurrentRace.level < 6 ? 2 : CurrentRace.level < 11 ? 3 : CurrentRace.level < 16 ? 4 : 5) + 'd6'; if (CurrentRace.variant) { fields.Damage_Type = CurrentRace.breathDmgType; fields.Description = fields.Description.replace(/(dex|con) save/i, ((/cold|poison/i).test(CurrentRace.breathDmgType) ? 'Con' : 'Dex') + ' save'); fields.Range = (/black|blue|brass|bronze|copper/i).test(CurrentRace.variant) ? '5-ft \xD7 30-ft line' : '15-ft cone'; } } }, '', 1 ] } }; var EGtW_breathWeaponObj = { regExpSearch : /^(?=.*breath)(?=.*weapon).*$/i, name : "Breath weapon", source : [["W", 168]], ability : 3, type : 'Natural', damage : [2, 6, 'fire'], range : "15-ft cone", description : "Hits all in area; Dex save, success - half damage; Usable only once per short rest", abilitytodamage : false, dc : true, dbBreathWeapon : true, selectNow : true }; var EGtW_acidBreath = EGtW_breathWeaponDesc("acid", "line"); var EGtW_fireBreathCone = EGtW_breathWeaponDesc("fire", "cone"); var EGtW_fireBreathLine = EGtW_breathWeaponDesc("fire", "cone"); var EGtW_coldBreath = EGtW_breathWeaponDesc("cold", "cone"); var EGtW_lightningBreath = EGtW_breathWeaponDesc("lightning", "line"); var EGtW_poisonBreath = EGtW_breathWeaponDesc("poison", "cone"); var EGtW_forcefulPresenceStr = "Forceful Presence: Once per short rest, I can give myself adv. on an Intimidation or Persuasion check."; var EGtW_vengefulAssaultStr = "Vengeful Assault: As a reaction when I take damage from a creature in range of a weapon that I'm holding, I can use the weapon to make an attack against the creature. I can do this once per short rest."; // Draconblood RaceList["draconblood dragonborn"] = { regExpSearch : /draconblood/i, name : "Draconblood Dragonborn", sortname : "Dragonborn, Draconblood", source : [["W", 168]], plural : "Draconblood Dragonborn", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Draconic"], vision : [["Darkvision", 60]], weaponOptions : [EGtW_breathWeaponObj], age : " reach adulthood by 15 and live around 80 years", height : " stand well over 6 feet tall (5'6\" + 2d8\")", weight : " weigh around 240 lb (175 + 2d8 \xD7 2d6 lb)", heightMetric : " stand well over 1,8 metres tall (170 + 5d8 cm)", weightMetric : " weigh around 110 kg (80 + 5d8 \xD7 4d6 / 10 kg)", scores : [0, 0, 0, 2, 0, 1], trait : "Draconblood Dragonborn (+2 Intelligence, +1 Charisma)" + desc([ "Draconic Ancestry: Choose one type of dragon using the \"Racial Options\" button. I gain a breath weapon as determined by the dragon type chosen.", EGtW_forcefulPresenceStr ]), features : { "draconic ancestry" : EGtW_draconicAncestryFeature, "forceful presence" : { name : "Forceful Presence", source : [["W", 168]], minlevel : 1, usages : 1, recovery : "short rest" } }, variants : [] }; AddRacialVariant("draconblood dragonborn", "black", { regExpSearch : /black/i, name : "Black draconblood dragonborn", trait : "Black draconblood dragonborn (+2 Intelligence, +1 Charisma)" + desc([ EGtW_acidBreath, EGtW_forcefulPresenceStr ]), breathDmgType : "acid" }); AddRacialVariant("draconblood dragonborn", "blue", { regExpSearch : /blue/i, name : "Blue draconblood dragonborn", trait : "Blue draconblood dragonborn (+2 Intelligence, +1 Charisma)" + desc([ EGtW_lightningBreath, EGtW_forcefulPresenceStr ]), breathDmgType : "lightning" }); AddRacialVariant("draconblood dragonborn", "brass", { regExpSearch : /brass/i, name : "Brass draconblood dragonborn", trait : "Brass draconblood dragonborn (+2 Intelligence, +1 Charisma)" + desc([ EGtW_fireBreathLine, EGtW_forcefulPresenceStr ]), breathDmgType : "fire" }); AddRacialVariant("draconblood dragonborn", "bronze", { regExpSearch : /bronze/i, name : "Bronze draconblood dragonborn", trait : "Bronze draconblood dragonborn (+2 Intelligence, +1 Charisma)" + desc([ EGtW_lightningBreath, EGtW_forcefulPresenceStr ]), breathDmgType : "lightning" }); AddRacialVariant("draconblood dragonborn", "copper", { regExpSearch : /copper/i, name : "Copper draconblood dragonborn", trait : "Copper draconblood dragonborn (+2 Intelligence, +1 Charisma)" + desc([ EGtW_acidBreath, EGtW_forcefulPresenceStr ]), breathDmgType : "acid" }); AddRacialVariant("draconblood dragonborn", "gold", { regExpSearch : /gold/i, name : "Gold draconblood dragonborn", trait : "Gold draconblood dragonborn (+2 Intelligence, +1 Charisma)" + desc([ EGtW_fireBreathCone, EGtW_forcefulPresenceStr ]), breathDmgType : "fire" }); AddRacialVariant("draconblood dragonborn", "green", { regExpSearch : /green/i, name : "Green draconblood dragonborn", trait : "Green draconblood dragonborn (+2 Intelligence, +1 Charisma)" + desc([ EGtW_poisonBreath, EGtW_forcefulPresenceStr ]), breathDmgType : "poison" }); AddRacialVariant("draconblood dragonborn", "red", { regExpSearch : /red/i, name : "Red draconblood dragonborn", trait : "Red draconblood dragonborn (+2 Intelligence, +1 Charisma)" + desc([ EGtW_fireBreathCone, EGtW_forcefulPresenceStr ]), breathDmgType : "fire" }); AddRacialVariant("draconblood dragonborn", "silver", { regExpSearch : /silver/i, name : "Silver draconblood dragonborn", trait : "Silver draconblood dragonborn (+2 Intelligence, +1 Charisma)" + desc([ EGtW_coldBreath, EGtW_forcefulPresenceStr ]), breathDmgType : "cold" }); AddRacialVariant("draconblood dragonborn", "white", { regExpSearch : /white/i, name : "White draconblood dragonborn", trait : "White draconblood dragonborn (+2 Intelligence, +1 Charisma)" + desc([ EGtW_coldBreath, EGtW_forcefulPresenceStr ]), breathDmgType : "cold" }); // Ravenite RaceList["ravenite dragonborn"] = { regExpSearch : /ravenite/i, name : "Ravenite Dragonborn", sortname : "Dragonborn, Ravenite", source : [["W", 169]], plural : "Ravenite Dragonborn", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Draconic"], vision : [["Darkvision", 60]], weaponOptions : [EGtW_breathWeaponObj], age : " reach adulthood by 15 and live around 80 years", height : " stand well over 6 feet tall (5'6\" + 2d8\")", weight : " weigh around 240 lb (175 + 2d8 \xD7 2d6 lb)", heightMetric : " stand well over 1,8 metres tall (170 + 5d8 cm)", weightMetric : " weigh around 110 kg (80 + 5d8 \xD7 4d6 / 10 kg)", scores : [2, 1, 0, 0, 0, 0], trait : "Ravenite Dragonborn (+2 Strength, +1 Constitution)" + desc([ "Draconic Ancestry: Choose one type of dragon using the \"Racial Options\" button. I gain a breath weapon as determined by the dragon type chosen.", EGtW_vengefulAssaultStr ]), features : { "draconic ancestry" : EGtW_draconicAncestryFeature, "vengeful assault" : { name : "Vengeful Assault", source : [["W", 168]], minlevel : 1, usages : 1, action : [['reaction', ""]], recovery : "short rest" } }, variants : [] }; AddRacialVariant("ravenite dragonborn", "black", { regExpSearch : /black/i, name : "Black ravenite dragonborn", trait : "Black ravenite dragonborn (+2 Strength, +1 Constitution)" + desc([ EGtW_acidBreath, EGtW_vengefulAssaultStr ]), breathDmgType : "acid" }); AddRacialVariant("ravenite dragonborn", "blue", { regExpSearch : /blue/i, name : "Blue ravenite dragonborn", trait : "Blue ravenite dragonborn (+2 Strength, +1 Constitution)" + desc([ EGtW_lightningBreath, EGtW_vengefulAssaultStr ]), breathDmgType : "lightning" }); AddRacialVariant("ravenite dragonborn", "brass", { regExpSearch : /brass/i, name : "Brass ravenite dragonborn", trait : "Brass ravenite dragonborn (+2 Strength, +1 Constitution)" + desc([ EGtW_fireBreathLine, EGtW_vengefulAssaultStr ]), breathDmgType : "fire" }); AddRacialVariant("ravenite dragonborn", "bronze", { regExpSearch : /bronze/i, name : "Bronze ravenite dragonborn", trait : "Bronze ravenite dragonborn (+2 Strength, +1 Constitution)" + desc([ EGtW_lightningBreath, EGtW_vengefulAssaultStr ]), breathDmgType : "lightning" }); AddRacialVariant("ravenite dragonborn", "copper", { regExpSearch : /copper/i, name : "Copper ravenite dragonborn", trait : "Copper ravenite dragonborn (+2 Strength, +1 Constitution)" + desc([ EGtW_acidBreath, EGtW_vengefulAssaultStr ]), breathDmgType : "acid" }); AddRacialVariant("ravenite dragonborn", "gold", { regExpSearch : /gold/i, name : "Gold ravenite dragonborn", trait : "Gold ravenite dragonborn (+2 Strength, +1 Constitution)" + desc([ EGtW_fireBreathCone, EGtW_vengefulAssaultStr ]), breathDmgType : "fire" }); AddRacialVariant("ravenite dragonborn", "green", { regExpSearch : /green/i, name : "Green ravenite dragonborn", trait : "Green ravenite dragonborn (+2 Strength, +1 Constitution)" + desc([ EGtW_poisonBreath, EGtW_vengefulAssaultStr ]), breathDmgType : "poison" }); AddRacialVariant("ravenite dragonborn", "red", { regExpSearch : /red/i, name : "Red ravenite dragonborn", trait : "Red ravenite dragonborn (+2 Strength, +1 Constitution)" + desc([ EGtW_fireBreathCone, EGtW_vengefulAssaultStr ]), breathDmgType : "fire" }); AddRacialVariant("ravenite dragonborn", "silver", { regExpSearch : /silver/i, name : "Silver ravenite dragonborn", trait : "Silver ravenite dragonborn (+2 Strength, +1 Constitution)" + desc([ EGtW_coldBreath, EGtW_vengefulAssaultStr ]), breathDmgType : "cold" }); AddRacialVariant("ravenite dragonborn", "white", { regExpSearch : /white/i, name : "White ravenite dragonborn", trait : "White ravenite dragonborn (+2 Strength, +1 Constitution)" + desc([ EGtW_coldBreath, EGtW_vengefulAssaultStr ]), breathDmgType : "cold" }); } // [dupl_start] reprints from Volo's Guide to Monsters if (!SourceList.V) { RaceList["fallen aasimar"] = { regExpSearch : /^((?=.*aasimar)|((?=.*planetouched)(?=.*(celestial|angel))))(?=.*fallen).*$/i, name : "Fallen Aasimar", source : [["V", 104], ["W", 168]], plural : "Fallen Aasimar", sortname : "Aasimar, Fallen", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Celestial"], vision : [["Darkvision", 60]], dmgres : ["Necrotic", "Radiant"], age : " reach adulthood in their late teens and live around 160 years", height : " range from barely 5 to well over 6 feet tall (4'8\" + 2d10\")", weight : " weigh around 165 lb (110 + 2d10 \xD7 2d4 lb)", heightMetric : " range from barely 1,5 to well over 1,8 metres tall (145 + 5d10 cm)", weightMetric : " weigh around 75 kg (50 + 5d10 \xD7 4d4 / 10 kg)", scores : [1, 0, 0, 0, 0, 2], trait : "Fallen Aasimar (+1 Strength, +2 Charisma)" + (typePF ? "\n" : " ") + "Light Bearer: I know the Light cantrip.\nHealing Hands: As an action, once per long rest, I can touch to heal for my level in HP.\nNecrotic Shroud: Once per long rest when I'm 3rd level, I can use an action to transform, causing all within 10 ft of me to make a Cha" + (typePF ? "" : "risma") + " saving throw (DC 8 + Cha mod + Prof Bonus) or be frightened of me until the end of my next turn. This lasts for 1 minute or until I end it as a bonus action. Once on my turn I can have one of my attacks or spells deals my level in extra necrotic damage to one target.", abilitySave : 6, spellcastingAbility : 6, spellcastingBonus : [{ name : "Light Bearer", spells : ["light"], selection : ["light"], firstCol : 'atwill' }], features : { "healing hands" : { name : "Healing Hands", usages : 1, minlevel : 1, recovery : "long rest", additional : levels.map(function (n) { return n + " HP"; }), action : [["action", ""]] }, "necrotic shroud" : { name : "Necrotic Shroud", usages : 1, minlevel : 3, recovery : "long rest", additional : levels.map(function (n) { return n < 3 ? "" : "+" + n + " damage"; }), action : [["action", " (start)"], ['bonus action', ' (end)']] } } }; RaceList["protector aasimar"] = { regExpSearch : /^((?=.*aasimar)|((?=.*planetouched)(?=.*(celestial|angel))))(?=.*protector).*$/i, name : "Protector Aasimar", source : [["V", 104], ["W", 167]], plural : "Protector Aasimar", sortname : "Aasimar, Protector", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Celestial"], vision : [["Darkvision", 60]], dmgres : ["Necrotic", "Radiant"], age : " reach adulthood in their late teens and live around 160 years", height : " range from barely 5 to well over 6 feet tall (4'8\" + 2d10\")", weight : " weigh around 165 lb (110 + 2d10 \xD7 2d4 lb)", heightMetric : " range from barely 1,5 to well over 1,8 metres tall (145 + 5d10 cm)", weightMetric : " weigh around 75 kg (50 + 5d10 \xD7 4d4 / 10 kg)", scores : [0, 0, 0, 0, 1, 2], trait : "Protector Aasimar (+1 Wisdom, +2 Charisma)\nLight Bearer: I know the Light cantrip.\nHealing Hands: As an action, once per long rest, I can touch to heal for my level in HP.\nRadiant Soul: Once per long rest when I'm 3rd level, I can use an action to transform, gaining glimmer in my eyes and two incorporeal wings. For 1 minute or until I end it as a bonus action, I have 30 feet fly speed; once on my turn I can have one of my attacks or spells deal my level in extra radiant damage to one target.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Light Bearer", spells : ["light"], selection : ["light"], firstCol : 'atwill' }], features : { "healing hands" : { name : "Healing Hands", usages : 1, minlevel : 1, recovery : "long rest", additional : levels.map(function (n) { return n + " HP"; }), action : [["action", ""]] }, "radiant soul" : { name : "Radiant Soul", usages : 1, minlevel : 3, recovery : "long rest", additional : levels.map(function (n) { return n < 3 ? "" : "+" + n + " damage"; }), action : [["action", " (start)"], ['bonus action', ' (end)']] } } }; RaceList["scourge aasimar"] = { regExpSearch : /^((?=.*aasimar)|((?=.*planetouched)(?=.*(celestial|angel))))(?=.*scourge).*$/i, name : "Scourge Aasimar", source : [["V", 104], ["W", 167]], plural : "Scourge Aasimar", sortname : "Aasimar, Scourge", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Celestial"], vision : [["Darkvision", 60]], dmgres : ["Necrotic", "Radiant"], age : " reach adulthood in their late teens and live around 160 years", height : " range from barely 5 to well over 6 feet tall (4'8\" + 2d10\")", weight : " weigh around 165 lb (110 + 2d10 \xD7 2d4 lb)", heightMetric : " range from barely 1,5 to well over 1,8 metres tall (145 + 5d10 cm)", weightMetric : " weigh around 75 kg (50 + 5d10 \xD7 4d4 / 10 kg)", scores : [0, 0, 1, 0, 0, 2], trait : "Scourge Aasimar (+1 Constitution, +2 Charisma)" + (typePF ? "\n" : " ") + "Light Bearer: I know the Light cantrip.\nHealing Hands: As an action, once per long rest, I can touch to heal for my level in HP.\nRadiant Consumption: Once per long rest when I'm 3rd level, I can use an action to radiate bright light in 10-ft radius and dim light for another 10-ft, for 1 minute or until I end it as a bonus action. Once on my turn my attack or spell deals my level in extra radiant damage to one target, and at the end of my turns all creatures within 10 ft of me, including myself, take half my level in radiant damage.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Light Bearer", spells : ["light"], selection : ["light"], firstCol : 'atwill' }], features : { "healing hands" : { name : "Healing Hands", usages : 1, minlevel : 1, recovery : "long rest", additional : levels.map(function (n) { return n + " HP"; }), action : [["action", ""]] }, "radiant consumption" : { name : "Radiant Consumption", usages : 1, minlevel : 3, recovery : "long rest", additional : levels.map(function (n) { if (n < 3) return "" return Math.ceil(n/2) + "/" + n + " damage"; }), action : [["action", " (start)"], ['bonus action', ' (end)']] } } }; if (!RaceList["bugbear"]) { RaceList["bugbear"] = { regExpSearch : /bugbear/i, name : "Bugbear", source : [["V", 119], ["E:RLW", 25], ["W", 174]], plural : "Bugbears", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Goblin"], vision : [["Darkvision", 60]], skills : ["Stealth"], age : " reach adulthood at age 16 and live up to 80 years", height : " are between 6 and 8 feet tall (6'0\" + 2d12\")", weight : " weigh between 250 and 350 lb (200 + 2d12 \xD7 2d6 lb)", heightMetric : " are between 1,9 and 2,4 metres tall (185 + 5d12 cm)", weightMetric : " weigh between 115 and 160 kg (90 + 5d12 \xD7 4d6 / 10 kg)", scores : [2, 1, 0, 0, 0, 0], features : { "surprise attack" : { name : "Surprise Attack", minlevel : 1, usages : 1, recovery : "Combat", additional : "2d6" } }, trait : "Bugbear (+2 Strength, +1 Dexterity)\nPowerful Build: I count as one size larger when determining my carrying capacity and the weight I can push, drag, or lift.\nLong-Limbed: I have an additional 5 feet reach with melee attacks that I make on my turn.\nSurprise Attack: If I hit a surprised creature on my first turn in combat, that attack deals an extra 2d6 damage. I can do this only once per combat.", carryingCapacity : 2 }; } RaceList["firbolg"] = { regExpSearch : /firbolg/i, name : "Firbolg", source : [["V", 106], ["W", 170]], plural : "Firbolg", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Elvish", "Giant", "Speech of Beast and Leaf"], age : " reach adulthood around 30 and can live for 500 years", height : " are between 6 and half and 8 feet tall (6'2\" + 2d12\")", weight : " weigh between 240 and 300 lb (175 + 2d12 \xD7 2d6 lb)", heightMetric : " are between 2 and 2,5 metres tall (190 + 5d12 cm)", weightMetric : " weigh between 110 and 135 kg (80 + 5d12 \xD7 4d6 / 10 kg)", scores : [1, 0, 0, 0, 2, 0], trait : "Firbolg (+1 Strength, +2 Wisdom)" + (typePF ? "\n" : " ") + "Hidden Step: Once per short rest, as a bonus action, I turn invisible until the start of my next turn as per the invisibility spell.\nPowerful Build: I count as one size larger for the weight I can carry.\nFirbolg Magic: I can cast the Detect Magic and Disguise Self spells each once per short rest. With Disguise Self I can seem up to 3 feet shorter. Wisdom is my ability for these spells.\nSpeech of Beast and Leaf: I can make my words understood, in a limited manner, by beasts and plants. I have advantage on Charisma checks to influence them.", spellcastingAbility : 5, features : { "firbolg magic (detect magic)" : { name : "Firbolg Magic", minlevel : 1, spellcastingBonus : [{ name : "Firbolg Magic", spells : ["detect magic", "disguise self"], selection : ["detect magic", "disguise self"], firstCol : 'oncesr', times : 2 }], spellChanges : { "disguise self" : { description : "Alter appearance, up to 3ft shorter/taller; Int(Investigation) check vs. spell DC to determine disguise", changes : "Using Firbolg Magic, I can cast Disguise Self once per short rest to also seem up to 3 feet shorter or taller." } } }, "hidden step" : { name : "Hidden Step", minlevel : 1, usages : 1, recovery : "short rest", action : [["bonus action", ""]] } }, carryingCapacity : 2 }; if (!RaceList["goblin"]) { RaceList["goblin"] = { regExpSearch : /^(?=.*\bgoblins?\b)(?!.*(hobgoblin|bugbear)).*$/i, name : "Goblin", source : [["V", 119], ["G", 17], ["E:RLW", 26], ["W", 174]], plural : "Goblins", size : 4, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Goblin"], vision : [["Darkvision", 60]], age : " reach adulthood at age 8 and live up to 60 years", height : " are between 3 and a half and 4 feet tall (3'5\" + 2d4\")", weight : " weigh between 40 and 70 lb (35 + 2d4 \xD7 1 lb)", heightMetric : " are between 100 and 120 cm tall (100 + 5d4 cm)", weightMetric : " weigh between 20 and 30 kg (17 + 5d4 \xD7 2 / 10 kg)", scores : [0, 2, 1, 0, 0, 0], features : { "fury of the small" : { name : "Fury of the Small", minlevel : 1, usages : 1, recovery : "short rest", additional : levels.map(function (n) { return "+" + n + " damage"; }) } }, action : [["bonus action", "Nimble Escape (disengage/hide)"]], trait : "Goblin (+2 Dexterity, +1 Constitution)"+ "\n \u2022 Fury of the Small: Once per short rest, when I damage a creature of a size category larger than mine with an attack or a spell, I can have it take extra damage equal to my level."+ "\n \u2022 Nimble Escape: As a bonus action, I can take the Disengage or Hide action." }; } if (!RaceList["goliath"]) { RaceList["goliath"] = { regExpSearch : /goliath/i, name : "Goliath", source : [["E", 11], ["V", 108], ["W", 176]], plural : "Goliaths", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Giant"], dmgres : ["Cold"], skills : ["Athletics"], age : " reach adulthood in their late teens and live less than 100 years", height : " are between 6 and a half and 8 feet tall (6'2\" + 2d10\")", weight : " weigh between 280 and 340 lb (200 + 2d10 \xD7 2d6 lb)", heightMetric : " are between 2 and 2,4 metres tall (190 + 5d10 cm)", weightMetric : " weigh between 100 and 155 kg (90 + 5d10 \xD7 4d6 / 10 kg)", scores : [2, 0, 1, 0, 0, 0], features : { "stone's endurance" : { name : "Stone's Endurance", minlevel : 1, usages : 1, recovery : "short rest", action : [["reaction", ""]] } }, trait : "Goliath (+2 Strength, +1 Constitution)"+ "\n \u2022 Stone's Endurance: Once per short rest, when I take damage, I can use my reaction to reduce the damage by 1d12 + my Constitution modifier."+ "\n \u2022 Powerful Build: I count as one size larger when determining my carrying capacity and the weight I can push, drag, or lift."+ "\n \u2022 Mountain Born: I have resistance to cold damage and I'm acclimated to high altitude, including elevations above 20000 ft."+ (typePF ? "\n \u2022 Natural Athlete: I have proficiency in the Athletics skill." : ""), carryingCapacity : 2 }; } if (!RaceList["hobgoblin"]) { RaceList["hobgoblin"] = { regExpSearch : /hobgoblin/i, name : "Hobgoblin", source : [["V", 119], ["E:RLW", 26], ["W", 175]], plural : "Hobgoblins", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Goblin"], vision : [["Darkvision", 60]], armorProfs : [true, false, false, false], age : " reach adulthood in their late teens and live less than 100 years", height : " range from barely 5 to well over 6 feet tall (4'8\" + 2d10\")", weight : " weigh between 150 and 200 lb (110 + 2d10 \xD7 2d4 lb)", heightMetric : " range from barely 1,5 to well over 1,8 metres tall (145 + 5d10 cm)", weightMetric : " weigh between 70 and 90 kg (50 + 5d10 \xD7 4d4 / 10 kg)", scores : [0, 0, 2, 1, 0, 0], features : { "saving face" : { name : "Saving Face", minlevel : 1, usages : 1, recovery : "short rest" } }, trait : "Hobgoblin (+2 Constitution, +1 Intelligence)\n\nMartial Training: I am proficient with two martial weapons of my choice and light armor.\n\nSaving Face: Once per short rest, when I miss an attack roll or fail an ability check or a saving throw, I can gain a bonus to the roll equal to the number of allies I can see within 30 ft of me (max +5)." }; } RaceList["kenku"] = { regExpSearch : /kenku/i, name : "Kenku", source : [["V", 109], ["W", 177]], plural : "Kenku", size : 3, speed : { walk : { spd : 30, enc : 20 } }, skillstxt : "Choose two from Acrobatics, Deception, Stealth, and Sleight of Hand", languageProfs : ["Common", "Auran"], age : " reach maturity at about 12 years old and can live to 60", height : " are around 5 feet tall (4'4\" + 2d8\")", weight : " weigh between 90 and 120 lb (70 + 2d8 \xD7 1d4 lb)", heightMetric : " are around 1,5 metres tall (135 + 5d8 cm)", weightMetric : " weigh between 40 and 55 kg (35 + 5d8 \xD7 2d4 / 10 kg)", scores : [0, 2, 0, 0, 1, 0], trait : "Kenku (+2 Dexterity, +1 Wisdom)"+ "\n \u2022 Expert Forgery: Kenku can duplicate other creatures' handwriting and craftwork. I have advantage on all checks made to produce forgeries or duplicates of existing objects."+ "\n \u2022 Mimicry: I can mimic any sounds I have heard, including voices, but can otherwise not speak. Creatures hearing these sounds can determine they are imitations with a successful Wisdom (Insight) check opposed by my Charisma (Deception)." }; } // reprints from Elemental Evil Player's Companion if (!SourceList.E) { RaceList["aarakocra"] = { regExpSearch : /aarakocra/i, name : "Aarakocra", source : [["E", 5], ["W", 166]], plural : "Aarakocra", size : 3, speed : { walk : { spd : 25, enc : 15 }, fly : { spd : 50, enc : 0 } }, languageProfs : ["Common", "Aarakocra", "Auran"], weaponOptions : [{ baseWeapon : "unarmed strike", regExpSearch : /talon/i, name : "Talons", source : [["E", 5], ["W", 166]], damage : [1, 4, "slashing"], selectNow : true }], age : " reach maturity by age 3 and live about 30 years", height : " are about 5 feet tall", weight : " weigh between 80 and 100 lb", heightMetric : " are about 1,5 metres tall", weightMetric : " weigh between 36 and 45 kg", scores : [0, 2, 0, 0, 1, 0], trait : "Aarakocra (+2 Dexterity, +1 Wisdom)\n\nFlight: I have a flying speed of 50 feet. To use this speed, I can't be wearing medium or heavy armor.\n\nTalons: My unarmed strikes deal 1d4 slashing damage on a hit." }; RaceList["air genasi"] = { regExpSearch : /^(?=.*(genasi|planetouched))(?=.*\bairs?\b).*$/i, name : "Air genasi", sortname : "Genasi, Air", source : [["E", 9], ["W", 172]], plural : "Air genasi", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Primordial"], age : " reach adulthood in their late teens and live up to 120 years", height : " range from barely 5 to well over 6 feet tall (4'8\" + 2d10\")", weight : " weigh around 165 lb (110 + 2d10 \xD7 2d4 lb)", heightMetric : " range from barely 1,5 to well over 1,8 metres tall (145 + 5d10 cm)", weightMetric : " weigh around 75 lb (50 + 5d10 \xD7 4d4 / 10 kg)", scores : [0, 1, 2, 0, 0, 0], trait : "Air Genasi (+1 Dexterity, +2 Constitution)\n\nUnending Breath: I can hold my breath indefinitely while I am not incapacitated.\n\nMingle with the Wind: I can cast the Levitate spell once with this trait, requiring no material components, and I regain the ability to cast it this way when I finish a long rest. Constitution is my spellcasting ability for this spell.", spellcastingAbility : 3, features : { "levitate" : { name : "Mingle with the Wind", minlevel : 1, spellcastingBonus : [{ name : "Mingle with the Wind", spells : ["levitate"], selection : ["levitate"], firstCol : 'oncelr' }], spellChanges : { "levitate" : { components : "V,S", compMaterial : "", changes : "Using Mingle with the Wind, I can cast Levitate once per long rest without requiring material components." } } } } }; RaceList["earth genasi"] = { regExpSearch : /^(?=.*(genasi|planetouched))(?=.*\bearths?\b).*$/i, name : "Earth genasi", sortname : "Genasi, Earth", source : [["E", 9], ["W", 172]], plural : "Earth genasi", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Primordial"], age : " reach adulthood in their late teens and live up to 120 years", height : " range from barely 5 to well over 6 feet tall (4'8\" + 2d10\")", weight : " weigh around 165 lb (110 + 2d10 \xD7 2d4 lb)", heightMetric : " range from barely 1,5 to well over 1,8 metres tall (145 + 5d10 cm)", weightMetric : " weigh around 75 lb (50 + 5d10 \xD7 4d4 / 10 kg)", scores : [1, 0, 2, 0, 0, 0], trait : "Earth Genasi (+1 Strength, +2 Constitution)" + (typePF ? "\n" : "") + "\nEarth Walk: I can move across difficult terrain made of earth or stone without expending extra movement." + (typePF ? "\n" : "") + "\nMerge with Stone: I can cast the Pass without Trace spell once with this trait, requiring no material components, and I regain the ability to cast it this way when I finish a long rest. Constitution is my spellcasting ability for this spell.", spellcastingAbility : 3, features : { "pass without trace" : { name : "Merge with Stone", minlevel : 1, spellcastingBonus : [{ name : "Merge with Stone", spells : ["pass without trace"], selection : ["pass without trace"], firstCol : 'oncelr' }], spellChanges : { "pass without trace" : { components : "V,S", compMaterial : "", changes : "Using Merge with Stone, I can cast Pass without Trace once per long rest without requiring material components." } } } } }; RaceList["fire genasi"] = { regExpSearch : /^(?=.*(genasi|planetouched))(?=.*\bfires?\b).*$/i, name : "Fire genasi", sortname : "Genasi, Fire", source : [["E", 9], ["W", 172]], plural : "Fire genasi", vision : [["Darkvision", 60]], size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Primordial"], dmgres : ["Fire"], age : " reach adulthood in their late teens and live up to 120 years", height : " range from barely 5 to well over 6 feet tall (4'8\" + 2d10\")", weight : " weigh around 165 lb (110 + 2d10 \xD7 2d4 lb)", heightMetric : " range from barely 1,5 to well over 1,8 metres tall (145 + 5d10 cm)", weightMetric : " weigh around 75 lb (50 + 5d10 \xD7 4d4 / 10 kg)", scores : [0, 0, 2, 1, 0, 0], trait : "Fire Genasi (+2 Constitution, +1 Intelligence)\n\nReach to the Blaze:\n I know the Produce Flame cantrip.\n Once I reach 3rd level, I can cast the Burning Hands spell once as a 1st-level spell.\n I regain the ability to cast it this way when I finish a long rest.\n Constitution is my spellcasting ability for these spells.", spellcastingAbility : 3, spellcastingBonus : [{ name : "Reach to the Blaze (level 1)", spells : ["produce flame"], selection : ["produce flame"], firstCol : 'atwill' }], features : { "burning hands" : { name : "Reach to the Blaze (level 3)", minlevel : 3, spellcastingBonus : [{ name : "Reach to the Blaze (level 3)", spells : ["burning hands"], selection : ["burning hands"], firstCol : 'oncelr' }] } } }; RaceList["water genasi"] = { regExpSearch : /^(?=.*(genasi|planetouched))(?=.*\bwaters?\b).*$/i, name : "Water genasi", sortname : "Genasi, Water", source : [["E", 10], ["W", 172]], plural : "Water genasi", size : 3, speed : { walk : { spd : 30, enc : 20 }, swim : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Primordial"], dmgres : ["Acid"], age : " reach adulthood in their late teens and live up to 120 years", height : " range from barely 5 to well over 6 feet tall (4'8\" + 2d10\")", weight : " weigh around 165 lb (110 + 2d10 \xD7 2d4 lb)", heightMetric : " range from barely 1,5 to well over 1,8 metres tall (145 + 5d10 cm)", weightMetric : " weigh around 75 lb (50 + 5d10 \xD7 4d4 / 10 kg)", scores : [0, 0, 2, 0, 1, 0], trait : "Water Genasi (+2 Constitution, +1 Wisdom)\nAmphibious: I can breathe air and water.\nSwim: I have a swimming speed of 30 feet.\nCall to the Wave: I know the Shape Water cantrip.\n When I reach 3rd level, I can cast the Create or Destroy Water spell as a 2nd-level spell once with this trait, and I regain the ability to cast it this way when I finish a long rest.\n Constitution is my spellcasting ability for these spells.", spellcastingAbility : 3, spellcastingBonus : [{ name : "Call to the Wave (level 1)", spells : ["shape water"], selection : ["shape water"], firstCol : 'atwill' }], features : { "create or destroy water" : { name : "Call to the Wave (level 3)", minlevel : 3, spellcastingBonus : [{ name : "Call to the Wave (level 3)", spells : ["create or destroy water"], selection : ["create or destroy water"], firstCol : 'oncelr' }] } } }; SpellsList["shape water"] = { name : "Shape Water", classes : ["druid", "sorcerer", "wizard"], source : [["X", 164], ["E", 21], ["W", 172]], level : 0, school : "Trans", time : "1 a", range : "30 ft", components : "S", duration : "Instant. or 1 h", description : "5 cu ft water; instant: move/change flow; 1h: simple shapes/change color or opacity/freeze", descriptionFull : "You choose an area of water that you can see within range and that fits within a 5-foot cube. You manipulate it in one of the following ways." + "\n " + "\u2022 You instantaneously move or otherwise change the flow of the water as you direct, up to 5 feet in any direction. This movement doesn't have enough force to cause damage." + "\n " + "\u2022 You cause the water to form into simple shapes and animate at your direction. This change lasts for 1 hour." + "\n " + "\u2022 You change the water's color or opacity. The water must be changed in the same way throughout. This change lasts for 1 hour." + "\n " + "\u2022 You freeze the water, provided that there are no creatures in it. The water unfreezes in 1 hour." + "\n\n" + "If you cast this spell multiple times, you can have no more than two of its non-instantaneous effects active at a time, and you can dismiss such an effect as an action." }; } // reprint from Mordenkainen's Tome of Foes if (!SourceList.MToF) { RaceList["sea elf"] = { regExpSearch : /^(?!.*half)((?=.*\b(elfs?|elves|elvish|elven)\b)(?=.*\b(seas?|oceans?|water)\b)).*$/i, name : "Sea elf", sortname : "Elf, Sea", source : [["MToF", 62], ["W", 163], ["UA:ES", 1]], plural : "Sea elves", size : 3, speed : { walk : { spd : 30, enc : 20 }, swim : { spd : 30, enc : 20 } }, weaponProfs : [false, false, ["spear", "trident", "light crossbow", "net"]], languageProfs : ["Common", "Elvish", "Aquan", "Friend of the Sea"], vision : [["Darkvision", 60]], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["charmed"] }, skills : ["Perception"], age : " typically claim adulthood around age 100 and can live to be 750 years old", height : " range from under 5 to almost 6 feet tall (4'6\" + 2d8\")", weight : " weigh around 115 lb (90 + 2d8 \xD7 1d4 lb)", heightMetric : " range from under 1,5 to almost 1,8 metres tall (140 + 5d8 cm)", weightMetric : " weigh around 52 kg (40 + 5d8 \xD7 2d4 / 10 kg)", scores : [0, 2, 1, 0, 0, 0], trait : "Sea Elf (+2 Dexterity, +1 Constitution)" + desc([ "Trance: Elves don't need to sleep, but meditate semiconsciously, for 4 hours a day. While meditating, I can dream after a fashion. After resting in this way, I gain the same benefit that a human does from 8 hours of sleep, thus needing only 4 hours for a long rest.", "Child of the Sea. I have 30 ft swimming speed and can breathe air and water.", "Friend of the Sea: Through sounds and gestures, I can communicate simple ideas with any beast that has an inborn swimming speed." ]) }; } // reprint from the Tortle Package if (!RaceList.tortle) { RaceList.tortle = { regExpSearch : /tortle/i, name : "Tortle", source : [["TP", 4], ["W", 181]], plural : "Tortles", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Aquan"], skills : ["Survival"], armorOptions : [{ regExpSearch : /^(?=.*tortle)(?=.*shell).*$/i, name : "Tortle's Shell", source : [["TP", 4], ["W", 181]], ac : 17, dex : -10, selectNow : true }], weaponOptions : [{ baseWeapon : "unarmed strike", regExpSearch : /^(?=.*tortle)(?=.*\bclaws?\b).*$/i, name : "Tortle's Claws", source : [["TP", 4], ["W", 181]], damage : [1, 4, "slashing"], selectNow : true }], age : " reach adulthood by the age of 15 and live an average of 50 years", height : " stand between 5 and 6 feet tall (4'10\" + 2d8\")", weight : " weigh around 450 lb (400 + 2d8 \xD7 2d4 lb)", heightMetric : " stand between 1,5 and 1,8 metres tall (150 + 5d8 cm)", weightMetric : " weigh around 190 kg (180 + 5d8 \xD7 4d4 / 10 kg)", scores : [2, 0, 0, 0, 1, 0], action : [["action", "Shell Defense (start)"], ["bonus action", "Shell Defense (end)"]], trait : "Tortle (+2 Strength, +1 Wisdom)"+ "\n \u2022 Claws: My unarmed strikes with my claws deal 1d4 slashing damage."+ "\n \u2022 Hold Breath: I can hold my breath for up to 1 hour at a time."+ "\n \u2022 Natural Armor: I have a base AC of 17, but I can't add my Dex to it or wear armor."+ "\n \u2022 Shell Defense: As an action, I can withdraw into my shell and gain +4 AC and adv. on Str and Con saves, but I count as prone, have speed 0, have disadv. on Dex saves, and can't take reactions. The only action I can take is a bonus action to emerge from the shell." }; } // dupl_end // Subclasses AddSubClass("fighter", "echo knight", { // contains contributions by Smashman, @Nod_Hero#2046 (Discord), BraabHimself, and TysonJouglet regExpSearch : /^(?!.*(exalted|sacred|holy|divine|nature|natural|purple.*dragon|green))(?=.*(knight|fighter|warrior|militant|warlord|phalanx|gladiator|trooper))(?=.*(echo|mirror|mirage|reflection)).*$/i, subname : "Echo Knight", source : [["W", 183]], fullname : "Echo Knight", features : { "subclassfeature3" : { name : "Manifest Echo", source : [["W", 183]], minlevel : 3, description : desc([ "As a bonus action, I can magically manifest a translucent image of myself within 15 ft", "My echo lasts until I dismiss it as a bonus action, I manifest another, or I'm incapacitated", "It is also destroyed if it is more than 30 ft away from me at the end of my turn", "It has 1 HP, immunity to all conditions, uses my save bonuses, and AC 14 + Prof Bonus", "On my turn as a free action, I can command it to move up to 30 ft in any direction", "As a bonus action, I can teleport to swap places with it, at a cost of 15 ft movement", "When I use the Attack action on my turn, I can have any attack originate from my echo", "I can also make opportunity attacks from the echo's location as if I were in its space" ]), action : [["bonus action", " (summon/dismiss)"], ["bonus action", "Swap Location with Echo"]], creaturesAdd : [["Echo"]], creatureOptions : [{ name : "Echo", source : [["W", 183]], size : 3, type : "Echo", alignment : "", ac : "14+oProf", hp : 1, hd : [], speed : "fly 30 ft (hover)", scores : ["", "", "", "", "", ""], savesLinked : true, condition_immunities : "all conditions", passivePerception : 0, languages : "", challengeRating : "0", proficiencyBonus : 0, attacksAction : 0, attacks : [], features : [{ name : "Echo", description : "The echo is a magical, translucent, gray image of its creator that doesn't act and has no turn in combat. It lasts until it is destroyed, dismissed, another is manifested, or its creator is incapacitated. The echo is also destroyed if it is ever more than 30 ft away from its creator at the end of its creator's turn." }], traits : [{ name : "Swap Place", description : "The echo's creator can, as a bonus action, teleport, magically swapping places with the echo at a cost of 15 feet of the creator's movement, regardless of the distance between the two." }, { name : "Attack Origin", description : "When the echo's creator takes the Attack action on their turn, any attack they make with that action can originate from the echo's space. This choice is made for each attack separately.\n In addition, when a creature that the echo's creator can see within 5 ft of the echo moves at least 5 ft away from it, its creator can use their reaction to make an opportunity attack against that creature as if its creator was in the echo's space." }], header : "Echo", eval : function(prefix, lvl) { // Same size as character PickDropdown(prefix + "Comp.Desc.Size", tDoc.getField("Size Category").currentValueIndices); Value(prefix + "Comp.Desc.Age", What("Age")); Value(prefix + "Comp.Desc.Sex", What("Sex")); Value(prefix + "Comp.Desc.Height", What("Height")); Value(prefix + "Comp.Desc.Alignment", What("Alignment")); } }] }, "subclassfeature3.1" : { name : "Unleash Incarnation", source : [["W", 183]], minlevel : 3, description : desc([ "When I use the Attack action, I can make one extra melee attack from my echo's position" ]), usages : "Constitution modifier per ", usagescalc : "event.value = Math.max(1, What('Con Mod'));", recovery : "long rest" }, "subclassfeature7" : { name : "Echo Avatar", source : [["W", 183]], minlevel : 7, description : desc([ "As an action, I can temporarily transfer my consciousness to my echo for up to 10 min", "During this time, I see and hear through its eyes and ears, but not my own eyes and ears", "While I use my echo this way, it can be up to 1000 ft away from me without issue", "I can end this at any time, requiring no action" ]), action : [["action", ""]] }, "subclassfeature10" : { name : "Shadow Martyr", source : [["W", 183]], minlevel : 10, description : desc([ "As a reaction when a creature I can see is attacked, I can make my echo the target", "Before the attack roll, the echo teleports to an empty space within 5 ft of the creature", "The attack roll of the triggering attack is then made against the echo instead" ]), action : [["reaction", ""]], usages : 1, recovery : "short rest" }, "subclassfeature15" : { name : "Reclaim Potential", source : [["W", 184]], minlevel : 15, description : desc([ "When my echo is destroyed by taking damage, I gain 2d6 + my Con mod in temp HP", "I can only gain these temporary hit points if I don't already have temporary hit points" ]), usages : "Constitution modifier per ", usagescalc : "event.value = Math.max(1, What('Con Mod'));", recovery : "long rest" }, "subclassfeature18" : { name : "Legion of One", source : [["W", 184]], minlevel : 18, description : desc([ "I can now manifest two echoes instead of one with the same bonus action", "These two can coexist, but if I manifest a third, the previous two are destroyed", "Anything I can do from one echo's position can be done from the other's instead", "I regain one use of Unleash Incarnation if I have no more remaining when I roll initiative" ]) } } }); AddSubClass("wizard", "chronurgy magic", { // contains contributions by bassbogan on GitHub and @Nod_Hero#2046 on Discord regExpSearch : /chronurgy|chronomancer|chronurgist/i, subname : "Chronurgy Magic", subnameShort: "Chronurgy", fullname : "Chronurgist", source : [["W", 184]], features : { "subclassfeature2" : { name : "Chronal Shift", source : [["W", 184]], minlevel : 2, description : desc([ "As a reaction after I or a creature I see rolls a check, save, or attack, I can force a reroll", "I can do this after I see if the roll fails or succeeds; The target must use the second roll." ]), action : [["reaction", ""]], usages : 2, recovery : "long rest", eval : function() { // Always have access to dunamancy spells enabled if (GetFeatureChoice("classes", "wizard", "spellcasting", true).indexOf("access to dunamancy spells") === -1) { ClassFeatureOptions(["wizard", "spellcasting", "access to dunamancy spells", true]); } }, removeeval : function() { // Remove access to dunamancy spells when removing subclass if (GetFeatureChoice("classes", "wizard", "spellcasting", true).indexOf("access to dunamancy spells") !== -1) { ClassFeatureOptions(["wizard", "spellcasting", "access to dunamancy spells", true], "remove"); } } }, "subclassfeature2.1" : { name : "Temporal Awareness", source : [["W", 184]], minlevel : 2, description : desc([ "I gain a bonus to my initiative rolls equal to my Intelligence modifier" ]), addMod : { type : "skill", field : "Init", mod : "max(Int|0)", text : "I can add my Intelligence modifier to initiative rolls." } }, "subclassfeature6" : { name : "Momentary Stasis", source : [["W", 184]], minlevel : 6, description : desc([ "As an action, I can have a Large or smaller creature I can see in 60 ft make a Con save", "If failed, it is encased in a field of magical energy, incapacitated and has a speed of 0", "This lasts until the end of my next turn or until the creature takes any damage" ]), action : [["action", ""]], usages : "Intelligence modifier per ", usagescalc : "event.value = Math.max(1, What('Int Mod'));", recovery : "long rest" }, "subclassfeature10" : { name : "Arcane Abeyance", source : [["W", 184]], minlevel : 10, description : desc([ "When I use a spell slot to cast a 4th-level or lower spell, I can condense it into a mote", "The spell is frozen in time at the moment of casting and held within a grey bead", "The bead is a Tiny object with 1 HP, AC 15, and immune to poison and psychic damage", "After 1 hour or if it is destroyed, it vanishes with a flash of light and the spell is lost", "As an action, a creature holding the bead can release the spell within as if they cast it", "The spell still uses my spell attack bonus and save DC; The bead vanishes once used" ]), usages : 1, recovery : "short rest" }, "subclassfeature14" : { name : "Convergent Future", source : [["W", 185]], minlevel : 14, description : desc([ "As a reaction after I or a creature I see rolls a check, save, or attack, I can choose the roll", "I decide the number rolled, if it is the minimum needed to succeed or 1 less than that", "When I use this feature, I gain a level of exhaustion which only a long rest can remove" ]), action : [["reaction", ""]] } } }); AddSubClass("wizard", "graviturgy magic", { // contains contributions by bassbogan on GitHub and @Nod_Hero#2046 on Discord regExpSearch : /^((?=.*graviturgy)(?=.*(wizard|magic|mage))|gravimancer|graviturgist).*$/i, subname : "Graviturgy Magic", subnameShort: "Graviturgy", fullname : "Graviturgist", source : [["W", 185]], features : { "subclassfeature2" : { name : "Adjust Density", source : [["W", 185]], minlevel : 2, description : desc([ "As an action, I can magically double or halve the weight of a creature I can see in 30 ft", "If doubled, it has -10 ft speed and advantage on Strength checks and Strength saves", "If halved, it has +10 ft speed, can jump twice as far, and disadv. on Str checks and saves", "This lasts for 1 minute or until my concentration ends (like concentrating on a spell)" ]), action : [["action", ""]], additional : levels.map(function (n) { return n < 2 ? "" : (n < 10 ? "Large" : "Huge") + " or smaller creatures"; }), eval : function() { // Always have access to dunamancy spells enabled if (GetFeatureChoice("classes", "wizard", "spellcasting", true).indexOf("access to dunamancy spells") === -1) { ClassFeatureOptions(["wizard", "spellcasting", "access to dunamancy spells", true]); } }, removeeval : function() { // Remove access to dunamancy spells when removing subclass if (GetFeatureChoice("classes", "wizard", "spellcasting", true).indexOf("access to dunamancy spells") !== -1) { ClassFeatureOptions(["wizard", "spellcasting", "access to dunamancy spells", true], "remove"); } } }, "subclassfeature6" : { name : "Gravity Well", source : [["W", 185]], minlevel : 6, description : desc([ "Whenever I cast a spell on a creature, I can move it 5 ft to an empty space of my choice", "This only works if the target is willing, fails its save vs. the spell, or the spell attack hits it" ]), }, "subclassfeature10" : { name : "Violent Attraction", source : [["W", 185]], minlevel : 10, description : desc([ "As a reaction when I or a creature I see in 60 ft hits a weapon attack, I can improve it", "I increase the weapon's velocity, causing it to deal an extra 1d10 damage", "As a reaction if a creature within 60 ft is damaged by a fall, I can increase it by 2d10" ]), action : [["reaction", ""]], usages : "Intelligence modifier per ", usagescalc : "event.value = Math.max(1, What('Int Mod'));", recovery : "long rest" }, "subclassfeature14" : { name : "Event Horizon", source : [["W", 185]], minlevel : 14, description : desc([ "As an action, I can magically emit powerful gravitational magic that pulls on hostiles", "Whenever a creature hostile to me starts it turn within 30 ft, it must make Str save", "If failed, it takes 2d10 force damage and its speed is 0 until the start of its next turn", "If successful, it takes half the damage and every foot it moves this turn costs 2 extra feet", "This lasts for 1 minute or until my concentration ends (like concentrating on a spell)", "I can do this once per long rest, or by expending a 3rd-level or higher spell slot (SS 3+)" ]), action : [["action", ""]], usages : 1, recovery : "long rest", altResource : "SS 3+", } } }); // Add option to allow Dunamancy spells for the other spellcastingclasses AddFeatureChoice(ClassList.bard.features.spellcasting, true, "Access to Dunamancy Spells", { name : "Dunamancy Spells", extraname : "Optional Bard 1", source : [["W", 186]], description : desc([ "All dunamancy spells are added to the bard spell list, each still pending DM's approval" ]), calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "bard" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["sapping sting", "gift of alacrity", "magnify gravity", "fortune's favor", "immovable object", "wristpocket", "pulse wave", "gravity sinkhole", "temporal shunt", "gravity fissure", "tether essence", "dark star", "reality break", "ravenous void", "time ravage"]); }, "This optional class feature expands the spell list of the bard class with all dunamancy spells (spell level in brackets): Sapping Sting (cantrip), Gift of Alacrity (1), Magnify Gravity (1), Fortune's Favor (2), Immovable Object (2), Wristpocket (2), Pulse Wave (3), Gravity Sinkhole (4), Temporal Shunt (5), Gravity Fissure (6), Tether Essence (7), Dark Star (8), Reality Break (8),Ravenous Void (9), and Time Ravage (9)." ] } }, "Optional 1st-level bard features"); AddFeatureChoice(ClassList.cleric.features.spellcasting, true, "Access to Dunamancy Spells", { name : "Dunamancy Spells", extraname : "Optional Cleric 1", source : [["W", 186]], description : desc([ "All dunamancy spells are added to the cleric spell list, each still pending DM's approval" ]), calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "cleric" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["sapping sting", "gift of alacrity", "magnify gravity", "fortune's favor", "immovable object", "wristpocket", "pulse wave", "gravity sinkhole", "temporal shunt", "gravity fissure", "tether essence", "dark star", "reality break", "ravenous void", "time ravage"]); }, "This optional class feature expands the spell list of the cleric class with all dunamancy spells (spell level in brackets): Sapping Sting (cantrip), Gift of Alacrity (1), Magnify Gravity (1), Fortune's Favor (2), Immovable Object (2), Wristpocket (2), Pulse Wave (3), Gravity Sinkhole (4), Temporal Shunt (5), Gravity Fissure (6), Tether Essence (7), Dark Star (8), Reality Break (8),Ravenous Void (9), and Time Ravage (9)." ] } }, "Optional 1st-level cleric features"); AddFeatureChoice(ClassList.druid.features.spellcasting, true, "Access to Dunamancy Spells", { name : "Dunamancy Spells", extraname : "Optional Druid 1", source : [["W", 186]], description : desc([ "All dunamancy spells are added to the druid spell list, each still pending DM's approval" ]), calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "druid" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["sapping sting", "gift of alacrity", "magnify gravity", "fortune's favor", "immovable object", "wristpocket", "pulse wave", "gravity sinkhole", "temporal shunt", "gravity fissure", "tether essence", "dark star", "reality break", "ravenous void", "time ravage"]); }, "This optional class feature expands the spell list of the druid class with all dunamancy spells (spell level in brackets): Sapping Sting (cantrip), Gift of Alacrity (1), Magnify Gravity (1), Fortune's Favor (2), Immovable Object (2), Wristpocket (2), Pulse Wave (3), Gravity Sinkhole (4), Temporal Shunt (5), Gravity Fissure (6), Tether Essence (7), Dark Star (8), Reality Break (8),Ravenous Void (9), and Time Ravage (9)." ] } }, "Optional 1st-level druid features"); AddFeatureChoice(ClassList.paladin.features.spellcasting, true, "Access to Dunamancy Spells", { name : "Dunamancy Spells", extraname : "Optional Paladin 2", source : [["W", 186]], description : desc([ "All dunamancy spells are added to the paladin spell list, each still pending DM's approval" ]), calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "paladin" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["gift of alacrity", "magnify gravity", "fortune's favor", "immovable object", "wristpocket", "pulse wave", "gravity sinkhole", "temporal shunt"]); }, "This optional class feature expands the spell list of the paladin class with all dunamancy spells (spell level in brackets): Gift of Alacrity (1), Magnify Gravity (1), Fortune's Favor (2), Immovable Object (2), Wristpocket (2), Pulse Wave (3), Gravity Sinkhole (4), and Temporal Shunt (5)." ] } }, "Optional 2nd-level paladin features"); var EGtW_Ranger_Dunamancy_Spells = { name : "Dunamancy Spells", extraname : "Optional Ranger 2", source : [["W", 186]], description : desc([ "All dunamancy spells are added to the ranger spell list, each still pending DM's approval" ]), calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if ((spName !== "ranger" && spName !== "rangerua") || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["gift of alacrity", "magnify gravity", "fortune's favor", "immovable object", "wristpocket", "pulse wave", "gravity sinkhole", "temporal shunt"]); }, "This optional class feature expands the spell list of the ranger class with all dunamancy spells (spell level in brackets): Gift of Alacrity (1), Magnify Gravity (1), Fortune's Favor (2), Immovable Object (2), Wristpocket (2), Pulse Wave (3), Gravity Sinkhole (4), and Temporal Shunt (5)." ] } }; AddFeatureChoice(ClassList.ranger.features.spellcasting, true, "Access to Dunamancy Spells", EGtW_Ranger_Dunamancy_Spells, "Optional 2nd-level ranger features"); RunFunctionAtEnd(function() { if (!ClassList["rangerua"]) return; AddFeatureChoice(ClassList.rangerua.features.spellcasting, true, "Access to Dunamancy Spells", EGtW_Ranger_Dunamancy_Spells, "Optional 2nd-level ranger features"); }); AddFeatureChoice(ClassList.sorcerer.features.spellcasting, true, "Access to Dunamancy Spells", { name : "Dunamancy Spells", extraname : "Optional Sorcerer 1", source : [["W", 186]], description : desc([ "All dunamancy spells are added to the sorcerer spell list, each still pending DM's approval" ]), calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "sorcerer" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["sapping sting", "gift of alacrity", "magnify gravity", "fortune's favor", "immovable object", "wristpocket", "pulse wave", "gravity sinkhole", "temporal shunt", "gravity fissure", "tether essence", "dark star", "reality break", "ravenous void", "time ravage"]); }, "This optional class feature expands the spell list of the sorcerer class with all dunamancy spells (spell level in brackets): Sapping Sting (cantrip), Gift of Alacrity (1), Magnify Gravity (1), Fortune's Favor (2), Immovable Object (2), Wristpocket (2), Pulse Wave (3), Gravity Sinkhole (4), Temporal Shunt (5), Gravity Fissure (6), Tether Essence (7), Dark Star (8), Reality Break (8),Ravenous Void (9), and Time Ravage (9)." ] } }, "Optional sorcerer features"); AddFeatureChoice(ClassList.warlock.features["pact magic"], true, "Access to Dunamancy Spells", { name : "Dunamancy Spells", extraname : "Optional Warlock 1", source : [["W", 186]], description : desc([ "All dunamancy spells are added to the warlock spell list, each still pending DM's approval" ]), calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "warlock" || (spType.indexOf("bonus") !== -1 && (!spList["class"] || spList["class"] !== "warlock"))) return; spList.extraspells = spList.extraspells.concat(["sapping sting", "gift of alacrity", "magnify gravity", "fortune's favor", "immovable object", "wristpocket", "pulse wave", "gravity sinkhole", "temporal shunt", "gravity fissure", "tether essence", "dark star", "reality break", "ravenous void", "time ravage"]); }, "This optional class feature expands the spell list of the warlock class with all dunamancy spells (spell level in brackets): Sapping Sting (cantrip), Gift of Alacrity (1), Magnify Gravity (1), Fortune's Favor (2), Immovable Object (2), Wristpocket (2), Pulse Wave (3), Gravity Sinkhole (4), Temporal Shunt (5), Gravity Fissure (6), Tether Essence (7), Dark Star (8), Reality Break (8),Ravenous Void (9), and Time Ravage (9)." ] } }, "Optional 1st-level warlock features"); AddFeatureChoice(ClassList.wizard.features.spellcasting, true, "Access to Dunamancy Spells", { name : "Dunamancy Spells", extraname : "Optional Wizard 1", source : [["W", 186]], description : desc([ "All dunamancy spells are added to the wizard spell list, each still pending DM's approval" ]), calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "wizard" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["sapping sting", "gift of alacrity", "magnify gravity", "fortune's favor", "immovable object", "wristpocket", "pulse wave", "gravity sinkhole", "temporal shunt", "gravity fissure", "tether essence", "dark star", "reality break", "ravenous void", "time ravage"]); }, "This optional class feature expands the spell list of the wizard class with all dunamancy spells (spell level in brackets): Sapping Sting (cantrip), Gift of Alacrity (1), Magnify Gravity (1), Fortune's Favor (2), Immovable Object (2), Wristpocket (2), Pulse Wave (3), Gravity Sinkhole (4), Temporal Shunt (5), Gravity Fissure (6), Tether Essence (7), Dark Star (8), Reality Break (8),Ravenous Void (9), and Time Ravage (9)." ] } }, "Optional 1st-level wizard features"); RunFunctionAtEnd(function() { if (!ClassList.artificer) return; AddFeatureChoice(ClassList.artificer.features.spellcasting, true, "Access to Dunamancy Spells", { name : "Dunamancy Spells", extraname : "Optional Artificer 1", source : [["W", 186]], description : desc([ "All dunamancy spells are added to the artificer spell list, each still pending DM's approval" ]), calcChanges : { spellList : [ function(spList, spName, spType) { if (spName !== "artificer" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["sapping sting", "gift of alacrity", "magnify gravity", "fortune's favor", "immovable object", "wristpocket", "pulse wave", "gravity sinkhole", "temporal shunt"]); }, "This optional class feature expands the spell list of the artificer class with all dunamancy spells (spell level in brackets): Sapping Sting (cantrip), Gift of Alacrity (1), Magnify Gravity (1), Fortune's Favor (2), Immovable Object (2), Wristpocket (2), Pulse Wave (3), Gravity Sinkhole (4), Temporal Shunt (5)." ] } }, "Optional 1st-level artificer features"); }); // Backgrounds (includes contributions by remcovandalen) BackgroundList["grinner"] = { regExpSearch : /grinner/i, name : "Grinner", source : [["W", 200]], skills : ["Deception", "Performance"], toolProfs : [["Thieves' tools", "Dex"], ["Musical instrument", 1]], gold : 15, equipleft : [ ["Disguise kit", "", 3], ["Musical instrument", "", ""] ], equipright : [ ["Fine clothes", "", 6], ["Gold-plated ring with smiling face", "", ""], ["Belt pouch (with coins)", "", 1] ], feature : "Ballad of the Grinning Fool", trait : [ "I love the spotlight. Everyone, look at me!", "Give me a drink and I'm your friend.", "Talk to me about yourself. I'm a hell of a listener.", "I hate to start fights, but I love to finish them.", "I can't sit still.", "I'm always humming an old tune from my past.", "When I don't have a reason to smile, I'm miserable.", "I'm lucky like you wouldn't believe." ], ideal : [ ["Revolution", "Revolution: Tyrants must fall, no matter the cost. (Chaotic)" ], ["Compassion", "Compassion: The only way to make a better world is to perform small kindnesses. (Good)" ], ["Justice", "Justice: A nation built upon just foundations will uphold freedom for all. (Law)" ], ["Expression", "Expression: Music, joy, and laughter are the keys to freedom. (Good)" ], ["Self-Determination", "Self-Determination: People should be free to do as they please. (Chaotic)" ], ["Vigilance", "Vigilance: A free people must be carefully taught, lest they be misled. (Neutral)" ] ], bond : [ "I lost someone important to an agent of the empire. That regime will fall.", "The first people to be hurt by this war will be the common folk. I need to protect them.", "Music helped me through a dark time in my life. Now, I'll use music to change the world.", "I will be known as the greatest spy who ever lived.", "All life is precious to me. I know I can change the world without taking a humanoid life.", "The elite in their ivory towers don't understand how we suffer. I intend to show them." ], flaw : [ "I've never lied once in my life. What? No, I'm not crossing my fingers!", "I do everything big! Subtlety? I don't know the meaning of subtlety! Oh, that's a problem?", "Being a spy in wartime is painful. I've seen so much suffering, I think I'm losing my mind.", "I can't focus on my mission. I just want to carouse and sing and play!", "Yeah, that's my name. Yeah, I'm a Grinner spy. Who cares about staying undercover?", "I can't afford to trust anyone. Not. Anyone." ], extra : [ "Select Your Favorite Code-Song", "Zan's Coming Back", "Blow Fire Down the Coast", "Hush! Onward Come the Dragons", "Let the Sword Grow Rust", "Drink Deep, Li'l Hummingbird", "Dirge for the Emerald Fire" ] }; BackgroundFeatureList["ballad of the grinning fool"] = { description : "A member of the Golden Grin will find me and give shelter to me and my companions if I play the Ballad of the Grinning Fool in a major tavern or inn in a large city. This shelter might be discontinued if it becomes too dangerous to hide me. I must use the ballad with caution, for those who know the ballad can be traitors, counterspies, or agents of tyranny.", source : [["W", 200]] }; BackgroundList["volstrucker agent"] = { regExpSearch : /^(?=.*volstrucker)(?=.*agent).*$/i, name : "Volstrucker Agent", source : [["W", 202]], skills : ["Deception", "Stealth"], toolProfs : ["Poisoner's kit"], languageProfs : [1], gold : 10, equipleft : [ ["Poisoner's kit", "", 2] ], equipright : [ ["Common clothes", "", 3], ["Black cloak with a hood", "", ""], ["Belt pouch (with coins)", "", 1] ], feature : "Shadow Network", trait : [ "I prefer to keep my thoughts to myself.", "I indulge vice in excess to quiet my conscience.", "I've left emotion behind me. I'm now perfectly placid.", "Some event from the past keeps worming its way into my mind, making me restless.", "I always keep my word\u2014except when I'm commanded to break it.", "I laugh off insults and never take them personally." ], ideal : [ ["Order", "Order: The will of the crown is absolute. (Law)" ], ["True Loyalty", "True Loyalty: The Cerberus Assembly is greater than any power, even the crown. (Any)" ], ["Death", "Death: The penalty for disloyalty is death. (Evil)" ], ["Determination", "Determination: I cannot fail. Not ever. (Neutral)" ], ["Fear", "Fear: People should not respect power. They should fear it. (Evil)" ], ["Escape", "Escape: The Volstrucker are pure evil! I can't atone for what I've done for them, but I can escape with my life. (Any)" ] ], bond : [ "The job is all that matters. I will see it through.", "My orders are important, but my comrades are worth more than anything. I would die for them.", "Everything I've done, I've done to protect someone close to me.", "If the empire falls, all of civilization falls with it. I will hold back chaos and barbarism at any cost." ], flaw : [ "I drink to dull the pain in the back of my head.", "I go a bit mad when I see blood.", "I can hear the voices of everyone I've killed. I see their faces. I can't be free of these ghosts.", "Fear is a powerful motivator. I will do whatever it takes to prevent those who know what I am from seeing me fail, and from those I care about from knowing what I am." ], extra : [ "Select Your Tragedy", "Familicide", "Amnesia", "Capture", "Starvation", "Disfigurement", "Vicissitude" ] }; BackgroundFeatureList["shadow network"] = { description : "I can use the Volstrucker shadow network to communicate with other members over long distances. I can write a letter in special arcane ink (10 gp per page), address it to another member of the Volstrucker, and cast it into a fire. It will burn and materialize whole again on the person of the addressee. This special ink is the same as used for a wizard's spellbook.", source : [["W", 202]] }; AddBackgroundVariant("acolyte", "luxonborn", { regExpSearch : /luxonborn/i, name : "Luxonborn", source : [["W", 203]] }); AddBackgroundVariant("criminal", "myriad operative", { regExpSearch : /^(?=.*myriad)(?=.*operative).*$/i, name : "Myriad Operative", source : [["W", 203]], extra : "" }); AddBackgroundVariant("sailor", "revelry pirate", { regExpSearch : /^(?=.*revelry)(?=.*pirate).*$/i, name : "Revelry Pirate", source : [["W", 203]] }); AddBackgroundVariant("sage", "cobalt scholar", { regExpSearch : /^(?=.*cobalt)(?=.*scholar).*$/i, name : "Cobalt Scholar", source : [["W", 203]], extra : [ "Select Specific Role", "Rank-and-file", "Expositors", "Archivists" ] }); AddBackgroundVariant("criminal", "augen trust", { regExpSearch : /^(?=.*augen)(?=.*trust).*$/i, name : "Augen Trust", source : [["W", 203]], extra : "" }); // Spells (contains contributions by Biggoron144) SpellsList["sapping sting"] = { name : "Sapping Sting", classes : [], source : [["W", 189]], level : 0, school : "Necro", time : "1 a", range : "30 ft", components : "V,S", duration : "Instantaneous", save : "Con", description : "1 creature that I can see save or 1d4 Necrotic dmg and fall prone; +1d4 at CL 5, 11, and 17", descriptionCantripDie : "1 creature that I can see save or `CD`d4 Necrotic dmg and fall prone", descriptionFull : "You sap the vitality of one creature you can see in range. The target must succeed on a Constitution saving throw or take 1d4 necrotic damage and fall prone.\n This spell's damage increases by 1d4 when you reach 5th level (2d4), 11th level (3d4), and 17th level (4d4)." }; WeaponsList["sapping sting"] = { regExpSearch : /^(?=.*sapping)(?=.*sting).*$/i, name : "Sapping Sting", source : [["W", 189]], list : "spell", ability : 6, type : "Cantrip", damage : ["C", 4, "necrotic"], range : "30 ft", description : "Con save, success - no damage, fail - also fall prone", abilitytodamage : false, dc : true }; SpellsList["gift of alacrity"] = { name : "Gift of Alacrity", classes : [], source : [["W", 186]], level : 1, school : "Div", time : "1 min", range : "Touch", components : "V,S", duration : "8 h", description : "1 willing creature can add 1d8 to its initiative rolls for the duration", descriptionFull : "You touch a willing creature. For the duration, the target can add 1d8 to its initiative rolls." }; SpellsList["magnify gravity"] = { name : "Magnify Gravity", classes : [], source : [["W", 188]], level : 1, school : "Trans", time : "1 a", range : "60 ft", components : "V,S", duration : "1 rnd", save : "Con", description : "10-ft rad all crea 2d8+1d8/SL Force dmg, half spd; Save halves \u0026 no spd reduce; Str check to move obj", descriptionShorter : "10-ft rad all 2d8+1d8/SL Force dmg, half spd; Save half, no spd reduce; Str check to move obj", descriptionFull : "The gravity in a 10-foot-radius sphere centered on a point you can see within range increases for a moment. Each creature in the sphere on the turn when you cast the spell must make a Constitution saving throw. On a failed save, a creature takes 2d8 force damage, and its speed is halved until the end of its next turn. On a successful save, a creature takes half as much damage and suffers no reduction to its speed.\n Until the start of your next turn, any object that isn't being worn or carried in the sphere requires a successful Strength check against your spell save DC to pick up or move." + AtHigherLevels + "When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d8 for each slot level above 1st." }; SpellsList["fortune's favor"] = { name : "Fortune's Favor", classes : [], source : [["W", 186]], level : 2, school : "Div", time : "1 min", range : "Touch", components : "V,S,M\u2020", compMaterial : "A white pearl worth at least 100 gp, which the spell consumes", duration : "1 h", description : "1+1/SL crea once roll extra d20 and select which to use for atk, check, save, or atk vs. it (100gp cons.)", descriptionFull : "You impart latent luck to yourself or one willing creature you can see within range. When the chosen creature makes an attack roll, an ability check, or a saving throw before the spell ends, it can dismiss this spell on itself to roll an additional d20 and choose which of the d20s to use. Alternatively, when an attack roll is made against the chosen creature, it can dismiss this spell on itself to roll a d20 and choose which of the d20s to use, the one it rolled or the one the attacker rolled.\n If the original d20 roll has advantage or disadvantage, the creature rolls the additional d20 after advantage or disadvantage has been applied to the original roll." + AtHigherLevels + "When you cast this spell using a spell slot of 3rd level or higher, you can target one additional creature for each slot level above 2nd." }; SpellsList["immovable object"] = { name : "Immovable Object", classes : [], source : [["W", 187]], level : 2, school : "Trans", time : "1 a", range : "Touch", components : "V,S,M\u2020", compMaterial : "Gold dust worth at least 25 gp, which the spell consumes", duration : "1 h", description : "1 obj <10 lb fixed in place; holds 4k lb; Str check move, except chosen/password; See B (25gp cons.)", descriptionMetric : "1 obj <5 kg fixed in place; holds 2k kg; Str check move, except chosen/password; See B (25gp cons.)", descriptionFull : "You touch an object that weighs no more than 10 pounds and cause it to become magically fixed in place. You and the creatures you designate when you cast this spell can move the object normally. You can also set a password that, when spoken within 5 feet of the object, suppresses this spell for 1 minute.\n If the object is fixed in the air, it can hold up to 4,000 pounds of weight. More weight causes the object to fall. Otherwise, a creature can use an action to make a Strength check against your spell save DC. On a success, the creature can move the object up to 10 feet." + AtHigherLevels + "If you cast this spell using a spell slot of 4th or 5th level, the DC to move the object increases by 5, it can carry up to 8,000 pounds of weight, and the duration increases to 24 hours. If you cast this spell using a spell slot of 6th level or higher, the DC to move the object increases by 10, it can carry up to 20,000 pounds of weight, and the effect is permanent until dispelled." }; SpellsList["wristpocket"] = { name : "Wristpocket", classes : [], source : [["W", 190]], ritual : true, level : 2, school : "Conj", time : "1 a", range : "Self", components : "S", duration : "Conc, 1 h", description : "Store 1 held obj <5 lb in extradim. space; 1 a to summon obj in free hand or return; reappears at end", descriptionMetric : "Store 1 held obj <2,5 kg in extradim. space; 1 a summon obj in free hand or return; reappears at end", descriptionFull : "You flick your wrist, causing one object in your hand to vanish. The object, which only you can be holding and can weigh no more than 5 pounds, is transported to an extradimensional space, where it remains for the duration.\n Until the spell ends, you can use your action to summon the object to your free hand, and you can use your action to return the object to the extradimensional space. An object still in the pocket plane when the spell ends appears in your space, at your feet." }; SpellsList["pulse wave"] = { name : "Pulse Wave", classes : [], source : [["W", 188]], level : 3, school : "Evoc", time : "1 a", range : "S:30" + (typePF ? "-" : "") + "ft cone", components : "V,S", duration : "Instantaneous", save : "Con", description : "6d6+1d6/SL Force dmg, pulled/pushed 15+5/SL ft from me (also free obj); save halves, no move", descriptionMetric : "6d6+1d6/SL Force dmg, pull/push 4,5+1,5/SL m from me (also free obj); save halves, no move", descriptionShorter : "6d6+1d6/SL Force dmg, pull/push 15+5/SL ft from me (also free obj); save half, no move", descriptionFull : "You create intense pressure, unleash it in a 30-foot cone, and decide whether the pressure pulls or pushes creatures and objects. Each creature in that cone must make a Constitution saving throw. A creature takes 6d6 force damage on a failed save, or half as much damage on a successful one. And every creature that fails the save is either pulled 15 feet toward you or pushed 15 feet away from you, depending on the choice you made for the spell.\n In addition, unsecured objects that are completely within the cone are likewise pulled or pushed 15 feet." + AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d6 and the distance pulled or pushed increases by 5 feet for each slot level above 3rd." }; SpellsList["gravity sinkhole"] = { name : "Gravity Sinkhole", classes : [], source : [["W", 187]], level : 4, school : "Evoc", time : "1 a", range : "120 ft", components : "V,S,M", compMaterial : "A black marble", duration : "Instantaneous", save : "Con", description : "20-ft rad all crea 5d10+1d10/SL Force dmg, pulled to center of radius; save halves and not pulled", descriptionFull : "A 20-foot-radius sphere of crushing force forms at a point you can see within range and tugs at the creatures there. Each creature in the sphere must make a Constitution saving throw. On a failed save, the creature takes 5d10 force damage and is pulled in a straight line toward the center of the sphere, ending in an unoccupied space as close to the center as possible (even if that space is in the air). On a successful save, the creature takes half as much damage and isn't pulled." + AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, the damage increases by 1d10 for each slot level above 4th." }; SpellsList["temporal shunt"] = { name : "Temporal Shunt", classes : [], source : [["W", 189]], level : 5, school : "Trans", time : "1 rea", timeFull : "1 reaction, taken when a creature you can see makes an attack roll or starts to cast a spell", range : "120 ft", components : "V,S", duration : "1 rnd", save : "Wis", description : "Cast if see atk/cast, 1+1/SL crea, each max 30 ft apart, save or vanish until next turn, atk/cast wasted", descriptionFull : "You target the triggering creature, which must succeed on a Wisdom saving throw or vanish, being thrown to another point in time and causing the attack to miss or the spell to be wasted. At the start of its next turn, the target reappears where it was or in the closest unoccupied space. The target doesn't remember you casting the spell or being affected by it." + AtHigherLevels + "When you cast this spell using a spell slot of 6th level or higher, you can target one additional creature for each slot level above 5th. All targets must be within 30 feet of each other." }; SpellsList["gravity fissure"] = { name : "Gravity Fissure", source : [["W", 187]], level : 6, school : "Evoc", time : "1 a", range : "S:100" + (typePF ? "-" : "") + "ft line", components : "V,S,M", compMaterial : "A fistful of iron filings", duration : "Instantaneous", save : "Con", description : "100-ft long 5-ft wide all 8d8+1d8/SL Force dmg, save half; all in 10 ft of line save or dmg \u0026 pull to it", descriptionShorter : "100-ft long 5-ft wide all 8d8+1d8/SL Force dmg, save half; all in 10 ft of it save or dmg \u0026 pulled", descriptionFull : "You manifest a ravine of gravitational energy in a line originating from you that is 100 feet long and 5 feet wide. Each creature in that line must make a Constitution saving throw, taking 8d8 force damage on a failed save, or half as much damage on a successful one.\n Each creature within 10 feet of the line but not in it must succeed on a Constitution saving throw or take 8d8 force damage and be pulled toward the line until the creature is in its area." + AtHigherLevels + "When you cast this spell using a spell slot of 7th level or higher, the damage increases by 1d8 for each slot level above 6th." }; SpellsList["tether essence"] = { name : "Tether Essence", classes : [], source : [["W", 189]], level : 7, school : "Necro", time : "1 a", range : "60 ft", components : "V,S,M\u2020", compMaterial : "A spool of platinum cord worth at least 250 gp, which the spell consumes", duration : "Conc, 1 h", save : "Con", description : "2 crea save (dis. if in 30 ft) or if both fail take same dmg and same healing; ends if 0 hp (250gp cons.)", descriptionFull : "Two creatures you can see within range must make a Constitution saving throw, with disadvantage if they are within 30 feet of each other. Either creature can willingly fail the save. If either save succeeds, the spell has no effect. If both saves fail, the creatures are magically linked for the duration, regardless of the distance between them. When damage is dealt to one of them, the same damage is dealt to the other one. If hit points are restored to one of them, the same number of hit points are restored to the other one. If either of the tethered creatures is reduced to 0 hit points, the spell ends on both. If the spell ends on one creature, it ends on both." }; SpellsList["dark star"] = { name : "Dark Star", classes : [], source : [["W", 186]], level : 8, school : "Evoc", time : "1 a", range : "150 ft", components : "V,S,M", compMaterial : "A shard of onyx and a drop of the caster's blood, both of which the spell consumes", duration : "Conc, 1 min", save : "Con", description : "Up to 40-ft rad as Darkness spell, as Silence spell, dif. ter.; enter/start turn 8d10 Force dmg, save half", descriptionShorter : "Up to 40-ft rad as Darkness \u0026 Silence, dif. ter.; enter/start turn 8d10 Force dmg, save half", descriptionFull : "This spell creates a sphere centered on a point you choose within range. The sphere can have a radius of up to 40 feet. The area within this sphere is filled with magical darkness and crushing gravitational force.\n For the duration, the spell's area is difficult terrain. A creature with darkvision can't see through the magical darkness, and nonmagical light can't illuminate it. No sound can be created within or pass through the area. Any creature or object entirely inside the sphere is immune to thunder damage, and creatures are deafened while entirely inside it. Casting a spell that includes a verbal component is impossible there.\n Any creature that enters the spell's area for the first time on a turn or starts its turn there must make a Constitution saving throw. The creature takes 8d10 force damage on a failed save, or half as much damage on a successful one. A creature reduced to 0 hit points by this damage is disintegrated. A disintegrated creature and everything it is wearing and carrying, except magic items, are reduced to a pile of fine gray dust." }; SpellsList["reality break"] = { name : "Reality Break", classes : [], source : [["W", 189]], level : 8, school : "Conj", time : "1 a", range : "60 ft", components : "V,S,M", compMaterial : "A crystal prism", duration : "Conc, 1 min", save : "Wis", description : "1 crea save or can't take reactions, random effect each turn, see book; extra save at end of every turn", descriptionFull : "You shatter the barriers between realities and timelines, thrusting a creature into turmoil and madness. The target must succeed on a Wisdom saving throw, or it can't take reactions until the spell ends. The affected target must also roll a d10 at the start of each of its turns; the number rolled determines what happens to the target, as shown on the Reality Break Effects table."+ "\n At the end of each of its turns, the affected target can repeat the Wisdom saving throw, ending the spell on itself on a success."+ "\n\n d10 \tEffect"+ "\n 1-2 \tVision of the Far Realm: The target takes 6d12 psychic damage, and it is stunned until the end of the turn."+ "\n 3-5 \tRending Rift: The target must make a Dexterity saving throw, taking 8d12 force damage on a failed save, or half as much damage on a successful one."+ "\n 6-8 \tWormhole: The target is teleported, along with everything it is wearing and carrying, up to 30 feet to an unoccupied space of your choice that you can see. The target also takes 10d12 force damage and is knocked prone."+ "\n 9-10\tChill of the Dark Void: The target takes 10d12 cold damage, and it is blinded until the end of the turn." }; SpellsList["ravenous void"] = { name : "Ravenous Void", classes : [], source : [["W", 188]], level : 9, school : "Evoc", time : "1 a", range : "1000 ft", components : "V,S,M", compMaterial : "A small, nine-pointed star made of iron", duration : "Conc, 1 min", save : "Str", description : "20-ft rad all enter/start 5d10 Force dmg, restrained; all enter/start in 100 ft save or pulled in; see B", descriptionShorter : "20-ft rad all enter/start 5d10 Force dmg, restrained; all start in 100 ft save or pull in; see B", descriptionFull : "You create a 20-foot-radius sphere of destructive gravitational force centered on a point you can see within range. For the spell's duration, the sphere and any space within 100 feet of it are difficult terrain, and nonmagical objects fully inside the sphere are destroyed if they aren't being worn or carried.\n When the sphere appears and at the start of each of your turns until the spell ends, unsecured objects within 100 feet of the sphere are pulled toward the sphere's center, ending in an unoccupied space as close to the center as possible.\n A creature that starts its turn within 100 feet of the sphere must succeed on a Strength saving throw or be pulled straight toward the sphere's center, ending in an unoccupied space as close to the center as possible. A creature that enters the sphere for the first time on a turn or starts its turn there takes 5d10 force damage and is restrained until it is no longer in the sphere. If the sphere is in the air, the restrained creature hovers inside the sphere. A creature can use its action to make a Strength check against your spell save DC, ending this restrained condition on itself or another creature in the sphere that it can reach. A creature reduced to 0 hit points by this spell is annihilated, along with any nonmagical items it is wearing or carrying." }; SpellsList["time ravage"] = { name : "Time Ravage", classes : [], source : [["W", 189]], level : 9, school : "Necro", time : "1 a", range : "90 ft", components : "V,S,M\u2020", compMaterial : "An hourglass filled with diamond dust worth at least 5,000 gp, which the spell consumes", duration : "Instantaneous", save : "Con", description : "1 crea 10d12 Necrotic dmg \u0026 aged: dis. atk/chk/save, die in 30 days; save half, not aged (5k gp cons.)", descriptionShorter : "1 crea 10d12 Necro. dmg, aged: dis. atk/chk/save, die in 30 days; save hlf, no aged (5k gp cons)", descriptionFull : "You target a creature you can see within range, putting its physical form through the devastation of rapid aging. The target must make a Constitution saving throw, taking 10d12 necrotic damage on a failed save, or half as much damage on a successful one. If the save fails, the target also ages to the point where it has only 30 days left before it dies of old age. In this aged state, the target has disadvantage on attack rolls, ability checks, and saving throws, and its walking speed is halved. Only the wish spell or the greater restoration cast with a 9th-level spell slot can end these effects and restore the target to its previous age." }; // Creatures - new beasts CreatureList["moorbounder"] = { name : "Moorbounder", source : [["W", 295]], size : 2, type : "Beast", alignment : "Unaligned", ac : 13, hp : 30, hd : [4, 10], speed : "70 ft", scores : [18, 14, 14, 2, 13, 5], senses : "Darkvision 60 ft", passivePerception : 11, challengeRating : "1", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Claws", ability : 1, damage : [4, 4, "slashing"], range : "Melee (5 ft)", description : "" }], traits : [{ name : "Standing Leap", description : "The moorbounder's long jump is up to 40 ft and its high jump is up to 20 ft, with or without a running start." }] }; CreatureList["bristled moorbounder"] = { name : "Bristled Moorbounder", source : [["W", 295]], size : 2, type : "Beast", alignment : "Unaligned", ac : 15, hp : 52, hd : [7, 10], speed : "70 ft", scores : [18, 14, 14, 2, 13, 5], senses : "Darkvision 60 ft", passivePerception : 11, challengeRating : "3", proficiencyBonus : 2, attacksAction : 2, attacks : [{ name : "Blades", ability : 1, damage : [2, 6, "slashing"], range : "Melee (5 ft)", description : "One blades and one claws attack as an Attack action" }, { name : "Claws", ability : 1, damage : [4, 4, "slashing"], range : "Melee (5 ft)", description : "One blades and one claws attack as an Attack action" }], actions : [{ name : "Multiattack", description : "As an action on its turn, the moorbounder can makeone Blades and one Claws attack." }], traits : [{ name : "Bladed Hide", description : "At the start of each of its turns, the moorbounder deals 2d4 piercing damage to any creature grappling it." }, { name : "Standing Leap", description : "The moorbounder's long jump is up to 40 ft and its high jump is up to 20 ft, with or without a running start." }] }; // Magic Items (each contain contributions by kat9137 [Discord] aka sophiechiabatta [GitHub]) MagicItemsList["acheron blade"] = { name : "Acheron Blade", nameTest : "Acheron", source : [["W", 265]], type : "weapon (any sword)", rarity : "rare", notLegalAL : true, attunement : true, description : "This sword gives a +1 to hit and damage rolls. While I'm holding it, I'm immune to effects that turn undead. As an action, once per dusk, I can use it to gain 1d4+4 temporary HP. Once per dusk, I can give a creature hit with it disadvantage on their next save until the end of my next turn (frighten effect).", descriptionFull : "The black blade of this sword is crafted from a mysterious arcane alloy. You gain a +1 bonus to attack and damage rolls made with this magic weapon. While the sword is on your person, you are immune to effects that turn undead."+ "\n " + toUni("Dark Blessing") + ". While holding the sword, you can use an action to give yourself 1d4 + 4 temporary hit points. This property can't be used again until the next dusk."+ "\n " + toUni("Disheartening Strike") + ". When you hit a creature with an attack using this weapon, you can fill the target with unsettling dread: the target has disadvantage on the next saving throw it makes before the end of your next turn. The creature ignores this effect if it's immune to the frightened condition. Once you use this property, you can't do so again until the next dusk", action : [["action", " (Dark Blessing)"]], savetxt : { immune : ["Effects that turn undead"] }, extraLimitedFeatures : [{ name : "Acheron Blade (Dark Blessing)", usages : 1, recovery : "Dusk" }, { name : "Acheron Blade (Disheartening Strike)", usages : 1, recovery : "Dusk" }], chooseGear : { type : "weapon", prefixOrSuffix : "suffix", descriptionChange : ["replace", "sword"], excludeCheck : function (inObjKey, inObj) { var testRegex = /sword|scimitar|rapier/i; return !(testRegex).test(inObjKey) && (!inObj.baseWeapon || !(testRegex).test(inObj.baseWeapon)); } }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && v.isMeleeWeapon && (/sword|scimitar|rapier/i).test(v.baseWeaponName) && (/acheron/i).test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + 'Once per dusk, target disadv. on next save until my next turn ends'; } }, 'If I include the words "Acheron" in a the name of a sword, it will be treated as the magic weapon Acheron Blade.' ], atkCalc : [ function (fields, v, output) { if (v.isMeleeWeapon && (/sword|scimitar|rapier/i).test(v.baseWeaponName) && (/acheron/i).test(v.WeaponTextName)) { output.magic = v.thisWeapon[1] + 1; } }, '' ] } }; MagicItemsList["amulet of the drunkard"] = { name : "Amulet of the Drunkard", source : [["W", 266]], type : "wondrous item", rarity : "uncommon", notLegalAL : true, description : "This amulet smells of old, ale-stained wood. While wearing it, I can regain 4d4 + 4 hit points when I drink a pint of beer, ale, mead, or wine. Once the amulet has restored hit points, it can't do so again until the next dawn.", descriptionFull : "This amulet smells of old, ale-stained wood. While wearing it, you can regain 4d4 + 4 hit points when you drink a pint of beer, ale, mead, or wine. Once the amulet has restored hit points, it can't do so again until the next dawn.", usages : 1, recovery : "dawn" }; var EGtW_ArcaneCannonFullDescription = [ "This Large cannon is imbued with magic. It requires no ammunition and doesn't need to be loaded. It takes one action to aim the cannon and one action to fire it. After the cannon has fired, it must recharge for 5 minutes before it can be fired again. The creature firing the cannon chooses the effect from the following options:", ">>Acid Jet<<. The cannon discharges acid in a line 300 feet long and 5 feet wide. Each creature in that line must make a DC 15 Dexterity saving throw, taking 4d10 acid damage on a failed save, or half as much damage on a successful one. In addition, a creature that fails its saving throw takes 2d10 acid damage at the start of each of its turns; a creature can end this damage by using its action to wash off the acid with a pint or more of water.", ">>Fire Jet<<. The cannon discharges fire in a line 300 feet long and 5 feet wide. Each creature in the area must make a DC 15 Dexterity saving throw, taking 6d10 fire damage on a failed save, or half as much damage on a successful one. The fire ignites any flammable objects in the area that aren't being worn or carried.", ">>Frost Shot<<. The cannon shoots a ball of frost to a point you can see within 1200 feet of the cannon. The ball then expands to form a 30-foot-radius sphere centered on that point. Each creature in that area must make a DC 15 Constitution saving throw. On a failed save, a creature takes 4d10 cold damage, and its speed is reduced by 10 feet for 1 minute. On a successful save, the creature takes half as much damage, and its speed isn't reduced. A creature whose speed is reduced by this effect can repeat the save at the end of each of its turns, ending the effect on itself on a success.", ">>Lightning Shot<<. The cannon shoots a ball of lightning to a point you can see within 1200 feet of the cannon. The lightning then expands to form a 20-foot-radius sphere centered on that point. Each creature in that area must make a DC 15 Dexterity saving throw, taking 6d10 lightning damage on a failed save, or half as much damage on a successful one. Creatures wearing metal armor have disadvantage on the save.", ">>Poison Spray<<. The cannon expels poison gas in a 60-foot cone. Each creature in that area must make a DC 15 Constitution saving throw. On a failed save, the creature takes 4d10 poison damage and is poisoned for 1 minute. On a successful save, the creature takes half as much damage and isn't poisoned. A creature poisoned in this way can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success." ]; MagicItemsList["arcane cannon"] = { name : "Arcane Cannon", source : [["W", 265]], type : "wondrous item", rarity : "very rare", notLegalAL : true, description : "This Large magical cannon requires no ammunition and doesn't need to be loaded, but takes 5 minutes to recharge once fired. It takes one action to aim it and another action to fire it. When I fire it, I can choose the effect, an acid jet, fire jet, frost shot, lightning shot, or poison spray. See Notes page.", descriptionFull : EGtW_ArcaneCannonFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)<<\./g, function(a, match) { return match.toUpperCase() + ":"; }).replace(/\byou\b/ig, "I").replace(/\bf(oo|ee)t\b/ig, "ft") }] }; MagicItemsList["battering shield"] = { name : "Battering Shield", source : [["W", 266]], type : "shield", rarity : "uncommon", notLegalAL : true, attunement : true, description : "This iron tower shield gives me a +1 bonus to AC, in addition to the shield's normal bonus to AC. It has 3 charges, regaining 1d3 expended charges daily at dawn. When I am holding the shield and push a creature 5 ft away, I can expend 1 charge to push that creature an additional 10 ft, knock it prone, or both.", descriptionFull : "While holding this iron tower shield, you gain a +1 bonus to AC. This bonus is in addition to the shield's normal bonus to AC.\n Additionally, the shield has 3 charges, and it regains 1d3 expended charges daily at dawn. If you are holding the shield and push a creature within your reach at least 5 feet away, you can expend 1 charge to push that creature an additional 10 feet, knock it prone, or both.", usages : 3, recovery : "dawn", additional : "regains 1d3", shieldAdd : ["Battering Shield", 3], weight : 6 }; MagicItemsList["bloodaxe"] = { name : "Bloodaxe", source : [["W", 266]], type : "weapon (greataxe)", rarity : "very rare", notLegalAL : true, attunement : true, description : "This rust-colored magical greataxe grants a +2 bonus to attack and damage rolls made with it. The axe deals an additional 1d6 necrotic damage to creature's that aren't constructs or undead. If I reduce a creature to 0 hit points with this axe, I gain 10 temporary hit points.", descriptionFull : "You gain a +2 bonus to attack and damage rolls made with this magic axe. The axe deals an extra 1d6 necrotic damage to creatures that aren't constructs or undead. If you reduce such a creature to 0 hit points with an attack using this axe, you gain 10 temporary hit points.\n This axe is forged from a dark, rust-colored metal and once belonged to the goliath barbarian Grog Strongjaw of Vox Machina.", weaponOptions : [{ baseWeapon : "greataxe", regExpSearch : /bloodaxe/i, name : "Bloodaxe", source : [["W", 266]], description : "Heavy, two-handed; +1d6 necrotic damage to living targets", modifiers : [2, 2], selectNow : true }], weight : 7 }; MagicItemsList["breathing bubble"] = { name : "Breathing Bubble", source : [["W", 266], ["CotN", 212]], type : "wondrous item", rarity : "common", notLegalAL : true, description : "This translucent, bubble-like sphere has a slightly tacky outer surface. I gain its benefits only while wearing it over my head like a helmet. The bubble contains 1 hour of breathable air. The bubble regains all its expended air daily at dawn.", descriptionFull : "This translucent, bubble-like sphere has a slightly tacky outer surface, and you gain the item's benefits only while wearing it over your head like a helmet. The bubble contains 1 hour of breathable air. The bubble regains all its expended air daily at dawn.", usages : 1, recovery : "dawn" }; MagicItemsList["brooch of living essence"] = { name : "Brooch of Living Essence", source : [["W", 266]], type : "wondrous item", rarity : "uncommon", notLegalAL : true, attunement : true, description : "While wearing this nondescript brooch, spells and anything else that would detect or reveal my creature type treat me as humanoid, and those that would reveal my alignment treat it as neutral.", descriptionFull : "While wearing this nondescript brooch, spells and anything else that would detect or reveal your creature type treat you as humanoid, and those that would reveal your alignment treat it as neutral." }; MagicItemsList["butcher's bib"] = { name : "Butcher's Bib", source : [["W", 266]], type : "wondrous item", rarity : "rare", notLegalAL : true, attunement : true, description : "This black leather apron is perpetually covered by blood. Once per turn when I roll damage for a melee attack with a weapon, I can use it to reroll the weapon's damage dice, but must use the new roll. While wearing the bib, my weapon attacks that deal slashing damage score a critical hit on a roll of 19 or 20.", descriptionFull : "This black leather apron is perpetually covered by blood, even after being washed off. You gain the following benefits while wearing the apron:"+ "\n \u2022 Once per turn when you roll damage for a melee attack with a weapon, you can reroll the weapon's damage dice. If you do so, you must use the second total."+ "\n \u2022 Your weapon attacks that deal slashing damage score a critical hit on a roll of 19 or 20 on the d20.", calcChanges : { atkAdd : [ function (fields, v) { if (!v.isDC && !v.isSpell && !v.CritChance && /slash/i.test(v.theWea.damage[2])) { fields.Description += (fields.Description ? '; ' : '') + 'Crit on 19-20'; v.CritChance = 19; } if (!v.isDC && v.isMeleeWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Reroll damage once per turn'; } }, "My weapon attacks that deal slashing damage score a critical on a to hit roll of both 19 and 20. Once per turn, I can reroll the damage of a melee weapon attack and must use the second result.", 19 ] } }; MagicItemsList["coin of delving"] = { name : "Coin of Delving", source : [["W", 266]], type : "wondrous item", rarity : "common", notLegalAL : true, description : "This scintillating copper coin sheds dim light in a 5-ft radius. If dropped a distance greater than 5 ft, the coin issues a melodious ringing sound when it hits a surface. Any creature that can hear the chime can determine the distance the coin dropped based on the tone.", descriptionFull : "This scintillating copper coin sheds dim light in a 5-foot radius. If dropped a distance greater than 5 feet, the coin issues a melodious ringing sound when it hits a surface. Any creature that can hear the chime can determine the distance the coin dropped based on the tone." }; MagicItemsList["corpse slayer"] = { name : "Corpse Slayer", nameTest : "Corpse Slaying", source : [["W", 266]], type : "weapon (any)", rarity : "rare", notLegalAL : true, attunement : true, description : "I gain a +1 bonus to attack and damage rolls made with this magic weapon. Undead hit by it take an additional 1d8 damage and gain disadvantage on saving throws against effects that turn undead until the start of my next turn.", descriptionFull : "You gain a +1 bonus to attack and damage rolls made with this magic weapon.\n When you hit an undead creature with an attack using this weapon, the attack deals an extra 1d8 damage of the weapon's type, and the creature has disadvantage on saving throws against effects that turn undead until the start of your next turn.", chooseGear : { type : "weapon", prefixOrSuffix : ["between", "Corpse Slaying", ""], itemName1stPage : ["suffix", "Corpse Slaying"], descriptionChange : ["replace", "weapon"] }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.isSpell && !v.theWea.isMagicWeapon && (/corpse slay(er|ing)/i).test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + '+1d8 damage vs. undead; Target disadv. vs. turn undead'; } }, 'If I include the words "Corpse Slayer" or "Corpse Slaying" in a the name of a weapon, it will be treated as the magic weapon Corpse Slayer, which has a +1 to hit and damage and deals +1d8 damage vs. undead.' ], atkCalc : [ function (fields, v, output) { if (!v.isSpell && (/corpse slay(er|ing)/i).test(v.WeaponTextName)) { output.magic = v.thisWeapon[1] + 1; } }, '' ] } }; MagicItemsList["dispelling stone"] = { name : "Dispelling Stone", source : [["W", 266]], type : "wondrous item", rarity : "very rare", notLegalAL : true, description : "This smooth, rainbow-colored, egg-shaped stone can be thrown up to 30 ft and explodes in a 10-ft-radius sphere of magical energy on impact, destroying the stone. Any active spell of 5th level or lower in the sphere ends.", descriptionFull : "This smooth, rainbow-colored, egg-shaped stone can be thrown up to 30 feet and explodes in a 10-foot-radius sphere of magical energy on impact, destroying the stone. Any active spell of 5th level or lower in the sphere ends.", usages : 1, recovery : "Never" }; MagicItemsList["duskcrusher"] = { name : "Duskcrusher", source : [["W", 266]], type : "weapon (warhammer)", rarity : "very rare", notLegalAL : true, attunement : true, description : "This rod caries the symbol of Pelor. As a bonus action, I can activate its crackling head of sunlight, that shines bright light in 15 ft and dim for another 15 ft. While active, I can use it as a +2 warhammer that deals radiant damage and +1d8 damage to undead. Once per dawn, I can cast Sunbeam with it (DC 15).", descriptionLong : "This leather-wrapped metal rod caries the symbol of Pelor on top. As a bonus action, I can cause a warhammer head of crackling radiance to spring into existence. It emits emits bright light in a 15-foot radius and dim light for an additional 15 feet. The light is sunlight. While the radiant head is active, the rod functions as a +2 warhammer that deals radiant damage and +1d8 damage to undead. Once per dawn while its radiant head is active, I can use it to cast Sunbeam (DC 15). I can deactivate the head as an action.", descriptionFull : "This item takes the form of a leather-wrapped metal rod emblazoned with the symbol of Pelor, the Dawn Father. While grasping the rod, you can use a bonus action to cause a warhammer head of crackling radiance to spring into existence. The warhammer's radiant head emits bright light in a 15-foot radius and dim light for an additional 15 feet. The light is sunlight. You can use an action to make the radiant head disappear."+ "\n While the radiant head is active, you gain a +2 bonus to attack and damage rolls made with this magic weapon, and attacks with the weapon deal radiant damage instead of bludgeoning damage. An undead creature hit by the weapon takes an extra 1d8 radiant damage."+ "\n While you are holding Duskcrusher and its radiant head is active, you can use an action to cast the sunbeam spell (save DC 15) from the weapon, and this action can't be used again until the next dawn.", action : [ ["bonus action", " (activate)"], ["action", " (deactivate)"] ], extraLimitedFeatures : [{ name : "Duskcrusher (Sunbeam)", usages : 1, recovery : "dawn" }], weaponOptions : [{ baseWeapon : "warhammer", regExpSearch : /duskcrusher/i, name : "Duskcrusher", source : [["W", 266]], damage : [1, 8, "radiant"], description : "Versatile (1d10); +1d8 damage vs. undead", modifiers : [2, 2], selectNow : true }], weight : 2, fixedDC : 15, spellcastingBonus : [{ name : "Once per dawn", spells : ["sunbeam"], selection : ["sunbeam"], firstCol : 'oncelr' }] }; MagicItemsList["dust of deliciousness"] = { name : "Dust of Deliciousness", source : [["W", 267]], type : "wondrous item", rarity : "uncommon", notLegalAL : true, description : "This reddish brown dust can be sprinkled over any edible substance to greatly improve the flavor. The dust also dulls the eater's senses: anyone eating food treated with this dust has disadvantage on Wisdom ability checks and Wisdom saving throws for 1 hour. There is enough dust to flavor six servings.", descriptionFull : "This reddish brown dust can be sprinkled over any edible substance to greatly improve the flavor. The dust also dulls the eater's senses: anyone eating food treated with this dust has disadvantage on Wisdom ability checks and Wisdom saving throws for 1 hour. There is enough dust to flavor six servings.", usages : 6, recovery : "Never" }; // [dupl_start] reprint from Xanathar's Guide to Everything if (!MagicItemsList["ersatz eye"]) { MagicItemsList["ersatz eye"] = { name : "Ersatz Eye", source : [["X", 137], ["W", 267]], type : "wondrous item", rarity : "common", notLegalAL : true, description : "This artificial eye replaces a real one that was lost or removed. While the ersatz eye is embedded in my eye socket, it can't be removed by anyone other than me, and I can see through the tiny orb as though it were a normal eye.", descriptionFull : "This artificial eye replaces a real one that was lost or removed. While the ersatz eye is embedded in your eye socket, it can't be removed by anyone other than you, and you can see through the tiny orb as though it were a normal eye.", attunement : true } } // dupl_end MagicItemsList["goggles of object reading"] = { name : "Goggles of Object Reading", source : [["W", 267]], type : "wondrous item", rarity : "uncommon", notLegalAL : true, attunement : true, description : "While wearing these leather-framed goggles feature purple crystal lenses, I have advantage on Intelligence (Arcana) checks made to reveal information about a creature or object I can see. Once per dawn, I can cast Identify using the goggles.", descriptionFull : "These leather-framed goggles feature purple crystal lenses. While wearing the goggles, you have advantage on Intelligence (Arcana) checks made to reveal information about a creature or object you can see. In addition, you can cast the identify spell using the goggles. Once you do so, you can't do so again until the next dawn.", // Changed googles to goggles, as this is clearly a typo in the book additional : "Identify", usages : 1, recovery : "dawn", spellcastingBonus : [{ name : "Once per dawn", spells : ["identify"], selection : ["identify"], firstCol : 'oncelr' }] }; MagicItemsList["hunter's coat"] = { name : "Hunter's Coat", source : [["W", 267]], type : "armor (leather)", rarity : "very rare", notLegalAL : true, attunement : true, description : "I have a +1 bonus to AC while wearing this leather armor. The coat has 3 charges. When I hit a creature with an attack and that creature doesn't have all its hit points, I can expend 1 charge to deal an extra 1d10 necrotic damage to the target. The coat regains 1d3 expended charges at dawn.", descriptionFull : "You have a +1 bonus to AC while wearing this armor. The coat has 3 charges. When you hit a creature with an attack and that creature doesn't have all its hit points, you can expend 1 charge to deal an extra 1d10 necrotic damage to the target. The coat regains 1d3 expended charges daily at dawn.", usages : 3, recovery : "dawn", additional : "regains 1d3", armorOptions : [{ regExpSearch : /^(?=.*hunter)(?=.*coat).*$/i, name : "Hunter's Coat", source : [["W", 267]], type : "light", ac : "11+1", weight : 10, selectNow : true }], weight : 10 }; MagicItemsList["last stand armor"] = { name : "Last Stand Armor", nameTest : /last.stand.*armou?r/i, source : [["W", 267]], type : "armor (any)", rarity : "very rare", notLegalAL : true, description : "I have a +1 bonus to AC while wearing this magic armor. If I die while wearing this armor, it is destroyed, and each celestial, fey, and fiend with 30 ft of me must succeed on a DC 15 Charisma saving throw or be banished to their home plane of existence, unless they are already there.", descriptionFull : "You have a +1 bonus to AC while wearing this armor, which shimmers softly. If you die while wearing the armor, it is destroyed, and each celestial, fey, and fiend with 30 feet of you must succeed on a DC 15 Charisma saving throw or be banished to its home plane of existence, unless it is already there.", chooseGear : { type : "armor", prefixOrSuffix : ["between", "Last Stand", "Armor"], descriptionChange : ["prefix", "armor"], itemName1stPage : ["between", "Last Stand", "(+1)"] }, extraLimitedFeatures : [{ name : "Last Stand Armor", usages : 1, recovery : "Never" }] }; var EGtW_LuxonBeaconFullDescription = [ "This dodecahedron of faintly glowing crystal is heavier than it appears. A set of handles are affixed to its sides, and it pulsates and thrums when touched.", ">>Fragment of Possibility<<. A creature that touches the beacon and concentrates for 1 minute receives a Fragment of Possibility, which looks like a Tiny, grayish bead of energy that follows the creature around, staying within 1 foot of it at all times. The fragment lasts for 8 hours or until used. Once the beacon grants a Fragment of Possibility, it can't grant another until the next dawn. A creature with a Fragment of Possibility from a Luxon Beacon can't gain another Fragment of Possibility from any source.", "When a creature with a Fragment of Possibility makes an attack roll, an ability check, or a saving throw, it can expend its fragment to roll an additional d20 and choose which of the d20s to use. Alternatively, when an attack roll is made against the creature, it can expend its fragment to roll a d20 and choose which of the d20s to use, the one it rolled or the one the attacker rolled.", "If the original d20 roll has advantage or disadvantage, the creature rolls its d20 after advantage or disadvantage has been applied to the original roll.", ">>Soul Snare<<. If a follower of the Luxon who has undergone a ritual of consecution dies within 100 miles of a Luxon Beacon, their soul is ensnared by it. This soul will be reincarnated within the body of a random humanoid baby developing within 100 miles of the beacon." ]; MagicItemsList["luxon beacon"] = { name : "Luxon Beacon", source : [["W", 268]], type : "wondrous item", rarity : "legendary", notLegalAL : true, description : "Once per dawn, a creature can touch this crystal for 1 minute to gain a Fragment of Possibility. Once for the next 8 hours, it can roll an extra d20 for an attack, check, save, or being attacked, before the outcome is determined. Creatures consecuted to the Luxon that die within 100 miles of it are reincarnated. See notes.", descriptionFull : EGtW_LuxonBeaconFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)<<\. /g, function(a, match) { return match.toUpperCase() + "\n "; }) }] }; MagicItemsList["needle of mending"] = { name : "Needle of Mending", source : [["W", 268]], type : "weapon (dagger)", rarity : "rare", notLegalAL : true, attunement : true, description : "This weapon is a magic dagger disguised as a sewing needle. As a bonus action, I can speak its command word to transform it into a dagger or back into a needle. I gain a +1 bonus to attack and damage rolls made with the dagger. As an action while holding it, I can cast the mending cantrip from it.", descriptionFull : "This weapon is a magic dagger disguised as a sewing needle. When you hold it and use a bonus action to speak its command word, it transforms into a dagger or back into a needle.\n You gain a +1 bonus to attack and damage rolls made with the dagger. While holding it, you can use an action to cast the mending cantrip from it.", action : [["bonus action", " (transform)"]], weaponOptions : [{ baseWeapon : "dagger", regExpSearch : /^(?=.*needle)(?=.*mending).*$/i, name : "Needle of Mending", source : [["W", 268]], modifiers : [1, 1], selectNow : true }], spellcastingBonus : [{ name : "At will", spells : ["mending"], selection : ["mending"], firstCol : 'atwill' }], spellChanges : { "mending" : { time : "1 a", changes : "Using the Needle of Mending, I can cast Mending as an action." } }, weight : 1 }; MagicItemsList["nightfall pearl"] = { name : "Nightfall Pearl", source : [["W", 268]], type : "wondrous item", rarity : "legendary", notLegalAL : true, attunement : true, description : "I can spend 10 minutes to activate this his 6-inch-diameter, jet-black orb, causing the area within 10 miles of it to become night even if it is daytime. This night lasts for 24 hours, until I cancel it as an action, or until my attunement to the pearl ends. Once used, the pearl can't be used again for 24 hours.", descriptionFull : "Used to summon night, this 6-inch-diameter, jet-black orb is cold to the touch. You can spend 10 minutes to activate it, causing the area within 10 miles of it at the moment of activation to become night even if it is daytime. This night lasts for 24 hours, until you cancel it as an action, or until your attunement to the pearl ends. Once used, the pearl can't be used again for 24 hours.", action : [["action", " (end)"]], usages : 1, recovery : "24 hrs" }; MagicItemsList["orb of the veil"] = { // no automation for halving the fire damage, because it is very complex, error prone, and the curse could (and will) be removed name : "Orb of the Veil", source : [["W", 268]], type : "wondrous item", rarity : "very rare", notLegalAL : true, attunement : true, description : "This orb increases my Wisdom and maximum by 2, grants me +60 ft darkvision, and adv. on Wisdom checks to find hidden doors and paths. It is cursed and once attuned to it, I become unwilling to part with it, nonmagical flames within 30 ft of me extinguish, and fire damage I deal is halved (not automated).", descriptionFull : "This onyx sphere bears deep, spiraling grooves and dangles from an iron chain. While the orb is on your person, you gain the following benefits:\n Your Wisdom score increases by 2, as does your maximum for that score.\n You gain darkvision out to a range of 60 feet. If you already have darkvision, the orb increases its range by 60 feet.\n You have advantage on Wisdom checks to find hidden doors and paths.\n " + toUni("Curse") + ". The orb is cursed, and becoming attuned to it extends the curse to you. As long as you remain cursed, you are unwilling to part with the orb, keeping it on your person at all times. All nonmagical flames within 30 feet of you automatically extinguish, and fire damage dealt by you is halved.", vision : [["Darkvision", "fixed 60"], ["Darkvision", "+60"]], scores : [0, 0, 0, 0, 2, 0], scoresMaximum : [0, 0, 0, 0, "+2", 0], weight : 3 }; MagicItemsList["potion of maximum power"] = { name : "Potion of Maximum Power", source : [["W", 268]], type : "potion", rarity : "rare", notLegalAL : true, description : "Once as an action, I can drink this potion of glowing purple liquid that smells of sugar and plum or administer it to another. The next time the recipient casts a damage-dealing spell of 4th-level or lower within 1 minute, instead of rolling the damage die, the highest number possible for each die is used.", descriptionFull : "The first time you cast a damage-dealing spell of 4th level or lower within 1 minute after drinking the potion, instead of rolling dice to determine the damage dealt, you can instead use the highest number possible for each die.\n This glowing purple liquid smells of sugar and plum, but it has a muddy taste.", weight : 0.5 }; MagicItemsList["potion of possibility"] = { name : "Potion of Possibility", source : [["W", 268]], type : "potion", rarity : "very rare", notLegalAL : true, description : "Once as an action, I can drink this potion of glowing purple liquid that smells of sugar and plum or administer it to another. Twice for the next 8 hours, the consumer can roll an extra d20 for an attack, check, save, or being attacked, before the outcome is determined.", descriptionFull : "When you drink this clear potion, you gain two Fragments of Possibility, each of which looks like a Tiny, grayish bead of energy that follows you around, staying within 1 foot of you at all times. Each fragment lasts for 8 hours or until used."+ "\n When you make an attack roll, an ability check, or a saving throw, you can expend your fragment to roll an additional d20 and choose which of the d20s to use. Alternatively, when an attack roll is made against you, you can expend your fragment to roll a d20 and choose which of the d20s to use, the one you rolled or the one the attacker rolled."+ "\n If the original d20 roll has advantage or disadvantage, you roll your d20 after advantage or disadvantage has been applied to the original roll."+ "\n While you have one or more Fragments of Possibility from this potion, you can't gain another Fragment of Possibility from any source.", weight : 0.5 }; // [dupl_start] reprint from Eberron: Rising from the Last War if (!MagicItemsList["prosthetic limb"]) { MagicItemsList["prosthetic limb"] = { name : "Prosthetic Limb", source : [["E:RLW", 278], ["W", 268], ["T", 134]], type : "wondrous item", rarity : "common", notLegalAL : true, description : "This artificial limb replaces a lost limb, like a hand, an arm, a foot, a leg, or a similar body part. While the prosthetic is attached, it functions identically to the part it replaces. As an action, I can detach or reattach it. It can't be removed against my will. It detaches if I die.", descriptionFull : "This item replaces a lost limb\u2014a hand, an arm, a foot, a leg, or a similar body part. While the prosthetic is attached, it functions identically to the part it replaces. You can detach or reattach it as an action, and it can't be removed against your will. It detaches if you die.", action : [["action", " (attach/detach)"]] } } // dupl_end MagicItemsList["reincarnation dust"] = { name : "Reincarnation Dust", source : [["W", 268]], type : "wondrous item", rarity : "very rare", notLegalAL : true, usages : 1, recovery : "Never", description : "Once I can sprinkle the purple dust in this small pouch on a dead humanoid or a piece of a dead humanoid. The dust is absorbed by the remains. If willing, the dead creature returns to life with a new body as if the reincarnate spell had been cast on the remains.", descriptionFull : "When this small pouch of purple dust is sprinkled on a dead humanoid or a piece of a dead humanoid, the dust is absorbed by the remains. If willing, the dead creature returns to life with a new body as if the reincarnate spell had been cast on the remains.", spellcastingBonus : [{ name : "Use once", spells : ["reincarnate"], selection : ["reincarnate"] }] }; MagicItemsList["ring of obscuring"] = { name : "Ring of Obscuring", source : [["W", 269]], type : "ring", rarity : "uncommon", notLegalAL : true, attunement : true, description : "This band of iron resembling a skull has 3 charges, regaining 1d3 expended charges at dawn. As an action, I can expend 1 charge to cast Fog Cloud from it, with the following changes: the cloud is centered on me when it first appears, the spell lasts for 1 minute, and the spell requires no concentration.", descriptionFull : "This band of iron resembles a skull and is cold to the touch. It has 3 charges and regains 1d3 expended charges daily at dawn. As an action while wearing the ring, you can expend 1 of its charges to cast the fog cloud spell from it, with the following changes: the cloud is centered on you when it first appears, and the spell lasts for 1 minute (no concentration required).", extraLimitedFeatures : [{ name : "Ring of Obscuring", usages : 3, recovery : "Dawn" }], spellcastingAbility : "class", spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "1 charge", spells : ["fog cloud"], selection : ["fog cloud"], firstCol : '1' }], spellChanges : { "fog cloud" : { range : "Self", duration : "1 min", changes : "When I cast fog cloud with the Ring of Obscuring, the spell is centered on me, lasts for 1 minute, and the requires no concentration." } } }; MagicItemsList["ring of temporal salvation"] = { name : "Ring of Temporal Salvation", source : [["W", 269]], type : "ring", rarity : "rare", notLegalAL : true, attunement : true, description : "If I die while wearing this gray crystal ring, I vanish and reappear in an empty space within 5 ft, with 3d6 + my Con mod in HP, and 1 less level of exhaustion (if any). If my maximum HP is less than the amount rolled, my max rises to a similar amount. Once this ring is used, it turns to dust and is destroyed.", descriptionFull : "If you die while wearing this gray crystal ring, you vanish and reappear in an unoccupied space within 5 feet of the space you left (or the nearest unoccupied space). You have a number of hit points equal to 3d6 + your Constitution modifier. If your hit point maximum is lower than the number of hit points you regain, your hit point maximum rises to a similar amount. If you have any levels of exhaustion, reduce your level of exhaustion by 1. Once the ring is used, it turns to dust and is destroyed." }; MagicItemsList["rod of retribution"] = { name : "Rod of Retribution", source : [["W", 269]], type : "rod", rarity : "uncommon", notLegalAL : true, attunement : true, description : "This adamantine rod with a glowing crystalline tip has 3 charges, regaining all daily at dawn. As a reaction when a creature I can see within 60 ft damages me, I can expend a charge to force it to make a DC 13 Dexterity save. It takes a 2d10 lightning damage on a failed save, or half as much on a successful one.", descriptionFull : "This adamantine rod is tipped with a glowing crystalline eye. The rod has 3 charges and regains all its expended charges daily at dawn.\n When a creature you can see within 60 feet of you damages you while you are holding this rod, you can use your reaction to expend 1 of the rod's charges to force the creature to make a DC 13 Dexterity saving throw. The creature takes 2d10 lightning damage on a failed save, or half as much damage on a successful one.", usages : 3, recovery : "dawn", action : [["reaction", " (if damaged)"]], weight : 2 }; MagicItemsList["spell bottle"] = { name : "Spell Bottle", source : [["W", 269]], type : "wondrous item", rarity : "legendary", notLegalAL : true, attunement : true, description : "While holding this bottle, I can cast a 5th-level or lower spell into it if empty, or cast the stored spell from it (slot level, DC, and spell attack as original casting). As a reaction when I see a spell being cast in 60 ft, I can try to store it in the empty bottle. Works if 3rd-level or lower, otherwise Int check DC 10 + spell level.", descriptionFull : "This glass bottle can store one spell of up to 5th level at a time. When found, roll a d6 and subtract 1; the total determines the level of spell in the bottle (the DM chooses the spell, and 0 means the bottle is empty). A swirling blue vapor fills the bottle while it contains a spell."+ "\n When the bottle is empty, any creature can cast a spell of 1st through 5th level into it by touching it while casting. The spell has no effect other than to be stored in the bottle."+ "\n While holding the bottle, you can cast the spell stored in it. The spell uses the slot level, spell save DC, spell attack bonus, and spellcasting ability of the original caster, but is otherwise treated as if you cast the spell. The bottle becomes empty once the spell is cast."+ "\n If you're holding the empty bottle when you see a creature casting a spell within 60 feet of you, you can open the bottle as a reaction in an attempt to interrupt the spell. If the creature is casting a spell of 3rd level or lower, the spell has no effect, and it is stored in the bottle. If it is casting a spell of 4th level or higher, make an Intelligence check. The DC equals 10 + the spell's level. On a success, the spell has no effect, and it is stored in the bottle." }; MagicItemsList["staff of dunamancy"] = { name : "Staff of Dunamancy", source : [["W", 270]], type : "staff", rarity : "very rare", notLegalAL : true, attunement : true, prerequisite : "Requires attunement by a wizard", prereqeval : function (v) { return classes.known.wizard ? true : false; }, description : "This staff has 10 charges, regains 1d6+4 at dawn. If I use its last charge, roll a d20. On a 1, it is destroyed. As an action, I can use its charges to cast Fortune's Favor (2), Pulse Wave (3), or Gravity Sinkhole (4), using my spellcasting ability. Once per dawn, I can turn a failed save vs. a spell that targets only me into a success.", descriptionFull : "This staff of polished gray wood bears numerous runes carved along its length. The staff has 10 charges and regains 1d6 + 4 expended charges daily at dawn. If you expend the last charge, roll a d20. On a 1, the staff turns into dust and is destroyed."+ "\n While holding the staff, you can use an action to expend 2 or more of its charges to cast one of the following spells from it, using your spell save DC and spell attack bonus: fortune's favor (2 charges), pulse wave (3 charges), or gravity sinkhole (4 charges)."+ "\n " + toUni("New Possibility") + ". If you are holding the staff and fail a saving throw against a spell that targets only you, you can turn your failed save into a successful one. This property can't be used again until the next dawn.", extraLimitedFeatures : [{ name : "Staff of Dunamancy (regains 1d6+4)", usages : 10, recovery : "dawn" }, { name : "Staff of Dunamancy (New Possibility)", usages : 1, recovery : "dawn" }], spellcastingAbility : "class", spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "2 charges", spells : ["fortune's favor"], selection : ["fortune's favor"], firstCol : 2 }, { name : "3 charges", spells : ["pulse wave"], selection : ["pulse wave"], firstCol : 3 }, { name : "4 charges", spells : ["gravity sinkhole"], selection : ["gravity sinkhole"], firstCol : 4 }], spellChanges : { "fortune's favor" : { time : "1 a", changes : "Using the Staff of Dunamancy, I can cast Fortune's Favor as an action." } }, weight : 4 }; MagicItemsList["staff of the ivory claw"] = { name : "Staff of the Ivory Claw", source : [["W", 270]], type : "staff", rarity : "rare", notLegalAL : true, attunement : true, description : "This gray-and-cerulean staff is topped with a small dragon claw carved from ivory. While holding the staff, I gain a +1 bonus to spell attack rolls. Whenever you score a critical hit with a spell attack, the target takes an extra 3d6 radiant damage.", descriptionFull : "This gray-and-cerulean staff is topped with a small dragon claw carved from ivory. While holding the staff, you gain a +1 bonus to spell attack rolls. Whenever you score a critical hit with a spell attack, the target takes an extra 3d6 radiant damage.", prerequisite : "Requires attunement by a spellcaster", prereqeval : function(v) { return v.isSpellcaster; }, calcChanges : { spellCalc : [ function (type, spellcasters, ability) { if (type == "attack") return 1; }, "While holding the Staff of the Ivory Claw, I have a +1 bonus to spell attack rolls." ], atkAdd : [ function (fields, v) { if (v.isSpell && !v.theWea.dc) { fields.Description += (fields.Description ? '; ' : '') + 'On crit, +3d6 radiant damage'; } }, "While holding the Staff of the Ivory Claw whenever I score a critical hit with a spell attack, the target takes an extra 3d6 radiant damage." ] }, weight : 4 }; MagicItemsList["vox seeker"] = { name : "Vox Seeker", source : [["W", 270]], type : "wondrous item", rarity : "common", notLegalAL : true, description : "This clockwork device resembles a metal crab the size of a dinner plate. Every action used to wind up this clockwork device allows it to operate for 1 minute, to a maximum of 10 minutes. See the vox seeker on a companion page. This creature is under the DM's control. If reduced to 0 HP, it is destroyed.", descriptionFull : "This clockwork device resembles a metal crab the size of a dinner plate. Every action used to wind up the device allows it to operate for 1 minute, to a maximum of 10 minutes. While operational, the item uses the accompanying Vox Seeker stat block. This automaton is under the DM's control. A vox seeker reduced to 0 hit points is destroyed.", action : [["action", " (wind up)"]], creaturesAdd : [["Vox Seeker"]], creatureOptions : [{ name : "Vox Seeker", source : [["W", 270]], size : 5, type : "Construct", alignment : "", ac : 14, hp : 7, hd : [2, 4], speed : "20 ft, climb 20 ft", scores : [2, 10, 12, 1, 10, 1], damage_immunities : "poison, psychic", condition_immunities : "blinded, charmed, deafened, exhaustion, frightened, paralyzed, petrified, poisoned", senses : "Blindsight 60 ft (blind beyond this radius", passivePerception : 10, languages : "", challengeRating : "0", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Pincer", ability : 2, damage : [1, 4, "piercing"], range : "Melee (5 ft)", description : "+3 lightning damage", abilitytodamage : false }], features : [{ name : "Creator", description : "The homunculus obeys the commands of its creator and has the same proficiency bonus. It takes its turn immediately after its creator, on the same initiative count. It can move and take reactions on its own, but only takes the Dodge action on its turn unless its creator takes a bonus action to command it to take another action. If its creator is incapacitated, it can take any action, not just Dodge." }], traits : [{ name : "Spider Climb", description : "The vox seeker can climb difficult surfaces, including upside down on ceilings, without needing to make an ability check." }, { name : "Voice Lock", description : "The vox seeker must move toward and attack the source of the nearest voice within 60 ft of it, to the exclusion of all other targets, for as long as it remains operational." }] }] }; MagicItemsList["weapon of certain death"] = { name : "Weapon of Certain Death", nameTest : "of Certain Death", source : [["W", 270]], type : "weapon (any)", rarity : "rare", notLegalAL : true, description : "When I damage a creature with an attack using this magic weapon, the target can't regain hit points until the start of my next turn.", descriptionFull : "When you damage a creature with an attack using this magic weapon, the target can't regain hit points until the start of your next turn.", chooseGear : { type : "weapon", prefixOrSuffix : "prefix", descriptionChange : ["replace", "weapon"] }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && (/of certain death/i).test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + "On hit, target can't heal until my next turn starts"; } }, 'If I include the words "of Certain Death" in a the name of a weapon, it will be treated as the magic weapon "Weapon of Certain Death". On a hit, the target can\'t regain hit points until the start of my next turn.' ] } }; // Vestiges of Divergence (contains contributions by kat9137 [Discord] aka sophiechiabatta [GitHub]) var EGtW_Vestiges_Replace = function (sDescr) { return desc(sDescr).replace(/\bf(oo|ee)t\b/ig, "ft") .replace(/you are/ig, "I am").replace(/\byou\b/ig, "I") .replace(/(by|giving|grants|of|to|for) I\b/ig, "$1 me") .replace(/your/g, "my").replace(/Your/g, "My") .replace(/ >>(.*?)<<\. /g, function(a, match) { return "\n" + match.toUpperCase() + "\n "; }); } var EGtW_DanothsVisorFullDescription = [ "These mithral-frame goggles with clear diamond lenses were used by the evoker Danoth Oro to spot invisible enemies and scout areas from afar.", ">>Dormant<<. While wearing the goggles in their dormant state, you can see normally in darkness, both magical and nonmagical, to a distance of 60 feet. Additionally, you have advantage on Intelligence (Investigation) and Wisdom (Perception) checks that rely on sight.", ">>Awakened<<. When Danoth's Visor reaches an awakened state, it gains the following properties:", "\u2022 You see invisible creatures and objects within 60 feet of you as if they were visible, and you can see into the Ethereal Plane. Ethereal creatures and objects appear ghostly and translucent.", "\u2022 As a bonus action, you can speak a command word and use the goggles to see into and through solid matter. This vision has a radius of 60 feet and lasts for 1 minute. To you, solid objects within that radius appear transparent. The vision can penetrate 1 foot of stone, 1 inch of common metal, or up to 3 feet of wood or dirt. Thicker substances block the vision, as does a thin sheet of lead. This property can't be used again until the next dawn.", "\u2022 As a bonus action, you can speak a command word to switch the goggles into spyglass mode. While in this mode, creatures and objects viewed through the goggles are magnified to twice their size. Speaking the command word again reverts the goggles to their normal operation.", ">>Exalted<<.", "When Danoth's Visor reaches an exalted state, it gains the following properties:", "\u2022 You automatically detect illusions you can see and automatically succeed on saving throws against them. In addition, you see a bright aura around any creature that isn't in its true form.", "\u2022 As an action, you can cast the antimagic field spell from the visor. This property can't be used again until the next dawn." ]; MagicItemsList["danoth's visor"] = { name : "Danoth's Visor", source : [["W", 270]], type : "wondrous item", rarity : "legendary", notLegalAL : true, attunement : true, description : "These mithral-frame goggles with clear diamond lenses were used by the evoker Danoth Oro to spot invisible enemies and scout areas from afar. See notes page for more information.", descriptionFull : EGtW_DanothsVisorFullDescription.join("\n ").replace(/>>(.*?)<>Dormant<<. Most of the book is blank, but the following spells are recorded in the first pages of the tome: alarm, antimagic field, Bigby's hand, blight, charm person, confusion, control weather, create undead, detect thoughts, enlarge/reduce, fear, foresight, gaseous form, glyph of warding, legend lore, Leomund's tiny hut, mass suggestion, mislead, misty step, Mordenkainen's faithful hound, prismatic spray, ray of enfeeblement, silent image, teleport, and thunderwave.", "You can use the grimoire as your spellbook, and you can scribe new spells into it as normal. When you prepare wizard spells using the grimoire, the number of wizard spells you can prepare increases by 1.", ">>Awakened<<. When the Grimoire Infinitus reaches an awakened state, it gains the following properties:", "\u2022 While you carry the spellbook, you have advantage on saving throws against spells and magical effects.", "\u2022 When you prepare wizard spells using the grimoire as your spellbook, the number of spells you can prepare increases by 1 again.", ">>Exalted<<. When the Grimoire Infinitus reaches an exalted state, it gains the following properties:", "\u2022 You can now use your Arcane Recovery feature twice between long rests, rather than once.", "\u2022 When you prepare wizard spells using the grimoire as your spellbook, the number of spells you can prepare increases by 1 again." ]; MagicItemsList["grimoire infinitus"] = { name : "Grimoire Infinitus", source : [["W", 271]], type : "wondrous item", rarity : "legendary", notLegalAL : true, attunement : true, description : "This spellbook with unlimited gilded pages and silver-plated covers can be used by a wizard to prepare and store spells. It holds several spells already. When I use to prepare wizards spells, I can prepare 1 additional spell.", descriptionFull : EGtW_GrimoireInfinitusFullDescription.join("\n ").replace(/>>(.*?)<>Dormant<<. While wearing the armor in its dormant state, you gain the following benefits:", "\u2022 The armor grants you a +1 bonus to AC.", "\u2022 While you are transformed by an effect that replaces any of your game statistics with those of another creature, you have a +1 bonus to melee attack and damage rolls, and you retain the benefits of this armor.", "\u2022 As an action, you can use the armor to cast polymorph on yourself, transforming into a giant owl while retaining your Intelligence, Wisdom, and Charisma scores. This property can't be used again until the next dawn.", ">>Awakened<<. When the armor reaches an awakened state, it gains the following properties:", "\u2022 The AC bonus of the armor increases to +2.", "\u2022 While you are transformed by an effect that replaces any of your game statistics with those of another creature, your bonus to melee attack and damage rolls increases by 1 (to +2).", "\u2022 When you cast the polymorph spell using this armor, you can transform into a cave bear.", ">>Exalted<<. When the armor reaches an exalted state, it gains the following properties:", "\u2022 The AC bonus of the armor increases to +3.", "\u2022 While you are transformed by an effect that replaces any of your game statistics with those of another creature, your bonus to melee attack and damage rolls increases by 1 (to +3).", "\u2022 When you cast the polymorph spell using this armor, you can transform into a guardian wolf." ]; MagicItemsList["hide of the feral guardian"] = { name : "Hide of the Feral Guardian", source : [["W", 271]], type : "armor (studded leather)", rarity : "legendary", notLegalAL : true, attunement : true, description : "This magic studded leather armor retains it benefits even when I'm transformed by an effect that replaces any of my game statistics with those of another creature and then also grants me a bonus to melee attack and damage rolls. Once per dawn, I can use it to cast Polymorph on myself.", descriptionFull : EGtW_HideFeralGuardianFullDescription.join("\n ").replace(/>>(.*?)<>Dormant<<. The Infiltrator's Key grants the following benefits in its dormant state:", "\u2022 The key can be used as thieves' tools for the purpose of opening locks. When using the key, you are considered proficient in thieves' tools and you have advantage on ability checks made to open locks.", "\u2022 While holding the key, your steps are muffled, giving you advantage on Dexterity (Stealth) checks made to move silently.", ">>Awakened<<. When the Infiltrator's Key reaches an awakened state, it gains the following properties:", "\u2022 While holding the key, you can use a bonus action to transform the key into a magic dagger or back into a key. While the key is in the form of a dagger, you gain a +1 bonus to attack and damage rolls made with it, and it returns to your hand immediately after it is used to make a ranged attack.", "\u2022 While holding the key, you can use an action to cast one of the following spells from it: alter self, invisibility, knock, or pass without trace. Once a spell has been cast using the key, it can't be used to cast that spell again until the next dawn.", ">>Exalted<<. When the Infiltrator's Key reaches an exalted state, it gains the following properties:", "\u2022 As a bonus action, you can touch the key to a floor, wall, or ceiling that is no more than 5 feet thick and cause a magical opening to appear in the surface. When you create the opening, you choose its length and width, up to 10 feet for each dimension. The opening lasts until the key passes through it to the other side, at which point it disappears (if a creature is in the opening when the doorway closes, the creature is safely shunted to the nearest unoccupied space). The key can't be used to create another opening until the next dawn.", "\u2022 While holding the key, you can use an action to cast one of the following spells from it: dimension door, gaseous form, or mislead. Once a spell has been cast using the key, it can't be used to cast that spell again until the next dawn." ]; MagicItemsList["infiltrator's key"] = { name : "Infiltrator's Key", source : [["W", 273]], type : "wondrous item", rarity : "legendary", notLegalAL : true, attunement : true, description : "This mithral skeleton key was forged using the blood of twelve master thieves executed for trying to steal magic items during the Age of Arcanum. See notes page for more information.", descriptionFull : EGtW_InfiltratorsKeyFullDescription.join("\n ").replace(/>>(.*?)<>Dormant<<. While wearing the Stormgirdle in its dormant state, you have resistance to lightning damage and thunder damage, and your Strength score becomes 21 if it isn't already 21 or higher. In addition, you can use an action to become a Storm Avatar for 1 minute, gaining the following benefits for the duration:", "\u2022 You have immunity to lightning damage and thunder damage.", "\u2022 When you hit with a weapon attack that normally deals bludgeoning damage, it deals thunder damage instead. When you hit with a weapon attack that normally deals piercing or slashing damage, it deals lightning damage instead.", "\u2022 As a bonus action, you can choose one creature you can see within 30 feet of you to be struck by lightning. The target must make a DC 15 Dexterity saving throw, taking 3d6 lightning damage on a failed save, or half as much damage on a successful one.", "Once you use the girdle's Storm Avatar property, that property can't be used again until the next dawn.", ">>Awakened<<. While wearing the Stormgirdle in its awakened state, you gain the following benefits:", "\u2022 Your Strength score becomes 23 if it isn't already 23 or higher.", "\u2022 Your Storm Avatar's lightning strike deals 4d6 lightning damage (instead of 3d6).", "\u2022 While transformed into a Storm Avatar, you gain a flying speed of 30 feet and can hover.", ">>Exalted<<. While wearing the Stormgirdle in its exalted state, you gain the following benefits:", "\u2022 Your Strength score becomes 25 if it isn't already 25 or higher.", "\u2022 Your Storm Avatar's lightning strike deals 5d6 lightning damage (instead of 3d6).", "\u2022 You can cast the control weather spell from the girdle. This property can't be used again until the next dawn." ]; MagicItemsList["stormgirdle"] = { name : "Stormgirdle", source : [["W", 273]], type : "wondrous item", rarity : "legendary", notLegalAL : true, attunement : true, description : "A wide belt of leather branded with the symbol of Kord. While attuned to and wearing this belt, I am resistant to lightning and thunder damage. My Strength score becomes 21, provided my Strength is not already 21 or higher. As an action, I can become a Storm Avatar for 1 minute. See notes page for more info.", descriptionFull : EGtW_StormgirdleFullDescription.join("\n ").replace(/>>(.*?)<>Dormant<<. While wearing the Verminshroud in its dormant state, you gain the following benefits:", "\u2022 You have advantage on Wisdom (Perception) checks that rely on smell, you are immune to disease, and you have darkvision out to a range of 60 feet. If you already have darkvision, wearing the cloak increases the range of your darkvision by 60 feet.", "\u2022 As an action, you can use the Verminshroud to cast polymorph on yourself, transforming into a giant rat or rat while retaining your Intelligence, Wisdom, and Charisma scores, as well as the properties of the cloak. This property can't be used again until the next dawn.", ">>Awakened<<. While wearing the Verminshroud in its awakened state, you gain the following benefits:", "\u2022 You have resistance to poison damage.", "\u2022 You can use an action to cast the insect plague spell (save DC 15) from the Verminshroud, requiring no material components. This property can't be used again until the next dawn.", "\u2022 When you cast the polymorph spell using the Verminshroud, you can transform into a giant wasp.", ">>Exalted<<. While wearing the Verminshroud in its exalted state, you gain the following benefits:", "\u2022 You gain a climbing speed equal to your walking speed.", "\u2022 Your teeth become razor-sharp natural weapons, which you can use to make unarmed strikes. If you hit with them, you deal piercing damage equal to 1d6 + your Strength modifier, instead of the bludgeoning damage normal for an unarmed strike. You can make this attack as a bonus action. When you bite a creature and deal damage to it, the creature must succeed on a DC 17 Constitution saving throw or be poisoned for 1 minute. The target can repeat the saving throw at the end of each of its turns, ending the condition on itself on a success.", "\u2022 When you cast the polymorph spell using the Verminshroud, you can transform into a giant scorpion." ]; MagicItemsList["verminshroud"] = { name : "Verminshroud", source : [["W", 273]], type : "wondrous item", rarity : "legendary", notLegalAL : true, attunement : true, description : "This patchy cloak was pieced together from the pelts of rats found feasting on the dead in Blightshore and is dotted with the bloated corpses of magically preserved insects along its seams. See notes page for more info.", descriptionFull : EGtW_VerminshroudFullDescription.join("\n ").replace(/>>(.*?)<>Dormant<<. While wearing the wreath in its dormant state, you have darkvision out to a range of 60 feet. If you already have darkvision, wearing the wreath increases the range of your darkvision by 60 feet.", "When you hit a beast, dragon, or monstrosity of challenge rating 5 or lower with an attack, or when you grapple it, you can use the wreath to cast dominate monster on the creature (save DC 13). On a successful save, the target is immune to the power of the wreath for 24 hours. On a failure, a shimmering, golden image of the wreath appears as a collar around the target's neck or as a crown on its head (your choice) until it is no longer charmed by the spell. If you use the wreath to charm a second creature, the first spell immediately ends. When the spell ends, the target knows it was charmed by you.", ">>Awakened<<. Once the Wreath of the Prism reaches an awakened state, it gains the following benefits:", "\u2022 You can affect creatures of challenge rating 10 or lower with the wreath.", "\u2022 The save DC of the wreath's spell increases to 15.", ">>Exalted<<. Once the Wreath of the Prism reaches an exalted state, it gains the following benefits:", "\u2022 You can affect creatures of challenge rating 15 or lower with the wreath.", "\u2022 The save DC of the wreath's spell increases to 17." ]; MagicItemsList["wreath of the prism"] = { name : "Wreath of the Prism", source : [["W", 274]], type : "wondrous item", rarity : "legendary", notLegalAL : true, attunement : true, description : "This loop of golden thorns is inset with dozens of gems that represent the five colors of Tiamat. I gain darkvision to 60 ft, or extend my darkvision by 60 ft. When I hit a beast, dragon, or monstrosity with an attack, I can cast dominate monster on that creature, depending on its CR. See notes page for info.", descriptionFull : EGtW_WreathPrismFullDescription.join("\n ").replace(/>>(.*?)<>Curse<<. Any creature that gains the benefit of a short rest from the vessel hears cloying telepathic whispers emanating it. That creature must make a DC 17 Wisdom saving throw. On a failed save, the creature is charmed by the vessel for 1 hour. The charmed creature does everything it can to open the vessel as soon as possible. On a successful save, the creature is immune to the vessel's whispers for 24 hours.\n", toUni("d8\tCalamity"), " 1\t>>Androphagia<<. Each creature within 60 feet of the vessel must succeed on a DC 17 Wisdom saving throw or go berserk for l minute. The berserk creature must begin its turn using the Attack action to make one melee or ranged attack (its choice) against the creature nearest to it. The berserk creature can repeat the save at the end of its turn, ending the effect on itself on a success.", " 2\t>>Bile Blight<<. The vessel casts the harm spell on each creature within 30 feet of it.", " 3\t>>Flood<<. The vessel casts the tsunami spell at a point of the DM's choice within 120 feet of it.", " 4\t>>Medusa's Gaze<<. The vessel casts the flesh to stone spell on each creature within 30 feet of it.", " 5\t>>Labyrinth<<. The vessel casts the maze spell on each creature within 30 feet of it.", " 6\t>>Nightmare<<. Tendrils of shadow seep from the vessel and form into 1d4 shadow demons (see the Monster Manual for their stat block), which appear in unoccupied spaces within 30 feet of it and are hostile.", " 7\t>>Swarming Insects<<. The vessel casts the insect plague spell, centered on itself and with a radius of 30 feet.", " 8\t>>Unbridled Revel<<. The vessel casts the Otto's irresistible dance spell on each creature within 30 feet of it." ]; MagicItemsList["pyxis of pandemonium"] = { name : "Pyxis of Pandemonium", source : [["MOT", 197]], type : "wondrous item", rarity : "legendary", notLegalAL : true, description : "Once per long rest, I gain the benefits of a short rest by touching this ornate vessel for 1 minute. I also gain the benefit of Bless until I finish my next rest. After benefiting from this vessel, I have to make a DC 17 Wis save or become charmed by the vessel for 1 hour. If charmed, I must do everything to open it. See Notes.", descriptionLong : "Once per long rest, I can touch this ornate wooden vessel for 1 minute to gain the benefits of a short rest. I then also gain the benefit of the Bless spell until I finish my next rest. After I gain the benefits of a short rest from this vessel, I must make a DC 17 Wisdom save or become charmed by it for 1 hour. On a success, I am immune to its charm for 24 hours. If charmed, I will do everything I can to open the vessel as soon as possible. Once opened, the vessel causes a random effect to occur, then it disappears after 1 minute and reappears, sealed, in random location on the same plane. See Notes.", descriptionFull : MOT_PyxisOfPandemoniumFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)<>d4 Bullet<<", "1 >>Banishment<<. A creature that takes damage from this bullet must succeed on a DC 15 Charisma saving throw or be banished as though affected by the banishment spell.", "2 >>Fulguration<<. On a hit, this bullet deals an extra 2d8 lightning damage to its target. All other creatures within 10 feet of the target must each succeed on a DC 15 Constitution saving throw or take 1d8 thunder damage.", "3 >>Stunning<<. On a hit, this bullet deals an extra ldlO force damage, and the target is stunned until the end of your next turn.", "4 >>Tracking<<. A creature that takes damage from this bullet is marked with a glowing rune where the bullet hit. The mark lasts 24 hours. While the creature is marked, you always know the direction to it.", ]; MagicItemsList["sling bullets of althemone"] = { name : "Sling Bullets of Althemone", source : [["MOT", 198]], type : "weapon (sling bullet)", rarity : "very rare", notLegalAL : true, description : "These bullets come in a pouch containing 1d4 + 4 bullets. Attacks made with these sling bullets add +2 to hit and damage. If a bullet misses, it teleports back to its pouch. On a hit, the bullet's effect happens and the bullet loses its magic. I roll on the table to determine each bullet's magical effect, see Notes.", descriptionFull : MOT_SlingBulletsOfAlthemoneFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)<>d20\tFish color and result<<", "1-10\t>>Green with copper bands<<. This tasty fish provides a day's worth of nourishment to one creature that eats it. The fish loses this property and rots if it's not eaten within 24 hours of being caught.", "11-14\t>>Yellow with black stripes<<. Once removed from the hook, this awful-tasting fish can be thrown up to 120 feet, targeting a creature the thrower can see. The target must succeed on a DC 15 Strength saving throw or be knocked prone. The fish then disappears.", "15-18\t>>Blue with white bands<<. When released from the hook, this fish squirms free, sprouts wings, follows you around, and sings a beautiful tune in Aquan. It disappears after 2d4 hours or when reduced to 0 hit points. The fish uses the quipper stat block, except that it can breathe air and has a flying speed of 30 feet.", "19-20\t>>Gold with silver stripes<<. This tasty fish provides a day's worth of nourishment to one creature that eats it and grants 2d10 temporary hit points to that creature. The fish loses these properties and rots if it's not eaten within 24 hours of being caught." ]; MagicItemsList["hook of fisher's delight"] = { // contains contributions by BraabHimself name : "Hook of Fisher's Delight", source : [["RotF", 314]], type : "wondrous item", rarity : "rare", description : "For this tiny silver fishhook to work, I must attach it to the end of a fishing line and immerse it in at least 10 cu ft of water. Then, at the end of each uninterrupted hour of immersion, I roll a d6. On a 6, a magical fish appears on the hook; roll a d20 to determine the fish's properties on the table on the Notes page.", descriptionFull : IDRotF_HookOfFishersDelightFullDescription.join("\n ").replace(/>>(.*?)<>|<= 3; }, description : "While attuned to this orb, it glows with an inner purplish light and gives me telepathy. The range of telepathy and intensity of light are determined by my Intelligence score.", descriptionFull : "This crystal grants you telepathy for as long as you remain attuned to it. See the introduction of the Monster Manual for rules on how this telepathy works."+ "\n The crystal also glows with a purplish inner light while you are attuned to it."+ "\n The higher your intelligence, the greater the light's intensity and the greater the range of the telepathy (see the table below)."+ toUni("\n\nIntelligence\tRange of \tLight"+ "\n Score\t\tTelepathy \tIntensity")+ "\n 3-7\t\t 15 feet\t\tDim light out to a range of 5 ft"+ "\n 8-11\t\t 30 feet\t\tBright light in a 5-ft radius and dim light for an additional 5 ft"+ "\n 12-15\t\t 60 feet\t\tBright light in a 10-ft radius and dim light for an additional 10 ft"+ "\n 16 or higher\t 120 feet\t\tBright light in a 15-ft radius and dim light for an additional 15 ft", weight : 3, choices : ["Intelligence 3-7", "Intelligence 8-11", "Intelligence 12-15", "Intelligence 16 or higher"], selfChoosing : function () { var iInt = Number(What("Int")); return iInt >= 16 ? "intelligence 16 or higher" : iInt >= 12 ? "intelligence 12-15" : iInt >= 8 ? "intelligence 8-11" : "intelligence 3-7"; }, "intelligence 3-7" : { name : "Psi Crystal (Int 3-7)", description : "While attuned to this orb, it glows with an inner purplish light, dim light out to a range of 5 ft. It also grants me telepathy out to a range of 15 ft. The range of telepathy and intensity of light are determined by my Intelligence score." }, "intelligence 8-11" : { name : "Psi Crystal (Int 8-11)", description : "While attuned to this orb, it glows with an inner purplish light, bright light in a 5-ft radius and dim light for an additional 5 ft. It also grants me telepathy out to a range of 30 ft. The range of telepathy and intensity of light are determined by my Intelligence score." }, "intelligence 12-15" : { name : "Psi Crystal (Int 12-15)", description : "While attuned to this orb, it glows with an inner purplish light, bright light in a 10-ft radius and dim light for an additional 10 ft. It also grants me telepathy out to a range of 60 ft. The range of telepathy and intensity of light are determined by my Intelligence score." }, "intelligence 16 or higher" : { name : "Psi Crystal (Int 16+)", description : "While attuned to this orb, it glows with an inner purplish light, bright light in a 15-ft radius and dim light for an additional 15 ft. It also grants me telepathy out to a range of 120 ft. The range of telepathy and intensity of light are determined by my Intelligence score." } }; MagicItemsList["scroll of tarrasque summoning"] = { // contains contributions by BraabHimself name : "Scroll of Tarrasque Summoning", source : [["RotF", 315]], type : "scroll", rarity : "legendary", description : "Once as an action, I can use this to cause the tarrasque to appear in an unoccupied space I can see within 1 mile. The tarrasque disappears when it drops to 0 hit points and is hostile toward all creatures other than itself.", descriptionFull : "Using an action to read the scroll causes the tarrasque (see the creature's entry in the Monster Manual) to appear in an unoccupied space you can see within 1 mile of you. The tarrasque disappears when it drops to 0 hit points and is hostile toward all creatures other than itself." }; MagicItemsList["scroll of the comet"] = { // contains contributions by BraabHimself name : "Scroll of the Comet", source : [["RotF", 315]], type : "scroll", rarity : "legendary", description : "Once as an action outdoors, I can use this to cause a comet to fall on a point I can see within 1 mile, creating a 50-ft deep, 500-ft radius crater. All creatures in the radius take 30d10 force damage and can make a DC 20 Dex save to halve this damage. It destroys all nonmagical objects and structures within the area.", descriptionFull : "By using an action to read the scroll, you cause a comet to fall from the sky and crash to the ground at a point you can see up to 1 mile away from you. You must be outdoors when you use the scroll, or nothing happens and the scroll is wasted."+ "\n The comet creates a 50-foot-deep, 500-foot-radius crater on impact. Any creature in that radius must make a DC 20 Dexterity saving throw, taking 30d10 force damage on a failed saving throw, or half as much damage on a successful one. All structures in the crater are destroyed, as are all nonmagical objects that aren't being worn or held." }; MagicItemsList["thermal cube"] = { // contains contributions by BraabHimself name : "Thermal Cube", source : [["RotF", 316]], type : "wondrous item", rarity : "common", description : "This 3-inch cube of solid brimstone generates enough dry heat to keep the temperature within 15 ft of it at 95 degrees Fahrenheit.", descriptionFull : "This 3-inch cube of solid brimstone generates enough dry heat to keep the temperature within 15 feet of it at 95 degrees Fahrenheit (35 degrees Celsius)." }; MagicItemsList["ythryn mythallar"] = { // contains contributions by BraabHimself name : "Ythryn Mythallar", source : [["RotF", 316]], type : "wondrous item", rarity : "legendary", attunement : true, prerequisite : "Requires attunement by a spellcaster", prereqeval : function(v) { return v.isSpellcaster; }, description : "This 50 ft diameter crystal ball sheds light in a 300 ft radius and dim light for an additional 300 ft. Up to 8 creatures can attune to it at one time, a 9th creature's attunement fails. All those attuned to it can sense when it is used and they all must agree to any properties being used. See Notes page.", descriptionFull : "A mythallar looks like an enormous crystal ball held in an ornate cradle. The globe sheds bright light in a 300-foot radius and dim light for an additional 300 feet. The globe draws magic from the Weave that can be harnessed for various purposes. For example, Netherese mages used mythallars to keep their cities aloft and empower their magic items. The bigger the mythallar, the more magic it can hold. The largest mythallars are 150 feet in diameter."+ "\n The Ythryn mythallar is a relatively small device\u2014a mere 50 feet in diameter. To attune to this mythallar, a creature must finish a short rest within 30 feet of it, meditating on the mythallar. Up to eight creatures can be attuned to it at one time; otherwise, the Ythryn mythallar follows the attunement rules in the Dungeon Master's Guide. If a ninth creature tries to attune to the mythallar, nothing happens."+ "\n All creatures attuned to the Ythryn mythallar can sense when the device is being used. A creature attuned to the device can use any of its properties, but only if all other creatures attuned to the device agree to allow it. The Ythryn mythallar's properties are as follows:"+ "\n \u2022 While you're on the same plane of existence as the Ythryn mythallar, you can use an action to cause it to fly in any direction you choose at a speed of 30 feet. All matter within 500 feet of the device moves with it. The Ythryn mythallar and all structures held aloft by it hover in place when not in motion."+ "\n \u2022 As an action, you can cause one magic item you are holding within 30 feet of the Ythryn mythallar to immediately regain all its expended charges or uses. A magic item recharged in this manner can't be recharged by the Ythryn mythallar again until after the item regains expended charges or uses on its own."+ "\n \u2022 You can use the Ythryn mythallar to cast the control weather spell without requiring any components and without the need for you to be outdoors. This casting of the spell has a 50-mile radius. For the duration of the spell's casting time, you must be within 30 feet of the Ythryn mythallar or the spell fails."+ "\n" + toUni("Touching the Mythallar") + ". Any creature that touches the globe of the mythallar must make a DC 22 Constitution saving throw, taking 180 (20d10 + 70) radiant damage on a failed save, or half as much damage on a successful one. Undead have disadvantage on this saving throw. Any object that touches the globe, other than an artifact or the mythallar's cradle, is disintegrated instantly (no save).", toNotesPage : [{ name : "Properties", note : [ "The Ythryn Mythallar is a 50 ft diameter crystal ball that sits on a cradle", "It has the following properties:", "\u2022 Sheds light in a 300 ft radius and dim light for an additional 300 ft", "\u2022 Up to 8 creatures can attune to it, a 9th attunement fails", "\u2022 To attune, a creature must short rest within 30 ft of it", "\u2022 All those attuned to it can sense when sense when it is being used", "\u2022 All those attuned must agree to allow any properties to be used", "\u2022 You can use an action to use the Ythryn Mythallar in the following ways:", " \u25E6 While on the same plane, give it a flying speed of 30 ft", " All matter within 500 ft of it moves with it", " The ball and all structures held aloft by it hover in place when not in motion", " \u25E6 Cause one magic item to regain all charges/uses", " I must be within 30 ft of the ball and holding the item", " It cannot be recharged again until all charges/uses are expended", " \u25E6 Cast the control weather spell without components or spell slots", " It has a radius of 50 miles and can be cast inside", " I must be within 30 ft of the ball for the casting time, or it will fail", "\nTOUCHING THE MYTHALLAR", "Any creature that touches the ball must make a DC 22 Constitution save", "On a failure, they take 20d10 + 70 radiant damage, or half that on a success", "Undead have disadvantage on this saving throw", "Objects touching the ball, except artifacts or the cradle, disintegrate instantly" ] }] }; MagicItemsList["the codicil of white"] = { name : "The Codicil of White", source : [["RotF", 317]], type : "wondrous item", rarity : "", notLegalAL : true, description : 'This volume bound in white fur, sealed with a silver lock, containing velum pages with silver edges is cold to the touch. While I have this tome in my possession, I gain resistance to cold damage. It contains the Frost Fingers spell which a wizard can learn and a poem incantation "Rime of the Frostmaiden".', descriptionFull : "The Codicil of White is a tall, thin volume bound in white ermine fur over seasoned boards of white pine and sealed with a clasp and lock of tarnished silver. The book is cold to the touch, and the fur is worn about the edges from use. The twenty-seven pages within are of vellum painted with silver gilt on the outer edges. The whole is sewn to a leather binding with strips of sinews, making it quite durable."+ "\n A creature with the codicil in its possession has resistance to cold damage."+ "\n The codicil was written by followers of Auril as a primer on her worship. The first page is a title page with the snowflake symbol of Auril on it. The remaining pages describe various priestly rituals and ceremonies in chilling detail. Nestled among these descriptions is a spell that wizards can learn (frost fingers, and a poem called \"Rime of the Frostmaiden\", see appendix E of Icewind Dale: Rime of the Frostmaiden). The poem is an incantation, the power of which can be used to split a glacier (see chapter 6 of Icewind Dale: Rime of the Frostmaiden). The poem might have other capabilities, at the DM's discretion", dmgres : ["Cold"], weight : 3 }; // [dupl_start] reprint (mostly) from Monster Manual if (!MagicItemsList["shield guardian amulet"]) { MagicItemsList["shield guardian amulet"] = { name : "Shield Guardian Amulet", source : [["M", 271], ["RotF", 149]], type : "wondrous item", rarity : "rare", attunement : true, notLegalAL : true, prerequisite : "Requires attunement by a humanoid", prereqeval : function(v) { return !CurrentRace.known || !RaceList[CurrentRace.known] || !/creature type/i.test(RaceList[CurrentRace.known].trait); }, description : "A shield guardian is magically linked to this amulet. It has AC 10, 10 HP, and immunity to poison and psychic damage. I know the distance and direction of the guardian while I'm wearing the amulet and I'm on the same plane as it. While within 10 ft of it, I can use the amulet to reactivate it with a DC 20 Arcana check.", descriptionFull : "The amulet is a 4-inch-wide disk composed of silver-framed wood, with a rune carved into its face. A detect magic spell reveals a magical aura of enchantment around the amulet."+ "\n Every shield guardian has an amulet magically linked to it. A shield guardian can have only one corresponding amulet, and if that amulet is destroyed, the shield guardian is incapacitated until a replacement amulet is created."+ "\n A shield guardian's amulet is subject to direct attack if it isn't being worn or carried. It has AC 10, 10 hit points, and immunity to poison and psychic damage. Crafting an amulet requires 1 week and costs 1,000 gp in components."+ "\n A shield guardian's solitary focus is to protect the amulet's wearer. The amulet's wearer can command the guardian to attack its enemies or to guard the wielder against attack. If an attack threatens to injure the wearer, the construct can magically absorb the blow into its own body, even at a distance."+ "\n A humanoid that attunes to this amulet knows the distance and direction of the shield guardian, provided the amulet and the guardian are on the same plane of existence. As an action, the amulet's attuned wearer can try to reactivate the shield guardian, doing so with a successful DC 20 Intelligence (Arcana) check. Reactivation can only be attempted while the amulet and guardian are within 10 feet of each other.", creaturesAdd : [["Shield Guardian"]], weight : 1 } } // dupl_end // Spells SpellsList["blade of disaster"] = { name : "Blade of Disaster", classes : ["sorcerer", "warlock", "wizard"], source : [["T", 106], ["RotF", 318]], level : 9, school : "Conj", time : "1 bns", range : "60 ft", components : "V,S", duration : "Conc, 1 min", description : "Create weapon; 2 spell atks 4d12 Force dmg; crit on 18+, triple dmg; bns a to move 30 ft \u0026 do 2 atks", descriptionShorter : "Create wea; 2 spell atks 4d12 Force dmg; crit 18+, triple dmg; bns a to move 30 ft \u0026 2 atks", descriptionFull : "You create a blade-shaped planar rift about 3 feet long in an unoccupied space you can see within range. The blade lasts for the duration. When you cast this spell, you can make up to two melee spell attacks with the blade, each one against a creature, loose object, or structure within 5 feet of the blade. On a hit, the target takes 4d12 force damage. This attack scores a critical hit if the number on the d20 is 18 or higher. On a critical hit, the blade deals an extra 8d12 force damage (for a total of 12d12 force damage)."+ "\n As a bonus action on your turn, you can move the blade up to 30 feet to an unoccupied space you can see and then make up to two melee spell attacks with it again."+ "\n The blade can harmlessly pass through any barrier, including a wall of force." }; SpellsList["create magen"] = { // contains contributions by BraabHimself name : "Create Magen", source : [["RotF", 318]], classes : ["wizard"], level : 7, school : "Trans", time : "1 h", range : "Touch", components : "V,S,M\u2020", compMaterial : "A vial of quicksilver worth 500 gp and a life-sized human doll, both of which the spell consumes, and an intricate crystal rod worth at least 1,500 gp that is not consumed", duration : "Instantaneous", description : "Transform doll into magen (500gp cons.); obeys me; my HP max reduced by its CR; see book (1.5k gp)", descriptionFull : "While casting the spell, you place a vial of quicksilver in the chest of a life-sized human doll stuffed with ash or dust. You then stitch up the doll and drip your blood on it. At the end of the casting, you tap the doll with a crystal rod, transforming it into a magen clothed in whatever the doll was wearing. The type of magen is chosen by you during the casting of the spell. See appendix C for different kinds of magen and their statistics."+ "\n When the magen appears, your hit point maximum decreases by an amount equal to the magen's challenge rating (minimum reduction of 1). Only a wish spell can undo this reduction to your hit point maximum."+ "\n Any magen you create with this spell obeys your commands without question." }; SpellsList["frost fingers"] = { // contains contributions by BraabHimself name : "Frost Fingers", source : [["RotF", 318]], classes : ["wizard"], level : 1, school : "Evoc", time : "1 a", range : "S:15" + (typePF ? "-" : "") + "ft cone", components : "V,S", duration : "Instantaneous", save : "Con", description : "All in area 2d8+1d8/SL Cold dmg; save halves; unattended nonmagical liquids freeze", descriptionFull : "Freezing cold blasts from your fingertips in a 15-foot cone. Each creature in that area must make a Constitution saving throw, taking 2d8 cold damage on a failed save, or half as much damage on a successful one."+ "\n The cold freezes nonmagical liquids in the area that aren't being worn or carried."+ AtHigherLevels + "When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d8 for each slot level above 1st." }; ================================================ FILE: WotC material/pub_20201117-2_TCoE-sidekicks.js ================================================ var iFileName = "pub_20201117-2_TCoE-sidekicks.js"; RequiredSheetVersion("13.1.7"); // This file adds the sidekick classes from Tasha's Cauldron of Everything (p142-147) to MPMB's Character Record Sheet /* - NOTICE - These sidekick classes are available as normal classes because the sheet doesn't support classes for the companion page These classes are excluded by default so that they aren't confused with normal classes The base 1/2 CR creature will have to be added manually It would be too complex and messy to add them all as racial options */ // Define the source, if it doesn't yet exist if (!SourceList.T) { SourceList.T = { name : "Tasha's Cauldron of Everything", abbreviation : "TCoE", abbreviationSpellsheet : "T", group : "Primary Sources", url : "https://dnd.wizards.com/products/tashas-cauldron-everything", date : "2020/11/17" }; } // Define some functions here, so we an use them for all sidekick classes without duplication global_TCoE_Sidekick_fn = { // prereqeval runs before any of the other class stuff is added, so we can even modify the ClassList object with it to set the HD prereqeval : function(v) { var sClass = v['class']; var sSubclass = v.subclass; var sClassOld = CurrentVars.sidekickDialogShown === undefined ? false : CurrentVars.sidekickDialogShown[0]; // If we already did this function for this (sub)class, stop now if (CurrentVars.sidekickDialogShown && CurrentVars.sidekickDialogShown[0] === sClass && (!CurrentVars.sidekickDialogShown[1] || CurrentVars.sidekickDialogShown[1] === sSubclass)) { // if no subclass was defined when previously calling this, but now there is one selected, add that to the CurrentVars if (!CurrentVars.sidekickDialogShown[1] && sSubclass) { CurrentVars.sidekickDialogShown[1] = sSubclass; SetStringifieds("vars"); } return true; } // Tell the player what is about to happen and give an option to opt-out var sClassName = ClassList[sClass].name.replace(/\(?sidekick\)?/i, '').trim(); var warningMsg = { nIcon : 3, // Status nType : 2, // Yes,No cTitle : "Creating a Sidekick Works Differently", cMsg : "You are about to create a character with a " + sClassName + " sidekick class. Sidekick classes use the rules as described in Tasha's Cauldron of Everything, page 142. As this character sheet is intended for regular, non-sidekick classes, some changes will be made that you need to be aware off:" }; var lineNo = 1; [ "A sidekick class is added to a creature of CR 1/2 or lower. Before continuing, lookup the stat block of the base creature you would like to use. You will have to manually enter its:"+ "\n \u2022 Ability scores"+ "\n \u2022 Proficiencies for: skills, saving throws, weapons, armor, languages, and tools"+ "\n \u2022 Attacks (tip: use Modifier fields for attacks that aren't weapons/cantrips)"+ "\n \u2022 Hit dice (you will be prompted to enter)", sClass.indexOf('warrior') !== -1 ? false : 'To gain either the Expert of Spellcaster sidekick class, a creature must have at least one language in its stat block that it can speak.', 'If you continue, the race and background automation will be turned off and the respective fields emptied. You can use these fields to enter the name and type of the base creature.'+ '\nFor example. when using the bandit stat block, you could enter:'+ '\n \u2022 Race: Elf'+ '\n \u2022 Background: Bandit'+ '\nYou can turn the automation back on with the "Auto/Manual" bookmark.', "Sidekicks don't use experience points, but gain levels as the average level of the group goes up. Thus, simply ignore the experience points box and change the level when needed.", "Sidekick classes can't multiclass and haven't been tested to work that way." ].forEach(function (line) { if (!line) return; warningMsg.cMsg += "\n\n" + lineNo + ". " + line; lineNo++; }); warningMsg.cMsg += "\n\n\n>>> Do you want to continue making a sidekick? <<<"; warningMsg.cMsg += "\n\nIf you select 'No', the " + v.classlevel + " level(s) of this class will be counted towards the total character level, but none of its features will be added."; if (app.alert(warningMsg) !== 4) return 'skip'; // Save that this dialog has been shown CurrentVars.sidekickDialogShown = [sClass, sSubclass]; // Remove race and background, and set them to manual global_TCoE_Sidekick_fn.manualRaceBackground(); // if the sidekick HD is already defined, delete those HD first before applying the new one if (CurrentVars.sidekickHD && sClassOld && classes.old[sClassOld]) { global_TCoE_Sidekick_fn.eval([classes.old[sClassOld].classlevel, 0], false, false, true); }; // Ask the player to enter the number and type of HD the creature has in its stat block CurrentVars.sidekickHD = AskUserOptions( "Set Base Creature Hit Dice", // title "Enter the number and type of hit dice that the chosen base creature has in its stat block (i.e. without bonuses from sidekick levels).\nThe sidekick will gain 1 extra HD for each level it gains after the first.", // top explanation ['Number of hit dice, for example "2"', 'Size of the hit dice, for example "d8"'], false, true, "Be aware that you *can't* change the *size* of the hit die (e.g. d8) at a later time. To do that, you will have to first remove the sidekick class completely.\n\nHowever, you *can* change the *number* of hit dice manually by editing the appropriate field." // bottom explanation ).map(function (n, idx) { var a = n.replace(/.*?(\d+).*/, "$1"); return !isNaN(a) ? Number(a) : idx === 0 ? 2 : 8; }); ClassList[sClass].die = CurrentVars.sidekickHD[1]; CurrentClasses[sClass].die = CurrentVars.sidekickHD[1]; SetStringifieds("vars"); }, // Change the race and background to manual or auto manualRaceBackground : function(bAuto) { if (bAuto && (CurrentVars.manual.background || CurrentVars.manual.race)) { // set to automatic if (CurrentVars.manual.background) { Value("Background", ""); SetToManual_Dialog.mBac = false; } if (CurrentVars.manual.race) { Value("Race", ""); SetToManual_Dialog.mRac = false; } SetToManual_Button(true); } else if (!bAuto) { // set to manual if (CurrentVars.manual.race || CurrentVars.manual.background || CurrentVars.manual.backgroundFeature) { // if currently already set to manual, set to auto before emptying the fields IsNotImport = false; ignorePrereqs = true; SetToManual_Dialog.mBac = false; SetToManual_Dialog.mBFe = false; SetToManual_Dialog.mRac = false; SetToManual_Button(true); IsNotImport = true; ignorePrereqs = false; }; // Remove the race and background if (CurrentRace.known) Value("Race", ""); if (CurrentBackground.known) Value("Background", ""); // Set race and background to manual SetToManual_Dialog.mRac = true; SetToManual_Dialog.mBac = true; SetToManual_Button(true); } }, // When removing a sidekick class, return some stuff to normal removeeval : function(lvl) { // This could be called after the dialog was shown for another sidekick, so check if there is actually something to do var sClass = CurrentVars.sidekickDialogShown ? CurrentVars.sidekickDialogShown[0] : false; var sSubclass = CurrentVars.sidekickDialogShown ? CurrentVars.sidekickDialogShown[1] : false; if (!sClass || !classes.known[sClass] || classes.known[sClass].level || (classes.old[sClass] && classes.old[sClass].subclass && classes.old[sClass].subclass !== sSubclass) ) return; // Remove the extra sidekickHD and delete it from the CurrentVars global_TCoE_Sidekick_fn.eval(lvl, false, false, true); delete CurrentVars.sidekickHD; delete CurrentVars.sidekickDialogShown; SetStringifieds("vars"); // Reset race and background to auto (if not already) global_TCoE_Sidekick_fn.manualRaceBackground(true); }, // After the HD has been set, we still need to enter the bonus HD, if any (this can't be done with the prereqeval) eval : function(lvl, chc, undef, bRemove) { var hd = CurrentVars.sidekickHD; var extraHD = hd[0] - 1; if (isNaN(extraHD) || extraHD < 1) return; var totalHD = bRemove ? lvl[0] : lvl[1] + extraHD; var expectedHD = bRemove ? lvl[0] + extraHD : lvl[1]; // Add the extra HD to the field for (var i = 1; i <= 3; i++) { var dieFld = "HD" + i + " Die"; var lvlFld = "HD" + i + " Level"; if (What(dieFld) == hd[1] && What(lvlFld) == expectedHD) { Value(lvlFld, totalHD); CurrentUpdates.types.push("hp"); break; } } }, calcChanges_hp : function (totalHD, HDobj) { // remove 1st level max (and change its average and fixed value to reflect this change) var hd = CurrentVars.sidekickHD[1]; var matchRegex = RegExp('(\\d+)(d' + hd + ' \\()(\\d+\\.?\\d+?)\\)'); var match = HDobj.dieStr[1] ? HDobj.dieStr[1].match(matchRegex) : false; if (!match) return; var hdAverage = hd / 2 + 0.5; var hdFixed = Math.ceil(hdAverage); HDobj.dieStr.shift(); HDobj.average += hdAverage - hd; HDobj.fixed += hdFixed - hd; HDobj.dieStr[0] = HDobj.dieStr[0].replace(matchRegex, (Number(match[1]) + 1) + match[2] + (Number(match[3]) + hdAverage) + ") [sidekicks don't get max for 1st level]"); }, spellcasting_additional : levels.map(function (n, idx) { var cantr = [2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4][idx]; var splls = [1, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9,10,10,11,11][idx]; return cantr + " cantrips \u0026 " + splls + " spells known"; }) } // Add the three classes ClassList["sidekick-expert-tcoe"] = { defaultExcluded : true, prereqeval : global_TCoE_Sidekick_fn.prereqeval, regExpSearch : /^(?=.*expert)(?=.*sidekick).*$/i, name : "Expert (sidekick)", source : [["T", 143]], primaryAbility : "Dexterity, Intelligence, or Charisma", prereqs : "Can't multiclass", improvements : levels.map(function (n) { return n < 4 ? 0 : n < 8 ? 1 : n < 10 ? 2 : n < 12 ? 3 : n < 16 ? 4 : n < 19 ? 5 : 6; }), die : CurrentVars.sidekickHD ? CurrentVars.sidekickHD[1] : 8, skillstxt : { primary : "Choose any five skills" }, armorProfs : { primary : [true, false, false, false] }, equipment : "", subclasses : ["", []], subclassGainedLevel : 100, attacks : [1], features : { "a sidekick" : { name : "A Sidekick", source : [["T", 142]], minlevel : 1, description : desc([ "A sidekick can be any creature with challenge rating of 1/2 or lower", "The Spellcaster and Expert classes can only apply to creatures that can speak a language", "Fill out the stats block into the character sheet manually, the class adds to it", "The sidekick's level is the same as the average level of the group", "The hit dice of a sidekick are the same as those of the base creature, gaining +1 per level", "A sidekick does not get the benefits of a background, nor can it take feats or multiclass" ]), calcChanges : { hp : global_TCoE_Sidekick_fn.calcChanges_hp }, eval : global_TCoE_Sidekick_fn.eval, removeeval : global_TCoE_Sidekick_fn.removeeval }, "bonus proficiencies: saving throws" : { name : "Bonus Proficiencies: Saving Throws", source : [["T", 143]], minlevel : 1, description : desc('Choose Dex, Int, or Cha save proficiency, using the "Choose Feature" button above'), choices : ["Dexterity", "Intelligence", "Charisma"], "dexterity" : { name : "Bonus Proficiencies: Dexterity Saving Throws", description : desc("I am proficient in Dexterity saving throws"), saves : ["Dex"] }, "intelligence" : { name : "Bonus Proficiencies: Intelligence Saving Throws", description : desc("I am proficient in Intelligence saving throws"), saves : ["Int"] }, "charisma" : { name : "Bonus Proficiencies: Charisma Saving Throws", description : desc("I am proficient in Charisma saving throws"), saves : ["Cha"] } }, "bonus proficiencies" : { name : "Bonus Proficiencies", source : [["T", 143]], minlevel : 1, description : desc([ "I gain proficiency with light armor and in five skills of my choice", 'If the base creature is a Humanoid or has a simple or martial weapon in its stat block,', 'select it using the "Choose Feature" button above, so I gain more bonus proficiencies' ]), choices : ["Base creature is a Humanoid or has a simple or martial weapon in its stat block", "Other base creatures"], "base creature is a humanoid or has a simple or martial weapon in its stat block" : { name : "Bonus Proficiencies: Humanoid", description : desc([ "I gain proficiency with light armor and in five skills of my choice", "Additionally, I gain proficiency with two tools of my choice and with all simple weapons" ]), weaponProfs : [true, false], toolProfs : [["Tool of my choice", 2]] }, "other base creatures" : { name : "Bonus Proficiencies: Non-humanoid", description : desc("I gain proficiency with light armor and in five skills of my choice") } }, "helpful" : { name : "Helpful", source : [["T", 143]], minlevel : 1, description : desc("I can use a bonus action to take the Help action"), action : [["bonus action", ""]] }, "cunning action" : { name : "Cunning Action", source : [["T", 143]], minlevel : 2, description : desc("I can use a bonus action to take the Dash, Disengage, or Hide action"), action : [["bonus action", ""]] }, "expertise" : function() { var a = { name : "Expertise", source : [["T", 143]], minlevel : 3, description : desc([ "I gain expertise with two skills I am proficient with", "At level 15th, I gain expertise with two more skills I am proficient with" ]), skillstxt : "Expertise with any two skill proficiencies, two more at level 15th", extraname : "Expertise", extrachoices : ["Acrobatics", "Animal Handling", "Arcana", "Athletics", "Deception", "History", "Insight", "Intimidation", "Investigation", "Medicine", "Nature", "Perception", "Performance", "Persuasion", "Religion", "Sleight of Hand", "Stealth", "Survival"], extraTimes : levels.map(function (n) { return n < 3 ? 0 : n < 15 ? 2 : 4; }) } for (var i = 0; i < a.extrachoices.length; i++) { var attr = a.extrachoices[i].toLowerCase(); a[attr] = { name : a.extrachoices[i] + " Expertise", description : "", source : a.source, skills : [[a.extrachoices[i], "only"]], prereqeval : function(v) { return v.skillProfsLC.indexOf(v.choice) === -1 ? false : v.skillExpertiseLC.indexOf(v.choice) === -1 ? true : "markButDisable"; } } } return a; }(), "ability score improvement" : { name : "Ability Score Improvement", source : [["T", 144]], minlevel : 4, description : desc([ "Increase one ability score by 2, or two ability scores by 1, up to a maximum of 20", "I gain this at 4th level and again at 8th, 10th, 12th, 16th, and 19th level" ]), additional : levels.map(function (n) { return n < 4 ? "" : (n < 8 ? 1 : n < 10 ? 2 : n < 12 ? 3 : n < 16 ? 4 : n < 19 ? 5 : 6) + "\xD7 2 points increase"; }) }, "coordinated strike" : { name : "Coordinated Strike", source : [["T", 144]], minlevel : 6, description : desc([ "I can use Helpful to aid an ally to attack a creature up to 30 ft away from me", "If I do so, I add +2d6 damage on my next attack to that creature in the current turn" ]) }, "evasion" : { name : "Evasion", source : [["T", 144]], minlevel : 7, description : desc([ "If an effect allows me to make a Dex save for half damage, I take no damage on a success", "Also, I only take half damage on a failed save; I can't do this while incapacitated" ]), savetxt : { text : ["Dex save vs. area effects: fail \u2015 half dmg, success \u2015 no dmg"] } }, "inspiring help" : { name : "Inspiring Help", source : [["T", 144]], minlevel : 11, description : desc([ "When I use the Help action, the creature that receives the help adds +1d6 to its d20 roll", "If it was an attack roll that hits without the +1d6, it can add it to the damage instead", "At 20th level, this bonus increases to 2d6" ]), additional : levels.map(function (n) { return n < 11 ? "" : "+" + (n < 20 ? 1 : 2) + "d6 bonus"; }) }, "reliable talent" : { name : "Reliable Talent", source : [["T", 144]], minlevel : 14, description : desc("If I make an ability check where I add my proficiency bonus, rolls of 9 or lower are 10") }, "sharp mind" : { name : "Sharp Mind", source : [["T", 144]], minlevel : 18, description : desc('Choose Int, Wis, or Cha save proficiency, using the "Choose Feature" button above'), choices : ["Intelligence", "Wisdom", "Charisma"], "intelligence" : { name : "Sharp Mind: Intelligence", description : desc("I gain proficiency in Intelligence saving throws"), saves : ["Int"], prereqeval : function(v) { return tDoc.getField("Int ST Prof").isBoxChecked(0) ? false : true; } }, "wisdom" : { name : "Sharp Mind: Wisdom", description : desc("I gain proficiency in Wisdom saving throws"), saves : ["Wis"], prereqeval : function(v) { return tDoc.getField("Wis ST Prof").isBoxChecked(0) ? false : true; } }, "charisma" : { name : "Sharp Mind: Charisma", description : desc("I gain proficiency in Charisma saving throws"), saves : ["Cha"], prereqeval : function(v) { return tDoc.getField("Cha ST Prof").isBoxChecked(0) ? false : true; } } } } } ClassList["sidekick-spellcaster-tcoe"] = { defaultExcluded : true, prereqeval : global_TCoE_Sidekick_fn.prereqeval, regExpSearch : /^(?=.*(spellcaster|mage|healer|prodigy))(?=.*sidekick).*$/i, name : "Spellcaster (sidekick)", source : [["T", 144]], primaryAbility : "Intelligence, Wisdom, or Charisma", prereqs : "Can't multiclass", improvements : levels.map(function (n) { return n < 4 ? 0 : n < 8 ? 1 : n < 12 ? 2 : n < 16 ? 3 : n < 18 ? 4 : 5; }), die : CurrentVars.sidekickHD ? CurrentVars.sidekickHD[1] : 8, skillstxt : { primary : "Choose two from Arcana, History, Insight, Investigation, Medicine, Performance, Persuasion, and Religion" }, armorProfs : { primary : [true, false, false, false] }, equipment : "", subclasses : ["Spellcaster's Role", []], subclassGainedLevel : 100, attacks : [1], abilitySave : 4, spellcastingFactor : 2, spellcastingTable : ClassList.artificer && ClassList.artificer.spellcastingTable ? ClassList.artificer.spellcastingTable : [[0, 0, 0, 0, 0, 0, 0, 0, 0]].concat(levels.map(function (n) { return defaultSpellTable[Math.ceil(n / 2)]; })), spellcastingList : { "class" : "wizard", level : [0, 5] }, spellcastingKnown : { cantrips : [2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4], spells : [1, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9,10,10,11,11] }, features : { "a sidekick" : { name : "A Sidekick", source : [["T", 142]], minlevel : 1, description : desc([ "A sidekick can be any creature with challenge rating of 1/2 or lower", "The Spellcaster and Expert classes can only apply to creatures that can speak a language", "Fill out the stats block into the character sheet manually, the class adds to it", "The sidekick's level is the same as the average level of the group", "The hit dice of a sidekick are the same as those of the base creature, gaining +1 per level", "A sidekick does not get the benefits of a background, nor can it take feats or multiclass" ]), calcChanges : { hp : global_TCoE_Sidekick_fn.calcChanges_hp }, eval : global_TCoE_Sidekick_fn.eval, removeeval : global_TCoE_Sidekick_fn.removeeval }, "bonus proficiencies: saving throws" : { name : "Bonus Proficiencies: Saving Throws", source : [["T", 144]], minlevel : 1, description : desc('Choose Int, Wis, or Cha save proficiency, using the "Choose Feature" button above'), choices : ["Intelligence", "Wisdom", "Charisma"], "intelligence" : { name : "Bonus Proficiencies: Intelligence Saving Throws", description : desc("I am proficient in Intelligence saving throws"), saves : ["Int"] }, "wisdom" : { name : "Bonus Proficiencies: Wisdom Saving Throws", description : desc("I am proficient in Wisdom saving throws"), saves : ["Wis"] }, "charisma" : { name : "Bonus Proficiencies: Charisma Saving Throws", description : desc("I am proficient in Charisma saving throws"), saves : ["Cha"] } }, "bonus proficiencies" : { name : "Bonus Proficiencies", source : [["T", 144]], minlevel : 1, description : desc([ "I gain proficiency with light armor and two skills of my choice from the following list:", "Arcana, History, Insight, Investigation, Medicine, Performance, Persuasion, and Religion", 'If the base creature is a Humanoid or has a simple or martial weapon in its stat block,', 'select it using the "Choose Feature" button above, so I gain more bonus proficiencies' ]), choices : ["Base creature is a Humanoid or has a simple or martial weapon in its stat block", "Other base creatures"], "base creature is a humanoid or has a simple or martial weapon in its stat block" : { name : "Bonus Proficiencies: Humanoid", description : desc([ "I gain proficiency with light armor and two skills of my choice from the following list:", "Arcana, History, Insight, Investigation, Medicine, Performance, Persuasion, and Religion", "Additionally, I gain proficiency with all simple weapons" ]), weaponProfs : [true, false] }, "other base creatures" : { name : "Bonus Proficiencies: Non-humanoid", description : desc([ "I gain proficiency with light armor and two skills of my choice from the following list:", "Arcana, History, Insight, Investigation, Medicine, Performance, Persuasion, and Religion" ]) } }, "subclassfeature1" : { name : "Spellcaster's Role", source : [["T", 144]], minlevel : 1, description : desc('Choose the role of the sidekick, mage, healer, or prodigy, and put it in the "Class" field') }, "ability score improvement" : { name : "Ability Score Improvement", source : [["T", 146]], minlevel : 4, description : desc([ "Increase one ability score by 2, or two ability scores by 1, up to a maximum of 20", "I gain this at 4th level and again at 8th, 12th, 16th, and 18th level" ]), additional : levels.map(function (n) { return n < 4 ? "" : (n < 8 ? 1 : n < 12 ? 2 : n < 16 ? 3 : n < 18 ? 4 : 5) + "\xD7 2 points increase"; }) }, "potent cantrips" : { name : "Potent Cantrips", source : [["T", 146]], minlevel : 6, description : desc("I add my spellcasting ability modifier to the damage I deal with any cantrip"), calcChanges : { atkCalc : [ function (fields, v, output) { var subclass = classes.known["sidekick-spellcaster-tcoe"].subclass; if (!subclass || !ClassSubList[subclass].abilitySave) return; var spAbiMod = Number(What(AbilityScores.abbreviations[ClassSubList[subclass].abilitySave - 1] + ' Mod')); if (spAbiMod > 0 && v.thisWeapon[3] && SpellsList[v.thisWeapon[3]].level === 0) { output.extraDmg += spAbiMod; }; }, "My cantrips get my spellcasting ability modifier added to their damage." ], spellAdd : [ function (spellKey, spellObj, spName) { var subclass = classes.known["sidekick-spellcaster-tcoe"].subclass; if (!subclass || !ClassSubList[subclass].abilitySave || spellObj.psionic || spellObj.level !== 0) return; var spAbi = AbilityScores.abbreviations[ClassSubList[subclass].abilitySave - 1]; var spAbiMod = Number(What(spAbi + ' Mod')); if (spAbiMod < 1) return; return genericSpellDmgEdit(spellKey, spellObj, "\\w+\\.?", spAbi); }, "My cantrips get my spellcasting ability modifier added to their damage." ] } }, "empowered spells" : { name : "Empowered Spells", source : [["T", 146]], minlevel : 14, description : desc([ 'Select one of the eight schools of magic using the "Choose Feature" button above', "Whenever I cast a spell from the selected school by expending a spell slot, I empower it", "I add my spellcasting ability modifier to the damage or healing I roll for that spell" ]), calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { var subclass = classes.known["sidekick-spellcaster-tcoe"].subclass; var spSchool = GetFeatureChoice("classes", "sidekick-spellcaster-tcoe", "empowered spells"); if (!subclass || !ClassSubList[subclass].abilitySave || !spSchool || spellObj.psionic || !spellObj.level) return; for (var aSchl in spellSchoolList) { if (spellSchoolList[aSchl] == spSchool) { spSchool = aSchl; break; } } if (spellObj.school !== spSchool) return; var spAbi = AbilityScores.abbreviations[ClassSubList[subclass].abilitySave - 1]; var spAbiMod = Number(What(spAbi + ' Mod')); if (spAbiMod < 1) return; if (genericSpellDmgEdit(spellKey, spellObj, "\\w+\\.?", spAbiMod, true, true) || genericSpellDmgEdit(spellKey, spellObj, "heal", spAbiMod, true, true)) { return true; } }, "Spells from my selected school cast by expending a spell slot get my spellcasting ability modifier added to their damage or healing rolls." ] }, choices : ["Abjuration", "Conjuration", "Divination", "Enchantment", "Evocation", "Illusion", "Necromancy", "Transmutation"], "abjuration" : { name : "Empowered Abjurations", description : desc([ "Whenever I cast an abjuration spell by expending a spell slot, I can empower its effect", "I then add my spellcasting ability modifier to the damage or healing I roll for that spell" ]) }, "conjuration" : { name : "Empowered Conjurations", description : desc([ "Whenever I cast a conjuration spell by expending a spell slot, I can empower its effect", "I then add my spellcasting ability modifier to the damage or healing I roll for that spell" ]) }, "divination" : { name : "Empowered Divinations", description : desc([ "Whenever I cast a divination spell by expending a spell slot, I can empower its effect", "I then add my spellcasting ability modifier to the damage or healing I roll for that spell" ]) }, "enchantment" : { name : "Empowered Enchantments", description : desc([ "Whenever I cast a enchantment spell by expending a spell slot, I can empower its effect", "I then add my spellcasting ability modifier to the damage or healing I roll for that spell" ]) }, "evocation" : { name : "Empowered Evocations", description : desc([ "Whenever I cast a evocation spell by expending a spell slot, I can empower its effect", "I then add my spellcasting ability modifier to the damage or healing I roll for that spell" ]) }, "illusion" : { name : "Empowered Illusions", description : desc([ "Whenever I cast an illusion spell by expending a spell slot, I can empower its effect", "I then add my spellcasting ability modifier to the damage or healing I roll for that spell" ]) }, "necromancy" : { name : "Empowered Necromancy", description : desc([ "Whenever I cast a necromancy spell by expending a spell slot, I can empower its effect", "I then add my spellcasting ability modifier to the damage or healing I roll for that spell" ]) }, "transmutation" : { name : "Empowered Transmutations", description : desc([ "Whenever I cast a transmutation spell by expending a spell slot, I can empower its effect", "I then add my spellcasting ability modifier to the damage or healing I roll for that spell" ]) } }, "focused casting" : { name : "Focused Casting", source : [["T", 146]], minlevel : 20, description : desc("Taking damage can't break my concentration on a spell") } } } ClassList["sidekick-warrior-tcoe"] = { defaultExcluded : true, prereqeval : global_TCoE_Sidekick_fn.prereqeval, regExpSearch : /^(?=.*warrior)(?=.*sidekick).*$/i, name : "Warrior (sidekick)", source : [["T", 146]], primaryAbility : "Strength, Dexterity, or Constitution", prereqs : "Can't multiclass", improvements : levels.map(function (n) { return n < 4 ? 0 : n < 8 ? 1 : n < 12 ? 2 : n < 14 ? 3 : n < 16 ? 4 : n < 19 ? 5 : 6; }), die : CurrentVars.sidekickHD ? CurrentVars.sidekickHD[1] : 8, skillstxt : { primary : "Choose two from Acrobatics, Animal Handling, Athletics, Intimidation, Nature, Perception, and Survival" }, armorProfs : { primary : [true, true, true, false] }, equipment : "", subclasses : ["", []], subclassGainedLevel : 100, attacks : [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3], features : { "a sidekick" : { name : "A Sidekick", source : [["T", 142]], minlevel : 1, description : desc([ "A sidekick can be any creature with challenge rating of 1/2 or lower", "Fill out the stats block into the character sheet manually, the class adds to it", "The sidekick's level is the same as the average level of the group", "The hit dice of a sidekick are the same as those of the base creature, gaining +1 per level", "A sidekick does not get the benefits of a background, nor can it take feats or multiclass" ]), calcChanges : { hp : global_TCoE_Sidekick_fn.calcChanges_hp }, eval : global_TCoE_Sidekick_fn.eval, removeeval : global_TCoE_Sidekick_fn.removeeval }, "bonus proficiencies: saving throws" : { name : "Bonus Proficiencies: Saving Throws", source : [["T", 146]], minlevel : 1, description : desc('Choose Str, Dex, or Con save proficiency, using the "Choose Feature" button above'), choices : ["Strength", "Dexterity", "Constitution"], "strength" : { name : "Bonus Proficiencies: Strength Saving Throws", description : desc("I am proficient in Strength saving throws"), saves : ["Str"] }, "dexterity" : { name : "Bonus Proficiencies: Dexterity Saving Throws", description : desc("I am proficient in Dexterity saving throws"), saves : ["Dex"] }, "constitution" : { name : "Bonus Proficiencies: Constitution Saving Throws", description : desc("I am proficient in Constitution saving throws"), saves : ["Con"] } }, "bonus proficiencies" : { name : "Bonus Proficiencies", source : [["T", 146]], minlevel : 1, description : desc([ "I gain proficiency with all armor and two skills of my choice from the following list:", "Acrobatics, Animal Handling, Athletics, Intimidation, Nature, Perception, and Survival", 'If the base creature is a Humanoid or has a simple or martial weapon in its stat block,', 'select it using the "Choose Feature" button above, so I gain more bonus proficiencies' ]), choices : ["Base creature is a Humanoid or has a simple or martial weapon in its stat block", "Other base creatures"], "base creature is a humanoid or has a simple or martial weapon in its stat block" : { name : "Bonus Proficiencies: Humanoid", description : desc([ "I gain proficiency with all armor and two skills of my choice from the following list:", "Acrobatics, Animal Handling, Athletics, Intimidation, Nature, Perception, and Survival", "Additionally, I gain proficiency with shields and all simple and martial weapons" ]), armorProfs : [false, false, false, true], weaponProfs : [true, true] }, "other base creatures" : { name : "Bonus Proficiencies: Non-humanoid", description : desc([ "I gain proficiency with all armor and two skills of my choice from the following list:", "Acrobatics, Animal Handling, Athletics, Intimidation, Nature, Perception, and Survival" ]) } }, "martial role" : { name : "Martial Role", source : [["T", 146]], minlevel : 1, description : desc('Choose a Martial Role for the warrior using the "Choose Feature" button above'), choices : ["Attacker", "Defender"], "attacker" : { name : "Martial Role: Attacker", description : desc("I gain a +2 bonus to all my attack rolls"), calcChanges : { atkCalc : [ function (fields, v, output) { if (!v.isDC) output.extraHit += 2; }, "I add a +2 bonus on the To Hit of all my attack rolls." ] } }, "defender" : { name : "Martial Role: Defender", description : desc([ "As a reaction, I can give disadv. on an attack made vs. someone within 5 ft of me", "I need to be able to see the attacker to do this" ]), action : [["reaction", ""]] } }, "second wind" : { name : "Second Wind", source : [["T", 146]], minlevel : 2, description : desc([ "As a bonus action, I can regain hit points equal to 1d10 + warrior level", "I can use this once per short rest (twice at 20th-level)" ]), additional : levels.map(function (n) { return "1d10+" + n; }), usages : levels.map(function (n) { return n < 2 ? "" : n < 20 ? 1 : 2 }), recovery : "short rest", action : [["bonus action", ""]] }, "improved critical" : { name : "Improved Critical", source : [["T", 146]], minlevel : 3, description : desc("I score a critical hit with my weapon attacks on a roll of 19 and 20"), calcChanges : { atkAdd : [ function (fields, v) { if (!v.isDC && !v.isSpell && !v.CritChance && classes.known["sidekick-warrior"]) { fields.Description += (fields.Description ? '; ' : '') + 'Crit on 19-20'; v.CritChance = 19; }; }, "My weapon attacks score a critical on a to hit roll of both 19 and 20.", 19 ] } }, "ability score improvement" : { name : "Ability Score Improvement", source : [["T", 146]], minlevel : 4, description : desc([ "Increase one ability score by 2, or two ability scores by 1, up to a maximum of 20", "I gain this at 4th level and again at 8th, 12th, 14th, 16th, and 19th level" ]), additional : levels.map(function (n) { return n < 4 ? "" : (n < 8 ? 1 : n < 12 ? 2 : n < 14 ? 3 : n < 16 ? 4 : n < 19 ? 5 : 6) + "\xD7 2 points increase"; }) }, "extra attack" : { name : "Extra Attack", source : [["T", 147]], minlevel : 6, description : desc([ "I can attack twice, instead of once, whenever I take the Attack action on my turn", "This increases to three at 15th level", "If I have the Multiattack action, I can use either that or extra attack on a turn, not both" ]), additional : levels.map(function (n) { return n < 6 ? "" : (n < 15 ? 1 : 3) + " attacks as an action on my turn"; }) }, "battle readiness" : { name : "Battle Readiness", source : [["T", 147]], minlevel : 7, description : desc("I have advantage on my Initiative rolls"), advantages : [["Initiative", true]] }, "improved defense" : { name : "Improved Defense", source : [["T", 147]], minlevel : 10, description : desc("I gain a +1 bonus to AC"), extraAC : { mod : 1 } }, "indomitable" : { name : "Indomitable", source : [["T", 147]], minlevel : 11, description : desc([ "I can reroll a failed saving throw, but must keep the new result", "I can use this once per long rest (twice at 20th-level)" ]), usages : levels.map(function (n) { return n < 11 ? "" : n < 20 ? 1 : 2 }), recovery : "long rest" } } } // Add three subclasses to the spellcaster sidekick AddSubClass("sidekick-spellcaster-tcoe", "mage", { regExpSearch : /^(?=.*mage)(?=.*sidekick).*$/i, subname : "Mage", fullname : "Spellcaster: Mage (sidekick)", source : [["T", 144]], abilitySave : 4, spellcastingList : { "class" : "wizard", level : [0, 5] }, features : { "subclassfeature1" : { name : "Spellcasting", source : [["T", 144]], minlevel : 1, description : desc([ "I can cast wizard cantrips/spells I know, using Intelligence as my spellcasting ability", "I can use an arcane focus as a spellcasting focus for my spells", "Whenever I gain a level, I can replace one cantrip/spell I know with another I'm allowed" ]), additional : global_TCoE_Sidekick_fn.spellcasting_additional } } }); AddSubClass("sidekick-spellcaster-tcoe", "healer", { regExpSearch : /^(?=.*healer)(?=.*sidekick).*$/i, subname : "Healer", fullname : "Spellcaster: Healer (sidekick)", source : [["T", 144]], abilitySave : 5, spellcastingList : { "class" : ["cleric", "druid"], level : [0, 5] }, features : { "subclassfeature1" : { name : "Spellcasting", source : [["T", 144]], minlevel : 1, description : desc([ "I can cast cleric and druid cantrips/spells I know, using Wisdom as my spellcasting ability", "I can use a holy symbol or druidic focus as a spellcasting focus for my spells", "Whenever I gain a level, I can replace one cantrip/spell I know with another I'm allowed" ]), additional : global_TCoE_Sidekick_fn.spellcasting_additional } } }); AddSubClass("sidekick-spellcaster-tcoe", "prodigy", { regExpSearch : /^(?=.*prodigy)(?=.*sidekick).*$/i, subname : "Prodigy", fullname : "Spellcaster: Prodigy (sidekick)", source : [["T", 144]], abilitySave : 6, spellcastingList : { "class" : ["bard", "warlock"], level : [0, 5] }, features : { "subclassfeature1" : { name : "Spellcasting", source : [["T", 144]], minlevel : 1, description : desc([ "I can cast bard and warlock cantrips/spells I know, using Cha as my spellcasting ability", "I can use an arcane focus or musical instrument as a spellcasting focus for my spells", "Whenever I gain a level, I can replace one cantrip/spell I know with another I'm allowed" ]), additional : global_TCoE_Sidekick_fn.spellcasting_additional } } }); ================================================ FILE: WotC material/pub_20201117_TCoE.js ================================================ var iFileName = "pub_20201117_TCoE.js"; RequiredSheetVersion("14.0.5-beta", 15); // This file adds the content from Tasha's Cauldron of Everything to MPMB's Character Record Sheet /* ACKNOWLEDGEMENTS This file contains contributions from many different people over on the /r/mpmb subreddit and the MPMB Discord server. Many contributions have been reworked by Safety-Orange to fix bugs, make texts more uniform, adhere to MPMB's standards, and/or adhere to the latest syntax version. Combined with the fact that many contributions haven't been individually tracked (on GitHub), it is no longer possible to assign specific additions to a single person. Instead, here is a list of people (account names on GitHub) who made contributions, helped collect materials, or were otherwise essential to this script coming to fruition, in no particular order: - Nod_Hero#2046 (Discord) - Smashman - Metacomet10 - BraabHimself - AelarTheElfRogue - uhohspaghetti0 - Undrhil - easyboy - SoggieWafflz - phelot - Cosaur - remcovandalen - Seneschal55 - Gam90 - CountVladmir - alastairmarchant - edimshuffling - githubtkompare - Holynight6 - lizrdgizrd Think you're missing from this list? Please let me know! */ // Define the source SourceList.T = { name : "Tasha's Cauldron of Everything", abbreviation : "TCoE", abbreviationSpellsheet : "T", group : "Primary Sources", url : "https://dnd.wizards.com/products/tashas-cauldron-everything", date : "2020/11/17" }; // Add Custom Lineage RaceList["custom lineage"] = { regExpSearch : /^(?=.*custom)(?=.*lineage).*$/i, name : "Custom lineage", source : [["T", 8]], plural : "Custom lineages", size : [3, 4], speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", 1], scorestxt : "+2 to one ability score of my choice", eval : function() { AddString('Feat Note 1', 'Custom lineage bonus feat', '; '); }, removeeval : function() { RemoveString('Feat Note 1', 'Custom lineage bonus feat'); }, trait : "Custom Lineage (+2 to one ability score of my choice)" + desc([ "Size: I am Small or Medium (my choice).", "Feat: I gain one feat of my choice for which I qualify.", "Variable Trait: I gain either darkvision with a range of 60 ft or proficiency with a skill of my choice. Use the Racial Options button to select either one." ]) }; AddRacialVariant("custom lineage", "darkvision", { regExpSearch : /darkvision/i, source : [["T", 8]], vision : [["Darkvision", 60]], trait : "Custom Lineage (+2 to one ability score of my choice)" + desc([ "Size: I am Small or Medium (my choice).", "Feat: I gain one feat of my choice for which I qualify.", "Variable Trait: I have darkvision with a range of 60 ft." ]) }); AddRacialVariant("custom lineage", "skill proficiency", { regExpSearch : /skill proficiency/i, source : [["T", 8]], skillstxt : "Choose any one skill", trait : "Custom Lineage (+2 to one ability score of my choice)" + desc([ "Size: I am Small or Medium (my choice).", "Feat: I gain one feat of my choice for which I qualify.", "Variable Trait: I have proficiency with a skill of my choice." ]) }); // >>>>>>>>>>>>>>>>>>>>>>> // // >>> Artificer Class >>> // // >>>>>>>>>>>>>>>>>>>>>>> // // [dupl_start] reprints from Eberron: Rising from the Last War (after 2020 errata) if (!SourceList["E:RLW"]) { ClassList.artificer = { regExpSearch : /^(?=.*artificer)(?!.*wizard).*$/i, name : "Artificer", source : [["E:RLW", 54], ["T", 9]], primaryAbility : "Intelligence", abilitySave : 4, prereqs : "Intelligence 13", improvements : [0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5, 5], die : 8, saves : ["Con", "Int"], skillstxt : { primary : "Choose two from Arcana, History, Investigation, Medicine, Nature, Perception, and Sleight of Hand" }, toolProfs : { primary : [["Thieves' tools", "Dex"], "Tinker's tools", ["Artisan's tools", 1]], secondary : [["Thieves' tools", "Dex"], "Tinker's tools"] }, armorProfs : { primary : [true, true, false, true], secondary : [true, true, false, true] }, weaponProfs : { primary : [true, false, ["Firearms"]] }, equipment : "Artificer starting equipment:" + "\n \u2022 Any two simple weapons;" + "\n \u2022 A light crossbow and 20 bolts;" + "\n \u2022 Studded leather armor -or- scale mail;" + "\n \u2022 Thieves' tools and a dungeoneer's pack;" + "\n\nAlternatively, choose 5d4 \xD7 10 gp worth of starting equipment instead of both the class' and the background's starting equipment.", subclasses : ["Artificer Specialist", []], subclassGainedLevel : 3, attacks : [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], spellcastingFactor : 2, spellcastingFactorRoundupMulti : true, spellcastingKnown : { cantrips : [2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4], spells : "list", prepared : true }, features : { "magical tinkering" : { name : "Magical Tinkering", source : [["E:RLW", 55], ["T", 11]], minlevel : 1, description : desc([ "As an action, I use thieves/artisan's tools to give 1 property to a nonmagical tiny object:", " \u2022 Emit light (5-ft radius bright light, equal dim), an odor, or a nonverbal sound", " \u2022 Static visual effect on one surface, or emit a 6-second recorded message when tapped", "If I instill a property in more objects than I can have active, the oldest loses its property" ]), additional : "Intelligence modifier of active objects", action : [["action", " (add/remove)"]], "infuse item" : { name : "Infuse Item", extraname : "Artificer 2", source : [["E:RLW", 57]], description : desc([ "When I finish a long rest, I can turn nonmagical objects into magic items using my infusions", "I can attune to it immediately; If I infuse too many items, the oldest loses its magic", "The infusion lasts until my death + my Int mod in days, but ends if I unlearn the infusion", "Each infusion can only be used in one item at a time and only in appropriate items", "Whenever I gain an artificer level, I can replace an infusion I know with another", "I can use an infused item as a spellcasting focus" ]), additional : levels.map(function (n) { return n < 2 ? "" : (n < 6 ? 4 : n < 10 ? 6 : n < 14 ? 8 : n < 18 ? 10 : 12) + " infusions known; max " + (n < 6 ? 2 : n < 10 ? 3 : n < 14 ? 4 : n < 18 ? 5 : 6) + " infused items"; }) }, autoSelectExtrachoices : [{ extrachoice : "infuse item", minlevel : 2 }] }, "spellcasting" : { name : "Spellcasting", source : [["E:RLW", 55], ["T", 11]], minlevel : 1, description : desc([ "I can cast prepared artificer cantrips/spells, using Intelligence as my spellcasting ability", "To cast, I must use thieves' or artisan's tools I'm proficient with as a spellcasting focus", "I can cast my prepared artificer spells as rituals if they have the ritual tag", "Whenever I gain an artificer level, I can swap one artificer cantrip I know for another" ]), additional : levels.map(function (n, idx) { return [2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4][idx] + " cantrips known"; }), calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { if (!spellObj.psionic && spName == "artificer" && spellObj.compMaterial === SpellsList[spellKey].compMaterial) { var extraFocus = classes.known.artificer.subclass.indexOf("artillerist") !== -1 && classes.known.artificer.level > 4 ? "my arcane firearm, " : classes.known.artificer.subclass.indexOf("armorer") !== -1 && classes.known.artificer.level > 2 ? "my arcane armor, " : ""; spellObj.compMaterial = (spellObj.compMaterial ? spellObj.compMaterial + ".\n\nAlso a" : "A") + "lways requires my artificer spellcasting focus: thieves' tools, any set of artisan's tools I'm proficient with, " + extraFocus + "or an item infused by me."; if (GetFeatureChoice("classes", "artificer", "spellcasting", true).indexOf("don't change component column on spell sheet") != -1) { // do nothing if set to do so } else if (!spellObj.components) { spellObj.components = "M\u0192"; } else if (spellObj.components.indexOf("M") == -1) { spellObj.components += ",M\u0192"; } else if ((/M([^\u0192\u2020]|$)/).test(spellObj.components)) { spellObj.components = spellObj.components.replace("M", "M\u0192"); } return true; } return false; }, "My artificer spells always require me to use a spellcasting focus: thieves' tools, artisan's tools I'm proficient with, or an item infused by me." ] }, extrachoices : ["Don't change component column on spell sheet"], extraname : "Artificer Spellcasting", "don't change component column on spell sheet" : { name : "[Meta] Don't alter spell sheets", source : [["E:RLW", 55], ["T", 11]], description: desc("The automation will not add M\u0192 to each artificer spell on the generated spell sheets") } }, "infuse item" : { name : "Infuse Item", source : [["E:RLW", 57], ["T", 12]], minlevel : 2, description : desc('Use the "Choose Feature" button above to add Artificer Infusions to the third page'), additional : levels.map(function (n) { return n < 2 ? "" : (n < 6 ? 4 : n < 10 ? 6 : n < 14 ? 8 : n < 18 ? 10 : 12) + " infusions known; max " + (n < 6 ? 2 : n < 10 ? 3 : n < 14 ? 4 : n < 18 ? 5 : 6) + " infused items"; }), extraname : "Artificer Infusion", extrachoices : ["Boots of the Winding Path (prereq: level 6 artificer)", "Enhanced Arcane Focus", "Enhanced Defense (armor)", "Enhanced Defense (shield)", "Enhanced Weapon", "Homunculus Servant", "Radiant Weapon (prereq: level 6 artificer)", "Repeating Shot", "Repulsion Shield (prereq: level 6 artificer)", "Resistant Armor (prereq: level 6 artificer)", "Returning Weapon"], extraTimes : levels.map(function (n) { return n < 2 ? 0 : n < 6 ? 4 : n < 10 ? 6 : n < 14 ? 8 : n < 18 ? 10 : 12; }), "boots of the winding path (prereq: level 6 artificer)" : { name : "Boots of the Winding Path", source : [["E:RLW", 62], ["T", 21]], description : desc([ "The wearer can use a bonus action to teleport up to 15 ft to an unoccupied space it can see", "It must be a space that the wearer had occupied some time during the current turn" ]), additional : "pair of boots; requires attunement", prereqeval : function(v) { return classes.known.artificer.level >= 6; }, magicitemsAdd : ["Boots of the Winding Path"] }, "enhanced arcane focus" : { name : "Enhanced Arcane Focus", source : [["E:RLW", 62], ["T", 21]], description: desc("The holder has a bonus to spell attack rolls and ignores half cover with spell attacks"), additional : levels.map(function (n) { return "rod/staff/wand; attunement; +" + (n < 10 ? 1 : 2); }), eval : function (lvl, chc) { AddMagicItem("Enhanced Arcane Focus +" + (classes.known.artificer.level < 10 ? 1 : 2)); }, removeeval : function (lvl, chc) { RemoveMagicItem("enhanced arcane focus, +1 or +2"); } }, "enhanced defense (armor)" : { name : "Enhanced Defense", source : [["E:RLW", 62], ["T", 21]], description : "", additional : levels.map(function (n) { return "armor/shield; +" + (n < 10 ? 1 : 2) + " magical"; }), prereqeval : function(v) { return GetFeatureChoice("classes", "artificer", "infuse item", true).indexOf("enhanced defense (shield)") == -1; }, eval : function (lvl, chc) { AddMagicItem("Armor +" + (classes.known.artificer.level < 10 ? 1 : 2)); }, removeeval : function (lvl, chc) { RemoveMagicItem("armor, +1, +2, or +3"); } }, "enhanced defense (shield)" : { name : "Enhanced Defense", source : [["E:RLW", 62], ["T", 21]], description : "", additional : levels.map(function (n) { return "armor/shield; +" + (n < 10 ? 1 : 2) + " magical"; }), prereqeval : function(v) { return GetFeatureChoice("classes", "artificer", "infuse item", true).indexOf("enhanced defense (armor)") == -1; }, eval : function (lvl, chc) { AddMagicItem("Shield +" + (classes.known.artificer.level < 10 ? 1 : 2)); }, removeeval : function (lvl, chc) { RemoveMagicItem("shield, +1, +2, or +3"); } }, "enhanced weapon" : { name : "Enhanced Weapon", source : [["E:RLW", 62], ["T", 21]], description : "", additional : levels.map(function (n) { return "simple/martial weapon; +" + (n < 10 ? 1 : 2) + " magical"; }), eval : function (lvl, chc) { AddMagicItem("Weapon +" + (classes.known.artificer.level < 10 ? 1 : 2)); }, removeeval : function (lvl, chc) { RemoveMagicItem("weapon, +1, +2, or +3"); } }, "homunculus servant" : { name : "Homunculus Servant", source : [["E:RLW", 62], ["T", 21]], description : desc([ "The item I infuse becomes the heart of a homunculus that immediately forms around it", "I determine its appearance; It is friendly to me and my allies and obeys my commands", 'See "Homunculus Servant" on a companion page to see its game statistics' ]), additional : "gem or crystal of 100+ gp", action : [["bonus action", " (command)"]], creaturesAdd : [["Homunculus Servant"]], creatureOptions : [{ name : "Homunculus Servant", source : [["E:RLW", 62], ["T", 22]], size : 5, type : "Construct", alignment : "Neutral", ac : 13, hp : 3, hd : [2, 4], hdLinked : ["artificer"], speed : "20 ft, fly 30 ft", scores : [4, 15, 12, 10, 10, 7], saves : ["", 4, "", "", "", ""], skills : { "perception" : 4, "stealth" : 4 }, damage_immunities : "poison", condition_immunities : "exhaustion, poisoned", senses : "Darkvision 60 ft", passivePerception : 14, languages : "understands the languages of its creator but can't speak", challengeRating : "0", proficiencyBonus : 2, proficiencyBonusLinked : true, attacksAction : 1, attacks : [{ name : "Force Strike", ability : 4, damage : [1, 4, "force"], range : "30 ft", description : "", modifiers : ["", "Prof"], abilitytodamage : false, useSpellMod : "artificer" }], features : [{ name : "Creator", description : "The homunculus obeys the commands of its creator and has the same proficiency bonus. It takes its turn immediately after its creator, on the same initiative count. It can move and take reactions on its own, but only takes the Dodge action on its turn unless its creator takes a bonus action to command it to take another action. If its creator is incapacitated, it can take any action, not just Dodge." }], traits : [{ name : "Healing", description : "The homunculus regains 2d6 hit points whenever the Mending spell is cast on it. Its HP total is equal to 1 + its creator's artificer level + its creator's Intelligence modifier. If it or its creator dies, the homunculus vanishes, leaving its heart in its space." }, { name : "Evasion", description : "If the homunculus is subjected to an effect that allows it to make a Dexterity saving throw to take only half damage, it instead takes no damage if it succeeds on the saving throw, and only half damage if it fails. It can't use this trait if it's incapacitated." }], actions : [{ name : "Channel Magic", description : "As a reaction, the homunculus delivers a spell cast by its creator that has a range of touch. The homunculus must be within 120 ft of its creator to do so." }], header : "Construct", calcChanges : { hp : function (totalHD, HDobj, prefix) { if (!classes.known.artificer) return; var intMod = Number(What('Int Mod')); var artLvl = classes.known.artificer.level; HDobj.alt.push(1 + intMod + artLvl); HDobj.altStr.push(" = 1 as a base\n + " + intMod + " from its creator's Intelligence modifier\n + " + artLvl + " from its creator's artificer level"); }, setAltHp : true, hpForceRecalc : true } }] }, "radiant weapon (prereq: level 6 artificer)" : { name : "Radiant Weapon", source : [["E:RLW", 62], ["T", 22]], description : desc([ "The weapon has a +1 bonus to attack and damage rolls made with it and it sheds light", "As a bonus action, its wielder can start/stop the light, 30-ft radius bright + 30 ft dim light", "The weapon has 4 charges, regaining 1d4 expended charges daily at dawn", "As a reaction when hit by an attack, the wielder can expend 1 charge to blind its attacker", "The attacker makes a Con save (my spell save DC) or is blinded until its next turn ends" ]), additional : "simple/martial weapon; requires attunement", prereqeval : function(v) { return classes.known.artificer.level >= 6; }, magicitemsAdd : ["Radiant Weapon"] }, "repeating shot" : { name : "Repeating Shot", source : [["E:RLW", 62], ["T", 22]], description : desc([ "The weapon requiring ammunition has a +1 bonus to attack and damage rolls made with it", "It magically produces one piece of ammunition whenever it is used to make a ranged attack", "Thus, it doesn't require ammunition and ignores the loading property if it has it" ]), additional : "weapon with ammo; requires attunement", magicitemsAdd : ["Repeating Shot"] }, "repulsion shield (prereq: level 6 artificer)" : { name : "Repulsion Shield", source : [["E:RLW", 63], ["T", 23]], description : desc([ "The shield gives its wearer an extra +1 bonus to AC; It has 4 charges, regaining 1d4 daily", "As a reaction when hit in melee, the wearer can use 1 charge to push the attacker 15 ft" ]), additional : "shield; requires attunement", prereqeval : function(v) { return classes.known.artificer.level >= 6; }, magicitemsAdd : ["Repulsion Shield"] }, "resistant armor (prereq: level 6 artificer)" : { name : "Resistant Armor", source : [["E:RLW", 63], ["T", 23]], description : desc([ "The armor gives its wearer resistance to one type of damage, chosen at the time of infusion", "Choose from: acid, cold, fire, force, lightning, necrotic, poison, psychic, radiant, or thunder" ]), additional : "suit of armor; requires attunement", prereqeval : function(v) { return classes.known.artificer.level >= 6; }, magicitemsAdd : ["Armor of Resistance"] }, "returning weapon" : { name : "Returning Weapon", source : [["E:RLW", 63], ["T", 23]], description : "After being used for a ranged attack, the weapon returns immediately; +1 magical bonus", additional : "weapon with the thrown property", magicitemsAdd : ["Returning Weapon"] } }, "the right tool for the job" : { name : "The Right Tool for the Job", source : [["E:RLW", 57], ["T", 13]], minlevel : 3, description: " [using thieves' or artisan's tools]" + desc("In 1 hour (during a rest) I can create a set of artisan's tools that last until I do so again"), }, "subclassfeature3" : { name : "Artificer Specialist", source : [["E:RLW", 57], ["T", 13]], minlevel : 3, description : desc([ 'Choose a specialism and put it in the "Class" field on the first page', "Choose either alchemist, artillerist, or battle smith" ]) }, "tool expertise" : { name : "Tool Expertise", source : [["E:RLW", 57], ["T", 13]], minlevel : 6, description : " [expertise with all tools I'm proficient with]", skillstxt : "Expertise with all tools I'm proficient with", eval : function () { Checkbox('Too Exp', true); }, removeeval : function () { Checkbox('Too Exp', false); } }, "flash of genius" : { name : "Flash of Genius", source : [["E:RLW", 57], ["T", 13]], minlevel : 7, description: desc("As a reaction when I or another in 30 ft make a check/save, I can add my Int mod to it"), action : [["reaction", ""]], usages : "Intelligence modifier per ", usagescalc : "event.value = Math.max(1, What('Int Mod'));", recovery : "long rest" }, "magic item adept" : { name : "Magic Item Adept", source : [["E:RLW", 57], ["T", 13]], minlevel : 10, description: desc("It takes me half the normal time and gold to craft common and uncommon magic items"), additional : levels.map(function (n) { return n < 10 ? "" : "attune to " + (n < 14 ? 4 : n < 18 ? 5 : 6) + " magic items"; }) }, "spell-storing item" : { name : "Spell-Storing Item", source : [["E:RLW", 58], ["T", 13]], minlevel : 11, description : desc([ "When I finish a long rest, I can infuse a 1st-/2nd-level artificer spell into an item I touch", "It has to be a weapon or spellcasting focus for me; Stored spells are lost if I do this again", "The spell must have a casting time of 1 action, but I need not have it prepared", "A creature holding an infused item can use an action to cast the spell, using my abilities" ]), additional : "cast stored spell", usages : "2\xD7 Int mod per ", usagescalc : "event.value = Math.max(2, Number(What('Int Mod')) * 2);", recovery : typePF ? "LR" : "long rest" }, "magic item savant" : { name : "Magic Item Savant", source : [["E:RLW", 58], ["T", 14]], minlevel : 14, description : " [ignore class/race/spell/level attune require.]" }, "soul of artifice" : { name : "Soul of Artifice", source : [["E:RLW", 58], ["T", 14]], minlevel : 20, description : " [+1 on all saves per attuned magic item]\n As a reaction when I'm reduced to 0 HP, I can end one infusion to drop to 1 HP instead", action : [["reaction", ""]], savetxt : { text : ["+1 to all saves per attuned magic item"] } } }, prereqLvl6 : function(v) { return classes.known.artificer.level >= 6; }, prereqLvl10 : function(v) { return classes.known.artificer.level >= 10; }, prereqLvl14 : function(v) { return classes.known.artificer.level >= 14; }, }; // Set the Artificer infusion list for Replicate Magic Item RunFunctionAtEnd(function() { var artMi = [ // 2nd-level artificer ["alchemy jug", 2], ["bag of holding", 2], ["cap of water breathing", 2], ["goggles of night", 2], ["rope of climbing", 2], ["sending stones", 2], ["wand of magic detection", 2], ["wand of secrets", 2], // 6th-level artificer ["boots of elvenkind", 6], ["cloak of elvenkind", 6], ["cloak of the manta ray", 6], ["eyes of charming", 6], ["gloves of thievery", 6], ["lantern of revealing", 6], ["pipes of haunting", 6], ["ring of water walking", 6], // 10th-level artificer ["boots of striding and springing", 10], ["boots of the winterlands", 10], ["bracers of archery", 10], ["brooch of shielding", 10], ["cloak of protection", 10], ["eyes of the eagle", 10], ["gauntlets of ogre power", 10], ["gloves of missile snaring", 10], ["gloves of swimming and climbing", 10], ["hat of disguise", 10], ["headband of intellect", 10], ["helm of telepathy", 10], ["medallion of thoughts", 10], ["necklace of adaptation", 10], // TCoE addition ["periapt of wound closure", 10], ["pipes of the sewers", 10], ["quiver of ehlonna", 10], ["ring of jumping", 10], ["ring of mind shielding", 10], ["slippers of spider climbing", 10], ["ventilating lung", 10], ["winged boots", 10], // 14th-level artificer ["amulet of health", 14], ["arcane propulsion arm", 14], ["belt of giant strength", 14, "hill (str 21, rare)"], ["boots of levitation", 14], ["boots of speed", 14], ["bracers of defense", 14], ["cloak of the bat", 14], ["dimensional shackles", 14], ["gem of seeing", 14], ["horn of blasting", 14], ["ring of free action", 14], ["ring of protection", 14], ["ring of the ram", 14] ]; // add all common items (except potions and scrolls) for (var mi in MagicItemsList) { var aMI = MagicItemsList[mi]; if (aMI.type && !(/potion|scroll/i).test(aMI.type) && ( (!aMI.rarity && aMI.choices) || (aMI.rarity && aMI.rarity.toLowerCase() === "common") ) ) { // only look at choices if the main object has no rarity (i.e. the choices have different rarities) if (!aMI.rarity && aMI.choices) { for (var c = 0; c < aMI.choices.length; c++) { var choiceNmLC = aMI.choices[c].toLowerCase(); var aMIchoice = aMI[choiceNmLC]; // skip if not common rarity or a potion or a scroll if (!aMIchoice || !aMIchoice.rarity || aMIchoice.rarity.toLowerCase() !== "common" || (/potion|scroll/i).test(aMIchoice.type)) continue; artMi.push([mi, 0, choiceNmLC]); } } else { // the main object has rarity "common", so add it as a whole artMi.push([mi]); } } } var theObj = ClassList.artificer.features["infuse item"]; for (var a = 0; a < artMi.length; a++) { var MI0 = artMi[a][0]; var MI1 = artMi[a][1]; var MI2 = artMi[a][2]; var anArtMi = MagicItemsList[MI0]; if (!anArtMi) continue; if (MI2 && anArtMi[MI2]) { anArtMi = { name : anArtMi[MI2].name ? anArtMi[MI2].name : anArtMi.name + " [" + MI2.capitalize() + "]", rarity : anArtMi[MI2].rarity ? anArtMi[MI2].rarity : anArtMi.rarity, source : anArtMi[MI2].source ? anArtMi[MI2].source : anArtMi.source, attunement : anArtMi[MI2].attunement !== undefined ? anArtMi[MI2].attunement : anArtMi.attunement } } var theI = anArtMi.name + (MI1 ? " (prereq: level " + MI1 + " artificer)" : ""); var theILC = theI.toLowerCase(); if (theObj[theILC]) continue; theObj[theILC] = { name : anArtMi.name, description : "", source : anArtMi.source, magicitemsAdd : [anArtMi.name], additional : anArtMi.attunement ? "requires attunement" : undefined, prereqeval : MI1 && MI1 > 2 ? ClassList.artificer["prereqLvl" + MI1] : undefined, submenu : "Replicate Magic Item" + (MI1 ? " (prereq: level " + (" "+MI1).slice(-2) + " artificer)" : " (common magic items) [" + getLetterRange(anArtMi.name, ["A-F", "G-Q", "R-Z"]) + "]") }; theObj.extrachoices.push(theI); }; }); // Add the Alchemist specialism AddSubClass("artificer", "alchemist", { regExpSearch : /^(?=.*alchemist)(?!.*wizard).*$/i, subname : "Alchemist", fullname : "Alchemist", source : [["E:RLW", 58], ["T", 14]], features : { "subclassfeature3" : { name : "Tools Proficiency", source : [["E:RLW", 58], ["T", 14]], minlevel : 3, description : " [proficient with alchemist's supplies]", toolProfs : ["Alchemist's supplies"], spellcastingExtra : ["healing word", "ray of sickness", "flaming sphere", "melf's acid arrow", "gaseous form", "mass healing word", "blight", "death ward", "cloudkill", "raise dead"] }, "subclassfeature3.1" : { name : "Experimental Elixir", source : [["E:RLW", 58], ["T", 14]], minlevel : 3, description : desc([ "When I finish a long rest I can produce a number of elixirs in empty flasks I touch", "Also, as an action, I can expend a spell slot to create one elixir in a touched empty flask", "I need alchemist supplies on my person to do this; An elixir lasts until my next long rest", "For their effects, see the experimental elixir table on a Notes page; They work like potions" ]), additional : levels.map(function (n) { return n < 3 ? "" : (n < 6 ? 1 : n < 15 ? 2 : 3) + " elixir" + (n < 6 ? "" : "s"); }), action : [["action", ""]], toNotesPage : [{ name : "Experimental Elixir Table", note : [ "Whenever I finish a long rest, I can magically produce a number of experimental elixir in empty flasks I touch. I can create one at 3rd level, two at 6th level, and three at 15th level.", "Creating an experimental elixir requires me to have alchemist's supplies on my person, and any elixir created like this lasts until it is drunk or until the end of my next long rest.", "I can create additional experimental elixirs by expending a spell slot of 1st level or higher for each one. When I do so, I use my action to create the elixir in an empty flask I touch.", "As an action, a creature can drink the elixir or administer it to an incapacitated creature.", "The effect of an elixir when someone drinks it is found on the table below. Roll to determine the effect for each elixir I create when finishing a long rest. I can choose the effect from the table for those created by expending a spell slot.", "\n D6\tEFFECT", "1\tHealing: The drinker regains a number of hit points equal to 2d4 + my Intelligence modifier.", "2\tSwiftness: The drinker's walking speed increases by 10 ft for 1 hour.", "3\tResilience: The drinker gains a +1 bonus to AC for 10 minutes.", "4\tBoldness: The drinker can roll a d4 and add the number rolled to every attack roll and saving throw they make for the next minute.", "5\tFlight: The drinker gains a flying speed of 10 ft for 10 minutes.", "6\tTransformation: The drinker's body is transformed as if by the alter self spell. The drinker determines the transformation caused by the spell, the effects of which last for 10 minutes." ] }] }, "subclassfeature5" : { name : "Alchemical Savant", source : [["E:RLW", 58], ["T", 15]], minlevel : 5, description : desc([ "When I cast spells using alchemist's supplies as my spellcasting focus, I can enhance them", "I add my Int mod to one roll of acid, fire, necrotic, or poison damage, or restoring HP" ]), calcChanges : { atkCalc : [ function (fields, v, output) { if (v.thisWeapon[3] && v.thisWeapon[4].indexOf("artificer") !== -1 && (/acid|fire|necrotic|poison/i).test(fields.Damage_Type)) { output.extraDmg += Math.max(Number(What("Int Mod")), 1); } }, "Artificer spells that deal acid, fire, necrotic, or poison damage which I cast while using alchemist's supplies as my spellcasting focus, have my Intelligence modifier (min 1) added to one damage die roll." ], spellAdd : [ function (spellKey, spellObj, spName) { if (spellObj.psionic || spName !== "artificer") return; var toAdd = Math.max(Number(What("Int Mod")), 1); if (genericSpellDmgEdit(spellKey, spellObj, "acid|fire|necro\\.?|necrotic|poison", toAdd, true, true) || genericSpellDmgEdit(spellKey, spellObj, "heal", toAdd, true, true)) { return true; } }, "Artificer spells I cast using alchemist's supplies as my spellcasting focus, have my Intelligence modifier (min 1) added to one die rolled for dealing acid, fire, necrotic, or poison damage, or when restoring hit points." ] } }, "subclassfeature9" : { name : "Restorative Reagents", source : [["E:RLW", 59], ["T", 15]], minlevel : 9, description : desc([ "Drinking my experimental elixirs now also grants 2d6 + my Int mod in temp HP (min 1)", "I can cast Lesser Restoration with alchemist's supplies without a spell slot (Int mod times)" ]), usages : "Int mod per ", usagescalc : "event.value = Math.max(1, What('Int Mod'));", recovery : "long rest", limfeaname : "Restorative Reagents: Lesser Restoration", spellcastingBonus : [{ name : "Restorative Reagents", spells : ["lesser restoration"], selection : ["lesser restoration"], firstCol : "Sp" }], spellChanges : { "lesser restoration" : { components : "V,S,M\u0192", compMaterial : "Alchemist's supplies", changes : "When using my Restorative Reagents class feature, I can cast Lesser Restoration a number of times per long rest equal to my Intelligence modifier. To do so, I have to use alchemist's supplies as my spellcasting focus." } } }, "subclassfeature15" : { name : "Chemical Mastery", source : [["E:RLW", 59], ["T", 15]], minlevel : 15, additional: "each spell 1\xD7 per long rest", description : desc([ "I have resistance to acid and poison damage and immunity to being poisoned", "I can cast Greater Restoration and Heal each once per long rest without a spell slot", "I need alchemist's supplies as a focus for it, but the spells require no material components" ]), dmgres : ["Acid", "Poison"], savetxt : { immune : ["poisoned condition"] }, spellcastingBonus : [{ name : "Chemical Mastery", spells : ["greater restoration", "heal"], selection : ["greater restoration", "heal"], firstCol : "oncelr", times : 2 }], spellChanges : { "greater restoration" : { components : "V,S,M\u0192", compMaterial : "Alchemist's supplies", description : "Reduce exhaustion 1 lvl or end charm, petrify, curse, one ability score reduction, or max HP reduction", changes : "When using my Chemical Mastery class feature and alchemist's supplies as my spellcasting focus, I can cast Greater Restoration once per long rest without using a spell slot or requiring other material components." }, "heal" : { components : "V,S,M\u0192", compMaterial : "Alchemist's supplies", allowUpCasting : false, changes : "When using my Chemical Mastery class feature and alchemist's supplies as my spellcasting focus, I can cast Heal once per long rest without using a spell slot." } } } } }); // Add the Artillerist specialism AddSubClass("artificer", "artillerist", { regExpSearch : /^(?=.*artillerist)(?!.*wizard).*$/i, subname : "Artillerist", fullname : "Artillerist", source : [["E:RLW", 59], ["T", 17]], features : { "subclassfeature3" : { name : "Tools Proficiency", source : [["E:RLW", 59], ["T", 17]], minlevel : 3, description : " [proficient with woodcarver's tools]", toolProfs : ["Woodcarver's tools"], spellcastingExtra : ["shield", "thunderwave", "scorching ray", "shatter", "fireball", "wind wall", "ice storm", "wall of fire", "cone of cold", "wall of force"] }, "subclassfeature3.1" : { name : "Eldritch Cannon", source : [["E:RLW", 59], ["T", 17]], minlevel : 3, description : desc([ "As an action, I can use woodcarver's or smith's tools to create an eldritch cannon in 5 ft", "I can do this once per long rest, or by expending a spell slot (SS 1+) to create one cannon", "I decide its size (Small/Tiny), appearance, type: flamethrower, force ballista, or protector", "It disappears after 1 hour, when reduced to 0 HP, or if I dismiss it as an action", "As a bonus action when within 60 ft of it, I can activate it to move and do its action", "I can't have multiple cannons; Select \"Eldritch Cannon\" on a companion page for its stats" ]), usages : 1, recovery : "long rest", altResource : "SS 1+", additional : levels.map(function(n) { return n < 3 ? "" : n < 15 ? "1 cannon" : "2 cannons"; }), action : [["action", " (create/dismiss)"], ["bonus action", " (activate)"]], creaturesAdd : [["Eldritch Cannon"]], creatureOptions : [{ name : "Eldritch Cannon", source : [["E:RLW", 59], ["T", 17]], size : [4, 5], type : "Object", alignment : "", ac : 18, hp : 5, hd : ["", ""], speed : "15 ft, climb 15 ft", scores : [10, 10, 10, 10, 10, 10], damage_immunities : "poison, psychic", passivePerception : 10, challengeRating : "1", proficiencyBonus : 2, proficiencyBonusLinked : true, attacksAction : 0, attacks : [{ name : "Flamethrower", ability : 4, damage : [2, 8, "fire"], range : "15-ft cone", description : "Dex save, success - half damage; Unattended flammable objects ignite", dc : true, useSpellMod : "artificer", abilitytodamage : false, tooltip : "The cannon exhales fire in an adjacent 15-ft cone that its creator designates. Each creature in that area must make a Dexterity saving throw against its creator's artificer spell save DC, taking 2d8 fire damage on a failed save or half as much damage on a successful one. The fire ignites any flammable objects in the area that aren't being worn or carried." }, { name : "Force Ballista", ability : 4, damage : [2, 8, "force"], range : "120 ft", description : "Creature hit is pushed 5 ft away", useSpellMod : "artificer", abilitytodamage : false, tooltip : "The cannon's creator makes a ranged spell attack, originating from the cannon, at one creature or object within 120 ft of it. On a hit, the target takes 2d8 force damage, and if the target is a creature, it is pushed up to 5 ft away from the cannon." }, { name : "Detonate", ability : 4, damage : [3, 8, "force"], range : "20-ft radius", description : "Dex save, success - half damage; Destroys cannon", dc : true, useSpellMod : "artificer", abilitytodamage : false, tooltip : "As an action, its creator can command the cannon to detonate if its creator is within 60 ft of it. Doing so destroys the cannon and forces each creature within 20 ft of it to make a Dexterity saving throw against its creator's artificer spell save DC, taking 3d8 force damage on a failed save or half as much damage on a successful one." }], features : [{ name : "Healing", description : "The cannon regains 2d6 HP whenever Mending is cast on it." }, { name : "Cannon Type", description : "Upon creation, the creator decides what type of cannon it is: Flamethrower, Force Ballista, or Protector. What feature/attack it can use depends on its type." }, { name : "Protector", description : "The cannon emits a burst of positive energy that grants itself and each creature of its creator's choice within 10 ft of it a number of temporary hit points equal to 1d8 + its creator's Intelligence modifier (minimum of +1)." }], traits : [{ name : "Creator", description : "As an object, the cannon only acts when activated by its creator, uses its creator's artificer spell attack and save DC, and has five times the artificer level in HP. It disappears after 1 hour, when reduced to 0 HP, or when its creator dismisses it as an action." }, { name : "Activation", description : "The creator of the cannon can activate it as a bonus action while within 60 ft of it. Once activated, the cannon does as instructed, moves and uses the action associated with its type: flamethrower attack, force ballista attack, or protector feature." }, { name : "Detonate (Artillerist 9)", minlevel : 9, description : "The creator of the cannon, can use an action to detonate the cannon when within 60 ft of it, see the attack section. The cannon's attacks now deal 3d8 damage.", eval : function(prefix, lvl) { // add the Detonate attack entry Value(prefix + "Comp.Use.Attack.3.Weapon Selection", "Detonate"); // Upgrade the damage for the attacks for (var i = 1; i <= 2; i++) { Value(prefix + "BlueText.Comp.Use.Attack." + i + ".Damage Die", "3d8"); } }, removeeval : function(prefix, lvl) { // remove the Detonate attack entry Value(prefix + "Comp.Use.Attack.3.Weapon Selection", ""); // Reset the damage for the attacks for (var i = 1; i <= 2; i++) { Value(prefix + "BlueText.Comp.Use.Attack." + i + ".Damage Die", "2d8"); } } }, { name : "Shimmering Field (Artillerist 15)", minlevel : 15, description : "The creator of the cannon and their allies have half cover while within 10 ft of the cannon." }], minlevelLinked : ["artificer"], header : "Object", calcChanges : { hp : function (totalHD, HDobj, prefix) { if (!classes.known.artificer) return; var artLvl = classes.known.artificer.level; HDobj.alt.push(5 * artLvl); HDobj.altStr.push(" = 5 \xD7 " + artLvl + " from five times its creator's artificer level"); }, setAltHp : true }, eval : function(prefix, lvl) { // remove the Detonate attack if adding this creature before artificer level 9 if (lvl[0] < 9) Value(prefix + "Comp.Use.Attack.3.Weapon Selection", ""); } }] }, "subclassfeature5" : { name : "Arcane Firearm", source : [["E:RLW", 59], ["T", 18]], minlevel : 5, description : " [lasts until I use this feature again]" + desc([ "After a long rest, I can use woodcarver's tools to enhance a wand, staff, or rod", "If I use this as my spellcasting focus for an artificer spell, I add +1d8 to one damage" ]), calcChanges : { atkAdd : [ function (fields, v) { if (v.thisWeapon[3] && v.thisWeapon[4].indexOf("artificer") !== -1) { fields.Damage_Die = fields.Damage_Die.replace(/D/g, 'd'); var d8Regex = /(\d+)d8/; if (fields.Damage_Die.indexOf('Bd8') != -1) { fields.Damage_Die = fields.Damage_Die.replace('Bd8', 'Cd8'); } else if (fields.Damage_Die.indexOf('Cd8') != -1) { fields.Damage_Die = fields.Damage_Die.replace('Cd8', 'Qd8'); } else if (d8Regex.test(fields.Damage_Die)) { fields.Damage_Die = fields.Damage_Die.replace(d8Regex, Number(fields.Damage_Die.replace(d8Regex, '$1')) + 1 + 'd8'); } else if (v.thisWeapon[3] == "eldritch blast") { fields.Description += (fields.Description ? '; ' : '') + "One ray +1d8 dmg"; } else { fields.Damage_Die += '+1d8'; } } }, "If I use my arcane firearm as a spellcasting focus for an artificer spell, I can add +1d8 to one of the spell's damage rolls.", 10 ], spellAdd : [ function (spellKey, spellObj, spName) { if (spellObj.psionic || spName !== "artificer") return; return genericSpellDmgEdit(spellKey, spellObj, "\\w+\\.?", "1d8", true, true); }, "If I use my arcane firearm as a spellcasting focus for an artificer spell, I can add +1d8 to one of the spell's damage rolls." ] } }, "subclassfeature9" : { name : "Explosive Cannon", source : [["E:RLW", 60], ["T", 18]], minlevel : 9, description: desc("My eldritch cannons deal +1d8 damage; As an action, I can detonate a cannon in 60 ft"), action : [["action", "Eldritch Cannon (detonate)"]] }, "subclassfeature15" : { name : "Fortified Position", source : [["E:RLW", 60], ["T", 18]], minlevel : 15, description : " [cannons grant half cover in 10 ft to allies]" + desc([ "I can now have two cannons at the same time and activate both with one bonus action", "I can create 2 eldritch cannons with the same action (still only one with a spell slot)" ]) } } }); // Add the Battle Smith specialism AddSubClass("artificer", "battle smith", { regExpSearch : /^(?=.*battle)(?=.*smith)(?!.*wizard).*$/i, subname : "Battle Smith", fullname : "Battle Smith", source : [["E:RLW", 60], ["T", 18]], attacks : [1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], features : { "subclassfeature3" : { name : "Battle Ready \u0026 Tool Proficiency", source : [["E:RLW", 61], ["T", 19]], minlevel : 3, description : desc([ "I gain proficiency with martial weapons and smith's tools", "I can use my Intelligence modifier instead of Strength or Dexterity for magic weapons" ]), toolProfs : ["Smith's tools"], spellcastingExtra : ["heroism", "shield", "branding smite", "warding bond", "aura of vitality", "conjure barrage", "aura of purity", "fire shield", "banishing smite", "mass cure wounds"], weaponProfs : [false, true], calcChanges : { atkAdd : [ function (fields, v) { if (!v.isSpell && (v.theWea.isMagicWeapon || v.thisWeapon[1]) && (fields.Mod === 1 || fields.Mod === 2) && Number(What("Int")) > Number(What(fields.Mod === 1 ? "Str" : "Dex"))) { fields.Mod = 4; } }, 'I can use my Intelligence modifier instead of Strength or Dexterity for the attack and damage rolls of magic weapons.' ] } }, "subclassfeature3.1" : { name : "Steel Defender", source : [["E:RLW", 61], ["T", 19]], minlevel : 3, description : desc([ "When I end a long rest, I can use smith's tools to create a steel defender", "I determine its appearance; It obeys my commands and it acts on my initiative, after me", "Unless I use a bonus action to command it, it only takes the Dodge action on its turn", "It can take reactions and move on its turn even if I don't command it", "I can't have multiple at once; Select \"Steel Defender\" on a companion page for its stats" ]), action : [["bonus action", " (command)"], ["action", " (restore)"]], creaturesAdd : [["Steel Defender"]], creatureOptions : [{ name : "Steel Defender", source : [["E:RLW", 61], ["T", 19]], size : 3, type : "Construct", alignment : "Neutral", ac : 15, hp : 12, hd : [2, 8], hdLinked : ["artificer"], speed : "40 ft", scores : [14, 12, 14, 4, 10, 6], saves : ["", 3, 4, "", "", ""], skills : { "athletics" : 4, "perception" : 4 }, damage_immunities : "poison", condition_immunities : "charmed, exhaustion, poisoned", passivePerception : 14, senses : "Darkvision 60 ft", languages : "understands the languages of its creator but can't speak", challengeRating : "1", proficiencyBonus : 2, proficiencyBonusLinked : true, attacksAction : 1, attacks : [{ name : "Force-Empowered Rend", ability : 4, damage : [1, 8, "piercing"], range : "Melee (5 ft)", description : "", modifiers : ["", "Prof"], abilitytodamage : false, useSpellMod : "artificer" }, { name : "Deflect Attack (reaction)", ability : 0, damage : [1, 4, "force"], range : "Melee (5 ft)", description : "After using the reaction, the attacker takes this damage, no attack roll required", modifiers : ["-Prof", "oInt"], abilitytodamage : false }], features : [{ name : "Creator", description : "The steel defender obeys the commands of its creator and has the same proficiency bonus. It takes its turn immediately after its creator, on the same initiative count. It can move and take reactions on its own, but only takes the Dodge action on its turn unless its creator takes a bonus action to command it to take another action. If its creator is incapacitated, it can take any action, not just Dodge." }, { name : "Vigilant", description : "The " + (typePF ? "" : "steel ") + "defender can't be surprised." }], traits : [{ name : "Healing", description : "The steel defender regains 2d6 HP whenever the Mending spell is cast on it. Its HP total is equal to 2 + its creator's artificer level times five + its creator's Int mod. Within an hour of its death, while within 5 ft, its creator can take an action to use smith's tools and expend a spell slot to have it return to full HP after 1 minute. If its creator dies, " + (typePF ? "the steel defender also perishes" : "so does it") + "." }], actions : [{ name : "Repair (3/Day)", description : "As an action, the " + (typePF ? "" : "magical mechanisms inside the ") + "steel defender restore" + (typePF ? "s" : "") + " 2d8 + its proficiency bonus in HP to itself or to one construct or object within 5 ft of it." }, { name : "Deflect Attack (reaction)", description : typePF ? "As a reaction, the steel defender imposes disadvantage on the attack roll of one creature it can see that is within 5 ft of it, provided the attack roll is against a creature other than the defender." : "As a reaction, the defender imposes disadv. on the attack roll of one creature it can see within 5 ft, provided the creature attacks another than the defender." }, { name : "Arcane Jolt (Battle Smith 9)", minlevel : 9, eval : function(prefix, lvl) { Value(prefix + "Comp.Use.Attack.1.Description", "Arcane Jolt (1d6): On hit, deal force damage or heal target in 30 ft"); }, removeeval : function(prefix, lvl) { Value(prefix + "Comp.Use.Attack.1.Description", ""); } }, { name : "Improved Defender (Battle Smith 15)", minlevel : 15, description : "The steel defender's Deflect Attack now deals 1d4 + its creator's Intelligence modifier in force damage to the attacker.", addMod : [{ type : "", field : "Comp.Use.AC", mod : 2, text : "The steel defender gains a +2 bonus to its AC (base AC of 15)." }], eval : function(prefix, lvl) { Value(prefix + "Comp.Use.Attack.1.Description", What(prefix + "Comp.Use.Attack.1.Description").replace("Arcane Jolt (1d6)", "Arcane Jolt (2d6)")); Value(prefix + "Comp.Use.Attack.2.Weapon Selection", "Deflect Attack (reaction)"); }, removeeval : function(prefix, lvl) { Value(prefix + "Comp.Use.Attack.1.Description", What(prefix + "Comp.Use.Attack.1.Description").replace("Arcane Jolt (2d6)", "Arcane Jolt (1d6)")); Value(prefix + "Comp.Use.Attack.2.Weapon Selection", ""); } }], minlevelLinked : ["artificer"], header : "Construct", calcChanges : { hp : function (totalHD, HDobj, prefix) { if (!classes.known.artificer) return; var intMod = Number(What('Int Mod')); var artLvl = classes.known.artificer.level; var artLvl5 = 5 * artLvl; HDobj.alt.push(2 + intMod + artLvl5); HDobj.altStr.push(" = 2 as a base\n + " + intMod + " from its creator's Intelligence modifier\n + 5 \xD7 " + artLvl + " from five times its creator's artificer level (" + artLvl5 + ")"); }, setAltHp : true, hpForceRecalc : true }, eval : function(prefix, lvl) { // remove the Deflect Attack (reaction) attack if adding this creature before artificer level 15 if (lvl[0] < 15) Value(prefix + "Comp.Use.Attack.2.Weapon Selection", ""); } }] }, "subclassfeature9" : { name : "Arcane Jolt", source : [["E:RLW", 61], ["T", 20]], minlevel : 9, description : function () { var descr9 = desc([ "Once per turn when my steel defender or magic weapon hits a target, I can have it:", " \u2022 Deal an extra +2d6 force damage to the target", " \u2022 Restore 2d6 HP to another target within 30 ft of the one that was hit" ]); var descr15 = descr9.replace(/2d6/g, '4d6'); return levels.map(function (n) { return n < 9 ? "" : n < 15 ? descr9 : descr15; }); }(), usages : "Intelligence modifier per ", usagescalc : "event.value = Math.max(1, What('Int Mod'));", recovery : "long rest", additional : levels.map(function (n) { return n < 9 ? "" : (n < 15 ? 2 : 4) + "d6"; }), calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.isMagicWeapon || v.thisWeapon[1]) { fields.Description += (fields.Description ? '; ' : '') + 'Arcane Jolt (' + (classes.known.artificer && classes.known.artificer.level >= 15 ? 4 : 2) + 'd6)'; } }, "Once per turn when I hit with a magic weapon or my steel defender hits with its attack, I can use my Arcane Jolt class feature to have the hit either deal extra force damage or heal somebody within 30 ft of the target hit." ] } }, "subclassfeature15" : { name : "Improved Defender", source : [["E:RLW", 61], ["T", 20]], minlevel : 15, description : desc([ "My defender's Deflect Attack now deals its attacker 1d4 + my Int mod force damage", "My arcane jolt damage/healing increases to 4d6; My steel defender gains +2 AC" ]) } } }); // Add the new special magic items for the artificer class (infusions) MagicItemsList["boots of the winding path"] = { name : "Boots of the Winding Path", source : [["E:RLW", 62], ["T", 21], ["UA:A2", 9], ["UA:A3", 12]], type : "wondrous item", description : "While wearing these boots, I can teleport up to 15 ft as a bonus action to an unoccupied space I can see, as long as I occupied that space at some point during the current turn.", descriptionFull : "While wearing these boots, a creature can teleport up to 15 feet as a bonus action to an unoccupied space the creature can see. The creature must have occupied that space at some point during the current turn.", attunement : true, action : [["bonus action", ""]] } MagicItemsList["enhanced arcane focus, +1 or +2"] = { name : "Enhanced Arcane Focus, +1 or +2", nameTest : /^(?=.*enhanced)(?=.*(arcane focus|rod|wand|staff)).*$/i, source : [["E:RLW", 62], ["T", 21]], type : "wondrous item", description : "While I am holding this arcane focus (rod, staff, or wand), I gain a +1 bonus to spell attack rolls (or +2 if the artificer that created it is level 10 or higher). In addition, I ignore half cover when making a spell attack.", descriptionFull : "While holding this rod, staff, or wand, a creature gains a +1 bonus to spell attack rolls. In addition, the creature ignores half cover when making a spell attack.\n The bonus increases to +2 when it is created by someone with 10 levels or more in the artificer class.", attunement : true, weight : 1, prerequisite : "Requires attunement by a spellcaster", prereqeval : function(v) { return v.isSpellcaster; }, choices : ["+1 to spell attacks", "+2 to spell attacks (artificer level 10+)"], "+1 to spell attacks" : { name : "Enhanced Arcane Focus +1", nameTest : /^(?=.*enhanced)(?=.*(arcane focus|rod|wand|staff))(?=.*\+1)(?!.*\+2).*$/i, description : "While I am holding this arcane focus (rod, staff, or wand), I gain a +1 bonus to spell attack rolls and I ignore half cover when making a spell attack.", calcChanges : { spellCalc : [ function (type, spellcasters, ability) { if (type == "attack") return 1; }, "I gain a +1 bonus to spell attack rolls." ] } }, "+2 to spell attacks (artificer level 10+)" : { name : "Enhanced Arcane Focus +2", nameTest : /^(?=.*enhanced)(?=.*(arcane focus|rod|wand|staff))(?!.*\+1)(?=.*\+2).*$/i, description : "While I am holding this arcane focus (rod, staff, or wand), I gain a +2 bonus to spell attack rolls and I ignore half cover when making a spell attack.", calcChanges : { spellCalc : [ function (type, spellcasters, ability) { if (type == "attack") return 2; }, "I gain a +2 bonus to spell attack rolls." ] } } } MagicItemsList["radiant weapon"] = { name : "Radiant Weapon", nameTest : "Radiant", source : [["E:RLW", 62], ["T", 22]], type : "weapon (any)", description : "This item adds a +1 on its to hit and damage, has 4 charges, and regains 1d4 at dawn. As a bonus action, I can have it start/stop shedding light, bright in 30 ft, dim in another 30 ft. As a reaction if hit by an attack, I can use 1 charge to blind the attacker until the end of its next turn unless it makes a Con save (my spell DC).", descriptionFull : "This magic weapon grants a +1 bonus to attack and damage rolls made with it. While holding it, the wielder can take a bonus action to cause it to shed bright light in a 30-foot radius and dim light for an additional 30 feet. The wielder can extinguish the light as a bonus action.\n The weapon has 4 charges. As a reaction immediately after being hit by an attack, the wielder can expend 1 charge and cause the attacker to be blinded until the end of the attacker's next turn, unless the attacker succeeds on a Constitution saving throw against your spell save DC. The weapon regains 1d4 expended charges daily at dawn.", attunement : true, usages : 4, recovery : "dawn", additional : "blind attacker; regains 1d4", action : [["bonus action", " (start/stop light)"], ["reaction", " (1 charge; after hit)"]], chooseGear : { type : "weapon", prefixOrSuffix : "suffix", descriptionChange : ["replace", "weapon"] }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && !v.isSpell && (/radiant/i).test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + 'Reaction to blind attacker'; } }, 'If I include the word "Radiant" in the name of a weapon, it will be treated as the magic weapon Radiant Weapon. It has +1 to hit and damage and can be used to shed light and to blind an attacker.' ], atkCalc : [ function (fields, v, output) { if (v.isMeleeWeapon && !v.isSpell && (/radiant/i).test(v.WeaponTextName)) { output.magic = v.thisWeapon[1] + 1; } } ] } } MagicItemsList["repeating shot"] = { name : "Repeating Shot", source : [["E:RLW", 62], ["T", 22], ["UA:A3", 13]], type : "weapon (any with ammunition)", description : "When I use this magic weapon to make a ranged attack, it magically produces one piece of ammunition and grants a +1 bonus to its attack and damage rolls. Thus, it doesn't require ammunition and ignores the loading property if it has it. The produced ammunition vanishes once it hits or misses a target.", descriptionFull : "This magic weapon grants a +1 bonus to attack and damage rolls made with it when it's used to make a ranged attack, and it ignores the loading property if it has it.\n If you load no ammunition in the weapon, it produces its own, automatically creating one piece of magic ammunition when you make a ranged attack with it. The ammunition created by the weapon vanishes the instant after it hits or misses a target.", attunement : true, chooseGear : { type : "weapon", prefixOrSuffix : "suffix", descriptionChange : ["replace", "weapon"], excludeCheck : function (inObjKey, inObj) { return !(/ammunition/i).test(inObj.description); } }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && !v.isSpell && (/^(?=.*repeating shot)(?=.*ammunition).*$/i).test(v.WeaponText)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, '').replace(/(;|,)? ?loading/i, ''); } }, 'If I include the words "Repeating Shot" in the name of a weapon with the ammunition property, it will be treated as the magic weapon Repeating Shot. It has +1 to hit and damage and produces its own ammunition, thus its loading property is removed if it has it.' ], atkCalc : [ function (fields, v, output) { if ((/^(?=.*repeating shot)(?=.*ammunition).*$/i).test(v.WeaponText) && !v.isSpell) { output.magic = v.thisWeapon[1] + 1; } }, '' ] } } MagicItemsList["repulsion shield"] = { name : "Repulsion Shield", source : [["E:RLW", 63], ["T", 23]], type : "shield", description : "I gain an additional +1 bonus to Armor Class while wielding this shield. The shield has 4 charges and regains 1d4 expended charges daily at dawn. As a reaction immediately after being hit by a melee attack, I can expend 1 charge to push the attacker up to 15 ft away.", descriptionFull : "A creature gains a +1 bonus to Armor Class while wielding this shield.\n The shield has 4 charges. While holding it, the wielder can use a reaction immediately after being hit by a melee attack to expend 1 of the shield's charges and push the attacker up to 15 feet away. The shield regains 1d4 expended charges daily at dawn.", weight : 6, attunement : true, usages : 4, additional : "regains 1d4", recovery : "dawn", action : [["reaction", " (1 charge)"]], shieldAdd : ["Repulsion Shield", 3, 6] } MagicItemsList["returning weapon"] = { name : "Returning Weapon", nameTest : "Returning", source : [["E:RLW", 63], ["T", 23], ["UA:A3", 14], ["UA:A2", 10]], type : "weapon (any thrown)", description : "This magic weapon grants a +1 bonus to attack and damage rolls I make with it. It returns to my hand immediately after I use it to make a ranged attack.", descriptionFull : "This magic weapon grants a +1 bonus to attack and damage rolls made with it, and it returns to the wielder's hand immediately after it is used to make a ranged attack.", chooseGear : { type : "weapon", prefixOrSuffix : "suffix", descriptionChange : ["replace", "weapon"], excludeCheck : function (inObjKey, inObj) { return !/\bthrown\b/i.test(inObj.description); } }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && v.isThrownWeapon && /returning/i.test(v.WeaponText)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + 'Returns immediately after ranged attack'; } }, 'If I include the word "Returning" in the name of a thrown weapon, it will be treated as the magic weapon Returning Weapon. It has +1 to hit and damage and returns to my hand immediately after I use it to make a ranged attack.' ], atkCalc : [ function (fields, v, output) { if (v.isThrownWeapon && /returning/i.test(v.WeaponText)) { output.magic = v.thisWeapon[1] + 1; } }, '' ] } } } // dupl_end // New Artificer Infusions AddFeatureChoice(ClassList.artificer.features["infuse item"], true, "Arcane Propulsion Armor (prereq: level 14 artificer)", { name : "Arcane Propulsion Armor", source : [["T", 20]], description : desc([ "The armor replaces any missing limbs of the wearer and can't be removed against its will", "It increases the wearer's walking speed by 5 ft; Its gauntlet can be used as melee weapons" ]), additional : "suit of armor; requires attunement", prereqeval : function(v) { return classes.known.artificer.level >= 14; }, magicitemsAdd : ["Arcane Propulsion Armor"] }); MagicItemsList["arcane propulsion armor"] = { name : "Arcane Propulsion Armor", nameTest : /arcane.propulsion.*armou?r/i, source : [["T", 20]], type : "armor (light, medium, or heavy)", descriptionFull : "The wearer of this armor gains these benefits:\n \u2022 The wearer's walking speed increases by 5 feet.\n \u2022 The armor includes gauntlets, each of which is a magic melee weapon that can be wielded only when the hand is holding nothing. The wearer is proficient with the gauntlets, and each one deals 1d8 force damage on a hit and has the thrown property, with a normal range of 20 feet and a long range of 60 feet. When thrown, the gauntlet detaches and flies at the attack's target, then immediately returns to the wearer and reattaches.\n \u2022 The armor can't be removed against the wearer's will.\n \u2022 If the wearer is missing any limbs, the armor replaces those limbs\u2014hands, arms, feet, legs, or similar appendages. The replacements function identically to the body parts they replace.", description : "This armor replaces any missing limbs, increases my walking speed by 5 ft, and can't be removed against my will. I can use either empty-handed gauntlet as a proficient melee weapon with the thrown property. After a throwing attack with a gauntlet, it returns and reattaches immediately.", attunement : true, chooseGear : { type : "armor", prefixOrSuffix : ["between", "Arcane Propulsion", "Armor"], descriptionChange : ["prefix", "armor"], itemName1stPage : ["suffix", "Arcane Propulsion"] }, speed : { walk : { spd : "+5", enc : "+5" } }, weaponOptions : [{ regExpSearch : /^(?=.*arcane)(?=.*propulsion)(?=.*gauntlet).*$/i, name : "Arcane Propulsion Gauntlets", source : [["T", 20]], ability : 1, type : "AlwaysProf", damage : [1, 8, "force"], range : "Melee, 20/60 ft", description : "Thrown; Returns immediately after thrown", abilitytodamage : true, selectNow : true }] } AddFeatureChoice(ClassList.artificer.features["infuse item"], true, "Armor of Magical Strength", { name : "Armor of Magical Strength", source : [["T", 20]], description : desc([ "The armor has 6 charges, regaining 1d6 expended charges daily at dawn", "As a reaction when being knocked prone, the wearer can use 1 charge to not be prone", "When making a Str check/save, the wearer can use 1 charge to add its Int mod to the roll" ]), additional : "suit of armor; requires attunement", magicitemsAdd : ["Armor of Magical Strength"] }); MagicItemsList["armor of magical strength"] = { name : "Armor of Magical Strength", nameTest : "of Magical Strength", source : [["T", 20]], type : "armor (light, medium, or heavy)", descriptionFull : "This armor has 6 charges. The wearer can expend the armor's charges in the following ways:\n \u2022 When the wearer makes a Strength check or a Strength saving throw, it can expend 1 charge to add a bonus to the roll equal to its Intelligence modifier.\n \u2022 If the creature would be knocked prone, it can use its reaction to expend 1 charge to avoid being knocked prone.\nThe armor regains 1d6 expended charges daily at dawn.", description : "This armor has 6 charges and regains 1d6 expended charges daily at dawn. As a reaction when I would be knocked prone, I can expend 1 charge to avoid being knocked prone. When I make a Strength check or Strength saving throw, I can expend 1 charge to add my Intelligence modifier to the roll.", attunement : true, action : [["reaction", ""]], chooseGear : { type : "armor", prefixOrSuffix : "prefix" }, usages : 6, recovery : "dawn", additional : "regains 1d6" }; AddFeatureChoice(ClassList.artificer.features["infuse item"], true, "Helm of Awareness (prereq: level 10 artificer)", { name : "Helm of Awareness", source : [["T", 21], ["UA:SP3", 3]], description: desc("The wearer has advantage on Initiative rolls and can't be surprised while not incapacitated"), additional : "helmet; requires attunement", prereqeval : function(v) { return classes.known.artificer.level >= 10; }, magicitemsAdd : ["Helm of Awareness"] }); MagicItemsList["helm of awareness"] = { name : "Helm of Awareness", source : [["T", 21], ["UA:SP3", 3]], type : "wondrous item", description : "While wearing this helmet, I have advantage on initiative rolls. In addition, I can't be surprised, provided I'm not incapacitated.", descriptionFull : "While wearing this helmet, a creature has advantage on initiative rolls. In addition, the wearer can't be surprised, provided it isn't incapacitated.", attunement : true, advantages : [["Initiative", true]], savetxt : { immune : ["surprised"] } }; AddFeatureChoice(ClassList.artificer.features["infuse item"], true, "Mind Sharpener", { name : "Mind Sharpener", source : [["T", 22]], description: desc("The wearer can use its reaction to ignore a failed Con save to maintain concentration"), additional : "suit of armor or robes", magicitemsAdd : ["Mind Sharpener"] }); MagicItemsList["mind sharpener"] = { name : "Mind Sharpener", source : [["T", 22]], descriptionFull : "The infused item can send a jolt to the wearer to refocus their mind. The item has 4 charges. When the wearer fails a Constitution saving throw to maintain concentration on a spell, the wearer can use its reaction to expend 1 of the item's charges to succeed instead. The item regains 1d4 expended charges daily at dawn.", description : "This magic armor or robes can send a jolt to refocus my mind. It has 4 charges and regains 1d4 expended charges daily at dawn. As a reaction when I fail a Constitution saving throw to maintain concentration on a spell, I can expend 1 charge to succeed instead.", action : [["reaction", ""]], usages : 4, recovery : "dawn", additional : "regains 1d4", choices : ["Mind Sharpener Armor", "Mind Sharpener Robes"], choicesNotInMenu : true, "mind sharpener armor" : { name : "Mind\u200A Sharpener", type : "armor (light, medium, or heavy)", description : "This magic armor can send a jolt to refocus my mind. It has 4 charges and regains 1d4 expended charges daily at dawn. As a reaction when I fail a Constitution saving throw to maintain concentration on a spell, I can expend 1 charge to succeed instead.", chooseGear : { type : "armor", prefixOrSuffix : "brackets", itemName1stPage : ["suffix", "Mind Sharpener"], descriptionChange : ["prefix", "armor"] } }, "mind sharpener robes" : { name : "Mind Sharpener (Robes)", type : "wondrous item", description : "These magic robes can send a jolt to refocus my mind. It has 4 charges and regains 1d4 expended charges daily at dawn. As a reaction when I fail a Constitution saving throw to maintain concentration on a spell, I can expend 1 charge to succeed instead." } }; AddFeatureChoice(ClassList.artificer.features["infuse item"], true, "Spell-Refueling Ring (prereq: level 6 artificer)", { name : "Spell-Refueling Ring", source : [["T", 23]], description: desc("As an action once per dawn, this ring's wearer can recover one 3rd-level or lower spell slot"), additional : "ring; requires attunement", prereqeval : function(v) { return classes.known.artificer.level >= 6; }, magicitemsAdd : ["Spell-Refueling Ring"] }); MagicItemsList["spell-refueling ring"] = { name : "Spell-Refueling Ring", source : [["T", 23]], type : "ring", descriptionFull : "While wearing this ring, the creature can recover one expended spell slot as an action. The recovered slot can be of 3rd level or lower. Once used, the ring can't be used again until the next dawn.", description : "As an action, I can activate this magic ring to recover one expended spell slot. The recovered slot can be of 3rd level or lower. Once used, the ring can't be used again until the next dawn.", attunement : true, action : [["action", ""]], usages : 1, recovery : "dawn" }; // Add the Armorer specialism (but after all other scripts, so that all armour options are present) RunFunctionAtEnd(function () { var TCoE_Artificer_Subclass_Armorer = AddSubClass("artificer", "armorer", { regExpSearch : /^(?=.*armou?rer)(?!.*wizard).*$/i, subname : "Armorer", fullname : "Armorer", source : [["T", 15]], attacks : [1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], features : { "subclassfeature3" : { name : "Tools of the Trade", source : [["T", 15]], minlevel : 3, description : " [proficient with heavy armor \u0026 smith's tools]", toolProfs : ["Smith's tools"], armorProfs : [false, false, true, false], spellcastingExtra : ["magic missile", "thunderwave", "mirror image", "shatter", "hypnotic pattern", "lightning bolt", "fire shield", "greater invisibility", "passwall", "wall of force"] }, "subclassfeature3.1" : { name : "Arcane Armor", source : [["T", 15]], minlevel : 3, description : " [reverts back if I die or don another armor]" + desc([ "As an action, I can use smith's tool to turn an armor I'm wearing into arcane armor", "As an action, I can don or doff it; As a bonus action, I can deploy or retract its helmet", "It can't be removed against my will, covers all my limbs, and even replaces missing limbs", "I ignore the Strength requirement of arcane armor and can use it as a spellcasting focus" ]), action : [["action", " (create/don/doff)"], ["bonus action", " (retract/deploy helmet)"]] }, "subclassfeature3.2" : { name : "Armor Model", source : [["T", 16]], minlevel : 3, description : desc([ "When I finish a rest, I can use smith's tools to change the model of my arcane armor", 'Select a model using the "Choose Feature" button; See "Notes" page for features of each' ]), additional : "also see notes page", toNotesPage : [{ name : "Arcane Armor Model Features", note : desc([ "I can customize my arcane armor to the guardian or infiltrator model whenever I finish a short or long rest, provided I have smith's tools in hand.", "Each model includes a special weapon. When I attack with that weapon, I can use my Intelligence modifier, instead of Strength or Dexterity, for the attack and damage rolls." ]) }, { name : "Guardian Arcane Armor", popupName : "Guardian Arcane Armor Features", note : desc([ "\u2022 Thunder Gauntlets: Each of the armor's gauntlets counts as a simple melee weapon while I'm not holding anything in it, and it deals 1d8 thunder damage on a hit. A creature hit by the gauntlet has disadvantage on attack rolls against targets other than me until the start of me next turn, as the armor magically emits a distracting pulse when the creature attacks someone else.", "\u2022 Defensive Field: As a bonus action, I can gain temporary hit points equal to my artificer level, replacing any temporary hit points I already have. I lose these temporary hit points if I doff the armor. I can use this bonus action a number of times equal to my proficiency bonus, and I regain all expended uses when I finish a long rest." ]), amendTo : "Arcane Armor Model Features" }, { name : "Infiltrator Arcane Armor", popupName : "Infiltrator Arcane Armor Features", note : desc([ "\u2022 Lightning Launcher: A gemlike node on one of the armored fists or on the chest (my choice) counts as a simple ranged weapon, with a normal range of 90 ft and a long range of 300 ft. It deals 1d6 lightning damage on a hit. Once on each of my turns when I hit a creature with it, I can deal an extra 1d6 lightning damage to that target.", "\u2022 Powered Steps: My walking speed increases by 5 feet.", "\u2022 Dampening Field: I have advantage on Dexterity (Stealth) checks. If the armor normally imposes disadvantage on such checks, the advantage and disadvantage cancel each other, as normal." ]), amendTo : "Arcane Armor Model Features" }], choices : [], choiceDependencies : [{ feature : "subclassfeature15", choiceAttribute : true }], weaponOptions : [{ regExpSearch : /^(?=.*thunder)(?=.*gauntlet).*$/i, name : "Thunder Gauntlets", source : [["T", 16]], ability : 4, type : "Simple", damage : [1, 8, "thunder"], range : "Melee", description : "Target hit disadv. on attacks vs. others than me until my next turn starts", abilitytodamage : true, monkweapon : true }, { regExpSearch : /^(?=.*lightning)(?=.*launcher).*$/i, name : "Lightning Launcher", source : [["T", 16]], ability : 4, type : "Simple", damage : [1, 6, "lightning"], range : "90/300 ft", description : "Once per turn on hit, +1d6 lightning damage", abilitytodamage : true }], // Do this in the parent object, so that it is always visible and people printing the sheet can more easily switch between the two models // Also, the armor model can be changed on a short rest, but the limited feature only resets on a long rest, so shouldn't be removed action : [["bonus action", "Defensive Field (Guardian Model)"]], extraLimitedFeatures : [{ name : "Defensive Field (Guardian Model)", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }] }, "subclassfeature9" : { name : "Armor Modifications", source : [["T", 17]], minlevel : 9, description : desc([ "Arcane armor now counts as armor, boots, helmet, and a weapon for holding infusions", "Each can hold one infusion; The infusions remain when I change the armor's model" ]), additional : "+2 infused items if" + (typePF ? "" : " used") + " on arcane armor", }, "subclassfeature15" : { name : "Perfected Armor", source : [["T", 17]], minlevel : 15, description : desc([ 'My armor gets additional features, based on the model; Use "Choose Feature" to select it', "The guardian gets the ability to pull a creature closer as a reaction and make an attack", "The infiltrator gets an upgrade to its lightning launcher weapon attack" ]), toNotesPage : [{ name : "Guardian Perfected Armor Features", note : desc([ "Tinkering with my armor's energy system leads me to discover a powerful pulling force.", "As a reaction when a Huge or smaller creature I can see ends its turn within 30 ft of me, I can magically force the creature to make a Strength saving throw against my spell save DC, pulling the creature up to 30 ft toward me to an unoccupied space. If I pull the target to a space within 5 ft of me, I can make a melee weapon attack against it as part of this reaction.", "I can use this reaction a number of times equal to my proficiency bonus. I regain all expended uses of it when I finish a long rest." ]), amendTo : "Arcane Armor Model Features" }, { name : "Infiltrator Perfected Armor Features", note : desc([ "Any creature that takes lightning damage from my Lightning Launcher glimmers with magical light until the start of my next turn.", "The glimmering creature sheds dim light in a 5-ft radius, and it has disadvantage on attack rolls against me, as the light jolts it if it attacks me. In addition, the next attack roll against it has advantage, and if that attack hits, the target takes an extra 1d6 lightning damage." ]), amendTo : "Arcane Armor Model Features" }], "guardian" : { name : "Perfected Armor: Guardian", additional: "Proficiency Bonus per long rest", description : desc([ "As a reaction when a creature I can see ends its turn in 30 ft, I have it make a Str save", "If it is Huge or smaller and fails, I pull it up to 30 ft towards me to an unoccupied space", "If I pull it within 5 ft, I can make a melee weapon attack vs. it as part of this reaction" ]) }, "infiltrator" : { name : "Perfected Armor: Infiltrator", description : desc([ "Those hit by my lightning launcher shed 5-ft radius dim light until my next turn starts", "The light gives the target disadvantage on attacks rolls made against me", "Also, the next attack against it has advantage and deals an extra 1d6 lightning damage" ]) }, // Do these in the parent object, so that they are always visible and people printing the sheet can more easily switch between the two models // Also, the armor model can be changed on a short rest, but the limited feature only resets on a long rest, so shouldn't be removed action : [["reaction", "Perfected Armor: Guardian"]], extraLimitedFeatures : [{ name : "Perfected Armor: Guardian", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }] } } }); var itsFea = ClassSubList[TCoE_Artificer_Subclass_Armorer].features["subclassfeature3.2"]; var guardianTxt = desc([ "Both fists are Thunder Gauntlets, simple melee weapons that distract those hit by it", "As a bonus action, I can activate a defensive shield to gain my artificer level in temp HP" ]) var guardianAdditional = levels.map(function (n) { return n + " temp HP, Prof B. per long rest"; }) var infiltratorTxt = desc([ "+5 ft walking speed; Gemlike node in fist/chest is a ranged weapon, Lightning Launcher", "It gives me advantage on Dexterity (Stealth) checks" ]) var prereqFunc = function(v) { var sParsed = ParseArmor(v.choice.replace(/(Guardian|Infiltrator) arcane /i, '')); return sParsed && testSource(sParsed, ArmourList[sParsed], "armorExcl") ? "skip" : true; }; for (var armor in ArmourList) { var anArm = ArmourList[armor]; if (anArm.isMagicArmor || !anArm.weight || (CurrentVars.extraArmour && CurrentVars.extraArmour[armor])) continue; // Add the Guardian variant of the armor var gArmName = "Guardian Arcane " + anArm.name; itsFea[gArmName.toLowerCase()] = { name : (typePF ? "Armor " : "") + "Model: Guardian " + anArm.name, submenu : "Guardian Arcane Armor", description : guardianTxt, additional : guardianAdditional, armorAdd : { select : gArmName, options : [gArmName] }, weaponsAdd : { select : ["Thunder Gauntlets"] }, prereqeval : prereqFunc, dependentChoices : "guardian" } // And now add the Infiltrator variant of the armor var iArmName = "Infiltrator Arcane " + anArm.name; itsFea[iArmName.toLowerCase()] = { name : "Armor Model: Infiltrator " + anArm.name, submenu : "Infiltrator Arcane Armor", description : infiltratorTxt + (anArm.stealthdis ? ", cancelling out the disadv. it imposes" : ""), speed : { walk : {spd : "+5", enc : "+5" } }, armorAdd : { select : iArmName, options : [iArmName] }, weaponsAdd : { select : ["Lightning Launcher"] }, prereqeval : prereqFunc, advantages : [["Stealth", true]], dependentChoices : "infiltrator" } // Lastly push both choices to the array itsFea.choices.push(gArmName, iArmName); } }); // >>>>>>>>>>>>>>>>>>>>>>>>> // // >>> Barbarian Options >>> // // >>>>>>>>>>>>>>>>>>>>>>>>> // // Barbarian Optional Class Features AddFeatureChoice(ClassList.barbarian.features["danger sense"], true, "Primal Knowledge", { name : "Primal Knowledge", extraname : "Optional Barbarian 3", source : [["T", 24]], description : desc([ "At 3rd level and again at 10th level I gain proficiency with one skill of my choice", "I can choose from Animal Handling, Athletics, Intimidation, Nature, Perception, Survival" ]), skillstxt : "Choose one from Animal Handling, Athletics, Intimidation, Nature, Perception and Survival.\nChoose another from this list at 10th level", prereqeval : function (v) { return classes.known.barbarian.level >= 3 ? true : "skip"; } }, "Optional 3rd-level barbarian features"); AddFeatureChoice(ClassList.barbarian.features["feral instinct"], true, "Instinctive Pounce", { name : "Instinctive Pounce", extraname : "Optional Barbarian 7", source : [["T", 24]], description : desc([ "As part of the bonus action I use to enter rage, I can move up to half my speed" ]), action : [["bonus action", "Rage (start & half move / end)", "Rage (start/end)"]] }, "Optional 7th-level barbarian features"); // Barbarian Subclasses AddSubClass("barbarian", "path of the beast", { regExpSearch : /^(?=.*\bbeast\b)(?=.*(warrior|marauder|barbarian|viking|(norse|tribes?|clans?)(wo)?m(a|e)n)).*$/i, subname : "Path of the Beast", subnameShort: "Beast", source : [["T", 24]], abilitySave : 3, features : { "subclassfeature3" : { name : "Form of the Beast", source : [["T", 24]], minlevel : 3, description : desc([ "When I enter my rage, I can transform to gain a bite, tail, or claws attack for that rage", "On a hit with the bite attack once on each of my turns, I can heal my Prof Bonus in HP", "This only works if I have less than half my hit points when I hit with this bite attack", "With the claws I can make one extra attack when I attack with it in my Attack action", "As a reaction with the tail when I'm hit, I can add 1d8 to my AC for that attack", "This only works if the hit is from an attack roll made a creature I can see within 30 ft" ]), weaponOptions : [{ regExpSearch : /^(?=.*(bestial|beast))(?=.*bite).*$/i, name : "Bestial Bite", source : [["T", 24]], ability : 1, type : "Natural", damage : [1, 8, "piercing"], range : "Melee", description : "Only in rage; On a hit once on my turn, regain Prof Bonus in HP (if below 1/2 HP)", abilitytodamage : true, bestialNaturalWeapon : true, selectNow : true }, { regExpSearch : /^(?=.*(bestial|beast))(?=.*claws?).*$/i, name : "Bestial Claws", source : [["T", 24]], ability : 1, type : "Natural", damage : [1, 6, "slashing"], range : "Melee", description : "Only in rage; Extra attack if used as part of Attack action", abilitytodamage : true, bestialNaturalWeapon : true, selectNow : true }, { regExpSearch : /^(?=.*(bestial|beast))(?=.*tail).*$/i, name : "Bestial Tail", source : [["T", 25]], ability : 1, type : "Natural", damage : [1, 8, "piercing"], range : "Melee", description : "Reach; Only in rage", abilitytodamage : true, bestialNaturalWeapon : true, selectNow : true }], additional : levels.map(function(n) { return n < 6 ? "" : "chosen weapon counts as magical"; }), action : [["reaction", "Bestial Tail"]] }, "subclassfeature6" : { name : "Bestial Soul", source : [["T", 25]], minlevel : 6, description : desc([ "When I finish a short rest, I can choose one of the following benefits until my next rest:", " \u2022 Swimming speed equal to my walking speed and I can breathe underwater", " \u2022 Climb speed (same as walking) and no check to climb difficult surfaces or upside down", " \u2022 Once per turn when I jump, I can extend it by the result of an Athletics check in feet" ]), calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.bestialNaturalWeapon && !v.thisWeapon[1] && !v.theWea.isMagicWeapon && !(/counts as( a)? magical/i).test(fields.Description)) { fields.Description += (fields.Description ? '; ' : '') + 'Counts as magical'; }; }, "The natural melee weapon that I gain from Form of the Beast count as magical for the purpose of overcoming resistance and immunity to nonmagical attacks and damage." ] } }, "subclassfeature10" : { name : "Infectious Fury", source : [["T", 25]], minlevel : 10, description : desc([ "In rage, when I hit a creature with my natural weapon, I can have it make a Wis save", "If it fails (DC 8 + my Prof Bonus + my Con mod) it suffers one effect of my choice:", " \u2022 It uses its reaction to make a melee attack against one creature I can see of my choice", " \u2022 It takes 2d12 psychic damage" ]), usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature14" : { name : "Call the Hunt", source : [["T", 25]], minlevel : 14, description : desc([ "When I enter rage, I can choose my Con mod of willing creatures I can see within 30 ft", "Once on each of their turns, if they hit an attack, they can have it deal +1d6 damage", "This lasts as long as I rage; I gain 5 temporary HP per creature that accepts this benefit" ]), usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" } } }); AddSubClass("barbarian", "path of wild magic", { regExpSearch : /^(?=.*\bwild\b)(?=.*\bmagic\b).*$/i, subname : "Path of Wild Magic", subnameShort: "Wild Magic", source : [["T", 25]], abilitySave : 3, features : { "subclassfeature3" : { name : "Magic Awareness", source : [["T", 25]], minlevel : 3, description : desc([ "As an action, I can open my awareness to the presence of concentrated magic", "Until my next turn ends, I know the location of any spell or magic item within 60 ft", "I also learn the school of magic of a spell; This doesn't reveal anything behind total cover" ]), usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus')", recovery : "long rest", action : [["action", ""]] }, "subclassfeature3.1" : { name : "Wild Surge", source : [["T", 25]], minlevel : 3, description: desc("Whenever I enter my rage, I roll on the Wild Magic table (see Notes page)"), toNotesPage : [{ name : "Wild Magic Table", source : [["T", 26]], note : [ "The magical energy roiling inside me sometimes erupts from me. Whenever I enter my rage, I have to roll on the table below to see what happens.", "If the effect calls for a saving throw, the DC is equal to 8 + my proficiency bonus + my Constitution modifier.\n", "d8\tEFFECT", " 1\tShadowy tendrils lash around me. Each creature of my choice that I can see within 30 ft of me must succeed on a Constitution saving throw or take 1d12 necrotic damage. I also gain 1d12 temporary hit points.", " 2\tI teleport up to 30 ft to an unoccupied space I can see. Until my rage ends, I can use this effect again on each of my turns as a bonus action.", " 3\tAn intangible spirit, which looks like a flumph or a pixie (my choice), appears within 5 ft of one creature of my choice that I can see within 30 ft of me. At the end of the current turn, the spirit explodes, and each creature within 5 ft of it must succeed on a Dexterity saving throw or take 1d6 force damage. Until my rage ends, I can use this effect again, summoning another spirit, on each of my turns as a bonus action.", " 4\tMagic infuses one weapon of my choice that I am holding. Until my rage ends, the weapon's damage type changes to force, and it gains the light and thrown properties, with a normal range of 20 ft and a long range of 60 ft. If the weapon leaves my hand, the weapon reappears in my hand at the end of the current turn.", " 5\tWhenever a creature hits me with an attack roll before my rage ends, that creature takes 1d6 force damage, as magic lashes out in retribution.", " 6\tUntil my rage ends, I am surrounded by multicolored, protective lights; I gain a +1 bonus to AC, and while within 10 ft of me, my allies gain the same bonus.", " 7\tFlowers and vines temporarily grow around me; until my rage ends, the ground within 15 ft of me is difficult terrain for my enemies.", " 8\tA bolt of light shoots from my chest. Another creature of my choice that I can see within 30 ft of me must succeed on a Constitution saving throw or take 1d6 radiant damage and be blinded until the start of my next turn. Until my rage ends, I can use this effect again on each of my turns as a bonus action." ] }] }, "subclassfeature6" : { name : "Bolstering Magic", source : [["T", 26]], minlevel : 6, description : desc([ "As an action, I can touch a creature or myself and confer one of the following benefits:", " \u2022 For 10 minutes, they can add 1d3 to any attack roll and ability check", " \u2022 Roll 1d3. They regain an expended spell slot of a level equal to or lower than the roll", "A creature that receives the second benefit can't receive it again until after a long rest" ]), usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus')", recovery : "long rest", action : [["action", ""]] }, "subclassfeature10" : { name : "Unstable Backlash", source : [["T", 26]], minlevel : 10, description : desc([ "As a reaction in rage when taking damage or failing a save, I can lash out with magic", "I roll on the Wild Magic table and immediately apply the roll, replacing my current effect" ]), action : [["reaction", " (in rage on damage/save fail)"]] }, "subclassfeature14" : { name : "Controlled Surge", source : [["T", 26]], minlevel : 14, description : desc([ "Whenever I roll on the Wild Magic table, I can roll two dice and choose which to use", "If I roll the same on both dice, I can instead choose any effect on the Wild Magic table" ]) } } }); // >>>>>>>>>>>>>>>>>>>> // // >>> Bard Options >>> // // >>>>>>>>>>>>>>>>>>>> // // Bard Optional Class Features AddFeatureChoice(ClassList.bard.features.spellcasting, true, "Additional Bard Spells", { name : "Additional Bard Spells", source : [["T", 27]], extraname : "Optional Bard 1", description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "bard" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["color spray", "command", "aid", "enlarge/reduce", "mirror image", "mass healing word", "slow", "phantasmal killer", "rary's telepathic bond", "heroes' feast", "prismatic spray", "antipathy/sympathy", "prismatic wall"]); }, "This optional class feature expands the spell list of the bard class with the following spells (spell level in brackets): Color Spray (1), Command (1), Aid (2), Enlarge/Reduce (2), Mirror Image (2), Mass Healing Word (3), Slow (3), Phantasmal Killer (4), Rary's Telepathic Bond (5), Heroes' Feast (6), Prismatic Spray (7), Antipathy/Sympathy (8), and Prismatic Wall (9)." ] } }, "Optional 1st-level bard features"); AddFeatureChoice(ClassList.bard.features["jack of all trades"], true, "Magical Inspiration", { name : "Magical Inspiration", extraname : "Optional Bard 2", source : [["T", 27]], description : desc([ "A bardic inspiration die recipient can also use it when casting a damaging or healing spell", "They can expend the die and add it to healing or damage dealt to one target of the spell" ]) }, "Optional 2nd-level bard features"); AddFeatureChoice(ClassList.bard.features["song of rest"], true, "Bardic Versatility", { name : "Bardic Versatility", extraname : "Optional Bard 4", source : [["T", 28]], description : " [ASI = Ability Score Improvement]" + desc([ "Whenever I gain an ASI from the bard class, I can change one cantrip or expertise choice", "I can select another cantrip from the bard spell list or another skill I'm proficient with" ]), prereqeval : function (v) { return classes.known.bard.level >= 4 ? true : "skip"; } }, "Optional 4th-level bard features"); // Bard Subclasses AddSubClass("bard", "college of creation", { regExpSearch : /^(?=.*(college|bard|minstrel|troubadour|jongleur))(?=.*creation).*$/i, subname : "College of Creation", subnameShort: "Creation", source : [["T", 28]], features : { "subclassfeature3" : { name : "Mote of Potential", source : [["T", 28]], minlevel : 3, description : desc([ "Those who use my Bardic Inspiration die gain an extra bonus depending how they use it:", "\u2022 Ability check: Roll the die twice and choose which result to use", "\u2022 Attack roll: the target and others of my choice I can see in 5 ft must make a Con save", " If failed, they take the die roll in thunder damage; This uses my spell save DC", "\u2022 Saving throw: Grants temporary HP equal to the roll + my Cha mod (min 1 temp HP)" ]) }, "subclassfeature3.1" : { name : "Performance of Creation", source : [["T", 28]], minlevel : 3, description : levels.map(function (n) { if (n < 14) { var descr = [ "As an action, I create " + (n < 6 ? "a Medium" : "one Large") + " or smaller nonmagical item in an empty space in 10 ft", "It can't be worth more than " + (20 * n) + " gp; It lasts for my Proficiency Bonus in hours", "I can't have multiple, creating more makes the first one vanish", "I can do this once per long rest, or by expending a 2nd-level or higher spell slot (SS 2+)" ]; } else { var descr = [ "As an action, I create my Charisma mod of nonmagical items in an empty space in 10 ft", "One can be Huge, the rest Small or smaller; They last for my Proficiency Bonus in hours", "I can't have more than my Cha mod; If I create more, I get to choose which vanish", "I can do this once per long rest, or by expending a 2nd-level or higher spell slot (SS 2+)" ]; } return desc(descr); }), action : [["action", ""]], usages : 1, recovery : "long rest", altResource : "SS 2+" }, "subclassfeature6" : { name : "Animating Performance", source : [["T", 29]], minlevel : 6, description : desc([ "As an action, I can animate a Large or smaller nonmagical item I can see within 30 ft", "It is friendly and obeys my commands; It lasts for 1 hour, until it has 0 HP, or I die", "Unless I use a bonus action to command it, it only takes the Dodge action on its turn", "It can take reactions and move on its turn without commands; I can't have multiple", "When I use bardic inspiration, I can command the item as part of the same bonus action", 'It acts on my initiative, after me; See "Dancing Item" on a companion page for its stats', "I can do this once per long rest, or by expending a 3rd-level or higher spell slot (SS 3+)" ]), action : [["action", ""], ["bonus action", "Command Dancing Item"]], usages : 1, recovery : "long rest", altResource : "SS 3+", creaturesAdd : [["Dancing Item"]], creatureOptions : [{ name : "Dancing Item", source : [["T", 29]], size : 4, type : "Construct", alignment : "", ac : 16, hp : 25, hd : [], speed : "fly 30 ft (hover)", scores : [18, 14, 16, 4, 10, 6], damage_immunities : "poison, psychic", condition_immunities : "charmed, exhaustion, poisoned, frightened", passivePerception : 10, senses : "Darkvision 60 ft", languages : "understands the languages of its creator but can't speak", challengeRating : "1/2", proficiencyBonus : 2, proficiencyBonusLinked : true, attacksAction : 1, attacks : [{ name : "Force-Empowered Slam", ability : 6, damage : [1, 10, "force"], range : "Melee (5 ft)", modifiers : ["", "Prof"], abilitytodamage : false, useSpellMod : "bard" }], features : [{ name : "Variable Size", description : "The item animated can be Large or smaller." }, { name : "Creator", description : "The item obeys the commands of its creator and has the same proficiency bonus. It takes its turn immediately after its creator, on the same initiative count. It can move and take reactions on its own, but only takes the Dodge action on its turn unless its creator takes a bonus action to command it to take another action. If its creator is incapacitated, it can take any action, not just Dodge." }], actions : [{ name : "Immutable Form", description : "The item is immune to any spell or effect that would alter its form." }, { name : "Irrepressible Dance", description : "When any creature starts its turn within 10 ft of the item, the item can increase or decrease (its creator's choice) the walking speed of that creature by 10 ft until the end of the turn, provided the item isn't incapacitated." }], header : 'Animated', calcChanges : { hp : function (totalHD, HDobj, prefix) { if (!classes.known.bard) return; var brdLvl = classes.known.bard.level; var brdLvl5 = 5 * brdLvl; HDobj.alt.push(10 + brdLvl5); HDobj.altStr.push(" = 10 as a base\n + 5 \xD7 " + brdLvl + " from five times its creator's bard level (" + brdLvl5 + ")"); }, setAltHp : true } }] }, "subclassfeature14" : { name : "Creative Crescendo", source : [["T", 29]], minlevel : 14, description : " [enhances Performance of Creation]" } } }); // [dupl_start] reprints from Mythic Odysseys of Theros if (!SourceList.MOT) { AddSubClass("bard", "college of eloquence", { regExpSearch : /^(?=.*(college|bard|minstrel|troubadour|jongleur))(?=.*eloquence).*$/i, subname : "College of Eloquence", subnameShort: "Eloquence", source : [["T", 29], ["MOT", 28]], features : { "subclassfeature3" : { name : "Silver Tongue", source : [["T", 30], ["MOT", 28]], minlevel : 3, description: desc("When I make a Persuasion or Deception check, I can treat a roll of 9 or lower as a 10") }, "subclassfeature3.1" : { name : "Unsettling Words", source : [["T", 30], ["MOT", 28]], minlevel : 3, description : desc([ "As a bonus action, I expend a Bardic Inspiration use & choose a target I can see in 60 ft", "It subtracts my inspiration die from the next save it makes before my next turn starts" ]), action : [["bonus action", ""]] }, "subclassfeature6" : { name : "Unfailing Inspiration", source : [["T", 30], ["MOT", 28]], minlevel : 6, description: desc("When a creature adds my Bardic Inspiration die to a roll but fails, they can keep the die") }, "subclassfeature6.1" : { name : "Universal Speech", source : [["T", 30], ["MOT", 28]], minlevel : 6, description : desc([ "As an action, I can choose up to my Charisma modifier (min 1) creatures within 60 ft", "Those creatures magically understand any language I speak for an hour", "I can do this once per long rest, or by expending a 1st-level or higher spell slot (SS 1+)" ]), recovery : "long rest", usages : 1, altResource : "SS 1+", action : [["action", ""]] }, "subclassfeature14" : { name : "Infectious Inspiration", source : [["T", 30], ["MOT", 28]], minlevel : 14, description : desc([ "As a reaction when a creature uses my inspiration die and succeeds, I can inspire another", "I give a creature within 60 ft that can hear me an inspiration die without expending any" ]), action : [["reaction", ""]], usages : "Charisma modifier per ", usagescalc : "event.value = Math.max(1, What('Cha Mod'));", recovery : "long rest" } } }); } // dupl_end // >>>>>>>>>>>>>>>>>>>>>> // // >>> Cleric Options >>> // // >>>>>>>>>>>>>>>>>>>>>> // // Cleric Optional Class Features AddFeatureChoice(ClassList.cleric.features.spellcasting, true, "Additional Cleric Spells", { name : "Additional Cleric Spells", extraname : "Optional Cleric 1", source : [["T", 30]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "cleric" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["aura of vitality", "aura of life", "aura of purity", "sunbeam", "sunburst", "power word heal"]); }, "This optional class feature expands the spell list of the cleric class with the following spells (spell level in brackets): Aura of Vitality (3), Aura of Life (4), Aura of Purity (4), Sunbeam (6), Sunburst (8), and Power Word Heal (9)." ] } }, "Optional 1st-level cleric features"); AddFeatureChoice(ClassList.cleric.features["channel divinity"], true, "Harness Divine Power", { name : "Channel Divinity: Harness Divine Power", extraname : "Optional Cleric 2", source : [["T", 30]], description : desc([ "As a bonus action, I can expend a use of my channel divinity to regain one used spell slot", "The level of this spell slot can be no more than half my Proficiency Bonus (rounded up)", "I can only do this so many times per long rest, even if I have uses of channel divinity left" ]), action : [["bonus action", ""]], usages : levels.map(function(n) { return n < 3 ? "" : n < 6 ? 1 : n < 18 ? 2 : 3; }), recovery : "long rest" }, "Optional 2nd-level cleric features"); AddFeatureChoice(ClassList.cleric.features["turn undead"], true, "Cantrip Versatility", { name : "Cantrip Versatility", extraname : "Optional Cleric 4", source : [["T", 31]], description : " [ASI = Ability Score Improvement]\n Whenever I gain an ASI from the cleric class, I can change one cleric cantrip for another", prereqeval : function (v) { return classes.known.cleric.level >= 4 ? true : "skip"; } }, "Optional 4th-level cleric features"); // Cleric subclass alternative feature, so only run this after we are sure all subclasses have been added RunFunctionAtEnd(function() { for (var i = 0; i < ClassList.cleric.subclasses[1].length; i++) { var domain = ClassList.cleric.subclasses[1][i]; var objDomain = ClassSubList[domain]; if (!objDomain || !objDomain.features.subclassfeature8 || !(/divine strike|potent spellcasting/i).test(objDomain.features.subclassfeature8.name)) continue; CreateClassFeatureVariant(domain, "subclassfeature8", "Blessed Strikes", { name : "Blessed Strikes", source : [["T", 31]], description : desc([ "When my weapon attack or cantrip damages a creature, I can do +1d8 radiant damage", "Once I deal this extra damage, I can't do so again until the start of my next turn" ]), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && (v.isWeapon || (v.thisWeapon[3] && SpellsList[v.thisWeapon[3]].level === 0)) && /\d/.test(fields.Damage_Die)) { fields.Description += (fields.Description ? '; ' : '') + 'Once per round +1d8 radiant damage'; } }, "Once per round, when a creature takes damage from one of my spell or weapon attacks, I can also deal 1d8 radiant damage to the target." ] } }); } }); // Cleric Subclasses // [dupl_start] reprints from Guildmasters' Guide to Ravnica if (!SourceList.G) { AddSubClass("cleric", "order domain", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*order).*$/i, subname : "Order Domain", source : [["T", 31], ["G", 25]], spellcastingExtra : ["command", "heroism", "hold person", "zone of truth", "mass healing word", "slow", "compulsion", "locate creature", "commune", "dominate person"], features : { "subclassfeature1" : { name : "Bonus Proficiency", source : [["T", 32], ["G", 26]], minlevel : 1, description : desc("I gain proficiency with heavy armor, and either the Intimidation or Persuasion skill"), armorProfs : [false, false, true, false], skillstxt : "Choose one from Intimidation or Persuasion" }, "subclassfeature1.1" : { name : "Voice of Authority", source : [["T", 32], ["G", 26]], minlevel : 1, description : desc([ "Whenever I use a spell slot to cast a spell on an ally, it can use its reaction to attack", "The ally makes one weapon attack against a target of my choice that I can see", "If the spell targets multiple allies, I can choose which one can make the attack" ]) }, "subclassfeature2" : { name : "Channel Divinity: Order's Demand", source : [["T", 32], ["G", 26]], minlevel : 2, description : desc([ "As an action, all chosen targets in 30 ft that can see or hear me must make a Wis save", "If failed, it is charmed by me until the end of my next turn or it takes any damage", "Also, I can choose to have a charmed target drop what its holding when it fails its save" ]), action : [["action", ""]] }, "subclassfeature6" : { name : "Embodiment of the Law", source : [["T", 32], ["G", 26]], minlevel : 6, description : desc([ "When I cast an enchantment spell using a spell slot, I can reduce its casting time", "If the spell normally has a casting time of an action, I can now cast it as a bonus action" ]), usages : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest", calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { if (CurrentSpells[spName].refType == "class" && spellObj.school == "Ench" && spellObj.time == "1 a") { spellObj.time = "1a/bns" return true; }; }, "When I cast an enchantment spell using a spell slot that normally requires 1 action to cast, I can reduce its casting time to a bonus action." ] } }, "subclassfeature8" : { name : "Divine Strike", source : [["T", 32], ["G", 26]], minlevel : 8, description : desc("Once per turn, when I hit a creature with a weapon attack, I can do extra damage"), additional : levels.map(function (n) { if (n < 8) return ""; return "+" + (n < 14 ? 1 : 2) + "d8 psychic damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && v.isWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.cleric.level < 14 ? 1 : 2) + 'd8 psychic damage' + (classes.known.cleric.level < 17 ? '' : ' \u0026 again if hit by ally before my next turn'); } }, "Once per turn, I can have one of my weapon attacks that hit do extra psychic damage." ] } }, "subclassfeature17" : { name : "Order's Wrath", source : [["T", 32], ["G", 26]], minlevel : 17, description : desc([ "If I deal my Divine Strike damage to a creature, it is cursed until my next turn starts", "The next time it is hit by a weapon attack from my allies, it takes +2d8 psychic damage" ]) } } }); } // dupl_end AddSubClass("cleric", "peace domain", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*peace).*$/i, subname : "Peace Domain", source : [["T", 32]], spellcastingExtra : ["heroism", "sanctuary", "aid", "warding bond", "beacon of hope", "sending", "aura of purity", "otiluke's resilient sphere", "greater restoration", "rary's telepathic bond"], features : { "subclassfeature1" : { name : "Emboldening Bond", source : [["T", 33]], minlevel : 1, description : levels.map(function (n) { return desc([ "As an action, I can magically bond my Prof Bonus of willing creatures I can see in 30 ft", "I can be one of the bonded creatures; The bond lasts for 10 min or until I use this again", "While within " + (n < 17 ? 30 : 60) + " ft of another, a bonded target can add +1d4 to a save, attack, or check", "Each creature can add the +1d4 only once per turn" ]); }), action : [["action", ""]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature1.1" : { name : "Implement of Peace", description : desc("I gain proficiency in the Insight, Performance, or Persuasion skill (my choice)"), skillstxt : "Choose one from: Insight, Performance, or Persuasion" }, "subclassfeature2" : { name : "Channel Divinity: Balm of Peace", source : [["T", 33]], minlevel : 2, description : desc([ "As an action, I can move up to my speed without provoking opportunity attacks", "During this move, I can heal each creature that I come within 5 ft of once", "I restore a number of hit points equal to 2d6 + my Wisdom modifier (minimum 1 HP)" ]), action : [["action", ""]] }, "subclassfeature6" : { name : "Protective Bond", source : [["T", 33]], minlevel : 6, description : desc([ "My Emboldening Bond now also helps those bonded to protect each other if within range", "When one is about to take damage, another bonded can use its reaction to teleport closer", "They teleport to an empty space within 5 ft of the first and take all the damage instead", "From 17th-level, they count as having resistance for this damage, thus take only half" ]), additional : levels.map(function (n) { return n < 6 ? "" : "the bonded must be within " + (n < 17 ? 30 : 60) + " ft"; }) }, "subclassfeature8" : { name : "Potent Spellcasting", source : [["T", 33]], minlevel : 8, description : desc("I add my Wisdom modifier to the damage I deal with my cleric cantrips"), calcChanges : GenericClassFeatures["potent spellcasting"].calcChanges }, "subclassfeature17" : { name : "Expansive Bond", source : [["T", 33]], minlevel : 17, description : desc([ "Emboldening and Protective Bond work when the bonded are within 60 ft of each other", "Protective Bond now also grants resistance when used to take damage for another" ]) } } }); AddSubClass("cleric", "twilight domain", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*(twilight|transition)).*$/i, subname : "Twilight Domain", subnameShort: "Twilight", source : [["T", 34]], spellcastingExtra : ["faerie fire", "sleep", "moonbeam", "see invisibility", "aura of vitality", "leomund's tiny hut", "aura of life", "greater invisibility", "circle of power", "mislead"], features : { "subclassfeature1" : { name : "Bonus Proficiency", source : [["T", 34]], minlevel : 1, description: desc("I gain proficiency with martial weapons and heavy armor"), armorProfs : [false, false, true, false], weaponProfs : [false, true] }, "subclassfeature1.1" : { name : "Eyes of Night", source : [["T", 34]], minlevel : 1, description : desc([ "I gain darkvision out to a range of 300 ft; As an action, I can grant others this as well", "I can grant it for 1 hour to my Wis mod (min 1) of willing targets I can see within 10 ft", "I can do this once per long rest, or by expending a spell slot (SS 1+)" ]), action : [["action", " (grant others)"]], vision : [["Darkvision", 300]], additional : "grant others", usages : 1, recovery : "long rest", altResource : "SS 1+" }, "subclassfeature1.2" : { name : "Vigilant Blessing", source : [["T", 35]], minlevel : 1, description : desc([ "As an action, I can grant myself or a creature I touch adv. on the next initiative roll", "This benefit ends immediately after the roll or when I use this feature again" ]), action : [["action", ""]] }, "subclassfeature2" : { name : "Channel Divinity: Twilight Sanctuary", source : [["T", 35]], minlevel : 2, description : desc([ "As an action, I can use my holy symbol to create a 30-ft radius sphere around myself", "It moves with me, is filled with dim light, and lasts for 1 min or until I'm incapacitated", "When a creature, including me, ends its turn inside the sphere, I can grant it a benefit:", " \u2022 I grant it temporary hit points equal to 1d6 + my cleric level", " \u2022 I end one effect on it causing it to be charmed or frightened", "From 17th-level onwards, me and my allies have half cover while inside the sphere" ]), action : [["action", ""]], additional : levels.map(function(n) { return n < 2 ? "" : "1d6 + " + n + " temp HP"; }), }, "subclassfeature6" : { name : "Steps of Night", source : [["T", 35]], minlevel : 6, description : desc([ "As a bonus action when I'm in dim light or darkness, I can magically grant myself flight", "I gain a flying speed equal to my walking speed for 1 minute" ]), action : [["bonus action", ""]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature8" : { name : "Divine Strike", source : [["T", 35]], minlevel : 8, description: desc("Once per turn, when I hit a creature with a weapon attack, I can do extra damage"), additional : levels.map(function (n) { if (n < 8) return ""; return "+" + (n < 14 ? 1 : 2) + "d8 radiant damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && v.isWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.cleric.level < 14 ? 1 : 2) + 'd8 radiant damage'; } }, "Once per turn, I can have one of my weapon attacks that hit do extra radiant damage." ] } }, "subclassfeature17" : { name : "Twilight Shroud", source : [["T", 35]], minlevel : 17, description : desc([ "Me and my allies have half cover while in the sphere created by my Twilight Sanctuary" ]) } } }); // >>>>>>>>>>>>>>>>>>>>> // // >>> Druid Options >>> // // >>>>>>>>>>>>>>>>>>>>> // // Druid Optional Class Features AddFeatureChoice(ClassList.druid.features.spellcasting, true, "Additional Druid Spells", { name : "Additional Druid Spells", extraname : "Optional Druid 1", source : [["T", 35]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "druid" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["protection from evil and good", "augury", "continual flame", "enlarge/reduce", "aura of vitality", "elemental weapon", "revivify", "divination", "fire shield", "cone of cold", "flesh to stone", "symbol", "incendiary cloud"]); }, "This optional class feature expands the spell list of the druid class with the following spells (spell level in brackets): Protection from Evil and Good (1), Augury (2), Continual Flame (2), Enlarge/Reduce (2), Aura of Vitality (3), Elemental Weapon (3), Revivify (3), Divination (4), Fire Shield (4), Cone of Cold (5), Flesh to Stone (6), Symbol (7), and Incendiary Cloud (8)." ] } }, "Optional 1st-level druid features"); var TCoE_Wild_Companion = { name : "Wild Companion", extraname : "Optional Druid 2", source : [["T", 35], ["UA:CFV", 4]], description : desc([ "I can expend a use of wild shape to cast Find Familiar without material components", "The familiar always has the Fey type and disappears after half my druid level in hours" ]), additional : levels.map(function (n) { return n < 2 ? "" : Math.floor(n/2) + " hours"; }), spellcastingBonus : [{ name : "Wild Companion", spells : ["find familiar"], selection : ["find familiar"], firstCol : "Sp" }], spellChanges : { "find familiar" : { components : "V,S", compMaterial : "", description : "Gain the services of a fey familiar; can see through its eyes; it can deliver touch spells; see B", duration : "\u00BD druid lvl h", changes : "By using my Wild Companion class feature, I can expend a use of wild shape to cast Find Familiar without material components. The familiar created this way always has the Fey type and disappears after a number of hours equal to half my druid level." } } } AddFeatureChoice(ClassList.druid.features["subclassfeature2.wild shape"], true, "Wild Companion", TCoE_Wild_Companion, "Optional 2nd-level druid features"); if (ClassSubList["druid-circle of the moon"]) { AddFeatureChoice(ClassSubList["druid-circle of the moon"].features["subclassfeature2.wild shape"], true, "Wild Companion", TCoE_Wild_Companion, "Optional 2nd-level druid features"); } AddFeatureChoice(ClassList.druid.features.druidic, true, "Cantrip Versatility", { name : "Cantrip Versatility", extraname : "Optional Druid 4", source : [["T", 35]], description : " [ASI = Ability Score Improvement]\n Whenever I gain an ASI from the druid class, I can change one druid cantrip for another", prereqeval : function (v) { return classes.known.druid.level >= 4 ? true : "skip"; } }, "Optional 4th-level druid features"); // Druid Subclasses // [dupl_start] reprints from Guildmasters' Guide to Ravnica if (!SourceList.G) { AddSubClass("druid", "circle of spores", { regExpSearch : /^(?=.*(druid|shaman))(?=.*spores).*$/i, subname : "Circle of Spores", subnameShort: "Spores", source : [["T", 36], ["G", 26]], features : { "subclassfeature2" : { name : "Circle Spells", source : [["T", 36], ["G", 27]], minlevel : 2, description : desc([ "I learn the Chill Touch cantrip and gain the ability to cast certain spells", "These are always prepared, but don't count against the number of spells I can prepare" ]), spellcastingBonus : [{ name : "Circle Spells", spells : ["chill touch"], selection : ["chill touch"] }], spellcastingExtra : ["blindness/deafness", "gentle repose", "animate dead", "gaseous form", "blight", "confusion", "cloudkill", "contagion"] }, "subclassfeature2.1" : { name : "Halo of Spores", source : [["T", 36], ["G", 27]], minlevel : 2, description : desc([ "As a reaction when someone I can see in 10 ft starts its turn or moves, I can have it save", "It must succeed on a Constitution save or take necrotic damage from my cloud of spores" ]), additional : levels.map(function (n) { return n < 2 ? "" : 'Con save or 1d' + (n < 6 ? 4 : n < 10 ? 6 : n < 14 ? 8 : 10) + " necrotic damage"; }), action : [["reaction", ""]] }, "subclassfeature2.2" : { // changed from poison to necrotic damage in TCoE name : "Symbiotic Entity", source : [["T", 37], ["G", 27]], minlevel : 2, description : desc([ "As an action, I can expend a Wild Shape use to boost my spores instead of transforming", "I gain 4 temporary hit points per druid level and my Halo of Spores damage increases", "Also, my melee weapon attacks do +1d6 necrotic damage with every hit", "This lasts for 10 min, until these temporary HP run out, or until I use Wild Shape again" ]), additional : levels.map(function (n) { return n < 2 ? "" : Math.floor(n*4) + " temp HP; Halo of Spores: 2d" + (n < 6 ? 4 : n < 10 ? 6 : n < 14 ? 8 : 10); }), action : [["action", ""]], calcChanges : { atkAdd : [ function (fields, v) { if (v.isMeleeWeapon && (/\b(spore|symbiotic)\b/i).test(v.WeaponTextName)) { fields.Description += (fields.Description ? '; ' : '') + '+1d6 necrotic damage'; }; }, "If I include the word \"Spore\" or \"Symbiotic\" in a melee weapon's name, it gets treated as a weapon that is infused by my Symbiotic Entity feature, adding +1d6 necrotic damage in the description." ] } }, "subclassfeature6" : { name : "Fungal Infestation", source : [["T", 37], ["G", 27]], minlevel : 6, description : desc([ "As a reaction when a Small/Medium beast/humanoid dies in 10 ft, I can animate it", "It rises as a zombie with 1 HP that follows my mental commands and dies after 1 hour", "It can only take the attack action for one melee attack; It takes its turns after mine" ]), usages : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest", action : [["reaction", ""]] }, "subclassfeature10" : { name : "Spreading Spores", source : [["T", 37], ["G", 27]], minlevel : 10, description : " [only while Symbiotic Entity is active]" + desc([ "As a bonus action, I create a 10-ft cube of fungal spores within 30 ft, lasting for 1 min", "Any creature moving into or starting its turn in it must save against my Halo of Spores", "The cube ends if I use this feature again; While it persists, I can't use my Halo of Spores" ]), action : [["bonus action", " (start/end)"]] }, "subclassfeature14" : { name : "Fungal Body", source : [["T", 38], ["G", 27]], minlevel : 14, description : desc([ "I'm immune to being blinded, deafened, frightened, poisoned, and critical hits" ]), savetxt : { immune : ["blinded", "deafened", "frightened", "poisoned", "critical hits (unless incapacitated)"] } } } }); } // dupl_end AddSubClass("druid", "circle of the stars", { regExpSearch : /^(?=.*(druid|shaman))(?=.*circle)(?=.*stars).*$/i, subname : "Circle of the Stars", subnameShort: "Stars", source : [["T", 38]], features : { "subclassfeature2" : { name : "Star Map", source : [["T", 38]], minlevel : 2, description : desc([ "I've created a star map, a Tiny object which I can use as my spellcasting focus", "If I lose it, I can perform a 1-hour ceremony during a rest to create a replacement", "While holding it, I know the Guidance cantrip and always have Guiding Bolt prepared", "These count as druid spells, but do not count against the number of spells I can prepare", "I can cast Guiding Bolt without expending a spell slot my Proficiency Bonus per long rest" ]), spellcastingBonus : [{ name : "Star Map", spells : ["guidance"], selection : ["guidance"], }, { name : "Star Map", spells : ["guiding bolt"], selection : ["guiding bolt"], firstCol : "oncelr" }], additional : "Guiding Bolt", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature2.1" : { name : "Starry Form", source : [["T", 38]], minlevel : 2, description : desc([ "As a bonus action, I can expend a use of wild shape to take on a starry form for 10 min", "In that form I shed bright light in a 10-ft radius and dim light for an extra 10-ft radius", "When I do so, I choose one constellation that glimmers on my body, granting me benefits", 'See the 3rd page "Notes" section for the benefits of the possible constellations', ]), weaponOptions : [{ regExpSearch : /^(?=.*luminous)(?=.*arrow).*$/i, name : "Luminous Arrow", source : [["T", 38]], ability : 5, type : "Spell", damage : [1, 8, "radiant"], range : "60 ft", description : "Use as bonus action", abilitytodamage : true, useSpellMod : "druid", luminousarrow : true, selectNow : true }], extraname : "Starry Form", "archer constellation" : { name : "Archer Constellation", source : [["T", 38]], description : desc([ "As a bonus action, I can make a ranged spell attack to hurl a luminous arrow 60 ft", "I can also do this as part of the bonus action I use to assume the starry form" ]), additional : levels.map(function (n) { return n < 2 ? "" : (n < 10 ? 1 : 2) + "d8 + Wisdom modifier radiant damage"; }), action : [["bonus action", " (Luminous Arrow)"]] }, "chalice constellation" : { name : "Chalice Constellation", source : [["T", 39]], description : desc([ "When I cast a healing spell with a spell slot, I can heal myself or another within 30 ft of me" ]), additional : levels.map(function (n) { return n < 2 ? "" : (n < 10 ? 1 : 2) + "d8 + Wisdom modifier hit points restored"; }) }, "dragon constellation" : { name : "Dragon Constellation", source : [["T", 39]], description : desc([ "I can treat a roll below 10 as a 10 for Int/Wis checks and saves to maintain concentration", "From 10th-level onwards, I also gain a flying speed of 20 ft and can hover" ]) }, autoSelectExtrachoices : [{ extrachoice : "archer constellation" }, { extrachoice : "chalice constellation" }, { extrachoice : "dragon constellation" }] }, "subclassfeature6" : { name : "Cosmic Omen", source : [["T", 39]], minlevel : 6, description : desc([ "When I finish a long rest, I roll a die to gain an omen based on the result (odd/even)", "As a reaction when a creature I can see in 30 ft makes an attack, check, or save, I can:", " \u2022 Weal (even): add 1d6 to the number rolled for the attack, check, or save", " \u2022 Woe (odd): subtract 1d6 from the number rolled for the attack, check, or save" ]), action : [["reaction", ""]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature10" : { name : "Twinkling Constellations", source : [["T", 39]], minlevel : 10, description : desc([ "While in my starry form, I can change the constellation at the start of each of my turns", 'The benefit of my constellations improve, see the 3rd page "Notes" section', ]), calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.luminousarrow && fields.Damage_Die.indexOf('1d8') !== -1) { fields.Damage_Die = fields.Damage_Die.replace('1d8', '2d8'); }; }, '', 1 ] } }, "subclassfeature14" : { name : "Full of Stars", source : [["T", 39]], minlevel : 14, description: desc("While in my starry form, I have resistance to bludgeoning, piercing, and slashing damage"), dmgres : [ ["Bludgeoning", "Bludgeon. (in form)"], ["Piercing", "Piercing (in form)"], ["Slashing", "Slashing (in form)"] ] } } }); AddSubClass("druid", "circle of wildfire", { regExpSearch : /^(?=.*(druid|shaman))(?=.*wild.{0,1}fire).*$/i, subname : "Circle of Wildfire", subnameShort: "Wildfire", source : [["T", 39]], features : { "subclassfeature2" : { name : "Circle Spells", source : [["T", 39]], minlevel : 2, description : desc([ "My link to a wildfire spirit grants me access to spells, which count as druid spells to me", "These are always prepared, but don't count against the number of spells I can prepare" ]), spellcastingExtra : ["burning hands", "cure wounds", "flaming sphere", "scorching ray", "plant growth","revivify", "aura of life", "fire shield", "flame strike", "mass cure wounds"] }, "subclassfeature2.1" : { name : "Summon Wildfire Spirit", source : [["T", 40]], minlevel : 2, description : desc([ "As an action, I can expend a use of wild shape to summon a wildfire spirit within 30 ft", "All within 10 ft of where it manifests must make a Dex save or take 2d10 fire damage", "It is friendly and obeys my commands; It lasts for 1 hour, until it has 0 HP, or I die", "Unless I use a bonus action to command it, it only takes the Dodge action on its turn", "It can always take reactions and move on its turn; It acts on my initiative, after me", 'It disappears if I summon another; See "Wildfire Spirit" on a companion page for its stats', ]), action : [["action", ""], ["bonus action", "Command Wildfire Spirit"]], creaturesAdd : [["Wildfire Spirit", true]], creatureOptions : [{ name : "Wildfire Spirit", source : [["T", 40]], size : 4, type : "Elemental", alignment : "", ac : 13, hp : 20, hd : [], speed : "30 ft, fly 30 ft (hover)", scores : [10, 14, 14, 13, 15, 11], damage_immunities : "fire", condition_immunities : "charmed, frightened, grappled, prone, restrained", senses : "Darkvision 60 ft", passivePerception : 12, languages : "understands the languages of its creator", challengeRating : "1/2", proficiencyBonus : 2, proficiencyBonusLinked : true, attacksAction : 1, attacks : [{ name : "Flame Seed", ability : 5, damage : [1, 6, "fire"], range : "60 ft", description : "Ranged weapon attack", modifiers : ["", "Prof"], abilitytodamage : false, useSpellMod : "druid" }, { name : "Fiery Teleportation", ability : 5, damage : [1, 6, "fire"], range : "5-ft radius", description : "Dex save for all within 5 ft of teleportation origin, success - no damage; See traits", dc : true, modifiers : ["", "Prof"], abilitytodamage : false, useSpellMod : "druid" }, { name : "Fiery Manifestation", ability : 5, damage : [2, 6, "fire"], range : "10-ft radius", description : "Dex save for all within 10 ft where spirit is summoned, success - no damage", dc : true, abilitytodamage : false, useSpellMod : "druid" }], features : [{ name : "Creator", description : "The spirit obeys the commands of its creator and has the same proficiency bonus. It takes its turn immediately after its creator, on the same initiative count. It can move and take reactions on its own, but only takes the Dodge action on its turn unless its creator takes a bonus action to command it to take another action. If its creator is incapacitated, it can take any action, not just Dodge." }], actions : [{ name : "Fiery Teleportation", description : "The spirit and each willing creature of its creator's choice within 5 ft of it teleport up to 15 ft to unoccupied spaces its creator can see. Then each creature within 5 ft of the space that the spirit left must succeed on a Dexterity saving throw against its creator's spell save DC or take fire damage equal to 1d6 + its proficiency bonus." }], traits : [{ name : "Fiery Manifestation", description : "The spirit appears in an unoccupied space of its creator's choice that its creator can see within 30 ft. Each creature within 10 ft of the spirit (other than its creator) when it appears must succeed on a Dexterity saving throw against its creator's spell save DC or take 2d6 fire damage." }], header : "Wildfire", calcChanges : { hp : function (totalHD, HDobj, prefix) { if (!classes.known.druid) return; var drdLvl = classes.known.druid.level; var drdLvl5 = 5 * drdLvl; HDobj.alt.push(5 + drdLvl5); HDobj.altStr.push(" = 10 as a base\n + 5 \xD7 " + drdLvl + " from five times its creator's druid level (" + drdLvl5 + ")"); }, setAltHp : true } }] }, "subclassfeature6" : { name : "Enhanced Bond", source : [["T", 40]], minlevel : 6, description : desc([ "While my wildfire spirit is present, I can have my spells originate from it (no range 'self')", "Also, I can then add 1d8 to a single roll of my spells that restore HP or deal fire damage" ]) }, "subclassfeature10" : { name : "Cauterizing Flames", source : [["T", 40]], minlevel : 10, description : desc([ "As a reaction when a Small or larger creature dies within 30 ft of me or wildfire spirit,", "I can have a spectral flame erupt in its space that lasts for 1 minute", "As a reaction when I see a creature enter the flame's space, I can extinguish the flame", "This heals or deals fire damage to the creature (my choice) equal to 2d10 + my Wis mod" ]), action : [["reaction", ""]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature14" : { name : "Blazing Revival", source : [["T", 40]], minlevel : 14, description : desc([ "If I drop to 0 HP and don't die, and my wildfire spirit is within 120 ft, it can save me", "I can have it drop to 0 HP; I then regain half my HP and immediately rise to my feet" ]), usages : 1, recovery : "long rest" } } }); // >>>>>>>>>>>>>>>>>>>>>>> // // >>> Fighter Options >>> // // >>>>>>>>>>>>>>>>>>>>>>> // // Fighter Optional Class Features AddFightingStyle(["fighter", "ranger", "paladin"], "Blind Fighting", { name : "Blind Fighting Style", source : [["T", 41]], description : desc([ "I have blindsight with 10 ft range, allowing me to see anything not behind total cover", "In range, I can see invisible, but not hidden, things, even when blinded or in darkness" ]), vision : [["Blindsight", 10]] }); AddFightingStyle(["fighter", "paladin"], "Interception", { name : "Interception Fighting Style", source : [["T", 41], ["UA:CFV", 12]], description : desc([ "As a reaction when a creature I can see hits another within 5 ft of me, I can intercept", "I reduce the damage the target takes by 1d10 + my Proficiency Bonus (min 0 damage)", "I can't be the target and it requires me wielding a shield or a simple or martial weapon" ]), action : [["reaction", ""]] }); AddFightingStyle(["fighter", "ranger"], "Thrown Weapon Fighting", { name : "Thrown Weapon Fighting Style", source : [["T", 42]], description : desc([ "I can draw a weapon with the thrown property as part of the attack I make with it", "In addition, my ranged attacks made with thrown weapons deal +2 damage" ]), calcChanges : { atkAdd : [ function (fields, v) { if (v.isThrownWeapon && v.isMeleeWeapon) { fields.Description += (fields.Description ? '; ' : '') + '+2 damage when thrown'; }; }, "I deal +2 damage when I hit a ranged attack made with a thrown weapon." ], atkCalc : [ function (fields, v, output) { if (v.isThrownWeapon && !v.isMeleeWeapon) { output.extraDmg += 2; }; }, "" ] } }); AddFightingStyle(["fighter"], "Unarmed Fighting", { name : "Unarmed Fighting Style", source : [["T", 42]], description : desc([ "My unarmed strikes deal 1d6 damage, or 1d8 damage when I have both hands free", "At the start of my turn, I can deal 1d4 bludgeoning damage to one target I'm grappling" ]), calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == "unarmed strike") { if (fields.Damage_Die == 1 || fields.Damage_Die == "1d4") fields.Damage_Die = '1d6'; fields.Description += (fields.Description ? '; ' : '') + 'Versatile (d8)'; }; }, "My unarmed strikes deal 1d6 damage instead of 1, which increases to 1d8 if I have both hands free to make an unarmed strike with.", 1 ] } }); AddFeatureChoice(ClassList.fighter.features['action surge'], true, "Martial Versatility", { name : "Martial Versatility", extraname : "Optional Fighter 4", source : [["T", 42]], description : " [ASI = Ability Score Improvement]\n Whenever I gain an ASI from the fighter class, I can change a fighting style or a maneuver", prereqeval : function (v) { return classes.known.fighter.level >= 4 ? true : "skip"; } }, "Optional 4th-level fighter features"); // Fighter alternative class features and enhancements (only if Battle Master subclass exists) if (ClassSubList["fighter-battle master"]) { AddFightingStyle(["fighter"], "Superior Technique", { name : "Superior Technique", source : [["T", 41], ["UA:CFV", 5]], additional: "1 maneuver; d6, 1\xD7 per short rest", description : desc([ "I gain one superiority die (d6) that I can expend to fuel a special Maneuver", "I can only use one Maneuver per attack; DCs are 8 + Prof B. + Str/Dex mod, my choice", 'Use the "Choose Feature" button above to add a Maneuver to the third page' ]), bonusClassExtrachoices : [{ "class" : "fighter", "subclass" : "fighter-battle master", "feature" : "subclassfeature3.1", "bonus" : 1 }], extraLimitedFeatures : [{ name : "Combat Superiority", usages : 1, additional : 'd6', recovery : "short rest", addToExisting : true }] }); // New Maneuver options AddFeatureChoice(ClassSubList["fighter-battle master"].features["subclassfeature3.1"], true, "Ambush", { name : "Ambush", source : [["T", 42], ["UA:CFV", 5]], description : desc([ "When I make an initiative roll or a Dex (Stealth) check, I can add a superiority die to it", "I can't do this if I'm incapacitated" ]) }); AddFeatureChoice(ClassSubList["fighter-battle master"].features["subclassfeature3.1"], true, "Bait and Switch", { name : "Bait and Switch", source : [["T", 42]], description : desc([ "On my turn, I can expend a superiority die to swap places with an ally within 5 ft", "I can't do this if the ally is incapacitated or unwilling to swap", "Doing this costs me 5 ft of movement, but this doesn't provoke opportunity attacks", "Me or my ally (my choice) can then add the superiority die to AC until my next turn starts" ]) }); AddFeatureChoice(ClassSubList["fighter-battle master"].features["subclassfeature3.1"], true, "Brace", { name : "Brace", source : [["T", 42]], description : desc([ "As a reaction when a creature I can see moves within my melee reach, I can attack it", "I expend a superiority die and make one weapon attack, adding the die to the damage" ]), action : [["reaction", ""]] }); AddFeatureChoice(ClassSubList["fighter-battle master"].features["subclassfeature3.1"], true, "Commanding Presence", { name : "Commanding Presence", source : [["T", 42]], description: desc("When I make a Performance, Intimidation, or Persuasion check, I can add a superiority die") }); AddFeatureChoice(ClassSubList["fighter-battle master"].features["subclassfeature3.1"], true, "Grappling Strike", { name : "Grappling Strike", source : [["T", 42]], description : desc([ "Immediately after hitting with a melee attack, I can use a bonus action to try to grapple", "I add the superiority die to the Str (Athletics) check; I can only do this on my own turn" ]), action : [["bonus action", " (after melee hit)"]] }); AddFeatureChoice(ClassSubList["fighter-battle master"].features["subclassfeature3.1"], true, "Quick Toss", { name : "Quick Toss", source : [["T", 42]], description : desc([ "As a bonus action, I can use a superiority die to do a ranged attack with a thrown weapon", "I can draw a thrown weapon as part of making this attack; I add the die to the damage" ]), action : [["bonus action", ""]] }); AddFeatureChoice(ClassSubList["fighter-battle master"].features["subclassfeature3.1"], true, "Tactical Assessment", { name : "Tactical Assessment", source : [["T", 42]], description: desc("When I make an Investigation, History, or Insight check, I can add a superiority die to it") }); } // Fighter Subclasses AddSubClass("fighter", "psi warrior", { regExpSearch : /^(?=.*\bpsi(onic)?s?\b)(?=.*warrior).*$/i, subname : "Psi Warrior", source : [["T", 42]], fullname : "Psi Warrior", abilitySave : 4, features : { "subclassfeature3" : { name : "Psionic Energy Dice", source : [["T", 43]], minlevel : 3, description : desc([ "I gain twice my proficiency bonus of psionic energy dice (PsiD) that fuel my psionics", "I regain all expended psionic energy dice after a long rest", "As a bonus action once per short rest, I can regain one expended psionic energy die" ]), additional : levels.map(function(n) { return n < 3 ? "" : n < 5 ? "d6" : n < 11 ? "d8" : n < 17 ? "d10" : "d12"; }), action : [["bonus action", "Regain 1 Psionic Energy Die"]], usages : "Proficiency Bonus \xD7 2 per ", usagescalc : "event.value = Number(How('Proficiency Bonus'))*2", recovery : "long rest", extraLimitedFeatures : [{ name : "Regain 1 Psionic Energy die", usages : 1, recovery : "short rest" }] }, "subclassfeature3.1" : { name : "Psionic Power: Protective Field", source : [["T", 43]], minlevel : 3, additional: "1 psionic energy die", description : desc([ "As a reaction when I or a creature I can see within 30 ft takes damage, I can reduce it", "I reduce the damage by the roll of the one psionic energy die I expend + my Int mod" ]), action : [["reaction", "Protective Field"]] }, "subclassfeature3.2" : { name : "Psionic Power: Psionic Strike", source : [["T", 43]], minlevel : 3, additional: "1 psionic energy die", description : desc([ "Once on each of my turns after I hit a target in 30 ft and damage it with a weapon,", "I can expend a psionic energy die to deal it the die roll + my Int mod in force damage" ]) }, "subclassfeature3.3" : { name : "Psionic Power: Telekinetic Movement", source : [["T", 43]], minlevel : 3, description : desc([ "As an action, I can move a Large or smaller loose object or one willing creature in 30 ft", "I must be able to see the target and can move it up to 30 ft to an empty space I can see", "If it is a Tiny object, I can also move it to or from my hand; I can't move myself this way", "I can do this once per short rest, or by expending a psionic energy die (PsiD)" ]), limfeaname : "Telekinetic Movement", action : [["action", ""]], usages : 1, recovery : "short rest", altResource : "PsiD" }, "subclassfeature7.1" : { name : "Telekinetic Adept: Psi-Powered Leap", source : [["T", 43]], minlevel : 7, description : desc([ "As a bonus action, I gain a flying speed of twice my walking speed until the turn ends", "I can do this once per short rest, or by expending a psionic energy die (PsiD)" ]), limfeaname : "Psi-Powered Leap", action : [["bonus action", ""]], usages : 1, recovery : "short rest", altResource : "PsiD" }, "subclassfeature7.2" : { name : "Telekinetic Adept: Telekinetic Thrust", source : [["T", 43]], minlevel : 7, additional: "DC 8 + Prof B. + Int mod", description : desc([ "When I deal damage with my Psionic Strike, I can have the target make a Strength save", "If failed, I knock the target prone or move it up to 10 ft in any direction horizontally" ]), }, "subclassfeature10" : { name : "Guarded Mind", source : [["T", 43]], minlevel : 10, description : desc([ "I can expend a psionic energy die to end all effects on me causing charmed or frightened", "I can do this if at the start of my turn; I also gain resistance to psychic damage" ]), dmgres : ["Psychic"] }, "subclassfeature15" : { name : "Bulwark of Force", source : [["T", 44]], minlevel : 15, description : desc([ "As a bonus action, I can choose up to my Int mod of creatures (min 1) I can see in 30 ft", "This can include me; Each chosen gains half cover for 1 minute or until I'm incapacitated", "I can do this once per long rest, or by expending a psionic energy die (PsiD)" ]), action : [["bonus action", ""]], usages : 1, recovery : "long rest", altResource : "PsiD" }, "subclassfeature18" : { name : "Telekinetic Master", source : [["T", 44]], minlevel : 18, description : desc([ "I can cast Telekinesis, requiring no spell slot or components, with Int spellcasting ability", "As a bonus action while concentrating on this spell, I can make one weapon attack", "I can cast Telekinesis once per long rest, or by expending a psionic energy die (PsiD)" ]), spellcastingBonus : [{ name : "Telekinetic Master", spells : ["telekinesis"], selection : ["telekinesis"], firstCol : "oncelr" }], spellChanges : { "telekinesis" : { components : "", changes : "Using Telekinetic Master, I can cast Telekinesis without requiring components or spell slots." } }, action : [["bonus action", "Weapon Attack while Telekinesis conc."]], usages : 1, recovery : "long rest", altResource : "PsiD" } } }); AddSubClass("fighter", "rune knight", { regExpSearch : /^(?=.*rune)(?=.*knight).*$/i, subname : "Rune Knight", source : [["T", 44]], fullname : "Rune Knight", abilitySave : 3, features : { "subclassfeature3" : { name : "Bonus Proficiencies", source : [["T", 44]], minlevel : 3, description: desc("I gain proficiency with smith's tools and I learn to speak, read, and write Giant"), toolProfs : ["Smith's tools"], languageProfs : ["Giant"] }, "subclassfeature3.1" : { name : "Rune Carver", source : [["T", 44]], minlevel : 3, description : desc([ "I learn how to use magic runes to enhance my gear that I can wear or hold in my hand", 'Use the "Choose Feature" button above to select a rune and add it to the third page', "When I finish a long rest, I can inscribe each rune I know upon a different item I touch", "Each item can hold only one rune and remains there until I finish a long rest", "Runes inscribed on a carried object grant both a passive and a limited-use active effect", "Whenever I gain a fighter level, I can swap a rune I know for another", "The DC for a rune's abilities is 8 + my Proficiency bonus + my Constitution modifier" ]), additional : levels.map(function (n){ return n < 3 ? "" : (n < 7 ? 2 : n < 10 ? 3 : n < 15 ? 4 : 5) + " runes known" }), extraTimes : levels.map(function (n) { return n < 3 ? 0 : n < 7 ? 2 : n < 10 ? 3 : n < 15 ? 4 : 5; }), extraname : "Rune Knight 3", extrachoices : ["Cloud Rune", "Fire Rune", "Frost Rune", "Stone Rune", "Hill Rune (prereq: level 7 fighter)", "Storm Rune (prereq: level 7 fighter)"], "cloud rune" : { name : "Cloud Rune", source : [["T", 44]], description : desc([ "While I wear an object inscribed with this, I gain a deceptiveness reminiscent of cloud giants", "I always gain advantage on Dexterity (Sleight of Hand) and Charisma (Deception) checks", "As a reaction when I or another I can see within 30 ft is hit by an attack, I can invoke this", "I select another target for the attack within 30 ft of me, using the same roll (ignore range)" ]), action : [["reaction", " (invoke)"]], additional : "invoke", usages : ["", "", 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2], recovery : "short rest", advantages : [ ["Sleight of Hand", true], ["Deception", true] ] }, "fire rune" : { name : "Fire Rune", source : [["T", 44]], description : desc([ "While I wear an object inscribed with this, I gain craftsmanship reminiscent of great smiths", "I always double my proficiency bonus when making an ability check with a tool", "When I hit a creature with a weapon attack, I can invoke it to summon fiery shackles", "It takes an extra 2d6 fire damage and must make a Str save or be restrained for 1 min", "While restrained, the creature takes 2d6 fire damage at the start of each of its turns", "It can repeat the save at the end of each of its turns, banishing the shackles on a success" ]), additional : "invoke", usages : ["", "", 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2], recovery : "short rest", skillstxt : "expertise with all tools I am proficient with", eval : function () { Checkbox('Too Exp', true); }, removeeval : function () { Checkbox('Too Exp', false); } }, "frost rune" : { name : "Frost Rune", source : [["T", 45]], description : desc([ "While I wear an object inscribed with this, I gain might of those surviving wintry wilderness", "I always gain advantage on Wisdom (Animal Handling) and Charisma (Intimidation) checks", "As a bonus action, I can invoke this to gain +2 on Str and Con checks and saves for 10 min" ]), action : [["bonus action", " (invoke)"]], additional : "invoke", usages : ["", "", 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2], recovery : "short rest", advantages : [ ["Animal Handling", true], ["Intimidation", true] ] }, "stone rune" : { name : "Stone Rune", source : [["T", 45]], description : desc([ "While I wear an object inscribed with this, I gain judiciousness reminiscent of stone giants", "I always gain advantage on Wisdom (Insight) checks and I gain darkvision out to 120 ft", "As a reaction when a creature I can see ends it turn within 30 ft, I can invoke this rune", "This causes the creature to make a Wisdom save or be charmed by me for 1 minute", "While charmed, it descends into a dreamy stupor, becoming incapacitated and has speed 0", "It can repeat the save at the end of each of its turns, ending the effect on a success" ]), action : [["reaction", " (invoke)"]], additional : "invoke", usages : ["", "", 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2], recovery : "short rest", vision : [["Darkvision", 120]], advantages : [ ["Insight", true] ] }, "hill rune (prereq: level 7 fighter)" : { name : "Hill Rune", source : [["T", 45]], description : desc([ "While I wear an object inscribed with this rune, I gain a resilience reminiscent of hill giants", "I always gain advantage on saves against being poisoned and resistance to poison damage", "As a bonus action, I can invoke it to gain resistance to bludg/slash/pierc damage for 1 min" ]), prereqeval : function(v) { return classes.known.fighter.level >= 7; }, action : [["bonus action", " (invoke)"]], additional : "invoke", usages : ["", "", 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2], recovery : "short rest", dmgres : ["Poison"], savetxt : { adv_vs : ["poison"] } }, "storm rune (prereq: level 7 fighter)" : { name : "Storm Rune", source : [["T", 45]], description : desc([ "While I wear an object inscribed with this rune, I can glimpse the future like storm giants", "I always gain adv. on Int (Arcana) checks and I can't be surprised while not incapacitated", "As a bonus action, I can invoke it to enter a prophetic state for 1 min or till incapacitated", "While in this state, I can use a reaction to cause a roll to gain advantage or disadvantage", "I can do this for attacks, saves, and checks of myself or others I can see within 60 ft of me" ]), prereqeval : function(v) { return classes.known.fighter.level >= 7; }, action : [["bonus action", " (invoke)"]], additional : "invoke", usages : ["", "", 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2], recovery : "short rest", advantages : [ ["Arcana", true] ], savetxt : { immune : ["surprised"] }, } }, "subclassfeature3.2" : { name : "Giant's Might", source : [["T", 45]], minlevel : 3, description : desc([ "As a bonus action, I can imbue myself with giant magic for 1 minute and gain benefits:", " \u2022 Space permitted, I grow to a larger size category along with everything I'm wearing", " \u2022 I have advantage on my Strength check and saves", " \u2022 My weapon and unarmed strike attacks deal extra damage" ]), additional : levels.map(function (n) { return n < 3 ? "" : (n < 18 ? "Large" : "Huge") + ", +1d" + (n < 10 ? 6 : n < 18 ? 8 : 10) + " damage" }), action : [["bonus action", ""]], savetxt : { text : ["Adv. on Str saves in Giant's Might"] }, usages : "Prof Bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.fighter && classes.known.fighter.level >= 3 && v.isWeapon && (/giant('s)? might/i).test(v.WeaponTextName)) { var GMdmgDie = classes.known.fighter.level < 10 ? 'd6' : classes.known.fighter.level < 18 ? 'd8' : 'd10'; var dmgDieRx = RegExp('(\\d+)' + GMdmgDie, 'i'); if (dmgDieRx.test(fields.Damage_Die)) { var dmgDieMatch = fields.Damage_Die.match(dmgDieRx); fields.Damage_Die = fields.Damage_Die.replace(dmgDieRx, Number(dmgDieMatch[1]) + 1 + GMdmgDie); fields.Description = fields.Description.replace(/Versatile \((\d+d\d+)\)/i, 'Versatile ($1+1' + GMdmgDie + ')'); } else if (!isNaN(fields.Damage_Die)) { fields.Damage_Die = 1 + GMdmgDie + "+" + fields.Damage_Die; } else { fields.Description += (fields.Description ? '; ' : '') + '+1' + GMdmgDie + ' damage'; } if (classes.known.fighter.level >= 18 && v.isMeleeWeapon) fields.Description += (fields.Description ? '; ' : '') + '+5 ft reach'; }; }, "If I include the words \"Giant Might\" in the name of a weapon or unarmed strike, it gets treated as a weapon that I use while imbued by my Giant's Might feature. It adds +1d6 weapon damage. From 10th-level onwards, this increases to +1d8 damage. From 18th-level onwards, this increases to +1d10 damage and my reach increases by 5 ft (for melee weapons).", 8 ] } }, "subclassfeature7" : { name : "Runic Shield", source : [["T", 45]], minlevel : 7, description : desc([ "As a reaction when I see a creature within 60 ft get hit by an attack, I can protect it", "The attacker must reroll its attack roll and use the new roll" ]), action : [["reaction", ""]] }, "subclassfeature10" : { name : "Great Stature", source : [["T", 46]], minlevel : 10, description : desc([ "My runes permanently make me grow; I add 3d4 inches to my length", "In addition, the extra weapon damage I deal with Giant Might increases to 1d8" ]) }, "subclassfeature15" : { name : "Master of Runes", source : [["T", 46]], minlevel : 15, description: desc("I can now invoke each of my runes twice per short rest instead of once") }, "subclassfeature18" : { name : "Runic Juggernaut", source : [["T", 46]], minlevel : 18, description : desc([ "Giant's Might now adds +1d10 weapon damage, and can make me grow up to Huge", "While I'm Huge, my reach increases by 5 ft" ]) } } }); // >>>>>>>>>>>>>>>>>>>> // // >>> Monk Options >>> // // >>>>>>>>>>>>>>>>>>>> // // Monk Optional Class Features AddFeatureChoice(ClassList.monk.features.ki, true, "Dedicated Weapon", { name : "Dedicated Weapon", extraname : "Optional Monk 2", source : [["T", 48]], description : desc([ "When I finish a short or long rest, I can focus ki and touch one simple or martial weapon", "From then on, until I use this feature again, this weapon counts as a monk weapon for me", "I have to be proficient with the weapon and it can't have the heavy or special property" ]), calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.monkweapon && !v.theWea.special && classes.known.monk && classes.known.monk.level && (/dedicated/i).test(v.WeaponTextName) && fields.Proficiency && (/simple|martial/i).test(v.theWea.type) && !(/\b(heavy|special)\b/i).test(fields.Description)) { v.theWea.monkweapon = true; }; }, 'If I include the word "Dedicated" in the name of a simple or martial weapon that I\'m proficient with and that doesn\'t have the heavy or special property, it will be treated as a monk weapon.', 1 ] } }, "Optional 2nd-level monk features"); AddFeatureChoice(ClassList.monk.features["unarmored movement"], true, "Ki-Fueled Attack", { name : "Ki-Fueled Attack", extraname : "Optional Monk 3", source : [["T", 48]], description : desc([ "If I use any ki points during my action on my turn, I can make an attack as a bonus action", "This attack has to be in the same turn and with an unarmed strike or a monk weapon" ]), action : [["bonus action", ""]] }, "Optional 3rd-level monk features"); AddFeatureChoice(ClassList.monk.features["deflect missiles"], true, "Quickened Healing (2 ki points)", { name : "Quickened Healing", extraname : "Optional Monk 4", source : [["T", 49]], description : " [2 ki points]\n As an action, I can regain HP equal to the roll of my martial arts die + Proficiency Bonus", action : [["action", ""]] }, "Optional 4th-level monk features"); AddFeatureChoice(ClassList.monk.features["slow fall"], true, "Focused Aim (1-3 ki points)", { name : "Focused Aim", extraname : "Optional Monk 5", source : [["T", 49]], description : " [1-3 ki points]\n When I miss an attack roll, I can spend ki to increase the roll by +2 per ki point (max +6)", prereqeval : function (v) { return classes.known.monk.level >= 5 ? true : "skip"; } }, "Optional 5th-level monk features"); // Monk Subclasses AddSubClass("monk", "way of mercy", { regExpSearch : /^(?=.*mercy)((?=.*(monk|monastic))|((?=.*martial)(?=.*(artist|arts)))|((?=.*spiritual)(?=.*warrior))).*$/i, subname : "Way of Mercy", subnameShort: "Mercy", source : [["T", 49]], features : { "subclassfeature3" : { name : "Implements of Mercy", source : [["T", 49]], minlevel : 3, description : desc([ "I gain proficiency with Insight, Medicine, and herbalism kit; I have a special Merciful Mask" ]), skills : ["Insight", "Medicine"], toolProfs : ["Herbalism kit"], "hands of healing" : { name : "Hands of Healing", extraname : "Way of Mercy 3", source : [["T", 49]], description : levels.map(function (n) { var a = "As an action, I can spend 1 ki point to touch a creature and restore a number of its HP"; var b6 = "It also recovers from one disease or being blinded, deafened, paralyzed, poisoned or stunned"; var c = "When I use Flurry of Blows, I can do this instead of one unarmed strike (no extra ki cost)"; return desc( n < 6 ? [a, c] : [a, b6, n < 11 ? c : c.replace("one", "each")] ); }), action : [["action", ""]], additional : levels.map(function (n) { return n < 3 ? "" : "1 ki point; heal 1d" + (n < 5 ? 4 : n < 11 ? 6 : n < 17 ? 8 : 10) + " + Wisdom modifier"; }) }, "hands of harm" : { name : "Hands of Harm", extraname : "Way of Mercy 3", source : [["T", 50]], description : levels.map(function (n) { var a = "When I hit a creature with an unarmed strike, I can spend 1 ki point to deal extra damage"; var b6 = "I can also subject the target to the poisoned condition until the end of my next turn"; var c11 = "When I use Flurry of Blows, I can do this with one unarmed strike (no extra ki cost)"; var d = "I can use this feature only once per turn"; return desc( n < 6 ? [a, d] : n < 11 ? [a, b6, d] : [a, b6, c11, d] ); }), additional : levels.map(function (n) { return n < 3 ? "" : "1 ki point; 1d" + (n < 5 ? 4 : n < 11 ? 6 : n < 17 ? 8 : 10) + " + Wis mod necrotic damage"; }) }, autoSelectExtrachoices : [{ extrachoice : "hands of healing" }, { extrachoice : "hands of harm" }] }, "subclassfeature6" : { name : "Physician's touch", source : [["T", 50]], minlevel : 6, description : desc([ "Hand of Healing also ends 1 disease, blinded, deafened, paralyzed, poisoned or stunned", "Hand of Harm also causes target to be poisoned until the end of my next turn" ]) }, "subclassfeature11" : { name : "Flurry of Healing and Harm", source : [["T", 50]], minlevel : 11, description : desc([ "I can use Hand of Healing instead of each Flurry of Blows unarmed strike without ki cost", "I can use Hand of Harm on one Flurry of Blows unarmed strike without ki cost" ]), "hand of ultimate mercy" : { name : "Hand of Ultimate Mercy", extraname : "Way of Mercy 17", source : [["T", 50]], description : desc([ "As an action, I can spend 5 ki points and touch a creature that died in the last 24 hours", "The creature returns to life and regains 4d10 + my Wisdom modifier in hit points", "It is also cured of all these conditions: blinded, deafened, paralyzed, poisoned, and stunned" ]), action : [["action", ""]], additional : "5 ki points", usages : 1, recovery : "long rest" }, autoSelectExtrachoices : [{ extrachoice : "hand of ultimate mercy", minlevel : 17 }] } } }); AddSubClass("monk", "way of the astral self", { regExpSearch : /^(?=.*astral)(?=.*(self|projection|travel))((?=.*(monk|monastic))|((?=.*martial)(?=.*(artist|arts)))|((?=.*spiritual)(?=.*warrior))).*$/i, subname : "Way of the Astral Self", subnameShort: "Astral Self", source : [["T", 50]], features : { "subclassfeature3" : { name : "Arms of the Astral Self", source : [["T", 50]], minlevel : 3, description : ' [1 ki; see 3rd page "Notes"]' + desc([ "As a bonus action, I can use my ki to summon the arms of my astral self for 10 minutes" ]), action : [["bonus action", "Summon Astral Arms"]], weaponOptions : [{ baseWeapon : "unarmed strike", regExpSearch : /^(?=.*\bastral\b)(?=.*\barms?\b).*$/i, name : "Astral Arms", source : [["T", 50]], ability : 5, range : "Melee (+5 ft)", damage : [1, "", "Force"], description : "+5 ft reach; Uses Str, Dex, or Wis", isAstralArms : true, selectNow : true }], "astral arms" : { name : "Astral Arms", extraname : "Way of the Astral Self 3", source : [["T", 50]], description : desc([ "As a bonus action, I can summon my astral arms to hover next to or over my own arms", "When I summon them, all creatures of my choice I can see in 10 ft must make a Dex save", "If failed, they take twice my martial arts die in force damage", "I can use the arms to make unarmed strikes, using Wisdom instead of Strength/Dexterity", "I have +5 ft reach on attacks made with my astral arms and they deal force damage", "They last for 10 minutes or until I'm incapacitated or die; I choose their appearance" ]), additional : levels.map(function (n) { return n < 3 ? "" : "1 ki point; 2d" + (n < 5 ? 4 : n < 11 ? 6 : n < 17 ? 8 : 10) + " force damage on summon"; }) }, autoSelectExtrachoices : [{ extrachoice : "astral arms" }] }, "subclassfeature6" : { name : "Visage of the Astral Self", source : [["T", 50]], minlevel : 6, description : ' [1 ki; see 3rd page "Notes"]' + desc([ "As a bonus action, I can use my ki to summon the visage of my astral self for 10 minutes" ]), action : [["bonus action", "Summon Astral Arms and/or Visage", "Summon Astral Arms"]], "astral visage" : { name : "Astral Visage", extraname : "Way of the Astral Self 6", source : [["T", 50]], additional: "1 ki point", description : desc([ "As a bonus action (or when summoning my astral arms), I can summon my astral visage", "It lasts for 10 minutes or until I'm incapacitated or die; I choose its appearance", "My astral visage covers my face like a helmet or mask and grants me the following benefits:", " \u2022 Astral Sight: I can see normally in normal and magical darkness to a distance of 120 ft", " \u2022 Wisdom of the Spirit: I have advantage on Wisdom (Insight) and Charisma (Intimidation)", " \u2022 Word of the Spirit: I can have only one target I can see in 60 ft hear me, or all in 300 ft" ]) }, autoSelectExtrachoices : [{ extrachoice : "astral visage" }] }, "subclassfeature11" : { name : "Body of the Astral Self", source : [["T", 51]], minlevel : 11, description : ' [see 3rd page "Notes"]' + desc([ "When I have both my astral arms and visage summoned, my astral body appears as well", "This spectral body covers me like an armor, connecting my astral arms and astral visage" ]), action : [["reaction", "Deflect Energy"]], "astral body" : { name : "Astral Body", extraname : "Way of the Astral Self 11", source : [["T", 51]], description : " [if both astral arms \u0026 visage are present]" + desc([ " \u2022 Deflect Energy: As a reaction when I take damage, I can reduce it by 1d10 + Wis mod", " I can only do this if the damage I take is acid, cold, fire, force, lightning, or thunder", " \u2022 Empowered Arms: Once per my turn, I can add martial art die to astral arms damage" ]) }, autoSelectExtrachoices : [{ extrachoice : "astral body" }], calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.isAstralArms && classes.known.monk && classes.known.monk.level) { var aMonkDie = function (n) { return n < 5 ? 4 : n < 11 ? 6 : n < 17 ? 8 : 10; }(classes.known.monk.level); fields.Description += (fields.Description ? '; ' : '') + 'Once on each of my turns +1d' + aMonkDie + ' damage'; } }, "Once on each of my turns when I hit a target with my astral arms, I can add my martial arts die to the damage dealt." ] } }, "subclassfeature17" : { name : "Awakened Astral Self", source : [["T", 51]], minlevel : 17, description : ' [5 ki; see 3rd page "Notes"]' + desc([ "As a bonus action, I can use 5 ki points to summon astral arms and visage with benefits" ]), action : [["bonus action", ""]], "astral body" : { name : "Awakened Astral Self", extraname : "Way of the Astral Self 17", source : [["T", 50]], additional: "5 ki points", description : desc([ "As a bonus action, I can summon my astral arms and astral visage, with extra benefits:", " \u2022 Armor of the Spirit: I gain a +2 bonus to my armor class", " \u2022 Astral Barrage: I can do three attacks with the Attack action, if all are with astral arms", "This lasts for 10 minutes or until I'm incapacitated or die" ]) }, autoSelectExtrachoices : [{ extrachoice : "astral body" }] } } }); // >>>>>>>>>>>>>>>>>>>>>>> // // >>> Paladin Options >>> // // >>>>>>>>>>>>>>>>>>>>>>> // // Paladin Optional Class Features AddFeatureChoice(ClassList.paladin.features.spellcasting, true, "Additional Paladin Spells", { name : "Additional Paladin Spells", extraname : "Optional Paladin 2", source : [["T", 52]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "paladin" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["gentle repose", "prayer of healing", "warding bond"]); }, "This optional class feature expands the spell list of the paladin class with the following spells (spell level in brackets): Gentle Repose (2), Prayer of Healing (2), and Warding Bond (2)." ] } }, "Optional 2nd-level paladin features"); // Blind Fighting & Interception already added in the Fighter Options section AddFightingStyle(["paladin"], "Blessed Warrior", { name : "Blessed Warrior Fighting Style", source : [["T", 52], ["UA:CFV", 6]], description : desc([ "I learn two cleric cantrips that count as paladin spells for me and use Cha for spellcasting", "Whenever I gain a paladin level, I can swap one of these for another cleric cantrip" ]), spellcastingBonus : [{ name : "Blessed Warrior", "class" : "cleric", level : [0, 0], times : 2 }] }); AddFeatureChoice(ClassList.paladin.features["subclassfeature3.0-channel divinity"], true, "Harness Divine Power", { name : "Channel Divinity: Harness Divine Power", extraname : "Optional Paladin 3", source : [["T", 52]], description : desc([ "As a bonus action, I can expend a use of my channel divinity to regain one used spell slot", "The level of this spell slot can be no more than half my Proficiency Bonus (rounded up)", "I can only do this so many times per long rest, even if I have uses of channel divinity left" ]), action : [["bonus action", ""]], usages : levels.map(function(n) { return n < 3 ? "" : n < 7 ? 1 : n < 15 ? 2 : 3; }), recovery : "long rest" }, "Optional 3rd-level paladin features"); AddFeatureChoice(ClassList.paladin.features['divine health'], true, "Martial Versatility", { name : "Martial Versatility", extraname : "Optional Paladin 4", source : [["T", 53]], description : " [ASI = Ability Score Improvement]\n Whenever I gain an ASI from the paladin class, I can change my paladin fighting style", prereqeval : function (v) { return classes.known.paladin.level >= 4 ? true : "skip"; } }, "Optional 4th-level paladin features"); // Paladin Subclasses // [dupl_start] reprints from Mythic Odysseys of Theros if (!SourceList.MOT) { AddSubClass("paladin", "oath of glory", { regExpSearch : /^(((?=.*glory)(((?=.*paladin)|((?=.*(exalted|sacred|holy|divine))(?=.*(knight|fighter|warrior|warlord|trooper))))))).*$/i, subname : "Oath of Glory", subnameShort: "Glory", source : [["T", 53], ["MOT", 29]], features : { "subclassfeature3" : { name : "Channel Divinity: Peerless Athlete", source : [["T", 54], ["MOT", 29]], minlevel : 3, description : desc([ "As a bonus action, I can get adv. on Str (Athletics) \u0026 Dex (Acrobatics) checks for 10 min", "In that time, I also add +10 ft to jumps, and double what I can carry, push, drag, \u0026 lift" ]), action : [["bonus action", ""]], spellcastingExtra : ["guiding bolt", "heroism", "enhance ability", "magic weapon", "haste", "protection from energy", "compulsion", "freedom of movement", "commune", "flame strike"] }, "subclassfeature3.1" : { name : "Channel Divinity: Inspiring Smite", source : [["T", 54], ["MOT", 29]], minlevel : 3, description : desc([ "As a bonus action after dealing damage with Divine Smite, I can grant temporary HP", "I distribute the temporary HP how I choose across creatures within 30 ft, including me" ]), additional : levels.map(function (n) { return n < 3 ? "" : "2d8 + " + n + " temporary HP"; }), action : [["bonus action", ""]] }, "subclassfeature7" : { name : "Aura of Alacrity", source : [["T", 54], ["MOT", 29]], minlevel : 7, description: desc("If I'm not incapacitated, allies starting their turn in range gain bonus speed for that turn"), speed : { walk : { spd : "+10", enc : "+10" } }, additional : levels.map(function (n) { return n < 7 ? "" : (n < 18 ? 5 : 10) + "-foot aura; +10 ft walking speed"; }) }, "subclassfeature15" : { name : "Glorious Defense", source : [["T", 54], ["MOT", 29]], minlevel : 15, description : desc([ "As a reaction when I or another in 10 ft is hit with an attack roll, I can grant bonus AC", "I must be able to see the attacker; I add my Cha mod (min 1) to the AC for that attack", "If it misses, I can do a weapon attack vs. the attacker, if in reach, as part of this reaction" ]), usages : "Charisma modifier per ", usagescalc : "event.value = Math.max(1, What('Cha Mod'));", recovery : "long rest", action : [["reaction", ""]] }, "subclassfeature20" : { name : "Living Legend", source : [["T", 54], ["MOT", 29]], minlevel : 20, description : desc([ "As a bonus action, I can empower myself with legends, gaining the following for 1 min:", " \u2022 My otherworldly presence grants me advantage on Charisma checks", " \u2022 Once on each of my turns when I miss with a weapon attack, I can have it hit instead", " \u2022 As a reaction when I fail a saving throw, I can reroll it, but must use the new roll", "I can do this once per long rest, or by expending a 5th-level or higher spell slot (SS 5+)" ]), recovery : "long rest", usages : 1, altResource : "SS 5+", action : [["bonus action", ""]] } } }); } // dupl_end AddSubClass("paladin", "oath of the watchers", { regExpSearch : /^(?=.*watchers)((?=.*paladin)|((?=.*(exalted|sacred|holy|divine))(?=.*(knight|fighter|warrior|warlord|trooper)))).*$/i, subname : "Oath of the Watchers", subnameShort: "Watchers", source : [["T", 54]], features : { "subclassfeature3" : { name : "Channel Divinity: Watcher's Will", source : [["T", 55]], minlevel : 3, description: desc("As an action, Cha mod of creatures I see in 30 ft adv. on Int/Wis/Cha saves for 1 min"), action : [["action", ""]], spellcastingExtra : ["alarm", "detect magic", "moonbeam", "see invisibility", "counterspell", "nondetection", "aura of purity", "banishment", "hold monster", "scrying"] }, "subclassfeature3.1" : { name : "Channel Divinity: Abjure the Extraplanar", source : [["T", 55]], minlevel : 3, description : desc([ "As an action, all aberration, celestial, elemental, fey, fiend in 30 ft must make Wis save", "Succeeds if it can't hear me; On fail, turned for 1 minute or until it takes any damage", "Turned: move away, never within 30 ft of me, no reactions or actions other than Dash", "Turned: may Dodge instead of Dash when nowhere to move and unable to escape bonds" ]), action : [["action", ""]] }, "subclassfeature7" : { name : "Aura of the Sentinel", source : [["T", 55]], minlevel : 7, description: desc("If I'm not incapacitated, chosen creatures in range and I add my Prof Bonus to Initiative"), additional : levels.map(function (n) { return n < 7 ? "" : (n < 18 ? 10 : 30) + "-foot aura"; }), addMod : [{ type : "skill", field : "Init", mod : "prof", text : "I can add my Proficiency Bonus to initiative rolls." }] }, "subclassfeature15" : { name : "Vigilant Rebuke", source : [["T", 55]], minlevel : 15, description : desc([ "As a reaction when I or another I can see succeeds a Int, Wis, or Cha save, I can rebuke", "The creature that forced the saving throw takes 2d8 + my Charisma mod force damage" ]), action : [["reaction", ""]] }, "subclassfeature20" : { name : "Mortal Bulwark", source : [["T", 55]], minlevel : 20, description : desc([ "As a bonus action, I can gain the following benefits for 1 minute:", " \u2022 Truesight 120 ft; Adv. on attacks vs. aberrations, celestials, elementals, fey, and fiends", " \u2022 When I hit and damage a creature with an attack, I can banish it if it fails a Cha save", " It's banished to its native plane if not there now; It's immune for 24 hours on a success", "I can do this once per long rest, or by expending a 5th-level or higher spell slot (SS 5+)" ]), recovery : "long rest", usages : 1, altResource : "SS 5+", action : [["bonus action", ""]] } } }); // >>>>>>>>>>>>>>>>>>>>>>> // // >>> Ranger Options >>> // // >>>>>>>>>>>>>>>>>>>>>>> // // Ranger Optional Class Features var TCoE_Deft_Explorer = function () { var a = { name : "Deft Explorer: Canny", source : [["T", 56]], description: desc("I learn two languages and gain expertise with one skill I'm proficient with"), languageProfs : [2], skillstxt : "Expertise with one skill I'm proficient with", additional : "extra benefits at 6th and 10th level", extraTimes : [1], extraname : "Canny (select skill for expertise)", extrachoices : ["Acrobatics", "Animal Handling", "Arcana", "Athletics", "Deception", "History", "Insight", "Intimidation", "Investigation", "Medicine", "Nature", "Perception", "Performance", "Persuasion", "Religion", "Sleight of Hand", "Stealth", "Survival"], "roving benefit" : { name : "Roving", extraname : "Deft Explorer Benefit 6", source : [["T", 56]], description: desc("I gain +5 ft walking speed and climbing and swimming speed equal to my walking speed"), speed : { walk : { spd : "+5", enc : "+5" }, climb : { spd : "walk", enc : "walk" }, swim : { spd : "walk", enc : "walk" } } }, "tireless benefit" : { name : "Tireless", extraname : "Deft Explorer Benefit 10", source : [["T", 56]], description : desc([ "Whenever I finish a short rest, I reduce my exhaustion level, if any, by 1", "As an action a number of times per long rest, I can give myself temp HP of 1d8 + Wis mod" ]), action : [["action", ""]], additional : "1d8 + Wis Mod", usages : "Prof Bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, autoSelectExtrachoices : [{ extrachoice : "roving benefit", minlevel : 6 }, { extrachoice : "tireless benefit", minlevel : 10 }] } for (var i = 0; i < a.extrachoices.length; i++) { var attr = a.extrachoices[i].toLowerCase(); a[attr] = { name : a.extrachoices[i] + " Expertise", extraname : "Deft Explorer Benefit 1", description : "", source : a.source, skills : [[a.extrachoices[i], "only"]], prereqeval : function(v) { return v.skillProfsLC.indexOf(v.choice) === -1 ? false : v.skillExpertiseLC.indexOf(v.choice) === -1 ? true : "markButDisable"; } } } return a; }(); CreateClassFeatureVariant("ranger", "natural explorer", "Deft Explorer", TCoE_Deft_Explorer); var TCoE_Favored_Foe = { name : "Favored Foe", source : [["T", 56]], description : desc([ "When I hit a creature with an attack roll, I can mark it as my favored enemy for 1 min", "I deal extra damage to it when I mark it and the first time I hit a marked on my turn", "Keeping a creature marked as favored enemy requires me to concentrate, like on a spell" ]), additional : levels.map(function (n) { return "+1d" + (n < 6 ? 4 : n < 14 ? 6 : 8) + " damage"; }), usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", calcChanges : { atkAdd : [ function (fields, v) { if (!v.isSpell && (classes.known.rangerua || classes.known.ranger) && /favou?red.{1,2}(foe|enemy)/i.test(v.WeaponTextName)) { var rngrLvl = classes.known.ranger ? classes.known.ranger.level : classes.known.rangerua.level; fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +1d' + (rngrLvl < 6 ? 4 : rngrLvl < 14 ? 6 : 8) + ' damage'; }; }, 'If I include the words "Favored Foe" or "Favored Enemy" in the name of a weapon, it gets the bonus damage I do against marked favored enemies added to its description.' ] } }; CreateClassFeatureVariant("ranger", "favored enemy", "Favored Foe", TCoE_Favored_Foe); var TCoE_Additional_Ranger_Spells = { name : "Additional Ranger Spells", extraname : "Optional Ranger 2", source : [["T", 57]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if ((spName !== "ranger" && spName !== "rangerua") || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["entangle", "searing smite", "aid", "enhance ability", "gust of wind", "magic weapon", "elemental weapon", "meld into stone", "revivify", "dominate beast", "greater restoration"]); }, "This optional class feature expands the spell list of the ranger class with the following spells (spell level in brackets): Entangle (1), Searing Smite (1), Aid (2), Enhance Ability (2), Gust of Wind (2), Magic Weapon (2), Elemental Weapon (3), Meld into Stone (3), Revivify (3), Dominate Beast (4), and Greater Restoration (5)." ] }, prereqeval : function (v) { return (classes.known.ranger && classes.known.ranger.level >= 2) || (classes.known.rangerau && classes.known.rangerau.level >= 2) ? true : "skip"; } }; AddFeatureChoice(ClassList.ranger.features.spellcasting, true, "Additional Ranger Spells (prereq: level 2 ranger)", TCoE_Additional_Ranger_Spells, "Optional ranger features"); // Blind Fighting & Thrown Weapon Fighting already added in the Fighter Options section AddFightingStyle(["ranger"], "Druidic Warrior", { name : "Druidic Warrior Fighting Style", source : [["T", 57], ["UA:CFV", 7]], description : desc([ "I learn two druid cantrips that count as ranger spells for me and use Wis for spellcasting", "Whenever I gain a ranger level, I can swap one of these for another druid cantrip" ]), spellcastingBonus : [{ name : "Druidic Warrior", "class" : "druid", level : [0, 0], times : 2 }] }); var TCoE_Ranger_Spellcasting_Focus = { name : "Spellcasting Focus", extraname : "Optional Ranger 2", source : [["T", 57], ["UA:CFV", 8]], description: desc("I can use a druidic focus as a spellcasting focus for my ranger spells"), prereqeval : function (v) { return (classes.known.ranger && classes.known.ranger.level >= 2) || (classes.known.rangerau && classes.known.rangerau.level >= 2) ? true : "skip"; } }; AddFeatureChoice(ClassList.ranger.features.spellcasting, true, "Spellcasting Focus (prereq: level 2 ranger)", TCoE_Ranger_Spellcasting_Focus, "Optional ranger features"); var TCoE_Primal_Awareness = { name : "Primal Awareness", source : [["T", 57]], description : desc([ "I get bonus spells known, which do not count against the number of spells I can know", "In addition, I can cast each once per long rest without expending a spell slot" ]), calcChanges : { spellList : [ function(spList, spName, spType) { // Remove the bonus spells from the normally selectable list if ((spName === "ranger" || spName === "rangerua") && spType.indexOf("bonus") === -1) { if (!spList.notspells) spList.notspells = []; spList.notspells = spList.notspells.concat(["speak with animals", "beast sense", "speak with plants", "locate creature", "commune with nature"]); } }, "I know the following spells, without them counting towards the maximum number of spells I can know: Speak with Animals, Beast Sense, Speak with Plants, Locate Creature, and Commune with Nature." ] }, spellcastingBonus : [{ name : "Primal Awareness", spells : ["speak with animals", "beast sense", "speak with plants", "locate creature", "commune with nature"], selection : ["speak with animals", "beast sense", "speak with plants", "locate creature", "commune with nature"], firstCol : "oncelr+markedbox", times : levels.map(function (n) { return n < 5 ? 1 : n < 9 ? 2 : n < 13 ? 3 : n < 17 ? 4 : 5; }) }] }; CreateClassFeatureVariant("ranger", "primeval awareness", "Primal Awareness", TCoE_Primal_Awareness); var TCoE_Ranger_Martial_Versatility = { name : "Martial Versatility", extraname : "Optional Ranger 4", source : [["T", 57]], description : " [ASI = Ability Score Improvement]\n Whenever I gain an ASI from the ranger class, I can change my ranger fighting style", prereqeval : function (v) { return (classes.known.ranger && classes.known.ranger.level >= 4) || (classes.known.rangerau && classes.known.rangerau.level >= 4) ? true : "skip"; } }; AddFeatureChoice(ClassList.ranger.features.spellcasting, true, "Martial Versatility (prereq: level 4 ranger)", TCoE_Ranger_Martial_Versatility, "Optional ranger features"); var TCoE_Natures_Veil = { name : "Nature's Veil", source : [["T", 57]], description : desc([ "As a bonus action, I can become invisible along with any equipment I'm wearing/carrying", "This invisibility lasts until the start of my next turn" ]), action : [["bonus action", ""]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", }; CreateClassFeatureVariant("ranger", "hide in plain sight", "Nature's Veil", TCoE_Natures_Veil); // Add the Ranger alternative class features also to the Revised Ranger, if it exists after all scripts have ran RunFunctionAtEnd(function() { if (!ClassList["rangerua"]) return; CreateClassFeatureVariant("rangerua", "natural explorer", "Deft Explorer", TCoE_Deft_Explorer); // Add Favored Foe as an alternative choice (can't be done by automation because of choices) and add "Favored Foe" variant option // Move some attributes from the main object to the favored enemy choice objects ['additional', 'languageProfs', 'calcChanges'].forEach( function(attr) { var fea = ClassList.rangerua.features["favored enemy"]; if (!fea[attr]) return; // Move the attribute to each of the choices for (var i = 0; i < fea.choices.length; i++) { var aCh = fea[fea.choices[i].toLowerCase()]; if (aCh.source) continue; // don't do options that are not part of the original entry (which don't have a source) aCh[attr] = fea[attr]; } // Now delete the attributes from the parent object delete fea[attr]; }); // Now add the alternative class feature as another choice AddFeatureChoice(ClassList.rangerua.features["favored enemy"], false, "[alternative feature] Favored Foe", TCoE_Favored_Foe); AddFeatureChoice(ClassList.rangerua.features.spellcasting, true, "Additional Ranger Spells (prereq: level 2 ranger)", TCoE_Additional_Ranger_Spells, "Optional ranger features"); AddFeatureChoice(ClassList.rangerua.features.spellcasting, true, "Spellcasting Focus (prereq: level 2 ranger)", TCoE_Ranger_Spellcasting_Focus, "Optional ranger features"); CreateClassFeatureVariant("rangerua", "primeval awareness", "Primal Awareness", TCoE_Primal_Awareness); AddFeatureChoice(ClassList.rangerua.features.spellcasting, true, "Martial Versatility (prereq: level 4 ranger)", TCoE_Ranger_Martial_Versatility, "Optional ranger features"); CreateClassFeatureVariant("rangerua", "hide in plain sight", "Nature's Veil", TCoE_Natures_Veil); }); // Ranger (Beast Master) alternative class feature if (ClassSubList["ranger-beast master"]) { var TCoE_Primal_Companion_Attributes = { hdLinked : ["ranger", "spell-less ranger"], languages : "understands the languages of its master but can't speak", features : [{ name : "Master", description : "The beast obeys the commands of its master and shares its proficiency bonus. It takes its turn during that of its master, on the same initiative count. It can move and take reactions on its own, but only takes the Dodge action on its turn unless its master takes a bonus action to command it to take another action. Its master can also forgo one attack during their Attack action to command the beast to take the Attack action. If its master is incapacitated, the beast can take any action, not just Dodge. The beast vanishes if its master dies." }], traits : [{ name : "Primal Rebirth", description : "Within an hour of the beast's death, its master can take an action to touch it and expend a spell slot to have it return to full HP after 1 minute." }, { name : "Primal Bond", description : "The beast adds it proficiency bonus to all its ability check and saving throws." }, { name : "Exceptional Training (Beast Master 7)", minlevel : 7, description : "The beast's attacks count as magical for overcoming resistances and immunities.", eval : function(prefix, lvl) { AddString(prefix + "Comp.Use.Attack.1.Description", "Counts as magical", "; "); }, removeeval : function(prefix, lvl) { RemoveString(prefix + "Comp.Use.Attack.1.Description", "Counts as magical"); } }, { name : "Bestial Fury (Beast Master 11)", minlevel : 11, description : "When commanded to take the Attack action, the beast can make 2 attacks as part of its Attack action.", eval : function(prefix, lvl) { Value(prefix + "Comp.Use.Attack.perAction", 2); }, removeeval : function(prefix, lvl) { Value(prefix + "Comp.Use.Attack.perAction", 1); } }], addMod : [ { type : "skill", field : "all", mod : "Prof", text : "The primal companion adds it proficiency bonus to all its ability check and saving throws." }, { type : "skill", field : "Init", mod : "Prof", text : "The primal companion adds it proficiency bonus to all its ability check and saving throws." }, { type : "save", field : "all", mod : "Prof", text : "The primal companion adds it proficiency bonus to all its ability check and saving throws." } ], calcChanges : { hp : function (totalHD, HDobj, prefix) { if (!classes.known.ranger && !classes.known["spell-less ranger"]) return; var rngrLvl = classes.known.ranger ? classes.known.ranger.level : classes.known["spell-less ranger"].level; var multiplier = What(prefix + "Comp.Use.HD.Die") == 6 ? [4, "four"] : [5, "five"]; var rngrLvlM = multiplier[0] * rngrLvl; HDobj.alt.push(multiplier[0] + rngrLvlM); HDobj.altStr.push(" = " + multiplier[0] + " as a base\n + " + multiplier[0] + " \xD7 " + rngrLvl + " from " + multiplier[1] + " times its master's ranger level (" + rngrLvlM + ")"); }, setAltHp : true } }; CreateClassFeatureVariant("ranger-beast master", "subclassfeature3", "Primal Companion", { name : "Primal Companion", source : [["T", 61]], description : desc([ "When I finish a long rest, I can summon a primal beast of the land, sea, or sky in 5 ft", "I determine what animal it looks like, but it always has primal markings", "It is friendly to me and my allies, obeys my commands, and acts during my turn", "Unless I use a bonus action to command it, it only takes the Dodge action on its turn", "I can also forgo one attack of my Attack action to command it to take the Attack action", "It can take reactions and move on its turn even if I don't command it", "As an action within 1 hour of it dying, I can touch it and expend a spell slot to revive it", "It then returns to full HP in 1 minute; It vanishes if I summon another one or if I die" ]), action : [ ["bonus action", " (command)"], ["action", " (revive)"] ], creaturesAdd : [ ["Beast of the Land", true], ["Beast of the Sea", true], ["Beast of the Sky", true] ], creatureOptions : [{ name : "Beast of the Land", source : [["T", 61]], size : 3, type : "Beast", alignment : "Unaligned", ac : "11+Dex+Prof", hp : 20, hd : [3, 8], hdLinked : TCoE_Primal_Companion_Attributes.hdLinked, speed : "40 ft, climb 40 ft", scores : [14, 14, 15, 8, 14, 11], senses : "Darkvision 60 ft", passivePerception : 12, languages : TCoE_Primal_Companion_Attributes.languages, challengeRating : "1/4", proficiencyBonus : 2, proficiencyBonusLinked : true, attacksAction : 1, attacks : [{ name : "Maul", ability : 5, damage : [1, 8, "slashing"], modifiers : ["", "Prof"], range : "Melee (5 ft)", description : "+1d6 damage if hits after moving 20 ft straight in same round, see Charge", tooltip : "If the beast moves at least 20 feet straight toward a target and then hits it with a maul attack on the same turn, the target takes an extra 1d6 slashing damage. If the target is a creature, it must succeed on a Strength saving throw against your spell save DC or be knocked prone.", useSpellMod : "ranger" }, { name : "Charge", ability : 5, damage : ["Str save", "", "Knocked prone"], range : "Melee (5 ft)", description : "Str save or knocked prone; Only if maul hits after moving 20 ft straight in same round", tooltip : "If the beast moves at least 20 feet straight toward a target and then hits it with a maul attack on the same turn, the target takes an extra 1d6 slashing damage. If the target is a creature, it must succeed on a Strength saving throw against your spell save DC or be knocked prone.", abilitytodamage : false, dc : true, useSpellMod : "ranger" }], actions : [{ name : "Charge", description : "If the beast moves at least 20 ft straight toward a target and then hits it with a maul attack on the same turn, the target takes an extra 1d6 slashing damage. If the target is a creature, it must succeed on a Strength saving throw against my spell save DC or be knocked prone." }], features : TCoE_Primal_Companion_Attributes.features, traits : TCoE_Primal_Companion_Attributes.traits.map( function(n) { if (!typePF && /Exceptional Training/i.test(n.name)) { var a = newObj(n); a.description = "The beast's attacks count as magical."; return a; } else { return n; } }), addMod : TCoE_Primal_Companion_Attributes.addMod, calcChanges : TCoE_Primal_Companion_Attributes.calcChanges, minlevelLinked : TCoE_Primal_Companion_Attributes.hdLinked }, { name : "Beast of the Sea", source : [["T", 61]], size : 3, type : "Beast", alignment : "Unaligned", ac : "11+Dex+Prof", hp : 20, hd : [3, 8], hdLinked : TCoE_Primal_Companion_Attributes.hdLinked, speed : "5 ft, swim 60 ft", scores : [14, 14, 15, 8, 14, 11], senses : "Darkvision 60 ft", passivePerception : 12, languages : TCoE_Primal_Companion_Attributes.languages, challengeRating : "1/4", proficiencyBonus : 2, proficiencyBonusLinked : true, attacksAction : 1, attacks : [{ name : "Binding Strike", ability : 1, damage : [1, 6, "Pierc./Bludg."], modifiers : ["", "Prof"], range : "Melee (5 ft)", description : "On hit, target is grappled (escape DC is spell DC) and beast can't use attack on others", tooltip : "If the beast hits a target with its blinding strike, the target is grappled (escape DC equal to your spellcasting save DC). Until this grapple ends, the beast can't use this attack on another target.", useSpellMod : "ranger" }], actions : [{ name : "Amphibious", description : "The beast can breathe both air and water." }], features : TCoE_Primal_Companion_Attributes.features, traits : TCoE_Primal_Companion_Attributes.traits, addMod : TCoE_Primal_Companion_Attributes.addMod, calcChanges : TCoE_Primal_Companion_Attributes.calcChanges, minlevelLinked : TCoE_Primal_Companion_Attributes.hdLinked }, { name : "Beast of the Sky", source : [["T", 61]], size : 4, type : "Beast", alignment : "Unaligned", ac : "10+Dex+Prof", hp : 16, hd : [3, 6], hdLinked : TCoE_Primal_Companion_Attributes.hdLinked, speed : "10 ft, fly 60 ft", scores : [6, 16, 13, 8, 14, 11], senses : "Darkvision 60 ft", passivePerception : 12, languages : TCoE_Primal_Companion_Attributes.languages, challengeRating : "1/4", proficiencyBonus : 2, proficiencyBonusLinked : true, attacksAction : 1, attacks : [{ name : "Shred", ability : 2, damage : [1, 6, "slashing"], modifiers : ["", "Prof"], range : "Melee (5 ft)", useSpellMod : "ranger" }], actions : [{ name : "Flyby", description : "The beast doesn't provoke opportunity attacks when it flies out of an enemy's reach." }], features : TCoE_Primal_Companion_Attributes.features, traits : TCoE_Primal_Companion_Attributes.traits, addMod : TCoE_Primal_Companion_Attributes.addMod, calcChanges : TCoE_Primal_Companion_Attributes.calcChanges, minlevelLinked : TCoE_Primal_Companion_Attributes.hdLinked }], eval : function() { // Remove any ranger companion pages What("Template.extras.AScomp").split(",").forEach(function (prefix) { if (What(prefix + "Companion.Remember") === "companion") { DoTemplate("AScomp", "Remove", prefix, true) } }); } }); } // Ranger Subclasses var TCoE_Ranger_Subclass_Fey_Wanderer = AddSubClass("ranger", "fey wanderer", { regExpSearch : /^(?=.*fey)(?=.*wanderer).*$/i, subname : "Fey Wanderer", source : [["T", 58]], fullname : "Fey Wanderer", features : { "subclassfeature3" : { name : "Dreadful Strikes", source : [["T", 58]], minlevel : 3, description : desc([ "My weapons deal extra psychic damage, but only once per turn per creature" ]), additional : levels.map(function (n) { return n < 3 ? "" : "+1d" + (n < 11 ? 4 : 6) + " psychic damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (v.isWeapon && (classes.known.ranger || classes.known.rangerua)) { var rngrLvl = classes.known.ranger ? classes.known.ranger.level : classes.known.rangerua.level; fields.Description += (fields.Description ? '; ' : '') + 'Once per turn per target +1d' + (rngrLvl < 11 ? 4 : 6) + ' psychic damage'; }; }, "When I hit a creature with a weapon, I can deal an extra 1d4 psychic damage to the target, which can take this extra damage only once per turn. From 11th-level, this damage increases to 1d6." ] } }, "subclassfeature3.1" : { name : "Fey Wanderer Magic", source : [["T", 58]], minlevel : 3, description: desc("I get bonus spells known, which do not count against the number of spells I can know"), spellcastingExtra : ["charm person", "misty step", "dispel magic", "dimension door", "mislead"], spellcastingExtraApplyNonconform : true }, "subclassfeature3.2" : { name : "Otherworldly Glamour", source : [["T", 59]], minlevel : 3, description : desc([ "I can add my Wisdom modifier to any Charisma check I make (minimum of +1)", 'I gain proficiency in Deception, Performance, or Persuasion; Use "Choose Feature" button' ]), addMod : ["Deception", "Intimidation", "Performance", "Persuasion"].map(function(skill){return { type : "skill", field : skill, mod : "max(Wis|1)", text : "I can add my Wisdom modifier to any Charisma check I make (minimum of +1)." };}), choices : ["Deception proficiency", "Performance proficiency", "Persuasion proficiency"], "deception proficiency" : { name : "Otherworldly Glamour", description : " [Deception proficiency]\n I can add my Wisdom modifier to any Charisma check I make (minimum of +1)", skills : ["Deception"] }, "performance proficiency" : { name : "Otherworldly Glamour", description : " [Performance proficiency]\n I can add my Wisdom modifier to any Charisma check I make (minimum of +1)", skills : ["Performance"] }, "persuasion proficiency" : { name : "Otherworldly Glamour", description : " [Persuasion proficiency]\n I can add my Wisdom modifier to any Charisma check I make (minimum of +1)", skills : ["Persuasion"] } }, "subclassfeature7" : { name : "Beguiling Twist", source : [["T", 59]], minlevel : 7, description : desc([ "I have advantage on saves against being charmed or frightened; Below uses my save DC", "As a reaction when a creature I see in 120 ft succeeds its save vs. charmed or frightened,", "I can have another I see in 120 ft make a Wis save or be charmed/frightened (I choose)", "This lasts for 1 minute and the target can repeat the save at the end of each of its turns" ]), action : [["reaction", ""]], savetxt : { adv_vs : ["charmed", "frightened"] } }, "subclassfeature11" : { name : "Fey Reinforcements", source : [["T", 59]], minlevel : 11, description : desc([ "I learn Summon Fey; It needs no material component, nor counts against spells known", "Once per long rest, I can cast it without expending a spell slot", "When I cast it, I can have it not require concentration, but than its duration is 1 minute" ]), usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Fey Reinforcements", spells : ["summon fey"], selection : ["summon fey"], firstCol : 'oncelr+markedbox' }], spellChanges : { "summon fey" : { components : "V,S", compMaterial : "", duration : "Conc,1h/1min", changes : "Using my Fey Reinforcements class feature, I can cast Summon Fey without requiring material components and I can cast it once per long rest without requiring a spell slot. Whenever I start casting the spell, I can modify it so that it doesn't require concentration. If I do so, the spell's duration becomes 1 minute for that casting." } } }, "subclassfeature15" : { name : "Misty Wanderer", source : [["T", 59]], minlevel : 15, description : desc([ "I can cast Misty Step without a spell slot and can bring a willing creature in 5 ft along" ]), usages : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest", calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { if (spellKey === "misty step") { spellObj.firstCol = "oncelr+markedbox"; spellObj.description = "I and one willing creature I can see within 5 ft of me teleport 30 ft to a unoccupied space I can see"; return true; } return false; }, "Whenever I cast misty step, I can bring along one willing creature I can see within 5 ft of me. That creature teleports to an unoccupied space of my choice within 5 ft of my destination space.\nI can cast Misty Step without expending a spell slot a number of times per long rest equal to my Wisdom modifier (minimum of once)." ] } } } }); var TCoE_Ranger_Subclass_Swarmkeeper = AddSubClass("ranger", "swarmkeeper", { regExpSearch : /swarmkeeper/i, subname : "Swarmkeeper", source : [["T", 59]], fullname : "Swarmkeeper", features : { "subclassfeature3" : { name : "Gathered Swarm", source : [["T", 60]], minlevel : 3, description : levels.map(function (n) { var a = [ "I'm bonded to a swarm of nature spirits crawling in my space; I choose their appearance", "Once on each of my turns, I can have it assist me after I hit a creature with an attack:", " \u2022 The target takes an extra 1d" + (n < 11 ? 6 : 8) + " piercing damage from the swarm", " \u2022 The target must make a Strength save or be moved 15 ft horizontally by the swarm", " \u2022 The swarm moves me 5 ft horizontally" + (n < 11 ? "" : " and I have half cover until my next turn starts"), "I get to choose the direction whenever the target or I'm moved by the swarm" ]; if (n >= 11) a.splice(4, 0, " Additionally, on a failed save, I can also have the target be knocked prone"); if (n >= 20) a.pop(); return desc(a); }) }, "subclassfeature3.1" : { name : "Swarmkeeper Magic", source : [["T", 60]], minlevel : 3, description : desc([ "I learn Mage Hand; When cast, its hand takes the form of my swarming nature spirits", "I get bonus spells known, which do not count against the number of spells I can know" ]), spellcastingBonus : [{ name : "Swarmkeeper Magic", spells : ["mage hand"], selection : ["mage hand"], }], spellcastingExtra : ["faerie fire", "web", "gaseous form", "arcane eye", "insect plague"], spellcastingExtraApplyNonconform : true }, "subclassfeature7" : { name : "Writhing Tide", source : [["T", 60]], minlevel : 7, description : desc([ "As a bonus action, I can fly on my swarm for 1 minute: 10 ft flying speed and can hover" ]), action : [["bonus action", ""]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature11" : { name : "Mighty Swarm", source : [["T", 60]], minlevel : 11, description : " [improves Gathered Swarm, see above]\n Now 1d8 damage, knocks prone on failed save, or grants me half cover until next turn" }, "subclassfeature15" : { name : "Swarming Dispersal", source : [["T", 60]], minlevel : 15, description : desc([ "As a reaction when I take damage, I can gain resistance to that damage and teleport", "I vanish into my swarm and teleport to an unoccupied space within 30 ft that I can see" ]), action : [["reaction", ""]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" } } }); // Add both subclasses to the revised ranger as well, if it exists if (ClassList.rangerua) { ClassList.rangerua.subclasses[1].push(TCoE_Ranger_Subclass_Fey_Wanderer, TCoE_Ranger_Subclass_Swarmkeeper); }; // >>>>>>>>>>>>>>>>>>>>> // // >>> Rogue Options >>> // // >>>>>>>>>>>>>>>>>>>>> // // Rogue Optional Class Features AddFeatureChoice(ClassList.rogue.features["thieves cant"], true, "Steady Aim", { name : "Steady Aim", extraname : "Optional Rogue 3", source : [["T", 62]], description : desc([ "As a bonus action if I don't move during my turn, I can give myself adv. on my next attack", "This attack roll has to be in the same turn and my speed is 0 until the end of the turn" ]), action : [["bonus action", ""]], prereqeval : function (v) { return classes.known.rogue.level >= 3 ? true : "skip"; } }, "Optional 3rd-level rogue features"); // Rogue Subclasses AddSubClass("rogue", "phantom", { regExpSearch : /^(?!.*(barbarian|bard|cleric|druid|fighter|monk|paladin|ranger|sorcerer|warlock|wizard))(?=.*phantom).*$/i, subname : "Phantom", source : [["T", 62]], fullname : "Phantom", features : { "subclassfeature3" : { name : "Whispers of the Dead", source : [["UA:SR", 1]], source : [["T", 62]], minlevel : 3, description : desc([ "When I finish a rest, I gain a skill or tool proficiency of my choice until I change it again" ]), skillstxt : "Choose one skill or tool; I can change the choice whenever I finish a short or long rest" }, "subclassfeature3.1" : { name : "Wails from the Grave", source : [["T", 62]], minlevel : 3, description : levels.map(function (n) { var a = [ "Directly after I deal sneak attack damage to a creature on my turn, I " + (n < 17 ? "can" : "also") + " harm another", n < 17 ? "I then deal half my sneak attack in necrotic damage to a creature I can see within 30 ft" : "I deal half my sneak attack in necrotic damage to both it and another I can see in 30 ft" ]; if (n >= 9) a.push("I can do this my Proficiency Bonus per long rest, or by destroying a soul trinket (ST)"); return desc(a); }), usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", additional : levels.map(function (n) { return Math.ceil(n / 4) + "d6"; }), altResource : levels.map(function (n) { return n < 9 ? "" : "ST"; }) }, "subclassfeature9" : { name : "Tokens of the Departed", source : [["T", 63]], minlevel : 9, description : " [max Proficiency Bonus of soul trinkets]" + desc([ "As a reaction when I see a creature within 30 ft die, I can create a Tiny soul trinket", "The token of its life essence appears in my free hand; The DM determines its appearance", "While a soul trinket is on my person, I have advantage on death and Constitution saves", "As an action, I can destroy one of my soul trinkets and ask its associated spirit a question", "Its spirit appears and answers concisely in a language it knew; Trinket can be anywhere" ]), action : [ ["reaction", "Create Soul Trinket"], ["action", "Destroy Soul Trinket"] ], extraLimitedFeatures : [{ name : "Soul Trinkets (max Prof Bonus)", usages : "", recovery : "Special" }], savetxt : { text : ["While soul trinket is on me, Adv. on Con and death saves"] } }, "subclassfeature13" : { name : "Ghost Walk", source : [["T", 63]], minlevel : 13, description : desc([ "As a bonus action, I can assume a spectral form with 10 ft flying speed and can hover", "Attacks vs. me have disadv.; I can move through creatures and objects as difficult terrain", "This lasts 10 min; I take 1d10 force damage if I end my turn inside a creature or object", "I can assume this form once per long rest, or by destroying one of my soul trinkets (ST)" ]), action : [["bonus action", " (start/end)"]], usages : 1, recovery : "long rest", altResource : "ST" }, "subclassfeature17" : { name : "Death's Friend", source : [["T", 63]], minlevel : 17, description : desc([ "Wails from the Grave now also deals damage to the target of the original sneak attack", "If I don't have any soul trinkets at the end of a long rest, one appears in my hand" ]) } } }); AddSubClass("rogue", "soulknife", { regExpSearch : /soulknife/i, subname : "Soulknife", source : [["T", 63]], fullname : "Soulknife", abilitySave : 2, features : { "subclassfeature3" : { name : "Psionic Energy Dice", source : [["T", 64]], minlevel : 3, description : desc([ "I gain twice my proficiency bonus of psionic energy dice (PsiD) that fuel my psionics", "I regain all expended psionic energy dice after a long rest; See psionic powers on page 3", "As a bonus action once per short rest, I can regain one expended psionic energy die" ]), additional : levels.map(function(n) { return n < 3 ? "" : n < 5 ? "d6" : n < 11 ? "d8" : n < 17 ? "d10" : "d12"; }), action : [["bonus action", "Regain 1 Psionic Energy Die"]], usages : "Proficiency Bonus \xD7 2 per ", usagescalc : "event.value = Number(How('Proficiency Bonus'))*2", recovery : "long rest", extraLimitedFeatures : [{ name : "Regain 1 Psionic Energy die", usages : 1, recovery : "short rest" }], extraname : "Soulknife 3", "psi-bolstered knack" : { name : "Psionic Power: Psi-Bolstered Knack", source : [["T", 64]], additional: "1 PsiD if successful", description : desc([ "If I fail an check using a skill or tool I'm proficient with, I can add a psionic energy die to it", "The psionic energy die is only expended if this addition turns the failure into a success" ]) }, "psychic whispers" : { name : "Psionic Power: Psychic Whispers", source : [["T", 64]], description : desc([ "As an action, I can select my Prof Bonus of creatures I can see and roll a psionic energy die", "For the roll of hours, I can telepathically communicate with each and they with me", "To send or receive messages (no action), we must be within 1 mile of each other", "A creature must be able to speak a language to do this; It can end the link at any time", "The first time I do this after a long rest, I don't expend the psionic energy die (PsiD)" ]), limfeaname : "Psychic Whispers", action : [["action", ""]], usages : 1, recovery : "long rest", altResource : "PsiD" }, autoSelectExtrachoices : [{ extrachoice : "psi-bolstered knack" }, { extrachoice : "psychic whispers" }] }, "subclassfeature3.1" : { name : "Psychic Blades", source : [["T", 64]], minlevel : 3, description : desc([ "As part of an Attack action, I can manifest a psychic blade from a free hand to attack", "It vanishes immediately after making the attack and leaves no mark on its target", "As a bonus action after this attack, I can manifest and attack with another psychic blade", "To do this, my other hand needs to be free as well and this blade does only 1d4 damage" ]), action : [["bonus action", "Psychic Blade (after Attack action)"]], weaponOptions : [{ regExpSearch : /^(?=.*psychic)(?=.*blade).*$/i, name : "Psychic Blade", source : [["T", 64]], ability : 1, type : "Simple", damage : [1, 6, "psychic"], range : "Melee, 60 ft", description : "Finesse, thrown; Bonus action: 1d4 instead of 1d6", abilitytodamage : true, selectNow : true }] }, "subclassfeature9" : { name : "Soul Blades", source : [["T", 65]], minlevel : 9, description : desc([ 'My psi-suffused soul grants me more psionic powers, see the 3rd page "Notes" section', ]), extraname : "Soulknife 9", "homing strikes" : { name : "Homing Strikes", source : [["T", 65]], additional: "1 PsiD if successful", description : desc([ "If I miss an attack with my psychic blades, I can add a psionic energy die to the attack roll", "The psionic energy die is only expended if this addition turns the miss into a hit" ]) }, "psychic teleportation" : { name : "Psychic Teleportation", source : [["T", 65]], additional: "1 PsiD", description : desc([ "As a bonus action, I can teleport up to 10 ft away times the roll of my psionic energy die", "I manifest a psychic blade and throw it to an empty space I can see before teleporting to it" ]), action : [["bonus action", ""]] }, autoSelectExtrachoices : [{ extrachoice : "homing strikes" }, { extrachoice : "psychic teleportation" }] }, "subclassfeature13" : { name : "Psychic Veil", source : [["T", 65]], minlevel : 13, description : desc([ "As an action, I can become invisible along with what I'm wearing or carrying for 1 hour", "I can end it (no action); It also ends if I damage a creature or force one to make a save", "I can do this once per long rest, or by expending a psionic energy die (PsiD)" ]), action : [["action", ""]], usages : 1, recovery : "long rest", altResource : "PsiD" }, "subclassfeature17" : { name : "Rend Mind", source : [["T", 65]], minlevel : 17, description : desc([ "When I use my psychic blade to deal sneak attack damage to a target, I can have it save", "It must make a Wisdom save (DC 8 + Prof Bonus + Dex mod) or be stunned for 1 min", "It can repeat the save at the end of each of its turns to end being stunned", "I can do this once per long rest, or by expending three psionic energy dice (3 PsiD)" ]), action : [["action", ""]], usages : 1, recovery : "long rest", altResource : "3 PsiD" } } }); // >>>>>>>>>>>>>>>>>>>>>>>> // // >>> Sorcerer Options >>> // // >>>>>>>>>>>>>>>>>>>>>>>> // // Sorcerer Optional Class Features AddFeatureChoice(ClassList.sorcerer.features.spellcasting, true, "Additional Sorcerer Spells", { name : "Additional Sorcerer Spells", extraname : "Optional Sorcerer 1", source : [["T", 65]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "sorcerer" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["grease", "flame blade", "flaming sphere", "magic weapon", "vampiric touch", "fire shield", "bigby's hand", "flesh to stone", "otiluke's freezing sphere", "demiplane"]); }, "This optional class feature expands the spell list of the sorcerer class with the following spells (spell level in brackets): Grease (1), Flame Blade (2), Flaming Sphere (2), Magic Weapon (2), Vampiric Touch (3), Fire Shield (4), Bigby's Hand (5), Flesh to Stone (6), Otiluke's Freezing Sphere (6), and Demiplane (8)." ] } }, "Optional sorcerer features"); // Metamagic options AddFeatureChoice(ClassList.sorcerer.features["metamagic"], true, "Seeking Spell", { name : "Seeking Spell", source : [["T", 66]], additional: "2 sorcery points", description : desc([ "If I miss an attack roll for a spell, I can reroll the d20 and must use the new roll", "I can do this even if I already used another Metamagic option during the casting of the spell" ]) }); AddFeatureChoice(ClassList.sorcerer.features["metamagic"], true, "Transmuted Spell", { name : "Transmuted Spell", source : [["T", 66]], additional: "1 sorcery point", description : desc([ "If the spell deals one of the below damage types, I can change it to another on the list", "These damage types are: acid, cold, fire, lightning, poison, or thunder" ]) }); // Other optional features AddFeatureChoice(ClassList.sorcerer.features.spellcasting, true, "Sorcerous Versatility (prereq: level 4 sorcerer)", { name : "Sorcerous Versatility", extraname : "Optional Sorcerer 4", source : [["T", 66]], description : " [ASI = Ability Score Improvement]" + desc([ "Whenever I gain an ASI from the sorcerer class, I can change a cantrip or Metamagic choice", "I can select either another cantrip from the sorcerer spell list or another Metamagic option" ]), prereqeval : function (v) { return classes.known.sorcerer.level >= 4 ? true : "skip"; } }, "Optional sorcerer features"); AddFeatureChoice(ClassList.sorcerer.features.spellcasting, true, "Magical Guidance (prereq: level 5 sorcerer)", { name : "Magical Guidance", extraname : "Optional Sorcerer 5", source : [["T", 66]], description : " [1 sorcery point]\n When I make an ability check that fails, I can reroll the d20 and must use the new roll", prereqeval : function (v) { return classes.known.sorcerer.level >= 5 ? true : "skip"; } }, "Optional sorcerer features"); // Sorcerer Subclasses AddSubClass("sorcerer", "aberrant mind", { regExpSearch : /^(?=.*aberrant)(?=.*mind).*$/i, subname : "Aberrant Mind", source : [["T", 67]], features : { "subclassfeature1" : { name : "Psionic Spells", source : [["T", 67]], minlevel : 1, description : desc([ "I learn additional spells, which do not count towards the number of spell I can know", "Whenever I gain a sorcerer level, I can replace one of these with another of the same level", "It must be a divination or enchantment spell on the sorcerer, wizard, or warlock spell list" ]), spellcastingBonus : [{ name : "Psionic Spells (cantrip)", "class" : ["sorcerer", "warlock", "wizard"], school : ["Ench", "Div"], level : [0, 0], extraspells : ["mind sliver"], selection : ["mind sliver"] }, { name : "Psionic Spells (1st-level)", "class" : ["sorcerer", "warlock", "wizard"], school : ["Ench", "Div"], level : [1, 1], firstCol : "PS", extraspells : ["arms of hadar", "dissonant whispers"], selection : ["arms of hadar", "dissonant whispers"], times : 2 }, { name : "Psionic Spells (2nd-level)", "class" : ["sorcerer", "warlock", "wizard"], school : ["Ench", "Div"], level : [2, 2], firstCol : "PS", extraspells : ["calm emotions", "detect thoughts"], selection : ["calm emotions", "detect thoughts"], times : levels.map(function (n) { return n < 3 ? 0 : 2; }) }, { name : "Psionic Spells (3rd-level)", "class" : ["sorcerer", "warlock", "wizard"], school : ["Ench", "Div"], level : [3, 3], firstCol : "PS", extraspells : ["hunger of hadar", "sending"], selection : ["hunger of hadar", "sending"], times : levels.map(function (n) { return n < 5 ? 0 : 2; }) }, { name : "Psionic Spells (4th-level)", "class" : ["sorcerer", "warlock", "wizard"], school : ["Ench", "Div"], level : [4, 4], firstCol : "PS", extraspells : ["evard's black tentacles", "summon aberration"], selection : ["evard's black tentacles", "summon aberration"], times : levels.map(function (n) { return n < 7 ? 0 : 2; }) }, { name : "Psionic Spells (5th-level)", "class" : ["sorcerer", "warlock", "wizard"], school : ["Ench", "Div"], level : [5, 5], firstCol : "PS", extraspells : ["rary's telepathic bond", "telekinesis"], selection : ["rary's telepathic bond", "telekinesis"], times : levels.map(function (n) { return n < 9 ? 0 : 2; }) }] }, "subclassfeature1.1" : { name : "Telepathic Speech", source : [["T", 67]], minlevel : 1, description : desc([ "As a bonus action, I can telepathic link myself with a creature within 30 ft that I can see", "If we share a language, we can talk telepathically while in my Cha mod of miles (min 1)", "This last for my level in minutes, until I'm incapacitated, I die, or I use this feature again" ]), action : [["bonus action", ""]], additional : levels.map(function (n) { return n + " minute" + (n > 1 ? "s" : ""); }) }, "subclassfeature6" : { name : "Psionic Sorcery", source : [["T", 68]], minlevel : 6, description : desc([ "I can expend sorcery points instead of a spell slot to cast a spell from my Psionic Spells", "This costs the spell's level in sorcery points, but in doing so requires no other components", "However, I do need to provide a material components if it is consumed by the spell" ]) }, "subclassfeature6.1" : { name : "Psychic Defenses", source : [["T", 68]], minlevel : 6, description: desc("I gain resistance to psychic damage and adv. on saves vs. being charmed or frightened"), dmgres : ["Psychic"], savetxt : { adv_vs : ["charmed", "frightened"] } }, "subclassfeature14" : { name : "Revelation in Flesh", source : [["T", 68]], minlevel : 14, description : desc([ "As a bonus action, I can expend 1 or more sorcery points to transform for 10 minutes", "For each sorcery point used, I gain one of the following benefits of my choice:", " \u2022 I can see any invisible creatures within 60 ft of me not behind total cover", " \u2022 I gain a flying speed equal to my walking speed and I can hover", " \u2022 I gain a swimming speed equal to twice my walking speed \u0026 I can breathe underwater", " \u2022 I can move, with equipment, through any space as narrow as 1 inch without squeezing", " Also, I can spend 5 ft of movement to escape form a grapple or nonmagical restraints" ]), action : [["bonus action", ""]], additional : "1+ sorcery points" }, "subclassfeature18" : { name : "Warping Implosion", source : [["T", 68]], minlevel : 18, description : desc([ "As an action, I can teleport to an unoccupied space I can see within 120 ft", "All within 30 ft of where I left take 3d10 force damage and must make a Strength save", "If failed, each is pulled towards the space I left, ending up in the nearest empty space", "If successful, a creature takes only half damage and isn't pulled", "I can do this once per long rest, or by expending 5 sorcery points (5 SP)" ]), action : [["action", ""]], recovery : "long rest", usages : 1, altResource : "5 SP" } } }); AddSubClass("sorcerer", "clockwork soul", { regExpSearch : /^((?=.*(sorcerer|witch))(?=.*mechanus)|(?=.*clockwork)(?=.*soul)).*$/i, subname : "Clockwork Soul", source : [["T", 68]], fullname : "Clockwork Soul", features : { "subclassfeature1" : { name : "Clockwork Magic", source : [["T", 68]], minlevel : 1, description : desc([ "I learn additional spells, which do not count towards the number of spell I can know", "Whenever I gain a sorcerer level, I can replace one of these with another of the same level", "It must be an abjuration or transmutation spell on the sorcerer, wizard, or warlock list" ]), spellcastingBonus : [{ name : "Clockwork Magic (1st-level)", "class" : ["sorcerer", "warlock", "wizard"], school : ["Abjur", "Trans"], level : [1, 1], extraspells : ["alarm", "protection from evil and good"], selection : ["alarm", "protection from evil and good"], times : 2 }, { name : "Clockwork Magic (2nd-level)", "class" : ["sorcerer", "warlock", "wizard"], school : ["Abjur", "Trans"], level : [2, 2], extraspells : ["aid", "lesser restoration"], selection : ["aid", "lesser restoration"], times : levels.map(function (n) { return n < 3 ? 0 : 2; }) }, { name : "Clockwork Magic (3rd-level)", "class" : ["sorcerer", "warlock", "wizard"], school : ["Abjur", "Trans"], level : [3, 3], extraspells : ["dispel magic", "protection from energy"], selection : ["dispel magic", "protection from energy"], times : levels.map(function (n) { return n < 5 ? 0 : 2; }) }, { name : "Clockwork Magic (4th-level)", "class" : ["sorcerer", "warlock", "wizard"], school : ["Abjur", "Trans"], level : [4, 4], extraspells : ["freedom of movement", "summon construct"], selection : ["freedom of movement", "summon construct"], times : levels.map(function (n) { return n < 7 ? 0 : 2; }) }, { name : "Clockwork Magic (5th-level)", "class" : ["sorcerer", "warlock", "wizard"], school : ["Abjur", "Trans"], level : [5, 5], extraspells : ["greater restoration", "wall of force"], selection : ["greater restoration", "wall of force"], times : levels.map(function (n) { return n < 9 ? 0 : 2; }) }] }, "subclassfeature1.1" : { name : "Restore Balance", source : [["T", 69]], minlevel : 1, description : desc([ "As a reaction when a creature I can see in 60 ft is about to roll a d20 with adv./disadv.,", "I can prevent that roll from being affected by advantage and disadvantage" ]), action : [["reaction", ""]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature6" : { name : "Bulwark of Law", source : [["T", 69]], minlevel : 6, description : desc([ "As an action, I can imbue a creature I can see within 30 ft with a magical ward", "The ward has a number of d8s equal to the number of sorcery points I expend to do this", "As a reaction when the creature takes damage, it can expend any number of those dice", "The dice roll reduces the damage; The ward lasts until I finish a long rest or do this again" ]), additional : "1-5 sorcery points; 1d8 per point", action : [["action", ""]] }, "subclassfeature14" : { name : "Trance of Order", source : [["T", 69]], minlevel : 14, description : desc([ "As a bonus action, I can enter a state of clockwork consciousness for 1 minute", "While in this state, attack rolls against me can't benefit from advantage", "Also, I can then treat a d20 roll below 9 as a 10 for my attack rolls, checks, and saves", "I can do this once per long rest, or by expending 5 sorcery points (5 SP)" ]), action : [["bonus action", ""]], usages : 1, recovery : "long rest", altResource : "5 SP" }, "subclassfeature18" : { name : "Clockwork Cavalcade", source : [["T", 69]], minlevel : 18, description : desc([ "As an action, I can call spirits to bring balance in a 30-ft cube originating from me", "Inside the cube, the intangible spirits do all the following before vanishing:", " \u2022 Restore up to 100 HP, divided among the creatures in the cube as I choose", " \u2022 Repair all damaged objects entirely in the cube instantly", " \u2022 End every spell of 6th-level or lower on objects or creatures of my choice in the cube", "I can do this once per long rest, or by expending 7 sorcery points (7 SP)" ]), action : [["action", ""]], usages : 1, recovery : "long rest", altResource : "7 SP" } } }); // >>>>>>>>>>>>>>>>>>>>>>> // // >>> Warlock Options >>> // // >>>>>>>>>>>>>>>>>>>>>>> // // Warlock Optional Class Features AddFeatureChoice(ClassList.warlock.features["pact magic"], true, "Additional Warlock Spells", { name : "Additional Warlock Spells", extraname : "Optional Warlock 1", source : [["T", 70]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "warlock" || (spType.indexOf("bonus") !== -1 && (!spList["class"] || spList["class"] !== "warlock"))) return; spList.extraspells = spList.extraspells.concat(["mislead", "planar binding", "teleportation circle", "gate", "weird"]); }, "This optional class feature expands the spell list of the warlock class with the following spells (spell level in brackets): Mislead (5), Planar Binding (5), Teleportation Circle (5), Gate (9), and Weird (9)." ] } }, "Optional 1st-level warlock features"); AddWarlockPactBoon("Pact of the Talisman", { name : "Pact of the Talisman", source : [["T", 70]], description : desc([ "When the wearer of this amulet fails an ability check, they can add +1d4 to the roll", "I can give the talisman to others to use; The talisman turns to ash when I die", "If I lose my talisman, I can perform a 1-hour ceremony to gain a replacement", "This ceremony destroys the previous amulet and can be done during a short or long rest" ]), usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus')", recovery : "long rest" }); AddFeatureChoice(ClassList.warlock.features["pact boon"], true, "Eldritch Versatility", { name : "Eldritch Versatility", extraname : "Optional Warlock 4", source : [["T", 70]], description : " [ASI = Ability Score Improvement]" + desc([ "Whenever I gain an ASI from the warlock class, I can change one of the following things:", " \u2022 I can replace one warlock cantrip with another cantrip from the warlock spell list", " \u2022 I can replace my pact boon for another", " \u2022 If I have Mystic Arcanum, I can replace one spell from it with another of the same level" ]), prereqeval : function (v) { return classes.known.warlock.level >= 4 ? true : "skip"; } }, "Optional 4th-level warlock features"); // Eldritch Invocation options AddWarlockInvocation("Bond of the Talisman (prereq: level 12 warlock, Pact of the Talisman)", { name : "Bond of the Talisman", source : [["T", 70]], submenu : "[improves Pact of the Talisman]", description : desc([ "As an action, I can teleport to the unoccupied space closest to the wearer of my talisman", "The talisman's wearer can do the same to teleport to me; Only works if both on same plane" ]), prereqeval : function(v) { return classes.known.warlock.level >= 12 && GetFeatureChoice('class', 'warlock', 'pact boon').indexOf("pact of the talisman") !== -1; }, action : [["action", ""]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus')", recovery : "long rest" }); AddWarlockInvocation("Eldritch Mind", { name : "Eldritch Mind", source : [["T", 71]], description: desc("I have advantage on my Constitution saving throws to maintain concentration on a spell"), savetxt : { text : "Adv. on Con (Concentration) saves" } }); AddWarlockInvocation("Far Scribe (prereq: level 5 warlock, Pact of the Tome)", { name : "Far Scribe", source : [["T", 71]], submenu : "[improves Pact of the Tome]", description : desc([ "My book of shadows has a new page; As an action, a creature can write its name on it", "This page can hold my Proficiency Bonus in creature names; I can remove one as an action", "I can cast Sending without a spell slot or material components, targeting one on the page", "Instead of saying the message, I write it on the page and any reply appears there as well", "This writing disappears after 1 minute; The target still hears the message in their mind" ]), prereqeval : function(v) { return classes.known.warlock.level >= 5 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the tome'; }, action : [["action", " (erase name)"]], spellcastingBonus : [{ name : "Far Scribe", spells : ["sending"], selection : ["sending"], firstCol : "atwill" }], spellChanges : { "sending" : { components : "V,S", compMaterial : "", description : "Send 25 word message to crea named in book of shadows; it recognizes me and can respond 25 words", changes : "By using Far Scribe, I can cast Sending without using a spell slot or material components, but only to target one of the creatures that wrote their name in my book of shadows. Instead of speaking the message, I write it in my book and any response appears there as well, lasting for 1 minute. The target still hears the message in their mind." } } }); AddWarlockInvocation("Gift of the Protectors (prereq: level 9 warlock, Pact of the Tome)", { name : "Gift of the Protectors", source : [["T", 71]], submenu : "[improves Pact of the Tome]", description : desc([ "My book of shadows has a new page; As an action, a creature can write its name on it", "This page can hold my Proficiency Bonus in creature names; I can remove one as an action", "If a creature whose name is on the page drops to 0 HP, it magically drops to 1 HP instead", "This doesn't work if the creature would be killed outright" ]), prereqeval : function(v) { return classes.known.warlock.level >= 9 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the tome'; }, action : [["action", " (erase name)"]], usages : 1, recovery : "long rest" }); AddWarlockInvocation("Investment of the Chain Master (prereq: Pact of the Chain)", { name : "Investment of the Chain Master", source : [["T", 71]], submenu : "[improves Pact of the Chain]", description : desc([ "When I cast Find Familiar, the summoned create has additional benefits:", "\u2022 It gains a flying or swimming speed of 40 ft (my choice at casting)", "\u2022 As a bonus action, I can command it to take the Attack action", "\u2022 Its weapon attacks are considered magical for overcoming immunities and resistances", "\u2022 If it forces a creature to make a saving throw, it uses my spell save DC", "\u2022 As a reaction when it takes damage, I can grant it resistance against that damage" ]), action : [["bonus action", " (command to attack)"], ["reaction", " (give resistance)"]], prereqeval : function(v) { return GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the chain'; }, calcChanges : { companionCallback : [function(prefix, oCrea, bAdd, sCompType) { if (sCompType !== "pact_of_the_chain") return; var strFea = "##\u25C6 Investment of the Chain Master (TCoE 71)##. The familiar gains 40 ft fly or swim speed (my choice), its attacks are considered magical, and it can use my spell save DC instead of its own DC's (if any)."; var strSpd = "fly or swim 40 ft"; if (What("Unit System") === "metric") { strFea = ConvertToMetric(strFea, 0.5); strSpd = ConvertToMetric(strSpd, 0.5); } var aFnc = bAdd ? AddString : RemoveString; aFnc(prefix + "Comp.Use.Features", strFea, true); aFnc(prefix + "Comp.Use.Speed", strSpd, typePF ? ",\n" : ", "); for (var i = 1; i <= 3; i++) { var baseFld = prefix + "Comp.Use.Attack." + i; var weaDescrFld = baseFld + ".Description"; var strWeaDescr = What(weaDescrFld); if (bAdd && What(baseFld + ".Weapon Selection") && !(/(,|;)? ?counts as magical/i).test(strWeaDescr)) { AddString(weaDescrFld, "Counts as magical", "; "); } else if (!bAdd) { Value(weaDescrFld, strWeaDescr.replace(/(,|;)? ?counts as magical/i, '')); } } }, "My pact of the chain familiars gain an extra feature listing the extra bonuses they gain."] } }); AddWarlockInvocation("Protection of the Talisman (prereq: level 7 warlock, Pact of the Talisman)", { name : "Protection of the Talisman", source : [["T", 71]], submenu : "[improves Pact of the Talisman]", description: desc("When the wearer of my talisman fails a saving throw, they can add +1d4 to the roll"), prereqeval : function(v) { return classes.known.warlock.level >= 7 && GetFeatureChoice('class', 'warlock', 'pact boon').indexOf("pact of the talisman") !== -1; }, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus')", recovery : "long rest" }); AddWarlockInvocation("Rebuke of the Talisman (prereq: Pact of the Talisman)", { name : "Rebuke of the Talisman", source : [["T", 71]], submenu : "[improves Pact of the Talisman]", description : desc([ "As a reaction when the wearer of my talisman is hit, I deal damage and push the attacker", "To be able to do this, I have to see the attacker and it has to be within 30 ft of me", "I deal it my Proficiency Bonus in psychic damage and push it 10 ft away from the talisman" ]), prereqeval : function(v) { return GetFeatureChoice('class', 'warlock', 'pact boon').indexOf("pact of the talisman") !== -1; }, action : [["reaction", ""]] }); AddWarlockInvocation("Undying Servitude (prereq: level 5 warlock)", { name : "Undying Servitude", description: desc("Once per long rest, I can cast Animate Dead without using a spell slot"), source : [["T", 71]], submenu : "[warlock level 5+]", usages : 1, additional : "no spell slot", recovery : "long rest", spellcastingBonus : [{ name : "Undying Servitude", spells : ["animate dead"], selection : ["animate dead"], firstCol : "oncelr" }], prereqeval : function(v) { return classes.known.warlock.level >= 5; } }); // Warlock Subclasses AddSubClass("warlock", "the fathomless", { regExpSearch : /^(?=.*warlock)(?=.*fathomless).*$/i, subname : "the Fathomless", source : [["T", 72]], spellcastingExtra : ["create or destroy water", "thunderwave", "gust of wind", "silence", "lightning bolt", "sleet storm", "control water", "summon elemental", "bigby's hand", "cone of cold"], features : { "subclassfeature1" : { name : "Tentacle of the Deeps", source : [["T", 72]], minlevel : 1, description : desc([ "As a bonus action, I can summon or move a spectral tentacle and make an attack with it", "I can summon it to a space within 60 ft that I can see or move an existing one 30 ft", "I make melee spell attacks with 10 ft reach with it that deal cold damage", "Creatures hit by the tentacle suffer 10 ft speed reduction until the start of my next turn", "The 10-ft long tentacle lasts for 1 minute or until I summon another" ]), action : [["bonus action", " (summon/move)"]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", additional : levels.map(function (n) { return (n < 10 ? 1 : 2) + "d8"; }), weaponOptions : [{ regExpSearch : /^(?=.*tentacle)(?=.*\b(deeps?|spectral)\b).*$/i, name : "Tentacle of the Deeps", source : [["T", 72]], ability : 6, type : "Spell", damage : [1, 8, "Cold"], range : "Melee (10 ft)", description : "On hit, -10 ft speed until my next turn starts", abilitytodamage : false, tentacleOfTheDeeps : true, selectNow : true }], calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.tentacleOfTheDeeps && classes.known.warlock.level >= 10) { fields.Damage_Die = '2d8'; }; }, '', 1 ] } }, "subclassfeature1.1" : { name : "Gift of the Sea", source : [["T", 72]], minlevel : 1, description: desc("I have a swimming speed of 40 ft and I can breathe underwater"), speed : { swim : { spd : 40, enc : 30 } } }, "subclassfeature6" : { name : "Oceanic Soul", source : [["T", 73]], minlevel : 6, description : desc([ "I gain resistance to cold damage now that I'm even more at home in the depths", "While I'm fully submerged, others who are as well can understand my speech and I theirs" ]), dmgres : ["Cold"], spellChanges : { "summon elemental" : { description : "Summon Water Elemental Spirit; obeys commands; takes turn after mine; vanishes at 0 hp (400gp)", changes : "My warlock spell Summon Elemental can only call forth an elemental spirit of water." } } }, "subclassfeature6.1" : { name : "Guardian Coil", source : [["T", 73]], minlevel : 6, description : desc([ "As a reaction when I or a creature I see in 10 ft of my tentacle is damaged, it can help", "The tentacle interposes itself, reducing the damage of the attack for that creature" ]), action : [["reaction", ""]], additional : levels.map(function (n) { return (n < 10 ? 1 : 2) + "d8 damage reduced"; }) }, "subclassfeature10" : { name : "Grasping Tentacles", source : [["T", 73]], minlevel : 10, description : desc([ "I learn Evard's Black Tentacles; Once per long rest, I can cast it without using a spell slot", "It counts as a warlock spell for me, but not towards the number of spell I can know", "Whenever I cast it, I gain temporary hit points equal to my warlock level", "Moreover, damage can't break my concentration on this spell" ]), action : [["action", ""]], additional : levels.map(function (n) { return n < 10 ? "" : n + " temp HP; 1\xD7 per long rest no SS"; }), spellcastingBonus : [{ name : "Grasping Tentacles", spells : ["evard's black tentacles"], selection : ["evard's black tentacles"], firstCol : "oncelr+markedbox" }], extraLimitedFeatures : [{ name : "Evard's Black Tentacles (no spell slot)", usages : 1, recovery : "long rest" }], calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { if (spellKey === "evard's black tentacles") { spellObj.description = "I temp hp; All enter/start in 20-ft rad save or restrained \u0026 3d6 Bludg. dmg/rnd; Str/Dex check escape"; spellObj.duration = "Conc*, 1 min"; return true; } }, "Whenever I cast Evard's Black Tentacles, I gain temporary hit points equal to my warlock level.\n \u2022 Damage can't break my concentration on this spell." ] } }, "subclassfeature14" : { name : "Fathomless Plunge", source : [["T", 73]], minlevel : 14, description : desc([ "As an action, I can teleport myself and up to 5 willing creatures I can see within 30 ft", "We reappear up to 1 mile away, inside or within 30 ft of a body of water I've seen" ]), action : [["action", ""]], recovery : "short rest", usages : 1 } } }); AddSubClass("warlock", "the genie", { regExpSearch : /^(?=.*warlock)(?=.*(genie|dao|djinni|efreeti|marid)).*$/i, subname : "the Genie", source : [["T", 73], ["UA:SR", 2]], features : { "subclassfeature1" : { name : "Choose Genie Kind", source : [["T", 73], ["UA:SR", 3]], minlevel : 1, description : desc('Use the "Choose Feature" button above to choose the kind of genie your patron is'), calcChanges : { spellList : [ function(spList, spName, spType) { if (spType.indexOf("bonus") !== -1 && spList.name && /mystic arcanum/i.test(spList.name) && spList.level[0] === 9) { spList.extraspells.push("wish"); } else if (spType.indexOf("bonus") === -1 && spName === "warlock") { if (!spList.notspells) spList.notspells = []; spList.notspells.push("wish"); } }, "The Genie patron adds Wish as a spell available for my 9th-level Mystic Arcanum selection." ] }, choices : ["Dao (earth)", "Djinni (air)", "Efreeti (fire)", "Marid (water)"], "dao (earth)" : { name : "Dao Genie Patron", description: desc("My genie patron is a Dao, associated with earth"), spellcastingExtra : ["detect evil and good", "sanctuary", "phantasmal force", "spike growth", "create food and water", "meld into stone", "phantasmal killer", "stone shape", "creation", "wall of stone", "wish"] }, "djinni (air)" : { name : "Djinni Genie Patron", description: desc("My genie patron is a Djinni, associated with air"), spellcastingExtra : ["detect evil and good", "thunderwave", "gust of wind", "phantasmal force", "create food and water", "wind wall", "greater invisibility", "phantasmal killer", "creation", "seeming", "wish"] }, "efreeti (fire)" : { name : "Efreeti Genie Patron", description: desc("My genie patron is an Efreeti, associated with fire"), spellcastingExtra : ["burning hands", "detect evil and good", "phantasmal force", "scorching ray", "create food and water", "fireball", "fire shield", "phantasmal killer", "creation", "flame strike", "wish"] }, "marid (water)" : { name : "Marid Genie Patron", description: desc("My genie patron is a Marid, associated with water"), spellcastingExtra : ["detect evil and good", "fog cloud", "blur", "phantasmal force", "create food and water", "sleet storm", "control water", "phantasmal killer", "cone of cold", "creation", "wish"] }, choiceDependencies : [{ feature : "subclassfeature1.3" }, { feature : "subclassfeature6" }] }, "subclassfeature1.1" : { name : "Genie's Vessel", source : [["T", 73], ["UA:SR", 3]], minlevel : 1, description : desc([ "My patron gifts me a magical vessel, a Tiny object, granting me a measure of its power", "I choose the vessel's appearance; I can use it as my spellcasting focus for warlock spells", "The vessel's AC is my spell save DC and it has my warlock level + Proficiency Bonus in HP", "If it is destroyed or lost, I can get a replacement with a 1-hour ceremony during a rest" ]) }, "subclassfeature1.2" : { name : "Genie's Vessel: Bottled Respite", source : [["T", 74], ["UA:SR", 3]], minlevel : 1, description : desc([ "As an action, I can vanish and enter the extradimensional space inside my genie's vessel", "The vessel stays in its location; The space inside is a 20-ft high, 20-ft radius cylinder", "As a bonus action, I can exit my vessel; I exit it early if I die or the vessel is destroyed", "I can remain inside for twice my Proficiency Bonus in hours; Objects can be left inside" ]), limfeaname : "Bottled Respite", action : [["action", " (enter)"], ["bonus action", " (eject)"]], usages : 1, recovery : "long rest" }, "subclassfeature1.3" : { name : "Genie's Wrath", source : [["T", 73], ["UA:SR", 3]], minlevel : 1, description : desc([ "I can deal bonus damage on my attacks, its type depending on my patron's genie kind", 'Use the "Choose Feature" button above to choose the kind of genie your patron is' ]), choices : ["dao (earth)", "djinni (air)", "efreeti (fire)", "marid (water)"], choicesNotInMenu : true, "dao (earth)" : { name : "Dao's Wrath", description : " [once on each of my turns]\n When I hit an attack, I can have it deal my Prof Bonus in extra bludgeoning damage", calcChanges : { atkAdd : [ function (fields, v) { if (!v.isDC) { fields.Description += (fields.Description ? '; ' : '') + 'Once per my turn +' + How('Proficiency Bonus') + ' bludgeoning damage'; } }, "Once on each of my turns, I can have one of my attacks that hit deal extra bludgeoning damage equal to my proficiency bonus." ] } }, "djinni (air)" : { name : "Djinni's Wrath", description : " [once on each of my turns]\n When I hit an attack, I can have it deal my Proficiency Bonus in extra thunder damage", calcChanges : { atkAdd : [ function (fields, v) { if (!v.isDC) { fields.Description += (fields.Description ? '; ' : '') + 'Once per my turn +' + How('Proficiency Bonus') + ' thunder damage'; } }, "Once on each of my turns, I can have one of my attacks that hit deal extra thunder damage equal to my proficiency bonus." ] } }, "efreeti (fire)" : { name : "Efreeti's Wrath", description : " [once on each of my turns]\n When I hit an attack, I can have it deal my Proficiency Bonus in extra fire damage", calcChanges : { atkAdd : [ function (fields, v) { if (!v.isDC) { fields.Description += (fields.Description ? '; ' : '') + 'Once per my turn +' + How('Proficiency Bonus') + ' fire damage'; } }, "Once on each of my turns, I can have one of my attacks that hit deal extra fire damage equal to my proficiency bonus." ] } }, "marid (water)" : { name : "Marid's Wrath", description : " [once on each of my turns]\n When I hit an attack, I can have it deal my Proficiency Bonus in extra cold damage", calcChanges : { atkAdd : [ function (fields, v) { if (!v.isDC) { fields.Description += (fields.Description ? '; ' : '') + 'Once per my turn +' + How('Proficiency Bonus') + ' cold damage'; } }, "Once on each of my turns, I can have one of my attacks that hit deal extra cold damage equal to my proficiency bonus." ] } } }, "subclassfeature6" : { name : "Elemental Gift", source : [["T", 75], ["UA:SR", 3]], minlevel : 6, description : desc([ "I gain resistance to a damage type depending on my patron's genie kind", 'Use the "Choose Feature" button above to choose the kind of genie your patron is', "As a bonus action, I can gain a flying speed of 30 ft and I can hover, for 10 minutes" ]), choices : ["dao (earth)", "djinni (air)", "efreeti (fire)", "marid (water)"], choicesNotInMenu : true, "dao (earth)" : { name : "Dao's Elemental Gift", description : desc([ "I gain resistance to bludgeoning damage", "As a bonus action, I can gain a flying speed of 30 ft and I can hover, for 10 minutes" ]), action : [["bonus action", " (start fly)"]], dmgres : ["Bludgeoning"] }, "djinni (air)" : { name : "Djinni's Elemental Gift", description : desc([ "I gain resistance to thunder damage", "As a bonus action, I can gain a flying speed of 30 ft and I can hover, for 10 minutes" ]), action : [["bonus action", " (start fly)"]], dmgres : ["Thunder"] }, "efreeti (fire)" : { name : "Efreeti's Elemental Gift", description : desc([ "I gain resistance to fire damage", "As a bonus action, I can gain a flying speed of 30 ft and I can hover, for 10 minutes" ]), action : [["bonus action", " (start fly)"]], dmgres : ["Fire"] }, "marid (water)" : { name : "Marid's Elemental Gift", description : desc([ "I gain resistance to cold damage", "As a bonus action, I can gain a flying speed of 30 ft and I can hover, for 10 minutes" ]), action : [["bonus action", " (start fly)"]], dmgres : ["Cold"] }, additional : "Fly 10 min", usages : "Prof Bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature10" : { name : "Sanctuary Vessel", source : [["T", 75], ["UA:SR", 3]], minlevel : 10, description : desc([ "When I enter my vessel I can have up to 5 willing creatures I can see in 30 ft join me", "As a bonus action, I can eject any number of creatures from my genie's vessel", "Everyone is ejected when I leave it, I die, or if the vessel is destroyed", "Anyone who remains in the vessel for at least 10 min gains the benefits of a short rest", "Also, HD spend as part of this short rest has my Proficiency Bonus added to the roll" ]) }, "subclassfeature14" : { name : "Limited Wish", source : [["T", 75], ["UA:SR", 3]], minlevel : 14, additional: "1\xD7 per 1d4 long rests", description : desc([ "As an action, I can cast a 6th-level or lower spell with a casting time time of one action", "This can be any spell; It doesn't require any costly components, it simply takes effect" ]), action : [["action", ""]], extraLimitedFeatures : [{ name : "Limited Wish", usages : 1, recovery : "1d4 LR" }] } } }); // >>>>>>>>>>>>>>>>>>>>>> // // >>> Wizard Options >>> // // >>>>>>>>>>>>>>>>>>>>>> // // Wizard Optional Class Features AddFeatureChoice(ClassList.wizard.features.spellcasting, true, "Additional Wizard Spells", { name : "Additional Wizard Spells", extraname : "Optional Wizard 1", source : [["T", 75]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "wizard" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["augury", "enhance ability", "speak with dead", "divination"]); }, "This optional class feature expands the spell list of the wizard class with the following spells (spell level in brackets): Augury (2), Enhance Ability (2), Speak with Dead (3), and Divination (4)." ] } }, "Optional 1st-level wizard features"); AddFeatureChoice(ClassList.wizard.features["arcane recovery"], true, "Cantrip Formulas", { name : "Cantrip Formulas", extraname : "Optional Wizard 3", source : [["T", 76]], description : desc([ "I have scribed arcane formulas in my spellbook with which I formulate cantrips in my mind", "Whenever I finish a long rest, I can use this to change a wizard cantrip I know for another" ]), prereqeval : function (v) { return classes.known.wizard.level >= 3 ? true : "skip"; }, spellcastingPreparedCantrips: { "class": ["wizard"] }, }, "Optional 3rd-level wizard features"); // Wizard Subclasses // [dupl_start] reprints from Sword Coast Adventure Guide (after 2020 errata) if (!SourceList.S) { AddSubClass("wizard", "bladesinging", { regExpSearch : /(bladesinging|bladesinger)/i, subname : "Tradition of Bladesinging", subnameShort: "Bladesinging", fullname : "Bladesinger", attacks : [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], source : [["S", 142], ["T", 76]], features : { "subclassfeature2" : { name : "Training in War and Song", source : [["S", 142], ["T", 76]], minlevel : 2, description : desc("I gain proficiency with light armor, a one-handed melee weapon, and Performance"), armorProfs : [true, false, false, false], skills : ["Performance"] }, "subclassfeature2.1" : { name : "Bladesong", source : [["S", 142], ["T", 76]], minlevel : 2, description : desc([ "As a bonus action, I can start the bladesong for 1 minute; I can dismiss it at any time", "It stops when I wear a shield, medium or heavy armor, or attack with two hands", "While the bladesong is active I have the following benefits:", " \u2022 Intelligence modifier (min 1) to AC", " \u2022 Base walking speed increases by 10 foot", " \u2022 Advantage on Dexterity (Acrobatics) checks", " \u2022 Intelligence modifier (min 1) to concentration saves for maintaining conc. on a spell" ]), action : [["bonus action", " (start)"]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus')", recovery : "long rest" }, "subclassfeature6" : { name : "Extra Attack", source : [["S", 142], ["T", 77]], minlevel : 6, description : desc([ "I can attack twice instead of once when I take the Attack action on my turn", "Moreover, I can cast one of my cantrips in place of one of those attacks" ]) }, "subclassfeature10" : { name : "Song of Defense", source : [["S", 142], ["T", 77]], minlevel : 10, description : desc([ "As a reaction while my bladesong is active, I can expend a spell slot to reduce damage", "The damage I take is reduced by 5 for every level of the spell slot I expend" ]), action : [["reaction", " (in bladesong)"]] }, "subclassfeature14" : { name : "Song of Victory", source : [["S", 142], ["T", 77]], minlevel : 14, description : desc("While my bladesong is active, I add my Int mod (min 1) to melee weapon attack damage"), calcChanges : { atkCalc : [ function (fields, v, output) { if (v.isMeleeWeapon && (/blade.?song/i).test(v.WeaponTextName)) { output.extraDmg += Math.max(1, Number(What('Int Mod'))); }; }, "If I include the word \"Bladesong\" in the name or description of a melee weapon, it gets my Intelligence modifier added to its Damage." ] } } } }); } // dupl_end AddSubClass("wizard","order of scribes", { regExpSearch : /^(?=.*wizard)(?=.*order)(?=.*scribes?).*$|scrivener/i, subname : "Order of Scribes", subnameShort: "Scribes", source : [["T", 77]], features : { "subclassfeature2" : { name : "Wizardly Quill", source : [["T", 77]], minlevel : 2, description : desc([ "As a bonus action, I can magically create a Tiny quill with the following properties:", " \u2022 It doesn't require ink and produces ink in the color of my choice when writing with it", " \u2022 I require only 2 minutes per spell level to transcribe spells into my spellbook with it", " \u2022 As a bonus action, I can use it to erase a text written with it if within 5 ft of the text", "The quill disappear if I create another or if I die" ]), action : [["bonus action", " (create/erase)"]] }, "subclassfeature2.1" : { name : "Awakened Spellbook", source : [["T", 77]], minlevel : 2, description : desc([ "My spellbook gains sentience and grants me the following benefits while I am holding it:", " \u2022 I can use the book as a spellcasting focus for my wizard spells", " \u2022 When I cast a wizard spell using a spell slot, I can temporarily replace its damage type", " The new type must appear in my spellbook in a spell of the same level as the spell slot", " \u2022 Once per long rest, I can ritual cast a wizard spell without 10 min extra casting time", "I can replace it over a short rest, transferring its spells and sentience to a blank book" ]), additional : "fast ritual cast", usages : 1, recovery : "long rest" }, "subclassfeature6" : { name : "Manifest Mind", source : [["T", 78]], minlevel : 6, description : desc([ "As a bonus action, I can have the mind of my awakened spellbook manifest within 60 ft", "The spellbook needs to be on my person to do this; The mind is a Tiny spectral object", "The mind is intangible, doesn't occupy a space, hovers, and sheds dim light in 10 ft", "It can hear, see, has 60 ft darkvision, and telepathically shares with me what it perceives", "As a bonus action, I can dismiss it or move it up to 30 ft to an empty space I can see", "It can pass through creatures; It stops manifesting if it's over 300 ft from me or I die", "It also stop manifesting if Dispel Magic is cast on it or the awakened spellbook is no more", "I can do this once per long rest, or by expending a spell slot (SS 1+) to manifest it again" ]), action : [["bonus action", " (conjure/move/dismiss)"]], usages : 1, recovery : "long rest", altResource : "SS 1+" }, "subclassfeature6.1" : { name : "Manifest Mind: Cast Spell", source : [["T", 78]], minlevel : 6, description : desc([ "I can have wizard spells I cast on my turn originate from the mind while its manifested" ]), usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature10" : { name : "Master Scrivener", source : [["T", 78]], minlevel : 10, description : desc([ "When I finish a long rest, I can write a spell in my awakened spellbook on a blank paper", "It must be a level 1 or 2 spell with 1 action casting time; My spellbook must be in 5 ft", "As an action, I can use this scroll to cast the spell on it at one higher level than normal", "Only I can use the scroll; The scroll turns blank again when I use it or finish a long rest", "Also, using my Wizardly Quill, the gold and time I need to craft spell scrolls is halved" ]), action : [["action", " (cast scroll)"]], usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Master Scrivener scoll", "class" : "wizard", level : [1, 2], firstCol : "MS" }], calcChanges : { spellAdd : [ function (spellKey, spellObj, spName, isDuplicate) { if (!isDuplicate && spName === "wizard" && spellObj.firstCol === "MS" && (spellObj.level === 1 || spellObj.level === 2)) { // Calculate upcasting to be exactly 1 level higher var rxMatch = /(\d*d?\d+)\+(\d*d?\d+)\/(\d*SL)\b/i; while (rxMatch.test(spellObj.description)) { var aMatch = spellObj.description.match(rxMatch); var strDie1 = !isNaN(aMatch[1]) ? true : /\d+d\d+/i.test(aMatch[1]) ? aMatch[1].replace(/\d+(d\d+)/i, "$1") : false; var strDie2 = !isNaN(aMatch[2]) ? true : /\d+d\d+/i.test(aMatch[2]) ? aMatch[2].replace(/\d+(d\d+)/i, "$1") : undefined; if (!/^SL$/i.test(aMatch[3])) { // only increases if more than 1 level higher spell slot, so nothing we can do with it, just remove all upcasting removeSpellUpcasting(spellObj); } else if (/^\d/.test(aMatch[1]) && strDie1 === strDie2) { // identical type steps (e.g. 1d6+1d6/SL or 3+1/SL), so add the second to the first var strNew = (Number(aMatch[1].replace(/^(\d+).*/, "$1")) + Number(aMatch[2].replace(/^(\d+).*/, "$1"))) + aMatch[1].replace(/^\d+(.*)/, "$1"); spellObj.description = spellObj.description.replace(rxMatch, strNew); } else { // non-identical steps, so leave the first and second along, but remove the /SL spellObj.description = spellObj.description.replace(rxMatch, "$1+$2"); } } // Remove costly material components spellObj.description = spellObj.description.replace(/ \(\d+ ?gp( cons\.?)?\)/i, ''); // List only the scroll as a component from the spell spellObj.components = "M\u2020"; spellObj.compMaterial = "Spells cast from spell scrolls don't require any components other than the spell scroll itself."; return true; } }, "When I finish a long rest, I can create a scroll of a spell in my spellbook using my Master Scrivener class feature. I can then cast this spell from the scroll and the spell is cast as if using a spell slot one level higher than its spell level." ] } }, "subclassfeature14" : { name : "One with the Word", source : [["T", 78]], minlevel : 14, description : ' [see 3rd page "Notes" section]', action : [["reaction", " (when damaged)"]], advantages : [["Arcana", true]], "one with the word" : { name : "One with the Word", extraname : "Order of Scribes 14", source : [["T", 78]], description : desc([ "While my awakened spellbook is on my person, I have advantage on Int (Arcana) checks", "As a reaction when I take damage while my spellbook's mind is manifested, I can dismiss it", "In dismissing the manifested mind like this, I prevent all of the damage taken by me", "After doing so, I lose spells with a combined level of 3d6 from my awakened spellbook", "If I do not have enough spells left to cover the number rolled, I drop to 0 HP instead", "The spells vanish from my spellbook, reappearing only after I finish 1d6 long rests", "I can't cast spells that I lost this way, even if found on a scroll or in another spellbook" ]), usages : 1, recovery : "long rest" }, autoSelectExtrachoices : [{ extrachoice : "one with the word" }] } } }); // >>>>>>>>>>>>>>>>> // // >>> New Feats >>> // // >>>>>>>>>>>>>>>>> // FeatsList["artificer initiate"] = { name : "Artificer Initiate", source : [["T", 79], ["UA:F2", 1]], descriptionFull : "You've learned some of an artificer's inventiveness:\n \u2022 You learn one cantrip of your choice from the artificer spell list, and you learn one 1st-level spell of your choice from that list. Intelligence is your spellcasting ability for these spells.\n \u2022 You can cast this feat's 1st-level spell without a spell slot, and you must finish a long rest before you can cast it in this way again. You can also cast the spell using any spell slots you have.\n \u2022 You gain proficiency with one type of artisan's tools of your choice, and you can use that type of tool as a spellcasting focus for any spell you cast that uses Intelligence as its spellcasting ability.", description : typePF ? "I learn a cantrip and a 1st-level spell from the artificer's spell list. Int is my spellcasting ability for these. Once per long rest, I can cast the 1st-level spell at its lowest level without using a spell slot. I gain proficiency in one artisan's tool, which I can use as a spellcasting focus for spells I cast with Int as spellcasting ability." : "I learn one cantrip and one 1st-level spell from the artificer's spell list. Intelligence is my spellcasting ability for these. I can cast the 1st-level spell at its lowest level once per long rest without using a spell slot. I gain proficiency in one artisan's tool, which I can use as a spellcasting focus for any spell I cast that uses Intelligence as its spellcasting ability.", spellcastingBonus : [{ name : "Artificer cantrip", spellcastingAbility : 4, allowUpCasting : true, "class" : 'artificer', level : [0, 0], }, { name : "1st-level artificer spell", "class" : 'artificer', level : [1, 1], firstCol : "oncelr", }], toolProfs : [ ["Artisan's tools", 1] ] }; FeatsList["chef"] = { name : "Chef", source : [["T", 79], ["UA:F2", 1]], descriptionFull : "Time spent mastering the culinary arts has paid off, granting you the following benefits:\n \u2022 Increase your Constitution or Wisdom score by 1, to a maximum of 20.\n \u2022 You gain proficiency with cook's utensils if you don't already have it.\n \u2022 As part of a short rest, you can cook special food, provided you have ingredients and cook's utensils on hand. You can prepare enough of this food for a number of creatures equal to 4 + your proficiency bonus. At the end of the short rest, any creature who eats the food and spends one or more Hit Dice to regain hit points regains an extra 1d8 hit points.\n \u2022 With one hour of work or when you finish a long rest, you can cook a number of treats equal to your proficiency bonus. These special treats last 8 hours after being made. A creature can use a bonus action to eat one of those treats to gain temporary hit points equal to your proficiency bonus.", description : "During a short rest, I can make food for 4 + my Prof" + (typePF ? "" : "iciency") + " Bonus creatures; if they eat it and spend 1" + (typePF ? "+ HD" : " or more Hit Die") + ", they regain 1d8 HP. In one hour or during a long rest, I can make treats equal to my Prof" + (typePF ? "" : "iciency") + " Bonus that last for 8 hours; As a bonus action, one can eat a treat, gaining my Prof" + (typePF ? "" : "iciency") + " Bonus in temporary HP. [+1 " + (typePF ? "Con or Wis" : "Constitution or Wisdom") + "]", action : [["bonus action", "Consume Chef's Treat"]], toolProfs : ["Cook's utensils"], scorestxt : "+1 Constitution or Wisdom" }; FeatsList["crusher"] = { name : "Crusher", source : [["T", 79]], descriptionFull : "You are practiced in the art of crushing your enemies, granting you the following benefits:\n \u2022 Increase your Strength or Constitution by 1, to a maximum of 20.\n \u2022 Once per turn, when you hit a creature with an attack that deals bludgeoning damage, you can move it 5 feet to an unoccupied space, provided the target is no more than one size larger than you.\n \u2022 When you score a critical hit that deals bludgeoning damage to a creature, attack rolls against that creature are made with advantage until the start of your next turn.", description : "Once per turn, when I hit a creature no more than one size larger than me with an attack that deals bludgeoning damage, I can move it 5 ft to an unoccupied space. If I score a critical hit that deals bludgeoning damage, attacks against the creature hit gain advantage until the start of my next turn. [+1 " + (typePF ? "Str or Con" : "Strength or Constitution") + "]", scorestxt : "+1 Strength or Constitution" }; FeatsList["eldritch adept"] = { name : "Eldritch Adept", source : [["T", 79], ["UA:F2", 1]], descriptionFull : "Studying occult lore, you have unlocked eldritch power within yourself: you learn one Eldritch Invocation option of your choice from the warlock class. If the invocation has a prerequisite of any kind, you can choose that invocation only if you're a warlock who meets the prerequisite.\n Whenever you gain a level, you can replace the invocation with another one from the warlock class.", description : 'I learn one Eldritch Invocation from the warlock class for which I meet the prerequisites (2nd page "Choose Feature" button). I can replace this invocation for another whenever I gain a level.', bonusClassExtrachoices : [{ "class" : "warlock", feature : "eldritch invocations", bonus : 1 }], prerequisite : "Spellcasting or Pact Magic feature", prereqeval : function (v) { return v.isSpellcastingClass; } }; FeatsList["fey touched"] = { name : "Fey Touched", source : [["T", 79], ["UA:F2", 2]], descriptionFull : "Your exposure to the Feywild's magic has changed you, granting you the following benefits:\n \u2022 Increase your Intelligence, Wisdom, or Charisma score by 1, to a maximum of 20.\n \u2022 You learn the misty step spell and one 1st-level spell of your choice. The 1st-level spell must be from the divination or enchantment school of magic. You can cast each of these spells without expending a spell slot. Once you cast either of these spells in this way, you can't cast that spell in this way again until you finish a long rest. You can also cast these spells using spell slots you have of the appropriate level. The spells' spellcasting ability is the ability increased by this feat.", description : "I learn Misty Step and one 1st level divination or enchantment spell. I can cast each once per long rest at their lowest level without expending a spell slot, and can cast them if I have a spell slot to do so. My spellcasting ability is the ability I choose to increase when I gain this feat. [+1 Intelligence, Wisdom, or Charisma]", spellcastingBonus : [{ name : "Misty Step", spells : ["misty step"], selection : ["misty step"], firstCol : "oncelr+markedbox" }, { name : "1st-level Ench/Div spell", 'class': "any", school : ["Ench", "Div"], level : [1, 1], firstCol : "oncelr+markedbox" }], spellcastingAbility : 4, allowUpCasting : true, choices : ["Intelligence", "Wisdom", "Charisma"], "intelligence" : { description : "I learn Misty Step and one 1st level divination or enchantment spell. I can cast each once per long rest at their lowest level without expending a spell slot, and can cast them " + (typePF ? "by expending" : "with") + " a spell slot as normal. Intelligence is my spellcasting ability for these spells. [+1 Intelligence]", spellcastingAbility : 4, scores : [0, 0, 0, 1, 0, 0] }, "wisdom" : { description : "I learn Misty Step and one 1st level divination or enchantment spell. I can cast each once per long rest at their lowest level without expending a spell slot, and can cast them by expending a spell slot as normal. Wisdom is my spellcasting ability for these spells. [+1 Wisdom]", spellcastingAbility : 5, scores : [0, 0, 0, 0, 1, 0] }, "charisma" : { description : "I learn Misty Step and one 1st level divination or enchantment spell. I can cast each once per long rest at their lowest level without expending a spell slot, and can cast them by expending a spell slot as normal. Charisma is my spellcasting ability for these spells. [+1 Charisma]", spellcastingAbility : 6, scores : [0, 0, 0, 0, 0, 1] } }; // Add the fighting initiate only when all other code has run, so that we get fighting styles added by the code RunFunctionAtEnd(function() { if (!ClassList.fighter || !ClassList.fighter.features["fighting style"]) return; var FtngStyles = ClassList.fighter.features["fighting style"]; FeatsList["fighting initiate"] = { name : "Fighting Initiate", source : [["T", 80], ["UA:F2", 2]], descriptionFull : "Your martial training has helped you develop a particular style of fighting. As a result, you learn one Fighting Style option of your choice from the fighter class. If you already have a style, the one you choose must be different.\n Whenever you reach a level that grants the Ability Score Improvement feature, you can replace this feat's fighting style with another one from the fighter class that you don't have.", description : "I learn one Fighting Style from the fighter class, which must be one that I don't yet know. I can replace this fighting style for another whenever I gain an Ability Score Improvement.", prerequisite : "Proficiency with a martial weapon", prereqeval : function(v) { return v.martialWeaponsProf || v.otherWeaponsProf.some(function (n) { return WeaponsList[n] && (/Martial/i).test(WeaponsList[n].type); }); }, choices : [], "archery" : { description : "I gain a +2 bonus to attack rolls I make with ranged weapons. I can replace this fighting style for another whenever I gain an Ability Score Improvement.", source : FtngStyles.source }, "defense" : { description : "I gain a +1 bonus to my AC while I'm wearing armor. I can replace this fighting style for another whenever I gain an Ability Score Improvement.", source : FtngStyles.source }, "dueling" : { description : "When I wield a melee weapon in one hand and no other weapons, I gain a +2 bonus to damage rolls with that weapon. I can replace this fighting style for another whenever I gain an Ability Score Improvement.", source : FtngStyles.source }, "great weapon fighting" : { description : "When I roll a 1 or 2 on a damage die for an attack I make with a two-handed or versatile melee weapon that I'm wielding with two hands, I can reroll the die and must use the new roll, even if the new roll is a 1 or a 2. I can replace this fighting style for another whenever I gain an Ability Score Improvement.", source : FtngStyles.source }, "protection" : { description : "When a creature I can see attacks a target other than me that is within 5 ft of me, I can use my reaction to impose disadvantage on the attack roll. I must be wielding a shield to do this. I can replace this fighting style for another whenever I gain an Ability Score Improvement.", source : FtngStyles.source }, "two-weapon fighting" : { description : "When I engage in two-weapon fighting, I can add my ability modifier to the damage of the second (off-hand) attack. I can replace this fighting style for another whenever I gain an Ability Score Improvement.", source : FtngStyles.source }, "blind fighting" : { description : "I have blindsight with a range of 10 ft, wherein I can effectively see anything that isn't behind total cover, including invisible things, even if I'm blinded or in darkness. This doesn't allow me to see things hidden from me. I can replace this fighting style for another whenever I gain an Ability Score Improvement.", source : [["T", 41]] }, "interception" : { description : "As a reaction when a creature I can see hits a target, other than me, within 5 ft of me with an attack, I can reduce the damage the target takes by 1d10 + my proficiency bonus (min 0 damage). I must be wielding a shield or a simple or martial weapon to do this. I can replace this fighting style for another whenever I gain an Ability Score Improvement.", source : [["T", 41], ["UA:CFV", 12]] }, "thrown weapon fighting" : { description : "I can draw a weapon that has the thrown property as part of the attack I make with the weapon. In addition, when I hit with a ranged attack using a thrown weapon, I gain a +2 bonus to the damage roll. I can replace this fighting style for another whenever I gain an Ability Score Improvement.", source : [["T", 42]] }, "unarmed fighting" : { description : "My unarmed strikes deal 1d6 damage, or 1d8 if I'm not wielding any weapons or a shield. At the start of each of my turns, I can deal 1d4 bludgeoning damage to one creature grappled by me. I can replace this fighting style for another whenever I gain an Ability Score Improvement.", source : [["T", 42]] } }; FtngStyles.choices.forEach(function (sName) { var sNameLC = sName.toLowerCase(); if (!FtngStyles[sNameLC]) return; FeatsList["fighting initiate"].choices.push(sName); if (!FeatsList["fighting initiate"][sNameLC]) { FeatsList["fighting initiate"][sNameLC] = { description : FtngStyles[sNameLC].description.replace(/^\n /i, '').replace(/\n /g, '. ') + ". I can replace this fighting style whenever I gain an ASI.", source : FtngStyles[sNameLC].source ? FtngStyles[sNameLC].source : FtngStyles.source } } // Copy all attributes except name, source and description for (var attr in FtngStyles[sNameLC]) { if ((/\b(name|description|source)\b/i).test(attr)) continue; FeatsList["fighting initiate"][sNameLC][attr] = FtngStyles[sNameLC][attr]; } if (!FeatsList["fighting initiate"][sNameLC].prereqeval) { FeatsList["fighting initiate"][sNameLC].prereqeval = function(v) { var knownStyles = GetFightingStyleSelection(); return knownStyles[v.choice] ? false : true; }; if (!FeatsList["fighting initiate"][sNameLC].prerequisite) FeatsList["fighting initiate"][sNameLC].prerequisite = sName + " Fighting Style is not selected anywhere else." }; }); }); FeatsList["gunner"] = { name : "Gunner", source : [["T", 80], ["UA:F2", 2]], descriptionFull : "You have a quick hand and keen eye when employing firearms, granting you the following benefits:\n \u2022 Increase your Dexterity score by 1, to a maximum of 20.\n \u2022 You gain proficiency with firearms (see \"Firearms\" in the Dungeon Master's Guide).\n \u2022 You ignore the loading property of firearms.\n \u2022 Being within 5 feet of a hostile creature doesn't impose disadvantage on your ranged attack rolls.", description : "I gain proficiency with firearms. I ignore the loading property of firearms. I don't suffer disadvantage on ranged attack rolls for being within 5 ft of a hostile creature. [+1 Dexterity]", scores : [0, 1, 0, 0, 0, 0], weaponProfs : [false, false, ["Firearms"]], calcChanges : { atkAdd : [ function (fields, v) { if ((/firearm/i).test(v.theWea.type) || (/firearm/i).test(v.theWea.list)) { fields.Description = fields.Description.replace(/([;,]? ?loading|loading[;,]? ?)/i, ''); }; }, "I ignore the loading quality of firearms." ] } }; FeatsList["metamagic adept"] = { name : "Metamagic Adept", source : [["T", 80], ["UA:F2", 2]], descriptionFull : "You've learned how to exert your will on your spells to alter how they function:\n \u2022 You learn two Metamagic options of your choice from the sorcerer class. You can use only one Metamagic option on a spell when you cast it, unless the option says otherwise. Whenever you reach a level that grants the Ability Score Improvement feature, you can replace one of these Metamagic options with another one from the sorcerer class.\n \u2022 You gain 2 sorcery points to spend on Metamagic (these points are added to any sorcery points you have from another source but can be used only on Metamagic). You regain all spent sorcery points when you finish a long rest.", description : 'I learn two Metamagic options from the sorcerer class (2nd page "Choose Feature" button). I can use only one option on a spell unless it says otherwise. I gain 2 sorcery points, which I can only use for Metamagic. I regain all expended sorcery points when I finish a long rest. I can change one ' + (typePF ? '' : 'Metamagic option ') + 'whenever I gain an ' + (typePF ? 'ASI' : 'Ability Score Improvement') + '.', bonusClassExtrachoices : [{ "class" : "sorcerer", feature : "metamagic", bonus : 2 }], extraLimitedFeatures : [{ name : "Sorcery Points", usages : 2, recovery : "long rest", addToExisting : true }], prerequisite : "Spellcasting or Pact Magic feature", prereqeval : function (v) { return v.isSpellcastingClass; } }; FeatsList["piercer"] = { name : "Piercer", source : [["T", 80], ["UA:F2", 2]], descriptionFull : "You have achieved a penetrating precision in combat, granting you the following benefits:\n \u2022 Increase your Strength or Dexterity by 1, to a maximum of 20.\n \u2022 Once per turn, when you hit a creature with an attack that deals piercing damage, you can reroll one of the attack's damage dice, and you must use the new roll.\n \u2022 When you score a critical hit that deals piercing damage to a creature, you can roll one additional damage die when determining the extra piercing damage the target takes.", description : "Once per turn when I deal piercing damage to a target, I can reroll one of the damage die and use the new roll. If I deal piercing damage on a critical hit to a target, I can roll one additional damage die. [+1 Strength or Dexterity]", scorestxt : "+1 Strength or Dexterity", calcChanges : { atkAdd : [ function (fields, v) { if ((/pierc(\.|ing)/i).test(fields.Damage_Type)) { var extraCritRegex = /\d+(d\d+ extra on a crit(ical)?( hit)?( in melee)?)/i; v.extraCritM = (v.extraCritM ? v.extraCritM : 0) + 1; if (extraCritRegex.test(fields.Description)) { fields.Description = fields.Description.replace(extraCritRegex, v.extraCritM + '$1'); } else if ((/d\d/).test(fields.Damage_Die)) { fields.Description += (fields.Description ? '; ' : '') + v.extraCritM + fields.Damage_Die.replace(/.*(d\d+).*/, '$1') + ' extra on a crit'; } if (!(/re-?roll (one|1)? ?damage/i).test(fields.Description)) { fields.Description += '; Once per turn, re-roll one damage die'; } } }, "Once per turn when I deal piercing damage to a target, I can reroll one of the damage die and use the new roll. If I deal piercing damage on a critical hit to a target, I can roll one additional damage die.", 900 ] } }; FeatsList["poisoner"] = { name : "Poisoner", source : [["T", 80], ["UA:F2", 2]], descriptionFull : "You can prepare and deliver deadly poisons, granting you the following benefits:\n \u2022 When you make a damage roll that deals poison damage, it ignores resistance to poison damage.\n \u2022 You can apply poison to a weapon or piece of ammunition as a bonus action, instead of an action.\n \u2022 You gain proficiency with the poisoner's kit if you don't already have it. With one hour of work using a poisoner's kit and expending 50 gp worth of materials, you can create a number of doses of potent poison equal to your proficiency bonus. Once applied to a weapon or piece of ammunition, the poison retains its potency for 1 minute or until you hit with the weapon or ammunition. When a creature takes damage from the coated weapon or ammunition, that creature must succeed on a DC 14 Constitution saving throw or take 2d8 poison damage and become poisoned until the end of your next turn.", description : "My poison damage rolls ignore poison resistance. As a bonus action, I can apply poison to a weapon or piece of ammo. I can use a poisoner's kit and 50 gp to create my Prof Bonus doses of poison in 1 hour. Potent 1 min after applying. DC 14 Con save or 2d8 poison damage and poisoned until the end of my next turn.", toolProfs : ["Poisoner's kit"], action : [["bonus action", "Apply poison to weapon/ammo"]] }; FeatsList["shadow touched"] = { name : "Shadow Touched", source : [["T", 80]], descriptionFull : "Your exposure to the Shadowfell's magic has changed you, granting you the following benefits:\n \u2022 Increase your Intelligence, Wisdom, or Charisma by 1, to a maximum of 20.\n \u2022 You learn the invisibility spell and one 1st-level spell of your choice. The 1st-level spell must be from the illusion or necromancy school of magic. You learn the invisibility spell and one 1st-level spell of your choice. The 1st-level spell must be from the illusion or necromancy school of magic. You can cast each of these spells without expending a spell slot. Once you cast either of these spells in this way, you can't cast that spell in this way again until you finish a long rest. You can also cast these spells using spell slots you have of the appropriate level. The spells' spellcasting ability is the ability increased by this feat.", description : "I learn Invisibility and one 1st level illusion or necromancy spell. I can cast each once per long rest at their lowest level without expending a spell slot, and can cast them if I have a spell slot to do so. My spellcasting ability is the ability I choose to increase when I gain this feat. [+1 Intelligence, Wisdom, or Charisma]", spellcastingBonus : [{ name : "Invisibility", spells : ["invisibility"], selection : ["invisibility"], firstCol : "oncelr+markedbox" }, { name : "1st-level Illus/Necro spell", 'class' : "any", school : ["Illus", "Necro"], level : [1, 1], firstCol : "oncelr+markedbox" }], spellcastingAbility : 4, allowUpCasting : true, choices : ["Intelligence", "Wisdom", "Charisma"], "intelligence" : { description : "I learn Invisibility and one 1st level illusion or necromancy spell. I can cast each once per long rest at their lowest level without expending a spell slot, and can cast them by expending a spell slot as normal. Intelligence is my spellcasting ability for these spells. [+1 Intelligence]", spellcastingAbility : 4, scores : [0, 0, 0, 1, 0, 0] }, "wisdom" : { description : "I learn Invisibility and one 1st level illusion or necromancy spell. I can cast each once per long rest at their lowest level without expending a spell slot, and can cast them by expending a spell slot as normal. Wisdom is my spellcasting ability for these spells. [+1 Wisdom]", spellcastingAbility : 5, scores : [0, 0, 0, 0, 1, 0] }, "charisma" : { description : "I learn Invisibility and one 1st level illusion or necromancy spell. I can cast each once per long rest at their lowest level without expending a spell slot, and can cast them by expending a spell slot as normal. Charisma is my spellcasting ability for these spells. [+1 Charisma]", spellcastingAbility : 6, scores : [0, 0, 0, 0, 0, 1] } }; FeatsList["skill expert"] = { name : "Skill Expert", source : [["T", 80]], descriptionFull : "You have honed your proficiency with particular skills, granting you the following benefits:\n \u2022 Increase one ability score of your choice by 1, to a maximum of 20.\n \u2022 You gain proficiency in one skill of your choice.\n \u2022 Choose one skill in which you have proficiency. You gain expertise with that skill, which means your proficiency bonus is doubled for any ability check you make with it. The skill you choose must be one that isn't already benefiting from a feature, such as Expertise, that doubles your proficiency bonus.", description : "I gain proficiency in one skill and expertise in that same skill or another skill I'm proficient with. [+1 to one ability score of my choice]", skillstxt : "Proficiency with one skill, and\n Expertise with one skill I'm proficient with", scorestxt : "+1 to one ability score of my choice" }; FeatsList["slasher"] = { name : "Slasher", source : [["T", 81], ["UA:F2", 3]], descriptionFull : "You've learned where to cut to have the greatest results, granting you the following benefits:\n \u2022 Increase your Strength or Dexterity by 1, to a maximum of 20.\n \u2022 Once per turn when you hit a creature with an attack that deals slashing damage, you can reduce the speed of the target by 10 feet until the start of your next turn.\n \u2022 When you score a critical hit that deals slashing damage to a creature, you grievously wound it. Until the start of your next turn, the target has disadvantage on all attack rolls.", description : "Once per turn when I deal slashing damage to a target, I can reduce its speed by 10 ft until the start of my next turn. When I score a critical hit that deals slashing damage to a creature, the grievous wound causes it to have disadvantage on all attack rolls until the start of my next turn. [+1 Strength or Dexterity]", scorestxt : "+1 Strength or Dexterity" }; FeatsList["telekinetic"] = { name : "Telekinetic", source : [["T", 81]], descriptionFull : "You learn to move things with your mind, granting you the following benefits:\n \u2022 Increase your Intelligence, Wisdom, or Charisma by 1, to a maximum of 20.\n \u2022 You learn the mage hand cantrip. You can cast it without verbal or somatic components, and you can make the spectral hand invisible. If you already know this spell, its range increases by 30 feet when you cast it. Its spellcasting ability is the ability increased by this feat.\n \u2022 As a bonus action, you can try to telekinetically shove one creature you can see within 30 feet of you. When you do so, the target must succeed on a Strength saving throw (DC 8 + your proficiency bonus + the ability modifier of the score increased by this feat) or be moved 5 feet toward you or away from you. A creature can willingly fail this save.", description : "I know the Mage Hand cantrip, can cast it without components, and the spectral hand can be invisible. As a bonus action, I can shove one creature I can see within 30 ft. It must make a Str save vs. this feat's spell save DC or be moved 5 ft from or towards me. My spellcasting ability is the ability I choose to increase when I gain this feat. [+1 Int, Wis, or Cha]", action : [["bonus action", " Shove"]], spellcastingBonus : [{ name : "Mage Hand", spells : ["mage hand"], selection : ["mage hand"], }], spellcastingAbility : 4, calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { if (spellKey !== "mage hand") return; spellObj.components = ""; if (spellObj.description === SpellsList["mage hand"].description) spellObj.description = "Create (in)visible spectral hand for simple tasks or carry up to 10 lb; 1 a to control; can't have multiple"; var rangeRx = /(\d+)( ?ft| ?m)/i; if (!/^(?=.*telekinetic)(?=.*feat).*$/i.test(CurrentSpells[spName].name) && rangeRx.test(spellObj.range)) { // add the +30 ft range only if not the entry for the feat itself var spRangeM = spellObj.range.match(rangeRx); spellObj.range = spellObj.range.replace(rangeRx, Number(spRangeM[1]) + (What("Unit System") === "metric" ? 9 : 30) + spRangeM[2]); } return true; }, "My Telekinetic feat allows me to cast the Mage Hand cantrip without verbal or somatic components and I can make the spectral hand invisible. If I already know the cantrip from another source, its range is also increased with 30 ft." ] }, choices : ["Intelligence", "Wisdom", "Charisma"], "intelligence" : { description : "I know the Mage Hand cantrip, can cast it without components, and the spectral hand can be invisible. As a bonus action, I can shove one creature I can see within 30 ft. It must make a Str" + (typePF ? "" : "ength") + " save vs. this feat's spell save DC or be moved 5 ft" + (typePF ? "" : " away") + " from or towards me. Intelligence is my spellcasting ability for these. [+1 Intelligence]", spellcastingAbility : 4, scores : [0, 0, 0, 1, 0, 0] }, "wisdom" : { description : "I know the Mage Hand cantrip, can cast it without components, and the spectral hand can be invisible. As a bonus action, I can shove one creature I can see within 30 ft. It must make a Str" + (typePF ? "" : "ength") + " save vs. this feat's spell save DC or be moved 5 ft" + (typePF ? "" : " away") + " from or towards me. Wisdom is my spellcasting ability for these. [+1 Wisdom]", spellcastingAbility : 5, scores : [0, 0, 0, 0, 1, 0] }, "charisma" : { description : "I know the Mage Hand cantrip, can cast it without components, and the spectral hand can be invisible. As a bonus action, I can shove one creature I can see within 30 ft. It must make a Str" + (typePF ? "" : "ength") + " save vs. this feat's spell save DC or be moved 5 ft" + (typePF ? "" : " away") + " from or towards me. Charisma is my spellcasting ability for these. [+1 Charisma]", spellcastingAbility : 6, scores : [0, 0, 0, 0, 0, 1] } }; FeatsList["telepathic"] = { name : "Telepathic", source : [["T", 81]], descriptionFull : "You awaken the ability to mentally connect with others, granting you the following benefits:\n \u2022 Increase your Intelligence, Wisdom, or Charisma by 1, to a maximum of 20.\n \u2022 You can speak telepathically to any creature you can see within 60 feet of you. Your telepathic utterances are in a language you know, and the creature understands you only if it knows that language. Your communication doesn't give the creature the ability to respond to you telepathically.\n \u2022 You can cast the detect thoughts spell, requiring no spell slot or components, and you must finish a long rest before you can cast it this way again. Your spellcasting ability for the spell is the ability increased by this feat. If you have spell slots of 2nd level or higher, you can cast this spell with them.", description : "I can telepathically speak to a creature I can see within 60 ft in a language I know, but it can't respond telepathically. I can cast Detect Thoughts once per long rest at its lowest level, requiring no spell slot or components, and can cast it using a spell slot as normal. My spellcasting ability is the ability I increase with this feat. [+1 Int, Wis, or Cha]", spellcastingBonus : [{ name : "Detect Thoughts", spells : ["detect thoughts"], selection : ["detect thoughts"], firstCol : "oncelr+markedbox" }], spellcastingAbility : 4, allowUpCasting : true, spellChanges : { "detect thoughts" : { components : "(V,S,M)", changes : "My Telepathic feat allows me to cast Detect Thoughts once per long rest without requiring a spell slot or spell components, or by using a spell slot and cast it with components as normal." } }, choices : ["Intelligence", "Wisdom", "Charisma"], "intelligence" : { description : "I can telepathically speak to a creature I can see within 60 ft in a language I know, but it can't respond telepathically. I can cast Detect Thoughts once per long rest at its lowest level, requiring no spell slot or components, and can cast it using a spell slot as normal. Intelligence is my spellcasting ability for this. [+1 Int" + (typePF ? "" : "elligence") + "]", spellcastingAbility : 4, scores : [0, 0, 0, 1, 0, 0] }, "wisdom" : { description : "I can telepathically speak to a creature I can see within 60 ft in a language I know, but it can't respond telepathically. I can cast Detect Thoughts once per long rest at its lowest level, requiring no spell slot or components, and can cast it using a spell slot as normal. Wisdom is my spellcasting ability for this. [+1 Wis" + (typePF ? "" : "dom") + "]", spellcastingAbility : 5, scores : [0, 0, 0, 0, 1, 0] }, "charisma" : { description : "I can telepathically speak to a creature I can see within 60 ft in a language I know, but it can't respond telepathically. I can cast Detect Thoughts once per long rest at its lowest level, requiring no spell slot or components, and can cast it using a spell slot as normal. Charisma is my spellcasting ability for this. [+1 Cha" + (typePF ? "" : "risma") + "]", spellcastingAbility : 6, scores : [0, 0, 0, 0, 0, 1] } }; // >>>>>>>>>>>>>>>>>> // // >>> New Spells >>> // // >>>>>>>>>>>>>>>>>> // // [dupl_start] reprint spells from Sword Coast Adventure Guide (after 2020 errata) if (!SourceList.S) { SpellsList["booming blade"] = { name : "Booming Blade", classes : ["artificer", "sorcerer", "warlock", "wizard"], source : [["T", 106], ["S", 142]], level : 0, school : "Evoc", time : "1 a", range : "S:5-ft rad", components : "S,M\u0192", compMaterial : "A melee weapon worth at least 1 sp", duration : "1 round", description : "Melee wea atk with cast; hit: 0d8 Thunder dmg, if it moves next round +1d8; +1d8 at CL5, 11, \u0026 17", descriptionShorter : "melee wea atk with cast; hit: 0d8 Thunder dmg, if move next rnd +1d8; +1d8 CL 5/11/17 ", descriptionCantripDie : "Melee wea atk with cast; if hit: `CD-1`d8 Thunder dmg and if moves next round +`CD`d8 Thunder dmg", descriptionFull : "You brandish the weapon used in the spell's casting and make a melee attack with it against one creature within 5 feet of you. On a hit, the target suffers the weapon attack's normal effects and then becomes sheathed in booming energy until the start of your next turn. If the target willingly moves 5 feet or more before then, the target takes 1d8 thunder damage, and the spell ends.\n This spell's damage increases when you reach certain levels. At 5th level, the melee attack deals an extra 1d8 thunder damage to the target on a hit, and the damage the target takes for moving increases to 2d8. Both damage rolls increase by 1d8 at 11th level (2d8 and 3d8) and again at 17th level (3d8 and 4d8).", dynamicDamageBonus : { extraDmgGroupsSameType : /(next r(?:ou)?nd )((?:\+?\d+d?\d*)+)/i } }; SpellsList["green-flame blade"] = { name : "Green-Flame Blade", classes : ["artificer", "sorcerer", "warlock", "wizard"], source : [["T", 107], ["S", 143]], level : 0, school : "Evoc", time : "1 a", range : "S:5-ft rad", components : "S,M\u0192", compMaterial : "A melee weapon worth at least 1 sp", duration : "Instantaneous", description : "Melee wea atk with cast; hit: 0d8 Fire dmg, 1 crea in 5 ft 0d8+spell mod Fire dmg; +1d8 CL5/11/17", descriptionShorter : "Melee wea atk; hit: 0d8 Fire dmg, 1 crea in 5 ft 0d8+spell mod Fire dmg; +1d8 CL5/11/17", descriptionCantripDie : "Melee wea atk with cast; if hit: `CD-1`d8 Fire dmg, 1 crea in 5 ft `CD-1`d8+spellcasting ability modifier Fire dmg", descriptionFull : "You brandish the weapon used in the spell's casting and make a melee attack with it against one creature within 5 feet of you. On a hit, the target suffers the weapon attack's normal effects, and you can cause green fire to leap from the target to a different creature of your choice that you can see within 5 feet of it. The second creature takes fire damage equal to your spellcasting ability modifier.\n This spell's damage increases when you reach certain levels. At 5th level, the melee attack deals an extra 1d8 fire damage to the target on a hit, and the fire damage to the second creature increases to 1d8 + your spellcasting ability modifier. Both damage rolls increase by 1d8 at 11th level (2d8 and 2d8) and 17th level (3d8 and 3d8)." }; SpellsList["lightning lure"] = { name : "Lightning Lure", classes : ["artificer", "sorcerer", "warlock", "wizard"], source : [["T", 107], ["S", 143]], level : 0, school : "Evoc", time : "1 a", range : "S:15-ft rad", components : "V", duration : "Instantaneous", save : "Str", description : "1 crea in 15 ft save or pulled 10 ft to me; if it ends in 5 ft, 1d8 Lightning dmg; +1d8 at CL 5, 11, \u0026 17", descriptionShorter : "1 crea in 15 ft save or pulled 10 ft to me; if end in 5 ft, 1d8 Lightning dmg; +1d8 at CL 5/11/17", descriptionCantripDie : "1 crea I see save or pulled 10 ft to me; if it ends in 5 ft, `CD`d8 Lightning dmg", descriptionFull : "You create a lash of lightning energy that strikes at one creature of your choice that you can see within 15 feet of you. The target must succeed on a Strength saving throw or be pulled up to 10 feet in a straight line toward you and then take 1d8 lightning damage if it is within 5 feet of you." + "\n " + "This spell's damage increases by 1d8 when you reach 5th level (2d8), 11th level (3d8), and 17th level (4d8)." }; SpellsList["sword burst"] = { name : "Sword Burst", classes : ["artificer", "sorcerer", "warlock", "wizard"], source : [["T", 115], ["S", 143]], level : 0, school : "Conj", time : "1 a", range : "S:5-ft rad", components : "V", duration : "Instantaneous", save : "Dex", description : "All crea in range save or 1d6 Force damage; +1d6 at CL 5, 11, and 17", descriptionCantripDie : "All crea in range save or `CD`d6 Force damage", descriptionFull : "You create a momentary circle of spectral blades that sweep around you. All other creatures within 5 feet of you must succeed on a Dexterity saving throw or take 1d6 force damage." + "\n " + "This spell's damage increases by 1d6 when you reach 5th level (2d6), 11th level (3d6), and 17th level (4d6)." }; WeaponsList["booming blade"] = { regExpSearch : /^(?=.*booming)(?=.*blade).*$/i, name : "Booming Blade", source : [["T", 106], ["S", 142]], list : "spell", ability : 6, type : "Cantrip", damage : ["Bd8/Cd8", "", "thunder"], range : "With melee wea", description : "First damage added to the attack; second to the target if it moves next round", abilitytodamage : false }; WeaponsList["green-flame blade"] = { regExpSearch : /^(?=.*green)(?=.*flame)(?=.*blade).*$/i, name : "Green-Flame Blade", source : [["T", 107], ["S", 143]], list : "spell", ability : 6, type : "Cantrip", damage : ["Bd8/Bd8", "", "fire"], range : "With melee wea", description : "First damage added to the attack; second to a target within 5 ft", abilitytodamage : true }; WeaponsList["lightning lure"] = { regExpSearch : /^(?=.*lightning)(?=.*lure).*$/i, name : "Lightning Lure", source : [["T", 107], ["S", 143]], list : "spell", ability : 5, type : "Cantrip", damage : ["C", 8, "lightning"], range : "15 ft", description : "Str save; success - nothing; fail - pulled 10 ft closer to me, only take damage if end within 5 ft of me", abilitytodamage : false, dc : true }; WeaponsList["sword burst"] = { regExpSearch : /^(?=.*sword)(?=.*burst).*$/i, name : "Sword Burst", source : [["T", 115], ["S", 143]], list : "spell", ability : 6, type : "Cantrip", damage : ["C", 6, "force"], range : "5-ft radius", description : "Dex save, success - no damage; all creatures in range", abilitytodamage : false, dc : true }; } // reprint spell from Icewind Dale: Rime of the Frostmaiden if (!SourceList.F) { SpellsList["blade of disaster"] = { name : "Blade of Disaster", classes : ["sorcerer", "warlock", "wizard"], source : [["T", 106], ["RotF", 318]], level : 9, school : "Conj", time : "1 bns", range : "60 ft", components : "V,S", duration : "Conc, 1 min", description : "Create weapon; 2 spell atks 4d12 Force dmg; crit on 18+, triple dmg; bns a to move 30 ft \u0026 do 2 atks", descriptionShorter : "Create wea; 2 spell atks 4d12 Force dmg; crit 18+, triple dmg; bns a to move 30 ft \u0026 2 atks", descriptionFull : "You create a blade-shaped planar rift about 3 feet long in an unoccupied space you can see within range. The blade lasts for the duration. When you cast this spell, you can make up to two melee spell attacks with the blade, each one against a creature, loose object, or structure within 5 feet of the blade. On a hit, the target takes 4d12 force damage. This attack scores a critical hit if the number on the d20 is 18 or higher. On a critical hit, the blade deals an extra 8d12 force damage (for a total of 12d12 force damage)." + "\n As a bonus action on your turn, you can move the blade up to 30 feet to an unoccupied space you can see and then make up to two melee spell attacks with it again." + "\n The blade can harmlessly pass through any barrier, including a wall of force." }; } // dupl_end SpellsList["dream of the blue veil"] = { name : "Dream of the Blue Veil", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["T", 106]], level : 7, school : "Conj", time : "10 min", range : "20 ft", components : "V,S,M\u0192", compMaterial : "A magic item or a willing creature from the destination world", duration : "6 hours", description : "9 willing crea unconscious for duration, after that travel to origin material plane of magic item or crea", descriptionFull : "You and up to eight willing creatures within range fall unconscious for the spell's duration and experience visions of another world on the Material Plane, such as Oerth, Toril, Krynn, or Eberron. If the spell reaches its full duration, the visions conclude with each of you encountering and pulling back a mysterious blue curtain. The spell then ends with you mentally and physically transported to the world that was in the visions." + "\n To cast this spell, you must have a magic item that originated on the world you wish to reach, and you must be aware of the world's existence, even if you don't know the world's name. Your destination in the other world is a safe location within 1 mile of where the magic item was created. Alternatively, you can cast the spell if one of the affected creatures was born on the other world, which causes your destination to be a safe location within 1 mile of where that creature was born." + "\n The spell ends early on a creature if that creature takes any damage, and the creature isn't transported. If you take any damage, the spell ends for you and all the other creatures, with none of you being transported." }; SpellsList["intellect fortress"] = { name : "Intellect Fortress", classes : ["artificer", "bard", "sorcerer", "warlock", "wizard"], source : [["T", 107]], level : 3, school : "Abjur", time : "1 a", range : "30 ft", components : "V", duration : "Conc, 1 h", description : "1+1/SL crea, each max 30 ft apart, has Psychic damage resistance and adv. on Int, Wis, and Cha saves", descriptionFull : "For the duration, you or one willing creature you can see within range has resistance to psychic damage, as well as advantage on Intelligence, Wisdom, and Charisma saving throws." + AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, you can target one additional creature for each slot level above 3rd. The creatures must be within 30 feet of each other when you target them." }; SpellsList["mind sliver"] = { name : "Mind Sliver", classes : ["sorcerer", "warlock", "wizard"], source : [["T", 108], ["UA:SnW", 4], ["UA:FRnW", 7], ["UA:POR", 7]], level : 0, school : "Ench", time : "1 a", range : "60 ft", components : "V", duration : "1 rnd", save : "Int", description : "1 crea save or 1d6 Psychic dmg, -1d4 on first save before my next turn ends; +1d6 at CL 5, 11, and 17", descriptionShorter : "1 crea save or 1d6 Psychic dmg, -1d4 on 1st save before my next turn end; +1d6 at CL 5/11/17", descriptionCantripDie : "1 crea save or `CD`d6 Psychic dmg and subtract 1d4 from first saving throw before my next turn ends", descriptionFull : "You drive a disorienting spike of psychic energy into the mind of one creature you can see within range. The target must succeed on an Intelligence saving throw or take 1d6 psychic damage and subtract 1d4 from the next saving throw it makes before the end of your next turn." + "\n This spell's damage increases by 1d6 when you reach certain levels: 5th level (2d6), 11th level (3d6), and 17th level (4d6)." }; WeaponsList["mind sliver"] = { regExpSearch : /^(?=.*mind)(?=.*sliver).*$/i, name : "Mind Sliver", source : [["T", 108], ["UA:SnW", 4], ["UA:FRnW", 7], ["UA:POR", 7]], list : "spell", ability : 6, type : "Cantrip", damage : ["C", 6, "psychic"], range : "60 ft", description : "1 creature Int save, success - no damage, fail - also -1d4 on first save before my next turn ends", abilitytodamage : false, dc : true }; SpellsList["spirit shroud"] = { name : "Spirit Shroud", classes : ["cleric", "paladin", "warlock", "wizard"], source : [["T", 108]], level : 3, school : "Necro", time : "1 bns", range : "S:10-ft rad", components : "V,S", duration : "Conc, 1 min", description : "My atks +1d8+1d8/2SL Cold/Necro/Radiant dmg, no heal until next turn; any crea I see -10 ft spd", descriptionShorter : "My atks +1d8+1d8/2SL Cold/Necro/Radiant dmg, no heal 1 rnd; any crea -10 ft spd", descriptionFull : "You call forth spirits of the dead, which flit around you for the spell's duration. The spirits are intangible and invulnerable."+ "\n Until the spell ends, any attack you make deals 1d8 extra damage when you hit a creature within 10 feet of you. This damage is radiant, necrotic, or cold (your choice when you cast the spell). Any creature that takes this damage can't regain hit points until the start of your next turn."+ "\n In addition, any creature of your choice that you can see that starts its turn within 10 feet of you has its speed reduced by 10 feet until the start of your next turn."+ AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d8 for every two slot levels above 3rd.", dynamicDamageBonus : { multipleDmgTypes : { dmgTypes : ["cold", "necrotic", "radiant"], inDescriptionAs : "Cold/Necro/Radiant" } } }; SpellsList["summon aberration"] = { name : "Summon Aberration", classes : ["warlock", "wizard"], source : [["T", 109]], level : 4, school : "Conj", time : "1 a", range : "90 ft", components : "V,S,M\u0192", compMaterial : "A pickled tentacle and an eyeball in a platinum-inlaid vial worth at least 400 gp", duration : "Conc, 1 h", description : "Summon choice of Abberant Spirit; obeys commands; takes turn after mine; vanishes at 0 hp (400gp)", descriptionFull : "You call forth an aberrant spirit. It manifests in an unoccupied space that you can see within range. This corporeal form uses the Aberrant Spirit stat block. When you cast the spell, choose Beholderkin, Slaad, or Star Spawn. The creature resembles an aberration of that kind, which determines certain traits in its stat block. The creature disappears when it drops to 0 hit points or when the spell ends.\n The creature is an ally to you and your companions. In combat, the creature shares your initiative count, but it takes its turn immediately after yours. It obeys your verbal commands (no action required by you). If you don't issue any, it takes the Dodge action and uses its move to avoid danger." + AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, use the higher level wherever the spell's level appears in the stat block." }; SpellsList["summon beast"] = { name : "Summon Beast", classes : ["druid", "ranger"], source : [["T", 109]], level : 2, school : "Conj", time : "1 a", range : "90 ft", components : "V,S,M\u0192", compMaterial : "A feather, tuft of fur, and fish tail inside a gilded acorn worth at least 200 gp", duration : "Conc, 1 h", description : "Summon choice of Bestial Spirit; obeys commands; takes turn after mine; disappears at 0 hp (200gp)", descriptionFull : "You call forth a bestial spirit. It manifests in an unoccupied space that you can see within range. This corporeal form uses the Bestial Spirit stat block. When you cast the spell, choose an environment: Air, Land, or Water. The creature resembles an animal of your choice that is native to the chosen environment, which determines certain traits in its stat block. The creature disappears when it drops to 0 hit points or when the spell ends.\n The creature is an ally to you and your companions. In combat, the creature shares your initiative count, but it takes its turn immediately after yours. It obeys your verbal commands (no action required by you). If you don't issue any, it takes the Dodge action and uses its move to avoid danger." + AtHigherLevels + "When you cast this spell using a spell slot of 3rd level or higher, use the higher level wherever the spell's level appears in the stat block." }; SpellsList["summon celestial"] = { name : "Summon Celestial", classes : ["cleric", "paladin"], source : [["T", 110]], level : 5, school : "Conj", time : "1 a", range : "90 ft", components : "V,S,M\u0192", compMaterial : "A golden reliquary worth at least 500 gp", duration : "Conc, 1 h", description : "Summon choice of Celestial Spirit; obeys commands; takes turn after mine; disappears at 0 hp (500gp)", descriptionFull : "You call forth a celestial spirit. It manifests in an angelic form in an unoccupied space that you can see within range. This corporeal form uses the Celestial Spirit stat block. When you cast the spell, choose Avenger or Defender. Your choice determines the creature's attack in its stat block. The creature disappears when it drops to 0 hit points or when the spell ends.\n The creature is an ally to you and your companions. In combat, the creature shares your initiative count, but it takes its turn immediately after yours. It obeys your verbal commands (no action required by you). If you don't issue any, it takes the Dodge action and uses its move to avoid danger." + AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, use the higher level wherever the spell's level appears in the stat block." }; SpellsList["summon construct"] = { name : "Summon Construct", classes : ["artificer", "wizard"], source : [["T", 111]], level : 4, school : "Conj", time : "1 a", range : "90 ft", components : "V,S,M\u0192", compMaterial : "An ornate stone and metal lockbox worth at least 400 gp", duration : "Conc, 1 h", description : "Summon choice of Construct Spirit; obeys commands; takes turn after mine; vanishes at 0 hp (400gp)", descriptionFull : "You call forth the spirit of a construct. It manifests in an unoccupied space that you can see within range. This corporeal form uses the Construct Spirit stat block. When you cast the spell, choose a material: Clay, Metal, or Stone. The creature resembles a golem or a modron (your choice) made of the chosen material, which determines certain traits in its stat block. The creature disappears when it drops to 0 hit points or when the spell ends.\n The creature is an ally to you and your companions. In combat, the creature shares your initiative count, but it takes its turn immediately after yours. It obeys your verbal commands (no action required by you). If you don't issue any, it takes the Dodge action and uses its move to avoid danger." + AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, use the higher level wherever the spell's level appears in the stat block." }; SpellsList["summon elemental"] = { name : "Summon Elemental", classes : ["druid", "ranger", "wizard"], source : [["T", 111]], level : 4, school : "Conj", time : "1 a", range : "90 ft", components : "V,S,M\u0192", compMaterial : "Air, a pebble, ash, and water inside a gold-inlaid vial worth at least 400 gp", duration : "Conc, 1 h", description : "Summon choice of Elemental Spirit; obeys commands; takes turn after mine; vanishes at 0 hp (400gp)", descriptionFull : "You call forth an elemental spirit. It manifests in an unoccupied space that you can see within range. This corporeal form uses the Elemental Spirit stat block. When you cast the spell, choose an element: Air, Earth, Fire, or Water. The creature resembles a bipedal form wreathed in the chosen element, which determines certain traits in its stat block. The creature disappears when it drops to 0 hit points or when the spell ends.\n The creature is an ally to you and your companions. In combat, the creature shares your initiative count, but it takes its turn immediately after yours. It obeys your verbal commands (no action required by you). If you don't issue any, it takes the Dodge action and uses its move to avoid danger." + AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, use the higher level wherever the spell's level appears in the stat block." }; SpellsList["summon fey"] = { name : "Summon Fey", classes : ["druid", "ranger", "warlock", "wizard"], source : [["T", 112]], level : 3, school : "Conj", time : "1 a", range : "90 ft", components : "V,S,M\u0192", compMaterial : "A gilded flower worth at least 300 gp", duration : "Conc, 1 h", description : "Summon choice of Fey Spirit; obeys commands; takes turn after mine; disappears at 0 hp (300gp)", descriptionFull : "You call forth a fey spirit. It manifests in an unoccupied space that you can see within range. This corporeal form uses the Fey Spirit stat block. When you cast the spell, choose a mood: Fuming, Mirthful, or Tricksy. The creature resembles a fey creature of your choice marked by the chosen mood, which determines one of the traits in its stat block. The creature disappears when it drops to 0 hit points or when the spell ends.\n The creature is an ally to you and your companions. In combat, the creature shares your initiative count, but it takes its turn immediately after yours. It obeys your verbal commands (no action required by you). If you don't issue any, it takes the Dodge action and uses its move to avoid danger." + AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, use the higher level wherever the spell's level appears in the stat block." }; SpellsList["summon fiend"] = { name : "Summon Fiend", classes : ["warlock", "wizard"], source : [["T", 112]], level : 6, school : "Conj", time : "1 a", range : "90 ft", components : "V,S,M\u0192", compMaterial : "Humanoid blood inside a ruby vial worth at least 600 gp", duration : "Conc, 1 h", description : "Summon choice of Fiendish Spirit; obeys commands; takes turn after mine; disappears at 0 hp (600gp)", descriptionFull : "You call forth a fiendish spirit. It manifests in an unoccupied space that you can see within range. This corporeal form uses the Fiendish Spirit stat block. When you cast the spell, choose Demon, Devil, or Yugoloth. The creature resembles a fiend of the chosen type, which determines certain traits in its stat block. The creature disappears when it drops to 0 hit points or when the spell ends.\n The creature is an ally to you and your companions. In combat, the creature shares your initiative count, but it takes its turn immediately after yours. It obeys your verbal commands (no action required by you). If you don't issue any, it takes the Dodge action and uses its move to avoid danger." + AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, use the higher level wherever the spell's level appears in the stat block." }; SpellsList["summon shadowspawn"] = { name : "Summon Shadowspawn", classes : ["warlock", "wizard"], source : [["T", 113]], level : 3, school : "Conj", time : "1 a", range : "90 ft", components : "V,S,M\u0192", compMaterial : "Tears inside a gem worth at least 300 gp", duration : "Conc, 1 h", description : "Summon choice of Shadow Spirit; obeys commands; takes turn after mine; disappears at 0 hp (300gp)", descriptionFull : "You call forth a shadowy spirit. It manifests in an unoccupied space that you can see within range. This corporeal form uses the Shadow Spirit stat block. When you cast the spell, choose an emotion: Fury, Despair, or Fear. The creature resembles a misshapen biped marked by the chosen emotion, which determines certain traits in its stat block. The creature disappears when it drops to 0 hit points or when the spell ends.\n The creature is an ally to you and your companions. In combat, the creature shares your initiative count, but it takes its turn immediately after yours. It obeys your verbal commands (no action required by you). If you don't issue any, it takes the Dodge action and uses its move to avoid danger." + AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, use the higher level wherever the spell's level appears in the stat block." }; SpellsList["summon undead"] = { name : "Summon Undead", classes : ["warlock", "wizard"], source : [["T", 114]], level : 3, school : "Necro", time : "1 a", range : "90 ft", components : "V,S,M\u0192", compMaterial : "A gilded skull worth at least 300 gp", duration : "Conc, 1 h", description : "Summon choice of Undead Spirit; obeys commands; takes turn after mine; disappears at 0 hp (300gp)", descriptionFull : "You call forth an undead spirit. It manifests in an unoccupied space that you can see within range. This corporeal form uses the Undead Spirit stat block. When you cast the spell, choose the creature's form: Ghostly, Putrid, or Skeletal. The spirit resembles an undead creature with the chosen form, which determines certain traits in its stat block. The creature disappears when it drops to 0 hit points or when the spell ends.\n The creature is an ally to you and your companions. In combat, the creature shares your initiative count, but it takes its turn immediately after yours. It obeys your verbal commands (no action required by you). If you don't issue any, it takes the Dodge action and uses its move to avoid danger." + AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, use the higher level wherever the spell's level appears in the stat block." }; SpellsList["tasha's caustic brew"] = { name : "Tasha's Caustic Brew", nameAlt : "Caustic Brew", classes : ["artificer", "sorcerer", "wizard"], source : [["T", 115]], level : 1, school : "Evoc", time : "1 a", range : "S:30-ft line", components : "V,S,M", compMaterial : "A bit of rotten food", duration : "Conc, 1 min", save : "Dex", description : "30-ft long 5-ft wide all save or 2d4+2d4/SL Acid dmg at start of turn; action to clean self or adjacent", descriptionShorter : "30-ft long 5-ft wide all save or 2d4+2d4/SL Acid dmg at turn start; 1 a clean self/adjacent", descriptionFull : "A stream of acid emanates from you in a line 30 feet long and 5 feet wide in a direction you choose. Each creature in the line must succeed on a Dexterity saving throw or be covered in acid for the spell's duration or until a creature uses its action to scrape or wash the acid off itself or another creature. A creature covered in the acid takes 2d4 acid damage at start of each of its turns." + AtHigherLevels + "When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 2d4 for each slot level above 1st." }; SpellsList["tasha's mind whip"] = { name : "Tasha's Mind Whip", nameAlt : "Mind Whip", regExpSearch : /^(?=.*mind)(?=.*(whip|thrust)).*$/i, // "Mind Thrust" in UA:POR classes : ["sorcerer", "wizard"], source : [["T", 115], ["UA:POR", 8]], level : 2, school : "Ench", time : "1 a", range : "90 ft", components : "V", duration : "1 rnd", save : "Int", description : "1+1/SL crea, max 30 ft apart; 3d6 Psychic dmg; no rea; only move, act, or bns; save half, no act limit", descriptionShorter : "1+1/SL crea, max 30 ft apart; 3d6 Psychic dmg; no rea; move, act, or bns; save half, no act limit", descriptionFull : "You psychically lash out at one creature you can see within range. The target must make an Intelligence saving throw. On a failed save, the target takes 3d6 psychic damage, and it can't take a reaction until the end of its next turn. Moreover, on its next turn, it must choose whether it gets a move, an action, or a bonus action; it gets only one of the three. On a successful save, the target takes half as much damage and suffers none of the spell's other effects." + AtHigherLevels + "When you cast this spell using a spell slot of 3rd level or higher, you can target one additional creature for each slot level above 2nd. The creatures must be within 30 feet of each other when you target them." }; SpellsList["tasha's otherworldly guise"] = { name : "Tasha's Otherworldly Guise", nameShort : "T's Otherworldly Guise", nameAlt : "Otherworldly Guise", classes : ["sorcerer", "warlock", "wizard"], source : [["T", 116]], level : 6, school : "Trans", time : "1 bns", range : "Self", components : "V,S,M\u0192", compMaterial : "An object engraved with a symbol of the Outer Planes, worth at least 500 gp", duration : "Conc, 1 min", description : "Fire/Poison or Radiant/Necrotic/Charm immune; 40 ft fly; +2 AC; 2 atks; spellcast. abi atks (500gp)", descriptionFull : "Uttering an incantation, you draw on the magic of the Lower Planes or Upper Planes (your choice) to transform yourself. You gain the following benefits until the spell ends:" + "\n \u2022 You are immune to fire and poison damage (Lower Planes) or radiant and necrotic damage (Upper Planes)." + "\n \u2022 You are immune to the poisoned condition (Lower Planes) or the charmed condition (Upper Planes)." + "\n \u2022 Spectral wings appear on your back, giving you a flying speed of 40 feet." + "\n \u2022 You have a +2 bonus to AC." + "\n \u2022 All your weapon attacks are magical, and when you make a weapon attack, you can use your spellcasting ability modifier, instead of Strength or Dexterity, for the attack and damage rolls." + "\n \u2022 You can attack twice, instead of once, when you take the Attack action on your turn. You ignore this benefit if you already have a feature, like Extra Attack, that lets you attack more than once when you take the Attack action on your turn." }; // >>>>>>>>>>>>>>>>>>> // // >>> Magic Items >>> // // >>>>>>>>>>>>>>>>>>> // // Tattoos var TCoE_magicTattoosDescription = desc([ " >>Tattoo Attunement<<. To attune to this item, you hold the needle to your skin where you want the tattoo to appear, pressing the needle there throughout the attunement process. When the attunement is complete, the needle turns into the ink that becomes the tattoo, which appears on the skin.", " If your attunement to the tattoo ends, the tattoo vanishes, and the needle reappears in your space.", "\n>>Magic Tattoos<< (TCoE 118)", " Blending magic and artistry with ink and needles, magic tattoos imbue their bearers with wondrous abilities. Magic tattoos are initially bound to magic needles, which transfer their magic to a creature.", " Once inscribed on a creature's body, damage or injury doesn't impair the tattoo's function, even if the tattoo is defaced. When applying a magic tattoo, a creature can customize the tattoo's appearance. A magic tattoo can look like a brand, scarification, a birthmark, patterns of scale, or any other cosmetic alteration.", " The rarer a magic tattoo is, the more space it typically occupies on a creature's skin. The table below offers guidelines for how large a given tattoo is.", "\n>>Tattoo Rarity\tArea Covered<<", "Common \tOne hand or foot or a quarter of a limb", "Uncommon \tHalf a limb or the scalp", "Rare\t\tOne limb", "Very Rare \tTwo limbs or the chest or upper back", "Legendary \tTwo limbs and the torso" ], "\n "); magicTattoosTxt = { // a public variable to be used for any magical tattoo that uses these rules base : TCoE_magicTattoosDescription, unicode : TCoE_magicTattoosDescription.replace(/>>(.*?)<>(.*?)<>(.*?)<>Sentience<<. Nepenthe is a sentient, neutral evil weapon with an Intelligence of 10, a Wisdom of 8, and a Charisma of 18. It has hearing and darkvision out to a range of 60 feet. It can read and understand Elvish. It can also speak Elvish, but only through the voice of its wielder, with whom the sword can communicate telepathically.", ">>Personality<<. In its lifetime, the sword has beheaded thousands of criminals, not all of whom were guilty of the crimes for which they were convicted. The sword cannot distinguish the guilty from the innocent. With each beheading, it hungers for more justice and blood. The sword is corrupt and irredeemable." ] MagicItemsList["nepenthe"] = { name : "Nepenthe", source : [["VRGtR", 137]], type : "weapon (any sword)", rarity : "legendary", magicItemTable : "I", attunement : true, prerequisite : "Requires attunement by a paladin", prereqeval : function (v) { return classes.known.paladin ? true : false; }, description : "This sentient holy avenger longsword gives me a +3 bonus to attack and damage rolls. It does +2d10 radiant damage against fiends and undead. While holding the drawn sword, I have a 10-ft radius aura (30-ft if level 17 paladin) that grants me and my allies adv. on saves against spells and magical effects.", descriptionFull : VRGtR_nepentheFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)<>(.*?)<>Sentience<<. Snicker-Snack is a sentient, chaotic good greatsword with an Intelligence of 9, a Wisdom of 14, and a Charisma of 18. It has hearing and darkvision out to a range of 120 feet. It can speak, read, and understand Common, and its voice sounds silvery and melodic. Snicker-Snack craves the destruction of evil Dragons and urges you to seek out these creatures and slay them.", ">>Personality<<. Snicker-Snack has a fickle personality. It ends its attunement to you if you miss on attack rolls with the weapon three times in a row. Each time you finish a long rest after that happens, you can attempt to regain the sword's trust by making a contested Charisma check against Snicker-Snack. If you win the contest, your attunement to the weapon is instantly restored. Your attunement to the weapon can't be restored in any other way." ]; MagicItemsList["snicker-snack"] = { name : "Snicker-Snack", source : [["WBtW", 213]], type : "weapon (greatsword)", rarity : "legendary", attunement : true, prerequisite : "Requires attunement by a non-evil creature", prereqeval : function(v) { return !/evil/i.test(What("Alignment")); }, description : "I have a +3 bonus on attack and damage rolls with this sentient magic greatsword and can use Cha instead of Str. It ignores slashing resistance. On a 20 to hit, it cuts off " + (typePF ? "a head" : "one head, possibly killing it instantly") + ". If the target has legendary actions, no head, too wide neck, or is immune to slashing damage, it takes +6d8 damage instead. See Notes.", descriptionFull : WBtW_Snicker_Snack_Full_Description.join("\n ").replace(/>>(.*?)< What('Str')) { fields.Mod = 6; } }, "I can use my Charisma modifier instead of my Strength modifier for attack and damage rolls made with Snicker-Snack." ] } } var WBtW_Steel_Full_Description = [ "You have a +2 bonus to attack and damage rolls made with this magic weapon.", ">>Revivify<<. You can use an action to cast the revivify spell from the sword. You must touch the target with the sword to cast the spell. Once this property of the weapon is used, it can't be used again until the next dawn.", ">>Sentience<<. Steel is a sentient, lawful good longsword with an Intelligence of 8, a Wisdom of 11, and a Charisma of 15. It can see and hear out to a range of 60 feet. The sword can speak, read, and understand Common and Draconic. It frets over your well-being while you are attuned to it, and it doesn't like to back down from a fight." ]; MagicItemsList["steel"] = { name : "Steel", source : [["WBtW", 214]], type : "weapon (longsword)", rarity : "very rare", attunement : true, prerequisite : "Requires attunement by a good-aligned creature", prereqeval : function(v) { return /good/i.test(What("Alignment")); }, description : "This sentient longsword adds +2 to attack and damage rolls made with it. As an action once per dawn, I can use it to cast Revivify on a target I touch with the sword. Steel is lawful good and frets over my well-being and doesn't like to back down from a fight. It has Int 8, Wis 11, and Cha 15. See Notes page.", descriptionFull : WBtW_Steel_Full_Description.join("\n ").replace(/>>(.*?)<>Magic Weapon<<. In the hands of one who is attuned to it, the vane can be wielded as a magic mace that grants a +3 bonus to attack and damage rolls made with it. In addition, the vane deals an extra 1d8 radiant damage on a hit.", ">>Sense Mood<<. While the vane is inside the perimeter of the Witchlight Carnival, it can sense the mood of every creature in the carnival that has an Intelligence of 4 or higher. As an action, a creature attuned to the vane can use it to pinpoint the location of the happiest creature in the carnival.", "The butterfly shape at the top of the vane spins slowly clockwise when spirits in the carnival are generally high; if the general mood in the carnival is dour, the top of the vane spins slowly counterclockwise.", ">>Sentience<<. The vane is a sentient, chaotic good wondrous item with an Intelligence of 11, a Wisdom of 14, and a Charisma of 14. It has hearing and normal vision out to a range of 30 feet, and it communicates by transmitting emotion to the creature attuned to it. Its purpose is to make sure everyone in the Witchlight Carnival is having a good time.", ">>Additional Properties<<. The vane has the following additional properties:", "\u2022 The creature holding the vane has vulnerability to lightning damage.", "\u2022 The creature attuned to the vane can't be blinded, deafened, petrified, or stunned.", "\u2022 While carrying the vane, the creature attuned to it can cast the dancing lights, polymorph, or ray of frost spell as an action, requiring no spell components and using Charisma as the spellcasting ability. After the vane's polymorph spell is cast, roll a d8; on a roll of 3 or 8, the vane can't be used to cast this spell again until the next dawn." ]; MagicItemsList["witchlight vane"] = { name : "Witchlight Vane", source : [["WBtW", 27]], type : "wondrous item", rarity : "legendary", attunement : true, prerequisite : "Requires attunement by a mister light or his handpicked successor", description : "I can use this sentient ornate rod as a +3 mace that deals an extra 1d8 radiant damage on a hit. It can sense the mood of every creature in the carnival. As an action, I can pinpoint the happiest in the carnival. I can use it to cast spells. I can't be blinded, deafened, petrified, or stunned. See Notes page.", descriptionLong : "This sentient ornate rod is topped by a pair of butterfly wings and incorporates bits of red glass into its length. I can use it as a +3 mace that deals an extra 1d8 radiant damage on a hit. It can sense the mood of every creature in the carnival. As an action, I can use it to pinpoint the happiest in the carnival. I can use it to cast Dancing Light, Ray of Frost, and Polymorph. After I use it to cast Polymorph, roll a d8. On a roll of 3 or 8, the vane can't be used to cast Polymorph again until the next dawn. It makes me vulnerable to lightning damage, but I can't be blinded, deafened, petrified, or stunned. See Notes page.", descriptionFull : WBtW_Witchlight_Vane_Full_Description.join("\n ").replace(/>>(.*?)<>Carnival Setup and Takedown<<. The creature attuned to the watch can use an action to initiate the packing up or the unpacking of the Witchlight Carnival, provided the creature and the carnival are on the same plane of existence. In the span of 1 hour, all objects that are elements of the carnival are magically whisked about until everything is packed up and ready for travel, or unpacked and assembled. The watch has no effect on creatures, which can move about freely and safely while the carnival is being set up or taken down. Once the process of packing up or unpacking the carnival begins, it can't be stopped until the task is complete. When the watch is used to pack up or unpack the carnival, this property cannot be used again until 8 hours have elapsed.", ">>Additional Properties<<. The pocket watch has the following additional properties:", "\u2022 While carrying the watch, the creature attuned to it can cast the fire bolt, invisibility, or message spell as an action, requiring no spell components and using Intelligence as the spellcasting ability. After the watch's invisibility spell is cast, roll a d8; on a roll of 3 or 8, the watch can't be used to cast this spell again until the next dawn.", "\u2022 The creature attuned to the watch gains 30 pounds. This extra weight vanishes when the attunement ends.", "\u2022 The creature attuned to the watch must eat and drink eight times the normal amount each day." ]; MagicItemsList["witchlight watch"] = { name : "Witchlight Watch", source : [["WBtW", 25]], type : "wondrous item", rarity : "legendary", attunement : true, prerequisite : "Requires attunement by a mister witch or his handpicked successor", description : "As an action once per 8 hours, I can use this ornate pocket watch to initiate the (un)packing of the carnival over the next hour. I can use it to cast Fire Bolt, Message, and Invisibility. After it casts Invisibility, I roll a d8. On a roll of 3 or 8, I can't cast this again until the next dawn. See Notes page.", descriptionLong : "This ornate pocket watch is fastened to the end of a gold chain and glows with a faint golden light when opened. As an action once per 8 hours, I can use this ornate pocket watch to initiate the (un)packing of the carnival over the next hour, provided the carnival and I are on the same plane of existence. I can use it to cast Fire Bolt, Message, and Invisibility. After I use it to cast Invisibility, roll a d8. On a roll of 3 or 8, it can't be used to cast Invisibility again until the next dawn. As long as I'm attuned to it, I'm 30 lb heavier and must eat and drink eight times the normal amount each day. See Notes page.", descriptionFull : WBtW_Witchlight_Watch_Full_Description.join("\n ").replace(/>>(.*?)<>TYPE<< Breath Weapon: When I take the Attack action on my turn, I can replace one attack with a breath weapon that deals 1d10 >>type<< damage to all in a 5-ft by 30-ft line, Dex save halves (DC 8 + Con mod + Proficiency Bonus). I can do this my Proficiency Bonus per long rest. The damage increases with +1d10 at 5th, 11th, and 17th level.", "Chromatic Warding: From 5th level, I can protect myself using my draconic energies. As an action once per long rest, I can become immune to >>type<< damage for 1 minute." ], "\n \u2022 "), features : { "chromatic warding" : { name : "Chromatic Warding", source : [["FToD", 10]], minlevel : 5, usages : 1, recovery : "long rest", action : [["action", ""]] } } }, Gem : { regExpSearch : /^(?=.*gem)(?=.*dragonborn).*$/i, source : [["FToD", 11]], variants : [["Amethyst", "Force"], ["Crystal", "Radiant"], ["Emerald", "Psychic"], ["Sapphire", "Thunder"], ["Topaz", "Necrotic"]], breathWeaponShape : "15-ft cone", trait : desc([ ">>TYPE<< Breath Weapon: When I take the Attack action on my turn, I can replace one attack with a breath weapon that deals 1d10 >>type<< damage to all in a 15-ft cone, Dex save halves (DC 8 + Con mod + Prof Bonus). I can do this my Prof" + (typePF ? "iciency" : ".") + " Bonus per long rest.", "Psionic Mind: " + (typePF ? "I can send telepathic messages to any creature I can see within 30 ft that understands at least one language." : "I can telepathically message a creature with a language I can see in 30 ft."), "Gem Flight: From 5th level, I can manifest spectral wings. As a bonus action once per long rest, I can gain, for 1 minute, a flying speed equal to my walking speed and can hover." ], "\n \u2022 "), features : { "gem flight" : { name : "Gem Flight", source : [["FToD", 11]], minlevel : 5, usages : 1, recovery : "long rest", action : [["bonus action", ""]] } } }, Metallic : { regExpSearch : /^(?=.*metallic)(?=.*dragonborn).*$/i, source : [["FToD", 12]], variants : [["Brass", "Fire"], ["Bronze", "Lightning"], ["Copper", "Acid"], ["Gold", "Fire"], ["Silver", "Cold"]], breathWeaponShape : "15-ft cone", trait : desc([ ">>TYPE<< Breath Weapon: When I take the Attack action on my turn, I can replace one attack with a breath weapon that deals 1d10 >>type<< damage to all in a 15-ft cone, Dex save halves (DC 8 + Con mod + Prof" + (typePF ? "iciency" : ".") + " Bonus). I can do this my Prof" + (typePF ? "iciency" : ".") + " Bonus per long rest.", "Metallic Breath Weapon: At 5th level I gain a second breath weapon once per long rest, that works just like the first, but I choose the effect when I use it: Enervating: Con save or incapacitated until my next turn starts. Repulsion: Str save or pushed 20 ft and prone." ], "\n \u2022 "), features : { "metallic breath weapon" : { name : "Metallic Breath Weapon", source : [["FToD", 12]], minlevel : 5, usages : 1, recovery : "long rest", weaponOptions : [{ regExpSearch : /^(?=.*metallic)(?=.*breath)(?=.*weapon).*$/i, name : "Metallic breath weapon", source : [["FToD", 12]], ability : 3, type : 'Natural', damage : ['Enervating', '', 'or Repulsion'], range : "15-ft cone", description : "Repulsion: Str save or pushed 20 ft \u0026 prone; Enervating: Con save or incapacitated till my next turn starts", abilitytodamage : false, dc : true, selectNow : true }] } } } } for (var sDrBrn in objDragonborns) { var sDrBrnLC = sDrBrn.toLowerCase(); var oDrBrn = objDragonborns[sDrBrn]; RaceList[sDrBrnLC + " dragonborn"] = { regExpSearch : oDrBrn.regExpSearch, name : sDrBrn + " Dragonborn", sortname : "Dragonborn, " + sDrBrn, source : oDrBrn.source, plural : sDrBrn + " Dragonborn", size : 3, speed : { walk : { spd : 30, enc : 20 } }, weaponOptions : [{ regExpSearch : /^(?=.*breath)(?=.*weapon).*$/i, name : "Breath weapon", source : oDrBrn.source, ability : 3, type : 'Natural', damage : ['C', 10, 'fire'], range : oDrBrn.breathWeaponShape.replace('by', '\xD7'), description : "Hits all in area; Dex save, success - half damage", abilitytodamage : false, dc : true, dbBreathWeapon : true, selectNow : true }], age : " reach adulthood by 15 and live around 80 years", height : " stand well over 6 feet tall (5'6\" + 2d8\")", weight : " weigh around 240 lb (175 + 2d8 \xD7 2d6 lb)", heightMetric : " stand well over 1,8 metres tall (170 + 5d8 cm)", weightMetric : " weigh around 110 kg (80 + 5d8 \xD7 4d6 / 10 kg)", scoresGeneric : true, trait : sDrBrn + " Dragonborn"+ "\n \u2022 " + sDrBrn + ' Ancestry: Choose a type of dragon using the "Racial Options" button. The damage type of my resistance and my breath weapon are determined by the dragon type chosen.'+ + oDrBrn.trait.replace(/>>type<< /ig, ""), features : { "breath weapon" : { name : "Breath Weapon", minlevel : 1, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", additional : cantripDie.map(function (n) { return n + 'd10'; }), calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.dbBreathWeapon && /dragonborn/i.test(CurrentRace.known) && CurrentRace.dmgres) { fields.Damage_Type = CurrentRace.dmgres[0]; } }, '', 1 ] } } }, variants : [] }; if (oDrBrn.features) { for (var sFea in oDrBrn.features) { RaceList[sDrBrnLC + " dragonborn"].features[sFea] = oDrBrn.features[sFea]; } } for (var i = 0; i < oDrBrn.variants.length; i++) { var sDrBrnVar = oDrBrn.variants[i][0]; var sDrBrnDmg = oDrBrn.variants[i][1]; AddRacialVariant(sDrBrnLC + " dragonborn", sDrBrnVar.toLowerCase(), { regExpSearch : RegExp(sDrBrnVar, "i"), name : sDrBrnVar + " " + sDrBrnLC + " dragonborn", trait : sDrBrnVar + " " + sDrBrnLC + " dragonborn"+ oDrBrn.trait.replace(/>>TYPE<>type<>Slumbering (Uncommon)<<. Whenever you roll a 20 on your attack roll with this weapon, each creature of your choice within 5 feet of the target takes 5 damage of the type dealt by the dragon's breath weapon.", ">>Stirring (Rare)<<. The Stirring weapon has the Slumbering property. In addition, you gain a +1 bonus to attack and damage rolls made using the weapon. On a hit, the weapon deals an extra 1d6 damage of the type dealt by the dragon's breath weapon.", ">>Wakened (Very Rare)<<. The Wakened weapon has the Slumbering property, and it improves on the Stirring property. The bonus to attack and damage rolls increases to +2, and the extra damage dealt by the weapon increases to 2d6.", "As an action, you can unleash a 30-foot cone of destructive energy from the weapon. Each creature in that area must make a DC 16 Dexterity saving throw, taking 8d6 damage of the type dealt by the dragon's breath weapon on a failed save, or half as much damage on a successful one. Once this action is used, it can't be used again until the next dawn.", ">>Ascendant (Legendary)<<. The Ascendant weapon has the Slumbering property, and it improves on the Stirring and Wakened properties. The bonus to attack and damage rolls increases to +3, and the extra damage dealt by the weapon increases to 3d6.", "The cone of destructive energy the weapon creates increases to a 60-foot cone, the save DC increases to 18, and the damage increases to 12d6." ], "dww-slumbering" : { description : "This magic weapon decorated with draconic ornaments has absorbed the energy of >>a dragon<< dragon's breath weapon. Whenever I roll a 20 on an attack roll with it, each creature of my choice within 5 ft of the target takes 5 >>dmg type<< damage.", calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && (v.isMeleeWeapon || v.isRangedWeapon) && /^(?=.*slumbering)(?=.*\b(black|blue|green|red|white|amethyst|crystal|emerald|sapphire|topaz|brass|bronze|copper|gold|silver).(dragon'?s?.wrath|DW)\b).*$/i.test(v.WeaponTextName)) { var sWeaNmLC = v.WeaponTextName.toLowerCase(); var aDragons = [["black", "acid"], ["blue", "lightning"], ["green", "poison"], ["red", "fire"], ["white", "cold"], ["amethyst", "force"], ["crystal", "radiant"], ["emerald", "psychic"], ["sapphire", "thunder"], ["topaz", "necrotic"], ["brass", "fire"], ["bronze", "lightning"], ["copper", "acid"], ["gold", "fire"], ["silver", "cold"]]; var sDmgType = false; for (var i = 0; i < aDragons.length; i++) { if (sWeaNmLC.indexOf(aDragons[i][0]) !== -1) { sDmgType = aDragons[i][1]; break; } } if (!sDmgType) return; v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + 'On 20 to hit: 5 ' + sDmgType + ' damage to chosen in 5 ft of target'; }; }, "If I include the words \"TYPE Dragon's Wrath\" or \"TYPE DW\" (where \"TYPE\" is replaced with a dragon's type like \"Red\") and \"Slumbering\" in the name of a weapon, it will be treated as the magic item Slumbering Dragon's Wrath Weapon (e.g. \"Red DW Longbow (slumbering)\"). Whenever I roll a 20 on an attack roll with a slumbering dragon's wrath weapon, each creature of my choice within 5 ft of the target takes 5 damage of the associated dragon's type. " ] } }, "dww-stirring" : { description : "This dragon decorated weapon has absorbed the energy of >>a dragon<< dragon's breath weapon. I add +1 on attack and damage rolls made with it and it deals +1d6 >>dmg type<< damage. When I roll a 20 on an attack roll with it, each creature of my choice within 5 ft of the target takes 5 >>dmg type<< damage.", calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && (v.isMeleeWeapon || v.isRangedWeapon) && /^(?=.*stirring)(?=.*\b(black|blue|green|red|white|amethyst|crystal|emerald|sapphire|topaz|brass|bronze|copper|gold|silver).(dragon'?s?.wrath|DW)\b).*$/i.test(v.WeaponTextName)) { var sWeaNmLC = v.WeaponTextName.toLowerCase(); var aDragons = [["black", "acid"], ["blue", "lightning"], ["green", "poison"], ["red", "fire"], ["white", "cold"], ["amethyst", "force"], ["crystal", "radiant"], ["emerald", "psychic"], ["sapphire", "thunder"], ["topaz", "necrotic"], ["brass", "fire"], ["bronze", "lightning"], ["copper", "acid"], ["gold", "fire"], ["silver", "cold"]]; var sDmgType = false; for (var i = 0; i < aDragons.length; i++) { if (sWeaNmLC.indexOf(aDragons[i][0]) !== -1) { sDmgType = aDragons[i][1]; break; } } if (!sDmgType) return; v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + '+1d6 ' + sDmgType + ' damage; On 20: 5 ' + sDmgType + ' damage to chosen in 5 ft of target'; }; }, "If I include the words \"TYPE Dragon's Wrath\" or \"TYPE DW\" (where \"TYPE\" is replaced with a dragon's type like \"Red\") and \"Stirring\" in the name of a weapon, it will be treated as the magic item Stirring Dragon's Wrath Weapon (e.g. \"Red DW Longbow (stirring)\"). A stirring dragon's wrath weapon adds +1 to attack and damage rolls made with it. On a hit, the weapon deals an extra +1d6 damage and on a 20 on an attack roll with it, each creature of my choice within 5 ft of the target takes 5 damage. The damage is of the associated dragon's type." ], atkCalc : [ function (fields, v, output) { if (!v.theWea.isMagicWeapon && (v.isMeleeWeapon || v.isRangedWeapon) && /^(?=.*stirring)(?=.*\b(dragon'?s?.wrath|DW)\b).*$/i.test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; output.magic = v.thisWeapon[1] + 1; } }, '' ] } }, "dww-wakened" : { description : "This weapon uses >>dmg type<< of >>a dragon<< dragon. It adds +2 to its attack and damage rolls and deals +2d6 >>dmg type<< damage. On a 20 to hit, any creature of my choice in 5 ft of the target take 5 damage. As an action once per dawn, it can do a 30-ft cone, Dex DC 16 half, 8d6 damage dragon breath.", calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && (v.isMeleeWeapon || v.isRangedWeapon) && /^(?=.*wakened)(?=.*\b(black|blue|green|red|white|amethyst|crystal|emerald|sapphire|topaz|brass|bronze|copper|gold|silver).(dragon'?s?.wrath|DW)\b).*$/i.test(v.WeaponTextName)) { var sWeaNmLC = v.WeaponTextName.toLowerCase(); var aDragons = [["black", "acid"], ["blue", "lightning"], ["green", "poison"], ["red", "fire"], ["white", "cold"], ["amethyst", "force"], ["crystal", "radiant"], ["emerald", "psychic"], ["sapphire", "thunder"], ["topaz", "necrotic"], ["brass", "fire"], ["bronze", "lightning"], ["copper", "acid"], ["gold", "fire"], ["silver", "cold"]]; var sDmgType = false; for (var i = 0; i < aDragons.length; i++) { if (sWeaNmLC.indexOf(aDragons[i][0]) !== -1) { sDmgType = aDragons[i][1]; break; } } if (!sDmgType) return; v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + '+2d6 ' + sDmgType + ' damage; On 20: 5 ' + sDmgType + ' damage to chosen in 5 ft of target'; }; }, "If I include the words \"TYPE Dragon's Wrath\" or \"TYPE DW\" (where \"TYPE\" is replaced with a dragon's type like \"Red\") and \"Wakened\" in the name of a weapon, it will be treated as the magic item Wakened Dragon's Wrath Weapon (e.g. \"Red DW Longbow (wakened)\"). A wakened dragon wrath weapon adds +2 to attack and damage rolls made with it. On a hit, the weapon deals an extra +2d6 damage and on a 20 on an attack roll with it, each creature of my choice within 5 ft of the target takes 5 damage. The damage is of the associated dragon's type." ], atkCalc : [ function (fields, v, output) { if (!v.theWea.isMagicWeapon && (v.isMeleeWeapon || v.isRangedWeapon) && /^(?=.*wakened)(?=.*\b(dragon'?s?.wrath|DW)\b).*$/i.test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; output.magic = v.thisWeapon[1] + 2; } }, '' ] }, usages : 1, recovery : "dawn", limfeaname : ">>dragon<< Dragon's Wrath Breath (wakened)", action : [["action", ""]], weaponOptions : [{ regExpSearch : "^(?=.*wakened)(?=.*>>dragon<< (dragon'?s? wrath|DW))(?=.*breath).*$", name : ">>dragon<< Dragon's Wrath Breath (wakened)", source : [["FToD", 25]], ability : 0, type : "Magic Item", damage : [8, 6, ">>type<<"], range : "30-ft cone", description : "Hits all in area; Dex save, success - half damage; Usable only once per dawn", abilitytodamage : false, dc : true, modifiers : [8, ""], selectNow : true }] }, "dww-ascendant" : { description : "This weapon uses >>dmg type<< of >>a dragon<< dragon. It adds +3 to its attack and damage rolls and deals +3d6 >>dmg type<< damage. On a 20 to hit, any creature of my choice in 5 ft of the target take 5 damage. As an action once per dawn, it can do a 60-ft cone, Dex DC 18 half, 12d6 damage dragon breath.", calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && (v.isMeleeWeapon || v.isRangedWeapon) && /^(?=.*ascendant)(?=.*\b(black|blue|green|red|white|amethyst|crystal|emerald|sapphire|topaz|brass|bronze|copper|gold|silver).(dragon'?s?.wrath|DW)\b).*$/i.test(v.WeaponTextName)) { var sWeaNmLC = v.WeaponTextName.toLowerCase(); var aDragons = [["black", "acid"], ["blue", "lightning"], ["green", "poison"], ["red", "fire"], ["white", "cold"], ["amethyst", "force"], ["crystal", "radiant"], ["emerald", "psychic"], ["sapphire", "thunder"], ["topaz", "necrotic"], ["brass", "fire"], ["bronze", "lightning"], ["copper", "acid"], ["gold", "fire"], ["silver", "cold"]]; var sDmgType = false; for (var i = 0; i < aDragons.length; i++) { if (sWeaNmLC.indexOf(aDragons[i][0]) !== -1) { sDmgType = aDragons[i][1]; break; } } if (!sDmgType) return; v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + '+3d6 ' + sDmgType + ' damage; On 20: 5 ' + sDmgType + ' damage to chosen in 5 ft of target'; }; }, "If I include the words \"TYPE Dragon's Wrath\" or \"TYPE DW\" (where \"TYPE\" is replaced with a dragon's type like \"Red\") and \"Ascendant\" in the name of a weapon, it will be treated as the magic item Ascendant Dragon's Wrath Weapon (e.g. \"Red DW Longbow (ascendant)\"). An ascendant dragon wrath weapon adds +3 to attack and damage rolls made with it. On a hit, the weapon deals an extra +3d6 damage and on a 20 on an attack roll with it, each creature of my choice within 5 ft of the target takes 5 damage. The damage is of the associated dragon's type." ], atkCalc : [ function (fields, v, output) { if (!v.theWea.isMagicWeapon && (v.isMeleeWeapon || v.isRangedWeapon) && /^(?=.*ascendant)(?=.*\b(dragon'?s?.wrath|DW)\b).*$/i.test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; output.magic = v.thisWeapon[1] + 3; } }, '' ] }, usages : 1, recovery : "dawn", limfeaname : ">>dragon<< Dragon's Wrath Breath (ascendant)", action : [["action", "Dragon's Wrath Breath Weapon"]], weaponOptions : [{ regExpSearch : "^(?=.*ascendant)(?=.*>>dragon<< (dragon'?s? wrath|DW))(?=.*breath).*$", name : ">>dragon<< Dragon's Wrath Breath (ascendant)", source : [["FToD", 25]], ability : 0, type : "Magic Item", damage : [12, 6, ">>type<<"], range : "60-ft cone", description : "Hits all in area; Dex save, success - half damage; Usable only once per dawn", abilitytodamage : false, dc : true, modifiers : [10, ""], selectNow : true }] }, dragonsWrathWeaponCreate : function() { var aTypes = [["Slumbering", "uncommon"], ["Stirring", "rare"], ["Wakened", "very rare"], ["Ascendant", "legendary"]]; var aDragons = [["Black", "acid"], ["Blue", "lightning"], ["Green", "poison"], ["Red", "fire"], ["White", "cold"], ["Amethyst", "force"], ["Crystal", "radiant"], ["Emerald", "psychic"], ["Sapphire", "thunder"], ["Topaz", "necrotic"], ["Brass", "fire"], ["Bronze", "lightning"], ["Copper", "acid"], ["Gold", "fire"], ["Silver", "cold"]]; var aVowels = ["a", "e"]; var sDescriptionFull = FToD_HoardItems["dragon's wrath weapon"].join("\n ").replace(/>>(.*?)<>a dragon<>dmg type<< /ig, ""), descriptionFull : sDescriptionFull, toNotesPage : [{ name : "Full Text", note : sNotesDescription }], allowDuplicates : true, choicesNotInMenu : true, choices : [] } for (var sAttr in oDwwObj) { if (/^(description|weaponOptions|limfeaname)$/.test(sAttr)) continue; MagicItemsList[sItemNameLC][sAttr] = oDwwObj[sAttr]; } for (var i = 0; i < aDragons.length; i++) { var sDragon = aDragons[i][0]; var sDragonLC = sDragon.toLowerCase(); var sDmg = aDragons[i][1]; var sNameChoice = sDragon + " dragon (" + sDmg + ")"; var sNameChoiceLC = sNameChoice.toLowerCase(); var sNameTest = sItemType + " " + sDragon + " Dragon's Wrath"; var sAorAnDragon = (aVowels.indexOf(sDragonLC[0]) === -1 ? "a " : "an ") + sDragonLC; MagicItemsList[sItemNameLC].choices.push(sNameChoice); MagicItemsList[sItemNameLC][sNameChoiceLC] = { name : sNameTest + " Weapon", nameTest : sNameTest, description : oDwwObj.description.replace(/>>a dragon<>dmg type<>dragon<>dragon<>dragon<>Slumbering (Uncommon)<<. You have advantage on initiative rolls. While you are holding the focus, it can function as a spellcasting focus for all your spells.", ">>Stirring (Rare)<<. The Stirring focus has the Slumbering property, and it gains an additional property determined by the family of the dragon in whose hoard it became Stirring:", "\u2022 Chromatic. Whenever you use a spell slot to cast a spell that deals acid, cold, fire, lightning, or poison damage, roll a d6, and you gain a bonus equal to the number rolled to one of the spell's damage rolls.", "\u2022 Gem. Whenever you use a spell slot to cast a spell, you can immediately teleport to an unoccupied space you can see within 15 feet of you.", "\u2022 Metallic. When a creature you can see within 30 feet of you makes a saving throw, you can use your reaction to give that creature advantage on the saving throw.", ">>Wakened (Very Rare)<<. The Wakened focus has the Slumbering and Stirring properties, and while you are holding a Wakened focus, you can use it to cast certain spells. Once the item is used to cast a given spell, it can't be used to cast that spell again until the next dawn. The spells are determined by the family of the dragon in whose hoard it became Wakened. An asterisk indicates a new spell that appears earlier in this chapter.", "\u2022 Chromatic. Hold monster, Rime's binding ice", "\u2022 Gem. Rary's telepathic bond, Raulothim's psychic lance", "\u2022 Metallic. Fizban's platinum shield, legend lore", ">>Ascendant (Legendary)<<. The Ascendant focus has the Slumbering, Stirring, and Wakened properties. In addition, when you cast a spell of 1st level or higher while holding this focus, you can treat the spell as if it were cast using a 9th-level spell slot. Once this property is used, it can't be used again until the next dawn." ], dtf_chromatic : { calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { if (CurrentSpells[spName].refType == "class" && !spellObj.psionic && spellObj.level !== 0 && (/(check|checked|marked)box/i.test(spellObj.firstCol) || (spName === "warlock" && !/atwill|sp/i.test(spellObj.firstCol)))) return genericSpellDmgEdit(spellKey, spellObj, "acid|cold|fire|lightning|lightn\\.?|poison", "1d6", true, true); }, "Whenever I use a spell slot to cast a spell that deals acid, cold, fire, lightning, or poison damage, roll a d6, and I gain a bonus equal to the number rolled to one of the spell's damage rolls." ] }, extraLimitedFeatures : [{ name : "Dragon-Touched Focus (Hold Monster)", usages : 1, recovery : "dawn" }, { name : "Dragon-Touched Focus (Rime's Binding Ice)", usages : 1, recovery : "dawn" }], spellcastingBonus : [{ name : "Once per dawn", spells : ["hold monster", "rime's binding ice"], selection : ["hold monster", "rime's binding ice"], firstCol : "oncelr", times : 2 }] }, dtf_gem : { extraLimitedFeatures : [{ name : "Dragon-Touched Focus (Rary's Telepathic Bond)", usages : 1, recovery : "dawn" }, { name : "Dragon-Touched Focus (R's Psychic Lance)", usages : 1, recovery : "dawn" }], spellcastingBonus : [{ name : "Once per dawn", spells : ["rary's telepathic bond", "raulothim's psychic lance"], selection : ["rary's telepathic bond", "raulothim's psychic lance"], firstCol : "oncelr", times : 2 }] }, dtf_metallic : { extraLimitedFeatures : [{ name : "Dragon-Touched Focus (F's Platinum Shield)", usages : 1, recovery : "dawn" }, { name : "Dragon-Touched Focus (Legend Lore)", usages : 1, recovery : "dawn" }], spellcastingBonus : [{ name : "Once per dawn", spells : ["fizban's platinum shield", "legend lore"], selection : ["fizban's platinum shield", "legend lore"], firstCol : "oncelr", times : 2 }] }, dtf_ascendant : { extraLimitedFeatures : [{ name : "Dragon-Touched Focus (upcast to 9th-level)", usages : 1, recovery : "dawn" }] }, "dragon vessel" : [ "This vessel can be a potion bottle, drinking horn, or other container meant to hold a liquid.", ">>Slumbering (Uncommon)<<. As a bonus action, if the vessel is empty, you can speak the command word to fill the vessel with one of the following (your choice): ale, olive oil, a potion of healing, or a potion of climbing. Once this property is used, it can't be used until the next dawn. A potion you create in this way loses its magical properties if it isn't imbibed within 24 hours.", ">>Stirring (Rare)<<. In addition to the options for a Slumbering vessel, you can fill a Stirring vessel with mead, a potion of fire breath, or a potion of healing (greater).", ">>Wakened (Very Rare)<<. In addition to the options for a Slumbering or Stirring vessel, you can fill a Wakened vessel with wine, a potion of flying, or a potion of healing (superior).", ">>Ascendant (Legendary)<<. In addition to the options for other states, you can fill an Ascendant vessel with whiskey, a potion of healing (supreme), or a potion of dragon's majesty (described earlier in this chapter)." ], "scaled ornament" : [ "This ornament can be jewelry, a cloak, or another wearable accessory. It appears to be fashioned from a dragon's scale, tooth, or claw, or it incorporates images in those shapes.", ">>Slumbering (Uncommon)<<. You have advantage on saving throws you make to avoid being charmed or frightened or to end those conditions on you.", ">>Stirring (Rare)<<. You gain a +1 bonus to AC, and you can't be charmed or frightened. Moreover, each creature of your choice within 30 feet of you has advantage on saving throws it makes to avoid being charmed or frightened or to end those conditions on itself.", ">>Wakened (Very Rare)<<. The Wakened ornament has the Stirring property. In addition, when you would take damage of the type dealt by the breath of the dragon in whose hoard the ornament became Wakened, you can use your reaction to take no damage instead, and you regain hit points equal to the damage you would have taken. Once this property is used, it can't be used again until the next dawn.", ">>Ascendant (Legendary)<<. The Ascendant ornament has the Stirring and Wakened properties. In addition, while you are wearing the ornament, you gain a flying speed equal to your walking speed and can hover. While you are flying using this speed, spectral dragon wings appear on your back." ], hoardMagicItems : [ "\n\n\u25C6 Hoard Magic Items (FToD 25)", "Certain magic items can absorb the ambient magic of a dragon's hoard. The mightier the dragon, the more powerful the item becomes when it is steeped in the dragon's hoard. These items, called hoard items, have four states. A hoard item in its Slumbering state has certain base properties, and it gains additional properties when it enters the Stirring (young dragon), Wakened (adult dragon), or Ascendant (ancient dragon) state.", "Ordinarily, a hoard item must steep in a dragon's hoard for 1 year to reach the maximum possible state allowed by the age of the hoard's dragon. For example, a hoard item that steeps in an adult dragon's hoard for 1 year enters its Wakened state.", "When a dragon is slain, the magic surrounding its hoard becomes volatile. This allows a hoard item to steep more quickly in the hoard. A hoard item steeped in a dragon's hoard for 8 hours rises one state, as long as the steeping begins within 1 hour of the dragon's death and occurs within the dragon's lair. Steeping in this way can't raise the state of the item beyond the state associated with the dragon's age.", "Just as hoard items can grow in power by absorbing the ambient magic of a dragon's hoard, so too can these treasures fall back into slumber. If no creature is attuned to a hoard item and that item isn't in a dragon's hoard, the item decreases in power by one state every 30 days until it is Slumbering." ].join("\n "), to1stPerson : function (sDescr) { return desc(sDescr).replace(/\bf(oo|ee)t\b/ig, "ft") .replace(/you are/ig, "I am").replace(/\byou\b/ig, "I") .replace(/(by|of|to|for|on) I\b|\bI to|\bI an?\b/ig, "$1 me") .replace(/\bI (to|a|an)\b/ig, "me $1") .replace(/your/g, "my").replace(/Your/g, "My") .replace(/ >>(.*?)( \(.*?\))?<<. /g, function(a, p1, p2) { return "\n " + p1.toUpperCase() + p2.toLowerCase() + "\n "; })+ FToD_HoardItems.hoardMagicItems; } } FToD_HoardItems.dragonsWrathWeaponCreate(); MagicItemsList["dragon-touched focus"] = { name : "Dragon-Touched Focus", nameTest : /^(?=.*dragon.touched)(?=.*(focus|rod|wand|staff|scepter|orb|amulet|crystal)).*$/i, source : [["FToD", 26]], type : "wondrous item", attunement : true, prerequisite : "Requires attunement by a spellcaster", prereqeval : function(v) { return v.isSpellcaster; }, description : "", descriptionFull : FToD_HoardItems["dragon-touched focus"].join("\n ").replace(/>>(.*?)<>(.*?)<>(.*?)<= 4 && CurrentFeats.known.indexOf("strixhaven initiate") !== -1; }, extraLimitedFeatures : [{ name : "Swap places with Strixhaven Mascot", recovery : "long rest", usages : 1, altResource : "SS 2+" }], spellcastingBonus : [{ name : "Strixhaven Mascot", spells : ["find familiar"], selection : ["find familiar"], firstCol : SpellRitualTag, }], choices : ["Lorehold", "Prismari", "Quandrix", "Silverquill", "Witherbloom"], selfChoosing : function () { var iStrixInit = CurrentFeats.known.indexOf("strixhaven initiate"); if (iStrixInit !== -1 && CurrentFeats.choices[iStrixInit]) { return CurrentFeats.choices[iStrixInit]; } }, "lorehold" : { description : "I can cast Find Familiar as a ritual and it can take the form of a Spirit Statue Mascot. When I take the Attack action on my turn, I can forgo one attack to have it make one attack with its reaction. As an action once per long rest (or 2nd-level spell slot) while its within 60 ft, I can teleport to swap places with it, if there's space.", creaturesAdd : [["Spirit Statue Mascot", true, false, "strixhaven_mascot"]] }, "prismari" : { description : "I can cast Find Familiar as a ritual and it can take the form of an Art Elemental Mascot. When I take the Attack action on my turn, I can forgo one attack to have it make an attack with its reaction. As an action once per long rest (or 2nd-level spell slot) while its within 60 ft, I can teleport to swap places with it, if there's space.", creaturesAdd : [["Art Elemental Mascot", true, false, "strixhaven_mascot"]] }, "quandrix" : { description : "I can cast Find Familiar as a ritual and it can take the form of a Fractal Mascot. When I take the Attack action on my turn, I can forgo one attack to have it make one attack with its reaction. As an action once per long rest (or 2nd-level spell slot) while its within 60 ft, I can teleport to swap places with it, if there's space.", creaturesAdd : [["Fractal Mascot", true, false, "strixhaven_mascot"]] }, "silverquill" : { description : "I can cast Find Familiar as a ritual and it can take the form of an Inkling Mascot. When I take the Attack action on my turn, I can forgo one attack to have it make one attack with its reaction. As an action once per long rest (or 2nd-level spell slot) while its within 60 ft, I can teleport to swap places with it, if there's space.", creaturesAdd : [["Inkling Mascot", true, false, "strixhaven_mascot"]] }, "witherbloom" : { description : "I can cast Find Familiar as a ritual and it can take the form of a Pest Mascot. When I take the Attack action on my turn, I can forgo one attack to have it make one attack with its reaction. As an action once per long rest (or 2nd-level spell slot) while its within 60 ft, I can teleport to swap places with it, if there's space.", creaturesAdd : [["Pest Mascot", true, false, "strixhaven_mascot"]] } }; if (CompanionList.familiar && CompanionList.pact_of_the_chain) { // Needs to be revisited for v24 CompanionList.strixhaven_mascot = { name : "Strixhaven Mascot", nameTooltip : "Strixhaven Mascot (feat)", nameOrigin : "variant of the Find Familiar 1st-level conjuration [ritual] spell", nameMenu : "Strixhaven Mascot familiar (feat)", source : [["SCC", 37]], includeCheck : CompanionList.pact_of_the_chain.includeCheck, action : [["action", "Swap places with Strixhaven Mascot"]].concat(CompanionList.familiar.action), attributesChange : CompanionList.pact_of_the_chain.attributesChange, attributesAdd : CompanionList.familiar.attributesAdd, notes : function() { var a = newObj(CompanionList.pact_of_the_chain.notes); a[0].description = [ "appearing in an unoccupied space within 10 ft", "It assumes a chosen beast or mascot form (can change at every casting), see the spell and feat", "It has the chosen form's statistics, but its type changes from beast to celestial, fey, or fiend", "When the familiar drops to 0 hit points, it disappears, leaving behind no physical form", "It reappears when I cast this spell again (in a new form if so desired)" ].join("\n "); a.push({ name : "As an action while it is within 60 ft, we can teleport", description : [ "swapping places if there is enough space", "I can do this once per long rest, or by expending a 2nd-level or higher spell slot (SS 2+)" ].join("\n "), joinString : ", " }); return a; }() }; } // Spells SpellsList["borrowed knowledge"] = { name : "Borrowed Knowledge", classes : ["bard", "cleric", "warlock", "wizard"], source : [["SCC", 37]], level : 2, school : "Div", time : "1 a", range : "Self", components : "V,S,M\u0192", compMaterial : "A book worth at least 25 gp.", duration : "1 h", description : "Gain proficiency with one skill; ends early if cast again (25gp)", descriptionFull : "You draw on knowledge from spirits of the past. Choose one skill in which you lack proficiency. For the spell's duration, you have proficiency in the chosen skill. The spell ends early if you cast it again." }; SpellsList["kinetic jaunt"] = { name : "Kinetic Jaunt", classes : ["artificer", "bard", "sorcerer", "wizard"], source : [["SCC", 37]], level : 2, school : "Trans", time : "1 bns", range : "Self", components : "S", duration : "Conc, 1 min", description : "+10 ft walk spd; provoke no opportunity atks; move through crea space, counts not as difficult terrain", descriptionFull : "You magically empower your movement with dance-like steps, giving yourself the following benefits for the duration."+ "\n \u2022 Your walking speed increases by 10 feet."+ "\n \u2022 You don't provoke opportunity attacks."+ "\n \u2022 You can move through the space of another creature, and it doesn't count as difficult terrain. If you end your turn in another creature's space, you are shunted to the last unoccupied space you occupied, and you take 1d8 force damage." }; SpellsList["silvery barbs"] = { name : "Silvery Barbs", classes : ["bard", "sorcerer", "wizard"], source : [["SCC", 38]], level : 1, school : "Ench", time : "1 rea", timeFull : "1 reaction, which you take when a creature you can see within 60 feet of yourself succeeds on an attack roll, an ability check, or a saving throw", range : "60 ft", components : "V", duration : "Instantaneous", description : "1 crea reroll d20 and use lowest for atk, check, or save; 1 crea adv. next atk, check, or save in 1 min", descriptionFull : "You magically distract the triggering creature and turn its momentary uncertainty into encouragement for another creature. The triggering creature must reroll the d20 and use the lower roll."+ "\n You can then choose a different creature you can see within range (you can choose yourself). The chosen creature has advantage on the next attack roll, ability check, or saving throw it makes within 1 minute. A creature can be empowered by only one use of this spell at a time." }; SpellsList["vortex warp"] = { name : "Vortex Warp", classes : ["artificer", "sorcerer", "wizard"], source : [["SCC", 38]], level : 2, school : "Conj", time : "1 a", range : "90 ft", components : "V,S", duration : "Instantaneous", save : "Con", description : "1 crea save or teleported to a sufficiently empty space of my choice within range; +30 ft/SL range", descriptionFull : "You magically twist space around another creature you can see within range. The target must succeed on a Constitution saving throw (the target can choose to fail), or the target is teleported to an unoccupied space of your choice that you can see within range. The chosen space must be on a surface or in a liquid that can support the target without the target having to squeeze."+ AtHigherLevels + "When you cast this spell using a spell slot of 3rd level or higher, the range of the spell increases by 30 feet for each slot level above 2nd." }; SpellsList["wither and bloom"] = { name : "Wither and Bloom", classes : ["druid", "sorcerer", "wizard"], source : [["SCC", 38]], level : 2, school : "Necro", time : "1 a", range : "60 ft", components : "V,S,M", compMaterial : "A withered vine twisted into a loop.", duration : "Instantaneous", save : "Con", description : "10-ft rad any crea 2d6+1d6/SL Necrotic dmg, save half; 1 crea can heal using 1+1/SL HD; see B", descriptionFull : "You invoke both death and life upon a 10-foot-radius sphere centered on a point within range. Each creature of your choice in that area must make a Constitution saving throw, taking 2d6 necrotic damage on a failed save, or half as much damage on a successful one. Nonmagical vegetation in that area withers."+ "\n In addition, one creature of your choice in that area can spend and roll one of its unspent Hit Dice and regain a number of hit points equal to the roll plus your spellcasting ability modifier."+ AtHigherLevels + "When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d6 for each slot above the 2nd, and the number of Hit Dice that can be spent and added to the healing roll increases by one for each slot above 2nd." }; // Magic Items MagicItemsList["bottle of boundless coffee"] = { name : "Bottle of Boundless Coffee", source : [["SCC", 38]], type : "wondrous item", rarity : "common", description : "This metal bottle is full with delicious, comfortably warm coffee, but I can't feel the heat. It has a stopper on a little chain. It will accept only the coffee it produces. Each time I drink the coffee, I roll a d20. On a 1, the bottle stops dispensing coffee for 1 hour. Unless drunk, the coffee vanishes when it leaves the bottle.", descriptionFull : "This metal bottle carries delicious, warm coffee. The bottle comes with a stopper, which is attached to the bottle by a little chain. Even when open, the bottle won't accept any liquid other than the coffee it produces. The coffee inside is always comfortably warm, and none of the heat can be felt through the bottle."+ "\n Each time you drink the coffee, roll a d20. On a 1, the bottle refuses to dispense coffee for the next hour. If you pour coffee from the bottle, rather than drinking from it, the coffee vanishes the moment it leaves the bottle." } MagicItemsList["cuddly strixhaven mascot"] = { name : "Cuddly Strixhaven Mascot", source : [["SCC", 38]], type : "wondrous item", rarity : "common", description : "This soft, Tiny, magic toy represents a Strixhaven mascot. As an action, I can press it to my arm, shoulder, or leg, and it attaches there for 1 hour or until I remove it as an action. Once per long rest while this toy is on my person, I can give myself advantage on the save to avoid or end the frightened condition on myself.", descriptionFull : "Representing one of the mascots of Strixhaven, this soft, Tiny, magic toy is perfect for cuddling. If you press it to your arm, shoulder, or leg as an action, the toy stays attached there for 1 hour or until you use an action to remove it."+ "\n The toy can also be used to fight off fear. When you make a saving throw to avoid or end the frightened condition on yourself, you can give yourself advantage on the roll if the toy is on your person. You must decide to do so before rolling the d20. If the save succeeds, you can't use the toy in this way until you finish a long rest.", action : [["action", " (attach/remove)"]], usages : 1, recovery : "long rest" } MagicItemsList["lorehold primer"] = { name : "Lorehold Primer", source : [["SCC", 39]], type : "wondrous item", rarity : "uncommon", attunement : true, prerequisite : "Requires attunement by a spellcaster", prereqeval : function(v) { return v.isSpellcaster; }, description : "This magic textbook has 3 charges, regaining 1d3 used charges at dawn. While holding it, I can use 1 charge to add +1d4 to an History or Religion check, after the d20 roll. If I study it during a long rest, I can pick a 1st-level cleric or wizard spell. I can cast the spell once without a spell slot before my next long rest ends.", descriptionFull : "The Lorehold Primer is a magic textbook created at Strixhaven's Lorehold College. The primer has 3 charges, and it regains 1d3 expended charges daily at dawn. If you make an Intelligence (History) or Intelligence (Religion) check while holding the primer, you can expend 1 charge to give yourself 1d4 bonus to the check, immediately after you roll the d20."+ "\n In addition, if you study the primer at the end of a long rest, you can choose one 1st-level spell from the cleric or wizard spell list. Before you finish your next long rest, you can cast the chosen spell once without a spell slot if you are holding the primer. Your spellcasting ability for this spell is your choice of Intelligence, Wisdom, or Charisma.", extraLimitedFeatures : [{ name : "Lorehold Primer charges (regains 1d3)", usages : 3, recovery : "dawn" }, { name : "Lorehold Primer (cast spell)", usages : 1, recovery : "long rest" }], spellcastingAbility : [4, 5, 6], fCreateSCCPrimerSpellsEntry : function(bAddIt, sName, aClasses) { var sNameLC = sName.toLowerCase(); if (bAddIt) { CurrentSpells[sNameLC] = { name : sName + ' (item)', list : { 'class' : aClasses, level : [1, 1] }, known : { spells : 1 }, bonus : { bon0 : { name : 'Either select a spell', spells : [] }, bon1 : { name : 'or just select "Full List"', spells : [] }, bon2 : { name : 'on the bottom left', spells : [] } }, typeList : 4, refType : "item", allowUpCasting : false, firstCol : "LR" }; } else { delete CurrentSpells[sNameLC]; } SetStringifieds('spells'); CurrentUpdates.types.push('spells'); }, eval : function () { MagicItemsList["lorehold primer"].fCreateSCCPrimerSpellsEntry(true, "Lorehold Primer", ['cleric', 'wizard']); }, removeeval : function () { MagicItemsList["lorehold primer"].fCreateSCCPrimerSpellsEntry(false, "Lorehold Primer"); } } MagicItemsList["prismari primer"] = { name : "Prismari Primer", source : [["SCC", 39]], type : "wondrous item", rarity : "uncommon", attunement : true, prerequisite : "Requires attunement by a spellcaster", prereqeval : function(v) { return v.isSpellcaster; }, description : "This magic textbook has 3 charges, regaining 1d3 used charges at dawn. While holding it, I can use 1 charge to add +1d4 to an Acrobatics or Performance check, after the d20 roll. If I study it in a long rest, I can pick a 1st-level bard or sorcerer spell. I can cast the spell once without a spell slot before my next long rest ends.", descriptionFull : "The Prismari Primer is a magic textbook created at Strixhaven's Prismari College. The primer has 3 charges, and it regains 1d3 expended charges daily at dawn. If you make a Dexterity (Acrobatics) or a Charisma (Performance) check while holding the primer, you can expend 1 charge to give yourself a 1d4 bonus to the check, immediately after you roll the d20."+ "\n In addition, if you study the primer at the end of a long rest, you can choose one 1st-level spell from the bard or sorcerer spell list. Before you finish your next long rest, you can cast the chosen spell once without a spell slot if you are holding the primer. Your spellcasting ability for this spell is your choice of Intelligence, Wisdom, or Charisma.", extraLimitedFeatures : [{ name : "Prismari Primer charges (regains 1d3)", usages : 3, recovery : "dawn" }, { name : "Prismari Primer (cast spell)", usages : 1, recovery : "long rest" }], spellcastingAbility : [4, 5, 6], eval : function () { if (MagicItemsList["lorehold primer"]) MagicItemsList["lorehold primer"].fCreateSCCPrimerSpellsEntry(true, "Prismari Primer", ['bard', 'sorcerer']); }, removeeval : function () { if (MagicItemsList["lorehold primer"]) MagicItemsList["lorehold primer"].fCreateSCCPrimerSpellsEntry(false, "Prismari Primer"); } } MagicItemsList["quandrix primer"] = { name : "Quandrix Primer", source : [["SCC", 39]], type : "wondrous item", rarity : "uncommon", attunement : true, prerequisite : "Requires attunement by a spellcaster", prereqeval : function(v) { return v.isSpellcaster; }, description : "This magic textbook has 3 charges, regaining 1d3 used charges at dawn. While holding it, I can use 1 charge to add +1d4 to an Arcana or Nature check, after the d20 roll. If I study it during a long rest, I can pick a 1st-level druid or wizard spell. I can cast the spell once without a spell slot before my next long rest ends.", descriptionFull : "The Quandrix Primer is a magic textbook created at Strixhaven's Quandrix College. The primer has 3 charges, and it regains 1d3 expended charges daily at dawn. If you make an Intelligence (Arcana) or an Intelligence (Nature) check while holding the primer, you can expend 1 charge to give yourself a 1d4 bonus to the check, immediately after you roll the d20."+ "\n In addition, if you study the primer at the end of a long rest, you can choose one 1st-level spell from the druid or wizard spell list. Before you finish your next long rest, you can cast the chosen spell once without a spell slot if you are holding the primer. Your spellcasting ability for this spell is your choice of Intelligence, Wisdom, or Charisma.", extraLimitedFeatures : [{ name : "Quandrix Primer charges (regains 1d3)", usages : 3, recovery : "dawn" }, { name : "Quandrix Primer (cast spell)", usages : 1, recovery : "long rest" }], spellcastingAbility : [4, 5, 6], eval : function () { if (MagicItemsList["lorehold primer"]) MagicItemsList["lorehold primer"].fCreateSCCPrimerSpellsEntry(true, "Quandrix Primer", ['druid', 'wizard']); }, removeeval : function () { if (MagicItemsList["lorehold primer"]) MagicItemsList["lorehold primer"].fCreateSCCPrimerSpellsEntry(false, "Quandrix Primer"); } } MagicItemsList["silverquill primer"] = { name : "Silverquill Primer", source : [["SCC", 39]], type : "wondrous item", rarity : "uncommon", attunement : true, prerequisite : "Requires attunement by a spellcaster", prereqeval : function(v) { return v.isSpellcaster; }, description : "This magic textbook has 3 charges, regaining 1d3 used charges at dawn. While holding it, I can use 1 charge to add +1d4 to an Intimidation or Persuasion check, after the d20 roll. If I study it in a long rest, I can pick a 1st-level bard or cleric spell. I can cast the spell once without a spell slot before my next long rest ends.", descriptionFull : "The Silverquill Primer is a magic textbook created at Strixhaven's Silverquill College. The primer has 3 charges, and it regains 1d3 expended charges daily at dawn. If you make a Charisma (Intimidation) or a Charisma (Persuasion) check while holding the primer, you can expend 1 charge to give yourself a 1d4 bonus to the check, immediately after you roll the d20."+ "\n In addition, if you study the primer at the end of a long rest, you can choose one 1st-level spell from the bard or cleric spell list. Before you finish your next long rest, you can cast the chosen spell once without a spell slot if you are holding the primer. Your spellcasting ability for this spell is your choice of Intelligence, Wisdom, or Charisma.", extraLimitedFeatures : [{ name : "Silverquill Primer charges (regains 1d3)", usages : 3, recovery : "dawn" }, { name : "Silverquill Primer (cast spell)", usages : 1, recovery : "long rest" }], spellcastingAbility : [4, 5, 6], eval : function () { if (MagicItemsList["lorehold primer"]) MagicItemsList["lorehold primer"].fCreateSCCPrimerSpellsEntry(true, "Silverquill Primer", ['bard', 'cleric']); }, removeeval : function () { if (MagicItemsList["lorehold primer"]) MagicItemsList["lorehold primer"].fCreateSCCPrimerSpellsEntry(false, "Silverquill Primer"); } } MagicItemsList["strixhaven pennant"] = { name : "Strixhaven Pennant", source : [["SCC", 39]], type : "wondrous item", rarity : "common", description : "This magic pennant bears the symbol of Strixhaven or one of its colleges: Lorehold, Prismari, Quandrix, Silverquill, or Witherbloom. While I wave the pennant, the symbol on it glitters, and the pennant sheds bright light in a 10-ft radius and dim light for an additional 10 ft.", descriptionFull : "This magic pennant bears the symbol of Strixhaven or one of its colleges: Lorehold, Prismari, Quandrix, Silverquill, or Witherbloom. While you wave the pennant, the symbol on it glitters, and the pennant sheds bright light in a 10-foot-radius and dim light for an additional 10 feet." } MagicItemsList["witherbloom primer"] = { name : "Witherbloom Primer", source : [["SCC", 39]], type : "wondrous item", rarity : "uncommon", attunement : true, prerequisite : "Requires attunement by a spellcaster", prereqeval : function(v) { return v.isSpellcaster; }, description : "This magic textbook has 3 charges, regaining 1d3 used charges at dawn. While holding it, I can use 1 charge to add +1d4 to a Nature or Survival check, after the d20 roll. If I study it during a long rest, I can pick a 1st-level druid or wizard spell. I can cast the spell once without a spell slot before my next long rest ends.", descriptionFull : "The Witherbloom Primer is a magic textbook created at Strixhaven's Witherbloom College. The primer has 3 charges, and it regains 1d3 expended charges daily at dawn. If you make an Intelligence (Nature) or Wisdom (Survival) check while holding the primer, you can expend 1 charge to give yourself a 1d4 bonus to the check, immediately after you roll the d20."+ "\n In addition, if you study the primer at the end of a long rest, you can choose one 1st-level spell from the druid or wizard spell list. Before you finish your next long rest, you can cast the chosen spell once without a spell slot if you are holding the primer. Your spellcasting ability for this spell is your choice of Intelligence, Wisdom, or Charisma.", extraLimitedFeatures : [{ name : "Witherbloom Primer charges (regains 1d3)", usages : 3, recovery : "dawn" }, { name : "Witherbloom Primer (cast spell)", usages : 1, recovery : "long rest" }], spellcastingAbility : [4, 5, 6], eval : function () { if (MagicItemsList["lorehold primer"]) MagicItemsList["lorehold primer"].fCreateSCCPrimerSpellsEntry(true, "Witherbloom Primer", ['druid', 'wizard']); }, removeeval : function () { if (MagicItemsList["lorehold primer"]) MagicItemsList["lorehold primer"].fCreateSCCPrimerSpellsEntry(false, "Witherbloom Primer"); } } var SCC_Murgaxors_Orb_Full_Description = [ "Roiling green mist fills this glass orb, which the exiled Strixhaven mage Murgaxor once used in foul magical experiments. Murgaxor's spirit has infused the orb, which he uses to spread a terrible curse among Strixhaven's students.", ">>Sentience<<. Murgaxor's orb is a sentient, chaotic evil magic item with the following properties:", "\u2022 The orb has an Intelligence of 20, a Wisdom of 16, and a Charisma of 16, as well as hearing and darkvision out to a range of 30 feet.", "\u2022 The orb can speak, read, and understand Common, and it can communicate telepathically with any creature touching it.", "\u2022 At any time during your turn, the orb can cast the suggestion spell (save DC 17), targeting you or one other creature that touched the orb within the last 24 hours. This isn't a power of the orb that you control.", ">>Curse<<. Any Humanoid you touch while holding the orb must succeed on a DC 10 Wisdom saving throw or become cursed. Each creature cursed by the orb bears an echo of Murgaxor's hateful thoughts, and that creature suffers from headaches that are persistent but not debilitating until the curse ends. On your turn, the orb can use an action to produce one of the following effects, targeting one or more creatures it has cursed:", "\u2022 >>Unconsciousness<<. The cursed creature falls unconscious for 1 hour. The creature is roused if it takes damage or someone uses an action to shake or slap it awake.", "\u2022 >>Visions of Terror<<. The cursed creature sees terrifying visions, causing it to view all creatures that aren't also cursed as dangerous monsters for 10 minutes. The cursed creature must use its action each round to make one attack against the nearest non-cursed creature. If the cursed creature has multiple possible targets, it attacks one at random. This effect ends if the cursed creature is incapacitated.", "After either of these effects ends, the affected creature is no longer cursed. The curse can also be removed from a creature with a remove curse spell or similar magic. All cases of the curse end if Murgaxor's orb is destroyed.", ">>Magical Signature<<. As a side effect of the orb's curse, the spell detect magic reveals an aura of enchantment surrounding creatures bearing the curse. This aura is distinctive, but in a way detect magic offers no further details about.", ">>Destroying the Orb<<. Murgaxor's orb has AC 18; 20 hit points; immunity to necrotic, poison, and psychic damage; and resistance to all other types of damage. If reduced to 0 hit points, the orb shatters." ] MagicItemsList["murgaxor's orb"] = { name : "Murgaxor's Orb", source : [["SCC", 126]], type : "wondrous item", rarity : "legendary", attunement : true, description : "This sentient, chaotic evil orb bears a curse. It can communicate telepathically with any creature touching it. It can cast Suggestion on my turn, possibly on me. I have no control over it. Any Humanoid I touch while holding the orb must make a DC 10 Wisdom save or become cursed. See the Notes page.", descriptionFull : SCC_Murgaxors_Orb_Full_Description.join("\n ").replace(/>>(.*?)<>(.*?)<>(.*?)<<\. /g, function(a, match) { return "\n" + match.toUpperCase() + "\n "; }); } var EGtW_JewelOfThreePrayersFullDescription = [ "The Jewel of Three Prayers is a Vestige of Divergence. In ancient times, Alyxian the Apotheon bore this amulet as a symbol of his covenant with three Prime Deities: Sehanine the Moon Weaver, Avandra the Change Bringer, and Corellon the Arch Heart.[[ When the jewel is found, only Sehanine's power thrums within its dormant heart. The power of the other two deities waits to be reawakened by a hero \u2014 or heroes \u2014 who can follow in Alyxian's footsteps.]]", ">>Dormant<<. In this state, the Jewel of Three Prayers is a glittering golden disk attached to a fine golden chain. The chain magically resizes to function as a necklace for the creature that wears it.", "In its Dormant State, the jewel has the following properties:", "\u2022 You gain a +1 bonus to AC while wearing the jewel.", "\u2022 While wearing or holding the jewel, you can use an action to cause it to shed bright light in a 15-foot radius and dim light for an additional 15 feet. The light lasts until you extinguish it (no action required).", "\u2022 The jewel has 3 charges and regains all its expended charges daily at dawn. While holding the jewel, you can expend 1 charge from it to cast the invisibility spell.", ">>Awakened<<. In this state, the jewel has received the blessing of Avandra the Change Bringer. Three delicate spires unfurl from the jewel's center, like the buds of flowers opening in the spring. Three lapis lazuli stones rest like dewdrops on these spires.", "The following benefits of the jewel improve:", "\u2022 The bonus that the jewel confers to your AC increases to +2.", "\u2022 Its number of charges increases to 5.", "The jewel gains the following additional properties, which you can use while wearing or holding it:", "\u2022 You can expend 1 of the jewel's charges (no action required) to end one of the following conditions on yourself: grappled, paralyzed, or restrained.", "\u2022 When another creature you can see within 60 feet of you fails a saving throw, you can expend 1 of the jewel's charges as a reaction to enable that creature to reroll the saving throw, potentially turning a failure into a success. The creature must use the new roll.", ">>Exalted<<. In this state, the jewel has received the blessing of Corellon the Arch Heart. A gleaming emerald surrounded by a halo of gold appears on the jewel.", "The following benefits of the jewel improve:", "\u2022 The bonus that the jewel confers to your AC increases to +3.", "\u2022 Its number of charges increases to 7.", "The jewel gains the following additional properties, which you can use while wearing or holding it:", "\u2022 You gain the ability to breathe water, and you gain a swimming speed equal to your walking speed.", "\u2022 Each of your allies within 30 feet of you gains the ability to breathe water and gains a swimming speed equal to its walking speed.", "\u2022 As a bonus action, you can expend 1 of the jewel's charges to target yourself or one willing creature you can see within 15 feet of yourself. The target teleports to an unoccupied space of your choice within 15 feet of yourself, along with any equipment the target is wearing or carrying. The target appears in a flash of golden radiance, and each creature of your choice within 5 feet of the target's new location must make a DC 18 Constitution saving throw. On a failed save, the creature takes 4d10 radiant damage and is blinded until the start of your next turn. On a successful save, the creature takes half as much damage and isn't blinded." ]; MagicItemsList["jewel of three prayers"] = { name : "Jewel of Three Prayers", source : [["CotN", 213]], type : "wondrous item", rarity : "legendary", notLegalAL : true, attunement : true, description : "The golden chain of this intricate jewel magically resizes to function as a necklace for the creature that wears it. In ancient times, Alyxian the Apotheon bore this amulet as a symbol of his covenant with three Prime Deities: Sehanine the Moon Weaver, Avandra the Change Bringer, and Corellon the Arch Heart.", descriptionFull : EGtW_JewelOfThreePrayersFullDescription.join("\n ").replace(/>>(.*?)<>Transfer Attunement<<. You can use an action to touch a willing spellcaster. That creature attunes to the spelljamming helm immediately, and your attunement to it ends." ]; MagicItemsList["spelljamming helm"] = { name : "Spelljamming Helm", source : [["S:AiS", 23]], type : "wondrous item", rarity : "rare", attunement : true, prerequisite : "Requires attunement by a spellcaster", prereqeval : function(v) { return v.isSpellcaster; }, description : "While attuned to this ornate chair and sitting in it, I can propel and maneuver the ship on which it has been installed through space, air, or water up to the ship's speed. I need to maintain concentration as if concentrating on a spell to do so. The ship can move faster in space if nothing is nearby. See Notes page.", descriptionFull : SJAAG_SpelljammingHelm.join("\n ").replace(/>>(.*?)<>(.*?)<<\. /g, function(a, match) { return "\n" + match.toUpperCase() + "\n "; }) }] }; MagicItemsList["wildspace orrery"] = { name : "Wildspace Orrery", source : [["S:AiS", 23]], type : "wondrous item", rarity : "uncommon", description : "Inside a Wildspace system, this portable arcane device automatically tracks the positions and movements of all suns, planets, moons, and comets within that system, projecting a display of all these bodies in the space above its current location, marking itself as a white, pulsating pinprick of light.", descriptionFull : "Inside a Wildspace system, this portable arcane device automatically tracks the positions and movements of all suns, planets, moons, and comets within that system, projecting a display of all these bodies in the space above its current location. In that display, a white, pulsating pinprick of light marks the orrery's location." }; // Beasts from Boo's Astral Menagerie CreatureList["space eel"] = { name : "Space Eel", nameAlt : ["Eel, Space"], source : [["S:AiS", 55]], // page number in Boo's Astral Menagerie size : 4, type : "Beast", alignment : "Unaligned", ac : 14, hp : 7, hd : [2, 6], speed : "10 ft, fly 30 ft", scores : [12, 18, 11, 1, 10, 1], senses : "Darkvision 60 ft", passivePerception : 10, challengeRating : "1/2", proficiencyBonus : 2, attacksAction : 2, attacks : [{ name : "Bite", ability : 1, damage : [1, 6, "piercing"], range : "Melee (5 ft)", description : "Attaches on hit; While attached, auto-damage at turn start, but can't make bite attacks", tooltip : "On a hit, the eel attaches to the target. While attached, the eel can't make bite attacks. Instead, the target takes the bite damage at the start of each of the eel's turns. The eel can detach itself as a bonus action. A creature, including the target, can use its action to detach the eel." }, { name : "Tail Spine", ability : 1, damage : [1, 4, "piercing"], range : "Melee (5 ft)", description : "Target DC 10 Con save or poisoned and paralyzed for 1 min (can save as each turn ends)", tooltip : "The target must succeed on a DC 10 Constitution saving throw or be poisoned for 1 minute. Until this poison ends, the target is paralyzed. The target can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success." }], features : [{ name : "Unusual Nature", description : "The eel doesn't require air." }], actions : [{ name : "Multiattack", description : "As an action on its turn if not attached to a creature, the eel can make one Bite and one Tail Spine attack." }, { name : "Attach", description : "If the eel hits with its bite attack, it attaches to the target. While attached, the eel can't make bite attacks. Instead, the target takes the bite damage at the start of each of the eel's turns. The eel can detach itself as a bonus action. A creature, including the target, can use its action to detach the eel." }, { name : "Tail Spine", description : "If the eel hits with its tail spine, the target must succeed on a DC 10 Constitution saving throw or be poisoned for 1 minute. Until this poison ends, the target is paralyzed. The target can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success." }], wildshapeString : [ "##Senses##. Darkvision 60 ft", "##Unusual Nature##. Doesn't require air.", "##Multiattack##. 1 bite and 1 tail spine attack if not attached to a creature.", "##Bite##. Attaches to the target hit by its bite attack, dealing bite damage at the start of each turn. The eel can detach itself as a bonus action. A creature, including the target, can use its action to detach the eel." ].join("\n"), }; CreatureList["space guppy"] = { name : "Space Guppy", nameAlt : ["Guppy, Space"], source : [["S:AiS", 55]], // page number in Boo's Astral Menagerie size : 4, type : "Beast", alignment : "Unaligned", ac : 13, hp : 3, hd : [1, 6], speed : "0 ft, fly 30 ft", scores : [3, 16, 10, 1, 10, 1], senses : "Darkvision 60 ft", passivePerception : 10, challengeRating : "0", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Tail Slap", ability : 2, damage : [1, "", "bludgeoning"], range : "Melee (5 ft)" }], traits : [{ name : "Air Envelope", description : "If it has at least 1 hit point, the guppy can generate an air envelope around itself when in a vacuum. This air envelope can sustain the guppy and one other Tiny creature in its space indefinitely." }, { name : "Flyby", description : "The guppy doesn't provoke opportunity attacks when it flies out of an enemy's reach." }] }; CreatureList["giant space hamster"] = { name : "Giant Space Hamster", nameAlt : ["Hamster, Giant Space"], source : [["S:AiS", 56]], // page number in Boo's Astral Menagerie size : 2, type : "Beast", alignment : "Unaligned", ac : 11, hp : 22, hd : [4, 10], speed : "30 ft, burrow 10 ft", scores : [14, 12, 10, 2, 12, 4], passivePerception : 11, challengeRating : "1/4", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Bite", ability : 1, damage : [2, 4, "piercing"], range : "Melee (5 ft)" }] }; CreatureList["space mollymawk"] = { name : "Space Mollymawk", nameAlt : ["Mollymawk, Space"], source : [["S:AiS", 57]], // page number in Boo's Astral Menagerie size : 4, type : "Beast", alignment : "Unaligned", ac : 12, hp : 3, hd : [1, 6], speed : "10 ft, fly 50 ft", scores : [6, 14, 11, 3, 12, 3], skills : { "perception" : 5 }, passivePerception : 15, challengeRating : "0", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Bite", ability : 2, damage : [1, 4, "piercing"], range : "Melee (5 ft)" }], traits : [{ name : "Flyby", description : "The mollymawk doesn't provoke opportunity attacks when it flies out of an enemy's reach." }, { name : "Hold Breath", description : "The mollymawk can hold its breath for 15 minutes." }] }; CreatureList["space swine"] = { name : "Space Swine", nameAlt : ["Swine, Space"], source : [["S:AiS", 57]], // page number in Boo's Astral Menagerie size : 3, type : "Beast", alignment : "Unaligned", ac : 11, hp : 22, hd : [4, 8], speed : "40 ft, fly 40 ft", scores : [14, 12, 10, 2, 12, 4], skills : { "perception" : 4, "survival" : 4 }, passivePerception : 14, challengeRating : "1/4", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Bite", ability : 1, damage : [1, 6, "piercing"], range : "Melee (5 ft)" }], traits : [{ name : "Barding", description : "Space swine that are trained for battle are typically outfitted with half-plate barding and are referred to as death squealers. This barding gives them an AC of 16." }], wildshapeString : " " // the barding trait is not applicable to wild shapes }; ================================================ FILE: WotC material/pub_20221206_Dragonlance.js ================================================ var iFileName = "pub_20221206_Dragonlance.js"; RequiredSheetVersion("14.0.5-beta"); // This file adds the Character Options content from Dragonlance: Shadow of the Dragon Queen to MPMB's Character Record Sheet SourceList["D:SotDQ"] = { name : "Dragonlance: Shadow of the Dragon Queen", abbreviation : "D:SotDQ", group : "Campaign Sourcebooks", campaignSetting : "Dragonlance", url : "https://dnd.wizards.com/products/dragonlance", date : "2022/12/06" }; RaceList["kender"] = { regExpSearch : /kender/i, name : "Kender", source : [["D:SotDQ", 27]], plural : "Kender", size : 4, speed : { walk : { spd : 30, enc : 20 } }, scoresGeneric : true, savetxt : { adv_vs : ["frightened"]}, skillstxt : "Choose one from Insight, Investigation, Sleight of Hand, Stealth, or Survival", abilitySave : [4, 5, 6], features : { "fearless" : { name : "Fearless", minlevel : 1, usages : 1, recovery : "long rest" }, "taunt" : { name : "Taunt", minlevel : 1, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", action : [["bonus action", ""]] } }, trait : "Kender"+ "\n \u2022 Fearless: I have adv. on saves against the frightened condition. Once per long rest when I fail " + (typePF ? "such a save" : "a save to avoid being frightened") + ", I can choose to succeed" + (typePF ? "." : " instead")+ "\n \u2022 Taunt: As a bonus action, I can taunt a creature within 60 ft of me that can hear and understand me. They must make a Wisdom " + (typePF ? "saving throw or have disadvantage" : "save (DC 8 + Prof B + Int/Wis/Cha mod; one-time choice) or have disadv.") + " on attack rolls not made against me until the start of my next turn. I can do this a number of times per long rest equal to my proficiency bonus." + (typePF ? " The DC equals 8 + my proficiency bonus + Intelligence, Wisdom, or Charisma modifier (one-time choice when selecting this race)." : "") }; BackgroundList["knight of solamnia"] = { regExpSearch : /^(?=.*(knight|champion|warrior))(?=.*solamnia).*$/i, name : "Knight of Solamnia", source : [["D:SotDQ", 0], ["UA:HoKR", 2]], skills : ["Athletics", "Survival"], gold : 10, languageProfs : [2], equipleft : [ ["Insignia of rank", "", ""], ["Deck of cards", "", ""] ], equipright : [ ["Common clothes", "", 3], ["Pouch (with coins)", "", 1] ], feature : "Squire of Solamnia", trait : [ // Kept those from the UA article "I pledge my sword to the greater good. If I must perish in pursuit of that good, so be it.", "My comrades-in-arms are my family. I'll do whatever it takes to keep them safe.", "The protection of innocent people comes first. All other concerns come second.", "I joined the knights for the free meals, but their lessons grew on me over time.", "I wish my deeds to become the stuff of legends\xD7just like those of the knighthood's heroic founders.", "A dishonorable act drove me to become a knight. I have acted with honor ever since." ], extra : [ "Choose a Trinket", "Silver disk, recording my heroics", "Piece of a fallen knight's armor", "Pendant with a crown/rose/sword", "Pommel of my mentor's sword", "Favor from someone I defended", "Locket with silver dragon sketch" ] }; BackgroundFeatureList["squire of solamnia"] = { description : "I gain the Squire of Solamnia feat. In addition, the Knights of Solamnia provide me free, modest lodging and food at any of their fortresses or encampments.", source : [["D:SotDQ", 0], ["UA:HoKR", 2], ["UA:HoK", 3]], featsAdd: ["Squire of Solamnia"], }; BackgroundList["mage of high sorcery"] = { regExpSearch : /^(?=.*(mage|wizard|magus))(?=.*high)(?=.*sorcery).*$/i, name : "Mage of High Sorcery", source : [["D:SotDQ", 0], ["UA:HoKR", 3], ["UA:HoK", 4]], skills : ["Arcana", "History"], gold : 10, languageProfs : [2], equipleft : [ ["Bottle of colored ink", "", ""], ["Ink pen", "", ""] ], equipright : [ ["Common clothes", "", 3], ["Pouch (with coins)", "", 1] ], feature : "Initiate of High Sorcery", trait : [ // Kept those from the UA article "I wish to use my knowledge of magic to better people's lives.", "My study of magic might reveal all manner of secrets.", "Magic is a means to power, and I will use it to pursue my ambitions.", "I learned magic so I'd be able to protect those I care about.", "I use my magic to maintain the balance between all things.", "Whether in the past, present, or future, I will be the greatest mage ever known." ], extra : [ "Choose a Trinket", "Unopened letter from first teacher", "Broken black/red/white wooden wand", "Scroll with incomprehensible formula", "Stone-covered foldable device", "Pouch with triple moon symbol", "Spellbook with triple moon symbol", "Lens to see Nuitari, invisible moon" ] }; BackgroundFeatureList["initiate of high sorcery"] = { description : "I gain the Initiate of High Sorcery feat. In addition, the Mages of High Sorcery provide me with free, modest lodging and food indefinitely at any occupied Tower of High Sorcery and for one night at the home of an organization member.", source : [["D:SotDQ", 0], ["UA:HoKR", 3], ["UA:HoK", 4]], featsAdd: ["Initiate of High Sorcery"], }; // Feats tree for Initiate of High Sorcery FeatsList["initiate of high sorcery"] = { name : "Initiate of High Sorcery", source : [["D:SotDQ", 32], ["UA:HoKR", 4]], description : "I learn a wizard cantrip and two 1st-levels spell from a list depending on my chosen moon. I can cast each spell once per long rest at its lowest levels without expending a spell slot, or by using a spell slot as normal. I can choose Int, Wis, or Cha as my spellcasting ability for this.", descriptionFull : "You've received training from magic-users affiliated with the Mages of High Sorcery."+ "\n Choose one of the three moons of Krynn to influence your magic: the black moon, Nuitari; the red moon, Lunitari; or the white moon, Solinari. You learn one cantrip of your choice from the wizard spell list and two 1st-level spells based on the moon you choose, as specified in the Lunar Spells table."+ "\n\n" + toUni("Lunar Spells")+ "\n" + toUni("Moon\t1st-Level Spell")+ "\nNuitari\tChoose two from dissonant whispers, false life,"+ "\n\thex, and ray of sickness"+ "\nLunitari\tChoose two from color spray, disguise self,"+ "\n\tfeather fall, and longstrider"+ "\nSolinari\tChoose two from comprehend languages, detect"+ "\n\tevil and good, protection from evil and good, and"+ "\n\tshield"+ "\n\n You can cast each of the chosen 1st-level spells without a spell slot, and you must finish a long rest before you can cast them in this way again. You can also cast the spells using any spell slots you have."+ "\n Your spellcasting ability for this feat's spells is Intelligence, Wisdom, or Charisma (choose when you select this feat).", prerequisite : "Dragonlance Campaign, plus Sorcerer, Wizard, or Mage of High Sorcery background", prereqeval : function (v) { return classes.known.wizard || classes.known.sorcerer || CurrentBackground.known.indexOf('mage of high sorcery') !== -1 || /initiate of high sorcery/i.test(What("Background Feature")); }, choices : ["Nuitari", "Lunitari", "Solinari"], "nuitari" : { description : "I learn a wizard cantrip and two 1st-level spells (Dissonant Whispers, False Life, Hex, or Ray of Sickness). I can cast each spell once per long rest at its lowest level without expending a spell slot, or by using a spell slot as normal. I can choose Int, Wis, or Cha as my spellcasting ability for this.", spellcastingAbility : [4,5,6], allowUpCasting : true, spellcastingBonus : [{ name : "Wizard Cantrip", "class" : ["wizard"], level : [0, 0], }, { name : "Nuitari 1st-level spell", spells : ["dissonant whispers", "false life", "hex", "ray of sickness"], firstCol : "oncelr+markedbox", times : 2 }] }, "lunitari" : { description : "I learn a wizard cantrip and two 1st-level spells (Color Spray, Disguise Self, Feather Fall, Longstrider). I can cast each spell once per long rest at its lowest level without expending a spell slot, or by using a spell slot as normal. I can choose Int, Wis, or Cha as my spellcasting ability for this.", spellcastingAbility : [4,5,6], allowUpCasting : true, spellcastingBonus : [{ name : "Wizard Cantrip", "class" : ["wizard"], level : [0, 0], }, { name : "Lunitari 1st-level spell", spells : ["color spray", "disguise self", "feather fall", "longstrider"], firstCol : "oncelr+markedbox", times : 2 }] }, "solinari" : { description : "I learn a wizard cantrip and two 1st-level spells (Comprehend Languages, Detect Evil and Good, Protection from Evil and Good, Shield). I can cast each spell once per long rest at its lowest level without expending a spell slot, or by using a spell slot as normal. I can choose Int, Wis, or Cha as my spellcasting ability for this.", spellcastingAbility : [4,5,6], allowUpCasting : true, spellcastingBonus : [{ name : "Wizard Cantrip", "class" : ["wizard"], level : [0, 0], }, { name : "Solinari 1st-level spell", spells : ["comprehend languages", "detect evil and good", "protection from evil and good", "shield"], firstCol : "oncelr+markedbox", times : 2 }] } }; FeatsList["adept of the black robes"] = { name : "Adept of the Black Robes", source : [["D:SotDQ", 31], ["UA:HoKR", 4]], description : "I learn one 2nd-level Ench or Necro spell, which I can cast once per long rest at its lowest level without a spell slot, or as normal with one. When a creature I can see within 60 ft fails its save vs. my damaging spell, I can expend HD up to the spell's level and add the rolls to the damage of the spell for that one creature.", descriptionFull : "You chose the moon Nuitari to influence your magic, and your ambition and loyalty to the Order of the Black Robes have been recognized, granting you these benefits:"+ "\n " + toUni("Ambitious Magic") + ". You learn one 2nd-level spell of your choice. The 2nd-level spell must be from the evocation or necromancy school of magic. You can cast this feat's 2nd-level spell without a spell slot, and you must finish a long rest before you can cast it in this way again. You can also cast this spell using spell slots you have of the appropriate level. The spell's spellcasting ability is the one chosen when you gain the Initiate of High Sorcery feat."+ "\n " + toUni("Life Channel") + ". You can channel your life force into the power of your magic. When a creature you can see within 60 feet fails on a saving throw against a spell that deals damage that you cast, you can expend a number of Hit Dice equal to the level of the spell. Roll the expended Hit Dice and add them together. The damage that the creature takes increases by an amount equal to that total.", prerequisite : "4th level, Initiate of High Sorcery (Nuitari) feat", prereqeval : function(v) { var iHghSrcyInit = CurrentFeats.known.indexOf("initiate of high sorcery"); return v.characterLevel >= 4 && iHghSrcyInit !== -1 && CurrentFeats.choices[iHghSrcyInit] === 'nuitari'; }, spellcastingBonus : [{ name : "2nd-level Evoc/Necro spell", "class" : "any", school : ["Evoc", "Necro"], level : [2, 2], firstCol : "oncelr+markedbox" }], spellcastingAbility : 'initiate of high sorcery_-_nuitari', allowUpCasting : true }; FeatsList["adept of the red robes"] = { name : "Adept of the Red Robes", source : [["D:SotDQ", 32], ["UA:HoKR", 4]], description : "I learn a 2nd-level Illusion or Transmutation spell, which I can cast once per long rest at its lowest level without a spell slot, or as normal with one. When I roll 9 or lower on the d20 for an attack or ability check, I can treat the roll as a 10. I can do this a number of times per long rest equal to my proficiency bonus.", descriptionFull : "You chose the moon Lunitari to influence your magic, and your dedication to maintaining the balance between all things has been recognized by the Order of the Red Robes, granting you these benefits:"+ "\n " + toUni("Insightful Magic") + ". You learn one 2nd-level spell of your choice. The 2nd-level spell must be from the illusion or transmutation school of magic. You can cast this feat's 2nd-level spell without a spell slot, and you must finish a long rest before you can cast it in this way again. You can also cast this spell using spell slots you have of the appropriate level. The spell's spellcasting ability is the one chosen when you gain the Initiate of High Sorcery feat."+ "\n " + toUni("Magical Balance") + ". When you make an attack roll, an ability check, or a saving throw, and roll a 9 or lower on the d20, you can use your reaction to balance fate and treat the roll as a 10. you can use this reaction a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th level, Initiate of High Sorcery (Lunitari) feat", prereqeval : function(v) { var iHghSrcyInit = CurrentFeats.known.indexOf("initiate of high sorcery"); return v.characterLevel >= 4 && iHghSrcyInit !== -1 && CurrentFeats.choices[iHghSrcyInit] === 'lunitari'; }, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", spellcastingBonus : [{ name : "2nd-level Illus/Trans spell", "class" : "any", school : ["Illus", "Trans"], level : [2, 2], firstCol : "oncelr+markedbox" }], spellcastingAbility : 'initiate of high sorcery_-_lunitari', allowUpCasting : true }; FeatsList["adept of the white robes"] = { name : "Adept of the White Robes", source : [["D:SotDQ", 32], ["UA:HoKR", 4]], description : "I learn one 2nd-level Abjur or Div spell, which I can cast once per long rest at its lowest level without a spell slot, or as normal with one. As a reaction when I or a creature I can see within 30 ft is damaged, I can expend a spell slot and roll d6s equal to its level to reduce the damage by that much + my spellcasting modifier.", descriptionFull : "You chose the moon Solinari to influence your magic, and your oath to use magic to make the world a better place has been recognized by the Order of the White Robes, granting you these benefits:"+ "\n " + toUni("Protective Magic") + ". You learn one 2nd-level spell of you choice. The 2nd-level spell must be from the abjuration or divination school of magic. You can cast this feat's 2nd-level spell without a spell slot, and you must finish a long rest before you can cast it in this way again. You can also cast this spell using spell slots you have of the appropriate level. The spell's spellcasting ability is the one chosen when you gain the Initiate of High Sorcery feat."+ "\n " + toUni("Protective Ward") + ". When you or a creature you can see within 30 feet of you takes damage, you can use your reaction to expend a spell slot and weave protective magic around the target. Roll a number of d6s equal to the level of the spell slot expended and reduce the damage the target takes by the total rolled on those dice + your spellcasting ability modifier.", prerequisite : "4th level, Initiate of High Sorcery (Solinari) feat", prereqeval : function(v) { var iHghSrcyInit = CurrentFeats.known.indexOf("initiate of high sorcery"); return v.characterLevel >= 4 && iHghSrcyInit !== -1 && CurrentFeats.choices[iHghSrcyInit] === 'solinari'; }, action : [["reaction", ""]], spellcastingBonus : [{ name : "2nd-level Abjur/Div spell", "class" : "any", school : ["Abjur", "Div"], level : [2, 2], firstCol : "oncelr+markedbox" }], spellcastingAbility : 'initiate of high sorcery_-_solinari', allowUpCasting : true }; // Feat Divinely Favored FeatsList["divinely favored"] = { name : "Divinely Favored", source : [["D:SotDQ", 32], ["UA:HoKR", 4]], description : "I learn a cleric cantrip, a 1st-level spell based on my alignment, and Augury. I can cast the spells each once per long rest at their lowest level without a spell slot, or by using a spell slot as normal. I can choose Int, Wis, or Cha as my spellcasting ability for this. I can use a holy symbol as a spellcasting focus for any spell that uses the chosen ability.", descriptionFull : "A god chose you to carry a spark of their power."+ "\n You learn one cantrip of your choice from the cleric spell list and one 1st-level spell based on the alignment of your character, as specified in the table below. You also learn the augury spell."+ "\n\n" + toUni("Alignment\t1st-level Spell")+ "\n Evil\t\tChoose one 1st level warlock spell"+ "\n Good\t\tChoose one 1st-level cleric spell"+ "\n Neutral\t\tChoose one 1st-level druid spell"+ "\n\n You can cast the chosen 1st-level spell and the augury spell without a spell slot, and you must finish a long rest before you can cast either of these spells in this way again. You can also cast these spells using spell slots you have of the appropriate level."+ "\n Your spellcasting ability for this feat's spells is Intelligence, Wisdom, or Charisma (choose when you select this feat)."+ "\n\n In addition, you can use a holy symbol as a spellcasting focus for any spell you cast that uses the spellcasting ability you choose when you select this feat.", choices : ["Evil (warlock spell)", "Good (cleric spell)", "Neutral (druid spell)"], "evil (warlock spell)" : { name : "Divinely Favored [Evil]", description : "I learn a cleric cantrip, a 1st-level warlock spell, and Augury. I can cast each spell once per long rest at their lowest level without a spell slot, or by using a spell slot as normal. I choose Int, Wis, or Cha as my spellcasting ability for this. I can use a holy symbol as a spellcasting focus for any spell that uses the chosen ability.", spellcastingAbility : [4,5,6], allowUpCasting : true, spellcastingBonus : [{ name : "Cleric Cantrip", "class" : ["cleric"], level : [0, 0], }, { name : "1st-level Warlock Spell", "class" : ["warlock"], level : [1, 1], firstCol : "oncelr+markedbox" }, { name : "Augury", spells : ["augury"], selection : ["augury"], firstCol : "oncelr+markedbox" }] }, "good (cleric spell)" : { name : "Divinely Favored [Good]", description : "I learn a cleric cantrip, a 1st-level cleric spell, and Augury. I can cast each spell once per long rest at their lowest level without a spell slot, or by using a spell slot as normal. I choose Int, Wis, or Cha as my spellcasting ability for this. I can use a holy symbol as a spellcasting focus for any spell that uses the chosen ability.", spellcastingAbility : [4,5,6], allowUpCasting : true, spellcastingBonus : [{ name : "Cleric Cantrip", "class" : ["cleric"], level : [0, 0], }, { name : "1st-level Cleric Spell", "class" : ["cleric"], level : [1, 1], firstCol : "oncelr+markedbox" }, { name : "Augury", spells : ["augury"], selection : ["augury"], firstCol : "oncelr+markedbox" }] }, "neutral (druid spell)" : { name : "Divinely Favored [Neutral]", description : "I learn a cleric cantrip, a 1st-level druid spell, and Augury. I can cast each spell once per long rest at their lowest level without a spell slot, or by using a spell slot as normal. I choose Int, Wis, or Cha as my spellcasting ability for this. I can use a holy symbol as a spellcasting focus for any spell that uses the chosen ability.", spellcastingAbility : [4,5,6], allowUpCasting : true, spellcastingBonus : [{ name : "Cleric Cantrip", "class" : ["cleric"], level : [0, 0], }, { name : "1st-level Druid Spell", "class" : ["druid"], level : [1, 1], firstCol : "oncelr+markedbox" }, { name : "Augury", spells : ["augury"], selection : ["augury"], firstCol : "oncelr+markedbox" }] } }; // Feats tree for Squire of Solamnia FeatsList["squire of solamnia"] = { name : "Squire of Solamnia", source : [["D:SotDQ", 34]], description : "Mounting or dismounting costs me only 5-ft of movement. Once per turn, I can grant myself advantage on a weapon attack, adding +1d8 to the damage roll if it hits. I can use this benefit my proficiency bonus per long rest, but a use is expended only if the attack hits.", descriptionFull : "Your training in the ways of the Knights of Solamnia grants you these benefits:"+ "\n " + toUni("Mount Up") + ". Mounting or dismounting costs you only 5 feet of movement."+ "\n " + toUni("Precise Strike") + ". Once per turn, when you make a weapon attack roll against a creature, you can cause the attack roll to have advantage. If the attack hits, you roll a d8 and add the number rolled as a bonus to the attack's damage roll. You can use this benefit a number of times equal to your proficiency bonus, but a use is expended only if the attack hits. You regain all expended uses when you finish a long rest.", prerequisite : "Dragonlance Campaign, plus Fighter, Paladin, or Knight of Solamnia background", prereqeval : function (v) { return classes.known.fighter || classes.known.paladin || CurrentBackground.known.indexOf('knight of solamnia') !== -1 || /squire of solamnia/i.test(What("Background Feature")); }, limfeaname : "Precise Strike (Squire of Solamnia)", usages : "Proficiency bonus per ", usagescalc : "event.value = Number(How('Proficiency Bonus'));", recovery : "long rest" }; FeatsList["knight of the crown"] = { name : "Knight of the Crown", source : [["D:SotDQ", 32]], description : "As a bonus action, I can use Commanding Rally on one ally within 30 ft that can see or hear me to immediately make one weapon attack as a reaction. +1d8 is added to the damage roll, if it hits. I can do this my proficiency bonus per long rest. [+1 Strength, Dexterity, or Constitution]", descriptionFull : "You are a Knight of Solamnia aligned with the Order of the Crown, a group that extols the virtues of cooperation, loyalty, and obedience. You excel in group combat and gain these benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase your Strength, Dexterity, or Constitution by 1, to a maximum of 20."+ "\n " + toUni("Commanding Rally") + ". As a bonus action, you can command one ally within 30 feet of yourself to attack. If that ally can see or hear you, they can immediately make one weapon attack as a reaction. If the attack hits, the ally can roll a d8 and add the number rolled as a bonus to the attack's damage roll. You can use this bonus action a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th level, Squire of Solamnia feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("squire of solamnia") !== -1; }, limfeaname : "Commanding Rally (Knight of the Crown)", usages : "Proficiency bonus per ", usagescalc : "event.value = Number(How('Proficiency Bonus'));", recovery : "long rest", action : [["bonus action", ""]], choices : ["Strength", "Dexterity", "Constitution"], "strength" : { description : "As a bonus action, I can use Commanding Rally on one ally within 30 ft that can see or hear me to immediately make one weapon attack as a reaction. +1d8 is added to the damage roll, if it hits. I can do this my proficiency bonus per long rest. [+1 Strength]", scores : [1,0,0,0,0,0] }, "dexterity" : { description : "As a bonus action, I can use Commanding Rally on one ally within 30 ft that can see or hear me to immediately make one weapon attack as a reaction. +1d8 is added to the damage roll, if it hits. I can do this my proficiency bonus per long rest. [+1 Dexterity]", scores : [0,1,0,0,0,0] }, "constitution" : { description : "As a bonus action, I can use Commanding Rally on one ally within 30 ft that can see or hear me to immediately make one weapon attack as a reaction. +1d8 is added to the damage roll, if it hits. I can do this my proficiency bonus per long rest. [+1 Constitution]", scores : [0,0,1,0,0,0] } }; FeatsList["knight of the rose"] = { name : "Knight of the Rose", source : [["D:SotDQ", 33]], description : "As a bonus action, I can use Bolstering Rally on myself or an ally within 30 ft that I can see and can see or hear me. They gain 1d8 + my proficiency bonus + the modifier of the ability chosen to increase temporary hit points. I can do this my proficiency bonus per long rest. [+1 Constitution, Wisdom, or Charisma]", descriptionFull : "You are a Knight of Solamnia aligned with the Order of the Rose, a group known for leadership, justice, and wisdom. Your resolve grants you these benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase your Constitution, Wisdom, or Charisma by 1, to a maximum of 20."+ "\n " + toUni("Bolstering Rally") + ". As a bonus action, you can encourage one creature you can see within 30 feet of yourself (you can choose yourself). If the target can see or hear you, the target gains temporary hit points equal to 1d8 + your proficiency bonus + the ability modifier of the ability score increased by this feat. You can use this bonus action a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th level, Squire of Solamnia feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("squire of solamnia") !== -1; }, limfeaname : "Bolstering Rally (Knight of the Rose)", usages : "Proficiency bonus per ", usagescalc : "event.value = Number(How('Proficiency Bonus'));", recovery : "long rest", action : [["bonus action", ""]], choices : ["Constitution", "Wisdom", "Charisma"], "constitution" : { calculation : 'event.value = "As a bonus action, I can use Bolstering Rally on myself or an ally within 30 ft that I can see and can see or hear me. They gain 1d8 + " + (Number(How("Proficiency Bonus")) + Number(What("Con Mod"))) + " temporary hit points (1d8 + proficiency bonus + Constitution modifier). I can do this my proficiency bonus per long rest. [+1 Constitution]";', scores : [0,0,1,0,0,0] }, "wisdom" : { calculation : 'event.value = "As a bonus action, I can use Bolstering Rally on myself or an ally within 30 ft that I can see and can see or hear me. They gain 1d8 + " + (Number(How("Proficiency Bonus")) + Number(What("Wis Mod"))) + " temporary hit points (1d8 + proficiency bonus + Wisdom modifier). I can do this my proficiency bonus per long rest. [+1 Wisdom]";', scores : [0,0,0,0,1,0] }, "charisma" : { calculation : 'event.value = "As a bonus action, I can use Bolstering Rally on myself or an ally within 30 ft that I can see and can see or hear me. They gain 1d8 + " + (Number(How("Proficiency Bonus")) + Number(What("Cha Mod"))) + " temporary hit points (1d8 + proficiency bonus + Charisma modifier). I can do this my proficiency bonus per long rest. [+1 Charisma]";', scores : [0,0,0,0,0,1] } }; FeatsList["knight of the sword"] = { name : "Knight of the Sword", source : [["D:SotDQ", 33]], description : "Once per turn, when I hit a creature with a weapon attack, I can have it make a Wisdom save DC (8 + Prof Bonus + mod of the ability increased by this feat) or be frightened of me until my next turn ends. On a successful save, the target has disadv. on its next attack before its next turn ends. I can do this my proficiency bonus per long rest. [+1 Int/Wis/Cha]", descriptionFull : "You are a Knight of Solamnia aligned with the Order of the Sword, a group devoted to heroism and courage. Bravery steels your spirit, granting you these benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase your Intelligence, Wisdom, or Charisma by 1, to a maximum of 20."+ "\n " + toUni("Demoralizing Strike") + ". Once per turn, when you hit a creature with a weapon attack roll, you can attempt to frighten that target. The target must make a Wisdom saving throw (DC equals 8 + your proficiency bonus + the ability modifier of the score increased by this feat). On a failed save, the target is frightened of you until the end of your next turn. On a successful save, the target has disadvantage on the next attack roll it makes before the end of its next turn. You can use this benefit a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th level, Squire of Solamnia feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("squire of solamnia") !== -1; }, limfeaname : "Demoralizing Strike (Knight of the Sword)", usages : "Proficiency bonus per ", usagescalc : "event.value = Number(How('Proficiency Bonus'));", recovery : "long rest", choices : ["Intelligence", "Wisdom", "Charisma"], "intelligence" : { calculation : 'event.value = "Once per turn, when I hit a creature with a weapon attack, I can have it make a Wisdom save DC " + (8 + Number(How("Proficiency Bonus")) + Number(What("Int Mod"))) + " (8 + Prof Bonus + Int mod) or be frightened of me until my next turn ends. On a successful save, the target has disadv. on its next attack before its next turn ends. I can do this my proficiency bonus per long rest. [+1 Int]";', scores : [0,0,0,1,0,0] }, "wisdom" : { calculation : 'event.value = "Once per turn, when I hit a creature with a weapon attack, I can have it make a Wisdom save DC " + (8 + Number(How("Proficiency Bonus")) + Number(What("Wis Mod"))) + " (8 + Prof Bonus + Wis mod) or be frightened of me until my next turn ends. On a successful save, the target has disadv. on its next attack before its next turn ends. I can do this my proficiency bonus per long rest. [+1 Wis]";', scores : [0,0,0,0,1,0] }, "charisma" : { calculation : 'event.value = "Once per turn, when I hit a creature with a weapon attack, I can have it make a Wisdom save DC " + (8 + Number(How("Proficiency Bonus")) + Number(What("Cha Mod"))) + " (8 + Prof Bonus + Cha mod) or be frightened of me until my next turn ends. On a successful save, the target has disadv. on its next attack before its next turn ends. I can do this my proficiency bonus per long rest. [+1 Cha]";', scores : [0,0,0,0,0,1] } }; // Subclass AddSubClass("sorcerer", "lunar sorcery", { regExpSearch : /^(?=.*(sorcerer|sorcery|witch))(?=.*(lunar|moon)).*$/i, subname : "Lunar Sorcery", fullname : "Lunar Sorcerer", source : [["D:SotDQ", 0]], features : { "subclassfeature1" : { name : "Lunar Embodiment", source : [["D:SotDQ", 0]], minlevel : 1, additional : levels.map(function (n) { return (n < 3 ? 3 : n < 5 ? 6 : n < 7 ? 9 : n < 9 ? 12 : 15) + " additional spells known"}), spellcastingExtra : [ // full moon "shield", "lesser restoration", "dispel magic", "death ward", "rary's telepathic bond", // new moon "ray of sickness", "blindness/deafness", "vampiric touch", "confusion", "hold monster", // crescent moon "color spray", "alter self", "phantom steed", "hallucinatory terrain", "mislead" ], spellcastingExtraApplyNonconform : true, description : levels.map(function(n) { var phases = { "\u25CB Full: " : ["Shield", "Lesser Restoration", "Dispel Magic", "Death Ward", "Rary's Telepathic Bond"], "\u25CF New: " : ["Ray of Sickness", "Blindness/deafness", "Vampiric Touch", "Confusion", "Hold Monster"], "\u25D6 Crescent: " : ["Color Spray", "Alter Self", "Phantom Steed", "Hallucinatory Terrain", "Mislead"] }; var aReturn = [ "When I finish a long rest, I can choose a lunar phase: Full, New, or Crescent Moon", "I can cast the 1st-level spell of that lunar phase once per long rest without a spell slot" ]; var iSpellsAdd = n < 3 ? 1 : n < 5 ? 2 : n < 7 ? 3 : n < 9 ? 4 : 5; for (var phase in phases) { aReturn.push(phase + phases[phase].slice(0,iSpellsAdd).join(", ")); } //aReturn.push("I know all " + (iSpellsAdd * 3) + " spells above; They don't count towards the number of spells I can know"); return desc(aReturn); }), calcChanges : { spellAdd : [ function (spellKey, spellObj, spName, isDuplicate) { if (spName === "sorcerer" && !isDuplicate && CurrentSpells.sorcerer.extra.indexOf(spellKey) !== -1) { var phases = { "F" : ["shield", "lesser restoration", "dispel magic", "death ward", "rary's telepathic bond"], "N" : ["ray of sickness", "blindness/deafness", "vampiric touch", "confusion", "hold monster"], "C" : ["color spray", "alter self", "phantom steed", "hallucinatory terrain", "mislead"] }; for (var phase in phases) { if (phases[phase].indexOf(spellKey) !== -1) { spellObj.firstCol = phase; return true; } } } }, 'The letters "F", "N", or "C" in the first column are used to indicate that a spell belongs to either the Full Moon, New Moon, or Crescent Moon lunar phase.' ] }, spellFirstColTitle : "Ph", extraLimitedFeatures : [{ name : "1st-level lunar phase spell", usages : 1, recovery : "long rest" }] }, "subclassfeature1.1" : { name : "Moon Fire", source : [["D:SotDQ", 0]], minlevel : 1, description : desc("I know the Sacred Flame cantrip and can use it on 2 creatures within 5 ft of each other"), spellcastingBonus : [{ name : "Moon Fire", spells : ["sacred flame"], selection : ["sacred flame"] }], weaponsAdd : { select : ["Sacred Flame"] }, spellChanges : { "sacred flame" : { description : "Up to 2 creas I see, max 5 ft apart, save or 1d8 Radiant dmg; no cover bonus; +1d8 at CL 5, 11, and 17", descriptionShorter : "Up to 2 creas I see, max 5 ft apart, save or 1d8 Radiant dmg; no cover bonus; +1d8 CL 5/11/17", descriptionCantripDie : "Up to 2 creas I see, max 5 ft apart, save or `CD`d8 Radiant dmg; no bonus for cover on save", changes : "When I cast Sacred Flame, I can target one creature as normal or target two creatures within range that are within 5 feet of each other." } }, calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == 'sacred flame') { fields.Description = fields.Description.replace("1 creature", "up to 2 creatures within 5 ft"); } }, "When I cast Sacred Flame, I can target one creature as normal or target two creatures within range that are within 5 feet of each other." ] } }, "subclassfeature6" : { name : "Lunar Boons", source : [["D:SotDQ", 0]], minlevel : 6, description : desc([ "Each lunar phase is additionally associated with spells of the following schools of magic:", "\u25CB Full: Abjur \u0026 Div\t\t\u25CF New: Ench \u0026 Necro\t" + (typePF ? "\t" : Array(8).join(" ")) + "\u25D6 Crescent: Illus \u0026 Trans", "I can reduce the sorcery point needed for Metamagic of spells of my current phase by 1" ]), usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature6.1" : { name : "Waxing and Waning", source : [["D:SotDQ", 0]], minlevel : 6, additional: "1 sorcery point", description : desc([ "As a bonus action, I can spend 1 sorcery point to change my lunar phase", "I can cast each lunar phase's 1st-level spells once per long rest, if it is my current phase" ]), action : [["bonus action", ""]], extraLimitedFeatures : [{ name : "Shield (in Full lunar phase)", usages : 1, recovery : "long rest" }, { name : "Ray of Sickness (in New lunar phase)", usages : 1, recovery : "long rest" }, { name : "Color Spray (in Crescent lunar phase)", usages : 1, recovery : "long rest" }], eval : function () { RemoveFeature("1st-level lunar phase spell", 0, "", "", "Lunar Sorcerer: Lunar Embodiment"); }, removeeval : function () { AddFeature("1st-level lunar phase spell", 1, "", "long rest", "Lunar Sorcerer: Lunar Embodiment"); } }, "subclassfeature14" : { name : "Lunar Empowerment", source : [["D:SotDQ", 0]], minlevel : 14, description : " [passive benefits for current phase]" + desc([ "\u25CB Full: I shed bright light in a 10-ft radius \u0026 dim light for extra 10 ft", " Myself and creatures I choose in 10 ft have adv. on Investigation and Perception checks", "\u25CF New: I have adv. on Stealth checks; While I'm in darkness, attacks have disadv. vs me", "\u25D6 Crescent: I have resistance to Necrotic and Radiant damage" ]), dmgres : [ ["Necrotic", "Necro. (in crescent)"], ["Radiant", "Rad. (in crescent)"] ] }, "subclassfeature18" : { name : "Lunar Phenomenon", source : [["D:SotDQ", 0]], minlevel : 18, additional: "per phase: 1\xD7 per long rest or 5 SP", description : desc([ "As a bonus action, or as part of changing phase, I can use a power of the (new) phase:", "\u25CB Full: Chosen creatures within 30 ft of me must make a Constitution save or be blinded", " This lasts until their next turn ends; I also heal one creature within 30 ft for 3d8 HP", "\u25CF New: Chosen creatures within 30 ft of me must make a Dexterity save", " If failed, they take 3d10 Necrotic damage and have 0 speed until their next turn ends", " Also, I become invisible until the end of my next turn, or until I attack or cast a spell", "\u25D6 Crescent: I can magically teleport to an unoccupied space I can see within 60 ft", " Both of us gain resistance to all damage until the start of my next turn", "I can use each phase's bonus action 1/LR, or by spending 5 sorcery points to use it again" ]), action : [["bonus action", ""]], extraLimitedFeatures : [{ name : "Lunar Phenomenon (Full)", usages : 1, recovery : "long rest", altResource : "5 SP" }, { name : "Lunar Phenomenon (New)", usages : 1, recovery : "long rest", altResource : "5 SP" }, { name : "Lunar Phenomenon (Crescent)", usages : 1, recovery : "long rest", altResource : "5 SP" }] } } }); // Weapon, Hoopak WeaponsList["hoopak, melee"] = { regExpSearch : /hoopak/i, name : "Hoopak, melee", source : [["D:SotDQ", 0]], list : "melee", ability : 1, type : "Martial", damage : [1, 6, "piercing"], range : "Melee", weight : 2, description : "Finesse, two-handed; Can be used ranged (40/160 ft) with ammo, for 1d4 bludgeoning damage", special : true, abilitytodamage : true }; WeaponsList["hoopak, ranged"] = { regExpSearch : /^(?=.*hoopak)(?=.*ranged).*$/i, name : "Hoopak, ranged", source : [["D:SotDQ", 0]], list : "ranged", ability : 1, type : "Martial", damage : [1, 4, "bludgeoning"], range : "40/160 ft", weight : 2, description : "Ammunition, finesse, two-handed; Can be used in melee without ammo, for 1d6 piercing damage", special : true, abilitytodamage : true }; // Magic Items MagicItemsList["flying citadel helm"] = { name : "Flying Citadel Helm", source : [["D:SotDQ", 190]], type : "wondrous item", rarity : "very rare", attunement : true, prerequisite : "Requires attunement by a spellcaster", prereqeval : function(v) { return v.isSpellcaster; }, description : "This ornate chair allows me to maneuver a flying citadel while concentrating (as if a spell). I can move the citadel through the air 80 ft/round or 8 miles/h, steer it, and see and hear from its highest point as though I was at that location. As an action or bonus action, I can transfer attunement to a willing spellcaster.", descriptionFull : "The function of this ornate chair is to propel and maneuver a flying citadel on which it has been installed. The chair has AC 15, 18 hit points, and immunity to poison and psychic damage. It is destroyed if reduced to 0 hit points."+ "\n The sensation of being attuned to a flying citadel helm is akin to the pins-and-needles effect one experiences after one's arm or leg falls asleep, but not as intense."+ "\n While attuned to a flying citadel helm and sitting in it, you gain the following abilities for as long as you maintain concentration (as if concentrating on a spell):"+ "\n \u2022 You can use the flying citadel helm to move the citadel through the air, up to 80 feet per round, or up to 8 miles per hour."+ "\n \u2022 You can steer the citadel, albeit in a somewhat clumsy fashion, in much the way that a rudder or oars can be used to maneuver a seafaring ship."+ "\n \u2022 At any time, you can see and hear from the highest point outside the citadel as though you were at that location."+ "\n\n If no creature attuned to the helm is maintaining concentration, the citadel remains motionless in its space."+ "\n "+toUni("Transfer Attunement")+". You can use an action or a bonus action to touch a willing spellcaster, whereupon that creature attunes to the flying citadel helm immediately, and your attunement to the flying citadel helm ends."+ "\n "+toUni("Crash")+". Should the flying citadel helm be destroyed, the citadel it is installed on loses power and begins to crumble. If the crumbling citadel is in the air, it descends at a rate of 30 feet per round, or 300 feet per minute. Any creature on the citadel or on the ground within 120 feet of the citadel when it lands must make a DC 20 Dexterity saving throw, taking 39 (6d12) bludgeoning damage on a failed save, or half as much damage on a successful one.", action : [ ["action", " (Transfer Attunement)"], ["bonus action", " (Transfer Attunement)"] ] }; MagicItemsList["kagonesti forest shroud"] = { name : "Kagonesti Forest Shroud", source : [["D:SotDQ", 190]], type : "wondrous item", rarity : "rare", attunement : true, description : "This cloak of autumnal leaves woven together grants me advantage on Dexterity (Stealth) checks. As a bonus action once per dawn, I can use it to magically teleport to an unoccupied space I can see within 30 ft. I then have advantage on the next attack roll I make before the end of the turn.", descriptionFull : "This cloak appears to be made of autumnal leaves woven together. While you wear this cloak, you have advantage on Dexterity (Stealth) checks, and you can use a bonus action to magically teleport, along with any equipment you are wearing or carrying, to an unoccupied space you can see within 30 feet of yourself. You then have advantage on the next attack roll you make before the end of the turn. Once this bonus action is used, it can't be used again until the next dawn.", advantages : [["Stealth", true]], action : [["bonus action", " (teleport)"]], usages : 1, recovery : "Dawn", additional : "teleport" }; MagicItemsList["mirror of reflected pasts"] = { name : "Mirror of Reflected Pasts", source : [["D:SotDQ", 190]], type : "wondrous item", rarity : "very rare", attunement : true, description : "As an action, I can (de)activate this mirror. It can be activated once per dawn, making it hover in the air, can't be moved, and when a non-construct sees its reflection in it while within 30 ft, it must make a DC 15 Wis save. It is paralyzed until the mirror is deactivated. It can retry the save at the end of each of its turns.", descriptionLong : "As an action, I can activate this mirror of elven design once per dawn, or deactive it. While active, it hovers in the air and can't be moved. When a non-construct creature within 30 ft of the mirror sees its reflection in it, the creature must make a DC 15 Wisdom save or become paralyzed. The creature can repeat the save at the end of each of its turns, but is otherwise paralyzed until the mirror is deactivated. A successful save makes a creature immune for 24 hours. While paralyzed by the mirror, the creature sees idealized versions of events from their past reflected in the mirror's glass.", descriptionFull : "This mirror of elven design allows those who stare into it to reflect on positive memories. The 3-foot-tall mirror weighs 25 pounds, and it has AC 11, 10 hit points, and vulnerability to bludgeoning damage. It shatters and is destroyed if reduced to 0 hit points."+ "While holding the mirror upright, you can use an action to speak its command word and activate it. While activated, the mirror hovers in the air, and it can be destroyed but not moved. It remains activated until you use an action to speak the command word again or your attunement to the mirror ends, at which point the mirror harmlessly floats to the ground. Once the mirror has been deactivated, it can't be activated again until the next dawn."+ "If a non-Construct creature other than you sees its reflection in the activated mirror while within 30 feet of it, that creature must succeed on a DC 15 Wisdom saving throw or become paralyzed until the mirror is deactivated or until that creature can no longer see the mirror. A creature paralyzed by the mirror can repeat the saving throw at the end of each of its turns, ending the effect on a success. If a creature's saving throw is successful or the effect ends for it, the creature is immune to this mirror's effect for the next 24 hours."+ "While paralyzed by the mirror, the creature sees events from their past reflected in the mirror's glass. These memories aren't real, but rather idealized versions of those occurrences. Nearby observers can glimpse flashes of these memories if looking indirectly at the mirror.", weight : 25, action : [["action", " [(de)activate]"]], usages : 1, recovery : "Dawn" }; ================================================ FILE: WotC material/pub_20230221_KftGV.js ================================================ var iFileName = "pub_20230221_KftGV.js"; RequiredSheetVersion("13.1.1"); // This file adds the magic items from the Keys from the Golden Vault adventure book to MPMB's Character Record Sheet SourceList["KftGV"] = { name : "Keys from the Golden Vault [items]", abbreviation : "KftGV", group : "Adventure Books", url : "https://dnd.wizards.com/products/keys-from-the-golden-vault", date : "2023/02/21" }; var KftGV_ConstantoriPortrait = [ "This painting by famed artist Dkesii Kwan depicts Constantori, a beautiful courtier, who was paid a staggering sum to be Dkesii's model. Whether Constantori's actual appearance matches the painting remains a subject of debate. The portrait is one of several paintings commissioned by the late Daiyani Grysthorn, a crime lord who frequently gave magical paintings as gifts to her most esteemed associates.", ">>Sentience<<. Constantori's Portrait is a sentient, lawful evil item with an Intelligence score of 14, a Wisdom score of 12, and a Charisma score of 8. It can hear within a range of 120 feet and has darkvision within a range of 60 feet, but it can't see anything behind itself.", "The painting can converse in Common, Draconic, and Elvish as if it were a living person, though Constantori's mouth doesn't move. Whenever conversation occurs within the portrait's auditory range, the painting eagerly gathers secrets, the names of secret tellers, significant events, or any political conversations.", ">>Personality<<. Constantori's Portrait is demanding, condescending, and vain. It doesn't like being covered or placed out of sight, and it loudly condemns anyone who tries to remove it from its gold-leaf frame.", ">>Wealth of Information<<. The painting's primary purpose is to observe and recall conversations. Over the past few decades, Constantori's Portrait has quietly observed countless conversations and now possesses an unquantifiable amount of lore\u2014everything from criminal conspiracies to secret passwords. The DM decides what the painting knows and what it doesn't.", "While attuned to the painting, you can take an action to telepathically contact it over any distance, provided the painting and you are on the same plane of existence. The painting can't telepathically contact you, however. Maintaining telepathic contact with the painting requires your concentration (as if concentrating on a spell).", ">>Guardian Portrait<<. While you are attuned to the painting, you can command it to guard its location against one or more creatures you identify as the painting's enemies. The painting performs this function until you command it to stop or until your attunement to the painting ends.", "The painting has 3 charges. When a creature the painting identifies as its enemy starts its turn in a space the painting can see, the painting expends 1 of its charges to cast magic missile (3 missiles), targeting that creature. The painting regains all expended charges daily at dawn.", "The painting is a Small object with AC 12, 20 hit points, and immunity to poison damage. In its gold-leaf frame, the painting weighs 15 pounds. If the painting has at least 1 hit point and is targeted by a mending spell, it regains 2d6 hit points." ]; MagicItemsList["constantori's portrait"] = { name : "Constantori's Portrait", source : [["KftGV", 101]], type : "wondrous item", rarity : "very rare", attunement : true, description : "As an action, I can telepathically contact this sentient painting over any distance while on the same plane. It can't contact me. Maintaining contact requires concentration like on a spell. I can command the painting to guard an area. It can cast Magic Missile 3 times per dawn. See Notes page.", descriptionFull : KftGV_ConstantoriPortrait.join("\n ").replace(/>>(.*?)<>(.*?)<= 4 && iStrikeGiants !== -1 && CurrentFeats.choices[iStrikeGiants] === 'fire strike'; }, descriptionFull : "You've manifested the fiery combat emblematic of fire giants, granting you the following benefits:"+ "\n\n" + toUni("Ability Score Increase") + ". Increase your Strength, Constitution, or Wisdom by 1, to a maximum of 20."+ "\n\n" + toUni("Born of Flame") + ". You have resistance to fire damage."+ "\n" + toUni("Searing Ignition") + ". When you take the Attack action on your turn, you can replace a single attack with a magical burst of flame. Each creature of your choice in a 15-foot-radius sphere centered on you must make a Dexterity saving throw (DC equals 8 + your proficiency bonus + the modifier of the ability increased by this feat). On a failed save, a creature takes fire damage equal to 1d8 + your proficiency bonus, and it has the blinded condition until the start of your next turn. On a successful save, the creature takes half as much damage only. You can use your Searing Ignition a number of times equal to your proficiency bonus (but no more than once per turn), and you regain all expended uses when you finish a long rest.", description : "I get fire resistance. Prof B. per long rest, when I use the Attack action on my turn, I can replace one attack with Searing Ignition: Chosen targets in 15-ft radius sphere on me take 1d8 + Prof B. fire damage, blind until my next turn starts. Dex save DC 8 + Prof B. + Str/Con/Wis mod half damage, not blind. [+1 Str/Con/Wis]", extraLimitedFeatures : [{ name : "Searing Ignition", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }], dmgres : ["Fire"], choices : ["Strength", "Constitution", "Wisdom"], "strength" : { description : "", calculate : "var iProfB = Number(How('Proficiency Bonus')), iMod = Number(What('Str Mod')); event.value = 'I get fire resistance. ' + iProfB + '\xD7 (Prof) per long rest, when I use the Attack action on my turn, I can replace one attack with Searing Ignition: Chosen targets in 15-ft radius sphere on me take 1d8+' + iProfB + ' (Prof B.) fire damage, blinded until my next turn starts. Dex save DC ' + (8 + iProfB + iMod) + ' (8 + Prof B. + Str mod) halves damage, not blinded. [+1 Str]';", weaponOptions : [{ regExpSearch : /^(?=.*searing)(?=.*ignition).*$/i, name : "Searing Ignition", source : [["GotG", 17]], ability : 1, type : 'AlwaysProf', damage : [1, 8, 'fire'], range : "15-ft radius", description : "Affects only chosen targets; Dex save halves, otherwise blinded until my next turn starts", abilitytodamage : false, dc : true, isNotWeapon : true, modifiers : ["", "Prof"], selectNow : true }], scores : [1,0,0,0,0,0] }, "constitution" : { description : "", calculate : "var iProfB = Number(How('Proficiency Bonus')), iMod = Number(What('Con Mod')); event.value = 'I get fire resistance. ' + iProfB + '\xD7 (Prof) per long rest, when I use the Attack action on my turn, I can replace one attack with Searing Ignition: Chosen targets in 15-ft radius sphere on me take 1d8+' + iProfB + ' (Prof B.) fire damage, blinded until my next turn starts. Dex save DC ' + (8 + iProfB + iMod) + ' (8 + Prof B. + Con mod) halves damage, not blinded. [+1 Con]';", weaponOptions : [{ regExpSearch : /^(?=.*searing)(?=.*ignition).*$/i, name : "Searing Ignition", source : [["GotG", 17]], ability : 3, type : 'Magical', damage : [1, 8, 'fire'], range : "15-ft radius", description : "Affects only chosen targets; Dex save halves, otherwise blinded until my next turn starts", abilitytodamage : false, dc : true, isNotWeapon : true, modifiers : ["", "Prof"], selectNow : true }], scores : [0,0,1,0,0,0] }, "wisdom" : { description : "", calculate : "var iProfB = Number(How('Proficiency Bonus')), iMod = Number(What('Wis Mod')); event.value = 'I get fire resistance. ' + iProfB + '\xD7 (Prof) per long rest, when I use the Attack action on my turn, I can replace one attack with Searing Ignition: Chosen targets in 15-ft radius sphere on me take 1d8+' + iProfB + ' (Prof B.) fire damage, blinded until my next turn starts. Dex save DC ' + (8 + iProfB + iMod) + ' (8 + Prof B. + Wis mod) halves damage, not blinded. [+1 Wis]';", weaponOptions : [{ regExpSearch : /^(?=.*searing)(?=.*ignition).*$/i, name : "Searing Ignition", source : [["GotG", 17]], ability : 5, type : 'Magical', damage : [1, 8, 'fire'], range : "15-ft radius", description : "Affects only chosen targets; Dex save halves, otherwise blinded until my next turn starts", abilitytodamage : false, dc : true, isNotWeapon : true, modifiers : ["", "Prof"], selectNow : true }], scores : [0,0,0,0,1,0] } }; FeatsList["fury of the frost giant"] = { name : "Fury of the Frost Giant", source : [["GotG", 17]], prerequisite : "4th level, Strike of the Giants (Frost Strike) feat", prereqeval : function(v) { var iStrikeGiants = CurrentFeats.known.indexOf("strike of the giants"); return v.characterLevel >= 4 && iStrikeGiants !== -1 && CurrentFeats.choices[iStrikeGiants] === 'frost strike'; }, descriptionFull : "You've manifested the icy might emblematic of frost giants, granting you the following benefits:"+ "\n\n" + toUni("Ability Score Increase") + ". Increase your Strength, Constitution, or Wisdom by 1, to a maximum of 20."+ "\n\n" + toUni("Born of Ice") + ". You have resistance to cold damage."+ "\n" + toUni("Frigid Retaliation") + ". Immediately after a creature you can see within 30 feet of you hits you with an attack roll and deals damage, you can use your reaction to retaliate with a conjured blast of ice. The creature must make a Constitution saving throw (DC equals 8 + your proficiency bonus + the modifier of the ability increased by this feat). On a failed save, the creature takes cold damage equal to 1d8 + your proficiency bonus, and its speed is reduced to 0 until the end of its next turn. You can use this reaction a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", description : "I gain cold resistance. As a reaction when a creature I see within 30 ft damages me with an attack, I can, Prof B. times per long rest, use Frigid Retaliation: it must make a Con save DC 8 + Prof B. + Str/Con/Wis mod or take 1d8 + Prof B. cold damage and have speed 0 until its next turn ends. [+1 Str/Con/Wis]", action : [["reaction", "Frigid Retaliation"]], extraLimitedFeatures : [{ name : "Frigid Retaliation", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }], dmgres : ["Cold"], choices : ["Strength", "Constitution", "Wisdom"], "strength" : { description : "", calculate : "var iProfB = Number(How('Proficiency Bonus')), iMod = Number(What('Str Mod')); event.value = 'I gain cold resistance. As a reaction when a creature I see within 30 ft hits me with an attack roll and deals damage, I can, ' + iProfB + ' times (Prof B.) per long rest, use Frigid Retaliation: it must make a Con save DC ' + (8 + iProfB + iMod) + ' (8 + Prof B. + Str mod) or take 1d8+' + iProfB + ' (Prof B.) cold damage and have speed 0 until its next turn ends. [+1 Str]';", weaponOptions : [{ regExpSearch : /^(?=.*frigid)(?=.*retaliation).*$/i, name : "Frigid Retaliation", source : [["GotG", 17]], ability : 1, type : 'Magical', damage : [1, 8, 'cold'], range : "30 ft", description : "Reaction; Con save - success: no damage, fail: also 0 speed until target's next turn ends", abilitytodamage : false, dc : true, isNotWeapon : true, modifiers : ["", "Prof"], selectNow : true }], scores : [1,0,0,0,0,0] }, "constitution" : { description : "", calculate : "var iProfB = Number(How('Proficiency Bonus')), iMod = Number(What('Con Mod')); event.value = 'I gain cold resistance. As a reaction when a creature I see within 30 ft hits me with an attack roll and deals damage, I can, ' + iProfB + ' times (Prof B.) per long rest, use Frigid Retaliation: it must make a Con save DC ' + (8 + iProfB + iMod) + ' (8 + Prof B. + Con mod) or take 1d8+' + iProfB + ' (Prof B.) cold damage and have speed 0 until its next turn ends. [+1 Con]';", weaponOptions : [{ regExpSearch : /^(?=.*frigid)(?=.*retaliation).*$/i, name : "Frigid Retaliation", source : [["GotG", 17]], ability : 3, type : 'Magical', damage : [1, 8, 'cold'], range : "30 ft", description : "Reaction; Con save - success: no damage, fail: also 0 speed until target's next turn ends", abilitytodamage : false, dc : true, isNotWeapon : true, modifiers : ["", "Prof"], selectNow : true }], scores : [0,0,1,0,0,0] }, "wisdom" : { description : "", calculate : "var iProfB = Number(How('Proficiency Bonus')), iMod = Number(What('Wis Mod')); event.value = 'I gain cold resistance. As a reaction when a creature I see within 30 ft hits me with an attack roll and deals damage, I can, ' + iProfB + ' times (Prof B.) per long rest, use Frigid Retaliation: it must make a Con save DC ' + (8 + iProfB + iMod) + ' (8 + Prof B. + Wis mod) or take 1d8+' + iProfB + ' (Prof B.) cold damage and have speed 0 until its next turn ends. [+1 Wis]';", weaponOptions : [{ regExpSearch : /^(?=.*frigid)(?=.*retaliation).*$/i, name : "Frigid Retaliation", source : [["GotG", 17]], ability : 5, type : 'Magical', damage : [1, 8, 'cold'], range : "30 ft", description : "Reaction; Con save - success: no damage, fail: also 0 speed until target's next turn ends", abilitytodamage : false, dc : true, isNotWeapon : true, modifiers : ["", "Prof"], selectNow : true }], scores : [0,0,0,0,1,0] } }; FeatsList["guile of the cloud giant"] = { name : "Guile of the Cloud Giant", source : [["GotG", 18]], prerequisite : "4th level, Strike of the Giants (Cloud Strike) feat", prereqeval : function(v) { var iStrikeGiants = CurrentFeats.known.indexOf("strike of the giants"); return v.characterLevel >= 4 && iStrikeGiants !== -1 && CurrentFeats.choices[iStrikeGiants] === 'cloud strike'; }, descriptionFull : "You've manifested the confounding magic emblematic of cloud giants, granting you the following benefits:"+ "\n\n" + toUni("Ability Score Increase") + ". Increase your Strength, Constitution, or Charisma by 1, to a maximum of 20."+ "\n\n" + toUni("Cloudy Escape") + ". When a creature you can see hits you with an attack roll, you can use your reaction to give yourself resistance to that attack's damage. You then teleport to an unoccupied space that you can see within 30 feet of yourself. You can use this reaction a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", description : "As a reaction when a creature I see within 30 ft hits me with an attack roll, I can give myself resistance to that attack's damage. I then teleport to an unoccupied space that I can see within 30 ft. I can do this reaction my proficiency bonus times per long rest.", action : [["reaction", "Cloudy Escape"]], extraLimitedFeatures : [{ name : "Cloudy Escape", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }], choices : ["Strength", "Constitution", "Charisma"], "strength" : { description : "As a reaction when a creature I see within 30 ft hits me with an attack roll, I can use Cloudy Escape: I give myself resistance to that attack's damage and then I teleport to an unoccupied space that I can see within 30 ft. I can do this Proficiency Bonus per long rest. [+1 Strength]", scores : [1,0,0,0,0,0] }, "constitution" : { description : "As a reaction when a creature I see within 30 ft hits me with an attack roll, I can use Cloudy Escape: I give myself resistance to that attack's damage and then I teleport to an unoccupied space that I can see within 30 ft. I can do this Proficiency Bonus per long rest. [+1 Constitution]", scores : [0,0,1,0,0,0] }, "charisma" : { description : "As a reaction when a creature I see within 30 ft hits me with an attack roll, I can use Cloudy Escape: I give myself resistance to that attack's damage and then I teleport to an unoccupied space that I can see within 30 ft. I can do this Proficiency Bonus per long rest. [+1 Charisma]", scores : [0,0,0,0,0,1] } }; FeatsList["keenness of the stone giant"] = { name : "Keenness of the Stone Giant", source : [["GotG", 18]], prerequisite : "4th level, Strike of the Giants (Stone Strike) feat", prereqeval : function(v) { var iStrikeGiants = CurrentFeats.known.indexOf("strike of the giants"); return v.characterLevel >= 4 && iStrikeGiants !== -1 && CurrentFeats.choices[iStrikeGiants] === 'stone strike'; }, descriptionFull : "You've manifested the physical talents emblematic of stone giants, granting you the following benefits:"+ "\n\n" + toUni("Ability Score Increase") + ". Increase your Strength, Constitution, or Wisdom by 1, to a maximum of 20."+ "\n\n" + toUni("Cavernous Sight") + ". You gain darkvision with a range of 60 feet. If you already have darkvision from another source, its range increases by 60 feet."+ "\n" + toUni("Stone Throw") + ". As a bonus action, you can take a rock and make a magical attack with it. The attack is a ranged spell attack with a range of 60 feet that uses the ability score you increased with this feat as the spellcasting ability. On a hit, the rock deals 1d10 force damage, and the target must succeed on a Strength saving throw (DC equals 8 + your proficiency bonus + the spellcasting ability modifier) or have the prone condition. You can use this bonus action a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", description : "I gain +60 ft Darkvision. As a bonus action, Prof Bonus times per long rest, I can make a magical Stone Throw attack. It is a spell attack with 60 ft range that deals 1d10 force damage and the target hit must make a Str save or be knocked prone. This uses the ability increased as spellcasting ability. [+1 Str/Con/Wis]", vision : [["Darkvision", "fixed 60"], ["Darkvision", "+60"]], action : [["bonus action", "Stone Throw"]], extraLimitedFeatures : [{ name : "Stone Throw", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }], choices : ["Strength", "Constitution", "Wisdom"], "strength" : { description : "", calculate : "var iProfB = Number(How('Proficiency Bonus')), iMod = Number(What('Str Mod')); event.value = 'I gain +60 ft Darkvision. As a bonus action, ' + iProfB + ' (Prof Bonus) times per long rest, I can make a magical Stone Throw attack: a spell attack (+' + (iProfB + iMod) + ') with 60 ft range that deals 1d10 force damage and the target hit must make a Strength save (DC ' + (8 + iProfB + iMod) + ') or be knocked prone. This uses Strength as spellcasting ability. [+1 Strength]';", weaponOptions : [{ regExpSearch : /^(?=.*stone)(?=.*throw).*$/i, name : "Stone Throw", source : [["GotG", 18]], ability : 1, type : 'Spell', damage : [1, 10, 'force'], range : "60 ft", description : "Bonus action; Target Strength save (DC 8 + To Hit) or be knocked prone", abilitytodamage : false, selectNow : true }], scores : [1,0,0,0,0,0] }, "constitution" : { description : "", calculate : "var iProfB = Number(How('Proficiency Bonus')), iMod = Number(What('Con Mod')); event.value = 'I gain +60 ft Darkvision. As a bonus action, ' + iProfB + ' (Prof Bonus) times per long rest, I can make a magical Stone Throw attack: a spell attack (+' + (iProfB + iMod) + ') with 60 ft range that deals 1d10 force damage and the target hit must make a Strength save (DC ' + (8 + iProfB + iMod) + ') or be knocked prone. This uses Constitution as spellcasting ability. [+1 Con]';", weaponOptions : [{ regExpSearch : /^(?=.*stone)(?=.*throw).*$/i, name : "Stone Throw", source : [["GotG", 18]], ability : 3, type : 'Spell', damage : [1, 10, 'force'], range : "60 ft", description : "Bonus action; Target Strength save (DC 8 + To Hit) or be knocked prone", abilitytodamage : false, selectNow : true }], scores : [0,0,1,0,0,0] }, "wisdom" : { description : "", calculate : "var iProfB = Number(How('Proficiency Bonus')), iMod = Number(What('Wis Mod')); event.value = 'I gain +60 ft Darkvision. As a bonus action, ' + iProfB + ' (Prof Bonus) times per long rest, I can make a magical Stone Throw attack: a spell attack (+' + (iProfB + iMod) + ') with 60 ft range that deals 1d10 force damage and the target hit must make a Strength save (DC ' + (8 + iProfB + iMod) + ') or be knocked prone. This uses Wisdom as spellcasting ability. [+1 Wisdom]';", weaponOptions : [{ regExpSearch : /^(?=.*stone)(?=.*throw).*$/i, name : "Stone Throw", source : [["GotG", 18]], ability : 5, type : 'Spell', damage : [1, 10, 'force'], range : "60 ft", description : "Bonus action; Target Strength save (DC 8 + To Hit) or be knocked prone", abilitytodamage : false, selectNow : true }], scores : [0,0,0,0,1,0] } }; FeatsList["soul of the storm giant"] = { name : "Soul of the Storm Giant", source : [["GotG", 19]], prerequisite : "4th level, Strike of the Giants (Storm Strike) feat", prereqeval : function(v) { var iStrikeGiants = CurrentFeats.known.indexOf("strike of the giants"); return v.characterLevel >= 4 && iStrikeGiants !== -1 && CurrentFeats.choices[iStrikeGiants] === 'storm strike'; }, descriptionFull : "You've manifested the tempest magic emblematic of storm giants, granting you the following benefits:"+ "\n\n" + toUni("Ability Score Increase") + ". Increase your Strength, Constitution, or Charisma by 1, to a maximum of 20."+ "\n\n" + toUni("Maelstrom Aura") + ". As a bonus action, you surround yourself with an aura of magical wind and lightning that extends 10 feet from you in every direction but not through total cover. The aura lasts until the start of your next turn or until you are incapacitated. While the aura is active, you have resistance to lightning and thunder damage. In addition, attack rolls against you have disadvantage, and whenever another creature starts its turn within the aura, you can force the creature to make a Strength saving throw (DC equals 8 + your proficiency bonus + the modifier of the ability increased by this feat). On a failed save, the creature's speed is halved until the start of its next turn. You can use this bonus action a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", description : "As a bonus action, Prof B. per long rest, I can make a 10-ft radius Maelstrom Aura until my next turn starts: I get lightning/thunder resistance, attacks vs. me have disadv., I can force those starting their turn inside to a Str save DC 8 + Prof + Str/Con/Cha mod or halve their speed until their next turn starts. [+1 Str/Con/Cha]", action : [["bonus action", "Maelstrom Aura"]], extraLimitedFeatures : [{ name : "Maelstrom Aura", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }], choices : ["Strength", "Constitution", "Charisma"], "strength" : { description : "", calculate : "var iProfB = Number(How('Proficiency Bonus')), iMod = Number(What('Str Mod')); event.value = 'As a bonus action, ' + iProfB + '\xD7 (Prof) per long rest, I can invoke a 10-ft radius Maelstrom Aura until my next turn starts: I get lightning \u0026 thunder resistance, attacks vs. me have disadv., I can force those starting their turn inside to make a Str save DC ' + (8 + iProfB + iMod) + ' (8+Prof+Str mod) or halve their speed until their next turn starts. [+1 Str]';", scores : [1,0,0,0,0,0] }, "constitution" : { description : "", calculate : "var iProfB = Number(How('Proficiency Bonus')), iMod = Number(What('Con Mod')); event.value = 'As a bonus action, ' + iProfB + '\xD7 (Prof) per long rest, I can invoke a 10-ft radius Maelstrom Aura until my next turn starts: I get lightning \u0026 thunder resistance, attacks vs. me have disadv., I can force those starting their turn inside to make a Str save DC ' + (8 + iProfB + iMod) + ' (8+Prof+Con mod) or halve their speed until their next turn starts. [+1 Con]';", scores : [0,0,1,0,0,0] }, "charisma" : { description : "", calculate : "var iProfB = Number(How('Proficiency Bonus')), iMod = Number(What('Cha Mod')); event.value = 'As a bonus action, ' + iProfB + '\xD7 (Prof) per long rest, I can invoke a 10-ft radius Maelstrom Aura until my next turn starts: I get lightning \u0026 thunder resistance, attacks vs. me have disadv., I can force those starting their turn inside to make a Str save DC ' + (8 + iProfB + iMod) + ' (8+Prof+Cha mod) or halve their speed until their next turn starts. [+1 Cha]';", scores : [0,0,0,0,0,1] } }; FeatsList["vigor of the hill giant"] = { name : "Vigor of the Hill Giant", source : [["GotG", 19]], prerequisite : "4th level, Strike of the Giants (Hill Strike) feat", prereqeval : function(v) { var iStrikeGiants = CurrentFeats.known.indexOf("strike of the giants"); return v.characterLevel >= 4 && iStrikeGiants !== -1 && CurrentFeats.choices[iStrikeGiants] === 'hill strike'; }, descriptionFull : "You've manifested the resilience emblematic of hill giants, granting you the following benefits:"+ "\n\n" + toUni("Ability Score Increase") + ". Increase your Strength, Constitution, or Wisdom by 1, to a maximum of 20."+ "\n\n" + toUni("Bulwark") + ". When you are subjected to an effect that would move you at least 5 feet or give you the prone condition, you can use your reaction to steady yourself. You aren't moved and don't have the prone condition."+ "\n" + toUni("Iron Stomach") + ". Whenever you eat food as part of a short rest and spend one or more Hit Dice to regain hit points, you regain additional hit points equal to your Constitution modifier + your proficiency bonus.", description : "Bulwark: When I would be moved or knocked prone I can use my reaction to prevent that. Iron Stomach: Whenever I eat food as part of a short rest and spend HD to regain hit points, I regain additional hp equal to my Constitution modifier + my proficiency bonus. [+1 Strength/Constitution/Wisdom]", action : [["reaction", "Bulwark"]], choices : ["Strength", "Constitution", "Wisdom"], "strength" : { description : "Bulwark: When I would be moved or knocked prone I can use my reaction to prevent that. Iron Stomach: Whenever I eat food as part of a short rest and spend HD to regain hit points, I regain additional hp equal to my Con" + (typePF ? "stitution" : "") + " modifier + my proficiency bonus. [+1 St" + (typePF ? "rength" : "") + "]", scores : [1,0,0,0,0,0] }, "constitution" : { description : "Bulwark: When I would be moved or knocked prone I can use my reaction to prevent that. Iron Stomach: Whenever I eat food as part of a short rest and spend HD to regain hit points, I regain additional hp equal to my Con" + (typePF ? "stitution" : "") + " modifier + my proficiency bonus. [+1 Con" + (typePF ? "stitution" : "") + "]", scores : [0,0,1,0,0,0] }, "wisdom" : { description : "Bulwark: When I would be moved or knocked prone I can use my reaction to prevent that. Iron Stomach: Whenever I eat food as part of a short rest and spend HD to regain hit points, I regain additional hp equal to my Con" + (typePF ? "stitution" : "") + " modifier + my proficiency bonus. [+1 Wis" + (typePF ? "dom" : "") + "]", scores : [0,0,0,0,1,0] } }; // Feats - Rune Shaper var GotG_RuneShaper = [ "You've studied the magic of Giant runes, granting you the following benefits:", ">>Comprehend Languages<<. You learn the comprehend languages spell. You can cast this spell without expending a spell slot, and you must finish a long rest before you can cast it in this way again. You can also cast this spell using any spell slots you have.", ">>Rune Magic<<. You know a number of runes equal to half your proficiency bonus (rounded down), chosen from the Rune Spells table. Whenever you finish a long rest, you can inscribe each rune you know onto one nonmagical weapon, armor, piece of clothing, or other object you touch. You temporarily learn the 1st-level spells that correspond to the runes you inscribed, as specified on the Rune Spells table, and you know those spells until you finish a long rest, when the runes fade. While you are wearing or carrying any rune-marked object, you can cast the spells associated with those runes using any spell slots you have.", "You can also invoke a rune inscribed on an object you are wearing or carrying and cast its associated spell without expending a spell slot or using material components. Once you cast the spell in this way, you can't do so again until you finish a long rest. Your spellcasting ability for this feat is Intelligence, Wisdom, or Charisma (choose when you select this feat).", "Each time you gain a level, you can replace one of the runes you know with another one from the Rune Spells table below.\n", ">>Rune\tSpell<<", "Cloud\tFog Cloud", "Death\tInflict Wounds", "Dragon\tChromatic Orb", "Enemy\tDisguise Self", "Fire\tBurning Hands", "Friend\tSpeak with Animals", "Frost\tArmor of Agathys", "Hill\tGoodberry", "Journey\tLongstrider", "King\tCommand", "Mountain\tEntangle", "Stone\tSanctuary", "Storm\tThunderwave" ]; FeatsList["rune shaper"] = { name : "Rune Shaper", source : [["GotG", 18]], prerequisite : "Spellcasting feature or Rune Carver background", prereqeval : function(v) { return v.isSpellcastingClass || CurrentBackground.known.indexOf('rune carver') !== -1 || /rune shaper/i.test(What("Background Feature")); }, descriptionFull : GotG_RuneShaper.join("\n ").replace(/>>(.*?)<>(.*?)<>Stalwart Song<<. Whenever you make a Charisma check while attuned to the harp, you can treat a roll of 9 or lower on the die as a 10.", ">>Feast of Plenty<<. If you spend 10 minutes playing the harp, you can cast the heroes' feast spell from it. Once this property is used, it can't be used again until 1d10 + 10 days have passed.", ">>Soothing Melody<<. As an action, you can use the harp to cast the calm emotions spell (save DC 19). When the spell is cast using the harp, its duration increases to 1 hour, provided you maintain concentration on the spell. This property can be used five times, and it regains all uses at dawn.", ">>Sentience<<. The harp is a sentient, chaotic good object with an Intelligence of 13, a Wisdom of 15, and a Charisma of 20. It has hearing and darkvision to a range of 120 feet.", "The harp can speak, read, and understand Common and Giant. It can also communicate telepathically with the creature attuned to it.", "The harp has a dramatic and pompous personality, taking extreme pride in the quality of music produced from its strings. If the harp is shorter than 6 feet tall, it bemoans its height." ]; MagicItemsList["harp of gilded plenty"] = { name : "Harp of Gilded Plenty", source : [["GotG", 112]], type : "wondrous item", rarity : "legendary", attunement : true, descriptionFull : GotG_HarpOfGildedPlenty.join("\n ").replace(/>>(.*?)<>(.*?)<= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'lawful outer plane (force, guidance)'; }, scorestxt : "+1 to one ability score of your choice", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }; FeatsList["baleful scion"] = { name : "Baleful Scion", source : [["P:AitM", 10]], description : "Once per turn, when I damage a creature I can see within 60 ft, I can also deal 1d6 + my Proficiency Bonus necrotic damage to it. I then regain a number of hit points equal to this necrotic damage dealt. I can do this a number of times equal to my Proficiency Bonus per long rest. [+1 to any one ability score]", descriptionFull : "You can channel cosmic forces of evil to gain these benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase one ability score of your choice by 1, to a maximum of 20."+ "\n " + toUni("Life-Draining Grasp") + ". Once per turn, when you damage a creature you can see within 60 feet of yourself, you can also deal necrotic damage to it. The necrotic damage equals 1d6 + your proficiency bonus, and you regain a number of hit points equal to this necrotic damage dealt. You can use this benefit a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th-level, Scion of the Outer Planes (Evil Outer Plane) feat", prereqeval : function(v) { var iParentFeat = CurrentFeats.known.indexOf("scion of the outer planes"); return v.characterLevel >= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'evil outer plane (necrotic, chill touch)'; }, scorestxt : "+1 to one ability score of your choice", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }; FeatsList["cohort of chaos"] = { name : "Cohort of Chaos", source : [["P:AitM", 10]], description : "When I roll a 1 or a 20 on an attack roll or save, a the magic of chaos flares up and I roll on the Chaotic Flare table to determine what happens (see notes for table). As a bonus action, my Proficiency Bonus per long rest, I can force a flare to happen. [+1 to any one ability score]", descriptionFull : "You can channel cosmic forces of chaos to gain these benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase one ability score of your choice by 1, to a maximum of 20."+ "\n " + toUni("Chaotic Flare") + ". When you roll a 1 or a 20 on an attack roll or a saving throw, the magic of chaos flows through you. Roll a d4 and consult the table below to determine what happens. A flare lasts until the end of your next turn, and a new flare can't occur until after the first flare ends."+ toUni("\n\nd4\tFlare")+ "\n 1\tBattle Fury: A creature of your choice that you can see is filled with reckless fury. It has advantage on attack rolls and disadvantage on ability checks."+ "\n 2\tDisruption Field: Waves of energy ripple around you. Every creature that starts its turn within 5 feet of you, or that moves into that area for the first time on a turn, takes 1d8 force damage."+ "\n 3\tUnbound: When you move, you can use some or all of your walking speed to teleport yourself once, along with any equipment you're wearing or carrying, up to the distance used to an unoccupied space that you can see."+ "\n 4\tWailing Winds: Winds swirl in a 15-foot-radius sphere centered on you. You and any other creatures in that area have disadvantage on Wisdom saving throws."+ "\n\n You can also forcibly release a chaotic flare as a bonus action, rolling on the table as normal to determine the effects. You can use this bonus action a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th-level, Scion of the Outer Planes (Chaotic Outer Plane) feat", prereqeval : function(v) { var iParentFeat = CurrentFeats.known.indexOf("scion of the outer planes"); return v.characterLevel >= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'chaotic outer plane (poison, minor illusion)'; }, scorestxt : "+1 to one ability score of your choice", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", additional : "force flare", action : [["bonus action", " (force flare)"]], toNotesPage : [{ name : "Chaotic Flare Table", note : [ "When I roll a 1 or a 20 on an attack roll or a saving throw, the magic of chaos flows through Me. I roll a d4 on the table below to determine what happens. A flare lasts until the end of my next turn, and a new flare can't occur until after the first flare ends.", "As a bonus action, I can forcibly release a chaotic flare, rolling on the table as normal to determine the effects. I can use this bonus action a number of times equal to my proficiency bonus, and I regain all expended uses when you finish a long rest.", "\n d4 Flare", "1 Battle Fury: A creature of my choice that I can see is filled with reckless fury. It has advantage on attack rolls and disadvantage on ability checks.", "2 Disruption Field: Waves of energy ripple around me. Every creature that starts its turn within 5 ft of me, or that moves into that area for the first time on a turn, takes 1d8 force damage.", "3 Unbound: When I move, I can use some or all of my walking speed to teleport once, along with any equipment I'm wearing or carrying, up to the distance used to an unoccupied space that I can see.", "4 Wailing Winds: Winds swirl in a 15-ft radius sphere centered on me. Creatures in that area, myself included, have disadvantage on Wisdom saving throws." ] }] }; FeatsList["outlands envoy"] = { name : "Outlands Envoy", source : [["P:AitM", 10]], description : "I can cast Misty Step and Tongues each once per long rest without requiring a spell slot or material components. I can also cast them using a spell slot as normal. My spellcasting ability for these spells is the same as the one for the Scion of the Outer Planes feat. [+1 to any one ability score]", descriptionFull : "You have spent significant time in Sigil or the Outlands, the crossroads of the multiverse. Being steeped in converging planar energies grants you these benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase one ability score of your choice by 1, to a maximum of 20."+ "\n " + toUni("Crossroads Emissary") + ". You learn the misty step and tongues spells. You can cast each spell once using this feat without a spell slot, and you must finish a long rest before you can cast that spell in this way again. When you cast tongues using this feat, you require no material components. You can also cast these spells using spell slots you have of the appropriate level. The spells' spellcasting ability is the one chosen when you gained the Scion of the Outer Planes feat.", prerequisite : "4th-level, Scion of the Outer Planes (the Outlands) feat", prereqeval : function(v) { var iParentFeat = CurrentFeats.known.indexOf("scion of the outer planes"); return v.characterLevel >= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'the outlands (psychic, mage hand)'; }, scorestxt : "+1 to one ability score of your choice", spellcastingAbility : "scion of the outer planes", spellcastingBonus : [{ name : "Crossroads Emissary", spells : ["misty step", "tongues"], selection : ["misty step", "tongues"], firstCol : "oncelr+markedbox", times : 2 }], spellChanges : { "tongues" : { components : SpellsList.tongues.components.replace("M", "M*"), compMaterial : "When using a spell slot: "+SpellsList.tongues.compMaterial, changes : "Using Outlands Envoy, I can cast Tongues once per long rest without expending a spell slot or requiring material components." } } }; FeatsList["planar wanderer"] = { name : "Planar Wanderer", source : [["P:AitM", 11]], description : "After each long rest, I can gain acid, cold, or fire resistance, that lasts until my next long rest ends. I know the direction to the last portal I used while on the same plane as it. As an action, I can try to open or close a portal (portal cracker). As an action once per long rest, I can detect portals (portal sense). See notes.", descriptionFull : "You can draw on the forces of the multiverse to survive cosmic extremes and to traverse its infinite realms, granting you these benefits:"+ "\n " + toUni("Planar Adaptation") + ". When you finish a long rest, you gain resistance to either acid, cold, or fire damage (your choice) until you finish your next long rest."+ "\n " + toUni("Portal Cracker") + ". Your experience with portals allows you to open them without a portal key. As an action, you can concentrate on a portal you're aware of that is within 5 feet of yourself and make a DC 20 Intelligence (Arcana) check. On a failed check, you take 3d8 psychic damage and can't use this benefit on that portal again until you finish a long rest. On a successful check, you can force the portal open or closed for 1 hour. For that duration, the portal doesn't respond to its portal key unless a creature employing the key succeeds on a DC 20 Intelligence (Arcana) check as an action."+ "\n " + toUni("Portal Sense") + ". You know the direction to the last planar portal you used while you and the portal are on the same plane of existence. Moreover, as an action, you can detect the location of any portals within 30 feet of you that aren't behind total cover. Once you detect a portal with this action, you can't use the action again until you finish a long rest.", prerequisite : "4th-level, Scion of the Outer Planes feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("scion of the outer planes") !== -1; }, dmgres : ["Acid/Cold/Fire"], action : [["action", " (Portal Cracker)"], ["action", " (Portal Sense)"]], usages : 1, recovery : "long rest", additional : "Portal Sense", toNotesPage : [{ name : "Portal Cracker", note : [ "My experience with portals allows me to open them without a portal key.", "As an action, I can concentrate on a portal I'm aware of that is within 5 ft of me and make a DC 20 Intelligence (Arcana) check.", "On a failed check, I take 3d8 psychic damage and can't do this on that portal again until I finish a long rest.", "On a successful check, I can force the portal open or closed for 1 hour. For that duration, the portal doesn't respond to its portal key unless a creature employing the key succeeds on a DC 20 Intelligence (Arcana) check as an action." ] }, { name : "Portal Sense", additional : "1\xD7 per long rest", note : [ "I know the direction to the last planar portal I used while I and the portal are on the same plane of existence.", "As an action, I can detect the location of any portals within 30 ft of me that aren't behind total cover.", "Once I detect a portal with this action, I can't use the action again until I finish a long rest." ], amendTo : "Portal Cracker" }] }; FeatsList["righteous heritor"] = { name : "Righteous Heritor", source : [["P:AitM", 11]], description : "As a reaction when I or a creature I can see within 30 ft takes damage, I can reduce the damage taken by 1d10 + my Proficiency Bonus. I can do this a number of times equal to my Proficiency Bonus per long rest. [+1 to any one ability score]", descriptionFull : "You can channel cosmic forces of good to gain these benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase one ability score of your choice by 1, to a maximum of 20."+ "\n " + toUni("Soothe Pain") + ". When you or a creature within 30 feet of you takes damage, you can use your reaction to reduce that damage by 1d10 + your proficiency bonus. You can use this benefit a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th-level, Scion of the Outer Planes (Good Outer Plane) feat", prereqeval : function(v) { var iParentFeat = CurrentFeats.known.indexOf("scion of the outer planes"); return v.characterLevel >= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'good outer plane (radiant, sacred flame)'; }, scorestxt : "+1 to one ability score of your choice", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", action : [["reaction", ""]] }; // Magic Items from Sigil and the Outlands MagicItemsList["mimir"] = { name : "Mimir", source : [["P:AitM", 13]], type : "wondrous item", rarity : "rare", attunement : true, description : "As a bonus action, I can stow or toss this skull-shaped device in the air to activate it, making it float 1d3 ft near me. Once per dawn as an action while active, I can use it to cast Legend Lore. It speaks the revieled lore aloud. While active, it answers questions about the planes of existence I or someone I designate ask it.", descriptionLong : "As a bonus action, I can toss this skull-shaped device covered with planar sigils into the air to activate it, causing it to float 1d3 ft near me but considered worn by me. I can use another bonus action to seize and stow it. It has AC 22, 25 HP, immunity to poison and psychic damage, and resistance to all other damage. Another can use an action to grab it with a successful unarmed strike or DC 22 Acrobatics check. Once per dawn as an action while active, I can use it to cast Legend Lore. It speaks the revealed lore aloud. While active, it answers questions about the planes of existence I or someone I designate ask it.", descriptionFull : "This skull-shaped device is filled with knowledge. The device weighs 5 pounds and is covered with subtle etchings of planar sigils."+ "As a bonus action, you can toss the device into the air, whereupon it floats at a distance of 1d3 feet from you and you can access its properties. While the mimir is floating, a creature other than you can use an action to grasp or net the device, either by making a successful unarmed strike against AC 22 or a successful DC 22 Dexterity (Acrobatics) check. You can use a bonus action to seize and stow the device."+ "The device has AC 22, 25 hit points, immunity to poison and psychic damage, and resistance to all other damage. It is considered to be an object that is being worn while it is floating near you."+ toUni("\n Esoteric Knowledge") + ". While the device is floating, you can use an action to cast legend lore from the device. The device speaks the revealed lore aloud. Once this property has been used, it can't be used again until the next dawn."+ toUni("\n Planar Knowledge") + ". The device knows basic, useful information about the planes of existence. While the device is floating, it verbally answers questions you or anyone you designate poses to it about that topic. It knows the information about the planes in the Dungeon Master's Guide, as well as basic information about the gate-towns of the Outlands (presented in chapter 3 of Sigil and the Outlands).", action : [["bonus action", " (activate/stow)"]], weight : 5, usages : 1, recovery : "dawn", additional : "Legend Lore", spellcastingBonus : [{ name : "once per dawn", spells : ["legend lore"], selection : ["legend lore"], firstCol : "oncelr" }] }; MagicItemsList["portal compass"] = { name : "Portal Compass", source : [["P:AitM", 13]], type : "wondrous item", rarity : "uncommon", description : "This portable arcane instrument points in the direction of the last portal it passed through while it and the portal are on the same plane of existence. If that portal no longer exists, the needle becomes static until the compass passes through a new portal.", descriptionFull : "This portable arcane instrument points in the direction of the last portal it passed through while it and the portal are on the same plane of existence. If that portal no longer exists, the needle becomes static until the compass passes through a new portal." }; MagicItemsList["sensory stone"] = { name : "Sensory Stone", source : [["P:AitM", 13]], type : "wondrous item", rarity : "uncommon", description : "This stone stores a single experience. As an action, one touching the stone can experience it harmlessly. As a reaction, I can replace the experience within with a new, six-second sensation experienced by a creature within 30 ft. As a bonus action, I can destroy it to end the charmed or frightened effect on myself.", descriptionFull : "This small, smooth stone contains the essence of a single experience."+ "As an action, you or a willing creature you designate can touch the stone and experience the sensation as if it happened to the designated creature. The illusory experience is fleeting and harmless, however real it might feel in the moment."+ toUni("\n Record Sensation") + ". You can use your reaction to record a short sensation lasting no longer than 6 seconds experienced by a creature of your choice within 30 feet of yourself, infusing the essence of that experience into the stone. This replaces any sensation already stored within the stone."+ toUni("\n Siphon Sensation") + ". As a bonus action, you can draw on the stone's magic to end the charmed or frightened condition on yourself, destroying the stone in the process.", action : [ ["action", " (experience)"], ["reaction", " (record)"], ["bonus action", " (destroy to end charmed/frightened)"] ] }; // Spells from Sigil and the Outlands SpellsList["gate seal"] = { name : "Gate Seal", classes : ["sorcerer", "warlock", "wizard"], source : [["P:AitM", 12]], level : 4, school : "Abjur", time : "1 a", range : "60 ft", components : "V,S,M\u2020", compMaterial : "A broken portal key, which the spell consumes", duration : "24 h", description : "30-ft cube wherein all portals close and can't be opened, and no planar travel; SL6: until dispelled", descriptionFull : "You fortify the fabric of the planes in a 30-foot cube you can see within range. Within that area, portals close and can't be opened for the duration. Spells and other effects that allow planar travel or open portals, such as gate or plane shift, fail if used to enter or leave the area. The cube is stationary."+ AtHigherLevels + "When you cast this spell using a spell slot of 6th level or higher, the spell lasts until dispelled." }; SpellsList["warp sense"] = { name : "Warp Sense", classes : ["sorcerer", "warlock", "wizard"], source : [["P:AitM", 12]], level : 2, school : "Div", time : "1 a", range : "Self", components : "V,S,M", compMaterial : "A razorvine leaf", duration : "Conc, 1 min", description : "Know presence of portals in 30 ft; 1 a DC 15 spell ability chk to see destination \u0026 portal key, ends spell", descriptionFull : "For the duration, you sense the presence of portals, even inactive ones, within 30 feet of yourself."+ "\n If you detect a portal in this way, you can use your action to study it. Make a DC 15 ability check using your spellcasting ability. On a successful check, you learn the destination plane of the portal and what portal key it requires, then the spell ends. On a failed check, you learn nothing and can't study that portal again using this spell until you cast it again."+ "\n The spell can penetrate most barriers but is blocked by 1 foot of stone, 1 inch of common metal, a thin sheet of lead, or 3 feet of wood or dirt." }; // Beast from Turn of Fortune's Wheel // Whirlwyrm is just a giant crocodile under a different name, it has been added to the SRD code as a `nameAlt` ================================================ FILE: WotC material/pub_20231030_CoA.js ================================================ var iFileName = "pub_20231030_CoA.js"; RequiredSheetVersion("13.1.14"); // This file adds the magic items from the Chains of Asmodeus adventure from Extra Life to MPMB's Character Record Sheet SourceList["CoA"] = { name : "Chains of Asmodeus", abbreviation : "CoA", group : "Extra Life", campaignSetting : "Forgotten Realms", url : "https://www.dmsguild.com/product/457996/Chains-of-Asmodeus", date : "2023/10/30", defaultExcluded : true }; CoA_Corruption = { process : function(bAddRemove, sItem) { // Make a variable to remember the settings for this if (!CurrentVars.CoA_Corruption) { CurrentVars.CoA_Corruption = { items : [], present : false, savedAlert : false }; } var bProcessIt = false; var bItemPresent = CurrentVars.CoA_Corruption.items.indexOf(sItem) !== -1; // If removing, test if present and the triggering item is in the list if (!bAddRemove && bItemPresent) { CurrentVars.CoA_Corruption.items.eject(sItem); if (CurrentVars.CoA_Corruption.items.length !== 0) { // Still items present, so don't change anything return; } else { // Removing note in final step if present bProcessIt = CurrentVars.CoA_Corruption.present ? true : false; // Make pop-up appear at next corrupting item addition CurrentVars.CoA_Corruption.savedAlert = false; } } else if (bAddRemove) { // Adding // Add the item to the list of items processed if (!bItemPresent) CurrentVars.CoA_Corruption.items.push(sItem); if (CurrentVars.CoA_Corruption.savedAlert) { // The state of the alert was saved, so don't prompt and do nothing return; } else if (!CurrentVars.CoA_Corruption.present) { // If not present and dialog state was not saved, ask the user if the rules should be added to a notes page var oMsg = { cTitle : "Show Infernal Item Corruption (DM-only) Rules?", cMsg : 'The cursed infernal item "' + MagicItemsList[sItem].name + '" can cause corruption.\nDo you want to add the Infernal Item Corruption rules intended for the DM to a Notes page on your character sheet for reference?\n\nIMPORTANT: these rules are not intended to be read by players, only by the DM.\n\nThese notes will be automatically removed when you remove all corrupting items.', nIcon : 2, // Question nType : 2, // Yes,No oCheckbox : { cMsg : "Don't ask me again next time I add a corrupting item (unless I have removed all corrupting items)", bInitialValue : true, bAfterValue : false } }; // Add the note if "Yes" was clicked bProcessIt = app.alert(oMsg) === 4; // Save the checkbox state CurrentVars.CoA_Corruption.savedAlert = oMsg.oCheckbox.bAfterValue; } } if (bProcessIt) { CurrentVars.CoA_Corruption.present = bAddRemove; processToNotesPage(bAddRemove, CoA_Corruption.toNotesPage, "items", {}, false, ["Chains of Asmodeus, page 271"]); } SetStringifieds("vars"); // Save the global variable to a field }, toNotesPage : [{ // intentionally doesn't include a source name : "INFERNAL ITEM CORRUPTION", popupName : 'The "Infernal Item Corruption" rules from Chains of Asmodeus (page 271)', note : [ "", "Cursed infernal items can be used by mortals, but they always require attunement. Once attuned, the mortal risks an increasing chance of being corrupted by the item., eventually transforming into a devil.", " Mortals that receive express permission from Asmodeus, or that make an infernal contract to acquire a magic item, don't suffer these corrupting effects.", "", "1. STAGE ONE CORRUPTION: BEGINNINGS", "Once a character has attuned to a cursed infernal magic item or artifact, it begins the infernal corruption process. Each time that character finishes a long rest, they must make a DC 10 Wisdom save (tieflings have advantage on this save). On a success, the character suffers no effects, but the DC increases by 1 the next time they must make this save. On a failure, the character progresses to Stage Two unless Dispel Evil and Good is cast on them before their next long rest.", " While in Stage One, the infernal corruption can be prevented by breaking attunement to the corrupting item. This prevents further Wisdom saves and resets the DC of the save, if the character were to attune to the item again.", "", "2. STAGE TWO CORRUPTION: SUFFERINGS", "While in Stage Two, the character becomes delusional, seeing plots against them where there are none. Additionally, each time they rest, they experience terrifying visions and infernal whispers. Whenever they finish a long rest, they take 1d12 necrotic damage, which ignores resistances and immunities and can't be healed until a Dispel Evil and Good or Remove Curse spell is cast on them. Once the character has taken this damage six times, they progress to Stage Three.", " While in Stage Two, the infernal corruption can be removed with one of the following spells: Divine Word, Heal, Mass Heal, True Polymorph, True Resurrection, or Wish.", "\n3. STAGE THREE CORRUPTION: DEPARTINGS", "While in Stage Three, the character begins to suffer physical transformation, and slowly embraces evil. After they finish their first long rest upon entering Stage Three they must roll on the table below to determine how the infernal curse starts shaping them into a devil. In addition, a part-devil character is rendered infertile and detects as a Fiend to Detect Evil and Good spells and similar magic.", "", " d10\tTransformation", " 1\tTheir fingertips elongate into claws", " 2\tNon-functional leathery wings sprout from their back", " 3\tDevilish horns grow upon their head", " 4\tEach night more and more of their skin burns, leaving charred patches", " 5\tOne eye turns milky white, the other turns yellow", " 6\tTheir spine painfully elongates into a skeletal tail", " 7\tTheir skin starts to calcify, turning portions into bone", " 8\tTheir feet painfully twist to resemble cloven hooves", " 9\tAll their hair falls out, replaced by tiny spikes", " 10\tAll their teeth fall out, with new jagged teeth tearing through the gums each morning", "", "The character begins to experience waking whispers pushing them towards evil and they suffer terrifying visions whenever they rest, breaking their spirit and pushing them further to evil. Each time they finish a short or long rest, they must make a DC 10 Wisdom save. If they performed at least one evil act, such as making a decision that increased the suffering of others, they make the save with disadvantage. When they fail the save, they progress to Stage Four.", " While in Stage Three, the infernal corruption can be ended with one of the following spells: True Polymorph, True Resurrection or Wish.", "", "4. STAGE FOUR CORRUPTION: FINALITIES", "When the character finishes their first long rest after reaching Stage Four, the character's alignment shifts to lawful evil. They're now bound by the devil's code, requiring them to honor any pact made and acquire souls in service of Asmodeus. Lastly, their physical form changes, morphing to resemble a devil (DM's choice).", " Once the character reaches Stage Four, the only two cures are the Wish spell, which counts as beyond the scope of the spell, or by signing an infernal contract with Asmodeus to reclaim their soul." ].join("\n") }], description : "\n " + toUni("Corrupting") + '. This item corrupts. See the "Infernal Item Corruption" rules (CoA 271).' } MagicItemsList["amulet of appearance"] = { name : "Amulet of Appearance", source : [["CoA", 267]], type : "wondrous item", rarity : "rare", attunement : true, description : "My equipment always shines as if just polished and my wounds do not appear to others. I'm immune to being frightened and poisoned. However, whenever I would otherwise be affected by these conditions, a random non-evil humanoid on the material plane whom I have met is affected instead. I know this.", descriptionFull : "Your armor, weapons, and other equipment always shine as if just polished. Even if you're wounded, your wounds do not appear to others. You're immune to the frightened and poisoned conditions, as these would otherwise ruin your elegant appearance. However, whenever you would otherwise have been affected by one of these conditions, a random non-evil Humanoid on the Material Plane whom you have previously met gets the condition instead. You know this.", savetxt : { immune : ["frightened", "poisoned"] } } MagicItemsList["amulet of betrayal"] = { name : "Amulet of Betrayal", source : [["CoA", 267]], type : "wondrous item", rarity : "very rare", attunement : true, description : "As a bonus action, I can move one of the following conditions from myself to an ally within 60 ft: blinded, deafened, frightened, poisoned, stunned, exhaustion. When transferring exhaustion, all my exhaustion levels are moved. If the chosen ally is immune to a transferred condition, the transfer fails.", descriptionFull : "You can use a bonus action to move one of the following conditions from yourself to an ally within 60 feet of you: blinded, deafened, frightened, poisoned, stunned, exhaustion. When transferring exhaustion, move all your exhaustion levels. If the chosen ally is immune to a transferred condition, the transfer fails.", action : [["bonus action", ""]] } MagicItemsList["amulet of duplicity"] = { name : "Amulet of Duplicity", source : [["CoA", 267]], type : "wondrous item", rarity : "very rare", attunement : true, cursed: true, description : "When I die, a copy of my naked corpse is left in my place while I'm brought to an extradimensional space. After 24 hours, I heal 1 hp and am brought back to the place I left, but with a different face. I have disadv. on Persuasion checks to reveal who I am. I can't relay this information and forget it when unattuning.", descriptionLong : "When I die, the amulet leaves a copy of my naked corpse in my place while I'm transported to an extradimensional space, stable at 0 hp. After 24 hours, I regain 1 hp and am returned to the place I left with different facial features. Only a Wish spell can restore my true identity. I have disadvantage on Charisma (Persuasion) checks to reveal myself. The amulet is cursed. Identifying it only shows it prevents death and one can't explain its power once attuned. When unattuned, one immediately forgets what the amulet does. A Remove Curse spell reveals the details of the curse but doesn't lift it from the amulet.", descriptionFull : "When you die, you're transported to an extradimensional space where you're stabilized at 0 hit points and kept in that state. The amulet creates a perfect copy of your corpse and places it where you were just before you died, but without any of your worn or carried items. After 24 hours, you regain 1 hit point and are returned to the location of your near-death. Everything about you is the same, except that your facial features are entirely different from before. Only a Wish spell can restore your true identity."+ "\n Until then, you have disadvantage on any Charisma (Persuasion) checks to attempt to reveal who you really are."+ "\n " + toUni("Curse") + ". An Identify spell or similar reveals only that the amulet can prevent death. Once you attune to the amulet, you can't describe its ability to any other creature, and if unattuned, you immediately forget what the amulet does. A Remove Curse spell reveals the details of the curse but does not remove it from the amulet." } MagicItemsList["bracers of asmodeus"] = { name : "Bracers of Asmodeus", source : [["CoA", 267]], type : "wondrous item", rarity : "rare", attunement : true, cursed: true, description : "These are cursed, corrupting, and give +2 AC while not wearing armor or using a shield. I can't unattune to them. They make me obsessed with scheming, manipulation, and always bartering for better deals, often using blackmail. If I decline an opportunity to make money at another's expense, I take 3d10 necrotic damage.", descriptionFull : "You have a +2 bonus to AC while wearing these bracers, if you do not wear armor or use a shield at the same time."+ "\n " + toUni("Curse") + ". While attuned to the bracers, you become obsessed with plotting, scheming, and manipulation. You always barter for better deals, often using secrets or leveraging other offers in the process. If you ever decline an opportunity to better yourself financially at another's expense, you immediately take 3d10 necrotic damage. Only the Remove Curse spell allows you to end attunement to this item."+ CoA_Corruption.description, eval : function() { CoA_Corruption.process(true, "bracers of asmodeus") }, removeeval : function() { CoA_Corruption.process(false, "bracers of asmodeus") }, extraAC : [{ mod : 2, magic : true, text : "I gain a +2 bonus to AC while I'm not wearing armor or using a shield.", stopeval : function (v) { return v.wearingArmor || v.usingShield; } }] } MagicItemsList["canian fork"] = { name : "Canian Fork", source : [["CoA", 267]], type : "weapon (trident)", rarity : "rare", attunement : true, cursed: true, description : "This magic, cursed, corrupting trident gives me +3 bonus to attack and damage rolls made with. I can't willing to part with it and can't unattune to it without Remove Curse. I'm vulnerable to radiant damage. When I receive magical healing I have to succeed on a DC 15 Con save or the healing has no effect.", descriptionFull : "You have a +3 bonus to attack and damage rolls made with this magic weapon. In addition, you can make one additional attack with it as a bonus action on each of your turns."+ "\n " + toUni("Curse") + ". You're unwilling to part with this weapon while attuned to it. You're also vulnerable to radiant damage and each time you receive magical healing, you must make a DC 15 Constitution saving throw."+ "\n On a failed save, the healing has no effect. Only the Remove Curse spell allows you to end attunement to this item."+ CoA_Corruption.description, eval : function() { CoA_Corruption.process(true, "canian fork") }, removeeval : function() { CoA_Corruption.process(false, "canian fork") }, weight : 4, savetxt : { text : ["Vulnerable to radiant damage"] }, action : [["bonus action", " attack"]], weaponOptions : [{ baseWeapon : "trident", regExpSearch : /^(?=.*canian)(?=.*fork).*$/i, name : "Canian Fork", source : [["CoA", 267]], description : "Thrown, versatile (1d8); Bonus action: 1 attack", modifiers : [3, 3], selectNow : true }] } MagicItemsList["condensed order"] = { name : "Condensed Order", source : [["CoA", 267]], type : "wondrous item", rarity : "uncommon", description : "Once as an action, I can snuff this silvery powder extracted from those of a lawful persuasion, or administer it to another. The consumer is immune to the flesh warping feature of demonic ichor and gains advantage on saves against effects from a demonic source. These benefits last for 8 hours.", descriptionFull : "Condensed Order is a silvery powder that can be extracted from those of a lawful persuasion. Devils bound for the warfronts of Avernus take flasks and snuff boxes of the stuff to fortify themselves against exposure to the raw chaos of demons. Taking the substance requires an action and makes you immune to the flesh warping feature of demonic ichor. It also gives you advantage on saving throws against any effect from a demonic source. These benefits last for 8 hours." } MagicItemsList["demonbone polearm"] = { name : "Demonbone Polearm", nameTest : "Demonbone", source : [["CoA", 268]], type : "weapon (polearm)", rarity : "very rare", attunement : true, cursed: true, description : "As a reaction when damaged by a creature in reach, I can attack it once with this +2 polearm. It is cursed, I can't unattune to it and have disadv. with other weapons. If I take damage, I must make a DC 15 Wis save or go berserk: I attack those near to me until none remain in 60 ft or I'm calmed with a DC 15 Persuasion" + (typePF ? "." : "check."), descriptionLong : "I have a +2 bonus on attack and damage rolls made with this magic quarterstaff. As a reaction when I'm damaged by a creature in this weapon's reach, I can make one melee attack against it. This weapon is cursed, I'm unwilling to part with it, can't unattune to it without Remove Curse, and have disadvantage with other weapons. When I take damage, I must make a DC 15 Wisdom save or go berserk: I attack the nearest creature using this weapon with all my attacks, moving to the next nearest until none remain that I can sea or hear within 60 ft of me. I can also be calmed with a DC 15 Charisma (Persuasion) check.", descriptionFull : "You have a +2 bonus to attack and damage rolls made with this magic weapon. In addition, when you're damaged by a creature in reach, you may use your reaction to make one melee attack against it with this weapon."+ "\n " + toUni("Curse") + ". You're unwilling to part with this weapon while attuned to it. While attuned, you have disadvantage on attack rolls with weapons other than this one."+ "\n Whenever a hostile creature damages you, you must succeed on a DC 15 Wisdom saving throw or go berserk. While berserk, you must use your action on each of your turns to attack the creature nearest to you with the weapon. If you can make extra attacks as part of the Attack action, you use those extra attacks, moving to attack the next nearest creature after you fell your current target. If you have multiple possible targets, you attack one at random."+ "\n You're berserk until you start your turn with no creatures within 60 feet of you that you can see or hear. Alternatively, an ally can use an action to make a DC 15 Charisma (Persuasion) check and if successful, you're no longer berserk. Only the Remove Curse spell allows you to end attunement to this item."+ CoA_Corruption.description, eval : function() { CoA_Corruption.process(true, "demonbone polearm") }, removeeval : function() { CoA_Corruption.process(false, "demonbone polearm") }, chooseGear : { type : "weapon", prefixOrSuffix : "suffix", descriptionChange : ["replace", "polearm"], excludeCheck : function (inObjKey, inObj) { var testRegex = /\b(polearm|glaive|halberd|lance|pike|quarterstaff|spear)\b/i; return !testRegex.test(inObjKey) && (!inObj.baseWeapon || !testRegex.test(inObj.baseWeapon)); } }, calcChanges : { atkCalc : [ function (fields, v, output) { var testRegex = /\b(polearm|glaive|halberd|lance|pike|quarterstaff|spear)\b/i; if (!v.theWea.isMagicWeapon && v.isMeleeWeapon && (/demonbone/i).test(v.WeaponTextName) && (testRegex.test(v.thisWeapon[0]) || ( v.theWea.baseWeapon && testRegex.test(v.theWea.baseWeapon) ))) { output.magic = v.thisWeapon[1] + 2; } }, 'If I include the word "Demonbone" in a the name of a polearm, it will be treated as the magic weapon Demonbone Polearm. It adds +2 to hit and damage, can be used as a reaction when I\'m damaged by a creature within reach to attack them, an is cursed causing me to go beserk when I\'m damaged.' ] }, action : [["reaction", " (when damaged)"]] } MagicItemsList["gauntlets of rage"] = { name : "Gauntlets of Rage", source : [["CoA", 268]], type : "wondrous item", rarity : "rare", attunement : true, prerequisite : "Requires attunement by a bard, sorcerer, warlock, or wizard", prereqeval : function(v) { return classes.known.bard || classes.known.sorcerer || classes.known.warlock || classes.known.wizard ? true : false; }, description : "The first melee weapon attack I make after a short rest sends me into a fury for 1 minute. I can't cast spells or speak, am immune to charmed and frightened, and when I deal damage, I heal 2d8 hp and end this fury or one condition. Also, I can use a spell slot before a melee attack for +1d6 necrotic damage per spell level.", descriptionLong : "I gain the power of never-ending fury. The first melee weapon attack I make after I finish a short or long rest automatically send me into a special fury for 1 minute. While furious, I can't cast spells, can't verbally communicate, and am immune to the charmed and frightened conditions. Each time I deal damage, I regain 2d8 hit points and may immediately remove a condition I currently suffer from or end this fury. Also, while in this fury, I may spend a spell slot before I make a melee attack. Doing so causes the attack to deal an extra 1d6 necrotic damage per level of spell slot expended, if it hits.", descriptionFull : "You gain the power of never-ending fury. After you make a melee weapon attack, you automatically enter a special fury for 1 minute. While furious, you can't cast spells, can't verbally communicate, and are immune to the charmed and frightened conditions. Each time you deal damage, you regain 2d8 hit points and may immediately remove a condition you currently suffer from or end this fury. Additionally, while in this fury, you may spend a spell slot before you make a melee attack. Doing so causes the attack to deal an extra 3 (1d6) necrotic damage per level of spell slot expended, if the attack hits. Once used you may not use this fury again until you finish a short or long rest.", usages : 1, recovery : "short rest", savetxt : { text : ["Immune to charmed and frightened in fury"] } } MagicItemsList["infernal amulet"] = { name : "Infernal Amulet", source : [["CoA", 268]], type : "wondrous item", rarity : "rare", attunement : true, cursed: true, description : "While wearing this amulet, I can use it as a spellcasting focus for my spells, and it grants a +2 bonus to my spell save DC and spell attack bonus. It is cursed and corrupting. I'm unwilling to part with it and require Remove Curse to unattune to it. It gives me disadvantage on Strength saving throws and Strenght checks.", descriptionFull : "While wearing this amulet, you can use it as a spellcasting focus for your spells, and it grants a +2 bonus to your spell save DC and spell attack bonus."+ "\n " + toUni("Curse") + ". You're unwilling to part with this amulet while attuned to it and you wear it always. While wearing the amulet you have disadvantage on Strength saving throws and Strength checks. Only the Remove Curse spell allows you to remove the item and end attunement."+ CoA_Corruption.description, eval : function() { CoA_Corruption.process(true, "infernal amulet") }, removeeval : function() { CoA_Corruption.process(false, "infernal amulet") }, calcChanges : { spellCalc : [ function (type, spellcasters, ability) { if (type != "prepare") return 2; }, "While wearing the Infernal Amulet my spell save DC and spell attack bonus each increase by 2." ] }, advantages : [["Athletics", false], ["Strength", false]] } if (typePF) MagicItemsList["infernal amulet"].savetxt = { text : ["Disadv. on Str saves/checks"] } MagicItemsList["infernal plate armor"] = { name : "Infernal Plate Armor", source : [["CoA", 268]], type : "armor (plate)", rarity : "very rare", attunement : true, cursed: true, description : "While wearing this armor, I gain a +2 bonus to AC. This armor is cursed and corrupting. I can't take it off or unattune to it without Remove Curse. It makes me vulnerable to the following damage types: force, lightning, psychic, radiant, and thunder.", descriptionFull : "While wearing this armor, you gain a +2 bonus to AC."+ "\n " + toUni("Curse") + ". Once you wear this armor, and are attuned to it, you can't remove it. Only the Remove Curse spell allows you to end the attunement and finally doff it. While wearing the armor, you're vulnerable to the following damage types: force, lightning, psychic, radiant, and thunder."+ CoA_Corruption.description, eval : function() { CoA_Corruption.process(true, "infernal plate armor") }, removeeval : function() { CoA_Corruption.process(false, "infernal plate armor") }, weight : 65, armorOptions : [{ regExpSearch : /^(?=.*infernal)(?=.*plate).*$/i, name : "Infernal Plate Armor", source : [["CoA", 268]], type : "heavy", ac : "18+2", stealthdis : true, weight : 65, strReq : 15, selectNow : true }], savetxt : { text : ["Vulnerable to force, lightning, psychic, radiant, and thunder damage"] }, } MagicItemsList["knife of stolen resistance"] = { name : "Knife of Stolen Resistance", source : [["CoA", 268]], type : "weapon (dagger)", rarity : "rare", description : "As an action once per long rest, I can use this knife to carve a single infernal rune into the flesh of an unconscious Beast, Celestial, Dragon, Fey, or Giant. Over the next 10 minutes the creature dies in agony, only Wish can stop this. If the creature has any resistances or immunities, I gain those while its dying.", descriptionFull : "Using an action, you carve a single infernal rune into the flesh of an unconscious Beast, Celestial, Dragon, Fey, or Giant with this knife. Over the next 10 minutes the creature dies an agonizing death that can't be prevented short of the Wish spell. If the creature has any resistances or immunities, you gain those resistances and immunities until the creature dies or a Wish spell is used to save the creature. The knife's power can't be used again until you finish a long rest.", weight : 1, action : [["action", ""]], usages : 1, recovery : "long rest", weaponOptions : [{ baseWeapon : "dagger", regExpSearch : /^(?=.*knife)(?=.*stolen)(?=.*resistance).*$/i, name : "Knife of Stolen Resistance", source : [["CoA", 268]], selectNow : true }] } MagicItemsList["ring of collecting"] = { name : "Ring of Collecting", source : [["CoA", 268]], type : "ring", rarity : "very rare", attunement : true, description : "As an action once per dawn, I can use this ring to cast Tiny Hut. As a bonus action, I can disintegrate an up to Medium sized, nonmagical piece of art within 60 ft. That art now appears inside the tiny hut, vanishing forever if removed from it. For every 1000 gp of art added, the tiny hut get +1 ft radius and lasts +1 hour.", descriptionLong : "As an action once per dawn, I can use this ring to cast Leomund's Tiny Hut. As a bonus action, I can use this ring to disintegrate an up to Medium sized, nonmagical piece of art (drawing, painting, or sculpture) within 60 ft. That art now appears inside the tiny hut, for me to appreciate whenever I desire. If I try to remove this art from the tiny hut, it vanishes forever. I can steadily improve this space, but only by denying such beauty from the rest of the world. For every 1000 gp of art acquired, the tiny hut increases in size by adding +1 ft to its radius and lasts +1 hour.", descriptionFull : "While wearing this ring you can use it to cast the Leomund's Tiny Hut spell as an action. Once this property is used, it can't be used again until the next dawn. Additionally, as a bonus action, you can use the ring to disintegrate any nonmagical piece of art (drawing, painting, or sculpture) within 60 feet that is no larger than Medium-sized. That art now appears inside the tiny hut, for you to appreciate whenever you desire. If you try to remove this art from the tiny hut, it vanishes forever. You can steadily improve this space, but only by denying such beauty to the rest of the world. For every 1,000 gp of art acquired, the tiny hut increases in size by adding another foot to its radius and lasts one additional hour.", spellcastingBonus : [{ name : "Once per dawn", spells : ["leomund's tiny hut"], selection : ["leomund's tiny hut"], firstCol : "oncelr" }], spellChanges : { "leomund's tiny hut" : { time : "1 a", duration : "8h+1h/1k gp", description : "10ft+1ft/1000 gp rad immobile dome of force; 9 Medium crea; blocks magic; ends if I leave; see book", changes : "Using the Ring of Collecting, I can cast Leomund's Tiny Hut as an action instead of taking 1 minute. Once this property is used, it can't be used again until the next dawn. For every 1000 gp of art acquired, the tiny hut increases in size by adding +1 ft to its radius and lasts +1 hour." } }, usages : 1, recovery : "dawn", additional : "Leomund's Tiny Hut", action : [["bonus action", " (steal art)"]] } MagicItemsList["ring of the copycat"] = { name : "Ring of the Copycat", source : [["CoA", 268]], type : "ring", rarity : "legendary", attunement : true, description : "As a reaction when an ally within 60 ft casts a spell, I can cast it as well as long as I can't normally cast it and it requires 10 gp or less material components. The cloned spell uses the original caster's abilities, originates from me and I choose its targets, but my ally can't cast this spell again until they finish a long rest.", descriptionFull : "You gain the ability to channel energy from allies to cast spells, even if you normally can't. When an ally within 60 feet of you casts a spell that you normally can't cast and that requires 10 gp or fewer in material components, you may use a reaction to cast that spell. When cast in this way, the spell is cast using your ally's spellcasting ability, spell save DC, and spell attack bonus, as needed. You decide this cloned spell's target, as specified in the spell's description, and the spell originates from you. After you use this ability, your ally can't cast this spell again until they finish a long rest.", action : [["reaction", ""]] } MagicItemsList["ring of treachery"] = { name : "Ring of Treachery", source : [["CoA", 269]], type : "ring", rarity : "very rare", attunement : true, description : "This ring has 3 charges, which are restored whenever I finish a long rest. As a reaction when I am damaged, I can expend one charge to transfer that damage to a random creature (allies included) within 60 ft of me.", descriptionFull : "This ring has 3 charges. While wearing this ring, when you're damaged, you may use a reaction to expend a charge and transfer that damage to a random creature (which could include an ally) within 60 feet. All charges are restored when you finish a long rest.", action : [["reaction", " (when damaged)"]], usages : 3 } MagicItemsList["sage's mirror"] = { name : "Sage's Mirror", source : [["CoA", 269]], type : "wondrous item", rarity : "rare", description : "This mirror has 3 charges, regaining all at dusk. As an action, I can expend 1 charge to cast either Find the Path or Legend Lore. With each use, it is apparent that the information gleaned from the mirror comes from a chamber in the Nine Hells where sages and scholars are tortured for the answers to each question.", descriptionFull : "This item has 3 charges and regains all charges at dusk. You can use an action and expend 1 of the mirror's charges to cast one of the following spells:"+ "\n \u2022 Find the Path"+ "\n \u2022 Legend Lore"+ "\n With each use, it is apparent that the information gleaned from the mirror comes from a chamber in the Nine Hells where sages and scholars are tortured for the answers to each question.", usages : 3, recovery : "Dusk", spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "1 charge", spells : ["find the path", "legend lore"], selection : ["find the path", "legend lore"], firstCol : 1, times : 2 }], spellChanges : { "find the path" : { time : "1 a", changes : "Using the Sage's Mirror, I can cast Find the Path as an action when I expend one of its charges." }, "legend lore" : { time : "1 a", changes : "Using the Sage's Mirror, I can cast Legend Lore as an action when I expend one of its charges." } } } MagicItemsList["skull of selfish knowledge"] = { name : "Skull of Selfish Knowledge", source : [["CoA", 269]], type : "wondrous item", rarity : "rare", attunement : true, description : "As an action, I can make this magical skull devour a nonmagical book, map, or scroll. Once devoured, the learning is forever available to me, but I can never write the information down or communicate it to others. It is for me alone.", descriptionFull : "You may use an action to make the magical skull devour a nonmagical book, map, or scroll. Once devoured the learning is forever available to you, but you can never write the information down or communicate it to others. It is for you alone.", action : [["action", ""]] } // [dupl_start] reprint from Baldur's Gate: Descent into Avernus if (!MagicItemsList["soul coin"]) { var DiA_soulCoinFullDescription = [ "Soul coins are about 5 inches across and about 1 inch thick, minted from infernal iron. Each coin weighs one-third of a pound, and is inscribed with Infernal writing and a spell that magically binds a single soul to the coin. Because each soul coin has a unique soul trapped within it, each has a story. A creature might have been imprisoned as a result of defaulting on a deal, while another might be the victim of a night hag's curse.", ">>Carrying Soul Coins<<. To hold a soul coin is to feel the soul bound within it\u2014overcome with rage or fraught with despair.", "An evil creature can carry as many soul coins as it wishes (up to its maximum weight allowance). A non-evil creature can carry a number of soul coins equal to or less than its Constitution modifier without penalty. A non-evil creature carrying a number of soul coins greater than its Constitution modifier has disadvantage on its attack rolls, ability checks, and saving throws.", ">>Using a Soul Coin<<. A soul coin has 3 charges. A creature carrying the coin can use its action to expend 1 charge from a soul coin and use it to do one of the following:", "\u2022 >>Drain Life<<. You siphon away some of the soul's essence and gain 1d10 temporary hit points.", "\u2022 >>Query<<. You telepathically ask the soul a question and receive a brief telepathic response, which you can understand. The soul knows only what it knew in life, but it must answer you truthfully and to the best of its ability. The answer is no more than a sentence or two and might be cryptic.\n", ">>Freeing a Soul<<. Casting a spell that removes a curse on a soul coin frees the soul trapped within it, as does expending all of the coin's charges. The coin itself rusts from within and is destroyed once the soul is released. A freed soul travels to the realm of the god it served or the outer plane most closely tied to its alignment (DM's choice). The souls of lawful evil creatures released from soul coins typically emerge from the River Styx as lemure devils.", "A soul can also be freed by destroying the coin that contains it. A soul coin has AC 19, 1 hit point for each charge it has remaining, and immunity to all damage except that which is dealt by a hellfire weapon or an infernal war machine's furnace.", "Freeing a soul from a soul coin is considered a good act, even if the soul belongs to an evil creature.", ">>Hellish Currency<<. Soul coins are a currency of the Nine Hells and are highly valued by devils. The coins are used among the infernal hierarchy to barter for favors, bribe the unwilling, and reward the faithful for services rendered.", "Soul coins are created by Mammon and his greater devils on Minauros, the third layer of the Nine Hells, in a vast chamber where the captured souls of evil mortals are bound into the coins. These coins are then distributed throughout the Nine Hells to be used for goods and services, infernal deals, dark bargains, and bribes." ]; MagicItemsList["soul coin"] = { name : "Soul Coin", source : [["DiA", 225], ["CoA", 269]], type : "wondrous item", rarity : "uncommon", description : "Each coin traps a unique soul, whose rage or despair is felt by me while I hold it. A coin has 3 charges. As an action, I can expend 1 charge to either siphon the soul's essence to grant me 1d10 temporary HP or telepathically ask the soul a question which it must answer truthfully. See \"Notes\" page for more.", descriptionFull : DiA_soulCoinFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)<= 4 && v.isSpellcastingClass; }, spellcastingBonus : [{ name : "Cartomancer", spells : ["prestidigitation"], selection : ["prestidigitation"], }], spellChanges : { "prestidigitation" : { components : "V,S*", compMaterial : "When I duplicate the effects of stage magic, I can conceal the verbal and somatic components of the spell as ordinary conversation and card handling.", description : "Harmless sensation, illusory image, snuff light, clean/soil/chill/warm/flavor, stage magic (hide comp)", changes : "When I duplicate the effects of stage magic, I can conceal the verbal and somatic components of the spell as ordinary conversation and card handling." } }, action : [["bonus action", "Hidden Ace (use imbued card)"]], toNotesPage : [{ name : "Hidden Ace", page3notes : true, note : [ "When I finish a long rest, I can imbue a spell from my class' spell list into a card for 8 hours", "The spell must have a casting time of 1 action and be a level for which I have spell slots", "As a bonus action, I can flourish the card and cast the spell within; It then loses its magic" ] }] }; var BoMT = { toDescrFull : function (sDescr) { if (typeof sDescr !== "string") sDescr = sDescr.join("\n "); return sDescr.replace(/\[\[.*?\]\]/g, "$1") .replace(/>>(.*?)<>(.*?)( \(.*?\))?<<\. /g, function(a, p1, p2, p3, p4) { if (/\n /.test(p1)) { return "\n\n " + p2.toUpperCase() + p3.toLowerCase() + "\n "; } else { return p1 + p2 + p3 + ": "; } }); }, "voidwalker armor" : "This armor is cursed, and attuning to it extends the curse to you. As long as you remain cursed, you're unwilling to part with the armor. Taking it off fails to end the curse. While cursed in this way, you feel disconnected from your body, continuously hearing whispers that call for you to join them. Whenever you finish a long rest while cursed, you must make a DC 11 Charisma saving throw. On a failed save, your soul is drawn from your body and trapped in an object on a different plane of existence. The object and location of this object are chosen by the DM[[ (but might be the House of Cards; see chapter 18)]]. While your soul is trapped in this way, your body is inert and doesn't age or require sustenance. Destroying the object frees your soul; otherwise, only a Wish spell can restore your soul to your body.", "telescopic transporter" : "This enormous telescope allows you to view distant celestial objects, including stars, Wildspace systems, and Astral Sea phenomena like the cities of deities or the petrified husks of dead gods."+ "\n After spending 1 hour calibrating the telescope, you can attempt to travel to the planet or celestial body at which the telescope is currently pointed. At the end of the hour, you make a DC 17 Intelligence (Arcana) check. On a successful check, you and eight other willing creatures touching the telescope, along with everything all travelers are wearing and carrying, safely teleport to unoccupied spaces at the intended destination. On a failed check, a mishap occurs instead. The DM rolls on the table below to determine the mishap or chooses a mishap that's good for the campaign."+ "\n\nd6\tMishap"+ "\n 1\tThe travelers appear adrift in the Astral Sea."+ "\n 2\tThe travelers appear on a different plane of existence, determined randomly or chosen by the DM."+ "\n 3\tExcess cosmic energy overloads the telescope, causing it to explode. Each creature within 60 feet of the telescope takes 8d6 necrotic damage. Any Humanoid who survives this damage is transformed into a different kind of creature, as if it had been subject to the Reincarnate spell."+ "\n 4\tA creature from the Astral Sea (such as a githyanki knight) appears within 60 feet of the telescope. The DM decides its attitude."+ "\n 5\tThe travelers appear on a different planet or celestial body in the Wildspace system nearest to their target destination."+ "\n 6\tThe travelers arrive at their intended destination, but they each appear coated in harmless slime.", "sage's signet" : { "augury" : { time : "1 a", changes : "Using the Sage's Signet I can cast Augury once per dawn as an action." } }, "shrieking greaves" : "The greaves are cursed, and becoming attuned to them extends the curse to you. You can't remove the greaves or end your attunement to them until you are targeted by a Remove Curse spell or similar magic."+ "\n You have disadvantage on saving throws against the frightened condition. Whenever you start your turn frightened, the greaves release an ear-piercing scream. You and each creature within 10 feet of you must make a DC 15 Constitution saving throw, taking 2d8 thunder damage on a failed save, or half as much damage on a successful one.", "spindle of fate" : [ ">>Battle Foreknowledge<<. When you roll initiative, you can expend 1 charge to add or subtract your proficiency bonus from the total roll.", ">>Doom Foretold<<. As an action, you can expend 2 charges to target a creature within 30 feet of yourself and invoke that creature's doom. While the target is on the same plane of existence as you are, you can sense the direction to its location, and you know the direction of its movement if it's in motion. Additionally, once per turn when you deal damage to the doomed creature, you can roll 1d6 and add the number rolled to the damage roll. These benefits persist for 1 hour or until you target another creature with this effect.", ">>Twist of Fate<<. When a creature within 60 feet of you makes a saving throw or an attack roll, you can use your reaction to expend 3 charges and alter the outcome, turning a failed saving throw into a successful one, a missed attack roll into a hit, or vice versa." ], "starshot crossbow" : [ "This crossbow is crafted from blackened wood, and its limbs bear pearl inlays depicting constellations. You ignore the loading property with this crossbow. If you load no ammunition in the weapon, it produces its own, automatically creating one piece of magic ammunition when you make a ranged attack with it. The ammunition created by the weapon vanishes the instant after it hits or misses a target. The crossbow has 3 charges and regains 1d3 expended charges daily at dawn.", ">>Constellations<<. The crossbow is decorated with three constellations. As a bonus action, you can tap one of the constellations to invoke it, expending 1 charge and producing one of the following effects:", " \u2022 >>Balance<<. The next time you hit a creature with a ranged attack roll using this crossbow before the end of your next turn, you or another creature of your choice within 30 feet of you can regain hit points equal to 1d8 plus your proficiency bonus.", " \u2022 >>Flames<<. Until the end of your next turn, when you hit a creature with a ranged attack roll using this crossbow, the attack deals an additional 2d8 fire damage.", " \u2022 >>Rogue<<. Until the end of your next turn, you have the invisible condition, and anything you are wearing or carrying is also invisible." ], "deck of miscellany" : [ "Playing Card\t\tItem(s)", " [3\u2666] Three of diamonds \tWooden abacus", " [4\u2666] Four of diamonds \tFour vials of perfume", " [5\u2666] Five of diamonds \t5 days' worth of rations", " [6\u2666] Six of diamonds\t\tIron pot", " [7\u2666] Seven of diamonds \tDisguise kit", " [8\u2666] Eight of diamonds \tWindow (up to 5 feet wide and 5 feet high), which you can place on a vertical surface up to 5 feet thick and which allows you to look through the surface", " [9\u2666] Nine of diamonds \tManacles", "[10\u2666] Ten of diamonds \tTen sheets of parchment", " [3\u2665] Three of hearts\t\tThree daggers", " [4\u2665] Four of hearts\t\tFour flasks of oil", " [5\u2665] Five of hearts\t\tFive silk robes", " [6\u2665] Six of hearts\t\tForgery kit", " [7\u2665] Seven of hearts\t\tQuarterstaff", " [8\u2665] Eight of hearts\t\tFishing tackle", " [9\u2665] Nine of hearts\t\tLeather pouch containing 18 gp", "[10\u2665] Ten of hearts\t\t10 crossbow bolt", " [3\u2663] Three of clubs\t\tThree books, written in Common, about random historical events", " [4\u2663] Four of clubs\t\tCanvas tent", " [5\u2663] Five of clubs\t\t50 feet of coiled silk rope", " [6\u2663] Six of clubs\t\tTwo crowbars", " [7\u2663] Seven of clubs\t\tHealer's kit", " [8\u2663] Eight of clubs\t\tEight gems worth 5 gp each", " [9\u2663] Nine of clubs\t\tLamp", "[10\u2663] Ten of clubs\t\t10 feet of iron chain", " [3\u2660] Three of spades\t\tThree spears", " [4\u2660] Four of spades\t\tSteel mirror", " [5\u2660] Five of spades\t\t15-foot wooden pole", " [6\u2660] Six of spades\t\tBurlap sack", " [7\u2660] Seven of spades\t\tTwo sets of fine clothes", " [8\u2660] Eight of spades\t\tShovel", " [9\u2660] Nine of spades\t\tLight hammer", "[10\u2660] Ten of spades\t\tTen arrows" ], "deck of many more things" : { features : [ "Like the Deck of Many Things, the Deck of Many More Things manifests differently on various worlds. While it can include fewer or different cards, it frequently appears with a Deck of Many Things as part of a combined deck of sixty-six illuminated cards. The combined deck is usually protected by a box or pouch. The forty-four cards of the Deck of Many More Things bear similar imagery to those in the Deck of Many Things and have potent magical effects, which are detailed later in this description. Notably, cards from the Deck of Many More Things are more likely to be beneficial, though about a third of them are still dangerous.", "Before you draw a card, you must declare how many cards you intend to draw and then draw them randomly. Unless a card allows you to draw additional cards, any cards drawn exceeding this number have no effect.", "As soon as you draw a card, its magic takes effect. You must draw each card you declared no more than 1 hour after the previous draw. Unless a card states otherwise, if you fail to draw the chosen number, the remaining number of cards fly from the deck and take effect simultaneously.", "Unless it is the Fool or the Jester card, a drawn card immediately takes effect, fades from existence, and reappears in the deck, making it possible to draw the same card multiple times.", "The DM can use the physical cards provided in The Deck of Many Things card set to build a combined Deck of Many Things and Deck of Many More Things, including whichever cards they desire. Alternatively, roll on the Deck of Many More Things table below to randomly determine what cards are drawn.", "\n1d100\tCard"+ "\t\t1d100\tCard", "01\tAberration"+ "\t\t 34\tMine", "02\tBalance*"+ "\t\t 35\tMonstrosity", "03\tBeast"+ "\t\t 36\tMoon*", "04\tBook"+ "\t\t 37\tOoze", "05\tBridge"+ "\t\t 38\tPath", "06\tCampfire"+ "\t\t 39\tPit", "07\tCavern"+ "\t\t 40\tPlant", "08\tCelestial"+ "\t\t 41\tPriest", "09\tComet*"+ "\t\t 42\tPrisoner", "10\tConstruct"+ "\t\t 43\tPuzzle*", "11\tCorpse"+ "\t\t 44\tRing", "12\tCrossroads"+ "\t\t 45\tRogue*", "13\tDonjon*"+ "\t\t 46\tRuin*", "14\tDoor"+ "\t\t 47\tSage*", "15\tDragon"+ "\t\t 48\tShield", "16\tElemental"+ "\t\t 49\tShip", "17\tEuryale*"+ "\t\t 50\tSkull*", "18\tExpert"+ "\t\t 51\tStaff", "19\tFates*"+ "\t\t 52\tStairway", "20\tFey"+ "\t\t 53\tStar*", "21\tFiend"+ "\t\t 54\tStatue", "22\tFlames*"+ "\t\t 55\tSun*", "23\tFool*"+ "\t\t 56\tTalons*", "24\tGem*"+ "\t\t 57\tTavern", "25\tGiant"+ "\t\t 58\tTemple", "26\tHumanoid"+ "\t\t 59\tThrone*", "27\tJester*"+ "\t\t 60\tTomb", "28\tKey*"+ "\t\t 61\tTower", "29\tKnight*"+ "\t\t 62\tTree", "30\tLance"+ "\t\t 63\tUndead", "31\tMage"+ "\t\t 64\tVoid*", "32\tMap"+ "\t\t 65\tWarrior", "33\tMaze"+ "\t\t 66\tWell", "67-00\tRoll again\n", "* Found in the Deck of Many Things as depicted in the Dungeon Master's Guide" ], cards : [ ">>Aberration<<. You gain telepathy within a range of 90 feet.", ">>Beast<<. You immediately transform into a random Beast with a CR of 5 or lower. Your game statistics—including your ability scores, hit points, and possible actions—are replaced by the Beast's game statistics, and any nonmagical equipment you're wearing or carrying melds into your new form and can't be used. Any magic items you're carrying drop in an unoccupied space within 5 feet of your new form."+ "\n You remain transformed in this way for 2d12 days; nothing can alter your form while you're under the effects of this card, but the Wish spell can end the transformation early. When you revert to your normal form, you return to the same state you were in when you initially transformed.", ">>Book<<. You gain the ability to speak, read, and write 1d6 + 2 languages of your choice.", ">>Bridge<<. You gain the ability to cast the Time Stop spell 1d3 times. Use your Intelligence, Wisdom, or Charisma as the spellcasting ability (your choice).", ">>Campfire<<. You immediately gain the benefits of finishing a long rest.", ">>Cavern<<. You gain a climbing speed equal to your walking speed. You also gain the ability to move up, down, across vertical surfaces, and along ceilings, while leaving your hands free.", ">>Celestial<<. You sprout a pair of softly luminescent, feathered wings from your back and gain a flying speed of 30 feet.", ">>Construct<<. A homunculus appears in an unoccupied space within 5 feet of you. The appearance of the homunculus is determined by the DM, and the homunculus treats you as its creator.", ">>Corpse<<. You immediately drop to 0 hit points, have the unconscious condition, and must begin making death saving throws. Spells and other magical effects that restore hit points have no effect on you until you are stabilized. If you fail three death saving throws, you die and can be resurrected only by the Wish spell.", ">>Crossroads<<. Roll a d20. If the roll is even, you age 1d10 years. If the roll is odd, you become younger by 1d10 years, to a minimum of 1 year. This effect can be undone only by the Wish spell, divine intervention, or similar magic.", ">>Door<<. You gain the ability to cast the Gate spell 1d4 times, requiring no material components. Use your Intelligence, Wisdom, or Charisma as the spellcasting ability (your choice).", ">>Dragon<<. A dragon egg appears at your feet and immediately hatches into a dragon wyrmling. The type of dragon is chosen by the DM. The wyrmling views you as its parent and is staunchly loyal to you and your allies.", ">>Elemental<<. You become immune to one of the following damage types (choose immediately upon drawing this card): acid, cold, fire, lightning, or thunder.", ">>Expert<<. Your Dexterity score increases by 2, to a maximum of 22.", ">>Fey<<. A fey crossing opens into the Feywild, and you're immediately pulled through it, disappearing in a flash of rainbow-colored light. You draw no more cards."+ "\n The fey crossing appears as a shimmering fractal of light above the deck, and it remains open for 1 minute after the card is drawn. The precise location in the Feywild to which the fey crossing leads is determined by the DM.", ">>Fiend<<. A powerful Fiend appears in a nearby unoccupied space and offers you a deal.[[ The precise nature of this deal is up to the DM, but usually the Fiend offers some material reward in exchange for you and your allies completing a task for the Fiend.]] The Fiend is indifferent to you and can be bargained with; it keeps its side of any bargain it makes, though it might twist the wording of any agreement to suit its purposes. If attacked, or if negotiations fail and you refuse the Fiend's offer, it returns to its home plane.", ">>Giant<<. You immediately grow 2d10 inches in height, and your hit point maximum and current hit points both increase by 20.", ">>Humanoid<<. You can immediately choose to stop drawing from the deck, regardless of how many cards you initially declared.", ">>Lance<<. All your ability scores increase by 1, to a maximum of 20.", ">>Mage<<. Your Intelligence score increases by 2, to a maximum of 22.", ">>Map<<. At any time you choose within 1 year of drawing this card, you can mentally name or describe an object or individual that is familiar to you. You immediately know the location of the object or individual, as well as the distance between you and the object or individual, even if the object or individual is on a different plane of existence. If you named an individual, you know if they are alive and any conditions they have. If you named an object, you know if it is broken or not. If you named a magic item that has charges, you know how many charges it has remaining.", ">>Maze<<. You gain 1d3 levels of exhaustion.", ">>Mine<<. A pile of 2d6 gems (each worth 5,000 gp) and 1d10 chunks of precious ore (each worth 2,500 gp) appears at your feet." ], cards2 : [ ">>Monstrosity<<. A Large or larger Monstrosity with a challenge rating of 10 or less (chosen by the DM) appears in an unoccupied space within 15 feet of you. The creature is hostile toward you and attacks immediately. The creature disappears when it is killed or when you are reduced to 0 hit points. If there isn't enough space for a Large or larger creature to appear, this card has no effect.", ">>Ooze<<. A gelatinous cube immediately appears in your space and engulfs you. The gelatinous cube is hostile and remains until it is destroyed. If there isn't enough space for the gelatinous cube to appear, this card has no effect.", ">>Path<<. Your walking speed increases by 10 feet.", ">>Pit<<. A pit opens beneath you. You plummet 3d6 \xD7 10 feet, take damage from the fall, and have the prone condition.", ">>Plant<<. You gain the ability to cast Speak with Plants without using a spell slot; you must finish a long rest before you can cast it this way again. If you have spell slots of 3rd level or higher, you can cast this spell using them. Use your Intelligence, Wisdom, or Charisma as the spellcasting ability (your choice).", ">>Priest<<. Your Wisdom score increases by 2, to a maximum of 22.", ">>Prisoner<<. Glowing chains made of magical force appear and wrap around you. You have the restrained condition until the chains are destroyed or you are freed. While you have this condition, you can't cast spells, and any magic items you're wearing or carrying have their properties suppressed. You draw no more cards. The chains are immune to damage and can't be dispelled using the Dispel Magic spell or similar magic. However, a Disintegrate spell destroys the chains instantly, freeing you. Another creature can also free you by succeeding on a DC 30 Dexterity check using thieves' tools.", ">>Ring<<. A rare or rarer magic ring appears on your finger. If you have the attunement slots available, you're automatically attuned to the ring when it appears. The DM chooses the ring.", ">>Shield<<. A rare or rarer suit of magic armor that you are proficient with appears in your hands. The DM chooses the armor. If you lack proficiency with any armor, your base AC instead now equals 12 + your Dexterity modifier while you aren't wearing armor.", ">>Ship<<. You gain proficiency in three skills chosen by the DM.", ">>Staff<<. A rare or rarer magic rod, staff, or wand appears in your hands. The DM chooses the item.", ">>Stairway<<. You can choose to either decrease your number of declared draws by two or receive a rare or rarer wondrous item, which appears in your hands. The DM chooses the item.", ">>Statue<<. You immediately have the petrified condition as your body is transformed into marble. The petrification lasts until you are freed with the Greater Restoration spell or similar magic.", ">>Tavern<<. Your Charisma score increases by 2 to a maximum of 22.", ">>Temple<<. A deity or entity of similar power becomes bound to aid you. At any point in time between drawing the card and when you die, you can use your action to call on this entity for divine intervention, and the entity is bound to answer. The parameters and nature of this intervention are chosen by the DM. If you die without having used this intervention, the deity fulfills its obligation by casting the Resurrection spell on you. Once the entity has answered your call for divine intervention or resurrected you, the entity is no longer bound to aid you.", ">>Tomb<<. At any time you choose within 1 year of drawing this card, you can cast the True Resurrection spell once without expending a spell slot or requiring material components. Use your Intelligence, Wisdom, or Charisma as the spellcasting ability (your choice).", ">>Tower<<. Draw two additional cards beyond your declared number of draws. The magic of these cards doesn't immediately take effect; instead, choose one of the two additional cards to keep, returning the other to the deck. The magic of the card you keep takes effect immediately thereafter.", ">>Tree<<. Your skin immediately becomes rough, like tree bark. Your base AC now equals 15 + your Dexterity modifier while you aren't wearing armor, but you have vulnerability to fire damage. This transformation can be undone only by the Wish spell, divine intervention, or similar magic.", ">>Undead<<. Somewhere on the Material Plane, a revenant rises. This revenant blames you for its existence and relentlessly hunts you to exact its revenge. The revenant exists until either 1 year passes, the revenant kills you, or you use a Wish spell to banish it permanently to the afterlife.", ">>Warrior<<. Your Strength score increases by 2 to a maximum of 22.", ">>Well<<. You learn three cantrips of your choice from any spell list." ] }, "deck of wild cards" : [ "This deck of heavy vellum cards hums with the magic of the Elemental Chaos.", "The magic of the deck functions only if cards are drawn at random (a deck of real-world playing cards can simulate the deck). As an action, you can draw a random card from this deck and throw it to make a ranged spell attack, using Dexterity for the attack roll. The card has a range of 30 feet. On a hit, it deals 1d4 slashing damage and imposes a magical effect determined by its suit, as detailed in the table below. The card immediately returns to the deck after it hits or misses a target.\n", "d4\tSuit\tEffect", " 1\t\u2663 (Rods)\tThe card explodes in a burst of fire. The target and each creature within 5 feet of it must succeed on a DC 15 Dexterity saving throw or take 2d8 fire damage.", " 2\t\u2666 (Coins)\tThe card shoots streaks of lightning. The target must make a DC 15 Dexterity saving throw. On a failed save, the target has the blinded condition until the end of your next turn, and each creature within 10 feet of the target takes 1d6 lightning damage.", " 3\t\u2665 (Cups)\tThe card covers the target in a thick layer of ice. The target takes 1d10 cold damage and must succeed on a DC 15 Constitution saving throw or have the restrained condition until the end of your next turn.", " 4\t\u2660 (Swords)\tThe card unleashes a sharp, concussive blast. The target and each creature within 5 feet of it take 1d6 force damage and must succeed on a DC 15 Strength saving throw or have the prone condition." ], "deck of wonder" : { features : [ "Created in the image of the Deck of Many Things, this deck of ivory or vellum cards bestows an assortment of minor benefits and penalties on those who draw from it. Most (75 percent) of these decks have only thirteen cards, but the rest have twenty-two.", "Before you draw a card, you must declare how many cards you intend to draw, then draw them randomly. Any additional cards drawn have no effect. Unless a card states otherwise, as soon as you draw a card from the deck, its magic takes effect. You must draw each card you declared no more than 1 hour after the previous draw. If you fail to draw the chosen number, the remaining number of cards fly from the deck and take effect simultaneously.", "Unless it is the Mystery card, a drawn card immediately takes effect, fades from existence, and reappears in the deck, making it possible to draw the same card multiple times.", "You can use an altered deck of playing cards to simulate the deck, as shown in the table below.", "\n1d13\t1d22\tPlaying Card\t\tCard", "\t 1\t[A\u2666] Ace of diamonds\t\tChancellor*", "1\t 2\t[K\u2666] King of diamonds\t\tDay", "2\t 3\t[Q\u2666] Queen of diamonds \tNight", "3\t 4\t[J\u2666] Jack of diamonds\t\tDawn", "\t 5\t[2\u2666] Two of diamonds\t\tDusk*", "\t 6\t[A\u2665] Ace of hearts\t\tDestiny*", "4\t 7\t[K\u2665] King of hearts\t\tCrown", "5\t 8\t[Q\u2665] Queen of hearts\t\tLock", "6\t 9\t[J\u2665] Jack of hearts\t\tChampion", "\t 10\t[2\u2665] Two of hearts\t\tCoin*", "\t 11\t[A\u2663] Ace of clubs\t\tVulture*", "7\t 12\t[K\u2663] King of clubs\t\tChaos", "8\t 13\t[Q\u2663] Queen of clubs\t\tOrder", "9\t 14\t[J\u2663] Jack of clubs\t\tBeginning", "\t 15\t[2\u2663] Two of clubs\t\tMystery*", "\t 16\t[A\u2660] Ace of spades\t\tIsolation*", "10\t 17\t[K\u2660] King of spades\t\tEnd", "11\t 18\t[Q\u2660] Queen of spades\t\tMonster", "12\t 19\t[J\u2660] Jack of spades\t\tKnife", "\t 20\t[2\u2660] Two of spades\t\tJustice*", "\t 21\tJoker (with TM)\t\tStudent*", "13\t 22\tJoker (no TM)\t\tMischief\n", "* Found only in a deck with twenty-two cards" ], cards : [ ">>Beginning<<. Your hit point maximum and current hit points increase by 2d10. Your hit point maximum remains increased in this way for the next 8 hours.", ">>Champion<<. You gain a +1 bonus to weapon attack and damage rolls. This bonus lasts for 8 hours.", ">>Chancellor<<. Within 8 hours of drawing this card, you can cast Augury once as an action, requiring no material components. Use your Intelligence, Wisdom, or Charisma as the spellcasting ability (your choice).", ">>Chaos<<. You gain resistance to one of the following damage types (chosen by the DM): acid, cold, fire, lightning, or thunder. This resistance lasts for 1d12 days.", ">>Coin<<. Five pieces of jewelry, each worth 100 gp, or ten gemstones, each worth 50 gp, appear at your feet.", ">>Crown<<. You learn the Friends cantrip. Use your Intelligence, Wisdom, or Charisma as the spellcasting ability (your choice). If you already know this cantrip, the card has no effect.", ">>Dawn<<. This card invigorates you. For the next 8 hours, you can add your proficiency bonus to your initiative rolls.", ">>Day<<. You gain a +1 bonus to saving throws. This benefit lasts until you finish a long rest.", ">>Destiny<<. This card protects you against an untimely demise. The first time after drawing this card that you would drop to 0 hit points from taking damage, you instead drop to 1 hit point.", ">>Dusk<<. This card supernaturally saps your energy. You have disadvantage on initiative rolls. This effect lasts until you finish a long rest, but it can be ended early by a Remove Curse spell or similar magic.", ">>End<<. This card is an omen of death. You take 2d10 necrotic damage, and your hit point maximum is reduced by an amount equal to the damage taken. This effect can't reduce your hit point maximum below 10 hit points. This reduction lasts until you finish a long rest, but it can be ended early by a Remove Curse spell or similar magic.", ">>Isolation<<. You disappear, along with anything you are wearing or carrying, and become trapped in a harmless extradimensional space for 1d4 minutes. You draw no more cards. You then reappear in the space you left or the nearest unoccupied space. When you reappear, you must succeed on a DC 11 Constitution saving throw or have the poisoned condition for 1 hour as your body reels from the extradimensional travel.", ">>Justice<<. You momentarily gain the ability to balance the scales of fate. For the next 8 hours, whenever you or a creature within 60 feet of you is about to roll a d20 with advantage or disadvantage, you can use your reaction to prevent the roll from being affected by advantage or disadvantage.", ">>Knife<<. An uncommon magic weapon you're proficient with appears in your hands. The DM chooses the weapon.", ">>Lock<<. You gain the ability to cast Knock 1d3 times. Use your Intelligence, Wisdom, or Charisma as the spellcasting ability (your choice).", ">>Mischief<<. You receive an uncommon wondrous item (chosen by the DM), or you can draw two additional cards beyond your declared draws.", ">>Monster<<. This card's monstrous visage curses you. While cursed in this way, whenever you make a saving throw, you must roll 1d4 and subtract the number rolled from the total. The curse lasts until you finish a long rest, but it can be ended early with a Remove Curse spell or similar magic.", ">>Mystery<<. You have disadvantage on Intelligence saving throws for 1 hour. Discard this card and draw from the deck again; together, the two draws count as one of your declared draws.", ">>Night<<. You gain darkvision within a range of 300 feet. This darkvision lasts for 8 hours.", ">>Order<<. You gain resistance to one of the following damage types (chosen by the DM): force, necrotic, poison, psychic, or radiant. This resistance lasts for 1d12 days.", ">>Student<<. You gain proficiency in Wisdom saving throws. If you already have this proficiency, you instead gain proficiency in Intelligence or Charisma saving throws (your choice).", ">>Vulture<<. One nonmagical item or piece of equipment in your possession (chosen by the DM) disappears. The item remains nearby but concealed for a short time, so it can be found with a successful DC 15 Wisdom (Perception) check. If the item isn't recovered within 1 hour, it disappears forever." ] } } MagicItemsList["antimagic armor"] = { name : "Antimagic Armor", nameTest : /antimagic.*armou?r/i, source : [["BoMT", 65]], // Chapter 9: Knight type : "armor (light, medium, or heavy)", rarity : "very rare", attunement : true, description : "While wearing this armor, once per dawn I can cast Antimagic Field, requiring no spell components. In addition, as a reaction once per dawn, I can give myself advantage on a saving throw I make against a spell.", descriptionFull : "While wearing this armor, you can use your reaction to give yourself advantage on a saving throw you make against a spell. Once this property is used, it can't be used again until the next dawn."+ "\n In addition, while you wear this armor, you can use it to cast Antimagic Field, requiring no spell components. Once this property is used, it can't be used again until the next dawn.", chooseGear : { type : "armor", prefixOrSuffix : ["between", "Antimagic", "Armor"], descriptionChange : ["prefix", "armor"], itemName1stPage : ["suffix", "Antimagic"] }, action : [["reaction", "Adv. save vs. spell (1\xD7 per dawn)"]], spellcastingBonus : [{ name : "Once per dawn", spells : ["antimagic field"], selection : ["antimagic field"], firstCol : "oncelr" }], extraLimitedFeatures : [{ name : "Adv. save vs. spell (Antimagic Armor)", usages : 1, recovery : "dawn" }, { name : "Antimagic Field (Antimagic Armor)", usages : 1, recovery : "dawn" }], spellChanges : { "antimagic field" : { components : "", compMaterial : "", changes : "While wearing the armor, it requires no components to cast Antimagic Field." } } }; MagicItemsList["armor of fungal spores"] = { name : "Armor of Fungal Spores", nameTest : "of Fungal Spores", source : [["BoMT", 65]], // Chapter 9: Knight type : "armor (medium)", rarity : "uncommon", description : "As a bonus action once per dawn while wearing this armor, I can make it emit poisonous spores. These spores fill a 10-ft radius sphere centered on myself. Each creature in that area must make a DC 15 Constitution save or be poisoned until the end of my next turn.", descriptionFull : "While wearing this armor, you can take a bonus action to make the armor emit poisonous spores, which fill a 10-foot-radius sphere centered on yourself. Each creature in that area must succeed on a DC 15 Constitution saving throw or have the poisoned condition until the end of your next turn. Once this property is used, it can't be used again until the next dawn.", chooseGear : { type : "armor", prefixOrSuffix : "prefix", descriptionChange : ["prefix", "armor"], excludeCheck : function (inObjKey, inObj) { return !/medium/i.test(inObj.type); } }, action : [["bonus action", ""]], usages : 1, recovery : "dawn" }; MagicItemsList["armor of the fallen"] = { name : "Armor of the Fallen", nameTest : "of the Fallen", source : [["BoMT", 65]], // Chapter 9: Knight type : "armor (medium or heavy)", rarity : "uncommon", attunement : true, description : "While wearing this armor, I can use it to cast either Animate Dead or Speak with Dead. Once the armor has cast a spell in this way, it can't cast either spell until the next dawn. My soul keeps this armor together. If I die while attuned to the armor, the armor is destroyed.", descriptionFull : "While wearing this armor, you can use it to cast either Speak with Dead or Animate Dead. Once the armor has cast a spell in this way, it can't cast either spell until the next dawn."+ "\n Your soul keeps this armor together. If you die while you are attuned to the armor, the armor is destroyed.", chooseGear : { type : "armor", prefixOrSuffix : "prefix", descriptionChange : ["prefix", "armor"], excludeCheck : function (inObjKey, inObj) { return !/heavy|medium/i.test(inObj.type); } }, spellcastingBonus : [{ name : "either or", spells : ["animate dead", "speak with dead"], selection : ["animate dead", "speak with dead"], firstCol : "SP", times : 2 }], usages : 1, recovery : "dawn" }; MagicItemsList["armor of weightlessness"] = { name : "Armor of Weightlessness", nameTest : "of Weightlessness", source : [["BoMT", 65]], // Chapter 9: Knight type : "armor (light, medium, or heavy)", rarity : "uncommon", attunement : true, description : "This armor has 5 charges, regaining 1d4+1 expended charges daily at dawn. As a bonus action while wearing it, I can expend 1 or more charges to cast Jump (1 charge) or Levitate (2 charges) on myself.", descriptionFull : "This armor has 5 charges. While you wear it, you can use a bonus action to expend 1 or more charges to cast one of the following spells from the armor, targeting yourself: Jump (1 charge) or Levitate (2 charges)."+ "\n This armor regains 1d4 + 1 expended charges daily at dawn.", chooseGear : { type : "armor", prefixOrSuffix : "prefix", descriptionChange : ["prefix", "armor"] }, usages : 5, recovery : "dawn", additional : "regains 1d4+1", spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "1 charge (self only)", spells : ["jump"], selection : ["jump"], firstCol : 1 }, { name : "2 charges (self only)", spells : ["levitate"], selection : ["levitate"], firstCol : 2 }], spellChanges : { "jump" : { name : "Jump (self only)", time : "1 bns", range : "Self", description : "My jump distance is tripled for the duration", changes : "Using the Armor of Weightlessness, I can cast Jump as a bonus action, but only on myself." }, "levitate" : { name : "Levitate (self only)", time : "1 bns", range : "Self", save : "", description : "I float and move up vertically up to 20 ft; As part of my move each round, I can move up/down 20 ft", changes : "Using the Armor of Weightlessness, I can cast Levitate as a bonus action, but only on myself." } } }; MagicItemsList["baleful talon"] = { name : "Baleful Talon", source : [["BoMT", 34]], // Chapter 5: Gem type : "weapon (dagger)", rarity : "very rare", description : "I gain a +1 bonus to attack and damage rolls made with this hooked, obsidian dagger. When I hit a creature with it and roll a 19 or 20 to hit, the dagger flares with sickly light and deals +6d6 necrotic damage. The creature can make a DC 15 Con save to halve the damage. It turns to dust if this reduces its HP to 0.", descriptionFull : "You gain a +1 bonus to attack and damage rolls made with this hooked, obsidian dagger."+ "\n When you hit a creature with this magic weapon and roll a 19 or 20 on the attack roll, the creature must make a DC 15 Constitution saving throw as the dagger flares with sickly light. The creature takes 6d6 necrotic damage on a failed save, or half as much on a successful one. If this damage reduces the creature to 0 hit points, the creature disintegrates into dust.", weight : 1, weaponOptions : [{ baseWeapon : "dagger", regExpSearch : /^(?=.*baleful)(?=.*talon).*$/i, name : "Baleful Talon", source : [["BoMT", 34]], description : "Finesse, light, thrown; Roll of 19-20: +6d6 necrotic damage, DC 15 Con save halves", modifiers : [1, 1], selectNow : true }] }; MagicItemsList["blasted goggles"] = { name : "Blasted Goggles", source : [["BoMT", 174]], // Chapter 20: Flames type : "wondrous item", rarity : "uncommon", attunement : true, description : "These tinker's goggles have 3 charges, regaining 1d3 daily at dawn. As an action, I can use 1 charge to shoot a beam of light: a creature I can see within 120 ft must make a DC 15 Dexterity save or take 3d6 fire damage. If this is a natural 20, I'm blinded for 24 hours. Cursed: I can't remove these or end attunement.", descriptionFull : "These tinker's goggles have 3 charges. As an action, you can expend 1 charge to shoot a beam of fiery light from the goggles at a creature you can see within 120 feet of yourself. The target must succeed on a DC 15 Dexterity saving throw or take 3d6 fire damage. The goggles regain 1d3 expended charges daily at dawn."+ "\n " + toUni("Cursed") + ". The goggles are cursed, and becoming attuned to them extends the curse to you. You can't remove the goggles or end your attunement to them until you are targeted by a Remove Curse spell or similar magic."+ "\n Whenever you use the goggles' fiery beam and the target rolls a 20 on the d20 for the saving throw, the goggles expose you to a flash of violent bright light. As a result, you have the blinded condition for 24 hours.", usages : 3, recovery : "dawn", additional : "regains 1d3" }; MagicItemsList["bloodrage greataxe"] = { name : "Bloodrage Greataxe", source : [["BoMT", 66]], // Chapter 9: Knight type : "weapon (greataxe)", rarity : "uncommon", description : "I gain a +2 bonus to attack and damage rolls made with this magic greataxe while I have half my hit points or fewer.", descriptionFull : "You gain a +2 bonus to attack and damage rolls made with this magic greataxe while you have half your hit points or fewer.", weight : 7, weaponOptions : [{ baseWeapon : "greataxe", regExpSearch : /^(?=.*bloodrage)(?=.*(great|heavy|weida))(?=.*(axe|\bono|\bfu|masakari)s?\b).*$/i, name : "Bloodrage Greataxe", source : [["BoMT", 66]], description : "Heavy, two-handed; If I'm \u2264 \u00BD HP: +2 to hit \u0026 damage", selectNow : true }] }; MagicItemsList["bloodseeker ammunition"] = { name : "Bloodseeker Ammunition", nameTest : "Bloodseeker", source : [["BoMT", 66]], // Chapter 9: Knight type : "weapon (any ammunition)", rarity : "very rare", description : "Ranged attack rolls made with this magic ammunition have advantage against any creature doesn't have all its hit points.", descriptionFull : "Ranged attack rolls made with this ammunition have advantage against any creature doesn't have all its hit points.", allowDuplicates : true, chooseGear : { type : "ammo", prefixOrSuffix : "suffix", descriptionChange : ["replace", "ammunition"], excludeCheck : function (inObjKey, inObj) { return /vials|flasks/i.test(inObj.icon); } } }; MagicItemsList["boomerang shield"] = { name : "Boomerang Shield", source : [["BoMT", 66]], // Chapter 9: Knight type : "shield", rarity : "uncommon", attunement : true, description : "I can make a ranged weapon attack with this magic shield. It reappears in my hand the instant after it hits or misses a target. It has a range of 20 ft and a long range of 60 ft, uses Strength or Dexterity (my choice), I add my proficiency bonus if I'm proficient with shields, and it deals 1d6 slashing damage.", descriptionFull : "You can make a ranged weapon attack with this magic shield. It has a normal range of 20 feet and a long range of 60 feet, and it uses your Strength or Dexterity for the attack roll (your choice). If you're proficient with shields, you are proficient with attacks made using this shield. On a hit, it deals 1d6 slashing damage. If you throw the shield, it reappears in your hand the instant after it hits or misses a target.", weight : 6, shieldAdd : "Boomerang Shield", weaponOptions : [{ regExpSearch : /^(?=.*boomerang)(?=.*shield).*$/i, name : "Boomerang Shield", source : [["BoMT", 66]], ability : 1, type : "Shield", damage : [1, 6, "slashing"], range : "20/60 ft", weight : 6, description : "Finesse, thrown; Reappears instantly", // Not actually finesse, but easier to code this way and shouldn't cause any issues abilitytodamage : true, selectNow : true }], calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.name === "Boomerang Shield" && tDoc.getField("Proficiency Shields").isBoxChecked(0)) { fields.Proficiency = true; } } ] } }; MagicItemsList["bow of conflagration"] = { name : "Bow of Conflagration", nameTest : "of Conflagration", source : [["BoMT", 66]], // Chapter 9: Knight type : "weapon (any bow)", rarity : "rare", attunement : true, description : "Ammunition fired from this bow blazes brightly. When I hit with an attack roll using this bow, the target takes an extra 1d6 fire damage. If the target is a flammable, nonmagical object, it catches fire, taking 1d6 fire damage at the start of each of my turns until a creature uses an action to extinguish the flames.", descriptionFull : "Ammunition fired from this bow blazes brightly. When you hit with an attack roll using this bow, the target takes an extra 1d6 fire damage. If the target is a flammable, nonmagical object, it catches fire, taking 1d6 fire damage at the start of each of your turns until a creature uses an action to extinguish the flames.", chooseGear : { type : "weapon", prefixOrSuffix : "prefix", descriptionChange : ["replace", "bow"], excludeCheck : function (inObjKey, inObj) { var testRegex = /bow/i; return !testRegex.test(inObjKey) && (!inObj.baseWeapon || !testRegex.test(inObj.baseWeapon)); } }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && v.isRangedWeapon && /bow/i.test(v.baseWeaponName) && /conflagration/i.test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + '+1d6 fire damage; ignites target object'; } }, 'If I include the word "Conflagration" in the name of a bow, it will be treated as the magic weapon Bow of Conflagration. The bow deals an extra 1d6 fire damage. If I target and hit a flammable, nonmagical object, it catches fire, taking 1d6 fire damage at the start of each of my turns until a creature uses an action to extinguish the flames.' ] } }; MagicItemsList["bow of melodies"] = { name : "Bow of Melodies", nameTest : "of Melodies", source : [["BoMT", 66]], // Chapter 9: Knight type : "weapon (any bow)", rarity : "very rare", attunement : true, description : "This bow has multiple strings. I can use these to play one of two melodies on each attack, imbuing it with magic. Melody of Precision: If I'm proficient with Performance, I add +1 (+2 if expertise) to the attack roll. Melody of Reverberation: the attack deals my Charisma modifier in extra thunder damage.", descriptionFull : "This bow has multiple strings and resembles a lyre or small harp. By strumming the strings while setting an arrow to the bow, you imbue the arrow with magic."+ "\n You can play one of the following melodies when you use the bow to make a ranged weapon attack. You must choose to do so before you make the attack roll, and you can play only one melody per attack."+ "\n " + toUni("Melody of Precision") + ". If you're proficient in Performance, you gain a +1 bonus to the attack roll. If you have expertise in Performance, you gain a +2 bonus instead."+ "\n " + toUni("Melody of Reverberation") + ". The melody you strum echoes loudly. On a hit, the target takes extra thunder damage equal to your Charisma modifier.", chooseGear : { type : "weapon", prefixOrSuffix : "prefix", descriptionChange : ["replace", "bow"], excludeCheck : function (inObjKey, inObj) { var testRegex = /bow/i; return !testRegex.test(inObjKey) && (!inObj.baseWeapon || !testRegex.test(inObj.baseWeapon)); } }, calcChanges : { atkAdd : [ function (fields, v) { var chaMod = Number(What('Cha Mod')); // Only add a description if positive Cha Mod and Melody of Precision is not an option or Reverberation is part of the name if (!v.theWea.isMagicWeapon && chaMod > 0 && v.isRangedWeapon && /bow/i.test(v.baseWeaponName) && /^(?=.*melod(ies|y))(?!.*precision).*$/i.test(v.WeaponTextName) && (/reverberation/i.test(v.WeaponTextName) || !hasSkillProf("Performance")[0])) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + '+' + chaMod + ' (Cha mod) thunder damage'; } }, 'If I include the word "Melody" or "Melodies" in the name of a bow, it will be treated as the magic weapon Bow of Melodies. If I also include either "Precision" or "Reverberation" in the name, the respective bonus will be added. if I include neither of those in the name, the bonus will be determined automatically, the Melody of Precision if proficient with Performance (+1 or +2 bonus to hit) or Melody of Reverberation otherwise (+Cha mod thunder damage).' ], atkCalc : [ function (fields, v, output) { // Add to hit bonus if name doesn't include Reverberation. Will be zero if not proficient in Performance if (!v.theWea.isMagicWeapon && v.isRangedWeapon && /bow/i.test(v.baseWeaponName) && /^(?=.*melod(ies|y))(?!.*reverberation).*$/i.test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; var perfProf = hasSkillProf("Performance"); output.extraHit += perfProf[1] ? 2 : perfProf[0] ? 1 : 0; } }, '' ] } }; MagicItemsList["breastplate of balance"] = { name : "Breastplate of Balance", source : [["BoMT", 34]], // Chapter 5: Gem type : "armor (breastplate)", rarity : "rare", attunement : true, description : "This burnished copper breastplate with merchant's scales on the chest has 4 charges, regaining 1d4 at dawn. As a reaction when I or another I can see within 60 ft is about to roll a d20 with (dis)advantage, I can use 1 charge to prevent this (dis)advantage. As a bonus action, I can use 2 charges to cast Lesser Restoration.", descriptionFull : "This burnished copper breastplate looks as if it were made of interlocking gears. Merchant's scales are emblazoned across the chest."+ "\n The armor has 4 charges. You can use the charges in the following ways while wearing the armor:"+ "\n " + toUni("Equalize") + ". When you or a creature you can see within 60 feet of yourself is about to roll a d20 with advantage or disadvantage, you can expend 1 charge and take a reaction to prevent the roll from being affected by advantage or disadvantage."+ "\n " + toUni("Expunge Imbalance") + ". As a bonus action, you can expend 2 charges to cast the Lesser Restoration spell from the armor."+ "\n The armor regains 1d4 expended charges daily at dawn.", weight : 20, action : [["reaction", " (if dis./adv.)"]], usages : 4, recovery : "dawn", additional : "regains 1d4", armorAdd : { select : "Breastplate of Balance", options : ["Breastplate of Balance"] }, spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "2 charges", spells : ["lesser restoration"], selection : ["lesser restoration"], firstCol : 2 }], spellChanges : { "lesser restoration" : { time : "1 bns", changes : "While wearing the armor, I can use 2 of its charges to cast Lesser Restoration as a bonus action." } } }; MagicItemsList["card sharp's deck"] = { name : "Card Sharp's Deck", source : [["BoMT", 40]], // Chapter 6: Rogue type : "wondrous item", rarity : "uncommon", description : 'The cards of this deck shimmer around the edges. As an action, I can throw a card as ranged spell attack using Dexterity. This "Deadly Deal" attack has 120 ft range and deals 1d8 force damage. As an action once per dawn, I can shuffle the deck to cast Spray of Cards at 3rd level with it (save DC 15).', descriptionFull : "The cards of this deck shimmer around the edges. While holding this deck, you can use the following properties:"+ "\n " + toUni("Deadly Deal") + ". As an action, you can use this deck to make a ranged spell attack by throwing a spectral card and using Dexterity for the attack roll. The card has a range of 120 feet and deals 1d8 force damage on a hit."+ "\n " + toUni("Spray of Cards") + ". As an action, you can shuffle the deck and cast the Spray of Cards spell at 3rd level from the deck (spell save DC 15). Once the deck has cast the spell, it can't cast the spell again until the next dawn.", action : [["action", ""]], weaponOptions : [{ regExpSearch : /^(?=.*deadly)(?=.*deal).*$/i, name : "Deadly Deal", source : [["BoMT", 40]], ability : 2, type : "Spell", damage : [1, 8, "force"], range : "120 ft", description : "", abilitytodamage : false, selectNow : true }], usages : 1, recovery : "dawn", additional : "Spray of Cards", spellcastingBonus : [{ name : "Once per dawn", spells : ["spray of cards"], selection : ["spray of cards"], firstCol : "oncelr" }], spellChanges : { "spray of cards" : { description : "All in area 3d10 Force dmg and blinded until their next turn ends; save halves \u0026 not blinded", descriptionShorter : false, changes : "Using Card Sharp's Deck I can cast Spray of Cards at 3rd level once per dawn." } } }; MagicItemsList["clockwork armor"] = { name : "Clockwork Armor", nameTest : /clockwork.*armou?r/i, source : [["BoMT", 67]], // Chapter 9: Knight type : "armor (heavy)", rarity : "very rare", attunement : true, description : "The outside surface and internal joints of this armor whir with interlocking gears, drawing on the magic of the plane of Mechanus. The armor has 4 charges and regains 1d4 used charges daily at dawn. If I make a d20 roll while wearing it, I can expend 1 charge to change the number rolled to a 10.", descriptionFull : "The outside surface and internal joints of this armor whir with interlocking gears, drawing on the orderly magic of the plane of Mechanus."+ "\n The armor has 4 charges. If you make a d20 roll while wearing this armor, you can expend 1 charge to change the number rolled to a 10. The armor regains 1d4 expended charges daily at dawn.", chooseGear : { type : "armor", prefixOrSuffix : ["between", "Clockwork", "Armor"], descriptionChange : ["prefix", "armor"], itemName1stPage : ["suffix", "Clockwork"], excludeCheck : function (inObjKey, inObj) { return !/heavy/i.test(inObj.type); } }, usages : 4, recovery : "dawn", additional : "regains 1d4" }; MagicItemsList["crown of whirling comets"] = { name : "Crown of Whirling Comets", source : [["BoMT", 35]], // Chapter 5: Gem type : "wondrous item", rarity : "very rare", attunement : true, description : "This crown has 6 charges, regaining 1d6 at dawn. As a bonus action, I can use 1 charge to fly my walking speed and hover, for 10 min. I can use 3 charges to cast Ice Storm (DC 16). As an action, I can launch one frigid starlight bolt per charge used, that each deal 2d4 cold damage to a creature I can see within 120 ft.", descriptionLong : "This delicate silver tiara decorated with stellar iconography has gems on the tiara's points that detach and closely orbit my head. It has 6 charges, regaining 1d6 used charges daily at dawn. As a bonus action, I can use 1 charge to gain a flying speed equal to my walking speed and I can hover, for 10 minutes. As an action, I can expend any number of charges to launch one frigid starlight bolt per charge used to a creature I can see within 120 ft. Each bolt automatically hits and deals 2d4 cold damage. Bolts can be used to hit the same or different targets. As an action, I can use 3 charges to cast Ice Storm (save DC 16).", descriptionFull : "This delicate silver tiara is decorated with stellar iconography. While you wear the crown, the gems on the tiara's points detach and closely orbit your head."+ "\n The crown has 6 charges for the following properties, which you can use while wearing the crown:"+ "\n " + toUni("Star Flight") + ". As a bonus action, you can spend 1 charge to gain the power of flight for 10 minutes. For the duration, you gain a flying speed equal to your walking speed, and you can hover. While flying, you glow faintly with starlight."+ "\n " + toUni("Starlight Strike") + ". As an action, you can spend any number of charges to launch bolts of frigid starlight. You launch a number of bolts equal to the number of charges spent, and you can direct the bolts to target one creature or several, so long as all creatures are within 120 feet of you and you can see them. The bolts automatically strike their targets, and each bolt deals 2d4 cold damage."+ "\n " + toUni("Whirling Hail") + ". As an action, you can spend 3 charges and cast the Ice Storm spell (save DC 16)."+ "\n The crown regains 1d6 expended charges daily at dawn.", action : [["bonus action", " (fly)"], ["action", " (bolts)"]], usages : 6, recovery : "dawn", additional : "regains 1d6", fixedDC : 16, spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "3 charges", spells : ["ice storm"], selection : ["ice storm"], firstCol : 3 }] }; MagicItemsList["deck of dimensions"] = { name : "Deck of Dimensions", source : [["BoMT", 40]], // Chapter 6: Rogue type : "wondrous item", rarity : "very rare", attunement : true, description : "This deck has 6 charges, regaining 1d6 used at dawn. As a bonus action, I can use 1 charge to throw a card to an empty spot either within 60 ft and teleport to it, or within 5 ft and teleport to it once in the next 8 hours as an action. I can use 3 charges to cast Arcane Gate, but can't use the deck while the gate is active.", descriptionLong : "These cards are decorated with intricate designs of different planes of existence. The deck has 6 charges, regaining 1d6 used charges daily at dawn. As a bonus action, I can use 1 charge to throw a card to an empty space either within 60 ft and teleport to it now, or within 5 ft and leave it there to use an action within the next 24 hours to speak the card's name and teleport to it. Once I teleport to a card, or 8 hours passed, the card vanishes and returns to the deck. As an action, I can use 3 charges to cast Arcane Gate, but the fluttering cards of the deck make up the gate, rendering the deck useless while it's active.", descriptionFull : "The backs of the cards in this deck are decorated with intricate designs representing different planes of existence. The deck has 6 charges. While holding it, you can expend 1 or more of its charges to use the following properties:"+ "\n " + toUni("Marked Card") + ". As a bonus action, you can expend 1 charge to draw a card from the deck and place it in an unoccupied space within 5 feet of you. The card then becomes marked with an invisible sigil. Once within the next 24 hours, as an action, you can speak the marked card's name and teleport to the card's location, along with any equipment you are wearing or carrying, appearing in the closest unoccupied space to the card. After you teleport in this way, or after 8 hours, the card returns to the deck, and the mark on it fades."+ "\n " + toUni("Riffling Portal") + ". As an action, you can expend 3 charges to cast the Arcane Gate spell from the deck. The deck vanishes, and fluttering cards create the spell's portal rings. When the spell ends, the deck reappears in your possession."+ "\n " + toUni("Shuffling Stride") + ". As a bonus action, you can expend 1 charge to throw a card from the deck to an unoccupied space within 60 feet of yourself and teleport, along with any equipment you're wearing or carrying, to that space. The card then vanishes and returns to the deck."+ "\n The deck regains 1d6 expended charges daily at dawn.", action : [["bonus action", " (throw card)"], ["action", " (teleport back)"]], usages : 6, recovery : "dawn", additional : "regains 1d6", spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "3 charges", spells : ["arcane gate"], selection : ["arcane gate"], firstCol : 3 }] }; MagicItemsList["deck of many more things"] = { name : "Deck of Many More Things", source : [["BoMT", 51]], // Chapter 7: Sage type : "wondrous item", rarity : "legendary", description : "Before drawing cards from this deck, I must declare how many I wish to draw and then draw that number randomly. Any cards drawn in excess have no effect. When a card is drawn, its magic takes effect, it fades from existence, and, unless the card is the Fool or the Jester, reappears in the deck. See Notes page.", descriptionFull : "Over the centuries since the first Deck of Many Things was created, many have sought and failed to replicate it. But some have created new cards. These forty-four additional cards are known collectively as the Deck of Many More Things. (More information on creating new cards for this deck appears in chapter 2.)"+ "\n " + BoMT.toDescrFull(BoMT["deck of many more things"].features) + "\n\n " + BoMT.toDescrFull(BoMT["deck of many more things"].cards) + "\n " + BoMT.toDescrFull(BoMT["deck of many more things"].cards2), toNotesPage : [{ name : "Features and Table", note : BoMT.to1stPerson(BoMT["deck of many more things"].features) }, { name : "Cards and Their Effects, part 1", note : BoMT.to1stPerson(BoMT["deck of many more things"].cards, "\n\u2022 ").replace(/Use my Int/g, "I use my Int").replace(/at my ft/ig, "my feet") }, { name : "Cards and Their Effects, part 2", note : BoMT.to1stPerson(BoMT["deck of many more things"].cards2, "\n\u2022 ").replace(/Use my Int/g, "I use my Int").replace(/I'm not/g, "not") }, { name : "Deck of Many Things' Cards and Effects", source : MagicItemsList["deck of many things"].source, note : MagicItemsList["deck of many things"].toNotesPage[1].note }] }; MagicItemsList["deck of miscellany"] = { name : "Deck of Miscellany", source : [["BoMT", 41]], // Chapter 6: Rogue type : "wondrous item", rarity : "uncommon", description : "Each card of the 32 cards in this wooden box has an illustration of a different item or set of items. As an action, I can pick a card and throw it in an empty space within 5 ft. There it transforms into the item(s) depicted. See the table on the Notes page for the items and the associated real-world playing cards.", descriptionFull : "This wooden box contains a set of thirty-two parchment cards."+ "\n The face of each card bears an illustration of a different item or set of items. As an action, you can draw a card of your choice from the deck and throw it to the ground in an unoccupied space within 5 feet of yourself. When the card hits the ground, the card permanently transforms into the item or set of items depicted on its face. An altered deck of real-world playing cards can simulate the deck, as shown in the table below.\n\n" + BoMT["deck of miscellany"].join("\n"), action : [["action", ""]], toNotesPage : [{ name : "Cards and Their Items", note : "\n This wooden box contains a set of thirty-two parchment cards. The face of each card bears an illustration of a different item or set of items. As an action, I can pick a remaining card and throw it to the ground in an unoccupied space within 5 ft. When the card hits the ground, the card permanently transforms into the item or set of items depicted on its face."+ BoMT.to1stPerson("\nUsed\t" + BoMT["deck of miscellany"].join("\n \u2610\t")) // empty ballet box }] }; MagicItemsList["deck of oracles"] = { name : "Deck of Oracles", source : [["BoMT", 61]], // Chapter 8: Fates type : "wondrous item", rarity : "rare", attunement : true, description : "If I spend 10 minutes consulting this deck of oracle cards when I finish a long rest, I can roll a d20 and record result. Once in the next 8 hours after a creature within 60 ft makes a check, attack roll, or save, I can use my reaction to have it use the number I rolled instead. Once per dawn, I can use these to cast Divination.", descriptionFull : "The illustrations on this deck of oracle cards move or change subtly when viewed indirectly. When you finish a long rest, you can spend 10 minutes consulting the cards for an omen of the coming day. Roll a d20 and record the number rolled. Once in the next 8 hours, immediately after a creature within 60 feet of you makes an ability check, an attack roll, or a saving throw, you can use your reaction to discard the d20 roll; the creature must use the number you rolled in place of its roll."+ "\n Additionally, while holding the cards, you can cast Divination from them. Once this property is used, it can't be used again until the next dawn.", action : [["reaction", ""]], usages : 1, recovery : "dawn", additional : "Divination", spellcastingBonus : [{ name : "Once per dawn", spells : ["divination"], selection : ["divination"], firstCol : "oncelr" }] }; MagicItemsList["deck of wild cards"] = { name : "Deck of Wild Cards", source : [["BoMT", 41]], // Chapter 6: Rogue type : "wondrous item", rarity : "very rare", description : "As an action, I can draw a random card from this deck of heavy vellum cards and throw it. I make a ranged spell attack using Dex with a range of 30 ft, dealing 1d4 slashing damage on a hit and one of four magical effects depending on the card drawn, see Notes page. The thrown card returns to the deck after the attack.", descriptionFull : BoMT.toDescrFull(BoMT["deck of wild cards"]), weaponOptions : [{ regExpSearch : /^(?=.*deck)(?=.*wild)(?=.*cards?).*$/i, name : "Deck of Wild Cards", source : [["BoMT", 41]], ability : 2, type : "Spell", damage : [1, 4, "slashing"], range : "30 ft", description : "Also random effect on hit, see Notes page", abilitytodamage : false, selectNow : true }], toNotesPage : [{ name : "Random Card Effects", note : BoMT.to1stPerson(BoMT["deck of wild cards"]) }] }; MagicItemsList["deck of wonder"] = { name : "Deck of Wonder", source : [["BoMT", 55]], // Chapter 7: Sage type : "wondrous item", rarity : "uncommon", description : "Before drawing cards from this deck, I must declare how many I wish to draw and then draw that number randomly. Any cards drawn in excess have no effect. When a card is drawn, its magic takes effect and then it fades from existence and reappears in the deck. See Notes page.", descriptionFull : BoMT.toDescrFull(BoMT["deck of wonder"].features) + "\n\n " + BoMT.toDescrFull(BoMT["deck of wonder"].cards), toNotesPage : [{ name : "Features and Table", note : BoMT.to1stPerson(BoMT["deck of wonder"].features) }, { name : "Cards and Their Effects", note : BoMT.to1stPerson(BoMT["deck of wonder"].cards, "\n\u2022 ") }] }; MagicItemsList["donjon's sundering sphere"] = { name : "Donjon's Sundering Sphere", source : [["BoMT", 35]], // Chapter 5: Gem type : "wondrous item", rarity : "rare", attunement : true, description : "Attuning to this marble-size crystal sphere includes attaching it to a nonmagical melee weapon, that then becomes magical +1. It grants me adv. on saves vs. being send to another dimension. Once per dawn when I hit a creature, I can have it make a DC 16 Cha save or be stuck in a demiplane until its next turn ends.", descriptionLong : "Attuning to this marble-size crystal sphere includes attaching it to the hilt of a nonmagical melee weapon weapon, that then becomes a magic weapon with a +1 bonus to attack and damage rolls. While wielding it, I have advantage on save against being send to an extradimensional space or another plane of existence. Once per dawn when I hit a creature with this weapon, I can have it make a DC 16 Charisma save or be banished to a harmless demiplane until its next turn ends. It returns to the space it left, or the nearest empty space. When I end my attunement to the sphere, it detaches from the weapon.", descriptionFull : "This marble-size crystal sphere glows with extraplanar energy."+ "\n As part of attuning to this item, you press the crystal sphere to the hilt of a nonmagical melee weapon of your choice, magically attaching the sphere to the weapon. The weapon becomes a magic weapon with a +1 bonus to attack and damage rolls. While wielding this weapon, you gain the following benefits:"+ "\n " + toUni("Dimensional Anchor") + ". You have advantage on saving throws against spells or effects that would send you to an extradimensional space, a demiplane, or another plane of existence against your will."+ "\n " + toUni("Isolating Smite") + ". When you hit a creature with this weapon, you can force the creature to make a DC 16 Charisma saving throw. On a failed save, the creature is banished to a harmless demiplane until the end of its next turn. When the banished creature returns, it reappears in the space it left or the nearest unoccupied space if that space is occupied. Once this property is used, it can't be used again until the next dawn."+ "\n When you end your attunement to the sphere, the sphere harmlessly detaches from the weapon, and the weapon reverts to a nonmagical piece of equipment.", savetxt : { adv_vs : ["being send to other plane/dimension"] }, usages : 1, recovery : "dawn", additional : "Banish", calcChanges : { atkCalc : [ function (fields, v, output) { if (!v.theWea.isMagicWeapon && v.isMeleeWeapon && /\bdonjon'?s\b/i.test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; output.magic = v.thisWeapon[1] + 1; } }, 'If I include the word "Donjon\'s" in the name of a melee weapon, it will be treated as a melee weapon with the Donjon\'s Sundering Sphere attached. It adds a +1 bonus to attack and damage rolls made with it.' ] } }; MagicItemsList["dried leech"] = { name : "Dried Leech", source : [["BoMT", 67]], // Chapter 9: Knight type : "weapon (any ammunition)", rarity : "uncommon", description : "If a creature is hit by this magic ammunition, the leech animates and attaches to the target, dealing 1d4 piercing damage at the start of each of their turns. The leech detaches if it deals at least 10 damage or the target dies. Anyone can use their action to detach a leech. A detached leech dies and turns nonmagical.", descriptionFull : "This leech has been dried and imbued with a mote of animating magic. If you hit a creature with a ranged attack roll using this ammunition, the leech springs to life and sinks its teeth into the target, dealing 1d4 piercing damage at the start of each of the target's turns. If the leech deals at least 10 damage or the target dies, the leech falls off. A creature, including the target, can use its action to detach the leech. Once a leech is no longer attached to its target, the leech dies and is no longer magical.", allowDuplicates : true, chooseGear : { type : "ammo", prefixOrSuffix : "suffix", descriptionChange : ["replace", "ammunition"], excludeCheck : function (inObjKey, inObj) { return /vials|flasks/i.test(inObj.icon); } } }; MagicItemsList["euryale's aegis"] = { name : "Euryale's Aegis", source : [["BoMT", 35]], // Chapter 5: Gem type : "shield", rarity : "legendary", attunement : true, description : "This brass shield grants me poison resistance and petrification immunity. I can use it to cast 3 spells, each once per dawn. As a bonus action once per dawn, a target I can see within 30 ft must make a DC 20 Con save or be restrained until its next turn starts, at which point it must save again or be petrified for 24 hours.", descriptionLong : "This gleaming brass shield bears a relief of the legendary medusa druid Euryale. It grants me poison resistance and immunity to being petrified. I can use it to cast 3 spells, each once per dawn: Lesser Restoration, Locate Creature, and Transport via Plants.\nAs a bonus action once per dawn, I can try to petrify a creature I can see within 30 ft. It must make a DC 20 Constitution save or be restrained while its body turns to stone. When its next turn starts, it must then make a DC 20 Constitution save again or be petrified for 24 hours. On a successful save, the restrained condition ends.", descriptionFull : "This gleaming brass shield bears a relief of the legendary medusa druid Euryale."+ "\n While wielding this shield, you gain the following benefits:"+ "\n " + toUni("Blessing of Euryale") + ". You have resistance to poison damage and are immune to the petrified condition."+ "\n " + toUni("Petrifying Heraldry") + ". As a bonus action, you can make the front of the shield flare with a medusa's petrifying magic, causing the relief's eyes to glow brightly. Choose one creature you can see within 30 feet of you. The creature must succeed on a DC 20 Constitution saving throw, or it has the restrained condition as its body turns to stone. The restrained creature must make another DC 20 Constitution saving throw at the start of its next turn. On a failed save, the creature has the petrified condition for 24 hours. On a successful save, the restrained condition ends. Once this bonus action is used, it can't be used again until the next dawn."+ "\n " + toUni("Spellcasting") + ". While wielding the shield, you can use an action to cast one of the following spells from it: Lesser Restoration, Locate Creature, Transport via Plants. Once you use the shield to cast a spell, the shield can't cast that spell again until the next dawn.", weight : 6, action : [["bonus action", " - Petrify"]], shieldAdd : "Euryale's Aegis", dmgres : ["Poison"], savetxt : { immune : ["petrified"] }, spellcastingBonus : [{ name : "Once per dawn", spells : ["lesser restoration", "locate creature", "transport via plants"], selection : ["lesser restoration", "locate creature", "transport via plants"], firstCol : "oncelr", times : 3 }], extraLimitedFeatures : [{ name : "Euryale's Aegis - Petrify", usages : 1, recovery : "dawn" }, { name : "Euryale's Aegis (each spell once)", usages : 3, recovery : "dawn" }] }; MagicItemsList["fabulist gem"] = { name : "Fabulist Gem", source : [["BoMT", 36]], // Chapter 5: Gem type : "wondrous item", rarity : "uncommon", attunement : true, description : "As a bonus action, I can use this glittering red gem to change the appearance of what I'm wearing, the color, pattern, or to something different entirely. This doesn't pass physical inspection. As an action once per dawn, I can create a pile of coins up to 100 gp on a surface within 10 ft. They last for 1 hour.", descriptionFull : "This glittering red gem is commonly found embedded in a ring or brooch."+ "\n While wearing the gem, you gain the following benefits."+ "\n " + toUni("Counterfeit Coins") + ". You can use your action to magically create a pile of coins, worth no more than 100 gp total, in an unoccupied space within 10 feet of yourself. The pile must appear on a surface that can support it. After 1 hour, the coins vanish, regardless of where they are. Once this action is used, it can't be used again until the next dawn."+ "\n " + toUni("Illusory Fashion") + ". As a bonus action, you can magically change the appearance of your clothing and armor. You can change the style, color, and apparent quality of what you're wearing, or you can make it appear as if you were wearing different garments entirely. In either case, the changes wrought by this magic fail to pass physical inspection.", action : [["action", " - Counterfeit Coins"], ["bonus action", " - Illusory Fashion"]], extraLimitedFeatures : [{ name : "Fabulist Gem - Counterfeit Coins", usages : 1, recovery : "dawn" }], choices : ["Brooch", "Ring"], "brooch" : { name : "Fabulist Gem Brooch", description : "As a bonus action, I can use this brooch's glittering red gem to change the appearance of what I'm wearing, the color, pattern, or to something different entirely. This doesn't pass physical inspection. As an action once per dawn, I can create a pile of coins up to 100 gp on a surface within 10 ft. They last for 1 hour." }, "ring" : { name : "Fabulist Gem Ring", type : "ring", description : "As a bonus action, I can use this ring's glittering red gem to change the appearance of what I'm wearing, the color, pattern, or to something different entirely. This doesn't pass physical inspection. As an action once per dawn, I can create a pile of coins up to 100 gp on a surface within 10 ft. They last for 1 hour." } }; MagicItemsList["fate cutter shears"] = { name : "Fate Cutter Shears", source : [["BoMT", 61]], // Chapter 8: Fates type : "weapon (dagger)", rarity : "very rare", attunement : true, description : "The blades of these pruning shears bear many nicks and dents but still cut cleanly. They function as a magic dagger that deal +1d6 force damage. Once per dawn when I hit a creature with them, I can cut their fate. Until that target finishes a long rest, attack rolls against them score a critical hit on a roll of 19 or 20.", descriptionFull : "The blades of these pruning shears bear many nicks and dents but still cut cleanly. The shears function as a magic dagger. The weapon has the following properties:"+ "\n " + toUni("Ever Sharp") + ". When you hit with an attack using the shears, the target takes an extra 1d6 force damage."+ "\n " + toUni("Sever Threads") + ". When you hit a creature with the shears, you can cut that creature's fate. Until the target finishes a long rest, attack rolls against it score a critical hit on a roll of 19 or 20 on the d20. Once this property is used, it can't be used again until the next dawn.", weight : 1, usages : 1, recovery : "dawn", additional : "Sever Threads", weaponOptions : [{ baseWeapon : "dagger", regExpSearch : /^(?=.*fate)(?=.*cutt(er|ing))(?=.*(shears?|dagger)).*$/i, name : "Fate Cutter Shears", source : [["BoMT", 61]], description : "Finesse, light, thrown; +1d6 force damage", selectNow : true }] }; MagicItemsList["fate dealer's deck"] = { name : "Fate Dealer's Deck", source : [["BoMT", 61]], // Chapter 8: Fates type : "wondrous item", attunement : true, prerequisite : "Requires attunement by a cleric or paladin", prereqeval : function (v) { return classes.known.paladin || classes.known.cleric ? true : false; }, description : "While holding this deck, I can use it as a spellcasting focus and I gain a bonus to my spell attack rolls and spell save DC determined by its rarity: rare (+1), very rare (+2), or legendary (+3). As an action, I can draw a card and expend and roll one HD to heal or deal radiant damage to a creature within 30 ft I can see, equal to the roll and the deck's bonus.", descriptionFull : "The backs of these cards are inscribed with glyphs representing the Inner Planes, the Outer Planes, or the holy symbols of various deities. While holding this deck, you can use it as a spellcasting focus, and you gain a bonus to spell attack rolls and to your spell save DC. The bonus is determined by the deck's rarity: rare (+1), very rare (+2), or legendary (+3)."+ "\n In addition, while you're holding the deck, you can draw a card as an action to expend and roll one of your Hit Dice and add the deck's bonus to the number rolled. One creature you can see within 30 feet of you either takes radiant damage or regains hit points (your choice) equal to the total.", choices : ["+1 Fate Dealer's Deck (rare)", "+2 Fate Dealer's Deck (very rare)", "+3 Fate Dealer's Deck (legendary)"], "+1 fate dealer's deck (rare)" : { name : "Fate Dealer's Deck +1", nameTest : "+1 Fate Dealer's Deck", rarity : "rare", description : "While holding this deck, I can use it as a spellcasting focus and it gives me a +1 bonus to my spell attacks and spell save DC. As an action, I can draw a card from it and expend and roll one of my HD. I then choose a creature within 30 ft that I can see and either heal it or deal it radiant damage equal to the roll +1.", calcChanges : { spellCalc : [ function (type, spellcasters, ability) { if (type !== "prepare") return 1; }, "While holding the Fate Dealer's Deck, I gain a +1 bonus to spell attack rolls and to the saving throw DCs of my spells." ] } }, "+2 fate dealer's deck (very rare)" : { name : "Fate Dealer's Deck +2", nameTest : "+2 Fate Dealer's Deck", rarity : "very rare", description : "While holding this deck, I can use it as a spellcasting focus and it gives me a +2 bonus to my spell attacks and spell save DC. As an action, I can draw a card from it and expend and roll one of my HD. I then choose a creature within 30 ft that I can see and either heal it or deal it radiant damage equal to the roll +2.", calcChanges : { spellCalc : [ function (type, spellcasters, ability) { if (type !== "prepare") return 2; }, "While holding the Fate Dealer's Deck, I gain a +2 bonus to spell attack rolls and to the saving throw DCs of my spells." ] } }, "+3 fate dealer's deck (legendary)" : { name : "Fate Dealer's Deck +3", nameTest : "+3 Fate Dealer's Deck", rarity : "legendary", description : "While holding this deck, I can use it as a spellcasting focus and it gives me a +3 bonus to my spell attacks and spell save DC. As an action, I can draw a card from it and expend and roll one of my HD. I then choose a creature within 30 ft that I can see and either heal it or deal it radiant damage equal to the roll +3.", calcChanges : { spellCalc : [ function (type, spellcasters, ability) { if (type !== "prepare") return 3; }, "While holding the Fate Dealer's Deck, I gain a +3 bonus to spell attack rolls and to the saving throw DCs of my spells." ] } } }; MagicItemsList["feywrought armor"] = { name : "Feywrought Armor", nameTest : /feywrought.*armou?r/i, source : [["BoMT", 67]], // Chapter 9: Knight type : "armor (light, medium, or heavy)", rarity : "rare", attunement : true, description : "While wearing this colorful, flowery armor that was forged in the Feywild, I have advantage on saves to avoid or end the charmed condition on myself. The armor has 3 charges and regains 1d3 used charges daily at dawn. As an action, I can use 1 charge to cast Compulsion (save DC 15) from it.", descriptionFull : "This colorful, flowery armor was forged in the Feywild and is infused with that plane's captivating magic."+ "\n While wearing this armor, you have advantage on saving throws you make to avoid or end the charmed condition on yourself."+ "\n This armor has 3 charges. You can use an action to expend a charge to cast the Compulsion spell (save DC 15) from this armor. The armor regains 1d3 expended charges daily at dawn.", chooseGear : { type : "armor", prefixOrSuffix : ["between", "Feywrought", "Armor"], descriptionChange : ["prefix", "armor"], itemName1stPage : ["suffix", "Feywrought"] }, usages : 3, recovery : "dawn", additional : "regains 1d3", savetxt : { adv_vs : ["charmed"] }, fixedDC : 15, spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "1 charge", spells : ["compulsion"], selection : ["compulsion"], firstCol : 1 }] }; MagicItemsList["fool's blade"] = { name : "Fool's Blade", source : [["BoMT", 36]], // Chapter 5: Gem type : "weapon (any sword)", rarity : "very rare", attunement : true, description : "As a bonus action once per dawn, I can use this weapon +2 to feint a target within 5 ft, giving me adv. on attacks vs. it until my next turn starts. As a reaction once per dawn when a creature within 60 ft attacks me, I can have it make a DC 15 Int save or have it target another of my choice within its reach.", descriptionLong : "This magic weapon appears ordinary, but bears strong illusion magic that allows me to deceive opponents. I have a +2 bonus to attack and damage rolls with it.\nFool's Feint: As a bonus action once per dawn, I can feint a creature within 5 ft, giving me advantage on attack rolls against it until the start of my next turn.\nMisdirect: As a reaction once per dawn when a creature within 60 ft targets me with an attack roll, I can have it make a DC 15 Intelligence save. On a failed save, the attack instead targets another creature of my choice that is within the attacker's reach.", descriptionFull : "This weapon appears ordinary, but it bears strong illusion magic that allows its wielder to skillfully deceive opponents."+ "\n You have a +2 bonus to attack and damage rolls made with this magic weapon. While wielding it, you also gain the following benefits:"+ "\n " + toUni("Fool's Feint") + ". As a bonus action, you can feint, choosing a creature within 5 feet of you as your target. Until the start of your next turn, you have advantage on attack rolls against the target. Once this bonus action is used, it can't be used again until the next dawn."+ "\n " + toUni("Misdirect") + ". When a creature within 60 feet of you targets you with an attack roll, you can use your reaction to require that creature to make a DC 15 Intelligence saving throw. On a failed save, the attack instead targets another creature of your choice that is within the attacker's reach. Once this reaction has been used, it can't be used again until the next dawn.", action : [["bonus action", " - Feint"], ["reaction", " - Misdirect"]], chooseGear : { type : "weapon", prefixOrSuffix : "brackets", descriptionChange : ["replace", "sword"], itemName1stPage : ["suffix", "Fool's"], excludeCheck : function (inObjKey, inObj) { var testRegex = /sword|scimitar|rapier/i; return !testRegex.test(inObjKey) && (!inObj.baseWeapon || !testRegex.test(inObj.baseWeapon)); } }, calcChanges : { atkCalc : [ function (fields, v, output) { if (!v.theWea.isMagicWeapon && v.isMeleeWeapon && /sword|scimitar|rapier/i.test(v.baseWeaponName) && /\bfool'?s\b/i.test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; output.magic = v.thisWeapon[1] + 2; } }, 'If I include the word "Fool\'s" in the name of a sword, it will be treated as the magic weapon Fool\'s Blade. It adds a +2 bonus to attack and damage rolls made with it.' ] } }; MagicItemsList["forcebreaker weapon"] = { name : "Forcebreaker Weapon", nameTest : "Forcebreaker", source : [["BoMT", 67]], // Chapter 9: Knight type : "weapon (any that deals bludgeoning damage)", rarity : "very rare", description : "This magic weapon gives +2 to hit and damage. It was crafted to destroy structures made of magical force, such as a Wall of Force. With one strike with this weapon, I can shatter a Large or smaller structure of magical force, or shatter a 20-ft cube portion of a Huge or larger structure.", descriptionFull : "You gain a +2 bonus to attack and damage rolls made with this magic weapon."+ "\n This weapon was crafted to destroy structures made of force, such as those created by Forcecage or Wall of Force. Striking a Large or smaller structure of magical force with this weapon automatically shatters that structure. If the target is a Huge or larger structure of force, this weapon shatters a 20-foot-cube portion of it.", chooseGear : { type : "weapon", prefixOrSuffix : "suffix", descriptionChange : ["replace", "weapon"], excludeCheck : function (inObjKey, inObj) { var damageArr = inObj.baseWeapon && !inObj.damage ? WeaponsList[inObj.baseWeapon].damage : inObj.damage; return !/bludg(\.|eoning)/i.test(damageArr.toString()); } }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && /forcebreaker/i.test(v.WeaponTextName) && /bludg(\.|eoning)/i.test(fields.Damage_Type)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + 'Shatters magical force'; } }, 'If I include the word "Forcebreaker" in the name of a bludgeoning weapon, it will be treated as the magic weapon Forcebreaker Weapon. It adds a +2 bonus to attack and damage rolls made with it.' ], atkCalc : [ function (fields, v, output) { if (!v.theWea.isMagicWeapon && /forcebreaker/i.test(v.WeaponTextName) && /bludg(\.|eoning)/i.test(fields.Damage_Type)) { v.theWea.isMagicWeapon = true; output.magic = v.thisWeapon[1] + 2; } }, '' ] } }; MagicItemsList["glimmering moonbow"] = { name : "Glimmering Moonbow", nameTest : "Glimmering Moon", source : [["BoMT", 36]], // Chapter 5: Gem type : "weapon (any bow)", rarity : "rare", attunement : true, description : "This silver-and-black bow adds +1 to its to hit and damage rolls, creates its own ammo that lasts until it hits or misses a target, and deals +1d6 radiant damage. As a bonus action once per dawn, I can use it to gain resistance to piercing, bludgeoning, and slashing damage until my next turn starts, ", descriptionFull : "This silver-and-black bow is engraved with the phases of the moon. You gain a +1 bonus to attack and damage rolls made with this magic weapon."+ "\n When you hit with a ranged attack roll using this magic bow, the target takes an extra 1d6 radiant damage. If you load no ammunition in the weapon, it produces its own, automatically creating one piece of magic ammunition when you make a ranged attack with it. The ammunition created by the bow vanishes the instant after it hits or misses a target."+ "\n While wielding this magic bow, you can use a bonus action to enter a semi-incorporeal state until the start of your next turn. While semi-incorporeal, you have resistance to bludgeoning, piercing, and slashing damage. Once this bonus action is used, it can't be used again until the next dawn.", usages : 1, recovery : "dawn", additional : "resistances", action : [["bonus action", " (resistances)"]], chooseGear : { type : "weapon", prefixOrSuffix : "suffix", descriptionChange : ["replace", "bow"], excludeCheck : function (inObjKey, inObj) { var testRegex = /bow/i; return !testRegex.test(inObjKey) && (!inObj.baseWeapon || !testRegex.test(inObj.baseWeapon)); } }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && v.isRangedWeapon && /bow/i.test(v.baseWeaponName) && /^(?=.*glimmering)(?=.*moon).*$/i.test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(;|,)? ?(loading|Counts as magical)/ig, ''); fields.Description += (fields.Description ? '; ' : '') + '+1d6 radiant damage'; } }, 'If I include the words "Glimmering" and "Moon" in the name of a bow, it will be treated as the magic weapon Glimmering Moonbow. It has +1 to hit and damage, deals +1d6 radiant damage, and produces its own ammunition, thus its loading property is removed if it has it.' ], atkCalc : [ function (fields, v, output) { if (!v.theWea.isMagicWeapon && v.isRangedWeapon && /bow/i.test(v.baseWeaponName) && /^(?=.*glimmering)(?=.*moon).*$/i.test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; output.magic = v.thisWeapon[1] + 1; } }, '' ] } }; MagicItemsList["gloomwrought armor"] = { name : "Gloomwrought Armor", nameTest : /gloomwrought.*armou?r/i, source : [["BoMT", 67]], // Chapter 9: Knight type : "armor (light, medium, or heavy)", rarity : "rare", attunement : true, description : "While wearing this intricate grayscale armor forged in the Shadowfell, I have advantage on saves to avoid or end the frightened condition on myself. The armor has 3 charges and regains 1d3 used charges daily at dawn. As an action, I can use 1 charge to cast Calm Emotions (save DC 15) from it.", descriptionFull : "This intricate grayscale armor was forged in the Shadowfell and is infused with that plane's gloom."+ "\n While you're wearing this armor, you have advantage on saving throws you make to avoid or end the frightened condition on yourself."+ "\n This armor has 3 charges. You can expend a charge to cast the Calm Emotions spell (save DC 15) from the armor. This armor regains 1d3 expended charges daily at dawn.", chooseGear : { type : "armor", prefixOrSuffix : ["between", "Gloomwrought", "Armor"], descriptionChange : ["prefix", "armor"], itemName1stPage : ["suffix", "Gloomwrought"] }, usages : 3, recovery : "dawn", additional : "regains 1d3", savetxt : { adv_vs : ["frightened"] }, fixedDC : 15, spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "1 charge", spells : ["calm emotions"], selection : ["calm emotions"], firstCol : 1 }] }; MagicItemsList["grasping whip"] = { name : "Grasping Whip", source : [["BoMT", 67]], // Chapter 9: Knight type : "weapon (whip)", rarity : "rare", description : "I gain a +1 bonus to attack and damage rolls made with this magic whip. When I hit a creature or object that is Large or smaller with this whip, I can pull that creature or object 5 ft toward me instead of dealing damage.", descriptionFull : "You gain a +1 bonus to attack and damage rolls made with this magic whip. When you hit a creature or object that is Large or smaller with this whip, you can pull that creature or object 5 feet toward you instead of dealing damage.", weight : 3, weaponOptions : [{ baseWeapon : "whip", regExpSearch : /^(?=.*grasping)(?=.*whip).*$/i, name : "Grasping Whip", source : [["BoMT", 67]], description : "Finesse, reach; Forgo damage to pull \u2264 Large 5 ft to me", selectNow : true }] }; MagicItemsList["hammer of runic focus"] = { name : "Hammer of Runic Focus", source : [["BoMT", 67]], // Chapter 9: Knight type : "weapon (warhammer)", rarity : "very rare", attunement : true, description : "As a bonus action three times per dawn, I can slam this hammer on the ground, creating a 15-ft radius glowing circle of runes wherein it's a +3 warhammer glowing with matching runes. The rune circle disappears after 1 minute, when I create another, or when I dismiss it as a bonus action.", descriptionFull : "This magic hammer has 3 charges. As a bonus action, you can expend 1 charge and slam this hammer on the ground, creating a 15-foot-radius circle of glowing runes centered on the point of impact. While you're inside that area, your hammer glows with matching runes, and you gain a +3 bonus to attack and damage rolls made with this hammer. The rune circle disappears after 1 minute, when you create another rune circle, or when you dismiss the rune circle as a bonus action. This hammer regains 1d3 expended charges daily at dawn.", weight : 2, action : [["bonus action", " (start/end)"]], usages : 3, recovery : "dawn", weaponOptions : [{ baseWeapon : "warhammer", regExpSearch : /^(?=.*hammer)(?=.*runic)(?=.*focus).*$/i, name : "Hammer of Runic Focus", source : [["BoMT", 67]], description : "Versatile (1d10); +2 to hit/damage while inside its circle", selectNow : true }] }; MagicItemsList["house of cards"] = { name : "House of Cards", source : [["BoMT", 61]], // Chapter 8: Fates type : "wondrous item", rarity : "uncommon", description : "As an action once per dawn, I can have this deck of cards deal themselves into a shelter centered on a point within 30 ft. It can be any shape that fits in a 40-ft cube, with 1 door and up to 4 windows, that only I can open or close. It has 15 AC, 50 HP, and lasts for 24 hours, I dismiss it as an action, or it reaches 0 HP.", descriptionLong : "This deck of cards is decorated with geometric shapes that have a protective motif. As an action once per dawn, I can cause the cards to transform into a shelter made of cards centered on a point within 30 ft. It can be any shaped I want that fits in a 40-ft cube. It has a floor, a roof, one door and up to four windows, and only I can open or close them. It has a comfortable temperature inside, AC 15, 50 HP, and immunity to poison and psychic damage. It lasts for 24 hours, until I dismiss it as an action, or until it is reduced to 0 HP. When the shelter's duration ends, it transforms back into a deck of cards in my hand.", descriptionFull : "This deck of cards is decorated with geometric shapes that have a protective motif. While you're holding the deck, you can use an action to shuffle it and cause the cards to deal themselves out and transform into a shelter made of cards. The shelter can be shaped however you desire, but it must fit in a 40-foot cube centered on a point within 30 feet of you. The shelter has one door and up to four windows, and only you can open or close them. It has a floor and a roof, and it maintains a comfortable temperature inside."+ "\n The shelter has AC 15, 50 hit points, and immunity to poison and psychic damage. The shelter lasts for 24 hours, until you dismiss it as an action, or until it is reduced to 0 hit points. When the shelter's duration ends, it transforms back into a deck of cards and appears in your hand. Once the deck has transformed into a shelter, it can't be used again until the next dawn.", action : [["action", ""]], usages : 1, recovery : "dawn" }; MagicItemsList["jester's mask"] = { name : "Jester's Mask", source : [["BoMT", 36]], // Chapter 5: Gem type : "wondrous item", rarity : "legendary", attunement : true, prerequisite : "Requires attunement by a bard, sorcerer, or warlock", prereqeval : function (v) { return classes.known.bard || classes.known.sorcerer || classes.known.warlock ? true : false; }, description : "I can use this harlequin mask as a spellcasting focus. It adds a +3 bonus to my spell attacks and spell save DCs that use Charisma. Once per dawn when I roll a 1 on a d20, I can change it to a 20. As a reaction once per dawn when I'm hit by an attack roll, I can teleport 30 ft to an empty space I can see, taking no damage.", descriptionLong : "While I'm wearing this colorful, harlequin domino mask edged with pearls, it grants me:"+ "\u2022 Charismatic Focus: I can use it as a spellcasting focus and it grants me a +3 bonus to spell attack rolls and spell saving throw DCs that use Charisma as the spellcasting ability."+ "\u2022 Marvelous Escape: As a reaction once per dawn when a creature hits me with an attack roll, I can teleport in a puff of smoke and sparkles instead of taking damage. I teleport to an empty space I can see within 30 ft, along with anything I'm wearing or carrying."+ "\u2022 Topsy-Turvy: Once per dawn when I roll a 1 on a d20, I can treat it as a 20 instead.", descriptionFull : "This colorful, harlequin domino mask is edged with pearls. While wearing this mask, you gain the following benefits:"+ "\n " + toUni("Charismatic Focus") + ". You can use the mask as a spellcasting focus. You gain a +3 bonus to any spell attack rolls and spell saving throw DCs that use Charisma as the spellcasting ability."+ "\n " + toUni("Marvelous Escape") + ". When a creature hits you with an attack roll, you can use your reaction to disappear in a puff of smoke and colorful sparkles. You take no damage and instead teleport, along with anything you are wearing or carrying, to an unoccupied space you can see within 30 feet of yourself. Once this reaction is used, it can't be used again until the next dawn."+ "\n " + toUni("Topsy-Turvy") + ". When you roll a 1 on a d20, you can treat the roll as if you rolled a 20 instead. Once this property is used, it can't be used again until the next dawn.", action : [["reaction", " (escape)"]], extraLimitedFeatures : [{ name : "Jester's Mask - Marvelous Escape", usages : 1, recovery : "dawn" }, { name : "Jester's Mask - Topsy-Turvy", usages : 1, recovery : "dawn" }], calcChanges : { spellCalc : [ function (type, spellcasters, ability) { if (type !== "prepare" && ability === 6) return 3; }, "While wearing the Jester's Mask, I gain a +3 bonus to any spell attack rolls and spell saving throw DCs that use Charisma as the spellcasting ability." ] } }; MagicItemsList["plate of knight's fellowship"] = { name : "Plate of Knight's Fellowship", source : [["BoMT", 37]], // Chapter 5: Gem type : "armor (plate)", rarity : "uncommon", attunement : true, description : "This gleaming set of silver-and-gold plate armor never tarnishes. As a bonus action once per dawn, I can use it to summon a warrior spirit (knight) to an empty spot within 30 ft. It lasts for 1 minute or until reduced to 0 HP. It is an ally to me, shares my initiative and obeys my commands. See the Companion page.", descriptionFull : "This gleaming set of silver-and-gold plate armor never tarnishes."+ "\n While wearing this armor, you can use a bonus action to summon the spirit of a warrior to your aid. The spirit's corporeal form manifests in an unoccupied space of your choice within 30 feet of you, and it uses the knight stat block. The spirit disappears when it drops to 0 hit points or after 1 minute, whichever comes first."+ "\n The spirit is an ally to you and your companions. In combat, the spirit shares your initiative count but takes its turn immediately after yours. The spirit obeys your commands (no action required by you); if you don't issue any commands, the spirit takes the Dodge action and uses its movement to avoid danger."+ "\n Once this bonus action is used, it can't be used again until the next dawn.", weight : 65, usages : 1, recovery : "dawn", action : [["bonus action", ""]], armorAdd : { select : "Plate of Knight's Fellowship", options : ["Plate of Knight's Fellowship"] }, creaturesAdd : [["Knight"]], creatureOptions : [{ name : "Knight", source : [["SRD", 400], ["M", 347]], eval : function(prefix) { Value(prefix + "Comp.Desc.Name", "Warrior Spirit"); }, size : 3, type : "Humanoid", alignment : "any alignment", ac : 18, hp : 52, hd : [8, 8], speed : "30 ft", scores : [16, 11, 14, 11, 11, 15], saves : ["", "", 4, "", 2, ""], passivePerception : 10, languages : "any one language (usually Common)", challengeRating : "3", proficiencyBonus : 2, attacksAction : 2, attacks : [{ name : "Greatsword", ability : 1, damage : [2, 6, "slashing"], range : "Melee (5 ft)", description : "Heavy, two-handed; Two greatsword attacks as an Attack action" }, { name : "Heavy Crossbow", ability : 2, damage : [1, 10, "piercing"], range : "100/400 ft", description : "Ammunition, heavy, loading, two-handed" }], actions : [{ name : "Multiattack", description : "As an action on its turn, the knight can make two melee attacks." } ,{ name : "Leadership (Recharges after a Short or Long Rest)", description : "As an action, the knight can activate this ability. Then, for 1 minute, the knight can utter a special command or warning whenever a nonhostile creature that it can see within 30 ft of it makes an attack roll or save. The creature can add +1d4 to its roll provided it can hear and understand the knight. A creature can benefit from only one Leadership die at a time. This effect ends if the knight is incapacitated." }, { name : "Parry", description : "As a reaction, the knight can add +2 AC against one melee attack that would hit it. To do so, the knight must see the attacker and be wielding a melee weapon." }], features : [{ name : "Brave", description : "The knight has advantage on saving throws against being frightened." }, { name : "Summoned", description : "The warrior spirit is an ally to you and your companions. It shares your initiative count but takes its turn immediately after yours. The spirit obeys your commands (no action), or takes the Dodge action and uses its movement to avoid danger if issued no commands. The spirit disappears when it drops to 0 hit points or after 1 minute, whichever comes first." }] }] }; MagicItemsList["ring of puzzler's wit"] = { name : "Ring of Puzzler's Wit", source : [["BoMT", 37]], // Chapter 5: Gem type : "ring", rarity : "uncommon", description : "This gold ring bears a fluorite stone and is enchanted to sharpen the wearer's mind. The ring has 3 charges and regains 1d4-1 expended charges daily at dawn. When I make an Intelligence check, I can expend 1 charge to grant myself advantage on the check.", descriptionFull : "This gold ring bears a fluorite stone and is enchanted to sharpen the wearer's mind."+ "\n The ring has 3 charges and regains 1d4 - 1 expended charges daily at dawn. When you make an Intelligence check, you can expend 1 charge to grant yourself advantage on the check.", usages : 3, recovery : "dawn", additional : "regains 1d4-1" }; MagicItemsList["rod of hellish flames"] = { name : "Rod of Hellish Flames", source : [["BoMT", 37]], // Chapter 5: Gem type : "rod", rarity : "very rare", attunement : true, prerequisite : "Requires attunement by a spellcaster", prereqeval : function(v) { return v.isSpellcaster; }, description : "I can use this black iron rod as an arcane focus and it grants me resistance to fire and necrotic damage. Once per dawn I can use it to cast Hellish Rebuke as a 4th-level spell (save DC 16). When I cast a spell that deals fire or necrotic damage, I can once per dawn use it to maximize the damage instead of rolling.", descriptionFull : "Glowing cinders orbit the flanged head of this black iron rod."+ "\n This rod can be used as an arcane focus. While holding this rod, you gain the following benefits:"+ "\n " + toUni("Hellish Resistance") + ". You have resistance to fire and necrotic damage."+ "\n " + toUni("Searing Rebuke") + ". You can cast the Hellish Rebuke spell as a 4th-level spell (save DC 16) from the rod. Once you use the rod to cast the spell, the rod can't cast the spell again until the next dawn."+ "\n " + toUni("Surge of Brimstone") + ". Whenever you cast a spell that deals fire or necrotic damage, you can use the rod to deal the maximum damage instead of rolling. Once this property is used, it can't be used again until the next dawn.", weight : 2, extraLimitedFeatures : [{ name : "Rod of Hellish Flames (Hellish Rebuke)", usages : 1, recovery : "dawn" }, { name : "Rod of Hellish Flames (maximize)", usages : 1, recovery : "dawn" }], dmgres : ["Fire", "Necrotic"], spellcastingBonus : [{ name : "Once per dawn", spells : ["hellish rebuke"], selection : ["hellish rebuke"], firstCol : "oncelr" }], spellChanges : { "hellish rebuke" : { description : "Cast when taking damage, creature that dealt damage takes 5d10 Fire damage; save halves", changes : "Using the Rod of Hellish Flames, I cast Hellish Rebuke as if I'm using a 4th-level spell slot, doing 5d10 damage, once per dawn." } } }; MagicItemsList["rogue's mantle"] = { name : "Rogue's Mantle", source : [["BoMT", 37]], // Chapter 5: Gem type : "wondrous item", rarity : "rare", attunement : true, description : "This dark, hooded mantle of thick cloth gives me +60 ft darkvision. As a bonus action, I can use it to teleport 30 ft from and into dim light or darkness, to an empty space I can see. I then have advantage on my first attack before my turn ends. Also, I can use it to cast Antagonize once per dawn (save DC 15).", descriptionFull : "This dark, hooded mantle of thick cloth is infused with secretive and deceptive magic. While wearing it, you gain the following benefits:"+ "\n " + toUni("Darkvision") + ". You gain darkvision within a range of 60 feet. If you already have darkvision, the mantle increases your darkvision's range by 60 feet instead."+ "\n " + toUni("Move in Shadows") + ". While you are in dim light or darkness, you can use a bonus action to teleport, along with anything you are wearing or carrying, up to 30 feet to an unoccupied space you can see that is also in dim light or darkness. You then have advantage on the first melee attack you make before the end of the turn."+ "\n " + toUni("Willful Enmity") + ". You can cast the Antagonize spell (save DC 15) from the mantle. Once the mantle has cast the spell, it can't cast the spell again until the next dawn.", usages : 1, recovery : "dawn", additional : "Antagonize", vision : [["Darkvision", "fixed 60"], ["Darkvision", "+60"]], action : [["bonus action", " (teleport)"]], fixedDC : 15, spellcastingBonus : [{ name : "Once per dawn", spells : ["antagonize"], selection : ["antagonize"], firstCol : "oncelr" }] }; MagicItemsList["ruinous flail"] = { name : "Ruinous Flail", source : [["BoMT", 37]], // Chapter 5: Gem type : "weapon (flail)", rarity : "rare", attunement : true, description : "This ash-gray, cold to the touch flail +1 deals double damage to objects and structures. Once per dawn, I can have a creature hit by it make a DC 15 Con save or be poisoned for 1 minute and take 2d4 necrotic damage at the start of each of its turns. It can repeat the save at the end of each of its turns to end the effects.", descriptionFull : "This ash-gray flail is cold to the touch. You gain a +1 bonus to attack and damage rolls made with this magic weapon, and it deals double damage to objects and structures."+ "\n Additionally, when you hit a creature with this weapon, you can force the creature to make a DC 15 Constitution saving throw. On a failed save, the creature has the poisoned condition for 1 minute. The poisoned creature takes 2d4 necrotic damage at the start of each of its turns. The creature can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success. Once this property is used in this way, it can't be used again until the next dawn.", weight : 2, usages : 1, recovery : "dawn", weaponOptions : [{ baseWeapon : "flail", regExpSearch : /^(?=.*ruinous)(?=.*flail).*$/i, name : "Ruinous Flail", source : [["BoMT", 37]], description : "Double damage to objects; Once per dawn: target DC 15 Con save or poisoned, see item", modifiers : [1, 1], selectNow : true }] }; MagicItemsList["sage's signet"] = { name : "Sage's Signet", source : [["BoMT", 37]], // Chapter 5: Gem type : "ring", attunement : true, prerequisite : "Requires attunement by a spellcaster", prereqeval : function(v) { return v.isSpellcaster; }, description : "This gilded ring with a beautiful engraving is imbued with powers of keen wisdom and foresight. While wearing this ring, I can cast Augury and two more spells depending on the signet each once per dawn using my Intelligence as the spellcasting ability. Casting Augury using this ring only takes one action.", descriptionFull : "This gilded ring bears a beautiful engraving and is imbued with powers of keen wisdom and foresight. While wearing this ring, you can use an action to cast the Augury spell from the ring. Once you use the ring to cast the spell, the ring can't cast the spell again until the next dawn."+ "\n Six varieties of Sage's Signet rings exist, each with a different signet (see the table below). A ring's signet determines its rarity as well as the additional spells it can cast. While wearing a Sage's Signet, you can cast each of its additional spells once from the ring using your Intelligence as the spellcasting ability. Once you cast each of the additional spells from the ring, it can't cast the spell again until the next dawn."+ "\n\nSignet\tRarity\tSpells"+ "\nBear\tVery rare\tEnlarge/Reduce, Polymorph"+ "\nHart\tVery rare\tAura of Vitality, Mass Cure Wounds"+ "\nLion\tVery rare\tDestructive Wave, Fireball"+ "\nSerpent\tRare\tFear, Hex"+ "\nSongbird\tRare\tCharm Person, Hypnotic Pattern"+ "\nWolf\tVery rare\tFreedom of Movement, Pass without Trace", usages : 3, recovery : "dawn", additional : "each spell once", choices : ["Bear (very rare)", "Hart (very rare)", "Lion (very rare)", "Serpent (rare)", "Songbird (rare)", "Wolf (very rare)"], "bear (very rare)" : { name : "Sage's Signet (Bear)", rarity : "very rare", description : "This gilded ring with a beautiful bear engraving is imbued with powers of keen wisdom and foresight. While wearing this ring, I can cast Augury, Enlarge/Reduce, and Polymorph each once per dawn using my Intelligence as the spellcasting ability. Casting Augury using this ring only takes one action.", spellcastingAbility : 4, spellcastingBonus : [{ name : "Once per dawn", spells : ["augury", "enlarge/reduce", "polymorph"], selection : ["augury", "enlarge/reduce", "polymorph"], firstCol : "oncelr", times : 3 }], spellChanges : BoMT["sage's signet"] }, "hart (very rare)" : { name : "Sage's Signet (Hart)", rarity : "very rare", description : "This gilded ring with a beautiful hart engraving is imbued with powers of keen wisdom and foresight. While wearing this ring, I can cast Augury, Aura of Vitality, and Mass Cure Wounds each once per dawn using my Intelligence as the spellcasting ability. Casting Augury using this ring only takes one action.", spellcastingAbility : 4, spellcastingBonus : [{ name : "Once per dawn", spells : ["augury", "aura of vitality", "mass cure wounds"], selection : ["augury", "aura of vitality", "mass cure wounds"], firstCol : "oncelr", times : 3 }], spellChanges : BoMT["sage's signet"] }, "lion (very rare)" : { name : "Sage's Signet (Lion)", rarity : "very rare", description : "This gilded ring with a beautiful lion engraving is imbued with powers of keen wisdom and foresight. While wearing this ring, I can cast Augury, Destructive Wave, and Fireball each once per dawn using my Intelligence as the spellcasting ability. Casting Augury using this ring only takes one action.", spellcastingAbility : 4, spellcastingBonus : [{ name : "Once per dawn", spells : ["augury", "destructive wave", "fireball"], selection : ["augury", "destructive wave", "fireball"], firstCol : "oncelr", times : 3 }], spellChanges : BoMT["sage's signet"] }, "serpent (rare)" : { name : "Sage's Signet (Serpent)", rarity : "rare", description : "This gilded ring with a beautiful serpent engraving is imbued with powers of keen wisdom and foresight. While wearing this ring, I can cast Augury, Fear, and Hex each once per dawn using my Intelligence as the spellcasting ability. Casting Augury using this ring only takes one action.", spellcastingAbility : 4, spellcastingBonus : [{ name : "Once per dawn", spells : ["augury", "fear", "hex"], selection : ["augury", "fear", "hex"], firstCol : "oncelr", times : 3 }], spellChanges : BoMT["sage's signet"] }, "songbird (rare)" : { name : "Sage's Signet (Songbird)", rarity : "rare", description : "This gilded ring with a beautiful songbird engraving is imbued with powers of keen wisdom and foresight. While wearing this ring, I can cast Augury, Charm Person, and Hypnotic Pattern each once per dawn using my Intelligence as the spellcasting ability. Casting Augury using this ring only takes one action.", spellcastingAbility : 4, spellcastingBonus : [{ name : "Once per dawn", spells : ["augury", "charm person", "hypnotic pattern"], selection : ["augury", "charm person", "hypnotic pattern"], firstCol : "oncelr", times : 3 }], spellChanges : BoMT["sage's signet"] }, "wolf (very rare)" : { name : "Sage's Signet (Wolf)", rarity : "very rare", description : "This gilded ring with a beautiful wolf engraving is imbued with powers of keen wisdom and foresight. While wearing this ring, I can cast Augury, Freedom of Movement, and Pass without Trace each once per dawn using my Intelligence as the spellcasting ability. Casting Augury using this ring only takes one action.", spellcastingAbility : 4, spellcastingBonus : [{ name : "Once per dawn", spells : ["augury", "freedom of movement", "pass without trace"], selection : ["augury", "freedom of movement", "pass without trace"], firstCol : "oncelr", times : 3 }], spellChanges : BoMT["sage's signet"] } }; MagicItemsList["shield of the tortoise"] = { name : "Shield of the Tortoise", source : [["BoMT", 67]], // Chapter 9: Knight type : "shield", rarity : "uncommon", attunement : true, description : "This +1 shield curses me as soon as I attune to it. While I'm cursed by it, I can't discard it, I can't break my attunement to it, and I am sluggish. Sluggish means that my speed is halved and when I roll initiative, I always treat the roll on the d20 as a 1. I can't change my initiative by any means.", descriptionFull : "While you are wielding this shield, you gain a +1 bonus to AC. This bonus is in addition to the shield's normal bonus to AC."+ "\n " + toUni("Curse") + ". This item is cursed. Attuning to it extends the curse to you until you are targeted by a Remove Curse spell or similar magic. You cannot discard the shield, and remain attuned to it, as long as you are cursed. As long as you are cursed, you are sluggish. Your speed is halved. When you roll initiative, treat the roll on your d20 as a 1. You can't change your initiative by any means.", weight : 6, shieldAdd : ["Shield of the Tortoise", 3, 6], speed : { allModes : { bonus : "/2" } } }; MagicItemsList["shrieking greaves"] = { name : "Shrieking Greaves", source : [["BoMT", 174]], // Chapter 20: Flames type : "wondrous item", rarity : "rare", attunement : true, description : "These black leg guards have 3 charges, regaining 1d3 used charges daily at dawn. As a bonus action, I can use 1 charge to gain +30 ft walking speed and adv. on Dex saves for 1 minute. They are cursed, see Notes page. I have disadv. on saves vs. being frightened and they scream if I start my turn frightened.", descriptionLong : "These black leg guards are decorated with monstrous skulls screaming in terror. They have 3 charges, regaining 1d3 used charges daily at dawn. As a bonus action, I can use 1 charge to increase my walking speed by 30 ft, and gain advantage on Dexterity saves. These effects last for 1 minute. The greaves are cursed, and I can't remove or end my attunement to them. They give me disadvantage on saves against being frightened. When I start my turn frightened, they release an ear-piercing scream. I and all within 10 ft of me take 2d8 thunder damage and can make a DC 15 Constitution save to halve this damage.", descriptionFull : "Each of these black leg guards is decorated with a motif of monstrous skulls screaming in terror."+ "\n The greaves have 3 charges. While wearing these greaves, you can use a bonus action to expend 1 charge to increase your walking speed by 30 feet, and you have advantage on Dexterity saving throws. These effects last for 1 minute. The greaves regain 1d3 expended charges daily at dawn."+ "\n " + toUni("Curse") + ". " + BoMT.toDescrFull(BoMT["shrieking greaves"]), action : [["bonus action", ""]], usages : 3, recovery : "dawn", additional : "regains 1d3", toNotesPage : [{ name : "Shrieking Greaves Curse", note : BoMT.to1stPerson([BoMT["shrieking greaves"]]) }] }; MagicItemsList["skull helm"] = { name : "Skull Helm", source : [["BoMT", 38]], // Chapter 5: Gem type : "wondrous item", rarity : "very rare", attunement : true, description : "While wearing this skull-shaped helm, I have resistance to cold, poison, and necrotic damage. Additionally, I can cast Spirit of Death from it without requiring material components. Once I use the helm to cast the spell, it can't cast this spell again until the next dawn.", descriptionFull : "While wearing this skull-shaped helm, you have resistance to cold, poison, and necrotic damage."+ "\n Additionally, while wearing the helm, you can cast Spirit of Death from it without requiring material components. Once you use the helm to cast the spell, the helm can't cast this spell again until the next dawn.", dmgres : ["Cold", "Poison", "Necrotic"], usages : 1, recovery : "dawn", additional : "Spirit of Death", spellcastingBonus : [{ name : "Once per dawn", spells : ["spirit of death"], selection : ["spirit of death"], firstCol : "oncelr" }], spellChanges : { "spirit of death" : { components : "", compMaterial : "", description : "Summon a Reaper Spirit; obeys commands; takes turn after mine; disappears at 0 hp", changes : "While wearing the helmet, it requires no material components to cast Spirit of Death." } } }; MagicItemsList["sling of giant felling"] = { name : "Sling of Giant Felling", source : [["BoMT", 68]], // Chapter 9: Knight type : "weapon (sling)", rarity : "uncommon", description : "When I hit a creature with the Giant type with a ranged attack roll using this magic sling, the creature must succeed on a DC 18 Constitution saving throw or be knocked prone.", descriptionFull : "When you hit a Giant creature with a ranged attack roll using this magic sling, the creature must succeed on a DC 18 Constitution saving throw or have the prone condition.", weaponOptions : [{ baseWeapon : "sling", regExpSearch : /^(?=.*sling)(?=.*giant)(?=.*felling).*$/i, name : "Sling of Giant Felling", source : [["BoMT", 68]], description : "Ammunition; Giants: DC 18 Con save or prone", selectNow : true }] }; MagicItemsList["spindle of fate"] = { name : "Spindle of Fate", source : [["BoMT", 38]], // Chapter 5: Gem type : "wand", rarity : "legendary", attunement : true, description : "This wand has 6 charges, regains 1d6 at dawn. I can use 1 charge to add my Prof Bonus to my initiative after the roll. As an action, I can use 2 charges to invoke a creature's doom. As a reaction when a creature within 60 ft makes an attack or save, I can use 3 charges to change the outcome. See Notes page.", descriptionFull : "This wand is shaped like a drop spindle wrapped in red thread. The wand has 6 charges that can be used for the following properties:"+ "\n " + BoMT.toDescrFull(BoMT["spindle of fate"])+ "\n The wand regains 1d6 expended charges daily at dawn.", descriptionFull : BoMT.toDescrFull(BoMT["spindle of fate"]), action : [["action", " - Doom Foretold"], ["reaction", " - Twist of Fate"]], weight : 1, usages : 6, recovery : "dawn", additional : "regains 1d6", toNotesPage : [{ name : "Features", note : [ "This wand is shaped like a drop spindle wrapped in red thread. The wand has 6 charges, regaining 1d6 expended charges daily at dawn. The charges can be used for the following properties:"+ BoMT.to1stPerson(BoMT["spindle of fate"]) ] }] }; MagicItemsList["starshot crossbow"] = { name : "Starshot Crossbow", nameTest : "Starshot", source : [["BoMT", 38]], // Chapter 5: Gem type : "weapon (any crossbow)", rarity : "rare", attunement : true, description : "This black wooden crossbow has pearl inlays depicting three constellations. It has 3 charges, regaining 1d3 at dawn. It produces its own ammo that lasts until it hits or misses a target. As a bonus action, I can use 1 charge to tap and invoke one of its constellations, see Notes page for the options.", descriptionLong : "This crossbow of blackened wood has pearl inlays depicting three different constellations. It has 3 charges and regains 1d3 used charged daily at dawn. It produces its own ammo that lasts until it hits or misses a target. As a bonus action, I can use 1 charge to tap and invoke one of its constellations, see Notes for full text. Balance: next hit with the crossbow before my next turn ends heals me or another within 30 ft of me for 1d8+my Prof Bonus. Flames: until my next turn ends, the crossbow deals +2d8 fire damage. Rogue: until my next turn ends, I become invisible as well as anything I'm wearing or carrying.", descriptionFull : BoMT.toDescrFull(BoMT["starshot crossbow"]), action : [["bonus action", ""]], usages : 3, recovery : "dawn", additional : "regains 1d3", chooseGear : { type : "weapon", prefixOrSuffix : "suffix", excludeCheck : function (inObjKey, inObj) { var testRegex = /crossbow/i; return !testRegex.test(inObjKey) && (!inObj.baseWeapon || !testRegex.test(inObj.baseWeapon)); } }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && v.isRangedWeapon && /crossbow/i.test(v.baseWeaponName) && /Starshot/i.test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(;|,)? ?(loading|Counts as magical)/ig, ''); } }, 'If I include the word "Starshot" in the name of a crossbow, it will be treated as the magic weapon Starshot Crossbow. It produces its own ammunition, thus its loading property is removed.' ] }, toNotesPage : [{ name : "Features and Constellations", note : BoMT.to1stPerson(BoMT["starshot crossbow"]) }] }; MagicItemsList["stonemaker war pick"] = { name : "Stonemaker War Pick", source : [["BoMT", 68]], // Chapter 9: Knight type : "weapon (war pick)", rarity : "very rare", attunement : true, description : "This war pick adds +1 to attack and damage rolls. I can use it to cast Meld into Stone once per dawn. If I score a critical hit with it against a creature that has 100 HP or fewer, I can use 1 charge to have the target make a DC 15 Con save or be petrified for 8 hours. It has 1d6+1 charges that can't be replenished.", descriptionFull : "You gain a +1 bonus to attack and damage rolls made with this magic war pick. It has the following special properties:"+ "\n " + toUni("Meld into Stone") + ". You can cast the Meld into Stone spell from this war pick. Once this property is used, it can't be used again until the next dawn."+ "\n " + toUni("Petrification") + ". The war pick has 1d6 + 1 charges. If you score a critical hit against a creature that has fewer than 100 hit points, you can expend 1 charge from the war pick to have that creature make a DC 15 Constitution saving throw. On a failed save, the creature has the petrified condition for 8 hours. When the war pick has no charges remaining, it loses this property.", weight : 2, extraLimitedFeatures : [{ name : "Stonemaker War Pick - Meld into Stone", usages : 1, recovery : "dawn" }, { name : "Stonemaker War Pick - Petrification", usages : "1d6+1", recovery : "Never" }], spellcastingBonus : [{ name : "Once per dawn", spells : ["meld into stone"], selection : ["meld into stone"], firstCol : "oncelr" }], weaponOptions : [{ baseWeapon : "war pick", regExpSearch : /^(?=.*stonemaker)(((?=.*pick)(?=.*war))|((?!.*(heavy|great|light))(?=.*\bpicks?\b))).*$|\bkuwas?\b/i, name : "Stonemaker War Pick", source : [["BoMT", 68]], description : "Can petrify on critical hit, see item", modifiers : [1, 1], selectNow : true }] }; MagicItemsList["sun staff"] = { name : "Sun Staff", source : [["BoMT", 39]], // Chapter 5: Gem type : "staff", rarity : "rare", attunement : true, prerequisite : "Requires attunement by a cleric, druid, or wizard", prereqeval : function (v) { return classes.known.cleric || classes.known.druid || classes.known.wizard ? true : false; }, description : "This +1 quarterstaff deals +1d8 fire damage on an attack. I can use it as a spellcasting focus. Once per dawn when I cast a spell using a spell slot, I can reroll my Prof Bonus of fire or radiant damage dice. As a bonus action, I can toggle it glowing with sunlight: 15-ft radius bright light and dim light for another 15 ft.", descriptionFull : "Veins of sunstone run through this wooden staff. This staff can be wielded as a magic quarterstaff that grants a +1 bonus to attack and damage rolls made with it. When you hit with an attack roll using this staff, the target takes an extra 1d8 fire damage."+ "\n " + toUni("Solar Focus") + ". You can use the staff as a spellcasting focus. While holding the staff, you can reroll a number of damage dice up to your proficiency bonus when you use a spell slot to cast a spell that deals fire or radiant damage. You must use the new rolls. Once this property is used, it can't be used again until the next dawn."+ "\n " + toUni("Sunny Glow") + ". As a bonus action, you can cause the staff to glow with sunlight. While glowing, the staff sheds bright light in a 15-foot radius and dim light for an additional 15 feet. The light lasts until you use another bonus action to extinguish it.", weight : 4, action : [["bonus action", " (glow on/off)"]], usages : 1, recovery : "dawn", additional : "reroll damage", weaponOptions : [{ baseWeapon : "quarterstaff", regExpSearch : /^(?=.*sun)(?=.*staff).*$/i, name : "Sun Staff", source : [["BoMT", 39]], description : "Versatile (1d8); +1d8 fire damage", modifiers : [1, 1], selectNow : true }] }; MagicItemsList["sword of the planes"] = { name : "Sword of the Planes", nameTest : "of the Planes", source : [["BoMT", 68]], // Chapter 9: Knight type : "weapon (any sword)", rarity : "legendary", attunement : true, description : "This +3 weapon can tear the fabric of reality. As an action once per dawn, I can slice a rift to a location on another plane in an empty space within 5 ft of me. The rift can be up to 10 ft high and wide. Anything entering the rift is instantly transported. The DM determines where it goes exactly.", descriptionFull : "You gain a +3 bonus to attack and damage rolls made with this magic sword."+ "\n This sword can tear the fabric of reality, creating a temporary rift between planes. You can use your action to choose a different plane of existence from the one you're on and slice through an unoccupied space within 5 feet of yourself, creating a rift to that other plane. The rift can be up to 10 feet high and 10 feet wide, and it lasts for 1 minute. Once this property is used, it can't be used again until the next dawn."+ "\n You can specify a target destination, such as the City of Brass on the Elemental Plane of Fire or the palace of Dispater on the second layer of the Nine Hells, and the rift opens in or near that destination (DM's discretion). If you are trying to reach the City of Brass, for example, the rift might appear on the Street of Steel, before the Gate of Ashes, or facing the city from across the Sea of Fire, at the DM's discretion."+ "\n Anything that enters the rift is instantly transported to the other plane, appearing in the unoccupied space nearest to the rift.", usages : 1, recovery : "dawn", chooseGear : { type : "weapon", prefixOrSuffix : "prefix", descriptionChange : ["replace", "sword"], excludeCheck : function (inObjKey, inObj) { var testRegex = /sword|scimitar|rapier/i; return !testRegex.test(inObjKey) && (!inObj.baseWeapon || !testRegex.test(inObj.baseWeapon)); } }, calcChanges : { atkCalc : [ function (fields, v, output) { if (!v.theWea.isMagicWeapon && v.isMeleeWeapon && /sword|scimitar|rapier/i.test(v.baseWeaponName) && /of the Planes/i.test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; output.magic = v.thisWeapon[1] + 3; } }, 'If I include the words "of the Planes" in a the name of a sword, it will be treated as the magic weapon Sword of the Planes. It has +3 to hit and damage.' ] } }; MagicItemsList["telescopic transporter"] = { name : "Telescopic Transporter", source : [["BoMT", 105]], // Chapter 13: Star type : "wondrous item", rarity : "legendary", description : "This enormous telescope allows me to view distant celestial objects, including stars, Wildspace systems, and Astral Sea phenomena. With 1 hour of calibrating, I can use it to attempt to travel to whatever it is pointed at. With a DC 17 Arcana check me and 8 others teleport, otherwise a mishap, see Notes.", descriptionFull : BoMT.toDescrFull(BoMT["telescopic transporter"]), toNotesPage : [{ name : "Features", note : BoMT.to1stPerson([BoMT["telescopic transporter"]]) }] }; MagicItemsList["tidecaller trident"] = { name : "Tidecaller Trident", source : [["BoMT", 69]], // Chapter 9: Knight type : "weapon (trident)", rarity : "very rare", attunement : true, description : "This magic trident gives a +2 bonus to attack and damage made with it and advantage on attack rolls when used underwater. The trident has 3 charges, regaining 1d3 expended charges daily at dawn. I can expend these charges to cast spells (save DC 15): Control Water (1 charge) or Tsunami (3 charges).", descriptionFull : "You gain a +2 bonus to attack and damage rolls made with this magic trident. You also have advantage on attack rolls made with this weapon while underwater."+ "\n This trident has 3 charges. You can expend 1 charge to cast Control Water (save DC 15) from the trident or 3 charges to cast Tsunami (save DC 15) from it instead. The trident regains 1d3 expended charges daily at dawn.", weight : 4, usages : 3, recovery : "dawn", additional : "regains 1d3", weaponOptions : [{ baseWeapon : "trident", regExpSearch : /^(?=.*tidecaller)(?=.*trident).*$/i, name : "Tidecaller Trident", source : [["BoMT", 69]], description : "Thrown, versatile (1d8); Adv. when underwater", modifiers : [2, 2], selectNow : true }], fixedDC : 15, spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "1 charge", spells : ["control water"], selection : ["control water"], firstCol : 1 }, { name : "3 charges", spells : ["tsunami"], selection : ["tsunami"], firstCol : 3 }] }; MagicItemsList["voidwalker armor"] = { name : "Voidwalker Armor", source : [["BoMT", 39]], // Chapter 5: Gem type : "armor (studded leather)", rarity : "rare", attunement : true, description : "This black studded leather armor bears a red sheen. As a bonus action once per dawn, I can summon a projection of myself in an empty space within 30 ft. It's a translucent copy of me, immune to all damage and conditions, that I can make attacks and cast spells from. The projection disappears at the end of my turn.", descriptionFull : "This black studded leather armor bears a red sheen. While wearing this armor, you can use a bonus action to summon a projection of yourself in an unoccupied space within 30 feet of yourself. The projection is a translucent copy of you that has immunity to all damage and conditions, and you can make attacks and cast spells with a range other than self as if standing in the projection's space. The projection disappears at the end of your turn. Once you use this bonus action, it can't be used again until the next dawn."+ "\n " + toUni("Curse") + ". " + BoMT.toDescrFull(BoMT["voidwalker armor"]), weight : 13, usages : 1, recovery : "dawn", action : [["bonus action", ""]], armorOptions : [{ regExpSearch : /^(?=.*voidwalker)(?=.*armou?r).*$/i, name : "Voidwalker Armor", source : [["BoMT", 39]], type : "light", ac : 12, weight : 13, selectNow : true }], toNotesPage : [{ name : "Voidwalker Curse", note : BoMT.to1stPerson([BoMT["voidwalker armor"]]) }] }; MagicItemsList["warrior's passkey"] = { name : "Warrior's Passkey", source : [["BoMT", 39]], // Chapter 5: Gem type : "wondrous item", rarity : "rare", attunement : true, description : "This silver skeleton key is warm to the touch. I can use it to cast Knock while in its key form. As a bonus action, I can transform it into a magic +1 longsword that deals 1d10 force damage and I'm proficient with. The sword reverts back to a key if it leaves my grasp, I use a bonus action to do so, or my attunement ends.", descriptionFull : "This silver skeleton key is warm to the touch. While holding the key in its key form, you can use an action to cast the Knock spell from the key."+ "\n " + toUni("Transforming the Key") + ". While holding the key, you can use a bonus action to transform it into a magic longsword. You are considered proficient with the sword, and you have a +1 bonus to attack and damage rolls made with it. On a hit, the sword deals 1d10 force damage. The item remains in its sword form until it leaves your grasp or you use another bonus action to revert it to its key form."+ "\n If you end your attunement to the item while it's in its sword form, it automatically reverts to its key form.", action : [["bonus action", " (transform)"]], weaponOptions : [{ baseWeapon : "longsword", regExpSearch : /^(?=.*warrior)(?=.*passkey).*$/i, name : "Warrior's Passkey", source : [["BoMT", 39]], damage : [1, 10, "force"], modifiers : [1, 1], isAlwaysProf : true, description : "", weight : 0, selectNow : true }], spellcastingBonus : [{ name : "At will", spells : ["knock"], selection : ["knock"], firstCol : "atwill" }] }; MagicItemsList["weapon of throne's command"] = { name : "Weapon of Throne's Command", nameTest : "of Throne's Command", source : [["BoMT", 39]], // Chapter 5: Gem type : "weapon (any)", rarity : "very rare", attunement : true, description : "This +1 weapon grants me proficiency with Intimidation and Persuasion. It has 5 charges, regaining 1d4 at dawn. As a bonus action, I can expend charges to cast a spell from it with save DC 16: Command (1 charge), Zone of Truth (2), Compulsion (4), Banishment (4), or Dominate Person (5).", descriptionLong : "This weapon is bedecked in ornate gold filigree and deep-blue and maroon jewels. I gain a +1 bonus to attack and damage rolls made with this weapon. Additionally, I gain proficiency in the Intimidation and Persuasion skills if I don't already have it. The weapon has 5 charges, regaining 1d4 expended charges daily at dawn. As a bonus action, I can expend 1 or more of its charges to cast one of the following spells (save DC 16): Command (1 charge), Zone of Truth (2 charges), Compulsion (4 charges), Banishment (4 charges), or Dominate Person (5 charges).", descriptionFull : "This weapon is bedecked in ornate gold filigree and deep-blue and maroon jewels. You gain a +1 bonus to attack and damage rolls made with this weapon. Additionally, you gain proficiency in the Intimidation and Persuasion skills if you don't already have it."+ "\n " + toUni("Spellcasting") + ". The weapon has 5 charges. You can use a bonus action and expend 1 or more of its charges to cast one of the following spells (save DC 16): Command (1 charge), Zone of Truth (2 charges), Compulsion (4 charges), Banishment (4 charges), or Dominate Person (5 charges)."+ "\n The weapon regains 1d4 expended charges daily at dawn.", skills : ["Intimidation", "Persuasion"], chooseGear : { type : "weapon", prefixOrSuffix : "prefix", descriptionChange : ["replace", "weapon"] }, usages : 5, recovery : "dawn", additional : "regains 1d4", fixedDC : 16, spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "1 charge", spells : ["command"], selection : ["command"], firstCol : 1 }, { name : "2 charges", spells : ["zone of truth"], selection : ["zone of truth"], firstCol : 2 }, { name : "4 charges", spells : ["banishment", "compulsion"], selection : ["banishment", "compulsion"], firstCol : 4, times : 2 }, { name : "5 charges", spells : ["dominate person"], selection : ["dominate person"], firstCol : 5 }], calcChanges : { atkCalc : [ function (fields, v, output) { if (/of throne'?s? command/.test(v.WeaponTextName)) { output.magic = v.thisWeapon[1] + 1; } }, 'If I include the words "of Throne\'s Command" in a the name of a weapon, it will be treated as the magic weapon Weapon of Throne\'s Command. It adds a +1 bonus to attack and damage rolls.' ] }, spellChanges : { "command" : { time : "1 bns", changes : "Using the Weapon of Throne's Command, I can cast Command as a bonus action." }, "zone of truth" : { time : "1 bns", changes : "Using the Weapon of Throne's Command, I can cast Zone of Truth as a bonus action." }, "banishment" : { time : "1 bns", changes : "Using the Weapon of Throne's Command, I can cast Banishment as a bonus action." }, "compulsion" : { time : "1 bns", changes : "Using the Weapon of Throne's Command, I can cast Compulsion as a bonus action." }, "dominate person" : { time : "1 bns", changes : "Using the Weapon of Throne's Command, I can cast Dominate Person as a bonus action." } } }; MagicItemsList["winged ammunition"] = { name : "Winged Ammunition", nameTest : "Winged", source : [["BoMT", 69]], // Chapter 9: Knight type : "weapon (any ammunition)", rarity : "uncommon", description : "Ranged weapon attack rolls made with this magic ammunition ignore half and three-quarters cover. In addition, attacking at long range doesn't impose disadvantage on ranged weapon attack rolls made with this ammunition.", descriptionFull : "Ranged weapon attack rolls made with this ammunition ignore half and three-quarters cover. In addition, attacking at long range doesn't impose disadvantage on ranged weapon attack rolls made with this ammunition.", allowDuplicates : true, chooseGear : { type : "ammo", prefixOrSuffix : "suffix", descriptionChange : ["replace", "ammunition"], excludeCheck : function (inObjKey, inObj) { return /vials|flasks/i.test(inObj.icon); } } }; MagicItemsList["wraps of unarmed prowess"] = { name : "Wraps of Unarmed Prowess, +1, +2, or +3", nameTest : "Wraps of Unarmed Prowess", source : [["BoMT", 69]], // Chapter 9: Knight type : "wondrous item", description : "While wearing these cloth wraps, my unarmed strikes are considered magical for the purpose of overcoming immunity and resistance to nonmagical attacks, and I gain a bonus to their attack and damage rolls. The bonus is determined by rarity: uncommon (+1), rare (+2), or very rare (+3).", descriptionFull : "While you're wearing these cloth wraps, your unarmed strikes are considered magical for the purpose of overcoming immunity and resistance to nonmagical attacks and damage, and you gain a bonus to the attack and damage rolls of your unarmed strikes. The bonus is determined by the wraps' rarity: uncommon (+1), rare (+2), or very rare (+3).", choices : ["+1 Wraps of Unarmed Prowess (uncommon)", "+2 Wraps of Unarmed Prowess (rare)", "+3 Wraps of Unarmed Prowess (very rare)"], "+1 wraps of unarmed prowess (uncommon)" : { name : "Wraps of Unarmed Prowess +1", nameTest : "+1 Wraps of Unarmed Prowess", rarity : "uncommon", description : "While I'm wearing these cloth wraps, I gain a +1 bonus to the attack and damage rolls of my unarmed strikes. My unarmed strikes are considered magical for the purpose of overcoming immunity and resistance to nonmagical attacks and damage.", calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == "unarmed strike" && !/counts as( a)? magical/i.test(fields.Description)) { fields.Description += (fields.Description ? '; ' : '') + 'Counts as magical'; }; }, "My unarmed strikes get a +1 bonus to To Hit and Damage and count as magical for overcoming resistances and immunities.", 700 ], atkCalc : [ function (fields, v, output) { if (v.baseWeaponName == "unarmed strike") { output.magic += 1; } }, '' ] } }, "+2 wraps of unarmed prowess (rare)" : { name : "Wraps of Unarmed Prowess +2", nameTest : "+2 Wraps of Unarmed Prowess", rarity : "rare", description : "While I'm wearing these cloth wraps, I gain a +2 bonus to the attack and damage rolls of my unarmed strikes. My unarmed strikes are considered magical for the purpose of overcoming immunity and resistance to nonmagical attacks and damage.", calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == "unarmed strike" && !/counts as( a)? magical/i.test(fields.Description)) { fields.Description += (fields.Description ? '; ' : '') + 'Counts as magical'; }; }, "My unarmed strikes get a +2 bonus to To Hit and Damage and count as magical for overcoming resistances and immunities.", 700 ], atkCalc : [ function (fields, v, output) { if (v.baseWeaponName == "unarmed strike") { output.magic += 2; } }, '' ] } }, "+3 wraps of unarmed prowess (very rare)" : { name : "Wraps of Unarmed Prowess +3", nameTest : "+3 Wraps of Unarmed Prowess", rarity : "very rare", description : "While I'm wearing these cloth wraps, I gain a +3 bonus to the attack and damage rolls of my unarmed strikes. My unarmed strikes are considered magical for the purpose of overcoming immunity and resistance to nonmagical attacks and damage.", calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == "unarmed strike" && !/counts as( a)? magical/i.test(fields.Description)) { fields.Description += (fields.Description ? '; ' : '') + 'Counts as magical'; }; }, "My unarmed strikes get a +3 bonus to To Hit and Damage and count as magical for overcoming resistances and immunities.", 700 ], atkCalc : [ function (fields, v, output) { if (v.baseWeaponName == "unarmed strike") { output.magic += 3; } }, '' ] } } }; SpellsList["antagonize"] = { name : "Antagonize", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["BoMT", 50]], level : 3, school : "Ench", time : "1 a", range : "30 ft", components : "V,S,M", compMaterial : "A playing card depicting a rogue", duration : "Instantaneous", save : "Wis", description : "1 crea 4d4+1d4/SL Psychic dmg, use rea to melee atk vs. crea I see (or dis. atk 1 rnd); save half, no rea", descriptionShorter : "1 crea 4d4+1d4/SL Psychic dmg, rea melee atk vs. crea I see (or dis. atk 1 rnd); save half, no rea", descriptionFull : "You whisper magical words that antagonize one creature of your choice within range. The target must make a Wisdom saving throw. On a failed save, the target takes 4d4 psychic damage and must immediately use its reaction to make a melee attack against another creature of your choice that you can see. If the target can't make this attack (for example, because there is no one within its reach or because its reaction is unavailable), the target instead has disadvantage on the next attack roll it makes before the start of your next turn. On a successful save, the target takes half as much damage only."+ AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d4 for each slot level above 3rd." }; SpellsList["spirit of death"] = { name : "Spirit of Death", classes : ["sorcerer", "warlock", "wizard"], source : [["BoMT", 50]], level : 4, school : "Necro", time : "1 a", range : "60 ft", components : "V,S,M\u0192", compMaterial : "A gilded playing card worth at least 400 gp and depicting an avatar of death", duration : "Conc, 1 h", description : "Summon a Reaper Spirit; obeys commands; takes turn after mine; disappears at 0 hp (400gp)", descriptionFull : "You call forth a spirit that embodies death. The spirit manifests in an unoccupied space you can see within range and uses the reaper spirit stat block. The spirit disappears when it is reduced to 0 hit points or when the spell ends."+ "\n The spirit is an ally to you and your companions. In combat, the spirit shares your initiative count and takes its turn immediately after yours. It obeys your verbal commands (no action required by you). If you don't issue the spirit any commands, it takes the Dodge action and uses its movement to avoid danger."+ AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, use the higher level wherever the spell's level appears in the reaper spirit stat block." }; SpellsList["spray of cards"] = { name : "Spray of Cards", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["BoMT", 50]], level : 2, school : "Conj", time : "1 a", range : "S:15" + (typePF ? "-" : "") + "ft cone", components : "V,S,M", compMaterial : "A deck of cards", duration : "Instantaneous", save : "Dex", description : "All in area 2d10+1d10/SL Force dmg and blinded until their next turn ends; save halves \u0026 not blinded", descriptionShorter : "All in area 2d10+1d10/SL Force dmg, blinded till their next turn ends; save half \u0026 not blinded", descriptionFull : "You spray a 15-foot cone of spectral cards. Each creature in that area must make a Dexterity saving throw. On a failed save, a creature takes 2d10 force damage and has the blinded condition until the end of its next turn. On a successful save, a creature takes half as much damage only."+ AtHigherLevels + "When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d10 for each slot level above 2nd." }; ================================================ FILE: WotC material/pub_20240521_VEoR.js ================================================ var iFileName = "pub_20240521_VEoR.js"; RequiredSheetVersion("13.1.14"); // This file adds the magic item from the Vecna: Eve of Ruin adventure to MPMB's Character Record Sheet // Define the source SourceList["VEoR"] = { name : "Vecna: Eve of Ruin", abbreviation : "VEoR", group : "Adventure Books", url : "https://dndstore.wizards.com/us/en/product/924703/vecna-eve-of-ruin-digital-plus-physical-bundle", date : "2024/05/21" }; MagicItemsList["chime of exile"] = { name : "Chime of Exile", source : [["VEoR", 46]], type : "wondrous item", rarity : "very rare", description : "This silver chime is engraved with delicate magic sigils. As an action once per dawn, I can hold the chime and cast the Banishment spell (save DC 20). If the target of the spell has 50 hit points or fewer, it automatically fails its saving throw.", descriptionFull : "This silver chime is engraved with delicate magic sigils. While holding the chime, you can use an action to cast the Banishment spell (spell save DC 20). If the target of the spell has 50 hit points or fewer, it automatically fails its saving throw. Once the chime has been used to cast the spell, it can't be used this way again until the next dawn.", usages : 1, recovery : "dawn", additional : "Banishment", fixedDC : 20, spellcastingBonus : [{ name : "Once per dawn", spells : ["banishment"], selection : ["banishment"], firstCol : "oncelr" }] }; ================================================ FILE: WotC material/pub_20240716_QftIS.js ================================================ var iFileName = "pub_20240716_QftIS.js"; RequiredSheetVersion("13.1.14"); // This file adds the futuristic and magic item from the Quests from the Infinite Staircase adventure anthology to MPMB's Character Record Sheet // Define the source SourceList["QftIS"] = { name : "Quests from the Infinite Staircase", abbreviation : "QftIS", group : "Adventure Books", url : "https://dndstore.wizards.com/us/en/product/928653/quests-from-the-infinite-staircase-digital-plus-physical-bundle", date : "2024/07/16" }; try { var QftIS = { toDescrFull : BoMT.toDescrFull, to1stPerson : BoMT.to1stPerson }; } catch (err) { // [dupl_start] redefine the variables, not needed in minified version var QftIS = { toDescrFull : function (sDescr) { if (typeof sDescr !== "string") sDescr = sDescr.join("\n "); return sDescr.replace(/\[\[.*?\]\]/g, "$1") .replace(/>>(.*?)<>(.*?)( \(.*?\))?<<\. /g, function(a, p1, p2, p3, p4) { if (/\n /.test(p1)) { return "\n\n " + p2.toUpperCase() + p3.toLowerCase() + "\n "; } else { return p1 + p2 + p3 + ": "; } }); } } // dupl_end } QftIS.replaceEnergyCellPlain = ">>Replacing the Energy Cell<<. While the >>THING<< has charges remaining, its energy cell can't be removed. Once the >>THING<< has 0 charges, you can replace the energy cell with a new cell by using an action or a bonus action." QftIS.replaceEnergyCell = "\n " + QftIS.replaceEnergyCellPlain.replace(">>Replacing the Energy Cell<<", toUni("Replacing the Energy Cell")); // Futuristic items added as magic items, but set to be excluded by default MagicItemsList["antigravity belt"] = { name : "Antigravity Belt", source : [["QftIS", 192]], type : "futuristic item", // not really magic items, so these use their own category rarity : "priceless", // as per QftIS page 192 defaultExcluded : true, description : "This belt has 10 charges per energy cell, which can be replaced as a (bonus) action if empty. As a bonus action, I can use charges to activate it for 1 min per charge, causing me to float in place. As a bonus action and when activating it, I can move 20 ft vertically. I can push off to move horizontally at half my speed.", descriptionLong : "Metal tubes ring the lower edge of this wide belt powered by an energy cell stored in a metal case near the buckle. It has 10 charges per energy cell, which can be replaced as a (bonus) action when empty. As a bonus action, I can expend charges to activate the belt for 1 min per charge. While active, I float in place. As a bonus action and as part of activating it, I can ascend or descend up to 20 ft vertically. I can move myself horizontally by being pushed or towed or by scooting myself along a surface at half my walking speed. I can deactivate it as a bonus action; If I'm still levitating when it deactivates, I fall.", descriptionFull : "Metal tubes ring the lower edge of this wide belt. It is powered by an energy cell stored in a metal case near the buckle. Placing a full energy cell in the belt gives the belt 10 charges."+ "\n " + toUni("Activating the Belt") + ". As a bonus action, you can expend any number of the belt's charges to activate it; the belt remains active for 1 minute per charge expended. You can use a bonus action to deactivate the belt early, but doing so doesn't recover any expended charges."+ "\n When you activate the belt, and as a bonus action while it remains active, you can rise or descend vertically up to 20 feet. You remain floating in place while the property is active, and you can move yourself horizontally by being pushed or towed or by scooting yourself along a surface, such as a wall or ceiling, at half your walking speed. If you are still levitating when the belt deactivates, you fall."+ QftIS.replaceEnergyCell.replace(/>>THING<>THING<>THING<>THING<>THING<>Activating the Armor<<. As an action, you can expend any number of the armor's charges to activate it; the armor remains active for 1 hour per charge expended. You can use a bonus action to deactivate the armor early, but doing so doesn't recover any expended charges.", "While the armor is active, you gain the following benefits:"+ "\n \u2022 >>Augmented Physicality<<. You have advantage on Strength checks, and your carrying capacity is doubled."+ "\n \u2022 >>Environmental Adaptation<<. The armor seals airtight and provides its own atmosphere. You can breathe normally in any environment and withstand extreme temperatures, and you're unaffected by harmful gases, as well as contact and inhaled poisons."+ "\n \u2022 >>Force Field<<. When you would take damage, you can use your reaction to expend 1 of the armor's charges to deploy a defensive force field. Roll 3d10 and reduce the damage taken by the total rolled."+ "\n \u2022 >>Propulsion<<. As a bonus action, you can expend 1 of the armor's charges to gain a flying speed equal to your walking speed for 1 minute. If you're airborne when this duration ends, you fall.", QftIS.replaceEnergyCellPlain.replace(/>>THING<>Destroy Devotion<<. Once per turn when you hit a creature with this weapon, you can expend 1 of its charges to attempt to render the target powerless. The target must succeed on a DC 17 Constitution saving throw or have the paralyzed condition until the start of your next turn. Celestials have disadvantage on the save."+ "\n \u2022 >>Faith Hunter<<. While holding the sword, you can use an action to expend 1 or more of its charges to cast one of the following spells from it: Detect Evil and Good (1 charge), Fly (2 charges), or True Seeing (3 charges).", ">>Sentience<<. Heretic is a sentient, chaotic evil weapon with an Intelligence of 17, a Wisdom of 17, and a Charisma of 15. It has hearing and darkvision out to a range of 120 feet.", "The weapon can speak, read, and understand Common and Giant, and it can communicate with its wielder telepathically. Its voice is soft and deep but rises in a wild furor when it's aware Celestials or worshipers of good-aligned deities are present. While you are attuned to it, Heretic also understands every language you know.", ">>Personality<<. Heretic craves the destruction of good-aligned gods and their supporters. The blade is condescending and snobby, especially in the company of priests and other pious folk, at whom it often directs sneering comments. When Heretic identifies its quarry, it erupts in a frenzied need for violence." ]; MagicItemsList["heretic"] = { name : "Heretic", source : [["QftIS", 192]], type : "weapon (longsword)", rarity : "legendary", description : "This sentient longsword adds +3 to hit and damage and has 6 charges, regaining 1d4+1 at dawn. Once per turn on a hit with it, I can use 1 charge to force a DC 17 Con save or paralyze until my next turn. As an action, I can cast spells from it: Detect Evil and Good (1 charge), Fly (2 charges), or True Seeing (3 charges).", descriptionFull : QftIS.toDescrFull(QftIS.heretic), attunement : true, prerequisite : "Requires attunement by a non-good creature", prereqeval : function(v) { return !/good/i.test(What("Alignment")); }, weight : 3, weaponOptions : [{ baseWeapon : "longsword", regExpSearch : /heretic/i, name : "Heretic", source : [["QftIS", 192]], description : "Versatile (1d10); On hit, 1 charge to paralyze (DC 17 Con save)", modifiers : [3, 3], selectNow : true }], toNotesPage : [{ name : "Features", note : QftIS.to1stPerson(QftIS.heretic) + "\n\n" + sentientItemConflictTxt }], usages : 6, recovery : "dawn", additional : "regains 1d4+1", spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "1 charge", spells : ["detect evil and good"], selection : ["detect evil and good"], firstCol : 1 }, { name : "2 charges", spells : ["fly"], selection : ["fly"], firstCol : 2 }, { name : "3 charges", spells : ["true seeing"], selection : ["true seeing"], firstCol : 2 }] } QftIS.staffOfRuling = [ "An ornate carving of a serpent adorned with a coursing river spirals down the length of this redand-gold staff. While you're holding it, you can use an action to produce one of the following effects. Once the staff has produced an effect, it can't produce that effect again until the next dawn.", ">>Orb of Lightning<<. You create a Small orb of lightning in an unoccupied space you can see within 60 feet of yourself. You concentrate on this orb as if concentrating on a spell. As a bonus action, you can move the orb up to 20 feet in any direction.", "When your concentration ends, or when a creature enters the orb's space or starts its turn there, the orb detonates in a 20-foot-radius sphere. Each creature in that area must make a DC 15 Dexterity saving throw, taking lightning damage equal to the total accumulated damage on a failed save, or half as much damage on a successful one; the orb's base damage is 6d6, and if at the end of your turn the orb hasn't detonated, its damage increases by 2d6, to a maximum of 10d6.", ">>Staff to Snake<<. You throw the staff to an unoccupied space within 10 feet of you, and the staff becomes a giant poisonous snake. The snake is under your control and shares your initiative count, but it takes its turn immediately after yours.", "On your turn, you can mentally command the snake if it is within 60 feet of you and you don't have the incapacitated condition. You decide what action the snake takes and where it moves during its turn, or you can issue it a general command, such as to attack your enemies or guard a location.", "If you use a bonus action to speak the command word again, or if the snake is reduced to 0 hit points, the snake reverts to staff form in its current space.", ">>Thunderclap<<. You point the staff skyward, producing a fearsome thunderclap. Each creature of your choice in a 30-foot-radius sphere centered on you must succeed on a DC 15 Constitution saving throw or have the deafened and frightened conditions until the end of your next turn." ]; MagicItemsList["staff of ruling"] = { name : "Staff of Ruling", source : [["QftIS", 192]], type : "staff", rarity : "rare", description : "As an action, I can use this redand-gold staff with an ornate serpent carving to produce one of several effects: Orb of Lightning, Staff to Snake, or Thunderclap. Once the staff has produced an effect, it can't produce that effect again until the next dawn. See Notes page for the effect descriptions.", descriptionFull : QftIS.toDescrFull(QftIS.staffOfRuling), attunement : true, weight : 4, toNotesPage : [{ name : "Features", note : QftIS.to1stPerson(QftIS.staffOfRuling) }], action : [["action", ""]], extraLimitedFeatures : [{ name : "Staff of Ruling: Orb of Lightning", usages : 1, recovery : "dawn" }, { name : "Staff of Ruling: Staff to Snake", usages : 1, recovery : "dawn" }, { name : "Staff of Ruling: Thunderclap", usages : 1, recovery : "dawn" }] } ================================================ FILE: WotC material/pub_al_20190917_ALPG-v9.1.js ================================================ var iFileName = "pub_al_20190917_ALPG-v9.1.js"; RequiredSheetVersion("13.0.8"); // This file adds the winged aasimar/tiefling from the Adventurers League Player's Guide v9.1: Inglorious Redemption to MPMB's Character Record Sheet // Define the source SourceList["ALPGs9"] = { name : "AL Player's Guide v9.1: Inglorious Redemption", abbreviation : "ALPGs9", group : "Adventurers League", url : "https://www.dropbox.com/s/8r1cwjrk6n2rzyo/AL-Players-Guide-v9.1-Forgotten-Realms.pdf?dl=1", // used to be https://www.dmsguild.com/product/208178 date : "2019/09/17", defaultExcluded : true }; /* Add this source to the Aasimar from VGtM and the Winged Tiefling variant from SCAG Also, add a winged variant to the three Aasimar subraces from VGtM */ [ ["fallen aasimar", false], ["protector aasimar", false], ["scourge aasimar", false], ["tiefling-winged", true], ["feral tiefling-winged", true] ].forEach(function (rac) { var rObj = rac[1] ? RaceSubList[rac[0]] : RaceList[rac[0]]; if (!rObj) return; rObj.source = (isArray(rObj.source[0]) ? rObj.source : [rObj.source]).concat([["ALPGs9", 6]]); if (rac[0].indexOf("aasimar") !== -1) { AddRacialVariant(rac[0], "winged", { regExpSearch : /wing/i, name : "Winged " + rObj.name, source : [["ALPGs9", 6]], plural : "Winged " + rObj.plural, speed : { walk : { spd : 30, enc : 20 }, fly : { spd : 30, enc : 0 } }, trait : "Winged " + rObj.trait.replace(/\)(\r|\n|.)+/, ")\n\nHealing Hands:\n As an action, once per long rest, I can touch to heal for my level in HP.\nWings:\n Once I'm 5th level, I sprout feathered wings from my shoulder blades that give me a flying speed of 30 feet when I'm not wearing heavy armor."), features : { "healing hands" : { name : "Healing Hands", usages : 1, minlevel : 1, recovery : "long rest", additional : levels.map(function (n) { return n + " HP"; }), action : [["action", ""]] } }, abilitySave : "", spellcastingAbility : "", spellcastingBonus : "" }); } }); ================================================ FILE: WotC material/ua_20150202_Eberron.js ================================================ var iFileName = "ua_20150202_Eberron.js"; RequiredSheetVersion("13.1.14"); // This file adds the content from the Unearthed Arcana: Eberron article to MPMB's Character Record Sheet // Define the source SourceList["UA:E"] = { name : "Unearthed Arcana: Eberron", abbreviation : "UA:E", group : "Unearthed Arcana", campaignSetting : "Eberron", url : "https://media.wizards.com/2015/downloads/dnd/UA_Eberron_v1.1.pdf", date : "2015/02/02" }; // Adds three races: // Changeling RaceList["changeling-ua"] = { regExpSearch : /changeling/i, name : "Changeling", source : [["UA:E", 1]], plural : "Changelings", size : 3, skills : ["Deception"], speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", 2], age : " reach adulthood in their early teens and live around 80 years", height : " stand between 5 and 6 feet tall (5'1\" + 2d4\")", weight : " weigh around 140 lb (115 + 2d4 \xD7 2d4 lb)", heightMetric : " stand between 1,5 to over 1,8 metres tall (155 + 5d4 cm)", weightMetric : " weigh around 65 kg (52 + 5d4 \xD7 4d4 / 10 kg)", scores : [0, 1, 0, 0, 0, 1], trait : "Changeling (+1 Dexterity, +1 Charisma)\nShapechanger:\n As an action, I can polymorph into any humanoid of my size that I have seen, or back into my true form.\n However, my equipment does not change with me.\n If I die, I revert to my natural appearance.", action : ['action', 'Polymorph'] }; // Warforged RaceList["warforged-ua"] = { regExpSearch : /warforged/i, name : "Warforged", source : [["UA:E", 3]], plural : "Warforged", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", 1], savetxt : { immune : ["disease"] }, age : " are created as adults and will only start to show signs of physical deterioration after 150 years, but have no further aging effects", height : " stand between 6 and 7 feet tall (5'10\" + 2d6\")", weight : " weigh around 300 lb (270 + 2d6 \xD7 4 lb)", heightMetric : " stand between 1,8 and 2,1 metres tall (178 + 5d6 cm)", weightMetric : " weigh around 135 kg (125 + 5d6 \xD7 8 / 10 kg)", scores : [1, 0, 1, 0, 0, 0], trait : "Warforged (+1 Strength, +1 Constitution)\nLiving Construct:\n Even though I was constructed, I am a living creature. I am immune to disease. I do not need to eat or breathe, but I can ingest food and drink if I wish.\n Instead of sleeping, I enter an inactive state for 4 hours each day. I do not dream in this state; I am fully aware of my surroundings and notice approaching enemies and other events as normal. I still need 8 hours for a long rest.", extraAC : { name : "Composite Plating", mod : 1, text : "I gain a +1 bonus to AC." } }; // Shifter and its 6 subraces RaceList["shifter-ua"] = { regExpSearch : /shifter/i, name : "Shifter", source : [["UA:E", 2]], plural : "Shifters", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Sylvan"], vision : [["Darkvision", 60]], age : " reach adulthood at the end of their teens and live around 100 years", height : " range from under 5 to almost 6 feet tall (4'6\" + 2d8\")", weight : " weigh around 135 lb (90 + 2d8 \xD7 2d4 lb)", heightMetric : " range from under 1,5 to 1,8 metres tall (4'6\" + 5d8 cm)", weightMetric : " weigh around 65 kg (40 + 5d8 \xD7 4d4 / 10 kg)", scorestxt : "+1 Dexterity and +1 to other ability score depending on type of shifter", scores : [0, 1, 0, 0, 0, 0], trait : "Shifter (+1 Dexterity and +1 to other ability score depending on type of shifter)\n Use the \"Racial Options\" button to select type of shifter.\nShifting:\n On my turn, I can shift as a bonus action. Shifting lasts for 1 minute or until I end it on my turn as a bonus action. I must finish a short rest before I can shift again.\n While shifted, I gain temporary hit points equal to my level + my Constitution modifier (minimum of 1) and another bonus depending on the type of shifter.", features : { "shift" : { name : "Shift", minlevel : 1, usages : 1, recovery : "short rest", action : [["bonus action", ""]] } } }; AddRacialVariant("shifter-ua", "beasthide", { regExpSearch : /beasthide/i, name : "Beasthide shifter", source : [["UA:E", 2]], plural : "Beasthide shifters", scorestxt : "", scores : [0, 1, 1, 0, 0, 0], trait : "Beasthide Shifter (+1 Dexterity, +1 Constitution)\nShifting:\n On my turn, I can shift as a bonus action. Shifting lasts for 1 minute or until I end it on my turn as a bonus action. I must finish a short rest before I can shift again.\n While shifted, I gain temporary hit points equal to my level + my Constitution modifier (minimum of 1) and I gain a +1 bonus to my AC." }); AddRacialVariant("shifter-ua", "cliffwalk", { regExpSearch : /cliffwalk/i, name : "Cliffwalk shifter", source : [["UA:E", 2]], plural : "Cliffwalk shifters", scorestxt : "", scores : [0, 2, 0, 0, 0, 0], trait : "Cliffwalk Shifter (+2 Dexterity)\nShifting:\n On my turn, I can shift as a bonus action. Shifting lasts for 1 minute or until I end it on my turn as a bonus action. I must finish a short rest before I can shift again.\n While shifted, I gain temporary hit points equal to my level + my Constitution modifier (minimum of 1) and I gain a climb speed of 30 feet." }); AddRacialVariant("shifter-ua", "longstride", { regExpSearch : /longstride/i, name : "Longstride shifter", source : [["UA:E", 2]], plural : "Longstride shifters", scorestxt : "", scores : [0, 2, 0, 0, 0, 0], trait : "Longstride Shifter (+2 Dexterity)\nShifting:\n On my turn, I can shift as a bonus action. Shifting lasts for 1 minute or until I end it on my turn as a bonus action. I must finish a short rest before I can shift again.\n While shifted, I gain temporary hit points equal to my level + my Constitution modifier (minimum of 1) and I can use the Dash action as a bonus action." }); AddRacialVariant("shifter-ua", "longtooth", { regExpSearch : /(longtooth|longteeth)/i, name : "Longtooth shifter", source : [["UA:E", 2]], plural : "Longtooth shifters", weaponOptions : [{ regExpSearch : /\blongtooth\b/i, name : "Longtooth", source : [["UA:E", 2]], ability : 1, type : "Natural", damage : [1, 6, "piercing"], range : "Melee", description : "Only while shifted; Target up to my size is grappled", abilitytodamage : true, selectNow : true }], scorestxt : "", scores : [1, 1, 0, 0, 0, 0], trait : "Longtooth Shifter (+1 Strength, +1 Dexterity)\nShifting: On my turn, I can shift as a bonus action. Shifting lasts for 1 minute or until I end it on my turn as a bonus action. I must finish a short rest before I can shift again. While shifted, I gain temporary hit points equal to my level + my Constitution modifier (minimum of 1) and, as an action, I can make can make a bite attack. This is a melee weapon attack that uses Strength and deals 1d6 piercing damage. If this attack hits a target that is my size or smaller, the target is also grappled." }); AddRacialVariant("shifter-ua", "razorclaw", { regExpSearch : /razorclaw/i, name : "Razorclaw shifter", source : [["UA:E", 2]], plural : "Razorclaw shifters", weaponOptions : [{ baseWeapon : "unarmed strike", regExpSearch : /\brazorclaw\b/i, name : "Razorclaw", source : [["UA:E", 2]], damage : [1, "", "slashing"], description : "Only while shifted, use instead of unarmed strike: Can use as bonus action; Finesse", selectNow : true }], scorestxt : "", scores : [0, 2, 0, 0, 0, 0], trait : "Razorclaw Shifter (+2 Dexterity)\nShifting:\n On my turn, I can shift as a bonus action. Shifting lasts for 1 minute or until I end it on my turn as a bonus action. I must finish a short rest before I can shift again.\n While shifted, I gain temporary hit points equal to my level + my Constitution modifier (minimum of 1) and, as a bonus action, I can make an unarmed strike that can use my Dexterity for the attack roll and damage, dealing slashing damage." }); AddRacialVariant("shifter-ua", "wildhunt", { regExpSearch : /wildhunt/i, name : "Wildhunt shifter", source : [["UA:E", 3]], plural : "Wildhunt shifters", scorestxt : "", scores : [0, 1, 0, 0, 1, 0], trait : "Wildhunt Shifter (+1 Dexterity, +1 Wisdom)\nShifting:\n On my turn, I can shift as a bonus action. Shifting lasts for 1 minute or until I end it on my turn as a bonus action. I must finish a short rest before I can shift again.\n While shifted, I gain temporary hit points equal to my level + my Constitution modifier (minimum of 1) and I gain advantage on all Wisdom-based checks and saving throws." }); // 12 variants of the Dragonmark feat FeatsList["dragonmark-ua"] = { name : "Dragonmark", source : [["UA:E", 6]], description : "Select the type of dragonmark using the little square button in this feat line.", choices : ["Detection", "Finding", "Handling", "Healing", "Hospitality", "Making", "Passage", "Scribing", "Sentinel", "Shadow", "Storm", "Warding"], "detection" : { descriptionFull : "Your have the magical mark of Detection, the dragonmark of House Medani, and are a member of that house.\n You gain the ability to innately cast spells and cantrips, using Wisdom as your spellcasting ability. You cast each spell at its lowest level. Once you cast a given spell this way, you must finish a long rest before you can cast it innately again. You must still expend any material components. Your dragonmark confers the following benefits:\n " + toUni("Least Dragonmark") + ". When you first take this feat, you gain the least dragonmark. You learn the following spells: Detect Magic, Mage Hand\n " + toUni("Lesser Dragonmark") + ". At 5th level and higher, your mark becomes more potent, improving to lesser dragonmark. You learn the following spell: Detect Thoughts\n " + toUni("Greater Dragonmark") + ". At 9th level and higher, your mark's power increases again, becoming a greater dragonmark. You learn the following spell: Clairvoyance", description : "I learn the Mage Hand cantrip. I can also cast Detect Magic, Detect Thoughts (from 5th level onwards), and Clairvoyance (from 9th level onwards), each once per long rest. Wisdom is my spellcasting ability for these.", spellcastingBonus : [{ name : "Dragonmark", spellcastingAbility : 5, spells : ["mage hand", "detect magic", "detect thoughts", "clairvoyance"], selection : ["mage hand", "detect magic", "detect thoughts", "clairvoyance"], times : [2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4], firstCol : 'oncelr' }] }, "finding" : { descriptionFull : "Your have the magical mark of Finding, the dragonmark of House Tharashk, and are a member of that house.\n You gain the ability to innately cast spells and cantrips, using Wisdom as your spellcasting ability. You cast each spell at its lowest level. Once you cast a given spell this way, you must finish a long rest before you can cast it innately again. You must still expend any material components. Your dragonmark confers the following benefits:\n " + toUni("Least Dragonmark") + ". When you first take this feat, you gain the least dragonmark. You learn the following spells: Identify, Mage Hand\n " + toUni("Lesser Dragonmark") + ". At 5th level and higher, your mark becomes more potent, improving to lesser dragonmark. You learn the following spell: Locate Object\n " + toUni("Greater Dragonmark") + ". At 9th level and higher, your mark's power increases again, becoming a greater dragonmark. You learn the following spell: Clairvoyance", description : "I learn the Mage Hand cantrip. I can also cast Identify, Locate Object (from 5th level onwards), and Clairvoyance (from 9th level onwards), each once per long rest. Wisdom is my spellcasting ability for these.", spellcastingBonus : [{ name : "Dragonmark", spellcastingAbility : 5, spells : ["mage hand", "identify", "locate object", "clairvoyance"], selection : ["mage hand", "identify", "locate object", "clairvoyance"], times : [2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4], firstCol : 'oncelr' }] }, "handling" : { descriptionFull : "Your have the magical mark of Handling, the dragonmark of House Vadalis, and are a member of that house.\n You gain the ability to innately cast spells and cantrips, using Wisdom as your spellcasting ability. You cast each spell at its lowest level. Once you cast a given spell this way, you must finish a long rest before you can cast it innately again. You must still expend any material components. Your dragonmark confers the following benefits:\n " + toUni("Least Dragonmark") + ". When you first take this feat, you gain the least dragonmark. You learn the following spells: Druidcraft, Speak with Animals\n " + toUni("Lesser Dragonmark") + ". At 5th level and higher, your mark becomes more potent, improving to lesser dragonmark. You learn the following spell: Beast Sense\n " + toUni("Greater Dragonmark") + ". At 9th level and higher, your mark's power increases again, becoming a greater dragonmark. You learn the following spell: Conjure Animals", description : "I learn the Druidcraft cantrip. I can also cast Speak with Animals, Beast Sense (from 5th level onwards), and Conjure Animals (from 9th level onwards), each once per long rest. Wisdom is my spellcasting ability for these.", spellcastingBonus : [{ name : "Dragonmark", spellcastingAbility : 5, spells : ["druidcraft", "speak with animals", "beast sense", "conjure animals"], selection : ["druidcraft", "speak with animals", "beast sense", "conjure animals"], times : [2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4], firstCol : 'oncelr' }] }, "healing" : { descriptionFull : "Your have the magical mark of Healing, the dragonmark of House Jorasco, and are a member of that house.\n You gain the ability to innately cast spells and cantrips, using Wisdom as your spellcasting ability. You cast each spell at its lowest level. Once you cast a given spell this way, you must finish a long rest before you can cast it innately again. You must still expend any material components. Your dragonmark confers the following benefits:\n " + toUni("Least Dragonmark") + ". When you first take this feat, you gain the least dragonmark. You learn the following spells: Cure Wounds, Spare the Dying\n " + toUni("Lesser Dragonmark") + ". At 5th level and higher, your mark becomes more potent, improving to lesser dragonmark. You learn the following spell: Lesser Restoration\n " + toUni("Greater Dragonmark") + ". At 9th level and higher, your mark's power increases again, becoming a greater dragonmark. You learn the following spell: Revivify", description : "I learn the Spare the Dying cantrip. I can also cast Cure Wounds, Lesser Restoration (from 5th level onwards), and Revivify (from 9th level onwards), each once per long rest. Wisdom is my spellcasting ability for these.", spellcastingBonus : [{ name : "Dragonmark", spellcastingAbility : 5, spells : ["spare the dying", "cure wounds", "lesser restoration", "revivify"], selection : ["spare the dying", "cure wounds", "lesser restoration", "revivify"], times : [2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4], firstCol : 'oncelr' }] }, "hospitality" : { descriptionFull : "Your have the magical mark of Hospitality, the dragonmark of House Ghallanda, and are a member of that house.\n You gain the ability to innately cast spells and cantrips, using Charisma as your spellcasting ability. You cast each spell at its lowest level. Once you cast a given spell this way, you must finish a long rest before you can cast it innately again. You must still expend any material components. Your dragonmark confers the following benefits:\n " + toUni("Least Dragonmark") + ". When you first take this feat, you gain the least dragonmark. You learn the following spells: Friends, Unseen Servant\n " + toUni("Lesser Dragonmark") + ". At 5th level and higher, your mark becomes more potent, improving to lesser dragonmark. You learn the following spell: Rope Trick\n " + toUni("Greater Dragonmark") + ". At 9th level and higher, your mark's power increases again, becoming a greater dragonmark. You learn the following spell: Leomund's Tiny Hut", description : "I learn the Friends cantrip. I can also cast Unseen Servant, Rope Trick (from 5th level onwards), and Leomund's Tiny Hut (from 9th level onwards), each once per long rest. Charisma is my spellcasting ability for these.", spellcastingBonus : [{ name : "Dragonmark", spellcastingAbility : 6, spells : ["friends", "unseen servant", "rope trick", "leomund's tiny hut"], selection : ["friends", "unseen servant", "rope trick", "leomund's tiny hut"], times : [2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4], firstCol : 'oncelr' }] }, "making" : { descriptionFull : "Your have the magical mark of Making, the dragonmark of House Cannith, and are a member of that house.\n You gain the ability to innately cast spells and cantrips, using Intelligence as your spellcasting ability. You cast each spell at its lowest level. Once you cast a given spell this way, you must finish a long rest before you can cast it innately again. You must still expend any material components. Your dragonmark confers the following benefits:\n " + toUni("Least Dragonmark") + ". When you first take this feat, you gain the least dragonmark. You learn the following spells: Identify, Mending\n " + toUni("Lesser Dragonmark") + ". At 5th level and higher, your mark becomes more potent, improving to lesser dragonmark. You learn the following spell: Magic Weapon\n " + toUni("Greater Dragonmark") + ". At 9th level and higher, your mark's power increases again, becoming a greater dragonmark. You learn the following spell: Fabricate", description : "I learn the Mending cantrip. I can also cast Identify, Magic Weapon (from 5th level onwards), and Fabricate (from 9th level onwards), each once per long rest. Intelligence is my spellcasting ability for these.", spellcastingBonus : [{ name : "Dragonmark", spellcastingAbility : 4, spells : ["mending", "identify", "magic weapon", "fabricate"], selection : ["mending", "identify", "magic weapon", "fabricate"], times : [2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4], firstCol : 'oncelr' }] }, "passage" : { descriptionFull : "Your have the magical mark of Passage, the dragonmark of House Orien, and are a member of that house.\n You gain the ability to innately cast spells and cantrips, using Intelligence as your spellcasting ability. You cast each spell at its lowest level. Once you cast a given spell this way, you must finish a long rest before you can cast it innately again. You must still expend any material components. Your dragonmark confers the following benefits:\n " + toUni("Least Dragonmark") + ". When you first take this feat, you gain the least dragonmark. You learn the following spells: Expeditious Retreat, Light\n " + toUni("Lesser Dragonmark") + ". At 5th level and higher, your mark becomes more potent, improving to lesser dragonmark. You learn the following spell: Misty Step\n " + toUni("Greater Dragonmark") + ". At 9th level and higher, your mark's power increases again, becoming a greater dragonmark. You learn the following spell: Teleportation Circle", description : "I learn the Light cantrip. I can also cast Expeditious Retreat, Misty Step (from 5th level onwards), and Teleportation Circle (from 9th level onwards), each once per long rest. Intelligence is my spellcasting ability for these.", spellcastingBonus : [{ name : "Dragonmark", spellcastingAbility : 4, spells : ["light", "expeditious retreat", "misty step", "teleportation circle"], selection : ["light", "expeditious retreat", "misty step", "teleportation Circle"], times : [2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4], firstCol : 'oncelr' }] }, "scribing" : { descriptionFull : "Your have the magical mark of Scribing, the dragonmark of House Sivis, and are a member of that house.\n You gain the ability to innately cast spells and cantrips, using Intelligence as your spellcasting ability. You cast each spell at its lowest level. Once you cast a given spell this way, you must finish a long rest before you can cast it innately again. You must still expend any material components. Your dragonmark confers the following benefits:\n " + toUni("Least Dragonmark") + ". When you first take this feat, you gain the least dragonmark. You learn the following spells: Comprehend Languages, Message\n " + toUni("Lesser Dragonmark") + ". At 5th level and higher, your mark becomes more potent, improving to lesser dragonmark. You learn the following spell: Sending\n " + toUni("Greater Dragonmark") + ". At 9th level and higher, your mark's power increases again, becoming a greater dragonmark. You learn the following spell: Tongues", description : "I learn the Message cantrip. I can also cast Comprehend Languages, Sending (from 5th level onwards), and Tongues (from 9th level onwards), each once per long rest. Intelligence is my spellcasting ability for these.", spellcastingBonus : [{ name : "Dragonmark", spellcastingAbility : 4, spells : ["message", "comprehend languages", "sending", "tongues"], selection : ["message", "comprehend languages", "sending", "tongues"], times : [2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4], firstCol : 'oncelr' }] }, "sentinel" : { descriptionFull : "Your have the magical mark of Sentinel, the dragonmark of House Deneith, and are a member of that house.\n You gain the ability to innately cast spells and cantrips, using Wisdom as your spellcasting ability. You cast each spell at its lowest level. Once you cast a given spell this way, you must finish a long rest before you can cast it innately again. You must still expend any material components. Your dragonmark confers the following benefits:\n " + toUni("Least Dragonmark") + ". When you first take this feat, you gain the least dragonmark. You learn the following spells: Blade Ward, Compelled Duel\n " + toUni("Lesser Dragonmark") + ". At 5th level and higher, your mark becomes more potent, improving to lesser dragonmark. You learn the following spell: Blur\n " + toUni("Greater Dragonmark") + ". At 9th level and higher, your mark's power increases again, becoming a greater dragonmark. You learn the following spell: Protection from Energy", description : "I learn the Blade Ward cantrip. I can also cast Compelled Duel, Blur (from 5th level onwards), and Protection from Energy (from 9th level onwards), each once per long rest. Wisdom is my spellcasting ability for these.", spellcastingBonus : [{ name : "Dragonmark", spellcastingAbility : 5, spells : ["blade ward", "compelled duel", "blur", "protection from energy"], selection : ["blade ward", "compelled duel", "blur", "protection from energy"], times : [2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4], firstCol : 'oncelr' }] }, "shadow" : { descriptionFull : "Your have the magical mark of Shadow, the dragonmark of House Phiarlan and House Thuranni, and are a member of one of those houses.\n You gain the ability to innately cast spells and cantrips, using Charisma as your spellcasting ability. You cast each spell at its lowest level. Once you cast a given spell this way, you must finish a long rest before you can cast it innately again. You must still expend any material components. Your dragonmark confers the following benefits:\n " + toUni("Least Dragonmark") + ". When you first take this feat, you gain the least dragonmark. You learn the following spells: Dancing Lights, Disguise Self\n " + toUni("Lesser Dragonmark") + ". At 5th level and higher, your mark becomes more potent, improving to lesser dragonmark. You learn the following spell: Darkness\n " + toUni("Greater Dragonmark") + ". At 9th level and higher, your mark's power increases again, becoming a greater dragonmark. You learn the following spell: Nondetection", description : "I learn the Dancing Lights cantrip. I can also cast Disguise Self, Darkness (from 5th level onwards), and Nondetection (from 9th level onwards), each once per long rest. Charisma is my spellcasting ability for these.", spellcastingBonus : [{ name : "Dragonmark", spellcastingAbility : 6, spells : ["dancing lights", "disguise self", "darkness", "nondetection"], selection : ["dancing lights", "disguise self", "darkness", "nondetection"], times : [2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4], firstCol : 'oncelr' }] }, "storm" : { descriptionFull : "Your have the magical mark of Storm, the dragonmark of House Lyrander, and are a member of that house.\n You gain the ability to innately cast spells and cantrips, using Intelligence as your spellcasting ability. You cast each spell at its lowest level. Once you cast a given spell this way, you must finish a long rest before you can cast it innately again. You must still expend any material components. Your dragonmark confers the following benefits:\n " + toUni("Least Dragonmark") + ". When you first take this feat, you gain the least dragonmark. You learn the following spells: Fog Cloud, Shocking Grasp\n " + toUni("Lesser Dragonmark") + ". At 5th level and higher, your mark becomes more potent, improving to lesser dragonmark. You learn the following spell: Gust of Wind\n " + toUni("Greater Dragonmark") + ". At 9th level and higher, your mark's power increases again, becoming a greater dragonmark. You learn the following spell: Sleet Storm", description : "I learn the Shocking Grasp cantrip. I can also cast Fog Cloud, Gust of Wind (from 5th level onwards), and Sleet Storm (from 9th level onwards), each once per long rest. Intelligence is my spellcasting ability for these.", spellcastingBonus : [{ name : "Dragonmark", spellcastingAbility : 4, spells : ["shocking grasp", "fog cloud", "gust of wind", "sleet storm"], selection : ["shocking grasp", "fog cloud", "gust of wind", "sleet storm"], times : [2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4], firstCol : 'oncelr' }] }, "warding" : { descriptionFull : "Your have the magical mark of Warding, the dragonmark of House Kundarak, and are a member of that house.\n You gain the ability to innately cast spells and cantrips, using Intelligence as your spellcasting ability. You cast each spell at its lowest level. Once you cast a given spell this way, you must finish a long rest before you can cast it innately again. You must still expend any material components. Your dragonmark confers the following benefits:\n " + toUni("Least Dragonmark") + ". When you first take this feat, you gain the least dragonmark. You learn the following spells: Alarm, Resistance\n " + toUni("Lesser Dragonmark") + ". At 5th level and higher, your mark becomes more potent, improving to lesser dragonmark. You learn the following spell: Arcane Lock\n " + toUni("Greater Dragonmark") + ". At 9th level and higher, your mark's power increases again, becoming a greater dragonmark. You learn the following spell: Magic Circle", description : "I learn the Resistance cantrip. I can also cast Alarm, Arcane Lock (from 5th level onwards), and Magic Circle (from 9th level onwards), each once per long rest. Intelligence is my spellcasting ability for these.", spellcastingBonus : [{ name : "Dragonmark", spellcastingAbility : 4, spells : ["resistance", "alarm", "arcane lock", "magic circle"], selection : ["resistance", "alarm", "arcane lock", "magic circle"], times : [2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4], firstCol : 'oncelr' }] } } // Adds a subclass for the Wizard, called "Tradition of the Artificer" AddSubClass("wizard", "artificer-ua", { regExpSearch : /^((?=.*(wizard|mage|magus))(?=.*artificer))|(?=.*infuser).*$/i, subname : "Tradition of the Artificer", source : [["UA:E", 3]], fullname : "Wizard (Artificer)", features : { "subclassfeature2" : { name : "Infuse Potions", source : [["UA:E", 3]], minlevel : 2, description: desc([ "I can produce magic potions if I spend 10 minutes and expend a spell slot", "I can not regain the spell slot until the potion is consumed or a week has passed", ]), additional : ["", "3 potions", "3 potions", "3 potions", "3 potions", "3 potions", "3 potions", "3 potions", "3 potions", "4 potions", "4 potions", "4 potions", "4 potions", "4 potions", "4 potions", "4 potions", "4 potions", "4 potions", "4 potions", "4 potions"] }, "subclassfeature2.1" : { name : "Infuse Scrolls", source : [["UA:E", 4]], minlevel : 2, description: desc([ "I can produce a scroll after a short rest if I spend 10 minutes and my Arcane Recovery", "I subtract the spell's level from the levels worth of slots I regain using Arcane Recovery", "This reduction applies till the scroll is used and I finish a long rest", ]), additional : ["", "1 scroll", "1 scroll", "1 scroll", "1 scroll", "1 scroll", "1 scroll", "1 scroll", "1 scroll", "2 scrolls", "2 scrolls", "2 scrolls", "2 scrolls", "2 scrolls", "2 scrolls", "2 scrolls", "2 scrolls", "2 scrolls", "2 scrolls", "2 scrolls"] }, "subclassfeature6" : { name : "Infuse Weapons and Armor", source : [["UA:E", 4]], minlevel : 6, description: desc([ "I can spend 10 minutes to produce a magic weapon, armor, a shield, or ammunition", "The item retains its magic for 8 hours and the spell slot I expend is:", "2nd: +1 ammunition (20 pieces), 3rd: +1 weapon or +1 shield, 4th: +1 armor,", "5th: +2 weapon or +2 ammunition (20 pieces), 6th: +3 armor.", ]), additional : ["", "", "", "", "", "1 weapon or armor", "1 weapon or armor", "1 weapon or armor", "1 weapon or armor", "2 weapons or armor", "2 weapons or armor", "2 weapons or armor", "2 weapons or armor", "2 weapons or armor", "2 weapons or armor", "2 weapons or armor", "2 weapons or armor", "2 weapons or armor", "2 weapons or armor", "2 weapons or armor"] }, "subclassfeature10" : { name : "Superior Artificer", source : [["UA:E", 4]], minlevel : 10, description: desc("I can create one additional scroll, potion, weapon, or armor when I use Infuse") }, "subclassfeature14" : { name : "Master Artificer", source : [["UA:E", 4]], minlevel : 14, description: desc([ "I can produce a variety of magic items from Tables A and B from the DMG", "It takes 1 week for such an item and I cannot do it again for a month", ]), usages : 1, recovery : "Month" } } }); ================================================ FILE: WotC material/ua_20150406_Modifying-Classes.js ================================================ var iFileName = "ua_20150406_Modifying-Classes.js"; RequiredSheetVersion("13.0.8", 15); // This file adds the content from the Unearthed Arcana: Modifying Classes article to MPMB's Character Record Sheet // Define the source SourceList["UA:MC"] = { name : "Unearthed Arcana: Modifying Classes", abbreviation : "UA:MC", group : "Unearthed Arcana", url : "https://media.wizards.com/2015/downloads/dnd/UA3_ClassDesignVariants.pdf", date : "2015/04/06" }; // Also needs the PHB source, as the spell-less ranger uses stuff from there if (!SourceList.P) { SourceList.P = { name : "Player's Handbook", abbreviation : "PHB", group : "Primary Sources", url : "https://dnd.wizards.com/products/rpg_playershandbook", date : "2014/08/19" }; }; // Adds a subclass for the Sorcerer, called "Favored Soul", but only have it added at the very end, after all cleric subclasses have been defined RunFunctionAtEnd(function() { var SorcererSubclassFavoredSoul = AddSubClass("sorcerer", "favored soul-ua", { regExpSearch : /^(?=.*favou?red)(?=.*soul).*$/i, subname : "Favored Soul", source : [["UA:MC", 8]], fullname : "Favored Soul", attacks : [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], features : { "subclassfeature1" : { name : "Bonus Proficiencies", source : [["UA:MC", 9]], minlevel : 1, description: desc("I gain proficiency with light armor, medium armor, shields, and simple weapons"), armorProfs : [true, true, false, true], weaponProfs : [true, false] }, "subclassfeature1.1" : { name : "Chosen of the Gods", source : [["UA:MC", 8]], minlevel : 1, description: desc([ 'Choose a Cleric Domain using the "Choose Feature" button above', "I add the chosen domain's spells to my known spells, when they are of a level I can cast", "These count as sorcerer spells, but do not count against the number of spells I can know", ]), choices : [] }, "subclassfeature14" : { name : "Divine Wings", source : [["UA:MC", 8]], minlevel : 14, description: desc([ "As a bonus action, I sprout feathered or bat wings from my back unless blocked by armor", "I gain a fly speed equal to my current speed until I dismiss the wings as a bonus action", ]), action : [["bonus action", " (start/stop)"]], speed : { fly : { spd : "walk", enc : "walk" } } }, "subclassfeature18" : { name : "Power of the Chosen", source : [["UA:MC", 8]], minlevel : 18, description: desc([ "When I cast a spell I gained from the Chosen of the Gods class feature, I heal myself", "I regain a number of HP equal to my Charisma modifier (minimum 1) + the spell's level", ]), } } }); // Adding all cleric domain spells to the options of the first level ability "Chosen of the Gods" var FSfeat = ClassSubList[SorcererSubclassFavoredSoul].features["subclassfeature1.1"]; for (var i = 0; i < ClassList.cleric.subclasses[1].length; i++) { var cDomain = ClassSubList[ClassList.cleric.subclasses[1][i]]; if (cDomain && cDomain.spellcastingExtra) { var eSpells = newObj(cDomain.spellcastingExtra); eSpells[100] = "AddToKnown"; var dSource = cDomain.source ? cDomain.source : cDomain.features["subclassfeature1"] && cDomain.features["subclassfeature1"].source ? cDomain.features["subclassfeature1"].source :[["UA:MC", 8]]; var suffix = 1; var entryDoNm = cDomain.subname; while (FSfeat.choices.indexOf(entryDoNm) !== -1) { suffix += 1; entryDoNm = cDomain.subname + " (" + suffix + ")"; }; FSfeat.choices.push(entryDoNm); FSfeat[entryDoNm.toLowerCase()] = { name : "Chosen of the Gods: " + cDomain.subname, source : dSource, spellcastingExtra : eSpells, description: desc([ "I add the " + cDomain.subname.toLowerCase() + " spells to my known spells, if they are of a level I can cast", "These count as sorcerer spells, but do not count against the number of spells I can know", ]), }; }; }; }); // A version of the ranger, the spell-less ranger ClassList["spell-less ranger"] = { regExpSearch : /^(?=.*spell.?less)((?=.*(ranger|strider))|((?=.*(nature|natural))(?=.*(knight|fighter|warrior|warlord|trooper)))).*$/i, name : "Spell-less Ranger", source : [["UA:MC", 6]], primaryAbility : "Dexterity and Wisdom", abilitySave : 1, abilitySaveAlt : 2, prereqs : "Dexterity 13 and Wisdom 13", improvements : [0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5, 5], die : 10, saves : ["Str", "Dex"], skillstxt : { primary : "Choose three from Animal Handling, Athletics, Insight, Investigation, Nature, Perception, Stealth, and Survival", secondary : "Choose one from Animal Handling, Athletics, Insight, Investigation, Nature, Perception, Stealth, and Survival" }, armorProfs : { primary : [true, true, false, true], secondary : [true, true, false, true] }, weaponProfs : { primary : [true, true], secondary : [true, true] }, equipment : "Spell-less Ranger starting equipment:\n \u2022 Scale mail -or- leather armor;\n \u2022 Two shortswords -or- two simple melee weapons;\n \u2022 A dungeoneer's pack -or- an explorer's pack;\n \u2022 A longbow and a quiver of 20 arrows.\n\nAlternatively, choose 5d4 \xD7 10 gp worth of starting equipment instead of both the class' and the background's starting equipment.", subclasses : ["Ranger Archetype", []], subclassGainedLevel : 3, attacks : [1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], features : { "favored enemy" : ClassList.ranger.features["favored enemy"], "natural explorer" : ClassList.ranger.features["natural explorer"], "combat superiority" : { name : "Combat Superiority", source : [["UA:MC", 6]], minlevel : 2, description: desc([ "I gain a number of superiority dice that I can use to fuel special Maneuvers", "I regain all superiority dice after a short rest", ]), additional : "d8", usages : levels.map( function(n) { return n < 2 ? "" : n < 9 ? 4 : n < 17 ? 5 : 6; }), recovery : "short rest" }, "combat maneuvers" : { name : "Combat Maneuvers", source : [["UA:MC", 6]], minlevel : 2, description: desc([ 'Use the "Choose Feature" button above to add a Maneuver to the third page', "I can use a Maneuver by expending a superiority die (only one Maneuver per attack)", ]), additional : levels.map( function(n) { if (n < 2) return ""; return (n < 5 ? 2 : n < 9 ? 3 : n < 13 ? 4 : n < 17 ? 5 : 6) + " maneuvers known"; }), extraname : "Maneuver", extrachoices : ["Commander's Strike", "Disarming Attack", "Distracting Strike", "Evasive Footwork", "Feinting Attack", "Goading Attack", "Lunging Attack", "Maneuvering Attack", "Menacing Attack", "Parry", "Precision Attack", "Pushing Attack", "Rally", "Riposte", "Sweeping Attack", "Trip Attack"], extraTimes : levels.map(function (n) { return n < 2 ? 0 : n < 5 ? 2 : n < 9 ? 3 : n < 13 ? 4 : n < 17 ? 5 : 6; }), "commander's strike" : { name : "Commander's Strike", source : [["P", 74]], description: desc([ "I forgo one attack of my Attack action to use a bonus action to direct an ally I see/hear", "The ally can use a reaction to make an attack, adding the superiority die to damage", ]), action : [["bonus action", " (with Attack action)"]] }, "disarming attack" : { name : "Disarming Attack", source : [["P", 74]], description: desc([ "Use after hitting a creature; I add the superiority die to my attack's damage", "Target makes a Strength save or drops a held object of my choice to its feet", ]), }, "distracting strike" : { name : "Distracting Strike", source : [["P", 74]], description: desc([ "Use after hitting a creature; I add the superiority die to my attack's damage", "The next attack of an ally before my next turn has adv. against the creature", ]), }, "evasive footwork" : { name : "Evasive Footwork", source : [["P", 74]], description: desc("Use when moving; I add the superiority die to my AC until I stop moving") }, "feinting attack" : { name : "Feinting Attack", source : [["P", 74]], description: desc([ "As a bonus action, I can feint to gain adv. on my next attack against a target within 5 ft", "If the attack hits, I add the superiority die to my attack's damage", ]), action : [["bonus action", ""]] }, "goading attack" : { name : "Goading Attack", source : [["P", 74]], description: desc([ "Use after hitting a creature; I add the superiority die to my attack's damage", "Target makes a Wis save or has disadv. vs. other targets until the end of my next turn", ]), }, "lunging attack" : { name : "Lunging Attack", source : [["P", 74]], description: desc([ "I can spend a superiority die to increase the reach of a melee weapon attack by 5 ft", "If the attack hits, I add the superiority die to my attack's damage", ]), }, "maneuvering attack" : { name : "Maneuvering Attack", source : [["P", 74]], description: desc([ "Use after hitting a creature; I add the superiority die to my attack's damage", "Ally can use reaction to move half speed without opportunity attack from the target", ]), }, "menacing attack" : { name : "Menacing Attack", source : [["P", 74]], description: desc([ "Use after hitting a creature; I add the superiority die to my attack's damage", "Target makes a Wisdom save or is frightened of me until the end of my next turn", ]), }, "parry" : { name : "Parry", source : [["P", 74]], description: desc("When damaged in melee, I can use a reaction to reduce it by superiority die + Dex mod"), action : [["reaction", " (when damaged in melee)"]] }, "precision attack" : { name : "Precision Attack", source : [["P", 74]], description: desc("I add the superiority die to my attack roll, either before or after rolling") }, "pushing attack" : { name : "Pushing Attack", source : [["P", 74]], description: desc([ "Use after hitting a creature; I add the superiority die to the attack's damage", "If target is Large or smaller, it must make a Strength save or be pushed up to 15 ft away", ]), }, "rally" : { name : "Rally", source : [["P", 74]], description: desc("Ally that can see/hear me gets temporary HP equal to superiority die + Charisma mod"), action : [["bonus action", ""]] }, "riposte" : { name : "Riposte", source : [["P", 74]], description: desc([ "When missed in melee, I can use my reaction to make one melee attack vs. the attacker", "If the attack hits, I add the superiority die to my attack's damage", ]), action : [["reaction", " (after missed in melee)"]] }, "sweeping attack" : { name : "Sweeping Attack", source : [["P", 74]], description: desc([ "Use after hitting a creature and a second creature is within 5 ft of the first", "If the original attack roll hits this second creature, it takes the superiority die in damage", ]), }, "trip attack" : { name : "Trip Attack", source : [["P", 74]], description: desc([ "Use after hitting a creature; I add the superiority die to the attack's damage", "If target is Large or smaller, it must make a Strength save or be knocked prone", ]), } }, "fighting style" : ClassList.ranger.features["fighting style"], "poultices" : { name : "Poultices", source : [["UA:MC", 7]], minlevel : 3, description : desc([ "In 1 hour, I can create a number of poultices equal to my Wisdom modifier (min 1)", "The number of poultices I can have with me can't exceed my Wisdom modifier (min 1)", "I can applying a poultice in 1 minute, healing a creature; Poultices last for 24 hours" ]), additional : levels.map( function(n) { if (n < 3) return ""; return "heals " + Math.ceil(n/2) + "d6"; }) }, "primeval awareness" : { name : "Primeval Awareness", source : [["UA:MC", 6]], minlevel : 3, description : desc([ "As an action, I can focus my awareness for 1 min, once per short rest", "Out to 1 mile (6 in favored terrain), I sense if certain types of creatures are present", "These types are: aberration, celestial, dragon, elemental, fey, fiend, and undead" ]), action : [["action", ""]], usages : 1, recovery : "short rest" }, "subclassfeature3" : { name : "Ranger Archetype", source : [["UA:MC", 6]], minlevel : 3, description: desc([ 'Choose a Ranger Archetype you strive to emulate and put it in the "Class" field', "Choose either Spell-less Beast Master or Spell-less Hunter", ]), }, "land's stride" : ClassList.ranger.features["land's stride"], "natural antivenom" : { name : "Natural Antivenom", source : [["UA:MC", 7]], minlevel : 9, description : desc([ "I have advantage on saves vs. poison and resistance to poison damage", "When I use a poultice, in addition to healing, I cure one poison effect on the creature" ]), savetxt : { adv_vs : ["poison"] }, dmgres : ["Poison"] }, "hide in plain sight" : ClassList.ranger.features["land's stride"], "call natural allies" : { name : "Call Natural Allies", source : [["UA:MC", 7]], minlevel : 13, description : desc([ "While in an area that is my Favored Terrain, I can call on beasts within 1 mile to help", "The DM determines the beasts: 1\xD7CR 2, 2\xD7CR 1, 4\xD7CR 1/2, or 8\xD7CR 1/4", "They will fight alongside me, are friendly to me and my allies, and help up to 1 hour", "After I use these feature, I can't use it in the same general area again for 24 hours" ]) }, "vanish" : ClassList.ranger.features["vanish"], "relentless" : { name : "Relentless", source : [["UA:MC", 7]], minlevel : 17, description: desc("I regain one superiority die if I have no more remaining when I roll initiative") }, "feral senses" : ClassList.ranger.features["feral senses"], "foe slayer" : ClassList.ranger.features["foe slayer"] } }; // Create the Hunter subclass for the spell-less ranger var UAMC_SLR_Hunter = newObj(ClassSubList["ranger-hunter"]); UAMC_SLR_Hunter.source = ["UA:MC", 6]; delete UAMC_SLR_Hunter.fullname; UAMC_SLR_Hunter.regExpSearch = /^(?=.*spell.?less)(?!.*(monster|barbarian|bard|cleric|druid|fighter|monk|paladin|rogue|sorcerer|warlock|wizard))(?=.*(hunter|huntress|hunts(wo)?m(e|a)n)).*$/i; AddSubClass("spell-less ranger", "hunter-ua", UAMC_SLR_Hunter); // Create the Beast Master subclass for the spell-less ranger if (ClassSubList["ranger-beast master"]) { var UAMC_SLR_Beast_Master = newObj(ClassSubList["ranger-beast master"]); UAMC_SLR_Beast_Master.source = ["UA:MC", 6]; delete UAMC_SLR_Beast_Master.fullname; UAMC_SLR_Beast_Master.regExpSearch = /^(?=.*spell.?less)(?=.*(animal|beast))((?=.*(master|ranger|strider))|((?=.*(nature|natural|green))(?=.*(knight|fighter|warrior|warlord|trooper)))).*$/i; UAMC_SLR_Beast_Master.features["subclassfeature15"] = { name : "Beastly Coordination", source : [["UA:MC", 7]], minlevel : 15, description: desc("My companion can, as a reaction, halve an attack's damage from an attacker that I see") }; AddSubClass("spell-less ranger", "beast master-ua", UAMC_SLR_Beast_Master); }; ================================================ FILE: WotC material/ua_20150504_Waterborne-Adventures.js ================================================ var iFileName = "ua_20150504_Waterborne-Adventures.js"; RequiredSheetVersion("13.1.14"); // This file adds the content from the Unearthed Arcana: Waterborne Adventures article to MPMB's Character Record Sheet // Define the source SourceList["UA:WA"] = { name : "Unearthed Arcana: Waterborne Adventures", abbreviation : "UA:WA", group : "Unearthed Arcana", url : "https://media.wizards.com/2015/downloads/dnd/UA_Waterborne_v3.pdf", date : "2015/05/04" }; // New Fighting Style AddFightingStyle(["fighter", "ranger", "paladin"], "Mariner", { // Still valid 2021-09-21 name : "Mariner Fighting Style", source : [["UA:WA", 3]], description: desc([ "While not wearing heavy armor or using a shield, I gain +1 AC and swim/climb speed", "The swimming and climbing speeds are equal to my current walking speed", ]), speed : { climb : { spd : "walk", enc : "walk" }, swim : { spd : "walk", enc : "walk" } }, extraAC : { mod : 1, text : "I gain a +1 bonus to AC while I'm not wearing heavy armor and not using a shield.", stopeval : function (v) { return v.heavyArmor || v.usingShield; } } }); // Add the Minotaur (Krynn) race and its three variants RaceList["minotaur-ua"] = { regExpSearch : /minotaur/i, name : "Minotaur", source : [["UA:WA", 1]], plural : "Minotaurs", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common"], toolProfs : ["Navigator's tools", "Vehicles (water)"], weaponOptions : [{ regExpSearch : /\bhorns?\b/i, name : "Horns", source : [["UA:WA", 1]], ability : 1, type : "Natural", damage : [1, 10, "piercing"], range : "Melee", description : "Advantage on all checks made to shove a creature, but not to avoid being shoved myself", abilitytodamage : true, selectNow : true }], age : " reach adulthood around age 17 and live up to 150 years", height : " are well over 6 feet tall", weight : " weigh around 300 lb", heightMetric : " are well over 1,8 metres tall", weightMetric : " weigh around 135 kg", scorestxt : "+1 Strength, and either +1 Intelligence, +1 Wisdom, or another +1 Strength", scores : [1, 0, 0, 0, 0, 0], trait : "Minotaur (+1 Strength, and either +1 Int, Wis, or Str) use \"Racial Options\" button\nHorns: I am proficient with my horns, a 1d10 piercing damage melee weapon that grant me advantage on shoving a creature, but not to avoid being shoved myself.\nGoring Rush: When taking a Dash action, I can make a horns attack as a bonus action.\nHammering Horns: When taking a melee Attack action, I can attempt to shove with my horns as a bonus action. I cannot use this to knock a creature prone.\nLabyrinthine Recall: I can perfectly recall any path I have travelled.", features : { "goring rush" : { name : "Goring Rush", minlevel : 1, action : [["bonus action", " (with Dash)"]] }, "hammering horns" : { name : "Hammering Horns", minlevel : 1, action : [["bonus action", " (after hit)"]] } } }; AddRacialVariant("minotaur-ua", "cunning", { regExpSearch : /(cunning|wisdom)/i, name : "Minotaur [Cunning]", source : [["UA:WA", 2]], scorestxt : "", scores : [1, 0, 0, 0, 1, 0], trait : "Minotaur [cunning] (+1 Strength, +1 Wisdom)\nHorns: I am proficient with my horns, a 1d10 piercing damage melee weapon that grant me advantage on shoving a creature, but not to avoid being shoved myself.\nGoring Rush: When taking a Dash action, I can make a horns attack as a bonus action.\nHammering Horns: When taking a melee Attack action, I can attempt to shove with my horns as a bonus action. I cannot use this to knock a creature prone.\nLabyrinthine Recall: I can perfectly recall any path I have travelled." }); AddRacialVariant("minotaur-ua", "intellect", { regExpSearch : /(intellect|intelligence)/i, name : "Minotaur [Intellect]", source : [["UA:WA", 2]], scorestxt : "", scores : [1, 0, 0, 1, 0, 0], trait : "Minotaur [intellect] (+1 Strength, +1 Intelligence)\nHorns: I am proficient with my horns, a 1d10 piercing damage melee weapon that grant me advantage on shoving a creature, but not to avoid being shoved myself.\nGoring Rush: When taking a Dash action, I can make a horns attack as a bonus action.\nHammering Horns: When taking a melee Attack action, I can attempt to shove with my horns as a bonus action. I cannot use this to knock a creature prone.\nLabyrinthine Recall: I can perfectly recall any path I have travelled." }); AddRacialVariant("minotaur-ua", "strength", { regExpSearch : /(strength|strong|\bmight\b)/i, name : "Minotaur [Strength]", source : [["UA:WA", 2]], scorestxt : "", scores : [1, 0, 0, 0, 0, 0], trait : "Minotaur [strength] (+2 Strength)\nHorns: I am proficient with my horns, a 1d10 piercing damage melee weapon that grant me advantage on shoving a creature, but not to avoid being shoved myself.\nGoring Rush: When taking a Dash action, I can make a horns attack as a bonus action.\nHammering Horns: When taking a melee Attack action, I can attempt to shove with my horns as a bonus action. I cannot use this to knock a creature prone.\nLabyrinthine Recall: I can perfectly recall any path I have travelled." }); ================================================ FILE: WotC material/ua_20150803_Modern-Magic.js ================================================ var iFileName = "ua_20150803_Modern-Magic.js"; RequiredSheetVersion("13.0.8"); // This file adds the content from the Unearthed Arcana: Modern Magic article to MPMB's Character Record Sheet // Define the source SourceList["UA:MM"] = { name : "Unearthed Arcana: Modern Magic", abbreviation : "UA:MM", group : "Unearthed Arcana", campaignSetting : "Modern", url : "https://media.wizards.com/2015/downloads/dnd/UA_ModernMagic.pdf", date : "2015/08/03" }; // A subclass for the Cleric, called "City Domain" AddSubClass("cleric", "city domain-ua", { // Still valid 2021-09-21 regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*(urban|city)).*$/i, subname : "City Domain", source : [["UA:MM", 1]], spellcastingExtra : ["comprehend languages", "remote access-ua", "find vehicle-ua", "heat metal", "lightning bolt", "protection from ballistics-ua", "locate creature", "synchronicity-ua", "commune with city-ua", "shutdown-ua"], features : { "subclassfeature1" : { name : "Bonus Cantrip", source : [["UA:MM", 1]], minlevel : 1, description: desc("I learn the On/Off cantrip if I didn't already know it"), spellcastingBonus : [{ name : "Bonus Cantrip (On/Off)", spells : ["on/off-ua"], selection : ["on/off-ua"] }] }, "subclassfeature1.1" : { name : "Bonus Proficiency", source : [["UA:MM", 1]], minlevel : 1, description: desc("I gain proficiency with sidearms and land vehicles"), weaponProfs : [false, false, ["Sidearms"]], toolProfs : ["Vehicles (land)"] }, "subclassfeature1.2" : { name : "Heart of the City", source : [["UA:MM", 1]], minlevel : 1, description : desc([ "While I'm in a city, I can gain adv. on a Cha (Deception, Intimidation, Persuasion) check", "I'm considered proficient with the appropriate skill for that one check" ]), usages : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest" }, "subclassfeature2" : { name : "Channel Divinity: Spirits of the City", source : [["UA:MM", 1]], minlevel : 2, description : desc([ "As an action, I make all city utilities in 30 ft either stop or work perfectly for 1 min", "Additionally, all hostiles within 30 ft must make a Cha save at the time of use", "If failed, it is either knocked prone or restrained (my choice) by city hazards", "A restrained target can escape with an Athletics or Acrobatics check vs. my spell DC" ]), action : [["action", ""]] }, "subclassfeature6" : { name : "Block Watch", source : [["UA:MM", 2]], minlevel : 6, description: desc("While in an urban environment, I'm proficient and expertise in Insight and Perception") }, "subclassfeature8" : { name : "Divine Strike", source : [["UA:MM", 2]], minlevel : 8, description: desc("Once per turn, when I hit a creature with a weapon attack, I can do extra damage"), additional : levels.map(function (n) { if (n < 8) return ""; return "+" + (n < 14 ? 1 : 2) + "d8 psychic damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && v.isWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.cleric.level < 14 ? 1 : 2) + 'd8 psychic damage'; } }, "Once per turn, I can have one of my weapon attacks that hit do extra psychic damage." ] } }, "subclassfeature17" : { name : "Express Transit", source : [["UA:MM", 2]], minlevel : 17, description : desc([ "As an action, I can teleport from one mass transit site to another in the same city", "This works just like a Teleport spell; Mass transits sites include bus/train/subway stops" ]), usages : 1, recovery : "short rest", action : [["action", ""]] } } }); // A subclass for the Warlock, called "Ghost in the Machine" AddSubClass("warlock", "ghost in the machine-ua", { // Still valid 2021-09-21 regExpSearch : /^(?=.*warlock)(?=.*ghost)(?=.*(machine|computer)).*$/i, subname : "the Ghost in the Machine", source : [["UA:MM", 2]], spellcastingExtra : ["infallible relay-ua", "remote access-ua", "arcane hacking-ua", "digital phantom-ua", "haywire-ua", "invisibility to cameras-ua", "conjure knowbot-ua", "system backdoor-ua", "shutdown-ua", "synchronicity-ua"], features : { "subclassfeature1" : { name : "Bonus Proficiency", source : [["UA:MM", 2]], minlevel : 1, description: desc("I am proficient with hacking tools and know the On/Off cantrip"), toolProfs : ["Hacking tools"], spellcastingBonus : [{ name : "Bonus Cantrip (On/Off)", spells : ["on/off-ua"], selection : ["on/off-ua"] }] }, "subclassfeature1.1" : { name : "Information Surge", source : [["UA:MM", 2]], minlevel : 1, description : desc([ "As an action, I can cause a computerized device within 30 ft to make an Int save", "If the device is held/used by a creature, that creature makes the saving throw", "If the device is not held/used, it makes a save with a +0 modifier and disadvantage", "On a failed save, the device stops functioning until the end of my next turn" ]), usages : 1, recovery : "short rest", action : [["action", ""]] }, "subclassfeature6" : { name : "Wire Walk", source : [["UA:MM", 3]], minlevel : 6, description : desc([ "As a bonus action, I can teleport through a hardwired network to a point I can see", "Both where I start and end must be a device, cable, or socket connected to the network" ]), usages : 1, recovery : "long rest", action : [["bonus action", ""]] }, "subclassfeature10" : { name : "Personal Encryption", source : [["UA:MM", 3]], minlevel : 10, description : desc([ "I have adv. on saves vs. scrying, thought detection, and magics for learning my location", "If the effect doesn't let me a save, the user has disadv. on checks to use it on me, if any" ]) }, "subclassfeature14" : { name : "Technovirus", source : [["UA:MM", 3]], minlevel : 14, description : desc([ "As an action, I make a melee spell attack to infect someone with a techno-organic virus", "The target takes 8d10 psychic damage, or half that with a successful Con save", "If it failed its save, I can use an action to cast Command on it while it remains infected", "It makes its save vs. this Command with disadvantage and I can cast it at any range", "It is infected until my next long rest; The virus can be removed with Lesser Restoration" ]), usages : 1, recovery : "long rest", action : [["action", ""]] } } }); // A subclass for the Wizard, called "Technomancy" (contributed by AKA_Sketch) AddSubClass("wizard", "technomancy-ua", { // Still valid 2021-09-21 regExpSearch : /technomancy|technomancer/i, subname : "Technomancy", source : [["UA:MM", 3]], fullname : "Technomancer", features : { "subclassfeature2": { name : "Bonus Proficiencies", source : [["UA:MM", 3]], minlevel : 2, description: desc("I gain proficiency with sidearms and hacking tools"), weaponProfs : [false, false, ["Sidearms"]], toolProfs : ["Hacking tools"] }, "subclassfeature2.1": { name : "Technological Savant", source : [["UA:MM", 3]], minlevel : 2, description : desc([ "I can use a single tablet computer (or similar) instead of a spellbook", "Spells copied into this device cost half the normal amount of gp" ]) }, "subclassfeature6": { name : "Program Spell", source : [["UA:MM", 4]], minlevel : 6, description : desc([ "I can cast a spell into a device of at least smartphone-level of computing power", "Variables of the spell are chosen at time of casting; I can have only one active at a time", "As an action within the next 48 hours, the spell can be cast from the device", "I can't activate a concentration spell in this way if I am concentrating on another spell" ]), recovery : "long rest", usages : 1 }, "subclassfeature10": { name : "Online Casting", source : [["UA:MM", 4]], minlevel : 10, description : desc([ "I can cast a spell, that is not area-of-effect, through networked electronic devices", "If the spell requires sight/hearing, the audio/visual must be transmitted electronically", "The spell's range is determined from me to my device plus from the target to its device" ]), usages : "Intelligence modifier per ", usagescalc : "event.value = Math.max(1, What('Int Mod'));", recovery : "long rest" }, "subclassfeature14": { name : "Chained Device", source : [["UA:MM", 4]], minlevel : 14, description: desc([ "I can use a held/worn tablet computer to concentrate on a spell I cast instead of me", "If the device is separated from me, turned off, or broken, the effect is lost", ]), recovery : "long rest", usages : 1 } } }); // Add a new Warlock invocation AddWarlockInvocation("Arcane Gunslinger (prereq: Pact of the Blade)", { // Still valid 2021-09-21 name : "Arcane Gunslinger", description : desc([ "My pact weapon can take firearm forms, and I can transform magical firearms into one" ]), source : [["UA:MM", 3]], submenu : "[improves Pact of the Blade]", prereqeval : function(v) { return GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the blade'; }, calcChanges : { atkAdd : [ function (fields, v) { if (v.isRangedWeapon && /firearm/i.test(v.theWea.type + " " + v.theWea.list) && /\bpact\b/i.test(v.WeaponTextName)) { v.pactWeapon = true; } }, "If I include the word 'Pact' in a firearm weapon's name, it gets treated as my Pact Weapon.", 90 ] } }); /* Adds 14 spells that are, according to the article, 'suitable' for the Sorcerer, Warlock, or Wizard spell list. 1 of those is also considered suitable for the Paladin spell list. Strangely enough, adding all these spells to the Warlock spell list makes the Ghost in the Machine's Expanded Spell List class feature completely useless */ SpellsList["arcane hacking-ua"] = { // Still valid 2021-09-21 name : "Arcane Hacking", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:MM", 5]], level : 2, school : "Trans", time : "1 a", range : "Self", components : "V,S,M\u0192", compMaterial : "Hacking tools", duration : "Conc, 1 h", description : "Adv on Int (hacking tools) vs. encryption; Use Int (hacking tools) to remove protective spells; See book", descriptionFull : "[Technomagic]\n You gain advantage on all Intelligence checks using hacking tools to break software encryption or online security when using a foreign system. This spell also allows you to break 2nd-level and lower protective spells such as arcane lock or glyph of warding by making an Intelligence check using hacking tools against the spell save DC of the spell's caster." + AtHigherLevels + "When you cast this spell using a spell slot of 3rd level or higher, you can attempt to counteract a spell set to secure the foreign system if the spell's level is equal to or less than the level of the spell slot you used." }; SpellsList["commune with city-ua"] = { // Still valid 2021-09-21 name : "Commune with City", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:MM", 5]], ritual : true, level : 5, school : "Div", time : "1 min", range : "Self", components : "V,S", duration : "Instantaneous", description : "Learn up to three facts about surrounding city, out to 1 mile above- or 600 ft underground; see B", descriptionFull : "You briefly become one with the city and gain knowledge of the surrounding area. Aboveground, this spell gives you knowledge of the area within 1 mile of you. In sewers and other underground settings, you gain knowledge of the area within 600 feet of you." + "\n " + "You instantly gain knowledge of up to three facts of your choice about any of the following subjects as they relate to the area:" + "\n \u2022 " + "Terrain and bodies of water" + "\n \u2022 " + "Prevalent buildings, plants, animals, or intelligent creatures" + "\n \u2022 " + "Powerful (CR 1 or higher) celestials, fey, fiends, elementals, or undead" + "\n \u2022 " + "Influences from other planes of existence" + "\n \u2022 " + "Electrical currents, wireless signals, and active transit lines and tracks" + "\n\n " + "For example, you could determine the location of powerful undead in the area, the location of major sources of electrical power or interference, and the location of any nearby parks." }; SpellsList["conjure knowbot-ua"] = { // Still valid 2021-09-21 name : "Conjure Knowbot", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:MM", 5]], level : 4, school : "Conj", time : "1 a", range : "500 ft", components : "V,S", duration : "10 min", description : "Create bot in touched device; computer checks 1 bns instead of 1 a for me; SL5: 1 h, 1000 ft, see book", descriptionFull : "[Technomagic]\n You touch a single computerized device or computer system to conjure a knowbot\u2014a partially sentient piece of software imprinted with vestiges of your own skills and computer abilities. For the duration of the spell, you can use a bonus action to have the knowbot execute a computer-related task that would normally require an action. The knowbot makes Intelligence ability checks using your ability score and proficiency bonuses (including your proficiency with hacking tools, if applicable)." + "\n " + "You have a limited telepathic bond with the knowbot, out to a range of 500 feet from the device or system where the knowbot was conjured. If you move beyond this range, the knowbot disappears in 2d4 rounds, as if the duration of the spell had expired. Moving within range again immediately reestablishes the bond. The knowbot is bound to the system in which it was created, and it stays there until it is dismissed or the spell's duration expires." + AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, the spell's duration increases to 1 hour. Additionally, your telepathic bond with the knowbot is effective out to a range of 1,000 feet, and if you leave the range of the bond, the knowbot continues performing its last directed task until the spell expires." }; SpellsList["digital phantom-ua"] = { // Still valid 2021-09-21 name : "Digital Phantom", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:MM", 6]], level : 2, school : "Abjur", time : "1 a", range : "Self", components : "V,S,M", compMaterial : "A small piece of copper wire", duration : "Conc, 1 h", description : "Me and any others in same computer system +10 on Int to avoid detection; leave no trace on exit", descriptionFull : "[Technomagic]\n This spell works to actively hide your presence within a computer system. For the spell's duration, you and any other users you choose on your local network gain a +10 bonus to Intelligence checks to avoid detection by administrators, knowbots, tracking software, and the like. Whenever you and your chosen users leave any computer system you are working in while this spell is in effect, all trace of your previous presence in that system is erased." }; SpellsList["find vehicle-ua"] = { // Still valid 2021-09-21 name : "Find Vehicle", classes : ["paladin", "sorcerer", "warlock", "wizard"], source : [["UA:MM", 6]], level : 2, school : "Conj", time : "10 min", range : "30 ft", components : "V,S", duration : "Conc, 1 h", description : "Gain services of land spirit-vehicle; expertise, share spells with it; SL3: water, SL5: air, SL7: any; see B", descriptionFull : "You summon a spirit that assumes the form of a nonmilitary land vehicle of your choice, appearing in an unoccupied space within range. The vehicle has the statistics of a normal vehicle of its sort, though it is celestial, fey, or fiendish (your choice) in origin. The physical characteristics of the vehicle reflect its origin to some degree. For example, a fiendish SUV might be jet black in color, with tinted windows and a sinister-looking front grille." + "\n " + "You have a supernatural bond with the conjured vehicle that allows you to drive beyond your normal ability. While driving the conjured vehicle, you are considered proficient with vehicles of its type, and you add double your proficiency bonus to ability checks related to driving the vehicle. While driving the vehicle, you can make any spell you cast that targets only you also target the vehicle." + "\n " + "If the vehicle drops to 0 hit points, it disappears, leaving behind no physical form. You can also dismiss the vehicle at any time as an action, causing it to disappear." + "\n " + "You can't have more than one vehicle bonded by this spell at a time. As an action, you can release the vehicle from its bond at any time, causing it to disappear." + AtHigherLevels + "When you cast this spell using a spell slot of 3rd level or higher, you can conjure a nonmilitary water vehicle large enough to carry six Medium creatures. When you cast this spell using a spell slot of 5th level or higher, you can conjure a nonmilitary air vehicle large enough to carry ten Medium creatures. When you cast this spell using a spell slot of 7th level or higher, you can conjure any type of vehicle, subject to the DM's approval." }; SpellsList["haywire-ua"] = { // Still valid 2021-09-21 name : "Haywire", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:MM", 7]], level : 3, school : "Ench", time : "1 a", range : "90 ft", components : "V,S", duration : "Conc, 1 min", save : "Wis", description : "10 ft(+5 ft/SL) rad all electronic devices go haywire, see B; for hold devices, crea gets to save", descriptionFull : "[Technomagic]\n This spell plays havoc with electronic devices, making the use of such devices all but impossible. Each electronic device in a 10-foot-radius sphere centered on a point you choose within range is subject to random behavior while it remains within the area. A device not held by a creature is automatically affected. If an electronic device is held by a creature, that creature must succeed on a Wisdom saving throw or have the device affected by the spell." + "\n " + "At the start of each of your turns, roll a d6 for each affected device to determine its behavior. Except where otherwise indicated, that behavior lasts until the start of your next turn while this spell is in effect." + "\n\n" + toUni("d10") + "\t" + toUni("Behavior") + "\n " + "1\tThe device shuts down and must be restarted. Do not roll again for this device until it is restarted.\n2–4\tThe device does not function." + "\n " + "5\tThe device experiences a power surge, causing an electric shock to the wielder (if any) and one random creature within 5 feet of the device. Each affected creature must make a Dexterity saving throw against your spell save DC, taking 6d6 lightning damage on a failed save, or half as much damage on a successful one." + "\n " + "6\tThe device is usable as normal.\n" + AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, the radius of the sphere affected by the spell increases by 5 feet for each slot level above 3rd." }; SpellsList["infallible relay-ua"] = { // Still valid 2021-09-21 name : "Infallible Relay", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:MM", 7]], level : 1, school : "Div", time : "1 min", range : "Self", components : "V,S,M", compMaterial : "A mobile phone", duration : "Conc, 10 min", save : "Cha", description : "1 known crea save or has to answer my call from phone within 100 ft of it; it has to save to end call", descriptionFull : "[Technomagic]\n With this spell, you can target any creature with whom you have spoken previously, as long as the two of you are on the same plane of existence. When you cast the spell, the nearest functioning telephone or similar communications device within 100 feet of the target begins to ring. If there is no suitable device close enough to the target, the spell fails." + "\n " + "The target must make a successful Charisma saving throw or be compelled to answer your call. Once the connection is established, the call is crystal clear and cannot be dropped until the conversation has ended or the spell's duration ends. You can end the conversation at any time, but a target must succeed on a Charisma saving throw to end the conversation." }; SpellsList["invisibility to cameras-ua"] = { // Still valid 2021-09-21 name : "Invisibility to Cameras", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:MM", 7]], level : 3, school : "Illus", time : "1 a", range : "10 ft", components : "V,S,M", compMaterial : "A scrap of black paper", duration : "Conc, 1 min", description : "Up to 4 crea and anything they are wearing or carrying become undetectable for electornic sensors", descriptionFull : "[Technomagic]\n Four creatures of your choice within range become undetectable to electronic sensors and cameras for the duration of the spell. Anything a target is wearing or carrying is likewise undetectable as long as it is on the target's person. The targets remain visible to vision." }; SpellsList["on/off-ua"] = { // Still valid 2021-09-21 name : "On/Off", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:MM", 7]], level : 0, school : "Trans", time : "1 a", range : "60 ft", components : "V,S", duration : "Instantaneous", description : "Activate or deactivate 1 electornic device that has a way of doing so accessible from the outside of it", descriptionFull : "[Technomagic]\n This cantrip allows you to activate or deactivate any electronic device within range, as long as the device has a clearly defined on or off function that can be easily accessed from the outside of the device. Any device that requires a software- based shutdown sequence to activate or deactivate cannot be affected by on/off." }; SpellsList["protection from ballistics-ua"] = { // Still valid 2021-09-21 name : "Protection from Ballistics", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:MM", 8]], level : 3, school : "Abjur", time : "1 a", range : "Touch", components : "V,S,M", compMaterial : "A shell casing", duration : "Conc, 10 min", description : "1 crea gains resistance to nonmagical ballistic damage", descriptionFull : "This spell enchants the flesh of the target against the impact of bullets. Until the spell ends, the target has resistance to nonmagical ballistic damage." }; SpellsList["remote access-ua"] = { // Still valid 2021-09-21 name : "Remote Access", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:MM", 8]], level : 1, school : "Trans", time : "1 a", range : "120 ft", components : "V,S", duration : "10 min", description : "I can use any electronic device within range as if it were in my hands", descriptionFull : "[Technomagic]\n You can use any electronic device within range as if it were in your hands. This is not a telekinesis effect. Rather, this spell allows you to simulate a device's mechanical functions electronically. You are able to access only functions that a person using the device manually would be able to access. You can use remote access with only one device at a time." }; SpellsList["shutdown-ua"] = { // Still valid 2021-09-21 name : "Shutdown", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:MM", 8]], level : 5, school : "Trans", time : "1 a", range : "120 ft", components : "V,S", duration : "Conc, 1 min", save : "Con", description : "Shut down all electronic devices within range; if controlled/held by crea, it can save to keep active", descriptionFull : "[Technomagic]\n This spell shuts down all electronic devices within range that are not wielded by or under the direct control of a creature. If an electronic device within range is used by a creature, that creature must succeed on a Constitution saving throw to prevent the device from being shut down. While the spell remains active, no electronic device within range can be started or restarted." }; SpellsList["synchronicity-ua"] = { // Still valid 2021-09-21 name : "Synchronicity", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:MM", 8]], level : 4, school : "Ench", time : "1 a", range : "120 ft", components : "V,S", duration : "Conc, 1 h", description : "1 crea not slowed by mundane delays, disadv on opportunity attacks to it, adv to Stealth and driving", descriptionFull : "The creature you touch feels reality subtly shifted to its favor while this spell is in effect." + "\n " + "The target isn't inconvenienced by mundane delays of any sort. Traffic lights are always green, there's always a waiting elevator, and a taxi is always around the corner. The target can run at full speed through dense crowds, and attacks of opportunity provoked by the target's movement are made with disadvantage." + "\n " + "Synchronicity grants advantage to Dexterity (Stealth) checks, since the target always finds a handy piece of cover available. Additionally, the target has advantage on all ability checks made to drive a vehicle." + "\n " + "In the event that two or more creatures under the effect of synchronicity are attempting to avoid being inconvenienced by each other, the creatures engage in a contest of Charisma each time the effects of the spells would oppose each other." }; SpellsList["system backdoor-ua"] = { // Still valid 2021-09-21 name : "System Backdoor", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:MM", 8]], level : 4, school : "Trans", time : "1 min", range : "Self", components : "V,S,M\u0192", compMaterial : "Hacking tools", duration : "Conc, 1 h", description : "Gain admin access to 1 system; defeats 3rd or lower technomancy spells; SL5+: defeats same or lower", descriptionFull : "[Technomagic]\n This spell allows you to bypass system security in order to create a secure login on a foreign system. The login you create allows you administrator-level privileges in any computer system not enhanced through technomagic. The login defeats any technomagic spells of 3rd level or lower." + "\n " + "Once the duration of the spell expires, the login and all privileges are wiped from the system." + "\n " + "System logs still show the activity of the user, but the user identification cannot be found or traced." + AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, you are able to bypass technomagic spells if the spell's level is equal to or less than the level of the spell slot you used." }; ================================================ FILE: WotC material/ua_20150909_Ranger.js ================================================ // This code was contributed by Lewis Henderson // // Please note that the original .pdf has the hit dice as 2d6 per level. // There isn't any way to implement this, so the hit dice is recorded as a d12. // Also note that there is no automation for the companion page included in this. // // You will have to choose the ranger's animal spirit from the companion race drop-down list and add the Wisdom modifier bonus to attacks and saves manually. var iFileName = "ua_20150909_Ranger.js"; RequiredSheetVersion("13.0.8", 15); // This file adds the content from the Unearthed Arcana: Ranger article to MPMB's Character Record Sheet // Define the source SourceList["UA:R"] = { name : "Unearthed Arcana: Ranger", abbreviation : "UA:R", group : "Unearthed Arcana", url : "https://media.wizards.com/2015/downloads/dnd/DX_0907_UA_RangerOptions.pdf", date : "2015/09/09" }; // Define a new class, called "Playtest Ranger" and its 3 subclasses ClassList["ua-playtest-ranger"] = { regExpSearch : /^(?=.*playtest)((?=.*(ranger|strider))|((?=.*(nature|natural))(?=.*(knight|fighter|warrior|warlord|trooper)))).*$/i, name : "Playtest Ranger", source : [["UA:R", 0]], primaryAbility : "Dexterity and Wisdom", prereqs : "Dexterity 13 and Wisdom 13", die : 12, improvements : [0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5, 5], saves : ["Dex", "Wis"], skillstxt : { primary : "Choose three from Animal Handling, Athletics, Insight, Investigation, Nature, Perception, Stealth, and Survival", secondary : "Choose one from Animal Handling, Athletics, Insight, Investigation, Nature, Perception, Stealth, and Survival" }, toolProfs : { primary : ["Herbalism kit"] }, armorProfs : { primary : [true, false, false, true], secondary : [true, false, false, true] }, weaponProfs : { primary : [true, true], secondary : [true, true] }, equipment : "Playtest Ranger starting equipment:\n \u2022 leather armor;\n \u2022 Two shortswords -or- two martial melee weapons -or- a martial weapon and a shield;\n \u2022 A dungeoneer's pack -or- an explorer's pack;\n \u2022 A longbow and a quiver of 20 arrows -or- a martial weapon.", subclasses : ["Ranger Path", []], subclassGainedLevel : 3, attacks : [1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], features : { "ambuscade" : { name : "Ambuscade", source : [["UA:R", 2]], minlevel : 1, description : desc([ "When I roll initiative, I gain a special turn before others can act", "During this bonus turn, I can only use the Attack or Hide action", "I can't be surprised, but if I would be surprised I don't get the bonus turn" ]) }, "natural explorer" : ClassList.ranger.features["natural explorer"], "fighting style" : ClassList.ranger.features["fighting style"], "skirmisher's stealth" : { name : "Skirmisher's Stealth", source : [["UA:R", 3]], minlevel : 2, description : desc([ "At the start of my turn, I can choose a creature I'm hidden from", "During that turn, I remain hidden from it, regardless of my actions", "As a bonus action at the end of my turn, I can use the Hide action" ]), action : [["bonus action", ""]], }, "subclassfeature3" : { name : "Ranger Path", source : [["UA:R", 3]], minlevel : 3, description : desc([ 'Choose a Ranger Path you wish to follow and put it in the "Class" field', "Choose Guardian, Seeker, or Stalker" ]) }, "primeval awareness" : ClassList.ranger.features["primeval awareness"] } }; AddSubClass("ua-playtest-ranger", "guardian-ua", { regExpSearch : /^(?=.*guardian)((?=.*(ranger|strider))|((?=.*(nature|natural))(?=.*(knight|fighter|warrior|warlord|trooper)))).*$/i, subname : "Guardian", source : [["UA:R", 3]], features : { "subclassfeature3" : { name : "Brown Bear Spirit Companion", source : [["UA:R", 3]], minlevel : 3, description : desc([ "As a bonus action, I can have my brown bear spirit animal materialize or dismiss it", "It has all the stats of a brown bear and adds my Wis mod to its attacks and saves", "Its HP is half my ranger level or the total in its stat block, whichever is higher", "It takes it turn right after my initiative and is under my complete control" ]), usages : 1, recovery : "short rest", action : [["bonus action", ""]] }, "subclassfeature3.1" : { name : "Guardian's Shroud", source : [["UA:R", 4]], minlevel : 3, description :"\n " + "When I call my spirit animal, I grant me or an ally I can see 2d6 + Wis mod temp HP" } } }); AddSubClass("ua-playtest-ranger", "seeker-ua", { regExpSearch : /^(?=.*seeker)((?=.*(ranger|strider))|((?=.*(nature|natural))(?=.*(knight|fighter|warrior|warlord|trooper)))).*$/i, subname : "Seeker", source : [["UA:R", 4]], features : { "subclassfeature3" : { name : "Giant Eagle Spirit Companion", source : [["UA:R", 3]], minlevel : 3, description : desc([ "As a bonus action, I can have my giant eagle spirit animal materialize or dismiss it", "It has all the stats of a giant eagle and adds my Wis mod to its attacks and saves", "Its HP is half my ranger level or the total in its stat block, whichever is higher", "It takes it turn right after my initiative and is under my complete control" ]), usages : 1, recovery : "short rest", action : [["bonus action", ""]] }, "subclassfeature3.1" : { name : "Seeker's Eye", source : [["UA:R", 4]], minlevel : 3, description : desc([ "When I call my spirit animal, I can choose a creature that I can see", "Until the end of my next turn, all attacks against the target have advantage" ]) } } }); AddSubClass("ua-playtest-ranger", "stalker-ua", { regExpSearch : /^(?=.*stalker)((?=.*(ranger|strider))|((?=.*(nature|natural))(?=.*(knight|fighter|warrior|warlord|trooper)))).*$/i, subname : "Stalker", source : [["UA:R", 4]], features : { "subclassfeature3" : { name : "Dire Wolf Spirit Companion", source : [["UA:R", 3]], minlevel : 3, description : desc([ "As a bonus action, I can have my dire wolf spirit animal materialize or dismiss it", "It has all the stats of a dire wolf and adds my Wis mod to its attacks and saves", "Its HP is half my ranger level or the total in its stat block, whichever is higher", "It takes it turn right after my initiative and is under my complete control" ]), usages : 1, recovery : "short rest", action : [["bonus action", ""]] }, "subclassfeature3.1" : { name : "Stalker's Fangs", source : [["UA:R", 4]], minlevel : 3, description : desc([ "When I call my spirit animal, I can choose a creature that I can see", "The target's next weapon attack hit deals 2d6 + Wis mod extra slashing damage" ]) } } }); ================================================ FILE: WotC material/ua_20151005_Prestige Classes and Rune Magic.js ================================================ var iFileName = "ua_20151005_Prestige Classes and Rune Magic.js"; RequiredSheetVersion("13.0.8"); // This file adds the content from the Unearthed Arcana: Prestige Classes and Rune Magic article to MPMB's Character Record Sheet // Define the source SourceList["UA:PCRM"] = { name : "Unearthed Arcana: Prestige Classes and Rune Magic", abbreviation : "UA:PCRM", group : "Unearthed Arcana", url : "https://media.wizards.com/2015/downloads/dnd/UA_Rune_Magic_Prestige_Class.pdf", date : "2015/10/05" }; // Adds a prestige class, called "Rune Scribe" (includes contributions by K.12) ClassList["rune scribe"] = { // Still valid 2021-09-21 regExpSearch : /^(?=.*rune)(?=.*scribe).*$/i, name : "Rune Scribe", source : [["UA:PCRM", 2]], primaryAbility : "Dexterity and Intelligence", prereqs : "\n - Dexterity 13 and Intelligence 13;\n - Proficiency in the Arcana skill\n - Complete a special task: You must find a rune and present it to an NPC rune scribe who accepts it in return for tutoring you in the ways of rune magic", die : 8, improvements : levels.map(function (n) {return 0}), toolProfs : { secondary : ["Calligrapher's Supplies", "Mason's Tools", "Woodcarver's Tools"] }, subclasses : ["", []], subclassGainedLevel : 100, prestigeClassPrereq : 5, attacks : levels.map(function (n) {return 1}), spellcastingFactor : 1, features : { "rune lore" : { name : "Rune Lore", source : [["UA:PCRM", 3]], minlevel : 1, description : desc([ "I learn the basics of scribing runes, and can activate all properties of a master rune", "The first rune I master is the one I found to qualify to become a rune scribe", "To use any features of a master rune, I need to first attune to it just like a magic item", 'Use the "Choose Feature" button above to add master runes to the third page' ]), extraname : "Master Rune", extrachoices : ["Opal of the Ild Rune", "Orb of the Stein Rune", "Pennant of the Vind Rune", "Shard of the Kalt Rune"], "opal of the ild rune" : { name : "Opal of the Ild Rune", source : [["UA:PCRM", 4]], description : " [rare, requires attunement]" + desc([ "- Ignite (simple): As an action, ignite touched flammable object; Fire extends 1 ft from it", "- Fire Tamer (simple): As an action, extinguish touched open flame up to 10-ft radius", " I can expend a spell slot to extend that radius by 20 ft/SL", "- Fire's Friend (simple): While attuned, I have resistance to cold damage", "- Combustion (complex): As an action, I expend spell slot and touch a creature", " The target automatically takes 1d10 + 1d10/SL fire damage", "- Flame Brand (complex): During a short rest, I can augment a weapon, or 20 ammo", " The weapon or ammo deals fire damage; It lasts for 24 hours or until I use this again", " I can expend a spell slot to also give the weapon a magic bonus of slot level dived by 3", "- Flame Stoker (complex): While attuned, I roll any fire damage twice and use the higher" ]), dmgres : ["Cold"], action : ['action', 'Ild Rune (Ignite, Fire Tamer, Combusion)'] }, "orb of the stein rune" : { name : "Orb of the Stein Rune", source : [["UA:PCRM", 5]], description : " [rare, requires attunement]" + desc([ "- Indomitable Stand (simple): As an action, I gain abilities until I move", " I have advantage on all ability checks and saving throws to resist being moved", " Anyone moving within 10 ft makes a DC 12 Str save or has speed 0 until its next turn", "- Stone Soul (simple): While attuned, I cannot be petrified", "- Stone's Secrets (simple): As an action, I learn everybody's current location within 30 ft", " They have to touch the same surface as I'm touching with my hand", "- Crushing Brand (complex): During a short rest, I can augment a bludgeoning weapon", " The weapon's bludgeoning damage ignores resistances and immunities", " If the weapon deals its maximum damage, the target is also knocked prone", " I can expend a spell slot to also give the weapon a magic bonus of slot level dived by 3", " These effects last for 24 hours or until I use Crushing Brand again", "- Earthen Step (complex): I can cast Meld Into Stone as a bonus action once per short rest", "- Overwhelming Bolt (complex): As an action, I expend spell slot and touch a creature", " It takes 2d8+1d8/SL bludg. dmg and is prone; DC 12+SL Str save for half \u0026 not prone" ]), action : [['action', 'Stein Rune (Indomitable Stand, Secrets, Bolt)']], savetxt : { immune : ["petrified"] }, spellcastingBonus : [{ name : "Orb of the Stein Rune", spells : ["meld into stone"], selection : ["meld into stone"], firstCol : 'oncesr' }], spellChanges : { "levitate" : { time : "1 bns", changes : "Using my Orb of the Stein Rune, I can cast Meld Into Stone as a bonus action once per short rest." } }, extraLimitedFeatures : [{ name : "Earthen Step (Orb of the Stein Rune)", usages : 1, recovery : "short rest" }] }, "pennant of the vind rune" : { name : "Pennant of the Vind Rune", source : [["UA:PCRM", 5]], description : " [rare, requires attunement]" + desc([ "- Comforting Wind (simple): While attuned, I can't suffocate or drown", " Also, I gain advantage on saves against inhaled poisons, toxins, and similar effects", "- Wind Step (simple): As an action, I fly 20 ft, after which I fall if I'm still airborne", "- Wind's Grasp (simple): As a reaction when falling, I can take no damage from the fall", "- Howling Brand (complex): During a short rest, I can augment a ranged weapon", " Its range is doubled and attacks with it do not suffer disadvantage due to range", " I can expend a spell slot to also give the weapon a magic bonus of slot level dived by 3", " These effects last for 24 hours or until I use Howling Brand again", "- Shrieking Bolt (complex): As an action, I expend spell slot to target a creature I can see", " It 2d8+1d8/SL bludg. dmg \u0026 pushed 10 ft; DC 12+SL Str save for half \u0026 not pushed", "- Wind Walker (complex): I can cast Levitate as a bonus action once per short rest" ]), action : [['action', 'Vind Rune (Wind Step, Shrieking Bolt)'], ['reaction', "Vind Rune (Wind's Grasp)"]], savetxt : { adv_vs : ["inhaled poison"] }, spellcastingBonus : [{ name : "Pennant of the Vind Rune", spells : ["levitate"], selection : ["levitate"], firstCol : 'oncesr' }], spellChanges : { "levitate" : { time : "1 bns", changes : "Using my Pennant of the Vind Rune, I can cast Levitate as a bonus action once per short rest." } }, extraLimitedFeatures : [{ name : "Wind Walker (Pennant of the Vind Rune)", usages : 1, recovery : "short rest" }] }, "shard of the kalt rune" : { name : "Shard of the Kalt Rune", source : [["UA:PCRM", 6]], description : " [rare, requires attunement]" + desc([ "- Frigid Touch (simple): As an action, I freeze water that I touch a 10-ft radius", "- Frost Friend (simple): While attuned, I have resistance to fire damage", "- Icy Mantle (simple): As an action, me or a creature I touch gains a protective mantle", " The next time taking bludg., slash., pierc. damage, it absorbs the damage and falls apart", "- Freezing Bolt (complex): As an action, I expend spell slot and touch a creature", " It takes 2d8+1d8/SL cold damage and its speed is 0 until the end of my next turn", " If it succeeds on a DC 12+SL Con save, it takes only half damage and has normal speed", "- Ice Brand (complex): During a short rest, I can augment a weapon, or 20 ammo pieces", " The weapon or ammo deals cold damage; It lasts for 24 hours or until I use this again", " I can expend a spell slot to also give the weapon a magic bonus of slot level dived by 3", "- Winter's Howl (complex): I can cast Sleet Storm as an action once per short rest" ]), dmgres : ["Fire"], action : ['action', 'Kalt Rune (Touch, Mantle, Bolt, Howl)'], spellcastingBonus : [{ name : "Shard of the Kalt Rune", spells : ["sleet storm"], selection : ["sleet storm"], firstCol : 'oncesr' }], extraLimitedFeatures : [{ name : "Winter's Howl (Shard of the Kalt Rune)", usages : 1, recovery : "short rest" }] } }, "runic magic" : { name : "Runic Magic", source : [["UA:PCRM", 3]], minlevel : 1, description: desc("I obtain spell slots as if gaining a level in a full spellcasting class, but don't learn spells") }, "runic discovery" : { name : "Runic Discovery", source : [["UA:PCRM", 3]], minlevel : 2, description : desc([ "I know a number of master runes which I can attune to, even if not in my possession", "Attuning or de-attuning in this manner can be done over the course of a short rest" ]), additional : levels.map(function (n) { if (n < 2) return ""; return (n < 3 ? 1 : n < 5 ? 2 : 3) + " known master runes"; }) }, "living rune" : { name : "Living Rune", source : [["UA:PCRM", 3]], minlevel : 4, description : desc([ "I get 2 points that I can add to one or two of my ability scores as I see fit", "When I finish a long rest, I can re-allocate these point(s) from a single score to another" ]) }, "rune mastery" : { name : "Rune Mastery", source : [["UA:PCRM", 3]], minlevel : 5, description: desc("One rune I'm attuned to doesn't count toward the limit of magic items I can attune to") } } }; ================================================ FILE: WotC material/ua_20151102_Light,-Dark,-Underdark!.js ================================================ var iFileName = "ua_20151102_Light,-Dark,-Underdark!.js"; RequiredSheetVersion("13.0.8"); // This file adds the content from the Unearthed Arcana: Light, Dark, Underdark! article to MPMB's Character Record Sheet // Define the source SourceList["UA:LDU"] = { name : "Unearthed Arcana: Light, Dark, Underdark!", abbreviation : "UA:LDU", group : "Unearthed Arcana", url : "https://media.wizards.com/2015/downloads/dnd/02_UA_Underdark_Characters.pdf", date : "2015/11/02" }; // New Fighting Styles AddFightingStyle(["fighter", "ranger", "paladin"], "Close Quarters Shooter", { // Still valid 2021-09-21 name : "Close Quarters Shooting Fighting Style", source : [["UA:LDU", 1]], description: desc([ "+1 bonus to attack rolls I make with ranged attacks", "I don't have disadvantage when making a ranged attack while within 5 ft of a hostile", "My ranged attacks ignore half and three-quarters cover against targets within 30 ft", ]), calcChanges : { atkCalc : [ function (fields, v, output) { if (v.isRangedWeapon) output.extraHit += 1; }, "My ranged weapons get a +1 bonus on the To Hit." ] } }); AddFightingStyle(["fighter", "ranger", "paladin"], "Tunnel Fighter", { // Still valid 2021-09-21 name : "Tunnel Fighting Style", source : [["UA:LDU", 1]], description: desc([ "As a bonus action, I enter a defensive stance that lasts until the start of my next turn", "While I'm in this defensive stance I gain the following two benefits:", "\u2022 I can make opportunity attacks without using my reaction", "\u2022 I can make a melee attack as a reaction if a hostile moves >5 ft while in my reach", ]), action : [["bonus action", ""]] }); // A subclass for the Ranger, called "Deep Stalker" AddSubClass("ranger", "deep stalker-ua", { regExpSearch : /^(?=.*deep)(?=.*stalker).*$/i, subname : "Deep Stalker", source : [["UA:LDU", 1]], fullname : "Deep Stalker", features : { "subclassfeature3" : { name : "Underdark Scout", source : [["UA:LDU", 1]], minlevel : 3, description: desc([ "In the first turn of combat I have +10 ft speed and +1 attack with the Attack action", "All turns after that, I can take the Hide action as a bonus action at the end of my turn", ]), action : [["bonus action", " (Hide at end of turn)"]] }, "subclassfeature3.1" : { name : "Deep Stalker Magic", source : [["UA:LDU", 2]], minlevel : 3, description: desc([ "I have 90 ft darkvision and add a spell to my known spells at level 3, 5, 9, 13, and 17", "These count as ranger spells, but do not count against the number of spells I can know", ]), spellcastingExtra : ["disguise self", "rope trick", "glyph of warding", "greater invisibility", "seeming"], spellcastingExtraApplyNonconform : true, vision : [["Darkvision", 90]] }, "subclassfeature7" : { name : "Iron Mind", source : [["UA:LDU", 2]], minlevel : 7, description: desc("I am proficient with Wisdom saving throws"), saves : ["Wis"] }, "subclassfeature11" : { name : "Stalker's Flurry", source : [["UA:LDU", 2]], minlevel : 11, description: desc("Once during my turn when I miss an attack, I can immediately make an extra attack") }, "subclassfeature15" : { name : "Stalker's Dodge", source : [["UA:LDU", 2]], minlevel : 15, description: desc("As a reaction when I'm attacked without adv., I can impose disadv. on the attack roll"), action : [["reaction", " (when attacked)"]] } } }); // A subclass for the Sorcerer, called "Shadow" AddSubClass("sorcerer", "shadow sorcerer-ua", { regExpSearch : /^(?=.*(sorcerer|witch))(?=.*shadow).*$/i, subname : "Shadow", source : [["UA:LDU", 2]], fullname : "Shadow Sorcerer", features : { "subclassfeature1" : { name : "Eyes of the Dark", source : [["UA:LDU", 2]], minlevel : 1, description: desc([ "I have 60 ft darkvision and can cast Darkness by spending 1 sorcery point", "I can see through any darkness spell I cast using this ability", ]), additional : "1 sorcery point", vision : [["Darkvision", 60]], action : [["action", " (1 sorcery point)"]], spellcastingBonus : [{ name : "Eyes of the Dark", spells : ["darkness"], selection : ["darkness"], firstCol : 1 }], spellChanges : { "darkness" : { description : "15-ft rad darkness on point/obj; I see normally; darkvision doesn't work; only magical light of SL 3+", changes : "Using my Eyes of the Dark class feature I can cast Darkness by spending 1 sorcery point and I can see through that Darkness without issue." } } }, "subclassfeature1.1" : { name : "Strength of the Grave", source : [["UA:LDU", 2]], minlevel : 1, description: desc([ "When damage reduces me to 0 HP, that isn't radiant damage or a critical hit,", "I can make a Constitution save (DC 5 + damage taken) to drop to 1 HP instead", ]), }, "subclassfeature6" : { name : "Hound of Ill Omen", source : [["UA:LDU", 2]], minlevel : 6, additional : "3 sorcery points", description: desc([ "As a bonus action, I target a creature I can see and summon a hound within 30 ft of it", "The hound has all the stats of a medium sized dire wolf with the following exceptions:", "\u2022 At the start of its turn, it automatically knows where the target is", "\u2022 It can only move towards and make (opportunity) attack against the target", "\u2022 It can move through other creatures and objects as if they were difficult terrain", "\u2022 It takes 5 force damage if it ends its turn inside an object", "The target has disadvantage on saves vs. my spells while the hound is within 5 ft of it", ]), action : [["bonus action", " (3 sorcery points)"]] }, "subclassfeature14" : { name : "Shadow Walk", source : [["UA:LDU", 3]], minlevel : 14, description: desc([ "As a bonus action when I'm in dim light or darkness, I can teleport up to 120 ft", "The destination has to be unoccupied, within line of sight, and in dim light or darkness", ]), action : [["bonus action", ""]] }, "subclassfeature18" : { name : "Shadow Form", source : [["UA:LDU", 3]], minlevel : 18, additional : "3 sorcery points", description: desc([ "As a bonus action, I transform into a shadow form for 1 minute", "While transformed, I have resistance to all damage types except force damage", "Also, I can move through other creatures and objects as if they were difficult terrain", "I take 5 force damage if I end my turn inside an object", ]), action : [["bonus action", " (3 sorcery points)"]] } } }); // A subclass for the Warlock, called "The Undying Light" AddSubClass("warlock", "the undying light-ua", { regExpSearch : /^(?=.*warlock)(?=.*light)(?=.*(immortal|undying|neverending|unending)).*$/i, subname : "the Undying Light", source : [["UA:LDU", 3]], spellcastingExtra : ["burning hands", "flaming sphere", "daylight", "fire shield", "flame strike"], features : { "subclassfeature1" : { name : "Radiant Soul", source : [["UA:LDU", 3]], minlevel : 1, description: desc([ "I add my Cha modifier to cantrips/spells I cast that deal fire or radiant damage", "I have resistance to radiant damage and know the Light and Sacred Flame cantrips", ]), spellcastingBonus : [{ name : "Radiant Soul", spells : ["light"], selection : ["light"] }, { name : "Radiant Soul", spells : ["sacred flame"], selection : ["sacred flame"] }], dmgres : ["Radiant"], calcChanges : { atkCalc : [ function (fields, v, output) { if (v.isSpell && (/fire|radiant/i).test(fields.Damage_Type)) output.extraDmg += What('Cha Mod'); }, "Cantrips and spells that fire or radiant damage get my Charisma modifier added to their damage." ], spellAdd : [ function (spellKey, spellObj, spName) { if (!spellObj.psionic) return genericSpellDmgEdit(spellKey, spellObj, "fire|radiant", "Cha"); }, "Cantrips and spells that fire or radiant damage get my Charisma modifier added to their damage." ] } }, "subclassfeature6" : { name : "Searing Vengeance", source : [["UA:LDU", 3]], minlevel : 6, description: desc([ "When I would make a death saving throw, I can instead spring back to my feet", "I immediately stand up and recover HP equal to half my current HP maximum", "Also, all hostiles within 30 ft of me take 10 + Charisma modifier in radiant damage", "Damaged creatures are blinded until the end of my next turn", ]), usages : 1, recovery : "long rest" }, "subclassfeature10" : { name : "Radiant Resilience", source : [["UA:LDU", 4]], minlevel : 10, description: desc([ "When I finish a short or long rest, I and up to five allies gain temporary hit points", "I get my warlock level + Cha mod, while my allies get half my warlock level + Cha mod", ]), }, "subclassfeature14" : { name : "Healing Light", source : [["UA:LDU", 4]], minlevel : 14, description: desc([ "As a bonus action, I touch a creature and heal it by expending dice from my pool", "I subtract the number of d6's used from my pool; I can expend up to 5d6 at a time", "The target heals HP equal to the roll of the dice; I regain expended uses with a long rest", ]), usages : "15d6 per ", usagescalc : "event.value = '15d6';", recovery : "long rest", action : [["bonus action", ""]] } } }); ================================================ FILE: WotC material/ua_20151217_That-Old-Black-Magic.js ================================================ var iFileName = "ua_20151217_That-Old-Black-Magic.js"; RequiredSheetVersion("13.0.8"); // This file adds the content from the Unearthed Arcana: That Old Black Magic article to MPMB's Character Record Sheet // Define the source SourceList["UA:TOBM"] = { name : "Unearthed Arcana: That Old Black Magic", abbreviation : "UA:TOBM", group : "Unearthed Arcana", url : "https://media.wizards.com/2015/downloads/dnd/07_UA_That_Old_Black_Magic.pdf", date : "2015/12/17" }; // Adds the Abyssal Tiefling RaceList["abyssal tiefling-ua"] = { regExpSearch : /^(?=.*abyssal)((?=.*tiefling)|(?=.*planetouched)(?=.*(hell|abyss|fiend|devil))).*$/i, name : "Abyssal tiefling", sortname : "Tiefling, Abyssal", source : [["UA:TOBM", 1]], plural : "Abyssal tieflings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Abyssal"], vision : [["Darkvision", 60]], dmgres : ["Fire"], age : " reach adulthood in their late teens and live around 100 years", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 0, 1, 0, 0, 2], trait : "Abyssal Tiefling (+1 Constitution, +2 Charisma)\nAbyssal Fortitude: My HP maximum increases with half the levels I have (min 1). Abyssal Arcana: After each long rest I gain randomly determined spellcasting ability (d6). This is a cantrip, and on both 3rd and 5th level a spell that I can cast once, at 2nd-level.\n1: (Dancing Lights, Burning Hands, Alter Self); 2: (True Strike, Charm Person, Darkness)" + (!typePF ? ";" : " ") + " 3: (Light, Magic Missile, Invisibility); 4: (Spare the Dying, Hideous Laughter, Mirror Image)" + (!typePF ? ";" : " ") + " 5: (Message, Cure Wounds, Levitate); 6: (Prestidigitation, Thunderwave, Spider Climb)", abilitySave : 6, spellcastingAbility : 6, spellcastingBonus : [{ name : "Abyssal Arcana (level 1)", spells : ["dancing lights", "true strike", "light", "message", "spare the dying", "prestidigitation"], firstCol : 'atwill' }], calcChanges : { hp : function (totalHD) { return [Math.max(1, Math.floor(totalHD / 2)), "Abyssal Fortitude"]; } }, features : { "abyssal arcana (level 3)" : { name : "Abyssal Arcana (level 3)", minlevel : 3, usages : 1, recovery : "long rest", action : [["action", ""]], spellcastingBonus : [{ name : "Abyssal Arcana (level 3)", spells : ["burning hands", "charm person", "magic missile", "cure wounds", "tasha's hideous laughter", "thunderwave"], firstCol : 'oncelr' }] }, "abyssal arcana (level 5)" : { name : "Abyssal Arcana (level 5)", minlevel : 5, usages : 1, recovery : "long rest", action : [["action", ""]], spellcastingBonus : [{ name : "Abyssal Arcana (level 5)", spells : ["alter self", "darkness", "invisibility", "levitate", "mirror image", "spider climb"], firstCol : 'oncelr' }] } }, variants : RaceList.tiefling && RaceList.tiefling.variants ? RaceList.tiefling.variants : [] }; //now do the variants var UATOBM_addAbyssalTiefling = function(){ var replaceTraitTxt = ["+1 Intelligence, +2 Charisma", "+1 Constitution, +2 Charisma"]; var replaceNameTxt = ["tiefling", "abyssal tiefling"]; RaceList["abyssal tiefling-ua"].variants.forEach( function(nVar) { if (!RaceSubList["tiefling-" + nVar]) return; RaceSubList["abyssal tiefling-ua-" + nVar] = newObj(RaceSubList["tiefling-" + nVar]); var thisVar = RaceSubList["abyssal tiefling-ua-" + nVar]; thisVar.trait = thisVar.trait.replace(replaceTraitTxt[0], replaceTraitTxt[1]); thisVar.trait = thisVar.trait.replace(replaceNameTxt[0].capitalize(), replaceNameTxt[1].capitalize()); thisVar.name = thisVar.name.replace(replaceNameTxt[0], replaceNameTxt[1]); thisVar.plural = thisVar.plural.replace(replaceNameTxt[0], replaceNameTxt[1]); }); }(); /* Adds 5 spells for summoning fiends to the Sorcerer and the Wizard spell lists This code was contributed by David */ SpellsList["conjure lesser demon-ua"] = { // Still valid 2021-09-21 name : "Conjure Lesser Demon", classes : ["sorcerer", "wizard"], source : [["UA:TOBM", 2]], level : 3, school : "Conj", time : "1 a", range : "60 ft", components : "V,S,M", compMaterial : "A vial of blood from an intelligent humanoid killed within the past 24 hours", duration : "Conc, 1 h", description : "Summon 8 (16 at SL6, 32 at SL8) manes/dretches that are hostile to all non-demons, attacking nearest", descriptionFull : "You summon up to a total of eight manes or dretches that appear in unoccupied spaces you can see within range. A manes or dretch disappears when it drops to 0 hit points or when the spell ends." + "\n " + "The demons are hostile to all creatures. Roll initiative for the summoned demons as a group, which has its own turns. The demons attack the nearest non-demons to the best of their ability." + "\n " + "As part of casting the spell, you can scribe a circle on the ground with the blood used as a material component. The circle is large enough to encompass your space. The summoned demons cannot cross the circle or target anyone in it while the spell lasts. Using the material component in this manner consumes it." + AtHigherLevels + "When you cast this spell using a spell slot of 6th or 7th level, you summon sixteen demons. If you cast it using a spell slot of 8th or 9th level, you summon thirty-two demons." }; SpellsList["conjure barlgura-ua"] = { // Still valid 2021-09-21 name : "Conjure Barlgura", classes : ["sorcerer", "wizard"], source : [["UA:TOBM", 2]], level : 4, school : "Conj", time : "1 a", range : "60 ft", components : "V,S", duration : "10 min", description : "Summon a barlgura that is hostile to all non-demons, attacking the nearest", descriptionFull : "You summon a barlgura that appears in an unoccupied space you can see within range. The barlgura disappears when it drops to 0 hit points or when the spell ends." + "\n " + "The barlgura is hostile to all non-demons. Roll initiative for the barlgura, which has its own turns. At the start of its turn, it moves toward and attacks the nearest non-demon it can perceive. If two or more creatures are equally near, it picks one at random. If it cannot see any potential enemies, the barlgura moves in a random direction in search of foes." + "\n " + "As part of casting the spell, you can scribe a circle on the ground using the blood of an intelligent humanoid slain within the past 24 hours. The circle is large enough to encompass your space. The summoned barlgura cannot cross the circle or target anyone in it while the spell lasts." }; SpellsList["conjure hezrou-ua"] = { // Still valid 2021-09-21 name : "Conjure Hezrou", classes : ["sorcerer", "wizard"], source : [["UA:TOBM", 2]], level : 7, school : "Conj", time : "1 a", range : "60 ft", components : "V,S,M\u2020", compMaterial : "Food worth at least 100 gp, which the spell consumes", duration : "Conc, 1 h", description : "Summon a hezrou that I might control as long as there is food; At half HP it leaves, see B (100gp cons.)", descriptionFull : "You summon a hezrou that appears in an unoccupied space you can see within range. The hezrou disappears when it drops to 0 hit points or when the spell ends." + "\n " + "The hezrou's attitude depends on the value of the food used as a material component for this spell. Roll initiative for the hezrou, which has its own turns. At the start of the hezrou's turn, the DM makes a secret Charisma check on your behalf, with a bonus equal to the food's value divided by 20. The check DC starts at 10 and increases by 2 each round. You can issue orders to the hezrou and have it obey you as long as you succeed on the Charisma check." + "\n " + "If the check fails, the spell no longer requires concentration and the demon is no longer under your control. The hezrou then focuses on devouring any corpses it can see. If there are no such meals at hand, it attacks the nearest creatures and eats anything it kills. If its hit points are reduced to below half its hit point maximum, it returns to the Abyss." + "\n " + "As part of casting the spell, you can scribe a circle on the ground using the blood of an intelligent humanoid slain within the past 24 hours. The circle is large enough to encompass your space. The summoned hezrou cannot cross the circle or target anyone in it while the spell lasts." }; SpellsList["conjure shadow demon-ua"] = { // Still valid 2021-09-21 name : "Conjure Shadow Demon", classes : ["sorcerer", "wizard"], source : [["UA:TOBM", 3]], level : 4, school : "Conj", time : "1 a", range : "60 ft", components : "V,S,M", compMaterial : "A vial of blood from an intelligent humanoid killed within the past 24 hours", duration : "Conc, 1 h", description : "Summon a shadow demon that I control while not in bright light, can attack, and within 100 ft, see B", descriptionFull : "You summon a shadow demon that appears in an unoccupied space you can see within range. The shadow demon disappears when it drops to 0 hit points or when the spell ends." + "\n " + "Roll initiative for the shadow demon, which has its own turns. You can issue orders to the shadow demon, and it obeys you as long as it can attack a creature on each of its turns and does not start its turn in an area of bright light. If either of these conditions is not met, the shadow demon immediately makes a Charisma check contested by your Charisma check. If you fail the check, the spell no longer requires concentration and the demon is no longer under your control. The demon automatically succeeds on the check if it is more than 100 feet away from you." + "\n " + "As part of casting the spell, you can scribe a circle on the ground using the blood of an intelligent humanoid slain within the past 24 hours. The circle is large enough to encompass your space. The summoned shadow demon cannot cross the circle or target anyone in it while the spell lasts." }; SpellsList["conjure vrock-ua"] = { // Still valid 2021-09-21 name : "Conjure Vrock", classes : ["sorcerer", "wizard"], source : [["UA:TOBM", 3]], level : 5, school : "Conj", time : "1 a", range : "60 ft", components : "V,S,M\u2020", compMaterial : "A gem worth at least 100 gp, which the spell consumes", duration : "Conc, 1 h", description : "Summon a vrock that I might control for some rounds, depending on gem value, see B (100gp cons.)", descriptionFull : "You summon a vrock that appears in an unoccupied space you can see within range. The vrock disappears when it drops to 0 hit points or when the spell ends." + "\n " + "The vrock's attitude depends on the value of the gem used as a material component for this spell. Roll initiative for the vrock, which has its own turns. At the start of the vrock's turn, the DM makes a secret Charisma check on your behalf, with a bonus equal to the gem's value divided by 20. The check DC starts at 10 and increases by 2 each round. You can issue orders to the vrock and have it obey you as long as you succeed on the Charisma check." + "\n " + "If the check fails, the spell no longer requires concentration and the vrock is no longer under your control. The vrock takes no actions on its next turn and uses its telepathy to tell any creature it can see that it will fight in exchange for treasure. The creature that gives the vrock the most expensive gem can command it for the next 1d6 rounds. At the end of that time, it offers the bargain again. If no one offers the vrock treasure before its next turn begins, it attacks the nearest creatures for 1d6 rounds before returning to the Abyss." + "\n " + "As part of casting the spell, you can scribe a circle on the ground using the blood of an intelligent humanoid slain within the past 24 hours. The circle is large enough to encompass your space. The summoned vrock cannot cross the circle or target anyone in it while the spell lasts." }; ================================================ FILE: WotC material/ua_20160104_Kits-of-Old.js ================================================ var iFileName = "ua_20160104_Kits-of-Old.js"; RequiredSheetVersion("13.0.8", 15); // This file adds the content from the Unearthed Arcana: Kits of Old article to MPMB's Character Record Sheet // Define the source SourceList["UA:KoO"] = { name : "Unearthed Arcana: Kits of Old", abbreviation : "UA:KoO", group : "Unearthed Arcana", url : "https://media.wizards.com/2015/downloads/dnd/04_UA_Classics_Revisited.pdf", date : "2016/01/04" }; // Adds four subclasses, 2 for the bard, 2 for the fighter AddSubClass("bard", "college of swords-ua", { regExpSearch : /^(?=.*(college|bard|minstrel|troubadour|jongleur))(?=.*\bswords?\b).*$/i, subname : "College of Swords", subnameShort: "Swords", source : [["UA:KoO", 1]], attacks : [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], features : { "subclassfeature3" : { name : "Bonus Proficiencies", source : [["UA:KoO", 1]], minlevel : 3, description: desc("I gain proficiency with medium armor and scimitars"), armorProfs : [false, true, false, false], weaponProfs : [false, false, ["scimitar"]] }, "subclassfeature3.1" : function () { var FSfea = newObj(FightingStyles.two_weapon); FSfea.source = ["UA:KoO", 1]; FSfea.minlevel = 3; return FSfea; }(), "subclassfeature3.2" : { name : "Blade Flourish", source : [["UA:KoO", 1]], minlevel : 3, description : desc([ "When I take the Attack action on my turn, I can do one of the following flourishes:", "I have to use a dagger, longsword, rapier, scimitar, or shortsword while doing this", "\u2022 Defensive Flourish [one Bardic Inspiration die]", " As a bonus action, I add the die to my AC until the start of my next turn", "\u2022 Trick Shooter's Flourish [one Bardic Inspiration die]", " As a bonus action with a dagger ranged attack, I add the die to the attack roll", " If the target is an unattended, inanimate object, the result of the die is doubled", "\u2022 Unnerving Flourish [one Bardic Inspiration die]", " As a bonus action when reducing a foe to 0 HP with a melee attack, I leave it alive", " The target stays at 1 HP and is frightened of me for my Cha modifier in minutes", " It must also make a Cha save at a DC of my spell save + the bardic inspiration die", " If failed, it answers truthfully any questions I ask and obeys me while frightened", ]), action : [["bonus action", " (one inspiration die)"]] }, "subclassfeature14" : { name : "Battle Magic", source : [["UA:KoO", 2]], minlevel : 14, description: desc("When I use my action to cast a Bard spell, I can make one bonus action weapon attack"), action : [["bonus action", " (with Bard spell)"]] } } }); AddSubClass("bard", "college of satire-ua", { // Still valid 2021-09-21 regExpSearch : /^(?=.*(college|bard|minstrel|troubadour|jongleur))(?=.*satire).*$/i, subname : "College of Satire", subnameShort: "Satire", source : [["UA:KoO", 2]], features : { "subclassfeature3" : { name : "Bonus Proficiencies", source : [["UA:KoO", 2]], minlevel : 3, description: desc("I gain proficiency with thieves' tools, sleight of hand, and one other skill of my choice"), skills : ["Sleight of Hand"], skillstxt : "Thieves' Tools, Sleight of Hand, and any one other skill", toolProfs : [["Thieves' tools", "Dex"]] }, "subclassfeature3.1" : { name : "Tumbling Fool", source : [["UA:KoO", 2]], minlevel : 3, description: desc([ "As a bonus action, I tumble which gives the benefits of the Dash and Disengage actions", "I also gain a climbing speed at my current speed and half damage from falling", ]), action : [["bonus action", ""]], speed : { climb : { spd : "walk", enc : "walk" } } }, "subclassfeature6" : { name : "Fool's Insight", source : [["UA:KoO", 2]], minlevel : 6, description: desc("I can cast Detect Thoughts, but on a save the target suffers an embarrassing social gaffe"), usages : "Charisma modifier per ", usagescalc : "event.value = Math.max(1, What('Cha Mod'));", recovery : "long rest", spellcastingBonus : [{ name : "Fool's Insight", spells : ["detect thoughts"], selection : ["detect thoughts"], firstCol : "(S)" }], spellChanges : { "detect thoughts" : { description : "1 a read thoughts of visible Int>3 crea or detect invisible in 30 ft; save for probing, social gaffe on save", changes : "I can cast this spell a number of times equal to my Charisma modifier per long rest and when I do so and the target makes its save, it suffers an embarrassing social gaffe." } } }, "subclassfeature14" : { name : "Fool's Luck", source : [["UA:KoO", 3]], minlevel : 14, additional: "one bardic inspiration die", description: desc([ "When I fail an ability check, saving throw, or attack roll, I can add one inspiration die", "If this turns the roll into a success, I have to note down the number rolled", "I can't use this ability again until the DM subtracts the amount from a check or attack", ]), usages : 1, recovery : "reset" } } }); AddSubClass("fighter", "cavalier-ua", { regExpSearch : /cavalier/i, subname : "Cavalier", source : [["UA:KoO", 3]], fullname : "Cavalier", abilitySave : 1, features : { "subclassfeature3" : { name : "Bonus Proficiencies", source : [["UA:KoO", 3]], minlevel : 3, description: desc([ "I gain proficiency with two skills or one skill and any one tool", "For skills I can choose from Animal Handling, Insight, Performance, or Persuasion", ]), choices : ["1 Skill and 1 Tool proficiencies", "2 Skill proficiencies"], "1 skill and 1 tool proficiencies" : { name : "Bonus Proficiencies", description: desc([ "I gain proficiency with one skill and any one tool of my choice", "For the skill, I can choose Animal Handling, Insight, Performance, or Persuasion", ]), skillstxt : "Choose one from: Animal Handling, Insight, Performance, or Persuasion", toolProfs : [["Any tool", 1]] }, "2 skill proficiencies" : { name : "Bonus Proficiencies", description: desc("I gain two skill proficiencies: Animal Handling, Insight, Performance, or Persuasion"), skillstxt : "Choose two from: Animal Handling, Insight, Performance, or Persuasion" } }, "subclassfeature3.1" : { name : "Born in the Saddle", source : [["UA:KoO", 3]], minlevel : 3, description: desc([ "I have advantage on saves to avoid falling off my mount, and land on my feet if I fail", "Mounting or dismounting a creature costs me only 5 ft of movement instead of half", ]), savetxt : { adv_vs : ["falling off my mount"] } }, "subclassfeature3.2" : { name : "Combat Superiority", source : [["UA:KoO", 3]], minlevel : 3, description: desc([ "I gain a number of superiority dice that I can use to fuel special maneuvers (see below)", "I can use only one maneuver per attack; I regain all superiority dice after a short rest", "\u2022 Use after rolling to influence/control an animal; I add the superiority die to the roll", "\u2022 Use after rolling to hit; I add the superiority die to my attack roll", "\u2022 Use on a mount, before rolling to hit with a lance; I add the die to the damage roll", " Also, the target must make a Str save (DC 8 + Prof + Str mod) or be knocked prone", "\u2022 As a reaction when I'm hit or my mount is hit, I add the superiority die to AC", " If the attack still hits, I or my mount only take half damage from it", ]), additional : ["", "", "d8", "d8", "d8", "d8", "d8", "d8", "d8", "d10", "d10", "d10", "d10", "d10", "d10", "d10", "d10", "d12", "d12", "d12"], usages : [0, 0, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6], recovery : "short rest", action : [["reaction", " (if hit/mount hit)"]] }, "subclassfeature7" : { name : "Ferocious Charger", source : [["UA:KoO", 3]], minlevel : 7, usages : 1, recovery : "long rest", description: desc([ "I can use two superiority dice, instead of just one, to increase the damage of my lance", "If doing so, the target has disadvantage on its Str save to avoid being knocked prone", ]), action : [["action", ""]] }, "subclassfeature10" : { name : "Improved Combat Superiority", source : [["UA:KoO", 3]], minlevel : 10, description: desc("My superiority dice turn into d10s at 10th level and into d12s at 18th level") }, "subclassfeature15" : { name : "Relentless", source : [["UA:KoO", 4]], minlevel : 15, description: desc("I regain one superiority die if I have no more remaining when I roll initiative") } } }); AddSubClass("fighter", "scout-ua", { // Still valid 2021-09-21 regExpSearch : /scout/i, subname : "Scout", source : [["UA:KoO", 4]], features : { "subclassfeature3" : { name : "Bonus Proficiencies", source : [["UA:KoO", 4]], minlevel : 3, description: desc([ "I gain proficiency with three skills or two skills and Thieves' Tools; For skills choose from:", "Acrobatics, Athletics, Investigation, Medicine, Nature, Perception, Stealth, and Survival", ]), choices : ["2 Skill proficiencies and Thieves' Tools proficiency", "3 Skill proficiencies"], "2 skill proficiencies and thieves' tools proficiency" : { name : "Bonus Proficiencies", description : desc([ "I gain proficiency with two skills and Thieves' Tools; For skills choose from:", "Acrobatics, Athletics, Investigation, Medicine, Nature, Perception, Stealth, and Survival" ]), skillstxt : "Choose two from: Acrobatics, Athletics, Investigation, Medicine, Nature, Perception, Stealth, or Survival", toolProfs : [["Thieves' tools", "Dex"]] }, "3 skill proficiencies" : { name : "Bonus Proficiencies", description : desc([ "I gain proficiency with three skills, chosen from:", "Acrobatics, Athletics, Investigation, Medicine, Nature, Perception, Stealth, and Survival" ]), skillstxt : "Choose three from: Acrobatics, Athletics, Investigation, Medicine, Nature, Perception, Stealth, or Survival" } }, "subclassfeature3.1" : { name : "Combat Superiority", source : [["UA:KoO", 4]], minlevel : 3, description: desc([ "I gain a number of superiority dice that I can use to fuel special maneuvers (see below)", "I can use only one maneuver per attack; I regain all superiority dice after a short rest", "\u2022 Use after rolling an Athletics, Nature, Perception, Stealth, or Survival check", " I add half the superiority die to the roll (rounding up)", "\u2022 Use after rolling to hit; I add the superiority die to my attack roll", "\u2022 As a reaction when I'm hit while wearing light/medium armor, I add the die to AC", " If the attack still hits, I only take half damage from it", ]), additional : ["", "", "d8", "d8", "d8", "d8", "d8", "d8", "d8", "d10", "d10", "d10", "d10", "d10", "d10", "d10", "d10", "d12", "d12", "d12"], usages : [0, 0, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6], recovery : "short rest", action : [["reaction", " (if hit)"]] }, "subclassfeature3.2" : function () { var NEfea = newObj(ClassList.ranger.features["natural explorer"]); NEfea.source = ["UA:KoO", 4]; NEfea.minlevel = 3; NEfea.additional = ["", "", "1 favored terrain", "1 favored terrain", "1 favored terrain", "1 favored terrains", "2 favored terrains", "2 favored terrains", "2 favored terrains", "2 favored terrains", "2 favored terrains", "2 favored terrains", "2 favored terrains", "2 favored terrains", "3 favored terrains", "3 favored terrains", "3 favored terrains", "3 favored terrains", "3 favored terrains", "3 favored terrains"]; return NEfea; }(), "subclassfeature10" : { name : "Improved Combat Superiority", source : [["UA:KoO", 4]], minlevel : 10, description: desc("My superiority dice turn into d10s at 10th level and into d12s at 18th level") }, "subclassfeature15" : { name : "Relentless", source : [["UA:KoO", 4]], minlevel : 15, description: desc("I regain one superiority die if I have no more remaining when I roll initiative") } } }); ================================================ FILE: WotC material/ua_20160404_Gothic-Heroes.js ================================================ var iFileName = "ua_20160404_Gothic-Heroes.js"; RequiredSheetVersion("14.0.1-beta"); // This file adds the content from the Unearthed Arcana: Gothic Heroes article to MPMB's Character Record Sheet // Define the source SourceList["UA:GH"] = { name : "Unearthed Arcana: Gothic Heroes", abbreviation : "UA:GH", group : "Unearthed Arcana", url : "https://media.dnd.wizards.com/upload/articles/UA%20Gothic%20Characters.pdf", date : "2016/04/04" }; // Adds 8 new races, the Revenant versions of the Aasimar, Dragonborn, Dwarf, Elf, Gnome, Halfling, Human, and Tiefling // All revenants are still valid 2021-09-21 RaceList["aasimar revenant-ua"] = { // Based on the VGtM Aasimar, made with /u/RebelMage's help regExpSearch : /^(?=.*revenant)((?=.*aasimar)|((?=.*planetouched)(?=.*(celestial|angel)))).*$/i, name : "Aasimar Revenant", sortname : "Revenant, Aasimar", source : [["UA:GH", 1]], plural : "Aasimar", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Celestial"], vision : [["Darkvision", 60]], dmgres : ["Necrotic", "Radiant"], age : " reach adulthood in their late teens and live around 160 years", height : " range from barely 5 to well over 6 feet tall (4'8\" + 2d10\")", weight : " weigh around 165 lb (110 + 2d10 \xD7 2d4 lb)", heightMetric : " range from barely 1,5 to well over 1,8 metres tall (145 + 5d10 cm)", weightMetric : " weigh around 75 kg (50 + 5d10 \xD7 4d4 / 10 kg)", scores : [0, 0, 1, 0, 0, 2], trait : "Aasimar Revenant (+1 Constitution, +2 Charisma)" + (typePF ? "\n" : " ") + "Light Bearer: I know the Light cantrip. Healing Hands: As an action, once per long rest, I can touch to heal for my level in HP.\nRelentless Nature: I have returned to life with one goal: avenge my death or finish an unresolved task. I will rest once I fulfill my goal, but until then I can't truly die. Whenever I'm below half my max HP at the start of my turn, I regain 1 HP. If I die, I return to life within 24 hours. If my body was destroyed, it is reformed within 1 mile of where I died. I always know the distance and direction to creatures involved with my goal.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Light Bearer", spells : ["light"], selection : ["light"], firstCol : 'atwill' }], features : { "healing hands" : { name : "Healing Hands", usages : 1, minlevel : 1, recovery : "long rest", additional : ["1 HP", "2 HP", "3 HP", "4 HP", "5 HP", "6 HP", "7 HP", "8 HP", "9 HP", "10 HP", "11 HP", "12 HP", "13 HP", "14 HP", "15 HP", "16 HP", "17 HP", "18 HP", "19 HP", "20 HP"], action : [["action", ""]] } } }; RaceList["dwarf revenant-ua"] = { regExpSearch : /^(?=.*revenant)(?=.*\b(dwarfs?|dwarves|dwarfish|dwarvish|dwarven)\b).*$/i, name : "Dwarf Revenant", sortname : "Revenant, Dwarf", source : [["UA:GH", 1]], plural : "Dwarves", size : 3, speed : { walk : { spd : 25, enc : 25 } }, languageProfs : ["Common", "Dwarvish"], vision : [["Darkvision", 60]], savetxt : { adv_vs : ["poison"] }, dmgres : ["Poison"], weaponProfs : [false, false, ["battleaxe", "handaxe", "warhammer", "light hammer"]], toolProfs : [["Smith, brewer, or mason tools", 1]], age : " are considered young until they are 50 and live about 350 years", height : " stand between 4 and 5 feet tall (4' + 2d4\")", weight : " weigh around 150 lb (130 + 2d4 \xD7 2d6 lb)", heightMetric : " stand between 1,2 and 1,5 metres tall (120 + 5d4 cm)", weightMetric : " weigh around 75 kg (60 + 5d4 \xD7 4d6 / 10 kg)", scores : [0, 0, 3, 0, 0, 0], trait : "Dwarf Revenant (+3 Constitution)\nStonecunning: I have expertise on Int (History) checks related to the origin of stonework.\nRelentless Nature: I have returned to life with one goal: avenge my death or finish an unresolved task. I will rest once I fulfill my goal, but until then I can't truly die. Whenever I'm below half my max HP at the start of my turn, I regain 1 HP. If I die, I return to life within 24 hours. If my body was destroyed, it is reformed within 1 mile of where I died. I always know the distance and direction to creatures involved with my goal." }; RaceList["elf revenant-ua"] = { regExpSearch : /^(?!.*half)(?=.*revenant)(?=.*\b(elfs?|elves|elvish|elven)\b).*$/i, name : "Elf Revenant", sortname : "Revenant, Elf", source : [["UA:GH", 1]], plural : "Elves", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Elvish"], vision : [["Darkvision", 60]], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["charmed"] }, skills : ["Perception"], age : " typically claim adulthood around age 100 and can live to be 750 years old", height : " range from under 5 to over 6 feet tall (4'6\" + 2d10\")", weight : " weigh around 115 lb (90 + 2d10 \xD7 1d4 lb)", heightMetric : " range from under 1,5 to over 1,8 metres tall (140 + 5d10 cm)", weightMetric : " weigh around 55 kg (40 + 5d10 \xD7 2d4 / 10 kg)", scores : [0, 2, 1, 0, 0, 0], trait : "Elf Revenant (+2 Dexterity, +1 Constitution)\nTrance: I don't sleep, but meditate for 4 hours a day, needing only 4 hours for a long rest.\nRelentless Nature: I have returned to life with one goal: avenge my death or finish an unresolved task. I will rest once I fulfill my goal, but until then I can't truly die. Whenever I'm below half my max HP at the start of my turn, I regain 1 HP. If I die, I return to life within 24 hours. If my body was destroyed, it is reformed within 1 mile of where I died. I always know the distance and direction to creatures involved with my goal." }; RaceList["halfling revenant-ua"] = { regExpSearch : /^(?=.*revenant)(?=.*\b(halflings?|hobbits?)\b).*$/i, name : "Halfling Revenant", sortname : "Revenant, Halfling", source : [["UA:GH", 1]], plural : "Halflings", size : 4, speed : { walk : { spd : 25, enc : 15 } }, languageProfs : ["Common", "Halfling"], savetxt : { adv_vs : ["frightened"] }, age : " reach adulthood at age 20 and live around 150 years", height : " average about 3 feet tall (2'7\" + 2d4\")", weight : " weigh around 40 lb (35 + 2d4 lb)", heightMetric : " average about 90 cm tall (80 + 5d4)", weightMetric : " weigh around 18 kg (16 + 5d4 / 10 kg)", scores : [0, 2, 1, 0, 0, 0], trait : "Halfling Revenant (+2 Dexterity, +1 Constitution)" + (typePF ? "\n" : " ") + "Lucky: I reroll 1's on attack/check/save. Halfling Nimbleness: I can move through the space of anybody of a size larger than me.\nRelentless Nature: I have returned to life with one goal: avenge my death or finish an unresolved task. I will rest once I fulfill my goal, but until then I can't truly die. Whenever I'm below half my max HP at the start of my turn, I regain 1 HP. If I die, I return to life within 24 hours. If my body was destroyed, it is reformed within 1 mile of where I died. I always know the distance and direction to creatures involved with my goal." }; RaceList["gnome revenant-ua"] = { regExpSearch : /^(?=.*revenant)(?=.*\bgnomes?\b).*$/i, name : "Gnome Revenant", sortname : "Revenant, Gnome", source : [["UA:GH", 1]], plural : "Gnomes", size : 4, speed : { walk : { spd : 25, enc : 15 } }, languageProfs : ["Common", "Gnomish"], vision : [["Darkvision", 60]], savetxt : { text : ["Adv. on Int/Wis/Cha saves vs. magic"] }, age : " start adult life around age 40 and can live 350 to almost 500 years", height : " are 3 to 4 feet tall (2'11\" + 2d4\")", weight : " weigh around 40 lb (35 + 2d4 lb)", heightMetric : " are 90 to 120 cm tall (2'11\" + 5d4)", weightMetric : " weigh around 18 kg (16 + 5d4 / 10 kg)", scores : [0, 0, 1, 2, 0, 0], trait : "Gnome Revenant (+1 Constitution, +2 Intelligence)\nRelentless Nature: I have returned to life with one goal: avenge my death or finish a critical, unresolved task. I will find rest once I fulfill my goal, but until then I can't truly die. Whenever I'm below half my max HP at the start of my turn, I regain 1 HP. If I die, I return to life within 24 hours. If my body was destroyed, it is reformed within 1 mile of where I died. Any destroyed equipment is not regained. I always know the distance and direction between me and any creature involved with my goal that is on the same plane." }; RaceList["dragonborn revenant-ua"] = { regExpSearch : /^(?=.*dragonborn)(?=.*revenant).*$/i, name : "Dragonborn Revenant", sortname : "Revenant, Dragonborn", source : [["UA:GH", 1]], plural : "Dragonborn", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Draconic"], weaponOptions : [{ regExpSearch : /^(?=.*breath)(?=.*weapon).*$/i, name : "Breath weapon", source : [["UA:GH", 1]], ability : 3, type : "Natural", damage : [2, 6, "necrotic"], range : '5-ft \xD7 30-ft line', description : "Hits all in area; Con save, success - half damage; Usable only once per short rest", abilitytodamage : false, dc : true, dbBreathWeapon : true, selectNow : true }], age : " reach adulthood by 15 and live around 80 years", height : " stand well over 6 feet tall (5'6\" + 2d8\")", weight : " weigh around 240 lb (175 + 2d8 \xD7 2d6 lb)", heightMetric : " stand well over 1,8 metres tall (170 + 5d8 cm)", weightMetric : " weigh around 110 kg (80 + 5d8 \xD7 4d6 / 10 kg)", scores : [1, 0, 1, 0, 0, 1], trait : "Dragonborn Revenant (+1 Strength, +1 Constitution, +1 Charisma)\nBreath Weapon: As an action, 5 ft by 30 ft line, Dex save halves, necrotic damage.\nRelentless Nature: I have returned to life with one goal: avenge my death or finish an unresolved task. I will rest once I fulfill my goal, but until then I can't truly die. Whenever I'm below half my max HP at the start of my turn, I regain 1 HP. If I die, I return to life within 24 hours. If my body was destroyed, it is reformed within 1 mile of where I died. I always know the distance and direction to creatures involved with my goal.", dmgres : ["Necrotic"], features : { "draconic ancestry" : { name : "Draconic Ancestry", limfeaname : "Breath Weapon", minlevel : 1, usages : 1, additional : levels.map(function (n) { return (n < 6 ? 2 : n < 11 ? 3 : n < 16 ? 4 : 5) + 'd6'; }), recovery : "short rest", action : [["action", ""]], calcChanges : { atkCalc : [ function (fields, v, output) { if (v.theWea.dbBreathWeapon && CurrentRace.known === 'dragonborn revenant' && CurrentRace.level > 5) { output.die = output.die.replace('2d6', (CurrentRace.level < 11 ? 3 : CurrentRace.level < 16 ? 4 : 5) + 'd6'); }; } ] } } } }; RaceList["human revenant-ua"] = { regExpSearch : /^(?=.*human)(?=.*revenant).*$/i, name : "Human Revenant", sortname : "Revenant, Human", source : [["UA:GH", 1]], plural : "Humans", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", 1], age : " reach adulthood in their late teens and live less than 100 years", height : " range from barely 5 to well over 6 feet tall (4'8\" + 2d10\")", weight : " weigh around 165 lb (110 + 2d10 \xD7 2d4 lb)", heightMetric : " range from barely 1,5 to well over 1,8 metres tall (145 + 5d10 cm)", weightMetric : " weigh around 75 kg (50 + 5d10 \xD7 4d4 / 10 kg)", scorestxt : "+1 Constitution and +1 to two different ability scores of my choice", scores : [0, 0, 1, 0, 0, 0], trait : "Human Revenant (+1 Constitution and +1 to two different ability scores of my choice)\nRelentless Nature: I have returned to life with one goal: avenge my death or finish a critical, unresolved task. I will find rest once I fulfill my goal, but until then I can't truly die. Whenever I'm below half my max HP at the start of my turn, I regain 1 HP. If I die, I return to life within 24 hours. If my body was destroyed, it is reformed within 1 mile of where I died. Any destroyed equipment is not regained. I always know the distance and direction between me and any creature involved with my goal that is on the same plane." }; RaceList["tiefling revenant-ua"] = { regExpSearch : /^(?=.*revenant)((?=.*tiefling)|(?=.*planetouched)(?=.*(hell|abyss|fiend|devil))).*$/i, name : "Tiefling Revenant", sortname : "Revenant, Tiefling", source : [["UA:GH", 1]], plural : "Tieflings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Infernal"], vision : [["Darkvision", 60]], age : " reach adulthood in their late teens and live around 100 years", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 0, 1, 0, 0, 2], trait : "Tiefling Revenant (+1 Constitution, +2 Charisma)\nRelentless Nature: I have returned to life with one goal: avenge my death or finish a critical, unresolved task. I will find rest once I fulfill my goal, but until then I can't truly die. Whenever I'm below half my max HP at the start of my turn, I regain 1 HP. If I die, I return to life within 24 hours. If my body was destroyed, it is reformed within 1 mile of where I died. Any destroyed equipment is not regained. I always know the distance and direction between me and any creature involved with my goal that is on the same plane." }; // Adds 2 subclasses, 1 for the Fighter and 1 for the rogue AddSubClass("fighter", "monster hunter-ua", { // Still valid 2021-09-21 regExpSearch : /^(?=.*monster)(?=.*hunter).*$/i, subname : "Monster Hunter", source : [["UA:GH", 2]], fullname : "Monster Hunter", features : { "subclassfeature3" : { name : "Bonus Proficiencies", source : [["UA:GH", 2]], minlevel : 3, description: desc([ "I gain proficiency with two skills or one skill and any one tool", "For skills I can choose Arcana, History, Insight, Investigation, Nature, or Perception", ]), choices : ["1 Skill and 1 Tool proficiencies", "2 Skill proficiencies"], "1 skill and 1 tool proficiencies" : { name : "Bonus Proficiencies", description: desc([ "I gain proficiency with one skill and any one tool of my choice", "For the skill, I can choose Arcana, History, Insight, Investigation, Nature, or Perception", ]), skillstxt : "Choose one from: Arcana, History, Insight, Investigation, Nature, or Perception", toolProfs : [["Any tool", 1]] }, "2 skill proficiencies" : { name : "Bonus Proficiencies", description: desc("I gain 2 skill proficiencies: Arcana, History, Insight, Investigation, Nature, or Perception"), skillstxt : "Choose two from: Arcana, History, Insight, Investigation, Nature, and Perception" } }, "subclassfeature3.1" : { name : "Combat Superiority", source : [["UA:GH", 2]], minlevel : 3, description: desc([ "I gain a number of superiority dice that I can use to fuel special maneuvers (see below)", "I can use only one maneuver per attack; I regain all superiority dice after a short rest", "\u2022 Use after rolling to hit; I add the superiority die to my attack roll", "\u2022 Use after damaging a creature; I add the superiority die to the damage roll", " Also, the attack imposes disadvantage on any concentration save resulting from it", "\u2022 Use after Int/Wis/Cha save, before knowing success/fail; add the die to the save total", "\u2022 Use with Wis (Perception) to detect hidden or Wis (Insight) to see if lying to me", " After rolling but before knowing if success/fail; I add the superiority die to the check", ]), additional : ["", "", "d8", "d8", "d8", "d8", "d8", "d8", "d8", "d10", "d10", "d10", "d10", "d10", "d10", "d10", "d10", "d12", "d12", "d12"], usages : [0, 0, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6], recovery : "short rest" }, "subclassfeature3.2" : { name : "Hunter's Mysticism", source : [["UA:GH", 2]], minlevel : 3, usages : 1, recovery : "long rest", description: desc([ "I can cast Detect Magic as a ritual and Protection from Evil & Good once per long rest", "I gain the ability to speak one of the following languages: Abyssal, Celestial, or Infernal", ]), action : [["action", " (Prot vs. Evil/Good)"]], languageProfs : [["Abyssal, Celestial, or Infernal", 1]], spellcastingBonus : [{ name : "Spirit Seeker", spells : ["detect magic"], selection : ["detect magic"], firstCol : SpellRitualTag, spellcastingAbility : 5 }, { name : "Spirit Seeker", spells : ["protection from evil and good"], selection : ["protection from evil and good"], firstCol : "oncelr" }], spellChanges : { "detect magic" : { time : "10 min", changes : "I can cast this spell only as a ritual, thus its casting time is 10 minutes longer." } } }, "subclassfeature7" : { name : "Monster Slayer", source : [["UA:GH", 2]], minlevel : 7, usages : 1, recovery : "long rest", description: desc([ "Whenever I use a superiority die, I can choose to expend two, adding both to the roll", "If the target is an aberration, fey, fiend, or undead, both dice deal maximum damage", ]), action : [["action", ""]] }, "subclassfeature10" : { name : "Improved Combat Superiority", source : [["UA:GH", 2]], minlevel : 10, description: desc("My superiority dice turn into d10s at 10th level and into d12s at 18th level") }, "subclassfeature15" : { name : "Relentless", source : [["UA:GH", 2]], minlevel : 15, description: desc("I regain one superiority die if I have no more remaining when I roll initiative") } } }); AddSubClass("rogue", "inquisitive-ua", { regExpSearch : /^(?=.*(rogue|miscreant))(?=.*inquisitive).*$/i, subname : "Inquisitive", source : [["UA:GH", 3]], features : { "subclassfeature3" : { name : "Ear for Deceit", source : [["UA:GH", 3]], minlevel : 3, description: desc([ "When using Wis (Insight) to sense if someone is lying, I can choose to use a fixed total", "This total is 8 + Wis modifier + proficiency bonus (if proficient, or twice if expertise)", ]), }, "subclassfeature3.1" : { name : "Eye for Detail", source : [["UA:GH", 3]], minlevel : 3, description: desc([ "I can use the bonus action granted by Cunning Action for the following as well:", "\u2022 To make a Wisdom (Perception) check to spot a hidden creature or object", "\u2022 To make an Intelligence (Investigation) check to uncover and decipher clues", "\u2022 To use Insightful Fighting (see below)", ]), }, "subclassfeature3.2" : { name : "Insightful Fighting", source : [["UA:GH", 3]], minlevel : 3, description: desc([ "As an action or bonus action, I can decipher the tactics of an active opponent I can see", "I have to make a Wisdom (Insight) check vs. the target's Charisma (Deception) check", "If I succeed, I can use sneak attack on the target regardless of advantage/disadvantage", "This benefit lasts for 1 minute or until I successfully use Insightful Fighting again", ]), action : [["action", ""]] }, "subclassfeature9" : { name : "Steady Eye", source : [["UA:GH", 3]], minlevel : 9, usages : 1, recovery : "long rest", description: desc("If not moving during my turn, I gain adv. on Wis (Perception) to find hidden things") }, "subclassfeature13" : { name : "Unerring Eye", source : [["UA:GH", 3]], minlevel : 13, description: desc([ "As an action, I can sense magical deceptions within 30 feet of me, but not what it does", "I learn the presence of illusions, shapechanged creatures, or magic designed to deceive", ]), action : [["action", ""]] }, "subclassfeature17" : { name : "Eye for Weakness", source : [["UA:GH", 3]], minlevel : 17, description: desc("While my Insightful Fighting is active, I add 2d6 to sneak attacks against that target") } } }); ================================================ FILE: WotC material/ua_20160606_Feats.js ================================================ var iFileName = "ua_20160606_Feats.js"; RequiredSheetVersion("13.0.8"); // This file adds the content from the Unearthed Arcana: Feats article to MPMB's Character Record Sheet // Define the source SourceList["UA:F"] = { name : "Unearthed Arcana: Feats", abbreviation : "UA:F", group : "Unearthed Arcana", url : "https://media.wizards.com/2016/downloads/DND/UA-Feats-V1.pdf", date : "2016/06/06" }; // Add 8 feats: 4 'weapon mastery' feats and 4 'tool' feats // This doesn't add the "Warhammer Master" feat, as that is only in the article to illustrate how not to design a feat FeatsList["fell handed-ua"] = { name : "Fell Handed", source : [["UA:F", 2], ["UA", 0]], descriptionFull : "You master the handaxe, battleaxe, greataxe, warhammer, and maul. You gain the following benefits when using any of them:\n \u2022 You gain a +1 bonus to attack rolls you make with the weapon.\n \u2022 Whenever you have advantage on a melee attack roll you make with the weapon and hit, you can knock the target prone if the lower of the two d20 rolls would also hit the target.\n \u2022 Whenever you have disadvantage on a melee attack roll you make with the weapon, the target takes bludgeoning damage equal to your Strength modifier (minimum of 0) if the attack misses but the higher of the two d20 rolls would have hit.\n \u2022 If you use the Help action to aid an ally's melee attack while you're wielding the weapon, you knock the target's shield aside momentarily. In addition to the ally gaining advantage on the attack roll, the ally gains a +2 bonus to the roll if the target is using a shield.", description : "With a handaxe, battleaxe, greataxe, warhammer, or maul, I get +1 to hit, knock prone if I have adv. and hit with both rolls, with disadv. still do Str mod in bludg. damage if I miss but the other die would've hit, can use Help to give ally +2 to hit vs. enemy with a shield.", calcChanges : { atkAdd : [ function (fields, v) { if ((/handaxe|battleaxe|greataxe|warhammer|maul/).test(v.baseWeaponName)) { fields.Description += (fields.Description ? '; ' : '') + 'Adv: knock prone if both dice hit; Disadv: Str Mod bludg. damage on miss but 2nd die would hit'; }; }, "With a handaxe, battleaxe, greataxe, warhammer, or maul, I get the following benefits:\n \u2022 +1 to hit;\n \u2022 When attacking with advantage, the target is knocked prone if both die would hit;\n \u2022 When attacking with disadvantage and missing, still do my Strength modifier in bludgeoning damage." ], atkCalc : [ function (fields, v, output) { if ((/handaxe|battleaxe|greataxe|warhammer|maul/).test(v.baseWeaponName)) output.extraHit += 1; }, ""] } }; FeatsList["blade mastery-ua"] = { name : "Blade Mastery", source : [["UA:F", 2], ["UA", 0]], descriptionFull : "You master the shortsword, longsword, scimitar, rapier, and greatsword. You gain the following benefits when using any of them:\n \u2022 You gain a +1 bonus to attack rolls you make with the weapon.\n \u2022 On your turn, you can use your reaction to assume a parrying stance, provided you have the weapon in hand. Doing so grants you a +1 bonus to your AC until the start of your next turn or until you're not holding the weapon.\n \u2022 When you make an opportunity attack with the weapon, you have advantage on the attack roll.", description : "With a shortsword, longsword, greatsword, scimitar, or rapier, I get +1 to hit, advantage on opportunity attacks, and with the weapon in hand I can use my reaction to assume a parrying stance that gives me +1 AC until the start of my next turn.", calcChanges : { atkAdd : [ function (fields, v) { if ((/shortsword|longsword|greatsword|scimitar|rapier/).test(v.baseWeaponName)) { fields.Description += (fields.Description ? '; ' : '') + 'Advantage on opportunity attacks'; }; }, "With a shortsword, longsword, greatsword, scimitar, or rapier, I get the following benefits:\n \u2022 +1 to hit;\n \u2022 Advantage on opportunity attacks." ], atkCalc : [ function (fields, v, output) { if ((/shortsword|longsword|greatsword|scimitar|rapier/).test(v.baseWeaponName)) output.extraHit += 1; }, ""] }, action : [["reaction", " Parrying Stance"]] }; FeatsList["flail mastery-ua"] = { name : "Flail Mastery", source : [["UA:F", 3], ["UA", 0]], descriptionFull : "The flail is a tricky weapon to use, but you have spent countless hours mastering it. You gain the following benefits:\n \u2022 You gain a +1 bonus to attack rolls you make with a flail.\n \u2022 As a bonus action on your turn, you can prepare yourself to extend your flail to sweep over targets' shields. Until the end of this turn, your attack rolls with a flail gain a +2 bonus against any target using a shield.\n \u2022 When you hit with an opportunity attack using a flail, the target must succeed on a Strength saving throw (DC 8 + your proficiency bonus + your Strength modifier) or be knocked prone.", calculate : "event.value = 'With a flail, I get +1 to hit, and enemies hit by an opportunity attack with it have to make a Str save DC ' + (8 + Number(How('Proficiency Bonus')) + What('Str Mod')) + ' (8 + Prof Bonus + Str mod) or be knocked prone. As a bonus action, I can get +2 to hit with my flail vs. targets with shields until the end of my turn.';", calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == 'flail') { fields.Description += (fields.Description ? '; ' : '') + 'On opportunity attack hit, Strength save (DC 8 + Prof Bonus + Str mod) or knocked prone'; }; }, "With a flail, I get the following benefits:\n \u2022 +1 to hit;\n \u2022 Targets hit with it must make a Strength saving throw (DC 8 + proficiency bonus + Strength modifier) or be knocked prone." ], atkCalc : [ function (fields, v, output) { if (v.baseWeaponName == 'flail') output.extraHit += 1; }, ""] }, action : [["bonus action", ""]] }; FeatsList["spear mastery-ua"] = { name : "Spear Mastery", source : [["UA:F", 3], ["UA", 0]], descriptionFull : "Though the spear is a simple weapon to learn, it rewards you for the time you have taken to master it. You gain the following benefits:\n \u2022 You gain a +1 bonus to attack rolls you make with a spear.\n \u2022 When you use a spear, its damage die changes from a d6 to a d8, and from a d8 to a d10 when wielded with two hands. (This benefit has no effect if another feature has already improved the weapon's die.)\n \u2022 You can set your spear to receive a charge. As a bonus action, choose a creature you can see that is at least 20 feet away from you. If that creature moves within your spear's reach on its next turn, you can make a melee attack against it with your spear as a reaction. If the attack hits, the target takes an extra 1d8 piercing damage, or an extra 1d10 piercing damage if you wield the spear with two hands. You can't use this ability if the creature used the Disengage action before moving.\n \u2022 As a bonus action on your turn, you can increase your reach with a spear by 5 feet for the rest of your turn.", description : "With a spear, I get +1 to hit and it does d8 damage (versatile d10). As a bonus action, I select a target at least 20 ft away. If it moves in reach on its next turn, I can attack it as a reaction, extra damage die. As a bonus action, I can increase the spear's reach by 5 ft.", calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == 'spear') { fields.Damage_Die = fields.Damage_Die === '1d6' ? '1d8' : fields.Damage_Die; fields.Description = fields.Description.replace('versatile (1d8)', 'versatile (1d10)'); }; }, "With a spear, I get the following benefits:\n \u2022 +1 to hit;\n \u2022 The spear damage die increases to d8 (versatile d10).", 1 ], atkCalc : [ function (fields, v, output) { if (v.baseWeaponName == 'spear') output.extraHit += 1; }, ""] }, action : [["bonus action", " (set vs. charge)"], ['bonus action', ' (increase reach)']] }; FeatsList["alchemist-ua"] = { name : "Alchemist", source : [["UA:F", 4], ["UA", 0]], descriptionFull : "You have studied the secrets of alchemy and are an expert in its practice, gaining the following benefits:\n \u2022 Increase your Intelligence score by 1, to a maximum of 20.\n \u2022 You gain proficiency with alchemist's supplies. If you are already proficient with them, you add double your proficiency bonus to checks you make with them.\n \u2022 As an action, you can identify one potion within 5 feet of you, as if you had tasted it. You must see the liquid for this benefit to work.\n \u2022 Over the course of any short rest, you can temporarily improve the potency of one potion of healing of any rarity. To use this benefit, you must have alchemist's supplies with you, and the potion must be within reach. If the potion is drunk no more than 1 hour after the short rest ends, the creature drinking the potion can forgo the potion's die roll and regains the maximum number of hit points that the potion can restore.", description : "I gain proficiency with alchemist's supplies, or expertise if already proficient. As an action, I can identify a potion within 5 ft. During a rest with alchemist's supplies, I can enhance a potion of healing, to heal its max. Consuming it within 1 hour maximizes its effects [+1 Int]", scores : [0, 0, 0, 1, 0, 0], action : [["action", " (identify potion)"]], toolProfs : [["Alchemist's supplies", "Int"]], eval : function () { if ((/(alchemist|alchemy).*(supplies|kit)/i).test(What('Too Text'))) { Checkbox('Too Exp', true); }; }, removeeval : function () { if ((/(alchemist|alchemy).*(supplies|kit)/i).test(What('Too Text'))) { Checkbox('Too Exp', false); }; } }; FeatsList["burglar-ua"] = { name : "Burglar", source : [["UA:F", 4], ["UA", 0]], descriptionFull : "You pride yourself on your quickness and your close study of certain clandestine activities. You gain the following benefits:\n \u2022 Increase your Dexterity score by 1, to a maximum of 20.\n \u2022 You gain proficiency with thieves' tools. If you are already proficient with them, you add double your proficiency bonus to checks you make with them.", description : "I gain proficiency with thieves' tools, or expertise with them if I'm already proficient. [+1 Dexterity]", scores : [0, 1, 0, 0, 0, 0], toolProfs : [["Thieves' tools", "Dex"]], eval : function () { if ((/thieve.?s.*tools/i).test(What('Too Text'))) { Checkbox('Too Exp', true); }; }, removeeval : function () { if ((/thieve.?s.*tools/i).test(What('Too Text'))) { Checkbox('Too Exp', false); }; } }; FeatsList["gourmand-ua"] = { name : "Gourmand", source : [["UA:F", 4]], descriptionFull : "You have mastered a variety of special recipes, allowing you to prepare exotic dishes with useful effects. You gain the following benefits:\n \u2022 Increase your Constitution score by 1, to a maximum of 20.\n \u2022 You gain proficiency with cook's utensils. If you are already proficient with them, you add double your proficiency bonus to checks you make with them.\n \u2022 As an action, you can inspect a drink or plate of food within 5 feet of you and determine whether it is poisoned, provided that you can see and smell it.\n \u2022 During a long rest, you can prepare and serve a meal that helps you and your allies recover from the rigors of adventuring, provided you have suitable food, cook's utensils, and other supplies on hand. The meal serves up to six people, and each person who eats it regains two additional Hit Dice at the end of the long rest. In addition, those who partake of the meal have advantage on Constitution saving throws against disease for the next 24 hours.", description : "I gain proficiency with cook's utensils, or expertise if already proficient. As an action, I can detect poison in food within 5 ft. In a long rest with food/supplies, I can have 6 creatures regain 2 extra HD and give them adv. on Con saves vs. disease for 24 hours. [+1 Con]", scores : [0, 0, 1, 0, 0, 0], action : [["action", " (inspect food)"]], toolProfs : [["Cook's utensils", "Int"]], eval : function () { if ((/cook.*utensils/i).test(What('Too Text'))) { Checkbox('Too Exp', true); }; }, removeeval : function () { if ((/cook.*utensils/i).test(What('Too Text'))) { Checkbox('Too Exp', false); }; } }; FeatsList["master of disguise-ua"] = { name : "Master of Disguise", source : [["UA:F", 4], ["UA", 0]], descriptionFull : "You have honed your ability to shape your personality and to read the personalities of others. You gain the following benefits:\n \u2022 Increase your Charisma score by 1, to a maximum of 20.\n \u2022 You gain proficiency with the disguise kit. If you are already proficient with it, you add double your proficiency bonus to checks you make with it.\n \u2022 If you spend 1 hour observing a creature, you can then spend 8 hours crafting a disguise you can quickly don to mimic that creature. Making the disguise requires a disguise kit. You must make checks as normal to disguise yourself, but you can assume the disguise as an action.", description : "I gain proficiency with the disguise kit, or expertise with it if I'm already proficient. After observing a creature for 1 hour, I can craft a disguise to mimic it in 8 hours with a disguise kit. Once finished, I can don this disguise as an action. [+1 Charisma]", scores : [0, 0, 0, 0, 0, 1], action : [["action", " (don disguise)"]], toolProfs : [["Disguise kit", "Cha"]], eval : function () { if ((/disguise.*kit/i).test(What('Too Text'))) { Checkbox('Too Exp', true); }; }, removeeval : function () { if ((/disguise.*kit/i).test(What('Too Text'))) { Checkbox('Too Exp', false); }; } }; ================================================ FILE: WotC material/ua_20160801_The-Faithful.js ================================================ var iFileName = "ua_20160801_The-Faithful.js"; RequiredSheetVersion("14.0.1-beta", 15); // This file adds the content from the Unearthed Arcana: The Faithful article to MPMB's Character Record Sheet // Define the source SourceList["UA:TF"] = { name : "Unearthed Arcana: The Faithful", abbreviation : "UA:TF", group : "Unearthed Arcana", url : "https://media.wizards.com/2016/dnd/downloads/UA%20Non-Divine%20Faithful%20SFG.pdf", date : "2016/08/01" }; // Adds 2 subclasses, 1 for the Warlock and 1 for the Wizard AddSubClass("warlock", "the seeker-ua", { // Still valid 2021-09-21 regExpSearch : /^(?=.*warlock)(?=.*seeker).*$/i, subname : "the Seeker", source : [["UA:TF", 1]], spellcastingExtra : ["feather fall", "jump", "levitate", "locate object", "clairvoyance", "sending", "arcane eye", "locate creature", "legend lore", "passwall"], features : { "subclassfeature1" : { name : "Shielding Aurora", source : [["UA:TF", 1]], minlevel : 1, description: desc([ "As a bonus action, I create a whirling aurora of brilliant energy around me", "It lasts until the end of my next turn and grants me resistance to all damage", "Any hostile ending its turn in 10 ft of me get Warlock level + Cha mod radiant damage", ]), usages : 1, recovery : "short rest", action : [["bonus action", ""]] }, "subclassfeature6" : { name : "Astral Refuge", source : [["UA:TF", 2]], minlevel : 6, description: desc([ "As an action, I can step into an astral refuge, coming back at the end of the turn", "While in the astral refuge, I can take two actions to cast spells targeting just me", ]), action : [["action", ""]] }, "subclassfeature10" : { name : "Far Wanderer", source : [["UA:TF", 2]], minlevel : 10, description: desc("I no longer need to breathe, and I gain resistance to fire damage and cold damage"), dmgres : ["Cold", "Fire"] }, "subclassfeature14" : { name : "Astral Sequestration", source : [["UA:TF", 2]], minlevel : 14, description: desc([ "With a 5 minutes ritual, I can shift myself and ten willing creatures to the Astral Plane", "While sequestered an Astral Plane, we gain the full benefits of a short rest", "After this rest, we return to the same space as before, without any time having passed", ]), usages : 1, recovery : "long rest" } } }); // Add a Pact Boon option that is only available for "the Seeker" subclass AddFeatureChoice(ClassList.warlock.features["pact boon"], false, "Pact of the Star Chain", { name : "Pact of the Star Chain", source : [["UA:TF", 1]], description : desc([ "My patron grants me an item of power which disappears when I die", "While it is on my person, I can cast Augury as a ritual", "Additionally, once per short rest, I can get advantage on an Intelligence check", "If I lose this item I can perform a 1-hour ceremony to get a replacement" ]), usages : 1, recovery : "short rest", spellcastingBonus : [{ name : "Pact of the Star Chain", spells : ["augury"], selection : ["augury"], firstCol : SpellRitualTag, }], spellChanges : { "augury" : { time : "11 min", changes : "With my Pact of the Star Chain boon I can cast Augury only as a ritual, thus requiring 10 extra minutes to cast it." } }, prereqeval : function(v) { return classes.known.warlock && classes.known.warlock.subclass.indexOf("the seeker") !== -1 ? true : "skip"; } }); RunFunctionAtEnd(function() { var theTheurgySubclass = AddSubClass("wizard", "theurgy-ua", { // Still valid 2021-09-21 regExpSearch : /^((?=.*mystic)(?=.*theurge))|(?=.*(theurgy|theurgist)).*$/i, subname : "Theurgy", source : [["UA:TF", 1], ["UA:WR", 1]], fullname : "Theurgist", features : { "subclassfeature2" : { name : "Arcane Initiate", source : [["UA:TF", 2], ["UA:WR", 1]], minlevel : 2, description: desc([ 'Choose a Cleric Domain using the "Choose Feature" button above', "When I gain a wizard level I can replace one of the spells I would add to my spellbook", "I can replace it with one of the chosen domain spells, if it is of a level I can cast", "If my spellbook has all the domain spells, I can select any cleric spell of a level I can cast", "Other wizards cannot copy cleric spells from my spellbook into their own spellbooks", ]), calcChanges : { spellList : [ function(spList, spName, spType) { if (spName !== "wizard" || spType.indexOf("bonus") !== -1 || !CurrentSpells.wizard.extra || !CurrentSpells.wizard.selectSp || !spList.level || !spList.level[1]) return; var domainSpells = CurrentSpells.wizard.extra; // now stop this function if even one of the domain spells is not already in the spellbook var knownSpells = [].concat(CurrentSpells.wizard.selectSp ? CurrentSpells.wizard.selectSp : []).concat(CurrentSpells.wizard.selectSpSB ? CurrentSpells.wizard.selectSpSB : []); for (var i = 0; i < domainSpells.length; i++) { if (knownSpells.indexOf(domainSpells[i]) == -1) return; } // get all the cleric spells, level 1-9 var clericSpells = CreateSpellList({"class" : "cleric", level : [1,9]}); spList.extraspells = spList.extraspells.concat(clericSpells); }, "When I gain a wizard level after my spellbook already has all the spells of my chosen domain, I can instead select any cleric spell of a level I can cast as one of the spells I gain from levelling up." ] }, choices : [], choiceDependencies : [{ feature : "subclassfeature2.3" }, { feature : "subclassfeature6" }, { feature : "subclassfeature10" }, { feature : "subclassfeature14" }] }, "subclassfeature2.1" : { name : "Channel Arcana", source : [["UA:TF", 2], ["UA:WR", 1]], minlevel : 2, description: desc("I can channel arcane energy from my deity; the save for this is my wizard spell DC"), usages : [0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3], recovery : "short rest" }, "subclassfeature2.2" : { name : "Channel Arcana: Divine Arcana", source : [["UA:TF", 2], ["UA:WR", 1]], minlevel : 2, description: desc([ "As a bonus action, I speak a prayer to control the flow of magic around me", "The next spell I cast gains a +2 bonus to its attack roll or saving throw DC", ]), action : [["bonus action", ""]] }, "subclassfeature2.3" : { name : "Channel Arcana: Domain", source : [["UA:TF", 2], ["UA:WR", 1]], minlevel : 2, description: desc('Use the "Choose Feature" button above to select the domain'), choices : [], choicesNotInMenu : true }, "subclassfeature6" : { name : "Arcane Acolyte", source : [["UA:TF", 3], ["UA:WR", 1]], minlevel : 6, description: desc('Use the "Choose Feature" button above to select the domain'), choices : [], choicesNotInMenu : true }, "subclassfeature10" : { name : "Arcane Priest", source : [["UA:TF", 3], ["UA:WR", 2]], minlevel : 10, description: desc('Use the "Choose Feature" button above to select the domain'), choices : [], choicesNotInMenu : true }, "subclassfeature14" : { name : "Arcane High Priest", source : [["UA:TF", 3], ["UA:WR", 2]], minlevel : 14, description: desc('Use the "Choose Feature" button above to select the domain'), choices : [], choicesNotInMenu : true } } }); var MTfeat = ClassSubList[theTheurgySubclass].features; for (var i = 0; i < ClassList.cleric.subclasses[1].length; i++) { var aDomain = ClassSubList[ClassList.cleric.subclasses[1][i]]; if (!aDomain) continue; var dSource = aDomain.source ? aDomain.source : aDomain.features["subclassfeature1"] && aDomain.features["subclassfeature1"].source ? aDomain.features["subclassfeature1"].source : [["UA:TF", 0], ["UA:WR", 0]]; var suffix = 1; var entryDoNm = aDomain.subname; while (MTfeat["subclassfeature2"].choices.indexOf(entryDoNm) !== -1) { suffix += 1; entryDoNm = aDomain.subname + " (" + suffix + ")"; }; MTfeat["subclassfeature2"].choices.push(entryDoNm); MTfeat["subclassfeature2"][entryDoNm.toLowerCase()] = { name : "Arcane Initiate: " + aDomain.subname, source : dSource, spellcastingExtra : aDomain.spellcastingExtra, description: desc([ "When I gain a wizard level I can replace one of the spells I would add to my spellbook", "I can replace it with one of the " + aDomain.subname.toLowerCase() + " spells, if it is of a level I can cast", "If my spellbook has all the domain spells, I can select any cleric spell of a level I can cast", "Other wizards cannot copy cleric spells from my spellbook into their own spellbooks", ]), }; var AIdomain = MTfeat["subclassfeature2"][entryDoNm.toLowerCase()]; for (var aFea in aDomain.features) { var dFea = aDomain.features[aFea]; if (dFea.minlevel === 2 && (/channel divinity/i).test(dFea.name)) { MTfeat["subclassfeature2.3"].choices.push(entryDoNm); MTfeat["subclassfeature2.3"][entryDoNm.toLowerCase()] = newObj(dFea); MTfeat["subclassfeature2.3"][entryDoNm.toLowerCase()].name = MTfeat["subclassfeature2.3"][entryDoNm.toLowerCase()].name.replace(/channel divinity/i, "Channel Arcana"); }; if (dFea.minlevel === 1 && !dFea.armor && !dFea.weapons && !dFea.armorProfs && !dFea.weaponProfs) { if (MTfeat["subclassfeature6"].choices.indexOf(entryDoNm) === -1) { //if the entry does not exist yet MTfeat["subclassfeature6"].choices.push(entryDoNm); MTfeat["subclassfeature6"][entryDoNm.toLowerCase()] = newObj(dFea); } else { //add to the existing entry var theFea = MTfeat["subclassfeature6"][entryDoNm.toLowerCase()]; theFea.name += " \u0026 " + dFea.name; theFea.description += dFea.description; for (var subFea in dFea) { if (theFea[subFea] === undefined) theFea[subFea] = dFea[subFea]; }; }; }; if (dFea.minlevel === 6 && !dFea.armor && !dFea.weapons && !dFea.armorProfs && !dFea.weaponProfs) { if (MTfeat["subclassfeature10"].choices.indexOf(entryDoNm) === -1) { //if the entry does not exist yet MTfeat["subclassfeature10"].choices.push(entryDoNm); MTfeat["subclassfeature10"][entryDoNm.toLowerCase()] = newObj(dFea); } else { //add to the existing entry var theFea = MTfeat["subclassfeature10"][entryDoNm.toLowerCase()]; theFea.name += " \u0026 " + dFea.name; theFea.description += dFea.description; for (var subFea in dFea) { if (theFea[subFea] === undefined) theFea[subFea] = dFea[subFea]; }; }; }; if (dFea.minlevel === 17 && !dFea.armor && !dFea.weapons && !dFea.armorProfs && !dFea.weaponProfs) { if (MTfeat["subclassfeature14"].choices.indexOf(entryDoNm) === -1) { //if the entry does not exist yet MTfeat["subclassfeature14"].choices.push(entryDoNm); MTfeat["subclassfeature14"][entryDoNm.toLowerCase()] = newObj(dFea); } else { //add to the existing entry var theFea = MTfeat["subclassfeature14"][entryDoNm.toLowerCase()]; theFea.name += " \u0026 " + dFea.name; theFea.description += dFea.description; for (var subFea in dFea) { if (theFea[subFea] === undefined) theFea[subFea] = dFea[subFea]; }; }; }; }; }; }); ================================================ FILE: WotC material/ua_20160912_The-Ranger,-Revised.js ================================================ var iFileName = "ua_20160912_The-Ranger,-Revised.js"; RequiredSheetVersion("13.1.0"); // This file adds the content from the Unearthed Arcana: The Ranger, Revised article to MPMB's Character Record Sheet // Define the source SourceList["UA:RR"] = { name : "Unearthed Arcana: The Ranger, Revised", abbreviation : "UA:RR", group : "Unearthed Arcana", url : "https://media.wizards.com/2016/dnd/downloads/UA_RevisedRanger.pdf", date : "2016/09/12" }; //adds an alternative ranger class, including three subclasses ClassList.rangerua = { regExpSearch : /^((?=.*(ranger|strider))|((?=.*(nature|natural))(?=.*(knight|fighter|warrior|warlord|trooper)))).*$/i, name : "Ranger", source : [["UA:RR", 2]], primaryAbility : "Dexterity and Wisdom", abilitySave : 5, prereqs : "Dexterity 13 and Wisdom 13", improvements : [0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5, 5], die : 10, saves : ["Str", "Dex"], skillstxt : { primary : "Choose three from Animal Handling, Athletics, Insight, Investigation, Nature, Perception, Stealth, and Survival", secondary : "Choose one from Animal Handling, Athletics, Insight, Investigation, Nature, Perception, Stealth, or Survival" }, armorProfs : { primary : [true, true, false, true], secondary : [true, true, false, true] }, weaponProfs : { primary : [true, true], secondary : [true, true] }, equipment : "Ranger starting equipment:\n \u2022 Scale mail -or- leather armor;\n \u2022 Two shortswords -or- two simple melee weapons;\n \u2022 A dungeoneer's pack -or- an explorer's pack;\n \u2022 A longbow and a quiver of 20 arrows.\n\nAlternatively, choose 5d4 \xD7 10 gp worth of starting equipment instead of both the class' and the background's starting equipment.", subclasses : ["Ranger Conclaves", []], subclassGainedLevel : 3, attacks : [1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], spellcastingFactor : 2, spellcastingList : { "class" : "ranger" }, spellcastingKnown : { spells : [0, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11] }, features : { "favored enemy" : { name : "Favored Enemy", source : [["UA:RR", 2]], minlevel : 1, description: desc([ 'Use the "Choose Feature" button above to select a favored enemy', "Choose from beasts, fey, humanoids, monstrosities, or undead", "I get a bonus to damage rolls with weapon attacks against the chosen favored enemy", "I have adv. on Wis (Survival) to track and Int checks to recall info about them", "I also learn one language of my choice, typically one associated with the favored enemy", ]), additional : levels.map(function (n) { return (n < 6 ? "+2" : "+4") + " weapon attack damage"; }), choices : ["Beasts", "Fey", "Humanoids", "Monstrosities", "Undead"], "beasts" : { name : "Favored Enemy: Beasts", description: desc([ "I get a bonus to damage rolls with weapon attacks against beasts", "I have adv. on Wis (Survival) to track and Int checks to recall info about beasts", "I learn a language, typically one spoken by or associated with beasts", ]), }, "fey" : { name : "Favored Enemy: Fey", description: desc([ "I get a bonus to damage rolls with weapon attacks against fey", "I have adv. on Wis (Survival) to track and Int checks to recall info about fey", "I learn a language, typically one spoken by or associated with fey", ]), }, "humanoids" : { name : "Favored Enemy: Humanoids", description: desc([ "I get a bonus to damage rolls with weapon attacks against humanoids", "I have adv. on Wis (Survival) to track and Int checks to recall info about humanoids", "I learn a language, typically one spoken by or associated with humanoids", ]), }, "monstrosities" : { name : "Favored Enemy: Monstrosities", description: desc([ "I get a bonus to damage rolls with weapon attacks against monstrosities", "I have adv. on Wis (Survival) to track and Int checks to recall info about monstrosities", "I learn a language, typically one spoken by or associated with monstrosities", ]), }, "undead" : { name : "Favored Enemy: Undead", description: desc([ "I get a bonus to damage rolls with weapon attacks against undead", "I have adv. on Wis (Survival) to track and Int checks to recall info about undead", "I learn a language, typically one spoken by or associated with undead", ]), }, languageProfs : [1], calcChanges : { atkCalc : [ function (fields, v, output) { if (!v.isSpell && classes.known.rangerua && classes.known.rangerua.level && (/favou?red.{1,2}enemy/i).test(v.WeaponTextName)) { output.extraDmg += classes.known.rangerua.level < 6 ? 2 : 4; }; }, "If I include the words 'Favored Enemy' in the name or description of a weapon, it gets bonus damage, depending on my Ranger level." ] } }, "natural explorer" : { name : "Natural Explorer", source : [["UA:RR", 3]], minlevel : 1, description: desc([ "On my first turn in combat, I have adv. on attacks against those that did not yet act", "I ignore difficult terrain; I have adv. on Initiative; I have benefits in travel, see page 3", ]), "travel benefits" : { name : "Travel Benefits", extraname : "Natural Explorer", source : [["UA:RR", 3]], description : desc([ "After one hour of traveling in the wilderness I gain the following benefits:", " \u2022 My allies and I are not slowed by difficult terrain and can't get lost except by magic", " \u2022 I am alert to danger even when doing something else; I forage twice as much food", " \u2022 If alone (or alone with animal companion), I can move stealthily at my normal pace", " \u2022 When tracking others, I also learn their exact number, size, and time since passing" ]) }, autoSelectExtrachoices : [{ extrachoice : "travel benefits" }], advantages : [["Initiative", true]] }, "fighting style" : function () { var FSfea = newObj(ClassList.ranger.features["fighting style"]); FSfea.source = ["UA:RR", 3]; return FSfea; }(), "spellcasting" : { name : "Spellcasting", source : [["UA:RR", 3]], minlevel : 2, description: desc("I can cast ranger spells that I know, using Wisdom as my spellcasting ability"), additional : ["", "2 spells known", "3 spells known", "3 spells known", "4 spells known", "4 spells known", "5 spells known", "5 spells known", "6 spells known", "6 spells known", "7 spells known", "7 spells known", "8 spells known", "8 spells known", "9 spells known", "9 spells known", "10 spells known", "10 spells known", "11 spells known", "11 spells known"] }, "primeval awareness" : { name : "Primeval Awareness", source : [["UA:RR", 4]], minlevel : 3, description: desc([ "If I haven't attacked a beast within the last 10 min, I can communicate with it", "As an action, I convey simple ideas, and read mood, intent, emotions, needs, etc.", "By concentrating for 1 min, I know if any of my favored enemies are within 5 miles", "Per group, I sense the number, general direction, distance, and type of favored enemy", ]), action : [["action", " (communicate)"]] }, "subclassfeature3" : { name : "Ranger Conclave", source : [["UA:RR", 4]], minlevel : 3, description: desc([ 'Choose a Ranger Conclave you strive to emulate and put it in the "Class" field', "Choose either Beast Conclave, Deep Stalker Conclave or Hunter Conclave", ]), }, "greater favored enemy" : { name : "Greater Favored Enemy", source : [["UA:RR", 4]], minlevel : 6, description: desc([ 'Use the "Choose Feature" button above to select a greater favored enemy', "Choose from aberrations, celestials, constructs, dragons, elementals, fiends, or giants", "I get all the bonuses from Favored Enemy for this creature type as well", "Additionally, I have adv. on saves vs. spells and abilities of this greater favored enemy", ]), additional : "+4 weapon attack damage", choices : ["Aberrations", "Celestials", "Constructs", "Dragons", "Elementals", "Fiends", "Giants"], "aberrations" : { name : "Greater Favored Enemy: Aberrations", description: desc([ "The bonuses I get from Favored Enemy now also work against aberrations", "Additionally, I have advantage on saves against spells and abilities used by aberrations", ]), savetxt : { adv_vs : ["spells/abilities of aberrations"] } }, "celestials" : { name : "Greater Favored Enemy: Celestials", description: desc([ "The bonuses I get from Favored Enemy now also work against celestials", "Additionally, I have advantage on saves against spells and abilities used by celestials", ]), savetxt : { adv_vs : ["spells/abilities of celestials"] } }, "constructs" : { name : "Greater Favored Enemy: Constructs", description: desc([ "The bonuses I get from Favored Enemy now also work against constructs", "Additionally, I have advantage on saves against spells and abilities used by constructs", ]), savetxt : { adv_vs : ["spells/abilities of constructs"] } }, "dragons" : { name : "Greater Favored Enemy: Dragons", description: desc([ "The bonuses I get from Favored Enemy now also work against dragons", "Additionally, I have advantage on saves against spells and abilities used by dragons", ]), savetxt : { adv_vs : ["spells/abilities of dragons"] } }, "elementals" : { name : "Greater Favored Enemy: Elementals", description: desc([ "The bonuses I get from Favored Enemy now also work against elementals", "Additionally, I have advantage on saves against spells and abilities used by elementals", ]), savetxt : { adv_vs : ["spells/abilities of elementals"] } }, "fiends" : { name : "Greater Favored Enemy: Fiends", description: desc([ "The bonuses I get from Favored Enemy now also work against fiends", "Additionally, I have advantage on saves against spells and abilities used by fiends", ]), savetxt : { adv_vs : ["spells/abilities of fiends"] } }, "giants" : { name : "Greater Favored Enemy: Giants", description: desc([ "The bonuses I get from Favored Enemy now also work against giants", "Additionally, I have advantage on saves against spells and abilities used by giants", ]), savetxt : { adv_vs : ["spells/abilities of giants"] } }, languageProfs : [1] }, "fleet of foot" : { name : "Fleet of Foot", source : [["UA:RR", 4]], minlevel : 8, description: desc("I can take the Dash action as a bonus action"), action : [["bonus action", ""]] }, "hide in plain sight" : { name : "Hide in Plain Sight", source : [["UA:RR", 4]], minlevel : 10, description: desc([ "When I hide on my turn without moving, others take -10 Wis (Perception) to find me", "This lasts until something reveals my presence, or until I (voluntarily) move/fall prone", ]), }, "vanish" : { name : "Vanish", source : [["UA:RR", 5]], minlevel : 14, description: desc("I can't be nonmagically tracked if I don't want to be and can Hide as a bonus action"), action : [["bonus action", ""]] }, "feral senses" : { name : "Feral Senses", source : [["UA:RR", 5]], minlevel : 18, description: desc([ "When not blinded or deafened, I'm aware of invisible, non-hidden creatures in 30 ft", "I don't have disadvantage when attacking creatures I am aware of but can't see", ]), }, "foe slayer" : { name : "Foe Slayer", source : [["UA:RR", 5]], minlevel : 20, description: desc("Once per turn, I can add Wis mod to the attack or damage roll after I see the die roll") } } }; AddSubClass("rangerua", "beast master-ua", { regExpSearch : /^(?=.*(animal|beast))((?=.*(master|ranger|strider))|((?=.*(nature|natural))(?=.*(knight|fighter|warrior|warlord|trooper)))).*$/i, subname : "Beast Conclave", source : [["UA:RR", 5]], attacks : [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], features : { "subclassfeature3" : { name : "Animal Companion", source : [["UA:RR", 5]], minlevel : 3, description: desc("I call an animal by spending 8 hours and 50 gp; I can revive it with 8 hours and 25 gp"), additional : ["", "", "", "+1 HD for companion", "+2 HD for companion", "+3 HD for companion", "+4 HD for companion", "+5 HD for companion", "+6 HD for companion", "+7 HD for companion", "+8 HD for companion", "+9 HD for companion", "+10 HD for companion", "+11 HD for companion", "+12 HD for companion", "+13 HD for companion", "+14 HD for companion", "+15 HD for companion", "+16 HD for companion", "+17 HD for companion"], creaturesAdd : [["Animal Companion", false, function(AddRemove, prefix) { if (!AddRemove) return; var compOptions = ["Ape", "Black Bear", "Boar", "Giant Badger", "Giant Weasel", "Mule", "Panther", "Wolf"]; var selectedRace = AskUserOptions("Select Animal Companion", "Select which beast you would like to have as your animal companion.\nYou can change the beast at any time using the \"Companion Options\" button at the top of the Companion page.", compOptions, "radio", true); ApplyCompRace(selectedRace, prefix, "companionrr"); }]] }, "subclassfeature3.1" : { name : "Companion's Bond", source : [["UA:RR", 5]], minlevel : 3, description: desc("My companion gains several benefits, see the Companion's sheet") }, "subclassfeature5" : { name : "Coordinated Attack", source : [["UA:RR", 6]], minlevel : 5, description: desc("If I take the Attack action, my companion can use its reaction to make a melee attack") }, "subclassfeature7" : { name : "Beast's Defense", source : [["UA:RR", 6]], minlevel : 7, description: desc("While my companion can see me, it has advantage on all saving throws") }, "subclassfeature11" : { name : "Storm of Claws and Fangs", source : [["UA:RR", 6]], minlevel : 11, description: desc("My companion can, as an action, make melee attacks vs. all creatures within 5 ft of it") }, "subclassfeature15" : { name : "Superior Beast's Defense", source : [["UA:RR", 6]], minlevel : 15, description: desc("My companion can, as a reaction, halve an attack's damage from attacker that it sees") } } }); // Add the Beast Conclave's Animal Companion as a companion option CompanionList.companionrr = { name : "Animal Companion", nameTooltip : "Beast Conclave: Animal Companion", nameOrigin : "Beast Conclave 3", nameMenu : "Animal Companion (Beast Conclave feature)", source : [["UA:RR", 5]], includeCheck : function(sCrea, objCrea, iCreaCR) { // Only specific animals return /^(ape|black bear|boar|giant badger|giant weasel|mule|panther|wolf)$/i.test(sCrea); }, attributesAdd : { header : "Companion", minlevelLinked : ["rangerua", "ranger", "spell-less ranger"], attacksAction : 1, proficiencyBonusLinked : true, features : [{ name : "Coordinated Attack", description : "As a reaction when the ranger owner takes the Attack action, the companion can make one melee attack.", minlevel : 5 }, { name : "Storm of Claws and Fangs", description : "As an action, the companion can make a melee attack against each creature that is within 5 ft.", minlevel : 11 }, { name : "Superior Beast's Defense", description : "As a reaction, the companion can halve the damage of an attack from an attacker that it can see.", minlevel : 15 }], hdLinked : function(prefix) { var iTotalHD = CurrentCompRace[prefix] && CurrentCompRace[prefix].hd ? CurrentCompRace[prefix].hd[0] : 0; var bRngLvls = false; ["rangerua", "ranger", "spell-less ranger"].forEach(function (n) { if (classes.known[n]) { bRngLvls = true; iTotalHD += classes.known[n].level > 3 ? classes.known[n].level - 3 : 0; } }) if (!bRngLvls && classes.totallevel > 3) iTotalHD += classes.totallevel - 3; return iTotalHD; } }, notes : [{ name : "Call forth and bond with an animal", description : "from the wilderness by spending 8 hours and 50 gp", joinString : " " }, { name : "I can have one companion at a time", description : "If it dies, I can spend 8 hours and 25 gp to bring it back", joinString : "; " }, { name : "Companion's Bond", description : [ "It obeys my commands as best it can, or acts on its own if I can't command it", "When moving stealthily together with only my companion, we can move at a normal pace", "It uses my Proficiency Bonus instead of its own and adds this to its AC and damage rolls", "My companion gains proficiency with 2 skills of my choice (not automated), as well as all saves", "It gains a HD (and thus HP) for every ranger level I gain after 3rd, and an ASI whenever I do" ].join("\n "), joinString : typePF ? ": " : "\n " }, { name : "In Combat", description : [ "My companion rolls for initiative and takes actions as normal, but can't use Multiattack", "My companion gains a bonus on damage rolls against my favored enemies just like me" ].join("\n "), joinString : typePF ? ": " : ":\n " }, { name : "Coordinated Attack (Beast Conclave 5, UA:RR 6)", description : "When I take the Attack action, my companion can use its reaction to make one melee attack", joinString : "\n ", minlevel : 5 }, { name : "Beast's Defense (Beast Conclave 7, UA:RR 6)", description : "While my companion can see me, it has advantage on all saving throws", joinString : "\n ", minlevel : 7 }, { name : "Storm of Claws and Fangs (Beast Conclave 11, UA:RR 6)", description : "My companion can, as an action, make a melee attack vs. all creatures within 5 ft of it", joinString : "\n ", minlevel : 11 }, { name : "Superior Beast's Defense (Beast Conclave 15, UA:RR 6)", description : "My companion can, as a reaction, halve the damage of an attack from an attacker that it sees", joinString : "\n ", minlevel : 15 }], attributesChange : function(sCrea, objCrea) { // Add Prof to attack damage for (var i = 0; i < objCrea.attacks.length; i++) { var oAtk = objCrea.attacks[i]; if (!oAtk.modifiers) { oAtk.modifiers = ["", "Prof"]; } else { oAtk.modifiers[1] += "+Prof"; } if (oAtk.description) { // Remove multiattack oAtk.description = oAtk.description.replace(/(((One|Two|2).+as an Attack action)|(2 per Attack));? ?/i, ''); } }; // Remove multiattack trait/feature/action ["traits", "features", "actions"].forEach(function (n) { if (!objCrea[n]) return; for (var i = objCrea[n].length - 1; i > -1; i--) { var oN = objCrea[n][i]; if (oN.name && /multiattack/i.test(oN.name)) { objCrea[n].splice(i, 1); } } }) // Proficient with all saving throws var aSaves = objCrea.saves ? objCrea.saves : ["", "", "", "", "", ""]; for (var i = 0; i < aSaves.length; i++) { var iProfSave = Math.round((objCrea.scores[i] - 10.5) * 0.5) + objCrea.proficiencyBonus; if (aSaves[i] === "" || aSaves[i] < iProfSave) { aSaves[i] = iProfSave; } } objCrea.saves = aSaves; }, eval : function(prefix, lvl) { // Set the alignment to be the same as the main character var iAlignInx = tDoc.getField("Alignment").currentValueIndices; if (iAlignInx !== -1) { PickDropdown(prefix + "Comp.Desc.Alignment", iAlignInx); } else { Value(prefix + "Comp.Desc.Alignment", What("Alignment")); } // Set HP to use fixed values var sHPfld = prefix + "Comp.Use.HP.Max"; var aHPsets = How(sHPfld).split(","); aHPsets[3] = "fixed"; AddTooltip(sHPfld, undefined, aHPsets.toString()); // Add Prof to the AC, if not already present AddToModFld(prefix + "Comp.Use.AC", "Prof", false, "Animal Companion", "An beast conclave's animal companion adds its proficiency bonus (Prof) to its AC."); // Alert player of things that have to be done manually app.alert({ cMsg : toUni("Pick Two Skills") + "\nThe Ranger's Animal Companion that you have just added, gains proficiency with two additional skills to those already selected. Because there is no automation for selecting these proficiencies, please do so manually.\n\n" + toUni("Ability Score Improvements") + "\nThe Ranger's Animal Companion gains Ability Score Improvements (ASI) whenever your character gains them. An animal companion can't use these to take feats. There is no automation for adding these ASIs either, so please don't forget to increase the ability scores for the animal companion when you get the reminder pop-up for ASI changes.\nAlso, remember that any DCs for abilities that the beast possesses are based on ability scores modifier and that they might need to be manually changed when increasing ability scores modifiers.\nThe 'Notes' section on the companion page automatically keeps track of how many points you can increase the ability scores with and what the base value of those scores are according to the Monster Manual.", nIcon : 3, cTitle : "Don't forget the Skills and Ability Score Improvements!" }); }, changeeval : function (prefix, lvl) { // Update the string with the number of Ability Score Improvements (ASI) var objCreaFnd = CurrentCompRace[prefix]; if (objCreaFnd.typeFound !== "creature" || !CreatureList[objCreaFnd.known]) return; var objCrea = CreatureList[objCreaFnd.known]; var iASIs = 0; for (var aClass in classes.known) { if (!CurrentClasses[aClass].improvements) continue; var classLvL = Math.min(CurrentClasses[aClass].improvements.length, classes.known[aClass].level); iASIs += 2 * CurrentClasses[aClass].improvements[classLvL - 1]; } var sNote = What(prefix + "Cnote.Left"); var sNoteNew = sNote; if (!iASIs) { sNoteNew = sNote.replace(/[\r\n]? *Currently, \d+ points.*/, ""); } else { var sIncreases = "Currently, " + iASIs + " points to divide " + (objCrea && objCrea.scores ? "(default: " + objCrea.scores[0] + " Str, " + objCrea.scores[1] + " Dex, " + objCrea.scores[2] + " Con, " + objCrea.scores[3] + " Int, " + objCrea.scores[4] + " Wis, " + objCrea.scores[5] + " Cha)" : "among the ability scores"); sNoteNew = sNote.replace(/(ASI.*)([\r\n]? *Currently, \d+ points.*)?/, "$1\r " + sIncreases); } if (sNote !== sNoteNew) Value(prefix + "Cnote.Left", sNoteNew); } } AddSubClass("rangerua", "hunter-ua", { regExpSearch : /^(?!.*(monster|barbarian|bard|cleric|druid|fighter|monk|paladin|rogue|sorcerer|warlock|wizard))(?=.*(hunter|huntress|hunts(wo)?m(e|a)n)).*$/i, subname : "Hunter Conclave", source : [["UA:RR", 7]], features : { "subclassfeature3" : { name : "Hunter's Prey", source : [["UA:RR", 7]], minlevel : 3, description: desc('Choose Colossus Slayer, Giant Killer, or Horde Breaker with the "Choose Feature" button'), choices : ["Colossus Slayer", "Giant killer", "Horde Breaker"], "colossus slayer" : { name : "Hunter's Prey: Colossus Slayer", description: desc("Once per turn, when hitting someone that is below max HP, I do an extra 1d8 damage") }, "giant killer" : { name : "Hunter's Prey: Giant Killer", description: desc("As a reaction, when a Large or larger enemy in 5 ft attacks me, I can attack it once"), action : [["reaction", ""]] }, "horde breaker" : { name : "Hunter's Prey: Horde Breaker", description: desc("Once per turn, when I hit a creature, I can make an attack vs. another within 5 ft of it") } }, "subclassfeature7" : { name : "Defensive Tactics", source : [["UA:RR", 7]], minlevel : 7, description: desc('"Choose Feature" button to choose Escape the Horde, Multiattack Defense, or Steel Will'), choices : ["Escape the Horde", "Multiattack Defense", "Steel Will"], "escape the horde" : { name : "Defensive Tactic: Escape the Horde", description: desc("Creatures attacking me with opportunity attacks have disadvantage on the attack rolls") }, "multiattack defense" : { name : "Defensive Tactic: Multiattack Defense", description: desc("When a creature hits me, I gain +4 AC against that creature for the rest of the turn") }, "steel will" : { name : "Defensive Tactic: Steel Will", description: desc("I have advantage on saves against being frightened"), savetxt : { adv_vs : ["frightened"] } } }, "subclassfeature11" : { name : "Multiattack", source : [["UA:RR", 7]], minlevel : 11, description: desc('Choose Volley or Whirlwind Attack using the "Choose Feature" button above'), choices : ["Volley", "Whirlwind Attack"], "volley" : { name : "Multiattack: Volley", description: desc("As an action, I can make ranged attacks vs. all within a 10-ft radius of a point in range"), action : [["action", ""]] }, "whirlwind attack" : { name : "Multiattack: Whirlwind Attack", description: desc("As an action, I can make melee attacks vs. all creatures within 5 ft of me"), action : [["action", ""]] } }, "subclassfeature15" : { name : "Superior Hunter's Defense", source : [["UA:RR", 7]], minlevel : 15, description: desc('"Choose Feature" button to choose Evasion, Stand Against the Tide, or Uncanny Dodge'), choices : ["Evasion", "Stand Against the Tide", "Uncanny Dodge"], "evasion" : { name : "Evasion", description: desc("My Dexterity saves vs. areas of effect negate damage on success and halve it on failure"), savetxt : { text : ["Dex save vs. area effects: fail \u2015 half dmg, success \u2015 no dmg"] } }, "stand against the tide" : { name : "Stand Against the Tide", description: desc([ "When a creature misses me with a melee attack, I can use my reaction on the attack", "I force the attacker to repeat it vs. another (not attacker) of my choice within range", ]), action : [["reaction", ""]] }, "uncanny dodge" : { name : "Uncanny Dodge", description: desc("As a reaction, I halve the damage of an attack from an attacker that I can see"), action : [["reaction", ""]] } } } }); AddSubClass("rangerua", "deep stalker-ua", { regExpSearch : /^(?=.*deep)(?=.*stalker).*$/i, subname : "Deep Stalker Conclave", source : [["UA:RR", 7]], features : { "subclassfeature3" : { name : "Underdark Scout", source : [["UA:RR", 7]], minlevel : 3, description: desc([ "In the first turn of combat I have +10 ft speed and +1 attack with the Attack action", "When I'm hiding or trying to hide, others gain no benefit from darkvision to detect me", ]), }, "subclassfeature3.1" : { name : "Deep Stalker Magic", source : [["UA:RR", 8]], minlevel : 3, description: desc([ "I have 90 ft darkvision (or +30 ft) and gain extra known spells at level 3, 5, 9, 13, 17", "These count as ranger spells, but do not count against the number of spells I can know", ]), spellcastingExtra : ["disguise self", "rope trick", "glyph of warding", "greater invisibility", "seeming"], spellcastingExtraApplyNonconform : true, vision : [["Darkvision", "fixed 90"], ["Darkvision", "+30"]] }, "subclassfeature7" : { name : "Iron Mind", source : [["UA:RR", 8]], minlevel : 7, description: desc("I am proficient with Wisdom saving throws"), saves : ["Wis"] }, "subclassfeature11" : { name : "Stalker's Flurry", source : [["UA:RR", 8]], minlevel : 11, description: desc("Once during my turn when I miss an attack, I can immediately make an extra attack") }, "subclassfeature15" : { name : "Stalker's Dodge", source : [["UA:RR", 8]], minlevel : 15, description: desc("As a reaction when I'm attacked without adv., I can impose disadv. on the attack roll"), action : [["reaction", " (when attacked)"]] } } }); // By popular demand, the XGtE, TCoE, FToD ranger subclasses, if they exist, are added as an option to the Revised Ranger // Note that there are no rules by WotC that support doing this! var UARR_AddRangerSubclassesToRevisedRanger = function() { var aSources = ["X", "T", "FToD"]; var aRngrSubs = ClassList.ranger.subclasses[1]; for (var i = 0; i < aRngrSubs.length; i++) { var sSub = aRngrSubs[i]; var oSub = ClassSubList[sSub]; if (!oSub || !oSub.source || ClassList.rangerua.subclasses[1].indexOf(sSub) !== -1) continue; var sSubSrc = isArray(oSub.source[0]) ? oSub.source[0][0] : oSub.source[0]; if (aSources.indexOf(sSubSrc) === -1) continue; ClassList.rangerua.subclasses[1].push(sSub); } }(); ================================================ FILE: WotC material/ua_20161107_Barbarian-Primal-Paths.js ================================================ var iFileName = "ua_20161107_Barbarian-Primal-Paths.js"; RequiredSheetVersion("13.0.8"); // This file adds the content from the Unearthed Arcana: Barbarian Primal Paths article to MPMB's Character Record Sheet // Define the source SourceList["UA:BPP"] = { name : "Unearthed Arcana: Barbarian Primal Paths", abbreviation : "UA:BPP", group : "Unearthed Arcana", url : "https://media.wizards.com/2016/dnd/downloads/UA_Barbarian.pdf", date : "2016/11/07" }; // A three subclasses for the Barbarian AddSubClass("barbarian", "ancestral guardian-ua", { regExpSearch : /^(?=.*ancestral)(?=.*guardian).*$/i, subname : "Path of the Ancestral Guardian", subnameShort: "Ancestral Guardian", fullname : "Ancestral Guardian", source : [["UA:BPP", 1]], features : { "subclassfeature3" : { name : "Ancestral Protectors", source : [["UA:BPP", 1]], minlevel : 3, description: desc([ "As a bonus action while raging, I can choose a creature within 5 ft of me that I can see", "The creature has disadvantage on attack rolls that don't target me", "If it takes the Disengage action within 5 feet of me, its speed is halved for its turn", "This lasts until the start of my next turn or my rage ends, whichever comes ", ]), action : [["bonus action", " (in Rage)"]] }, "subclassfeature6" : { name : "Ancestral Shield", source : [["UA:BPP", 1]], minlevel : 6, description: desc([ "While I'm raging, I can transfer my resistance to an ally I can see within 30 ft of me", "As a reaction when an ally takes bludgeoning, piercing, or slashing damage", "My ally keeps the resistance, and I lose it, until the start of my next turn", ]), action : [["reaction", ""]] }, "subclassfeature10" : { name : "Consult the Spirits", source : [["UA:BPP", 1]], minlevel : 10, description: desc("I can consult my ancestral spirits to give myself advantage on a Int or Wis check"), usages : 3, recovery : "long rest" }, "subclassfeature14" : { name : "Vengeful Ancestors", source : [["UA:BPP", 1]], minlevel : 14, description: desc([ "While I'm raging, I can have my vengeful ancestors attack for 2d8 force damage", "As a reaction when I or an ally I can see within 30 feet of me is damaged in melee", ]), action : [["reaction", ""]] } } }); AddSubClass("barbarian", "storm herald-ua", { regExpSearch : /^(?=.*storm)(?=.*herald).*$/i, subname : "Path of the Storm Herald", subnameShort: "Storm Herald", fullname : "Storm Herald", source : [["UA:BPP", 2]], abilitySave : 3, features : { "subclassfeature3" : { name : "Storm Aura", source : [["UA:BPP", 2]], minlevel : 3, description: desc([ "While raging, I emanate a 10-ft radius aura that shapes the environment around me", 'Use the "Choose Feature" button above to select the aura', ]), choices : ["Desert", "Sea", "Tundra"], "desert" : { name : "Storm of Fury: Desert", description: desc([ "While raging, I emanate a 10-ft radius aura that shapes the environment around me", "Any enemy that ends its turn in my aura takes fire damage", ]), additional : ["", "", "2 fire damage", "3 fire damage", "3 fire damage", "3 fire damage", "3 fire damage", "4 fire damage", "4 fire damage", "4 fire damage", "4 fire damage", "5 fire damage", "5 fire damage", "5 fire damage", "5 fire damage", "6 fire damage", "6 fire damage", "6 fire damage", "6 fire damage", "7 fire damage"] }, "sea" : { name : "Storm of Fury: Sea", description: desc([ "While raging, I emanate a 10-ft radius aura that shapes the environment around me", "At the end of each of my turns, I can choose a creature in my aura, other than myself", "It must make a Dex save or take lightning damage, or half damage on a successful save", "The DC for this save is 8 + my proficiency bonus + my Constitution modifier", ]), additional : ["", "", "2d6", "2d6", "2d6", "2d6", "2d6", "2d6", "2d6", "3d6", "3d6", "3d6", "3d6", "3d6", "4d6", "4d6", "4d6", "4d6", "4d6", "4d6"], usages : 1, recovery : "turn" }, "tundra" : { name : "Storm of Fury: Tundra", description: desc([ "While raging, I emanate a 10-ft radius aura that shapes the environment around me", "Any enemy that ends its turn in my aura takes cold damage", ]), additional : ["", "", "2 cold damage", "3 cold damage", "3 cold damage", "3 cold damage", "3 cold damage", "4 cold damage", "4 cold damage", "4 cold damage", "4 cold damage", "5 cold damage", "5 cold damage", "5 cold damage", "5 cold damage", "6 cold damage", "6 cold damage", "6 cold damage", "6 cold damage", "7 cold damage"] }, choiceDependencies : [{ feature : "subclassfeature6" }, { feature : "subclassfeature14" }] }, "subclassfeature6" : { name : "Storm Soul", source : [["UA:BPP", 2]], minlevel : 6, description: desc('Use the "Choose Feature" button above to select the effect'), choices : ["desert", "sea", "tundra"], choicesNotInMenu : true, "desert" : { name : "Storm Soul: Desert", description: desc("I have resistance to fire damage and don't suffer the effects of extreme heat"), dmgres : ["Fire"], savetxt : { immune : ["effects of extreme heat"] } }, "sea" : { name : "Storm Soul: Sea", description: desc("I have resistance to lightning damage and can breathe underwater"), dmgres : ["Lightning"] }, "tundra" : { name : "Storm Soul: Tundra", description: desc("I have resistance to cold damage and don't suffer the effects of extreme cold"), dmgres : ["Cold"], savetxt : { immune : ["effects of extreme cold"] } } }, "subclassfeature10" : { name : "Shield of the Storm", source : [["UA:BPP", 2]], minlevel : 10, description: desc("While I'm raging, allies within my aura gain the benefits of my Storm Soul feature") }, "subclassfeature14" : { name : "Raging Storm", source : [["UA:BPP", 2]], minlevel : 14, description: desc('Use the "Choose Feature" button above to select the effect'), choices : ["desert", "sea", "tundra"], choicesNotInMenu : true, "desert" : { name : "Raging Storm: Desert", description: desc([ "Enemy in my aura move more than 5 ft on the ground must make a Strength save", "On a fail, it moves only 5 ft and its speed drops to 0 until the start of its next turn", "The DC for this save is 8 + my proficiency bonus + my Constitution modifier", ]), }, "sea" : { name : "Raging Storm: Sea", description: desc([ "Creatures in my aura hit by my attack must make a Str save or be knocked prone", "The DC for this save is 8 + my proficiency bonus + my Strength modifier", ]), calcChanges : { atkAdd : [ function (fields, v) { if (v.isMeleeWeapon && classes.known.barbarian && classes.known.barbarian.level > 13 && (/\brage\b/i).test(v.WeaponTextName)) { fields.Description += (fields.Description ? '; ' : '') + 'Str save or knocked prone'; }; }, "If I include the word 'Rage' in a melee weapon's name, it will show in its description that it forces targets that are hit to make a Strength saving throw or be knocked prone." ] } }, "tundra" : { name : "Raging Storm: Tundra", description: desc("The area within my aura is difficult terrain for my enemies") } } } }); AddSubClass("barbarian", "zealot-ua", { regExpSearch : /zealot/i, subname : "Path of the Zealot", subnameShort: "Zealot", fullname : "Zealot", source : [["UA:BPP", 2]], features : { "subclassfeature3" : { name : "Divine Fury", source : [["UA:BPP", 2]], minlevel : 3, description: desc([ "While raging, I can become cloaked in an aura of divine power until my rage ends", 'Choose a damage type using the "Choose Feature" button above', ]), additional : ["", "", "1d6+1", "1d6+2", "1d6+2", "1d6+3", "1d6+3", "1d6+4", "1d6+4", "1d6+5", "1d6+5", "1d6+6", "1d6+6", "1d6+7", "1d6+7", "1d6+8", "1d6+8", "1d6+9", "1d6+9", "1d6+10"], usages : 1, recovery : "turn", choices : ["Necrotic Damage", "Radiant Damage"], "necrotic damage" : { name : "Divine Fury: Necrotic", description: desc([ "While raging, I become cloaked in an aura of divine power until my rage ends", "At the end of my turn, each creature within 5 feet of me takes necrotic damage", ]), }, "radiant damage" : { name : "Divine Fury: Radiant", description: desc([ "While raging, I become cloaked in an aura of divine power until my rage ends", "At the end of my turn, each creature within 5 feet of me takes radiant damage", ]), } }, "subclassfeature3.1" : { name : "Warrior of the Gods", source : [["UA:BPP", 2]], minlevel : 3, description: desc("Spells restoring me to life (not undeath or anything else) don't need material comp.") }, "subclassfeature6" : { name : "Zealous Focus", source : [["UA:BPP", 3]], minlevel : 6, description: desc([ "As a reaction when I fail a saving throw while raging, I can instead succeed on it", "Doing so immediately ends my rage and I can't rage again until I finish a short rest", ]), usages : 1, recovery : "short rest", action : [["reaction", " (in Rage)"]] }, "subclassfeature10" : { name : "Zealous Presence", source : [["UA:BPP", 3]], minlevel : 10, description: desc([ "As an action, I howl in fury and unleash a battle cry infused with divine energy", "Allies within 60 ft of me gain adv. on attacks and saves until the start of my next turn", ]), usages : 1, recovery : "long rest", action : [["action", " (allies within 60 feet)"]] }, "subclassfeature14" : { name : "Rage Beyond Death", source : [["UA:BPP", 3]], minlevel : 14, description: desc([ "While raging, having 0 hit points doesn't knock me unconscious", "I still must make death saves, and I suffer the normal effects of taking damage", "However, if I would die due to failing death saves, I don't die until my rage ends", ]), } } }); ================================================ FILE: WotC material/ua_20161114_Bard-Colleges.js ================================================ var iFileName = "ua_20161114_Bard-Colleges.js"; RequiredSheetVersion("13.0.8"); // This file adds the content from the Unearthed Arcana: Bard Colleges article to MPMB's Character Record Sheet // Define the source SourceList["UA:BC"] = { name : "Unearthed Arcana: Bard Colleges", abbreviation : "UA:BC", group : "Unearthed Arcana", url : "https://media.wizards.com/2016/dnd/downloads/UA_Bard.pdf", date : "2016/11/14" }; // Adds 2 subclasses for the Bard AddSubClass("bard", "college of glamour-ua", { regExpSearch : /^(?=.*(college|bard|minstrel|troubadour|jongleur))(?=.*glamour).*$/i, subname : "College of Glamour", subnameShort: "Glamour", source : [["UA:BC", 1]], features : { "subclassfeature3" : { name : "Mantle of Inspiration", source : [["UA:BC", 1]], minlevel : 3, description: desc([ "As a bonus action, I expend one bardic inspiration die to aid those within 60 ft of me", "A number of allies equal to my Cha mod gain twice the die roll in temporary HP", "They can use a reaction to move their speed toward me, without opportunity attacks", ]), additional : "1 bardic inspiration die", action : [["bonus action", ""]] }, "subclassfeature3.1" : { name : "Enthralling Performance", source : [["UA:BC", 1]], minlevel : 3, recovery : "short rest", usages : 1, description: desc([ "By performing for at least 10 minutes, I can charm humanoids within 60 ft of me", "At the end of the performance, my Cha mod number of targets must make a Wis save", "On a fail, a target is charmed for 1 hour; If success, it doesn't knows I tried to charm it", "While charmed, the target idolizes me, hinders those opposing me, and avoids violence", "This lasts until a target takes damage, I attack it, or if it sees me attacking its allies", ]), }, "subclassfeature6" : { name : "Mantle of Majesty", source : [["UA:BC", 1]], minlevel : 6, recovery : "long rest", usages : 1, action : [["bonus action", ""]], description: desc([ "As a bonus action, I take on an appearance of unearthly beauty for 1 minute", "As a bonus action during this time, I can cast Command without using a spell slot", "Creatures charmed by me automatically fail their saves against these Command spells", ]), spellcastingBonus : [{ name : "Mantle of Majesty", spells : ["command"], selection : ["command"], firstCol : 'oncelr' }], spellChanges : { "command" : { time : "1 bns", description : "1 crea save (fails save if charmed) or follow one word command, e.g. approach, drop, flee, halt", changes : "Using my Mantle of Majesty class feature, I can cast Command as a bonus action once per long rest without using a spell slot, thus only affect a single target." } } }, "subclassfeature14" : { name : "Unbreakable Majesty", source : [["UA:BC", 2]], minlevel : 14, recovery : "short rest", usages : 1, action : [["action", ""]], description: desc([ "As an action, I can cast Sanctuary on myself without using a spell slot", "If a creature fails its save to this, I gain adv. on all Cha checks against it for 1 min", "In addition, the target has disadv. on saves it makes against my spells on my next turn", ]), spellcastingBonus : [{ name : "Unbreakable Majesty", spells : ["sanctuary"], selection : ["sanctuary"], firstCol : 'oncesr' }], spellChanges : { "sanctuary" : { time : "Self", description : "Any trying to atk/target me must save or fail, dis. on save vs. spell I cast next turn, I adv. on Cha vs. it", changes : "Using my Unbreakable Majesty class feature, I can cast Sanctuary once per short rest without using a spell slot, but only on myself." } } } } }); AddSubClass("bard", "college of whispers-ua", { regExpSearch : /^(?=.*(college|bard|minstrel|troubadour|jongleur))(?=.*whispers).*$/i, subname : "College of Whispers", subnameShort: "Whispers", source : [["UA:BC", 2]], features : { "subclassfeature3" : { name : "Venomous Blades", source : [["UA:BC", 2]], minlevel : 3, description: desc([ "When I hit with a weapon attack, I can expend a bardic inspiration die to add damage", "I roll the inspiration die twice, dealing the total in Poison damage to the target", "I can do this no more than once per round on my turn", ]), additional : "1 bardic inspiration die" }, "subclassfeature3.1" : { name : "Venomous Words", source : [["UA:BC", 2]], minlevel : 3, recovery : "short rest", usages : 1, description: desc([ "By speaking in private with a humanoid for at least 10 minutes, I can try to frighten it", "After the conversation, the target must make a Wisdom save or be frightened of me", "If the save is successful, the target doesn't know I try to frighten it", "While frightened, the target avoids the company of others, including its allies", "The target also tries to hide in the most secret, safest place available to it", "This lasts for 1 hour or until it is attacked/damaged, or if it sees me attacking its allies", ]), }, "subclassfeature6" : { name : "Mantle of Whispers", source : [["UA:BC", 2]], minlevel : 6, action : [["reaction", ""]], description: desc([ "As a reaction when a creature dies within 5 ft or by my hand, I can capture its shadow", "I can use shadows of those with the same type and size as me (or Medium if I'm Small)", "I can have only one captured shadow at a time and I can don it as a shadow disguise", ]), "shadow disguise" : { name : "Shadow Disguise", extraname : "Mantle of Whispers", source : [["UA:BC", 2]], action : [["action", " (start)"], ['bonus action', ' (end)']], description: desc([ "As an action, I can don a shadow that I captured as a disguise for 1 hour or until I stop it", "I take on the creature's appearance and I can access its surface memories, but not secrets", "I have access to information that it would would freely share with a casual acquaintance", "This is enough that I can pass myself off as the creature by drawing on its memories", "Anybody can see through the disguise with a Wis (Insight) check vs. my Cha (Deception) +5", "The knowledge disappears when the disguise ends", ]), }, autoSelectExtrachoices : [{ extrachoice : "shadow disguise" }] }, "subclassfeature14" : { name : "Shadow Lore", source : [["UA:BC", 3]], minlevel : 14, recovery : "long rest", usages : 1, action : [["action", ""]], description: desc([ "As an action, I whisper to a creature within 30 ft that can hear and understand me", "Only the target can hear me; It must make a Wisdom save or be charmed by me", "If failed, it thinks I know its most mortifying secret, otherwise it only hears mumbling", "While charmed, the target obeys my commands, but won't risk its life or fight for me", "This lasts for 8 hours or until I or my allies attack or damage it", "When the effect ends, the target has no idea why it was so afraid of me", ]), } } }); ================================================ FILE: WotC material/ua_20161121_Cleric-Divine-Domains.js ================================================ var iFileName = "ua_20161121_Cleric-Divine-Domains.js"; RequiredSheetVersion("13.0.8"); // This file adds the content from the Unearthed Arcana: Cleric Divine Domains article to MPMB's Character Record Sheet // Define the source SourceList["UA:CDD"] = { name : "Unearthed Arcana: Cleric Divine Domains", abbreviation : "UA:CDD", group : "Unearthed Arcana", url : "https://media.wizards.com/2016/dnd/downloads/UA_Cleric.pdf", date : "2016/11/21" }; // Adds 3 subclasses for the Cleric AddSubClass("cleric", "forge domain-ua", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*(forge|forgery|blacksmith)).*$/i, subname : "Forge Domain", source : [["UA:CDD", 1]], spellcastingExtra : ["searing smite", "shield", "heat metal", "magic weapon", "elemental weapon", "protection from energy", "fabricate", "wall of fire", "animate objects", "creation"], features : { "subclassfeature1" : { name : "Bonus Proficiency", source : [["UA:CDD", 1]], minlevel : 1, description: desc("I gain proficiency with heavy armor"), armorProfs : [false, false, true, false] }, "subclassfeature1.1" : { name : "Blessing of the Forge", source : [["UA:CDD", 1]], minlevel : 1, action : [["action", ""]], usages : 1, recovery : "long rest", description: desc([ "At the end of a long rest, I can imbue magic into a nonmagical weapon or armor", "It becomes magical: +1 AC if armor, or +1 to attack and damage rolls if a weapon", "This lasts until the end of my next long rest", ]), }, "subclassfeature2" : { name : "Channel Divinity: Artisan's Blessing", source : [["UA:CDD", 1]], minlevel : 2, description: desc([ "During a short rest, I can conduct a ritual to craft an item that is at least part metal", "The object can be worth up to 100 gp, and I must expend metals of equal value to it", "The item can be an exact duplicate of a nonmagical item if I possess the original", ]), }, "subclassfeature6" : { name : "Soul of the Forge", source : [["UA:CDD", 1]], minlevel : 6, additional : ["", "", "", "", "", "+6 force damage", "+7 force damage", "+8 force damage", "+9 force damage", "+10 force damage", "+11 force damage", "+12 force damage", "+13 force damage", "+14 force damage", "+15 force damage", "+16 force damage", "+17 force damage", "+18 force damage", "+19 force damage", "+20 force damage"], description: desc([ "I gain a +1 AC while wearing medium or heavy armor, and resistance to fire damage", "When I hit a construct with an attack, I deal my cleric level in additional force damage", ]), dmgres : ["Fire"], extraAC : { mod : 1, text : "I gain a +1 bonus to AC while I'm wearing medium or heavy armor.", stopeval : function (v) { return !v.heavyArmor && !v.mediumArmor; } } }, "subclassfeature8" : { name : "Divine Strike", source : [["UA:CDD", 1]], minlevel : 8, description: desc("Once per turn, when I hit a creature with a weapon attack, I can do extra damage"), additional : levels.map(function (n) { if (n < 8) return ""; return "+" + (n < 14 ? 1 : 2) + "d8 fire damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && v.isWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.cleric.level < 14 ? 1 : 2) + 'd8 fire damage'; } }, "Once per turn, I can have one of my weapon attacks that hit do extra fire damage." ] } }, "subclassfeature17" : { name : "Saint of Forge and Fire", source : [["UA:CDD", 1]], minlevel : 17, description: desc([ "I gain immunity to fire damage", "If wearing heavy armor, I'm resistant to nonmagical bludg./piercing/slashing damage", ]), savetxt : { immune : ["fire"] }, dmgres : [["Bludgeoning", "Bludg. (nonmagical)"], ["Piercing", "Pierc. (nonmagical)"], ["Slashing", "Slash. (nonmagical)"]] } } }); AddSubClass("cleric", "grave domain-ua", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*(grave)).*$/i, subname : "Grave Domain", source : [["UA:CDD", 2]], spellcastingExtra : ["bane", "false life", "gentle repose", "ray of enfeeblement", "revivify", "vampiric touch", "blight", "death ward", "antilife shell", "raise dead"], features : { "subclassfeature1" : { name : "Bonus Proficiency", source : [["UA:CDD", 2]], minlevel : 1, description: desc("I gain proficiency with heavy armor"), armorProfs : [false, false, true, false] }, "subclassfeature1.1" : { name : "Circle of Mortality", source : [["UA:CDD", 2]], minlevel : 1, action : [["bonus action", ""]], description: desc([ "Spells I cast to heal a living creature at 0 HP have their dice count as their max result", "As a bonus action, I can cast the Spare the Dying cantrip, if I know it", ]), spellChanges : { "spare the dying" : { time : "1 bns", range : "Touch", changes : "I can cast spare the dying as a bonus action instead of an action." } } }, "subclassfeature1.2" : { name : "Eyes of the Grave", source : [["UA:CDD", 2]], minlevel : 1, usages : 1, recovery : "long rest", description: desc([ "By spending 1 min in uninterrupted contemplation, I sense undead within 1 mile", "I learn their number, distance, and direction from me", "In addition, I know the creature type of the one with the highest CR", ]), }, "subclassfeature2" : { name : "Channel Divinity: Path to the Grave", source : [["UA:CDD", 2]], minlevel : 2, action : [["action", ""]], description: desc([ "As an action, I can touch a creature to make it take extra damage from one attack", "It is vulnerable to all the damage from the next spell or attack from me or an ally", "This only applies to the first time that source inflicts damage, and then ends", "If the creature has resistance or is immune to the damage, it instead loses it", ]), }, "subclassfeature6" : { name : "Sentinel at Death's Door", source : [["UA:CDD", 2]], minlevel : 6, usages : 1, recovery : "short rest", action : [["reaction", ""]], description: desc("As a reaction, I turn a critical hit to me or an ally I see within 30 ft to a normal hit") }, "subclassfeature8" : { name : "Divine Strike", source : [["UA:CDD", 2]], minlevel : 8, description: desc("Once per turn, when I hit a creature with a weapon attack, I can do extra damage"), additional : levels.map(function (n) { if (n < 8) return ""; return "+" + (n < 14 ? 1 : 2) + "d8 necrotic damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && v.isWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.cleric.level < 14 ? 1 : 2) + 'd8 necrotic damage'; } }, "Once per turn, I can have one of my weapon attacks that hit do extra necrotic damage." ] } }, "subclassfeature17" : { name : "Keeper of Souls", source : [["UA:CDD", 2]], minlevel : 17, description: desc([ "Once per round, if I'm not incapacitated, I can manipulate the energy of the dying", "When an enemy I can see dies within 30 ft of me, I or an ally within 30 ft regain HP", "The HP regained is equal to the enemy's number of Hit Dice", ]), } } }); AddSubClass("cleric", "protection domain-ua", { // Still valid 2021-09-21 regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*(protection|protect|defend|defense)).*$/i, subname : "Protection Domain", source : [["UA:CDD", 3]], spellcastingExtra : ["compelled duel", "protection from evil and good", "aid", "protection from poison", "protection from energy", "slow", "guardian of faith", "otiluke's resilient sphere", "antilife shell", "wall of force"], features : { "subclassfeature1" : { name : "Bonus Proficiency", source : [["UA:CDD", 3]], minlevel : 1, description: desc("I gain proficiency with heavy armor"), armorProfs : [false, false, true, false] }, "subclassfeature1.1" : { name : "Shield of the Faithful", source : [["UA:CDD", 3]], minlevel : 1, action : [["reaction", ""]], description: desc([ "As a reaction, when someone within 5 ft of me is attacked, I impose disadv. on the roll", "To do this, I must be able to see both the attacker and the target", ]), }, "subclassfeature2" : { name : "Channel Divinity: Radiant Defense", source : [["UA:CDD", 3]], minlevel : 2, action : [["action", ""]], description: desc([ "As an action, I channel blessed energy into an ally that I can see within 30 ft of me", "The first time the ally is hit within the next minute, the attacker takes radiant damage", ]), additional : ["", "2d10+2", "2d10+3", "2d10+4", "2d10+5", "2d10+6", "2d10+7", "2d10+8", "2d10+9", "2d10+10", "2d10+11", "2d10+12", "2d10+13", "2d10+14", "2d10+15", "2d10+16", "2d10+17", "2d10+18", "2d10+19", "2d10+20"] }, "subclassfeature6" : { name : "Blessed Healer", source : [["UA:CDD", 3]], minlevel : 6, description: desc("When I restore HP to another with a spell, I regain 2 + the spell (slot) level in HP"), calcChanges : { spellAdd : [ // note that several healing spells are not present here because they don't restore hp at casting (only later) function (spellKey, spellObj, spName) { var startDescr = spellObj.description; switch (spellKey) { case "life transference" : spellObj.description = spellObj.description.replace("Necrotic", "Necro").replace(", and", ",") + "; I then regain 2+SL HP"; break; case "mass heal" : spellObj.description = "Heal 700 HP, split over crea in range, each then +11 HP; also cures blind, deaf, diseases; I heal +11 HP"; break; case "power word heal" : spellObj.description = spellObj.description.replace(/heals all.*/i, "full HP; not charmed, frightened, paralyzed, stunned; can stand up as rea; if other, I heal 2+SL"); break; case "regenerate" : spellObj.description = spellObj.description.replace(" for rest of duration", ""); case "heal" : spellObj.description = spellObj.description.replace("all diseases", "diseases"); case "cure wounds" : case "healing word" : case "mass cure wounds" : case "mass healing word" : case "prayer of healing" : spellObj.description = spellObj.description.replace(/creatures?/i, "crea").replace("within", "in").replace("spellcasting ability modifier", "spellcasting ability mod") + "; if other, I heal 2+SL"; } return startDescr !== spellObj.description; }, "When I cast a spell that restores hit points to another creature than myself at the moment of casting, I also heal 2 + the level of the spell slot (or spell slot equivalent) hit points." ] } }, "subclassfeature8" : { name : "Divine Strike", source : [["UA:CDD", 3]], minlevel : 8, description: desc("Once per turn, when I hit a creature with a weapon attack, I can do extra damage"), additional : levels.map(function (n) { if (n < 8) return ""; return "+" + (n < 14 ? 1 : 2) + "d8 radiant damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && v.isWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.cleric.level < 14 ? 1 : 2) + 'd8 radiant damage'; } }, "Once per turn, I can have one of my weapon attacks that hit do extra radiant damage." ] } }, "subclassfeature17" : { name : "Indomitable Defense", source : [["UA:CDD", 3]], minlevel : 17, usages : 1, recovery : "short rest", action : [["action", " (transfer)"], ['bonus action', ' (return)']], description: desc([ "I gain resistance to two of: bludgeoning, necrotic, piercing, radiant, or slashing damage", "Whenever I finish a short or long rest, I can change the damage types chosen", "As an action, I can transfer both resistances to one creature I touch", "As a bonus action, I can transfer the resistances back to myself", "Otherwise, the creature keeps this resistance until the end of my next short or long rest", ]), } } }); ================================================ FILE: WotC material/ua_20161128_Druid-Circles.js ================================================ var iFileName = "ua_20161128_Druid-Circles.js"; RequiredSheetVersion("13.0.8"); // This file adds the content from the Unearthed Arcana: Druid Circles article to MPMB's Character Record Sheet // Define the source SourceList["UA:DC"] = { name : "Unearthed Arcana: Druid Circles", abbreviation : "UA:DC", group : "Unearthed Arcana", url : "https://media.wizards.com/2016/dnd/downloads/UA_Druid11272016_CAWS.pdf", date : "2016/11/28" }; // Adds 3 subclasses for the Druid AddSubClass("druid", "circle of dreams-ua", { regExpSearch : /^(?=.*(druid|shaman))(?=.*\bdreams\b).*$/i, subname : "Circle of Dreams", subnameShort: "Dreams", source : [["UA:DC", 1]], features : { "subclassfeature2" : { name : "Balm of the Summer Court", source : [["UA:DC", 1]], minlevel : 2, description : desc([ "I have a pool of fey energy represented by a number of d6s equal to my druid level", "As a bonus action, I can spend dice to heal an ally within 120 ft of me that I can see", "I can spend up to half my druid level worth of dice from the pool at once", "The ally heals an amount equal to the total rolled and gains 1 temp HP per die spent", "In addition, the ally gains +5 ft speed per die spent, which lasts for 1 minute" ]), usages : levels.map(function (n) { return n < 2 ? "" : n + "d6 per "; }), recovery : "long rest", action : [["bonus action", ""]] }, "subclassfeature6" : { name : "Hearth of Moonlight and Shadow", source : [["UA:DC", 1]], minlevel : 6, description : desc([ "At the start of a short or long rest, I can create a warded area of 30-ft radius", "Within this area, my allies and I gain +5 on Wis (Perception) checks to detect creatures", "Also, any light from open flames is not visible from outside the area", "This effect lasts until the end of the rest or when I leave the area" ]) }, "subclassfeature10" : { name : "Hidden Paths", source : [["UA:DC", 1]], minlevel : 10, description : desc([ "On my turn, I can teleport up to 30 ft to where I can see; Moved distance costs speed", "As an action, I can teleport a willing ally I touch up to 30 ft to a spot I can see", "Once I used either option, I can't use this feature again until 1d4 rounds have passed" ]), usages : 1, recovery : "1d4 rounds", action : [["action", " (on ally)"]] }, "subclassfeature14" : { name : "Purifying Light", source : [["UA:DC", 1]], minlevel : 14, description : desc([ "When I use a spell slot with a spell to restores HP, I can use Dispel Magic on the target", "The Dispel Magic counts as if being cast with the same spell slot as the healing spell", "Each creature effected by the Dispel Magic costs as one use of this feature" ]), usages : 3, recovery : "long rest" } } }); AddSubClass("druid", "circle of the shepherd-ua", { regExpSearch : /^(?=.*(druid|shaman))(?=.*shepherd).*$/i, subname : "Circle of the Shepherd", subnameShort: "Shepherd", source : [["UA:DC", 1]], features : { "subclassfeature2" : { name : "Beast Speech", source : [["UA:DC", 2]], minlevel : 2, description: desc([ "I can talk with beasts, they understand me and I them, to the limit of their intelligence", "This doesn't automatically make me friends with all beasts", ]), }, "subclassfeature2.1" : { name : "Spirit Bond", source : [["UA:DC", 2]], minlevel : 2, description: desc([ "As a bonus action, I can summon a spirit to an empty space within 60 ft that I can see", "The Bear, Hawk, or Wolf spirit, creates a 30-ft radius aura and persist for 1 minute", "It doesn't occupy space, is immobile, and counts as neither a creature nor an object", "\u2022 Bear: my allies in the area and I instantly gain 5 + my druid level in temp HP", " While in the aura, my allies and I gain advantage on Strength checks and saves", "\u2022 Hawk: my allies and I gain advantage on attacks against targets in the aura", "\u2022 Wolf: my allies and I gain advantage on ability checks to detect targets in the aura", " If I cast a healing spell with a spell slot, allies in the aura heal my druid level in HP", ]), usages : 1, recovery : "short rest", action : [["bonus action", ""]] }, "subclassfeature6" : { name : "Mighty Summoner", source : [["UA:DC", 2]], minlevel : 6, description: desc("Beast I summon with my spells have +2 HP per HD and their attacks count as magical"), calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { switch (spellKey) { case "conjure animals" : case "conjure fey" : spellObj.description += "; each +2 HP/HD, magical natural attacks"; return true; case "conjure woodland beings" : spellObj.description = spellObj.description.replace(/fey.*/, "fey; obeys commands if its align. agrees; breaks free if break conc.; +2 HP/HD, magic atks"); return true; } }, "When I use a spell that restores hit points, it restores an additional 2 + the level of the spell slot (or spell slot equivalent) used to cast the spell." ] } }, "subclassfeature10" : { name : "Guardian Spirit", source : [["UA:DC", 2]], minlevel : 10, description: desc("Whenever I finish a long rest, I gain the benefits of a Death Ward spell for 24 hours"), spellcastingBonus : [{ name : "Guardian Spirit", spells : ["death ward"], selection : ["death ward"], firstCol : 'oncelr' }], spellChanges : { "death ward" : { range : "Self", components : "", compMaterial : "", description : "Once, when I drops to 0 HP I drops to 1 HP instead; or negates first instantaneous kill effect", duration : "24 h", changes : "Whenever I finish a long rest, I gain the benefits of a Death Ward spell for 24 hours." } } }, "subclassfeature14" : { name : "Faithful Summons", source : [["UA:DC", 2]], minlevel : 14, description: desc([ "When I am reduced to 0 HP or incapacitated against my will, I can summon protectors", "I gain the benefits of a Conjure Animals spell as if cast with a 9th-level spell slot", "It summons 4 beast of my choice with CR 2 or lower within 20 ft of me for 1 hour", "If they receive no commands from me, they protect me from harm and attack foes", ]), usages : 1, recovery : "long rest" } } }); AddSubClass("druid", "circle of twilight-ua", { // Still valid 2021-09-21 regExpSearch : /^(?=.*(druid|shaman))(?=.*twilight).*$/i, subname : "Circle of Twilight", subnameShort: "Twilight", source : [["UA:DC", 2]], features : { "subclassfeature2" : { name : "Harvest's Scythe", source : [["UA:DC", 3]], minlevel : 2, description: desc([ "I have a pool of energy represented by a number of d10s equal to my druid level", "When I roll damage for a spell, I can do extra necrotic damage with dice from the pool", "I can spend up to half my druid level worth of dice from the pool at once", "If I any hostiles die from an augmented spell, I can heal one ally I can see within 30 ft", "The ally regains 2 HP per die spent; or 5 HP per die if one of the slain was undead", ]), usages : ["", "2d10 per ", "3d10 per ", "4d10 per ", "5d10 per ", "6d10 per ", "7d10 per ", "8d10 per ", "9d10 per ", "10d10 per ", "11d10 per ", "12d10 per ", "13d10 per ", "14d10 per ", "15d10 per ", "16d10 per ", "17d10 per ", "18d10 per ", "19d10 per ", "20d10 per "], recovery : "long rest" }, "subclassfeature6" : { name : "Speech Beyond the Grave", source : [["UA:DC", 3]], minlevel : 6, description: desc([ "Once per short rest, I can cast Speak with Dead without spell slots or material comp.", "The target and I can understand each other, regardless of language or intelligence", ]), usages : 1, recovery : "short rest", spellcastingBonus : [{ name : "Speech Beyond the Grave", spells : ["speak with dead"], selection : ["speak with dead"], firstCol : 'oncesr' }], spellChanges : { "speak with dead" : { components : "V,S", compMaterial : "", changes : "I can cast this spell once per short rest without requiring material components." } } }, "subclassfeature10" : { name : "Watcher at the Threshold", source : [["UA:DC", 3]], minlevel : 10, description: desc([ "I gain resistance to necrotic and radiant damage", "While I'm not incapacitated, allies within 30 ft of me gain adv. on their death saves", ]), dmgres : ["Necrotic", "Radiant"] }, "subclassfeature14" : { name : "Paths of the Dead", source : [["UA:DC", 3]], minlevel : 14, description: desc("Once per short rest, I can cast Etherealness without needing a spell slot"), usages : 1, recovery : "short rest", spellcastingBonus : [{ name : "Paths of the Dead", spells : ["etherealness"], selection : ["etherealness"], firstCol : 'oncesr' }], spellChanges : { "etherealness" : { description : "I go to Ethereal Plane; move there, but able to perceive 60 ft into the normal plane", changes : "Using my Paths of the Dead class feature I can cast Etherealness once per short rest without needing a spell slot, thus can only target 1 creature." } } } } }); ================================================ FILE: WotC material/ua_20161205_Fighter-Martial-Archetypes.js ================================================ var iFileName = "ua_20161205_Fighter-Martial-Archetypes.js"; RequiredSheetVersion("13.0.8"); // This file adds the content from the Unearthed Arcana: Eberron article to MPMB's Character Record Sheet // Define the source SourceList["UA:FMA"] = { name : "Unearthed Arcana: Fighter Martial Archetypes", abbreviation : "UA:FMA", group : "Unearthed Arcana", url : "https://media.wizards.com/2016/dnd/downloads/2016_Fighter_UA_1205_1.pdf", date : "2016/12/05" }; // Adds 4 subclasses for the Fighter AddSubClass("fighter", "arcane archer-ua", { regExpSearch : /^(?=.*arcane)(?=.*archer).*$/i, subname : "Arcane Archer", source : [["UA:FMA", 1]], fullname : "Arcane Archer", features : { "subclassfeature3" : { name : "Arcane Arrow", source : [["UA:FMA", 1]], minlevel : 3, description: desc([ "As a bonus action, I can create one magical arrow that I can fire with a bow", "A shot with the arrow counts as magical and does additional force damage on a hit", "When I create the arrow, I can apply one of my known Arcane Shots on it", "This arrow lasts until the end of my turn or until I hit or miss a target with it", ]), additional : levels.map(function (n) { return n < 3 ? "" : (n < 18 ? "+2" : "+4") + "d6 force damage"; }), usages : 2, recovery : "short rest", action : ['bonus action', 'Create Magical Arrow'], calcChanges : { atkAdd : [ function (fields, v) { if ((/longbow|shortbow/i).test(v.baseWeaponName) && (/^(?=.*arcane)(?=.*arrow).*$/i).test(v.WeaponTextName) && classes.known.fighter && classes.known.fighter.level) { fields.Description += (fields.Description ? '; +' : '+') + (classes.known.fighter.level < 18 ? 2 : 4) + 'd6 force damage'; if (!v.thisWeapon[1] && !v.theWea.isMagicWeapon && !(/counts as magical/i).test(fields.Description)) fields.Description += '; Counts as magical'; }; }, "If I include the words 'Arcane Arrow' in a longbow or shortbow's name, it gets an added description of the damage this Arcane Arrow adds." ] } }, "subclassfeature3.1" : { name : "Arcane Shot", source : [["UA:FMA", 1]], minlevel : 3, description: desc('Use the "Choose Feature" button above to add Arcane Shots to the third page'), additional : levels.map( function(n) { return n < 3 ? "" : (n < 7 ? 2 : n < 10 ? 3 : n < 15 ? 4 : n < 18 ? 5 : 6) + " known"; }), extraname : "Arcane Shot", extrachoices : ["Beguiling Arrow", "Brute Bane Arrow", "Bursting Arrow", "Defending Arrow", "Grasping Arrow", "Piercing Arrow", "Seeking Arrow", "Shadow Arrow"], extraTimes : levels.map(function (n) { return n < 3 ? 0 : n < 7 ? 2 : n < 10 ? 3 : n < 15 ? 4 : n < 18 ? 5 : 6; }), "beguiling arrow" : { name : "Beguiling Arrow", source : [["UA:FMA", 1]], additional: "Enchantment", description: desc([ "If the arrow hits, I choose an ally withing 30 feet of the target", "The target can't attack the chosen ally or include the ally in any harmful area of effects", "This effect stops if the target is immune to charm effects or the ally damages the target", ]), }, "brute bane arrow" : { name : "Brute Bane Arrow", source : [["UA:FMA", 1]], additional: "Necromancy", description: desc([ "If the arrow hits, the target's attacks deal half damage until the end of my next turn", "Only attacks that deal bludgeoning, piercing or slashing damage are halved", ]), }, "bursting arrow" : { name : "Bursting Arrow", source : [["UA:FMA", 2]], additional: "Evocation", description: desc("If the arrow hits, all creatures within 10 ft of the target creature take 2d6 force damage") }, "defending arrow" : { name : "Defending Arrow", source : [["UA:FMA", 2]], additional: "Abjuration", description: desc("If the arrow hits, the target has disadv. on its next attack before the end of my next turn") }, "grasping arrow" : { name : "Grasping Arrow", source : [["UA:FMA", 2]], additional: "Conjuration", description: desc([ "If the arrow hits, the target is wrapped with grasping, thorny brambles for 1 minute", "The target has -10 ft speed; It takes 2d6 slashing damage when moving more than 1 ft", "As an action, the target or a creature can remove the brambles with a DC 10 Str check", ]), }, "piercing arrow" : { name : "Piercing Arrow", source : [["UA:FMA", 2]], additional: "Transmutation", description: desc([ "The arrow transform into an ethereal dart that creates a line of 1 ft wide and 30 ft long", "I then make a separate attack using my Arcane Arrow against each creature in that line", ]), }, "seeking arrow" : { name : "Seeking Arrow", source : [["UA:FMA", 2]], additional: "Divination", description: desc([ "As an action, I can make a ranged attack against a creature I have seen in the last minute", "The seeking arrow moves around corners and obstacles to hit the target", "The attack ignores 1/2 and 3/4 cover and disadvantage from range or being out of sight", "The attack misses if the target is too far away or there is no path for the arrow to travel", "I know if the arrow hits the target, but don't learn the location unless it's in line of sight", ]), action : [["action", ""]] }, "shadow arrow" : { name : "Shadow Arrow", source : [["UA:FMA", 2]], additional: "Illusion", description: desc("If the arrow hits, the target can't see beyond 30 ft until the end of my next turn") } }, "subclassfeature3.2" : { name : "Archer's Lore", source : [["UA:FMA", 1]], minlevel : 3, description: desc([ "I gain proficiency with two skills", "I can choose from: Arcana, Athletics, Nature, Perception, Stealth, or Survival", ]), skillstxt : "Choose two from Arcana, Athletics, Nature, Perception, Stealth, and Survival" }, "subclassfeature7" : { name : "Conjure Arrows", source : [["UA:FMA", 1]], minlevel : 7, description: desc([ "As an action, I can create up to 20 nonmagical arrows that remain for 10 minutes", "The arrows vanish if I use this feature again with 10 minutes", ]), action : [["action", ""]] }, "subclassfeature15" : { name : "Ever-Ready Arrow", source : [["UA:FMA", 1]], minlevel : 15, description: desc("I regain one use of Arcane Arrow one minute after I expend my last remaining use of it") } } }); AddSubClass("fighter", "knight-ua", { // Still valid 2021-09-21 regExpSearch : /^(?!.*(exalted|sacred|holy|divine|nature|natural|purple.*dragon|green|fey|horned))(?=.*knight).*$/i, subname : "Knight", source : [["UA:FMA", 2]], fullname : "Knight", features : { "subclassfeature3" : { name : "Born in the Saddle", source : [["UA:FMA", 2]], minlevel : 3, description: desc([ "Mounting or dismounting a creature costs me only 5 ft of movement", "I have advantage on saving throws made to avoid falling off my mount", "If I fall off my mount for less than 10 ft while not incapacitated, I land on my feet", ]), savetxt : { adv_vs : ["falling off my mount"] } }, "subclassfeature3.1" : { name : "Implacable Mark", source : [["UA:FMA", 2]], minlevel : 3, description: desc([ "If I hit a creature with a melee weapon attack, I mark it until the end of my next turn", "A marked target has disadv. on any attacks vs. those that didn't mark it", "I can attack the target I marked if it is within 5 ft of me and does one of the following:", "\u2022 It moves at least 1 foot on its turn", "\u2022 It makes an attack that it suffers disadv. on from being marked", "This attack uses my reaction, has adv., and adds my fighter level as extra damage", "I can still do this if I already used my reaction this round, but not this turn", ]), recovery : "short rest", usages : 3, additional : levels.map(function (n) { return n < 3 ? "" : "+" + n + " damage"; }), action : [["reaction", ""]], calcChanges : { atkCalc : [ function (fields, v, output) { if (v.isMeleeWeapon && classes.known.fighter && classes.known.fighter.level > 2 && (/\b(implacable.?mark|marked)\b/i).test(v.WeaponTextName)) { output.extraDmg += classes.known.fighter.level; }; }, "If I include the words 'Implacable Mark' or 'Marked' in the name of a melee weapon, it gets my fighter level added to its Damage." ] } }, "subclassfeature7" : { name : "Noble Cavalry", source : [["UA:FMA", 2]], minlevel : 7, description: desc([ "I gain proficiency with two skills or one language", "I can choose the skills from: Animal Handling, History, Insight, Persuasion, and Religion", ]), choices : ["Language proficiency", "2 Skill proficiencies: Animal Handling, History, Insight, Persuasion, or Religion"], "language proficiency" : { name : "Noble Cavalry", description: desc("I learn one language of my choice"), languageProfs : [1] }, "2 skill proficiencies: animal handling, history, insight, persuasion, or religion" : { name : "Noble Cavalry", description: desc("I gain 2 skill proficiencies: Animal Handling, History, Insight, Persuasion, or Religion"), skillstxt : "Choose two from: Animal Handling, History, Insight, Persuasion, or Religion" } }, "subclassfeature10" : { name : "Hold the Line", source : [["UA:FMA", 2]], minlevel : 10, description: desc([ "As a reaction when a creature within 5 ft of me moves at least 1 ft, I can attack it", "This attack is made with a melee weapon attack and deals extra damage on a hit", "If this hits, the attack reduces the target's speed to 0 until the end of this turn", ]), additional : levels.map(function (n) { return n < 10 ? "" : "+" + Math.floor(n / 2) + " damage"; }), action : [["reaction", ""]], calcChanges : { atkCalc : [ function (fields, v, output) { if (v.isMeleeWeapon && classes.known.fighter && classes.known.fighter.level > 9 && (/holds?.the.line/i).test(v.WeaponTextName)) { output.extraDmg += Math.floor(classes.known.fighter.level / 2); }; }, "If I include the words 'Hold the Line' in the name of a melee weapon, it gets half my fighter level added to its Damage." ] } }, "subclassfeature15" : { name : "Rapid Strike", source : [["UA:FMA", 3]], minlevel : 15, description: desc([ "If I have adv. on an attack, I can forgo it to make an extra attack as a bonus action", "This attack has to be with the same weapon against the same target", ]), action : [["bonus action", ""]] }, "subclassfeature18" : { name : "Defender's Blade", source : [["UA:FMA", 3]], minlevel : 18, description: desc([ "I can do opportunity attacks if I already used my reaction this round, but not this turn", "I gain a +1 bonus to AC when I'm wearing heavy armor", ]), extraAC : { mod : 1, text : "I gain a +1 bonus to AC while I'm wearing heavy armor.", stopeval : function (v) { return !v.heavyArmor; } } } } }); AddSubClass("fighter", "samurai-ua", { regExpSearch : /samurai/i, subname : "Samurai", source : [["UA:FMA", 3]], fullname : "Samurai", features : { "subclassfeature3" : { name : "Fighting Spirit", source : [["UA:FMA", 3]], minlevel : 3, description: desc([ "As a bonus action, I can give myself benefits that last until the end of my next turn", "I then gain adv. on my attacks and resistance to bludgeoning/piercing/slashing damage", ]), recovery : "short rest", usages : 3, action : [["bonus action", ""]] }, "subclassfeature7" : { name : "Elegant Courtier", source : [["UA:FMA", 3]], minlevel : 7, description: desc([ "I can add my Wis modifier to any Cha check to persuade anyone of a high social station", "I gain proficiency with either one language or the History, Insight, or Persuasion skill", ]), choices : ["Language proficiency", "Skill proficiency: History, Insight, or Persuasion"], "language proficiency" : { name : "Elegant Courtier", description: desc([ "I can add my Wis modifier to any Cha check to persuade anyone of a high social station", "I gain proficiency with one language of my choice", ]), languageProfs : [1] }, "skill proficiency: history, insight, or persuasion" : { name : "Elegant Courtier", description: desc([ "I can add my Wis modifier to any Cha check to persuade anyone of a high social station", "I gain proficiency with one skill: History, Insight, or Persuasion", ]), skillstxt : "Choose one from: History, Insight, or Persuasion" } }, "subclassfeature10" : { name : "Unbreakable Will", source : [["UA:FMA", 3]], minlevel : 10, description: desc("I gain proficiency with Wis saves, or if I'm already proficient, either Int or Cha saves"), saves : ["Wis"] }, "subclassfeature15" : { name : "Rapid Strike", source : [["UA:FMA", 3]], minlevel : 15, description: desc([ "If I have adv. on an attack, I can forgo it to make an extra attack as a bonus action", "This attack has to be with the same weapon against the same target", ]), action : [["bonus action", ""]] }, "subclassfeature18" : { name : "Strength Before Death", source : [["UA:FMA", 3]], minlevel : 18, description: desc([ "If I take damage that would reduce me to 0 HP, I can delay that damage", "I then immediately take a bonus turn, interrupting the current turn", "I don't take the delayed damage until the bonus turn ends and can affect that damage", ]), recovery : "long rest", usages : 1 } } }); AddSubClass("fighter", "sharpshooter-ua", { // Still valid 2021-09-21 regExpSearch : /sharpshooter/i, subname : "Sharpshooter", source : [["UA:FMA", 3]], fullname : "Sharpshooter", features : { "subclassfeature3" : { name : "Steady Aim", source : [["UA:FMA", 3]], minlevel : 3, description: desc([ "As a bonus action, I can carefully aim my ranged weapon on a target I can see in range", "Until the end of my turn, my attacks with this weapon on that target get to:", "Ignore half and three-quarter cover; Add 2 + half fighter level damage per hit", ]), recovery : "short rest", usages : 3, additional : levels.map(function (n) { return n < 3 ? "" : "+" + (2 + Math.floor(n / 2)) + " damage"; }), action : [["bonus action", ""]], calcChanges : { atkAdd : [ function (fields, v) { if (v.isRangedWeapon && classes.known.fighter && classes.known.fighter.level > 2 && (/steady.{0,3}aim/i).test(v.WeaponTextName)) { fields.Description += (fields.Description ? '; ' : '') + 'Ignores 1/2 and 3/4 cover'; }; }, "If I include the words 'Steady Aim' in the name of a ranged weapon, it gets 2 + half my fighter level added to its Damage, and the fact that it ignores half and three-quarter cover added to its description." ], atkCalc : [ function (fields, v, output) { if (v.isRangedWeapon && classes.known.fighter && classes.known.fighter.level > 2 && (/steady.{0,3}aim/i).test(v.WeaponTextName)) { output.extraDmg += 2 + Math.floor(classes.known.fighter.level / 2); }; }, ""] } }, "subclassfeature7" : { name : "Careful Eyes", source : [["UA:FMA", 4]], minlevel : 7, description: desc([ "As a bonus action, I can take the Search action", "I gain proficiency with one skill, Perception, Investigation, or Survival", ]), skillstxt : "Choose one from: Perception, Investigation, or Survival", action : [["bonus action", ""]] }, "subclassfeature10" : { name : "Close-Quarters Shooting", source : [["UA:FMA", 4]], minlevel : 10, description: desc([ "I don't have disadvantage when making a ranged attack while within 5 ft of a hostile", "A hostile within 5 ft that I hit with a ranged attack on my turn, can't take reactions", "This lasts until the end of my turn", ]), }, "subclassfeature15" : { name : "Rapid Strike", source : [["UA:FMA", 4]], minlevel : 15, description: desc([ "If I have adv. on an attack, I can forgo it to make an extra attack as a bonus action", "This attack has to be with the same weapon against the same target", ]), action : [["bonus action", ""]] }, "subclassfeature18" : { name : "Snap Shot", source : [["UA:FMA", 4]], minlevel : 18, description: desc("I can make one more ranged attack with my Attack action on my first turn of combat") } } }); ================================================ FILE: WotC material/ua_20161212_Monk-Monastic-Traditions.js ================================================ var iFileName = "ua_20161212_Monk-Monastic-Traditions.js"; RequiredSheetVersion("13.0.8"); // This file adds the content from the Unearthed Arcana: Monk Monastic Traditions article to MPMB's Character Record Sheet // Define the source SourceList["UA:MMT"] = { name : "Unearthed Arcana: Monk Monastic Traditions", abbreviation : "UA:MMT", group : "Unearthed Arcana", url : "https://media.wizards.com/2016/dnd/downloads/M_2016_UAMonk1_12_12WKWT.pdf", date : "2016/12/12" }; // Adds 2 subclasses for the Monk AddSubClass("monk", "way of the kensei-ua", { regExpSearch : /kensei/i, subname : "Way of the Kensei", subnameShort: "Kensei", source : [["UA:MMT", 1]], features : { "subclassfeature3" : { name : "Path of the Kensei", source : [["UA:MMT", 1]], minlevel : 3, additional: "3 martial weapons proficiencies", description: desc([ "Martial weapons I am proficient with count as kensei weapons for me", "With these, I can use Dex instead of Str and use the Martial Arts damage die", "As a bonus action, my kensei weapon deal +1d4 bludg. damage for an Attack action", ]), action : [["bonus action", " (after hit)"]], calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.monk && classes.known.monk.level > 2 && fields.Proficiency && !v.isSpell && v.baseWeaponName !== 'shortsword' && (/martial/i).test(v.theWea.type)) { var aMonkDie = function (n) { return n < 5 ? 4 : n < 11 ? 6 : n < 17 ? 8 : 10; }(classes.known.monk.level); try { var curDie = eval_ish(fields.Damage_Die.replace('d', '*')); } catch (e) { var curDie = 'x'; }; if (isNaN(curDie) || curDie < aMonkDie) { fields.Damage_Die = '1d' + aMonkDie; }; fields.Mod = v.StrDex; fields.Description += (fields.Description ? '; ' : '') + 'As bonus action with Attack action, +1d4 bludg. damage'; }; }, "I can use either Strength or Dexterity and my Martial Arts damage die in place of the normal damage die for any martial weapons I am proficient with (Kensei Weapons).\n \u2022 If I score a hit with one of these kensei weapons as part of an Attack action, I can take a bonus action to have that hit, and any other hit after that as part of the same action, do +1d4 bludgeoning damage." ] }, "kensei defense" : { name : "Kensei Defense", extraname : "Way of the Kensei 3", source : [["UA:MMT", 1]], description: desc([ "If I make an unarmed strike with an Attack action, I can use my kensei weapon to defend", "Until the start of my next turn, if I'm not incapacitated, I gain +2 AC while holding it", ]), }, autoSelectExtrachoices : [{ extrachoice : "kensei defense" }] }, "ki-empowered strikes" : { name : "One with the Blade", source : [["UA:MMT", 1]], minlevel : 6, description: desc("My unarmed strikes and kensei weapon attacks count as magical"), calcChanges : { atkAdd : [ function (fields, v) { if ((v.baseWeaponName == "unarmed strike" || (!v.isSpell && (/martial/i).test(v.theWea.type) && fields.Proficiency)) && !v.thisWeapon[1] && !v.theWea.isMagicWeapon && !(/counts as magical/i).test(fields.Description)) { fields.Description += (fields.Description ? '; ' : '') + 'Counts as magical'; }; }, "My unarmed strikes and Kensei Weapons count as magical for overcoming resistances and immunities." ] } }, "subclassfeature6" : { name : "Precise Strike", source : [["UA:MMT", 1]], minlevel : 6, description : "As a bonus action, I can focus my attention on one creature I can see within 30 ft" + "\n " + "This turn, I double my proficiency bonus on my next weapon attack against that mark", usages : 1, recovery : "short rest", action : [["bonus action", ""]], calcChanges : { atkCalc : [ function (fields, v, output) { if (!v.isSpell && !v.isDC && (/precise.{0,3}strike/i).test(v.WeaponTextName)) { output.prof *= 2; }; }, "If I include the words 'Precise Strike' in a weapon's name, or description it gets twice my proficiency bonus added to its To Hit instead of only once." ] }, "sharpen the blade" : { name : "Sharpen the Blade", extraname : "Way of the Kensei 11", source : [["UA:MMT", 1]], additional: "1 to 3 ki points", description: desc([ "As a bonus action, I can grant my weapon a bonus to attack and damage rolls", "This bonus is equal to the number of ki points I spend; It lasts for 1 minute", ]), action : [["bonus action", ""]] }, autoSelectExtrachoices : [{ extrachoice : "sharpen the blade", minlevel : 11 }] }, "subclassfeature17" : { name : "Unerring Accuracy", source : [["UA:MMT", 1]], minlevel : 17, description: desc("On each of my turns, I can reroll one weapon attack roll I make that misses") } } }); AddSubClass("monk", "way of tranquility-ua", { // Still valid 2021-09-21 regExpSearch : /^(?=.*tranquility|tranquil|calm|diplomatic|diplomat)((?=.*(monk|monastic))|((?=.*martial)(?=.*(artist|arts)))|((?=.*spiritual)(?=.*warrior))).*$/i, subname : "Way of Tranquility", subnameShort: "Tranquility", source : [["UA:MMT", 2]], features : { "subclassfeature3" : { name : "Path of Tranquility", source : [["UA:MMT", 2]], minlevel : 3, description: desc("I cast Sanctuary on me, no material comp., lasts 8 hours, hostiles must save every hour"), usages : 1, recovery : "1 min", spellcastingBonus : [{ name : "Way of Tranquility", spells : ["sanctuary"], selection : ["sanctuary"] }], spellChanges : { "sanctuary" : { components : "V,S", compMaterial : "", time : "8 h", description : "I'm warded; any who want to attack/target must first make save; doesn't protect vs. area spells", changes : "Using my Path of Tranquility class feature I can cast Sanctuary without requiring material components and lasting for 8 hours, but it only affects myself and hostiles can attempt a new save every hour." } } }, "subclassfeature3.1" : { name : "Healing Hands", source : [["UA:MMT", 2]], minlevel : 3, description: desc([ "As an action, I use points to heal living creature; or 5 points to cure one poison/disease", "With Flurry of Blows, I can replace one unarmed strike with a use of this feature", ]), usages : [0, 0, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200], recovery : "long rest", action : [["action", ""]] }, "subclassfeature6" : { name : "Emissary of Peace", source : [["UA:MMT", 2]], minlevel : 6, description : " [Performance or Persuasion prof]" + "\n " + "I get adv. on Cha checks to calm or counsel peace; not with Deception or Intimidation", skillstxt : "Choose one from: Performance or Persuasion", "douse the flames of war" : { name : "Douse the Flames of War", extraname : "Way of Tranquility 11", source : [["UA:MMT", 1]], description: desc([ "As an action, a creature I touch must make a Wisdom save or have no violent impulses", "If the target is missing any HP it succeeds on the save; The effect lasts for 1 minute", "During this time, it can't attack or cast spells that deal damage or force a saving throw", "This effect ends if the target is attacked, takes damage, or is forced to make a saving throw", "It also ends if the target witnesses any of those things happening to its allies", ]), action : [["action", ""]] }, autoSelectExtrachoices : [{ extrachoice : "douse the flames of war", minlevel : 11 }] }, "subclassfeature17" : { name : "Anger of a Gentle Soul", source : [["UA:MMT", 2]], minlevel : 17, description: desc("As a reaction if another I see goes to 0 HP, I get bonus damage until my next turn ends"), usages : 1, recovery : "short rest", additional : ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "+17", "+18", "+19", "+20"], action : [["reaction", ""]] } } }); ================================================ FILE: WotC material/ua_20161219_Paladin-Sacred-Oaths.js ================================================ var iFileName = "ua_20161219_Paladin-Sacred-Oaths.js"; RequiredSheetVersion("13.0.8"); // This file adds the content from the Unearthed Arcana: Paladin Sacred Oaths article to MPMB's Character Record Sheet // Define the source SourceList["UA:PSO"] = { name : "Unearthed Arcana: Paladin Sacred Oaths", abbreviation : "UA:PSO", group : "Unearthed Arcana", url : "https://media.wizards.com/2016/dnd/downloads/UAPaladin_SO_20161219_1.pdf", date : "2016/12/19" }; // Adds 2 subclasses for the Paladin AddSubClass("paladin", "oath of conquest-ua", { regExpSearch : /^((?=.*(knight tyrant|iron mongers))|((?=.*(conquest|tyranny|tyrant))(((?=.*paladin)|((?=.*(exalted|sacred|holy|divine))(?=.*(knight|fighter|warrior|warlord|trooper))))))).*$/i, subname : "Oath of Conquest", subnameShort: "Conquest", source : [["UA:PSO", 1]], features : { "subclassfeature3" : { name : "Channel Divinity: Conquering Strike", source : [["UA:PSO", 1]], minlevel : 3, description: desc([ "I can use my channel divinity to break a foe's will that I hit with my melee weapon", "The target must make a Wisdom saving throw or become frightened for 1 minute", "The target can repeat this save at the end of each or its turn to end the effect", ]), spellcastingExtra : ["armor of agathys", "command", "hold person", "spiritual weapon", "bestow curse", "fear", "blight", "dominate beast", "dominate person", "insect plague"] }, "subclassfeature3.1" : { name : "Channel Divinity: Guided Strike", source : [["UA:PSO", 1]], minlevel : 3, description: desc("When I make an attack roll, I can add a +10 bonus to the roll after seeing the d20 roll") }, "subclassfeature7" : { name : "Aura of Conquest", source : [["UA:PSO", 1]], minlevel : 7, description: desc("While I'm not incapacitated, enemies in range have disadv. on saves vs. being frightened"), additional : ["", "", "", "", "", "", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "10-foot aura", "30-foot aura", "30-foot aura", "30-foot aura"] }, "subclassfeature15" : { name : "Implacable Spirit", source : [["UA:PSO", 1]], minlevel : 15, description: desc("I can't be charmed"), savetxt : { immune : ["charmed"] } }, "subclassfeature20" : { name : "Invincible Conqueror", source : [["UA:PSO", 2]], minlevel : 20, description: desc([ "As an action, I can gain the following benefits for 1 minute:", "\u2022 I have resistance all damage", "\u2022 I can make an additional attack as part of my Attack action", "\u2022 My melee weapons score critical hits on a roll of 19 or 20", ]), recovery : "long rest", usages : 1, action : [["action", ""]] } } }); AddSubClass("paladin", "oath of treachery-ua", { // Still valid 2021-09-21 regExpSearch : /^((?=.*blackguard)|(((?=.*(treachery|tyranny|tyrant))(?=.*paladin))|((?=.*(profane|unholy))(?=.*(knight|fighter|warrior|warlord|trooper))))).*$/i, subname : "Oath of Treachery", subnameShort: "Treachery", source : [["UA:PSO", 2]], features : { "subclassfeature3" : { name : "Channel Divinity: Conjure Duplicate", source : [["UA:PSO", 2]], minlevel : 3, description: desc([ "As an action, I create 1 illusory duplicate of myself within 30 ft of me for 1 min (conc)", "As a bonus action, I can move it up to 30 ft to a space I can see within 120 ft of me", "I can cast spells as though I was in its space, but still have to use my own senses", "I have advantage on attacks if the target is within 5 ft of the duplicate and me", ]), action : [["action", ""], ['bonus action', 'Move Duplicate']], spellcastingExtra : ["charm person", "expeditious retreat", "invisibility", "mirror image", "gaseous form", "haste", "confusion", "greater invisibility", "dominate person", "passwall"] }, "subclassfeature3.1" : { name : "Channel Divinity: Poison Strike", source : [["UA:PSO", 2]], minlevel : 3, description: desc([ "As a bonus action, I imbue one weapon or piece of ammunition with poison upon touch", "This poison lasts for 1 minute and will affect the next time I hit a target with it", "The target takes 2d10 + my paladin level poison damage immediately after the hit", "I automatically roll 20 on the 2d10 if I have advantage on the attack roll", ]), action : [["bonus action", ""]], additional : levels.map(function (n) { return n < 3 ? "" : "2d10+" + n + " damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (!v.isSpell && (/^(?=.*poison)(?=.*strike).*$/i).test(v.WeaponTextName) && classes.known.paladin && classes.known.paladin.level) { fields.Description += (fields.Description ? '; ' : '') + '+2d10+' + classes.known.paladin.level + ' poison damage (or ' + (classes.known.paladin.level + 20) + ' if adv.)'; }; }, "If I include the words 'Poison Strike' in a weapon's name, it gets an added description of the extra 2d10 + paladin level of poison damage it would do. If I have advantage on the attack, I can treat the 2d10 as rolling 20 in total." ] } }, "subclassfeature7" : { name : "Cull the Herd", source : [["UA:PSO", 3]], minlevel : 7, description: desc("I have adv. on melee attacks against creatures that have an ally of it within 5 ft of it") }, "subclassfeature7.1" : { name : "Treacherous Strike", source : [["UA:PSO", 3]], minlevel : 7, description: desc([ "As a reaction when a creature within 5 ft misses me, I can redirect the attack", "If it can be charmed, it rerolls the attack on a target of my choice within 5 ft of it", ]), recovery : "short rest", usages : 3, action : [["reaction", ""]] }, "subclassfeature15" : { name : "Blackguard's Escape", source : [["UA:PSO", 3]], minlevel : 15, description: desc([ "As a reaction after I am hit by an attack, I can teleport up to 60 ft to a spot I can see", "In doing this, I also become invisible (as the spell) until the end of my next turn", ]), recovery : "short rest", usages : 1, action : [["reaction", ""]], "icon of deceit" : { name : "Icon of Deceit", extraname : "Oath of Treachery 20", source : [["UA:PSO", 3]], description: desc([ "As an action, I can gain the following benefits for 1 minute:", "\u2022 I become invisible", "\u2022 If I have adv. on an attack, I do 20 extra damage with it if it hits", "\u2022 If a creature hits me on its turn, it must make a Wis save or I control its next action", " Provided it can be charmed and I am not incapacitated when it takes the action", ]), recovery : "long rest", usages : 1, action : [["action", ""]] }, autoSelectExtrachoices : [{ extrachoice : "icon of deceit", minlevel : 20 }] } } }); ================================================ FILE: WotC material/ua_20170109_Artificer_dupl.js ================================================ var iFileName = "ua_20170109_Artificer.js"; RequiredSheetVersion("14.0.1-beta"); // This file adds the content from the Unearthed Arcana: Artificer article to MPMB's Character Record Sheet // WARNING: there are no published multiclassing rules for Artificer; the ones provided here are extrapolated from other classes // Define the source SourceList["UA:A"] = { name : "Unearthed Arcana: Artificer", abbreviation : "UA:A", group : "Unearthed Arcana", url : "https://media.wizards.com/2016/dnd/downloads/1_UA_Artificer_20170109.pdf", date : "2017/01/09" }; // Adds a new class, the Artificer, with 2 subclasses // This code was for a big part contributed by RCanine on ENworld ClassList['artificer-ua'] = { regExpSearch : /^(?=.*artificer)(?!.*wizard).*$/i, name : "Artificer", source : [["UA:A", 1]], primaryAbility : "Intelligence", abilitySave : 4, prereqs : "Intelligence 13", improvements : [0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 5, 5, 5], die : 8, saves : ["Con", "Int"], skillstxt : { primary : "Choose three from Arcana, Deception, History, Investigation, Medicine, Nature, Religion, and Sleight of Hand", secondary : "Choose one from Arcana, Deception, History, Investigation, Medicine, Nature, Religion, and Sleight of Hand" }, toolProfs : { primary : [["Thieves' tools", "Dex"], ["Any tool", 2]], secondary : [["Any tool", 1]] }, armorProfs : { primary : [true, true, false, false] }, weaponProfs : { primary : [true, false] }, equipment : "Artificer starting equipment:\n \u2022 A handaxe and a light hammer -or- any two simple weapons;\n \u2022 Scale mail -or- studded leather armor;\n \u2022 A light crossbow and 20 bolts;\n \u2022 A dungeoneer's pack;\n \u2022 Thieves' tools.\n\nAlternatively, choose 5d4 \xD7 10 gp worth of starting equipment instead of both the class' and the background's starting equipment.", subclasses : ["Artificer Specialism", []], subclassGainedLevel : 1, attacks : [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], spellcastingFactor : 3, spellcastingKnown : { spells : [0, 0, 3, 4, 4, 4, 5, 6, 6, 7, 8, 8, 9, 10, 10, 11, 11, 11, 12, 13] }, features : { "subclassfeature1" : { name : "Artificer Specialist", source : [["UA:A", 2]], minlevel : 1, description : desc([ 'Choose an Artificer Specialism and put it in the "Class" field on the first page', "Choose either Alchemist or Gunsmith" ]) }, "magic item analysis" : { name : "Magic Item Analysis", source : [["UA:A", 2]], minlevel : 1, description: desc("I can cast Detect Magic and Identify as rituals without requiring material components"), spellcastingBonus : [{ name : "Magic Item Analysis", spells : ["detect magic"], selection : ["detect magic"], firstCol : SpellRitualTag, }, { name : "Magic Item Analysis", spells : ["identify"], selection : ["identify"], firstCol : SpellRitualTag, }], spellChanges : { "detect magic" : { time : "10 min", changes : "I can cast this spell only as a ritual, thus its casting time is 10 minutes longer." }, "identify" : { time : "11 min", components : "V,S", compMaterial : "", changes : "I can cast this spell without requiring material components, but only as a ritual, thus its casting time is always 10 minutes longer." } } }, "tool expertise" : { name : "Tool Expertise", source : [["UA:A", 3]], minlevel : 2, description: desc("I have expertise with any tool proficiencies I gain from the artificer class"), skillstxt : "expertise with any tool proficiencies gained from the artificer class", eval : function () { if ((/thieve.?s.*tools/i).test(What('Too Text'))) { Checkbox('Too Exp', true); }; }, removeeval : function () { if ((/thieve.?s.*tools/i).test(What('Too Text'))) { Checkbox('Too Exp', false); }; } }, "wondrous invention" : { name : "Wondrous Invention", source : [["UA:A", 3]], minlevel : 2, description: desc('I gain a magic item that I have crafted; Use the "Choose Feature" button above'), additional : levels.map(function (n) { return n < 2 ? "" : n < 5 ? "1 item" : (n < 10 ? 2 : n < 15 ? 3 : n < 20 ? 4 : 5) + " items"; }), extraname : "Magic Item", extraTimes : levels.map(function (n) { return n < 2 ? 0 : n < 5 ? 1 : n < 10 ? 2 : n < 15 ? 3 : n < 20 ? 4 : 5; }), extrachoices : [] //come back to this with the function to make the individual entries }, "spellcasting" : { name : "Spellcasting", source : [["UA:A", 3]], minlevel : 3, description : desc([ "I can cast artificer spells that I know, using Intelligence as my spellcasting ability", "I can use an arcane focus as a spellcasting focus" ]), additional : levels.map(function (n, idx) { return n < 3 ? "" : [0, 0, 3, 4, 4, 4, 5, 6, 6, 7, 8, 8, 9, 10, 10, 11, 11, 11, 12, 13][idx] + " spells known"; }) }, "infuse magic" : { name : "Infuse Magic", source : [["UA:A", 4]], minlevel : 4, description : desc([ "By spending 1 minute, I can infuse one of my artificer spells into a nonmagical item", "This expends a spell slot as normal and the spell must have a casting time of 1 action", "An item holds max one spell for 8 hours; I can have up to my Int mod of infused items", "A creature holding an infused item can use an action to cast the spell, using my ability", "The spell's target is the creature activating it or, with area of effect spells, the item" ]) }, "mechanical servant" : { name : "Mechanical Servant", source : [["UA:A", 4]], minlevel : 6, description : desc([ "I create a construct that obeys my orders; It acts on its own initiative", "I can repair it to 1 HP during a long rest, or build a new one in a week with 1000 gp", "As a reaction when I'm attacked in melee, I can have it make a melee attack back" ]), additional : "Large beast, CR 2 or less", creaturesAdd : [["Mechanical Servant", false, function(AddRemove, prefix) { if (!AddRemove) return; var cObj = MakeCompMenu_CompOptions(prefix, "justCompanions"); if (!cObj.mechanicalserv || !cObj.mechanicalserv.length) { var selectedRace = "Warhorse"; } else { var compOptions = cObj.mechanicalserv.map(function(n) { return n[0] }); var selectedRace = AskUserOptions("Select Mechanical Servant", "Select which beast you would like to have as your mechanical servant.\nThis can be any beast that is Large and that has a challenge rating of 2.\nYou can change the beast at any time using the \"Companion Options\" button at the top of the Companion page.", compOptions, "radio", true); } ApplyCompRace(selectedRace, prefix, "mechanicalserv"); }]] }, "superior attunement" : { name : "Superior Attunement", source : [["UA:A", 4]], minlevel : 5, description : "", additional : levels.map(function (n) { return n < 5 ? "" : "attune to " + (n < 15 ? 4 : n < 20 ? 5 : 6) + " magic items instead of 3"; }) }, "soul of artifice" : { name : "Soul of Artifice", source : [["UA:A", 4]], minlevel : 20, description: desc("I gain a +1 bonus to all saving throws per magic item I am currently attuned to"), savetxt : { text : ["+1 to all saves per attuned magic item"] } } } }; // Alchemist subclass for the Artificer AddSubClass("artificer-ua", "alchemist", { regExpSearch : /^(?=.*alchemist)(?!.*wizard).*$/i, subname : "Alchemist", fullname : "Alchemist", source : [["UA:A", 5]], features : { "subclassfeature1" : { name : "Alchemist's Satchel", source : [["UA:A", 5]], minlevel : 1, description : desc([ "I craft an Alchemist's Satchel, a magic item with which I can create concoctions", "Whenever I reach in, it holds the material for the Alchemical Formula I want to use", "If lost, I craft another by spending 8 hours a day for 3 days and 100 gp of materials" ]) }, "subclassfeature1.1" : { name : "Alchemy Formulae", source : [["UA:A", 5]], minlevel : 1, description : desc([ "I learn Alchemical Formulae that I can use if I have my Alchemist's Satchel within reach", "I learn the Alchemical Acid and Fire formulae, and additional depending on my level", 'Use the "Choose Feature" button above to select additional Alchemical Formulae' ]), additional : levels.map(function (n) { if (n < 3 ? 1 : n < 9 ? 2 : n < 14 ? 3 : n < 17 ? 4 : 5) + " additional formula"; }), extraname : "Alchemical Formula", extrachoices : ["Healing Draught", "Smoke Stick", "Swift Step Draught", "Tanglefoot Bag", "Thunderstone"], extraTimes : levels.map(function (n) { return n < 3 ? 1 : n < 9 ? 2 : n < 14 ? 3 : n < 17 ? 4 : 5; }), "healing draught" : { name : "Healing Draught", source : [["UA:A", 5]], description : desc([ "As an action, I can take a vial of healing liquid from my satchel, which lasts for 1 hour", "Anyone can drink this as an action, healing in doing so, after which the vial disappears", "One vial heals a number of d8 equal to half my artificer level (rounded up) in HP", "After being healed this way, a creature can't do so again until it finishes a long rest", "While a Healing Draught exists, I can't use this formula to create another one" ]), action : [["action", ""]], additional : levels.map(function (n) { return "Heals " + Math.ceil(n / 2) + "d8"; }) }, "smoke stick" : { name : "Smoke Stick", source : [["UA:A", 5]], description : desc([ "As an action, I can take a smoke stick from my satchel and throw it up to 30 ft away", "The stick produces smoke in a 10-ft radius around it, blocking vision, incl. darkvision", "It disappears after 1 minute; After creating one, I can't create a new one for 1 minute" ]), action : [["action", ""]] }, "swift step draught" : { name : "Swift Step Draught", source : [["UA:A", 5]], description : desc([ "As a bonus action, I take a vial of brown liquid from my satchel, which lasts for 1 minute", "Any creature can drink this vial as an action, gaining +20 ft speed for 1 minute", "After use, the vial disappears; After creating one, I can't create a new one for 1 minute" ]), action : [["bonus action", ""]] }, "tanglefoot bag" : { name : "Tanglefoot Bag", source : [["UA:A", 6]], description : desc([ "As an action, I can hurl a bag of black tar to a point on the ground within 30 ft", "It bursts and covers the ground with sticky goo in a 5-ft radius, which lasts for 1 min", "It is difficult terrain and anyone starting its turn in it has its speed halved for that turn", "After creating one, I can't create a new one for 1 minute" ]), action : [["action", ""]] }, "thunderstone" : { name : "Thunderstone", source : [["UA:A", 6]], description : desc([ "As an action, I can hurl a crystalline shard at a creature/object/surface within 30 ft", "It shatters on impact and any creature within 10 ft must make a Constitution save", "If failed, a creature is knocked prone and pushed 10 ft away from the point of impact" ]), action : [["action", ""]] } }, "subclassfeature1.2" : { name : "Formula: Alchemical Acid", source : [["UA:A", 5]], minlevel : 1, description : desc([ "As an action, I can hurl a vial of acid at a creature or object within 30 ft", "It shatters on impact and the target must succeed on a Dex save or take acid damage", "An object automatically fails its saving throw and takes maximum damage" ]), additional : levels.map(function (n) { return Math.ceil(n / 2) + "d6 acid damage"; }), action : [["action", ""]], weaponOptions : [{ regExpSearch : /^(?=.*alchemical)(?=.*acid).*$/i, name : "Alchemical Acid", source : [["UA:A", 5]], list : "artificer", ability : 4, type : "Artificer", damage : [1, 6, "acid"], range : "30 ft", description : "Dex save, success - no damage; Objects automatically take maximum damage", abilitytodamage : false, dc : true, artAlcAcid : true, selectNow : true }], calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.artAlcAcid && classes.known['artificer-ua'] && classes.known['artificer-ua'].level) { fields.Proficiency = true; fields.Damage_Die = Math.ceil(classes.known['artificer-ua'].level / 2) + 'd6'; }; }, ""] } }, "subclassfeature1.3" : { name : "Formula: Alchemical Fire", source : [["UA:A", 5]], minlevel : 1, description : desc([ "As an action, I can hurl a vial of volatile liquid at a creature/object/surface within 30 ft", "It explodes and all within a 5-ft radius must succeed on a Dex save or take fire damage" ]), additional : levels.map(function (n) { return Math.ceil(n / 3) + "d6 fire damage"; }), action : [["action", ""]], weaponOptions : [{ regExpSearch : /^(?=.*alchemical)(?=.*fire).*$/i, name : "Alchemical Fire", source : [["UA:A", 5]], list : "artificer", ability : 4, type : "Artificer", damage : [1, 6, "fire"], range : "30 ft", description : "Dex save, success - no damage; All creatures within 5-ft of the point of impact have to save", abilitytodamage : false, dc : true, artAlcFire : true, selectNow : true, selectNow : true }], calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.artAlcFire && classes.known['artificer-ua'] && classes.known['artificer-ua'].level) { fields.Proficiency = true; fields.Damage_Die = Math.ceil(classes.known['artificer-ua'].level / 3) + 'd6'; }; }, ""] } } } }); // Gunsmith subclass for the Artificer AddSubClass("artificer-ua", "gunsmith", { regExpSearch : /^(?=.*gunsmith)(?!.*wizard).*$/i, subname : "Gunsmith", fullname : "Gunsmith", source : [["UA:A", 6]], features : { "subclassfeature1" : { name : "Master Smith", source : [["UA:A", 6]], minlevel : 1, description : desc(["I gain proficiency with smith's tools and I learn the mending cantrip"]), spellcastingBonus : [{ name : "Master Smith", spells : ["mending"], selection : ["mending"] }], toolProfs : ["Smith's tools"] }, "subclassfeature1.1" : { name : "Thunder Cannon", source : [["UA:A", 6]], minlevel : 1, description : desc([ "I craft a magical firearm, my thunder cannon, with which I am proficient", "If lost, I craft another by spending 8 hours a day for 3 days and 100 gp of materials" ]), weaponProfs : [false, false, ["thunder cannon"]], action : [["bonus action", " (reload)"]], weaponOptions : [{ regExpSearch : /^(?!.*(blast|monger|piercing|explosive|round))(?=.*\bthunder)(?=.*cannon\b).*$/i, name : "Thunder Cannon", source : [["UA:A", 6]], ability : 2, type : "Thunder Cannon", damage : [2, 6, "piercing"], range : "150/500 ft", weight : 12, // made up, based on the weight of real rifles description : "Ammunition, loading, two-handed, bonus action to reload", abilitytodamage : true, ammo : "Arcane Magazine", selectNow : true }], ammoOptions : [{ name : "Arcane Magazine", source : [["UA:A", 7]], weight : 0.2, // based on the weight of renaissance bullets from the DMG icon : "Bullets", invName : "Thunder Cannon Rounds", alternatives : [/^((?=.*arcane)(?=.*magazine)|(?=.*thunder)(?=.*cannon)(?=.*rounds)).*$/i] }] }, "subclassfeature1.2" : { name : "Arcane Magazine", source : [["UA:A", 6]], minlevel : 1, description : desc([ "I craft a leather bag that holds my tools, ammunition, and materials for the weapon", "I can use it to produce 40 rounds of ammo after a long rest or 10 after a short rest", "If lost, I can create a new one as part of a long rest with 25 gp of materials" ]) }, "subclassfeature3" : { name : "Thunder Monger", source : [["UA:A", 6]], minlevel : 3, description : desc(["As an action, I can make an attack with my thunder cannon that does extra damage"]), additional : levels.map(function (n) { if (n < 3) return ""; return "+" + Math.floor((n - 1) / 2) + "d6 thunder damage"; }), action : [["action", ""]], weaponOptions : [{ regExpSearch : /^(?=.*\bthunder)(?=.*monger\b).*$/i, name : "Thunder Cannon (Monger)", source : [["UA:A", 6]], ability : 2, type : "Thunder Cannon", damage : [2, 6, "piercing"], range : "150/500 ft", description : "Ammunition, loading, two-handed, bonus action to reload", abilitytodamage : true, ammo : "Arcane Magazine", artTCmonger : true, selectNow : true }], calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.artTCmonger && classes.known['artificer-ua'] && classes.known['artificer-ua'].level > 2) { fields.Description += '; +' + Math.floor((classes.known['artificer-ua'].level - 1) / 2) + 'd6 thunder damage'; }; }, ""] } }, "subclassfeature9" : { name : "Blast Wave", source : [["UA:A", 6]], minlevel : 9, description : desc([ "As an action, I can make a special attack with my thunder cannon in a 15-ft cone", "Creatures in the area must make a Str save or take damage and pushed back 10 ft" ]), additional : levels.map(function (n) { return n < 9 ? "" : n < 13 ? "2d6 force damage" : n < 17 ? "3d6 force damage" : "4d6 force damage"; }), action : [["action", ""]], weaponOptions : [{ regExpSearch : /^(?=.*\bthunder)(?=.*cannon\b)(?=.*\bblast)(?=.*wave\b).*$/i, name : "Thunder Cannon (Blast Wave)", source : [["UA:A", 6]], ability : 4, type : "Thunder Cannon", damage : [2, 6, "force"], range : "15-ft cone", description : "Ammunition, loading, two-handed, bonus action to reload; Str save or damage and pushed back 10 ft", dc : true, abilitytodamage : false, ammo : "Arcane Magazine", artTCblast : true, selectNow : true }], calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.artTCblast && classes.known['artificer-ua'] && classes.known['artificer-ua'].level >= 13) { fields.Damage_Die = (classes.known['artificer-ua'].level < 17 ? 3 : 4) + 'd6'; }; }, ""] } }, "subclassfeature14" : { name : "Piercing Round", source : [["UA:A", 6]], minlevel : 14, description : desc([ "As an action, I can make a special attack with my thunder cannon in a 30-ft line", "Creatures in the 5-ft wide line must make a Dex save or take damage" ]), additional : levels.map(function (n) { return n < 14 ? "" : n < 19 ? "4d6 lightning damage" : "6d6 lightning damage"; }), action : [["action", ""]], weaponOptions : [{ regExpSearch : /^(?=.*\bthunder)(?=.*cannon\b)(?=.*\bpiercing)(?=.*round\b).*$/i, name : "Thunder Cannon (Piercing Round)", source : [["UA:A", 6]], ability : 4, type : "Thunder Cannon", damage : [4, 6, "lightning"], range : "30-ft line", description : "Ammunition, loading, two-handed, bonus action to reload; 5 ft wide line; Dex save or damage", dc : true, abilitytodamage : false, ammo : "Arcane Magazine", artTCpiercing : true, selectNow : true }], calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.artTCpiercing && classes.known['artificer-ua'] && classes.known['artificer-ua'].level >= 19) { fields.Damage_Die = '6d6'; }; }, ""] } }, "subclassfeature17" : { name : "Explosive Round", source : [["UA:A", 7]], minlevel : 17, description : desc([ "As an action, I can make a special exploding attack with my thunder cannon", "A 30-ft radius sphere somewhere within range of the thunder cannon is affected", "Creatures in the area must make a Dexterity saving throw or take 4d8 fire damage" ]), additional : "4d8 fire damage", action : [["action", ""]], weaponOptions : [{ regExpSearch : /^(?=.*\bthunder)(?=.*cannon\b)(?=.*\bexplosive)(?=.*round\b).*$/i, name : "Thunder Cannon (Explosive Round)", source : [["UA:A", 7]], ability : 4, type : "Thunder Cannon", damage : [4, 8, "fire"], range : "500 ft", description : "Ammunition, loading, two-handed, bonus action to reload; 30-ft radius sphere; Dex save or damage", dc : true, abilitytodamage : false, ammo : "Arcane Magazine", selectNow : true }] } } }); // Set the Artificer class spell list and Create the choices for the wondrous items class feature of the artificer var UAA_SetArtificerAttr = function(){ var artSp = [ // level 1 "alarm", "cure wounds", "disguise self", "expeditious retreat", "false life", "jump", "longstrider", "sanctuary", "shield of faith", // level 2 "aid", "alter self", "arcane lock", "blur", "continual flame", "darkvision", "enhance ability", "enlarge/reduce", "invisibility", "lesser restoration", "levitate", "magic weapon", "protection from poison", "rope trick", "see invisibility", "spider climb", // level 3 "blink", "fly", "gaseous form", "glyph of warding", "haste", "protection from energy", "revivify", "water breathing", "water walk", // level 4 "arcane eye", "death ward", "fabricate", "freedom of movement", "leomund's secret chest", "mordenkainen's faithful hound", "mordenkainen's private sanctum", "otiluke's resilient sphere", "stone shape", "stoneskin" ]; for (var a = 0; a < artSp.length; a++) { var anArtSp = SpellsList[artSp[a]]; if(anArtSp && anArtSp.classes && anArtSp.classes.indexOf("artificer-ua") === -1) anArtSp.classes.push("artificer-ua"); }; var artMi = [ ["bag of holding"], ["cap of water breathing"], ["driftglobe"], ["goggles of night"], ["sending stones"], ["alchemy jug", 5], ["helm of comprehending languages", 5], ["lantern of revealing", 5], ["ring of swimming", 5], ["robe of useful items", 5], ["rope of climbing", 5], ["wand of magic detection", 5], ["wand of secrets", 5], ["bag of beans", 10], ["chime of opening", 10], ["decanter of endless water", 10], ["eyes of minute seeing", 10], ["folding boat", 10], ["heward's handy haversack", 10], ["boots of striding and springing", 15], ["bracers of archery", 15], ["brooch of shielding", 15], ["broom of flying", 15], ["hat of disguise", 15], ["slippers of spider climbing", 15], ["eyes of the eagle", 20], ["gem of brightness", 20], ["gloves of missile snaring", 20], ["gloves of swimming and climbing", 20], ["ring of jumping", 20], ["ring of mind shielding", 20], ["wings of flying", 20] ]; var theObj = ClassList['artificer-ua'].features["wondrous invention"]; for (var a = 0; a < artMi.length; a++) { var MI0 = artMi[a][0]; var MI1 = artMi[a][1]; var anArtMi = MagicItemsList[MI0]; if (!anArtMi) continue; var theI = anArtMi.name + (MI1 ? " (prereq: level " + MI1 + " artificer)" : ""); var theILC = theI.toLowerCase(); theObj[theILC] = { name : anArtMi.name, description : "", source : anArtMi.source, eval : 'AddMagicItem("' + anArtMi.name + '");', removeeval : 'if (CurrentMagicItems.known.indexOf("' + MI0 + '") != -1) { MagicItemClear(CurrentMagicItems.known.indexOf("' + MI0 + '") + 1, true); };' }; if (MI1) theObj[theILC].prereqeval = "classes.known['artificer-ua'].level >= " + MI1; theObj.extrachoices.push(theI); }; }(); // Add the mechanical servant as an option on the companion page CompanionList.mechanicalserv = { name : "Mechanical Servant", nameTooltip : "Artificer: Mechanical Servant", nameOrigin : "Artificer 6", nameMenu : "Mechanical Servant (2017 Artificer feature)", source : [["UA:A", 4]], includeCheck : function(sCrea, objCrea, iCreaCR) { return objCrea.type.toLowerCase() === "beast" && objCrea.size === 2 && iCreaCR <= 2 ? true : false; }, action : [["reaction", "Mechanical Servant (if attacked)"]], notes : [{ name : "The mechanical servant has the statistics", description : [ "of a chosen large beast of challenge rating 2 or lower", "It has the Construct type, understands any language that I know, and has 60 ft Darkvision", "In addition, it is immune to poison damage, being poisoned, and being charmed" ].join("\n "), joinString : " " }, { name : "I can have one servant at a time", description : [ "If it dies, I can repair it or create a new one", "I can repair the servant over the course of a long rest, which restores it to 1 HP", "I can build a new servant by spending 8 hours a day for 7 days and 1000 gp of materials" ].join("\n "), joinString : "; " }, { name : "The servant rolls initiative and takes actions as normal", description : "obeying my commands as best it can", joinString : ", " }, { name : "As a reaction when I am attacked", description : [ "in melee and my mechanical servant is within 5 ft of me,", "I can command the servant to use its reaction to make a melee attack against the attacker" ].join("\n "), joinString : " " }], attributesAdd : { header : "Servant", type : "Construct", damage_immunities : "poison", condition_immunities : "charmed, poisoned", senses : "Darkvision 60 ft", languages : "understands the languages its creator speaks" }, attributesChange : function(sCrea, objCrea) { // Fix duplicate stuff if (!sCrea || !CreatureList[sCrea]) return; var oOrigCrea = CreatureList[sCrea]; // Fix possible duplicate darkvision if the base creature already has it if (oOrigCrea.senses) { var rxDarkvision = /[,;]?.?darkvision.(\d+).?(ft|m)|(\d+).?(ft|m).?darkvision/i; var mDarkvisionMatch = oOrigCrea.senses.match(rxDarkvision); if (mDarkvisionMatch) { var iDvRange = mDarkvisionMatch[2].toLowerCase === "m" ? Math.round(mDarkvisionMatch[1] / UnitsList.metric.length, 0) : Number(mDarkvisionMatch[1]); objCrea.senses = objCrea.senses.replace( (iDvRange >= 60 ? /[,;]? Darkvision 60 ft/i : rxDarkvision), ""); } } // Fix possible duplicate poison damage immunity if (oOrigCrea.damage_immunities && /poison/i.test(oOrigCrea.damage_immunities)) { objCrea.damage_immunities = objCrea.damage_immunities.replace(/[,;]? poison/i, ""); } // Fix possible duplicate condition immunities if (oOrigCrea.condition_immunities && /charmed/i.test(oOrigCrea.damage_immunities)) { objCrea.damage_immunities = objCrea.damage_immunities.replace(/[,;]? charmed/i, ""); } if (oOrigCrea.condition_immunities && /poisoned/i.test(oOrigCrea.damage_immunities)) { objCrea.damage_immunities = objCrea.damage_immunities.replace(/[,;]? poisoned/i, ""); } } } ================================================ FILE: WotC material/ua_20170116_Ranger-and-Rogue.js ================================================ var iFileName = "ua_20170116_Ranger-and-Rogue.js"; RequiredSheetVersion("13.2.0"); // This file adds the content from the Unearthed Arcana: Ranger and Rogue article to MPMB's Character Record Sheet // Define the source SourceList["UA:RnR"] = { name : "Unearthed Arcana: Ranger and Rogue", abbreviation : "UA:RnR", group : "Unearthed Arcana", url : "https://media.wizards.com/2016/dnd/downloads/2017_01_UA_RangerRogue_0117JCMM.pdf", date : "2017/01/16" }; // Adds 3 subclasses: 2 for the Ranger (and the Revised Ranger), and 1 for the Rogue var UARnR_theHorizonWalkerSubclass = { regExpSearch : /^(?=.*horizon)(?=.*walker).*$/i, subname : "Horizon Walker", source : [["UA:RnR", 1]], fullname : "Horizon Walker", features : { "subclassfeature3" : { name : "Planar magic", source : [["UA:RnR", 1]], minlevel : 3, description : desc([ "I add a spell to my known spells at level 3, 5, 9, 13, and 17", "These count as ranger spells, but do not count against the number of spells I can know" ]), spellcastingExtra : ["protection from evil and good", "alter self", "protection from energy", "banishment", "teleportation circle"], spellcastingExtraApplyNonconform : true }, "subclassfeature3.1" : { name : "Planar Walker", source : [["UA:RnR", 1]], minlevel : 3, description : desc([ "As a bonus action, I choose an enemy within 30 ft of me that I can see", "Until the end of this turn, my attack against that enemy ignore damage resistances", "In addition, the first time I hit it this turn, it takes an extra 1d6 force damage" ]), action : [["bonus action", ""]] }, "subclassfeature3.2" : { name : "Portal Lore", source : [["UA:RnR", 1]], minlevel : 3, description : desc([ "As an action, I sense the distance and direction to any planar portals within 1000 ft", "I also sense to which plane the portal leads to; I can't sense details if obscured by magic", "I can use this feature additional times by expending spell slots of 2nd level or higher" ]), usages : 1, recovery : "short rest", action : [["action", ""]] }, "subclassfeature7" : { name : "Ethereal Step", source : [["UA:RnR", 1]], minlevel : 7, description: desc("As a bonus action, I can cast the Etherealness spell, which lasts until the end of the turn"), usages : 1, recovery : "short rest", action : [["bonus action", ""]], spellcastingBonus : [{ name : "Ethereal Step", spells : ["etherealness"], selection : ["etherealness"], firstCol : 'oncesr' }], spellChanges : { "etherealness" : { time : "1 bns", duration : "1 rnd", description : "I go to Ethereal Plane; move there, but able to perceive 60 ft into the normal plane", changes : "Using my Ethereal Step class feature I can cast Etherealness as a bonus action once per short rest, but it only affects myself and lasts until the end of my turn." } } }, "subclassfeature11" : { name : "Distant Strike", source : [["UA:RnR", 1]], minlevel : 11, description : desc([ "With the Attack action, I can teleport 10 ft before each attack, to a place I can see", "If I attack two different creatures with this action, I get an extra attack against a third" ]) }, "subclassfeature15" : { name : "Spectral Defense", source : [["UA:RnR", 1]], minlevel : 15, description: desc("As a reaction when I take damage, I can halve that damage against me"), action : [["reaction", ""]] } } }; AddSubClass("ranger", "horizon walker-ua", UARnR_theHorizonWalkerSubclass); var UARnR_thePrimevalGuardianSubclass = { // Still valid 2021-09-21 regExpSearch : /^(?=.*primeval)(?=.*guardian).*$/i, subname : "Primeval Guardian", source : [["UA:RnR", 2]], features : { "subclassfeature3" : { name : "Guardian magic", source : [["UA:RnR", 2]], minlevel : 3, description: desc("I get bonus spells known, which do not count against the number of spells I can know"), spellcastingExtra : ["entangle", "enhance ability", "conjure animals", "giant insect", "insect plague"], spellcastingExtraApplyNonconform : true }, "subclassfeature3.1" : { name : "Guardian Soul", source : [["UA:RnR", 2]], minlevel : 3, description: desc([ "As a bonus action, I transform to or from a guardian form, changing me as follows:", "\u2022 I grow to Large size, all my movement is reduced to 5 ft, and I get +5 ft reach", "\u2022 I gain half my ranger level in temporary HP at the start of each of my turns", "This ends when I'm incapacitated; When it ends, I lose all temporary HP I got from it", ]), additional : ["", "", "1 temp HP per round", "2 temp HP per round", "2 temp HP per round", "3 temp HP per round", "3 temp HP per round", "4 temp HP per round", "4 temp HP per round", "5 temp HP per round", "5 temp HP per round", "6 temp HP per round", "6 temp HP per round", "7 temp HP per round", "7 temp HP per round", "8 temp HP per round", "8 temp HP per round", "9 temp HP per round", "9 temp HP per round", "10 temp HP per round"], action : [["bonus action", " (start/end)"]] }, "subclassfeature3.2" : { name : "Piercing Thorns", source : [["UA:RnR", 2]], minlevel : 3, description: desc("Once each turn, a hit from my weapon attack can deal 1d6 extra piercing damage"), calcChanges : { atkAdd : [ function (fields, v) { if (!v.isSpell) fields.Description += (fields.Description ? '; ' : '') + 'Once per turn, +1d6 piercing damage'; }, "My weapon attacks can deal 1d6 extra piercing damage once per turn." ] } }, "subclassfeature7" : { name : "Ancient Fortitude", source : [["UA:RnR", 2]], minlevel : 7, description: desc([ "When I assume my guardian form, my HP \u0026 max HP increase by twice my ranger level", "When I leave the form, my max HP reverts back, and any excess HP I have is lost", ]), additional : ["", "", "", "", "", "", "", "+16 max HP", "+18 max HP", "+20 max HP", "+22 max HP", "+24 max HP", "+26 max HP", "+28 max HP", "+30 max HP", "+32 max HP", "+34 max HP", "+36 max HP", "+38 max HP", "+40 max HP"] }, "subclassfeature11" : { name : "Rooted Defense", source : [["UA:RnR", 2]], minlevel : 11, description: desc("While in guardian form, the ground within 30 ft of me is difficult terrain for hostiles") }, "subclassfeature15" : { name : "Guardian Aura", source : [["UA:RnR", 2]], minlevel : 15, description: desc([ "While I'm in my guardian form, I heal allies that start their turn within 30 ft of me", "They heal half my ranger level if they are below half HP and not undead or constructs", ]), additional : ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "Heals 7 HP", "Heals 8 HP", "Heals 8 HP", "Heals 9 HP", "Heals 9 HP", "Heals 10 HP"] } } }; AddSubClass("ranger", "primeval guardian-ua", UARnR_thePrimevalGuardianSubclass); if (ClassList["rangerua"]) { // add them to the Revised Ranger as well, if it is defined var UARnR_theHorizonConclaveSubclass = newObj(UARnR_theHorizonWalkerSubclass); UARnR_theHorizonConclaveSubclass.subname = "Horizon Conclave"; UARnR_theHorizonConclaveSubclass.regExpSearch = /^(?=.*horizon)(?=.*conclave).*$/i delete UARnR_theHorizonConclaveSubclass.fullname; AddSubClass("rangerua", "horizon conclave-ua", UARnR_theHorizonConclaveSubclass); var UARnR_thePrimevalGuardianConclaveSubclass = newObj(UARnR_thePrimevalGuardianSubclass); UARnR_thePrimevalGuardianConclaveSubclass.subname = "Primeval Guardian Conclave"; delete UARnR_thePrimevalGuardianConclaveSubclass.fullname; AddSubClass("rangerua", "primeval guardian conclave-ua", UARnR_thePrimevalGuardianConclaveSubclass); }; AddSubClass("rogue", "scout-ua", { regExpSearch : /scout/i, subname : "Scout", source : [["UA:RnR", 2]], features : { "subclassfeature3" : { name : "Skirmisher", source : [["UA:RnR", 3]], minlevel : 3, description : desc([ "As a reaction when a hostile ends its turn within 5 ft of me, I can move half my speed", "This movement does not provoke attacks of opportunity" ]), action : [["reaction", ""]] }, "subclassfeature3.1" : { name : "Survivalist", source : [["UA:RnR", 3]], minlevel : 3, description: desc("I gain proficiency and expertise with the Nature and Survival skills"), skills : [['Nature', 'full'], ['Survival', 'full']] }, "subclassfeature9" : { name : "Superior Mobility", source : [["UA:RnR", 3]], minlevel : 9, description: desc("I gain +10 ft to my walking speed (and swimming/climbing speed, if applicable)"), speed : { allModes : { bonus : "+10", exclude : ["fly", "burrow"] } } }, "subclassfeature13" : { name : "Ambush Master", source : [["UA:RnR", 3]], minlevel : 13, description: desc([ "As a bonus action in the first combat round with a surprised foe, I can lead the ambush", "If I do so, allies who can see me gets +5 to their initiative roll, up to my initiative value", "Also, each ally gains +10 ft to its speed that lasts until the end their next turn", ]), action : [["bonus action", " (first round)"]] }, "subclassfeature17" : { name : "Sudden Strike", source : [["UA:RnR", 3]], minlevel : 17, description: desc([ "With the Attack action, I can make one additional attack as a bonus action", "This attack can benefit from my Sneak Attack even if I already used it this turn", "However, I still can't use Sneak Attack on a single target more than once per turn", ]), action : [["bonus action", " (with Attack action)"]] } } }); ================================================ FILE: WotC material/ua_20170206_Sorcerous-Origins.js ================================================ var iFileName = "ua_20170206_Sorcerous-Origins.js"; RequiredSheetVersion("13.1.14"); // This file adds the content from the Unearthed Arcana: Sorcerous Origins article to MPMB's Character Record Sheet // Define the source SourceList["UA:SO"] = { name : "Unearthed Arcana: Sorcerous Origins", abbreviation : "UA:SO", group : "Unearthed Arcana", url : "https://media.wizards.com/2017/dnd/downloads/26_UASorcererUA020617s.pdf", date : "2017/02/06" }; // Adds 4 subclasses for the Sorcerer //this code includes contributions by /u/SoilentBrad, as well as LamentingDemon on GitHub AddSubClass("sorcerer", "favored soul-ua2", { regExpSearch : /^(?=.*favou?red)(?=.*soul).*$/i, subname : "Favored Soul", source : [["UA:SO", 1]], fullname : "Favored Soul", spellcastingList : { "class" : ["cleric", "sorcerer"] }, features : { "subclassfeature1" : { name : "Divine Magic", source : [["UA:SO", 1]], minlevel : 1, description: desc([ "When I select my 1st level or higher spells, I can also pick spells from the cleric spell list", "These cleric spells count as sorcerer spells for me", ]), }, "subclassfeature1.1" : { name : "Supernatural Resilience", source : [["UA:SO", 1]], minlevel : 1, description: desc("My hit point maximum increases by an amount equal to my sorcerer level"), calcChanges : { hp : function (totalHD) { if (classes.known.sorcerer) { return [classes.known.sorcerer.level, "Supernatural Resilience (sorcerer level)"]; } } } }, "subclassfeature1.2" : { name : "Favored by the Gods", source : [["UA:SO", 1]], minlevel : 1, description: desc("If I fail a saving throw or miss with an attack roll, I can add 2d4 to the total"), recovery : "short rest", usages : 1 }, "subclassfeature6" : { name : "Blessed Countenance", source : [["UA:SO", 1]], minlevel : 6, description: desc([ 'Choose an otherworldly quality using the "Choose Feature" button above', "When my proficiency bonus applies to a Charisma check, I double that bonus", ]), choices : ["Beautiful", "Youthful", "Kind", "Imposing"], "beautiful" : { name : "Beautiful", source : [["UA:SO", 1]], description: desc([ "My appearance takes on an otherworldly quality of beauty", "When my proficiency bonus applies to a Charisma check, I double that bonus", ]), }, "youthful" : { name : "Youthful", source : [["UA:SO", 1]], description: desc([ "My appearance takes on an otherworldly quality of youthfulness", "When my proficiency bonus applies to a Charisma check, I double that bonus", ]), }, "kind" : { name : "Kind", source : [["UA:SO", 1]], description: desc([ "My appearance takes on an otherworldly quality of kindness", "When my proficiency bonus applies to a Charisma check, I double that bonus", ]), }, "imposing" : { name : "Imposing", source : [["UA:SO", 1]], description: desc([ "My appearance takes on an otherworldly quality of imposingness", "When my proficiency bonus applies to a Charisma check, I double that bonus", ]), }, skillstxt : "I gain expertise in any Charisma-based skill I'm proficient with", skills : [["Deception", "only"], ["Intimidation", "only"], ["Performance", "only"], ["Persuasion", "only"]] }, "subclassfeature14" : { name : "Divine Purity", source : [["UA:SO", 1]], minlevel : 14, description: desc("I become immune to disease and poison"), savetxt : { immune : ["poison", "disease"] } }, "subclassfeature18" : { name : "Unearthly Recovery", source : [["UA:SO", 1]], minlevel : 18, description: desc([ "As a bonus action when I have less than half of my max HP, I can heal myself", "I regain a number of HP equal to half my maximum hit points", ]), action : [["bonus action", ""]], recovery : "long rest", usages : 1 } } }); //this code includes contributions by /u/SoilentBrad, as well as Toby L. AddSubClass("sorcerer", "phoenix sorcery-ua", { // Still valid 2021-09-21 regExpSearch : /^(?=.*phoenix)(?=.*(sorcerer|sorcery|witch)).*$/i, subname : "Phoenix Sorcery", source : [["UA:SO", 1]], fullname : "Phoenix Sorcerer", features : { "subclassfeature1" : { name : "Ignite", source : [["UA:SO", 2]], minlevel : 1, description: desc("As an action, I can magically ignite a flammable object by touching it with my hand"), action : [["action", ""]] }, "subclassfeature1.1" : { name : "Mantle of Flame", source : [["UA:SO", 2]], minlevel : 1, description : desc([ "As a bonus action, I can wreathe myself in fire for 1 minute, gaining these benefits:", " - I shed bright light in a 30-ft radius and dim light for an additional 30 ft", " - I deal my Charisma modifier in fire damage to all that touch me", " - I also deal this damage to all that hit me with a melee attack from within 5 ft", " - When I roll for fire damage on my turn, I add my Charisma damage to the result" ]), action : [["bonus action", ""]], recovery : "long rest", usages : 1 }, "subclassfeature6" : { name : "Phoenix Spark", source : [["UA:SO", 2]], minlevel : 6, description : desc([ "As a reaction when I am reduced to 0 HP, I can draw on the phoenix to stay at 1 HP", "All creatures within 10 ft of me take half my sorcerer level + my Cha mod fire damage", "If I have Mantle of Flame active, this damage is my sorcerer level + twice my Cha mod", "If I use this feature, my Mantle of Flame immediately ends" ]), additional : levels.map( function(n) { if (n < 6) return ""; return Math.floor(n / 2) + "+Cha \u007Cor\u007C " + n + "+2\xD7Cha"; }), action : [["reaction", ""]], recovery : "long rest", usages : 1 }, "subclassfeature14" : { name : "Nourishing Fire", source : [["UA:SO", 2]], minlevel : 14, description : desc([ "When I cast a spell using a spell slot that includes a fire damage roll, I regain HP", "The HP regained is equal to the spell slot level + my Charisma modifier" ]) }, "subclassfeature18" : { name : "Form of the Phoenix", source : [["UA:SO", 2]], minlevel : 18, description : desc([ "While my Mantle of Flame is active, I gain the following additional benefits:", "- I have a flying speed of 40 ft and can hover", "- I have resistance to all damage", "- If I use my Phoenix Spark, it deals an extra 20 fire damage to each creature" ]), dmgres : [["All", "All (Mantle of Flame)"]] } } }); //this code includes contributions by /u/SoilentBrad AddSubClass("sorcerer", "sea sorcery-ua", { // Still valid 2021-09-21 regExpSearch : /^(?=.*sea)(?=.*(sorcerer|sorcery|witch)).*$/i, subname : "Sea Sorcery", source : [["UA:SO", 2]], fullname : "Sea Sorcerer", features : { "subclassfeature1" : { name : "Soul of the Sea", source : [["UA:SO", 3]], minlevel : 1, description: desc("I can breathe underwater and I have a swim speed equal to my walking speed"), speed : { swim : { spd : "walk", enc : "walk" } } }, "subclassfeature1.1" : { name : "Curse of the Sea", source : [["UA:SO", 3]], minlevel : 1, description : desc([ "I can curse a target that I hit with a cantrip or that fails its save against my cantrip", "This lasts until the end of my next turn or until I curse another target like this", "Once per turn when I cast a spell, I can trigger an active curse, if a condition is met", " - If spell dealt cold damage to it, its has -15 ft speed until the end of my next turn", " - If the spell dealt lightning damage to it, that damage is increased with my Cha mod", " - If the spell moved the target, it is moved an additional 15 ft", "Only one of these effects can be applied, even if the spell meets multiple conditions", "If the spell triggering the curse is a cantrip, the target stays cursed for another round" ]) }, "subclassfeature6" : { name : "Watery Defense", source : [["UA:SO", 3]], minlevel : 6, description : desc([ "I gain resistance to fire damage", "I can protect myself when an attack deals bludgeoning, piercing, or slashing damage", "As a reaction when that happens, I reduce the damage by my sorcerer level + Charisma", "I can then also move up to 30 ft without provoking opportunity attacks" ]), additional : levels.map( function(n) { if (n < 6) return ""; return n + " + Charisma score"; }), action : [["reaction", ""]], recovery : "short rest", usages : 1, dmgres : ["Fire"] }, "subclassfeature14" : { name : "Shifting Form", source : [["UA:SO", 3]], minlevel : 14, description : desc([ "I gain the ability to enter a liquid state while moving, squeezing through small spaces", "When I move on my turn, I take half damage from opportunity attacks", "I can move through any enemy's space, but can't willingly end my move in that space", "On my turn, I can move through any opening of at least 3 inches in diameter", "I can't end my move in a space smaller than one size category smaller than I am" ]) }, "subclassfeature18" : { name : "Water Soul", source : [["UA:SO", 3]], minlevel : 18, description : desc([ "I no longer need to eat, drink, or sleep; Critical hits against me become normal hits", "I gain resistance to bludgeoning, piercing, and slashing damage" ]), dmgres : ["Bludgeoning", "Piercing", "Slashing"] } } }); //this code includes contributions by /u/SoilentBrad AddSubClass("sorcerer", "stone sorcery-ua", { // Still valid 2021-09-21 regExpSearch : /^(?=.*stone)(?=.*(sorcerer|sorcery|witch)).*$/i, subname : "Stone Sorcery", source : [["UA:SO", 3]], fullname : "Stone Sorcerer", spellcastingExtra : ["compelled duel", "searing smite", "thunderous smite", "wrathful smite", "branding smite", "magic weapon", "blinding smite", "elemental weapon", "staggering smite"], features : { "subclassfeature1" : { name : "Bonus Proficiencies", source : [["UA:SO", 4]], minlevel : 1, description: desc("I gain proficiency with shields, simple weapons and martial weapons"), armorProfs : [false, false, false, true], weaponProfs : [true, true] }, "subclassfeature1.1" : { name : "Metal Magic", source : [["UA:SO", 4]], minlevel : 1, description: desc("My affinity for metal allows me to select from a broader range of spells") }, "subclassfeature1.2" : { name : "Stone's Durability", source : [["UA:SO", 4]], minlevel : 1, description : desc([ "My hit point maximum increases by an amount equal to my sorcerer level", "As an action, I can gain an AC of 13 + Constitution modifier + shield", "This AC lasts until I don armor, I'm incapacitated, or use a bonus action to end it" ]), action : [["action", " (start)"], ['bonus action', " (end)"]], calcChanges : { hp : function (totalHD) { if (classes.known.sorcerer) { return [classes.known.sorcerer.level, "Stone's Durability (sorcerer level)"]; } } }, armorOptions : [{ regExpSearch : /^(?=.*stone)(?=.*durability).*$/i, name : "Stone's Durability", source : [["UA:SO", 4]], ac : "13+Con", dex : -10, affectsWildShape : true, selectNow : true }] }, "subclassfeature6" : { name : "Stone Aegis", source : [["UA:SO", 4]], minlevel : 6, description : desc([ "As a bonus action, I can grant an aegis to an ally I can see within 60 ft of me", "The aegis reduces any bludgeoning, piercing, or slashing damage taken by the target", "This aegis lasts for 1 minute, until I use it again, or until I'm incapacitated", "As a reaction when the protected ally is attacked with a melee attack, I can teleport", "I can do this only if the attacker is within 60 ft of me and I can see it", "I teleport to an empty space next to it and make one melee weapon attack against it", "If this attack hits, the attack deals extra force damage" ]), additional : levels.map( function(n) { if (n < 6) return ""; return (Math.floor(n / 4) + 2) + " damage reduction; +" + (n < 11 ? 1 : n < 17 ? 2 : 3) + "d10 force damage"; }), action : [["bonus action", ""], ['reaction', 'Aegis Teleport']] }, "subclassfeature14" : { name : "Stone's Edge", source : [["UA:SO", 4]], minlevel : 14, description : desc([ "Once per casting of a spell that deals damage, I can choose one creature damaged by it", "That creature takes extra force damage equal to half my sorcerer level" ]), additional : levels.map( function(n) { return n < 14 ? "" : Math.floor(n / 2) + " force damage"; }) }, "subclassfeature18" : { name : "Earth Master's Aegis", source : [["UA:SO", 4]], minlevel : 18, description: desc("My Stone's Aegis can now affect up to three creatures") } } }); ================================================ FILE: WotC material/ua_20170213_Warlock-and-Wizard.js ================================================ var iFileName = "ua_20170213_Warlock-and-Wizard.js"; RequiredSheetVersion("14.0.5-beta"); // This file adds the content from the Unearthed Arcana: Warlock and Wizard article to MPMB's Character Record Sheet // Define the source SourceList["UA:WnW"] = { name : "Unearthed Arcana: Warlock and Wizard", abbreviation : "UA:WnW", group : "Unearthed Arcana", url : "https://media.wizards.com/2017/dnd/downloads/20170213_Wizrd_Wrlck_UAv2_i48nf.pdf", date : "2017/02/13" }; // Adds 3 subclasses, 2 for the Warlock, and 1 for the Wizard //this code includes contributions by Greg N. AddSubClass("warlock", "the hexblade-ua", { regExpSearch : /^(?=.*hexblade)(?=.*warlock).*$/i, subname : "the Hexblade", source : [["UA:WnW", 1]], spellcastingExtra : ["shield", "wrathful smite", "branding smite", "magic weapon", "blink", "elemental weapon", "phantasmal killer", "staggering smite", "cone of cold", "destructive wave"], features : { "subclassfeature1" : { name : "Hex Warrior", source : [["UA:WnW", 1]], minlevel : 1, description : desc([ "I gain proficiency with medium armor, shields, and martial weapons", "With one-handed melee weapons I can use Charisma instead of Strength or Dexterity" ]), armorProfs : [false, true, false, true], weaponProfs : [false, true], calcChanges : { atkAdd : [ function (fields, v) { if (v.isMeleeWeapon && !(/((^|[^+-]\b)2|\btwo).?hand(ed)?s?\b/i).test(v.WeaponText) && What('Cha Mod') > What(AbilityScores.abbreviations[fields.Mod - 1] + ' Mod')) { fields.Mod = 6; }; }, "For melee weapons that lack the two-handed property, I can use my Charisma instead of Strength or Dexterity." ] } }, "subclassfeature1.1" : { name : "Hexblade's Curse", source : [["UA:WnW", 1]], minlevel : 1, description : desc([ "As a bonus action, I can curse a creature I can see within 30 ft of me for 1 minute", " - I add my proficiency bonus to damage rolls against the cursed target", " - My attack rolls against the curse target score a critical hit on a roll of 19 and 20", " - If the target dies while cursed, I regain HP equal to my warlock level + Cha mod" ]), recovery : "short rest", usages : levels.map( function(n) { return n < 14 ? 1 : ""; }), action : [["bonus action", ""]], calcChanges : { atkAdd : [ function (fields, v) { if (!v.isDC && /hexblade/i.test(v.WeaponTextName) && !v.CritChance) { v.CritChance = 19; fields.Description += (fields.Description ? '; ' : '') + 'Crit on 19-20'; }; }, "If I include the word 'Hexblade' in the name of a weapon, the automation will treat the attack as being against a target of the Hexblade's Curse: adding my proficiency bonus to the damage and adding the increased chance of a critical hit to the description.", 19 ], atkCalc : [ function (fields, v, output) { if ((/hexblade/i).test(v.WeaponTextName)) output.extraDmg += output.prof; }, ""] } }, "subclassfeature6" : { name : "Shadow Hound", source : [["UA:WnW", 1]], minlevel : 6, description : desc([ "My shadow becomes a hound of pure darkness; Truesight reveals its nature", "As a bonus action, I can have it slip into the shadow of another I can see within 60 ft", "I know the distance/direction to the target; I ignore 1/2, 3/4 cover of the target", "My shadow returns to me if I use a bonus action to do so, I become incapacitated, ", "a spell is used to stop it, or if one of us moves to another plane of existence" ]) }, "subclassfeature10" : { name : "Armor of Hexes", source : [["UA:WnW", 2]], minlevel : 10, description: desc("Targets affected by my hexblade's curse have a 50% of missing me with any attack roll") }, "subclassfeature14" : { name : "Master of Hexes", source : [["UA:WnW", 2]], minlevel : 14, description : desc([ "I no longer need to rest to be able to use my Hexblade's Curse again", "However, when I curse a new target, the curse immediately ends on the previous target" ]) } } }); //this code includes contributions by Ben Y. and Wizzard AddSubClass("warlock", "the raven queen-ua", { // Still valid 2021-09-21 regExpSearch : /^(?=.*\braven)(?=.*queen\b).*$/i, subname : "the Raven Queen", source : [["UA:WnW", 2]], spellcastingExtra : ["false life", "sanctuary", "silence", "spiritual weapon", "feign death", "speak with dead", "ice storm", "locate creature", "commune", "cone of cold"], features : { "subclassfeature1" : { name : "Sentinel Raven", source : [["UA:WnW", 2]], minlevel : 1, description : desc([ "I gain the services of a spirit in the form of a raven (using the stats of a raven)", "It always obeys my commands, rolls its own initiative, and can be slain", "While it's within 100 ft, I can telepathically speak with it and see/hear what it does", "While it's on my shoulder, I gain Darkvision 30 ft and add my Cha mod to Perception", "While it's on my shoulder, it can't be targeted, take damage, or take actions", "It vanishes if it is more than 5 miles away from me, it dies, or if I die", "If it dies, I gain advantage on all attack rolls against its killer for 24 hours", "After a short rest, I can recall it to me regardless of its location or if it died" ]), vision : [["Darkvision", 30]], addMod : { type : "skill", field : "Perc", mod : "max(Cha|0)", text : "While my sentinel raven is perched on my shoulder, I can add my Charisma modifier to Perception." }, creaturesAdd : [["Sentinel Raven"]], creatureOptions : [{ name : "Sentinel Raven", source : [["UA:WnW", 2]], size : 5, type : "Beast", alignment : "Unaligned", ac : 12, hp : 1, hd : [1, 4], speed : "10 ft, fly 50 ft", scores : [2, 14, 8, 2, 12, 6], skills : { "perception" : 3 }, passivePerception : 13, challengeRating : "0", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Beak", ability : 2, damage : [1, "", "piercing"], range : "Melee (5 ft)", description : "", abilitytodamage : false }], traits : [{ name : "Mimicry", description : "The raven can mimic simple sounds it has heard, such as a person whispering, a baby crying, or an animal chittering. A creature that hears the sounds can tell they are imitations with a successful DC 10 Wisdom (Insight) check." }, { name : "Sentinel", description : "The raven doesn't require sleep. While it is within 100 feet of me, it can awaken me from sleep as a bonus action." }, { name : "Shoulder Perch", description : "While perched on my shoulder, the raven can't be targeted by any attack or other harmful effect; only I can cast spells on it; it can't take damage; and it is incapacitated. It then also grants me darkvision 30 ft and a bonus to my Wisdom (Perception) equal to my Charisma modifier." }], features : [{ name : "Sent by the Raven Queen", description : "The raven acts independently of me, but it always obeys my commands. In combat, it rolls its own initiative and acts on its own turn, but I control how it acts. If it is slain by a creature, I gain advantage on all attack rolls against the killer for the next 24 hours. While the raven is within 100 ft of me, I can telepathically command it and see through its eyes and hear what it hears.\n The raven vanishes when it dies, if I die, or if we are separated by more than 5 miles. At the end of a short or long rest, I can call the raven back to reappear within 5 ft of me, regardless where it is or if it died." }] }] }, "subclassfeature6" : { name : "Soul of the Raven", source : [["UA:WnW", 2]], minlevel : 6, description : desc([ "As a bonus action, when my raven is perched on my shoulder, I can merge our bodies", "I become tiny and replace my speed with the raven's (10 ft, fly 50 ft)", "I can then use my action only to Dash, Disengage, Dodge, Help, Hide, or Search", "While merged, I still get all the benefits of my raven being perched on my shoulder", "I can end this as an action" ]), action : [["bonus action", " (start)"], ['action', ' (end)']] }, "subclassfeature10" : { name : "Raven's Shield", source : [["UA:WnW", 3]], minlevel : 10, description: desc("I can't be frightened, have advantage on death saves, and resistance to necrotic damage"), savetxt : { immune : ["frightened"], adv_vs : ["death"] }, dmgres : ["Necrotic"] }, "subclassfeature14" : { name : "Queen's Right Hand", source : [["UA:WnW", 3]], minlevel : 14, description: desc("I can cast Finger of Death once per long rest"), usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Queen's Right Hand", spells : ["finger of death"], selection : ["finger of death"], firstCol : "oncelr" }] } } }); //this code includes contributions by /u/magicmanfk AddSubClass("wizard", "lore mastery-ua", { // Still valid 2021-09-21 regExpSearch : /^(?=.*\blore)(?=.*mastery?\b).*$/i, subname : "Lore Mastery", source : [["UA:WnW", 5]], fullname : "Lore Master", features : { "subclassfeature2" : { name : "Lore Master", source : [["UA:WnW", 6]], minlevel : 2, description : desc([ "I can use my Intelligence modifier for initiative instead of my Dexterity modifier", "I get expertise with each Arcana, History, Nature, and Religion, if I'm proficient with it" ]), skills : [["Arcana", "only"], ["History", "only"], ["Nature", "only"], ["Religion", "only"]], addMod : { type : "skill", field : "Init", mod : "max(Int-Dex|0)", text : "I use my Intelligence modifier for initiative rolls instead of Dexterity." } }, "subclassfeature2.1" : { name : "Spell Secrets: Elements", source : [["UA:WnW", 6]], minlevel : 2, description : desc([ "I can change the damage type of spells I cast using spell slots (so not cantrips)", "I can swap out acid, cold, fire, force, lightning, necrotic, radiant, or thunder damage" ]) }, "subclassfeature2.2" : { name : "Spell Secrets: Saves", source : [["UA:WnW", 6]], minlevel : 2, description: desc("I can change the saving throw ability score to another for a spell I cast using a spell slot"), recovery : "short rest", usages : 1 }, "subclassfeature6" : { name : "Alchemical Casting", source : [["UA:WnW", 6]], minlevel : 6, description : desc([ "When I cast a spell with a spell slot, I can expend one additional spell slot to augment it", " - 1st-level slot: one damage roll of the spell adds +2d10 force damage", " - 2nd-level slot: if the range of the spell is at least 30 ft, it becomes 1 mile", " - 3rd-level slot: the spell's save DC increases by 2" ]) }, "subclassfeature10" : { name : "Prodigious Memory", source : [["UA:WnW", 6]], minlevel : 10, description: desc("As a bonus action, I can replace one of my prepared spells with another from my book"), recovery : "short rest", usages : 1, action : [["bonus action", ""]] }, "subclassfeature14" : { name : "Master of Magic", source : [["UA:WnW", 6]], minlevel : 14, description : desc([ "As a bonus action, I can call to mind one spell of my choice from any class' spell list", "This spell must be of a level I have spell slots for and that I don't already have prepared", "I can then cast it using the normal spellcasting rules, including expending a spell slot", "It counts a wizard spell; I can only cast the spell during the same turn I call it to mind" ]), usages : 1, recovery : "long rest", action : [["bonus action", ""]] } } }); // Add many new Warlock invocations // Most probably still valid 2021-09-21, have to check AddWarlockInvocation("Aspect of the Moon (prereq: the Archfey patron)", { name : "Aspect of the Moon", description: desc("I don't need to sleep nor can be magically forced to; I can rest while doing light activity"), source : [["UA:WnW", 3]], prereqeval : function(v) { return (/\barchfey\b/).test(classes.known.warlock.subclass); }, savetxt : { text : ["Nothing can force me to sleep"] } }); AddWarlockInvocation("Burning Hex (prereq: the Hexblade patron)", { name : "Burning Hex", description : desc([ "As a bonus action, I can cause a target affected by my hexblade's curse to take damage", "It immediately takes fire damage equal to my Charisma modifier (min 1)" ]), source : [["UA:WnW", 3]], prereqeval : function(v) { return (/hexblade/).test(classes.known.warlock.subclass); }, action : [["bonus action", ""]] }); AddWarlockInvocation("Caiphon's Beacon (prereq: the Great Old One patron)", { name : "Caiphon's Beacon", description : desc([ "I gain proficiencies with the Deception and Stealth skills", "I have advantage on attack rolls against charmed creatures" ]), source : [["UA:WnW", 3]], prereqeval : function(v) { return (/great old one/).test(classes.known.warlock.subclass); }, skills : ["Deception", "Stealth"] }); AddWarlockInvocation("Chilling Hex (prereq: the Hexblade patron)", { name : "Chilling Hex", description : desc([ "As a bonus action, I can swirl frost around a target affected by my hexblade's curse", "All creatures within 5 ft of the target take cold damage equal to my Cha modifier (min 1)" ]), source : [["UA:WnW", 3]], prereqeval : function(v) { return (/hexblade/).test(classes.known.warlock.subclass); }, action : [["bonus action", ""]] }); AddWarlockInvocation("Chronicle of the Raven Queen (prereq: the Raven Queen patron, Pact of the Tome)", { name : "Chronicle of the Raven Queen", description : desc([ "Within 1 minute of a creature's death, I can use my book of shadows to ask it 1 question", "To do this, I need to put the corpse's hand on the book and speak the question aloud", "Its spirit writes the answer, to the best of its knowledge, in blood in a language I choose" ]), source : [["UA:WnW", 3]], submenu : "[improves Pact of the Tome]", prereqeval : function(v) { return (/raven queen/).test(classes.known.warlock.subclass) && classes.known.warlock.level >= 3 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the tome'; }, action : [["bonus action", ""]] }); AddWarlockInvocation("Claw of Acamar (prereq: the Great Old One patron, Pact of the Blade)", { name : "Claw of Acamar", description : desc([ "As a pact weapon, I can create a black, lead flail with grasping tentacles for a head", "It has reach and can reduce a creature's speed to 0 on a hit until the end of my next turn", "On a hit, I can expend a spell slot to have it do +2d8 necrotic damage per spell slot level" ]), source : [["UA:WnW", 3]], submenu : "[improves Pact of the Blade]", prereqeval : function(v) { return (/great old one/).test(classes.known.warlock.subclass) && classes.known.warlock.level >= 3 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the blade'; }, weaponOptions : [{ baseWeapon : "flail", regExpSearch : /^(?=.*\bclaw\b)(?=.*\bacamar\b).*$/i, name : "Claw of Acamar", source : [["UA:WnW", 3]], pactWeapon : true, description : "Pact weapon, reach; On hit: Reduces speed to 0, Expend spell slot for +2d8 necrotic damage per slot level", selectNow : true }] }); AddWarlockInvocation("Cloak of Baalzebul (prereq: the Fiend patron)", { name : "Cloak of Baalzebul", description : desc([ "As a bonus action, I can conjure or dismiss a swarm of buzzing flies around me", "This gives me adv. on Cha (Intimidation) checks, but disadv. on all other Charisma checks", "Creatures starting their turn within 5 ft of me take poison damage equal to my Cha mod" ]), source : [["UA:WnW", 3]], prereqeval : function(v) { return (/\bfiend\b/).test(classes.known.warlock.subclass); }, action : [["bonus action", " (start/end)"]] }); AddWarlockInvocation("Curse Bringer (prereq: the Hexblade patron, Pact of the Blade)", { name : "Curse Bringer", description : desc([ "As a pact weapon, I can create a silver greatsword with black runes etched in the blade", "If I bring a target of my hexblade's curse to 0 HP with it, I can move the curse to another", "It can reduce a creature's speed to 0 on a hit until the end of my next turn", "On a hit, I can expend a spell slot to have it do +2d8 slashing damage per spell slot level" ]), source : [["UA:WnW", 4]], submenu : "[improves Pact of the Blade]", prereqeval : function(v) { return (/hexblade/).test(classes.known.warlock.subclass) && classes.known.warlock.level >= 3 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the blade'; }, weaponOptions : [{ baseWeapon : "greatsword", regExpSearch : /^(?=.*\bcurse)(?=.*bringer\b).*$/i, name : "Curse Bringer", source : [["UA:WnW", 4]], pactWeapon : true, description : "Pact weapon, heavy, two-handed; On hit: Reduces speed to 0, Expend spell slot for +2d8 slashing damage per slot level", selectNow : true }] }); AddWarlockInvocation("Kiss of Mephistopheles (prereq: level 5 warlock, the Fiend patron, Eldritch Blast cantrip)", { name : "Kiss of Mephistopheles", description : desc([ "As a bonus action when my Eldritch Blast hits, I can cast Fireball using a warlock spell slot", "The origin of the Fireball is the creature that was hit with my Eldritch Blast attack" ]), source : [["UA:WnW", 4]], submenu : "[improves Eldritch Blast]", prereqeval : function(v) { return v.hasEldritchBlast && classes.known.warlock.level >= 5 && (/\bfiend\b/).test(classes.known.warlock.subclass); }, action : [["bonus action", ""]] }); AddWarlockInvocation("Frost Lance (prereq: the Archfey patron, Eldritch Blast cantrip)", { name : "Frost Lance", description : desc([ "When my Eldritch Blast hits a creature once or more, I can reduce its speed by 10 ft", "This speed reduction lasts until the end of my next turn" ]), source : [["UA:WnW", 4]], submenu : "[improves Eldritch Blast]", prereqeval : function(v) { return v.hasEldritchBlast && (/\barchfey\b/).test(classes.known.warlock.subclass); }, calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == 'eldritch blast') fields.Description += '; Target -10 ft speed'; }, "When I hit a creature with my Eldritch Blast cantrip once or more times in a turn, I can reduce its speed by 10 ft until the end of my next turn." ] } }); AddWarlockInvocation("Gaze of Khirad (prereq: level 7 warlock, the Great Old One patron)", { name : "Gaze of Khirad", description : desc([ "As an action, I can see through solid object out to 30 ft until the end of my current turn" ]), source : [["UA:WnW", 4]], submenu : "[warlock level 7+]", prereqeval : function(v) { return (/great old one/).test(classes.known.warlock.subclass) && classes.known.warlock.level >= 7; }, action : [["action", ""]] }); AddWarlockInvocation("Grasp of Hadar (prereq: the Great Old One patron, Eldritch Blast cantrip)", { name : "Grasp of Hadar", description : desc("Once per turn when my Eldritch Blast hits a creature, I can move it 10 ft closer to me"), source : [["UA:WnW", 4]], submenu : "[improves Eldritch Blast]", prereqeval : function(v) { return v.hasEldritchBlast && (/great old one/).test(classes.known.warlock.subclass); }, calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == 'eldritch blast') fields.Description += '; Target moved 10 ft to me'; }, "When I hit a creature with my Eldritch Blast cantrip once or more times in a turn, I can move it in a straight line 10 ft closer to me." ] } }); AddWarlockInvocation("Green Lord's Gift (prereq: the Archfey patron)", { name : "Green Lord's Gift", description : desc([ "When I regain HP, all dice for determining the HP I heal are treated as rolling maximum" ]), source : [["UA:WnW", 4]], prereqeval : function(v) { return (/\barchfey\b/).test(classes.known.warlock.subclass); } }); AddWarlockInvocation("Improved Pact Weapon (prereq: level 5 warlock, Pact of the Blade)", { name : "Improved Pact Weapon", description : desc([ "Any pact weapon I create is a +1 magic weapon, if it isn't already a magic weapon" ]), source : [["UA:WnW", 4]], submenu : "[improves Pact of the Blade]", prereqeval : function(v) { return classes.known.warlock.level >= 5 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the blade'; }, calcChanges : { atkCalc : [ function (fields, v, output) { // Test if this is a pact weapon, has no + bonus from somewhere else, and isn't a magic weapon if (v.pactWeapon && !output.magic && !v.theWea.isMagicWeapon) { v.pactMag = 1; output.magic = 1; }; }, "If my Pact Weapon doesn't already include a magical bonus in its name or gets it from somewhere else and is not a magic weapon, the calculation will add +1 to its To Hit and Damage." ] } }); AddWarlockInvocation("Mace of Dispater (prereq: the Fiend patron, Pact of the Blade)", { name : "Mace of Dispater", description : desc([ "As a pact weapon, I can create an iron mace forged in Dis, the 2nd layer of the Nine Hells", "I can knock a target prone with it on a hit, if the target's size is Huge or smaller", "On a hit, I can expend a spell slot to have it do +2d8 force damage per spell slot level" ]), source : [["UA:WnW", 4]], submenu : "[improves Pact of the Blade]", prereqeval : function(v) { return (/\bfiend\b/).test(classes.known.warlock.subclass) && classes.known.warlock.level >= 3 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the blade'; }, weaponOptions : [{ baseWeapon : "mace", regExpSearch : /^(?=.*\bmace\b)(?=.*\bdispater\b).*$/i, name : "Mace of Dispater", source : [["UA:WnW", 4]], pactWeapon : true, description : "Pact weapon; On hit: knock Huge or smaller prone, Expend spell slot for +2d8 force damage per slot level", selectNow : true }] }); AddWarlockInvocation("Moon Bow (prereq: the Archfey patron, Pact of the Blade)", { name : "Moon Bow", description : desc([ "As a pact weapon, I can create a longbow that creates arrows of white wood when drawn", "Its arrows last for 1 minute; I have advantage on attack rolls against lycanthropes with it", "On a hit, I can expend a spell slot to have it do +2d8 radiant damage per spell slot level" ]), source : [["UA:WnW", 4]], submenu : "[improves Pact of the Blade]", prereqeval : function(v) { return (/\barchfey\b/).test(classes.known.warlock.subclass) && classes.known.warlock.level >= 3 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the blade'; }, weaponOptions : [{ baseWeapon : "longbow", regExpSearch : /^(?=.*\bmoon)(?=.*bow\b).*$/i, name : "Moon Bow", source : [["UA:WnW", 4]], pactWeapon : true, description : "Pact weapon, heavy, two-handed; Adv. vs. lycanthropes; On hit, expend spell slot for +2d8 radiant damage per slot level", selectNow : true }] }); AddWarlockInvocation("Path of the Seeker (prereq: the Seeker patron)", { name : "Path of the Seeker", description : desc([ "I ignore difficult terrain; I have advantage on saving throws against being paralyzed", "I also have advantage on checks to escape a grapple, manacles, or rope bindings" ]), source : [["UA:WnW", 4]], prereqeval : function(v) { return (/\bseeker\b/).test(classes.known.warlock.subclass); }, savetxt : { adv_vs : ["paralyzed"] } }); AddWarlockInvocation("Raven Queen's Blessing (prereq: the Raven Queen patron, Eldritch Blast cantrip)", { name : "Raven Queen's Blessing", description : desc([ "When I score a critical hit with Eldritch Blast, I can choose an ally I can see within 30 ft", "That ally can immediately expend one HD to regain HP, just like after a short rest" ]), source : [["UA:WnW", 5]], submenu : "[improves Eldritch Blast]", prereqeval : function(v) { return v.hasEldritchBlast && (/raven queen/).test(classes.known.warlock.subclass); } }); AddWarlockInvocation("Relentless Hex (prereq: level 5 warlock, the Hexblade patron)", { name : "Relentless Hex", description : desc([ "As a bonus action, I can teleport next to a target affected by my hexblade's curse", "To do so, I must see the target and the space I'm teleporting to, and be within 30 ft of it" ]), source : [["UA:WnW", 5]], submenu : "[warlock level 5+]", prereqeval : function(v) { return (/hexblade/).test(classes.known.warlock.subclass) && classes.known.warlock.level >= 5; }, action : [["bonus action", ""]] }); AddWarlockInvocation("Sea Twins' Gift (prereq: the Archfey patron)", { name : "Sea Twins' Gift", description : desc([ "I can breathe underwater and I have a swim speed equal to my walking speed", "Once per long rest, I can cast Water Breathing using a warlock spell slot (PHB 287)" ]), spellcastingBonus : [{ name : "Sea Twins' Gift", spells : ["water breathing"], selection : ["water breathing"], firstCol : "oncelr" }], source : [["UA:WnW", 5]], prereqeval : function(v) { return (/\barchfey\b/).test(classes.known.warlock.subclass); }, speed : { swim : { spd : "walk", enc : "walk" } } }); AddWarlockInvocation("Seeker's Speech (prereq: the Seeker patron)", { name : "Seeker's Speech", description : desc([ "When I finish a long rest, I pick two languages that I know until I finish my next long rest" ]), source : [["UA:WnW", 5]], prereqeval : function(v) { return (/\bseeker\b/).test(classes.known.warlock.subclass); } }); AddWarlockInvocation("Shroud of Ulban (prereq: level 18 warlock, the Great Old One patron)", { name : "Shroud of Ulban", description : desc([ "As an action, I can turn myself invisible for 1 minute", "If I attack, deal damage, or force a creature to make a save, I become visible again", "However, I only become visible at the end of the current turn" ]), source : [["UA:WnW", 4]], submenu : "[warlock level 18+]", prereqeval : function(v) { return (/great old one/).test(classes.known.warlock.subclass) && classes.known.warlock.level >= 18; }, action : [["action", ""]] }); AddWarlockInvocation("Superior Pact Weapon (prereq: level 9 warlock, Pact of the Blade)", { name : "Superior Pact Weapon", description : desc([ "Any pact weapon I create is a +2 magic weapon, if it isn't already a magic weapon" ]), source : [["UA:WnW", 5]], submenu : "[improves Pact of the Blade]", prereqeval : function(v) { return classes.known.warlock.level >= 9 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the blade'; }, calcChanges : { atkCalc : [ function (fields, v, output) { // Test if this is a pact weapon, has no + bonus in its name, is not a magic weapon, and doesn't already have a improved pact weapon bonus var iPactWeaBonus = 2; if (v.pactWeapon && !v.thisWeapon[1] && !v.theWea.isMagicWeapon && ((!v.pactMag && !output.magic) || (v.pactMag && v.pactMag < iPactWeaBonus))) { if (v.pactMag) output.magic -= v.pactMag; v.pactMag = iPactWeaBonus; output.magic += v.pactMag; }; }, "If my Pact Weapon doesn't already include a magical bonus in its name or gets it from somewhere else and is not a magic weapon, the calculation will add +2 to its To Hit and Damage." ] } }); AddWarlockInvocation("Tomb of Levistus (prereq: the Fiend patron)", { name : "Tomb of Levistus", description : desc([ "As a reaction when I take damage, I can entomb myself in ice until the end of my turn", "I get 10 temp. HP per warlock level, which can be used to absorb the triggering damage", "Until the ice is gone, I have vulnerability to fire damage, 0 speed, and am incapacitated" ]), source : [["UA:WnW", 5]], prereqeval : function(v) { return (/\bfiend\b/).test(classes.known.warlock.subclass); }, recovery : "short rest", usages : 1, action : [["reaction", ""]] }); AddWarlockInvocation("Ultimate Pact Weapon (prereq: level 15 warlock, Pact of the Blade)", { name : "Ultimate Pact Weapon", description : desc([ "Any pact weapon I create is a +3 magic weapon, if it isn't already a magic weapon" ]), source : [["UA:WnW", 5]], submenu : "[improves Pact of the Blade]", prereqeval : function(v) { return classes.known.warlock.level >= 15 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the blade'; }, calcChanges : { atkCalc : [ function (fields, v, output) { // Test if this is a pact weapon, has no + bonus in its name, is not a magic weapon, and doesn't already have a improved pact weapon bonus var iPactWeaBonus = 3; if (v.pactWeapon && !v.thisWeapon[1] && !v.theWea.isMagicWeapon && ((!v.pactMag && !output.magic) || (v.pactMag && v.pactMag < iPactWeaBonus))) { if (v.pactMag) output.magic -= v.pactMag; v.pactMag = iPactWeaBonus; output.magic += v.pactMag; }; }, "If my Pact Weapon doesn't already include a magical bonus in its name or gets it from somewhere else and is not a magic weapon, the calculation will add +3 to its To Hit and Damage." ] } }); ================================================ FILE: WotC material/ua_20170313_The-Mystic-Class.js ================================================ var iFileName = "ua_20170313_The-Mystic-Class.js"; RequiredSheetVersion("13.1.14"); // This file adds the content from the Unearthed Arcana: The Mystic Class article to MPMB's Character Record Sheet // WARNING: there are no published multiclassing rules for Mystic; the ones provided here are extrapolated from other classes // Define the source SourceList["UA:TMC"] = { name : "Unearthed Arcana: The Mystic Class", abbreviation : "UA:TMC", group : "Unearthed Arcana", url : "https://media.wizards.com/2017/dnd/downloads/UAMystic3.pdf", date : "2017/03/13" }; // Add spell schools spellSchoolList["Avatar"] = "avatar"; spellSchoolList["Awake"] = "awakened"; spellSchoolList["Immor"] = "immortal"; spellSchoolList["Nomad"] = "nomad"; spellSchoolList["Wu Jen"] = "wu jen"; // Adds a new class, the Mystic, with 6 subclasses ClassList.mystic = { regExpSearch : /psion\b|mystic/i, name : "Mystic", source : [["UA:TMC", 1]], primaryAbility : "Intelligence", abilitySave : 4, prereqs : "Intelligence 13", improvements : [0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5, 5], die : 8, saves : ["Wis", "Int"], skillstxt : { primary : "Choose two from Arcana, History, Insight, Medicine, Nature, Perception, and Religion" }, armorProfs : { primary : [true, false, false, false] }, weaponProfs : { primary : [true, false] }, equipment : "Mystic starting equipment:\n \u2022 A spear -or- a mace;\n \u2022 Leather mail -or- studded leather armor;\n \u2022 A light crossbow and 20 bolts -or- any simple weapon;\n \u2022 A scholar's pack -or- an explorer's pack.\n\nAlternatively, choose 5d4 \xD7 10 gp worth of starting equipment instead of both the class' and the background's starting equipment.", subclasses : ["Mystic Order", []], subclassGainedLevel : 1, attacks : [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], spellcastingFactor : "psionic0", spellcastingKnown : { cantrips : levels.map(function (n) { return n < 3 ? 1 : n < 10 ? 2 : n < 17 ? 3 : 4; }), spells : levels.map(function (n) { return n < 3 ? 1 : n < 5 ? 2 : n < 7 ? 3 : n < 9 ? 4 : n < 12 ? 5 : n < 15 ? 6 : n < 18 ? 7 : 8; }) }, spellcastingList : { "class" : "mystic", psionic : true }, features : { "psi points" : { name : "Psi Points", source : [["UA:TMC", 3]], minlevel : 1, description : desc([ "I use psi points to fuel my psionic disciplines, up to my psi limit per instance" ]), usages : levels.map(function (n) { return n < 2 ? 4 : n < 3 ? 6 : n < 4 ? 14 : n < 5 ? 17 : n < 6 ? 27 : n < 7 ? 32 : n < 8 ? 38 : n < 9 ? 44 : n < 10 ? 57 : n < 18 ? 64 : 71; }), recovery : "long rest", additional : levels.map(function (n) { return (n < 3 ? 2 : n < 5 ? 3 : n < 7 ? 5 : n < 9 ? 6 : 7) + " psi limit"; }) }, "psionics" : { name : "Psionics", source : [["UA:TMC", 3]], minlevel : 1, description : desc([ "I can use psionic talents/disciplines that I know, using Intelligence as my psionic ability" ]), additional : levels.map(function (n) { var talent = n < 3 ? "1 talent" : (n < 10 ? 2 : n < 17 ? 3 : 4) + " talents"; var discpl = n < 3 ? "1 discipline" : (n < 5 ? 2 : n < 7 ? 3 : n < 9 ? 4 : n < 12 ? 5 : n < 15 ? 6 : n < 18 ? 7 : 8) + " disciplines"; return talent + " \u0026 " + discpl + " known"; }) }, "psychic focus" : { name : "Psychic Focus", source : [["UA:TMC", 3]], minlevel : 1, description : desc([ "As a bonus action, I can choose one of my psionic disciplines and gain its focus benefit", "I can only focus on one at a time; It stays until I focus on another, or I'm incapacitated" ]), action : [["bonus action", ""]] }, "subclassfeature1" : { name : "Mystic Order", source : [["UA:TMC", 4]], minlevel : 1, description : desc('Choose a Mystic Order that shapes the nature of your rage and put it in the "Class" field') }, "mystical recovery" : { name : "Mystical Recovery", source : [["UA:TMC", 4]], minlevel : 2, description : desc([ "As a bonus action after using psi points on a discipline, I can regain HP per point spent" ]), action : [["bonus action", ""]] }, "telepathy" : { name : "Telepathy", source : [["UA:TMC", 4]], minlevel : 2, description : desc([ "I can telepathically speak to creatures I can see within 120 ft, if they know a language" // 'to' not 'with', so one-way ]) }, "strength of mind" : { name : "Strength of Mind", source : [["UA:TMC", 4]], minlevel : 4, description : desc([ "After a short rest, I can change my Wisdom save proficiency to another ability score" ]) }, "potent psionics" : { name : "Potent Psionics", source : [["UA:TMC", 4]], minlevel : 8, description : desc([ "Once per turn, when I hit a creature with a weapon attack, I can do extra damage", "In addition, I add my Intelligence modifier to my psionic talent damage rolls" ]), additional : levels.map(function (n) { if (n < 8) return ""; return "+" + (n < 14 ? 1 : 2) + "d8 psychic damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.mystic && classes.known.mystic.level > 7 && !v.isSpell) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.mystic.level < 14 ? 1 : 2) + 'd8 psychic damage'; }; }, "Once per turn, I can have one of my weapon attacks that hit do extra psychic damage.\n \u2022 My psionic talents get my Intelligence modifier added to their damage roll." ], atkCalc : [ function (fields, v, output) { if (classes.known.mystic && classes.known.mystic.level > 7 && v.thisWeapon[3] && v.thisWeapon[4].indexOf('mystic') !== -1 && SpellsList[v.thisWeapon[3]].level === 0) { output.extraDmg += What('Int Mod'); }; }, "" ], spellAdd : [ function (spellKey, spellObj, spName) { if (spellObj.psionic && spellObj.level == 0) { return genericSpellDmgEdit(spellKey, spellObj, "\\w+|Acid, Cold, Fire, Lightning, or Thunder", "Int", true); } }, "My psionic talents get my Intelligence modifier added to their damage." ] } }, "consumptive power" : { name : "Consumptive Power", source : [["UA:TMC", 5]], minlevel : 10, description : desc([ "Once per long rest, I can use my HP to fuel a psionic discipline instead of psi points", "I lose the HP; My HP max is reduced with the same until I finish my next long rest" ]), usages : 1, recovery : "long rest" }, "psionic mastery" : { name : "Psionic Mastery", source : [["UA:TMC", 5]], minlevel : 11, description : desc([ "As an action, I can gain a pool of special psi points that last until I finish a long rest", "I can use these, without psi limit, for disciplines that require an action or bonus action", "I can use either these or psi points from my normal pool for a discipline, but not both", "I can concentrate on all disciplines that use these special points at the same time", "I lose concentration if I cast a discipline requiring concentration from my normal pool" ]), usages : levels.map(function (n) { if (n < 11) return ""; return n < 13 ? 1 : n < 15 ? 2 : n < 17 ? 3 : 4; }), recovery : "long rest", additional : levels.map(function (n) { if (n < 11) return ""; return "pool of " + (n < 15 ? 9 : 11) + " psi points"; }), action : [["action", ""]] }, "psionic body" : { name : "Psionic Body", source : [["UA:TMC", 5]], minlevel : 20, description : desc([ "I no longer age and I have resistance to bludgeoning, piercing, and slashing damage", "I'm immune to disease, poison damage, and the poisoned condition", "If I die, I have a 55% chance of discorporating instead and returning 1d3 days later" ]), savetxt : { immune : ["poison", "disease"] }, dmgres : ["Bludgeoning", "Piercing", "Slashing"] } } }; // Order of the Avatar subclass for the Mystic AddSubClass("mystic", "avatar-ua", { regExpSearch : /^(?=.*(psion\b|mystic))(?=.*avatar).*$/i, subname : "Order of the Avatar", source : [["UA:TMC", 5]], features : { "subclassfeature1" : { name : "Bonus Disciplines", source : [["UA:TMC", 5]], minlevel : 1, description: desc("I know two additional psionic disciplines, chosen from the avatar disciplines"), spellcastingBonus : [{ name : "Bonus Disciplines", "class" : "mystic", school : ["Avatar"], level : [1, 9], times : 2, psionic : true }] }, "subclassfeature1.1" : { name : "Armor Training", source : [["UA:TMC", 5]], minlevel : 1, description: desc("I gain proficiency with medium armor and shields."), armorProfs : [false, true, false, true] }, "subclassfeature3" : { name : "Avatar of Battle", source : [["UA:TMC", 5]], minlevel : 3, description: desc("Allies within 30 ft of me gain +2 on initiative rolls while I'm not incapacitated") }, "subclassfeature6" : { name : "Avatar of Healing", source : [["UA:TMC", 6]], minlevel : 6, description : desc([ "Allies within 30 ft of me that get healed through a psionic discipline, get extra healing", "They add my Intelligence modifier to the HP regained, as long as I'm not incapacitated" ]), calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { if (!What("Int Mod") || What("Int Mod") <= 0) return; switch (spellKey) { case "pr1-mend wounds" : spellObj.description = spellObj.description.replace("healed for ", "healed for " + What("Int Mod") + "+"); return true; case "pr2-restore health" : spellObj.description = spellObj.description.replace("1 HP", (1 + What("Int Mod")) + " HP"); return true; } }, "I add my Intelligence modifier to the hit points I restore using my psionic disciplines." ] } }, "subclassfeature14" : { name : "Avatar of Speed", source : [["UA:TMC", 6]], minlevel : 14, description: desc("Allies within 30 ft of me can use Dash as a bonus action while I'm not incapacitated") } } }); // Order of the Awakened subclass for the Mystic AddSubClass("mystic", "awakened-ua", { regExpSearch : /^(?=.*(psion\b|mystic))(?=.*awakened).*$/i, subname : "Order of the Awakened", source : [["UA:TMC", 6]], features : { "subclassfeature1" : { name : "Bonus Disciplines", source : [["UA:TMC", 6]], minlevel : 1, description : " [+2 awakened disciplines]", spellcastingBonus : [{ name : "Bonus Disciplines", "class" : "mystic", school : ["Awake"], level : [1, 9], times : 2, psionic : true }] }, "subclassfeature1.1" : { name : "Awakened Talent", source : [["UA:TMC", 6]], minlevel : 1, description : desc([ "I gain proficiency with two skills of my choice, taken from the following list:", "Animal Handling, Deception, Insight, Intimidation, Investigation, Perception, Persuasion" ]), skillstxt : "Choose two from: Animal Handling, Deception, Insight, Intimidation, Investigation, Perception, and Persuasion" }, "subclassfeature3" : { name : "Psionic Investigation", source : [["UA:TMC", 6]], minlevel : 3, description : desc([ "By concentrating on an object I'm holding for 10 minutes, I learn the object's history", "I see/hear its surroundings the previous hour and know who hold it in the last 24 hours", "Also, for the next 24 hours, I can use an action to locate it and see its surroundings" ]), usages : 1, recovery : "short rest" }, "subclassfeature6" : { name : "Psionic Surge", source : [["UA:TMC", 6]], minlevel : 6, description : desc([ "I can end my psychic focus to impose disadv. on a save vs. a discipline or talent I use", "Once I do this, I can't regain psychic focus in any discipline until I can use this again" ]), usages : 1, recovery : "short rest" }, "subclassfeature14" : { name : "Spectral Form", source : [["UA:TMC", 6]], minlevel : 14, description : desc([ "As an action, I can become ghostly and move through objects and creatures for 10 min", "I also have resistance to all damage and move at half speed; I can end it as an action" ]), usages : 1, recovery : "long rest", action : [["action", ""]] } } }); // Order of the Immortal subclass for the Mystic AddSubClass("mystic", "immortal-ua", { regExpSearch : /^(?=.*(psion\b|mystic))(?=.*immortal).*$/i, subname : "Order of the Immortal", source : [["UA:TMC", 6]], features : { "subclassfeature1" : { name : "Bonus Disciplines", source : [["UA:TMC", 7]], minlevel : 1, description: desc("I know two additional psionic disciplines, taken from the immortal disciplines"), spellcastingBonus : [{ name : "Bonus Disciplines", "class" : "mystic", school : ["Immor"], level : [1, 9], times : 2, psionic : true }] }, "subclassfeature1.1" : { name : "Immortal Durability", source : [["UA:TMC", 7]], minlevel : 1, description : desc([ "My hit point maximum increases by an amount equal to my mystic level", "If not wearing armor or wielding a shield, my AC is 10 + my Dex mod + my Con mod" ]), calcChanges : { hp : function (totalHD) { if (classes.known.mystic) { return [classes.known.mystic.level, "Immortal Durability (mystic level)"]; } } }, armorOptions : [{ regExpSearch : /^(?=.*immortal)(?=.*durability).*$/i, name : "Immortal Durability", source : [["UA:TMC", 7]], ac : "10+Con", affectsWildShape : true, selectNow : true }] }, "subclassfeature3" : { name : "Psionic Resilience", source : [["UA:TMC", 7]], minlevel : 3, description : desc([ "At the start of each turn, I gain my Intelligence modifier in temporary HP (min 0)" ]) }, "subclassfeature6" : { name : "Surge of Health", source : [["UA:TMC", 7]], minlevel : 6, description : desc([ "As a reaction when I take damage, I can halve that damage, but end my psychic focus", "Once I do this, I can't regain psychic focus in any discipline until I can use this again" ]), usages : 1, recovery : "short rest", action : [["reaction", ""]] }, "subclassfeature14" : { name : "Immortal Will", source : [["UA:TMC", 7]], minlevel : 14, description : desc([ "If I end my turn at 0 HP, I can use 5 psi points to regain mystic level + Con mod in HP" ]), additional : levels.map(function (n) { if (n < 14) return ""; return "HP: " + n + " + Constitution modifier"; }) } } }); // Order of the Nomad subclass for the Mystic AddSubClass("mystic", "nomad-ua", { regExpSearch : /^(?=.*(psion\b|mystic))(?=.*nomad).*$/i, subname : "Order of the Nomad", source : [["UA:TMC", 7]], features : { "subclassfeature1" : { name : "Bonus Disciplines", source : [["UA:TMC", 7]], minlevel : 1, description: desc("I know two additional psionic disciplines, taken from the nomad disciplines"), spellcastingBonus : [{ name : "Bonus Disciplines", "class" : "mystic", school : ["Nomad"], level : [1, 9], times : 2, psionic : true }] }, "subclassfeature1.1" : { name : "Breadth of Knowledge", source : [["UA:TMC", 7]], minlevel : 1, description : desc([ "After I finish a long rest, I gain two proficiencies in chosen language, tool, or skill", "These proficiencies last until I finish my next long rest" ]) }, "subclassfeature3" : { name : "Memory of One Thousand Steps", source : [["UA:TMC", 7]], minlevel : 3, description : desc([ "As a reaction when hit by an attack, I can teleport away, causing the attack to miss", "I can teleport to any empty space that I had occupied since the start of my last turn" ]), usages : 1, recovery : "short rest", action : [["reaction", ""]] }, "subclassfeature6" : { name : "Superior Teleportation", source : [["UA:TMC", 7]], minlevel : 6, description : desc([ "When I use a psionic discipline to teleport, I can increase its distance by up to 10 ft" ]), calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { switch (spellKey) { case "ns1-step of a dozen paces" : var addDist = What("Unit System") === "metric" ? 3 : 10; spellObj.description = spellObj.description.replace(/(\d+ (ft|m))/i, addDist + "+$1"); return true; case "ns3-defensive step" : case "ns4-there and back again" : var addDist = What("Unit System") === "metric" ? 3 : 10; var theDist = Number(spellObj.description.replace(/.*(\d+) (ft|m).*/i, "$1")); spellObj.description = spellObj.description.replace(/(\d+) (ft|m)/i, (theDist + addDist) + " $2"); return true; } }, "My psionic disciplines that teleport have 10 ft added to the distance of their teleportation." ] } }, "subclassfeature14" : { name : "Effortless Journey", source : [["UA:TMC", 7]], minlevel : 14, description : desc([ "Once during my turn, I can teleport instead of moving, up to my movement speed ", "I subtracting the distance teleported from my remaining speed" ]) } } }); // Order of the Soul Knife subclass for the Mystic AddSubClass("mystic", "soul knife-ua", { regExpSearch : /^(?=.*soul\b)(?=.*\bknife).*$/i, subname : "Order of the Soul Knife", source : [["UA:TMC", 7]], fullname : "Soul Knife", features : { "subclassfeature1" : { name : "Martial Training", source : [["UA:TMC", 7]], minlevel : 1, description: desc("I gain proficiency with medium armor and martial weapons"), armor : [false, true, false, false], weapons : [false, true] }, "subclassfeature1.1" : { name : "Soul Knife", source : [["UA:TMC", 8]], minlevel : 1, description : desc([ "As a bonus action, I can create or dismiss my soul knives on both my fists", "As a bonus action, I can parry with these to get +2 AC until the start of my next turn" ]), action : [["bonus action", " (create/dismiss)"], ['bonus action', ' Parry']], weaponOptions : [{ regExpSearch : /^(?=.*\bsoul)(?=.*(knives|knife|weapon)\b).*$/i, name : "Soul Knife", source : [["UA:TMC", 8]], ability : 1, type : "Martial", damage : [1, 8, "psychic"], range : "Melee", description : "Finesse, light", abilitytodamage : true, selectNow : true }] }, "subclassfeature3" : { name : "Hone the Blade", source : [["UA:TMC", 8]], minlevel : 3, description : desc([ "I can spend psi points to give my soul knives a bonus to attack and damage for 10 min", "2 psi points: +1; 5 psi points: +2; 7 psi points: +4" ]) }, "subclassfeature6" : { name : "Consumptive Knife", source : [["UA:TMC", 8]], minlevel : 6, description : desc([ "Whenever I slay an enemy with a soul knife attack, I immediately regain 2 psi points" ]) }, "subclassfeature14" : { name : "Phantom Knife", source : [["UA:TMC", 8]], minlevel : 14, description : desc([ "As an action, I can make one attack with my soul knife, treating the target's AC as 10" ]), action : [["action", ""]] } } }); // Order of the Wu Jen subclass for the Mystic AddSubClass("mystic", "wu jen-ua", { regExpSearch : /^(?=.*\bwu\b)(?=.*\bjen\b).*$/i, subname : "Order of the Wu Jen", source : [["UA:TMC", 8]], fullname : "Wu Jen", features : { "subclassfeature1" : { name : "Bonus Disciplines", source : [["UA:TMC", 8]], minlevel : 1, description : " [+2 wu jen disciplines]", spellcastingBonus : [{ name : "Bonus Disciplines", "class" : "mystic", school : ["Wu Jen"], level : [1, 9], times : 2, psionic : true }] }, "subclassfeature1.1" : { name : "Hermit's Study", source : [["UA:TMC", 8]], minlevel : 1, description : desc([ "I gain proficiency with two skills of my choice, taken from the following list:", "Animal Handling|Arcana|History|Insight|Medicine|Nature|Perception|Religion|Survival" ]), skillstxt : "Choose two from: Animal Handling, Arcana, History, Insight, Medicine, Nature, Perception, Religion, and Survival" }, "subclassfeature3" : { name : "Elemental Attunement", source : [["UA:TMC", 8]], minlevel : 3, description : desc([ "If a target's resistance reduces damage of one of my psionic disciplines, I can bypass it", "With 1 extra psi point for the discipline (psi limit permitting), the resistance is ignored" ]) }, "subclassfeature6" : { name : "Arcane Dabbler", source : [["UA:TMC", 8]], minlevel : 6, description : desc([ "I know 3 wizard spells (1-3 level); When I gain a mystic level, I can swap one of these", "As a bonus action, I can use psi points to make spell slots; Last until my next long rest", "2 PP: 1st-level; 3 PP: 2nd-level; 5 PP: 3rd-level; 6 PP: 4th-level; 7 PP: 5th-level" ]), spellcastingBonus : [{ name : "Arcane Dabbler", "class" : "wizard", level : [1, 3], times : 3 }] }, "subclassfeature14" : { name : "Elemental Mastery", source : [["UA:TMC", 8]], minlevel : 14, description : desc([ "As a reaction when I take damage to which I have resistance, I can ignore that damage", "I gain immunity to that damage type until the start of my next turn" ]) } } }); // The Psionic Talents for the Mystic (with contributions by rabidknave) PsionicsList["beacon-ua-psy"] = { name : "Beacon", classes : ["mystic"], source : [["UA:TMC", 27]], psionic : true, level : 0, time : "1 bns", range : "Self", duration : "1 h (D)", description : "My body sheds bright light 20-ft rad and dim light 20-ft, in chosen color; dismiss as a bonus action", descriptionFull : "As a bonus action, you cause bright light to radiate from your body in a 20-foot radius and dim light for an additional 20 feet. The light can be colored as you like. The light lasts for 1 hour, and you can extinguish it earlier as a bonus action." }; PsionicsList["blade meld-ua-psy"] = { name : "Blade Meld", classes : ["mystic"], source : [["UA:TMC", 27]], psionic : true, level : 0, time : "1 bns", range : "Self", duration : "1 min", description : "One-handed melee weapon I'm holding merges with hand; it can't be removed for the duration", descriptionFull : "As a bonus action, a one-handed melee weapon you hold becomes one with your hand. For the next minute, you can't let go of the weapon nor can it be forced from your grasp." }; PsionicsList["blind spot-ua-psy"] = { name : "Blind Spot", classes : ["mystic"], source : [["UA:TMC", 27]], psionic : true, level : 0, time : "1 a", range : "120 ft", duration : "Next turn end", save : "Wis", description : "1 creature save or treats me as invisible until the end of my next turn", descriptionFull : "As an action, you erase your image from the mind of one creature you can see within 120 feet of you; the target must succeed on a Wisdom saving throw, or you are invisible to it until the end of your next turn." }; PsionicsList["delusion-ua-psy"] = { name : "Delusion", classes : ["mystic"], source : [["UA:TMC", 27]], psionic : true, level : 0, time : "1 a", range : "60 ft", duration : "1 min", description : "1 crea either hears a sound (whisper-scream), or sees up to 5-ft cube object that disappears on touch", descriptionFull : "As an action, you plant a false belief in the mind of one creature that you can see within 60 feet of you. You can create a sound or an image. Only the target of this talent perceives the sound or image you create." + "\n " + "If you create a sound, its volume can range from a whisper to a scream. It can be your voice, someone else's voice, a creature's roar, a musical instrument, or any other sound you pick. It lasts for 1 minute." + "\n " + "If you create an object, it must fit within a 5-foot cube and can't move or be reflective. The image can't create any effect that influences a sense other than sight. The image lasts for 1 minute, and it disappears if the creature touches it." }; PsionicsList["energy beam-ua-psy"] = { name : "Energy Beam", classes : ["mystic"], source : [["UA:TMC", 27]], psionic : true, level : 0, time : "1 a", range : "90 ft", duration : "Instantaneous", save : "Dex", description : "1 crea save or 1d8 Acid, Cold, Fire, Lightning, or Thunder dmg; +1d8 at CL 5, 11, and 17", descriptionCantripDie : "1 crea save or `CD`d8 Acid, Cold, Fire, Lightning, or Thunder dmg", descriptionFull : "As an action, you target one creature you can see within 90 feet of you. The target must succeed on a Dexterity saving throw or take 1d8 acid, cold, fire, lightning, or thunder damage (your choice)." + "\n " + "The talent's damage increases by 1d8 when you reach 5th level (2d8), 11th level (3d8), and 17th level (4d8)" }; PsionicsList["light step-ua-psy"] = { name : "Light Step", classes : ["mystic"], source : [["UA:TMC", 27]], psionic : true, level : 0, time : "1 bns", range : "Self", duration : "This turn end", description : "My walking speed increases by 10 ft; standing up costs 0 movement, once", descriptionFull : "As a bonus action, you alter your density and weight to improve your mobility. For the rest of your turn, your walking speed increases by 10 feet, and the first time you stand up this turn, you do so without expending any of your movement if your speed is greater than 0." }; PsionicsList["mind meld-ua-psy"] = { name : "Mind Meld", classes : ["mystic"], source : [["UA:TMC", 27]], psionic : true, level : 0, time : "1 bns", range : "120 ft", duration : "This turn end", description : "I communicate telepathically with 1 willing crea (int > 1) and gain access to 1 memory of theirs", descriptionFull : "As a bonus action, you can communicate telepathically with one willing creature you can see within 120 feet of you. The target must have an Intelligence of at least 2, otherwise this talent fails and the action is wasted." + "\n " + "This communication can occur until the end of the current turn. You don't need to share a language with the target for it to understand your telepathic utterances, and it understands you even if it lacks a language. You also gain access to one memory of the target's choice, gaining perfect recall of one thing it saw or did." }; PsionicsList["mind slam-ua-psy"] = { name : "Mind Slam", classes : ["mystic"], source : [["UA:TMC", 28]], psionic : true, level : 0, time : "1 a", range : "60 ft", duration : "Instantaneous", save : "Con", description : "1 crea save or 1d6 Force dmg, and knocked prone if Large or smaller; +1d6 at CL 5, 11, and 17", descriptionCantripDie : "1 crea save or `CD`d6 Force dmg, and knocked prone if Large or smaller", descriptionFull : "As an action, you target one creature you can see within 60 feet of you. The target must succeed on a Constitution saving throw or take 1d6 force damage. If it takes any of this damage and is Large or smaller, it is knocked prone." + "\n " + "The talent's damage increases by 1d6 when you reach 5th level (2d6), 11th level (3d6), and 17th level (4d6)" }; PsionicsList["mind thrust-ua-psy"] = { name : "Mind Thrust", classes : ["mystic"], source : [["UA:TMC", 28]], psionic : true, level : 0, time : "1 a", range : "120 ft", duration : "Instantaneous", save : "Int", description : "1 crea save or 1d10 Psychic dmg; +1d10 at CL 5, 11, and 17", descriptionCantripDie : "1 crea save or `CD`d10 Psychic dmg", descriptionFull : "As an action, you target one creature you can see within 120 feet of you. The target must succeed on an Intelligence saving throw or take 1d10 psychic damage." + "\n " + "The talent's damage increases by 1d10 when you reach 5th level (2d10), 11th level (3d10), and 17th level (4d10)." }; PsionicsList["mystic charm-ua-psy"] = { name : "Mystic Charm", classes : ["mystic"], source : [["UA:TMC", 28]], psionic : true, level : 0, time : "1 a", range : "120 ft", duration : "Next turn end", save : "Cha", description : "1 humanoid save or charmed until end of my next turn", descriptionFull : "As an action, you beguile one humanoid you can see within 120 feet of you. The target must succeed on a Charisma saving throw or be charmed by you until the end of your next turn." }; PsionicsList["mystic hand-ua-psy"] = { name : "Mystic Hand", classes : ["mystic"], source : [["UA:TMC", 28]], psionic : true, level : 0, time : "1 a", range : "30 ft", duration : "This turn end", description : "Move 1 unattended object (up to 10 lbs) up to 30 ft, or manipulate an object", descriptionFull : "You can use your action to manipulate or move one object within 30 feet of you. The object can't weigh more than 10 pounds, and you can't affect an object being worn or carried by another creature. If the object is loose, you can move it up to 30 feet in any direction." + "\n " + "This talent allows you to open an unlocked door, pour out a beer stein, and so on." + "\n " + "The object falls to the ground at the end of your turn if you leave it suspended in midair." }; PsionicsList["psychic hammer-ua-psy"] = { name : "Psychic Hammer", classes : ["mystic"], source : [["UA:TMC", 28]], psionic : true, level : 0, time : "1 a", range : "120 ft", duration : "Instantaneous", save : "Str", description : "1 crea save or 1d6 Force dmg and moved up to 10 ft in chosen direction; +1d6 at CL 5, 11, and 17", descriptionCantripDie : "1 crea save or `CD`d6 Force dmg and moved up to 10 ft in chosen direction", descriptionFull : "As an action, you try to grasp one creature you can see within 120 feet of you, with a hand crafted from telekinetic energy. The target must succeed on a Strength saving throw or take 1d6 force damage. If it takes any of this damage and is Large or smaller, you can move it up to 10 feet in a straight line in a direction of your choice. You can't lift the target off the ground unless it is already airborne or underwater." + "\n " + "The talent's damage increases by 1d6 when you reach 5th level (2d6), 11th level (3d6), and 17th level (4d6)." }; // Psionic Disciplines for the Mystic //the adaptive body discipline PsionicsList["adaptive body-ua-psy"] = { name : "Adaptive Body", classes : ["mystic"], source : [["UA:TMC", 10]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I don't need to eat, breathe, or sleep; I can long rest with 8 hours of light activity, without sleep", descriptionFull : "You can alter your body to match your surroundings, allowing you to withstand punishing environments. With greater psi energy, you can extend this protection to others." + PsychicFocus + "While focused on this discipline, you don't need to eat, breathe, or sleep. To gain the benefits of a long rest, you can spend 8 hours engaged in light activity, rather than sleeping during any of it.", firstCol : "checkbox", dependencies : ["ab1-environmental adaptation", "ab2-adaptive shield", "ab3-energy adaptation", "ab4-energy immunity"] }; PsionicsList["ab1-environmental adaptation"] = { name : "Environmental Adaptation", nameShort : "Environmental Adapt.", source : [["UA:TMC", 10]], psionic : true, level : 1, school : "Immor", time : "1 a", range : "Touch", duration : "1 h", description : "1 creature ignores the effects of extreme heat or cold (but not Fire or Cold damage)", descriptionFull : "As an action, you or a creature you touch ignores the effects of extreme heat or cold (but not cold or fire damage) for the next hour.", firstCol : 2 }; PsionicsList["ab2-adaptive shield"] = { name : "Adaptive Shield", source : [["UA:TMC", 10]], psionic : true, level : 1, school : "Immor", time : "1 rea", timeFull : "1 reaction, which you take when you take acid, cold, fire, lightning, or thunder damage", range : "Self", duration : "Next turn end", description : "If taking Acid, Cold, Fire, Lightning, or Thunder damage, gain resistance to it until end of next turn", descriptionFull : "When you take acid, cold, fire, lightning, or thunder damage, you can use your reaction to gain resistance to damage of that type -including the triggering damage- until the end of your next turn.", firstCol : 3 }; PsionicsList["ab3-energy adaptation"] = { name : "Energy Adaptation", source : [["UA:TMC", 10]], psionic : true, level : 1, school : "Immor", time : "1 a", range : "Touch", duration : "Conc, 1 h", description : "1 creature gains resistance to either Acid, Cold, Fire, Lightning, or Thunder damage", descriptionFull : "As an action, you can touch one creature and give it resistance to acid, cold, fire, lightning, or thunder damage (your choice), which lasts until your concentration ends.", firstCol : 5 }; PsionicsList["ab4-energy immunity"] = { name : "Energy Immunity", source : [["UA:TMC", 10]], psionic : true, level : 1, school : "Immor", time : "1 a", range : "Touch", duration : "Conc, 1 h", description : "1 creature gains immunity to either Acid, Cold, Fire, Lightning, or Thunder damage", descriptionFull : "As an action, you can touch one creature and give it immunity to acid, cold, fire, lightning, or thunder damage (your choice), which lasts until your concentration ends.", firstCol : 7 }; //the aura sight discipline (contributed by Justin W.) PsionicsList["aura sight-ua-psy"] = { name : "Aura Sight", classes : ["mystic"], source : [["UA:TMC", 10]], psionic : true, level : 1, school : "Awake", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain advantage on Wisdom (Insight) checks", descriptionFull : "You refocus your sight to see the energy that surrounds all creatures. You perceive auras, energy signatures that can reveal key elements of a creature's nature." + PsychicFocus + "While focused on this discipline, you have advantage on Wisdom (Insight) checks.", firstCol : "checkbox", dependencies : ["as1-asses foe", "as2-read moods", "as3-view aura", "as4-perceive the unseen"] }; PsionicsList["as1-asses foe"] = { name : "Asses Foe", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Awake", time : "1 bns", range : "Sight", duration : "Instantaneous", description : "Learn one creature's current HP total and all its immunities, resistances, and vulnerabilities", descriptionFull : "As a bonus action, you analyze the aura of one creature you see. You learn its current hit point total and all its immunities, resistances, and vulnerabilities.", firstCol : 2 }; PsionicsList["as2-read moods"] = { name : "Read Moods", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Awake", time : "1 bns", range : "Sight", duration : "Instantaneous", description : "Learn an one-word summary of the emotional state of up to 6 crea", descriptionFull : "As a bonus action, you learn a one-word summary of the emotional state of up to six creatures you can see, such as happy, confused, afraid, or violent.", firstCol : 2 }; PsionicsList["as3-view aura"] = { name : "View Aura", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "Sight", duration : "Conc, 1 h", description : "Monitor 1 crea: current HP, if magic effects it, basic emotional state; adv. on Insight/Cha checks vs. it", descriptionFull : "As an action, you study one creature's aura. Until your concentration ends, while you can see the target, you learn if it's under the effect of any magical or psionic effects, its current hit point total, and its basic emotional state. While this effect lasts, you have advantage on Wisdom (Insight) and Charisma checks you make against it.", firstCol : 3 }; PsionicsList["as4-perceive the unseen"] = { name : "Perceive the Unseen", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Awake", time : "1 bns", range : "Sight", duration : "Conc, 1 min", description : "See all creatures, including hidden and invisible ones, regardless of lighting conditions", descriptionFull : "As a bonus action, you gain the ability to see auras even of invisible or hidden creatures. Until your concentration ends, you can see all creatures, including hidden and invisible ones, regardless of lighting conditions.", firstCol : 5 }; //the bestial form discipline (contributed by rabidknave) PsionicsList["bestial form-ua-psy"] = { name : "Bestial Form", classes : ["mystic"], source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain advantage on Wisdom (Animal Handling) checks", descriptionFull : "You transform your body, gaining traits of different beasts." + PsychicFocus + "While focused on this discipline, you have advantage on Wisdom (Animal Handling) checks.", firstCol : "checkbox", dependencies : ["bf1-bestial claws", "bf2-bestial transformation", "bf3-bt - amphibious", "bf4-bt - climbing", "bf5-bt - flight", "bf6-bt - keen senses", "bf7-bt - perfect senses", "bf8-bt - swimming", "bf9-bt - tough hide"] }; PsionicsList["bf1-bestial claws"] = { name : "Bestial Claws", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "1 a", range : "5 ft", duration : "Instantaneous", description : "Melee weapon attack with manifested claw, dealing 1d10/PP Slashing dmg", descriptionFull : "You manifest long claws for an instant and make a melee weapon attack against one creature within 5 feet of you. On a hit, this attack deals 1d10 slashing damage per psi point spent.", firstCol : "1-7" }; PsionicsList["bf2-bestial transformation"] = { name : "Bestial Transformation", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", duration : "1 hr (D)", description : "Alter physique to gain one or more of following effects; sum PP cost for a single use; end with bns a", descriptionFull : "As a bonus action, you alter your physical form to gain different characteristics. When you use this ability, you can choose one or more of the following effects. Each effect has its own psi point cost. Add them together to determine the total cost. This transformation lasts for 1 hour, until you die, or until you end it as a bonus action.", firstCol : "2-7" }; PsionicsList["bf3-bt - amphibious"] = { name : " - Amphibious", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "", range : "Self", duration : "1 hr (D)", description : "I'm able to breathe air and water by gaining gills", descriptionFull : "You gain gills; you can breathe air and water", firstCol : 2 }; PsionicsList["bf4-bt - climbing"] = { name : " - Climbing", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "", range : "Self", duration : "1 hr (D)", description : "I gain climbing speed equal to my walking speed by growing tiny hooked claws", descriptionFull : "You grow tiny hooked claws that give you gain a climbing speed equal to your walking speed.", firstCol : 2 }; PsionicsList["bf5-bt - flight"] = { name : " - Flight", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "", range : "Self", duration : "1 hr (D)", description : "I gain flying speed equal to my walking speed by sprouting wings", descriptionFull : "Wings sprout from your back. You gain a flying speed equal to your walking speed.", firstCol : 5 }; PsionicsList["bf6-bt - keen senses"] = { name : " - Keen Senses", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "", range : "Self", duration : "1 hr (D)", description : "I gain advantage on Wisdom (Perception) checks through more sensitive eyes and ears", descriptionFull : "Your eyes and ears become more sensitive. You gain advantage on Wisdom (Perception) checks.", firstCol : 2 }; PsionicsList["bf7-bt - perfect senses"] = { name : " - Perfect Senses", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "", range : "Self", duration : "1 hr (D)", description : "I see invisible creatures/objects within 10 ft, even when blinded, through smell", descriptionFull : "You gain a keen sense of smell and an instinct to detect prey. You can see invisible creatures and objects within 10 feet of you, even if you are blinded.", firstCol : 3 }; PsionicsList["bf8-bt - swimming"] = { name : " - Swimming", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "", range : "Self", duration : "1 hr (D)", description : "I gain swimming speed equal to my walking speed by growing fins and webbed feet/hands", descriptionFull : "You gain fins and webbing between your fingers and toes; you gain a swimming speed equal to your walking speed.", firstCol : 2 }; PsionicsList["bf9-bt - tough hide"] = { name : " - Tough Hide", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "", range : "Self", duration : "1 hr (D)", description : "I gain +2 bonus to AC through thicker skin", descriptionFull : "Your skin becomes as tough as leather; you gain a +2 bonus to AC.", firstCol : 2 }; //the brute force discipline (contributed by rabidknave) PsionicsList["brute force-ua-psy"] = { name : "Brute Force", classes : ["mystic"], source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain advantage on Strength (Athletics) checks", descriptionFull : "You augment your natural strength with psionic energy, granting you the ability to achieve incredible feats of might." + PsychicFocus + "While focused on this discipline, you have advantage on Strength (Athletics) checks.", firstCol : "checkbox", dependencies : ["bf1-brute strike", "bf2-knock back", "bf3-mighty leap", "bf4-feat of strength"] }; PsionicsList["bf1-brute strike"] = { name : "Brute Strike", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", duration : "This turn end", description : "My next melee attack during this turn deals +1d6/PP damage, of the same type as the melee attack", descriptionFull : "As a bonus action, you gain a bonus to your next damage roll against a target you hit with a melee attack during the current turn. The bonus equals +1d6 per psi point spent, and the bonus damage is the same type as the attack. If the attack has more than one damage type, you choose which one to use for the bonus damage.", firstCol : "1-7" }; PsionicsList["bf2-knock back"] = { name : "Knock Back", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "1 rea", timeFull : "1 reaction, which you take when you hit a target with a melee attack", range : "Self", duration : "Instantaneous", save : "Str", description : "Use after melee atk hit; crea hit save or move 10 ft/PP away; if it then hits obj, 1d6/PP Bludg. dmg", //added the damage descriptionFull : "When you hit a target with a melee attack, you can activate this ability as a reaction. The target must succeed on a Strength saving throw or be knocked 10 feet away from you per psi point spent. The target moves in a straight line. If it hits an object, this movement immediately ends and the target takes 1d6 bludgeoning damage per psi point spent.", firstCol : "1-7" }; PsionicsList["bf3-mighty leap"] = { name : "Mighty Leap", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "Move", range : "Self", duration : "Instantaneous", description : "As part of my movement, jump 20 ft/PP in any direction", descriptionFull : "As part of your movement, you jump in any direction up to 20 feet per psi point spent.", firstCol : "1-7" }; PsionicsList["bf4-feat of strength"] = { name : "Feat of Strength", source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", duration : "Next turn end", description : "I gain +5 bonus to Strength checks until the end of next turn", descriptionFull : "As a bonus action, you gain a +5 bonus to Strength checks until the end of your next turn.", firstCol : 2 }; //the celerity discipline (contributed by rabidknave) PsionicsList["celerity-ua-psy"] = { name : "Celerity", classes : ["mystic"], source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "My walking speed increases by 10 ft", descriptionFull : "You channel psionic power into your body, honing your reflexes and agility to an incredible degree. The world seems to slow down while you continue to move as normal." + PsychicFocus + "While focused on this discipline, your walking speed increases by 10 feet.", firstCol : "checkbox", dependencies : ["c1-rapid step", "c2-agile defense", "c3-blur of motion", "c4-surge of speed", "c5-surge of action"] }; PsionicsList["c1-rapid step"] = { name : "Rapid Step", source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", duration : "This turn end", description : "My walking, swim, and climb speeds increases by 10 ft/PP; doesn't grant new movement modes", descriptionFull : "As a bonus action, you increase your walking speed by 10 feet per psi point spent until the end of the current turn. If you have a climbing or swimming speed, this increase applies to that speed as well.", firstCol : "1-7" }; PsionicsList["c2-agile defense"] = { name : "Agile Defense", source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", duration : "Instantaneous", description : "I can take the Dodge action now, as part of using this power", descriptionFull : "As a bonus action, you take the Dodge action.", firstCol : 2 }; PsionicsList["c3-blur of motion"] = { name : "Blur of Motion", source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Immor", time : "1 a", range : "Self", duration : "This turn end", description : "I'm invisible while moving during the current turn", descriptionFull : "As an action, you cause yourself to be invisible during any of your movement during the current turn.", firstCol : 2 }; PsionicsList["c4-surge of speed"] = { name : "Surge of Speed", source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", duration : "This turn end", description : "I don't provoke opportunity attacks and gain a climbing speed equal to my walking speed", descriptionFull : "As a bonus action, you gain two benefits until the end of the current turn: you don't provoke opportunity attacks, and you have a climbing speed equal to your walking speed.", firstCol : 2 }; PsionicsList["c5-surge of action"] = { name : "Surge of Action", source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", duration : "Instantaneous", description : "I can take either the Dash action or make one weapon attack now, as part of using this power", descriptionFull : "As a bonus action, you can Dash or make one weapon attack.", firstCol : 5 }; //the corrosive metabolism discipline (contributed by rabidknave) PsionicsList["corrosive metabolism-ua-psy"] = { name : "Corrosive Metabolism", classes : ["mystic"], source : [["UA:TMC", 11]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain resistance to Acid and Poison damage", descriptionFull : "Your control over your body allows you to deliver acid or poison attacks." + PsychicFocus + "While focused on this discipline, you have resistance to acid and poison damage.", firstCol : "checkbox", dependencies : ["cm1-corrosive touch", "cm2-venom strike", "cm3-acid spray", "cm4-breath of the black dragon", "cm5-breath of the green dragon"] }; PsionicsList["cm1-corrosive touch"] = { name : "Corrosive Touch", source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Immor", time : "1 a", range : "Touch", //use "Touch" instead of "5 ft" when its about reach duration : "Instantaneous", save : "Dex", description : "1 crea 1d10/PP Acid damage; save halves", // use "; save halves" for this kind of situations descriptionFull : "As an action, you deliver a touch of acid to one creature within your reach. The target must make a Dexterity saving throw, taking 1d10 acid damage per psi point spent on a failed save, or half as much damage on a successful one.", firstCol : "1-7" }; PsionicsList["cm2-venom strike"] = { name : "Venom Strike", source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Immor", time : "1 a", range : "30 ft", duration : "Instantaneous", save : "Con", description : "1 crea 1d6/PP Poison damage; save halves; if save failed, poisoned until end of my next turn", descriptionFull : "As an action, you create a poison spray that targets one creature you can see within 30 feet of you. The target must make a Constitution saving throw. On a failed save, it takes 1d6 poison damage per psi point spent and is poisoned until the end of your next turn. On a successful save, the target takes half as much damage and isn't poisoned.", firstCol : "1-7" }; PsionicsList["cm3-acid spray"] = { name : "Acid Spray", source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Immor", time : "1 rea", timeFull : "1 reaction, which you take when you take piercing or slashing damage", range : "5 ft", duration : "Instantaneous", description : "Use after I take Piercing or Slashing damage; all creatures in range take 2d6 Acid damage", descriptionFull : "As a reaction when you take piercing or slashing damage, you cause acid to spray from your wound; each creature within 5 feet of you takes 2d6 acid damage.", firstCol : 2 }; PsionicsList["cm4-breath of the black dragon"] = { name : "Breath of the Black Dragon", nameShort : "Breath o/t Black Dragon", source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Immor", time : "1 a", range : "60-ft line", duration : "Instantaneous", save : "Con", description : "60-ft long 5-ft wide line all creatures 6d6(+1d6/extra PP) Acid dmg; save halves", descriptionFull : "You exhale a wave of acid in a 60-foot line that is 5 feet wide. Each creature in the line must make a Constitution saving throw, taking 6d6 acid damage on a failed save, or half as much on a successful one. You can increase the damage by 1d6 per additional psi point spent on it.", firstCol : "5-7" }; PsionicsList["cm5-breath of the green dragon"] = { name : "Breath of the Green Dragon", nameShort : "Breath o/t Green Dragon", source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Immor", time : "1 a", range : "90-ft cone", duration : "Instantaneous", save : "Con", description : "All creatures 10d6 poison damage; save halves", descriptionFull : "You exhale a cloud of poison in a 90-foot cone. Each creature in the line must make a Constitution saving throw, taking 10d6 poison damage on a failed save, or half as much damage on a successful one.", firstCol : 7 }; //the crown of despair discipline (contributed by rabidknave) PsionicsList["crown of despair-ua-psy"] = { name : "Crown of Despair", classes : ["mystic"], source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "5-ft rad", components : "Psi-F.", duration : "While focused", description : "I gain advantage on Charisma (Intimidation) checks", descriptionFull : "You have learned to harvest seeds of despair in a creature's psyche, wracking it with self-doubt and inaction." + PsychicFocus + "While focused on this discipline, you have advantage on Charisma (Intimidation) checks.", firstCol : "checkbox", dependencies : ["cd1-crowned in sorrow", "cd2-call to inaction", "cd3-visions of despair", "cd4-dolorous mind"] }; PsionicsList["cd1-crowned in sorrow"] = { name : "Crowned in Sorrow", source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "Next turn start", save : "Cha", description : "1 crea 1d8/PP Psychic dmg and can't take reactions; save halves damage and normal reactions", descriptionFull : "As an action, one creature you can see within 60 feet of you must make a Charisma saving throw. On a failed save, it takes 1d8 psychic damage per psi point spent, and it can't take reactions until the start of its next turn. On a successful save, it takes half as much damage.", firstCol : "1-7" }; PsionicsList["cd2-call to inaction"] = { name : "Call to Inaction", source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Avatar", time : "1 min", range : "Self", duration : "Conc, 10 min", save : "Wis", description : "After 1 min conversation, 1 crea save or incapacitated; ends if it or its ally is attacked (charm effect)", descriptionFull : "If you spend 1 minute conversing with a creature, you can attempt to seed it with overwhelming ennui. At the end of the minute, you can use an action to force the creature to make a Wisdom saving throw. The save automatically succeeds if the target is immune to being charmed. On a failed save, it sits and is incapacitated until your concentration ends. This effect immediately ends if the target or any ally it can see is attacked or takes damage. On a successful save, the creature is unaffected and has no inkling of your attempt to bend its will.", firstCol : 2 }; PsionicsList["cd3-visions of despair"] = { name : "Visions of Despair", source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "1 rnd", save : "Cha", description : "1 crea 3d6(+1d6/extra PP) Psychic dmg and speed reduced to 0; save halves and no speed reduction", descriptionFull : "As an action, you force one creature you can see within 60 feet of you to make a Charisma saving throw. On a failed save, it takes 3d6 psychic damage, and its speed is reduced to 0 until the end of its next turn. On a successful save, it takes half as much damage. You can increase the damage by 1d6 per additional psi point spent on it.", firstCol : "3-7" }; PsionicsList["cd4-dolorous mind"] = { name : "Dolorous Mind", source : [["UA:TMC", 12]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "Conc, 1 min", save : "Cha", description : "1 crea save or incapacitated and speed 0; save at end of each turn", descriptionFull : "As an action, you choose one creature you can see within 60 feet of you. It must succeed on a Charisma saving throw, or it is incapacitated and has a speed of 0 until your concentration ends. It can repeat this saving throw at the end of each of its turns, ending the effect on itself on a success.", firstCol : 5 }; //the crown of disgust discipline PsionicsList["crown of disgust-ua-psy"] = { name : "Crown of Disgust", classes : ["mystic"], source : [["UA:TMC", 13]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "5-ft rad", components : "Psi-F.", duration : "While focused", description : "5-ft rad around me is difficult terrain for creatures that aren't immune to being frightened", descriptionFull : "You cause a creature to be flooded with emotions of disgust." + PsychicFocus + "While you are focused on this discipline, the area in a 5-foot radius around you is difficult terrain for any enemy that isn't immune to being frightened.", firstCol : "checkbox", dependencies : ["cd1-eye of horror", "cd2-wall of repulsion", "cd3-visions of disgust", "cd4-world of horror"] }; PsionicsList["cd1-eye of horror"] = { name : "Eye of Horror", source : [["UA:TMC", 13]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "Next turn end", save : "Cha", description : "1 crea save or 1d6/PP Psychic damage and can't move closer; save halves and no movement restriction", descriptionFull : "As an action, choose one creature you can see within 60 feet of you. The target must make a Charisma saving throw. On a failed save, it takes 1d6 psychic damage per psi point spent and can't move closer to you until the end of its next turn. On a successful save, it takes half as much damage.", firstCol : "1-7" }; PsionicsList["cd2-wall of repulsion"] = { name : "Wall of Repulsion", source : [["UA:TMC", 13]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "Conc, 10 min", save : "Wis", description : "Up to 30\xD71\xD710 ft (l\xD7w\xD7h) invisible wall of energy; save to move through it, even for unwilling move", description : "Up to 9\xD70,3\xD73 m (l\xD7w\xD7h) invisible wall of energy; save to move through it, even for unwilling move", descriptionFull : "As an action, you create an invisible, insubstantial wall of energy within 60 feet of you that is up to 30 feet long, 10 feet high, and 1 foot thick. The wall lasts until your concentration ends. Any creature attempting to move through it must make a Wisdom saving throw. On a failed save, a creature can't move through the wall until the start of its next turn. On a successful save, the creature can pass through it. A creature must make this save whenever it attempts to pass through the wall, whether willingly or unwillingly.", firstCol : 3 }; PsionicsList["cd3-visions of disgust"] = { name : "Visions of Disgust", source : [["UA:TMC", 13]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "Conc, 1 min", save : "Wis", description : "1 crea save or 5d6 Psychic dmg (half on save) & 1d6 Psychic dmg per crea within 5 ft at its turn end", descriptionFull : "You cause a creature to regard all other beings as horrid, alien entities. As an action, choose one creature you can see within 60 feet of you. The target must make a Wisdom saving throw. On a failed save, it takes 5d6 psychic damage, and until your concentration ends, it takes 1d6 psychic damage per creature within 5 feet of it at the end of each of its turns. On a successful save, the target takes only half the initial damage and suffers none of the other effects.", firstCol : 5 }; PsionicsList["cd4-world of horror"] = { name : "World of Horror", source : [["UA:TMC", 13]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "Conc, 1 min", save : "Cha", description : "6 crea 8d6 Psychic dmg, frightened, \u0026 do only melee atks; save halves, no other effects; save each rnd", descriptionFull : "As an action, choose up to six creatures within 60 feet of you. Each target must make a Charisma saving throw. On a failed save, a target takes 8d6 psychic damage, and it is frightened until your concentration ends. On a successful save, a target takes half as much damage." + "\n " + "While frightened by this effect, a target's speed is reduced to 0, and the target can use its action, and any bonus action it might have, only to make melee attacks. The frightened target can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success.", firstCol : 7 }; //the crown of rage discipline PsionicsList["crown of rage-ua-psy"] = { name : "Crown of Rage", classes : ["mystic"], source : [["UA:TMC", 13]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "5-ft rad", components : "Psi-F.", duration : "While focused", description : "Any crea within range has disadvantage on melee attack rolls against targets other than me", descriptionFull : "You place a mote of pure fury within a creature's mind, causing its bloodlust to overcome its senses and for it to act as you wish it to." + PsychicFocus + "While you are focused on this discipline, any enemy within 5 feet of you that makes a melee attack roll against creatures other than you does so with disadvantage.", firstCol : "checkbox", dependencies : ["cr1-primal fury", "cr2-fighting words", "cr3-mindless courage", "cr4-punishing fury"] }; PsionicsList["cr1-primal fury"] = { name : "Primal Fury", source : [["UA:TMC", 13]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "Instantaneous", save : "Cha", description : "1 crea save or 1d6/PP Psychic dmg, use rea to move its speed toward nearest enemy (charm effect)", descriptionFull : "As an action, choose one creature you can see within 60 feet of you. The target must succeed on a Charisma saving throw or take 1d6 psychic damage per psi point spent on this ability and immediately use its reaction to move its speed in a straight line toward its nearest enemy. The save automatically succeeds if the target is immune to being charmed.", firstCol : "1-7" }; PsionicsList["cr2-fighting words"] = { name : "Fighting Words", source : [["UA:TMC", 13]], psionic : true, level : 1, school : "Avatar", time : "1 min", range : "Self", duration : "Conc, 10 min", save : "Wis", description : "After 1 min conversation, 1 crea save or attack one other, chosen crea for 5 rnds (charm effect)", descriptionFull : "If you spend 1 minute conversing with a creature, you can attempt to leave a simmering violence in its mind. At the end of the minute, you can use an action to force the creature to make a Wisdom saving throw to resist feeling violent urges against one creature you describe to it or name. The save automatically succeeds if the target is immune to being charmed. On a failed save, the target attacks the chosen creature if it sees that creature before your concentration ends, using weapons or spells against a creature it was already hostile toward or unarmed strikes against an ally or a creature it was neutral toward. Once the fight starts, it continues to attack for 5 rounds before this effect ends. This effect immediately ends if the target or any ally it can see is attacked or takes damage from any creature other than the one it has been incited against. On a successful save, the creature is unaffected and has no inkling of your attempt to bend its will.", firstCol : 2 }; PsionicsList["cr3-mindless courage"] = { name : "Mindless Courage", source : [["UA:TMC", 13]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "60 ft", duration : "Next turn end", save : "Wis", description : "1 crea save or it can only move towards the nearest enemy it can see, or not move at all (charm effect)", descriptionFull : "You cause a creature's bloodlust to overcome its sense of preservation. As a bonus action, choose one creature you can see within 60 feet of you. The target must succeed on a Wisdom saving throw or, until the end of your next turn, it can't willingly move unless its movement brings it closer to its nearest enemy that it can see. The save automatically succeeds if the target is immune to being charmed.", firstCol : 2 }; PsionicsList["cr4-punishing fury"] = { name : "Punishing Fury", source : [["UA:TMC", 14]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "60 ft", duration : "Conc, 1 min", save : "Wis", description : "1 crea save or when it makes melee atk, all in 5 ft of it can make melee atk vs. it as rea (charm effect)", descriptionFull : "You cause a creature's rage to grow so hot that it attacks without heeding its own safety. As a bonus action, choose one creature you can see within 60 feet of you. The target must succeed on a Wisdom saving throw or, until your concentration ends, any creature within 5 feet of it can use a reaction to make a melee attack against it whenever the target makes a melee attack. The save automatically succeeds if the target is immune to being charmed.", firstCol : 5 }; //the diminution discipline (contributed by mattohara & TheBob427) PsionicsList["diminution-ua-psy"] = { name : "Diminution", classes : ["mystic"], source : [["UA:TMC", 14]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I have advantage on Dexterity (Stealth) checks", descriptionFull : "You manipulate the matter that composes your body, drastically reducing your size without surrendering any of your might." + PsychicFocus + "While focused on this discipline, you have advantage on Dexterity (Stealth) checks.", firstCol : "checkbox", dependencies : ["d1-miniature form", "d2-toppling shift", "d3-sudden shift", "d4-microscopic form"] }; PsionicsList["d1-miniature form"] = { name : "Miniature Form", source : [["UA:TMC", 14]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", duration : "Conc, 10 min", description : 'Become Tiny, gain +5 to Dex (Stealth) and can fit through gaps of up to 6" without squeezing', descriptionMetric : "Become Tiny, gain +5 to Dex (Stealth) and can fit through gaps of up to 15 cm without squeezing", descriptionFull : "As a bonus action, you become Tiny until your concentration ends. While this size, you gain a +5 bonus to Dexterity (Stealth) checks and can move through gaps up to 6 inches across without squeezing.", firstCol : 2 }; PsionicsList["d2-toppling shift"] = { name : "Toppling Shift", source : [["UA:TMC", 14]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "5 ft", duration : "Instantaneous", save : "Str", description : "1 creature save or be knocked prone", descriptionFull : "As a bonus action, you shift to an incredibly small size and then suddenly return to normal, sending an opponent flying backward. Choose one creature you can see within 5 feet of you. It must succeed on a Strength saving throw or be knocked prone.", firstCol : 2 }; PsionicsList["d3-sudden shift"] = { name : "Sudden Shift", source : [["UA:TMC", 14]], psionic : true, level : 1, school : "Immor", time : "1 rea", timeFull : "1 reaction, which you take when are hit by an attack", range : "Self", duration : "Instantaneous", description : "Use when hit by an attack; it misses, and I move up to 5 ft without provoking opportunity attacks", descriptionFull : "As a reaction when you are hit by an attack, you shift down to minute size to avoid the attack. The attack misses, and you move up to 5 feet without provoking opportunity attacks before returning to normal size.", firstCol : 5 }; PsionicsList["d4-microscopic form"] = { name : "Microscopic Form", source : [["UA:TMC", 14]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", duration : "Conc, 10 min", description : "Become diminutive, gain +5 AC, +10 to Dex (Stealth), can fit through 1\" gaps, but can't use wea atks", descriptionMetric : "Become diminutive, gain +5 AC, +10 to Dex (Stealth), can fit through 2,5 cm gaps, can't use wea atks", descriptionFull : "As a bonus action, you become smaller than Tiny until your concentration ends. While this size, you gain a +10 bonus to Dexterity (Stealth) checks and a +5 bonus to AC, you can move through gaps up to 1 inch across without squeezing, and you can't make weapon attacks.", firstCol : 7 }; //the giant growth discipline (contributed by mattohara & TheBob427) PsionicsList["giant growth-ua-psy"] = { name : "Giant Growth", classes : ["mystic"], source : [["UA:TMC", 14]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Touch", components : "Psi-F.", duration : "While focused", description : "My reach increases by 5 ft", descriptionFull : "You infuse yourself with psionic energy to grow to tremendous size, bolstering your strength and durability." + PsychicFocus + "While focused on this discipline, your reach increases by 5 feet.", firstCol : "checkbox", dependencies : ["gg1-ogre form", "gg2-giant form"] }; PsionicsList["gg1-ogre form"] = { name : "Ogre Form", source : [["UA:TMC", 14]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", duration : "Conc, 1 min", description : "10 temp. HP; for duration: become Large, +5 ft reach, melee attacks deal +1d4 Bludgeoning dmg", descriptionFull : "As a bonus action, you gain 10 temporary hit points. In addition, until your concentration ends, your melee weapon attacks deal an extra 1d4 bludgeoning damage on a hit, and your reach increases by 5 feet. If you're smaller than Large, you also become Large for the duration.", firstCol : 2 }; PsionicsList["gg2-giant form"] = { name : "Giant Form", source : [["UA:TMC", 14]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", duration : "Conc, 1 min", description : "30 temp. HP; for duration: become Huge, +10 ft reach, melee attacks deal +2d6 Bludgeoning dmg", descriptionFull : "As a bonus action, you gain 30 temporary hit points. In addition, until your concentration ends, your melee weapon attacks deal an extra 2d6 bludgeoning damage on a hit, and your reach increases by 10 feet. If you're smaller than Huge, you also become Huge for the duration.", firstCol : 7 }; //the intellect fortress discipline (contributed by TheBob427) PsionicsList["intellect fortress-ua-psy"] = { name : "Intellect Fortress", classes : ["mystic"], source : [["UA:TMC", 14]], psionic : true, level : 1, school : "Awake", time : "1 bns", range : "Self", components : "Psi-F", duration : "While focused", description : "I gain resistance to Psychic damage", descriptionFull : "You forge an indomitable wall of psionic energy around your mind-one that allows you to launch counterattacks against your opponents." + PsychicFocus + "While focused on this discipline, you have resistance to psychic damage.", firstCol : "checkbox", dependencies : ["if1-psychic backlash", "if2-psychic parry", "if3-psychic redoubt"] }; PsionicsList["if1-psychic backlash"] = { name : "Psychic Backlash", source : [["UA:TMC", 14]], psionic : true, level : 1, school : "Awake", time : "1 rea", range : "Sight", duration : "Instantaneous", description : "I impose dis. on an attack roll vs. me; if I'm hit anyway, the attacker takes 2d10 Psychic damage", descriptionFull : "As a reaction, you can impose disadvantage on an attack roll against you if you can see the attacker. If the attack still hits you, the attacker takes 2d10 psychic damage.", firstCol : 2 }; PsionicsList["if2-psychic parry"] = { name : "Psychic Parry", source : [["UA:TMC", 14]], psionic : true, level : 1, school : "Awake", time : "1 rea", timeFull : "1 reaction, which you take when you make an Intelligence, a Wisdom, or a Charisma saving throw", range : "Self", duration : "Instantaneous", description : "Add +1/PP to the result of an Int, Wis, or Cha save; use after rolling, but before knowing if successful", descriptionFull : "As a reaction when you make an Intelligence, a Wisdom, or a Charisma saving throw, you gain a +1 bonus to that saving throw for each psi point you spend on this ability. You can use this ability after rolling the die but before suffering the results.", firstCol : "1-7" }; PsionicsList["if3-psychic redoubt"] = { name : "Psychic Redoubt", source : [["UA:TMC", 14]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "30 ft", duration : "Conc, 10 min", description : "Any creatures in range gain resistance to Psychic damage and advantage on Int, Wis, and Cha saves", descriptionFull : "As an action, you create a field of protective psychic energy. Choose any number of creatures within 30 feet of you. Until your concentration ends, each target has resistance to psychic damage and advantage on Intelligence, Wisdom, and Charisma saving throws.", firstCol : 5 }; //the iron durability discipline (contributed by mattohara) PsionicsList["iron durability-ua-psy"] = { name : "Iron Durability", classes : ["mystic"], source : [["UA:TMC", 15]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain a +1 bonus to AC", descriptionFull : "You transform your body to become a living metal, allowing you to shrug off attacks that would cripple weaker creatures." + PsychicFocus + "While focused on this discipline, you gain a +1 bonus to AC.", firstCol : "checkbox", dependencies : ["id1-iron hide", "id2-steel hide", "id3-iron resistance"] }; PsionicsList["id1-iron hide"] = { name : "Iron Hide", source : [["UA:TMC", 15]], psionic : true, level : 1, school : "Immor", time : "1 rea", timeFull : "1 reaction, which you take when you are hit by an attack", range : "Self", duration : "Next turn end", description : "I gain +1/PP AC; use when hit by attack; bonus works against triggering attack", descriptionFull : "As a reaction when you are hit by an attack, you gain a +1 bonus to AC for each psi point you spend on this ability. The bonus lasts until the end of your next turn. This bonus applies against the triggering attack.", firstCol : "1-7" }; PsionicsList["id2-steel hide"] = { name : "Steel Hide", source : [["UA:TMC", 15]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", duration : "Next turn end", description : "I gain resistance to Bludgeoning, Piercing, and Slashing damage", descriptionFull : "As a bonus action, you gain resistance to bludgeoning, piercing, and slashing damage until the end of your next turn.", firstCol : 2 }; PsionicsList["id3-iron resistance"] = { name : "Iron Resistance", source : [["UA:TMC", 15]], psionic : true, level : 1, school : "Immor", time : "1 a", range : "Self", duration : "Conc, 1 h", description : "I gain resistance to bludgeoning, piercing, or slashing (my choice)", descriptionFull : "As an action, you gain resistance to bludgeoning, piercing, or slashing damage (your choice), which lasts until your concentration ends.", firstCol : 7 }; //the mantle of awe discipline (contributed by mattohara) PsionicsList["mantle of awe-ua-psy"] = { name : "Mantle of Awe", classes : ["mystic"], source : [["UA:TMC", 15]], psionic : true, level : 1, school : "Awake", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain a bonus to Charisma checks, bonus equals half my Intelligence modifier (min 1)", descriptionFull : "You learn to use psionic energy to manipulate others with a subtle combination of psi and your own, natural charm." + PsychicFocus + "While focused on this discipline, you gain a bonus to Charisma checks. The bonus equals half your Intelligence modifier (minimum of +1).", firstCol : "checkbox", dependencies : ["moa1-charming presence", "moa2-center of attention", "moa3-invoke awe"] }; PsionicsList["moa1-charming presence"] = { name : "Charming Presence", source : [["UA:TMC", 15]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "30 ft", duration : "10 min", description : "2d8/PP HP of conscious, not in combat, not immune to charm crea charmed; use HP max, not current", descriptionFull : "As an action, you exert an aura of sympathetic power. Roll 2d8 per psi point spent on this ability; the total is how many hit points worth of creatures this option can affect. Creatures within 30 feet of you are affected in ascending order of their hit point maximums, ignoring incapacitated creatures, creatures immune to being charmed, and creatures engaged in combat." + "\n " + "Starting with the creature that has the lowest hit point maximum, each creature affected by this option is charmed by you for 10 minutes, regarding you as a friendly acquaintance. Subtract each creature's hit point maximum from the total before moving on to the next creature. A creature's hit point maximum must be equal to or less than the remaining total for that creature to be affected.", firstCol : "1-7" }; PsionicsList["moa2-center of attention"] = { name : "Center of Attention", source : [["UA:TMC", 15]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Conc, 1 min", save : "Cha", description : "1 crea save or all other creatures are invisible to it; ends if it leaves my sight/earshot or takes dmg", descriptionFull : "As an action, you exert an aura of power that grabs a creature's attention. Choose one creature you can see within 60 feet of you. It must make a Charisma saving throw. On a failed save, the creature is so thoroughly distracted by you that all other creatures are invisible to it until your concentration ends. This effect ends if the creature can no longer see or hear you or if it takes damage.", firstCol : 2 }; PsionicsList["moa3-invoke awe"] = { name : "Invoke Awe", source : [["UA:TMC", 15]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Conc, 10 min", save : "Int", description : "5 crea save or charmed, obey verbal commands; no self harm; will atk crea that atk me; save each rnd", descriptionFull : "As an action, you exert an aura that inspires awe in others. Choose up to 5 creatures you can see within 60 feet of you. Each target must succeed on an Intelligence saving throw or be charmed by you until your concentration ends. While charmed, the target obeys all your verbal commands to the best of its ability and without doing anything obviously self-destructive. The charmed target will attack only creatures that it has seen attack you since it was charmed or that it was already hostile toward. At the end of each of its turns, it can repeat the saving throw, ending the effect on itself on a success.", firstCol : 7 }; //the mantle of command discipline PsionicsList["mantle of command-ua-psy"] = { name : "Mantle of Command", classes : ["mystic"], source : [["UA:TMC", 15]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "When ending a turn I didn't move in, use my rea to have 1 ally within 30 ft move half its speed", descriptionFull : "You exert an aura of trust and authority, enhancing the coordination among your allies." + PsychicFocus + "While focused on this discipline, when you end your turn and didn't move during it, you can use your reaction to allow one ally you can see within 30 feet of you to move up to half their speed, following a path of your choice. To move in this way, the ally mustn't be incapacitated.", firstCol : "checkbox", dependencies : ["mc1-coordinated movement", "mc2-commander's sight", "mc3-command to strike", "mc4-strategic mind", "mc5-overwhelming attack"] }; PsionicsList["mc1-coordinated movement"] = { name : "Coordinated Movement", source : [["UA:TMC", 15]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "60 ft", duration : "Instantaneous", description : "Up to 5 allies I can see can use their reaction to move half their speed, following a path I choose", descriptionFull : "As a bonus action, choose up to five allies you can see within 60 feet of you. Each of those allies can use their reaction to move up to half their speed, following a path of your choice.", firstCol : 2 }; PsionicsList["mc2-commander's sight"] = { name : "Commander's Sight", source : [["UA:TMC", 15]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "Conc, 1 rnd", description : "I mark 1 crea; until the start of my next turn, my allies have adv. on attacks vs. it", descriptionFull : "As an action, choose one creature you can see within 60 feet of you. Until the start of your next turn, your allies have advantage on attack rolls against that target.", firstCol : 2 }; PsionicsList["mc3-command to strike"] = { name : "Command to Strike", source : [["UA:TMC", 15]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "Instantaneous", description : "1 ally I can see can use their reaction to take the Attack action, with me choosing the targets", descriptionFull : "As an action, choose one ally you can see within 60 feet of you. That ally can use their reaction to immediately take the Attack action. You choose the targets.", firstCol : 3 }; PsionicsList["mc4-strategic mind"] = { name : "Strategic Mind", source : [["UA:TMC", 15]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "Conc, 1 min", description : "1 ally can, on its turn, either add 1d4 to its attack rolls or take Dash or Disengage as a bonus action", descriptionFull : "As an action, you exert an aura of trust and command that unites your allies into a cohesive unit. Until your concentration ends, any ally within 60 feet of you on their turn can, as a bonus action, take the Dash or Disengage action or roll a d4 and add the number rolled to each attack roll they make that turn.", firstCol : 5 }; PsionicsList["mc5-overwhelming attack"] = { name : "Overwhelming Attack", source : [["UA:TMC", 15]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "Instantaneous", description : "Up to 5 allies I see can use their reactions to take the Attack action, with me choosing the targets", descriptionFull : "As an action, choose up to five allies you can see within 60 feet of you. Each of those allies can use their reaction to take the Attack action. You choose the targets of the attacks.", firstCol : 7 }; //the mantle of courage discipline PsionicsList["mantle of courage-ua-psy"] = { name : "Mantle of Courage", classes : ["mystic"], source : [["UA:TMC", 16]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "My and allies within 10 ft that can see me have advantage on saves vs. being frightened", descriptionFull : "You focus your mind on courage, radiating confidence and bravado to your allies." + PsychicFocus + "While focused on this discipline, you and allies within 10 feet of you who can see you have advantage on saving throws against being frightened.", firstCol : "checkbox", dependencies : ["mc1-incite courage", "mc2-aura of victory", "mc3-pillar of confidence"] }; PsionicsList["mc1-incite courage"] = { name : "Incite Courage", source : [["UA:TMC", 16]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "60 ft", duration : "Instantaneous", description : "Up to 6 creatures are no longer frightened", descriptionFull : "As a bonus action, choose up to six creatures you can see within 60 feet of you. If any of those creatures is frightened, that condition ends on that creature.", firstCol : 2 }; PsionicsList["mc2-aura of victory"] = { name : "Aura of Victory", source : [["UA:TMC", 16]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "30 ft", duration : "Conc, 10 min", description : "When an enemy I can see is reduced to 0 HP, me and allies within range gain 2/PP temporary HP", descriptionFull : "As a bonus action, you project psionic energy until your concentration ends. The energy fortifies you and your allies when your enemies are felled; whenever an enemy you can see is reduced to 0 hit points, you and each of your allies within 30 feet of you gain temporary hit points equal to double the psi points spent to activate this effect.", firstCol : "1-7" }; PsionicsList["mc3-pillar of confidence"] = { name : "Pillar of Confidence", source : [["UA:TMC", 16]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "Next turn end", description : "Me \u0026 up to 5 crea gain, on their turn, a special action to either make 1 wea atk, Dash, or Disengage", descriptionFull : "As an action, you and up to five creatures you can see within 60 feet of you each gain one extra action to use on their individual turns. The action goes away if not used before the end of your next turn. the action can be used only to make one weapon attack or to take the Dash or Disengage action.", firstCol : 6 }; //the mantle of fear discipline PsionicsList["mantle of fear-ua-psy"] = { name : "Mantle of Fear", classes : ["mystic"], source : [["UA:TMC", 16]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain advantage on Charisma (Intimidation) checks", descriptionFull : "You tap into a well of primal fear and turn yourself into a beacon of terror to your enemies." + PsychicFocus + "While focused on this discipline, you have advantage on Charisma (Intimidation) checks.", firstCol : "checkbox", dependencies : ["mf1-incite fear", "mf2-unsettling aura", "mf3-incite panic"] }; PsionicsList["mf1-incite fear"] = { name : "Incite Fear", source : [["UA:TMC", 16]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "Conc, 1 min", save : "Wis", description : "1 crea save or be frightened of me; repeat save each turn when out of line of sight", descriptionFull : "As an action, choose one creature you can see within 60 feet of you. The target must succeed on a Wisdom saving throw or become frightened of you until your concentration ends. Whenever the frightened target ends its turn in a location where it can't see you, it can repeat the saving throw, ending the effect on itself on a success.", firstCol : 2 }; PsionicsList["mf2-unsettling aura"] = { name : "Unsettling Aura", source : [["UA:TMC", 16]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "60 ft", duration : "Conc, 1 h", description : "All crea in range that can see me move only half speed when moving towards me (frightening effect)", descriptionFull : "As a bonus action, you cloak yourself in unsettling psychic energy. Until your concentration ends, any enemy within 60 feet of you that can see you must spend 1 extra foot of movement for every foot it moves toward you. A creature ignores this effect if immune to being frightened.", firstCol : 3 }; PsionicsList["mf3-incite panic"] = { name : "Incite Panic", source : [["UA:TMC", 16]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "90 ft", duration : "Conc, 1 min", save : "Wis", description : "8 crea save each rnd or frightened and spend turn on random move or melee atk; 3 saves ends; see B", descriptionFull : "As an action, choose up to eight creatures you can see within 90 feet of you that can see you. At the start of each of a target's turns before your concentration ends, the target must make a Wisdom saving throw. On a failed save, the target is frightened until the start of its next turn, and you roll a die. If you roll an odd number, the frightened target moves half its speed in a random direction and takes no action on that turn, other than to scream in terror. If you roll an even number, the frightened target makes one melee attack against a random target within its reach. If there is no such target, it moves half its speed in a random direction and takes no action on that turn. This effect ends on a target if it succeeds on three saving throws against it.", firstCol : 5 }; //the mantle of fury discipline PsionicsList["mantle of fury-ua-psy"] = { name : "Mantle of Fury", classes : ["mystic"], source : [["UA:TMC", 16]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "Me and allies within 10 ft at start of my turn gain +5 ft walking speed for that turn", descriptionFull : "You allow the primal fury lurking deep within your mind to burst forth, catching you and your allies in an implacable bloodthirst." + PsychicFocus + "While focused on this discipline in combat, you and any ally who starts their turn within 10 feet of you gains a 5-foot increase to their walking speed during that turn.", firstCol : "checkbox", dependencies : ["mf1-incite fury", "mf2-mindless charge", "mf3-aura of bloodletting", "mf4-overwhelming fury"] }; PsionicsList["mf1-incite fury"] = { name : "Incite Fury", source : [["UA:TMC", 16]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "60 ft", duration : "Conc, 1 min", description : "3 creatures can add 1d4 to the damage of melee weapon attacks during the duration", descriptionFull : "As a bonus action, choose up to three allies you can see within 60 feet of you (you can choose yourself in place of one of the allies). Until your concentration ends, each target can roll a d4 when rolling damage for a melee weapon attack and add the number rolled to the damage roll.", firstCol : 2 }; PsionicsList["mf2-mindless charge"] = { name : "Mindless Charge", source : [["UA:TMC", 16]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "60 ft", duration : "Instantaneous", description : "3 creatures can use their reactions to move their speed straight towards the nearest enemy", descriptionFull : "As a bonus action, choose up to three creatures you can see within 60 feet of you. Each target can immediately use its reaction to move up to its speed in a straight line toward its nearest enemy.", firstCol : 2 }; PsionicsList["mf3-aura of bloodletting"] = { name : "Aura of Bloodletting", source : [["UA:TMC", 16]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "60 ft", duration : "Conc, 1 min", description : "Me and all creatures within range during the duration have advantage on melee attack rolls", descriptionFull : "As a bonus action, you unleash an aura of rage. Until your concentration ends, you and any creature within 60 feet of you has advantage on melee attack rolls.", firstCol : 3 }; PsionicsList["mf4-overwhelming fury"] = { name : "Overwhelming Fury", source : [["UA:TMC", 16]], psionic : true, level : 1, school : "Avatar", time : "1 a", range : "60 ft", duration : "Conc, 1 min", save : "Cha", description : "1 creature save or it can use its actions only to make melee attacks; save at the end of each of its turns", descriptionFull : "As an action, you flood rage into one creature you can see within 60 feet of you. The target must succeed on a Charisma saving throw, or it can use its actions only to make melee attacks until your concentration ends. It can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success.", firstCol : 5 }; //the mantle of joy discipline PsionicsList["mantle of joy-ua-psy"] = { name : "Mantle of Joy", classes : ["mystic"], source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain advantage on Charisma (Persuasion) checks", descriptionFull : "You tap into the joy within you, radiating it outward in soothing, psychic energy that brings hope and comfort to creatures around you." + PsychicFocus + "While focused on this discipline, you have advantage on Charisma (Persuasion) checks.", firstCol : "checkbox", dependencies : ["mj1-soothing presence", "mj2-comforting aura", "mj3-aura of jubilation", "mj4-beacon of recovery"] }; PsionicsList["mj1-soothing presence"] = { name : "Soothing Presence", source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "60 ft", duration : "Instantaneous", description : "3 creatures gain 3/PP temporary hit points", descriptionFull : "As a bonus action, choose up to three creatures you can see within 60 feet of you. Each target gains 3 temporary hit points per psi point spent on this effect.", firstCol : "1-7" }; PsionicsList["mj2-comforting aura"] = { name : "Comforting Aura", source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "Sight", duration : "Conc, 1 min", description : "3 creatures can add 1d4 on every saving throw during the duration", descriptionFull : "As a bonus action, choose up to three allies you can see (you can choose yourself in place of one of the allies). Until your concentration ends, each target can roll a d4 when making a saving throw and add the number rolled to the total.", firstCol : 2 }; PsionicsList["mj3-aura of jubilation"] = { name : "Aura of Jubilation", source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "60 ft", duration : "Conc, 1 min", description : "All creatures within range that can see me have disadvantage on Perception and Investigation checks", descriptionFull : "As a bonus action, you radiate a distracting mirth until your concentration ends. Each creature within 60 feet of you that can see you suffers disadvantage on any checks using the Perception and Investigation skills.", firstCol : 3 }; PsionicsList["mj4-beacon of recovery"] = { name : "Beacon of Recovery", source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Avatar", time : "1 bns", range : "60 ft", duration : "Instantaneous", description : "Me + 5 allies can make an extra save against every effect that allows a save at the start/end of a turn", descriptionFull : "As a bonus action, you and up to five allies you can see within 60 feet of you can immediately make saving throws against every effect they're suffering that allows a save at the start or end of their turns.", firstCol : 5 }; //the mastery of air discipline (contributed by mattohara) PsionicsList["mastery of air-ua-psy"] = { name : "Mastery of Air", classes : ["mystic"], source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Wu Jen", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I take no falling damage and ignore difficult terrain when walking", descriptionFull : "You become one with the power of elemental air." + PsychicFocus + "While focused on this discipline, you take no falling damage, and you ignore difficult terrain when walking.", firstCol : "checkbox", dependencies : ["ma1-wind step", "ma2-wind stream", "ma3-cloak of air", "ma4-wind form", "ma5-misty form", "ma6-animate air"] }; PsionicsList["ma1-wind step"] = { name : "Wind Step", source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Wu Jen", time : "Move", range : "Self", duration : "This turn end", description : "Fly 20 ft/PP as part of my move this turn; if I end my turn in the air, my fall", descriptionFull : "As part of your move on your turn, you can fly up to 20 feet for each psi point spent. If you end this flight in the air, you fall unless something else holds you aloft.", firstCol : "1-7" }; PsionicsList["ma2-wind stream"] = { name : "Wind Stream", source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "30-ft line", duration : "Instantaneous", save : "Str", description : "30-ft long 5-ft wide all crea 1d8/PP Bludgeoning dmg and knocked prone; save halves and not prone", descriptionFull : "As an action, you create a line of focused air that is 30 feet long and 5 feet wide. Each creature in that area must make a Strength saving throw, taking 1d8 bludgeoning damage per psi point spent and being knocked prone on a failed save, or half as much damage on a successful one.", firstCol : "1-7" }; PsionicsList["ma3-cloak of air"] = { name : "Cloak of Air", source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Wu Jen", time : "1 bns", range : "Self", duration : "Conc, 10 min", description : "Atks vs. me have dis.; when missed by melee atk, use rea to have attacker repeat the attack on itself", descriptionFull : "As a bonus action, you seize control of the air around you to create a protective veil. Until your concentration ends, attack rolls against you have disadvantage, and when a creature you can see misses you with a melee attack, you can use your reaction to force the creature to repeat the attack roll against itself.", firstCol : 3 }; PsionicsList["ma4-wind form"] = { name : "Wind Form", source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Wu Jen", time : "1 bns", range : "Self", duration : "Conc, 10 min", description : "I gain a flying speed of 60 ft", descriptionFull : "As a bonus action, you gain a flying speed of 60 feet, which lasts until your concentration ends.", firstCol : 5 }; PsionicsList["ma5-misty form"] = { name : "Misty Form", source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "Self", duration : "Conc, 1 min", description : 'Gain resistance to Bludgeoning/Piercing/Slashing, can only take Dash actions, fit through 1" opening', descriptionMetric : "Gain resistance to Bludgeoning/Piercing/Slashing, only take Dash actions, fit through 2,5 cm opening", descriptionFull : "As an action, your body becomes like a misty cloud until your concentration ends. In this form, you gain resistance to bludgeoning, piercing, and slashing damage, and you can't take actions other than the Dash action. You can pass through openings that are no more than 1 inch wide without squeezing.", firstCol : 6 }; PsionicsList["ma6-animate air"] = { name : "Animate Air", source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "120 ft", duration : "Conc, 1 h", description : "Summon an air elemental that obeys my verbal commands; See Monster Manual, page 124", descriptionFull : "As an action, you cause an air elemental to appear in an unoccupied space you can see within 120 feet of you. The elemental lasts until your concentration ends, and it obeys your verbal commands. In combat, roll for its initiative, and choose its behavior during its turns. When this effect ends, the elemental disappears. See the Monster Manual for its stat block.", firstCol : 7 }; //the mastery of fire discipline PsionicsList["mastery of fire-ua-psy"] = { name : "Mastery of Fire", classes : ["mystic"], source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Wu Jen", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain resistance to Fire damage and gain a +2 bonus on rolls for Fire damage", descriptionFull : "You align your mind with the energy of elemental fire." + PsychicFocus + "While focused on this discipline, you gain resistance to fire damage, and you gain a +2 bonus to rolls for fire damage.", firstCol : "checkbox", dependencies : ["mf1-combustion", "mf2-rolling flame", "mf3-detonation", "mf4-fire storm", "mf5-animate fire"] }; PsionicsList["mf1-combustion"] = { name : "Combustion", source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "120 ft", duration : "Conc, 1 min", save : "Con", description : "1 crea save or 1d10/PP Fire dmg, on fire: 1d6 Fire dmg/rnd, it can 1 a to end; save half \u0026 not on fire", descriptionFull : "As an action, choose one creature or object you can see within 120 feet of you. The target must make a Constitution save. On a failed save, the target takes 1d10 fire damage per psi point spent, and it catches on fire, taking 1d6 fire damage at the end of each of its turns until your concentration ends or until it or a creature adjacent to it extinguishes the flames with an action. On a successful save, the target takes half as much damage and doesn't catch on fire.", firstCol : "1-7" }; PsionicsList["mf2-rolling flame"] = { name : "Rolling Flame", source : [["UA:TMC", 17]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "5 ft", duration : "Conc, 1 min", description : "20-ft cube all 5 Fire damage and any that end their turn in it also 5 Fire damage", descriptionFull : "As an action, you create fire in a 20-foot-by-20-foot cube within 5 feet of you. The fire lasts until your concentration ends. Any creature in that area when you use this ability and any creature that ends its turn there takes 5 fire damage.", firstCol : 3 }; PsionicsList["mf3-detonation"] = { name : "Detonation", source : [["UA:TMC", 18]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "120 ft", duration : "Instantaneous", description : "20-ft rad all creatures save or 7d6 Fire damage and knocked prone; save halves and not prone", save : "Con", descriptionFull : "As an action, you create a fiery explosion at a point you can see within 120 feet of you. Each creature in a 20-foot-radius sphere centered on that point must make a Constitution saving throw, taking 7d6 fire damage and being knocked prone on a failed save, or half as much damage on a successful one.", firstCol : 5 }; PsionicsList["mf4-fire storm"] = { name : "Fire Storm", source : [["UA:TMC", 18]], psionic : true, level : 1, school : "Wu Jen", time : "1 bns", range : "Self", duration : "Conc, 1 min", description : "All creatures that end their turn within 5 ft of me take 3d6 Fire damage", descriptionFull : "As a bonus action, you become wreathed in flames until your concentration ends. Any creature that end its turn within 5 feet of you takes 3d6 fire damage.", firstCol : 5 }; PsionicsList["mf5-animate fire"] = { name : "Animate Fire", source : [["UA:TMC", 18]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "120 ft", duration : "Conc, 1 h", description : "Summon a fire elemental that obeys my verbal commands; See Monster Manual, page 124", descriptionFull : "As an action, you cause a fire elemental to appear in an unoccupied space you can see within 120 feet of you. The elemental lasts until your concentration ends, and it obeys your verbal commands. In combat, roll for its initiative, and choose its behavior during its turns. When this effect ends, the elemental disappears. See the Monster Manual for its stat block.", firstCol : 7 }; //the mastery of force discipline PsionicsList["mastery of force-ua-psy"] = { name : "Mastery of Force", classes : ["mystic"], source : [["UA:TMC", 18]], psionic : true, level : 1, school : "Wu Jen", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain advantage on Strength checks", descriptionFull : "As a student of psionic power, you perceive the potential energy that flows through all things. You reach out with your mind, transforming the potential into the actual. Objects and creatures move at your command." + PsychicFocus + ". While focused on this discipline, you have advantage on Strength checks.", firstCol : "checkbox", dependencies : ["mf1-push", "mf2-move", "mf3-inertial armor", "mf4-telekinetic barrier", "mf5-grasp", "mf6-crush (with grasp)" , "mf7-move (with grasp)"] }; PsionicsList["mf1-push"] = { name : "Push", source : [["UA:TMC", 18]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Instantaneous", save : "Str", description : "1 crea save or 1d8/PP Force dmg and pushed 5 ft/PP straight away; save halves and not pushed", descriptionFull : "As an action, choose one creature you can see within 60 feet of you. The target must make a Strength saving throw. On a failed save, it takes 1d8 force damage per psi point spent and is pushed up to 5 feet per point spent in a straight line away from you. On a successful save, it takes half as much damage.", firstCol : "1-7" }; PsionicsList["mf2-move"] = { name : "Move", source : [["UA:TMC", 18]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Instantaneous", save : "Dex", description : "Move obj 60 ft, after which it falls; crea under obj DC 10 save or 1d6+1d6/PP Bludg. dmg; see book", descriptionFull : "Choose one object you can see within 60 feet of you that isn't being worn or carried by another creature and that isn't secured in place. It can't be larger than 20 feet on a side, and its maximum weight depends on the psi points spent on this ability, as shown below." + "\n " + "As an action, you move the object up to 60 feet, and you must keep the object within sight during this movement. If the object ends this movement in the air, it falls. If the object would fall on a creature, the creature must succeed on a DC 10 Dexterity saving throw or take damage as listed on the table below.\n\n " + toUni("Psi") + "\t" + toUni("Maximum") + " " + toUni("Bludgeoning") + "\n" + toUni("Points") + "\t " + toUni("Weight") + "\t " + toUni("Damage") + "\n 2\t 25 lbs. \t 2d6" + "\n 3\t 50 lbs. \t 4d6" + "\n 5\t 250 lbs. \t 6d6" + "\n 6\t 500 lbs. \t 7d6" + "\n 7\t 1000 lbs. \t 8d6", firstCol : "2-7" }; PsionicsList["mf3-inertial armor"] = { name : "Inertial Armor", source : [["UA:TMC", 18]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "Self", duration : "8 h", description : "I gain AC 14 + Dex modifier and resistance to Force dmg if not wearing armor; ends if don armor", descriptionFull : "As an action, you sheathe yourself in an intangible field of magical force. For 8 hours, your base AC is 14 + your Dexterity modifier, and you gain resistance to force damage. This effect ends if you are wearing or don armor.", firstCol : 2 }; PsionicsList["mf4-telekinetic barrier"] = { name : "Telekinetic Barrier", source : [["UA:TMC", 18]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Conc, 10 min", description : "40-ft long, 10-ft high, 1-inch thick transparent wall of energy; each 10-ft section has AC 10 \u0026 10 HP", descriptionFull : "As an action, you create a transparent wall of telekinetic energy, at least one portion of which must be within 60 feet of you. The wall is 40 feet long, 10 feet high, and 1 inch thick. The wall lasts until your concentration ends. Each 10-foot section of the wall has an AC of 10 and 10 hit points.", firstCol : 3 }; PsionicsList["mf5-grasp"] = { name : "Grasp", source : [["UA:TMC", 18]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Conc, 1 min", description : "1 crea save or grappled; escape Athl./Acro. vs. my spell atk +1/PP; if grappled I can Crush/Move", save : "Str", descriptionFull : "You attempt to grasp a creature in telekinetic energy and hold it captive. As an action, choose one creature you can see within 60 feet of you. The target must succeed on a Strength saving throw or be grappled by you until your concentration ends or until the target leaves your reach, which is 60 feet for this grapple." + "\n " + "The grappled target can escape by succeeding on a Strength (Athletics) or Dexterity (Acrobatics) check contested by your psionic ability plus your proficiency bonus. When a target attempts to escape in this way, you can spend psi points to boost your check, abiding by your psi limit. You gain a +1 bonus per psi point spent." + "\n " + "While a target is grappled in this manner, you create one of the following effects as an action: " + toUni("Crush") + " (1–7 psi) The target takes 1d6 bludgeoning damage per psi point spent." + toUni("Move") + " (1–7 psi) You move the target up to 5 feet per psi point spent. You can move it in the air and hold it there. It falls if the grapple ends.", firstCol : 3 }; PsionicsList["mf6-crush (with grasp)"] = { name : " - Crush (with Grasp)", source : [["UA:TMC", 18]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Instantaneous", description : "1 creature grappled by Grasp takes 1d6/PP Bludgeoning damage", descriptionFull : "While the target is grappled by Grasp from the Mastery of Force discipline, you can use Crush on it as an action:" + "\n " + "The target takes 1d6 bludgeoning damage per psi point spent.", firstCol : "1-7" }; PsionicsList["mf7-move (with grasp)"] = { name : " - Move (with Grasp)", source : [["UA:TMC", 18]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Instantaneous", description : "1 creature grappled by Grasp moved up to 5 ft/PP; can hold it aloft, but it falls when grapple ends", descriptionFull : "While the target is grappled by Grasp from the Mastery of Force discipline, you can use Move on it as an action:" + "\n " + "You move the target up to 5 feet per psi point spent. You can move it in the air and hold it there. It falls if the grapple ends.", firstCol : "1-7" }; //the mastery of ice discipline (contributed by Justin W.) PsionicsList["mastery of ice-ua-psy"] = { name : "Mastery of Ice", classes : ["mystic"], source : [["UA:TMC", 19]], psionic : true, level : 1, school : "Wu Jen", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain resistance to Cold damage", descriptionFull : "You master the power of ice, shaping it to meet you demands." + PsychicFocus + "While focused on this discipline, you have resistance to cold damage.", firstCol : "checkbox", dependencies : ["mi1-ice spike", "mi2-ice sheet", "mi3-frozen sanctuary", "mi4-frozen rain", "mi5-ice barrier"] }; PsionicsList["mi1-ice spike"] = { name : "Ice Spike", source : [["UA:TMC", 19]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "120 ft", duration : "Next turn end", save : "Dex", description : "1 creature save or 1d8/PP Cold damage and speed halved; save halves and normal speed", descriptionFull : "As an action, you hurl a mote of ice at one creature you can see within 120 feet of you. The target must make a Dexterity saving throw. On a failed save, the target takes 1d8 cold damage per psi point spent and has its speed halved until the start of your next turn. On a successful save, the target takes half as much damage.", firstCol : "1-7" }; PsionicsList["mi2-ice sheet"] = { name : "Ice Sheet", source : [["UA:TMC", 19]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "10 min", save : "Dex", description : "Create 20-ft rad of difficult terrain; crea move more than 10 ft save or prone; on slope slide to bottom", descriptionFull : "As an action, choose a point on the ground you can see within 60 feet of you. The ground in a 20-foot radius centered on that point becomes covered in ice for 10 minutes. It is difficult terrain, and any creature that moves more than 10 feet on it must succeed on a Dexterity saving throw or fall prone. If the surface is sloped, a creature that falls prone in the area immediately slides to the bottom of the slope.", firstCol : 2 }; PsionicsList["mi3-frozen sanctuary"] = { name : "Frozen Sanctuary", source : [["UA:TMC", 19]], psionic : true, level : 1, school : "Wu Jen", time : "1 bns", range : "Self", duration : "Instantaneous", description : "I gain 20 temporary hit points", descriptionFull : "As a bonus action, you sheathe yourself with icy resilience. You gain 20 temporary hit points.", firstCol : 3 }; PsionicsList["mi4-frozen rain"] = { name : "Frozen Rain", source : [["UA:TMC", 19]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "120 ft", duration : "Conc, 1 min", save : "Con", description : "20-ft rad all 6d6(+1d6/extra PP) Cold dmg \u0026 spd 0; save half \u0026 no spd 0; 1 a Athl. vs DC for no spd 0", descriptionFull : "As an action, choose a point you can see within 120 feet of you. The air in a 20-foot-radius sphere centered on that point becomes deathly cold and saturated with moisture. Each creature in that area must make a Constitution saving throw. On a failed save, a target takes 6d6 cold damage, and its speed is reduced to 0 until your concentration ends. On a successful save, a target takes half as much damage." + "\n " + "As an action, a target that has its speed reduced can end the effect early if it succeeds on a Strength (Athletics) check with a DC equal to this effect's save DC." + "\n " + "You can increase this effect's damage by 1d6 per each additional psi point spent on it.", firstCol : "5-7" }; PsionicsList["mi5-ice barrier"] = { name : "Ice Barrier", source : [["UA:TMC", 19]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60-ft", duration : "Conc, 10 min", description : "60\xD71\xD715ft (l\xD7w\xD7h) wall; a 10-ft section has AC 12 & 30 HP; melee atks do same as Cold dmg back", descriptionMetric : "20\xD70,3\xD75m (l\xD7w\xD7h) wall; a 3-m section has AC 12 & 30 hp; melee atks do same as Cold dmg back", descriptionFull : "As an action, you create a wall of ice, at least one portion of which must be within 60 feet of you. The wall is 60 feet long, 15 feet high, and 1 foot thick. The wall lasts until your concentration ends. Each 10-foot section of the wall has AC 12 and 30 hit points. A creature that damages the wall with a melee attack takes cold damage equal to the damage the creature dealt to the wall.", firstCol : 6 }; //the mastery of light and darkness discipline (contributed by Justin W.) PsionicsList["mastery of light and darkness-ua-psy"] = { name : "Mastery of Light and Darkness", nameShort : "Mastery of Light \u0026 Dark", classes : ["mystic"], source : [["UA:TMC", 19]], psionic : true, level : 1, school : "Wu Jen", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I can see through natural and magical darkness out to 30 ft", descriptionFull : "You claim dominion over light and darkness with your mind." + PsychicFocus + "While focused on this discipline, natural and magical darkness within 30 feet of you has no effect on your vision.", firstCol : "checkbox", dependencies : ["mld1-darkness", "mld2-light", "mld3-shadow beasts", "mld4-radiant beam"] }; PsionicsList["mld1-darkness"] = { name : "Darkness", source : [["UA:TMC", 19]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Conc, 1 min", description : "10 ft/PP rad darkness from point; darkvision doesn't work; only magical light of SL 3 or higher works", descriptionFull : "As an action, you create an area of magical darkness, which foils darkvision. Choose a spot you can see within 60 feet of you. Magical darkness radiates from that point in a sphere with a 10-foot radius per psi point spent on this ability. The light produced by spells of 2nd level or less is suppressed in this area.", firstCol : "1-7" }; PsionicsList["mld2-light"] = { name : "Light", source : [["UA:TMC", 19]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "Touch", duration : "Conc, 1 min", save : "Dex", description : "1 crea/obj save or sheds bright light 20-ft rad and dim light 20-ft, and can't hide, atks vs. it have adv.", descriptionFull : "As an action, an object you touch radiates light in a 20-foot radius and dim light for an additional 20 feet. The light lasts until your concentration ends. Alternatively, a creature you touch radiates light in the same manner if it fails a Dexterity saving throw. While lit in this manner, it can't hide, and attack rolls against it gain advantage.", firstCol : 2 }; PsionicsList["mld3-shadow beasts"] = { name : "Shadow Beasts", source : [["UA:TMC", 19]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Conc, 1 min", description : "Summon 2 shadows that obeys my verbal commands; See Monster Manual, page 269", descriptionFull : "As an action, you cause two shadows to appear in unoccupied spaces you can see within 60 feet of you. The shadows last until your concentration ends, and they obey your verbal commands. In combat, roll for their initiative, and choose their behavior during their turns. When this effect ends, the shadows disappear. See the Monster Manual for their stat block.", firstCol : 3 }; PsionicsList["mld4-radiant beam"] = { name : "Radiant Beam", source : [["UA:TMC", 19]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Conc, 1 min", save : "Dex", description : "1 crea 6d6(+1d6/extra PP) Radiant dmg, blinded, save each turn to end blind; save halves \u0026 not blind", descriptionFull : "As an action, you project a beam of light at one creature you can see within 60 feet of you. The target must make a Dexterity saving throw. On a failed save, it takes 6d6 radiant damage and is blinded until your concentration ends. On a successful save, it takes half as much damage. A blinded target can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success." + "\n " + "You can increase this effect's damage by 1d6 per each additional psi point spent on it.", firstCol : "5-7" }; //the mastery of water discipline (contributed by Justin W.) PsionicsList["mastery of water-ua-psy"] = { name : "Mastery of Water", classes : ["mystic"], source : [["UA:TMC", 19]], psionic : true, level : 1, school : "Wu Jen", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain a swimming speed equal to my walking speed and I can breathe underwater", descriptionFull : "Your mind becomes one with elemental water, attuning your thoughts to its ebb and flow." + PsychicFocus + "While focused on this discipline, you have a swimming speed equal to your walking speed, and you can breathe underwater.", firstCol : "checkbox", dependencies : ["mwa1-dessicate", "mwa2-watery grasp", "mwa3-water whip", "mwa4-water breathing","mwa5-water sphere","mwa6-animate water"] }; PsionicsList["mwa1-dessicate"] = { name : "Dessicate", source : [["UA:TMC", 20]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Instantaneous", save : "Con", description : "1 creature 1d10/PP Necrotic damage; save halves", descriptionFull : "As an action, choose one creature you can see within 60 feet of you. The target must make a Constitution saving throw, taking 1d10 necrotic damage per psi point spent on this ability, or half as much damage on a successful one.", firstCol : "1-7" }; PsionicsList["mwa2-watery grasp"] = { name : "Watery Grasp", source : [["UA:TMC", 20]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "5 ft", duration : "Instantaneous", save : "Dex", description : "20-ft sq all save or 2d6(+1d6/extra PP) Bludg. dmg, prone, pulled 10 ft to me; save half \u0026 not prone", descriptionFull : "As an action, you unleash a wave that surges forth and then retreats to you like the rising tide. You create a wave in a 20-foot-by-20-foot square. At least some portion of the square's border must be within 5 feet of you. Any creature in that square must make a Strength saving throw. On a failed save, a target takes 2d6 bludgeoning damage, is knocked prone, and is pulled up to 10 feet closer to you. On a successful save, a target takes half as much damage. You can increase this ability's damage by 1d6 per additional psi point spent on it.", firstCol : "2-7" }; PsionicsList["mwa3-water whip"] = { name : "Water Whip", source : [["UA:TMC", 20]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60-ft line", duration : "Instantaneous", save : "Str", description : "60\xD75-ft (l\xD7w) all 3d6(+1d6/extra PP) Bludg. dmg \u0026 move to empty spot on line; save half \u0026 no move", descriptionMetric : "20\xD71,5m (l\xD7w) all 3d6(+1d6/extra PP) Bludg. dmg, move to empty spot on line; save half \u0026 no move", descriptionFull : "As an action, you unleash a jet of water in a line that is 60 feet long and 5 feet wide. Each creature in the line must make a Strength saving throw, taking 3d6 bludgeoning damage on a failed save, or half as much damage on a successful one. In addition, you can move each target that fails its saving throw to any unoccupied space touching the line. You can increase this ability's damage by 1d6 per additional psi point spent on it.", firstCol : "3-7" }; PsionicsList["mwa4-water breathing"] = { name : "Water Breathing", source : [["UA:TMC", 20]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "24 h", description : "Me and up to 10 willing creatures can breathe underwater for the duration", descriptionFull : "As an action, you grant yourself and up to ten willing creatures you can see within 60 feet of you the ability to breathe underwater for the next 24 hours.", firstCol : 5 }; PsionicsList["mwa5-water sphere"] = { name : "Water Sphere", source : [["UA:TMC", 20]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Conc, 1 min", save : "Dex", description : "1 crea save or half speed, dis. on atks, can see only 10 ft, atks vs. it also dis.; save at end of each turn", descriptionFull : "As an action, you cause a sphere of water to form around a creature. Choose one creature you can see within 60 feet of you. The target must make a Dexterity saving throw. On a failed save, it becomes trapped in the sphere of water until your concentration ends. While the target is trapped, its speed is halved, it suffers disadvantage on attack rolls, and it can't see anything more than 10 feet away from it. However, attack rolls against it also suffer disadvantage. The target can repeat the saving throw at the end of each of its turns, ending the effect on itself on a successful one.", firstCol : 6 }; PsionicsList["mwa6-animate water"] = { name : "Animate Water", source : [["UA:TMC", 20]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "120 ft", duration : "Conc, 1 h", description : "Summon a water elemental that obeys my verbal commands; See Monster Manual, page 124", descriptionFull : "As an action, you cause a water elemental to appear in an unoccupied space you can see within 120 feet of you. The elemental lasts until your concentration ends, and it obeys your verbal commands. In combat, roll for its initiative, and choose its behavior during its turns. When this effect ends, the elemental disappears. See the Monster Manual for its stat block.", firstCol : 7 }; //the mastery of weather discipline (contributed by Justin W.) PsionicsList["mastery of weather-ua-psy"] = { name : "Mastery of Weather", classes : ["mystic"], source : [["UA:TMC", 20]], psionic : true, level : 1, school : "Wu Jen", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain resistance to Lightning and Thunder damage", descriptionFull : "Your mind reaches into the sky, reshaping the stuff of storms to serve your needs." + PsychicFocus + "While focused on this discipline, you have resistance to lightning and thunder damage.", firstCol : "checkbox", dependencies : ["mw1-cloud steps", "mw2-hungry lightning", "mw3-wall of clouds", "mw4-whirlwind", "mw5-lightning leap", "mw6-wall of thunder", "mw7-thunder clap"] }; PsionicsList["mw1-cloud steps"] = { name : "Cloud Steps", source : [["UA:TMC", 20]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "Self", duration : "Conc, 10 min", description : "U summon a 10 ft by 10 ft spiral staircase, that reaches 20 ft/PP upward", descriptionFull : "As an action, you conjure forth clouds to create a solid, translucent staircase that lasts until your concentration ends. The stairs form a spiral that fills a 10-foot-by-10-foot area and reaches upward 20 feet per psi point spent.", firstCol : "1-7" }; PsionicsList["mw2-hungry lightning"] = { name : "Hungry Lightning", source : [["UA:TMC", 20]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Instantaneous", save : "Dex", description : "1 creature 1d8/PP Lightning damage; save halves; disadvantage on save if wearing heavy armor", descriptionFull : "As an action, you lash out at one creature you can see within 60 feet of you with tendrils of lightning. The target must make a Dexterity saving throw, with disadvantage if it's wearing heavy armor. The target takes 1d8 lightning damage per psi point spent on a failed save, or half as much damage on a successful one.", firstCol : "1-7" }; PsionicsList["mw3-wall of clouds"] = { name : "Wall of Clouds", source : [["UA:TMC", 20]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Conc, 10 min", description : "I create a 60-ft long, 15-ft high, 1-ft thick wall of clouds that blocks vision; it must start in range", descriptionFull : "As an action, you create a wall of clouds, at least one portion of which must be within 60 feet of you. The wall is 60 feet long, 15 feet high, and 1 foot thick. The wall lasts until your concentration ends. Creatures can pass through it without hindrance, but the wall blocks vision.", firstCol : 2 }; PsionicsList["mw4-whirlwind"] = { name : "Whirlwind", source : [["UA:TMC", 20]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Instantaneous", save : "Str", description : "20-ft rad all crea save or 1d6 Bludg. dmg & moved to chosen empty space in rad; obj moved as well", descriptionFull : "As an action, choose a point you can see within 60 feet of you. Winds howl in a 20-foot-radius sphere centered on that point. Each creature in the sphere must succeed on a Strength saving throw or take 1d6 bludgeoning damage and be moved to an unoccupied space of your choice in the sphere. Any loose object in the sphere is moved to an unoccupied space of your choice within it if the object weighs no more than 100 pounds.", firstCol : 2 }; PsionicsList["mw5-lightning leap"] = { name : "Lightning Leap", source : [["UA:TMC", 20]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60-ft line", duration : "Instantaneous", save : "Dex", description : "60-ft long 5-ft wide all 6d6(+1d6/extra PP) Lightning dmg; save halves; I teleport to spot on line", descriptionFull : "As an action, you let loose a line of lightning that is 60 feet long and 5 feet wide. Each creature in the line must make a Dexterity saving throw, taking 6d6 lightning damage on a failed save, or half as much damage on a successful one. You can then teleport to an unoccupied space touched by the line." + "\n " + "You can increase this ability's damage by 1d6 per additional psi point spent on it.", firstCol : "5-7" }; PsionicsList["mw6-wall of thunder"] = { name : "Wall of Thunder", source : [["UA:TMC", 21]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Conc, 10 min", save : "Str", description : "60\xD71\xD715 ft (l\xD7w\xD7h) wall; diff. terr.; crea start/move in save or 6d6 Thunder dmg, push 30 ft, prone", descriptionMetric : "20\xD70,3\xD75 m (l\xD7w\xD7h) wall; diff. terr.; crea start/move in save or 6d6 Thunder dmg, push 10m, prone", descriptionFull : "As an action, you create a wall of thunder, at least one portion of which must be within 60 feet of you. The wall is 60 feet long, 15 feet high, and 1 foot thick. The wall lasts until your concentration ends. Every foot moved through the wall costs 1 extra foot of movement. When a creature moves into the wall's space for the first time on a turn or starts its turn there, that creature must succeed on a Strength saving throw, or it takes 6d6 thunder damage, is pushed in a straight line up to 30 feet away from the wall, and is knocked prone.", firstCol : 6 }; PsionicsList["mw7-thunder clap"] = { name : "Thunder Clap", source : [["UA:TMC", 21]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Next turn end", save : "Con", description : "20-ft rad all save or 8d6 Thunder dmg and stunned until my next turn ends; save halves \u0026 no stun", descriptionFull : "As an action, choose a point you can see within 60 feet of you. Thunder energy erupts in a 20-foot-radius sphere centered on that point. Each creature in that area must make Constitution saving throw. On a failed save, a target takes 8d6 thunder damage, and it is stunned until the end of your next turn. On a successful save, a target takes half as much damage.", firstCol : 7 }; //the mastery of wood and earth discipline (contributed by Justin W.) PsionicsList["mastery of wood and earth-ua-psy"] = { name : "Mastery of Wood and Earth", nameShort : "Mastery of Wood \u0026 Earth", classes : ["mystic"], source : [["UA:TMC", 21]], psionic : true, level : 1, school : "Wu Jen", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain a +1 bonus to AC", descriptionFull : "You attune your mind to seize control of wood and earth." + PsychicFocus + "While focused on this discipline, you have a +1 bonus to AC.", firstCol : "checkbox", dependencies : ["mwe1-animate weapon", "mwe2-warp weapon", "mwe3-warp armor", "mwe4-wall of wood", "mwe5-armored form", "mwe6-animate earth"] }; PsionicsList["mwe1-animate weapon"] = { name : "Animate Weapon", source : [["UA:TMC", 21]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "30 ft", duration : "Instantaneous", description : "1 crea attacked by my 1-handed melee wea; use discipline score for atk/dmg; +1d10/PP Force dmg", descriptionFull : "As an action, your mind seizes control of a one-handed melee weapon you're holding. The weapon flies toward one creature you can see within 30 feet of you and makes a one-handed melee weapon attack against it, using your discipline attack modifier for the attack and damage rolls. On a hit, the weapon deals its normal damage, plus an extra 1d10 force damage per psi point spent on this ability. The weapon returns to your grasp after it attacks.", firstCol : "1-7" }; PsionicsList["mwe2-warp weapon"] = { name : "Warp Weapon", source : [["UA:TMC", 21]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Next turn end", save : "Str", description : "1 crea save or 1 chosen nonmagical wea it is holding can't be used to attack until my next turn ends", descriptionFull : "As an action, choose one nonmagical weapon held by one creature you can see within 60 feet of you. That creature must succeed on a Strength saving throw, or the chosen weapon can't be used to attack until the end of your next turn.", firstCol : 2 }; PsionicsList["mwe3-warp armor"] = { name : "Warp Armor", source : [["UA:TMC", 21]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Next turn end", save : "Con", description : "1 crea wearing a nonmagical armor save or have AC 10 + its Dex modifier until my next turn ends", descriptionFull : "As an action, choose a nonmagical suit of armor worn by one creature you can see within 60 feet of you. That creature must succeed on a Constitution saving throw, or the creature's AC becomes 10 + its Dexterity modifier until the end of your next turn.", firstCol : 3 }; PsionicsList["mwe4-wall of wood"] = { name : "Wall of Wood", source : [["UA:TMC", 21]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "60 ft", duration : "Conc, 1 h", description : "Create 60-ft long, 15-ft high, 1-ft thick wall of solid wood; each 5-ft section has AC 12 and 100 HP", descriptionFull : "As an action, you create a wall of wood at least one portion of which must be within 60 feet of you. The wall is 60 feet long, 15 feet high, and 1 foot thick. The wall lasts until your concentration ends. Each 5-foot wide section of the wall has AC 12 and 100 hit points. Breaking one section creates a 5-foot by 5-foot hole in it, but the wall otherwise remains intact.", firstCol : 3 }; PsionicsList["mwe5-armored form"] = { name : "Armored Form", source : [["UA:TMC", 21]], psionic : true, level : 1, school : "Wu Jen", time : "1 bns", range : "Self", duration : "Conc, 1 min", description : "I gain resistance to Bludgeoning, Piercing, and Slashing damage", descriptionFull : "As a bonus action, you gain resistance to bludgeoning, piercing, and slashing damage, which lasts until your concentration ends.", firstCol : 6 }; PsionicsList["mwe6-animate earth"] = { name : "Animate Earth", source : [["UA:TMC", 21]], psionic : true, level : 1, school : "Wu Jen", time : "1 a", range : "120 ft", duration : "Conc, 1 h", description : "Summon an earth elemental that obeys my verbal commands; See Monster Manual, page 124", descriptionFull : "As an action, you cause an earth elemental to appear in an unoccupied space you can see within 120 feet of you. The elemental lasts until your concentration ends, and it obeys your verbal commands. In combat, roll for its initiative, and choose its behavior during its turns. When this effect ends, the elemental disappears. See the Monster Manual for its stat block.", firstCol : 7 }; //the nomadic arrow discipline (contributed by mattohara) PsionicsList["nomadic arrow-ua-psy"] = { name : "Nomadic Arrow", classes : ["mystic"], source : [["UA:TMC", 21]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "My ranged weapon attacks ignore disadvantage, but can't get adv. if it was subject to dis.", descriptionFull : "You imbue a ranged weapon with a strange semblance of sentience, allowing it to unerringly find its mark." + PsychicFocus + "While you are focused on this discipline, any attack roll you make for a ranged weapon attack ignores disadvantage. If disadvantage would normally apply to the roll, that roll also can't benefit from advantage.", firstCol : "checkbox", dependencies : ["na1-speed dart", "na2-seeking missile", "na3-faithful archer"] }; PsionicsList["na1-speed dart"] = { name : "Speed Dart", source : [["UA:TMC", 21]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "Self", duration : "This turn end", description : "1 ranged weapon gains psionic power; next hit with it deals +1d10/PP Psychic damage", descriptionFull : "As a bonus action, you imbue one ranged weapon you hold with psionic power. The next attack you make with it that hits before the end of the current turn deals an extra 1d10 psychic damage per psi point spent.", firstCol : "1-7" }; PsionicsList["na2-seeking missile"] = { name : "Seeking Missile", source : [["UA:TMC", 21]], psionic : true, level : 1, school : "Nomad", time : "1 rea", timeFull : "1 reaction, which you take when you miss with a ranged weapon attack", range : "Self", duration : "Instantaneous", description : "When I miss with a ranged attack, I can reroll the attack roll against the same target", descriptionFull : "As a reaction when you miss with a ranged weapon attack, you can repeat the attack roll against the same target.", firstCol : 2 }; PsionicsList["na3-faithful archer"] = { name : "Faithful Archer", source : [["UA:TMC", 21]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "Self", duration : "Conc, 1 min", description : "1 ranged weapon gains sentience; free attack with it at the start of each turn; thrown weapons return", descriptionFull : "As a bonus action, you imbue a ranged weapon with a limited sentience. Until your concentration ends, you can make an extra attack with the weapon at the start of each of your turns (no action required). If it is a thrown weapon, it returns to your grasp each time you make any attack with it.", firstCol : 5 }; //the nomadic chameleon discipline (contributed by mattohara) PsionicsList["nomadic chameleon-ua-psy"] = { name : "Nomadic Chameleon", classes : ["mystic"], source : [["UA:TMC", 22]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain advantage on Dexterity (Stealth) checks", descriptionFull : "You create a screen of psychic power that distorts your appearance, allowing you to blend into the background or even turn invisible." + PsychicFocus + "While focused on this discipline, you have advantage on Dexterity (Stealth) checks.", firstCol : "checkbox", dependencies : ["nc1-chameleon", "nc2-step from sight", "nc3-enduring invisibility"] }; PsionicsList["nc1-chameleon"] = { name : "Chameleon", source : [["UA:TMC", 22]], psionic : true, level : 1, school : "Nomad", time : "1 a", range : "Self", duration : "This turn end", description : "I can hide, regardless of requirements; at end of turn, remain hidden only if requirements are met", descriptionFull : "As an action, you can attempt to hide even if you fail to meet the requirements needed to do so. At the end of the current turn, you remain hidden only if you then meet the normal requirements for hiding.", firstCol : 2 }; PsionicsList["nc2-step from sight"] = { name : "Step from Sight", source : [["UA:TMC", 22]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "60 ft", duration : "Conc, 1 min", description : "I (+1 crea/extra PP) become invisible; attacking/targeting/affecting other crea makes a crea visible", descriptionFull : "As a bonus action, cloak yourself from sight. You can target one additional creature for every additional psi point you spend on this ability. The added targets must be visible to you and within 60 feet of you." + "\n " + "Each target turns invisible and remains so until your concentration ends or until immediately after it targets, damages, or otherwise affects any creature with an attack, a spell, or another ability.", firstCol : "3-7" }; PsionicsList["nc3-enduring invisibility"] = { name : "Enduring Invisibility", source : [["UA:TMC", 22]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "Self", duration : "Conc, 1 min", description : "I turn invisible for the duration", descriptionFull : "As a bonus action, you turn invisible and remain so until your concentration ends.", firstCol : 7 }; //the nomadic mind discipline (contributed by mattohara) PsionicsList["nomadic mind-ua-psy"] = { name : "Nomadic Mind", classes : ["mystic"], source : [["UA:TMC", 22]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain proficiency with one skill, tool, or language", descriptionFull : "You dispatch part of your psyche into the noosphere, the collective vista of minds and knowledge possessed by living things." + PsychicFocus + "Whenever you focus on this discipline, you choose one skill or tool and have proficiency with it until your focus ends. Alternatively, you gain the ability to read and write one language of your choice until your focus ends.", firstCol : "checkbox", dependencies : ["nm1-wandering mind", "nm2-find creature", "nm3-item lore", "nm4-psychic speech", "nm5-wandering eye", "nm6-phasing eye"] }; PsionicsList["nm1-wandering mind"] = { name : "Wandering Mind", source : [["UA:TMC", 22]], psionic : true, level : 1, school : "Nomad", time : "10 min", range : "Self", duration : "1 h", description : "Gain prof. with 1 skill/2PP: Animal Hand., History, Medicine, Nature, Performance, Religion, Survival", descriptionFull : "You enter a deep contemplation. If you concentrate for this option's full duration, you then gain proficiency with up to three of the following skills (one skill for every 2 psi points spent): Animal Handling, Arcana, History, Medicine, Nature, Performance, Religion, and Survival. The benefit lasts for 1 hour, no concentration required.", firstCol : "2-6" }; PsionicsList["nm2-find creature"] = { name : "Find Creature", source : [["UA:TMC", 22]], psionic : true, level : 1, school : "Nomad", time : "1 h", range : "Self", duration : "Instantaneous", description : "Learn general location of a creature, within 1-3 miles; if it's on other plane, learn which plane instead", descriptionFull : "You cast your mind about for information about a specific creature. If you concentrate for this option's full duration, you then gain a general understanding of the creature's current location. You learn the region, city, town, village, or district where it is, pinpointing an area between 1 and 3 miles on a side (DM's choice). If the creature is on another plane of existence, you instead learn which plane.", firstCol : 2 }; PsionicsList["nm3-item lore"] = { name : "Item Lore", source : [["UA:TMC", 22]], psionic : true, level : 1, school : "Nomad", time : "1 h", range : "5 ft", duration : "Instantaneous", description : "1 magical item or magic-imbued crea/obj; learn properties, how to use, and spells affecting it", descriptionFull : "You carefully study an item. If you concentrate for this option's full duration while remaining within 5 feet of the item, you then gain the benefits of an identify spell cast on that item.", firstCol : 3 }; PsionicsList["nm4-psychic speech"] = { name : "Psychic Speech", source : [["UA:TMC", 22]], psionic : true, level : 1, school : "Nomad", time : "1 a", range : "Self", duration : "1 h", description : "I understand all spoken/written languages and all with a language can understand what I say", descriptionFull : "As an action, you attune your mind to the psychic imprint of all language. For 1 hour, you gain the ability to understand any language you hear or attempt to read. In addition, when you speak, all creatures that can understand a language understand what you say, regardless of what language you use.", firstCol : 5 }; PsionicsList["nm5-wandering eye"] = { name : "Wandering Eye", source : [["UA:TMC", 22]], psionic : true, level : 1, school : "Nomad", time : "1 a", range : "60 ft", duration : "Conc, 1 h", description : 'Create invisible, moving (unlimited range, 30ft/rnd) 1" magic eye with darkvision I see through', description : "Create invisible, moving (unlimited range, 10m/rnd) 2,5cm magic eye /w darkvision I see through", descriptionFull : "As an action, you create a psychic sensor within 60 feet of you. The sensor lasts until your concentration ends. The sensor is invisible and hovers in the air. You mentally receive visual information from it, which has normal vision and darkvision with a range of 60 feet. The sensor can look in all directions. As an action, you can move the sensor up to 30 feet in any direction. There is no limit to how far away from you the eye can move, but it can't enter another plane of existence. A solid barrier blocks the eye's movement, but the eye can pass through an opening as small as 1 inch in diameter.", firstCol : 6 }; PsionicsList["nm6-phasing eye"] = { name : "Phasing Eye", source : [["UA:TMC", 22]], psionic : true, level : 1, school : "Nomad", time : "1 a", range : "60 ft", duration : "Conc, 1 h", description : "As Wandering Eye above, except the eye can move through objects but can't end its movement in one", descriptionFull : "As Wandering Eye above, except the eye can move through solid objects but can't end its movement in one. If it does so, the effect immediately ends.", firstCol : 7 }; //the nomadic step discipline (contributed by Justin W.) PsionicsList["nomadic step-ua-psy"] = { name : "Nomadic Step", classes : ["mystic"], source : [["UA:TMC", 22]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "1/turn; after I teleport, increase speed by 10 ft until end of my turn", descriptionFull : "You exert your mind on the area around you, twisting the intraplanar pathways you perceive to allow instantaneous travel." + PsychicFocus + "After you teleport on your turn while focused on this discipline, your walking speed increases by 10 feet until the end of the turn, as you are propelled by the magic of your teleportation. You can receive this increase only once per turn.", firstCol : "checkbox", dependencies : ["ns1-step of a dozen paces", "ns2-nomadic anchor", "ns3-defensive step", "ns4-there and back again", "ns5-transposition", "ns6-baleful transposition", "ns7-phantom caravan", "ns8-nomad's gate"] }; PsionicsList["ns1-step of a dozen paces"] = { name : "Step of a Dozen Paces", source : [["UA:TMC", 22]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "Self", duration : "Instantaneous", description : "I teleport up to 20 ft/PP to where I can see, instead of moving this turn; only if not moved yet", descriptionFull : "If you haven't moved yet on your turn, you take a bonus action to teleport up to 20 feet per psi point spent to an unoccupied space you can see, and your speed is reduced to 0 until the end of the turn.", firstCol : "1-7" }; PsionicsList["ns2-nomadic anchor"] = { name : "Nomadic Anchor", source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Nomad", time : "1 a", range : "120 ft", duration : "8 h", description : "Create 5-ft cu teleport anchor; any teleport from this discipline can go to it if within range", descriptionFull : "As an action, you create an invisible, intangible teleportation anchor in a 5-foot cube you can see within 120 feet of you. For the next 8 hours, whenever you use this psionic discipline to teleport, you can instead teleport to the anchor, even if you can't see it, but it must be within range of the teleportation ability.", firstCol : 1 }; PsionicsList["ns3-defensive step"] = { name : "Defensive Step", source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Nomad", time : "1 rea", timeFull : "1 reaction, which you take when you are hit by an attack", range : "Self", duration : "Instantaneous", description : "When hit by an attack, I gain +4 AC, and then teleport 10 ft to a space I can see", descriptionFull : "When you are hit by an attack, you can use your reaction to gain a +4 bonus to AC against that attack, possibly turning it into a miss. You then teleport up to 10 feet to an unoccupied space you can see.", firstCol : 2 }; PsionicsList["ns4-there and back again"] = { name : "There and Back Again", source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "Self", duration : "End of Turn", description : "I teleport 20 ft and move half my speed; I may teleport back to starting spot at end of my turn", descriptionFull : "As a bonus action, you teleport up to 20 feet to an unoccupied space you can see and then move up to half your speed. At the end of your turn, you can teleport back to the spot you occupied before teleporting, unless it is now occupied or on a different plane of existence.", firstCol : 2 }; PsionicsList["ns5-transposition"] = { name : "Transposition", source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "60 ft", duration : "Instantaneous", description : "Willing creature and I teleport, swapping places, instead of moving this turn; only if not moved yet", descriptionFull : "If you haven't moved yet on your turn, choose an ally you can see within 60 feet of you. As a bonus action, you and that creature teleport, swapping places, and your speed is reduced to 0 until the end of the turn. This ability fails and is wasted if either of you can't fit in the destination space.", firstCol : 3 }; PsionicsList["ns6-baleful transposition"] = { name : "Baleful Transposition", source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Nomad", time : "1 a", range : "120 ft", duration : "Instantaneous", save : "Wis", description : "1 creature save or it and I teleport, swapping places", descriptionFull : "As an action, choose one creature you can see within 120 feet of you. That creature must make a Wisdom saving throw. On a failed save, you and that creature teleport, swapping places. This ability fails and is wasted if either of you can't fit in the destination space.", firstCol : 5 }; PsionicsList["ns7-phantom caravan"] = { name : "Phantom Caravan", source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Nomad", time : "1 a", range : "60 ft", duration : "Instantaneous", description : "Me and up to 6 willing creatures teleport up to 1 mile to a spot I can see", descriptionFull : "As an action, you and up to six willing creatures of your choice that you can see within 60 feet of you teleport up to 1 mile to a spot you can see. If there isn't an open space for all the targets to occupy at the arrival point, this ability fails and is wasted.", firstCol : 6 }; PsionicsList["ns8-nomad's gate"] = { name : "Nomad's Gate", source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Nomad", time : "1 a", range : "5 ft", duration : "Conc, 1 h", description : "Create a 5-ft cu in range, and another up to 1 mile away; anyone entering one, teleports to the other", descriptionFull : "As an action, you create a 5-foot cube of dim, gray light within 5 feet of you. You create an identical cube at any point of your choice within 1 mile that you have viewed within the past 24 hours. Until your concentration ends, anyone entering one of the cubes immediately teleports to the other one, appearing in an unoccupied space next to it. The teleportation fails if there is no space for the creature to appear in.", firstCol : 7 }; //the precognition discipline (contributed by Justin W.) PsionicsList["precognition-ua-psy"] = { name : "Precognition", classes : ["mystic"], source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Awake", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain advangage on initiative rolls", descriptionFull : "By analyzing information around you, from subtle hints to seemingly disconnected facts, you learn to weave a string of probabilities in an instant that gives you extraordinary insights." + PsychicFocus + "While focused on this discipline, you have advantage on initiative rolls.", firstCol : "checkbox", dependencies : ["p1-precognitive hunch", "p2-all-around sight", "p3-danger sense", "p4-victory before battle"] }; PsionicsList["p1-precognitive hunch"] = { name : "Precognitive Hunch", source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Awake", time : "1 bns", range : "Self", duration : "Conc, 1 min", description : "I add 1d4 to attack rolls, saving throws, and ability checks", descriptionFull : "As a bonus action, you open yourself to receive momentary insights that improve your odds of success; until your concentration ends, whenever you make an attack roll, a saving throw, or an ability check, you roll a d4 and add it to the total.", firstCol : 2 }; PsionicsList["p2-all-around sight"] = { name : "All-Around Sight", source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Awake", time : "1 rea", timeFull : "1 reaction, which you take when you are hit by an attack", range : "Self", duration : "Instantaneous", description : "After an attack hits me, impose disadvantage on that attack roll", descriptionFull : "In response to an attack hitting you, you use your reaction to impose disadvantage on that attack roll, possibly causing it to miss.", firstCol : 3 }; PsionicsList["p3-danger sense"] = { name : "Danger Sense", source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "Self", duration : "Conc, 8 h", description : "I gain +10 on the initiative roll, can't be surprised, and attacks against me can't gain advantage", descriptionFull : "As an action, you create a psychic model of reality in your mind and set it to show you a few seconds into the future. Until your concentration ends, you can't be surprised, attack rolls against you can't gain advantage, and you gain a +10 bonus to initiative.", firstCol : 5 }; PsionicsList["p4-victory before battle"] = { name : "Victory Before Battle", source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Awake", time : "", range : "60-ft rad", duration : "Instantaneous", description : "Use when rolling initiative; grant myself and up to 5 creatures +10 on the initiative roll", descriptionFull : "When you roll initiative, you can use this ability to grant yourself and up to five creatures of your choice within 60 feet of you a +10 bonus to initiative.", firstCol : 7 }; //the psionic restoration discipline (contributed by Justin W.) PsionicsList["psionic restoration-ua-psy"] = { name : "Psionic Restoration", classes : ["mystic"], source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "While focused, I can touch a creature with 0 HP as a bonus action and stabilize it", descriptionFull : "You wield psionic energy to cure wounds and restore health to yourself and others." + PsychicFocus + "While focused on this discipline, you can use a bonus action to touch a creature that has 0 hit points and stabilize it.", firstCol : "checkbox", dependencies : ["pr1-mend wounds", "pr2-restore health", "pr3-restore life", "pr4-restore vigor"] }; PsionicsList["pr1-mend wounds"] = { name : "Mend Wounds", source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Immor", time : "1 a", range : "Touch", duration : "Instantaneous", description : "1 creature is healed for 1d8/PP HP", descriptionFull : "As an action, you can spend psi points to restore hit points to one creature you touch. The creature regains 1d8 hit points per psi point spent.", firstCol : "1-7" }; PsionicsList["pr2-restore health"] = { name : "Restore Health", source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Immor", time : "1 a", range : "Touch", duration : "Instantaneous", description : "1 creature is cured of either blindness, deafness, paralysis, poison, or 1 disease", descriptionFull : "As an action, you touch one creature and remove one of the following conditions from it: blinded, deafened, paralyzed, or poisoned. Alternatively, you remove one disease from the creature.", firstCol : 3 }; PsionicsList["pr3-restore life"] = { name : "Restore Life", source : [["UA:TMC", 23]], psionic : true, level : 1, school : "Immor", time : "1 a", range : "Touch", duration : "Instantaneous", description : "Resurrects 1 crea that has died in last minute to 1 HP, if not missing vital body parts or died of old age", descriptionFull : "As an action, you touch one creature that has died within the last minute. The creature returns to life with 1 hit point. This ability can't return to life a creature that has died of old age, nor can it restore a creature missing any vital body parts.", firstCol : 5 }; PsionicsList["pr4-restore vigor"] = { name : "Restore Vigor", source : [["UA:TMC", 24]], psionic : true, level : 1, school : "Immor", time : "1 a", range : "Touch", duration : "Instantaneous", description : "1 crea removes either 1 ability score reduction, 1 HP max reduction effect, or 1 level of exhaustion", descriptionFull : "As an action, you can touch one creature and choose one of the following: remove any reductions to one of its ability scores, remove one effect that reduces its hit point maximum, or reduce its exhaustion level by one.", firstCol : 7 }; //the psionic weapon discipline (contributed by Justin W.) PsionicsList["psionic weapon-ua-psy"] = { name : "Psionic Weapon", classes : ["mystic"], source : [["UA:TMC", 24]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "1 weapon or unarmed strike does Psychic dmg and counts as magical; no Str or Dex to dmg until CL6", descriptionFull : "You have learned how to channel psionic energy into your attacks, lending them devastating power." + PsychicFocus + "Whenever you focus on this discipline, choose one weapon you're holding or your unarmed strike. When you attack with it while focused on this discipline, its damage is psychic and magical, rather than its normal damage type. Until you reach 6th level as a mystic, you don't add your Strength or Dexterity modifier to the psychic attack's damage rolls.", firstCol : "checkbox", dependencies : ["pw1-ethereal weapon", "pw2-lethal strike", "pw3-augmented weapon"] }; PsionicsList["pw1-ethereal weapon"] = { name : "Ethereal Weapon", source : [["UA:TMC", 24]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", duration : "Next turn end", description : "1 crea save or auto hit by my next wea/unarmed atk; save halves atk dmg \u0026 negates any side-effects", descriptionFull : "As a bonus action, you temporarily transform one weapon you're holding or your unarmed strike into pure psionic energy. The next attack you make with it before the end of your turn ignores the target's armor, requiring no attack roll. Instead, the target makes a Dexterity saving throw against this discipline. On a failed save, the target takes the attack's normal damage and suffers its additional effects. On a successful save, the target takes half damage from the attack but suffers no additional effects that would normally be imposed on a hit.", firstCol : 1 }; PsionicsList["pw2-lethal strike"] = { name : "Lethal Strike", source : [["UA:TMC", 24]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Self", duration : "Next turn end", description : "My next weapon or unarmed attack that hits does +1d10/PP Psychic damage", descriptionFull : "As a bonus action, you imbue a weapon you're holding or your unarmed strike with psychic energy. The next time you hit with it before the end of your turn, it deals an extra 1d10 psychic damage per psi point spent.", firstCol : "1-7" }; PsionicsList["pw3-augmented weapon"] = { name : "Augmented Weapon", source : [["UA:TMC", 24]], psionic : true, level : 1, school : "Immor", time : "1 bns", range : "Touch", duration : "Conc, 10 min", description : "1 weapon becomes a magic weapon with a +3 bonus to its attack and damage rolls", descriptionFull : "As a bonus action, touch one simple or martial weapon. Until your concentration ends, that weapon becomes a magic weapon with a +3 bonus to its attack and damage rolls.", firstCol : 5 }; //the psychic assault discipline PsionicsList["psychic assault-ua-psy"] = { name : "Psychic Assault", classes : ["mystic"], source : [["UA:TMC", 24]], psionic : true, level : 1, school : "Awake", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain a +2 bonus to damage rolls with psionic talents that deal Psychic damage", descriptionFull : "You wield your mind like a weapon, unleashing salvos of psionic energy." + PsychicFocus + "While focused on this discipline, you gain a +2 bonus to damage rolls with psionic talents that deal psychic damage.", firstCol : "checkbox", dependencies : ["pa1-psionic blast", "pa2-ego whip", "pa3-id insinuation", "pa4-psychic blast", "pa5-psychic crush"] }; PsionicsList["pa1-psionic blast"] = { name : "Psionic Blast", source : [["UA:TMC", 24]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Instantaneous", description : "1 creature takes 1d8/PP Psychic damage", descriptionFull : "As an action, choose one creature you can see within 60 feet of you. The target takes 1d8 psychic damage per psi point spent on this ability.", firstCol : "1-7" }; PsionicsList["pa2-ego whip"] = { name : "Ego Whip", source : [["UA:TMC", 24]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Instantaneous", save : "Int", description : "1 crea save or 3d8 Psychic dmg, next turn just Dodge/Disengage/Hide action; save half \u0026 act normal", descriptionFull : "As an action, choose one creature you can see within 60 feet of you. The target must make an Intelligence saving throw. On a failed save, the creature takes 3d8 psychic damage, and it is filled with self-doubt, leaving it able to use its action on its next turn only to take the Dodge, Disengage, or Hide action. On a successful saving throw, it takes half as much damage.", firstCol : 3 }; PsionicsList["pa3-id insinuation"] = { name : "Id Insinuation", source : [["UA:TMC", 24]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Instantaneous", save : "Int", description : "1 crea save or 5d8 Psychic dmg, next turn only Dodge/Attack action; save halves \u0026 act normal", descriptionFull : "As an action, choose one creature you can see within 60 feet of you. The target must make an Intelligence saving throw. On a failed save, the creature takes 5d8 psychic damage, and it goes into a fury, as its id runs rampant. On its next turn, it can use its action only to take the Dodge or Attack action. On a successful save, it takes half as much damage.", firstCol : 5 }; PsionicsList["pa4-psychic blast"] = { name : "Psychic Blast", source : [["UA:TMC", 24]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60-ft cone", duration : "Instantaneous", save : "Int", description : "All creatures 8d8(+2d8/extra PP) Psychic dmg; save halves", descriptionFull : "As an action, you unleash devastating psychic energy in a 60-foot cone. Each creature in that area must make an Intelligence saving throw, taking 8d8 psychic damage on a failed save, or half as much damage on a successful one. You can increase the damage by 2d8 if you spend 1 more psi point on this ability.", firstCol : "6-7" }; PsionicsList["pa5-psychic crush"] = { name : "Psychic Crush", source : [["UA:TMC", 24]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "120 ft", duration : "Instantaneous", save : "Int", description : "20-ft cu all crea save or 8d8 Psychic dmg \u0026 stunned until my next turn ends; save halves \u0026 no stun", descriptionFull : "As an action, you create a 20-foot cube of psychic energy within 120 feet of you. Each creature in that area must make an Intelligence saving throw. On a failed save, a target takes 8d8 psychic damage and is stunned until the end of your next turn. On a successful save, a target takes half as much damage.", firstCol : 7 }; //the psychic disruption discipline (contributed by Justin W.) PsionicsList["psychic disruption-ua-psy"] = { name : "Psychic Disruption", classes : ["mystic"], source : [["UA:TMC", 24]], psionic : true, level : 1, school : "Awake", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I have advantage on Charisma (Deception) checks", descriptionFull : "You create psychic static that disrupts other creatures' ability to think clearly." + PsychicFocus + "While focused on this discipline, you have advantage on Charisma (Deception) checks.", firstCol : "checkbox", dependencies : ["pd1-distracting haze", "pd2-daze", "pd3-mind storm"] }; PsionicsList["pd1-distracting haze"] = { name : "Distracting Haze", source : [["UA:TMC", 24]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Conc, 1 min", save : "Int", description : "1 crea save or 1d10/PP Psychic dmg, can't see more than 10 ft; save halves and see normal", descriptionFull : "As an action, choose one creature you can see within 60 feet of you. That creature must make an Intelligence saving throw. On a failed save, it takes 1d10 psychic damage per psi point spent and can't see anything more than 10 feet from it until your concentration ends. On a successful save, it takes half as much damage.", firstCol : "1-7" }; PsionicsList["pd2-daze"] = { name : "Daze", source : [["UA:TMC", 25]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Next turn end", save : "Int", description : "1 crea save or incapacitated until end of my next turn or it takes any damage", descriptionFull : "As an action, choose one creature you can see within 60 feet of you. That creature must make an Intelligence saving throw. On a failed save, the target is incapacitated until the end of your next turn or until it takes any damage.", firstCol : 3 }; PsionicsList["pd3-mind storm"] = { name : "Mind Storm", source : [["UA:TMC", 25]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Next turn end", save : "Wis", description : "20-ft rad all crea 6d8(+1d6/extra PP) Psychic dmg and dis. on saves; save halves and no dis. on saves", descriptionFull : "As an action, choose a point you can see within 60 feet of you. Each creature in a 20-foot-radius sphere centered on that point must make a Wisdom saving throw. On a failed save, a target takes 6d8 psychic damage and suffers disadvantage on all saving throws until the end of your next turn. On a successful save, a creature takes half as much damage. You can increase the damage by 1d6 per additional psi point spent on this ability.", firstCol : "5-7" }; //the psychic inquisition discipline (contributed by Justin W.) PsionicsList["psychic inquisition-ua-psy"] = { name : "Psychic Inquisition", classes : ["mystic"], source : [["UA:TMC", 25]], psionic : true, level : 1, school : "Awake", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I know when a creature telepathically communicating with me is lying", descriptionFull : "You reach into a creature's mind to uncover information or plant ideas within it." + PsychicFocus + "While focused on this discipline, you know when a creature communicating with you via telepathy is lying.", firstCol : "checkbox", dependencies : ["pi1-hammer of inquisition", "pi2-forceful query", "pi3-ransack mind", "pi4-phantom idea"] }; PsionicsList["pi1-hammer of inquisition"] = { name : "Hammer of Inquisition", source : [["UA:TMC", 25]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Instantaneous", save : "Int", description : "1 crea save or 1d10/PP Psychic dmg, dis. next Wis save before my next turn; save halves \u0026 no effects", descriptionFull : "As an action, choose one creature you can see within 60 feet of you. The target must make an Intelligence saving throw. On a failed save, it takes 1d10 psychic damage per psi point spent and suffers disadvantage on its next Wisdom saving throw before the end of your next turn. On a successful save, it takes half as much damage.", firstCol : "1-7" }; PsionicsList["pi2-forceful query"] = { name : "Forceful Query", source : [["UA:TMC", 25]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "30 ft", duration : "Instantaneous", save : "Int", description : "1 crea save or they must truthfully answer a yes or no question (charm effect)", descriptionFull : "As an action, you ask a question of one creature that can see and hear you within 30 feet of you. The question must be phrased so that it can be answered with a yes or no, otherwise this ability fails. The target must succeed on a Wisdom saving throw, or it replies with a truthful answer. A creature is immune to this ability if it is immune to being charmed.", firstCol : 2 }; PsionicsList["pi3-ransack mind"] = { name : "Ransack Mind", source : [["UA:TMC", 25]], psionic : true, level : 1, school : "Awake", time : "1 h", range : "30 ft", duration : "12/24/48 h", save : "Int", description : "1 crea 3 saves if in range for full duration; learn key memories from 12/24/48 h (1/2/3 failed saves)", descriptionFull : "While you concentrate on this ability, you probe one creature's mind. The creature must remain within 30 feet of you, and you must be able to see it. If you reach the ability's full duration, the target must make three Intelligence saving throws, and you learn information from it based on the number of saving throws it fails." + "\n " + "With one failed saving throw, you learn its key memories from the past 12 hours." + "\n " + "With two failed saving throws, you learn its key memories from the past 24 hours." + "\n " + "With three failed saving throws, you learn its key memories from the past 48 hours.", firstCol : 5 }; PsionicsList["pi4-phantom idea"] = { name : "Phantom Idea", source : [["UA:TMC", 25]], psionic : true, level : 1, school : "Awake", time : "1 h", range : "30 ft", duration : "4/24/48 h", save : "Int", description : "1 crea 3 saves if in range for full duration; implant memory lasting 4/24/48 h (1/2/3 failed saves)", descriptionFull : "While you concentrate on this ability, you probe one creature's mind. The creature must remain within 30 feet of you, and you must be able to see it. If you reach the ability's full duration, the target must make three Intelligence saving throws, and you plant a memory or an idea in it, which lasts for a number of hours based on the number of saving throws it fails. You choose whether the idea or memory is trivial (such as “I had porridge for breakfast” or “Ale is the worst”) or personality-defining (“I failed to save my village from orc marauders and am therefore a coward” or “Magic is a scourge, so I renounce it”)." + "\n " + "With one failed saving throw, the idea or memory lasts for the next 4 hours. With two failed saving throws, it lasts for 24 hours. With three failed saving throws, it lasts for 48 hours.", firstCol : 6 }; //the psychic phantoms discipline (contributed by Justin W.) PsionicsList["psychic phantoms-ua-psy"] = { name : "Psychic Phantoms", classes : ["mystic"], source : [["UA:TMC", 25]], psionic : true, level : 1, school : "Awake", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain advantage on Charisma (Deception) checks", descriptionFull : "Your power reaches into a creature's mind and causes it false perceptions." + PsychicFocus + "While focused on this discipline, you have advantage on Charisma (Deception) checks.", firstCol : "checkbox", dependencies : ["pp1-distracting figment", "pp2-phantom foe", "pp3-phantom betrayal", "pp4-phantom riches"] }; PsionicsList["pp1-distracting figment"] = { name : "Distracting Figment", source : [["UA:TMC", 25]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Next turn end", save : "Int", description : "1 crea save or 1d10/PP Psychic dmg, can't use rea, melee atks vs. it have adv.; save halves \u0026 no effects", descriptionFull : "As an action, choose one creature you can see within 60 feet of you. The target must make an Intelligence saving throw. On a failed save, it takes 1d10 psychic damage per psi point spent and thinks it perceives a threatening creature just out of its sight; until the end of your next turn, it can't use reactions, and melee attack rolls against it have advantage. On a successful save, it takes half as much damage.", firstCol : "1-7" }; PsionicsList["pp2-phantom foe"] = { name : "Phantom Foe", source : [["UA:TMC", 25]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Conc, 1 min", save : "Int", description : "1 crea save or no rea and 1d8(+1d8/extra PP) Psychic dmg at start its turn; save at end of each turn", descriptionFull : "As an action, choose one creature you can see within 60 feet of you. The target must make an Intelligence saving throw. On a failed save, it perceives a horrid creature adjacent to it until your concentration ends. During this time, the target can't take reactions, and it takes 1d8 psychic damage at the start of each of its turns. The target can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success. You can increase the damage by 1d8 for each additional psi point spent on the ability.", firstCol : "3-7" }; PsionicsList["pp3-phantom betrayal"] = { name : "Phantom Betrayal", source : [["UA:TMC", 26]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Conc, 1 min", save : "Int", description : "1 crea save or targets its allies with attacks/damaging effects; save at end of each turn (charm effect)", descriptionFull : "As an action, you plant delusional paranoia in a creature's mind. Choose one creature you can see within 60 feet of you. The target must succeed on an Intelligence saving throw, or until your concentration ends, it must target its allies with attacks and other damaging effects. The target can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success. A creature is immune to this ability if it is immune to being charmed.", firstCol : 5 }; PsionicsList["pp4-phantom riches"] = { name : "Phantom Riches", source : [["UA:TMC", 26]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Conc, 1 min", save : "Int", description : "1 crea save or I move it and it can't act if not taking dmg since last turn; save at end of each turn", descriptionFull : "As an action, you plant the phantom of a greatly desired object in a creature's mind. Choose one creature you can see within 60 feet of you. The target must make an Intelligence saving throw. On a failed save, you gain partial control over the target's behavior until your concentration ends; the target moves as you wish on each of its turns, as it thinks it pursues the phantom object it desires. If it hasn't taken damage since its last turn, it can use its action only to admire the object you created in its perception. The target can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success.", firstCol : 7 }; //the telepathic contact discipline (contributed by Justin W.) PsionicsList["telepathic contact-ua-psy"] = { name : "Telepathic Contact", classes : ["mystic"], source : [["UA:TMC", 26]], psionic : true, level : 1, school : "Awake", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "Use telepathy class feature with up to 6 crea; If no telepathy feature, gain telepathy 120 ft instead", descriptionFull : "By channeling psionic power, you gain the ability to control other creatures by substituting your will for their own." + PsychicFocus + "While focused on this discipline, you gain the ability to use your Telepathy class feature with up to six creatures at once. If you don't have that feature from the mystic class, you instead gain it while focused on this discipline.", firstCol : "checkbox", dependencies : ["tc1-exacting query", "tc2-occluded mind", "tc3-broken will", "tc4-psychic grip", "tc5-psychic domination"] }; PsionicsList["tc1-exacting query"] = { name : "Exacting Query", source : [["UA:TMC", 26]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "120 ft", duration : "Instantaneous", save : "Int", description : "1 crea save or answer 1 telepathically asked question; on save, target is immune until my long rest", descriptionFull : "As an action, you target one creature you can communicate with via telepathy. The target must make an Intelligence saving throw. On a failed save, the target truthfully answers one question you ask it via telepathy. On a successful save, the target is unaffected, and you can't use this ability on it again until you finish a long rest. A creature is immune to this ability if it is immune to being charmed.", firstCol : 2 }; PsionicsList["tc2-occluded mind"] = { name : "Occluded Mind", source : [["UA:TMC", 26]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "120 ft", duration : "5 min", save : "Int", description : "1 crea save or believes telepathic statement; on save, target immune until my long rest (charm effect)", descriptionFull : "As an action, you target one creature you can communicate with via telepathy. The target must make an Intelligence saving throw. On a failed save, the target believes one statement of your choice for the next 5 minutes that you communicate to it via telepathy. The statement can be up to ten words long, and it must describe you or a creature or an object the target can see. On a successful save, the target is unaffected, and you can't use this ability on it again until you finish a long rest. A creature is immune to this ability if it is immune to being charmed.", firstCol : 2 }; PsionicsList["tc3-broken will"] = { name : "Broken Will", source : [["UA:TMC", 26]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "120 ft", duration : "1 rnd", save : "Int", description : "1 crea save or I control it on its next turn; on save, target immune until my long rest (charm effect)", descriptionFull : "As an action, you target one creature you can communicate with via telepathy. The target must make an Intelligence saving throw. On a failed save, you choose the target's movement and action on its next turn. On a successful save, the target is unaffected, and you can't use this ability on it again until you finish a long rest. A creature is immune to this ability if it is immune to being charmed.", firstCol : 5 }; PsionicsList["tc4-psychic grip"] = { name : "Psychic Grip", source : [["UA:TMC", 26]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Conc, 1 min", save : "Int", description : "1 crea save or paralyzed; save at end of each turn, on failure I use rea to have it move half its speed", descriptionFull : "As an action, you target one creature you can see within 60 feet of you. The target must succeed on an Intelligence saving throw, or it is paralyzed until your concentration ends. At the end of each of its turns, it can repeat the saving throw. On a success, this effect ends. On a failure, you can use your reaction to force the target to move up to half its speed, even though it's paralyzed.", firstCol : 6 }; PsionicsList["tc5-psychic domination"] = { name : "Psychic Domination", source : [["UA:TMC", 26]], psionic : true, level : 1, school : "Awake", time : "1 a", range : "60 ft", duration : "Conc, 1 min", save : "Int", description : "1 crea save or I direct its actions and move on its turns; save at end of each turn (charm effect)", descriptionFull : "As an action, you target one creature you can see within 60 feet of you. The target must succeed on an Intelligence saving throw, or you choose the creature's actions and movement on its turns until your concentration ends. At the end of each of its turns, it can repeat the saving throw, ending the effect on itself on a success. A creature is immune to this ability if it is immune to being charmed.", firstCol : 7 }; //the third eye discipline (contributed by Justin W.) PsionicsList["third eye-ua-psy"] = { name : "Third Eye", classes : ["mystic"], source : [["UA:TMC", 26]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "Self", components : "Psi-F.", duration : "While focused", description : "I gain darkvision 60 ft; if already darkvision of 60 ft or more, increase range by 10 ft instead", descriptionFull : "You create a third, psychic eye in your mind which you cast out into the world. It channels thoughts and knowledge back to you, greatly enhancing your senses." + PsychicFocus + "While focused on this discipline, you have darkvision with a range of 60 feet. If you already have darkvision with that range or greater, increase its range by 10 feet.", firstCol : "checkbox", dependencies : ["te1-tremorsense", "te2-unwavering eye", "te3-piercing sight", "te4-truesight"] }; PsionicsList["te1-tremorsense"] = { name : "Tremorsense", source : [["UA:TMC", 26]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "Self", duration : "Conc, 1 min", description : "I gain tremorsense with a radius of 30 ft", descriptionFull : "As a bonus action, you gain tremorsense with a radius of 30 feet, which lasts until your concentration ends.", firstCol : 2 }; PsionicsList["te2-unwavering eye"] = { name : "Unwavering Eye", source : [["UA:TMC", 26]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "Self", duration : "1 min", description : "I gain advantage on Wisdom checks", descriptionFull : "As a bonus action, you gain advantage on Wisdom checks for 1 minute", firstCol : 2 }; PsionicsList["te3-piercing sight"] = { name : "Piercing Sight", source : [["UA:TMC", 27]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "Self", duration : "Conc, 1 min", description : "I see through objects that are up to 1 ft thick within 30 ft", descriptionFull : "As a bonus action, you gain the ability to see through objects that are up to 1 foot thick within 30 feet of you. This sight lasts until your concentration ends.", firstCol : 3 }; PsionicsList["te4-truesight"] = { name : "Truesight", source : [["UA:TMC", 27]], psionic : true, level : 1, school : "Nomad", time : "1 bns", range : "Self", duration : "Conc, 1 min", description : "I gain truesight with a radius of 30 ft", descriptionFull : "As a bonus action, you gain truesight with a radius of 30 feet, which lasts until your concentration ends.", firstCol : 5 }; // Psionic Discipline 'Mastery of Force' power 'Inertial Armour' ArmourList["inertial armor-ua-psy"] = { regExpSearch : /^(?=.*(inertial|psychic|psionic))(?=.*armou?r).*$/i, name : "Inertial armor", source : [["UA:TMC", 18]], ac : 14, list : "magic" }; // Psionic Talents that work like damage cantrips WeaponsList["energy beam-ua-psy"] = { regExpSearch : /^(?=.*\benergy\b)(?=.*\bbeam\b).*$/i, name : "Energy Beam", source : [["UA:TMC", 27]], list : "psionic", ability : 4, type : "Cantrip", damage : ["C", 8, "My choice"], range : "90 ft", description : "Dex save, success - no damage; Acid, cold, fire, lightning, or thunder damage [my choice]", abilitytodamage : false, dc : true }; WeaponsList["mind slam-ua-psy"] = { regExpSearch : /^(?=.*\bmind\b)(?=.*\bslam\b).*$/i, name : "Mind Slam", source : [["UA:TMC", 28]], list : "psionic", ability : 4, type : "Cantrip", damage : ["C", 6, "force"], range : "60 ft", description : "Con save, success - no damage, fail - Large or smaller target also knocked prone", abilitytodamage : false, dc : true }; WeaponsList["mind thrust-ua-psy"] = { regExpSearch : /^(?=.*\bmind\b)(?=.*\bthrust\b).*$/i, name : "Mind Thrust", source : [["UA:TMC", 28]], list : "psionic", ability : 4, type : "Cantrip", damage : ["C", 10, "psychic"], range : "120 ft", description : "Int save, success - no damage", abilitytodamage : false, dc : true }; WeaponsList["psychic hammer-ua-psy"] = { regExpSearch : /^(?=.*\bpsychic\b)(?=.*\bhammer\b).*$/i, name : "Psychic Hammer", source : [["UA:TMC", 28]], list : "psionic", ability : 4, type : "Cantrip", damage : ["C", 6, "force"], range : "120 ft", description : "Str save, success - no damage, fail - also move 10 ft in chosen direction", abilitytodamage : false, dc : true }; ================================================ FILE: WotC material/ua_20170320_Wizard-Revisited.js ================================================ var iFileName = "ua_20170320_Wizard-Revisited.js"; RequiredSheetVersion("13.0.8", 15); // This file adds the content from the Unearthed Arcana: Wizard Revisited article to MPMB's Character Record Sheet // Define the source SourceList["UA:WR"] = { name : "Unearthed Arcana: Wizard Revisited", abbreviation : "UA:WR", group : "Unearthed Arcana", url : "https://media.wizards.com/2017/dnd/downloads/MJ320UAWizardVF2017.pdf", date : "2017/03/20" }; // Adds 1 new subclass for the Wizard (with contributions by erickrause) AddSubClass("wizard", "war magic-ua", { regExpSearch : /^(?=.*war)(?=.*(magic|mage)).*$/i, subname : "War Magic", source : [["UA:WR", 2]], fullname : "War Mage", features : { "subclassfeature2" : { //has to be identical to a feature named in the ClassList name : "Arcane Deflection", source : [["UA:WR", 2]], minlevel : 2, description : desc([ "As a reaction when I'm hit by an attack, I can gain +2 to my AC against that attack", "As a reaction when I fail a Con save, I can gain +4 bonus to that saving throw", "After I do either, I can't cast spells other than cantrips until the end of my next turn" ]), action : [["reaction", ""]] }, "subclassfeature2.1" : { name : "Tactical Wit", source : [["UA:WR", 2]], minlevel : 2, description : desc([ "I gain a bonus to my initiative rolls equal to my Intelligence modifier" ]), addMod : { type : "skill", field : "Init", mod : "max(Int|0)", text : "I can add my Intelligence modifier to initiative rolls." } }, "subclassfeature6" : { name : "Power Surge", source : [["UA:WR", 2]], minlevel : 6, description : desc([ "When multiple targets have to save vs. one of my spells, I can have it do more damage", "On the turn I cast the spell, I can roll 2 additional damage dice for it" ]), usages : 1, recovery : "short rest" }, "subclassfeature10" : { name : "Durable Magic", source : [["UA:WR", 2]], minlevel : 10, description : desc([ "While I'm maintaining concentration on a spell, I gain +2 to AC and all saving throws" ]) }, "subclassfeature14" : { name : "Deflecting Shroud", source : [["UA:WR", 2]], minlevel : 14, description : desc([ "When I use my Arcane Deflection feature, magical energy arcs from me", "Any creatures of my choice within 10 ft of me take half my level in force damage" ]), additional : levels.map( function(n) { return n < 14 ? "" : Math.floor(n/2) + " force damage"; }) } } }); // [dupl_start] Don't add the Theurgy subclass if the source UA:TF is present, as that class is identical to the one found in Unearthed Arcana: The Faithful (2016/08/01) if (!SourceList["UA:TF"]) { RunFunctionAtEnd(function() { var theTheurgySubclass = AddSubClass("wizard", "theurgy-ua", { // Still valid 2021-09-21 regExpSearch : /^((?=.*mystic)(?=.*theurge))|(?=.*(theurgy|theurgist)).*$/i, subname : "Theurgy", source : [["UA:TF", 1], ["UA:WR", 1]], fullname : "Theurgist", features : { "subclassfeature2" : { name : "Arcane Initiate", source : [["UA:TF", 2], ["UA:WR", 1]], minlevel : 2, description: desc([ 'Choose a Cleric Domain using the "Choose Feature" button above', "When I gain a wizard level I can replace one of the spells I would add to my spellbook", "I can replace it with one of the chosen domain spells, if it is of a level I can cast", "If my spellbook has all the domain spells, I can select any cleric spell of a level I can cast", "Other wizards cannot copy cleric spells from my spellbook into their own spellbooks", ]), calcChanges : { spellList : [ function(spList, spName, spType) { if (spName !== "wizard" || spType.indexOf("bonus") !== -1 || !CurrentSpells.wizard.extra || !CurrentSpells.wizard.selectSp || !spList.level || !spList.level[1]) return; var domainSpells = CurrentSpells.wizard.extra; // now stop this function if even one of the domain spells is not already in the spellbook var knownSpells = [].concat(CurrentSpells.wizard.selectSp ? CurrentSpells.wizard.selectSp : []).concat(CurrentSpells.wizard.selectSpSB ? CurrentSpells.wizard.selectSpSB : []); for (var i = 0; i < domainSpells.length; i++) { if (knownSpells.indexOf(domainSpells[i]) == -1) return; } // get all the cleric spells, level 1-9 var clericSpells = CreateSpellList({"class" : "cleric", level : [1,9]}); spList.extraspells = spList.extraspells.concat(clericSpells); }, "When I gain a wizard level after my spellbook already has all the spells of my chosen domain, I can instead select any cleric spell of a level I can cast as one of the spells I gain from levelling up." ] }, choices : [], choiceDependencies : [{ feature : "subclassfeature2.3" }, { feature : "subclassfeature6" }, { feature : "subclassfeature10" }, { feature : "subclassfeature14" }] }, "subclassfeature2.1" : { name : "Channel Arcana", source : [["UA:TF", 2], ["UA:WR", 1]], minlevel : 2, description: desc("I can channel arcane energy from my deity; the save for this is my wizard spell DC"), usages : [0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3], recovery : "short rest" }, "subclassfeature2.2" : { name : "Channel Arcana: Divine Arcana", source : [["UA:TF", 2], ["UA:WR", 1]], minlevel : 2, description: desc([ "As a bonus action, I speak a prayer to control the flow of magic around me", "The next spell I cast gains a +2 bonus to its attack roll or saving throw DC", ]), action : [["bonus action", ""]] }, "subclassfeature2.3" : { name : "Channel Arcana: Domain", source : [["UA:TF", 2], ["UA:WR", 1]], minlevel : 2, description: desc('Use the "Choose Feature" button above to select the domain'), choices : [], choicesNotInMenu : true }, "subclassfeature6" : { name : "Arcane Acolyte", source : [["UA:TF", 3], ["UA:WR", 1]], minlevel : 6, description: desc('Use the "Choose Feature" button above to select the domain'), choices : [], choicesNotInMenu : true }, "subclassfeature10" : { name : "Arcane Priest", source : [["UA:TF", 3], ["UA:WR", 2]], minlevel : 10, description: desc('Use the "Choose Feature" button above to select the domain'), choices : [], choicesNotInMenu : true }, "subclassfeature14" : { name : "Arcane High Priest", source : [["UA:TF", 3], ["UA:WR", 2]], minlevel : 14, description: desc('Use the "Choose Feature" button above to select the domain'), choices : [], choicesNotInMenu : true } } }); var MTfeat = ClassSubList[theTheurgySubclass].features; for (var i = 0; i < ClassList.cleric.subclasses[1].length; i++) { var aDomain = ClassSubList[ClassList.cleric.subclasses[1][i]]; if (!aDomain) continue; var dSource = aDomain.source ? aDomain.source : aDomain.features["subclassfeature1"] && aDomain.features["subclassfeature1"].source ? aDomain.features["subclassfeature1"].source : [["UA:TF", 0], ["UA:WR", 0]]; var suffix = 1; var entryDoNm = aDomain.subname; while (MTfeat["subclassfeature2"].choices.indexOf(entryDoNm) !== -1) { suffix += 1; entryDoNm = aDomain.subname + " (" + suffix + ")"; }; MTfeat["subclassfeature2"].choices.push(entryDoNm); MTfeat["subclassfeature2"][entryDoNm.toLowerCase()] = { name : "Arcane Initiate: " + aDomain.subname, source : dSource, spellcastingExtra : aDomain.spellcastingExtra, description: desc([ "When I gain a wizard level I can replace one of the spells I would add to my spellbook", "I can replace it with one of the " + aDomain.subname.toLowerCase() + " spells, if it is of a level I can cast", "If my spellbook has all the domain spells, I can select any cleric spell of a level I can cast", "Other wizards cannot copy cleric spells from my spellbook into their own spellbooks", ]), }; var AIdomain = MTfeat["subclassfeature2"][entryDoNm.toLowerCase()]; for (var aFea in aDomain.features) { var dFea = aDomain.features[aFea]; if (dFea.minlevel === 2 && (/channel divinity/i).test(dFea.name)) { MTfeat["subclassfeature2.3"].choices.push(entryDoNm); MTfeat["subclassfeature2.3"][entryDoNm.toLowerCase()] = newObj(dFea); MTfeat["subclassfeature2.3"][entryDoNm.toLowerCase()].name = MTfeat["subclassfeature2.3"][entryDoNm.toLowerCase()].name.replace(/channel divinity/i, "Channel Arcana"); }; if (dFea.minlevel === 1 && !dFea.armor && !dFea.weapons && !dFea.armorProfs && !dFea.weaponProfs) { if (MTfeat["subclassfeature6"].choices.indexOf(entryDoNm) === -1) { //if the entry does not exist yet MTfeat["subclassfeature6"].choices.push(entryDoNm); MTfeat["subclassfeature6"][entryDoNm.toLowerCase()] = newObj(dFea); } else { //add to the existing entry var theFea = MTfeat["subclassfeature6"][entryDoNm.toLowerCase()]; theFea.name += " \u0026 " + dFea.name; theFea.description += dFea.description; for (var subFea in dFea) { if (theFea[subFea] === undefined) theFea[subFea] = dFea[subFea]; }; }; }; if (dFea.minlevel === 6 && !dFea.armor && !dFea.weapons && !dFea.armorProfs && !dFea.weaponProfs) { if (MTfeat["subclassfeature10"].choices.indexOf(entryDoNm) === -1) { //if the entry does not exist yet MTfeat["subclassfeature10"].choices.push(entryDoNm); MTfeat["subclassfeature10"][entryDoNm.toLowerCase()] = newObj(dFea); } else { //add to the existing entry var theFea = MTfeat["subclassfeature10"][entryDoNm.toLowerCase()]; theFea.name += " \u0026 " + dFea.name; theFea.description += dFea.description; for (var subFea in dFea) { if (theFea[subFea] === undefined) theFea[subFea] = dFea[subFea]; }; }; }; if (dFea.minlevel === 17 && !dFea.armor && !dFea.weapons && !dFea.armorProfs && !dFea.weaponProfs) { if (MTfeat["subclassfeature14"].choices.indexOf(entryDoNm) === -1) { //if the entry does not exist yet MTfeat["subclassfeature14"].choices.push(entryDoNm); MTfeat["subclassfeature14"][entryDoNm.toLowerCase()] = newObj(dFea); } else { //add to the existing entry var theFea = MTfeat["subclassfeature14"][entryDoNm.toLowerCase()]; theFea.name += " \u0026 " + dFea.name; theFea.description += dFea.description; for (var subFea in dFea) { if (theFea[subFea] === undefined) theFea[subFea] = dFea[subFea]; }; }; }; }; }; }); }; // dupl_end ================================================ FILE: WotC material/ua_20170327_A-Trio-of-Subclasses.js ================================================ var iFileName = "ua_20170327_A Trio-of-Subclasses.js"; RequiredSheetVersion("13.1.14"); // This file adds the content from the Unearthed Arcana: A Trio of Subclasses article to MPMB's Character Record Sheet // Define the source SourceList["UA:AToS"] = { name : "Unearthed Arcana: A Trio of Subclasses", abbreviation : "UA:AToS", group : "Unearthed Arcana", url : "https://media.wizards.com/2017/dnd/downloads/UAThreeSubclasses.pdf", date : "2017/03/27" }; // Adds three subclass: 1 for the Monk, 1 for the Paladin, and 1 for the Ranger AddSubClass("monk", "way of the drunken master-ua", { regExpSearch : /^((?=.*drunken)(?=.*master))|((?=.*drunk)((?=.*(monk|monastic))|((?=.*martial)(?=.*(artist|arts)))|((?=.*spiritual)(?=.*warrior)))).*$/i, subname : "Way of the Drunken Master", subnameShort: "Drunken Master", fullname : "Drunken Master", source : [["UA:AToS", 1]], features : { "subclassfeature3" : { name : "Drunken Technique", source : [["UA:AToS", 1]], minlevel : 3, description : desc([ "I gain proficiency with the Performance skill", "When using Flurry of Blows, I gain the benefits of a Disengage and +10 ft speed this turn" ]), skills : ["Performance"] }, "subclassfeature6" : { name : "Tipsy Sway", source : [["UA:AToS", 1]], minlevel : 6, description: desc("As a reaction when missed in melee, attacker instead hits another I can see within 5 ft"), usages : 1, recovery : "short rest", action : [["reaction", ""]] }, "subclassfeature11" : { name : "Drunkard's Luck", source : [["UA:AToS", 1]], minlevel : 11, description: desc("Before I roll for a save, I can spend 1 ki to give myself advantage on it"), additional : "1 ki point" }, "subclassfeature17" : { name : "Intoxicated Frenzy", source : [["UA:AToS", 1]], minlevel : 17, description: desc("I can make 3 extra attacks with Flurry of Blows if each is used on a different target") } } }); AddSubClass("paladin", "oath of redemption-ua", { regExpSearch : /^((?=.*redeemer)|((?=.*redemption)(((?=.*paladin)|((?=.*(exalted|sacred|holy|divine))(?=.*(knight|fighter|warrior|warlord|trooper))))))).*$/i, subname : "Oath of Redemption", subnameShort: "Redemption", source : [["UA:AToS", 1]], features : { "subclassfeature3" : { name : "Armor of Peace", source : [["UA:AToS", 2]], minlevel : 3, description: desc("When not wearing armor or wielding a shield, my AC is 16 + my Dexterity modifier"), armorOptions : [{ regExpSearch : /^(?=.*armou?r)(?=.*peace).*$/i, name : "Armor of Peace", source : [["UA:AToS", 2]], ac : 16, selectNow : true }], spellcastingExtra : ["shield", "sleep", "hold person", "ray of enfeeblement", "counterspell", "hypnotic pattern", "otiluke's resilient sphere", "stoneskin", "hold monster", "wall of force"] }, "subclassfeature3.1" : { name : "Channel Divinity: Emissary of Peace", source : [["UA:AToS", 2]], minlevel : 3, description: desc("As a bonus action, I gain +5 to my next Charisma (Persuasion) check in the next min"), action : [["bonus action", ""]] }, "subclassfeature3.2" : { name : "Channel Divinity: Rebuke the Violent", source : [["UA:AToS", 2]], minlevel : 3, description : desc([ "As a reaction when a hostile within 10 ft damages another in melee, I can rebuke it", "It takes the same damage as it dealt but as radiant damage, with a Wis save to halve it" ]), action : [["reaction", ""]] }, "subclassfeature3.3" : { name : "Warrior of Reconciliation", source : [["UA:AToS", 2]], minlevel : 3, description : desc([ "I can charm a creature when I reduce it to 0 HP with a simple, bludgeoning weapon", "It is peaceful, docile and only does what I command it to, but it can't cause harm", "For 1 min, until I'm incap., or I or allies attack it or have it save; after it is unconscious" ]) }, "subclassfeature7" : { name : "Aura of the Guardian", source : [["UA:AToS", 2]], minlevel : 7, description : desc([ "As a reaction when an ally within 10 ft takes damage, I instead take the damage", "This damage can't be reduced in any way; Other effects might still apply to my ally" ]), action : [["reaction", ""]] }, "subclassfeature15" : { name : "Protective Spirit", source : [["UA:AToS", 2]], minlevel : 15, description: desc("At the end of my turn when I'm below half HP and not incapacitated, I regain HP"), additional : levels.map(function (n) { return n < 15 ? "" : "1d6+" + Math.floor(n/2) + " HP"; }) }, "subclassfeature20" : { name : "Emissary of Redemption", source : [["UA:AToS", 3]], minlevel : 20, description : desc([ "When taking damage from a creature, I take only half and it takes the other half", "This stops working on any that I attack or force to make a save, until I have a long rest" ]), dmgres : ["All from creatures"] } } }); // Add the Monster Slayer subclass to both the normal and Revised Ranger (if it is defined) var UAAToS_rangerSubclassMonsterSlayerUA = AddSubClass("ranger", "monster slayer-ua", { regExpSearch : /^(?=.*monster)(?=.*slayer).*$/i, subname : "Monster Slayer", source : [["UA:AToS", 3]], fullname : "Monster Slayer", features : { "subclassfeature3" : { name : "Slayer's Mysticism", source : [["UA:AToS", 3]], minlevel : 3, description: desc("I get bonus spells known, which do not count against the number of spells I can know"), spellcastingExtra : ["protection from evil and good", "zone of truth", "magic circle", "banishment", "planar binding"], spellcastingExtraApplyNonconform : true }, "subclassfeature3.1" : { name : "Slayer's Eye", source : [["UA:AToS", 3]], minlevel : 3, description : desc([ "As a bonus action, I can study a creature within 120 ft that I can see", "I learn its vulnerabilities, immunities, resistances, and the effects damaging it can have", "My first weapon hit on it each turn does +1d6 damage, until I study another or rest" ]), action : [["bonus action", ""]] }, "subclassfeature7" : { name : "Supernatural Defense", source : [["UA:AToS", 3]], minlevel : 7, description : desc([ "I add 1d6 to saves I make against abilities of the current target of my Slayer's Eye" ]) }, "subclassfeature11" : { name : "Relentless Slayer", source : [["UA:AToS", 3]], minlevel : 11, description : desc([ "As a reaction, I can stop the target of my Slayer's Eye from escaping, if within 30 ft", "If I win a contested Wis check, it wastes it action to teleport/transform/plane shift" ]), action : [["reaction", ""]] }, "subclassfeature15" : { name : "Slayer's Counter", source : [["UA:AToS", 3]], minlevel : 15, description : desc([ "As a reaction when the target of my Slayer's Eye has me make a save, I can attack it", "I can make one weapon attack; If this hits, I automatically succeed on the saving throw" ]), action : [["reaction", ""]] } } }); if (ClassList.rangerua) { ClassList.rangerua.subclasses[1].push(UAAToS_rangerSubclassMonsterSlayerUA); }; ================================================ FILE: WotC material/ua_20170403_Starter-Spells.js ================================================ var iFileName = "ua_20170403_Starter-Spells.js"; RequiredSheetVersion("13.0.8"); // This file adds the content from the Unearthed Arcana: Starter Spells article to MPMB's Character Record Sheet // Define the source SourceList["UA:SS"] = { name : "Unearthed Arcana: Starter Spells", abbreviation : "UA:SS", group : "Unearthed Arcana", url : "https://media.wizards.com/2017/dnd/downloads/UA-Starter-Spells.pdf", date : "2017/04/03" }; /* Adds 17 spells of lower levels to all class' spell lists This code was contributed by SoilentBrad */ SpellsList["cause fear-uass"] = { name : "Cause Fear", classes : ["warlock", "wizard"], source : [["UA:SS", 2]], level : 1, school : "Necro", time : "1 a", range : "60 ft", components : "V,S", duration : "Conc, 1 min", save : "Wis", description : "1 crea save or frightened; crea disadvantage on save if 25 HP or less; no effect on undead/constructs", descriptionFull : "You awaken the sense of mortality in one creature you can see within range. The target must succeed on a Wisdom saving throw or become frightened for the duration. A target with 25 hit points or fewer makes the saving throw with disadvantage. The spell has no effect on constructs or undead." }; SpellsList["ceremony-uass"] = { name : "Ceremony", classes : ["cleric", "paladin"], source : [["UA:SS", 2]], ritual : true, level : 1, school : "Evoc", time : "1 h", range : "Touch", components : "V,S,M\u0192", compMaterial : "25 gp worth of powdered silver", duration : "Instantaneous", description : "Perform religious ceremony on target(s) that are within 10 ft throughout the casting; see book (25gp)", descriptionFull : "You perform one of several religious ceremonies. When you cast the spell, choose one of the following ceremonies, the target of which must be within 10 feet of you throughout the casting." + "\n " + toUni("Atonement") + ": You touch one willing creature whose alignment has changed, and you make a DC 20 Wisdom (Insight) check. On a success, you restore the target to its original alignment." + "\n " + toUni("Bless Water") + ": You touch one vial of water and cause it to become holy water." + "\n " + toUni("Coming of Age") + ": You touch one humanoid old enough to be a young adult. For the next 24 hours, whenever the target makes an ability check, it can roll a d4 and add the number rolled to the ability check. A creature can benefit from this ceremony just once." + "\n " + toUni("Dedication") + ": You touch one humanoid who would willingly convert to your religion or who wishes to be dedicated to your god's service. For the next 24 hours, whenever the target makes a saving throw, it can roll a d4 and add the number rolled to the save. A creature can benefit from this ceremony just once." + "\n " + toUni("Funeral Rite") + ": You bless one corpse within 5 feet of you. For the next 24 hours, the target can't become undead by any means short of a wish spell." + "\n " + toUni("Investiture") + ": You touch one willing humanoid. Choose one 1st-level spell you have prepared and expend a spell slot and any material components as if you were casting that spell. The spell has no effect. Instead, the target can cast this spell once without having to expend a spell slot or use material components. If the target doesn't cast the spell within 1 hour, the invested spell is lost." + "\n " + toUni("Marriage") + ": You touch adult humanoids willing to be bonded together in marriage. For the next 24 hours, each target gains a +2 bonus to AC and saving throws while they are within 30 feet of each other. A creature can benefit from this ceremony just once." }; SpellsList["chaos bolt-uass"] = { name : "Chaos Bolt", classes : ["sorcerer"], source : [["UA:SS", 2]], level : 1, school : "Evoc", time : "1 a", range : "120 ft", components : "V,S", duration : "Instantaneous", description : "Spell atk 2d8+1d6/SL dmg, d8s set dmg type, see B; double on d8s: new atk vs. crea in 30 ft of target", descriptionFull : "You hurl an undulating, warbling mass of chaotic energy at one creature in range. Make a ranged spell attack against the target. On a hit, the target takes 2d8 damage. Choose one of the d8s. The number it rolled determines the type of damage, as shown below." + "\n\n" + toUni("d8") + "\t" + toUni("Damage Type") + "\n 1\tAcid" + "\n 2\tCold" + "\n 3\tFire" + "\n 4\tForce" + "\n 5\tLightning" + "\n 6\tPoison" + "\n 7\tPsychic" + "\n 8\tThunder" + "\n\n " + "If you roll the same number on both d8s, the chaotic energy leaps from the target to a different creature of your choice within 30 feet of it. Make a new attack roll against the new target, and make a new damage roll, which could cause the chaotic energy to leap again." + "\n " + "A creature can be targeted only once by this mass of chaotic energy." + AtHigherLevels + "When you cast this spell using a spell slot of 2nd level or higher, each target takes extra damage of the type rolled. The extra damage equals 1d6 for each slot level above 1st." }; SpellsList["guiding hand-uass"] = { name : "Guiding Hand", classes : ["bard", "cleric", "druid", "wizard"], source : [["UA:SS", 3]], ritual : true, level : 1, school : "Div", time : "1 min", range : "5 ft", components : "V,S", duration : "Conc, 8 h", description : "Tiny incorporeal hand directs me to one major landmark I name that is on the same plane", descriptionFull : "You create a Tiny incorporeal hand of shimmering light in an unoccupied space you can see within range. The hand exists for the duration, but it disappears if you teleport or you travel to a different plane of existence." + "\n " + "When the hand appears, you name one major landmark, such as a city, mountain, castle, or battlefield on the same plane of existence as you. Someone in history must have visited the site and mapped it. If the landmark appears on no map in existence, the spell fails. Otherwise, whenever you move toward the hand, it moves away from you at the same speed you moved, and it moves in the direction of the landmark, always remaining 5 feet away from you." + "\n " + "If you don't move toward the hand, it remains in place until you do and beckons for you to follow once every 1d4 minutes." }; SpellsList["hand of radiance-uass"] = { name : "Hand of Radiance", classes : ["cleric"], source : [["UA:SS", 3]], level : 0, school : "Evoc", time : "1 a", range : "5-ft rad", components : "V,S", duration : "Instantaneous", save : "Con", description : "Any creatures I can see in 5-ft radius save or 1d6 Radiant damage; +1d6 damage at CL 5, 11, and 17", descriptionCantripDie : "Any creatures I can see in 5-ft radius save or `CD`d6 Radiant damage", descriptionFull : "You raise your hand, and burning radiance erupts from it. Each creature of your choice that you can see within 5 feet of you must succeed on a Constitution saving throw or take 1d6 radiant damage." + "\n " + "The spell's damage increases by 1d6 when you reach 5th level (2d6), 11th level (3d6), and 17th level (4d6)." }; SpellsList["healing elixir-uass"] = { name : "Healing Elixir", classes : ["warlock", "wizard"], source : [["UA:SS", 3]], level : 1, school : "Conj", time : "1 min", range : "Self", components : "V,S,M\u0192", compMaterial : "Alchemist's supplies", duration : "24 h", description : "Make vial with alchemist's supplies; heals 2d4+2 HP as an action; if not used, disappears after 24 h", descriptionShorter : "Make vial with alchemist's supplies; 1 a to heal 2d4+2 HP; if not used, disappears after 24 h", descriptionFull : "You create a healing elixir in a simple vial that appears in your hand. The elixir retains its potency for the duration or until it's consumed, at which point the vial vanishes." + "\n " + "As an action, a creature can drink the elixir or administer it to another creature. The drinker regains 2d4 + 2 hit points." }; SpellsList["infestation-uass"] = { name : "Infestation", classes : ["druid", "sorcerer", "warlock", "wizard"], source : [["UA:SS", 3]], level : 0, school : "Conj", time : "1 a", range : "30 ft", components : "V,S,M", compMaterial : "A living flea", duration : "Instantaneous", save : "Con", description : "1 crea save or 1d6 Piercing damage and moved 5 ft in random direction; +1d6 at CL 5, 11, and 17", descriptionCantripDie : "1 crea save or `CD`d6 Piercing damage and moved 5 ft in random direction", descriptionFull : "You cause mites, fleas, and other parasites to appear momentarily on one creature you can see within range. The target must succeed on a Constitution saving throw or take 1d6 piercing damage. If the target takes any of that damage, the target moves 5 feet in a random direction. Roll a d8 for the direction:" + "\n\n" + toUni("d8") + "\t" + toUni("Direction") + "\n 1\tNorth" + "\n 2\tNortheast" + "\n 3\tEast" + "\n 4\tSoutheast" + "\n 5\tSouth" + "\n 6\tSouthwest" + "\n 7\tWest" + "\n 8\tNorthwest" + "\n\n " + "The spell's damage increases by 1d6 when you reach 5th level (2d6), 11th level (3d6), and 17th level (4d6)." }; SpellsList["primal savagery-uass"] = { name : "Primal Savagery", classes : ["druid"], source : [["UA:SS", 3]], level : 0, school : "Trans", time : "1 a", range : "5 ft", components : "S", duration : "Instantaneous", description : "Melee spell attack deals 1d10 Piercing or Slashing dmg (my choice); +1d10 at CL 5, 11, and 17", description : "Melee spell attack deals `CD`d10 Piercing or Slashing dmg (my choice)", descriptionFull : "Your teeth or fingernails lengthen and sharpen. You choose which. Make a melee spell attack against one creature within 5 feet of you. On a hit, the target takes 1d10 piercing or slashing damage (your choice). After you make the attack, your teeth or fingernails return to normal." + "\n " + "The spell's damage increases by 1d10 when you reach 5th level (2d10), 11th level (3d10), and 17th level (4d10)." }; SpellsList["puppet-uass"] = { name : "Puppet", classes : ["bard", "warlock", "wizard"], source : [["UA:SS", 3]], level : 1, school : "Ench", time : "1 a", range : "120 ft", components : "S", duration : "Instantaneous", save : "Con", description : "1 humanoid save or move its speed to where I choose and drop held items, if chosen (charm effect)", descriptionFull : "Your gesture forces one humanoid you can see within range to make a Constitution saving throw. On a failed save, the target must move up to its speed in a direction you choose. In addition, you can cause the target to drop whatever it is holding. This spell has no effect on a humanoid that is immune to being charmed." }; SpellsList["sense emotion-uass"] = { name : "Sense Emotion", classes : ["bard", "warlock", "wizard"], source : [["UA:SS", 4]], level : 1, school : "Div", time : "1 a", range : "30 ft", components : "V,S", duration : "Conc, 10 min", description : "Now and as 1 a for duration, sense emotion of humanoid in range; sense calm if not humanoid/charm", descriptionFull : "You attune your senses to pick up the emotions of others for the duration. When you cast the spell, and as your action on each turn until the spell ends, you can focus your senses on one humanoid you can see within 30 feet of you. You instantly learn the target's prevailing emotion, whether it's love, anger, pain, fear, calm, or something else. If the target isn't actually humanoid or it is immune to being charmed, you sense that it is calm." }; SpellsList["snare-uass"] = { name : "Snare", classes : ["druid", "ranger", "wizard"], source : [["UA:SS", 4]], level : 1, school : "Abjur", time : "1 min", range : "Touch", components : "V,S,M\u2020", compMaterial : "30 feet of cord or rope, which is consumed by the spell", duration : "Dispel/trigger", save : "Dex", description : "5-ft rad magical trap; Int (Inv) to see; save or restrained upside down 3 ft in the air; save/rnd at dis", descriptionFull : "While you cast this spell, you use the cord or rope to create a circle with a 5-foot radius on a flat surface within your reach. When you finish casting, the cord or rope disappears to become a magical trap." + "\n " + "The trap is nearly invisible and requires a successful Intelligence (Investigation) check against your spell save DC to be found." + "\n " + "The trap triggers when a Small creature or larger moves into the area protected by the spell. The triggering creature must succeed on a Dexterity saving throw or fall prone and be hoisted into the air until it hangs upside down 3 feet above the protected surface, where it is restrained." + "\n " + "The restrained creature can make a Dexterity saving throw with disadvantage at the end of each of its turns and ends the restrained effect on a success. Alternatively, another creature that can reach the restrained creature can use an action to make an Intelligence (Arcana) check against your spell save DC. On a success, the restrained effect also ends." }; SpellsList["sudden awakening-uass"] = { name : "Sudden Awakening", classes : ["bard", "ranger", "sorcerer", "wizard"], source : [["UA:SS", 4]], level : 1, school : "Ench", time : "1 bns", range : "10 ft", components : "V", duration : "Instantaneous", description : "Any creatures within range awaken and can then stand up from prone without expending movement", descriptionFull : "Each sleeping creature you choose within range awakens, and then each prone creature within range can stand up without expending any movement." }; SpellsList["unearthly chorus-uass"] = { name : "Unearthly Chorus", classes : ["bard"], source : [["UA:SS", 4]], level : 1, school : "Illus", time : "1 a", range : "30-ft rad", components : "V", duration : "Conc, 10 min", save : "Cha", description : "Use bns a to make 1 crea in range save or be friendly for 1 h; I adv on Cha (Performance) checks", descriptionFull : "Music of a style you choose fills the air around you in a 30-foot radius. The music spreads around corners and can be heard from up to 100 feet away. The music moves with you, centered on you for the duration." + "\n " + "Until the spell ends, you make Charisma (Performance) checks with advantage. In addition, you can use a bonus action on each of your turns to beguile one creature you choose within 30 feet of you that can see you and hear the music. The creature must make a Charisma saving throw. If you or your companions are attacking it, the creature automatically succeeds on the saving throw. On a failure, the creature becomes friendly to you for as long as it can hear the music and for 1 hour thereafter. You make Charisma (Deception) checks and Charisma (Persuasion) checks against creatures made friendly by this spell with advantage." }; SpellsList["virtue-uass"] = { name : "Virtue", classes : ["cleric"], source : [["UA:SS", 5]], level : 0, school : "Abjur", time : "1 a", range : "Touch", components : "V,S", duration : "1 rnd", description : "1 creature that has at least 1 HP gets 1d4 + spellcasting ability modifier in temporary hit points", descriptionFull : "You touch one creature, imbuing it with vitality. If the target has at least 1 hit point, it gains a number of temporary hit points equal to 1d4 + your spellcasting ability modifier. The temporary hit points are lost when the spell ends." }; SpellsList["wild cunning-uass"] = { name : "Wild Cunning", classes : ["druid", "ranger"], source : [["UA:SS", 5]], ritual : true, level : 1, school : "Trans", time : "1 a", range : "120 ft", components : "V,S", duration : "Instantaneous", description : "Call spirits of nature to aid me with finding food, drink, tracks, shelter, or camping; see book", descriptionFull : "You call out to the spirits of nature to aid you. When you cast this spell, choose one of the following effects:" + "\n \u2022 " + "If there are any tracks on the ground within range, you know where they are, and you make Wisdom (Survival) checks to follow these tracks with advantage for 1 hour or until you cast this spell again." + "\n \u2022 " + "If there is edible forage within range, you know it and where to find it." + "\n \u2022 " + "If there is clean drinking water within range, you know it and where to find it." + "\n \u2022 " + "If there is suitable shelter for you and your companions with range, you know it and where to find." + "\n \u2022 " + "Send the spirits to bring back wood for a fire and to set up a campsite in the area using your supplies. The spirits build the fire in a circle of stones, put up tents, unroll bedrolls, and put out any rations and water for consumption." + "\n \u2022 " + "Have the spirits instantly break down a campsite, which includes putting out a fire, taking down tents, packing up bags, and burying any rubbish." }; SpellsList["zephyr strike-uass"] = { // clarification: https://twitter.com/JeremyECrawford/status/849302527069884416 name : "Zephyr Strike", classes : ["ranger"], source : [["UA:SS", 5]], level : 1, school : "Trans", time : "1 bns", range : "Self", components : "V", duration : "Conc, 1 min", description : "Moving doesn't provoke opportunity atks; next wea atk has adv and gives +30 ft speed for that turn", descriptionFull : "You move like the wind. For the duration, your movement doesn't provoke opportunity attacks." + "\n " + "In addition, the first time you make a weapon attack on your turn before the spell ends, you make the attack roll with advantage, and your speed increases by 30 feet until the end of that turn." }; // Weapons (attack cantrips) WeaponsList["hand of radiance-uass"] = { regExpSearch : /^(?=.*hand)(?=.*radiance).*$/i, name : "Hand of Radiance", source : [["UA:SS", 3]], list : "spell", ability : 5, type : "Cantrip", damage : ["C", 6, "radiant"], range : "5-ft radius", description : "Con save, success - no damage; Only chosen creatures I can see are affected", abilitytodamage : false, dc : true }; WeaponsList["infestation-uass"] = { regExpSearch : /infestation/i, name : "Infestation", source : [["UA:SS", 3]], list : "spell", ability : 6, type : "Cantrip", damage : ["C", 6, "piercing"], range : "30 ft", description : "Con save, success - no damage, fail - target also moved 5 ft in random direction", abilitytodamage : false, dc : true }; WeaponsList["primal savagery-uass"] = { regExpSearch : /^(?=.*primal)(?=.*savagery).*$/i, name : "Primal Savagery", source : [["UA:SS", 3]], list : "spell", ability : 5, type : "Cantrip", damage : ["C", 10, "piercing"], range : "Melee (5 ft)", description : "Does either Piercing or Slashing damage (my choice)", abilitytodamage : false }; // dupl_start if (!SourceList.X) { SpellsList["toll the dead"] = { name : "Toll the Dead", classes : ["cleric", "warlock", "wizard"], source : [["X", 169], ["UA:SS", 4]], level : 0, school : "Necro", time : "1 a", range : "60 ft", components : "V,S", duration : "Instantaneous", save : "Wis", description : "1 crea save or 1d12 Necrotic damage (only 1d8 if at full HP); +1d12/1d8 at CL 5, 11, and 17", descriptionCantripDie : "1 crea save or `CD`d12 Necrotic damage (only `CD`d8 if at full hp)", descriptionFull : "You point at one creature you can see within range, and the sound of a dolorous bell fills the air around it for a moment. The target must succeed on a Wisdom saving throw or take 1d8 necrotic damage. If the target is missing any of its hit points, it instead takes 1d12 necrotic damage." + "\n " + "The spell's damage increases by one die when you reach 5th level (2d8 or 2d12), 11th level (3d8 or 3d12), and 17th level (4d8 or 4d12)." }; WeaponsList["toll the dead"] = { regExpSearch : /^(?=.*toll)(?=.*the)(?=.*dead).*$/i, name : "Toll the Dead", source : [["X", 169], ["UA:SS", 4]], list : "spell", ability : 5, type : "Cantrip", damage : ["C", 12, "necrotic"], range : "60 ft", description : "Wis save, success - no damage; If target is at full HP, d8 instead of d12 damage", abilitytodamage : false, dc : true }; } // dupl_end ================================================ FILE: WotC material/ua_20170417_Feats-for-Skills.js ================================================ var iFileName = "ua_20170417_Feats-for-Skills.js"; RequiredSheetVersion("14.0.5-beta"); // This file adds the content from the Unearthed Arcana: Feats for Skills article to MPMB's Character Record Sheet // Define the source SourceList["UA:FS"] = { name : "Unearthed Arcana: Feats for Skills", abbreviation : "UA:FS", group : "Unearthed Arcana", url : "https://media.wizards.com/2017/dnd/downloads/UA-SkillFeats.pdf", date : "2017/04/17" }; // Add 18 feats, corresponding with the 18 skills FeatsList["acrobat-ua"] = { name : "Acrobat", source : [["UA:FS", 1]], descriptionFull : "You become more nimble, gaining the following benefits:\n \u2022 Increase your Dexterity score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Acrobatics skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 As a bonus action, you can make a DC 15 Dexterity (Acrobatics) check. If you succeed, difficult terrain doesn't cost you extra movement until the end of the current turn.", description : "I gain expertise with Acrobatics, or proficiency if not so already. As a bonus action, I can make a DC 15 Dexterity (Acrobatics) check to have difficult terrain not cost me extra movement for this turn. [+1 Dexterity]", scores : [0, 1, 0, 0, 0, 0], skills : [["Acrobatics", "increment"]], action : [["bonus action", ""]] }; FeatsList["animal handler-ua"] = { name : "Animal Handler", source : [["UA:FS", 1]], descriptionFull : "You master the techniques needed to train and handle animals. You gain the following benefits:\n \u2022 Increase your Wisdom score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Animal Handling skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 You can use a bonus action on your turn to command one friendly beast within 60 feet of you that can hear you and that isn't currently following the command of someone else. You decide now what action the beast will take and where it will move during its next turn, or you issue a general command that lasts for 1 minute, such as to guard a particular area.", description : "I gain expertise with Animal Handling, or proficiency if not so already. As a bonus action, I can command a friendly beast not under another's command within 60 ft. If it hears me, I decide its next turn or give a general command lasting for 1 minute. [+1 Wisdom]", scores : [0, 0, 0, 0, 1, 0], skills : [["Animal Handling", "increment"]], action : [["bonus action", ""]] }; FeatsList["arcanist-ua"] = { name : "Arcanist", source : [["UA:FS", 1]], descriptionFull : "You study the arcane arts, gaining the following benefits:\n \u2022 Increase your Intelligence score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Arcana skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 You learn the Prestidigitation and Detect Magic spells. You can cast detect magic once without expending a spell slot, and you regain the ability to do so when you finish a long rest.", description : "I gain expertise with Arcana, or proficiency if not so already. I learn the Prestidigitation cantrip. I can cast Detect Magic without using a spell slot. Once I do so, I can't do it again until I finish a long rest. [+1 Intelligence]", scores : [0, 0, 0, 1, 0, 0], skills : [["Arcana", "increment"]], spellcastingBonus : [{ name : "Arcanist", spellcastingAbility : 4, spells : ["prestidigitation"], selection : ["prestidigitation"], }, { name : "Arcanist (1x long rest)", spells : ["detect magic"], selection : ["detect magic"], firstCol : "oncelr" }] }; FeatsList["brawny-ua"] = { name : "Brawny", source : [["UA:FS", 1]], descriptionFull : "You become stronger, gaining the following benefits:\n \u2022 Increase your Strength score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Athletics skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 You count as if you were one size larger for the purpose of determining your carrying capacity.", description : "I gain expertise with Athletics, or proficiency if not so already. I count as one size larger when determining my carrying capacity and the weight I can push, drag, or lift. [+1 Strength]", scores : [1, 0, 0, 0, 0, 0], skills : [["Athletics", "increment"]], carryingCapacity : 2 }; FeatsList["diplomat-ua"] = { name : "Diplomat", source : [["UA:FS", 2]], descriptionFull : "You master the arts of diplomacy, gaining the following benefits:\n \u2022 Increase your Charisma score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Persuasion skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 If you spend 1 minute talking to someone who can understand what you say, you can make a Charisma (Persuasion) check contested by the creature's Wisdom (Insight) check. If you or your companions are fighting the creature, your check automatically fails. If your check succeeds, the target is charmed by you as long as it remains within 60 feet of you and for 1 minute thereafter.", description : "I gain expertise with Persuasion, or proficiency if not so already. With a one minute long conversation outside of combat, I can make a Persuasion vs. its Insight. If successful, it is charmed by me as long as it remains within 60 ft and 1 minute after that [+1 Charisma]", scores : [0, 0, 0, 0, 0, 1], skills : [["Persuasion", "increment"]] }; FeatsList["empathic-ua"] = { name : "Empathic", source : [["UA:FS", 2]], descriptionFull : "You possess keen insight into how other people think and feel. You gain the following benefits:\n \u2022 Increase your Wisdom score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Insight skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 You can use your action to try to get uncanny insight about one humanoid you can see within 30 feet of you. Make a Wisdom (Insight) check contested by the target's Charisma (Deception) check. If your check succeeds, you have advantage on attack rolls and ability checks against the target until the end of your next turn.", description : "I gain expertise with Insight, or proficiency if not so already. As an action, a humanoid within 30 ft I can see must make its Deception vs. my Insight or I gain advantage on attacks and ability checks against it until the end of my next turn. [+1 Wisdom]", scores : [0, 0, 0, 0, 1, 0], skills : [["Insight", "increment"]] }; FeatsList["historian-ua"] = { name : "Historian", source : [["UA:FS", 2]], descriptionFull : "Your study of history rewards you with the following benefits:\n \u2022 Increase your Intelligence score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the History skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 When you take the Help action to aid another creature's ability check, you can make a DC 15 Intelligence (History) check. On a success, that creature's check gains a bonus equal to your proficiency bonus, as you share pertinent advice and historical examples. To receive this bonus, the creature must be able to understand what you're saying.", description : "I gain expertise with History, or proficiency if not so already. When I use the Help action to help a creature that can understand me with an ability check, I can make a DC 15 Int (History) check to give a bonus equal to my proficiency bonus. [+1 Intelligence]", scores : [0, 0, 0, 1, 0, 0], skills : [["History", "increment"]], action : [["action", ""]] }; FeatsList["investigator-ua"] = { name : "Investigator", source : [["UA:FS", 2]], descriptionFull : "You have an eye for detail and can pick out the smallest clues. You gain the following benefits:\n \u2022 Increase your Intelligence score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Investigation skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 You can take the Search action as a bonus action.", description : "I gain expertise with Investigation, or proficiency if not so already. As a bonus action, I can take the Search action. [+1 Intelligence]", scores : [0, 0, 0, 1, 0, 0], skills : [["Investigation", "increment"]], action : [["bonus action", " (Search)"]] }; FeatsList["medic-ua"] = { name : "Medic", source : [["UA:FS", 2]], descriptionFull : "You master the physician's arts, gaining the following benefits:\n \u2022 Increase your Wisdom score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Medicine skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 During a short rest, you can clean and bind the wounds of up to six willing beasts and humanoids. Make a DC 15 Wisdom (Medicine) check for each creature. On a success, if a creature spends a Hit Die during this rest, that creature can forgo the roll and instead regain the maximum number of hit points the die can restore. A creature can do so only once per rest, regardless of how many Hit Dice it spends.", description : "I gain expertise with Medicine, or proficiency if not so already. During a short rest, I can attend to the wounds of up to 6 creatures. With a DC 15 Wis (Medicine) check for each creature, that target gets the maximum result on one of its HD that it uses. [+1 Wisdom]", scores : [0, 0, 0, 0, 1, 0], skills : [["Medicine", "increment"]] }; FeatsList["menacing-ua"] = { name : "Menacing", source : [["UA:FS", 2]], descriptionFull : "You become fearsome to others, gaining the following benefits:\n \u2022 Increase your Charisma score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Intimidation skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 When you take the Attack action on your turn, you can replace one attack with an attempt to demoralize one humanoid you can see within 30 feet of you that can see and hear you. Make a Charisma (Intimidation) check contested by the target's Wisdom (Insight) check. If your check succeeds, the target is frightened until the end of your next turn. If your check fails, the target can't be frightened by you in this way for 1 hour.", description : "I gain expertise with Intimidation, or proficiency if not so already. Instead of 1 attack in my Attack action, a humanoid within 30 ft I can see and that can see and hear me must make its Insight vs. my Intimidation or be frightened until end of my next turn. [+1 Cha]", scores : [0, 0, 0, 0, 0, 1], skills : [["Intimidation", "increment"]] }; FeatsList["naturalist-ua"] = { name : "Naturalist", source : [["UA:FS", 3]], descriptionFull : "Your extensive study of nature rewards you with the following benefits:\n \u2022 Increase your Intelligence score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Nature skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 You learn the Druidcraft and Detect Poison and Disease spells. You can cast Detect Poison and Disease once without expending a spell slot, and you regain the ability to do so when you finish a long rest.", description : "I gain expertise with Nature, or proficiency if not so already. I learn the Druidcraft cantrip. I can cast Detect Poison and Disease without using a spell slot. Once I do so, I can't do it again until I finish a long rest. [+1 Intelligence]", scores : [0, 0, 0, 1, 0, 0], skills : [["Nature", "increment"]], spellcastingBonus : [{ name : "Naturalist", spellcastingAbility : 4, spells : ["druidcraft"], selection : ["druidcraft"], }, { name : "Naturalist (1x long rest)", spells : ["detect poison and disease"], selection : ["detect poison and disease"], firstCol : "oncelr" }] }; FeatsList["perceptive-ua"] = { name : "Perceptive", source : [["UA:FS", 3]], descriptionFull : "You hone your senses until they become razor sharp. You gain the following benefits:\n \u2022 Increase your Wisdom score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Perception skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 Being in a lightly obscured area doesn't impose disadvantage on your Wisdom (Perception) checks if you can both see and hear.", description : "I gain expertise with Perception, or proficiency if not so already. I don't have disadvantage on my Perception checks from being in a lightly obscured area (dim light), provided that I can still both see and hear. [+1 Wisdom]", scores : [0, 0, 0, 0, 1, 0], skills : [["Perception", "increment"]], vision : [["No disadv. on Perception in lightly obscured or dim light", 0]] }; FeatsList["performer-ua"] = { name : "Performer", source : [["UA:FS", 3]], descriptionFull : "You master performance so that you can command any stage. You gain the following benefits:\n \u2022 Increase your Charisma score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Performance skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 While performing, you can try to distract one humanoid you can see who can see and hear you. Make a Charisma (Performance) check contested by the humanoid's Wisdom (Insight) check. If your check succeeds, you grab the humanoid's attention enough that it makes Wisdom (Perception) and Intelligence (Investigation) checks with disadvantage until you stop performing.", description : "I gain expertise with Performance, or proficiency if not so already. While performing, I can distract one humanoid. It must make its Insight vs. my Performance or have disadv. on its Perception and Investigation checks until I stop performing. [+1 Charisma]", scores : [0, 0, 0, 0, 0, 1], skills : [["Performance", "increment"]] }; FeatsList["quick-fingered-ua"] = { name : "Quick-Fingered", source : [["UA:FS", 3]], descriptionFull : "Your nimble fingers and agility let you perform sleight of hand. You gain the following benefits:\n \u2022 Increase your Dexterity score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Sleight of Hand skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 As a bonus action, you can make a Dexterity (Sleight of Hand) check to plant something on someone else, conceal an object on a creature, lift a purse, or take something from a pocket.", description : "I gain expertise with Sleight of Hand, or proficiency if not so already. As a bonus action, I can make a Dexterity (Sleight of Hand) check to plant something on someone else, conceal an object on a creature, lift a purse, or take something from a pocket. [+1 Dexterity]", scores : [0, 1, 0, 0, 0, 0], skills : [["Sleight of Hand", "increment"]], action : [["bonus action", ""]] }; FeatsList["silver-tongued-ua"] = { name : "Silver-Tongued", source : [["UA:FS", 3]], descriptionFull : "You develop your conversational skill to better deceive others. You gain the following benefits:\n \u2022 Increase your Charisma score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Deception skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 When you take the Attack action on your turn, you can replace one attack with an attempt to deceive one humanoid you can see within 30 feet of you that can see and hear you. Make a Charisma (Deception) check contested by the target's Wisdom (Insight) check. If your check succeeds, your movement doesn't provoke opportunity attacks from the target and your attack rolls against it have advantage; both benefits last until the end of your next turn or until you use this ability on a different target. If your check fails, the target can't be deceived by you in this way for 1 hour.", description : "I gain expertise with Deception, or proficiency if not so already. Instead of 1 attack in my Attack action, a humanoid within 30 ft makes its Insight vs. my Deception or until end of my next turn, I gain adv. on attacks and don't provoke its opportunity attacks. [+1 Cha]", scores : [0, 0, 0, 0, 0, 1], skills : [["Deception", "increment"]] }; FeatsList["stealthy-ua"] = { name : "Stealthy", source : [["UA:FS", 4]], descriptionFull : "You know how best to hide. You gain the following benefits:\n \u2022 Increase your Dexterity score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Stealth skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 If you are hidden, you can move up to 10 feet in the open without revealing yourself if you end the move in a position where you're not clearly visible.", description : "I gain expertise with Stealth, or proficiency if not so already. When I'm hidden, I can move 10 ft to another position without revealing myself, provided that I won't be clearly visible in this new position either. [+1 Dexterity]", scores : [0, 1, 0, 0, 0, 0], skills : [["Stealth", "increment"]] }; FeatsList["survivalist-ua"] = { name : "Survivalist", source : [["UA:FS", 4]], descriptionFull : "You master wilderness lore, gaining the following benefits:\n \u2022 Increase your Wisdom score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Survival skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 You learn the Alarm spell. You can cast it once without expending a spell slot, and you regain the ability to do so when you finish a long rest.", description : "I gain expertise with Survival, or proficiency if not so already. I can cast Alarm without using a spell slot. Once I do so, I can't do it again until I finish a long rest. [+1 Wisdom]", scores : [0, 0, 0, 0, 1, 0], skills : [["Survival", "increment"]], spellcastingBonus : [{ name : "1x long rest", spellcastingAbility : 5, spells : ["alarm"], selection : ["alarm"], firstCol : "oncelr" }] }; FeatsList["theologian-ua"] = { name : "Theologian", source : [["UA:FS", 4]], descriptionFull : "Your extensive study of religion rewards you with the following benefits:\n \u2022 Increase your Intelligence score by 1, to a maximum of 20.\n \u2022 You gain proficiency in the Religion skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 You learn the Thaumaturgy and Detect Evil and Good spells. You can cast Detect Evil and Good once without expending a spell slot, and you regain the ability to do so when you finish a long rest.", description : "I gain expertise with Religion, or proficiency if not so already. I learn the Thaumaturgy cantrip. I can cast Detect Evil and Good without using a spell slot. Once I do so, I can't do it again until I finish a long rest. [+1 Intelligence]", scores : [0, 0, 0, 1, 0, 0], skills : [["Religion", "increment"]], spellcastingBonus : [{ name : "Theologian", spellcastingAbility : 4, spells : ["thaumaturgy"], selection : ["thaumaturgy"], }, { name : "Theologian (1x long rest)", spells : ["detect evil and good"], selection : ["detect evil and good"], firstCol : "oncelr" }] }; ================================================ FILE: WotC material/ua_20170424_Feats-for-Races.js ================================================ var iFileName = "ua_20170424_Feats-for-Races.js"; RequiredSheetVersion("13.1.14"); // This file adds the content from the Unearthed Arcana: Feats for Races article to MPMB's Character Record Sheet // Define the source SourceList["UA:FR"] = { name : "Unearthed Arcana: Feats for Races", abbreviation : "UA:FR", group : "Unearthed Arcana", url : "https://media.wizards.com/2017/dnd/downloads/RJSJC2017_04UASkillFeats_24v10.pdf", date : "2017/04/24" }; // Adds 46 feats (23 + 13 variants of Grudge-Bearer), all of which have a racial prerequisite FeatsList["barbed hide-ua"] = { name : "Barbed Hide", source : [["UA:FR", 1]], prerequisite : "Being a Tiefling", prereqeval : function(v) { return CurrentRace.known.indexOf('tiefling') !== -1; }, descriptionFull : "One of your ancestors was a barbed devil or other spiky fiend. Barbs protrude from your head. You gain the following benefits:\n \u2022 Increase your Charisma score by 1, to a maximum of 20.\n \u2022 As a bonus action, you can cause small barbs to protrude all over your body or cause them to retract. At the start of each of your turns while the barbs are out, you deal 1d6 piercing damage to any creature grappling you or any creature grappled by you.\n \u2022 You gain proficiency in the Intimidation skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.", description : "I gain expertise with Intimidation, or proficiency if not so already. As a bonus action, I can protrude/retract small barbs from my skin. With them out, at the start of each of my turns I deal 1d6 piercing damage to any I'm grappling or are grappling me. [+1 Cha]", scores : [0, 0, 0, 0, 0, 1], skills : [["Intimidation", "increment"]], action : [["bonus action", ""]] }; FeatsList["bountiful luck-ua"] = { name : "Bountiful Luck", source : [["UA:FR", 1]], prerequisite : "Being a Halfling", prereqeval : function(v) { return CurrentRace.known.indexOf('halfling') !== -1; }, descriptionFull : "Whenever an ally you can see within 30 feet of you rolls a 1 on the d20 for an attack roll, an ability check, or a saving throw, you can use your reaction to let the ally reroll the die. The ally must use the new roll.", description : "Whenever an ally I can see within 30 feet of me rolls a 1 on the d20 for an attack roll, an ability check, or a saving throw, I can use my reaction to let the ally reroll the die. The ally must use the new roll.", action : [["reaction", ""]] }; FeatsList["critter friend-ua"] = { name : "Critter Friend", source : [["UA:FR", 1]], prerequisite : "Being a Forest Gnome", prereqeval : function(v) { return CurrentRace.known.indexOf('forest gnome') !== -1; }, descriptionFull : "Your friendship with animals mystically deepens. You gain the following benefits:\n \u2022 You gain proficiency in the Animal Handling skill. If you are already proficient in the skill, you add double your proficiency bonus to checks you make with it.\n \u2022 You learn the Speak with Animals spell and can cast it at will, without expending a spell slot. You also learn the Animal Friendship spell, and you can cast it once with this feat, without expending a spell slot. You regain the ability to cast it in this way when you finish a long rest. Intelligence is your spellcasting ability for these spells.", description : "I gain expertise with Animal Handling, or proficiency if I didn't have that already. I can cast Speak With Animals and Animal Friendship without using a spell slot. I can cast each of these spells like this once per long rest. Intelligence is my spellcasting ability for these.", skills : [["Animal Handling", "increment"]], spellcastingBonus : [{ name : "Once per long rest", spellcastingAbility : 4, spells : ["speak with animals"], selection : ["speak with animals"], firstCol : 'oncelr' }, { name : "Once per long rest", spells : ["animal friendship"], selection : ["animal friendship"], firstCol : 'oncelr' }] }; FeatsList["dragon fear-ua"] = { name : "Dragon Fear", source : [["UA:FR", 2]], prerequisite : "Being a Dragonborn", prereqeval : function(v) { return CurrentRace.known.indexOf('dragonborn') !== -1; }, descriptionFull : "When angered, you radiate menace. You gain the following benefits:\n \u2022 Increase your Strength or Charisma score by 1, to a maximum of 20.\n \u2022 Instead of exhaling destructive energy, you can roar and expend a use of your breath weapon to force each creature of your choice within 30 feet of you to make a Wisdom saving throw (DC 8 + your proficiency bonus + your Charisma modifier). A target automatically succeeds if it can't hear or see you. On a failed save, a target becomes frightened for 1 minute. If the frightened target takes any damage, it can repeat the saving throw, ending the effect on itself on a success.", calculate : "event.value = 'I can expend a Breath Weapon use to roar instead. Each creature of my choice within 30 ft that can see and hear me must make a DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Cha Mod'))) + ' Wis save (8 + Prof Bonus + Cha mod) or be frightened for 1 min. It can repeat the save whenever it takes damage. [+1 Str or Cha]';", scorestxt : "+1 Strength or Charisma", action : [['action', 'Breath Weapon or Dragon Fear', 'Breath Weapon']] }; FeatsList["dragon hide-ua"] = { name : "Dragon Hide", source : [["UA:FR", 2]], prerequisite : "Being a Dragonborn", prereqeval : function(v) { return CurrentRace.known.indexOf('dragonborn') !== -1; }, descriptionFull : "You inherited the might and majesty of your dragon ancestors. You gain the following benefits:\n \u2022 Increase your Strength or Charisma score by 1, to a maximum of 20.\n \u2022 You grow retractable claws from the tips of your fingers. Extending or retracting the claws requires no action. The claws are natural weapons, which you can use to make unarmed strikes. If you hit with them, you deal slashing damage equal to 1d4 + your Strength modifier, instead of the bludgeoning damage normal for an unarmed strike.\n \u2022 Your scales harden; you gain a +1 bonus to AC while you aren't wearing armor.", description : "I gain retractable claws that I can retract or extend, requiring no action. While extended, my unarmed strikes deal 1d4 slashing damage. My scales harden, giving me a +1 bonus to AC when I'm not wearing armor. [+1 Strength or Charisma]", scorestxt : "+1 Strength or Charisma", weaponOptions : [{ baseWeapon : "unarmed strike", regExpSearch : /^(?=.*(retractable|dragon))(?=.*claw).*$/i, name : "Retractable Claws", source : [["UA:FR", 2]], damage : [1, 4, "slashing"], selectNow : true }], extraAC : { mod : 1, text : "I gain a +1 bonus to AC while I'm not wearing armor.", stopeval : function (v) { return v.wearingArmor; } } }; FeatsList["dragon wings-ua"] = { name : "Dragon Wings", source : [["UA:FR", 2]], prerequisite : "Being a Dragonborn", prereqeval : function(v) { return CurrentRace.known.indexOf('dragonborn') !== -1; }, descriptionFull : "You sprout draconic wings. With your wings, you have a flying speed of 20 feet if you aren't wearing heavy armor and aren't exceeding your carrying capacity.", description : "I sprout draconic wings. With my wings, I have a flying speed of 20 feet if I am not wearing heavy armor and I am not exceeding my carrying capacity or encumbered.", speed : { fly : { spd : 20, enc : 0 } } }; FeatsList["drow high magic-ua"] = { name : "Drow High Magic", source : [["UA:FR", 2]], prerequisite : "Being a Drow (Dark Elf)", prereqeval : function(v) { return CurrentRace.known.indexOf('dark elf') !== -1; }, descriptionFull : "You learn more of the spells typical for your people. You learn Detect Magic and can cast it at will, without expending a spell slot. You also learn Levitate and Dispel Magic, each of which you can cast once without expending a spell slot. You regain the ability to cast the spell in this way when you finish a long rest. Charisma is your spellcasting ability for these spells.", description : "I can cast Detect Magic at will, without expending a spell slot. I can also cast Levitate and Dispel Magic without expending a spell slot, but each only once per long rest. Charisma is my spellcasting ability for these three spells.", spellcastingBonus : [{ name : "At will", spellcastingAbility : 6, spells : ["detect magic"], selection : ["detect magic"], firstCol : 'atwill' }, { name : "Once per long rest", spells : ["levitate"], selection : ["levitate"], firstCol : 'oncelr' }, { name : "Once per long rest", spells : ["dispel magic"], selection : ["dispel magic"], firstCol : 'oncelr' }] }; FeatsList["dwarf resilience-ua"] = { name : "Dwarf Resilience", source : [["UA:FR", 2]], prerequisite : "Being a Dwarf", prereqeval : function(v) { return CurrentRace.known.indexOf('dwarf') !== -1; }, descriptionFull : "You have the blood of dwarf heroes flowing through your veins. You gain the following benefits:\n \u2022 Increase your Constitution score by 1, to a maximum of 20.\n \u2022 Whenever you take the Dodge action in combat, you can spend one Hit Die to heal yourself. Roll the die, add your Constitution modifier, and regain a number of hit points equal to the total (minimum of 1).", description : "Whenever I take the Dodge action in combat, I can spend one Hit Die to heal myself. I roll the die, add my Constitution modifier, and regain a number of hit points equal to the total (minimum of 1). [+1 Constitution]", scores : [0, 0, 1, 0, 0, 0] }; FeatsList["elven accuracy-ua"] = { name : "Elven Accuracy", source : [["UA:FR", 2]], prerequisite : "Being an Elf or a Half-Elf", prereqeval : function(v) { return (/elf|eladrin|avariel|grugach|shadar-kai/i).test(CurrentRace.known); }, descriptionFull : "You have uncanny aim. You gain the following benefits:\n \u2022 Increase your Dexterity score by 1, to a maximum of 20.\n \u2022 Whenever you have advantage on an attack roll, you can reroll one of the dice once.", description : "Whenever I have advantage on an attack roll, I can reroll one of the dice once. [+1 Dexterity]", scores : [0, 1, 0, 0, 0, 0] }; FeatsList["everybody-ua's friend"] = { name : "Everybody's Friend", source : [["UA:FR", 2]], prerequisite : "Being a Half-Elf", prereqeval : function(v) { return (/^(?=.*half)(?=.*elf).*$/i).test(CurrentRace.known); }, descriptionFull : "You develop your magnetic personality to ease your way through the world. You gain the following benefits:\n \u2022 You gain proficiency in the Deception and Persuasion skills. If you're already proficient in either skill, your proficiency bonus is doubled for any check you make with that skill.", description : "I gain expertise with Deception and Persuasion, or proficiency with them if I didn't have that already. [+1 Charisma]", scores : [0, 0, 0, 0, 0, 1], skills : [["Deception", "increment"], ["Persuasion", "increment"]] }; FeatsList["fade away-ua"] = { name : "Fade Away", source : [["UA:FR", 2]], prerequisite : "Being a Gnome", prereqeval : function(v) { return CurrentRace.known.indexOf('gnome') !== -1; }, descriptionFull : "You can draw on your magical heritage to escape danger. You gain the following benefits:\n \u2022 Increase your Intelligence score by 1, to a maximum of 20.\n \u2022 When you take damage, you can use a reaction to magically become invisible until the end of your next turn or until you attack, deal damage, or force someone to make a saving throw. Once you use this ability, you can't do so again until you finish a short or long rest.", description : "As a reaction when I take damage, I can magically become invisible until the end of my next turn or until I attack, deal damage, or force someone to make a saving throw. Once I do this, I can't do so again until I finish a short rest. [+1 Intelligence]", scores : [0, 0, 0, 1, 0, 0], action : [["reaction", ""]], usages : 1, recovery : "short rest" }; FeatsList["fey teleportation-ua"] = { name : "Fey Teleportation", source : [["UA:FR", 3]], prerequisite : "Being a High Elf", prereqeval : function(v) { return CurrentRace.known.indexOf('high elf') !== -1; }, descriptionFull : "Drawing on your fey ancestry, you have learned how to teleport. You gain the following benefits:\n \u2022 Increase your Intelligence score by 1, to a maximum of 20.\n \u2022 You learn the Misty Step spell and can cast it once without expending a spell slot. You regain the ability to cast it in this way when you finish a short or long rest. Intelligence is your spellcasting ability for this spell.", description : "I can cast Misty Step without using a spell slot. I can do so once per short rest. Intelligence is my spellcasting ability for this spell. [+1 Intelligence]", scores : [0, 0, 0, 1, 0, 0], spellcastingBonus : [{ name : "Once per short rest", spellcastingAbility : 4, spells : ["misty step"], selection : ["misty step"], firstCol : 'oncesr' }], usages : 1, recovery : "short rest" }; FeatsList["flames of phlegethos-ua"] = { name : "Flames of Phlegethos", source : [["UA:FR", 3]], prerequisite : "Being a Tiefling", prereqeval : function(v) { return CurrentRace.known.indexOf('tiefling') !== -1; }, descriptionFull : "You learn to call on hellfire to serve your commands. You gain the following benefits:\n \u2022 Increase your Intelligence or Charisma score by 1, to a maximum of 20.\n \u2022 When you roll fire damage for a spell you cast, you can reroll any roll of 1 on the fire damage dice, but you must use the new roll, even if it is another 1.\n \u2022 Whenever you cast a spell that deals fire damage, you can cause flames to wreathe you until the end of your next turn. The flames don't harm you or your possessions, and they shed bright light out to 30 feet and dim light for an additional 30 feet. While the flames are present, any creature within 5 feet of you that hits you with a melee attack takes 1d4 fire damage.", description : "When I cast a fire damage spell, I can reroll any 1 on fire damage dice. I can then sheathe myself in flame until my next turn ends. These shed bright light in 30 ft, dim light in 30 ft and cause any within 5 ft that hit me in melee take 1d4 fire damage. [+1 Int or Cha]", scorestxt : "+1 Intelligence or Charisma" }; FeatsList["grudge-bearer-ua"] = { name : "Grudge-Bearer", source : [["UA:FR", 3]], prerequisite : "Being a Dwarf", prereqeval : function(v) { return CurrentRace.known.indexOf('dwarf') !== -1; }, descriptionFull : "You have a deep hatred for a particular kind of creature. Choose your foes, a type of creature to bear the burden of your wrath: aberrations, beasts, celestials, constructs, dragons, elementals, fey, fiends, giants, monstrosities, oozes, plants, or undead. Alternatively, you can choose two races of humanoid (such as gnolls and orcs). You gain the following benefits:\n \u2022 Increase your Strength, Constitution, or Wisdom score by 1, to a maximum of 20.\n \u2022 During the first round of any combat against your chosen foes, your attack rolls against any of them have advantage.\n \u2022 When any of your chosen foes makes an opportunity attack against you, it makes the attack roll with disadvantage.\n \u2022 Whenever you make an Intelligence (Arcana, History, Nature, or Religion) check to recall information about your chosen foes, you add double your proficiency bonus to the check, even if you're not normally proficient.", description : "My hatred for a creature type gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana, History, Nature, and Religion checks. [+1 Str, Con, or Wis]", scorestxt : "+1 Strength, Constitution, or Wisdom", choices : ["2 Humanoids", "Aberrations", "Beasts", "Celestials", "Constructs", "Dragons", "Elementals", "Fey", "Fiends", "Giants", "Monstrosities", "Oozes", "Plants", "Undead"], "2 humanoids" : { description : "My hatred for 2 humanoid races gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana/History/Nature/Religion checks. [+1 Str, Con, or Wis]" }, aberrations : { description : "My hatred for aberrations gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana, History, Nature, and Religion checks. [+1 Str, Con, or Wis]" }, beasts : { description : "My hatred for beasts gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana, History, Nature, and Religion checks. [+1 Str, Con, or Wis]" }, celestials : { description : "My hatred for celestials gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana, History, Nature, and Religion checks. [+1 Str, Con, or Wis]" }, constructs : { description : "My hatred for constructs gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana, History, Nature, and Religion checks. [+1 Str, Con, or Wis]" }, dragons : { description : "My hatred for dragons gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana, History, Nature, and Religion checks. [+1 Str, Con, or Wis]" }, elementals : { description : "My hatred for elementals gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana, History, Nature, and Religion checks. [+1 Str, Con, or Wis]" }, fey : { description : "My hatred for fey gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana, History, Nature, and Religion checks. [+1 Str, Con, or Wis]" }, fiends : { description : "My hatred for fiends gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana, History, Nature, and Religion checks. [+1 Str, Con, or Wis]" }, giants : { description : "My hatred for giants gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana, History, Nature, and Religion checks. [+1 Str, Con, or Wis]" }, monstrosities : { description : "My hatred for monstrosities gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana, History, Nature, and Religion checks. [+1 Str, Con, or Wis]" }, oozes : { description : "My hatred for oozes gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana, History, Nature, and Religion checks. [+1 Str, Con, or Wis]" }, plants : { description : "My hatred for plants gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana, History, Nature, and Religion checks. [+1 Str, Con, or Wis]" }, undead : { description : "My hatred for undead gives me these benefits against them: Adv. on attacks in the first round of combat. Their opportunity attacks have disadv. against me. I add twice my Prof Bonus on related Arcana, History, Nature, and Religion checks. [+1 Str, Con, or Wis]" } }; FeatsList["human determination-ua"] = { name : "Human Determination", source : [["UA:FR", 3]], prerequisite : "Being a Human", prereqeval : function(v) { return CurrentRace.known.indexOf('human') !== -1; }, descriptionFull : "You are filled with a determination that can draw the unreachable within your reach. You gain the following benefits:\n \u2022 Increase one ability score of your choice by 1, to a maximum of 20.\n \u2022 When you make an attack roll, an ability check, or a saving throw, you can do so with advantage. Once you use this ability, you can't use it again until you finish a short or long rest.", description : "When I make an attack roll, an ability check, or a saving throw, I can do so with advantage. Once I use this ability, I can't do so again until I finish a short rest.\n[+1 to one ability score]", scorestxt : "+1 to one ability score of your choice", usages : 1, recovery : "short rest", additional : "attack/check/save" }; FeatsList["infernal constitution-ua"] = { name : "Infernal Constitution", source : [["UA:FR", 3]], prerequisite : "Being a Tiefling", prereqeval : function(v) { return CurrentRace.known.indexOf('tiefling') !== -1; }, descriptionFull : "Fiendish blood runs strong in you. You gain the following benefits:\n \u2022 Increase your Constitution score by 1, to a maximum of 20.\n \u2022 You have resistance to cold and poison damage.\n \u2022 You have advantage on saving throws against being poisoned.", description : "I have resistance to cold and poison damage and I have advantage on saving throws against being poisoned.\n[+1 Constitution]", scores : [0, 0, 1, 0, 0, 0], dmgres : ["Cold", "Poison"], savetxt : { adv_vs : ["poison"] } }; FeatsList["orcish aggression-ua"] = { name : "Orcish Aggression", source : [["UA:FR", 3]], prerequisite : "Being a Half-Orc", prereqeval : function(v) { return (/^(?=.*half)(?=.*orc).*$/i).test(CurrentRace.known); }, descriptionFull : "As a bonus action, you can move up to your speed toward an enemy of your choice that you can see or hear. You must end this move closer to the enemy than you started.", description : "As a bonus action, I can move up to my speed toward an enemy of my choice that I can see or hear. I must end this move closer to the enemy than I started.", action : [["bonus action", ""]] }; FeatsList["orcish fury-ua"] = { name : "Orcish Fury", source : [["UA:FR", 4]], prerequisite : "Being a Half-Orc", prereqeval : function(v) { return (/^(?=.*half)(?=.*orc).*$/i).test(CurrentRace.known); }, descriptionFull : "Your fury burns tirelessly. You gain the following benefits:\n \u2022 Increase your Strength or Constitution score by 1, to a maximum of 20.\n \u2022 When you hit with an attack made with a simple or martial weapon, you can roll one of the weapon's damage dice an additional time and add it as extra damage of the weapon's damage type. Once you use this ability, you can't use it again until you finish a short or long rest.\n \u2022 Immediately after you use your Relentless Endurance trait, you can use your reaction to make one weapon attack.", description : "Once per short rest, I can roll an extra damage die for an attack with a simple or martial weapon. In addition, Immediately after I use my Relentless Endurance trait, I can use my reaction to make one weapon attack. [+1 Strength or Constitution]", scorestxt : "+1 Strength or Constitution", action : [["reaction", " (after Relentless Endurance)"]], usages : 1, recovery : "short rest", additional : "extra damage" }; FeatsList["prodigy-ua"] = { name : "Prodigy", source : [["UA:FR", 4]], prerequisite : "Being a Half-Elf or a Human", prereqeval : function(v) { return (/human|^(?=.*half)(?=.*elf).*$/i).test(CurrentRace.known); }, descriptionFull : "You have a knack for learning new things. You gain the following benefits:\n \u2022 Increase one ability score of your choice by 1, to a maximum of 20.\n \u2022 You gain one skill proficiency of your choice, one tool proficiency of your choice, and fluency in one language of your choice.", description : "I gain one skill proficiency of my choice, one tool proficiency of my choice, fluency in one language of my choice, and +1 to one ability score of my choice. [+1 to one ability score]", scorestxt : "+1 to one ability score of your choice", skillstxt : "Choose any one skill", languageProfs : [1], toolProfs : [["Any tool", 1]] }; FeatsList["second chance-ua"] = { name : "Second Chance", source : [["UA:FR", 4]], prerequisite : "Being a Halfling", prereqeval : function(v) { return CurrentRace.known.indexOf('halfling') !== -1; }, descriptionFull : "You have a knack for learning new things. You gain the following benefits:\n \u2022 Increase your Dexterity, Constitution, or Charisma score by 1, to a maximum of 20.\n \u2022 When a creature you can see hits you with an attack roll, you can use your reaction to force that creature to reroll. Once you use this ability, you can't do so again until you finish a short or long rest.", description : "When a creature I can see hits me with an attack roll, I can use my reaction to force that creature to reroll. Once I use this ability, I can't do so again until I finish a short rest.\n[+1 Dexterity, Constitution, or Charisma]", scorestxt : "+1 Dexterity, Constitution, or Charisma", action : [["reaction", ""]], usages : 1, recovery : "short rest" }; FeatsList["squat nimbleness-ua"] = { name : "Squat Nimbleness", source : [["UA:FR", 4]], prerequisite : "Being a Dwarf, Gnome, or Halfling", prereqeval : function(v) { return (/dwarf|gnome|halfling/i).test(CurrentRace.known); }, descriptionFull : "You are uncommonly nimble for your race. You gain the following benefits:\n \u2022 Increase your Strength or Dexterity score by 1, to a maximum of 20.\n \u2022 Increase your walking speed by 5 feet.\n \u2022 You gain proficiency in the Acrobatics or Athletics skill. If you're already proficient in the skill, your proficiency bonus is doubled for any check you make with it.", description : "My walking speed increases by 5 ft. I gain proficiency in the Acrobatics or Athletics skill. If I'm already proficient in the chosen skill, I gain expertise with it instead.\n[+1 Strength or Dexterity]", scorestxt : "+1 Strength or Dexterity", skillstxt : "Proficiency with Acrobatics or Athletics; or gain Expertise if already proficient", speed : { walk : {spd : "+5", enc : "+5" } } }; FeatsList["wonder maker-ua"] = { name : "Wonder Maker", source : [["UA:FR", 4]], prerequisite : "Being a Rock Gnome", prereqeval : function(v) { return CurrentRace.known.indexOf('rock gnome') !== -1; }, descriptionFull : "You master the tinker techniques of your people. You gain the following benefits:\n \u2022 When you make a check using your proficiency with tinker's tools, you add double your proficiency bonus to the check.\n \u2022 When you make a device with your Tinker trait, you have the following additional options for what you make:\n \u2022 " + toUni("Alarm") + ". This device senses when a creature moves to within 15 feet of it without speaking aloud a password chosen when you create it. One round after a creature moves into range, the alarm makes a shrill ringing that lasts for 1 minute and can be heard from up to 300 feet away.\n \u2022 " + toUni("Calculator") + ". This device makes doing sums easy.\n \u2022 " + toUni("Lifter") + ". This device can be used as a block and tackle, allowing its user to hoist five times the weight the user can normally lift.\n \u2022 " + toUni("Timekeeper") + ". This pocket watch keeps accurate time.\n \u2022 " + toUni("Weather Sensor") + ". When used as an action, this device predicts weather conditions in a 1-mile radius over the next 4 hours, showing one symbol (clouds, sun/moon, rain, or snow) for each hour.", description : "I gain expertise with Tinker's Tools. I get additional Tinker options: Alarm (audible to 300 ft for 1 min), Calculator, Lifter (as block and tackle that multiplies max lift weight by 5), Timekeeper (pocket watch), Weather Sensor (predict for 1-mile, 4 hours) [+1 Dex or Int]", scorestxt : "+1 Dexterity or Intelligence", eval : function () { if ((/tinker.*tool/i).test(What('Too Text'))) { Checkbox('Too Exp', true); }; }, removeeval : function () { if ((/tinker.*tool/i).test(What('Too Text'))) { Checkbox('Too Exp', false); }; } }; FeatsList["wood elf magic-ua"] = { name : "Wood Elf Magic", source : [["UA:FR", 4]], prerequisite : "Being a Wood Elf", prereqeval : function(v) { return CurrentRace.known.indexOf('wood elf') !== -1; }, descriptionFull : "You learn the magic of the primeval woods. You learn one druid cantrip of your choice. You also learn Longstrider and Pass Without Trace, each of which you can cast once without expending a spell slot. You regain the ability to cast the spell in this way when you finish a long rest. Wisdom is your spellcasting ability for these spells.", description : "I learn a druid cantrip. In addition, I can cast Longstrider and Pass Without Trace, without expending a spell slot, but each only once per long rest. Wisdom is my spellcasting ability for these three spells.", spellcastingBonus : [{ name : "Druid Cantrip", spellcastingAbility : 5, "class" : "druid", level : [0, 0], firstCol : 'atwill' }, { name : "Once per long rest", spells : ["longstrider"], selection : ["longstrider"], firstCol : 'oncelr' }, { name : "Once per long rest", spells : ["pass without trace"], selection : ["pass without trace"], firstCol : 'oncelr' }] }; ================================================ FILE: WotC material/ua_20170501_Revised-Subclasses.js ================================================ var iFileName = "ua_20170501_Revised-Subclasses.js"; RequiredSheetVersion("13.0.8"); // This file adds the content from the Unearthed Arcana: Revised Subclasses article to MPMB's Character Record Sheet // Define the source SourceList["UA:RS"] = { name : "Unearthed Arcana: Revised Subclasses", abbreviation : "UA:RS", group : "Unearthed Arcana", url : "https://media.wizards.com/2017/dnd/downloads/UA-RevisedSubclasses.pdf", date : "2017/05/01" }; // Add 5 subclasses from previous Unearthed Arcana articles: 1 for the Barbarian, 1 for the Bard, 1 for the Fighter, 1 for the Monk, and 1 for the Sorcerer AddSubClass("barbarian", "ancestral guardian2-ua", { regExpSearch : /^(?=.*ancestral)(?=.*guardian).*$/i, subname : "Path of the Ancestral Guardian", subnameShort: "Ancestral Guardian", fullname : "Ancestral Guardian", source : [["UA:RS", 1]], features : { "subclassfeature3" : { name : "Ancestral Protectors", source : [["UA:RS", 1]], minlevel : 3, description : desc([ "While raging, the first creature I hit with an attack on my turn becomes distracted", "While distracted, it has disadvantage on attack rolls that don't target me", "In addition, everybody but me counts as having resistance to all of the target's attacks", "This lasts until the start of my next turn, or until my rage ends" ]) }, "subclassfeature6" : { name : "Spirit Shield", source : [["UA:RS", 1]], minlevel : 6, description : desc([ "As a reaction while raging when an ally I see within 30 ft is damaged, I can reduce it", "My guardian spirits reduce the damage by an amount equal to the roll of the dice" ]), additional : levels.map(function (n) { return n < 6 ? "" : (n < 10 ? 2 : n < 14 ? 3 : 4) + "d8 damage reduced"; }), action : [["reaction", ""]] }, "subclassfeature10" : { name : "Consult the Spirits", source : [["UA:RS", 1]], minlevel : 10, description: desc("Through consulting my ancestral spirits, I can cast Clairvoyance without a spell slot"), spellcastingBonus : [{ name : "Consult the Spirits", spells : ["clairvoyance"], selection : ["clairvoyance"], firstCol : 'oncesr' }], usages : 1, recovery : "short rest" }, "subclassfeature14" : { name : "Vengeful Ancestors", source : [["UA:RS", 1]], minlevel : 14, description: desc("Whenever I use Spirit Shield to reduce damage, the attacker takes the reduced damage") } } }); AddSubClass("bard", "college of swords2-ua", { regExpSearch : /^(?=.*(college|bard|minstrel|troubadour|jongleur))(?=.*\bswords?\b).*$/i, subname : "College of Swords", subnameShort: "Swords", source : [["UA:RS", 1]], features : { "subclassfeature3" : { name : "Bonus Proficiencies", source : [["UA:RS", 2]], minlevel : 3, description : desc([ "I gain proficiency with medium armor and scimitars", "I can use a simple or martial melee weapon that I'm proficient with as spellcasting focus" ]), armorProfs : [false, true, false, false], weaponProfs : [false, false, ["scimitar"]] }, "subclassfeature3.1" : { name : "Fighting Style", source : [["UA:RS", 2]], minlevel : 3, description: desc('Select a Fighting Style for the college of swords using the "Choose Feature" button above'), choices : ["Dueling", "Two-Weapon Fighting"], "dueling" : FightingStyles.dueling, "two-weapon fighting" : FightingStyles.two_weapon }, "subclassfeature3.2" : { name : "Blade Flourish", source : [["UA:RS", 2]], minlevel : 3, description : desc([ "As an action, I can make one melee weapon attack and use one flourish option below", "In addition, I gain +10 ft to my walking speed until the end of the current turn", " - Defensive Flourish [one Bardic Inspiration die]", " I add the result of the die to my AC until the start of my next turn", " - Slashing Flourish [one Bardic Inspiration die]", " If the attack hits, I can use a die to deal damage to creatures next to the target", " All creatures within 5 ft of the target take the result of the die in damage", " - Mobile Flourish [one Bardic Inspiration die]", " If the attack hits, I can use a die to push the target back 5 + the die result in feet", " After this, I can use my reaction to move my speed to a space next to the target" ]), action : [["action", ""]] }, "subclassfeature6" : { name : "Cunning Flourish", source : [["UA:RS", 2]], minlevel : 6, description: desc("When I take the Blade Flourish action, I can attack twice, but still only use one flourish") }, "subclassfeature14" : { name : "Master Flourish", source : [["UA:RS", 2]], minlevel : 14, description: desc("When I do a Blade Flourish, I can use a d6 instead of expending a Bardic Inspiration die") } } }); AddSubClass("fighter", "arcane archer2-ua", { regExpSearch : /^(?=.*arcane)(?=.*archer).*$/i, subname : "Arcane Archer", source : [["UA:RS", 2]], fullname : "Arcane Archer", abilitySave : 4, features : { "subclassfeature3" : { name : "Magic Arrow", source : [["UA:RS", 3]], minlevel : 3, description : desc([ "Whenever I fire a nonmagical arrow from a short- or longbow I can make it magical", "This magical arrow gives a +1 bonus to the attack and damage rolls for the one attack" ]), calcChanges : { atkCalc : [ function (fields, v, output) { if ((/longbow|shortbow/i).test(v.baseWeaponName) && !v.theWea.isMagicWeapon) output.magic += 1; }, "Any longbow or shortbow that doesn't include a magic bonus in its name gets a +1 magical bonus to damage and to hit as any arrows fired with it are automatically made magical." ] } }, "subclassfeature3.1" : { name : "Arcane Shot", source : [["UA:RS", 3]], minlevel : 3, description : desc([ "I can unleash magical effects when I fire a magic arrow from a short- or longbow", "I can use this once per turn as part of the Attack action, after an attack hits", "I know a number of Arcane Shot Options and learn additional at certain levels", 'Use the "Choose Feature" button above to add Arcane Shots Options to the third page' ]), usages : 2, recovery : "short rest", additional : levels.map( function(n) { return n < 3 ? "" : (n < 7 ? 2 : n < 10 ? 3 : n < 15 ? 4 : n < 18 ? 5 : 6) + " options known"; }), extraname : "Arcane Shot Option", extrachoices : ["Banishing Arrow [Abjuration]", "Brute Bane Arrow [Necromancy]", "Bursting Arrow [Evocation]", "Grasping Arrow [Conjuration]", "Mind-Scrambling Arrow [Enchantment]", "Piercing Arrow [Transmutation]", "Seeking Arrow [Divination]", "Shadow Arrow [Illusion]"], extraTimes : levels.map(function (n) { return n < 3 ? 0 : n < 7 ? 2 : n < 10 ? 3 : n < 15 ? 4 : n < 18 ? 5 : 6; }), "banishing arrow [abjuration]" : { name : "Banishing Arrow [Abjuration]", source : [["UA:RS", 3]], description : desc([ "The target makes a Cha save or is banished to the Feywild until the end of its next turn", "While banished, its speed is 0 and is incapacitated; It re-appearing in the same spot", "When I reach 18th level, this Arcane Shot Option also does an extra 2d6 force damage" ]), additional : levels.map( function(n) { return n < 18 ? "" : "+2d6 force damage"; }) }, "brute bane arrow [necromancy]" : { name : "Brute Bane Arrow [Necromancy]", source : [["UA:RS", 3]], description : desc([ "The target takes extra necrotic damage and must make a Constitution save", "If failed, the damage of the target's attacks is halved until the start of my next turn" ]), additional : levels.map( function(n) { return n < 3 ? "" : "+" + (n < 18 ? 2 : 4) + "d6 necrotic damage"; }) }, "bursting arrow [evocation]" : { name : "Bursting Arrow [Evocation]", source : [["UA:RS", 3]], description: desc("The target, in addition to the shot, and all creatures within 10 ft of it take damage"), additional : levels.map( function(n) { return n < 3 ? "" : "+" + (n < 18 ? 2 : 4) + "d6 force damage"; }) }, "grasping arrow [conjuration]" : { name : "Grasping Arrow [Conjuration]", source : [["UA:RS", 3]], description : desc([ "The target takes extra poison damage as brambles wrap around it for 1 minute", "The brambles give it -10 ft speed and do it slashing damage every round it moves", "These can be removed by it or another as an action with Strength (Athletics) vs. my DC" ]), additional : levels.map( function(n) { return n < 3 ? "" : (n < 18 ? 2 : 4) + "d6 poison/slash. damage"; }) }, "mind-scrambling arrow [enchantment]" : { name : "Mind-Scrambling Arrow [Enchantment]", source : [["UA:RS", 4]], description : desc([ "The target takes extra psychic damage and must succeed on a Wisdom save", "If failed, it can't attack or harm one of my allies within 30 ft of it that I choose", "This lasts until the start of my next turn or until the chosen ally harms the target" ]), additional : levels.map( function(n) { return n < 3 ? "" : "+" + (n < 18 ? 2 : 4) + "d6 damage"; }) }, "piercing arrow [transmutation]" : { name : "Piercing Arrow [Transmutation]", source : [["UA:RS", 4]], description : desc([ "With this I don't roll for the attack, but shoot the arrow in a 30-ft long, 1-ft wide line", "It passes through objects, ignoring cover, but all creatures in the area take damage", "The damage is the same as a normal hit from my attack, plus extra piercing damage", "A creature can make a Dexterity save to reduce the damage by half" ]), additional : levels.map( function(n) { return n < 3 ? "" : "+" + (n < 18 ? 1 : 2) + "d6 piercing damage"; }) }, "seeking arrow [divination]" : { name : "Seeking Arrow [Divination]", source : [["UA:RS", 4]], description : desc([ "With this I don't roll for the attack, but I choose a target I have seen in the last minute", "The seeking arrow moves around corners, obstacles, and ignores cover to hit the target", "It is hit if it is within the weapon's range and there is a path for the arrow to get to it", "The target takes the full damage of the attack plus extra force damage", "It can make a Dexterity save to reduce the damage by half; If failed, I know its location" ]), additional : levels.map( function(n) { return n < 3 ? "" : "+" + (n < 18 ? 1 : 2) + "d6 force damage"; }) }, "shadow arrow [illusion]" : { name : "Shadow Arrow [Illusion]", source : [["UA:RS", 4]], description : desc([ "The target takes extra psychic damage and must succeed on a Wisdom save", "If failed, the target can't see anything beyond 5 ft until the end of my next turn" ]), additional : levels.map( function(n) { return n < 3 ? "" : "+" + (n < 18 ? 2 : 4) + "d6 psychic damage"; }) } }, "subclassfeature3.2" : { name : "Arcane Archer's Lore", source : [["UA:RS", 3]], minlevel : 3, description: desc("I gain proficiency with either the Arcana or Nature skill"), skillstxt : "Choose one from: Arcana or Nature" }, "subclassfeature7" : { name : "Curving Shot", source : [["UA:RS", 3]], minlevel : 7, description : desc([ "When I miss with a magic arrow, I can use a bonus action to redirect the attack", "I reroll the attack against a different target within 60 ft of the original target" ]), action : [["bonus action", ""]] }, "subclassfeature15" : { name : "Ever-Ready Shot", source : [["UA:RS", 3]], minlevel : 15, description: desc("I regain one use of Arcane Shot if I have no more remaining when I roll initiative") } } }); AddSubClass("monk", "way of the kensei2-ua", { regExpSearch : /kensei/i, subname : "Way of the Kensei", subnameShort: "Kensei", source : [["UA:RS", 4]], features : { "subclassfeature3" : { name : "Path of the Kensei", source : [["UA:RS", 4]], minlevel : 3, description : desc([ "Some weapons, that don't have the heavy or special property, are kensei weapons for me", "At least one ranged and one melee weapon, more at higher levels (longbow does qualify)", "With these: proficient, count as a monk weapons, special bonuses while holding them:", " - If I do an unarmed strike during an Attack action, +2 AC until my next turn starts", " - As a bonus action, ranged kensei weapon attacks deal +1d4 damage in current turn" ]), action : [["bonus action", " (with ranged)"]], additional : levels.map( function(n) { return n < 3 ? "" : (n < 6 ? 2 : n < 11 ? 3 : n < 17 ? 4 : 5) + " kensei weapons"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.monk && classes.known.monk.level > 2 && !v.isSpell && !v.theWea.monkweapon && (/kensei/i).test(v.WeaponTextName) && !v.theWea.special && (!(/heavy|special/i).test(fields.Description) || v.baseWeaponName === 'longbow')) { v.theWea.monkweapon = true; v.theWea.kenseiweapon = true; if (v.isRangedWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'As bonus action with Attack action, +1d4 damage'; }; fields.Proficiency = true; }; }, "If I include the word 'Kensei' in the name of a weapon that doesn't have the Heavy or Special attribute, or that is a longbow, that weapon gains the same benefits as any other 'Monk Weapon'.\nIn addition, with ranged 'Kensei Weapons', I can take a bonus action to have that hit, and any other hit after that as part of the same action, do +1d4 damage." ] } }, "ki-empowered strikes" : { name : "One with the Blade", source : [["UA:RS", 5]], minlevel : 6, description: desc("My unarmed strikes and kensei weapon attacks count as magical"), calcChanges : { atkAdd : [ function (fields, v) { if (!v.isSpell && !v.thisWeapon[1] && !v.theWea.isMagicWeapon && !(/counts as( a)? magical/i).test(fields.Description) && (v.baseWeaponName === "unarmed strike" || v.theWea.kenseiweapon)) { fields.Description += (fields.Description ? '; ' : '') + 'Counts as magical'; }; }, "My unarmed strikes and any Kensei Weapons count as magical for overcoming resistances and immunities." ] }, "precise strike" : { name : "Precise Strike", extraname : "Way of the Kensei 6", source : [["UA:RS", 5]], description: desc("Once per turn when I hit with a kensei weapon, I can do a martial arts die extra damage"), additional : "1 ki point" }, "sharpen the blade" : { name : "Sharpen the Blade", extraname : "Way of the Kensei 11", source : [["UA:RS", 5]], description : desc([ "As a bonus action, I can grant my kensei weapon a bonus to attack and damage rolls", "This bonus is equal to the number of ki points I spend; It lasts for 1 minute" ]), additional : "1 to 3 ki points", action : [["bonus action", ""]] }, autoSelectExtrachoices : [{ extrachoice : "precise strike" }, { extrachoice : "sharpen the blade", minlevel : 11 }] }, "subclassfeature17" : { name : "Unerring Accuracy", source : [["UA:RS", 5]], minlevel : 17, description: desc("Once per turn, if I miss a monk weapon attack on my turn, I can reroll the attack roll") } } }); AddSubClass("sorcerer", "favoured soul-uars", { regExpSearch : /^(?=.*favou?red)(?=.*soul).*$/i, subname : "Favored Soul", source : [["UA:RS", 5]], fullname : "Favored Soul", spellcastingList : { "class" : ["cleric", "sorcerer"] }, features : { "subclassfeature1" : { name : "Divine Magic", source : [["UA:RS", 5]], minlevel : 1, description : desc([ "When I select my 1st level or higher spells, I can also pick spells from the cleric spell list", "These cleric spells count as sorcerer spells for me", "I also learn Cure Wounds, which doesn't count against my number of spells known" ]), spellcastingBonus : [{ name : "Divine Magic", spells : ["cure wounds"], selection : ["cure wounds"] }] }, "subclassfeature1.2" : { name : "Favored by the Gods", source : [["UA:RS", 5]], minlevel : 1, description: desc("If I fail a saving throw or miss with an attack roll, I can add 2d4 to the total"), recovery : "short rest", usages : 1 }, "subclassfeature6" : { name : "Empowered Healing", source : [["UA:RS", 5]], minlevel : 6, additional: "1 sorcery point", description : desc([ "When I roll dice for healing with one of my sorcerer spells, I can reroll them once", "By spending 1 sorcery point, I can reroll any number of those dice for that spell" ]) }, "subclassfeature14" : { name : "Angelic Form", source : [["UA:RS", 5]], minlevel : 14, description : desc([ 'Choose an otherworldly quality using the "Choose Feature" button above', "As a bonus action, I can manifest a pair of spectral wings that give me 30 ft fly speed", "These wings last until I become incapacitated or I dismiss them as a bonus action" ]), choices : ["Beautiful", "Youthful", "Kind", "Imposing"], "beautiful" : { name : "Angelic Form: Beautiful", description : desc([ "My appearance takes on an otherworldly quality of beauty", "As a bonus action, I can manifest a pair of spectral wings that give me 30 ft fly speed", "These wings last until I become incapacitated or I dismiss them as a bonus action" ]) }, "youthful" : { name : "Angelic Form: Youthful", description : desc([ "My appearance takes on an otherworldly quality of youthfulness", "As a bonus action, I can manifest a pair of spectral wings that give me 30 ft fly speed", "These wings last until I become incapacitated or I dismiss them as a bonus action" ]) }, "kind" : { name : "Angelic Form: Kind", description : desc([ "My appearance takes on an otherworldly quality of kindness", "As a bonus action, I can manifest a pair of spectral wings that give me 30 ft fly speed", "These wings last until I become incapacitated or I dismiss them as a bonus action" ]) }, "imposing" : { name : "Angelic Form: Imposing", description : desc([ "My appearance takes on an otherworldly quality of imposingness", "As a bonus action, I can manifest a pair of spectral wings that give me 30 ft fly speed", "These wings last until I become incapacitated or I dismiss them as a bonus action" ]) }, action : [["bonus action", " Wings"]], speed : { fly : { spd : 30, enc : 20 } } }, "subclassfeature18" : { name : "Unearthly Recovery", source : [["UA:RS", 6]], minlevel : 18, description : desc([ "As a bonus action when I have less than half of my max HP remaining, I can heal myself", "I regain a number of HP equal to half my hit point maximum" ]), action : [["bonus action", ""]], recovery : "long rest", usages : 1 } } }); ================================================ FILE: WotC material/ua_20170605_Revised-Class-Options.js ================================================ var iFileName = "ua_20170605_Revised-Class-Options.js"; RequiredSheetVersion("14.0.1-beta"); // This file adds the content from the Unearthed Arcana: Revised Class Options article to MPMB's Character Record Sheet // Define the source SourceList["UA:RCO"] = { name : "Unearthed Arcana: Revised Class Options", abbreviation : "UA:RCO", group : "Unearthed Arcana", url : "https://media.wizards.com/2017/dnd/downloads/June5UA_RevisedClassOptv1.pdf", date : "2017/06/05" }; // Adds 4 revised subclasses from previous Unearthed Arcana articles: 1 for the Druid, 1 for the Fighter, 1 for the Paladin, and 1 for the Warlock AddSubClass("druid", "circle of the shepherd2-ua", { regExpSearch : /^(?=.*(druid|shaman))(?=.*shepherd).*$/i, subname : "Circle of the Shepherd", subnameShort: "Shepherd", source : [["UA:RCO", 1]], features : { "subclassfeature2" : { name : "Speech of the Woods", source : [["UA:RCO", 1]], minlevel : 2, description : desc([ "I can talk with beasts, they understand me and I them, to the limit of their intelligence", "This doesn't automatically make me friends with all beasts; Additionally, I learn Sylvan" ]), languageProfs : ["Sylvan"] }, "subclassfeature2.1" : { name : "Spirit Totem", source : [["UA:RCO", 1]], minlevel : 2, description : desc([ "As a bonus action, I can summon, or move, a spirit to a point I can see within 60 ft", "The spirit is a Bear, Hawk, or Unicorn (see below), which has a 30-ft radius aura", "It is incorporeal, immobile, doesn't counts as a creature or object, and persists for 1 min", "\u2022 Bear: my allies in the area and I instantly gain 5 + my druid level in temp HP", " While in the aura, my allies and I gain advantage on Strength checks and saves", "\u2022 Hawk: As a reaction, I can grant advantage on an attack vs. a target in the aura", "\u2022 Unicorn: my allies and I gain advantage on ability checks to detect targets in the aura", " If I cast a healing spell with a spell slot, allies in the aura heal my druid level in HP" ]), usages : 1, recovery : "short rest", action : [["bonus action", ""]] }, "subclassfeature6" : { name : "Mighty Summoner", source : [["UA:RCO", 2]], minlevel : 6, description: desc("Beasts or Fey I summon with spells get +2 HP per HD and their attacks count as magical"), calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { switch (spellKey) { case "conjure animals" : case "conjure fey" : spellObj.description += "; each +2 HP/HD, magical natural attacks"; return true; case "conjure woodland beings" : spellObj.description = spellObj.description.replace(/fey.*/, "fey; obeys commands if its align. agrees; breaks free if break conc.; +2 HP/HD, magic atks"); return true; } }, "When I use a spell that restores hit points, it restores an additional 2 + the level of the spell slot (or spell slot equivalent) used to cast the spell." ] } }, "subclassfeature10" : { name : "Guardian Spirit", source : [["UA:RCO", 2]], minlevel : 10, description: desc("When a Beast or Fey that I summoned ends its turn in my Spirit Totem aura, it heals"), additional : levels.map(function (n) { if (n < 10) return ""; return "heals " + Math.floor(n / 2) + " HP"; }) }, "subclassfeature14" : { name : "Faithful Summons", source : [["UA:RCO", 2]], minlevel : 14, description : desc([ "When I am reduced to 0 HP or incapacitated against my will, I can cast Conjure Animals", "This is done as if using a 9th-level spell slot to summon 4 beast of my choice up to CR 2", "They appear within 20 ft of me, last 1 hour, and protect me from harm and attack foes" ]), usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Faithful Summons", spells : ["conjure animals"], selection : ["conjure animals"], firstCol : "oncelr" }], spellChanges : { "conjure animals" : { nameShort : "Conjure Animals (level 9)", range : "20 ft", duration : "1 h", description : "Summon 4 CR 2 beasts; protect me from harm and attack foes", changes : "Using my Faithful Summons class feature when I'm reduced to 0 HP, I can cast Conjure Animals as if using a 9th-level spell slot. This then summons 4 beast of my choice up to CR 2 within 20 ft of me without needing concentration." } } } } }); AddSubClass("fighter", "cavalier2-ua", { regExpSearch : /cavalier/i, subname : "Cavalier", source : [["UA:RCO", 2]], fullname : "Cavalier", abilitySave : 1, features : { "subclassfeature3" : { name : "Bonus Proficiency", source : [["UA:RCO", 2]], minlevel : 3, description : desc([ "I gain proficiency with Animal Handling, History, Insight, Performance, or Persuasion", "Alternatively, I learn one language of my choice" ]), choices : ["Language proficiency", "Skill proficiency: Animal Handling, History, Insight, Performance, or Persuasion"], "language proficiency" : { name : "Bonus Proficiency", description: desc("I learn one language of my choice"), languageProfs : [1] }, "skill proficiency: animal handling, history, insight, performance, or persuasion" : { name : "Bonus Proficiency", description: desc("I gain proficiency with Animal Handling, History, Insight, Performance, or Persuasion"), skillstxt : "Choose one from: Animal Handling, History, Insight, Performance, or Persuasion" } }, "subclassfeature3.1" : { name : "Born in the Saddle", source : [["UA:RCO", 2]], minlevel : 3, description : desc([ "I have advantage on saves to avoid falling off my mount, and land on my feet if I fail", "Mounting or dismounting a creature costs me only 5 ft of movement instead of half" ]), savetxt : { adv_vs : ["falling off my mount"] } }, "subclassfeature3.2" : { name : "Combat Superiority", source : [["UA:RCO", 2]], minlevel : 3, description : desc([ "I gain a number of superiority dice that I can use to fuel special maneuvers (see below)", "I can use only one maneuver per attack; I regain all superiority dice after a short rest", " \u2022 Control Mount (Maneuver, UA:RCO 3)", " Use after rolling Wis (Animal Handling) to influence an animal I or an ally is riding", " I add the superiority die to the result", " \u2022 Precision Attack (Maneuver, UA:RCO 3)", " Use after rolling to hit; I add the superiority die to my attack roll", " \u2022 Trip Attack (Maneuver, UA:RCO 3) [DC 8 + Prof Bonus + Str mod]", " Use after hitting a creature; I add the superiority die to the attack's damage", " If target is Large or smaller, it must make a Strength save or be knocked prone", " \u2022 Warding Maneuver (Maneuver, UA:RCO 3) [only while wielding weapon or shield]", " As a reaction when I or a creature within 5 ft is hit, I add the superiority die to AC", " If the attack still hits, the target counts as having resistance against the attack" ]), additional : ["", "", "d8", "d8", "d8", "d8", "d8", "d8", "d8", "d10", "d10", "d10", "d10", "d10", "d10", "d10", "d10", "d12", "d12", "d12"], usages : [0, 0, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6], recovery : "short rest", action : ['reaction', 'Warding Maneuver'] }, "subclassfeature7" : { name : "Ferocious Charger", source : [["UA:RCO", 3]], minlevel : 7, description : desc([ "I can use two superiority dice, instead of just one, when using the Trip Attack Maneuver", "If doing so, both dice are added to the damage and the target has disadv. on its Str save" ]) }, "subclassfeature10" : { name : "Improved Combat Superiority", source : [["UA:RCO", 3]], minlevel : 10, description: desc("My superiority dice turn into d10s at 10th level and into d12s at 18th level") }, "subclassfeature15" : { name : "Relentless", source : [["UA:RCO", 3]], minlevel : 15, description: desc("I regain one superiority die if I have no more remaining when I roll initiative") } } }); AddSubClass("paladin", "oath of conquest2-ua", { regExpSearch : /^((?=.*(knight tyrant|iron mongers))|((?=.*(conquest|tyranny|tyrant))(((?=.*paladin)|((?=.*(exalted|sacred|holy|divine))(?=.*(knight|fighter|warrior|warlord|trooper))))))).*$/i, subname : "Oath of Conquest", subnameShort: "Conquest", source : [["UA:RCO", 3]], features : { "subclassfeature3" : { name : "Channel Divinity: Conquering Presence", source : [["UA:RCO", 4]], minlevel : 3, description : desc([ "As an action, all creatures of my choice within 30-ft radius must make a Wisdom save", "If failed, a target is frightened for 1 minute; It can save again at the end of each turn" ]), action : [["action", ""]], spellcastingExtra : ["armor of agathys", "command", "hold person", "spiritual weapon", "bestow curse", "fear", "dominate beast", "stoneskin", "cloudkill", "dominate person"] }, "subclassfeature3.1" : { name : "Channel Divinity: Guided Strike", source : [["UA:RCO", 4]], minlevel : 3, description: desc("When I make an attack roll, I can add a +10 bonus to the roll after seeing the d20 roll") }, "subclassfeature7" : { name : "Aura of Conquest", source : [["UA:RCO", 4]], minlevel : 7, description : desc([ "Enemies that are frightened of me have their speed reduced to 0 while in my aura", "They also take psychic damage whenever they start theirs turn within my aura" ]), additional : levels.map(function (n) { if (n < 7) return ""; return (n < 18 ? 10 : 30) + "-foot aura; " + Math.floor(n / 2) + " psychic damage"; }) }, "subclassfeature15" : { name : "Scornful Rebuke", source : [["UA:RCO", 4]], minlevel : 15, description : desc([ "Whenever I'm hit with an attack while I'm not incapacitated, the attacker takes damage", "This is psychic damage equal to my Charisma modifier (minimum of 0)" ]) }, "subclassfeature20" : { name : "Invincible Conqueror", source : [["UA:RCO", 4]], minlevel : 20, description : desc([ "As an action, I can gain the following benefits for 1 minute:", " - I have resistance to all damage", " - I can make an additional attack as part of my Attack action", " - My melee weapons score critical hits on a roll of 19 or 20" ]), recovery : "long rest", usages : 1, action : [["action", ""]] } } }); AddSubClass("warlock", "the celestial-ua", { regExpSearch : /^(?=.*warlock)(?=.*celestial).*$/i, subname : "the Celestial", source : [["UA:RCO", 4]], spellcastingExtra : ["burning hands", "cure wounds", "flaming sphere", "lesser restoration", "daylight", "revivify", "guardian of faith", "wall of fire", "flame strike", "greater restoration"], features : { "subclassfeature1" : { name : "Bonus Cantrips", source : [["UA:RCO", 5]], minlevel : 1, description: desc("I know the Light and Sacred Flame cantrips"), spellcastingBonus : [{ name : "Bonus Cantrips", spells : ["light"], selection : ["light"] }, { name : "Bonus Cantrips", spells : ["sacred flame"], selection : ["sacred flame"] }] }, "subclassfeature1.1" : { name : "Healing Light", source : [["UA:RCO", 5]], minlevel : 1, description : desc([ "As a bonus action, I can heal a creature on touch by expending dice from my pool", "I can expend up to my Charisma modifier (min 1) of dice at a time", "The target heals HP equal to the roll of the dice; I regain all expended dice on a long rest" ]), usages : levels.map(function (n) { return (n + 1) + "d6 per "; }), usagescalc : "event.value = !classes.known.warlock ? '' : (1 + classes.known.warlock.level) + 'd6';", recovery : "long rest", action : [["bonus action", ""]] }, "subclassfeature6" : { name : "Radiant Soul", source : [["UA:RCO", 5]], minlevel : 6, description : desc([ "I add my Cha modifier to cantrips/spells I cast that deal fire or radiant damage", "Additionally, I have resistance to radiant damage" ]), dmgres : ["Radiant"], calcChanges : { atkCalc : [ function (fields, v, output) { if (v.isSpell && (/fire|radiant/i).test(fields.Damage_Type)) { output.extraDmg += What('Cha Mod'); } }, "Cantrips and spells that fire or radiant damage get my Charisma modifier added to their damage." ], spellAdd : [ function (spellKey, spellObj, spName) { if (!spellObj.psionic) return genericSpellDmgEdit(spellKey, spellObj, "fire|radiant", "Cha"); }, "Cantrips and spells that fire or radiant damage get my Charisma modifier added to their damage." ] } }, "subclassfeature10" : { name : "Radiant Resilience", source : [["UA:RCO", 5]], minlevel : 10, description : desc([ "When I finish a short or long rest, I and up to five allies gain temporary hit points", "I get my warlock level + Cha mod, while my allies get half my warlock level + Cha mod" ]), additional : levels.map(function (n) { if (n < 10) return ""; return "Me: " + n + "+Cha mod; Allies: " + Math.floor(n / 2) + "+Cha mod"; }) }, "subclassfeature14" : { name : "Searing Vengeance", source : [["UA:RCO", 5]], minlevel : 14, description : desc([ "At the start of my turn when I would make a death save, I can instead spring back up", "I can stand up and recover HP equal to half my current HP maximum", "Also, creatures of my choice within 30 ft of me take 2d8 + Cha mod in radiant damage", "Damaged creatures are blinded until the end of my current turn" ]), usages : 1, recovery : "long rest" } } }); // Add Warlock invocations, revised versions from previous Unearthed Arcana articles, and new ones // Most probably still valid 2021-09-21, have to check // dupl_start if (!SourceList.X || SourceList.X.abbreviation !== "XGtE") { AddWarlockInvocation("Aspect of the Moon (prereq: Pact of the Tome)", { name : "Aspect of the Moon", description: desc("I don't need sleep nor can be forced to by any means; I can rest while doing light activity"), source : [["X", 56], ["UA:RCO", 5]], submenu : "[improves Pact of the Tome]", prereqeval : function(v) { return GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the tome'; }, savetxt : { text : ["Nothing can force me to sleep"] } }); AddWarlockInvocation("Cloak of Flies (prereq: level 5 warlock)", { name : "Cloak of Flies", description : desc([ "As a bonus action, I can surround myself with a 5-ft radius magical aura of buzzing flies", "It lasts until I'm incapacitated or dismiss it as a bonus action; Total cover block the aura", "The aura grants me adv. on Cha (Intimidation), but disadv. on all other Cha checks", "Creatures starting their turn in the aura take my Cha mod (min 0) in poison damage" ]), source : [["X", 56], ["UA:RCO", 5]], submenu : "[warlock level 5+]", prereqeval : function(v) { return classes.known.warlock.level >= 5; }, recovery : "short rest", usages : 1, action : [["bonus action", " (start/stop)"]] }); AddWarlockInvocation("Gift of the Depths (prereq: level 5 warlock)", { name : "Gift of the Depths", description : desc([ "I can breathe underwater and I have a swim speed equal to my walking speed", "Once per long rest, I can cast Water Breathing without using a spell slot (PHB 287)" ]), source : [["X", 57], ["UA:RCO", 6]], submenu : "[warlock level 5+]", spellcastingBonus : [{ name : "Gift of the Depths", spells : ["water breathing"], selection : ["water breathing"], firstCol : 'oncelr' }], prereqeval : function(v) { return classes.known.warlock.level >= 5; }, speed : { swim : { spd : "walk", enc : "walk" } } }); AddWarlockInvocation("Gift of the Ever-Living Ones (prereq: Pact of the Chain)", { name : "Gift of the Ever-Living Ones", description: desc("When I regain HP while my familiar is within 100 ft, I regain the max the dice can roll"), source : [["X", 57], ["UA:RCO", 6]], submenu : "[improves Pact of the Chain]", prereqeval : function(v) { return GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the chain'; } }); AddWarlockInvocation("Grasp of Hadar (prereq: Eldritch Blast cantrip)", { name : "Grasp of Hadar", description : desc("Once per turn when my Eldritch Blast hits a creature, I can move it 10 ft closer to me"), source : [["X", 57], ["UA:RCO", 6]], submenu : "[improves Eldritch Blast]", prereqeval : function(v) { return v.hasEldritchBlast; }, calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == 'eldritch blast') fields.Description += '; Target moved 10 ft to me'; }, "When I hit a creature with my Eldritch Blast cantrip once or more times in a turn, I can move it in a straight line 10 ft closer to me." ] } }); AddWarlockInvocation("Shroud of Shadow (prereq: level 15 warlock)", { name : "Shroud of Shadow", description: desc("I can cast Invisibility at will, without using spell slots (PHB 254)"), source : [["X", 57], ["UA:RCO", 6]], submenu : "[warlock level 15+]", spellcastingBonus : [{ name : "Shroud of Shadow", spells : ["invisibility"], selection : ["invisibility"], firstCol : 'atwill' }], prereqeval : function(v) { return classes.known.warlock.level >= 15; }, spellChanges : { "invisibility" : { description : "1 crea invisible; attacking/casting makes the crea visible; anything worn/carried also invisible", changes : "With the Shroud of Shadow invocation I can cast Invisibility at will, but when I do so I am unable to cast it using a higher level spell slot." } } }); AddWarlockInvocation("Tomb of Levistus (prereq: level 5 warlock)", { name : "Tomb of Levistus", description : desc([ "As a reaction when I take damage, I can entomb myself in ice until the end of my turn", "During, I get 10 temp. HP per warlock level, which I use to absorb the triggering damage", "After, till the ice is gone, I also get vulnerability to fire, 0 speed, and am incapacitated" ]), source : [["X", 57], ["UA:RCO", 6]], submenu : "[warlock level 5+]", prereqeval : function(v) { return classes.known.warlock.level >= 5; }, recovery : "short rest", usages : 1, action : [["reaction", ""]], additional : levels.map( function(n) { return (n * 10) + " temp HP"; }) }); AddWarlockInvocation("Trickster's Escape (prereq: level 7 warlock)", { name : "Trickster's Escape", description: desc("Once per long rest, I can cast Freedom of Movement on myself without using a spell slot"), source : [["X", 57], ["UA:RCO", 7]], submenu : "[warlock level 7+]", spellcastingBonus : [{ name : "Trickster's Escape", spells : ["freedom of movement"], selection : ["freedom of movement"], firstCol : 'oncelr' }], prereqeval : function(v) { return classes.known.warlock.level >= 7; }, spellChanges : { "freedom of movement" : { range : "Self", description : "Magic can't reduce my speed, paralyze or restrain me; I can use 5 ft to escape nonmagical restrains", changes : "With the Trickster's Escape invocation I can cast Freedom of Movement, but only on myself." } } }); } // dupl_end AddWarlockInvocation("Eldritch Smite (prereq: level 5 warlock, Pact of the Blade)", { name : "Eldritch Smite", description : desc([ "Once per turn when I hit a creature with my pact weapon, I can do extra damage", "By expending a warlock spell slot, the creature takes extra damage and is knocked prone", "It takes 1d8 force damage and another 1d8 force damage per level of the spell slot", "If the target takes any of this bonus damage, it is knocked prone if it is Huge or smaller" ]), source : [["UA:RCO", 6]], submenu : "[improves Pact of the Blade]", prereqeval : function(v) { return classes.known.warlock.level >= 5 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the blade'; } }); AddWarlockInvocation("Frost Lance (prereq: Eldritch Blast cantrip)", { // Still valid 2021-09-21 name : "Frost Lance", description : desc([ "Once per turn when my Eldritch Blast hits a creature, I can reduce its speed by 10 ft", "This speed reduction lasts until the end of my next turn" ]), source : [["UA:RCO", 6]], submenu : "[improves Eldritch Blast]", prereqeval : function(v) { return v.hasEldritchBlast; }, calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == 'eldritch blast') fields.Description += '; 1 target -10 ft speed'; }, "When I hit a creature with my Eldritch Blast cantrip once or more times in a turn, I can reduce its speed by 10 ft until the end of my next turn." ] } }); AddWarlockInvocation("Ghostly Gaze (prereq: level 7 warlock)", { name : "Ghostly Gaze", description : desc([ "As an action, I can see through solid objects out to 30 ft, until the end of my current turn", "Objects appear ghostly to me; I also gain 30 ft darkvision for the duration" ]), source : [["UA:RCO", 6]], submenu : "[warlock level 7+]", prereqeval : function(v) { return classes.known.warlock.level >= 7; }, recovery : "short rest", usages : 1, action : [["action", ""]] }); AddWarlockInvocation("Improved Pact Weapon (prereq: Pact of the Blade)", { name : "Improved Pact Weapon", description : desc([ "I can use any pact weapon I create as my spellcasting focus for warlock spells", "Any pact weapon I create is a +1 magic weapon, if it isn't already a +1 magic weapon" ]), source : [["UA:RCO", 6]], submenu : "[improves Pact of the Blade]", prereqeval : function(v) { return GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the blade'; }, calcChanges : { atkCalc : [ function (fields, v, output) { // Test if this is a pact weapon, has no + bonus from somewhere else, and doesn't already have a improved pact weapon bonus if (v.pactWeapon && !output.magic) { var bContinue = true; // Now test if this isn't a weaponOptions addition with a static + bonus set to the modifier fields if (v.theWea.isMagicWeapon && v.theWea.modifiers) { // Test the first two modifiers to see if both offer a +1 or more. Returns `true` if one contains no numbers or is less than the improved pact weapon bonus var bContinue = v.theWea.modifiers.slice(0, 2).some(function (n) { if (!n || !/\d/.test(n)) { var nmbr = 0; } else if (isNaN(n)) { var nmbr = n.match(/(^|\+|-)\d+\b/g); nmbr = !nmbr ? 0 : nmbr.reduce(function(a, b) {return Number(a) + Number(b)}); } else { var nmbr = Number(n); } return nmbr < 1; }); } // if the continue boolean wasn't set to false, we can proceed if (bContinue) { v.pactMag = 1; output.magic = 1; } }; }, "If my Pact Weapon doesn't already include a magical bonus in its name and is not a magic weapon with at least a +1 bonus, the calculation will add +1 to its To Hit and Damage." ] } }); AddWarlockInvocation("Kiss of Mephistopheles (prereq: level 5 warlock, Eldritch Blast cantrip)", { name : "Kiss of Mephistopheles", description : desc([ "As a bonus action when my Eldritch Blast hits, I can cast Fireball using a warlock spell slot", "The origin of the Fireball is the creature that was hit with my Eldritch Blast attack" ]), source : [["UA:RCO", 6]], submenu : "[improves Eldritch Blast]", prereqeval : function(v) { return v.hasEldritchBlast && classes.known.warlock.level >= 5; }, action : [["bonus action", ""]] }); AddWarlockInvocation("Maddening Hex (prereq: level 5 warlock)", { name : "Maddening Hex", description : desc([ "As a bonus action, I cause pain around a target affected by a hex of mine (spell/feature)", "It and any of my choice within 5 ft of it take my Cha mod (min 0) in psychic damage" ]), source : [["UA:RCO", 6]], submenu : "[warlock level 5+]", prereqeval : function(v) { return classes.known.warlock.level >= 5; }, action : [["bonus action", ""]] }); AddWarlockInvocation("Relentless Hex (prereq: level 7 warlock)", { name : "Relentless Hex", description : desc([ "As a bonus action, I can teleport next to a target affected by a hex of mine (spell/feature)", "To do so, I must see the target and the space I'm teleporting to, and be within 30 ft of it" ]), source : [["UA:RCO", 6]], submenu : "[warlock level 7+]", prereqeval : function(v) { return classes.known.warlock.level >= 7; }, action : [["bonus action", ""]] }); ================================================ FILE: WotC material/ua_20170911_Eladrin-and-Gith.js ================================================ var iFileName = "ua_20170911_Eladrin-and-Gith.js"; RequiredSheetVersion("13.0.8"); // This file adds the content from the Unearthed Arcana: Eladrin and Gith article to MPMB's Character Record Sheet // Define the source SourceList["UA:EnG"] = { name : "Unearthed Arcana: Eladrin and Gith", abbreviation : "UA:EnG", group : "Unearthed Arcana", url : "https://media.wizards.com/2017/dnd/downloads/UA-Eladrin-Gith.pdf", date : "2017/09/11" }; // Adds three races: // Alternative version of the Eladrin RaceList["eladrin-uaeng"] = { regExpSearch : /^(?!.*half)((?=.*eladrin)|((?=.*\b(elfs?|elves|elvish|elven)\b)(?=.*\b(feys?|feywild)\b))).*$/i, name : "Eladrin", sortname : "Elf, Fey (Eladrin)", source : [["UA:EnG", 1]], plural : "Eladrin", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Elvish"], vision : [["Darkvision", 60]], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["charmed"] }, skills : ["Perception"], age : " typically claim adulthood around age 100 and can live to be 750 years old", height : " range from under 5 to over 6 feet tall (4'6\" + 2d12\")", weight : " weigh around 115 lb (90 + 2d12 \xD7 1d4 lb)", heightMetric : " range from under 1,5 to over 1,8 metres tall (140 + 5d12 cm)", weightMetric : " weigh around 55 kg (40 + 5d12 \xD7 2d4 / 10 kg)", scorestxt : "+2 Dexterity, +1 Intelligence or Charisma", scores : [0, 2, 0, 0, 0, 0], trait : "Eladrin (+2 Dexterity, +1 Intelligence or Charisma)\nTrance: Elves don't need to sleep, but meditate semiconsciously, for 4 hours a day. This gives the same benefit as a human gets from 8 hours of sleep (long rest takes only 4 hours).\nFey Step: Once per short rest, as a bonus action, I can magically teleport up to 30 ft to an unoccupied space I can see." + (typePF ? "\n" : " ") + "Shifting Seasons: After a short or long rest, I can align myself with a season, granting me access to a cantrip until my next rest: Friends, Chill Touch, Minor Illusion, or Fire Bolt. My spellcasting ability for this is Int or Cha, whichever is higher.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Shifting Seasons", spells : ["friends", "chill touch", "minor illusion", "fire bolt"], selection : ["friends", "chill touch", "minor illusion", "fire bolt"], firstCol : "checkbox", times : 4 }], features : { "fey step" : { name : "Fey Step", minlevel : 1, usages : 1, recovery : "short rest", action : [["bonus action", ""]] } } }; // Githyanki and its two variants RaceList["githyanki-ua"] = { regExpSearch : /githyanki/i, name : "Githyanki", source : [["UA:EnG", 2]], plural : "Githyanki", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Gith", 1], armorProfs : [true, true, false, false], skillstxt : "Choose any one skill or tool", age : " reach adulthood in their late teens and live for about a century", height : " are more leaner and taller than humans, most are a slender 6 feet tall (5'0\" + 2d12\")", weight : " weigh around 135 lb (100 + 2d12 \xD7 2d4 lb)", heightMetric : " are more leaner and taller than humans, most are a slender 1,8 metres tall (150 + 5d12 cm)", weightMetric : " weigh around 61 kg (45 + 5d10 \xD7 4d4 / 10 kg)", scores : [2, 0, 0, 1, 0, 0], trait : "Githyanki (+2 Strength, +1 Intelligence)\nGithyanki Psionics:" + desc([ "I know the Mage Hand cantrip.", "At 3rd level, I can cast the Jump spell once per long rest.", "At 5th level, I can also cast the Misty Step spell once per long rest.", "Intelligence is my spellcasting ability for these spells.", "I don't require components to cast these spells." ]), spellcastingAbility : 4, spellcastingBonus : [{ name : "Githyanki Psionics (1)", spells : ["mage hand"], selection : ["mage hand"], firstCol : 'atwill' }], features : { "jump" : { name : "Githyanki Psionics (level 3)", limfeaname : "Jump", minlevel : 3, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Githyanki Psionics (3)", spells : ["jump"], selection : ["jump"], firstCol : 'oncelr' }] }, "misty step" : { name : "Githyanki Psionics (level 5)", limfeaname : "Misty Step", minlevel : 5, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Githyanki Psionics (5)", spells : ["misty step"], selection : ["misty step"], firstCol : 'oncelr' }] } } }; AddRacialVariant("githyanki-ua", "tool proficiency", { regExpSearch : /tool proficiency/i, toolProfs : [["Any tool", 1]] }); AddRacialVariant("githyanki-ua", "skill proficiency", { regExpSearch : /skill proficiency/i, skillstxt : "Choose any one skill" }); // Githzerai RaceList["githzerai-ua"] = { regExpSearch : /githzerai/i, name : "Githzerai", source : [["UA:EnG", 3]], plural : "Githzerai", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Gith"], age : " reach adulthood in their late teens and live for about a century", height : " are more leaner and taller than humans, most are a slender 6 feet tall (4'11\" + 2d12\")", weight : " weigh around 115 lb (90 + 2d12 \xD7 1d4 lb)", heightMetric : " are more leaner and taller than humans, most are a slender 1,8 metres tall (150 + 5d12 cm)", weightMetric : " weigh around 55 kg (40 + 5d10 \xD7 2d4 / 10 kg)", scores : [0, 0, 0, 1, 2, 0], trait : "Githzerai (+1 Intelligence, +2 Wisdom)\n" + (typePF ? "\n" : "") + "Monastic Training: I gain a +1 bonus to AC while I'm not wearing medium or heavy armor and not using a shield.\n\nGithzerai Psionics: I know the Mage Hand cantrip. At 3rd level, I can cast the Shield spell once per long rest. At 5th level, I can also cast the Detect Thoughts spell once per long rest. Wisdom is my spellcasting ability for these spells.", spellcastingAbility : 5, spellcastingBonus : [{ name : "Githzerai Psionics (1)", spells : ["mage hand"], selection : ["mage hand"], firstCol : 'atwill' }], features : { "shield" : { name : "Githzerai Psionics (level 3)", limfeaname : "Shield", minlevel : 3, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Githzerai Psionics (3)", spells : ["shield"], selection : ["shield"], firstCol : 'oncelr' }] }, "detect thoughts" : { name : "Githzerai Psionics (level 5)", limfeaname : "Detect Thoughts", minlevel : 5, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Githzerai Psionics (5)", spells : ["detect thoughts"], selection : ["detect thoughts"], firstCol : 'oncelr' }] } }, extraAC : { name : "Monastic Training", mod : 1, text : "I gain a +1 bonus to AC while I'm not wearing medium or heavy armor and not using a shield.", stopeval : function (v) { return v.mediumArmor || v.heavyArmor || v.usingShield; } } }; ================================================ FILE: WotC material/ua_20171009_Fiendish-Options.js ================================================ var iFileName = "ua_20171009_Fiendish-Options.js"; RequiredSheetVersion("13.0.8"); // This file adds the content from the Unearthed Arcana: Fiendish Options article to MPMB's Character Record Sheet // Define the source SourceList["UA:FO"] = { name : "Unearthed Arcana: Fiendish Options", abbreviation : "UA:FO", group : "Unearthed Arcana", url : "https://media.wizards.com/2017/dnd/downloads/UA_FiendishOptions.pdf", date : "2017/10/09" }; // Adds 8 subraces for the Tiefling, even though it doesn't have any in the PHB/SRD // Much of this code was contributed by Friedrich // [dupl_start] Note that the Abyssal Tiefling is the same as the Tiefling in the PHB/SRD, so it is not added (again) by this code if (!RaceList["baalzebul tiefling"]) { RaceList["baalzebul tiefling"] = { regExpSearch : /^(?=.*baalzebul)(?=.*tiefling|planetouched).*$/i, name : "Baalzebul tiefling", sortname : "Tiefling, Baalzebul", source : [["MToF", 21], ["UA:FO", 1]], plural : "Baalzebul tieflings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Infernal"], vision : [["Darkvision", 60]], dmgres : ["Fire"], age : " reach adulthood in their late teens and live around 100 years", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 0, 0, 1, 0, 2], trait : "Baalzebul Tiefling (+1 Intelligence, +2 Charisma)\n\nLegacy of Maladomini:\n I know the Thaumaturgy cantrip.\n At 3rd level, I can cast the Ray of Sickness spell once per long rest as a 2nd-level spell.\n At 5th level, I can also cast the Crown of Madness spell once per long rest.\n Charisma is my spellcasting ability for these spells.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Legacy of Maladomini (1)", spells : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : 'atwill' }], features : { "ray of sickness" : { name : "Legacy of Maladomini (level 3)", limfeaname : "Ray of Sickness (3d8)", minlevel : 3, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Legacy of Maladomini (3)", spells : ["ray of sickness"], selection : ["ray of sickness"], firstCol : 'oncelr' }], spellChanges : { "ray of sickness" : { description : "Spell attack for 3d8 Poison dmg; save or also poisoned until end of my next turn", changes : "Using Legacy of Maladomini, I cast Ray of Sickness as if I'm using a 2nd-level spell slot." } } }, "crown of madness" : { name : "Legacy of Maladomini (level 5)", limfeaname : "Crown of Madness", minlevel : 5, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Legacy of Maladomini (5)", spells : ["crown of madness"], selection : ["crown of madness"], firstCol : 'oncelr' }] } } }; } if (!RaceList["fierna tiefling"]) { RaceList["fierna tiefling"] = { regExpSearch : /^(?=.*fierna)(?=.*tiefling|planetouched).*$/i, name : "Fierna tiefling", sortname : "Tiefling, Fierna", source : [["MToF", 21], ["UA:FO", 1]], plural : "Fierna tieflings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Infernal"], vision : [["Darkvision", 60]], dmgres : ["Fire"], age : " reach adulthood in their late teens and live around 100 years", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 0, 0, 0, 1, 2], trait : "Fierna Tiefling (+1 Wisdom, +2 Charisma)\n\nLegacy of Phlegethos:\n I know the Friends cantrip.\n At 3rd level, I can cast the Charm Person spell once per long rest as a 2nd-level spell.\n At 5th level, I can also cast the Suggestion spell once per long rest.\n Charisma is my spellcasting ability for these spells.", abilitySave : 6, spellcastingAbility : 6, spellcastingBonus : [{ name : "Legacy of Phlegethos (1)", spells : ["friends"], selection : ["friends"], firstCol : 'atwill' }], features : { "charm person" : { name : "Legacy of Phlegethos (level 3)", limfeaname : "Charm Person (2 targets)", minlevel : 3, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Legacy of Phlegethos (3)", spells : ["charm person"], selection : ["charm person"], firstCol : 'oncelr' }], spellChanges : { "charm person" : { description : "2 humanoids, max 30 ft apart, save or charmed; adv. on save if me/ally is fighting it", changes : "Using Legacy of Phlegethos, I cast Charm Person as if I'm using a 2nd-level spell slot." } } }, "suggestion" : { name : "Legacy of Phlegethos (level 5)", limfeaname : "Suggestion", minlevel : 5, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Legacy of Phlegethos (5)", spells : ["suggestion"], selection : ["suggestion"], firstCol : 'oncelr' }] } } }; } if (!RaceList["glasya tiefling"]) { RaceList["glasya tiefling"] = { regExpSearch : /^(?=.*glasya)(?=.*tiefling|planetouched).*$/i, name : "Glasya tiefling", sortname : "Tiefling, Glasya", source : [["MToF", 22], ["UA:FO", 2]], plural : "Glasya tieflings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Infernal"], vision : [["Darkvision", 60]], dmgres : ["Fire"], age : " reach adulthood in their late teens and live around 100 years", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 1, 0, 0, 0, 2], trait : "Glasya Tiefling (+1 Dexterity, +2 Charisma)\n\nLegacy of Malbolge:\n I know the Minor Illusion cantrip.\n At 3rd level, I can cast the Disguise Self spell once per long rest.\n At 5th level, I can also cast the Invisibility spell once per long rest.\n Charisma is my spellcasting ability for these spells.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Legacy of Malbolge (1)", spells : ["minor illusion"], selection : ["minor illusion"], firstCol : 'atwill' }], features : { "disguise self" : { name : "Legacy of Malbolge (level 3)", limfeaname : "Disguise Self", minlevel : 3, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Legacy of Malbolge (3)", spells : ["disguise self"], selection : ["disguise self"], firstCol : 'oncelr' }] }, "invisibility" : { name : "Legacy of Malbolge (level 5)", limfeaname : "Invisibility", minlevel : 5, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Legacy of Malbolge (5)", spells : ["invisibility"], selection : ["invisibility"], firstCol : 'oncelr' }] } } }; } if (!RaceList["levistus tiefling"]) { RaceList["levistus tiefling"] = { regExpSearch : /^(?=.*levistus)(?=.*tiefling|planetouched).*$/i, name : "Levistus tiefling", sortname : "Tiefling, Levistus", source : [["MToF", 22], ["UA:FO", 2]], plural : "Levistus tieflings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Infernal"], vision : [["Darkvision", 60]], dmgres : ["Fire"], age : " reach adulthood in their late teens and live around 100 years", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 0, 1, 0, 0, 2], trait : "Levistus Tiefling (+1 Constitution, +2 Charisma)\n\nLegacy of Stygia:\n I know the Ray of Frost cantrip.\n At 3rd level, I can cast the Armor of Agathys spell once per long rest as a 2nd-level spell.\n At 5th level, I can also cast the Darkness spell once per long rest.\n Charisma is my spellcasting ability for these spells.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Legacy of Stygia (1)", spells : ["ray of frost"], selection : ["ray of frost"], firstCol : 'atwill' }], features : { "armor of agathys" : { name : "Legacy of Stygia (level 3)", limfeaname : "Armor of Agathys (2nd-level)", minlevel : 3, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Legacy of Stygia (3)", spells : ["armor of agathys"], selection : ["armor of agathys"], firstCol : 'oncelr' }], spellChanges : { "armor of agathys" : { description : "10 temp HP; as long as temp HP last any crea that hits in melee takes 10 Cold dmg", changes : "Using Legacy of Stygia, I cast Armor of Agathys as if I'm using a 2nd-level spell slot." } } }, "darkness" : { name : "Legacy of Stygia (level 5)", limfeaname : "Darkness", minlevel : 5, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Legacy of Stygia (5)", spells : ["darkness"], selection : ["darkness"], firstCol : 'oncelr' }] } } }; } if (!RaceList["mammon tiefling"]) { RaceList["mammon tiefling"] = { regExpSearch : /^(?=.*mammon)(?=.*tiefling|planetouched).*$/i, name : "Mammon tiefling", sortname : "Tiefling, Mammon", source : [["MToF", 22], ["UA:FO", 2]], plural : "Mammon tieflings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Infernal"], vision : [["Darkvision", 60]], dmgres : ["Fire"], age : " reach adulthood in their late teens and live around 100 years", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 0, 0, 1, 0, 2], trait : "Mammon Tiefling (+1 Intelligence, +2 Charisma)\nLegacy of Minauros:\n I know the Mage Hand cantrip.\n At 3rd level, I can cast the Tenser's Floating Disk spell once per short rest.\n At 5th level, I can also cast the Arcane Lock spell without a material component once per long rest.\n Charisma is my spellcasting ability for these spells.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Legacy of Minauros (1)", spells : ["mage hand"], selection : ["mage hand"], firstCol : 'atwill' }], features : { "tenser's floating disk" : { name : "Legacy of Minauros (level 3)", limfeaname : "Tenser's Floating Disk", minlevel : 3, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Legacy of Minauros (3)", spells : ["tenser's floating disk"], selection : ["tenser's floating disk"], firstCol : 'oncesr' }] }, "arcane lock" : { name : "Legacy of Minauros (level 5)", limfeaname : "Arcane Lock", minlevel : 5, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Legacy of Minauros (5)", spells : ["arcane lock"], selection : ["arcane lock"], firstCol : 'oncelr' }], spellChanges : { "arcane lock" : { components : "V,S", compMaterial : "", changes : "I can cast this spell once per long rest without requiring material components." } } } } }; } if (!RaceList["zariel tiefling"]) { RaceList["zariel tiefling"] = { regExpSearch : /^(?=.*zariel)(?=.*tiefling|planetouched).*$/i, name : "Zariel tiefling", sortname : "Tiefling, Zariel", source : [["MToF", 23], ["UA:FO", 2]], plural : "Zariel tieflings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Infernal"], vision : [["Darkvision", 60]], dmgres : ["Fire"], age : " reach adulthood in their late teens and live around 100 years", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [1, 0, 0, 0, 0, 2], trait : "Zariel Tiefling (+1 Strength, +2 Charisma)\n\nLegacy of Avernus:\n I know the Thaumaturgy cantrip.\n At 3rd level, I can cast the Searing Smite spell once per long rest as a 2nd-level spell.\n At 5th level, I can also cast the Branding Smite spell once per long rest.\n Charisma is my spellcasting ability for these spells.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Legacy of Avernus (1)", spells : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : 'atwill' }], features : { "searing smite" : { name : "Legacy of Avernus (level 3)", limfeaname : "Searing Smite (2d6)", minlevel : 3, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Legacy of Avernus (3)", spells : ["searing smite"], selection : ["searing smite"], firstCol : 'oncelr' }], spellChanges : { "searing smite" : { description : "Next melee weapon hit +2d6 Fire dmg and target ignites; save to end spell or 1d6 Fire dmg", changes : "Using Legacy of Avernus, I cast Searing Smite as if I'm using a 2nd-level spell slot." } } }, "branding smite" : { name : "Legacy of Avernus (level 5)", limfeaname : "Branding Smite", minlevel : 5, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Legacy of Avernus (5)", spells : ["branding smite"], selection : ["branding smite"], firstCol : 'oncelr' }] } } }; } // dupl_end RaceList["dispater tiefling-ua"] = { regExpSearch : /^(?=.*dispater)(?=.*tiefling|planetouched).*$/i, name : "Dispater tiefling", sortname : "Tiefling, Dispater", source : [["UA:FO", 1]], plural : "Dispater tieflings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Infernal"], vision : [["Darkvision", 60]], dmgres : ["Fire"], age : " reach adulthood in their late teens and live around 100 years", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 1, 0, 0, 0, 2], trait : "Dispater Tiefling (+1 Dexterity, +2 Charisma)\n\nLegacy of Dis:\n I know the Thaumaturgy cantrip.\n At 3rd level, I can cast the Disguise Self spell once per long rest.\n At 5th level, I can also cast the Invisibility spell once per long rest.\n Charisma is my spellcasting ability for these spells.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Legacy of Dis (level 1)", spells : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : 'atwill' }], features : { "disguise self" : { name : "Legacy of Dis (level 3)", limfeaname : "Disguise Self", minlevel : 3, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Legacy of Dis (level 3)", spells : ["disguise self"], selection : ["disguise self"], firstCol : 'oncelr' }] }, "invisibility" : { name : "Legacy of Dis (level 5)", limfeaname : "Invisibility", minlevel : 5, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Legacy of Dis (level 5)", spells : ["invisibility"], selection : ["invisibility"], firstCol : 'oncelr' }] } } }; RaceList["mephistopheles tiefling-ua"] = { regExpSearch : /^(?=.*mephistopheles)(?=.*tiefling|planetouched).*$/i, name : "Mephistopheles tiefling", sortname : "Tiefling, Mephistopheles", source : [["UA:FO", 2]], plural : "Mephistopheles tieflings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Infernal"], vision : [["Darkvision", 60]], dmgres : ["Fire"], age : " reach adulthood in their late teens and live around 100 years", height : " range from 5 to over 6 feet tall (4'9\" + 2d8\")", weight : " weigh around 155 lb (110 + 2d8 \xD7 2d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 70 kg (50 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 0, 0, 1, 0, 2], trait : "Mephistopheles Tiefling (+1 Intelligence, +2 Charisma)\n\nLegacy of Cania:\n I know the Mage Hand cantrip.\n At 3rd level, I can cast the Magic Missile spell once per long rest as a 2nd-level spell.\n At 5th level, I can also cast the Web spell once per long rest.\n Charisma is my spellcasting ability for these spells.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Legacy of Cania (level 1)", spells : ["mage hand"], selection : ["mage hand"], firstCol : 'atwill' }], features : { "magic missile" : { name : "Legacy of Cania (level 3)", limfeaname : "Magic Missile (2 darts)", minlevel : 3, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Legacy of Cania (level 3)", spells : ["magic missile"], selection : ["magic missile"], firstCol : 'oncelr' }], spellChanges : { "magic missile" : { description : "4 darts hit creature(s) I can see for 1d4+1 Force dmg per dart", changes : "Using Legacy of Cania, I cast Magic Missile as if I'm using a 2nd-level spell slot." } } }, "web" : { name : "Legacy of Cania (level 5)", limfeaname : "Web", minlevel : 5, usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Legacy of Cania (level 5)", spells : ["web"], selection : ["web"], firstCol : 'oncelr' }] } } }; ================================================ FILE: WotC material/ua_20171113_Elf-Subraces.js ================================================ var iFileName = "ua_20171113_Elf-Subraces.js"; RequiredSheetVersion("13.0.8"); // This file adds the content from the Unearthed Arcana: Elf Subraces article to MPMB's Character Record Sheet // Define the source SourceList["UA:ES"] = { name : "Unearthed Arcana: Elf Subraces", abbreviation : "UA:ES", group : "Unearthed Arcana", url : "https://media.wizards.com/2017/dnd/downloads/UA-ElfSubraces.pdf", date : "2017/11/13" }; // Adds 4 new subraces for the elf RaceList["avariel-ua"] = { regExpSearch : /^(?!.*half)((?=.*avariel)|((?=.*\b(elfs?|elves|elvish|elven)\b)(?=.*\b(winged?|wings?|flying|air)\b))).*$/i, name : "Avariel", sortname : "Elf, Winged (Avariel)", source : [["UA:ES", 1]], plural : "Avariel", size : 3, speed : { walk : { spd : 30, enc : 20 }, fly : { spd : 30, enc : 0 } }, languageProfs : ["Common", "Elvish", "Auran"], vision : [["Darkvision", 60]], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["charmed"] }, skills : ["Perception"], age : " typically claim adulthood around age 100 and can live to be 750 years old", height : " range from 5 to over 6 feet tall (4'8\" + 2d10\")", weight : " weigh around 115 lb (90 + 2d10 \xD7 1d4 lb)", heightMetric : " range from 1,5 to over 1,8 metres tall (145 + 5d10 cm)", weightMetric : " weigh around 55 kg (40 + 5d10 \xD7 2d4 / 10 kg)", scores : [0, 2, 0, 0, 0, 0], trait : "Avariel (+2 Dexterity)\nTrance: Elves don't need to sleep, but meditate semiconsciously, for 4 hours a day. While meditating, I can dream after a fashion; such dreams are actually mental exercises that have become reflexive through years of practice. After resting in this way, I gain the same benefit that a human does from 8 hours of sleep, thus needing only 4 hours for a long rest.\nFlight: I have a flying speed of 30 feet. To use this speed, I can't be wearing medium or heavy armor." }; RaceList["grugach elf-ua"] = { regExpSearch : /^(?!.*half)((?=.*grugach)|((?=.*\b(elfs?|elves|elvish|elven)\b)(?=.*\b(wilds?|wilderness)\b))).*$/i, name : "Grugach", sortname : "Elf, Wild (Grugach)", source : [["UA:ES", 1]], plural : "Grugach", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Elvish", "Sylvan"], vision : [["Darkvision", 60]], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["charmed"] }, weaponProfs : [false, false, ["spear", "longbow", "shortbow", "net"]], skills : ["Perception"], age : " typically claim adulthood around age 100 and can live to be 750 years old", height : " stand around 5 feet tall (4'5\" + 2d6\")", weight : " weigh around 100 lb (75 + 2d6 \xD7 1d6 lb)", heightMetric : " range from well under to well over 1,5 metres tall (135 + 5d6 cm)", weightMetric : " weigh around 45 kg (35 + 5d6 \xD7 2d6 / 10 kg)", scores : [1, 2, 0, 0, 0, 0], trait : "Grugach (+1 Strength, +2 Dexterity)\nTrance: Elves don't need to sleep, but meditate semiconsciously, for 4 hours a day. While meditating, I can dream after a fashion; such dreams are actually mental exercises that have become reflexive through years of practice. After resting in this way, I gain the same benefit that a human does from 8 hours of sleep, thus needing only 4 hours for a long rest.\nCantrip: I know one cantrip of my choice from the druid spell list. Wisdom is my spellcasting ability for it.", spellcastingAbility : 5, spellcastingBonus : [{ name : "Grugach Cantrip", "class" : "druid", level : [0, 0], firstCol : 'atwill' }], eval : function () { RemoveLangTool('language', 'Common'); } }; // Edit the Wood Elf PHB entry, if available, to not match on Grugach if (RaceList["wood elf"]) { RaceList["wood elf"].regExpSearch = RaceList["wood elf"].regExpSearch.replace(/grugach\|?|wilds\?\|?/g, ""); } // dupl_start if (!RaceList["sea elf"]) { RaceList["sea elf"] = { regExpSearch : /^(?!.*half)((?=.*\b(elfs?|elves|elvish|elven)\b)(?=.*\b(seas?|oceans?|water)\b)).*$/i, name : "Sea elf", sortname : "Elf, Sea", source : [["MToF", 62], ["W", 163], ["UA:ES", 1]], plural : "Sea elves", size : 3, speed : { walk : { spd : 30, enc : 20 }, swim : { spd : 30, enc : 20 } }, weaponProfs : [false, false, ["spear", "trident", "light crossbow", "net"]], languageProfs : ["Common", "Elvish", "Aquan", "Friend of the Sea"], vision : [["Darkvision", 60]], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["charmed"] }, skills : ["Perception"], age : " typically claim adulthood around age 100 and can live to be 750 years old", height : " range from under 5 to almost 6 feet tall (4'6\" + 2d8\")", weight : " weigh around 115 lb (90 + 2d8 \xD7 1d4 lb)", heightMetric : " range from under 1,5 to almost 1,8 metres tall (140 + 5d8 cm)", weightMetric : " weigh around 52 kg (40 + 5d8 \xD7 2d4 / 10 kg)", scores : [0, 2, 1, 0, 0, 0], trait : "Sea Elf (+2 Dexterity, +1 Constitution)" + desc([ "Trance: Elves don't need to sleep, but meditate semiconsciously, for 4 hours a day. While meditating, I can dream after a fashion. After resting in this way, I gain the same benefit that a human does from 8 hours of sleep, thus needing only 4 hours for a long rest.", "Child of the Sea. I have 30 ft swimming speed and can breathe air and water.", "Friend of the Sea: Through sounds and gestures, I can communicate simple ideas with any beast that has an inborn swimming speed." ]) // edited to be the same as in MToF instead of "Small or smaller beasts that have an inborn swimming speed." }; } // dupl_end RaceList["shadar-kai elf-ua"] = { regExpSearch : /^(?!.*half)((?=.*shadar-kai)|((?=.*\b(elfs?|elves|elvish|elven)\b)(?=.*\b(shadows?|shadowfell)\b))).*$/i, name : "Shadar-kai", sortname : "Elf, Shadow (Shadar-kai)", source : [["UA:ES", 2]], plural : "Shadar-kai", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Elvish"], vision : [["Darkvision", 60]], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["charmed"] }, skills : ["Perception"], age : " typically claim adulthood around age 100 and can live to be 750 years old", height : " range from under 5 to over 6 feet tall (4'8\" + 2d8\")", weight : " weigh around 115 lb (90 + 2d8 \xD7 1d4 lb)", heightMetric : " range from under 1,5 to over 1,8 metres tall (145 + 5d8 cm)", weightMetric : " weigh around 52 kg (40 + 5d8 \xD7 2d4 / 10 kg)", scores : [0, 2, 0, 0, 0, 1], trait : "Shadar-kai (+2 Dexterity, +1 Charisma)\nTrance: Elves don't need to sleep, but meditate semiconsciously, for 4 hours a day. This gives the same benefit as a human gets from 8 hours of sleep (long rest takes only 4 hours).\nBlessing of the Raven Queen: Once per short rest, as a bonus action, I can magically teleport up to 15 ft to an unoccupied space I can see, and, until the start of my next turn, I have resistance to all damage and appear translucent." + (typePF ? "\n" : " ") + "Cantrip: I know one cantrip: Chill Touch, Spare the Dying, or Thaumaturgy. Charisma is my spellcasting ability for it.", spellcastingAbility : 6, spellcastingBonus : [{ name : "Shadar-kai Cantrip", spells : ["chill touch", "spare the dying", "thaumaturgy"], firstCol : 'atwill' }], features : { "blessing of the raven queen" : { name : "Blessing of the Raven Queen", minlevel : 1, usages : 1, recovery : "short rest", action : [["bonus action", ""]] } } }; ================================================ FILE: WotC material/ua_20180108_Three-Subclasses.js ================================================ var iFileName = "ua_20180108_Three-Subclasses.js"; RequiredSheetVersion("13.1.14", 15); // This file adds the content from the Unearthed Arcana: Three Subclasses article to MPMB's Character Record Sheet // Define the source SourceList["UA:TS"] = { name : "Unearthed Arcana: Three Subclasses", abbreviation : "UA:TS", group : "Unearthed Arcana", url : "https://media.wizards.com/2018/dnd/downloads/UA-3Subclasses0108.pdf", date : "2018/01/08" }; // Adds 3 subclasses: 1 for the Druid, 1 for the Fighter, and 1 for the Wizard AddSubClass("druid", "circle of spores-ua", { regExpSearch : /^(?=.*(druid|shaman))(?=.*spores).*$/i, subname : "Circle of Spores", subnameShort: "Spores", source : [["UA:TS", 1]], features : { "subclassfeature2" : { name : "Circle Spells", source : [["UA:TS", 1]], minlevel : 2, description : desc([ "My link to the cycle of life and death gives me with the ability to cast certain spells", "These are always prepared, but don't count against the number of spells I can prepare", "In addition, I learn the Chill Touch cantrip" ]), spellcastingBonus : [{ name : "Circle Spells", spells : ["chill touch"], selection : ["chill touch"], firstCol : 'atwill' }], spellcastingExtra : ["gentle repose", "ray of enfeeblement", "animate dead", "gaseous form", "blight", "confusion", "cloudkill", "contagion"] }, "subclassfeature2.1" : { name : "Halo of Spores", source : [["UA:TS", 1]], minlevel : 2, description: desc("As a reaction on my turn, I can do poison damage to one creature I can see within 10 ft"), additional : levels.map(function (n) { return n < 2 ? "" : (n < 6 ? 3 : n < 10 ? 6 : n < 14 ? 9 : 12) + " poison damage"; }), action : [["reaction", " (on my turn)"]] }, "subclassfeature2.2" : { name : "Symbiotic Entity", source : [["UA:TS", 1]], minlevel : 2, description : desc([ "As an action, I expend a Wild Shape use to boost my spores instead of transforming", "I then gain 3 temporary HP per druid level and my Halo of Spores does double damage", "Also, my melee weapon attacks do +1d6 poison damage with every hit", "This lasts for 10 minutes or until I use Wild Shape again" ]), additional : levels.map(function (n) { return n < 2 ? "" : Math.floor(n*3) + " temp HP; Halo of Spores: " + (n < 6 ? 6 : n < 10 ? 12 : n < 14 ? 18 : 24) + " damage"; }), action : [["action", ""]], calcChanges : { atkAdd : [ function (fields, v) { if (v.isMeleeWeapon && (/\b(spore|symbiotic)\b/i).test(v.WeaponTextName)) { fields.Description += (fields.Description ? '; ' : '') + '+1d6 poison damage'; }; }, "If I include the word 'Spore' or 'Symbiotic' in a melee weapon's name or description, it gets treated as a weapon that is infused by my Symbiotic Entity feature, adding +1d6 poison damage in the description." ] } }, "subclassfeature6" : { name : "Fungal Infestation", source : [["UA:TS", 2]], minlevel : 6, description : desc([ "If I kill a humanoid with my Halo of Spores, it rises as a zombie at the end of my turn", "This zombie has 1 HP, only takes the Attack action, and can only make 1 attack with it", "It follows my mental commands and takes it turn after mine; It lasts for 1 hour" ]) }, "subclassfeature10" : { name : "Spreading Spores", source : [["UA:TS", 2]], minlevel : 10, description : desc([ "As a bonus action, I create a 10-ft cube of fungal spores within 30 ft, lasting for 1 min", "Any creature starting its turn in the cube takes the damage of my Halo of Spores", "The cube ends if I use this again; While the cube persists, I can't use my Halo of Spores" ]), action : [["bonus action", ""]] }, "subclassfeature14" : { name : "Fungal Body", source : [["UA:TS", 2]], minlevel : 14, description: desc("I'm immune to critical hits and to being blinded, deafened, frightened, and poisoned"), savetxt : { immune : ["blinded", "deafened", "frightened", "poisoned", "critical hits"] } } } }); var UATS_fighterBruteSubclassUA = AddSubClass("fighter", "brute-ua", { regExpSearch : /brute/i, subname : "Brute", source : [["UA:TS", 2]], fullname : "Brute", features : { "subclassfeature3" : { name : "Brute Force", source : [["UA:TS", 2]], minlevel : 3, description: desc("I do additional damage with weapons that I'm proficient with"), additional : levels.map(function (n) { return n < 3 ? "" : "+1d" + (n < 10 ? 4 : n < 16 ? 6 : n < 20 ? 8 : 10) + " weapon damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.fighter && classes.known.fighter.level > 2 && !v.isSpell && !v.isNaturalWeapon && fields.Proficiency) { fields.Description += (fields.Description ? '; ' : '') + '+1d' + (classes.known.fighter.level < 10 ? 4 : classes.known.fighter.level < 16 ? 6 : classes.known.fighter.level < 20 ? 8 : 10) + ' damage'; }; }, "I do +1d4 damage with weapons that I'm proficient with. This increases to 1d6 at 10th level, 1d8 at 16th level, and 1d10 at 20th level." ] } }, "subclassfeature7" : { name : "Brutish Durability", source : [["UA:TS", 2]], minlevel : 7, description : desc([ "I add +1d6 to all my saving throws, including death saves", "If the total of a death save is 20 or more, it counts as rolling a 20" ]), savetxt : { text : ["Add 1d6 to all saves"] } }, "subclassfeature15" : { name : "Devastating Critical", source : [["UA:TS", 2]], minlevel : 15, description: desc("Whenever I score a critical hit with a weapon, I add my fighter level to the damage"), additional : levels.map(function (n) { return n < 15 ? "" : "+" + n + " damage on crit"; }) }, "subclassfeature18" : { name : "Survivor", source : [["UA:TS", 2]], minlevel : 18, description : desc([ "If I have less than half my max HP at the start of my turn, I heal myself", "I regain HP equal to 5 + Constitution modifier (min 1); This doesn't work if I'm at 0 HP" ]) } } }); RunFunctionAtEnd(function () { var FSfea = newObj(ClassList.fighter.features["fighting style"]); FSfea.name = "Additional Fighting Style"; FSfea.source = ["UA:TS", 2]; FSfea.minlevel = 10; FSfea.extrachoices = ""; FSfea.description = desc('Choose an Additional Fighting Style using the "Choose Feature" button above'); ClassSubList[UATS_fighterBruteSubclassUA].features.subclassfeature10 = FSfea; }); AddSubClass("wizard", "school of invention-ua", { regExpSearch : /^(?=.*wizard)(?=.*invent(ion|or)).*$/i, subname : "School of Invention", subnameShort: "Invention", fullname : "Wizard (Inventor)", source : [["UA:TS", 2]], features : { "subclassfeature2" : { name : "Tools of the Inventor", source : [["UA:TS", 3]], minlevel : 2, description: desc("I gain proficiency with light armor and two tools of my choice"), toolProfs : [["Any one tool", 2]], armorProfs : [true, false, false, false] }, "subclassfeature2.1" : { name : "Arcanomechanical Armor", source : [["UA:TS", 3]], minlevel : 2, description : desc([ "After a long rest, I can transform a studded leather armor into arcanomechanical armor", "This is a magic light armor that gives AC 12 + Dex mod and force resistance, if attuned", "Only I can attune to it; Creating a new one removes the magic from the previous" ]), dmgres : ["Force"], armorOptions : [{ regExpSearch : /arcanomechanical/i, name : "Arcanomechanical", source : [["UA:TS", 3]], type : "light", ac : 12, weight : 8, invName : "Arcanomechanical armor", selectNow : true }] }, "subclassfeature2.2" : { name : "Reckless Casting", source : [["UA:TS", 3]], minlevel : 2, description : desc([ "As an action, I can attempt to cast a random spell or cantrip by rolling a d10 on a table", "On a roll of 10, I roll again twice on that table and cast both results", "However, if I then roll 10 on either dice, the whole casting fails and the action is wasted", "If I choose cantrip, I roll on the table once and cast the result", "If I choose a spell, I expend a spell slot and roll twice on the table for the slot's level", "I can then choose which of the results I use; Use 5th-level table for spell slots over level 5" ]), toNotesPage : [{ name : "Reckless Casting Tables", note : "\nd10\tCantrip\t\td10\tCantrip" + desc([ " 1\tAcid Splash\t\t 6\tRay of Frost", " 2\tChill Touch\t\t 7\tShocking Grasp", " 3\tFire Bolt\t\t 8\tSacred Flame", " 4\tLight\t\t 9\tThorn Whip", " 5\tPoison Spray\t 10\tRoll twice; Another 10, all is wasted" ]) + "\n\nd10\t1st-Level Spell\td10\t1st-Level Spell" + desc([ " 1\tBurning Hands\t 6\tFog Cloud", " 2\tChromatic Orb\t 7\tJump", " 3\tColor Spray\t\t 8\tMagic Missile", " 4\tFaerie Fire\t\t 9\tThunderwave", " 5\tFalse Life\t\t 10\tRoll twice; Another 10, all is wasted" ]) + "\n\nd10\t2nd-Level Spell\td10\t2nd-Level Spell" + desc([ " 1\tBlur\t\t 6\tLevitate", " 2\tDarkness\t\t 7\tMelf's Acid Arrow", " 3\tEnlarge/Reduce\t 8\tScorching Ray", " 4\tGust of Wind\t 9\tShatter", " 5\tInvisibility\t\t 10\tRoll twice; Another 10, all is wasted" ]) + "\n\nd10\t3rd-Level Spell\td10\t3rd-Level Spell" + desc([ " 1\tBlink\t\t 6\tGaseous Form", " 2\tFear\t\t 7\tLightning Bolt", " 3\tFeign Death \t 8\tSleet Storm", " 4\tFireball\t\t 9\tStinking Cloud", " 5\tFly\t\t 10\tRoll twice; Another 10, all is wasted" ]) + "\n\nd10\t4th-Level Spell\td10\t4th-Level Spell" + desc([ " 1\tBlight\t\t 6\tIce Storm", " 2\tConfusion\t\t 7\tPhantasmal Killer", " 3\tEvard's Black Tentacles\t 8\tStoneskin", " 4\tFire Shield\t\t 9\tWall of Fire", " 5\tGreater Invisibility\t 10\tRoll twice; Another 10, all is wasted" ]) + "\n\nd10\t5th-Level Spell\td10\t5th-Level Spell" + desc([ " 1\tCloudkill\t\t 6\tInsect Plague", " 2\tCone of Cold\t 7\tMass Cure Wounds", " 3\tDestructive Wave\t 8\tWall of Force", " 4\tFlame Strike\t 9\tWall of Stone", " 5\tHold Monster\t 10\tRoll twice; Another 10, all is wasted" ]) }] }, "subclassfeature6" : { name : "Alchemical Casting", source : [["UA:TS", 4]], minlevel : 6, description : desc([ "I can manipulate spells cast while wearing and attuned to my Arcanomechanical Armor", "By expending an additional 1st or 2nd-level spell slot, I do the following:", "\u2022 1st: I can substitute acid, cold, fire, lightning, or thunder damage for another type", "\u2022 2nd: I increase the spells damage, if any, by 2d10 force damage against one target" ]) }, "subclassfeature10" : { name : "Prodigious Inspiration", source : [["UA:TS", 4]], minlevel : 10, description: desc("As a bonus action, I can replace a prepared spell with another from my spellbook"), usages : 1, recovery : "short rest", action : [["bonus action", ""]] }, "subclassfeature14" : { name : "Controlled Chaos", source : [["UA:TS", 4]], minlevel : 14, description : desc([ "When I expend a spell slot to cast a spell using Reckless Casting, it is more powerful", "I can roll on the table that is one level higher than the spell slot expended" ]) } } }); ================================================ FILE: WotC material/ua_20180409_Order-Domain.js ================================================ var iFileName = "ua_20180409_Order-Domain.js"; RequiredSheetVersion("13.0.8"); // This file adds the content from the Unearthed Arcana: Order Domain article to MPMB's Character Record Sheet // Define the source SourceList["UA:OD"] = { name : "Unearthed Arcana: Order Domain", abbreviation : "UA:OD", group : "Unearthed Arcana", url : "https://media.wizards.com/2018/dnd/downloads/UA_OrderDomain.pdf", date : "2018/04/09" }; // New Subclass for Cleric: Order Domain AddSubClass("cleric", "order domain-ua", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*order).*$/i, subname : "Order Domain", source : [["UA:OD", 1]], spellcastingExtra : ["command", "heroism", "enhance ability", "hold person", "mass healing word", "slow", "compulsion", "locate creature", "commune", "dominate person"], features : { "subclassfeature1" : { name : "Bonus Proficiency", source : [["UA:OD", 1]], minlevel : 1, description: desc("I gain proficiency with heavy armor"), armorProfs : [false, false, true, false] }, "subclassfeature1.1" : { name : "Voice of Authority", source : [["UA:OD", 1]], minlevel : 1, description : desc([ "Whenever I use a spell slot to cast a spell on an ally, it can use its reaction to attack", "The ally makes one weapon attack against a target of my choice that I can see", "If the spell targets multiple allies, I can choose which one can make the attack" ]) }, "subclassfeature2" : { name : "Channel Divinity: Order's Demand", source : [["UA:OD", 1]], minlevel : 2, description : desc([ "As an action, all chosen targets in 30 ft that can see or hear me must make a Wis save", "If failed, it is charmed by me until the end of my next turn or it takes any damage", "Also, I can choose to have any of the charmed targets to fall prone on a failed save" ]), action : [["action", ""]] }, "subclassfeature6" : { name : "Order's Dominion", source : [["UA:OD", 2]], minlevel : 6, description : desc([ "When I cast an enchantment spell using a spell slot, I regain one expended spell slot", "The regained slot must be lower level than the one used, and no higher than 5th-level" ]) }, "subclassfeature8" : { name : "Divine Strike", source : [["UA:OD", 2]], minlevel : 8, description: desc("Once per turn, when I hit a creature with a weapon attack, I can do extra damage"), additional : levels.map(function (n) { if (n < 8) return ""; return "+" + (n < 14 ? 1 : 2) + "d8 force damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && v.isWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.cleric.level < 14 ? 1 : 2) + 'd8 force damage'; } }, "Once per turn, I can have one of my weapon attacks that hit do extra force damage." ] } }, "subclassfeature17" : { name : "Order's Wrath", source : [["UA:OD", 2]], minlevel : 17, description : desc([ "If I deal my Divine Strike damage to a creature, it takes extra damage from my allies", "The first time each turn that it is hit with a weapon attack, it takes 2d8 force damage" ]) } } }); ================================================ FILE: WotC material/ua_20180514_Centaur-and-Minotaur.js ================================================ var iFileName = "ua_20180514_Centaur-and-Minotaur.js"; RequiredSheetVersion("13.1.14"); // This file adds the content from the Unearthed Arcana: Centaur and Minotaur article to MPMB's Character Record Sheet // Define the source SourceList["UA:CnM"] = { name : "Unearthed Arcana: Centaur and Minotaur", abbreviation : "UA:CnM", group : "Unearthed Arcana", url : "https://media.wizards.com/2018/dnd/downloads/UA-Centaur.pdf", date : "2018/05/14" }; // Add the Centaur race RaceList["centaur-ua"] = { regExpSearch : /centaur/i, name : "Centaur", sortname : "Centaur", source : [["UA:CnM", 1]], plural : "Centaurs", size : 3, speed : { walk : { spd : 40, enc : 30 } }, languageProfs : ["Common", "Sylvan"], weaponOptions : [{ regExpSearch : /\b(hoofs?|hooves)\b/i, name : "Hooves", source : [["UA:CnM", 2]], ability : 1, type : "Natural", damage : [1, 6, "bludgeoning"], range : "Melee", abilitytodamage : true, selectNow : true }], skills : ["Survival"], age : " reach adulthood in their late teens and live around 100 years", height : " stand between 7 and 8 feet tall (front hooves to their crowns) and 6 to 8 feet long (from their chest to the back of their rumps)", // from 3.5e Races of Faerun weight : " weigh anywhere from 950 to 1200 lb", // from 3.5e Races of Faerun heightMetric : " stand between 2,1 and 2,4 metres tall (front hooves to their crowns) and 1,8 to 2,4 metres long (from their chests to the back of their rumps)", weightMetric : " weigh anywhere from 430 to 550 kg", scores : [2, 0, 0, 0, 1, 0], trait : "Centaur (+2 Strength +1 Wisdom)" + desc([ "Hooves: I can use my hooves in melee (1d6 bludgeoning damage).", "Charge: Once per short rest, if I move 20 ft straight toward a creature and then hit it with a melee weapon attack on the same turn, I can roll the weapon's damage dice twice.", "Equine Build: I count as one size larger for my carrying capacity. While climbing, 1 ft of movement costs me 5 ft. A medium or smaller creature can ride me as a mount.", "Hybrid Nature: I am affected by effects that work on either humanoids or monstrosities." ]), features : { "charge" : { name : "Charge", minlevel : 1, usages : 1, recovery : "short rest" } }, carryingCapacity : 2 }; // Add the Minotaur race RaceList["minotaur-uacnm"] = { regExpSearch : /minotaur/i, name : "Minotaur", sortname : "Minotaur", source : [["UA:CnM", 2]], plural : "Minotaurs", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", "Minotaur"], weaponOptions : [{ regExpSearch : /\bhorns?\b/i, name : "Horns", source : [["UA:CnM", 2]], ability : 1, type : "Natural", damage : [1, 6, "piercing"], range : "Melee", description : "One horns attack as a bonus action if taking the Dash action", abilitytodamage : true, selectNow : true }], skills : ["Intimidation"], age : " reach adulthood around age 17 and live up to 150 years", height : " are well over 6 feet tall", weight : " weigh around 300 lb", heightMetric : " are well over 1,8 metres tall", weightMetric : " weigh around 135 kg", scores : [2, 0, 1, 0, 0, 0], abilitySave : 1, trait : "Minotaur (+2 Strength +1 Constitution)" + desc([ "Horns: I have horns that I can use in melee (1d6 piercing damage).", "Goring Rush: When taking a Dash action, I can make a horns attack as a bonus action.", "Hammering Horns: As a reaction after I hit a melee attack during my Attack action, I can shove that target with my horns, if it is no more than one size larger than me. It must make a Str save (DC 8 + Str mod + Prof Bonus) or be pushed up to 5 ft away from me.", "Hybrid Nature: I am affected by effects that work on either humanoids or monstrosities." ]), features : { "goring rush" : { name : "Goring Rush", minlevel : 1, action : [["bonus action", " (with Dash)"]] }, "hammering horns" : { name : "Hammering Horns", minlevel : 1, action : [["reaction", " (after hit)"]] } } }; ================================================ FILE: WotC material/ua_20180611_Giant-Soul-Sorcerer.js ================================================ var iFileName = "ua_20180611_Giant-Soul-Sorcerer.js"; RequiredSheetVersion("13.0.8"); // This file adds the content from the Unearthed Arcana: Giant Soul Sorcerer article to MPMB's Character Record Sheet // Define the source SourceList["UA:GSS"] = { name : "Unearthed Arcana: Giant Soul Sorcerer", abbreviation : "UA:GSS", group : "Unearthed Arcana", url : "https://media.wizards.com/2018/dnd/downloads/UA_GiantSoul.pdf", date : "2018/06/11" }; AddSubClass("sorcerer", "giant soul-ua", { regExpSearch : /^(?=.*giant)(?=.*soul)(?=.*sorcerer).*$/i, subname : "Giant Soul", source : [["UA:GSS", 1]], fullname : "Giant Soul Sorcerer", features : { "subclassfeature1" : { name : "Jotun Resilience", source : [["UA:GSS", 1]], minlevel : 1, description: desc("My hit point maximum increases by an amount equal to my sorcerer level"), calcChanges : { hp : function (totalHD) { if (classes.known.sorcerer) { return [classes.known.sorcerer.level, "Jotun Resilience (sorcerer level)"]; } } } }, "subclassfeature1.1" : { name : "Mark of Ordning", source : [["UA:GSS", 1]], minlevel : 1, description : desc([ 'Choose a giant heritage using the "Choose Feature" button above', "I learn spells based on my giant heritage, which I add to my known spells" ]), choices : ["Cloud Giant", "Fire Giant", "Frost Giant", "Hill Giant", "Stone Giant", "Storm Giant"], "cloud giant" : { name : "Mark of Ordning: Cloud Giant", description : desc([ "I add Minor Illusion, Fog Cloud and Invisibility to my known sorcerer spells", "These do not count against the number of cantrips/spells I can know" ]), spellcastingBonus : [{ name : "Mark of Ordning", spells : ["minor illusion", "fog cloud", "invisibility"], selection : ["minor illusion", "fog cloud", "invisibility"], times : [2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3] }] }, "fire giant" : { name : "Mark of Ordning: Fire Giant", description : desc([ "I add Fire Bolt, Burning Hands, and Flaming Sphere to my known sorcerer spells", "These do not count against the number of cantrips/spells I can know" ]), spellcastingBonus : [{ name : "Mark of Ordning", spells : ["fire bolt", "burning hands", "flaming sphere"], selection : ["fire bolt", "burning hands", "flaming sphere"], times : [2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3] }] }, "frost giant" : { name : "Mark of Ordning: Frost Giant", description : desc([ "I add Ray of Frost, Armor of Agathys, and Hold Person to my known sorcerer spells", "These do not count against the number of cantrips/spells I can know" ]), spellcastingBonus : [{ name : "Mark of Ordning", spells : ["ray of frost", "armor of agathys", "hold person"], selection : ["ray of frost", "armor of agathys", "hold person"], times : [2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3] }] }, "hill giant" : { name : "Mark of Ordning: Hill Giant", description : desc([ "I add Shillelagh, Heroism, and Enlarge/Reduce to my known sorcerer spells", "These do not count against the number of cantrips/spells I can know" ]), spellcastingBonus : [{ name : "Mark of Ordning", spells : ["shillelagh", "heroism", "enlarge/reduce"], selection : ["shillelagh", "heroism", "enlarge/reduce"], times : [2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3] }] }, "stone giant" : { name : "Mark of Ordning: Stone Giant", description : desc([ "I add Resistance, Entangle, and Spike Growth to my known sorcerer spells", "These do not count against the number of cantrips/spells I can know" ]), spellcastingBonus : [{ name : "Mark of Ordning", spells : ["resistance", "entangle", "spike growth"], selection : ["resistance", "entangle", "spike growth"], times : [2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3] }] }, "storm giant" : { name : "Mark of Ordning: Storm Giant", description : desc([ "I add Thunderwave, Shocking Grasp, and Gust of Wind to my known sorcerer spells", "These do not count against the number of cantrips/spells I can know" ]), spellcastingBonus : [{ name : "Mark of Ordning", spells : ["thunderwave", "shocking grasp", "gust of wind"], selection : ["thunderwave", "shocking grasp", "gust of wind"], times : [2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3] }] }, choiceDependencies : [{ feature : "subclassfeature6" }] }, "subclassfeature6" : { name : "Soul of Lost Ostoria", source : [["UA:GSS", 1]], minlevel : 6, description: desc('Use the "Choose Feature" button above to select the giant heritage'), choices : ["Cloud Giant", "Fire Giant", "Frost Giant", "Hill Giant", "Stone Giant", "Storm Giant"], choicesNotInMenu : true, "cloud giant" : { name : "Soul of Lost Ostoria: Cloud Giant", description : desc([ "As a bonus action after casting any of my Mark of Ordning spells, I can teleport", "I teleport to an unoccupied space that I can see up to my Con mod + 10 ft away" ]), action : [["bonus action", ""]] }, "fire giant" : { name : "Soul of Lost Ostoria: Fire Giant", description: desc("I add my Constitution modifier (min 1) to the damage of my Mark of Ordning spells"), calcChanges : { atkCalc : [ function (fields, v, output) { if (v.baseWeaponName == 'fire bolt') output.extraDmg += Math.max(What('Con Mod'), 1); }, "I add my Constitution modifier (min 1) to the damage of my Mark of Ordning spells: Fire Bolt, Burning Hands, and Flaming Sphere" ], spellAdd : [ function (spellKey, spellObj, spName) { if (spName == "sorcerer" && (/^(fire bolt|burning hands|flaming sphere)$/i).test(spellKey)) { spellObj.description = spellObj.description.replace(/d(6|10)/, "d$1+" + Math.max(1, What("Con Mod"))); return true; }; }, "I add my Constitution modifier (min 1) to the damage of my Mark of Ordning spells: Fire Bolt, Burning Hands, and Flaming Sphere" ] } }, "frost giant" : { name : "Soul of Lost Ostoria: Frost Giant", description : desc([ "Immediately after casting any of my Mark of Ordning spells, I gain temporary HP", "I gain my Con mod in temporary HP (min 1) and its added to that of the spell (if any)" ]) }, "hill giant" : { name : "Soul of Lost Ostoria: Hill Giant", source : [["UA:GSS", 2]], description : desc([ "Immediately after casting any of my Mark of Ordning spells, I can magically push others", "I can select up to two creatures within 5 ft of me that each have to make a Str save", "If failed, it is pushed my Con mod (min 1) + 5 ft away from me; It can choose to fail" ]) }, "stone giant" : { name : "Soul of Lost Ostoria: Stone Giant", source : [["UA:GSS", 2]], description : desc([ "Immediately after casting any of my Mark of Ordning spells, I gain a bonus to AC", "My AC increases with my Constitution modifier (min +1) until the end of my next turn" ]) }, "storm giant" : { name : "Soul of Lost Ostoria: Storm Giant", source : [["UA:GSS", 2]], description : desc([ "Immediately after casting any of my Mark of Ordning spells, I shoot lightning", "Up to 3 targets in 30 ft that I can see take my Con mod (min 1) in lightning damage" ]) } }, "subclassfeature14" : { name : "Rage of Fallen Ostoria", source : [["UA:GSS", 2]], minlevel : 14, description : desc([ "When I start casting a sorcerer spell using a spell slot on my turn, I can grow in size", "It lasts for 1 min or until I die or am incapacitated; I can activate it only once per turn", "While it lasts, I enjoy the following benefits (which are cumulative, except the damage):", "\u2022 I increase size by one category (from Medium to Large, for example)", "\u2022 My current HP and maximum HP increase by a number equal to my sorcerer level", "\u2022 My reach and walking speed both increase by 5 ft", "\u2022 I gain advantage on Strength checks and Strength saving throws", "\u2022 I add my Constitution modifier to the damage of my melee weapon attacks (min +1)" ]), additional : levels.map(function(n) { return n < 14 ? "" : "+" + n + " HP"; }), usages : levels.map(function(n) { return n < 14 ? "" : n < 18 ? 1 : 2; }), recovery : "short rest" }, "subclassfeature18" : { name : "Blessing of the All Father", source : [["UA:GSS", 2]], minlevel : 18, description: desc("I add +2 to my Constitution and its maximums increases to 22"), scores : [0, 0, 2, 0, 0, 0], scoresMaximum : [0, 0, 22, 0, 0, 0] } } }); ================================================ FILE: WotC material/ua_20180723_Races-of-Eberron.js ================================================ var iFileName = "ua_20180723_Races-of-Eberron.js"; RequiredSheetVersion("13.1.14"); // This file adds the content from the Unearthed Arcana: Races of Eberron article to MPMB's Character Record Sheet // Note that this content also appears in the script for Wayfinder's Guide to Eberron and thus both sources are included for all things here // Define the sources SourceList["UA:RoE"] = { name : "Unearthed Arcana: Races of Eberron", abbreviation : "UA:RoE", group : "Unearthed Arcana", campaignSetting : "Eberron", url : "https://media.wizards.com/2018/dnd/downloads/723UA_EberronRaces7232018.pdf", date : "2018/07/23" }; // The changeling RaceList["changeling-ua2"] = { regExpSearch : /changeling/i, name : "Changeling", source : [["WGtE", 61], ["UA:RoE", 2]], plural : "Changelings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, skillstxt : "Choose two from Deception, Intimidation, Insight, and Persuasion", languageProfs : ["Common", 2], toolProfs : [["Any tool", 1]], age : " reach adulthood in their early teens and live around 80 years", height : " stand between 5 and 6 feet tall (5'1\" + 2d4\")", weight : " weigh around 140 lb (115 + 2d4 \xD7 2d4 lb)", heightMetric : " stand between 1,5 to over 1,8 metres tall (155 + 5d4 cm)", weightMetric : " weigh around 65 kg (52 + 5d4 \xD7 4d4 / 10 kg)", scorestxt : "+2 Charisma, and +1 Dexterity or +1 Intelligence", scores : [0, 0, 0, 0, 0, 2], trait : "Changeling (+2 Charisma, and +1 Dexterity or +1 Intelligence)\nChange Appearance: As an action, I can polymorph to or from a humanoid form of my size I have seen, not changing my equipment. I revert back if I die and have adv. on Deception.\nUnsettling Visage: As a reaction once per short rest when I'm attacked by a seen attacker, I can impose disadv. Doing this reveals my shapeshifting nature to all within 30 ft.\nDivergent Persona: I have proficiency with one tool, and an alternate persona. While in the alternate form, my proficiency bonus with that tool is doubled.", action : [["action", "Change Appearance"]], features : { "unsettling visage" : { name : "Unsettling Visage", minlevel : 1, usages : 1, recovery : "short rest", action : [["reaction", ""]] } } }; // The kalashtar RaceList["kalashtar-ua"] = { //this code includes contributions by /u/SoilentBrad regExpSearch : /kalashtar/i, name : "Kalashtar", source : [["WGtE", 63], ["UA:RoE", 4]], plural : "Kalashtar", size : 3, speed : { walk : { spd : 30, enc : 20 } }, skillstxt : "Advantage with either Insight, Intimidation, Performance, or Persuasion", languageProfs : ["Common", "Quori", 1], savetxt : { immune : ["effects that require me to dream"] }, dmgres : ["Psychic"], age : " reach adulthood in their late teens and live less than 100 years", height : " range from 5 and a half to well over 6 feet tall (5'4\" + 2d6\")", weight : " weigh around 145 lb (110 + 2d6 \xD7 1d6 lb)", heightMetric : " range from 1,7 to 1,9 metres tall (160 + 5d6 cm)", weightMetric : " weigh around 65 kg (50 + 5d6 \xD7 2d6 / 10 kg)", scorestxt : "+1 Wisdom, +1 Charisma, and +1 to one other ability score of my choice", scores : [0, 0, 0, 0, 1, 1], trait : "Kalashtar (+1 Wisdom, +1 Charisma, and +1 to one other" + (typePF ? "" : " ability score of my choice") + ")\nDual Mind: As a reaction after I roll a Wis" + (typePF ? " save, I can gain adv." : "dom saving throw, I can gain advantage") + " on it.\nMind Link: I can speak telepathically to any creature I can see within 60 ft, as long as it can speak at least one language. As a bonus action, I can give that creature the ability to speak telepathically back to me until the start of my next turn.\nPsychic Glamour: I have adv. on Insight, Intimidation, Performance, or Persuasion checks.\nSevered from Dreams: I don't dream and thus immune to spells that affect dreams.", action : [['bonus action', 'Mind Link'], ['reaction', 'Dual Mind']] }; // The four subraces of the shifter RaceList["beasthide shifter-ua"] = { regExpSearch : /^(?=.*shifter)(?=.*beast)(?=.*hide).*$/i, name : "Beasthide shifter", sortname : "Shifter, Beasthide", source : [["WGtE", 66], ["UA:RoE", 6]], plural : "Beasthide shifters", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common"], vision : [["Darkvision", 60]], skills : ["Athletics", "Perception"], age : " reach young adulthood at age 10 and rarely live over 70", height : " range from under 5 to almost 6 feet tall (4'6\" + 2d8\")", weight : " weigh around 135 lb (90 + 2d8 \xD7 2d4 lb)", heightMetric : " range from under 1,5 to 1,8 metres tall (4'6\" + 5d8 cm)", weightMetric : " weigh around 65 kg (40 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 1, 2, 0, 0, 0], trait : "Beasthide Shifter: (+1 Dexterity, +2 Constitution)\n\nShifting: As a bonus action once per short rest, I can assume a more bestial appearance.\nThis transformation lasts for 1 minute, until I die, or until I revert back as a bonus action.\nWhen I shift, I gain temporary HP equal to 1d6 + my level + my Constitution modifier (minimum 1 temporary hit point).\nWhile transformed like this, I have a +1 bonus to AC", features : { "shift" : { name : "Shift", minlevel : 1, usages : 1, recovery : "short rest", action : [["bonus action", " (start/end)"]] } } }; RaceList["longtooth shifter-ua"] = { regExpSearch : /^(?=.*shifter)(?=.*long)(?=.*(tooth|teeth)).*$/i, name : "Longtooth shifter", sortname : "Shifter, Longtooth", source : [["WGtE", 66], ["UA:RoE", 6]], plural : "Longtooth shifters", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common"], weaponOptions : [{ baseWeapon : "unarmed strike", regExpSearch : /^(?=.*fangs?)(?=.*long)(?=.*(tooth|teeth)).*$/i, name : "Longtooth Fangs", source : [["WGtE", 66], ["UA:RoE", 6]], damage : [1, 6, "piercing"], description : "Only while shifted; One attack as bonus action", selectNow : true }], vision : [["Darkvision", 60]], skills : ["Intimidation", "Perception"], age : " reach young adulthood at age 10 and rarely live over 70", height : " range from under 5 to almost 6 feet tall (4'6\" + 2d8\")", weight : " weigh around 135 lb (90 + 2d8 \xD7 2d4 lb)", heightMetric : " range from under 1,5 to 1,8 metres tall (4'6\" + 5d8 cm)", weightMetric : " weigh around 65 kg (40 + 5d8 \xD7 4d4 / 10 kg)", scores : [2, 1, 0, 0, 0, 0], trait : "Longtooth Shifter: (+2 Strength, +1 Dexterity)\nShifting: As a bonus action once per short rest, I can assume a more bestial appearance.\nThis transformation lasts for 1 minute, until I die, or until I revert back as a bonus action.\nWhen I shift, I gain temporary HP equal to my level + my Constitution modifier (minimum 1 temporary hit point).\nWhile transformed like this, I use my elongated fangs to make unarmed strikes, dealing 1d6 piercing damage. As a bonus action, I can maken one attack with my fangs.", action : ['bonus action', 'Attack with Longtooth Fangs'], features : { "shift" : { name : "Shift", minlevel : 1, usages : 1, recovery : "short rest", action : [["bonus action", " (start/end)"]] } } }; RaceList["swiftstride shifter-ua"] = { regExpSearch : /^(?=.*shifter)(?=.*swift)(?=.*stride).*$/i, name : "Swiftstride shifter", sortname : "Shifter, Swiftstride", source : [["WGtE", 66], ["UA:RoE", 6]], plural : "Swiftstride shifters", size : 3, speed : { walk : { spd : 35, enc : 25 } }, languageProfs : ["Common"], vision : [["Darkvision", 60]], skills : ["Acrobatics", "Perception"], age : " reach young adulthood at age 10 and rarely live over 70", height : " range from under 5 to almost 6 feet tall (4'6\" + 2d8\")", weight : " weigh around 135 lb (90 + 2d8 \xD7 2d4 lb)", heightMetric : " range from under 1,5 to 1,8 metres tall (4'6\" + 5d8 cm)", weightMetric : " weigh around 65 kg (40 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 2, 0, 0, 0, 1], trait : "Swiftstride Shifter: (+2 Dexterity, +1 Charisma)\nShifting: As a bonus action once per short rest, I can assume a more bestial appearance.\nThis transformation lasts for 1 minute, until I die, or until I revert back as a bonus action.\nWhen I shift, I gain temporary HP equal to my level + my Con" + (typePF ? "stitution modifier (minimum 1 temporary hit point" : " mod (minimum 1 temp HP") + ").\nWhile transformed like this, my walking speed increases with 5 ft.\nAs a reaction when an enemy ends its turn within 5 ft of me while I'm shifted, I can move 10 ft without provoking opportunity attacks.", action : ['reaction', 'Stride (while shifted)'], features : { "shift" : { name : "Shift", minlevel : 1, usages : 1, recovery : "short rest", action : [["bonus action", " (start/end)"]] } } }; RaceList["wildhunt shifter-ua"] = { regExpSearch : /^(?=.*shifter)(?=.*wild)(?=.*hunt).*$/i, name : "Wildhunt shifter", sortname : "Shifter, Wildhunt", source : [["WGtE", 66], ["UA:RoE", 6]], plural : "Wildhunt shifters", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common"], vision : [["Darkvision", 60]], skills : ["Perception", "Survival"], age : " reach young adulthood at age 10 and rarely live over 70", height : " range from under 5 to almost 6 feet tall (4'6\" + 2d8\")", weight : " weigh around 135 lb (90 + 2d8 \xD7 2d4 lb)", heightMetric : " range from under 1,5 to 1,8 metres tall (4'6\" + 5d8 cm)", weightMetric : " weigh around 65 kg (40 + 5d8 \xD7 4d4 / 10 kg)", scores : [0, 1, 0, 0, 2, 0], trait : "Wildhunt Shifter: (+1 Dexterity, +2 Wisdom)\nShifting: As a bonus action once per short rest, I can transform and get adv. on Wis checks." + (typePF ? " " : "\n") + "This transformation lasts for 1 minute, until I die, or until I revert back as a bonus action.\nWhen I shift, I gain temporary HP equal to my level + my Con" + (typePF ? "stitution modifier (minimum 1 temporary hit point" : " mod (minimum 1 temp HP") + ").\nMark the Scent: As a bonus action once per short rest, I can mark a creature that I can see within 10 ft. Until the end of my next long rest, my proficiency bonus is doubled for checks to find this target, and I always know its location if it is within 60 ft of me.", features : { "shift" : { name : "Shift", minlevel : 1, usages : 1, recovery : "short rest", action : [["bonus action", " (start/end)"]] }, "mark the scent" : { name : "Mark the Scent", minlevel : 1, usages : 1, recovery : "short rest", action : [["bonus action", ""]] } } }; // The three subraces of the warforged RaceList["envoy warforged-ua"] = { regExpSearch : /^(?=.*warforged)(?=.*envoy).*$/i, name : "Envoy warforged", sortname : "Warforged, Envoy", source : [["WGtE", 69], ["UA:RoE", 9]], plural : "Envoy warforged", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", 1], toolProfs : [["Any tool", 1]], skillstxt : "Choose any one skill, any one tool, and expertise with any one tool I'm proficient with", savetxt : { text : ["Magic can't put me to sleep"], immune : ["disease", "exhaustion from lack of rest"], adv_vs : ["poison"] }, dmgres : ["Poison"], age : " are created as adults and will only start to show signs of physical deterioration after 150 years, but have no further aging effects", height : " stand between 6 and 7 feet tall (5'10\" + 2d6\")", weight : " weigh around 300 lb (270 + 2d6 \xD7 4 lb)", heightMetric : " stand between 1,8 and 2,1 metres tall (178 + 5d6 cm)", weightMetric : " weigh around 135 kg (125 + 5d6 \xD7 8 / 10 kg)", scorestxt : "+1 Constitution and +1 to two other ability scores of my choice", scores : [0, 0, 1, 0, 0, 0], trait : "Envoy Warforged (+1 Constitution and +1 to two other abilit" + (typePF ? "ies" : "y scores of my choice") + ")\nWarforged Resilience: I do not need to sleep, eat, drink, or breathe.\nSentry's Rest: To benefit from a long rest, I need to enter an inactive state for 6 hours, during which I am not rendered unconscious and can see and hear as normal.\nIntegrated Protection: My AC depends on armor proficiency: none (11+Dex), light (11+Dex+Prof B.), medium (13+Dex+Prof B.), heavy (16+Prof B.; Stealth disadv.). I can use a shield.\nIntegrated Tool: I have expertise with one tool and it is integrated into my body.", eval : function() { var lightProf = tDoc.getField('Proficiency Armor Light').isBoxChecked(0); if (tDoc.getField('Proficiency Armor Heavy').isBoxChecked(0)) { CurrentRace.armorAdd.select = 'Heavy Plating'; } else if (tDoc.getField('Proficiency Armor Medium').isBoxChecked(0) && ((What('Dex') < 18 && lightProf) || !lightProf)) { CurrentRace.armorAdd.select = 'Composite Plating'; } else { CurrentRace.armorAdd.select = 'Darkwood Core' + (lightProf ? " (Prof)" : ""); }; }, removeeval : function () { if ((/darkwood core|composite plating|heavy plating/).test(CurrentArmour.known)) { tDoc.resetForm(['AC Armor Description']); }; }, armorAdd : { select : "" }, armorOptions : [{ regExpSearch : /^(?=.*darkwood)(?=.*core).*$/i, name : "Darkwood core", source : [["WGtE", 69], ["UA:RoE", 9]], ac : 11 }, { regExpSearch : /^(?=.*darkwood)(?=.*core)(?=.*prof).*$/i, name : "Darkwood core (Prof)", source : [["WGtE", 69], ["UA:RoE", 9]], ac : "11+Prof" }, { regExpSearch : /^(?=.*composite)(?=.*plating).*$/i, name : "Composite plating", source : [["WGtE", 69], ["UA:RoE", 9]], type : "medium", ac : "13+Prof", dex : 2 }, { regExpSearch : /^(?=.*heavy)(?=.*plating).*$/i, name : "Heavy plating", source : [["WGtE", 69], ["UA:RoE", 9]], type : "heavy", ac : "16+Prof", stealthdis : true }] }; RaceList["juggernaut warforged-ua"] = { regExpSearch : /^(?=.*warforged)(?=.*juggernaut).*$/i, name : "Juggernaut warforged", sortname : "Warforged, Juggernaut", source : [["WGtE", 70], ["UA:RoE", 9]], plural : "Juggernaut warforged", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common"], weaponOptions : [{ baseWeapon : "unarmed strike", regExpSearch : /^(?=.*warforged)(?=.*iron)(?=.*fists?).*$/i, name : "Warforged Iron Fists", source : [["WGtE", 70], ["UA:RoE", 9]], damage : [1, 4, "bludgeoning"], selectNow : true }], savetxt : { text : ["Magic can't put me to sleep"], immune : ["disease", "exhaustion from lack of rest"], adv_vs : ["poison"] }, dmgres : ["Poison"], age : " are created as adults and will only start to show signs of physical deterioration after 150 years, but have no further aging effects", height : " stand between 6 and 7 feet tall (5'10\" + 2d6\")", weight : " weigh around 300 lb (270 + 2d6 \xD7 4 lb)", heightMetric : " stand between 1,8 and 2,1 metres tall (178 + 5d6 cm)", weightMetric : " weigh around 135 kg (125 + 5d6 \xD7 8 / 10 kg)", scores : [2, 0, 1, 0, 0, 0], trait : "Juggernaut Warforged (+2 Strength, +1 Constitution)" + (typePF ? "" : " Iron Fists: unarmed strikes do 1d4.") + "\nWarforged Resilience: I do not need to sleep, eat, drink, or breathe.\nSentry's Rest: To benefit from a long rest, I need to enter an inactive state for 6 hours, during which I am not rendered unconscious and can see and hear as normal.\nIntegrated Protection: My AC depends on armor proficiency: none (11+Dex), light (11+Dex+Prof B.), medium (13+Dex+Prof B.), heavy (16+Prof B.; Stealth disadv.). I can use a shield.\nPowerful Build: I count as one size larger for my carrying capacity, push, drag, and lift." + (typePF ? " Iron Fists: My unarmed strikes do 1d4 damage." : ""), carryingCapacity : 2, eval : function() { var lightProf = tDoc.getField('Proficiency Armor Light').isBoxChecked(0); if (tDoc.getField('Proficiency Armor Heavy').isBoxChecked(0)) { CurrentRace.armorAdd.select = 'Heavy Plating'; } else if (tDoc.getField('Proficiency Armor Medium').isBoxChecked(0) && ((What('Dex') < 18 && lightProf) || !lightProf)) { CurrentRace.armorAdd.select = 'Composite Plating'; } else { CurrentRace.armorAdd.select = 'Darkwood Core' + (lightProf ? " (Prof)" : ""); }; }, removeeval : function () { if ((/darkwood core|composite plating|heavy plating/).test(CurrentArmour.known)) { tDoc.resetForm(['AC Armor Description']); }; }, armorAdd : { select : "" }, armorOptions : [{ regExpSearch : /^(?=.*darkwood)(?=.*core).*$/i, name : "Darkwood core", source : [["WGtE", 69], ["UA:RoE", 9]], ac : 11 }, { regExpSearch : /^(?=.*darkwood)(?=.*core)(?=.*prof).*$/i, name : "Darkwood core (Prof)", source : [["WGtE", 69], ["UA:RoE", 9]], ac : "11+Prof" }, { regExpSearch : /^(?=.*composite)(?=.*plating).*$/i, name : "Composite plating", source : [["WGtE", 69], ["UA:RoE", 9]], type : "medium", ac : "13+Prof", dex : 2 }, { regExpSearch : /^(?=.*heavy)(?=.*plating).*$/i, name : "Heavy plating", source : [["WGtE", 69], ["UA:RoE", 9]], type : "heavy", ac : "16+Prof", stealthdis : true }] }; RaceList["skirmisher warforged-ua"] = { regExpSearch : /^(?=.*warforged)(?=.*skirmisher).*$/i, name : "Skirmisher warforged", sortname : "Warforged, Skirmisher", source : [["WGtE", 70], ["UA:RoE", 9]], plural : "Skirmisher warforged", size : 3, speed : { walk : { spd : 35, enc : 25 } }, languageProfs : ["Common"], savetxt : { text : ["Magic can't put me to sleep"], immune : ["disease", "exhaustion from lack of rest"], adv_vs : ["poison"] }, dmgres : ["Poison"], age : " are created as adults and will only start to show signs of physical deterioration after 150 years, but have no further aging effects", height : " stand between 6 and 7 feet tall (5'10\" + 2d6\")", weight : " weigh around 300 lb (270 + 2d6 \xD7 4 lb)", heightMetric : " stand between 1,8 and 2,1 metres tall (178 + 5d6 cm)", weightMetric : " weigh around 135 kg (125 + 5d6 \xD7 8 / 10 kg)", scores : [0, 2, 1, 0, 0, 0], trait : "Skirmisher Warforged (+2 Dexterity, +1 Constitution)\nWarforged Resilience: I do not need to sleep, eat, drink, or breathe.\nSentry's Rest: To benefit from a long rest, I need to enter an inactive state for 6 hours, during which I am not rendered unconscious and can see and hear as normal.\nIntegrated Protection: My AC depends on armor proficiency: none (11+Dex), light (11+Dex+Prof B.), medium (13+Dex+Prof B.), heavy (16+Prof B.; Stealth disadv.). I can use a shield.\nLight Step: If I travel alone for an hour or more, I can move stealthily at a normal pace.", eval : function() { var lightProf = tDoc.getField('Proficiency Armor Light').isBoxChecked(0); if (tDoc.getField('Proficiency Armor Heavy').isBoxChecked(0)) { CurrentRace.armorAdd.select = 'Heavy Plating'; } else if (tDoc.getField('Proficiency Armor Medium').isBoxChecked(0) && ((What('Dex') < 18 && lightProf) || !lightProf)) { CurrentRace.armorAdd.select = 'Composite Plating'; } else { CurrentRace.armorAdd.select = 'Darkwood Core' + (lightProf ? " (Prof)" : ""); }; }, removeeval : function () { if ((/darkwood core|composite plating|heavy plating/).test(CurrentArmour.known)) { tDoc.resetForm(['AC Armor Description']); }; }, armorAdd : { select : "" }, armorOptions : [{ regExpSearch : /^(?=.*darkwood)(?=.*core).*$/i, name : "Darkwood core", source : [["WGtE", 69], ["UA:RoE", 9]], ac : 11 }, { regExpSearch : /^(?=.*darkwood)(?=.*core)(?=.*prof).*$/i, name : "Darkwood core (Prof)", source : [["WGtE", 69], ["UA:RoE", 9]], ac : "11+Prof" }, { regExpSearch : /^(?=.*composite)(?=.*plating).*$/i, name : "Composite plating", source : [["WGtE", 69], ["UA:RoE", 9]], type : "medium", ac : "13+Prof", dex : 2 }, { regExpSearch : /^(?=.*heavy)(?=.*plating).*$/i, name : "Heavy plating", source : [["WGtE", 69], ["UA:RoE", 9]], type : "heavy", ac : "16+Prof", stealthdis : true }] }; ================================================ FILE: WotC material/ua_20180810_Magic-Items-of-Eberron.js ================================================ var iFileName = "ua_20180810_Magic-Items-of-Eberron.js"; RequiredSheetVersion("13.0.8"); // This file adds the content from the Unearthed Arcana: Magic Items of Eberron to MPMB's Character Record Sheet // Note that this content also appears in the script for Wayfinder's Guide to Eberron and thus both sources are included for all things here // Define the sources SourceList["UA:MIoE"] = { name : "Unearthed Arcana: Magic Items of Eberron", abbreviation : "UA:MIoE", group : "Unearthed Arcana", campaignSetting : "Eberron", url : "https://media.wizards.com/2018/dnd/downloads/UA_Magic_Items_of_Eberron.pdf", date : "2018/08/10" }; // [dupl_start] Duplicates from Eberron: Rising from the Last War if (!SourceList["E:RLW"]) { MagicItemsList["cleansing stone"] = { name : "Cleansing Stone", source : [["E:RLW", 276], ["WGtE", 115], ["UA:MIoE", 2]], type : "wondrous item", rarity : "common", description : "This stone sphere is 1 ft in diameter and engraved with mystic sigils. As an action while touching it, I can activate it to remove dirt and grime from my garments and my person.", descriptionFull : "A cleansing stone is a stone sphere one foot in diameter, engraved with mystic sigils. When touching the stone, you can use an action to activate it and remove dirt and grime from your garments and your person. Cleansing stones are often embedded into pedestals in public squares in Aundair or found in high-end Ghallanda inns.", action : [["action", ""]], weight : 88 // using average marble/limestone density of 2.711 g/cm3 } MagicItemsList["everbright lantern"] = { name : "Everbright Lantern", source : [["E:RLW", 277], ["WGtE", 115], ["UA:MIoE", 2]], type : "wondrous item", rarity : "common", description : "This bullseye lantern is powered by a dragonshard imbued with the effect of a Continual Flame spell. The light never goes out, but it can be shuttered off. It casts bright light in a 60-ft cone and dim light for an additional 60 ft.", descriptionFull : "An everbright lantern contains an Eberron dragonshard imbued with the effect of a continual flame spell. This bright light is mounted inside a normal bullseye lantern, allowing the light to be shuttered off. An everbright lantern provides clear illumination in a 60-foot cone and shadowy illumination in a 120-foot cone, just like a mundane bullseye lantern, but its flame never goes out.", weight : 2 } MagicItemsList["imbued wood focus"] = { // Note that this item is implemented here against RAW, // because according to PHB page 203 a spellcasting focus can only be used for // spells with a material component that is neither costly nor consumed. // See also https://dnd.wizards.com/articles/sage-advice/rules-spellcasting // This would mean that the Imbued Wood Focus in only useful for a limited number of spells. // Instead, this code just applies the damage bonus to all damage spells that roll for their damage. name : "Imbued Wood Focus", source : [["E:RLW", 277], ["WGtE", 114], ["UA:MIoE", 1]], type : "wondrous item", rarity : "common", description : "This rod, wand, or staff is cut from a tree infused with extraplanar energy. I can use it as spellcasting focus for all my spells. If I do so, spells I cast that deal the associated damage type add a +1 bonus to one of their damage rolls.", descriptionFull : "An imbued wood focus is a rod, staff, or wand cut from a tree infused with extraplanar energy. If you're a spell­caster, you can use this orb as a spellcasting focus.\n When you cast a damage-dealing spell using this item as your spellcasting focus, you gain a +1 bonus to one damage roll of the spell, provided the damage is of the type associated with the item's wood. The types of wood and their associated damage types are listed in the table below.\n\n" + toUni("Wood\t\t\tDamage Type") + "\nFernian Ash\t\tFire\nIrian Rosewood\t\tRadiant\nKythrian Manchineel \tAcid or Poison\nLamannian Oak\t\tLightning or Thunder\nMabaran Ebony\t\tNecrotic\nRisian Pine\t\tCold\nShavarran Birch\t\tForce\nXorian Wenge\t\tPsychic", attunement : true, allowDuplicates : true, weight : 2, choices : ["Fernian Ash (fire)", "Irian Rosewood (radiant)", "Kythrian Manchineel (acid and poison)", "Lamannian Oak (lightning and thunder)", "Mabaran Ebony (necrotic)", "Risian Pine (cold)", "Shavarran Birch (force)", "Xorian Wenge (psychic)"], "fernian ash (fire)" : { name : "Fernian Ash Rod, Wand, or Staff", sortname : "Imbued Wood Focus, Fernian Ash (fire)", nameTest : /^(?=.*fernian)(?=.*ash)(?=.*(rod|wand|staff)).*$/i, description : "This rod, wand, or staff made of Fernian ash, wood infused with extraplanar energy. I can use it as spellcasting focus for all my spells. If I do so, spells I cast that deal fire damage add a +1 bonus to one of their damage rolls.", calcChanges : { atkCalc : [ function (fields, v, output) { if (v.thisWeapon[3] && (/fire/i).test(fields.Damage_Type)) output.extraDmg += 1; }, "When I use this as my spellcasting focus, spells I cast that deal fire damage get a +1 bonus added to one of their damage rolls." ], spellAdd : [ function (spellKey, spellObj, spName) { if (!spellObj.psionic) return genericSpellDmgEdit(spellKey, spellObj, "fire", 1, true, true); }, "When I use this as my spellcasting focus, spells I cast that deal fire damage get a +1 bonus added to one of their damage rolls." ] } }, "irian rosewood (radiant)" : { name : "Irian Rosewood Rod, Wand, or Staff", sortname : "Imbued Wood Focus, Irian Rosewood (radiant)", nameTest : /^(?=.*irian)(?=.*rosewood)(?=.*(rod|wand|staff)).*$/i, description : "This rod, wand, or staff made of Irian rosewood, wood infused with extraplanar energy. I can use it as spellcasting focus for all my spells. If I do so, spells I cast that deal radiant damage add a +1 bonus to one of their damage rolls.", calcChanges : { atkCalc : [ function (fields, v, output) { if (v.thisWeapon[3] && (/radiant/i).test(fields.Damage_Type)) output.extraDmg += 1; }, "When I use this as my spellcasting focus, spells I cast that deal radiant damage get a +1 bonus added to one of their damage rolls." ], spellAdd : [ function (spellKey, spellObj, spName) { if (!spellObj.psionic) return genericSpellDmgEdit(spellKey, spellObj, "radiant", 1, true, true); }, "When I use this as my spellcasting focus, spells I cast that deal radiant damage get a +1 bonus added to one of their damage rolls." ] } }, "kythrian manchineel (acid and poison)" : { name : "Kythrian Manchineel Rod, Wand, or Staff", sortname : "Imbued Wood Focus, Kythrian Manchineel (acid and poison)", nameTest : /^(?=.*kythrian)(?=.*manchineel)(?=.*(rod|wand|staff)).*$/i, description : "This rod, wand, or staff made of Kythrian manchineel, wood infused with extraplanar energy. I can use it as spellcasting focus for all my spells. If I do so, spells I cast that deal acid or poison damage add a +1 bonus to one of their damage rolls.", calcChanges : { atkCalc : [ function (fields, v, output) { if (v.thisWeapon[3] && (/acid|poison/i).test(fields.Damage_Type)) output.extraDmg += 1; }, "When I use this as my spellcasting focus, spells I cast that deal acid or poison damage get a +1 bonus added to one of their damage rolls." ], spellAdd : [ function (spellKey, spellObj, spName) { if (!spellObj.psionic) return genericSpellDmgEdit(spellKey, spellObj, "acid|poison", 1, true, true); }, "When I use this as my spellcasting focus, spells I cast that deal acid or poison damage get a +1 bonus added to one of their damage rolls." ] } }, "lamannian oak (lightning and thunder)" : { name : "Lamannian Oak Rod, Wand, or Staff", sortname : "Imbued Wood Focus, Lamannian Oak (lightning and thunder)", nameTest : /^(?=.*lamannian)(?=.*oak)(?=.*(rod|wand|staff)).*$/i, description : "This rod, wand, or staff made of Lamannian oak, wood infused with extraplanar energy. I can use it as spellcasting focus for all my spells. If I do so, spells I cast that deal lightning or thunder damage add a +1 bonus to one of their damage rolls.", calcChanges : { atkCalc : [ function (fields, v, output) { if (v.thisWeapon[3] && (/lightning|thunder/i).test(fields.Damage_Type)) output.extraDmg += 1; }, "When I use this as my spellcasting focus, spells I cast that deal lightning or thunder damage get a +1 bonus added to one of their damage rolls." ], spellAdd : [ function (spellKey, spellObj, spName) { if (!spellObj.psionic) return genericSpellDmgEdit(spellKey, spellObj, "lightning|thunder", 1, true, true); }, "When I use this as my spellcasting focus, spells I cast that deal lightning or thunder damage get a +1 bonus added to one of their damage rolls." ] } }, "mabaran ebony (necrotic)" : { name : "Mabaran Ebony Rod, Wand, or Staff", sortname : "Imbued Wood Focus, Mabaran Ebony (necrotic)", nameTest : /^(?=.*mabaran)(?=.*ebony)(?=.*(rod|wand|staff)).*$/i, description : "This rod, wand, or staff made of Mabaran ebony, wood infused with extraplanar energy. I can use it as spellcasting focus for all my spells. If I do so, spells I cast that deal necrotic damage add a +1 bonus to one of their damage rolls.", calcChanges : { atkCalc : [ function (fields, v, output) { if (v.thisWeapon[3] && (/necrotic/i).test(fields.Damage_Type)) output.extraDmg += 1; }, "When I use this as my spellcasting focus, spells I cast that deal necrotic damage get a +1 bonus added to one of their damage rolls." ], spellAdd : [ function (spellKey, spellObj, spName) { if (!spellObj.psionic) return genericSpellDmgEdit(spellKey, spellObj, "necro\\.?|necrotic", 1, true, true); }, "When I use this as my spellcasting focus, spells I cast that deal necrotic damage get a +1 bonus added to one of their damage rolls." ] } }, "risian pine (cold)" : { name : "Risian Pine Rod, Wand, or Staff", sortname : "Imbued Wood Focus, Risian Pine (cold)", nameTest : /^(?=.*risian)(?=.*pine)(?=.*(rod|wand|staff)).*$/i, description : "This rod, wand, or staff made of Risian pine, wood infused with extraplanar energy. I can use it as spellcasting focus for all my spells. If I do so, spells I cast that deal cold damage add a +1 bonus to one of their damage rolls.", calcChanges : { atkCalc : [ function (fields, v, output) { if (v.thisWeapon[3] && (/cold/i).test(fields.Damage_Type)) output.extraDmg += 1; }, "When I use this as my spellcasting focus, spells I cast that deal cold damage get a +1 bonus added to one of their damage rolls." ], spellAdd : [ function (spellKey, spellObj, spName) { if (!spellObj.psionic) return genericSpellDmgEdit(spellKey, spellObj, "cold", 1, true, true); }, "When I use this as my spellcasting focus, spells I cast that deal cold damage get a +1 bonus added to one of their damage rolls." ] } }, "shavarran birch (force)" : { name : "Shavarran Birch Rod, Wand, or Staff", sortname : "Imbued Wood Focus, Shavarran Birch (force)", nameTest : /^(?=.*shavarran)(?=.*birch)(?=.*(rod|wand|staff)).*$/i, description : "This rod, wand, or staff made of Shavarran birch, wood infused with extraplanar energy. I can use it as spellcasting focus for all my spells. If I do so, spells I cast that deal force damage add a +1 bonus to one of their damage rolls.", calcChanges : { atkAdd : [ function (fields, v) { if (v.thisWeapon[3] && v.thisWeapon[3] == "eldritch blast") { fields.Description += (fields.Description ? '; ' : '') + "One ray +1 dmg"; } }, "When I use this as my spellcasting focus, spells I cast that deal force damage get a +1 bonus added to one of their damage rolls." ], atkCalc : [ function (fields, v, output) { if (v.thisWeapon[3] && v.thisWeapon[3] != "eldritch blast" && (/force/i).test(fields.Damage_Type)) output.extraDmg += 1; } ], spellAdd : [ function (spellKey, spellObj, spName) { if (!spellObj.psionic) return genericSpellDmgEdit(spellKey, spellObj, "force", 1, true, true); }, "When I use this as my spellcasting focus, spells I cast that deal force damage get a +1 bonus added to one of their damage rolls." ] } }, "xorian wenge (psychic)" : { name : "Xorian Wenge Rod, Wand, or Staff", sortname : "Imbued Wood Focus, Xorian Wenge (psychic)", nameTest : /^(?=.*xorian)(?=.*wenge)(?=.*(rod|wand|staff)).*$/i, description : "This rod, wand, or staff made of Xorian wenge, wood infused with extraplanar energy. I can use it as spellcasting focus for all my spells. If I do so, spells I cast that deal psychic damage add a +1 bonus to one of their damage rolls.", calcChanges : { atkCalc : [ function (fields, v, output) { if (v.thisWeapon[3] && (/psychic/i).test(fields.Damage_Type)) output.extraDmg += 1; }, "When I use this as my spellcasting focus, spells I cast that deal psychic damage get a +1 bonus added to one of their damage rolls." ], spellAdd : [ function (spellKey, spellObj, spName) { if (!spellObj.psionic) return genericSpellDmgEdit(spellKey, spellObj, "psychic", 1, true, true); }, "When I use this as my spellcasting focus, spells I cast that deal psychic damage get a +1 bonus added to one of their damage rolls." ] } } } MagicItemsList["orb of shielding"] = { name : "Orb of Shielding", source : [["E:RLW", 278], ["WGtE", 114], ["UA:MIoE", 1]], type : "wondrous item", rarity : "common", description : "An orb of shielding is made from crystal or stone aligned to one of the planes. I can use it as my spellcasting focus. While I am holding the orb and take damage of the type associated with the material the orb is made from, I can use my reaction to reduce the damage by 1d4 (to a minimum of 0).", descriptionFull : "An orb of shielding is made from crystal or stone aligned to one of the planes. While you are holding the orb and take damage of the type associated with the material your orb is made from, you can use your reaction to reduce the damage by 1d4. The materials and their associated damage types are listed below.\n" + "\n \u2022 Fernian basalt: Fire damage" + "\n \u2022 Irian quartz: Radiant damage" + "\n \u2022 Kythrian skarn: Acid or poison damage" + "\n \u2022 Lamannian flint: Lightning or thunder damage" + "\n \u2022 Mabaran obsidian: Necrotic damage" + "\n \u2022 Quori celestine, Xorian marble: Psychic damage" + "\n \u2022 Risian shale: Cold damage" + "\n \u2022 Shavaran chert: Force damage", attunement : true, allowDuplicates : true, weight : 3, action : [["reaction", ""]], choices : ["Fernian Basalt (fire)", "Irian Quartz (radiant)", "Kythrian Skarn (acid or poison)", "Lamannian Flint (lightning or thunder)", "Mabaran Obsidian (necrotic)", "Quori Celestine (psychic)", "Risian Shale (cold)", "Shavaran Chert (force)", "Xorian Marble (psychic)"], "fernian basalt (fire)" : { name : "Orb of Shielding [Fernian Basalt]", description : "This stone orb is made from fernian basalt. I can use it as my spellcasting focus. As a reaction while I am holding the orb and take fire damage, I can reduce the damage by 1d4 (to a minimum of 0)." }, "irian quartz (radiant)" : { name : "Orb of Shielding [Irian Quartz]", description : "This crystal orb is made from irian quartz. I can use it as my spellcasting focus. As a reaction while I am holding the orb and take radiant damage, I can reduce the damage by 1d4 (to a minimum of 0)." }, "kythrian skarn (acid or poison)" : { name : "Orb of Shielding [Kythrian Skarn]", description : "This stone orb is made from kythrian skarn. I can use it as my spellcasting focus. As a reaction while I am holding the orb and take acid or poison damage, I can reduce the damage by 1d4 (to a minimum of 0)." }, "lamannian flint (lightning or thunder)" : { name : "Orb of Shielding [Lamannian Flint]", description : "This stone orb is made from lamannian flint. I can use it as my spellcasting focus. As a reaction while I am holding the orb and take lightning or thunder damage, I can reduce the damage by 1d4 (to a minimum of 0)." }, "mabaran obsidian (necrotic)" : { name : "Orb of Shielding [Mabaran Obsidian]", description : "This crystal orb is made from mabaran obsidian. I can use it as my spellcasting focus. As a reaction while I am holding the orb and take necrotic damage, I can reduce the damage by 1d4 (to a minimum of 0)." }, "quori celestine (psychic)" : { name : "Orb of Shielding [Quori Celestine]", description : "This crystal orb is made from quori celestine. I can use it as my spellcasting focus. As a reaction while I am holding the orb and take psychic damage, I can reduce the damage by 1d4 (to a minimum of 0)." }, "risian shale (cold)" : { name : "Orb of Shielding [Risian Shale]", description : "This stone orb is made from risian shale. I can use it as my spellcasting focus. As a reaction while I am holding the orb and take cold damage, I can reduce the damage by 1d4 (to a minimum of 0)." }, "shavaran chert (force)" : { name : "Orb of Shielding [Shavaran Chert]", description : "This stone orb is made from shavaran chert. I can use it as my spellcasting focus. As a reaction while I am holding the orb and take force damage, I can reduce the damage by 1d4 (to a minimum of 0)." }, "xorian marble (psychic)" : { name : "Orb of Shielding [Xorian Marble]", description : "This stone orb is made from xorian marble. I can use it as my spellcasting focus. As a reaction while I am holding the orb and take psychic damage, I can reduce the damage by 1d4 (to a minimum of 0)." } } MagicItemsList["spellshard"] = { name : "Spellshard", source : [["E:RLW", 279], ["WGtE", 115], ["UA:MIoE", 3]], type : "wondrous item", description : "This dragonshard is imbued with a text. By concentrating while holding it, I can see its pages in my mind's eye and it will draw me to the right section if I think of a topic. I can add content to it with a simple ritual and can use it as a wizard's spellbook, costing 1 gp per \"page\" I add to the shard.", allowDuplicates : true, choices : ["normal", "advanced"], "normal" : { name : "Spellshard ", allowDuplicates : true, rarity : "common", description : "This dragonshard is imbued with a work of literature. By holding it and concentrating, I can see its pages in my mind's eye and it will draw me to the right section if I think of a topic. I can add content to it with a simple ritual and can use it as a wizard's spellbook, costing 1 gp per \"page\" I add to the shard.", descriptionLong : "This polished dragonshard fits into the palm of my hand. It is imbued with a particular work of literature. By holding it and concentrating, I can see its pages in my mind's eye. Thinking of a particular phrase or topic will draw me to the first section that addresses it. I can add content to it with a simple ritual, allowing me to use it as a wizard's spellbook costing 1 gp per \"page\" in the shard, but otherwise functions as a mundane spellbook. Spellshards can also be used as diaries or journals." }, "advanced" : { name : "Advanced Spellshard", allowDuplicates : true, rarity : "uncommon", description : "This dragonshard is imbued with a text. By concentrating and speaking the passphrase, I can see its pages in my mind's eye and it will draw me to the right section if I think of a topic. I can add content to it with a simple ritual and can use it as a wizard's spellbook, costing 1 gp per \"page\" I add to the shard.", descriptionLong : "This polished dragonshard fits into the palm of my hand. It is imbued with a particular work of literature. By holding it, concentrating, and speaking its passphrase, I can see its pages in my mind's eye. Thinking of a particular phrase or topic will draw me to the first section that addresses it. I can add content to it with a simple ritual, allowing me to use it as a wizard's spellbook costing 1 gp per \"page\" in the shard, but otherwise functions as a mundane spellbook. Spellshards can also be used as diaries or journals." } } } // dupl_end // Different or not available in Eberron: Rising from the Last War MagicItemsList["band of loyalty-ua"] = { name : "Band of Loyalty", source : [["WGtE", 115], ["UA:MIoE", 2]], type : "ring", rarity : "common", description : "If I'm reduced to zero hit points while attuned to this ring, I instantly die. These rings are favored by spies who can't afford to fall into enemy hands.", descriptionFull : "If you are reduced to zero hit points while attuned to a band of loyalty, you instantly die. These rings are favored by spies who can't afford to fall into enemy hands.", attunement : true } var UAMIoE_docentFullDescription = [ "A docent is a small metal sphere, approximately 2 inches across, studded with dragonshards. Despite a strong magical aura, it has no obvious abilities. When you attune to a docent, the sphere becomes embedded in your chest and comes to life\u2014literally.", ">>Sentience<<. A docent is a sentient neutral item with an Intelligence of 16, a Wisdom of 14, and a Charisma of 14. It can perceive the world through your senses.", "A docent communicates telepathically with its wielder and can speak, read, and understand Common and Giant.", ">>Personality<<. A docent is designed to advise and assist the warforged it's attached to. One of the simple functions of a docent is to serve as a translator. The docent's properties are under its control, and if you have a bad relationship with your docent it may refuse to assist you… or simply lie about information that it obtains. However, if you treat your docent well it could serve as a useful ally.", "The origin of docents is a great mystery. House Cannith created the first warforged thirty years ago. But the docents come from the distant land of Xen'drik and appear to be thousands of years old. Were they created to interface with some other form of construct? Or are the modern warforged a new interpretation of an ancient design? The docents claim to have forgotten their creators… but this is a mystery waiting to be unraveled. While all docents come from Xen'drik, some have been brought to Khorvaire by explorers and it's possible to encounter them in the Five Nations.", ">>Languages<<. All docents understand Common and Giant, but a docent knows up to four additional languages. Elvish and Draconic are common options. If a docent knows less than six languages in total, it can add new languages to its repertoire after encountering them. So a docent found in Xen'drik may have never encountered a dwarf before… but after spending some time in Khorvaire studying dwarves, it could pick up the Dwarvish language.", ">>Properties<<. A docent possesses up to three of the following properties:", "\u2022 The docent can cast the detect magic spell at will.", "\u2022 The docent can cast the detect evil and good spell at will.", "\u2022 The docent can detect any form of divination or scrying targeting it and its warforged host.", "\u2022 The docent has a +7 bonus to Intelligence (Arcana) checks.", "\u2022 The docent has a +7 bonus to Intelligence (History) checks.", "\u2022 The docent has a +7 bonus to Intelligence (Investigation) checks.", "\u2022 The docent has a +7 bonus to Intelligence (Nature) checks.", "\u2022 The docent has a +6 bonus to Wisdom (Insight) checks.", "\u2022 The docent has a +6 bonus to Wisdom (Perception) checks.", "\u2022 The docent has a +6 bonus to Wisdom (Medicine) checks targeting its warforged host. If the host is rendered unconscious, the docent will automatically attempt to stabilize them once each turn.", "You can use a bonus action on your turn to request that the docent use one of its properties on your behalf." ]; MagicItemsList["docent-ua"] = { name : "Docent", source : [["WGtE", 121], ["UA:MIoE", 3]], type : "wondrous item", rarity : "rare", description : "I can embed this sentient small metal sphere studded with dragonshards into my chest. I can communicate telepathically with it. It can serve me as an advisor and a translator, as it knowns 6 languages. It also knows spells and/or skills that I can have it use as a bonus action. See Notes page.", descriptionFull : UAMIoE_docentFullDescription.join("\n ").replace(/>>(.*?)<>(.*?)< 7 && (/^(?=.*dragonmark)(?=.*detection).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Charisma or Intelligence score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells See Invisibility and True Seeing, each of which you can cast once without expending a spell slot or using a material component. Intelligence is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a long rest before you can do so again.", description : "My Intuition Die increases with one step (d4 to d6, for example). I can cast See Invisibility and True Seeing each once per long rest without using spell slots or requiring material components. Intelligence is my spellcasting ability for these. [+1 Charisma or Intelligence]", scorestxt : "+1 Charisma or Intelligence", spellcastingBonus : [{ name : "1\xD7 per long", spells : ["see invisibility", "true seeing"], selection : ["see invisibility", "true seeing"], spellcastingAbility : 4, firstCol : 'oncelr', times : 2 }], spellChanges : { "see invisibility" : { components : "V,S", compMaterial : "", changes : "Spells cast through my Greater Dragonmark don't require material components." }, "true seeing" : { components : "V,S", compMaterial : "", description : "1 willing crea gains truesight 120 ft; see through illusions, hidden doors, ethereal plane", changes : "Spells cast through my Greater Dragonmark don't require material components." } } }, "finding" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Finding", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*finding).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Dexterity, Strength, or Wisdom score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells Locate Creature and Find the Path, each of which you can cast once without expending a spell slot or using a material component. Wisdom is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a long rest before you can do so again.", description : "My Intuition Die increases with one step (d4 to d6, for example). I can cast Locate Creature and Find the Path each once per long rest without using spell slots or requiring material components. Wisdom is my spellcasting ability for these. [+1 " + (typePF ? "Strength, Dexterity, or Wisdom]" : "Str, Dex, or Wis]"), scorestxt : "+1 Strength, Dexterity, or Wisdom", spellcastingBonus : [{ name : "1\xD7 per long", spells : ["locate creature", "find the path"], selection : ["locate creature", "find the path"], spellcastingAbility : 5, firstCol : 'oncelr', times : 2 }], spellChanges : { "locate creature" : { components : "V,S", compMaterial : "", changes : "Spells cast through my Greater Dragonmark don't require material components." }, "find the path" : { components : "V,S", compMaterial : "", description : "Know the shortest route to a location I am familiar with and are on the same plane with", changes : "Spells cast through my Greater Dragonmark don't require material components." } } }, "handling" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Handling", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*handling).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Dexterity or Wisdom score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells Beast Sense and Dominate Beast, each of which you can cast once without expending a spell slot or using a material component. Wisdom is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a long rest before you can do so again.", description : "My Intuition Die increases with one step (d4 to d6, for example). I can cast Beast Sense and Dominate Beast each once per long rest without using spell slots or requiring material components. Wisdom is my spellcasting ability for these. [+1 Dexterity or Wisdom]", scorestxt : "+1 Dexterity or Wisdom", spellcastingBonus : [{ name : "1\xD7 per long", spells : ["beast sense", "dominate beast"], selection : ["beast sense", "dominate beast"], spellcastingAbility : 5, firstCol : 'oncelr', times : 2 }] }, "healing" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Healing", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*healing).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Dexterity or Wisdom score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells Mass Healing Word and Greater Restoration, each of which you can cast once without expending a spell slot or using a material component. Wisdom is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a long rest before you can do so again.", description : "My Intuition Die increases with one step (d4 to d6, for example). I can cast Mass Healing Word and Greater Restoration each once per long rest without using spell slots or requiring material components. Wisdom is my spellcasting ability for these. [+1 Dexterity or Wisdom]", scorestxt : "+1 Dexterity or Wisdom", spellcastingBonus : [{ name : "1\xD7 per long", spells : ["mass healing word", "greater restoration"], selection : ["mass healing word", "greater restoration"], spellcastingAbility : 5, firstCol : 'oncelr', times : 2 }], spellChanges : { "greater restoration" : { components : "V,S", compMaterial : "", description : "Reduce exhaustion or end charm, petrify, curse, stat or max HP reduction", changes : "Spells cast through my Greater Dragonmark don't require material components." } } }, "hospitality" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Hospitality", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*hospitality).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Dexterity or Charisma score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells Sanctuary and Mordenkainen's Magnificent Mansion, each of which you can cast once without expending a spell slot or using a material component. Charisma is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a long rest before you can do so again.", description : "My Intuition Die increases with one step (d4 to d6, for example). I can cast Sanctuary and " + (typePF ? "Mordenkainen's " : "") + "Magnificent Mansion each once per long rest without using spell slots or requiring material components. Charisma is my spellcasting ability for these. [+1 Dexterity or Charisma]", scorestxt : "+1 Dexterity or Charisma", spellcastingBonus : [{ name : "1\xD7 per long", spells : ["sanctuary", "mordenkainen's magnificent mansion"], selection : ["sanctuary", "mordenkainen's magnificent mansion"], spellcastingAbility : 6, firstCol : 'oncelr', times : 2 }], spellChanges : { "sanctuary" : { components : "V,S", compMaterial : "", changes : "Spells cast through my Greater Dragonmark don't require material components." }, "mordenkainen's magnificent mansion" : { components : "V,S", compMaterial : "", description : "Create extradimensional mansion with rooms, food and servants to serve 100 people; see book", changes : "Spells cast through my Greater Dragonmark don't require material components." } } }, "making" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Making", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*making).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Dexterity or Intelligence score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells Fabricate and Creation, each of which you can cast once without expending a spell slot or using a material component. Intelligence is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a long rest before you can do so again.", description : "My Intuition Die increases with one step (d4 to d6, for example). I can cast Fabricate and Creation each once per long rest without using spell slots or requiring material components. Intelligence is my spellcasting ability for these. [+1 Dexterity or Intelligence]", scorestxt : "+1 Dexterity or Intelligence", spellcastingBonus : [{ name : "1\xD7 per long", spells : ["fabricate", "creation"], selection : ["fabricate", "creation"], spellcastingAbility : 4, firstCol : 'oncelr', times : 2 }], spellChanges : { "creation" : { components : "V,S", compMaterial : "", changes : "Spells cast through my Greater Dragonmark don't require material components." } } }, "passage" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Passage", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*passage).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Dexterity or Constitution score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells Blink and Teleportation Circle, each of which you can cast once without expending a spell slot or using a material component. Constitution is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a long rest before you can do so again.", description : "My Intuition Die increases with one step (d4 to d6, for example). I can cast Blink and Teleportation Circle each once per long rest without using spell slots or requiring material components. Constitution is my spellcasting ability for these. [+1 Dexterity or Constitution]", scorestxt : "+1 Dexterity or Constitution", spellcastingBonus : [{ name : "1\xD7 per long", spells : ["blink", "teleportation circle"], selection : ["blink", "teleportation circle"], spellcastingAbility : 3, firstCol : 'oncelr', times : 2 }], spellChanges : { "teleportation circle" : { components : "V,S", compMaterial : "", description : "Create a circle to teleport to another teleportation circle on same plane; see book", changes : "Spells cast through my Greater Dragonmark don't require material components." } } }, "scribing" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Scribing", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*scribing).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Intelligence or Charisma score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells Sending and Tongues, each of which you can cast once without expending a spell slot or using a material component. Intelligence is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a short or long rest before you can do so again.", description : "My Intuition Die increases with one step (d4 to d6, for example). I can cast Sending and Tongues each once per short rest without using spell slots or requiring material components. Intelligence is my spellcasting ability for these. [+1 Intelligence or Charisma]", scorestxt : "+1 Intelligence or Charisma", spellcastingBonus : [{ name : "1\xD7 per short", spells : ["sending", "tongues"], selection : ["sending", "tongues"], spellcastingAbility : 4, firstCol : 'oncesr', times : 2 }], spellChanges : { "sending" : { components : "V,S", compMaterial : "", changes : "Spells cast through my Greater Dragonmark don't require material components." }, "tongues" : { components : "V,S", compMaterial : "", changes : "Spells cast through my Greater Dragonmark don't require material components." } } }, "sentinel" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Sentinel", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*sentinel).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Strength or Wisdom score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells Compelled Duel, Warding Bond, each of which you can cast once without expending a spell slot or using a material component. Wisdom is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a short or long rest before you can do so again.", description : "My Intuition Die increases with one step (d4 to d6, for example). I can cast Compelled Duel and Warding Bond each once per short rest without using spell slots or requiring material components. Wisdom is my spellcasting ability for these. [+1 Strength or Wisdom]", scorestxt : "+1 Strength or Wisdom", spellcastingBonus : [{ name : "1\xD7 per short", spells : ["compelled duel", "warding bond"], selection : ["compelled duel", "warding bond"], spellcastingAbility : 5, firstCol : 'oncesr', times : 2 }], spellChanges : { "warding bond" : { components : "V,S", compMaterial : "", description : "1 crea +1 AC, +1 saves, resistance all dmg; if it takes dmg I take same dmg; ends if >60 ft away", changes : "Spells cast through my Greater Dragonmark don't require material components." } } }, "shadow" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Shadow", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*shadow).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Dexterity or Charisma score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells Nondetection and Mislead, each of which you can cast once without expending a spell slot or using a material component. Charisma is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a long rest before you can do so again.", description : "My Intuition Die increases with one step (d4 to d6, for example). I can cast Nondetection and Mislead each once per long rest without using spell slots or requiring material components. Charisma is my spellcasting ability for these. [+1 Dexterity or Charisma]", scorestxt : "+1 Dexterity or Charisma", spellcastingBonus : [{ name : "1\xD7 per long", spells : ["nondetection", "mislead"], selection : ["nondetection", "mislead"], spellcastingAbility : 6, firstCol : 'oncelr', times : 2 }], spellChanges : { "nondetection" : { components : "V,S", compMaterial : "", description : "1 crea or object up to 10 cu ft hidden from all divination magic", changes : "Spells cast through my Greater Dragonmark don't require material components." } } }, "storm" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Storm", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*storm).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Dexterity or Charisma score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells Control Water and Control Winds, each of which you can cast once without expending a spell slot or using a material component. Charisma is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a long rest before you can do so again.", description : "My Intuition Die increases with one step (d4 to d6, for example). I can cast Control Water and Control Winds each once per long rest without using spell slots or requiring material components. Charisma is my spellcasting ability for these. [+1 Dexterity or Charisma]", scorestxt : "+1 Dexterity or Charisma", spellcastingBonus : [{ name : "1\xD7 per long", spells : ["control water", "control winds"], selection : ["control water", "control winds"], spellcastingAbility : 6, firstCol : 'oncelr', times : 2 }], spellChanges : { "control water" : { components : "V,S", compMaterial : "", changes : "Spells cast through my Greater Dragonmark don't require material components." } } }, "warding" : { prerequisite : "Being level 8 or higher and possessing the Dragonmark of Warding", prereqeval : function(v) { return v.characterLevel > 7 && (/^(?=.*dragonmark)(?=.*warding).*$/i).test(CurrentRace.known); }, descriptionFull : "Your dragonmark has grown in size and power. This enhances your existing dragonmark, and the benefits are based on the mark that you already possess. A greater dragonmark provides the following benefits:\n \u2022 Increase your Dexterity or Intelligence score by 1, to a maximum of 20.\n \u2022 The die type of your dragonmarked Intuition Die increases by one (for example, from a d4 to a d6).\n \u2022 You learn the spells Knock, Glyph of Warding and Leomund's Secret Chest*, each of which you can cast once without expending a spell slot or using a material component. Intelligence is your spellcasting ability for these spells. Once you cast a spell using this feature, and you must finish a long rest before you can do so again.\n\n* To cast Leomund's Secret Chest using this feat, you must have a Siberys dragonshard with a value of at least 100 gp. While you have this dragonshard in hand, it serves as the spell's focus, and you can use it to summon and dismiss the chest.", description : "My Intuition Die increases one step. I can cast Knock, Secret Chest, and Glyph of Warding each once per long rest without spell slot or material component. Secret Chest requires a 100 gp Siberys dragonshard as a focus. These use Int as spellcasting ability. [+1 Dex or Int]", scorestxt : "+1 Dexterity or Intelligence", spellcastingBonus : [{ name : "1\xD7 per long", spells : ["knock", "glyph of warding"], selection : ["knock", "glyph of warding"], spellcastingAbility : 4, firstCol : 'oncelr', times : 2 }, { name : "with Siberys dragonshard", spells : ["leomund's secret chest"], selection : ["leomund's secret chest"], firstCol : 'oncelr' }], spellChanges : { "glyph of warding" : { components : "V,S", compMaterial : "", description : "Create a glyph that triggers on set condition; Int(Investigation) vs. Spell DC; see book", changes : "Spells cast through my Greater Dragonmark don't require material components." }, "leomund's secret chest" : { compMaterial : "A Siberys dragonshard with a value of at least 100 gp", description : "Hide chest with content in Ethereal Plane for 60 days, after that chance of loss; 1 a reappear (100gp)", changes : "Leomund's Secret Chest cast through my Greater Dragonmark of Warding requires a Siberys dragonshard as a focus instead of an exquisite chest and its tiny replica." } } } }; // Aberrant Dragonmark feat FeatsList["aberrant dragonmark-ua"] = { name : "Aberrant Dragonmark", source : [["WGtE", 112], ["UA:D", 9]], prerequisite : "Not having a dragonmark", prereqeval : function(v) { return !(/dragonmark/i).test(CurrentRace.known); }, descriptionFull : "You have manifested an aberrant dragonmark. Determine its appearance and the flaw associated with it (see the table below for examples). You gain the following benefits:\n \u2022 Increase your Constitution score by 1, to a maximum of 20.\n \u2022 You learn a cantrip from the sorcerer spell list. In addition, choose a 1st-level spell from the sorcerer spell list. You learn that spell and can cast it at its lowest level. Once you cast it, you must finish a long rest before you can cast it again. Constitution is your spellcasting ability for these spells.\n \u2022 You can increase the power of your aberrant spells at the risk of your own vitality. When you cast a spell with your aberrant mark, you can use one of your Hit Dice to increase the spell's level by 1. Immediately after you cast the spell, roll the Hit Die. You take damage equal to the number rolled.\n\n" + toUni("1d8") + "\t" + toUni("Aberrant Mark Flaw") + "\n1\tYour mark is a source of constant physical pain.\n2\tYour mark whispers to you, though you may not understand what it says.\n3\tIn times of stress, your mark may trigger a cantrip effect involuntarily.\n4\tThe skin around your mark has an unusual appearance: burned, scaly, withered, etc.\n5\tMundane animals become uneasy around you.\n6\tYou have dramatic mood swings any time you use your mark.\n7\tYour appearance changes in a minor way every time you use your mark.\n8\tYou have horrific nightmares after you use your mark.", description : "I learn a sorcerer cantrip and a 1st-level sorcerer spell, using Con as my spellcasting ability. I can cast the spell once per long rest without a spell slot. I can use a Hit Die when casting the spell, casting it as if with a level 2 spell slot and taking the HD as damage. [+1 Con]", scores : [0, 0, 1, 0, 0, 0], spellcastingAbility : 3, spellcastingBonus : [{ name : "Sorcerer cantrip", 'class' : 'sorcerer', level : [0, 0], firstCol : 'atwill' }, { name : "Sorcerer 1st-level spell", 'class' : 'sorcerer', level : [1, 1], firstCol : 'oncelr' }] }; // [dupl_start] Gust cantrip reprint if (!SpellsList["gust"]) { SpellsList["gust"] = { name : "Gust", classes : ["druid", "sorcerer", "wizard"], source : [["X", 157], ["E", 19], ["E:RLW", 50], ["UA:D", 6], ["WGtE", 107]], level : 0, school : "Trans", time : "1 a", range : "30 ft", components : "V,S", duration : "Instantaneous", save : "Str", description : "Med. or smaller crea save or push 5 ft; or push unattended 5 lb obj 10 ft; or harmless sensory effect", descriptionFull : "You seize the air and compel it to create one of the following effects at a point you can see within range." + "\n " + "\u2022 One Medium or smaller creature that you choose must succeed on a Strength saving throw or be pushed up to 5 feet away from you." + "\n " + "\u2022 You create a small blast of air capable of moving one object that is neither held nor carried and that weighs no more than 5 pounds. The object is pushed up to 10 feet away from you. It isn't pushed with enough force to cause damage." + "\n " + "\u2022 You create a harmless sensory affect using air, such as causing leaves to rustle, wind to slam shutters shut, or your clothing to ripple in a breeze." }; } // Control Winds reprint (only in Unearthed Arcana article, not in WGtE) if (!SpellsList["control winds"]) { SpellsList["control winds"] = { name : "Control Winds", classes : ["druid", "sorcerer", "wizard"], source : [["X", 152], ["E", 16], ["UA:D", 8]], level : 5, school : "Trans", time : "1 a", range : "300 ft", components : "V,S", duration : "Conc, 1 h", description : "100-ft cube of air either gusts, downdraft, or updraft; affects flying/jump/ranged; 1 a change; see B", descriptionFull : "You take control of the air in a 100-foot cube that you can see within range. Choose one of the following effects when you cast the spell. The effect lasts for the spell's duration, unless you use your action on a later turn to switch to a different effect. You can also use your action to temporarily halt the effect or to restart one you've halted." + "\n " + toUni("Gusts") + ": A wind picks up within the cube, continually blowing in a horizontal direction you designate. You choose the intensity of the wind: calm, moderate, or strong. If the wind is moderate or strong, ranged weapon attacks that enter or leave the cube or pass through it have disadvantage on their attack rolls. If the wind is strong, any creature moving against the wind must spend 1 extra foot of movement for each foot moved." + "\n " + toUni("Downdraft") + ": You cause a sustained blast of strong wind to blow downward from the top of the cube. Ranged weapon attacks that pass through the cube or that are made against targets within it have disadvantage on their attack rolls. A creature must make a Strength saving throw if it flies into the cube for the first time on a turn or starts its turn there flying. On a failed save, the creature is knocked prone." + "\n " + toUni("Updraft") + ": You cause a sustained updraft within the cube, rising upward from the cube's bottom side. Creatures that end a fall within the cube take only half damage from the fall. When a creature in the cube makes a vertical jump, the creature can jump up to 10 feet higher than normal." }; } // dupl_end ================================================ FILE: WotC material/ua_20190228_Artificer_dupl.js ================================================ var iFileName = "ua_20190228_Artificer.js"; RequiredSheetVersion("14.0.5-beta"); // This file adds the content from the Unearthed Arcana: Artificer 2019 article to MPMB's Character Record Sheet // Define the source SourceList["UA:A2"] = { name : "Unearthed Arcana: Artificer 2019", abbreviation : "UA:A2", group : "Unearthed Arcana", url : "https://media.wizards.com/2019/dnd/downloads/UA-Artificer-2019.pdf", date : "2019/02/28" }; // Adds a new class, the Artificer, with 2 subclasses ClassList['artificer-ua2'] = { regExpSearch : /^(?=.*artificer)(?!.*wizard).*$/i, name : "Artificer", source : [["UA:A2", 1]], primaryAbility : "Intelligence", abilitySave : 4, prereqs : "Intelligence 13", improvements : [0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5, 5], die : 8, saves : ["Con", "Int"], skillstxt : { primary : "Choose two from Arcana, History, Investigation, Medicine, Nature, Perception, and Sleight of Hand" }, toolProfs : { primary : [["Thieves' tools", "Dex"], "Tinker's tools", ["Any artisan's tool", 1]], secondary : [["Thieves' tools", "Dex"], "Tinker's tools"] }, armorProfs : { primary : [true, true, false, true], secondary : [true, true, false, true] }, weaponProfs : { primary : [true, false, ["hand crossbow", "heavy crossbow"]] }, equipment : "Artificer starting equipment:" + "\n \u2022 any two simple weapons;" + "\n \u2022 A light crossbow and 20 bolts;" + "\n \u2022 Studded leather armor -or- scale mail;" + "\n \u2022 Thieves' tools and a dungeoneer's pack;" + "\n\nAlternatively, choose 5d4 \xD7 10 gp worth of starting equipment instead of both the class' and the background's starting equipment.", subclasses : ["Artificer Specialist", []], subclassGainedLevel : 3, attacks : [1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], spellcastingFactor : 2, spellcastingTable : [[0, 0, 0, 0, 0, 0, 0, 0, 0]].concat(levels.map(function (n) { return defaultSpellTable[Math.ceil(n / 2)]; })), spellcastingKnown : { cantrips : [2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4], spells : "list", prepared : true }, features : { "magical tinkering" : { name : "Magical Tinkering", source : [["UA:A2", 2]], minlevel : 1, description : desc([ "As an action, I use thieves' or an artisan's tools to give max 1 property to a tiny object:", " \u2022 Emit light (5-ft radius bright light, equal dim light), an odor, or a nonverbal sound", " \u2022 Static visual effect on one of its surfaces; picture, 25 words, shapes, or a mix of those", "If I instill a property in more objects than I can have active, the oldest loses its property" ]), additional : "Intelligence modifier of active objects", action : [["action", " (add/remove)"]] }, "spellcasting" : { name : "Spellcasting", source : [["UA:A2", 3]], minlevel : 1, description : desc([ "I can cast prepared artificer cantrips/spells, using Intelligence as my spellcasting ability", "To cast, I must use thieves' or artisan's tools I'm proficient with as a spellcasting focus", "I can cast my prepared artificer spells as rituals if they have the ritual tag", "Whenever I gain an artificer level, I can swap one artificer cantrip I know for another" ]), additional : levels.map(function (n, idx) { return [2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4][idx] + " cantrips known"; }), calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { if (!spellObj.psionic && spName == "artificer-ua2") { spellObj.compMaterial = (spellObj.compMaterial ? spellObj.compMaterial + "; " : "") + "My artificer spellcasting focus: thieves' tools, artisan's tools I'm proficient with, " + (classes.known["artificer-ua2"].subclass.indexOf("artillerist") !== -1 ? "rod, staff, wand, " : "") + "or an item infused by me."; if (!spellObj.components) { spellObj.components = "M\u0192"; } else if (spellObj.components.indexOf("M") == -1) { spellObj.components += ",M\u0192"; } else if ((/M([^\u0192\u2020]|$)/).test(spellObj.components)) { spellObj.components = spellObj.components.replace("M", "M\u0192"); } return true; } }, "My artificer spells always require me to use a spellcasting focus: thieves' tools, artisan's tools I'm proficient with, or an item infused by me." ] }, extraname : "Artificer 2", "infuse item" : { name : "Infuse Item", source : [["UA:A2", 5]], description : desc([ "When I finish a long rest, I can turn nonmagical objects into magic items using my infusions", "I can attune to it immediately; If I infuse too many items, the oldest loses its magic", "The infusion lasts until my death + my Int mod in days, but ends if I unlearn the infusion", "Each infusion can only be used in one item at a time and only in appropriate items", "I can use an infused item as a spellcasting focus" ]), additional : levels.map(function (n) { return n < 2 ? "" : (n < 4 ? 3 : n < 7 ? 4 : n < 11 ? 5 : n < 15 ? 6 : n < 19 ? 7 : 8) + " infusions known; max " + (n < 6 ? 2 : n < 11 ? 3 : n < 16 ? 4 : 5) + " infused items"; }) }, autoSelectExtrachoices : [{ extrachoice : "infuse item", minlevel : 2 }] }, "infuse item" : { name : "Infuse Item", source : [["UA:A2", 5]], minlevel : 2, description : desc([ 'Use the "Choose Feature" button above to add Artificer Infusions to the third page', "Whenever I gain an artificer level, I can replace an infusion I know with another" ]), additional : levels.map(function (n) { return n < 2 ? "" : (n < 4 ? 3 : n < 7 ? 4 : n < 11 ? 5 : n < 15 ? 6 : n < 19 ? 7 : 8) + " infusions known; max " + (n < 6 ? 2 : n < 11 ? 3 : n < 16 ? 4 : 5) + " infused items"; }), extraname : "Artificer Infusion", extrachoices : ["Boots of the Winding Path (prereq: level 4 artificer)", "Enhanced Defense", "Enhanced Weapon", "Many-Handed Pouch (prereq: level 4 artificer)", "Radiant Weapon (prereq: level 8 artificer)", "Resistant Armor (prereq: level 8 artificer)", "Returning Weapon"], extraTimes : levels.map(function (n) { return n < 2 ? 0 : n < 4 ? 3 : n < 7 ? 4 : n < 11 ? 5 : n < 15 ? 6 : n < 19 ? 7 : 8; }), "boots of the winding path (prereq: level 4 artificer)" : { name : "Boots of the Winding Path", source : [["UA:A2", 9]], description : desc([ "The wearer can use a bonus action to teleport up to 15 ft to an unoccupied space it can see", "It must be a space that the wearer had occupied some time during the current turn" ]), additional : "pair of boots; requires attunement", prereqeval : function(v) { return classes.known["artificer-ua2"].level >= 4; }, eval : function (lvl, chc) { AddMagicItem("Boots of the Winding Path"); }, removeeval : function (lvl, chc) { var loc = CurrentMagicItems.known.indexOf("boots of the winding path"); if (loc == -1) return; MagicItemClear(loc + 1, true); } }, "enhanced defense" : { name : "Enhanced Defense", source : [["UA:A2", 9]], description : "", additional : levels.map(function (n) { return "armor/shield; +" + (n < 12 ? 1 : 2) + " magical"; }), eval : function (lvl, chc) { AddMagicItem("Armor +" + (classes.known["artificer-ua2"].level < 12 ? 1 : 2)); }, removeeval : function (lvl, chc) { var loc = CurrentMagicItems.known.indexOf("armor, +1, +2, or +3"); if (loc == -1) return; MagicItemClear(loc + 1, true); } }, "enhanced weapon" : { name : "Enhanced Weapon", source : [["UA:A2", 9]], description : "", additional : levels.map(function (n) { return "simple/martial weapon; +" + (n < 12 ? 1 : 2) + " magical"; }), eval : function (lvl, chc) { AddMagicItem("Weapon +" + (classes.known["artificer-ua2"].level < 12 ? 1 : 2)); }, removeeval : function (lvl, chc) { var loc = CurrentMagicItems.known.indexOf("weapon, +1, +2, or +3"); if (loc == -1) return; MagicItemClear(loc + 1, true); } }, "many-handed pouch (prereq: level 4 artificer)" : { name : "Many-Handed Pouch", source : [["UA:A2", 9]], description : desc([ "The infused pouches all share one interdimensional space the size of a single pouch", "Thus, reaching into any of the pouches allows access to the same storage space", "A pouch only functions if it is within 100 miles of another infused pouch", "When the infusion ends, the contents is moved to one of the pouches, chosen randomly" ]), additional : "2-5 pouches", prereqeval : function(v) { return classes.known["artificer-ua2"].level >= 4; }, eval : function (lvl, chc) { AddMagicItem("Many-Handed Pouch"); }, removeeval : function (lvl, chc) { var loc = CurrentMagicItems.known.indexOf("many-handed pouch"); if (loc == -1) return; MagicItemClear(loc + 1, true); } }, "radiant weapon (prereq: level 8 artificer)" : { name : "Radiant Weapon", source : [["UA:A2", 9]], description : desc([ "The weapon has a +1 bonus to attack and damage rolls made with it and it sheds light", "As a bonus action, its wielder can start/stop the light, 30-ft radius bright + 30 ft dim light", "Once per short rest as a reaction after being hit in melee, the wielder can blind its attacker", "The attack must succeed on a Con save (spell save DC) or be blinded until its next turn ends" ]), additional : "simple/martial weapon; requires attunement", prereqeval : function(v) { return classes.known["artificer-ua2"].level >= 8; }, eval : function (lvl, chc) { AddMagicItem("Radiant Weapon"); }, removeeval : function (lvl, chc) { var loc = CurrentMagicItems.known.indexOf("radiant weapon"); if (loc == -1) return; MagicItemClear(loc + 1, true); } }, "resistant armor (prereq: level 8 artificer)" : { name : "Resistant Armor", source : [["UA:A2", 10]], description : desc([ "The armor gives its wearer resistance to one type of damage, chosen at the time of infusion", "Choose from: acid, cold, fire, force, lightning, necrotic, poison, psychic, radiant, or thunder" ]), additional : "suit of armor; requires attunement", prereqeval : function(v) { return classes.known["artificer-ua2"].level >= 8; }, eval : function (lvl, chc) { AddMagicItem("Armor of Resistance"); }, removeeval : function (lvl, chc) { var loc = CurrentMagicItems.known.indexOf("armor of resistance"); if (loc == -1) return; MagicItemClear(loc + 1, true); } }, "returning weapon" : { name : "Returning Weapon", source : [["UA:A2", 10]], description : "After being used for a ranged attack, the weapon returns immediately; +1 magical bonus", additional : "simple/martial weapon with the thrown property", eval : function (lvl, chc) { AddMagicItem("Returning Weapon"); }, removeeval : function (lvl, chc) { var loc = CurrentMagicItems.known.indexOf("returning weapon"); if (loc == -1) return; MagicItemClear(loc + 1, true); } } }, "tool expertise" : { name : "Tool Expertise", source : [["UA:A2", 5]], minlevel : 3, description : " [expertise with all tools I am proficient with]", skillstxt : "expertise with all tools I am proficient with", eval : function () { Checkbox('Too Exp', true); }, removeeval : function () { Checkbox('Too Exp', false); } }, "subclassfeature3" : { name : "Artificer Specialist", source : [["UA:A2", 5]], minlevel : 3, description : desc([ 'Choose a specialism and put it in the "Class" field on the first page', "Choose either alchemist or artillerist" ]) }, "arcane armament" : { name : "Arcane Armament", source : [["UA:A2", 5]], minlevel : 5, description : " [as Extra Attack, but only with magic weapon]" }, "the right cantrip for the job" : { name : "The Right Cantrip for the Job", source : [["UA:A2", 5]], minlevel : 10, description: desc("Whenever I finish a short/long rest, I can swap one of my artificer cantrips for another") }, "spell-storing item" : { name : "Spell-Storing Item", source : [["UA:A2", 5]], minlevel : 18, description : desc([ "When I finish a long rest, I can infuse a 1st-/2nd-level artificer spell into an item I touch", "It must be a simple or martial weapon, or something I can use as a spellcasting focus", "The spell must have a casting time of 1 action, but I need not have it prepared", "A creature holding an infused item can use an action to cast the spell, using my abilities", "The item can produce the spell a number of times equal to twice my Int mod (min 2)" ]) }, "soul of artifice" : { name : "Soul of Artifice", source : [["UA:A2", 6]], minlevel : 20, description : " [+1 on all saves per attuned magic item (max 6)]", savetxt : { text : ["+1 to all saves per attuned magic item"] } } } }; // Add the Alchemist specialism AddSubClass("artificer-ua2", "alchemist", { regExpSearch : /^(?=.*alchemist)(?!.*wizard).*$/i, subname : "Alchemist", fullname : "Alchemist", source : [["UA:A2", 6]], features : { "subclassfeature3" : { name : "Tools of the Trade", source : [["UA:A2", 6]], minlevel : 3, description: desc("I can craft magical potions for half the usual gold and in a quarter of the usual time"), additional : "alchemist's and herbalism kit proficiency", toolProfs : ["Alchemist's supplies", "Herbalism kit"], eval : function () { AddToInv("gear", "l", "Alchemist's supplies", "", 8); AddToInv("gear", "l", "Herbalism kit", "", 3); }, spellcastingExtra : ["purify food and drink", "ray of sickness", "melf's acid arrow", "web", "create food and water", "stinking cloud", "blight", "death ward", "cloudkill", "raise dead"] }, "subclassfeature3.1" : { name : "Alchemical Homunculus", source : [["UA:A2", 6]], minlevel : 3, description : desc([ "When I end a long rest, I can use alchemist's supplies to create an alchemical homunculus", "I determine its appearance; I can have only 1 at a time, making a new one kills the older", "It obeys my commands, is friendly to my allies and I, and acts on my initiative, after me", "Unless I use a bonus action to command it, it only takes the Dodge action on its turn", "It can only do acidic spittle, alchemical salve, or take the Dash, Disengage, or Help action", "Its HP maximum is equal to five times my artificer level + my Intelligence modifier", "If it dies, I can, as an action within the hour, spend a spell slot to restore it to its full HP" ]), action : [["action", " (restore)"], ["bonus action", " (command)"]], eval : function () { var AScompA = isTemplVis('AScomp') ? What('Template.extras.AScomp').split(',') : false; var prefix = false; if (AScompA) { for (var a = 1; a < AScompA.length; a++) { if (!What(AScompA[a] + 'Comp.Race')) { prefix = AScompA[a]; break; } } } if (!prefix) prefix = DoTemplate('AScomp', 'Add'); Value(prefix + 'Comp.Race', "Alchemical Homunculus"); Value(prefix + 'Comp.Type', "Construct"); AddSkillProf("Perception", true, false, false, 2, prefix); }, removeeval : function () { var AScompA = isTemplVis('AScomp') ? What('Template.extras.AScomp').split(',') : false; if (!AScompA) return; for (var a = 1; a < AScompA.length; a++) { if (What(AScompA[a] + 'Comp.Race').toLowerCase().indexOf("alchemical homunculus") !== -1) { DoTemplate("AScomp", "Remove", AScompA[a], true); } } }, changeeval : function (lvlA) { var AScompA = isTemplVis('AScomp') ? What('Template.extras.AScomp').split(',') : false; if (!AScompA) return; for (var a = 1; a < AScompA.length; a++) { if (What(AScompA[a] + 'Comp.Race').toLowerCase().indexOf("alchemical homunculus") !== -1) { Value(AScompA[a] + "Comp.Use.HP.Max", Math.round(lvlA[1] * 5 + What("Int Mod"))); Value(AScompA[a] + "Comp.Use.Proficiency Bonus", ProficiencyBonusList[classes.totallevel - 1]); } } } }, "subclassfeature6" : { name : "Alchemical Mastery", source : [["UA:A2", 7]], minlevel : 6, description : desc([ "I can enhance the spell I cast when I use alchemist's supplies as my spellcasting focus", "I then add my Int mod to one die roll for dealing acid or poison damage, or restoring HP" ]), calcChanges : { atkCalc : [ function (fields, v, output) { if (v.thisWeapon[3] && v.thisWeapon[4].indexOf("artificer-ua2") !== -1 && (/poison|acid/i).test(fields.Damage_Type)) { output.extraDmg += Math.max(Number(What("Int Mod")), 1); } }, "Artificer spells that deal poison or acid damage which I cast while using alchemist's supplies as my spellcasting focus, have my Intelligence modifier (min 1) added to one damage die roll." ], spellAdd : [ function (spellKey, spellObj, spName) { if (spellObj.psionic || spName !== "artificer" || (/color spray|sleep/).test(spellKey)) return; var startDescr = spellObj.description; var toAdd = Math.max(Number(What("Int Mod")), 1); if ((/healing spirit|aura of vitality/i).test(spellKey)) { spellObj.description += " (+" + toAdd + " once)"; return true; } else if (genericSpellDmgEdit(spellKey, spellObj, "acid|poison", toAdd < 2 ? 1 : "Int", true, true)) { return true; } else { // other healing spells var testRegex = /(.*?\d+d\d+)(\+\d+)?((\+\d+d?\d*\/\d?SL)?(\+spell(casting)? (ability )?mod(ifier)?|(\+|-)\d+ \(.{3}\))? hp.*)/i; var theMatch = spellObj.description.match(testRegex); if (!theMatch) return false; if (theMatch[2]) { var theMid = Number(theMatch[2]) + toAdd; if (theMid > -1) theMid = "+" + theMid; } else { var theMid = "+" + toAdd; } spellObj.description = spellObj.description.replace(testRegex, "$1" + theMid + "$3"); } return startDescr !== spellObj.description; }, "Artificer spells I cast using alchemist's supplies as my spellcasting focus, have my Intelligence modifier (min 1) added to one die rolled for healing, poison damage, or acid damage." ] } }, "subclassfeature6.1" : { name : "Alchemical Mastery: Lesser Restoration", source : [["UA:A2", 7]], minlevel : 6, description: desc("I can cast Lesser Restoration without a spell slot if I use alchemist's supplies as a focus"), usages : "Int mod per ", recovery : "long rest", usagescalc : "event.value = Math.max(1, What('Int Mod'));", spellcastingBonus : [{ name : "Alchemical Mastery", spells : ["lesser restoration"], selection : ["lesser restoration"], firstCol : "Sp" }], spellChanges : { "lesser restoration" : { components : "V,S,M\u0192", compMaterial : "Alchemist's supplies", changes : "When using my Alchemical Mastery class feature, I can cast Lesser Restoration a number of times per long rest equal to my Intelligence modifier. To do so, I have to use alchemist's supplies as my spellcasting focus" } } }, "subclassfeature14" : { name : "Chemical Savant", source : [["UA:A2", 7]], minlevel : 14, description : desc([ "I always have resistance to acid and poison damage and immunity to being poisoned", "Once per long rest, I can cast Greater Restoration without a spell slot or material comp.", "To do so, I have to use alchemist's supplies as my spellcasting focus" ]), dmgres : ["Acid", "Poison"], savetxt : { immune : ["poisoned condition"] }, usages : 1, recovery : "long rest", additional : "Greater Restoration", spellcastingBonus : [{ name : "Chemical Savant", spells : ["greater restoration"], selection : ["greater restoration"], firstCol : "oncelr" }], spellChanges : { "greater restoration" : { components : "V,S,M\u0192", compMaterial : "Alchemist's supplies", description : "Reduce exhaustion 1 lvl or end charm, petrify, curse, one ability score reduction, or max HP reduction", changes : "When using my Chemical Savant class feature and alchemist's supplies as my spellcasting focus, I can cast Greater Restoration once per long rest without using a spell slot or requiring material components." } } } } }); // Add the Alchemist's Alchemical Homunculus CreatureList["alchemical homunculus-ua"] = { name : "Alchemical Homunculus", source : [["UA:A3", 7], ["UA:A2", 6]], size : 5, type : "Construct", alignment : "Neutral", ac : 13, hp : 5, hd : [], speed : "20 ft, fly 30 ft", scores : [4, 15, 11, 10, 10, 7], skills : { "perception" : 4, "stealth" : 4 }, damage_immunities : "acid, poison", condition_immunities : "charmed, exhaustion, poisoned", senses : "Darkvision 60 ft", passivePerception : 10, languages : "understands the languages of its creator but can't speak", challengeRating : "0", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Acidic Spittle", ability : 2, damage : [1, 6, "acid"], range : "30 ft", modifiers : ["", "Prof-2"] }], features : [{ name : "Creator", description : "The homunculus obeys the commands of its creator and has the same proficiency bonus. It takes its turn immediately after its creator, on the same initiative count. It only takes the Dodge action, unless its creator takes a bonus action to command to do otherwise, in which case it can only take the Acidic Spittle, Alchemical Salve, Dash, Disengage, or Help action." }, { name : "Healing", description : "The homunculus regains 2d6 HP whenever the Mending spell is cast on it." }], actions : [{ name : "Alchemical Salve (3/Day)", description : "The homunculus produces a salve and touches one creature designated by its creator, granting it one of the following magical benefits chosen by its creator:" + "\n \u2022 Buoyancy: The target gains a flying speed of 10 ft for 10 minutes." + "\n \u2022 Inspiration: The target feels giddy and effective, gaining advantage on certain ability checks in the next hour. The target chooses the checks before or after rolling. The magic runs out after the target has used it on a number of checks equal to the Intelligence modifier of the homunculus' creator (minimum of 1)." + "\n \u2022 Resilience: The target gains a number of temporary hit points equal to 2d6 + the Intelligence modifier of the homunculus' creator." }] } // Add the Artillerist specialism AddSubClass("artificer-ua2", "artillerist", { regExpSearch : /^(?=.*artillerist)(?!.*wizard).*$/i, subname : "Artillerist", fullname : "Artillerist", source : [["UA:A2", 7]], features : { "subclassfeature3" : { name : "Tools of the Trade", source : [["UA:A2", 7]], minlevel : 3, description : desc([ "I can use rods, wands, and staffs as a spellcasting focus", "I can craft magical wands for half the usual gold and in a quarter of the usual time" ]), additional : "proficiency with smith's \u0026 woodcarver's tools", toolProfs : ["Smith's tools", "Woodcarver's tools"], eval : function () { AddToInv("gear", "l", "Smith's tools", "", 8); AddToInv("gear", "l", "Woodcarver's tools", "", 5); AddToInv("gear", "r", "Wooden wand", "", 1); }, spellcastingExtra : ["shield", "thunderwave", "scorching ray", "shatter", "fireball", "wind wall", "ice storm", "wall of fire", "cone of cold", "wall of force"] }, "subclassfeature3.1" : { name : "Arcane Turret", source : [["UA:A2", 7]], minlevel : 3, description : desc([ "As an action, I can use smith's tools to summon a Medium turret within 5 ft of me", "I can do so a number of times per long rest for free, or by spending a spell slot", "If I create more turrets than I can have active, the oldest one disappears", "When I summon one, I decide what type it is: flamethrower, force ballista, or defender", "It disappears after 10 minutes, when reduced to 0 HP, or if I dismiss it as an action", "When within 60 ft of it, I can activate it as a bonus action, or detonate it as an action", "See the companion page for how the different types of turrets operate" ]), usages : levels.map(function(n) { return n < 3 ? "" : n < 14 ? 1 : 2; }), recovery : "long rest", additional : levels.map(function(n) { return n < 3 ? "" : n < 14 ? "max 1 active turret" : "max 2 active turrets"; }), action : [["action", " (summon/detonate)"], ["bonus action", " (command)"]], eval : function () { var AScompA = isTemplVis('AScomp') ? What('Template.extras.AScomp').split(',') : false; var prefix = false; if (AScompA) { for (var a = 1; a < AScompA.length; a++) { if (!What(AScompA[a] + 'Comp.Race')) { prefix = AScompA[a]; break; } } } if (!prefix) prefix = DoTemplate('AScomp', 'Add'); Value(prefix + 'Comp.Race', "Arcane Turret"); Value(prefix + 'Comp.Type', "Construct"); }, removeeval : function () { var AScompA = isTemplVis('AScomp') ? What('Template.extras.AScomp').split(',') : false; if (!AScompA) return; for (var a = 1; a < AScompA.length; a++) { if (What(AScompA[a] + 'Comp.Race').toLowerCase().indexOf("arcane turret") !== -1) { DoTemplate("AScomp", "Remove", AScompA[a], true); } } }, changeeval : function (lvlA) { var AScompA = isTemplVis('AScomp') ? What('Template.extras.AScomp').split(',') : false; if (!AScompA) return; for (var a = 1; a < AScompA.length; a++) { if (What(AScompA[a] + 'Comp.Race').toLowerCase().indexOf("arcane turret") !== -1) { Value(AScompA[a] + "Comp.Use.HP.Max", lvlA[1] * 5); } } } }, "subclassfeature6" : { name : "Wand Prototype", source : [["UA:A2", 8]], minlevel : 6, description : desc([ "When I finish a long rest, I can use woodcarver's tools to turn a wand into a magic item", "I can only infuse a nonmagical wooden wand and it lasts until I finish my next long rest", "I infuse it with an artificer cantrip, even one I don't know, with a 1 action casting time", "As an action, I can use the wand to cast the cantrip, using my spellcasting ability", "I also add my Intelligence modifier (min 1) to any damage rolls for that cantrip" ]), additional : levels.map(function(n) { return n < 6 ? "" : "infuse wand with " + (n < 14 ? "1 cantrip" : "2 cantrips"); }), spellcastingBonus : [{ name : "Wand Prototype", "class" : "artificer-ua2", notspells : ["magic stone", "mending", "shillelagh"], // all cantrips with a casting time that is not 1 action level : [0, 0], times : levels.map(function(n) { return n < 14 ? 1 : 2; }), firstCol : "W" }], calcChanges : { atkCalc : [ function (fields, v, output) { if (!v.thisWeapon[3] || v.thisWeapon[4].indexOf("artificer-ua2") == -1) return; var artSp = CurrentSpells["artificer-ua2"]; if (!artSp || !artSp.selectBo || !v.thisWeapon[3] || v.thisWeapon[4].indexOf("artificer-ua2") == -1 || artSp.selectCa.indexOf(v.thisWeapon[3]) !== -1) return; var artBoSp = CurrentSpells["artificer-ua2"].bonus.subclassfeature6.selection; if (artBoSp && artBoSp.indexOf(v.thisWeapon[3]) !== -1) { output.die = output.die.replace(/C/g, 1).replace(/B/g, 0).replace(/0.?d\d+/g, 0); output.extraDmg += Math.max(Number(What("Int Mod")), 1); } }, "Cantrips cast through a wand infused by my Wand Prototype class feature get my Intelligence modifier added to their damage (minimum of +1) and are cast as if coming from a magic item (thus don't require any components nor scale with level)." ], spellAdd : [ function (spellKey, spellObj, spName, isDuplicate) { if (spName != "artificer-ua2" || isDuplicate || !CurrentSpells["artificer-ua2"]) return; var artBoSp = CurrentSpells["artificer-ua2"].bonus.subclassfeature6.selection; if (!artBoSp || artBoSp.indexOf(spellKey) == -1) return; spellObj.components = ""; spellObj.compMaterial = "Spells cast by magic items don't require any components."; var aSpell = SpellsList[spellKey]; if (aSpell.descriptionCantripDie) { var cDie = 1; var newCantripDieDescr = aSpell.descriptionCantripDie; while ((/`CD(-|\+|\*)?\d*`/).test(newCantripDieDescr)) { if ((/`CD(-|\+)\d+`/).test(newCantripDieDescr)) { var cDie = cDie + Number(newCantripDieDescr.replace(/.*`CD((-|\+)\d+)`.*/, "$1")); } else if ((/`CD\*\d+`/).test(newCantripDieDescr)) { var cDie = cDie * Number(newCantripDieDescr.replace(/.*`CD\*(\d+)`.*/, "$1")); } newCantripDieDescr = newCantripDieDescr.replace(/`CD(-|\+|\*)?\d*`/, cDie); } spellObj.description = newCantripDieDescr.replace(/\b0d\d+()/g, "$1").replace(/\b0d\d+/g, "0"); } genericSpellDmgEdit(spellKey, spellObj, "[\\w\\.]+", Math.max(Number(What("Int Mod")), 1), false, true) return true; }, "Cantrips cast through a wand infused by my Wand Prototype class feature get my Intelligence modifier added to their damage (minimum of +1) and are cast as if coming from a magic item (thus don't require any components nor scale with level)." ] } }, "subclassfeature14" : { name : "Fortified Position", source : [["UA:A2", 8]], minlevel : 14, description: desc("My allies and I have half cover while within 10 ft of an arcane turret I created") } } }); // Add the Artillerist's Arcane Turret CreatureList["arcane turret-ua"] = { name : "Arcane Turret", source : [["UA:A3", 10], ["UA:A2", 7]], size : 3, type : "Construct", alignment : "Neutral", ac : 18, hp : 15, hd : [0, 0], speed : "15 ft, climb 15 ft", scores : [10, 10, 10, 10, 10, 10], damage_immunities : "poison, psychic", condition_immunities : "all conditions", passivePerception : 10, languages : "", challengeRating : "1", proficiencyBonus : 0, attacksAction : 0, attacks : [{ name : "Flamethrower", ability : 4, damage : [1, 8, "fire"], range : "15-ft cone", description : "Dex save, success - half damage; Unattended flammable objects ignite", dc : true, modifiers : ["oProf+oInt", ""], abilitytodamage : false, tooltip : "The turret exhales fire in an adjacent 15-foot cone that the creator designate. Each creature in that area must make a Dexterity saving throw against the creator's spell save DC, taking 1d8 fire damage on a failed save or half as much damage on a successful one. The fire ignites any flammable objects in the area that aren't being worn or carried." }, { name : "Force Ballista", ability : 4, damage : [2, 8, "force"], range : "120 ft", description : "Creatures hit are pushed 5 ft away", modifiers : ["oProf+oInt", ""], abilitytodamage : false, tooltip : "Make a range spell attack, originating from the turret, at one creature or object within 120 feet of it. On a hit, the target takes 2d8 force damage, and if the target is a creature, it is pushed up to 5 feet away from the turret." }, { name : "Detonate", ability : 4, damage : [3, 6, "force"], range : "10-ft radius", description : "Dex save, success - half damage; Destroys turret", dc : true, modifiers : ["oProf+oInt", ""], abilitytodamage : false, tooltip : "Detonate destroys the turret and forces each creature within 10 feet of it to make a Dexterity saving throw against your spell save DC, taking 3d6 force damage on a failed save or half as much damage on a successful one." }], features : [{ name : "Healing", description : "The turret regains 2d6 HP whenever Mending is cast on it." }, { name : "Turret Type", description : "Upon creation, the creator decides what type of turret it is: Flamethrower, Force Ballista, or Defender. What feature/attack it can use depends on its type." }, { name : "Defender", description : "The turret emits a burst of positive energy that grants itself and each creature of the creator's choice within 10 feet of it a number of temporary hit points equal to 1d8 + the creator's Intelligence modifier (minimum of +1)." }], traits : [{ name : "Creator", description : "The turret only does something when activated by its creator. It uses the spell attack and spell save DC of its creator, and has five times the creator's artificer level in HP." }, { name : "Activation", description : "The creator of the turret can activate it as a bonus action while within 60 ft of it. Once activated, the turret does as its creator wishes, move to an unoccupied space and use the action associated with its type:" + "\n \u2022 Flamethrower: use the flamethrower attack." + "\n \u2022 Force Ballista: use the force ballista attack." + "\n \u2022 Defender: use the defender feature, see the features to the left." }, { name : "Detonate", description : "The creator of the turret can use an action to detonate the turret when within 60 ft of it, see the attack section." }] }; // Add the new spell SpellsList["arcane weapon-ua"] = { name : "Arcane Weapon", classes : ["artificer-ua3", "artificer-ua2"], source : [["UA:A3", 14], ["UA:A2", 10]], level : 1, school : "Trans", time : "1 bns", range : "Self", components : "V,S", duration : "Conc, 1 h", description : "1 wea +1d6 dmg (acid, cold, fire, lightn., poison, or thunder); 1 bns change dmg type; SL3: conc, 8 h", descriptionFull : "You channel arcane energy into one simple or martial weapon you're holding, and choose one damage type: acid, cold, fire, lightning, poison, or thunder. Until the spell ends, you deal an extra 1d6 damage of the chosen type to any target you hit with the weapon. If the weapon isn't magical, it becomes a magic weapon for the spell's duration.\n As a bonus action, you can change the damage type, choosing from the options above." + AtHigherLevels + "When you cast this spell using a spell slot of 3rd level or higher, you can maintain your concentration on the spell for up to 8 hours. " }; // Add the new magic items if (!MagicItemsList["boots of the winding path"]) { MagicItemsList["boots of the winding path"] = { name : "Boots of the Winding Path", source : [["E:RLW", 62], ["T", 21], ["UA:A2", 9], ["UA:A3", 12]], type : "wondrous item", description : "While wearing these boots, I can teleport up to 15 ft as a bonus action to an unoccupied space I can see, as long as I occupied that space at some point during the current turn.", descriptionFull : "While wearing these boots, a creature can teleport up to 15 feet as a bonus action to an unoccupied space the creature can see. The creature must have occupied that space at some point during the current turn.", attunement : true, action : [["bonus action", ""]] } } MagicItemsList["many-handed pouch-ua"] = { name : "Many-Handed Pouch", source : [["UA:A3", 13], ["UA:A2", 9]], type : "wondrous item", description : "These 2-5 pouches all share one interdimensional space of the same capacity as a single pouch. Thus, reaching into any of the pouches allows access to the same storage space. A pouch only functions if it is within 100 miles of another pouch of its set.", descriptionFull : "The infused pouches all share one interdimensional space of the same capacity as a single pouch. Thus, reaching into any of the pouches allows access to the same storage space. A pouch operates as long as it is within 100 miles of another one of the pouches; the pouch is otherwise empty and won't accept any contents.\n If this infusion ends, the items stored in the shared space move into one of the pouches, determined at random. The rest of the pouches become empty." } MagicItemsList["radiant weapon-ua"] = { name : "Radiant Weapon", nameTest : "Radiant", source : [["UA:A3", 13], ["UA:A2", 9]], type : "weapon (any)", description : "This magic weapon adds a +1 on its attacks and damage. As a bonus action, I can start or stop it shedding light, bright in 30 ft and dim for another 30 ft. Once per short rest as a reaction when hit by a melee attack, I can blind the attacker until the end of its next turn unless it makes a Con save (my spell DC).", descriptionFull : "This magic weapon grants a +1 bonus to attack and damage rolls made with it. While holding it, the wielder can take a bonus action to cause it to shed bright light in a 30-foot radius and dim light for an additional 30 feet. The wielder can extinguish the light as a bonus action.\n As a reaction immediately after being hit by a melee attack, the wielder can cause the attacker to be blinded until the end of the attacker's next turn, unless the attacker succeeds on a Constitution saving throw against your spell save DC. Once used, this reaction can't be used again until the wielder finishes a short or long rest.", attunement : true, usages : 1, recovery : "short rest", additional : "blind attacker", action : [["bonus action", " (shed light/stop)"], ["reaction", " (after melee hit)"]], chooseGear : { type : "weapon", prefixOrSuffix : "suffix", descriptionChange : ["replace", "weapon"] }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && !v.isSpell && (/radiant/i).test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + 'Reaction to blind attacker'; } }, 'If I include the word "Radiant" in the name of a weapon, it will be treated as the magic weapon Radiant Weapon. It has +1 to hit and damage and can be used to shed light or blind an attacker.' ], atkCalc : [ function (fields, v, output) { if (v.isMeleeWeapon && !v.isSpell && (/radiant/i).test(v.WeaponTextName)) { output.magic = v.thisWeapon[1] + 1; } } ] } } if (!MagicItemsList["returning weapon"]) { MagicItemsList["returning weapon"] = { name : "Returning Weapon", nameTest : "Returning", source : [["E:RLW", 63], ["T", 23], ["UA:A3", 14], ["UA:A2", 10]], type : "weapon (any thrown)", description : "This magic weapon grants a +1 bonus to attack and damage rolls I make with it. It returns to my hand immediately after I use it to make a ranged attack.", descriptionFull : "This magic weapon grants a +1 bonus to attack and damage rolls made with it, and it returns to the wielder's hand immediately after it is used to make a ranged attack.", chooseGear : { type : "weapon", prefixOrSuffix : "suffix", descriptionChange : ["replace", "weapon"], excludeCheck : function (inObjKey, inObj) { return !(/melee/i).test(inObj.range) || !(/thrown/i).test(inObj.description); } }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && v.isWeapon && /^(?=.*returning)(?=.*\bthrown\b).*$/i.test(v.WeaponText) && /\d ?(ft|m)\.?[^)]/.test(fields.Range)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + 'Returns immediately after ranged attack'; } }, 'If I include the word "Returning" in the name of a thrown weapon, it will be treated as the magic weapon Returning Weapon. It has +1 to hit and damage and returns to my hand immediately after I use it to make a ranged attack.' ], atkCalc : [ function (fields, v, output) { if (v.isWeapon && /^(?=.*returning)(?=.*\bthrown\b).*$/i.test(v.WeaponText) && /\d ?(ft|m)\.?[^)]/.test(fields.Range)) { output.magic = v.thisWeapon[1] + 1; } }, '' ] } } } // Set the Artificer class spell list var UAA2_SetArtificerSpells = function(){ var artSp = [ "acid splash", "dancing lights", "fire bolt", "guidance", "light", "mage hand", "mending", "message", "poison spray", "prestidigitation", "ray of frost", "resistance", "shocking grasp", "spare the dying", "thorn whip", // level 1 "alarm", "cure wounds", "detect magic", "disguise self", "expeditious retreat", "false life", "grease", "identify", "jump", "longstrider", "sanctuary", "shield of faith", // level 2 "aid", "alter self", "arcane lock", "blur", "continual flame", "darkvision", "enhance ability", "enlarge/reduce", "heat metal", "invisibility", "lesser restoration", "levitate", "magic mouth", "magic weapon", "protection from poison", "rope trick", "see invisibility", "spider climb", // level 3 "blink", "dispel magic", "elemental weapon", "fly", "gaseous form", "glyph of warding", "haste", "protection from energy", "revivify", "water breathing", "water walk", // level 4 "arcane eye", "fabricate", "freedom of movement", "leomund's secret chest", "mordenkainen's faithful hound", "mordenkainen's private sanctum", "otiluke's resilient sphere", "stone shape", "stoneskin", // level 5 "animate objects", "bigby's hand", "creation", "greater restoration", "wall of stone" ]; for (var a = 0; a < artSp.length; a++) { var aArtSp = SpellsList[artSp[a]]; if(aArtSp && aArtSp.classes && aArtSp.classes.indexOf("artificer-ua2") === -1) aArtSp.classes.push("artificer-ua2"); }; var artMi = [ ["alchemy jug"], ["bag of holding"], ["cap of water breathing"], ["cloak of the manta ray"], ["goggles of night"], ["lantern of revealing"], ["rope of climbing"], ["sending stones"], ["wand of magic detection"], ["wand of secrets"], ["boots of elvenkind", 12], ["boots of striding and springing", 12], ["boots of the winterlands", 12], ["bracers of archery", 12], ["brooch of shielding", 12], ["cloak of elvenkind", 12], ["cloak of protection", 12], ["eyes of charming", 12], ["eyes of the eagle", 12], ["gauntlets of ogre power", 12], ["gloves of missile snaring", 12], ["gloves of swimming and climbing", 12], ["gloves of thievery", 12], ["hat of disguise", 12], ["headband of intellect", 12], ["helm of telepathy", 12], ["medallion of thoughts", 12], ["periapt of wound closure", 12], ["pipes of haunting", 12], ["pipes of the sewers", 12], ["quiver of ehlonna", 12], ["ring of jumping", 12], ["ring of mind shielding", 12], ["ring of water walking", 12], ["slippers of spider climbing", 12], ["winged boots", 12], ["amulet of health", 16], ["belt of giant strength", 16, "hill (str 21, rare)"], ["boots of levitation", 16], ["boots of speed", 16], ["bracers of defense", 16], ["cloak of the bat", 16], ["dimensional shackles", 16], ["gem of seeing", 16], ["horn of blasting", 16], ["ring of free action", 16], ["ring of protection", 16], ["ring of the ram", 16] ]; var theObj = ClassList['artificer-ua2'].features["infuse item"]; for (var a = 0; a < artMi.length; a++) { var MI0 = artMi[a][0]; var MI1 = artMi[a][1]; var MI2 = artMi[a][2]; var anArtMi = MagicItemsList[MI0]; if (!anArtMi) continue; if (MI2) { anArtMi = { name : MagicItemsList[MI0][MI2].name ? MagicItemsList[MI0][MI2].name : MagicItemsList[MI0].name + " [" + MI2.capitalize() + "]", source : MagicItemsList[MI0][MI2].source ? MagicItemsList[MI0][MI2].source : MagicItemsList[MI0].source, attunement : MagicItemsList[MI0][MI2].attunement !== undefined ? MagicItemsList[MI0][MI2].attunement : MagicItemsList[MI0].attunement } } var theI = "Replicate: " + anArtMi.name + (MI1 ? " (prereq: level " + MI1 + " artificer)" : ""); var theILC = theI.toLowerCase(); theObj[theILC] = { name : anArtMi.name, description : "", source : anArtMi.source, eval : 'AddMagicItem("' + anArtMi.name + '");', removeeval : MI2 ? 'if (CurrentMagicItems.choices.indexOf("' + MI2 + '") != -1) { MagicItemClear(CurrentMagicItems.choices.indexOf("' + MI2 + '") + 1, true); };' : 'if (CurrentMagicItems.known.indexOf("' + MI0 + '") != -1) { MagicItemClear(CurrentMagicItems.known.indexOf("' + MI0 + '") + 1, true); };' }; if (anArtMi.attunement) theObj[theILC].additional = "requires attunement"; if (MI1) theObj[theILC].prereqeval = "classes.known['artificer-ua2'].level >= " + MI1; theObj.extrachoices.push(theI); }; }(); ================================================ FILE: WotC material/ua_20190514_Artificer_dupl.js ================================================ var iFileName = "ua_20190514_Artificer.js"; RequiredSheetVersion("14.0.5-beta"); // This file adds the content from the second Unearthed Arcana: Artificer article of 2019 to MPMB's Character Record Sheet // It doesn't change anything compared to the UA article of 2019/02/28, but adds additional options: more spells, subclasses, and magic items // Define the source SourceList["UA:A3"] = { name : "Unearthed Arcana: Artificer 2019v2", abbreviation : "UA:A3", group : "Unearthed Arcana", url : "https://media.wizards.com/2019/dnd/downloads/UA-Artificer2-2019.pdf", date : "2019/05/14" }; // Adds a new class, the Artificer, with 4 subclasses ClassList['artificer-ua3'] = { regExpSearch : /^(?=.*artificer)(?!.*wizard).*$/i, name : "Artificer", source : [["UA:A3", 1]], primaryAbility : "Intelligence", abilitySave : 4, prereqs : "Intelligence 13", improvements : [0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5, 5], die : 8, saves : ["Con", "Int"], skillstxt : { primary : "Choose two from Arcana, History, Investigation, Medicine, Nature, Perception, and Sleight of Hand" }, toolProfs : { primary : [["Thieves' tools", "Dex"], "Tinker's tools", ["Artisan's tools", 1]], secondary : [["Thieves' tools", "Dex"], "Tinker's tools"] }, armorProfs : { primary : [true, true, false, true], secondary : [true, true, false, true] }, weaponProfs : { primary : [true, false, ["hand crossbow", "heavy crossbow"]] }, equipment : "Artificer starting equipment:" + "\n \u2022 Any two simple weapons;" + "\n \u2022 A light crossbow and 20 bolts;" + "\n \u2022 Studded leather armor -or- scale mail;" + "\n \u2022 Thieves' tools and a dungeoneer's pack;" + "\n\nAlternatively, choose 5d4 \xD7 10 gp worth of starting equipment instead of both the class' and the background's starting equipment.", subclasses : ["Artificer Specialist", []], subclassGainedLevel : 3, attacks : [1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], spellcastingFactor : 2, spellcastingFactorRoundupMulti : true, // 2019v2 spellcastingKnown : { cantrips : [2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4], spells : "list", prepared : true }, features : { "magical tinkering" : { name : "Magical Tinkering", source : [["UA:A3", 2]], minlevel : 1, description : desc([ "As an action, I use thieves' or an artisan's tools to give max 1 property to a tiny object:", " \u2022 Emit light (5-ft radius bright light, equal dim light), an odor, or a nonverbal sound", " \u2022 Static visual effect on one of its surfaces; picture, 25 words, shapes, or a mix of those", "If I instill a property in more objects than I can have active, the oldest loses its property" ]), additional : "Intelligence modifier of active objects", action : [["action", " (add/remove)"]], extraname : "Artificer 2", "infuse item" : { name : "Infuse Item", source : [["UA:A3", 5]], description : desc([ "When I finish a long rest, I can turn nonmagical objects into magic items using my infusions", "I can attune to it immediately; If I infuse too many items, the oldest loses its magic", "The infusion lasts until my death + my Int mod in days, but ends if I unlearn the infusion", "Each infusion can only be used in one item at a time and only in appropriate items", "I can use an infused item as a spellcasting focus" ]), additional : levels.map(function (n) { return n < 2 ? "" : (n < 4 ? 3 : n < 7 ? 4 : n < 11 ? 5 : n < 15 ? 6 : n < 19 ? 7 : 8) + " infusions known; max " + (n < 6 ? 2 : n < 11 ? 3 : n < 16 ? 4 : 5) + " infused items"; }) }, autoSelectExtrachoices : [{ extrachoice : "infuse item", minlevel : 2 }] }, "spellcasting" : { name : "Spellcasting", source : [["UA:A3", 3]], minlevel : 1, description : desc([ "I can cast prepared artificer cantrips/spells, using Intelligence as my spellcasting ability", "To cast, I must use thieves' or artisan's tools I'm proficient with as a spellcasting focus", "I can cast my prepared artificer spells as rituals if they have the ritual tag", "Whenever I gain an artificer level, I can swap one artificer cantrip I know for another" ]), additional : levels.map(function (n, idx) { return [2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4][idx] + " cantrips known"; }), calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { if (!spellObj.psionic && spName == "artificer-ua3") { spellObj.compMaterial = (spellObj.compMaterial ? spellObj.compMaterial + "; " : "") + "My artificer spellcasting focus: thieves' tools, artisan's tools I'm proficient with, " + (classes.known["artificer-ua3"].subclass.indexOf("artillerist") !== -1 ? "rod, staff, wand, " : "") + "or an item infused by me."; if (GetFeatureChoice("classes", "artificer-ua3", "spellcasting", true).indexOf("don't change component column on spell sheet") != -1) { // do nothing if set to do so } else if (!spellObj.components) { spellObj.components = "M\u0192"; } else if (spellObj.components.indexOf("M") == -1) { spellObj.components += ",M\u0192"; } else if ((/M([^\u0192\u2020]|$)/).test(spellObj.components)) { spellObj.components = spellObj.components.replace("M", "M\u0192"); } return true; } }, "My artificer spells always require me to use a spellcasting focus: thieves' tools, artisan's tools I'm proficient with, or an item infused by me." ] }, extrachoices : ["Don't change component column on spell sheet"], extraname : "Artificer Spellcasting", "don't change component column on spell sheet" : { name : "[Meta] Don't alter spell sheets", source : [["UA:A3", 3]], description: desc("The automation will not add M\u0192 to each artificer spell on the generated spell sheets") } }, "infuse item" : { name : "Infuse Item", source : [["UA:A3", 5]], minlevel : 2, description : desc([ 'Use the "Choose Feature" button above to add Artificer Infusions to the third page', "Whenever I gain an artificer level, I can replace an infusion I know with another" ]), additional : levels.map(function (n) { return n < 2 ? "" : (n < 4 ? 3 : n < 7 ? 4 : n < 11 ? 5 : n < 15 ? 6 : n < 19 ? 7 : 8) + " infusions known; max " + (n < 6 ? 2 : n < 11 ? 3 : n < 16 ? 4 : 5) + " infused items"; }), extraname : "Artificer Infusion", extrachoices : ["Boots of the Winding Path (prereq: level 4 artificer)", "Enhanced Defense", "Enhanced Weapon", "Enhanced Wand", "Many-Handed Pouch (prereq: level 4 artificer)", "Radiant Weapon (prereq: level 8 artificer)", "Repeating Shot", "Repulsion Shield (prereq: level 8 artificer)", "Resistant Armor (prereq: level 8 artificer)", "Returning Weapon"], extraTimes : levels.map(function (n) { return n < 2 ? 0 : n < 4 ? 3 : n < 7 ? 4 : n < 11 ? 5 : n < 15 ? 6 : n < 19 ? 7 : 8; }), "boots of the winding path (prereq: level 4 artificer)" : { name : "Boots of the Winding Path", source : [["UA:A3", 12]], description : desc([ "The wearer can use a bonus action to teleport up to 15 ft to an unoccupied space it can see", "It must be a space that the wearer had occupied some time during the current turn" ]), additional : "pair of boots; requires attunement", prereqeval : function(v) { return classes.known["artificer-ua3"].level >= 4; }, eval : function (lvl, chc) { AddMagicItem("Boots of the Winding Path"); }, removeeval : function (lvl, chc) { var loc = CurrentMagicItems.known.indexOf("boots of the winding path"); if (loc == -1) return; MagicItemClear(loc + 1, true); } }, "enhanced defense" : { name : "Enhanced Defense", source : [["UA:A3", 12]], description : "", additional : levels.map(function (n) { return "armor/shield; +" + (n < 12 ? 1 : 2) + " magical"; }), eval : function (lvl, chc) { AddMagicItem("Armor +" + (classes.known["artificer-ua3"].level < 12 ? 1 : 2)); }, removeeval : function (lvl, chc) { var loc = CurrentMagicItems.known.indexOf("armor, +1, +2, or +3"); if (loc == -1) return; MagicItemClear(loc + 1, true); } }, "enhanced wand" : { // 2019v2 name : "Enhanced Wand", source : [["UA:A3", 12]], description : "", additional : levels.map(function (n) { return "Wand of the War Mage +" + (n < 12 ? 1 : 2) + " magical"; }), eval : function (lvl, chc) { AddMagicItem("Wand of the War Mage +" + (classes.known["artificer-ua3"].level < 12 ? 1 : 2)); }, removeeval : function (lvl, chc) { var loc = CurrentMagicItems.known.indexOf("wand of the war mage, +1, +2, or +3"); if (loc == -1) return; MagicItemClear(loc + 1, true); } }, "enhanced weapon" : { name : "Enhanced Weapon", source : [["UA:A3", 12]], description : "", additional : levels.map(function (n) { return "simple/martial weapon; +" + (n < 12 ? 1 : 2) + " magical"; }), eval : function (lvl, chc) { AddMagicItem("Weapon +" + (classes.known["artificer-ua3"].level < 12 ? 1 : 2)); }, removeeval : function (lvl, chc) { var loc = CurrentMagicItems.known.indexOf("weapon, +1, +2, or +3"); if (loc == -1) return; MagicItemClear(loc + 1, true); } }, "many-handed pouch (prereq: level 4 artificer)" : { name : "Many-Handed Pouch", source : [["UA:A3", 13]], description : desc([ "The infused pouches all share one interdimensional space the size of a single pouch", "Thus, reaching into any of the pouches allows access to the same storage space", "A pouch only functions if it is within 100 miles of another infused pouch", "When the infusion ends, the contents is moved to one of the pouches, chosen randomly" ]), additional : "2-5 pouches", prereqeval : function(v) { return classes.known["artificer-ua3"].level >= 4; }, eval : function (lvl, chc) { AddMagicItem("Many-Handed Pouch"); }, removeeval : function (lvl, chc) { var loc = CurrentMagicItems.known.indexOf("many-handed pouch"); if (loc == -1) return; MagicItemClear(loc + 1, true); } }, "radiant weapon (prereq: level 8 artificer)" : { name : "Radiant Weapon", source : [["UA:A3", 13]], description : desc([ "The weapon has a +1 bonus to attack and damage rolls made with it and it sheds light", "As a bonus action, its wielder can start/stop the light, 30-ft radius bright + 30 ft dim light", "Once per short rest as a reaction after being hit in melee, the wielder can blind its attacker", "The attack must succeed on a Con save (spell save DC) or be blinded until its next turn ends" ]), additional : "simple/martial weapon; requires attunement", prereqeval : function(v) { return classes.known["artificer-ua3"].level >= 8; }, eval : function (lvl, chc) { AddMagicItem("Radiant Weapon"); }, removeeval : function (lvl, chc) { var loc = CurrentMagicItems.known.indexOf("radiant weapon") != -1 ? CurrentMagicItems.known.indexOf("radiant weapon") : CurrentMagicItems.known.indexOf("radiant weapon-ua"); if (loc == -1) return; MagicItemClear(loc + 1, true); } }, "repeating shot" : { // 2019v2 name : "Repeating Shot", source : [["UA:A3", 13]], description : desc([ "The weapon requiring ammunition has a +1 bonus to attack and damage rolls made with it", "It magically produces one piece of ammunition whenever it is used to make a ranged attack", "Thus, it doesn't require ammunition and ignores the loading property if it has it" ]), additional : "weapon with ammo; requires attunement", eval : function (lvl, chc) { AddMagicItem("Repeating Shot"); }, removeeval : function (lvl, chc) { var loc = CurrentMagicItems.known.indexOf("repeating shot"); if (loc == -1) return; MagicItemClear(loc + 1, true); } }, "repulsion shield (prereq: level 8 artificer)" : { // 2019v2 name : "Repulsion Shield", source : [["UA:A3", 14]], description : desc([ "The shield gives its wearer an additional +1 bonus to AC", "As a reaction when hit by a melee attack, the wearer can push their attacker up to 15 ft", "This reaction can only be used once per short or long rest" ]), additional : "shield; requires attunement", prereqeval : function(v) { return classes.known["artificer-ua3"].level >= 8; }, eval : function (lvl, chc) { AddMagicItem("Repulsion Shield"); }, removeeval : function (lvl, chc) { var loc = CurrentMagicItems.known.indexOf("repulsion shield") != -1 ? CurrentMagicItems.known.indexOf("repulsion shield") : CurrentMagicItems.known.indexOf("repulsion shield-ua"); if (loc == -1) return; MagicItemClear(loc + 1, true); } }, "resistant armor (prereq: level 8 artificer)" : { name : "Resistant Armor", source : [["UA:A3", 14]], description : desc([ "The armor gives its wearer resistance to one type of damage, chosen at the time of infusion", "Choose from: acid, cold, fire, force, lightning, necrotic, poison, psychic, radiant, or thunder" ]), additional : "suit of armor; requires attunement", prereqeval : function(v) { return classes.known["artificer-ua3"].level >= 8; }, eval : function (lvl, chc) { AddMagicItem("Armor of Resistance"); }, removeeval : function (lvl, chc) { var loc = CurrentMagicItems.known.indexOf("armor of resistance"); if (loc == -1) return; MagicItemClear(loc + 1, true); } }, "returning weapon" : { name : "Returning Weapon", source : [["UA:A3", 14]], description : "After being used for a ranged attack, the weapon returns immediately; +1 magical bonus", additional : "simple/martial weapon with the thrown property", eval : function (lvl, chc) { AddMagicItem("Returning Weapon"); }, removeeval : function (lvl, chc) { var loc = CurrentMagicItems.known.indexOf("returning weapon"); if (loc == -1) return; MagicItemClear(loc + 1, true); } } }, "tool expertise" : { name : "Tool Expertise", source : [["UA:A3", 5]], minlevel : 3, description : " [expertise with all tools I am proficient with]", skillstxt : "expertise with all tools I am proficient with", eval : function () { Checkbox('Too Exp', true); }, removeeval : function () { Checkbox('Too Exp', false); } }, "subclassfeature3" : { name : "Artificer Specialist", source : [["UA:A3", 5]], minlevel : 3, description : desc([ 'Choose a specialism and put it in the "Class" field on the first page', "Choose either alchemist, archivist, artillerist, or battle smith" ]) }, "arcane armament" : { name : "Arcane Armament", source : [["UA:A3", 6]], minlevel : 5, description : " [as Extra Attack, but only with magic weapon]" }, "the right cantrip for the job" : { name : "The Right Cantrip for the Job", source : [["UA:A3", 6]], minlevel : 10, description: desc("Whenever I finish a short/long rest, I can swap one of my artificer cantrips for another") }, "spell-storing item" : { name : "Spell-Storing Item", source : [["UA:A3", 6]], minlevel : 18, description : desc([ "When I finish a long rest, I can infuse a 1st-/2nd-level artificer spell into an item I touch", "It must be a simple or martial weapon, or something I can use as a spellcasting focus", "The spell must have a casting time of 1 action, but I need not have it prepared", "A creature holding an infused item can use an action to cast the spell, using my abilities", "The item can produce the spell a number of times equal to twice my Int mod (min 2)" ]) }, "soul of artifice" : { name : "Soul of Artifice", source : [["UA:A3", 6]], minlevel : 20, description : " [+1 on all saves per attuned magic item (max 6)]", savetxt : { text : ["+1 to all saves per attuned magic item"] } } }, artificerCompFunc : { add : function (compName) { var AScompA = isTemplVis('AScomp') ? What('Template.extras.AScomp').split(',') : false; var prefix = false; if (AScompA) { for (var a = 1; a < AScompA.length; a++) { if (!What(AScompA[a] + 'Comp.Race')) { prefix = AScompA[a]; break; } } } if (!prefix) prefix = DoTemplate('AScomp', 'Add'); Value(prefix + 'Comp.Race', compName); Value(prefix + 'Comp.Type', "Construct"); var changeMsg = "The " + compName + " has been added to the companion page at page number " + (tDoc.getField(prefix + 'Comp.Race').page + 1); CurrentUpdates.types.push("notes"); if (!CurrentUpdates.notesChanges) { CurrentUpdates.notesChanges = [changeMsg]; } else { CurrentUpdates.notesChanges.push(changeMsg); } return prefix; }, remove : function (compName) { var AScompA = isTemplVis('AScomp') ? What('Template.extras.AScomp').split(',') : false; if (!AScompA) return; compName = compName.toLowerCase(); for (var a = 1; a < AScompA.length; a++) { if (What(AScompA[a] + 'Comp.Race').toLowerCase().indexOf(compName) !== -1) { DoTemplate("AScomp", "Remove", AScompA[a], true); } } }, update : function (compName, newHP, newProf) { var AScompA = isTemplVis('AScomp') ? What('Template.extras.AScomp').split(',') : false; var prefixes = []; if (!AScompA) return prefixes; compName = compName.toLowerCase(); for (var a = 1; a < AScompA.length; a++) { if (What(AScompA[a] + 'Comp.Race').toLowerCase().indexOf(compName) !== -1) { if (newHP !== undefined) Value(AScompA[a] + "Comp.Use.HP.Max", newHP); if (newProf !== undefined) Value(AScompA[a] + "Comp.Use.Proficiency Bonus", newProf); prefixes.push(AScompA[a]); } } return prefixes; } } }; // Add the Alchemist specialism AddSubClass("artificer-ua3", "alchemist", { regExpSearch : /^(?=.*alchemist)(?!.*wizard).*$/i, subname : "Alchemist", fullname : "Alchemist", source : [["UA:A3", 6]], features : { "subclassfeature3" : { name : "Tools of the Trade", source : [["UA:A3", 6]], minlevel : 3, description: desc("I can craft magical potions for half the usual gold and in a quarter of the usual time"), additional : "alchemist's and herbalism kit proficiency", toolProfs : ["Alchemist's supplies", "Herbalism kit"], eval : function () { AddToInv("gear", "l", "Alchemist's supplies", "", 8); AddToInv("gear", "l", "Herbalism kit", "", 3); }, spellcastingExtra : ["purify food and drink", "ray of sickness", "melf's acid arrow", "web", "create food and water", "stinking cloud", "blight", "death ward", "cloudkill", "raise dead"] }, "subclassfeature3.1" : { name : "Alchemical Homunculus", source : [["UA:A3", 6]], minlevel : 3, description : desc([ "When I end a long rest, I can use alchemist's supplies to create an alchemical homunculus", "I determine its appearance; I can have only 1 at a time, making a new one kills the older", "It obeys my commands, is friendly to my allies and I, and acts on my initiative, after me", "Unless I use a bonus action to command it, it only takes the Dodge action on its turn", "It can only do acidic spittle, alchemical salve, or take the Dash, Disengage, or Help action", "Its HP maximum is equal to five times my artificer level + my Intelligence modifier", "If it dies, I can, as an action within the hour, spend a spell slot to restore it to its full HP" ]), action : [["action", " (restore)"], ["bonus action", " (command)"]], eval : function () { var prefix = ClassList['artificer-ua3'].artificerCompFunc.add("Alchemical Homunculus"); AddSkillProf("Perception", true, false, false, 2, prefix); }, removeeval : function () { ClassList['artificer-ua3'].artificerCompFunc.remove("alchemical homunculus"); }, changeeval : function (lvlA) { var newProf = ProficiencyBonusList[classes.totallevel - 1]; var newHP = Math.round(lvlA[1] * 5 + What("Int Mod")); ClassList['artificer-ua3'].artificerCompFunc.update("alchemical homunculus", newHP, newProf); } }, "subclassfeature6" : { name : "Alchemical Mastery", source : [["UA:A3", 7]], minlevel : 6, description : desc([ "I can enhance the spell I cast when I use alchemist's supplies as my spellcasting focus", "I then add my Int mod to one die roll for dealing acid or poison damage, or restoring HP" ]), calcChanges : { atkCalc : [ function (fields, v, output) { if (v.thisWeapon[3] && v.thisWeapon[4].indexOf("artificer-ua3") !== -1 && (/poison|acid/i).test(fields.Damage_Type)) { output.extraDmg += Math.max(Number(What("Int Mod")), 1); } }, "Artificer spells that deal poison or acid damage which I cast while using alchemist's supplies as my spellcasting focus, have my Intelligence modifier (min 1) added to one damage die roll." ], spellAdd : [ function (spellKey, spellObj, spName) { if (spellObj.psionic || spName !== "artificer" || (/color spray|sleep/).test(spellKey)) return; var startDescr = spellObj.description; var toAdd = Math.max(Number(What("Int Mod")), 1); if ((/healing spirit|aura of vitality/i).test(spellKey)) { spellObj.description += " (+" + toAdd + " once)"; return true; } else if (genericSpellDmgEdit(spellKey, spellObj, "acid|poison", toAdd < 2 ? 1 : "Int", true, true)) { return true; } else { // other healing spells var testRegex = /(.*?\d+d\d+)(\+\d+)?((\+\d+d?\d*\/\d?SL)?(\+spell(casting)? (ability )?mod(ifier)?|(\+|-)\d+ \(.{3}\))? hp.*)/i; var theMatch = spellObj.description.match(testRegex); if (!theMatch) return false; if (theMatch[2]) { var theMid = Number(theMatch[2]) + toAdd; if (theMid > -1) theMid = "+" + theMid; } else { var theMid = "+" + toAdd; } spellObj.description = spellObj.description.replace(testRegex, "$1" + theMid + "$3"); } return startDescr !== spellObj.description; }, "Artificer spells I cast using alchemist's supplies as my spellcasting focus, have my Intelligence modifier (min 1) added to one die rolled for healing, poison damage, or acid damage." ] } }, "subclassfeature6.1" : { name : "Alchemical Mastery: Lesser Restoration", source : [["UA:A3", 7]], minlevel : 6, description: desc("I can cast Lesser Restoration without a spell slot if I use alchemist's supplies as a focus"), usages : "Int mod per ", recovery : "long rest", usagescalc : "event.value = Math.max(1, What('Int Mod'));", spellcastingBonus : [{ name : "Alchemical Mastery", spells : ["lesser restoration"], selection : ["lesser restoration"], firstCol : "Sp" }], spellChanges : { "lesser restoration" : { components : "V,S,M\u0192", compMaterial : "Alchemist's supplies", changes : "When using my Alchemical Mastery class feature, I can cast Lesser Restoration a number of times per long rest equal to my Intelligence modifier. To do so, I have to use alchemist's supplies as my spellcasting focus" } } }, "subclassfeature14" : { name : "Chemical Savant", source : [["UA:A2", 7]], minlevel : 14, description : desc([ "I always have resistance to acid and poison damage and immunity to being poisoned", "Once per long rest, I can cast Greater Restoration without a spell slot or material comp.", "To do so, I have to use alchemist's supplies as my spellcasting focus" ]), dmgres : ["Acid", "Poison"], savetxt : { immune : ["poisoned condition"] }, usages : 1, recovery : "long rest", additional : "Greater Restoration", spellcastingBonus : [{ name : "Chemical Savant", spells : ["greater restoration"], selection : ["greater restoration"], firstCol : "oncelr" }], spellChanges : { "greater restoration" : { components : "V,S,M\u0192", compMaterial : "Alchemist's supplies", description : "Reduce exhaustion 1 lvl or end charm, petrify, curse, one ability score reduction, or max HP reduction", changes : "When using my Chemical Savant class feature and alchemist's supplies as my spellcasting focus, I can cast Greater Restoration once per long rest without using a spell slot or requiring material components." } } } } }); // Add the Alchemist's Alchemical Homunculus CreatureList["alchemical homunculus-ua"] = { name : "Alchemical Homunculus", source : [["UA:A3", 7], ["UA:A2", 6]], size : 5, type : "Construct", alignment : "Neutral", ac : 13, hp : 5, hd : [], speed : "20 ft, fly 30 ft", scores : [4, 15, 11, 10, 10, 7], skills : { "perception" : 4, "stealth" : 4 }, damage_immunities : "acid, poison", condition_immunities : "charmed, exhaustion, poisoned", senses : "Darkvision 60 ft", passivePerception : 10, languages : "understands the languages of its creator but can't speak", challengeRating : "0", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Acidic Spittle", ability : 2, damage : [1, 6, "acid"], range : "30 ft", modifiers : ["", "Prof-2"] }], features : [{ name : "Creator", description : "The homunculus obeys the commands of its creator and has the same proficiency bonus. It takes its turn immediately after its creator, on the same initiative count. It only takes the Dodge action, unless its creator takes a bonus action to command to do otherwise, in which case it can only take the Acidic Spittle, Alchemical Salve, Dash, Disengage, or Help action." }, { name : "Healing", description : "The homunculus regains 2d6 HP whenever the Mending spell is cast on it." }], actions : [{ name : "Alchemical Salve (3/Day)", description : "The homunculus produces a salve and touches one creature designated by its creator, granting it one of the following magical benefits chosen by its creator:" + "\n \u2022 Buoyancy: The target gains a flying speed of 10 ft for 10 minutes." + "\n \u2022 Inspiration: The target feels giddy and effective, gaining advantage on certain ability checks in the next hour. The target chooses the checks before or after rolling. The magic runs out after the target has used it on a number of checks equal to the Intelligence modifier of the homunculus' creator (minimum of 1)." + "\n \u2022 Resilience: The target gains a number of temporary hit points equal to 2d6 + the Intelligence modifier of the homunculus' creator." }] } // Add the Archivist specialism (new in 2019v2) AddSubClass("artificer-ua3", "archivist", { regExpSearch : /^(?=.*archivist)(?!.*wizard).*$/i, subname : "Archivist", fullname : "Archivist", source : [["UA:A3", 7]], features : { "subclassfeature3" : { name : "Tools of the Trade", source : [["UA:A3", 7]], minlevel : 3, description : desc([ "I gain proficiency with calligrapher's supplies and the forgery kit", "I can craft magical scrolls for half the usual gold and in a quarter of the usual time" ]), toolProfs : ["Calligrapher's supplies", "Forgery kit"], eval : function () { AddToInv("gear", "l", "Calligrapher's supplies", "", 5); AddToInv("gear", "l", "Forgery kit", "", 5); }, spellcastingExtra : ["comprehend languages", "dissonant whispers", "detect thoughts", "locate object", "hypnotic pattern", "tongues", "locate creature", "phantasmal killer", "legend lore", "modify memory"] }, "subclassfeature3.1" : { name : "Artificial Mind", source : [["UA:A3", 8]], minlevel : 3, description : desc([ "When I end a long rest, I can use calligrapher's supplies on a tiny nonmagical object", "It gain a magical keen mind; I can have only 1 at a time, creating more kills the older", "See 3rd page for the telepathic advisor and manifest mind features of this magic item", "As an action, I can use its information overload: a target in 5 ft must make an Int save", "If fail, it takes psychic damage & the 1st attack vs. it before my next turn ends has adv.", "If this deals damage, I can expend a spell slot to add damage of 1d8 + 1d8 per slot level" ]), additional : levels.map(function (n, idx) { return n < 3 ? "" : (cantripDie[idx]) + 'd8 psychic damage'; }), weaponOptions : [{ regExpSearch : /^(?=.*information)(?=.*overload).*$/i, name : "Information Overload", source : [["UA:A3", 8]], ability : 4, type : "Spell", damage : [1, 8, "psychic"], range : "5 ft of mind", description : "Int save; Fail - damage and 1st attack before my next turn ends vs. target has adv; Use spell slot for extra damage", dc : true, monkweapon : false, abilitytodamage : false, isInformationOverload : true, selectNow : true }], calcChanges : { atkAdd : [function (fields, v) { if (v.theWea.isInformationOverload && classes.known['artificer-ua3'] && classes.known['artificer-ua3'].level > 4) { fields.Damage_Die = cantripDie[classes.known['artificer-ua3'].level - 1] + "d8"; }; }] }, action : [["bonus action", "Manifest Mind (start/stop/move)"], ["action", "Manifest Mind (use its senses)"]], extraname : "Artificial Mind", "telepathic advisor" : { name : "Telepathic Advisor", source : [["UA:A3", 8]], description : desc([ "While my artificial mind is on my person, it telepathically grants me two skill proficiencies", "I can choose which skills when I create the artificial mind, depending on its raw material", "Animal raw material: two from Animal Handling, Insight, Medicine, Perception, \u0026 Survival", "Mineral raw material: two from Deception, Intimidation, Performance, and Persuasion", "Plant raw material: two from Arcana, History, Investigation, Nature, and Religion" ]), skillstxt : "I can choose two skill proficiencies based on the raw material the Artificial Mind is made from:\n - Animal raw material: two from Animal Handling, Insight, Medicine, Perception, and Survival\n - Mineral raw material: two from Deception, Intimidation, Performance, and Persuasion\n - Plant raw material: two Arcana, History, Investigation, Nature, and Religion" }, "manifest mind" : { name : "Manifest Mind", source : [["UA:A3", 8]], description : desc([ "As a bonus action, I can have the artificial mind create a spectral presence within 60 ft", "This requires the item to be on my person and it stops if the presence goes beyond 300 ft", "I decide its spectral appearance; It is intangible, invulnerable, and sheds dim light in 10 ft", "While manifested, the spectral mind can hear and see, and has 60 ft darkvision", "As an action, I can use the mind's senses instead of my own until I stop concentrating on it", "As a bonus action, I can cause the spectral mind to hover 30 ft, passing through creatures", "When I cast an artificer spell on my turn, I can have the origins of it be the spectral mind", "I can cast spells through it a number of times per long rest equal to my Intelligence mod" ]), extraLimitedFeatures : [{ name : "Cast spell through Manifest Mind", usages : "Intelligence modifier per ", usagescalc : "event.value = Math.max(1, What('Int Mod'));", recovery : "long rest" }] }, autoSelectExtrachoices : [{ extrachoice : "telepathic advisor" }, { extrachoice : "manifest mind" }] }, "subclassfeature6" : { name : "Mind Network", source : [["UA:A3", 9]], minlevel : 6, description : desc([ "I add my Int mod to artificer spells that deal psychic damage and information overload", "With my artificial mind, I communicate telepathically with anyone carrying my infusions" ]), calcChanges : { atkCalc : [ function (fields, v, output) { if (v.theWea.isInformationOverload || (v.isSpell && (/psychic/i).test(fields.Damage_Type) && v.thisWeapon[4].indexOf('artificer-ua3') !== -1)) { output.extraDmg += Math.max(1, What('Int Mod')); }; }, "My artificer cantrips and spells that deal psychic damage, as well as my artificial mind's information overload get my Intelligence modifier added to their damage." ], spellAdd : [ function (spellKey, spellObj, spName) { if (spName == 'artificer-ua3' && !spellObj.psionic) return genericSpellDmgEdit(spellKey, spellObj, "psychic", "Int", true); }, "My artificer cantrips and spells that deal psychic damage get my Intelligence modifier added to their damage." ] } }, "subclassfeature14" : { name : "Pure Information", source : [["UA:A3", 9]], minlevel : 14, description : desc([ "When I use a spell slot to boost information overload, its target must make another save", "On a failed Intelligence saving throw it is stunned until the end of my next turn", "As an action while my artificial mind is on my person, I can teleport (infoportation)", "I teleport to an unoccupied space nearest to the spectral mind or an item infused by me", "I can do this once per long rest, or by expending a 2nd-level or higher spell slot (SS 2+)" ]), usages : 1, recovery : "long rest", altResource : "SS 2+", additional : "Infoportation", action : [["action", ""]] } } }); // Add the Artillerist specialism AddSubClass("artificer-ua3", "artillerist", { regExpSearch : /^(?=.*artillerist)(?!.*wizard).*$/i, subname : "Artillerist", fullname : "Artillerist", source : [["UA:A3", 8]], features : { "subclassfeature3" : { name : "Tools of the Trade", source : [["UA:A3", 9]], minlevel : 3, description : desc([ "I can use rods, wands, and staffs as a spellcasting focus", "I can craft magical wands for half the usual gold and in a quarter of the usual time" ]), additional : "proficiency with smith's \u0026 woodcarver's tools", toolProfs : ["Smith's tools", "Woodcarver's tools"], eval : function () { AddToInv("gear", "l", "Smith's tools", "", 8); AddToInv("gear", "l", "Woodcarver's tools", "", 5); AddToInv("gear", "r", "Wooden wand", "", 1); }, spellcastingExtra : ["shield", "thunderwave", "scorching ray", "shatter", "fireball", "wind wall", "ice storm", "wall of fire", "cone of cold", "wall of force"] }, "subclassfeature3.1" : { name : "Arcane Turret", source : [["UA:A3", 10]], minlevel : 3, description : desc([ "As an action, I can use smith's tools to summon a Medium turret within 5 ft of me", "I can do so a number of times per long rest for free, or by spending a spell slot", "If I create more turrets than I can have active, the oldest one disappears", "When I summon one, I decide what type it is: flamethrower, force ballista, or defender", "It disappears after 10 minutes, when reduced to 0 HP, or if I dismiss it as an action", "When within 60 ft of it, I can activate it as a bonus action, or detonate it as an action", "See the companion page for how the different types of turrets operate" ]), usages : levels.map(function(n) { return n < 3 ? "" : n < 14 ? 1 : 2; }), recovery : "long rest", additional : levels.map(function(n) { return n < 3 ? "" : n < 14 ? "max 1 active turret" : "max 2 active turrets"; }), action : [["action", " (summon/detonate)"], ["bonus action", " (command)"]], eval : function () { ClassList['artificer-ua3'].artificerCompFunc.add("Arcane Turret"); }, removeeval : function () { ClassList['artificer-ua3'].artificerCompFunc.remove("arcane turret"); }, changeeval : function (lvlA) { ClassList['artificer-ua3'].artificerCompFunc.update("arcane turret", lvlA[1] * 5); } }, "subclassfeature6" : { name : "Wand Prototype", source : [["UA:A3", 10]], minlevel : 6, description : desc([ "When I finish a long rest, I can use woodcarver's tools to turn a wand into a magic item", "I can only infuse a nonmagical wooden wand and it lasts until I finish my next long rest", "I infuse it with an artificer cantrip, even one I don't know, with a 1 action casting time", "As an action, I can use the wand to cast the cantrip, using my spellcasting ability", "I also add my Intelligence modifier (min 1) to any damage rolls for that cantrip" ]), additional : levels.map(function(n) { return n < 6 ? "" : "infuse wand with " + (n < 14 ? "1 cantrip" : "2 cantrips"); }), spellcastingBonus : [{ name : "Wand Prototype", "class" : "artificer-ua3", notspells : ["magic stone", "mending", "shillelagh"], // all cantrips with a casting time that is not 1 action level : [0, 0], times : levels.map(function(n) { return n < 14 ? 1 : 2; }), firstCol : "W" }], calcChanges : { atkCalc : [ function (fields, v, output) { if (!v.thisWeapon[3] || v.thisWeapon[4].indexOf("artificer-ua3") == -1) return; var artSp = CurrentSpells["artificer-ua3"]; if (!artSp || !artSp.selectBo || !v.thisWeapon[3] || v.thisWeapon[4].indexOf("artificer-ua3") == -1 || artSp.selectCa.indexOf(v.thisWeapon[3]) !== -1) return; var artBoSp = CurrentSpells["artificer-ua3"].bonus.subclassfeature6.selection; if (artBoSp && artBoSp.indexOf(v.thisWeapon[3]) !== -1) { output.die = output.die.replace(/C/g, 1).replace(/B/g, 0).replace(/0.?d\d+/g, 0); output.extraDmg += Math.max(Number(What("Int Mod")), 1); } }, "Cantrips cast through a wand infused by my Wand Prototype class feature get my Intelligence modifier added to their damage (minimum of +1) and are cast as if coming from a magic item (thus don't require any components nor scale with level)." ], spellAdd : [ function (spellKey, spellObj, spName, isDuplicate) { if (spName != "artificer-ua3" || isDuplicate || !CurrentSpells["artificer-ua3"]) return; var artBoSp = CurrentSpells["artificer-ua3"].bonus.subclassfeature6.selection; if (!artBoSp || artBoSp.indexOf(spellKey) == -1) return; spellObj.components = ""; spellObj.compMaterial = "Spells cast by magic items don't require any components."; var aSpell = SpellsList[spellKey]; if (aSpell.descriptionCantripDie) { var cDie = 1; var newCantripDieDescr = aSpell.descriptionCantripDie; while ((/`CD(-|\+|\*)?\d*`/).test(newCantripDieDescr)) { if ((/`CD(-|\+)\d+`/).test(newCantripDieDescr)) { var cDie = cDie + Number(newCantripDieDescr.replace(/.*`CD((-|\+)\d+)`.*/, "$1")); } else if ((/`CD\*\d+`/).test(newCantripDieDescr)) { var cDie = cDie * Number(newCantripDieDescr.replace(/.*`CD\*(\d+)`.*/, "$1")); } newCantripDieDescr = newCantripDieDescr.replace(/`CD(-|\+|\*)?\d*`/, cDie); } spellObj.description = newCantripDieDescr.replace(/\b0d\d+()/g, "$1").replace(/\b0d\d+/g, "0"); } genericSpellDmgEdit(spellKey, spellObj, "[\\w\\.]+", Math.max(Number(What("Int Mod")), 1), false, true) return true; }, "Cantrips cast through a wand infused by my Wand Prototype class feature get my Intelligence modifier added to their damage (minimum of +1) and are cast as if coming from a magic item (thus don't require any components nor scale with level)." ] } }, "subclassfeature14" : { name : "Fortified Position", source : [["UA:A3", 10]], minlevel : 14, description: desc("My allies and I have half cover while within 10 ft of an arcane turret I created") } } }); // Add the Artillerist's Arcane Turret CreatureList["arcane turret-ua"] = { name : "Arcane Turret", source : [["UA:A3", 10], ["UA:A2", 7]], size : 3, type : "Construct", alignment : "Neutral", ac : 18, hp : 15, hd : [0, 0], speed : "15 ft, climb 15 ft", scores : [10, 10, 10, 10, 10, 10], damage_immunities : "poison, psychic", condition_immunities : "all conditions", passivePerception : 10, languages : "", challengeRating : "1", proficiencyBonus : 0, attacksAction : 0, attacks : [{ name : "Flamethrower", ability : 4, damage : [1, 8, "fire"], range : "15-ft cone", description : "Dex save, success - half damage; Unattended flammable objects ignite", dc : true, modifiers : ["oProf+oInt", ""], abilitytodamage : false, tooltip : "The turret exhales fire in an adjacent 15-foot cone that the creator designate. Each creature in that area must make a Dexterity saving throw against the creator's spell save DC, taking 1d8 fire damage on a failed save or half as much damage on a successful one. The fire ignites any flammable objects in the area that aren't being worn or carried." }, { name : "Force Ballista", ability : 4, damage : [2, 8, "force"], range : "120 ft", description : "Creatures hit are pushed 5 ft away", modifiers : ["oProf+oInt", ""], abilitytodamage : false, tooltip : "Make a range spell attack, originating from the turret, at one creature or object within 120 feet of it. On a hit, the target takes 2d8 force damage, and if the target is a creature, it is pushed up to 5 feet away from the turret." }, { name : "Detonate", ability : 4, damage : [3, 6, "force"], range : "10-ft radius", description : "Dex save, success - half damage; Destroys turret", dc : true, modifiers : ["oProf+oInt", ""], abilitytodamage : false, tooltip : "Detonate destroys the turret and forces each creature within 10 feet of it to make a Dexterity saving throw against your spell save DC, taking 3d6 force damage on a failed save or half as much damage on a successful one." }], features : [{ name : "Healing", description : "The turret regains 2d6 HP whenever Mending is cast on it." }, { name : "Turret Type", description : "Upon creation, the creator decides what type of turret it is: Flamethrower, Force Ballista, or Defender. What feature/attack it can use depends on its type." }, { name : "Defender", description : "The turret emits a burst of positive energy that grants itself and each creature of the creator's choice within 10 feet of it a number of temporary hit points equal to 1d8 + the creator's Intelligence modifier (minimum of +1)." }], traits : [{ name : "Creator", description : "The turret only does something when activated by its creator. It uses the spell attack and spell save DC of its creator, and has five times the creator's artificer level in HP." }, { name : "Activation", description : "The creator of the turret can activate it as a bonus action while within 60 ft of it. Once activated, the turret does as its creator wishes, move to an unoccupied space and use the action associated with its type:" + "\n \u2022 Flamethrower: use the flamethrower attack." + "\n \u2022 Force Ballista: use the force ballista attack." + "\n \u2022 Defender: use the defender feature, see the features to the left." }, { name : "Detonate", description : "The creator of the turret can use an action to detonate the turret when within 60 ft of it, see the attack section." }] }; // Add the Battle Smith specialism (new in 2019v2) AddSubClass("artificer-ua3", "battle smith", { regExpSearch : /^(?=.*battle)(?=.*smith)(?!.*wizard).*$/i, subname : "Battle Smith", fullname : "Battle Smith", source : [["UA:A3", 11]], features : { "subclassfeature3" : { name : "Tools of the Trade \u0026 Battle Ready", source : [["UA:A3", 11]], minlevel : 3, description : desc([ "I gain proficiency with leatherworker's tools, smith's tools, and martial weapons", "I can craft magical armor for half the usual gold and in a quarter of the usual time", "I can use my Intelligence modifier instead of Strength or Dexterity for magic weapons" ]), toolProfs : ["Leatherworker's tools", "Smith's tools"], eval : function () { AddToInv("gear", "l", "Leatherworker's tools", "", 5); AddToInv("gear", "l", "Smith's tools", "", 8); }, weaponProfs : [false, true], calcChanges : { atkAdd : [ function (fields, v) { if (!v.isSpell && (v.theWea.isMagicWeapon || v.thisWeapon[1]) && (fields.Mod === 1 || fields.Mod === 2) && Number(What("Int")) > Number(What(fields.Mod === 1 ? "Str" : "Dex"))) { fields.Mod = 4; } }, 'I can use my Intelligence modifier instead of Strength or Dexterity for the attack and damage rolls of magic weapons.' ] }, spellcastingExtra : ["heroism", "searing smite", "branding smite", "warding bond", "aura of vitality", "blinding smite", "aura of purity", "staggering smite", "banishing smite", "mass cure wounds"] }, "subclassfeature3.1" : { name : "Iron Defender", source : [["UA:A3", 11]], minlevel : 3, description : desc([ "When I end a long rest, I can use smith's tools to create an iron defender", "I determine its appearance; I can have only 1 at a time, making a new one kills the older", "It obeys my commands, is friendly to my allies and I, and acts on my initiative, after me", "Unless I use a bonus action to command it, it only takes reactions and the Dodge action", "If commanded to, it can only take an action to bite, repair, Dash, Disengage, or Help", "Its HP maximum is equal to five times my artificer level + my Int Mod + its Con mod" ]), action : [["action", " (restore)"], ["bonus action", " (command)"]], eval : function () { var prefix = ClassList['artificer-ua3'].artificerCompFunc.add("Iron Defender"); AddSkillProf("Perception", true, false, false, 2, prefix); }, removeeval : function () { ClassList['artificer-ua3'].artificerCompFunc.remove("iron defender"); }, changeeval : function (lvlA) { var newProf = ProficiencyBonusList[classes.totallevel - 1]; var pres = ClassList['artificer-ua3'].artificerCompFunc.update("iron defender", undefined, newProf); if (!pres.length) return; var lvlH = Math.max(lvlA[0], lvlA[1]), lvlL = Math.min(lvlA[0], lvlA[1]); var newHP = Math.round(lvlA[1] * 5 + What("Int Mod")); for (var i = 0; i < pres.length; i++) { Value(pres[i] + "Comp.Use.HP.Max", newHP + What(pres[i] + "Comp.Use.Ability.Con.Mod")); if (lvlL < 6 && lvlH >= 6) { // Arcane Jolt Value(pres[i] + "Comp.Use.Attack.1.Description", lvlA[1] >= 6 ? "Counts as magical; Can channel energy (Arcane Jolt)" : ""); } if (lvlL < 14 && lvlH >= 14) { // Improved Defender Value(pres[i] + "Comp.Use.Attack.2.Weapon Selection", lvlA[1]>= 14 ? "Defensive Pounce" : ""); if (lvlA[1] >= 14) { Value(pres[i] + "Comp.Use.Attack.2.Range", "Melee (5 ft)"); Value(pres[i] + "Comp.Use.Attack.2.Description", "As reaction on target that attacks another; Automatically hits and target has disadv. on its attack"); Value(pres[i] + "Comp.Use.Attack.2.Damage Type", "Force"); PickDropdown(pres[i] + "Comp.Use.Attack.2.Mod", 5); Value(pres[i] + "BlueText.Comp.Use.Attack.2.Damage Die", "1d4"); Value(pres[i] + "BlueText.Comp.Use.Attack.2.Damage Bonus", "oInt-Wis"); } } } } }, "subclassfeature6" : { name : "Arcane Jolt", source : [["UA:A3", 12]], minlevel : 6, description : desc([ "The bite attack of my iron defender is considered magical", "I can channel energy through the defender's bite attack and my magic weapon attacks", "Once per turn when such an attack hits, I can have it do extra force damage or heal", "If I choose to heal, I restore HP to a creature that I can see within 30 ft of the target" ]), usages : "Intelligence modifier per ", usagescalc : "event.value = Math.max(1, What('Int Mod'));", recovery : "long rest", additional : levels.map(function (n) { return n < 6 ? "" : (n < 14 ? 2 : 4) + "d4"; }) }, "subclassfeature14" : { name : "Improved Defender", source : [["UA:A3", 14]], minlevel : 14, description : desc([ "My iron defender's defensive pounce now also deals 1d4 + my Int mod in force damage", "The damage and healing from arcane jolt increases from 2d4 to 4d4" ]) } } }); // Add the Battle Smith's Iron Defender (new in 2019v2) CreatureList["iron defender-ua"] = { name : "Iron Defender", source : [["UA:A3", 11]], size : 3, type : "Construct", alignment : "Neutral", ac : 15, hp : 7, hd : [], speed : "40 ft", scores : [14, 12, 14, 4, 10, 6], //[Str, Dex, Con, Int, Wis, Cha] skills : { "perception" : 4 }, damage_immunities : "poison", condition_immunities : "charmed, exhaustion, poisoned", passivePerception : 10, senses : "Darkvision 60 ft", languages : "understands the languages of its creator but can't speak", challengeRating : "1", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Bite", ability : 1, damage : [1, 8, "piercing"], range : "Melee (5 ft)", modifiers : ["", "Prof-2"] }], features : [{ name : "Creator", description : "The iron defender obeys the commands of its creator and has the same proficiency bonus. It takes its turn after its creator, on the same initiative count. It only takes the Dodge action, unless its creator takes a bonus action to command to do otherwise, in which case it can only take the Bite, Repair, Dash, Disengage, or Help action. Within an hour of its death, its creator can expend a spell slot as an action while within 5 ft to have it return to full HP after 1 minute." }], actions : [{ name : "Healing", description : "The iron defender regains 2d6 HP whenever the Mending spell is cast on it." }, { name : "Vigilant", description : "The iron defender can't be surprised." }, { name : "Repair (3/Day)", description : "As an action, the magical mechanisms inside the iron defender restore 2d8 + its proficiency bonus in hit points to itself or to one construct or object within 5 ft of it." }, { name : "Defensive Pounce (reaction)", description : "As a reaction, the iron defender imposes disadvantage on the attack roll of one creature it can see that is within 5 ft of it, provided the attack roll is against a creature other than the iron defender." }] }; // Add the new spell SpellsList["arcane weapon-ua"] = { name : "Arcane Weapon", classes : ["artificer-ua3", "artificer-ua2"], source : [["UA:A3", 14], ["UA:A2", 10]], level : 1, school : "Trans", time : "1 bns", range : "Self", components : "V,S", duration : "Conc, 1 h", description : "1 wea +1d6 dmg (acid, cold, fire, lightn., poison, or thunder); 1 bns change dmg type; SL3: conc, 8 h", descriptionFull : "You channel arcane energy into one simple or martial weapon you're holding, and choose one damage type: acid, cold, fire, lightning, poison, or thunder. Until the spell ends, you deal an extra 1d6 damage of the chosen type to any target you hit with the weapon. If the weapon isn't magical, it becomes a magic weapon for the spell's duration.\n As a bonus action, you can change the damage type, choosing from the options above." + AtHigherLevels + "When you cast this spell using a spell slot of 3rd level or higher, you can maintain your concentration on the spell for up to 8 hours. " }; // Add the new magic items if (!MagicItemsList["boots of the winding path"]) { MagicItemsList["boots of the winding path"] = { name : "Boots of the Winding Path", source : [["E:RLW", 62], ["T", 21], ["UA:A2", 9], ["UA:A3", 12]], type : "wondrous item", description : "While wearing these boots, I can teleport up to 15 ft as a bonus action to an unoccupied space I can see, as long as I occupied that space at some point during the current turn.", descriptionFull : "While wearing these boots, a creature can teleport up to 15 feet as a bonus action to an unoccupied space the creature can see. The creature must have occupied that space at some point during the current turn.", attunement : true, action : [["bonus action", ""]] } } MagicItemsList["many-handed pouch-ua"] = { name : "Many-Handed Pouch", source : [["UA:A3", 13], ["UA:A2", 9]], type : "wondrous item", description : "These 2-5 pouches all share one interdimensional space of the same capacity as a single pouch. Thus, reaching into any of the pouches allows access to the same storage space. A pouch only functions if it is within 100 miles of another pouch of its set.", descriptionFull : "The infused pouches all share one interdimensional space of the same capacity as a single pouch. Thus, reaching into any of the pouches allows access to the same storage space. A pouch operates as long as it is within 100 miles of another one of the pouches; the pouch is otherwise empty and won't accept any contents.\n If this infusion ends, the items stored in the shared space move into one of the pouches, determined at random. The rest of the pouches become empty." } MagicItemsList["radiant weapon-ua"] = { name : "Radiant Weapon", nameTest : "Radiant", source : [["UA:A3", 13], ["UA:A2", 9]], type : "weapon (any)", description : "This magic weapon adds a +1 on its attacks and damage. As a bonus action, I can start or stop it shedding light, bright in 30 ft and dim for another 30 ft. Once per short rest as a reaction when hit by a melee attack, I can blind the attacker until the end of its next turn unless it makes a Con save (my spell DC).", descriptionFull : "This magic weapon grants a +1 bonus to attack and damage rolls made with it. While holding it, the wielder can take a bonus action to cause it to shed bright light in a 30-foot radius and dim light for an additional 30 feet. The wielder can extinguish the light as a bonus action.\n As a reaction immediately after being hit by a melee attack, the wielder can cause the attacker to be blinded until the end of the attacker's next turn, unless the attacker succeeds on a Constitution saving throw against your spell save DC. Once used, this reaction can't be used again until the wielder finishes a short or long rest.", attunement : true, usages : 1, recovery : "short rest", additional : "blind attacker", action : [["bonus action", " (shed light/stop)"], ["reaction", " (after melee hit)"]], chooseGear : { type : "weapon", prefixOrSuffix : "suffix", descriptionChange : ["replace", "weapon"] }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && !v.isSpell && (/radiant/i).test(v.WeaponTextName)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + 'Reaction to blind attacker'; } }, 'If I include the word "Radiant" in the name of a weapon, it will be treated as the magic weapon Radiant Weapon. It has +1 to hit and damage and can be used to shed light and to blind an attacker.' ], atkCalc : [ function (fields, v, output) { if (v.isMeleeWeapon && !v.isSpell && (/radiant/i).test(v.WeaponTextName)) { output.magic = v.thisWeapon[1] + 1; } } ] } } MagicItemsList["repulsion shield-ua"] = { // 2019v2 name : "Repulsion Shield", source : [["UA:A3", 14]], type : "shield", description : "I gain a +1 bonus to Armor Class while wielding this shield. As a reaction immediately after being hit by a melee attack, I can push the attacker up to 15 ft away. Once used, this reaction can't be used again until I finish a short or long rest.", descriptionFull : "A creature gains a +1 bonus to Armor Class while wielding this shield. While holding it, the wielder can use a reaction immediately after being hit by a melee attack to push the attacker up to 15 feet away. Once used, this reaction can't be used again until the wielder finishes a short or long rest.", weight : 6, attunement : true, usages : 1, recovery : "short rest", action : [["reaction", ""]], shieldAdd : ["Repulsion Shield", 3, 6], } // dupl_start if (!MagicItemsList["repeating shot"]) { MagicItemsList["repeating shot"] = { // 2019v2 name : "Repeating Shot", source : [["E:RLW", 62], ["T", 22], ["UA:A3", 13]], type : "weapon (any with ammunition)", description : "When I use this magic weapon to make a ranged attack, it magically produces one piece of ammunition and grants a +1 bonus to its attack and damage rolls. Thus, it doesn't require ammunition and ignores the loading property if it has it. The produced ammunition vanishes once it hits or misses a target.", descriptionFull : "This magic weapon grants a +1 bonus to attack and damage rolls made with it when it's used to make a ranged attack, and it ignores the loading property if it has it.\n The weapon requires no ammunition; it magically produces one piece of ammunition each time you make a ranged attack with it, unless you manually load it. The ammunition produced by the weapon vanishes the instant after the it hits or misses a target.", attunement : true, chooseGear : { type : "weapon", prefixOrSuffix : "suffix", descriptionChange : ["replace", "weapon"], excludeCheck : function (inObjKey, inObj) { return !(/ammunition/i).test(inObj.description); } }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && !v.isSpell && (/^(?=.*repeating shot)(?=.*ammunition).*$/i).test(v.WeaponText)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, '').replace(/(;|,)? ?loading/i, ''); } }, 'If I include the words "Repeating Shot" in the name of a weapon with the ammunition property, it will be treated as the magic weapon Repeating Shot. It has +1 to hit and damage and produces its own ammunition, thus its loading property is removed if it has it.' ], atkCalc : [ function (fields, v, output) { if ((/^(?=.*repeating shot)(?=.*ammunition).*$/i).test(v.WeaponText) && !v.isSpell) { output.magic = v.thisWeapon[1] + 1; } }, '' ] } } } if (!MagicItemsList["returning weapon"]) { MagicItemsList["returning weapon"] = { name : "Returning Weapon", nameTest : "Returning", source : [["E:RLW", 63], ["T", 23], ["UA:A3", 14], ["UA:A2", 10]], type : "weapon (any thrown)", description : "This magic weapon grants a +1 bonus to attack and damage rolls I make with it. It returns to my hand immediately after I use it to make a ranged attack.", descriptionFull : "This magic weapon grants a +1 bonus to attack and damage rolls made with it, and it returns to the wielder's hand immediately after it is used to make a ranged attack.", chooseGear : { type : "weapon", prefixOrSuffix : "suffix", descriptionChange : ["replace", "weapon"], excludeCheck : function (inObjKey, inObj) { return !(/melee/i).test(inObj.range) || !(/thrown/i).test(inObj.description); } }, calcChanges : { atkAdd : [ function (fields, v) { if (!v.theWea.isMagicWeapon && v.isWeapon && /^(?=.*returning)(?=.*\bthrown\b).*$/i.test(v.WeaponText) && /\d ?(ft|m)\.?[^)]/.test(fields.Range)) { v.theWea.isMagicWeapon = true; fields.Description = fields.Description.replace(/(, |; )?Counts as magical/i, ''); fields.Description += (fields.Description ? '; ' : '') + 'Returns immediately after ranged attack'; } }, 'If I include the word "Returning" in the name of a thrown weapon, it will be treated as the magic weapon Returning Weapon. It has +1 to hit and damage and returns to my hand immediately after I use it to make a ranged attack.' ], atkCalc : [ function (fields, v, output) { if (v.isWeapon && /^(?=.*returning)(?=.*\bthrown\b).*$/i.test(v.WeaponText) && /\d ?(ft|m)\.?[^)]/.test(fields.Range)) { output.magic = v.thisWeapon[1] + 1; } }, '' ] } } } // dupl_end // Set the Artificer class spell list var UAA3_SetArtificerSpells = function(){ var artSp = [ "acid splash", "create bonfire", // 2019v2 "dancing lights", "fire bolt", "frostbite", // 2019v2 "guidance", "light", "mage hand", "magic stone", // 2019v2 "mending", "message", "poison spray", "prestidigitation", "ray of frost", "resistance", "shocking grasp", "spare the dying", "thorn whip", "thunderclap", // 2019v2 // level 1 "absorb elements", // 2019v2 "alarm", "catapult", // 2019v2 "cure wounds", "detect magic", "disguise self", "expeditious retreat", "faerie fire", // 2019v2 "false life", "feather fall", // 2019v2 "grease", "identify", "jump", "longstrider", "sanctuary", "snare", // 2019v2, replaces "shield of faith" // level 2 "aid", "alter self", "arcane lock", "blur", "continual flame", "darkvision", "enhance ability", "enlarge/reduce", "heat metal", "invisibility", "lesser restoration", "levitate", "magic mouth", "magic weapon", "protection from poison", "pyrotechnics", // 2019v2 "rope trick", "see invisibility", "skywrite", // 2019v2 "spider climb", // level 3 "blink", "catnap", // 2019v2 "dispel magic", "elemental weapon", "flame arrows", // 2019v2 "fly", "gaseous form", "glyph of warding", "haste", "protection from energy", "revivify", "tiny servant", // 2019v2 "water breathing", "water walk", // level 4 "arcane eye", "elemental bane", // 2019v2 "fabricate", "freedom of movement", "leomund's secret chest", "mordenkainen's faithful hound", "mordenkainen's private sanctum", "otiluke's resilient sphere", "stone shape", "stoneskin", "vitriolic sphere", // 2019v2 // level 5 "animate objects", "bigby's hand", "creation", "greater restoration", "skill empowerment", // 2019v2 "transmute rock", // 2019v2 "wall of stone" ]; for (var a = 0; a < artSp.length; a++) { var aArtSp = SpellsList[artSp[a]]; if(aArtSp && aArtSp.classes && aArtSp.classes.indexOf("artificer-ua3") === -1) aArtSp.classes.push("artificer-ua3"); }; var artMi = [ ["alchemy jug"], ["bag of holding"], ["cap of water breathing"], ["cloak of the manta ray"], ["goggles of night"], ["lantern of revealing"], ["rope of climbing"], ["sending stones"], ["wand of magic detection"], ["wand of secrets"], ["boots of elvenkind", 12], ["boots of striding and springing", 12], ["boots of the winterlands", 12], ["bracers of archery", 12], ["brooch of shielding", 12], ["cloak of elvenkind", 12], ["cloak of protection", 12], ["eyes of charming", 12], ["eyes of the eagle", 12], ["gauntlets of ogre power", 12], ["gloves of missile snaring", 12], ["gloves of swimming and climbing", 12], ["gloves of thievery", 12], ["hat of disguise", 12], ["headband of intellect", 12], ["helm of telepathy", 12], ["medallion of thoughts", 12], ["periapt of wound closure", 12], ["pipes of haunting", 12], ["pipes of the sewers", 12], ["quiver of ehlonna", 12], ["ring of jumping", 12], ["ring of mind shielding", 12], ["ring of water walking", 12], ["slippers of spider climbing", 12], ["winged boots", 12], ["amulet of health", 16], ["belt of giant strength", 16, "hill (str 21, rare)"], ["boots of levitation", 16], ["boots of speed", 16], ["bracers of defense", 16], ["cloak of the bat", 16], ["dimensional shackles", 16], ["gem of seeing", 16], ["horn of blasting", 16], ["ring of free action", 16], ["ring of protection", 16], ["ring of the ram", 16] ]; var theObj = ClassList['artificer-ua3'].features["infuse item"]; for (var a = 0; a < artMi.length; a++) { var MI0 = artMi[a][0]; var MI1 = artMi[a][1]; var MI2 = artMi[a][2]; var anArtMi = MagicItemsList[MI0]; if (!anArtMi) continue; if (MI2) { anArtMi = { name : MagicItemsList[MI0][MI2].name ? MagicItemsList[MI0][MI2].name : MagicItemsList[MI0].name + " [" + MI2.capitalize() + "]", source : MagicItemsList[MI0][MI2].source ? MagicItemsList[MI0][MI2].source : MagicItemsList[MI0].source, attunement : MagicItemsList[MI0][MI2].attunement !== undefined ? MagicItemsList[MI0][MI2].attunement : MagicItemsList[MI0].attunement } } var theI = "Replicate: " + anArtMi.name + (MI1 ? " (prereq: level " + MI1 + " artificer)" : ""); var theILC = theI.toLowerCase(); theObj[theILC] = { name : anArtMi.name, description : "", source : anArtMi.source, eval : 'AddMagicItem("' + anArtMi.name + '");', removeeval : MI2 ? 'if (CurrentMagicItems.choices.indexOf("' + MI2 + '") != -1) { MagicItemClear(CurrentMagicItems.choices.indexOf("' + MI2 + '") + 1, true); };' : 'if (CurrentMagicItems.known.indexOf("' + MI0 + '") != -1) { MagicItemClear(CurrentMagicItems.known.indexOf("' + MI0 + '") + 1, true); };' }; if (anArtMi.attunement) theObj[theILC].additional = "requires attunement"; if (MI1) theObj[theILC].prereqeval = "classes.known['artificer-ua3'].level >= " + MI1; theObj.extrachoices.push(theI); }; }(); ================================================ FILE: WotC material/ua_20190815_Barbarian-and-Monk.js ================================================ var iFileName = "ua_20190815_Barbarian-and-Monk.js"; RequiredSheetVersion("13.1.14"); // This file adds the content from the Unearthed Arcana: Barbarian and Monk article to MPMB's Character Record Sheet // Define the source SourceList["UA:BnM"] = { name : "Unearthed Arcana: Barbarian and Monk", abbreviation : "UA:BnM", group : "Unearthed Arcana", url : "https://media.wizards.com/2019/dnd/downloads/UA-WildAstral.pdf", date : "2019/08/15" }; // Add a subclasses for the Barbarian and one for the Monk AddSubClass("barbarian", "path of the wild soul-ua", { regExpSearch : /^(?=.*\bwild\b)(?=.*\bsoul\b).*$/i, subname : "Path of the Wild Soul", subnameShort: "Wild Soul", fullname : "Wild Soul", source : [["UA:BnM", 1]], abilitySave : 3, features : { "subclassfeature3" : { name : "Lingering Magic", source : [["UA:BnM", 1]], minlevel : 3, description : desc([ "I can cast Detect Magic without spell slots or components, using Con for spellcasting", "When I do so, I faintly glow a color corresponding to the school of magic I detect" ]), usages : "Con mod (min 1) per ", usagescalc : "event.value = Math.max(1, What('Con Mod'));", recovery : "long rest", spellcastingBonus : [{ name : "Lingering Magic", spells : ["detect magic"], selection : ["detect magic"] }], spellChanges : { "detect magic" : { components : "", ritual : false, changes : "Using my Path of the Wild Soul class feature I can cast Detect Magic without requiring components or spell slots." } } }, "subclassfeature3.1" : { name : "Wild Surge", source : [["UA:BnM", 1]], minlevel : 3, description: desc("Whenever I enter my rage, I have to roll on the Wild Surge table (see Notes page)"), toNotesPage : [{ name : "Wild Surge Table", source : [["UA:BnM", 1]], note : [ "Magic erupts from me while I rage. Whenever I enter my rage, I have to roll on the table below to see what happens.", "If the effect calls for a saving throw, the DC is equal to 8 + my proficiency bonus + my Constitution modifier.\n", "d8\tEFFECT", " 1\tNecrotic energy bursts from me. Each creature within 30 ft of me takes 1d10 necrotic damage, and I gain temporary HP equal to the sum of the necrotic damage dealt to the creatures.", " 2\tI teleport up to 20 ft to an unoccupied space I can see. Until my rage ends, I can activate this effect again on each of my turns as a bonus action.", " 3\tI conjure 1d4 intangible spirits that look like flumphs in unoccupied spaces within 30 ft of me. Each spirit immediately flies 30 ft in a random direction. At the end of my turn, all spirits explode and each creature within 5 ft of one or more of them must succeed on a Dexterity saving throw or take 2d8 force damage.", " 4\tArcane energy enshrouds me. Until my rage ends, I gain a +2 bonus to AC, and whenever a creature within 10 ft of me hits me with an attack, that creature takes force damage equal to my Constitution modifier.", " 5\tPlant life temporarily grows around me: until my rage ends, the ground within 10 ft of me is difficult terrain.", " 6\tArcane energy taps into the minds of those around me. Each creature within 30 ft of me must succeed on a Wisdom saving throw or I see a glimpse of the creature's thoughts, learning how it plans to attack me. As a result, the creature has disadvantage on attack rolls against me until the start of my next turn.", " 7\tShadows weave around a weapon of my choice I am holding. Until my rage ends, my weapon deals psychic damage instead of its bludgeoning, slashing, or piercing damage, and it gains the light and thrown properties with a normal range of 20 ft and a long range of 60 ft. If I drop the weapon or throw it, the weapon dissipates and reappears in my hand at the end of my turn.", " 8\tA beam of brilliant light lances from my chest in a 5-ft-wide, 60-ft-long line. Each creature in the line must succeed on a Constitution saving throw or take 2d8 radiant damage and be blinded until the start of my next turn." ] }] }, "subclassfeature6" : { name : "Magic Reserves", source : [["UA:BnM", 2]], minlevel : 6, description : desc([ "As an action, I can touch a creature and roll a die to channel magic into it", "The target regains an expended spell slot of a level equal to or less then the die roll", "If it has no expended spell slots of that level, it gains 5\xD7 the die roll in temp HP instead", "Regardless of what happens, I take force damage equal to five times the die roll" ]), additional : levels.map(function (n) { return n < 6 ? "" : n < 14 ? "1d4" : "1d6"; }), action : [["action", ""]] }, "subclassfeature10" : { name : "Arcane Rebuke", source : [["UA:BnM", 2]], minlevel : 10, description : desc([ "As a reaction when I have to make a save while raging, the magic in my soul lashes out", "This causes the creature forcing me to make the save, if any, to take 3d6 force damage" ]), action : [["reaction", " (in Rage after save)"]] }, "subclassfeature14" : { name : "Chaotic Fury", source : [["UA:BnM", 2]], minlevel : 14, description : desc([ "As a bonus action while raging, I can reroll the effect on the Wild Surge table", "This replaces the current wild surge effect with a new one" ]), action : [["bonus action", " (in Rage)"]] } } }); AddSubClass("monk", "way of the astral self-ua", { regExpSearch : /^(?=.*astral)(?=.*(self|projection|travel))((?=.*(monk|monastic))|((?=.*martial)(?=.*(artist|arts)))|((?=.*spiritual)(?=.*warrior))).*$/i, subname : "Way of the Astral Self", subnameShort: "Astral Self", source : [["UA:BnM", 2]], features : { "subclassfeature3" : { name : "Arms of the Astral Self", source : [["UA:BnM", 2]], minlevel : 3, description: desc("My ki mastery allows me to summon portions of my astral self; See 3rd page notes"), action : [["bonus action", "Summon Astral Arms"], ["bonus action", "Astral Arm Attacks (after Attack action)"]], weaponOptions : [{ regExpSearch : /^(?=.*\bastral\b)(?=.*\barms?\b).*$/i, name : "Astral Arms", source : [["UA:BnM", 2]], ability : 5, type : "Natural", damage : [1, "", typePF ? "Necrotic/Radiant" : "necrotic|radiant"], range : "Melee", description : "10 ft reach; Uses Str, Dex, or Wis; Deals necrotic or radiant damage", monkweapon : true, abilitytodamage : true, selectNow : true }], "astral arms" : { name : "Astral Arms", extraname : "Way of the Astral Self 3", source : [["UA:BnM", 2]], description : desc([ "As a bonus action, I can summon my astral arms for 10 minutes; I choose their appearance", "While they are summoned, I can use Wisdom instead of Strength for Strength checks/saves", "The arms are melee monk weapons with 10 ft reach that can use Wis instead of Str/Dex", "I can choose to have them deal either radiant or necrotic damage", "After I use them in my Attack action, I can use them for more attacks as a bonus action" ]), additional : levels.map(function (n) { return n < 3 ? "" : "2 ki points; " + (n < 11 ? 1 : n < 17 ? 2 : 3) + " bonus action attack" + (n < 11 ? "" : "s"); }) }, autoSelectExtrachoices : [{ extrachoice : "astral arms" }] }, "subclassfeature6" : { name : "Visage of the Astral Self", source : [["UA:BnM", 3]], minlevel : 6, description: desc("I can now also summon the visage of my astral self; See third page notes section"), action : [["bonus action", "Summon Astral Arms and/or Visage", "Summon Astral Arms"]], "astral visage" : { name : "Astral Visage", extraname : "Way of the Astral Self 6", source : [["UA:BnM", 3]], additional: "1 ki point", description : desc([ "As a bonus action (or when summoning my astral arms), I can summon my astral visage", "It covers my face like a helmet or mask and I choose its appearance; It lasts for 10 minutes", "It grants adv. on Insight \u0026 Intimidation, and the ability to see 120 ft in (magical) darkness" ]) }, autoSelectExtrachoices : [{ extrachoice : "astral visage" }] }, "subclassfeature11" : { name : "Awakening of the Astral Self", source : [["UA:BnM", 3]], minlevel : 11, description: desc("While having both astral arms and visage summoned, I gain extra benefits, see 3rd page"), "deflect energy" : { name : "Deflect Energy", extraname : "Awakening of the Astral Self", source : [["UA:BnM", 3]], description : " [if both astral arms \u0026 visage]" + desc([ "As a reaction when I take acid, cold, fire, force, or lightning damage, I can deflect it", "By doing so, the damage is reduced by 1d10 + my Wisdom modifier + my Monk level" ]) }, "empowered arms" : { name : "Empowered Arms", extraname : "Awakening of the Astral Self", source : [["UA:BnM", 3]], description : " [if both astral arms \u0026 visage]" + desc([ "Once per turn when I hit an astral arms attack, I can add a martial arts die to its damage" ]) }, "word of the spirit" : { name : "Word of the Spirit", extraname : "Awakening of the Astral Self", source : [["UA:BnM", 3]], description : " [if both astral arms \u0026 visage]" + desc([ "I can direct my words to a creature I can see within 30 ft so that only it can hear me", "Alternatively, I can amplify my voice so that it is heard by all within 600 ft of me" ]) }, autoSelectExtrachoices : [ { extrachoice : "deflect energy" }, { extrachoice : "empowered arms" }, { extrachoice : "word of the spirit" } ] }, "subclassfeature17" : { name : "Complete Astral Self", source : [["UA:BnM", 3]], minlevel : 17, description : desc([ "I can now also summon the body of my astral self; See third page notes section", "This spectral body covers my physique like armor, connecting with the arms and visage" ]), action : [["bonus action", "Summon Astral Arms and/or Visage, or Complete", "Summon Astral Arms and/or Visage"], ["reaction", "Ki Consumption (Complete Astral Self)"]], "astral body" : { name : "Astral Body", extraname : "Way of the Astral Self 17", source : [["UA:BnM", 3]], additional: "10 ki points", description : desc([ "As a bonus action, I can summon the arms, visage, and body of my astral self for 10 min", "This gives me the arms, visage, +2 bonus to AC while not incapacitated, and as follows:", "When I take the Attack action I can choose to make 3 attacks with my astral arms instead", "As a reaction when a creature in 10 ft is reduced to 0 HP, I can regain my Wis mod in ki" ]) }, autoSelectExtrachoices : [{ extrachoice : "astral body" }] } } }); ================================================ FILE: WotC material/ua_20190905_Sorcerer-and-Warlock.js ================================================ var iFileName = "ua_20190905_Sorcerer-and-Warlock.js"; RequiredSheetVersion("13.1.14"); // This file adds the content from the Unearthed Arcana: Sorcerer and Warlock article to MPMB's Character Record Sheet // Define the source SourceList["UA:SnW"] = { name : "Unearthed Arcana: Sorcerer and Warlock", abbreviation : "UA:SnW", group : "Unearthed Arcana", url : "https://media.wizards.com/2019/dnd/downloads/UA-AberrantLurk.pdf", date : "2019/09/05" }; // Add a subclasses for the Sorcerer and one for the Warlock // Both contain work by /u/KaydeArcane var UASnW_abberantMindExtraSpell = ["arms of hadar", "dissonant whispers", "calm emotions", "detect thoughts", "hunger of hadar", "sending", "compulsion", "evard's black tentacles", "modify memory", "rary's telepathic bond"]; AddSubClass("sorcerer", "aberrant mind-ua", { regExpSearch : /^(?=.*aberrant)(?=.*mind).*$/i, subname : "Aberrant Mind", source : [["UA:SnW", 1]], spellcastingExtra : UASnW_abberantMindExtraSpell, spellcastingExtraApplyNonconform : true, features : { "subclassfeature1" : { name : "Invasive Thoughts", source : [["UA:SnW", 1]], minlevel : 1, description : desc([ "As a bonus action, I can telepathic link myself with a creature within 30 ft that I can see", "This lasts for 10 minutes, until I'm incapacitated or die, or I use this ability again", "I can telepathically talk with the target; It can speak back if it understands a language" ]), action : [["bonus action", ""]] }, "subclassfeature1.1" : { name : "Psionic Spells", source : [["UA:SnW", 1]], minlevel : 1, description: desc("I learn additional spells, which do not count towards the number of spell I can know") }, "subclassfeature1.2" : { name : "Warped Being", source : [["UA:SnW", 1]], minlevel : 1, description: desc("My aberrant origin gives me an AC of 13 + my Dex mod when I am not wearing armor"), armorOptions : [{ regExpSearch : /^(?=.*warped)(?=.*being).*$/i, name : "Warped Being", source : [["UA:SnW", 1]], ac : 13, selectNow : true }] }, "subclassfeature6" : { name : "Psionic Sorcery", source : [["UA:SnW", 2]], minlevel : 6, description : desc([ "I can expend sorcery points instead of a spell slot to cast a spell from my Psionic Spells", "This costs the spell's level in sorcery points, but the spell requires no other components" ]), spellFirstColTitle : "SP", spellChanges : function () { var fullReObj = {}; UASnW_abberantMindExtraSpell.map(function (s) { var spObj = SpellsList[s] ? SpellsList[s] : { level : 1 }; fullReObj[s] = { firstCol : spObj.level, compMaterial : (spObj.compMaterial ? spObj.compMaterial + "\n" : "") + "If I cast this spell by expending Sorcery Points, it doesn't require any components", changes : "I can cast this spell by expending a number of Sorcery Points equal to its level instead of expending a spell slot. When I do so, the spell doesn't require any components." } }) return fullReObj; }() }, "subclassfeature6.1" : { name : "Psychic Defenses", source : [["UA:SnW", 2]], minlevel : 6, description: desc("I gain resistance to psychic damage and adv. on saves vs. being charmed or frightened"), dmgres : ["Psychic"], savetxt : { adv_vs : ["charmed", "frightened"] } }, "subclassfeature14" : { name : "Revelation in Flesh", source : [["UA:SnW", 2]], minlevel : 14, description : desc([ "As a bonus action, I can expend 1 or more sorcery points to transform for 1 minute", "For each sorcery point used, I gain one of the following benefits of my choice:", "\u2022 I gain a swimming speed equal to my walking speed and the ability to breathe water", "\u2022 I gain a flying speed equal to my walking speed and I can hover", "\u2022 I can move, with equipment, through any space as narrow as 1 inch without squeezing", " I can spend 5 ft of movement to escape form a grapple or from nonmagical restraints", "\u2022 I am aware of the location of any hidden/invisible creatures within 60 ft of me" ]), action : [["bonus action", ""]], additional : "1+ sorcery points" }, "subclassfeature18" : { name : "Warp Reality", source : [["UA:SnW", 2]], minlevel : 18, description : desc([ "As an action, I can radiate a 20-ft radius aura of difficult terrain for 1 minute", "Creatures that start their turn within the aura take 2d10 psychic damage", "When creating it, I can choose any creatures I can see to be unaffected by this aura", "As a bonus action, I can end this aura to teleport myself and others away", "I teleport myself and any creature in the aura to a location I can see within 1 mile", "An unwilling creature can succeed on a Charisma saving throw to avoid being teleported" ]), action : [["action", " (create)"], ["bonus action", " (end)"]], recovery : "long rest", usages : 1 } } }); AddSubClass("warlock", "the lurker in the deep-ua", { regExpSearch : /^(?=.*warlock)(?=.*lurker)(?=.*(deep|depth)).*$/i, subname : "the Lurker in the Deep", source : [["UA:SnW", 2]], spellcastingExtra : ["create or destroy water", "thunderwave", "gust of wind", "shatter", "lightning bolt", "sleet storm", "control water", "evard's black tentacles", "commune with nature", "cone of cold"], features : { "subclassfeature1" : { name : "Grasp of the Deep", source : [["UA:SnW", 3]], minlevel : 1, description : desc([ "As a bonus action, I can summon or move a spectral tentacle and make an attack with it", "I can summon it to a space within 60 ft that I can see or move an existing one 30 ft", "I make melee spell attacks with 10 ft reach with it that deal cold or lightning damage", "Creatures hit by the tentacle suffer 10 ft speed reduction until the start of my next turn", "The 10-ft long tentacle lasts for 1 minute or until I summon another" ]), action : [["bonus action", " (summon/move)"]], recovery : "long rest", additional : levels.map(function (n) { return (n < 10 ? 1 : 2) + "d8"; }), usages : "Cha mod per ", usagescalc : "event.value = Math.max(1, What('Cha Mod'));", weaponOptions : [{ regExpSearch : /^((?=.*grasp)(?=.*deep)|(?=.*spectral)(?=.*tentacle)).*$/i, name : "Grasp of the Deep", source : [["UA:SnW", 3]], ability : 6, type : "Spell", damage : [1, 8, "Cold/Lightning"], range : "Melee (10 ft)", description : "My choice of cold or lightning damage; Target -10 ft speed until my next turn starts", abilitytodamage : false, litdGraspOfTheDeep : true, selectNow : true }], calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.litdGraspOfTheDeep && classes.known.warlock.level >= 10) { fields.Damage_Die = '2d8'; }; } ] } }, "subclassfeature1.1" : { name : "Scion of the Deep", source : [["UA:SnW", 3]], minlevel : 1, description : desc([ "I can communicate telepathically with any aberration, beast, elemental, or monstrosity", "The creature must be within 120 ft of me and have an innate swimming speed" ]) }, "subclassfeature6" : { name : "Fathomless Soul", source : [["UA:SnW", 3]], minlevel : 6, description : " [cold resistance]\n I have a swimming speed equal to my walking speed; I can breathe both air and water", dmgres : ["Cold"], speed : { swim : { spd : "walk", enc : "walk" } } }, "subclassfeature6.1" : { name : "Guardian Grasp", source : [["UA:SnW", 3]], minlevel : 6, description : desc([ "As a reaction when a creature in 10 ft of my tentacle takes damage, I can have it help", "One creature takes only half damage and my spectral tentacle vanishes" ]), action : [["reaction", ""]] }, "subclassfeature10" : { name : "Devouring Maw", source : [["UA:SnW", 3]], minlevel : 10, description : desc([ "As an action, I can summon a 10-ft radius translucent maw within 60 ft for 1 minute", "Creatures in the maw as it appear must Str save or be restrained, can repeat as action", "Creatures starting their turn in the maw take 3d6 cold or lightning damage (my choice)", "If a creature is in the maw at the start of my turn, I gain my warlock level in temp HP" ]), action : [["action", ""]], additional : levels.map(function (n) { return n < 10 ? "" : n + " temp HP"; }), recovery : "short rest", usages : 1 }, "subclassfeature14" : { name : "Unleash the Depths", source : [["UA:SnW", 4]], minlevel : 14, description : desc([ "As an action, I can choose one of the following effects to occur within 30 ft of me:", "\u2022 Teleport myself and up to 5 willing creatures I can see within 30 ft of the chosen point", " The destination must be within 100 miles and visited by me within the last 24 hours", "\u2022 5 creatures within 30 ft of the chosen point that I can see are attacked by tentacles", " The targets take 6d10 cold or lightning damage (my choice) and are knocked prone", " Each can make a Dexterity save to halve the damage and avoid being knocked prone" ]), action : [["action", ""]], recovery : "long rest", usages : 1 } } }); // [dupl_start] (mostly) the same as in Tasha's Cauldron of Everything if (!SourceList.T) { SpellsList["mind sliver"] = { name : "Mind Sliver", classes : ["sorcerer", "warlock", "wizard"], source : [["T", 108], ["UA:SnW", 4], ["UA:FRnW", 7], ["UA:POR", 7]], level : 0, school : "Ench", time : "1 a", range : "60 ft", components : "V", duration : "1 rnd", save : "Int", description : "1 crea save or 1d6 Psychic dmg, -1d4 on first save before my next turn ends; +1d6 at CL 5, 11, and 17", descriptionCantripDie : "1 crea save or `CD`d6 Psychic dmg and subtract 1d4 from first saving throw before my next turn ends", descriptionFull : "You drive a disorienting spike of psychic energy into the mind of one creature you can see within range. The target must make an Intelligence saving throw. Unless the saving throw is successful, the target takes 1d6 psychic damage, and the first time it makes a saving throw before the end of your next turn, it must roll a d4 and subtract the number rolled from the save.\n This spell's damage increases by 1d6 when you reach 5th level (2d6), 11th level (3d6), and 17th level (4d6)." }; WeaponsList["mind sliver"] = { regExpSearch : /^(?=.*mind)(?=.*sliver).*$/i, name : "Mind Sliver", source : [["T", 108], ["UA:SnW", 4], ["UA:FRnW", 7], ["UA:POR", 7]], list : "spell", ability : 6, type : "Cantrip", damage : ["C", 6, "psychic"], range : "60 ft", description : "1 creature Int save, success - no damage, fail - also -1d4 on first save before my next turn ends", abilitytodamage : false, dc : true }; } // dupl_end ================================================ FILE: WotC material/ua_20190918_Bard-and-Paladin.js ================================================ var iFileName = "ua_20190918_Bard-and-Paladin.js"; RequiredSheetVersion("13.0.8"); // This file adds the content from the Unearthed Arcana: Bard and Paladin article to MPMB's Character Record Sheet // Define the source SourceList["UA:BnP"] = { name : "Unearthed Arcana: Bard and Paladin", abbreviation : "UA:BnP", group : "Unearthed Arcana", url : "https://media.wizards.com/2019/dnd/downloads/UA-EloquentHeroics.pdf", date : "2019/09/18" }; // Add a subclasses for the bard and one for the paladin AddSubClass("bard", "college of eloquence-ua", { regExpSearch : /^(?=.*(college|bard|minstrel|troubadour|jongleur))(?=.*eloquence).*$/i, subname : "College of Eloquence", subnameShort: "Eloquence", source : [["UA:BnP", 1]], features : { "subclassfeature3" : { name : "Universal Speech", source : [["UA:BnP", 1]], minlevel : 3, description : desc([ "As a bonus action, I can expend one bardic inspiration die to make me understood by all", "I roll the die, that many creatures I can see within 60 ft of me are affected for 10 min", "Those affected magically understand me and I gain adv. on Cha checks to influence them" ]), additional : "1 bardic inspiration die", action : [["bonus action", ""]] }, "subclassfeature3.1" : { name : "Soothing Words", source : [["UA:BnP", 1]], minlevel : 3, description: desc("I can cast Calm Emotions without expending a spell slot"), spellcastingBonus : [{ name : "Soothing Words", spells : ["calm emotions"], selection : ["calm emotions"], firstCol : 'Sp' }], usages : "Charisma modifier per ", usagescalc : "event.value = Math.max(1, What('Cha Mod'));", recovery : "long rest" }, "subclassfeature6" : { name : "Undeniable Logic", source : [["UA:BnP", 1]], minlevel : 6, description : desc([ "As a bonus action, I can expend one bardic inspiration die to encourage or befuddle", "One creature I can see within 60 ft that can hear me gets one of the following effects:", " \u2022 It heals HP equal to the die roll and has adv. on its next save before my next turn ends", " \u2022 It suffers psychic damage equal to the die roll and must make an Intelligence save", " On a failed save, it also suffers disadv. on its next save before the end of my next turn" ]), additional : "1 bardic inspiration die", action : [["bonus action", ""]] }, "subclassfeature14" : { name : "Infectious Inspiration", source : [["UA:BnP", 2]], minlevel : 14, description : desc([ "My bardic inspiration dice are not lost if the check, attack, or save it was added to fails", "As a reaction when the same thing happens but the roll succeeds, I can inspire another", "I give a creature within 60 ft that can hear me an inspiration die without expending any", "I can use this reaction a number of times per long rest equal to my Cha mod (min 1)" ]), action : [["reaction", ""]], usages : "Cha mod per ", usagescalc : "event.value = Math.max(1, What('Cha Mod'));", recovery : "long rest" } } }); AddSubClass("paladin", "oath of heroism-ua", { regExpSearch : /^(?=.*\bhero)((?=.*paladin)|((?=.*(exalted|sacred|holy|divine))(?=.*(knight|fighter|warrior|warlord|trooper)))).*$/i, subname : "Oath of Heroism", subnameShort: "Heroism", source : [["UA:BnP", 2]], features : { "subclassfeature3" : { name : "Channel Divinity: Peerless Athlete", source : [["UA:BnP", 2]], minlevel : 3, description: desc("As a bonus action, I gain adv. on Str (Athletics) and Dex (Acrobatics) checks for 10 min"), action : [["bonus action", ""]], spellcastingExtra : ["expeditious retreat", "guiding bolt", "enhance ability", "enthrall", "haste", "protection from energy", "compulsion", "freedom of movement", "commune", "conjure volley"] }, "subclassfeature3.1" : { name : "Channel Divinity: Legendary Strike", source : [["UA:BnP", 2]], minlevel : 3, description: desc("As a bonus action, my weapon attacks score a critical hit on a roll of 19 or 20 for 1 min"), action : [["bonus action", ""]] }, "subclassfeature7" : { name : "Mighty Deed", source : [["UA:BnP", 2]], minlevel : 7, description : desc([ "When I score a critical hit or reduce a target to 0 HP, I can bolster morale or demoralize", "Up to my Cha mod (min 1) of creatures I can see in 30 ft suffer the same chosen effect:", " \u2022 All creatures gain temp HP equal to 1d6 + my Charisma modifier (min 1 temp HP)", " \u2022 All creatures must make a Wis save or be frightened of me until my next turn starts" ]), recovery : "Round", usages : 1 }, "subclassfeature15" : { name : "Glorious Defense", source : [["UA:BnP", 2]], minlevel : 15, description : desc([ "As a reaction when a creature I can see hits me with an attack roll, I can gain bonus AC", "I add my Cha mod (min 1) to my AC for that attack, potentially causing it to miss me", "If it misses, I can make one weapon attack against the attacker as part of this reaction" ]), action : [["reaction", ""]] }, "subclassfeature20" : { name : "Living Myth", source : [["UA:BnP", 3]], minlevel : 20, description : desc([ "As a bonus action, I can gain the following benefits for 1 minute:", " \u2022 I have advantage on all Charisma checks", " \u2022 Once on each of my turns when I miss with a weapon attack, I can cause it to hit", " \u2022 As a reaction when I fail a saving throw, I can choose to succeed instead" ]), recovery : "long rest", usages : 1, action : [["bonus action", ""]] } } }); ================================================ FILE: WotC material/ua_20191003_Cleric-Druid-and-Wizard.js ================================================ var iFileName = "ua_20191003_Cleric-Druid-and-Wizard.js"; RequiredSheetVersion("13.0.8"); // This file adds the content from the Unearthed Arcana: Cleric, Druid, and Wizard article to MPMB's Character Record Sheet // Define the source SourceList["UA:CDnW"] = { name : "Unearthed Arcana: Cleric, Druid, and Wizard", abbreviation : "UA:CDnW", group : "Unearthed Arcana", url : "https://media.wizards.com/2019/dnd/downloads/UA-TwilightFireNames.pdf", date : "2019/10/03" }; // Add a subclass for the Cleric AddSubClass("cleric", "twilight domain-ua", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*(twilight|transition)).*$/i, subname : "Twilight Domain", source : [["UA:CDnW", 1]], spellcastingExtra : ["faerie fire", "sleep", "darkness", "invisibility", "aura of vitality", "leomund's tiny hut", "aura of life", "greater invisibility", "circle of power", "dream"], features : { "subclassfeature1" : { name : "Bonus Proficiency", source : [["UA:CDnW", 1]], minlevel : 1, description: desc("I gain proficiency with martial weapons and heavy armor"), armorProfs : [false, false, true, false], weaponProfs : [false, true] }, "subclassfeature1.1" : { name : "Eyes of Night", source : [["UA:CDnW", 1]], minlevel : 1, description : desc([ "I gain Darkvision with unlimited range and can give this benefit to allies", "As an action, I can grant this to chosen creatures I can see within 10 ft for 10 minutes" ]), vision : [["Darkvision", "unlimited"]], additional : "extend to others", usages : "Wis mod per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest", action : [["action", ""]] }, "subclassfeature1.2" : { name : "Vigilant Blessing", source : [["UA:CDnW", 1]], minlevel : 1, description : desc([ "As an action, I can grant myself or a creature I touch adv. on the next initiative roll", "This benefit ends immediately after the roll or when I use this feature again" ]), action : [["action", ""]] }, "subclassfeature2" : { name : "Channel Divinity: Twilight Sanctuary", source : [["UA:CDnW", 1]], minlevel : 2, description : desc([ "As an action, I can use my holy symbol to create a 30-ft radius sphere around myself", "It moves with me, is filled with dim light, and lasts for 1 min or until I'm incapacitated", "When a creature, including me, ends its turn inside the sphere, I can grant it a benefit", "It either gains 1d8 temp HP or one effect causing it to be charmed or frightened ends" ]), action : [["action", ""]] }, "subclassfeature6" : { name : "Steps of the Brave", source : [["UA:CDnW", 2]], minlevel : 6, description : desc([ "I have adv. on saves against being frightened", "As a bonus action while I'm in dim light or darkness, I can give myself a fly speed", "This fly speed is equal to my walking speed and lasts until the end of my next turn" ]), action : [["bonus action", ""]] }, "subclassfeature8" : { name : "Divine Strike", source : [["UA:CDnW", 1]], minlevel : 8, description: desc("Once per turn, when I hit a creature with a weapon attack, I can do extra damage"), additional : levels.map(function (n) { if (n < 8) return ""; return "+" + (n < 14 ? 1 : 2) + "d8 psychic damage"; }), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && v.isWeapon) { fields.Description += (fields.Description ? '; ' : '') + 'Once per turn +' + (classes.known.cleric.level < 14 ? 1 : 2) + 'd8 psychic damage'; } }, "Once per turn, I can have one of my weapon attacks that hit do extra psychic damage." ] } }, "subclassfeature17" : { name : "Midnight Shroud", source : [["UA:CDnW", 2]], minlevel : 17, description : desc([ "When I use a spell slot to cast Darkness, I can choose my Wis mod of creatures I can see", "The chosen creatures can see through the Darkness; I can be one of the chosen creatures" ]), calcChanges : { spellAdd : [ // note that several healing spells are not present here because they don't restore hp at casting (only later) function (spellKey, spellObj, spName) { if (spellKey == "darkness" && (!spellObj.fistCol || spellObj.fistCol == "markedbox")) { spellObj.description = "15-ft rad darkness on point/obj; no darkvision; only magic light SL 3+ works; Wis mod of crea can see"; return true; } }, "When I cast Darkness using a spell slot, I can choose a number of creatures that I can see (myself included) equal to my Wisdom modifier (minimum 1).The chosen creatures can see through the Darkness." ] } } } }); // Add a subclass for the Druid AddSubClass("druid", "circle of wildfire-ua", { regExpSearch : /^(?=.*(druid|shaman))(?=.*wild.{0,1}fire).*$/i, subname : "Circle of Wildfire", subnameShort: "Wildfire", source : [["UA:CDnW", 2]], features : { "subclassfeature2" : { name : "Circle Spells", source : [["UA:CDnW", 2]], minlevel : 2, description : desc([ "My mystical bond with a wildfire spirit gives me the ability to cast certain spells", "These are always prepared, but don't count against the number of spells I can prepare", "In addition, I learn the Fire Bolt cantrip" ]), spellcastingBonus : [{ name : "Circle Spells", spells : ["fire bolt"], selection : ["fire bolt"], firstCol : "atwill" }], spellcastingExtra : ["locate animals or plants", "scorching ray", "fireball", "plant growth", "aura of life", "fire shield", "flame strike", "raise dead"] }, "subclassfeature2.1" : { name : "Summon Wildfire", source : [["UA:CDnW", 2]], minlevel : 2, description : desc([ "As an action, I can expend a use of wild shape to summon a wildfire spirit within 30 ft", "All within 10 ft of where it manifests must make a Dex save or take 2d10 fire damage", "It disappears after 1 hour, when it is reduced to 0 HP, or I summon another", "It obeys my commands, is friendly to my allies and I, and acts on my initiative, after me", "Unless I use a bonus action to command it, it only takes the Dodge action on its turn", "Its HP maximum is equal to its Con mod + my Wis mod + five times my druid level" ]), action : [["action", ""], ["bonus action", "Command Wildfire"]], creaturesAdd : [["Wildfire Spirit"]], creatureOptions : [{ name : "Wildfire Spirit", source : [["UA:CDnW", 3]], size : 4, type : "Elemental", alignment : "Chaotic", ac : 13, hp : 12, hd : [2, 6], speed : "20 ft, fly 30 ft (hover)", scores : [10, 14, 14, 13, 15, 11], saves : ["", 4, 4, "", 4, ""], skills : { "nature" : 4 }, damage_immunities : "fire", condition_immunities : "charmed, frightened, grappled, prone, restrained", senses : "Darkvision 60 ft", passivePerception : 12, languages : "understands the languages of its creator", challengeRating : "0", proficiencyBonus : 2, proficiencyBonusLinked : true, attacksAction : 1, attacks : [{ name : "Flame Seed", ability : 2, damage : [1, 6, "fire"], range : "30 ft", description : "Ranged weapon attack", modifiers : ["", "Prof"], abilitytodamage : false }, { name : "Fiery Teleportation", ability : 5, damage : [1, 6, "fire"], range : "10 ft", description : "Dex save for all within 10 ft of teleportation origin, success - no damage; See traits", dc : true, modifiers : ["", "Prof"], abilitytodamage : false, useSpellMod : "druid" }, { name : "Fiery Manifestation", ability : 5, damage : [2, 10, "fire"], range : "10 ft", description : "Dex save for all within 10 ft where spirit is summoned, success - no damage", dc : true, abilitytodamage : false, useSpellMod : "druid" }], features : [{ name : "Creator", description : "The spirit obeys the commands of its creator and has the same proficiency bonus. It takes its turn immediately after its creator, on the same initiative count. It only takes the Dodge action, unless its creator takes a bonus action to command to do otherwise, in which case it can only take the Flame Seed, Fiery Teleportation, Dash, Disengage, Help, or Hide action." }], actions : [{ name : "Fiery Teleportation (1\xD7 per short rest)", description : "The spirit and each willing creature of its creator's choice within 5 ft of it teleport up to 30 ft to unoccupied spaces its creator can see. Each creature within 10 ft of the space that the spirit left must succeed on a Dexterity saving throw against its creator's spell save DC or take fire damage equal to 1d6 + its proficiency bonus." }], header : "Wildfire", calcChanges : { hp : function (totalHD, HDobj, prefix) { if (!classes.known.druid) return; var wisMod = Number(What('Wis Mod')); var drdLvl = classes.known.druid.level; var drdLvl5 = 5 * drdLvl; HDobj.alt.push(HDobj.conMod + wisMod + drdLvl5); HDobj.altStr.push(" = " + HDobj.conMod + " from its Constitution modifier\n + " + wisMod + " from its creator's Intelligence modifier\n + 5 \xD7 " + drdLvl + " from five times its creator's druid level (" + drdLvl5 + ")"); }, setAltHp : true, hpForceRecalc : true } }] }, "subclassfeature6" : { name : "Enhanced Bond", source : [["UA:CDnW", 3]], minlevel : 6, description : desc([ "While my wildfire spirit is present, I can have my spells originate from it (no range 'self')", "Also, I can then add 1d8 to a single roll of my spells that restore HP or deal fire damage" ]) }, "subclassfeature10" : { name : "Flames of Life", source : [["UA:CDnW", 3]], minlevel : 10, description : desc([ "As a reaction when a creature dies in 30 ft of me/wildfire spirit, I can have flames erupt", "The creature has to be Small or larger; The flames last for 1 minute or until touched", "When I see someone touch the flames, it heals or takes fire damage for 2d10 + Wis mod" ]), action : [["reaction", ""]], usages : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest" }, "subclassfeature14" : { name : "Blazing Endurance", source : [["UA:CDnW", 3]], minlevel : 14, description : desc([ "If I drop to 0 HP and don't die, I can stay at 1 HP instead with 5\xD7 druid level temp HP", "Also, all chosen creatures that I can see within 30 ft take 2d10 + druid level fire damage" ]), usages : 1, recovery : "long rest" } } }); // Add a subclass for the Wizard AddSubClass("wizard", "onomancy-ua", { regExpSearch : /onomancy|onomancer/i, subname : "Onomancy", source : [["UA:CDnW", 4]], fullname : "Onomancer", features : { "subclassfeature2" : { name : "Bonus Proficiencies", source : [["UA:CDnW", 4]], minlevel : 2, description: desc("I learn a language of my choice and gain proficiency with calligrapher's tools"), toolProfs : ["Calligrapher's tools"], languageProfs : [1] }, "subclassfeature2.1" : { name : "Extract Name", source : [["UA:CDnW", 4]], minlevel : 2, description : desc([ "As a bonus action, I can have a creature I can see within 60 ft make a Wisdom save", "If failed, it is charmed by me until my next turn ends and I mentally learn its true name", "If successful, I know that my magic failed and can't use this feature again on it" ]), usages : "Intelligence modifier per ", usagescalc : "event.value = Math.max(1, What('Int Mod'));", recovery : "long rest", action : [["bonus action", ""]] }, "subclassfeature2.2" : { name : "Fateful Naming", source : [["UA:CDnW", 4]], minlevel : 2, description : desc([ "I add Bane and Bless to my spellbook and they count as wizard spells for me", "These are always prepared, but don't count against the number of spells I can prepare", "I can cast either spell without using a spell slot by speaking the true name of a target" ]), spellcastingBonus : [{ name : "Fateful Naming", spells : ["bane", "bless"], selection : ["bane", "bless"], times : 2, firstCol : "markedbox" }], additional : "with true name", usages : "Int mod per ", usagescalc : "event.value = Math.max(1, What('Int Mod'));", recovery : "long rest", }, "subclassfeature6" : { name : "Resonants", source : [["UA:CDnW", 4]], minlevel : 6, description : desc([ 'Use the "Choose Feature" button above to add Resonants to the third page', "Whenever I gain a wizard level, I can replace a Resonant I know with another" ]), additional : levels.map(function (n) { return n < 6 ? "" : (n < 10 ? 2 : 4) + " resonants known"; }), extraTimes : levels.map(function (n) { return n < 6 ? 0 : n < 10 ? 2 : 4; }), extraname : "Resonant", extrachoices : ["Absorption", "Devastation", "Dissolution", "Nullification", "Puppetry", "Sympathy"], "absorption" : { name : "Absorption", source : [["UA:CDnW", 5]], description: desc("When the spell deals damage to the named target, I gain a number of temporary hit points"), additional : levels.map(function (n) { return (n < 10 ? 3 : n < 14 ? 4 : 5) + "d6 temporary hit points"; }) }, "devastation" : { name : "Devastation", source : [["UA:CDnW", 5]], description: desc("The named creature has disadvantage on its first saving throw against the spell") }, "dissolution" : { name : "Dissolution", source : [["UA:CDnW", 5]], description: desc("The first time the named creature takes damage from the spell, it takes extra damage"), additional : levels.map(function (n) { return "+" + (n < 10 ? 2 : n < 14 ? 3 : 4) + "d8 force damage"; }) }, "nullification" : { name : "Nullification", source : [["UA:CDnW", 5]], description : desc([ "If the named creature is affected by any other spells, I know what those spells are", "In addition, I can try to end one of my choice with an Int check (DC 10 + spell level)" ]) }, "puppetry" : { name : "Puppetry", source : [["UA:CDnW", 5]], description : desc([ "The first time the named creature takes damage from the spell, it is moved as well", "I choose to knock it prone or move it up to 10 ft directly towards me or away from me" ]) }, "sympathy" : { name : "Sympathy", source : [["UA:CDnW", 5]], description: desc("I can target the named creature with the spell even if I can't see it or it is has total cover") } }, "subclassfeature6.1" : { name : "Resonant Utterance", source : [["UA:CDnW", 4]], minlevel : 6, description : desc([ "When I use a spell slot to cast a wizard spell, I can use one resonant that I know", "The resonant will only work if I speak the true name of a creature targeted by the spell" ]), usages : "half wizard level per ", usagescalc : "event.value = classes.known.wizard ? Math.floor(classes.known.wizard.level / 2) : 0;", recovery : "long rest" }, "subclassfeature14" : { name : "Relentless Naming", source : [["UA:CDnW", 5]], minlevel : 14, description : desc([ "When I speak the true name of a creature when I cast a damage dealing spell at it,", "I can have that spell deal force or psychic damage instead of its normal damage type" ]) } } }); ================================================ FILE: WotC material/ua_20191017_Fighter-Ranger-and-Rogue.js ================================================ var iFileName = "ua_20191017_Fighter-Ranger-and-Rogue.js"; RequiredSheetVersion("13.1.14"); // This file adds the content from the Unearthed Arcana: Fighter, Ranger, and Rogue article to MPMB's Character Record Sheet // Define the source SourceList["UA:FRnR"] = { name : "Unearthed Arcana: Fighter, Ranger, and Rogue", abbreviation : "UA:FRnR", group : "Unearthed Arcana", url : "https://media.wizards.com/2019/dnd/downloads/UA-RuneSwarmRevived.pdf", date : "2019/10/17" }; // Add a subclass for the Fighter AddSubClass("fighter", "rune knight-ua", { regExpSearch : /^(?=.*rune)(?=.*knight).*$/i, subname : "Rune Knight", source : [["UA:FRnR", 1]], fullname : "Rune Knight", abilitySave : 4, features : { "subclassfeature3" : { name : "Bonus Proficiencies", source : [["UA:FRnR", 1]], minlevel : 3, description: desc("I gain proficiency with smith's tools and I learn to speak, read, and write Giant"), toolProfs : ["Smith's tools"], languageProfs : ["Giant"] }, "subclassfeature3.1" : { name : "Rune Magic", source : [["UA:FRnR", 1]], minlevel : 3, description : desc([ "I learn how to use runes to enhance my weapons, armor, and shields", 'Use the "Choose Feature" button above to select a rune and add it to the third page', "When I finish a long rest, I can inscribe each rune I know upon a different item I touch", "Each item can hold only one rune and remains there until I finish a long rest", "Runes inscribed on a carried object grant both a passive and a limited-use active effect", "Whenever I gain a fighter level, I can swap a rune I know for another", "The DC for a rune's abilities is 8 + my Proficiency bonus + my Intelligence modifier" ]), additional : levels.map(function (n){ return n < 3 ? "" : (n < 7 ? 2 : n < 10 ? 3 : n < 15 ? 4 : 5) + " runes known" }), extraTimes : levels.map(function (n) { return n < 3 ? 0 : n < 7 ? 2 : n < 10 ? 3 : n < 15 ? 4 : 5; }), extraname : "Rune", extrachoices : ["Haug (Hill Rune)", "Ild (Fire Rune)", "Ise (Frost Rune)", "Skye (Cloud Rune)", "Stein (Stone Rune)", "Uvar (Storm Rune)"], "haug (hill rune)" : { name : "Haug", source : [["UA:FRnR", 1]], description : desc([ "While I wear an object inscribed with this rune, I gain a resilience reminiscent of hill giants", "I always gain advantage on saves against being poisoned and resistance to poison damage", "As a bonus action, I can invoke it to gain resistance to bludg/slash/pierc damage for 1 min" ]), action : [["bonus action", " (invoke)"]], limfeaname : "Haug Rune", additional : "invoke", usages : ["", "", 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2], recovery : "short rest", dmgres : ["Poison"], savetxt : { adv_vs : ["poison"] } }, "ild (fire rune)" : { name : "Ild", source : [["UA:FRnR", 1]], description : desc([ "While I wear an object inscribed with this, I gain craftsmanship reminiscent of fire giants", "I always double my proficiency bonus when making an ability check with a tool", "When I hit a creature with a weapon attack, I can invoke it to summon fiery shackles", "It must make a Str save or be restrained for 1 min; Repeat save at end of each of its turns", "While restrained, the creature takes 2d6 fire damage at the start of each of its turns" ]), limfeaname : "Ild Rune", additional : "invoke", usages : ["", "", 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2], recovery : "short rest", skillstxt : "expertise with all tools I am proficient with", eval : function () { Checkbox('Too Exp', true); }, removeeval : function () { Checkbox('Too Exp', false); } }, "ise (frost rune)" : { name : "Ise", source : [["UA:FRnR", 2]], description : desc([ "While I wear an object inscribed with this, I gain a stoic calm reminiscent of frost giants", "I always gain advantage on Wisdom (Animal Handling) and Charisma (Intimidation) checks", "As a bonus action, I can invoke this rune to gain +2 Strength (max 30) for 10 minutes" ]), action : [["bonus action", " (invoke)"]], limfeaname : "Ise Rune", additional : "invoke", usages : ["", "", 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2], recovery : "short rest", advantages : [ ["Animal Handling", true], ["Intimidation", true] ] }, "skye (cloud rune)" : { name : "Skye", source : [["UA:FRnR", 2]], description : desc([ "While I wear an object inscribed with this, I gain a deceptiveness reminiscent of cloud giants", "I always gain advantage on Dexterity (Sleight of Hand) and Charisma (Deception) checks", "As a reaction when I or a target I see get hit by an attack within 30 ft, I can invoke this", "This causes the attack to target another within 30 ft with the same roll (ignore range)" ]), action : [["reaction", " (invoke)"]], limfeaname : "Skye Rune", additional : "invoke", usages : ["", "", 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2], recovery : "short rest", advantages : [ ["Sleight of Hand", true], ["Deception", true] ] }, "stein (stone rune)" : { name : "Stein", source : [["UA:FRnR", 2]], description : desc([ "While I wear an object inscribed with this, I gain insightfulness reminiscent of stone giants", "I always gain adv. on Wisdom (Insight) checks and I gain darkvision 60 ft (or +30 ft)", "As a reaction when a creature I can see ends it turn within 30 ft, I can invoke this rune", "This causes the creature to make a Wisdom save or be charmed by me for 1 minute", "While charmed, it descends into a dreamy stupor, becoming incapacitated and has speed 0", "This ends early if it takes damage or someone uses an action to shake it out of this state" ]), action : [["reaction", " (invoke)"]], limfeaname : "Stein Rune", additional : "invoke", usages : ["", "", 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2], recovery : "short rest", vision : [["Darkvision", "fixed 60"], ["Darkvision", "+30"]], advantages : [ ["Insight", true] ] }, "uvar (storm rune)" : { name : "Uvar", source : [["UA:FRnR", 2]], description : desc([ "While I wear an object inscribed with this rune, I can glimpse the future like storm giants", "I always gain adv. on Int (Arcana) checks and I can't be surprised while not incapacitated", "As a bonus action, I can invoke it to enter a prophetic state for 1 min or till incapacitated", "While in this state, I can use a reaction to cause a roll to gain advantage or disadvantage", "I can do this for attacks, saves, and checks of myself or others I can see within 60 ft of me" ]), action : [["bonus action", " (invoke)"]], limfeaname : "Uvar Rune", additional : "invoke", usages : ["", "", 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2], recovery : "short rest", advantages : [ ["Arcana", true] ], savetxt : { immune : ["surprised"] }, } }, "subclassfeature3.2" : { name : "Giant Might", source : [["UA:FRnR", 2]], minlevel : 3, description : desc([ "As a bonus action, I can imbue myself with giant magic for 1 minute and gain benefits:", " \u2022 Space permitted, I grow to Large size along with everything I'm wearing", " \u2022 Advantage on Strength check and saves; My weapon attacks deal extra damage" ]), usages : 2, recovery : "long rest", additional : levels.map(function (n){ return n < 3 ? "" : "+1d" + (n < 10 ? 6 : 8) + " weapon damage" }), action : [["bonus action", ""]], savetxt : { text : ["Adv. on Str saves in giant might"] } }, "subclassfeature7" : { name : "Defensive Runes", source : [["UA:FRnR", 2]], minlevel : 7, description : desc([ "As a reaction when I see a creature get hit by an attack within 60 ft, I can grant it AC", "The creature adds 1 + my Int mod (min 2) to its AC for the attack; I learn another rune" ]), action : [["reaction", ""]] }, "subclassfeature10" : { name : "Great Stature", source : [["UA:FRnR", 2]], minlevel : 10, description : desc([ "My runes permanently make me grow; I add 3d4 inches to my length", "In addition, my Giant Might adds more weapon damage and I learn another rune" ]) }, "subclassfeature15" : { name : "Rune Magic Mastery", source : [["UA:FRnR", 3]], minlevel : 15, description : " \n I can use each of my runes twice instead of once per short rest and I learn another rune" }, "subclassfeature18" : { name : "Blessing of the All Father", source : [["UA:FRnR", 3]], minlevel : 18, description: desc("When I use Giant Might, I can have it also affect a willing ally that I can see within 60 ft") } } }); // Add a subclass for the Ranger (and also to the Revised Ranger) var UAFRnR_rangerSubclassSwarmkeeperUA = AddSubClass("ranger", "swarmkeeper-ua", { regExpSearch : /swarmkeeper/i, subname : "Swarmkeeper", source : [["UA:FRnR", 3]], fullname : "Swarmkeeper", features : { "subclassfeature3" : { name : "Swarmkeeper Magic", source : [["UA:FRnR", 3]], minlevel : 3, description : desc([ "I learn Mage Hand; When I cast it, the hand takes the form of swarming nature spirits", "I get bonus spells known, which do not count against the number of spells I can know" ]), spellcastingBonus : [{ name : "Swarmkeeper Magic", spells : ["mage hand"], selection : ["mage hand"], firstCol : "atwill" }], spellcastingExtra : ["faerie fire", "web", "gaseous form", "giant insect", "insect plague"], spellcastingExtraApplyNonconform : true }, "subclassfeature3.1" : { name : "Gathered Swarm", source : [["UA:FRnR", 3]], minlevel : 3, description : desc([ "I constantly have a swarm of fey spirits crawling in my space, they look like Tiny beasts", "As a bonus action, I can agitate that swarm for 1 minute, empowering my attacks", "Once per turn when I hit with a weapon attack, I can have it deal extra force damage", "In addition, the creature hit is moved 5 ft towards or away from me (my choice)" ]), action : [["bonus action", ""]], additional : levels.map(function (n) { return n < 3 ? "" : "+" + (n < 11 ? 1 : 2) + "d6 force dmg"; }), usages : "Wis mod per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest", }, "subclassfeature7" : { name : "Writhing Tide", source : [["UA:FRnR", 3]], minlevel : 7, description : desc([ "Whenever I activate Gathered Swarm, I gain one additional benefit of my choice:", " \u2022 I gain +10 ft walking speed and I can take the Disengage action as a bonus action", " \u2022 I gain climb speed equal to walk speed & need no check for difficult surfaces or ceilings", " \u2022 I gain a 10 ft fly speed and I can hover" ]), autoSelectExtrachoices : [{ extrachoice : "scuttling eyes", minlevel : 11 }, { extrachoice : "storm of minions", minlevel : 15 }], "scuttling eyes" : { name : "Scuttling Eyes", extraname : "Swarmkeeper 11", source : [["UA:FRnR", 4]], description : desc([ "As an action, I can from a spirit of my swarm into a Tiny beast of my choice for 1 hour", "It has AC 18, my senses, and 40 ft speed it can use to walk, climb, fly, or swim", "It telepathically relays what it sees and hears to me and I can speak through it", "During my turn, I can telepathically command it and it can hide using my Stealth", "If it is damaged, I must make a Wis save (DC 10 or half damage if higher) or it vanishes", "As an action, I can dismiss it early and I can teleport to an empty space within 5 ft of it", "I can also invoke this ability by spending a spell slot of 3rd level or higher" ]), action : [["action", " (summon/dismiss)"]], additional : "or level 3 spell slot", usages : 1, recovery : "long rest", }, "storm of minions" : { name : "Storm of Minions", extraname : "Swarmkeeper 15", source : [["UA:FRnR", 4]], description : desc([ "As an action, I can create a 10-ft radius swarm-filled sphere on a point within 120 ft", "I can choose any number of creatures that I can see to be unaffected by it", "It lasts minute, is difficult terrain for others, and I can move it 30 ft as a bonus action", "Others that start their turn in it take 2d8 necrotic damage and must make a Con save", "On a success, they take half damage, but if failed, are blinded until their next turn starts", "At the start of my turn, if a Small or larger creature was damaged by it, I heal 1d8 HP", "I can also invoke this ability by spending a spell slot of 4th level or higher" ]), action : [["action", ""]], additional : "or level 4 spell slot", usages : 1, recovery : "long rest" } } } }); if (ClassList.rangerua) { ClassList.rangerua.subclasses[1].push(UAFRnR_rangerSubclassSwarmkeeperUA); }; // Add a subclass for the Rogue AddSubClass("rogue", "the revived-ua", { regExpSearch : /^(?=.*(rogue|miscreant))(?=.*revived).*$/i, subname : "the Revived", source : [["UA:FRnR", 4]], features : { "subclassfeature3" : { name : "Tokens of Past Lives", source : [["UA:FRnR", 4]], minlevel : 3, description: desc("I gain a chosen skill or tool proficiency and can change it whenever I finish a long rest"), skillstxt : "Choose one skill or tool; I can change the choice whenever I finish a long rest" }, "subclassfeature3.1" : { name : "Revived Nature", source : [["UA:FRnR", 4]], minlevel : 3, description : desc([ "I have resistance to poison damage and adv. on saves against disease and being poisoned", "I don't need to eat, drink, breathe, or sleep; I must spend 4 hours inactive for a long rest", "I'm motionless during this inactive state, remain semiconscious, and can hear as normal" ]), dmgres : ["Poison"], savetxt : { adv_vs : ["disease", "poison"] } }, "subclassfeature3.2" : { name : "Bolts from the Grave", source : [["UA:FRnR", 5]], minlevel : 3, description : desc([ "Immediately after I use my cunning action, I can unleash bolts of necrotic energy", "This is a ranged spell attack with 30 ft range, which I'm proficient with, using Dexterity", "If it hits, it deals my sneak attack damage, provided I didn't use sneak attack this turn" ]), weaponOptions : [{ regExpSearch : /^(?=.*bolts?)(?=.*grave).*$/i, name : "Bolts from the Grave", source : [["UA:FRnR", 5]], ability : 2, type : "Spell", damage : [1, 6, "necrotic"], range : "30 ft", description : "Immediately after using cunning action; Only if I not yet used sneak attack this turn", abilitytodamage : true, isBoltsFromTheGrave : true, selectNow : true }], calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.rogue && classes.known.rogue.level && v.theWea.isBoltsFromTheGrave) { fields.Damage_Die = Math.ceil(classes.known.rogue.level / 2) + 'd6'; }; } ] } }, "subclassfeature9" : { name : "Connect with the Dead", source : [["UA:FRnR", 5]], minlevel : 9, description : desc([ "I can cast Speak with Dead without a spell slot or material components using Intelligence", "Doing this gives me a random proficiency (roll 1d3) that lasts until I finish my next rest:", "[1] language of my choice; [2] skill or tool of my choice; [3] saving throw of my choice" ]), spellcastingBonus : [{ name : "Connect with the Dead", spells : ["speak with dead"], selection : ["speak with dead"], firstCol : "oncesr", spellcastingAbility : 4 }], spellChanges : { "speak with dead" : { components : "V,S", compMaterial : "", changes : "Using Connect with the Dead, I can cast Speak with Dead once per short rest without using a spell slot or material component." } }, usages : 1, recovery : "short rest" }, "subclassfeature13" : { name : "Audience with Death", source : [["UA:FRnR", 5]], minlevel : 13, description : desc([ "I have adv. on death saves; Whenever I make one, I can ask a question to a death entity", 'It answers truthfully with "yes", "no", or "unknown", using the knowledge of all that died', "When at 0 HP and healed or stabilized, I can change any of my traits/ideals/bonds/flaws" ]), savetxt : { text : ["Adv. on death saves"] }, autoSelectExtrachoices : [{ extrachoice : "ethereal jaunt", minlevel : 17 }], "ethereal jaunt" : { name : "Ethereal Jaunt", source : [["UA:FRnR", 5]], extraname : "the Revived 17", description : desc([ "I can now use my cunning action to teleport to an unoccupied space within 30 ft", "I don't need to see where I'm going, but it fails if I'd go through a magical force effect", "I'm shunted if I appear in an occupied space and take force damage of 2\xD7 the ft moved" ]) } } } }); ================================================ FILE: WotC material/ua_20191104_Class-Feature-Variants.js ================================================ var iFileName = "ua_20191104_Class-Feature-Variants.js"; RequiredSheetVersion("14.0.1-beta", 15); // This file adds the content from the Unearthed Arcana: Class Feature Variants article to MPMB's Character Record Sheet // Define the source SourceList["UA:CFV"] = { name : "Unearthed Arcana: Class Feature Variants", abbreviation : "UA:CFV", group : "Unearthed Arcana", url : "https://media.wizards.com/2019/dnd/downloads/UA_ClassFeatures.pdf", date : "2019/11/04" }; // Proficiency Versatility is not something governed by import automation, thus skipped // Barbarian alternative class features CreateClassFeatureVariant("barbarian", "danger sense", "Survival Instincts (ua)", { name : "Survival Instincts", source : [["UA:CFV", 1]], description : desc([ "I gain proficiency and expertise with two skills of my choice", "I can choose from Animal Handling, Medicine, Nature, Perception, and Survival" ]), skillstxt : "Proficiency and expertise with two from Animal Handling, Medicine, Nature, Perception, and Survival" }); CreateClassFeatureVariant("barbarian", "fast movement", "Instinctive Pounce (ua)", { name : "Instinctive Pounce", source : [["UA:CFV", 1]], description : desc([ "As a reaction when a creature ends it move within 15 ft of me, I can move towards it", "I move up to half my speed closer to it; This move doesn't provoke opportunity attacks" ]), action : [["reaction", ""]] }); // Bard alternative class features enhancements AddFeatureChoice(ClassList.bard.features.spellcasting, true, "Expanded Spell List (ua)", { name : "Expanded Bard Spell List", extraname : "Optional Bard 1", source : [["UA:CFV", 3]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "bard" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["cause fear", "color spray", "command", "aid", "enlarge/reduce", "mind spike", "mirror image", "phantasmal force", "mass healing word", "slow", "tiny servant", "phantasmal killer", "contact other plane", "rary's telepathic bond", "heroes' feast", "mental prison", "scatter", "tenser's transformation", "power word pain", "prismatic spray", "antipathy/sympathy", "maze", "prismatic wall"]); }, "This alternative class feature enhancement expands the spell list of the bard class with the following spells (spell level in brackets): Cause Fear (1), Color Spray (1), Command (1), Aid (2), Enlarge/Reduce (2), Mind Spike (2), Mirror Image (2), Phantasmal Force (2), Mass Healing Word (3), Slow (3), Tiny Servant (3), Phantasmal Killer (4), Contact Other Plane (5), Rary's Telepathic Bond (5), Heroes' Feast (6), Mental Prison (6), Scatter (6), Tenser's Transformation (6), Power Word Pain (7), Prismatic Spray (7), Antipathy/Sympathy (8), Maze (8), and Prismatic Wall (9)." ] } }, "Optional 1st-level bard features"); AddFeatureChoice(ClassList.bard.features.spellcasting, true, "Magical Inspiration (ua)", { name : "Magical Inspiration", extraname : "Optional Bard 1", source : [["UA:CFV", 3]], description : desc([ "A bardic inspiration die recipient can also use it when casting a damaging or healing spell", "They can expend the die and add its result to one damage or healing roll of the spell" ]) }, "Optional 1st-level bard features"); AddFeatureChoice(ClassList.bard.features.spellcasting, true, "Spell Versatility (ua)", { name : "Spell Versatility", extraname : "Optional Bard 1", source : [["UA:CFV", 3]], description: desc("After a long rest, I can swap a bard cantrip or spell I know for another of the same level") }, "Optional 1st-level bard features"); // Cleric alternative class features and enhancements AddFeatureChoice(ClassList.cleric.features.spellcasting, true, "Cantrip Versatility (ua)", { name : "Cantrip Versatility", extraname : "Optional Cleric 1", source : [["UA:CFV", 3]], description: desc("Whenever I gain a cleric level, I can replace a cleric cantrip I know with another") }, "Optional 1st-level cleric features"); AddFeatureChoice(ClassList.cleric.features.spellcasting, true, "Expanded Spell List (ua)", { name : "Expanded Cleric Spell List", extraname : "Optional Cleric 1", source : [["UA:CFV", 3]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "cleric" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["cause fear", "wrathful smite", "branding smite", "aura of vitality", "aura of life", "aura of purity", "skill empowerment", "wall of light", "power word heal"]); }, "This alternative class feature enhancement expands the spell list of the cleric class with the following spells (spell level in brackets): Cause Fear (1), Wrathful Smite (1), Branding Smite (2), Aura of Vitality (3), Aura of Life (4), Aura of Purity (4), Skill Empowerment (5), Wall of Light (5), and Power Word Heal (9)." ] } }, "Optional 1st-level cleric features"); AddFeatureChoice(ClassList.cleric.features["channel divinity"], true, "Harness Divine Power (ua)", { name : "Channel Divinity:\xA0Harness Divine Power", source : [["UA:CFV", 4]], description: desc("As a bonus action, I can use my holy symbol and a prayer to regain 1 used level 1 spell slot"), action : [["bonus action", ""]] }, "Optional 2nd-level cleric features"); // Cleric subclass alternative feature, so only run this after we are sure all subclasses have been added RunFunctionAtEnd(function() { for (var i = 0; i < ClassList.cleric.subclasses[1].length; i++) { var domain = ClassList.cleric.subclasses[1][i]; var objDomain = ClassSubList[domain]; if (!objDomain || !objDomain.features.subclassfeature8 || !(/divine strike|potent spellcasting/i).test(objDomain.features.subclassfeature8.name)) continue; CreateClassFeatureVariant(domain, "subclassfeature8", "Blessed Strikes (ua)", { name : "Blessed Strikes", source : [["UA:CFV", 4]], description : desc([ "When a creature is damaged by my weapon attack/spell, I can do +1d8 radiant damage", "Once I deal this extra damage, I can't do so again until the start of my next turn" ]), calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.cleric && (v.isWeapon || (v.thisWeapon[3] && SpellsList[v.thisWeapon[3]].level === 0)) && /\d/.test(fields.Damage_Die)) { fields.Description += (fields.Description ? '; ' : '') + 'Once per round +1d8 radiant damage'; } }, "Once per turn when a creature takes damage from one of my spell or weapon attacks, I can also deal 1d8 radiant damage to the target." ] } }); } }); // Druid alternative class features and enhancements AddFeatureChoice(ClassList.druid.features.spellcasting, true, "Cantrip Versatility (ua)", { name : "Cantrip Versatility", extraname : "Optional Druid 1", source : [["UA:CFV", 4]], description: desc("Whenever I gain a druid level, I can replace a druid cantrip I know with another") }, "Optional 1st-level druid features"); AddFeatureChoice(ClassList.druid.features.spellcasting, true, "Expanded Spell List (ua)", { name : "Expanded Druid Spell List", extraname : "Optional Druid 1", source : [["UA:CFV", 4]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "druid" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["ceremony", "protection from evil and good", "augury", "continual flame", "enlarge/reduce", "aura of vitality", "elemental weapon", "revivify", "thunder step", "wall of sand", "divination", "fire shield", "cone of cold", "dawn", "immolation", "flesh to stone", "symbol", "incendiary cloud", "mass polymorph", "power word heal"]); }, "This alternative class feature enhancement expands the spell list of the druid class with the following spells (spell level in brackets): Ceremony (1), Protection from Evil and Good (1), Augury (2), Continual Flame (2), Enlarge/Reduce (2), Aura of Vitality (3), Elemental Weapon (3), Revivify (3), Thunder Step (3), Wall of Sand (3), Divination (4), Fire Shield (4), Cone of Cold (5), Dawn (5), Immolation (5), Flesh to Stone (6), Symbol (7), Incendiary Cloud (8), Mass Polymorph (9), and Power Word Heal (9)." ] } }, "Optional 1st-level druid features"); // [dupl_start] the same as in Tasha's Cauldron of Everything if (!SourceList.T) { var UACFV_Wild_Companion = { name : "Wild Companion", extraname : "Optional Druid 2", source : [["T", 35], ["UA:CFV", 4]], description : desc([ "I can expend a use of wild shape to cast Find Familiar without material components", "The familiar always has the Fey type and disappears after half my druid level in hours" ]), additional : levels.map(function (n) { return n < 2 ? "" : Math.floor(n/2) + " hours"; }), spellcastingBonus : [{ name : "Wild Companion", spells : ["find familiar"], selection : ["find familiar"], firstCol : "Sp" }], spellChanges : { "find familiar" : { components : "V,S", compMaterial : "", description : "Gain the services of a fey familiar; can see through its eyes; it can deliver touch spells; see B", duration : "\u00BD druid lvl h", changes : "By using my Wild Companion class feature, I can expend a use of wild shape to cast Find Familiar without material components. The familiar created this way always has the Fey type and disappears after a number of hours equal to half my druid level." } } } AddFeatureChoice(ClassList.druid.features["subclassfeature2.wild shape"], true, "Wild Companion", UACFV_Wild_Companion, "Optional 2nd-level druid features"); if (ClassSubList["druid-circle of the moon"]) { AddFeatureChoice(ClassSubList["druid-circle of the moon"].features["subclassfeature2.wild shape"], true, "Wild Companion", UACFV_Wild_Companion, "Optional 2nd-level druid features"); } } // dupl_end // The enhancement option for fighting styles has to be added to each class separately AddFeatureChoice(ClassList.fighter.features["fighting style"], true, "Martial Versatility (ua)", { name : "Martial Versatility", extraname : "Optional Fighter 1", source : [["UA:CFV", 12]], description: desc("Whenever I gain a fighter level, I can swap a fighting style I know for another I'm allowed") }, "Optional 1st-level fighter features"); // All the other fighting styles are available for all three classes, fighter, paladin, and ranger, so add them to all three here AddFightingStyle(["fighter", "ranger", "paladin"], "Blind Fighting (ua)", { name : "Blind Fighting Style", source : [["UA:CFV", 12]], description : desc([ "Being unable to see a creature doesn't impose disadvantage on my attack rolls against it", "However, this doesn't help me if the creature is hidden from me" ]) }); // [dupl_start] the same as in Tasha's Cauldron of Everything if (!SourceList.T) { AddFightingStyle(["fighter", "paladin"], "Interception", { name : "Interception Fighting Style", source : [["T", 41], ["UA:CFV", 12]], description : desc([ "As a reaction when a creature I can see hits another within 5 ft of me, I can intercept", "I reduce the damage the target takes by 1d10 + my Proficiency Bonus (min 0 damage)", "I can't be the target and it requires me wielding a shield or a simple or martial weapon" ]), action : [["reaction", ""]] }); } // dupl_end AddFightingStyle(["ranger"], "Interception", { // different for the Ranger, doesn't get this in TCoE name : "Interception Fighting Style", source : [["UA:CFV", 12]], description : desc([ "As a reaction when a creature I can see hits a target within 5 ft of me, I can intercept", "I reduce the damage the target takes by 1d10 + my Proficiency Bonus (min 0 damage)", "I can only do this while wielding a shield or a simple or martial weapon" ]), action : [["reaction", ""]] }); AddFightingStyle(["fighter", "ranger", "paladin"], "Thrown Weapon Fighting (ua)", { name : "Thrown Weapon Fighting Style", source : [["UA:CFV", 13]], description : desc([ "I can draw a weapon with the thrown property as part of the attack I make with it", "In addition, my ranged attacks made with thrown weapons deal +1 damage" ]), calcChanges : { atkAdd : [ function (fields, v) { if (v.isThrownWeapon && v.isMeleeWeapon) { fields.Description += (fields.Description ? '; ' : '') + '+1 damage when thrown'; }; }, "I deal +1 damage when I hit a ranged attack made with a thrown weapon." ], atkCalc : [ function (fields, v, output) { if (v.isThrownWeapon && !v.isMeleeWeapon) { output.extraDmg += 1; }; }, "" ] } }); AddFightingStyle(["fighter", "ranger", "paladin"], "Unarmed Fighting (ua)", { name : "Unarmed Fighting Style", source : [["UA:CFV", 13]], description : desc([ "My unarmed strikes deal 1d6 damage, or 1d8 damage when I have both hands free", "When I successfully start a grapple, I can deal 1d4 bludgeoning damage to the target", "Until the grapple ends, I can also deal this damage whenever I hit it with a melee attack" ]), calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName == "unarmed strike") { if (fields.Damage_Die == 1 || fields.Damage_Die == "1d4") fields.Damage_Die = '1d6'; fields.Description += (fields.Description ? '; ' : '') + 'Versatile (d8)'; }; }, "My unarmed strikes deal 1d6 damage instead of 1, which increases to 1d8 if I have both hands free to make an unarmed strike with.", 2 ] } }); if (ClassSubList["fighter-battle master"]) { // Fighter alternative class features and enhancements (only if Battle Master subclass exists) AddFeatureChoice(ClassSubList["fighter-battle master"].features["subclassfeature3.1"], true, "Maneuver Versatility (ua)", { name : "Maneuver Versatility", extraname : "Optional Battle Master 3", source : [["UA:CFV", 5]], description: desc("Whenever I finish a long rest, I can replace a Maneuver I know with another") }, "Optional 3rd-level battle master features"); // [dupl_start] the same as in Tasha's Cauldron of Everything if (!SourceList.T) { AddFightingStyle(["fighter"], "Superior Technique", { name : "Superior Technique", source : [["T", 41], ["UA:CFV", 5]], additional: "1 maneuver; d6, 1\xD7 per short rest", description : desc([ "I gain one superiority die (d6) that I can expend to fuel a special Maneuver", "I can only use one Maneuver per attack; DCs are 8 + Prof B. + Str/Dex mod, my choice", 'Use the "Choose Feature" button above to add a Maneuver to the third page' ]), bonusClassExtrachoices : [{ "class" : "fighter", "subclass" : "fighter-battle master", "feature" : "subclassfeature3.1", "bonus" : 1 }], extraLimitedFeatures : [{ name : "Combat Superiority", usages : 1, additional : 'd6', recovery : "short rest", addToExisting : true }] }); // New Maneuver options AddFeatureChoice(ClassSubList["fighter-battle master"].features["subclassfeature3.1"], true, "Ambush", { name : "Ambush", source : [["T", 42], ["UA:CFV", 5]], description : desc([ "When I make an initiative roll or a Dex (Stealth) check, I can add a superiority die to it", "I can't do this if I'm incapacitated" ]) }); } // dupl_end // New Maneuver options AddFeatureChoice(ClassSubList["fighter-battle master"].features["subclassfeature3.1"], true, "Bait and Switch (ua)", { name : "Bait and Switch", source : [["UA:CFV", 5]], description : desc([ "On my turn, I can expend a superiority die to swap places with an ally within 5 ft", "Doing this costs me 5 ft of movement, but this doesn't provoke opportunity attacks", "The ally then adds the superiority die to its AC until the start of my next turn" ]) }); AddFeatureChoice(ClassSubList["fighter-battle master"].features["subclassfeature3.1"], true, "Brace (ua)", { name : "Brace", source : [["UA:CFV", 5]], description : desc([ "As a reaction when a creature I can see moves within 5 of me, I can attack it", "I expend a superiority die and make one weapon attack, adding the die to the damage" ]), limfeaname : "Brace\xA0", action : [["reaction", ""]] }); AddFeatureChoice(ClassSubList["fighter-battle master"].features["subclassfeature3.1"], true, "Restraining Strike", { name : "Restraining Strike", source : [["UA:CFV", 5]], description : desc([ "Immediately after hitting with a melee weapon attack, I can use a bonus action to grapple", "I add the superiority die to the Str (Athletics) check; I can only do this on my own turn", "The target is also restrained while grappled in this way" ]), action : [["bonus action", " (after melee weapon hit)"]] }); AddFeatureChoice(ClassSubList["fighter-battle master"].features["subclassfeature3.1"], true, "Silver Tongue", { name : "Silver Tongue", source : [["UA:CFV", 5]], description: desc("When I make a Cha (Deception) or Cha (Persuasion) check, I can add a superiority die to it") }); AddFeatureChoice(ClassSubList["fighter-battle master"].features["subclassfeature3.1"], true, "Snipe", { name : "Snipe", source : [["UA:CFV", 5]], description : desc([ "As a bonus action, I can expend a superiority die and make a ranged weapon attack", "I can draw a thrown weapon as part of making this attack; I add the die to the damage" ]), action : [["bonus action", ""]] }); AddFeatureChoice(ClassSubList["fighter-battle master"].features["subclassfeature3.1"], true, "Studious Eye", { name : "Studious Eye", source : [["UA:CFV", 5]], description: desc("When I make a Wis (Insight) or Int (Investigation) check, I can add a superiority die to it") }); } // Monk class features enhancements // Add the monk weapon options as extrachoices RunFunctionAtEnd(function () { var UACFV_Monk_Weapon = { name : "Martial Arts Weapons", extraname : "Monk Weapon", extrachoices : [], source : [["UA:CFV", 6]], description : desc([ "Unarmed strike \u0026 5 + Wis mod simple/martial weapons (not two-handed/heavy/special)", "With these monk weapons, I can use Dex instead of Str and the Martial Arts damage die", "When taking an Attack action with these, I get one unarmed strike as a bonus action" ]), calcChanges : { atkAdd : [ function (fields, v) { var monkWeapons = ["unarmed strike"].concat(GetFeatureChoice("classes", "monk", "martial arts", true)); if (classes.known.monk && classes.known.monk.level && (monkWeapons.indexOf(v.baseWeaponName) != -1 || (/monk weapon/i).test(v.WeaponTextName))) { var aMonkDie = function (n) { return n < 5 ? 4 : n < 11 ? 6 : n < 17 ? 8 : 10; }(classes.known.monk.level); try { var curDie = eval_ish(fields.Damage_Die.replace('d', '*')); } catch (e) { var curDie = 'x'; }; if (isNaN(curDie) || curDie < aMonkDie) { fields.Damage_Die = '1d' + aMonkDie; }; if (fields.Mod === 1 || fields.Mod === 2 || What(AbilityScores.abbreviations[fields.Mod - 1] + " Mod") < What(AbilityScores.abbreviations[v.StrDex - 1] + " Mod")) { fields.Mod = v.StrDex; } }; }, "I can use either Strength or Dexterity and my Martial Arts damage die in place of the normal damage die for any 'Monk Weapons', which include unarmed strike and 5 + my Wisdom modifier of simple or martial weapons of my choice that I'm proficient with and that don't have the two-handed, heavy, or special property.\n I can select these weapon using the \"Choose Feature\" button on the 2nd page, or have them count as such by including the words \"Monk Weapon\" in the name of the weapon.", 1 ] } }; for (var weapon in WeaponsList) { var aWea = WeaponsList[weapon]; // skip attacks that are not simple or martial weapons, that have the heavy, two-handed, or special property, are magic weapons, or those that are spells or cantrips if (aWea.isMagicWeapon || !(/simple|martial/i).test(aWea.type) || (/heavy|special|((^|[^+-]\b)2|\btwo).?hand(ed)?s?/i).test(aWea.description) || aWea.special || (/spell|cantrip/i).test(aWea.list)) continue; UACFV_Monk_Weapon.extrachoices.push(aWea.name); UACFV_Monk_Weapon[aWea.name.toLowerCase()] = { name : aWea.name, description : "", source : aWea.source, weaponsAdd : { select : [aWea.name] }, submenu : ((/simple/i).test(aWea.type) ? "\x1BSimple weapon, " : "Martial weapon, ") + ((/^(?!.*melee).*\d+.*$/i).test(aWea.range) ? "ranged" : "melee"), prereqeval : 'testSource("' + weapon + '", WeaponsList["' + weapon + '"], "weapExcl") ? "skip" : isProficientWithWeapon("' + weapon + '", WeaponsList["' + weapon + '"]);' } } CreateClassFeatureVariant("monk", "martial arts", "Choose Monk Weapons", UACFV_Monk_Weapon); // Move some stuff around, because the original Martial Arts feature was moved into a choice, but we want to keep its original "additional", "action", "eval", "removeeval" attributes var UACFV_Martial_Arts = ClassList.monk.features["martial arts"]; var UACFV_Martial_Arts_Original = UACFV_Martial_Arts["\x1B[original] martial arts"]; if (UACFV_Martial_Arts_Original) { ["additional", "action", "eval", "removeeval"].forEach(function (n) { if (!UACFV_Martial_Arts_Original[n]) return; UACFV_Martial_Arts[n] = UACFV_Martial_Arts_Original[n]; delete UACFV_Martial_Arts_Original[n]; }); } }); // Ki enhancements AddFeatureChoice(ClassList.monk.features.ki, true, "Ki-Fueled Strike (ua)", { name : "Ki-Fueled Strike", extraname : "Optional Monk 2", source : [["UA:CFV", 6]], description: desc("If I spend any ki points during my action, I can make an unarmed strike as a bonus action"), action : [["bonus action", ""]] }, "Optional 2nd-level monk features"); AddFeatureChoice(ClassList.monk.features.ki, true, "Distant Eye (1 ki point) (ua)", { name : "Distant Eye", extraname : "Optional Monk 2", source : [["UA:CFV", 6]], description : " [1 ki point]\n My ranged weapon attacks during this turn ignore the disadvantage from long range" }, "Optional 2nd-level monk features"); AddFeatureChoice(ClassList.monk.features.ki, true, "Quickened Healing (2 ki points) (ua)", { name : "Quickened Healing", extraname : "Optional Monk 2", source : [["UA:CFV", 6]], description : " [2 ki points]\n As an action, I can regain a number of hit points equal to the roll of my martial arts die", action : [["action", ""]] }, "Optional 2nd-level monk features"); // Paladin alternative class features and enhancements // [dupl_start] the same as in Tasha's Cauldron of Everything if (!SourceList.T) { AddFightingStyle(["paladin"], "Blessed Warrior", { name : "Blessed Warrior Fighting Style", source : [["T", 52], ["UA:CFV", 6]], description : desc([ "I learn two cleric cantrips that count as paladin spells for me and use Cha for spellcasting", "Whenever I gain a paladin level, I can swap one of these for another cleric cantrip" ]), spellcastingBonus : [{ name : "Blessed Warrior", "class" : "cleric", level : [0, 0], times : 2 }] }); } // dupl_end // The enhancement option for fighting styles has to be added to each class separately AddFeatureChoice(ClassList.paladin.features.spellcasting, true, "Martial Versatility (ua)", { name : "Martial Versatility", extraname : "Optional Paladin 2", source : [["UA:CFV", 12]], description: desc("Whenever I gain a paladin level, I can swap a fighting style I know for another I'm allowed") }, "Optional 2nd-level paladin features"); AddFeatureChoice(ClassList.paladin.features.spellcasting, true, "Expanded Spell List (ua)", { name : "Expanded Paladin Spell List", extraname : "Optional Paladin 2", source : [["UA:CFV", 6]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "paladin" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["gentle repose", "prayer of healing", "warding bond", "life transference", "spirit guardians", "dawn", "flame strike"]); }, "This alternative class feature enhancement expands the spell list of the paladin class with the following spells (spell level in brackets): Gentle Repose (2), Prayer of Healing (2), Warding Bond (2), Life Transference (3), Spirit Guardians (3), Dawn (5), and Flame Strike (5)." ] } }, "Optional 2nd-level paladin features"); AddFeatureChoice(ClassList.paladin.features["subclassfeature3.0-channel divinity"], true, "Harness Divine Power (ua)", { name : "Channel Divinity:\xA0Harness Divine Power", extraname : "Optional Paladin 3", source : [["UA:CFV", 6]], description: desc("As a bonus action, I can use my holy symbol and a prayer to regain 1 used level 1 spell slot"), action : [["bonus action", ""]] }, "Optional 3rd-level paladin features"); // Ranger alternative class features and enhancements var UACFV_Deft_Explorer = { name : "Deft Explorer", source : [["UA:CFV", 7]], description : desc('Use the "Choose Feature" button above to add a deft explorer benefit to the third page'), additional : levels.map(function (n) { return n < 6 ? "1 benefit" : (n < 10 ? 2 : 3) + " benefits"; }), extraTimes : levels.map(function (n) { return n < 6 ? 1 : n < 10 ? 2 : 3; }), extraname : "Deft Explorer Benefit", extrachoices : ["Canny", "Roving", "Tireless"], "canny" : { name : "Canny", source : [["UA:CFV", 7]], description : desc([ "I learn two language of my choice, and proficiency and expertise with one skill of my choice", "The skill I have to choose from: Animal Handling, Athletics, History, Insight, Investigation,", "Medicine, Nature, Perception, Stealth, or Survival" ]), languageProfs : [2], skillstxt : "Proficiency and expertise with one from Animal Handling, Athletics, History, Insight, Investigation, Medicine, Nature, Perception, Stealth, or Survival" }, "roving" : { name : "Roving", source : [["UA:CFV", 7]], description: desc("I gain +5 ft walking speed and climbing and swimming speed equal to my walking speed"), speed : { walk : { spd : "+5", enc : "+5" }, climb : { spd : "walk", enc : "walk" }, swim : { spd : "walk", enc : "walk" } } }, "tireless" : { name : "Tireless", source : [["UA:CFV", 7]], description : desc([ "Whenever I finish a short or long rest, I reduce my exhaustion level, if any, by 1", "As an action a number of times per day, I can give myself temp HP of 1d10 + Wis mod" ]), action : [["action", ""]], usages : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest" }, autoSelectExtrachoices : [] } CreateClassFeatureVariant("ranger", "natural explorer", "Deft Explorer (ua)", UACFV_Deft_Explorer); var UACFV_Favored_Foe = { name : "Favored Foe", source : [["UA:CFV", 7]], description : desc([ "I know Hunter's Mark and it doesn't count against the number of spells I can know", "I can cast it a number of times without using a spell slot or requiring concentration", "I can also use a spell slot to cast it as normal, but then it does require concentration" ]), spellcastingBonus : [{ name : "Favored Foe", spells : ["hunter's mark"], selection : ["hunter's mark"], firstCol : "Sp" }], usages : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest", calcChanges : { spellList : [ function(spList, spName, spType) { if ((spName === "ranger" || spName === "rangerua") && spType.indexOf("bonus") === -1) { if (!spList.notspells) spList.notspells = []; spList.notspells = spList.notspells.concat(["hunter's mark"]); } } ] } }; CreateClassFeatureVariant("ranger", "favored enemy", "Favored Foe (ua)", UACFV_Favored_Foe); // Now some easier alternatives/enhancements // [dupl_start] the same as in Tasha's Cauldron of Everything if (!SourceList.T) { AddFightingStyle(["ranger"], "Druidic Warrior", { name : "Druidic Warrior Fighting Style", source : [["T", 57], ["UA:CFV", 7]], description : desc([ "I learn two druid cantrips that count as ranger spells for me and use Wis for spellcasting", "Whenever I gain a ranger level, I can swap one of these for another druid cantrip" ]), spellcastingBonus : [{ name : "Druidic Warrior", "class" : "druid", level : [0, 0], times : 2 }] }); } // dupl_end // The enhancement option for fighting styles has to be added to each class separately var UACFV_Ranger_Martial_Versatility = { name : "Martial Versatility", extraname : "Optional Ranger 2", source : [["UA:CFV", 12]], description: desc("Whenever I gain a ranger level, I can swap a fighting style I know for another I'm allowed") }; AddFeatureChoice(ClassList.ranger.features.spellcasting, true, "Martial Versatility (ua)", UACFV_Ranger_Martial_Versatility, "Optional 2nd-level ranger features"); var UACFV_Ranger_Expanded_Spell_List = { name : "Expanded Ranger Spell List", extraname : "Optional Ranger 2", source : [["UA:CFV", 7]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if ((spName !== "ranger" && spName !== "rangerua") || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["entangle", "searing smite", "aid", "enhance ability", "gust of wind", "magic weapon", "warding bond", "blinding smite", "meld into stone", "revivify", "tongues", "death ward", "dominate beast", "awaken", "greater restoration"]); }, "This alternative class feature enhancement expands the spell list of the ranger class with the following spells (spell level in brackets): Entangle (1), Searing Smite (1), Aid (2), Enhance Ability (2), Gust of Wind (2), Magic Weapon (2), Warding Bond (2), Blinding Smite (3), Meld into Stone (3), Revivify (3), Tongues (3), Death Ward (4), Dominate Beast (4), Awaken (5), and Greater Restoration (5)." ] } }; AddFeatureChoice(ClassList.ranger.features.spellcasting, true, "Expanded Spell List (ua)", UACFV_Ranger_Expanded_Spell_List, "Optional 2nd-level ranger features"); var UACFV_Ranger_Spell_Versatility = { name : "Spell Versatility", extraname : "Optional Ranger 2", source : [["UA:CFV", 8]], description: desc("When I finish a long rest, I can replace a ranger spell I know with another of the same level") }; AddFeatureChoice(ClassList.ranger.features.spellcasting, true, "Spell Versatility (ua)", UACFV_Ranger_Spell_Versatility, "Optional 2nd-level ranger features"); // [dupl_start] the same as in Tasha's Cauldron of Everything if (!SourceList.T) { var TCoE_Ranger_Spellcasting_Focus = { name : "Spellcasting Focus", extraname : "Optional Ranger 2", source : [["T", 57], ["UA:CFV", 8]], description: desc("I can use a druidic focus as a spellcasting focus for my ranger spells") }; AddFeatureChoice(ClassList.ranger.features.spellcasting, true, "Spellcasting Focus", TCoE_Ranger_Spellcasting_Focus, "Optional 2nd-level ranger features"); } // dupl_end var UACFV_Primal_Awareness = { name : "Primal Awareness", source : [["UA:CFV", 8]], description : desc([ "I get bonus spells known, which do not count against the number of spells I can know", "In addition, I can cast each once per long rest without expending a spell slot" ]), calcChanges : { spellList : [ function(spList, spName, spType) { // Remove the bonus spells from the normally selectable list if ((spName === "ranger" || spName === "rangerua") && spType.indexOf("bonus") === -1) { if (!spList.notspells) spList.notspells = []; spList.notspells = spList.notspells.concat(["detect magic", "speak with animals", "beast sense", "locate animals or plants", "speak with plants", "locate creature", "commune with nature"]); } }, "I know the following spells, without them counting towards the maximum number of spells I can know: Detect Magic, Speak with Animals, Beast Sense, Locate Animals or Plants, Speak with Plants, Locate Creature, and Commune with Nature." ] }, spellcastingBonus : [{ name : "Primal Awareness", spells : ["detect magic", "speak with animals", "beast sense", "locate animals or plants", "speak with plants", "locate creature", "commune with nature"], selection : ["detect magic", "speak with animals", "beast sense", "locate animals or plants", "speak with plants", "locate creature", "commune with nature"], firstCol : "oncelr+markedbox", times : levels.map(function (n) { return n < 5 ? 2 : n < 9 ? 4 : n < 13 ? 5 : n < 17 ? 6 : 7; }) }] }; CreateClassFeatureVariant("ranger", "primeval awareness", "Primal Awareness (ua)", UACFV_Primal_Awareness); var UACFV_Fade_Away = { name : "Fade Away", source : [["UA:CFV", 8]], description : desc([ "As a bonus action, I can become invisible along with any equipment I'm wearing/carrying", "This invisibility lasts until the start of my next turn" ]), action : [["bonus action", ""]], usages : 1, recovery : "short rest" }; CreateClassFeatureVariant("ranger", "hide in plain sight", "Fade Away (ua)", UACFV_Fade_Away); if (ClassSubList["ranger-beast master"]) { AddFeatureChoice(ClassSubList["ranger-beast master"].features["subclassfeature3"], true, "Beast of the Air/Earth (ua)", { name : "Beast of the Air/Earth", extraname : "Optional Beast Master 3", source : [["UA:CFV", 8]], description : desc([ "My ranger's companion can be a primal beast whose lineage stretches back to the beginning", "This beast of the air or earth takes the form of a regular animal, but has different abilities", "Its hit points total is equal to its Con mod + my Wis mod + 5 times my ranger level", "As a bonus action, I can command it to make one attack or take the Hide action", "If it dies, I can revive it within 1 hour as an action where I expend a spell slot and touch it", "It then returns to life with all its hit points after 1 minute" ]), action : [["bonus action", "Command Beast of the Air/Earth"], ["action", "Revive Beast of the Air/Earth"]], creaturesAdd : [["Beast of the Air", true], ["Beast of the Earth", true]], creatureOptions : [{ name : "Beast of the Air", source : [["UA:CFV", 8]], size : 4, type : "Beast", alignment : "Neutral", ac : 13, hp : 6, hd : [1, 6], hdLinked : ["ranger", "spell-less ranger"], speed : "10 ft, fly 60 ft", scores : [6, 16, 13, 8, 14, 11], saves : ["", 5, 3, "", 4, ""], skills : { "perception" : 4, "stealth" : 5 }, senses : "Darkvision 60 ft", passivePerception : 14, languages : "understands the languages of its master (me)", challengeRating : "1/4", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Shred", ability : 2, damage : [1, 6, "slashing"], range : "Melee (5 ft)" }], features : [{ name : "Ready Companion", description : "As a bonus action, I can command the beast to make its shred attack or to Hide." }, { name : "Primal Rebirth", description : "If the beast has died within the last hour, I can use my action to touch it and expend a spell slot of 1st level or higher. The beast returns to life after 1 minute with all its hit points restored." }], traits : [{ name : "Flyby", description : "The beast doesn't provoke opportunity attacks when it flies out of an enemy's reach." }], calcChanges : { hp : function (totalHD, HDobj, prefix) { if (!classes.known.ranger && !classes.known["spell-less ranger"]) return; var wisMod = Number(What('Wis Mod')); var rngrLvl = classes.known.ranger ? classes.known.ranger.level : classes.known["spell-less ranger"].level; var rngrLvl5 = 5 * rngrLvl; HDobj.alt.push(HDobj.conMod + wisMod + rngrLvl5); HDobj.altStr.push(" = " + HDobj.conMod + " from its Constitution modifier\n + " + wisMod + " from its master's Wisdom modifier\n + 5 \xD7 " + rngrLvl + " from five times its master's ranger level (" + rngrLvl5 + ")"); }, setAltHp : true, hpForceRecalc : true }, companionApply : "companion" }, { name : "Beast of the Earth", source : [["UA:CFV", 9]], size : 3, type : "Beast", alignment : "Neutral", ac : 12, hp : 7, hd : [1, 8], hdLinked : ["ranger", "spell-less ranger"], speed : "40 ft, climb or swim 40 ft", scores : [14, 14, 15, 8, 14, 11], saves : ["", 4, 4, "", 4, ""], skills : { "perception" : 4, "stealth" : 4 }, senses : "Darkvision 60 ft", passivePerception : 14, languages : "understands the languages of its master (me)", challengeRating : "1/4", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Maul", ability : 1, damage : [1, 6, "slashing"], range : "Melee (5 ft)", description : "If used after moving 20 ft straight in the same round, see Charge trait" }], features : [{ name : "Movement Mode", description : "When I bond with the beast, I choose wether it has a climb speed or a swim speed." }, { name : "Ready Companion", description : "As a bonus action, I can command the beast to make its shred attack or to Hide." }, { name : "Primal Rebirth", description : "If the beast has died within the last hour, I can use my action to touch it and expend a spell slot of 1st level or higher. The beast returns to life after 1 minute with all its hit points restored." }], traits : [{ name : "Charge", description : "If the beast moves at least 20 ft straight toward a target and then hits it with a maul attack on the same turn, the target takes an extra 1d6 slashing damage. If the target is a creature, it must succeed on a Strength saving throw against my spell save DC or be knocked prone." }], calcChanges : { hp : function (totalHD, HDobj, prefix) { if (!classes.known.ranger && !classes.known["spell-less ranger"]) return; var wisMod = Number(What('Wis Mod')); var rngrLvl = classes.known.ranger ? classes.known.ranger.level : classes.known["spell-less ranger"].level; var rngrLvl5 = 5 * rngrLvl; HDobj.alt.push(HDobj.conMod + wisMod + rngrLvl5); HDobj.altStr.push(" = " + HDobj.conMod + " from its Constitution modifier\n + " + wisMod + " from its master's Wisdom modifier\n + 5 \xD7 " + rngrLvl + " from five times its master's ranger level (" + rngrLvl5 + ")"); }, setAltHp : true, hpForceRecalc : true }, companionApply : "companion" }] }, "Optional 3rd-level beast master features"); } // Add the Ranger alternative class features also to the Revised Ranger, if it exists if (ClassList["rangerua"]) { CreateClassFeatureVariant("rangerua", "natural explorer", "Deft Explorer (ua)", UACFV_Deft_Explorer); // Add Favored Foe as an alternative choice (can't be done by automation because of choices) and add "Favored Foe" variant option // Move some attributes from the main object to the favored enemy choice objects ['additional', 'languageProfs', 'calcChanges'].forEach( function(attr) { var fea = ClassList.rangerua.features["favored enemy"]; if (!fea[attr]) return; // Move the attribute to each of the choices for (var i = 0; i < fea.choices.length; i++) { var aCh = fea[fea.choices[i].toLowerCase()]; if (aCh.source) continue; // don't do options that are not part of the original entry (which don't have a source) aCh[attr] = fea[attr]; } // Now delete the attributes from the parent object delete fea[attr]; }); // Now add the alternative class feature as another choice AddFeatureChoice(ClassList.rangerua.features["favored enemy"], false, "[alternative feature] Favored Foe (ua)", UACFV_Favored_Foe); // The enhancement option for fighting styles has to be added to each class separately AddFeatureChoice(ClassList.rangerua.features.spellcasting, true, "Martial Versatility (ua)", UACFV_Ranger_Martial_Versatility, "Optional 2nd-level ranger features"); AddFeatureChoice(ClassList.rangerua.features.spellcasting, true, "Expanded Spell List (ua)", UACFV_Ranger_Expanded_Spell_List, "Optional 2nd-level ranger features"); AddFeatureChoice(ClassList.rangerua.features.spellcasting, true, "Spell Versatility (ua)", UACFV_Ranger_Spell_Versatility, "Optional 2nd-level ranger features"); // [dupl_start] the same as in Tasha's Cauldron of Everything if (!SourceList.T) { AddFeatureChoice(ClassList.rangerua.features.spellcasting, true, "Spellcasting Focus", TCoE_Ranger_Spellcasting_Focus, "Optional 2nd-level ranger features"); } // dupl_end CreateClassFeatureVariant("rangerua", "primeval awareness", "Primal Awareness (ua)", UACFV_Primal_Awareness); CreateClassFeatureVariant("rangerua", "hide in plain sight", "Fade Away (ua)", UACFV_Fade_Away); } // Rogue alternative class feature enhancement AddFeatureChoice(ClassList.rogue.features["cunning action"], true, "Cunning Action: Aim (ua)", { name : "Cunning Action: Aim", extraname : "Optional Rogue 2", source : [["UA:CFV", 9]], description : desc([ "I can also use my cunning action bonus action to carefully aim my next attack", "If I don't move in my turn, I give myself adv. on my next attack in the current turn", "After I use cunning action to aim, my speed is 0 until the end of the current turn" ]) }, "Optional 2nd-level rogue features"); // Sorcerer alternative class features and enhancements AddFeatureChoice(ClassList.sorcerer.features.spellcasting, true, "Expanded Spell List (ua)", { name : "Expanded Sorcerer Spell List", extraname : "Optional Sorcerer 1", source : [["UA:CFV", 9]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "sorcerer" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["primal savagery", "grease", "protection from evil and good", "flame blade", "flaming sphere", "vampiric touch", "fire shield", "flesh to stone", "demiplane", "foresight"]); }, "This alternative class feature enhancement expands the spell list of the sorcerer class with the following spells (spell level in brackets): Primal Savagery (cantrip), Grease (1), Protection from Evil and Good (1), Flame Blade (2), Flaming Sphere (2), Vampiric Touch (3), Fire Shield (4), Flesh to Stone (6), Demiplane (8), and Foresight (9)." ] } }, "Optional sorcerer features"); AddFeatureChoice(ClassList.sorcerer.features.spellcasting, true, "Spell Versatility (ua)", { name : "Spell Versatility", extraname : "Optional Sorcerer 1", source : [["UA:CFV", 10]], description: desc("After a long rest, I can swap a sorcerer cantrip/spell I know for another of the same level") }, "Optional sorcerer features"); // Font of Magic options AddFeatureChoice(ClassList.sorcerer.features["font of magic"], true, "Empowering Reserves", { name : "Empowering Reserves", extraname : "Optional Sorcerer 2", source : [["UA:CFV", 10]], description : " [2 sorcery points]\n When I make an ability check on my turn, I can gain advantage on the check" }, "Optional 2nd-level sorcerer features"); AddFeatureChoice(ClassList.sorcerer.features["font of magic"], true, "Imbuing Touch", { name : "Imbuing Touch", extraname : "Optional Sorcerer 2", source : [["UA:CFV", 10]], description : " [2 sorcery points]\n As an action, I can touch a nonmagical weapon and make it count as magical for 1 minute", action : [["action", " (2 sorcery points)"]] }, "Optional 2nd-level sorcerer features"); AddFeatureChoice(ClassList.sorcerer.features["font of magic"], true, "Sorcerous Fortitude (ua)", { name : "Sorcerous Fortitude", extraname : "Optional Sorcerer 2", source : [["UA:CFV", 10]], description : " [1+ sorcery points]\n As an action, I can gain 1d4 temporary hit points per sorcery point I spend", action : [["action", " (1+ sorcery points)"]] }, "Optional 2nd-level sorcerer features"); // Metamagic options AddFeatureChoice(ClassList.sorcerer.features["metamagic"], true, "Elemental Spell (ua)", { name : "Elemental Spell", source : [["UA:CFV", 10]], additional: "1 sorcery point", description : desc([ "If the spell deals one of the below damage types, I can change it to another on the list", "These damage types are: acid, cold, fire, lightning, or thunder" ]) }); AddFeatureChoice(ClassList.sorcerer.features["metamagic"], true, "Seeking Spell (ua)", { name : "Seeking\xA0Spell", source : [["UA:CFV", 10]], additional: "1 sorcery point", description : desc([ "I can ignore half- and three-quarters cover for the one spell I'm casting", "This applies both to my spell attack rolls as to the Dexterity saving throws of the targets" ]) }); AddFeatureChoice(ClassList.sorcerer.features["metamagic"], true, "Unerring Spell (ua)", { name : "Unerring Spell", source : [["UA:CFV", 10]], additional: "2 sorcery points", description : desc([ "If I make an attack roll for a spell and miss, I can use this to reroll the attack once", "I can use unerring spell even if I already used another metamagic option for the spell" ]) }); // Warlock alternative class features and enhancements AddFeatureChoice(ClassList.warlock.features["pact magic"], true, "Spell Versatility (ua)", { name : "Spell Versatility", extraname : "Optional Warlock 1", source : [["UA:CFV", 10]], description: desc("After a long rest, I can swap a warlock cantrip or spell I know for another of the same level") }, "Optional 1st-level warlock features"); AddFeatureChoice(ClassList.warlock.features["pact magic"], true, "Expanded Spell List (ua)", { name : "Expanded Warlock Spell List", extraname : "Optional Warlock 1", source : [["UA:CFV", 10]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "warlock" || (spType.indexOf("bonus") !== -1 && (!spList["class"] || spList["class"] !== "warlock"))) return; spList.extraspells = spList.extraspells.concat(["thunderwave", "knock", "animate dead", "life transference", "greater invisibility", "phantasmal killer", "mislead", "modify memory", "planar binding", "teleportation circle", "create homunculus", "magic jar", "project image", "abi-dalzim's horrid wilting", "gate", "shapechange", "weird"]); }, "This alternative class feature enhancement expands the spell list of the warlock class with the following spells (spell level in brackets): Thunderwave (1), Knock (2), Animate Dead (3), Life Transference (3), Greater Invisibility (4), Phantasmal Killer (4), Mislead (5), Modify Memory (5), Planar Binding (5), Teleportation Circle (5), Create Homunculus (6), Magic Jar (6), Project Image (7), Abi-Dalzim's Horrid Wilting (8), Gate (9), Shapechange (9), and Weird (9)." ] } }, "Optional 1st-level warlock features"); // New Eldritch Invocations AddWarlockInvocation("Bond of the Talisman (prereq: level 12 warlock, Pact of the Talisman) (ua)", { name : "Bond of the\xA0Talisman", source : [["UA:CFV", 11]], submenu : "[improves Pact of the Talisman]", description : desc([ "As an action, I can teleport to the unoccupied space closest to the wearer of my talisman", "The talisman's wearer can do the same to teleport to me; Only works if both on same plane" ]), prereqeval : function(v) { return classes.known.warlock.level >= 12 && GetFeatureChoice('class', 'warlock', 'pact boon').indexOf("pact of the talisman") !== -1; }, action : [["action", ""]] }); AddWarlockInvocation("Chain Master's Fury (prereq: level 9 warlock, Pact of the Chain)", { name : "Chain Master's Fury", source : [["UA:CFV", 11]], submenu : "[improves Pact of the Chain]", description: desc("As a bonus action, I can command my familiar to make one attack"), prereqeval : function(v) { return classes.known.warlock.level >= 9 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the chain'; }, action : [["bonus action", ""]] }); AddWarlockInvocation("Eldritch Armor (prereq: Pact of the Blade)", { name : "Eldritch Armor", source : [["UA:CFV", 11]], submenu : "[improves Pact of the Blade]", description : desc([ "As an action, I can touch an unattended suit of armor and instantly don it", "I am proficient with this suit of armor until it is removed" ]), prereqeval : function(v) { return GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the blade'; }, action : [["action", ""]] }); AddWarlockInvocation("Eldritch Mind (prereq: Pact of the Tome)", { name : "Eldritch Mind", source : [["UA:CFV", 11]], submenu : "[improves Pact of the Tome]", description: desc("I have advantage on my Constitution saving throws to maintain concentration on a spell"), prereqeval : function(v) { return GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the tome'; }, savetxt : { text : "Adv. on Con (Concentration) saves" } }); AddWarlockInvocation("Far Scribe (prereq: level 5 warlock, Pact of the Tome) (ua)", { name : "Far\xA0Scribe", source : [["UA:CFV", 11]], submenu : "[improves Pact of the Tome]", description : desc([ "My book of shadows has a new page; As an action, a creature can write its name on it", "This page can hold my Cha mod (min 1) in creature names; I can remove one as an action", "I can cast Sending without a spell slot or material components, targeting one on the page", "Instead of saying the message, I write it on the page and any reply appears there as well", "This writing disappears after 1 minute; The target still hears the message in their mind" ]), prereqeval : function(v) { return classes.known.warlock.level >= 5 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the tome'; }, action : [["action", " (erase name)"]], spellcastingBonus : [{ name : "Far Scribe", spells : ["sending"], selection : ["sending"], firstCol : "atwill" }], spellChanges : { "sending" : { components : "V,S", compMaterial : "", description : "Send 25 word message to crea named in book of shadows; it recognizes me and can respond 25 words", changes : "By using Far Scribe, I can cast Sending without using a spell slot or material components, but only to target one of the creatures that wrote their name in my book of shadows. Instead of speaking the message, I write it in my book and any response appears there as well, lasting for 1 minute. The target still hears the message in their mind." } } }); AddWarlockInvocation("Gift of the Protectors (prereq: level 9 warlock, Pact of the Tome) (ua)", { name : "Gift of the\xA0Protectors", source : [["UA:CFV", 11]], submenu : "[improves Pact of the Tome]", description : desc([ "My book of shadows has a new page; As an action, a creature can write its name on it", "This page can hold my Cha mod (min 1) in creature names; I can remove one as an action", "If a creature whose name is on the page drops to 0 HP, it magically drops to 1 HP instead", "This doesn't work if the creature would be killed outright" ]), prereqeval : function(v) { return classes.known.warlock.level >= 9 && GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the tome'; }, action : [["action", " (erase name)"]], usages : 1, recovery : "long rest" }); AddWarlockInvocation("Investment of the Chain Master (prereq: Pact of the Chain) (ua)", { name : "Investment of the Chain\xA0Master", source : [["UA:CFV", 11]], submenu : "[improves Pact of the Chain]", description : desc([ "When I cast Find Familiar, the summoned create has additional benefits:", "\u2022 It gains a flying or swimming speed of 40 ft (my choice at casting)", "\u2022 It no longer needs to breathe", "\u2022 Its weapon attacks are considered magical for overcoming immunities and resistances", "\u2022 If it forces a creature to make a saving throw, it uses my spell save DC" ]), prereqeval : function(v) { return GetFeatureChoice('class', 'warlock', 'pact boon') == 'pact of the chain'; }, calcChanges : { companionCallback : [function(prefix, oCrea, bAdd, sCompType) { if (sCompType !== "pact_of_the_chain") return; var strFea = "##\u25C6 Investment of the Chain Master (UA:CFV 11)##.: The familiar gains 40 ft fly or swim speed (my choice), doesn't need to breathe, its attacks are considered magical, and it can use my spell save DC instead of its own DC's (if any)."; var strSpd = "fly or swim 40 ft"; if (What("Unit System") === "metric") { strFea = ConvertToMetric(strFea, 0.5); strSpd = ConvertToMetric(strSpd, 0.5); } var aFnc = bAdd ? AddString : RemoveString; aFnc(prefix + "Comp.Use.Features", strFea, true); aFnc(prefix + "Comp.Use.Speed", strSpd, typePF ? ",\n" : ", "); for (var i = 1; i <= 3; i++) { var baseFld = prefix + "Comp.Use.Attack." + i; var weaDescrFld = baseFld + ".Description"; var strWeaDescr = What(weaDescrFld); if (bAdd && What(baseFld + ".Weapon Selection") && !(/(,|;)? ?counts as magical/i).test(strWeaDescr)) { AddString(weaDescrFld, "Counts as magical", "; "); } else if (!bAdd) { Value(weaDescrFld, strWeaDescr.replace(/(,|;)? ?counts as magical/i, '')); } } }, "My pact of the chain familiars gain an extra feature listing the extra bonuses they gain."] } }); AddWarlockInvocation("Protection of the Talisman (prereq: level 9 warlock, Pact of the Talisman) (ua)", { name : "Protection of the\xA0Talisman", source : [["UA:CFV", 12]], submenu : "[improves Pact of the Talisman]", description: desc("The wearer of my talisman adds 1d4 to saving throw rolls in which they lack proficiency"), prereqeval : function(v) { return classes.known.warlock.level >= 9 && GetFeatureChoice('class', 'warlock', 'pact boon').indexOf("pact of the talisman") !== -1; }, savetxt : { text : ["+1d4 to nonproficient saves"] } }); AddWarlockInvocation("Rebuke of the Talisman (prereq: Pact of the Talisman) (ua)", { name : "Rebuke of the\xA0Talisman", source : [["UA:CFV", 12]], submenu : "[improves Pact of the Talisman]", description : desc([ "As a reaction when the wearer of my talisman is hit, I deal damage and push the attacker", "To be able to do this, I have to see the attacker and it has to be within 30 ft of me", "I deal it my Cha mod in psychic damage (min 1) and push it 10 ft away from the talisman" ]), prereqeval : function(v) { return GetFeatureChoice('class', 'warlock', 'pact boon').indexOf("pact of the talisman") !== -1; }, action : [["reaction", ""]] }); // Pact Boon option AddWarlockPactBoon("Pact of the Talisman (ua)", { name : "Pact of the\xA0Talisman", source : [["UA:CFV", 12]], description : desc([ "The wearer of this amulet adds 1d4 to checks with skills in which they lack proficiency", "I can give the talisman to others to use; The talisman turns to ash when I die", "If I lose my talisman, I can perform a 1-hour ceremony to gain a replacement", "This ceremony destroys the previous amulet and can be done during a short or long rest" ]) }); // Wizard alternative class features and enhancements AddFeatureChoice(ClassList.wizard.features.spellcasting, true, "Cantrip Versatility (ua)", { name : "Cantrip Versatility", extraname : "Optional Wizard 1", source : [["UA:CFV", 12]], description: desc("Whenever I gain a wizard level, I can replace a wizard cantrip I know with another") }, "Optional 1st-level wizard features"); AddFeatureChoice(ClassList.wizard.features.spellcasting, true, "Expanded Spell List (ua)", { name : "Expanded Wizard Spell List", extraname : "Optional Wizard 1", source : [["UA:CFV", 12]], description : "", calcChanges : { spellList : [ function(spList, spName, spType) { // Stop this is not the class' spell list or if this is for a bonus spell entry if (spName !== "wizard" || spType.indexOf("bonus") !== -1) return; spList.extraspells = spList.extraspells.concat(["augury", "enhance ability", "speak with dead", "divination"]); }, "This alternative class feature enhancement expands the spell list of the wizard class with the following spells (spell level in brackets): Augury (2), Enhance Ability (2), Speak with Dead (3), and Divination (4)." ] } }, "Optional 1st-level wizard features"); ================================================ FILE: WotC material/ua_20191125_Fighter-Rogue-and-Wizard.js ================================================ var iFileName = "ua_20191125_Fighter-Rogue-and-Wizard.js"; RequiredSheetVersion("13.1.14"); // This file adds the content from the Unearthed Arcana: Fighter, Rogue, and Wizard (psionics) article to MPMB's Character Record Sheet // Define the source SourceList["UA:FRnW"] = { name : "Unearthed Arcana: Fighter, Rogue, and Wizard", abbreviation : "UA:FRnW", group : "Unearthed Arcana", url : "https://media.wizards.com/2019/dnd/downloads/UA-PsychicSoulPsionics.pdf", date : "2019/11/25" }; // Add a subclass for the Fighter AddSubClass("fighter", "psychic warrior-ua", { regExpSearch : /^(?=.*psychic)(?=.*warrior).*$/i, subname : "Psychic Warrior", source : [["UA:FRnW", 1]], fullname : "Psychic Warrior", abilitySave : 4, features : { "subclassfeature3" : { name : "Psionic Armament", source : [["UA:FRnW", 1]], minlevel : 3, description : function () { var a = desc([ "When I finish a long rest, I can choose to augment my defenses or strikes until the next", " \u2022 As a reaction, augmented defenses allow me to reduce the damage taken by 1d10", " I can reduce the damage taken by myself or by a creature that I can see within 30 ft", " \u2022 Once per turn, augmented strikes adds +1d4 psychic damage to my weapon attack" ]); return levels.map(function (n) { return n < 10 ? a : a.replace('1d10', '1d12').replace('1d4', '1d6'); }); }(), additional : levels.map(function (n) { return n < 3 ? "" : n < 10 ? "1d10 defense; 1d4 offense" : "1d12 defense; 1d6 offense"; }), action : [["reaction", "Augmented Defenses"]] }, "subclassfeature3.1" : { name : "Telekinetic Hand", source : [["UA:FRnW", 1]], minlevel : 3, description: desc("I learn the Mage Hand cantrip, can cast it without components, and can make it invisible"), spellcastingBonus : [{ name : "Telekinetic Hand", spells : ["mage hand"], selection : ["mage hand"], firstCol : "atwill" }], spellChanges : { "mage hand" : { components : "", description : "Create invisible spectral hand for simple tasks or carry up to 10 lb; 1 a to control; can't have multiples", changes : "My Telekinetic Hand class feature allows me to cast Mage Hand without components and I can make the spectral hand invisible." } } }, "subclassfeature7" : { name : "Strength of Mind", source : [["UA:FRnW", 1]], minlevel : 7, description : desc([ "As a bonus action, I can have a creature I can see within 20 ft make a Strength save", "It takes 2d6 + Int mod psychic damage \u0026 moves 15 ft away or towards me (my choice)", "If its save succeeds, it takes half damage and isn't moved; DC 8 + Prof Bonus + Int mod" ]), action : [["bonus action", ""]], usages : "Intelligence modifier per ", usagescalc : "event.value = Math.max(1, What('Int Mod'));", recovery : "long rest" }, "subclassfeature10" : { name : "Telekinetic Bulwark", source : [["UA:FRnW", 1]], minlevel : 10, description : desc([ "When I take the Attack action, I can forgo one of the attacks to project psionic power", "Myself and my allies within 10 ft of me gain half cover and adv. on Strength saves", "This 10-ft radius bastion around me lasts for 1 minute or until I'm incapacitated", "I regain the usage of this feature after I use my second wind feature" ]), recovery : "long rest", usages : 1, limfeaname : "Telekinetic Bulwark [Second Wind regains]" }, "subclassfeature15" : { name : "Agonizing Strikes", source : [["UA:FRnW", 2]], minlevel : 15, description : desc([ "When I hit a creature with a weapon attack, I can deal an extra +2d10 psychic damage", "The target also has to make a Constitution save (DC 8 + my Prof Bonus + my Int mod)", "If it fails, it falls prone and has disadv. on its next ability check until my next turn starts" ]), usages : "Intelligence modifier per ", usagescalc : "event.value = Math.max(1, What('Int Mod'));", recovery : "long rest" }, "subclassfeature18" : { name : "Psychic Dreadnaught", source : [["UA:FRnW", 2]], minlevel : 18, description : desc([ "As a reaction when I take damage, I can give myself the following benefits for 1 minute:", " \u2022 At the start of each of my turns, I regain 10 hit points", " \u2022 My walking speed increases by +10 ft", " \u2022 If I'm prone, I can stand up by spending 5 ft of movement", "These benefits also end when I'm incapacitated" ]), recovery : "long rest", usages : 1, action : [["reaction", ""]] } } }); // Add a subclass for the Rogue AddSubClass("rogue", "soulknife-ua", { regExpSearch : /soulknife/i, subname : "Soulknife", source : [["UA:FRnW", 2]], fullname : "Soulknife", abilitySave : 4, features : { "subclassfeature3" : { name : "Psychic Blade", source : [["UA:FRnW", 2]], minlevel : 3, description : desc([ "As a bonus action, I can create a magical blade from one or both of my hands", "Disappear if I'm incapacitated, leave my hand (not thrown), or I dismiss it (no action)" ]), action : [["bonus action", " (create)"]], weaponOptions : [{ regExpSearch : /^(?=.*soulknife)(?=.*psychic)(?=.*blade).*$/i, name : "Soulknife's Psychic Blade", source : [["UA:FRnW", 2]], ability : 1, type : "Simple", damage : [1, 6, "psychic"], range : "Melee, 30/60 ft", description : "Finesse, light, thrown", abilitytodamage : true, isSoulknifePsychicBlade : true, selectNow : true }] }, "subclassfeature3.1" : { name : "Psionic Enhancement", source : [["UA:FRnW", 2]], minlevel : 3, description : desc([ "When I finish a long rest, I can choose one of these benefits until my next long rest:", " \u2022 Talk telepathically with those I can see in 30 ft; Can respond if they know a language", " \u2022 Increase my walking speed by 5 ft", " \u2022 Increase my maximum and current HP with my Intelligence modifier plus rogue level" ]) }, "subclassfeature9" : { name : "Terrifying Blade", source : [["UA:FRnW", 3]], minlevel : 9, description : desc([ "When I damage a creature with my psychic blade, it must make a Wisdom saving throw", "If it fails, it is frightened of me until my the start of my next turn", "If it succeeds, it is immune to this for 24 hours; DC 8 + my Prof Bonus + my Int mod" ]), calcChanges : { atkAdd : [ function (fields, v) { if (v.isSoulknifePsychicBlade) { fields.Description += (fields.Description ? '; ' : '') + 'Wis save or frightened for 1 round'; }; } ] } }, "subclassfeature13" : { name : "Psychic Veil", source : [["UA:FRnW", 3]], minlevel : 13, description : desc([ "As an action, I can become invisible along with everything I'm wearing or carrying", "This ends after 10 minutes, if I make an attack, or if I force a creature to make a save" ]), action : [["action", ""]], usages : "Intelligence modifier per ", usagescalc : "event.value = Math.max(1, What('Int Mod'));", recovery : "long rest" }, "subclassfeature17" : { name : "Rend Mind", source : [["UA:FRnW", 3]], minlevel : 17, description : desc([ "As an action, I can deal 12d6 psychic damage to a creature I can see within 30 ft", "It also makes an Int save or is stunned until my next turn starts; Half damage on success", "It has disadv. on the save if I'm hidden from it; DC 10 + my Prof Bonus + my Int mod", "I must have a psychic blade manifested to do so and one vanishes when I use this feature" ]), action : [["action", ""]], usages : "Intelligence modifier per ", usagescalc : "event.value = Math.max(1, What('Int Mod'));", recovery : "long rest" } } }); // Add a subclass for the Wizard AddSubClass("wizard", "psionics-ua", { regExpSearch : /^((?=.*(wizard|mage|magus))(?=.*psionics)|(?=.*(psionicist|mentalist)))(?!.*(wild mage|\bpsion\b|mystic)).*$/i, subname : "Psionics", source : [["UA:FRnW", 3]], fullname : "Psionicist", features : { "subclassfeature2" : { name : "Psionic Focus", source : [["UA:FRnW", 3]], minlevel : 2, description : desc([ "I learn to channel psionic energy through an object special to me, my psionic focus", "It allows me to reroll a roll of 1 on any psychic or force damage die for my wizard spells", "I can use this as my spellcasting focus; If lost, I can recreate it by meditating for 1 hour" ]) }, "subclassfeature2.1" : { name : "Psionic Devotion", source : [["UA:FRnW", 4]], minlevel : 2, description : desc([ 'I learn one cantrip: Friends, Mage Hand, or Message; Use "Choose Feature" button above', "While my psionic focus is on me, I can cast it as a bonus action without components" ]), choices : ["Friends", "Mage Hand", "Message"], "friends" : { name : "Psionic Devotion: Friends", description : desc([ "I learn the Friends cantrip and while my psionic focus in on me, I am better at casting it", "I can cast it as a bonus action without components and the target doesn't become hostile" ]), spellcastingBonus : [{ name : "Psionic Devotion", spells : ["friends"], selection : ["friends"], firstCol : "atwill" }], spellChanges : { "friends" : { time : "1 bns", components : "", compMaterial : "", description : "Adv. on Cha checks vs. 1 crea currently not hostile; when spell ends, crea realizes I used magic", changes : "While my psionic focus is on my person, I can cast Friends as a bonus action without requiring any components and when the spell ends, the target doesn't become hostile to me." } } }, "mage hand" : { name : "Psionic Devotion: Mage Hand", description : desc([ "I learn Mage Hand and while my psionic focus in on me, I am better at casting it", "I can then cast it as a bonus action without components and can make the hand invisible", "Also, I can control the hand as a bonus action instead of an action" ]), spellcastingBonus : [{ name : "Psionic Devotion", spells : ["mage hand"], selection : ["mage hand"], firstCol : "atwill" }], spellChanges : { "mage hand" : { time : "1 bns", components : "", description : "Create invisible hand for simple tasks or carry up to 10 lb; 1 bns action to control; can't have multiples", changes : "While my psionic focus is on my person, I can cast Mage Hand as a bonus action without requiring any components, can make the hand invisible, and controlling the hand is a bonus action for me." } } }, "message" : { name : "Psionic Devotion: Message", description : desc([ "I learn the Message cantrip and while my psionic focus in on me, I'm better at casting it", "I can then cast it as a bonus action without components", "Also, I don't need to point at the target or whisper the message out loud" ]), spellcastingBonus : [{ name : "Psionic Devotion", spells : ["message"], selection : ["message"], firstCol : "atwill" }], spellChanges : { "message" : { time : "1 bns", components : "", compMaterial : "", description : "1 crea hears message I think; can reply with a whisper; nobody can overhear; needs no straight line", changes : "While my psionic focus is on my person, I can cast Message as a bonus action without requiring any components, don't need to point toward the target, and I don't need to whisper my message out loud." } } } }, "subclassfeature6" : { name : "Thought Form", source : [["UA:FRnW", 4]], minlevel : 6, description : desc([ "As a bonus action, I can use my psionic focus to transform my body into luminous energy", "I chose the shape (my size); It sheds 5-ft radius dim light; My equipment melds into it", "My psionic focus hovers within the energy; In this form, I have the following benefits:", " \u2022 Spells I cast require no verbal, somatic, or material components without a gold cost", " \u2022 I have resistance to psychic and nonmagical bludgeoning/piercing/slashing damage", "This lasts for 10 minutes or until I'm incapacitated, die, or use a bonus action to end it" ]), action : [["bonus action", ""]], usages : "Intelligence modifier per ", usagescalc : "event.value = Math.max(1, What('Int Mod'));", recovery : "long rest" }, "subclassfeature10" : { name : "Mental Discipline", source : [["UA:FRnW", 4]], minlevel : 10, description : desc([ 'I learn one spell: Dominate Person, Scrying, or Telekinesis; Use "Choose Feature" button', "I can cast the spell without a spell slot once per long rest (and normally with a spell slot)" ]), usages : 1, recovery : "long rest", choices : ["Dominate Person", "Scrying", "Telekinesis"], "dominate person" : { name : "Mental Discipline: Dominate Person", description : desc([ "I add Dominate Person to my spellbook and can cast it without requiring components", "Once per long rest, I can cast it without using a spell slot; I can also prepare it as normal" ]), limfeaname : "Dominate Person (without spell slot)", spellcastingBonus : [{ name : "Mental Discipline", spells : ["dominate person"], selection : ["dominate person"] }], spellChanges : { "dominate person" : { components : "", changes : "I can cast Dominate Person without requiring any components. Once per long rest, I can cast it without using a spell slot. I can also cast it by using spell slots as normal." } } }, "scrying" : { name : "Mental Discipline: Scrying", description : desc([ "I add Scrying to my spellbook and can cast it without requiring components", "Once per long rest, I can cast it without using a spell slot; I can also prepare it as normal" ]), limfeaname : "Scrying (without spell slot)", spellcastingBonus : [{ name : "Mental Discipline", spells : ["scrying"], selection : ["scrying"] }], spellChanges : { "scrying" : { components : "", compMaterial : "", changes : "I can cast Scrying without requiring any components. Once per long rest, I can cast it without using a spell slot. I can also cast it by using spell slots as normal." } } }, "telekinesis" : { name : "Mental Discipline: Telekinesis", description : desc([ "I add Telekinesis to my spellbook and can cast it without requiring components", "Once per long rest, I can cast it without using a spell slot; I can also prepare it as normal" ]), limfeaname : "Telekinesis (without spell slot)", spellcastingBonus : [{ name : "Mental Discipline", spells : ["telekinesis"], selection : ["telekinesis"] }], spellChanges : { "telekinesis" : { components : "", changes : "I can cast Telekinesis without requiring any components. Once per long rest, I can cast it without using a spell slot. I can also cast it by using spell slots as normal." } } } }, "subclassfeature10.1" : { name : "Empowered Psionics", source : [["UA:FRnW", 5]], minlevel : 10, description: desc("I add my Int modifier to one target of my wizard spells that do psychic or force damage"), calcChanges : { spellAdd : [ function (spellKey, spellObj, spName) { if (spName.indexOf("wizard") != -1) { return genericSpellDmgEdit(spellKey, spellObj, "force|psychic", "Int", true); } }, "When I deal psychic or force damage with a wizard spell, I can add my Intelligence modifier to the damage against one of the spell's targets." ] } }, "subclassfeature14" : { name : "Thought Travel", source : [["UA:FRnW", 5]], minlevel : 14, description : desc([ "While in my thought form, I gain a fly speed equal to my walking speed and I can hover", "I can then also move through creatures and objects as if they were difficult terrain", "I take 1d10 force damage if I end my turn inside an object", "If I end my thought form while inside an object, I'm shunted to the nearest empty space", "I then take 1d10 force damage for every 5 ft traveled" ]) } } }); // The new spells SpellsList["ego whip-ua"] = { name : "Ego Whip", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["UA:FRnW", 7]], level : 4, school : "Ench", time : "1 a", range : "30 ft", components : "V", duration : "Conc, 1 min", save : "Int", description : "1 crea save or can't cast spells and disadv. on atks, checks, and saves; save end of each turn to end", descriptionFull : "You lash the mind of one creature you can see within range, filling it with despair. The target must succeed on an Intelligence saving throw or suffer disadvantage on attack rolls, ability checks, and saving throws, and it can't cast spells. At the end of each of its turns, the target can make another Intelligence saving throw. On a success, the spell ends on the target." }; SpellsList["id insinuation-ua"] = { name : "Id Insinuation", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["UA:FRnW", 7]], level : 1, school : "Ench", time : "1 a", range : "60 ft", components : "V,S", duration : "Conc, 1 min", save : "Wis", description : "1 crea save or incapacitated and end of each turn 1d12 Psychic damage, after which it can save to end", descriptionShorter : "1 crea save or incapacitated \u0026 end of each turn 1d12 Psychic damage, can save to end after", descriptionFull : "You unleash a torrent of conflicting desires in the mind of one creature you can see within range, impairing its ability to make decisions. The target must succeed on a Wisdom saving throw or be incapacitated. At the end of each of its turns, it takes 1d12 psychic damage, and it can then make another Wisdom saving throw. On a success, the spell ends on the target." }; SpellsList["intellect fortress-ua_frnw"] = { // completely different than later iterations in UA:POR and TCoE name : "Intellect Fortress", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["UA:FRnW", 7]], level : 5, school : "Abjur", time : "1 a", range : "Self", components : "V,S", duration : "Conc, 10 min", description : "I have advantage on all saves and I can use my reaction to have a creature in 30 ft reroll a failed save", descriptionFull : "You create a faintly shimmering barrier of protective psychic power around you. For the duration, you have advantage on all saving throws.\n When another creature that you can see within 30 feet of you fails a saving throw, you can use your reaction to allow them to reroll the save. They must use the new roll." }; SpellsList["mental barrier-ua"] = { name : "Mental Barrier", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["UA:FRnW", 7]], level : 2, school : "Abjur", time : "1 rea", timeFull : "1 reaction, which you take when you are forced to make an Intelligence, a Wisdom, or a Charisma saving throw", range : "Self", components : "V", duration : "1 rnd", description : "I have Psychic damage resistance and adv. on Int, Wis, and Cha saves until the start of my next turn", descriptionFull : "You protect your mind with a wall of looping, repetitive thought. Until the start of your next turn, you have advantage on Intelligence, Wisdom, and Charisma saving throws, and you have resistance to psychic damage." }; // [dupl_start] (mostly) the same as in Tasha's Cauldron of Everything if (!SourceList.T) { // almost duplicate from UA:SnW, but now also on the Bard's spell list // too much alike to the final TCoE version, so don't include it if TCoE is available SpellsList["mind sliver"] = { name : "Mind Sliver", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["T", 108], ["UA:SnW", 4], ["UA:FRnW", 7], ["UA:POR", 7]], level : 0, school : "Ench", time : "1 a", range : "60 ft", components : "V", duration : "1 rnd", save : "Int", description : "1 crea save or 1d6 Psychic dmg, -1d4 on first save before my next turn ends; +1d6 at CL 5, 11, and 17", descriptionCantripDie : "1 crea save or `CD`d6 Psychic dmg and subtract 1d4 from first saving throw before my next turn ends", descriptionFull : "You drive a disorienting spike of psychic energy into the mind of one creature you can see within range. The target must make an Intelligence saving throw. Unless the saving throw is successful, the target takes 1d6 psychic damage, and the first time it makes a saving throw before the end of your next turn, it must roll a d4 and subtract the number rolled from the save.\n This spell's damage increases by 1d6 when you reach certain levels: 5th level (2d6), 11th level (3d6), and 17th level (4d6)." }; WeaponsList["mind sliver"] = { regExpSearch : /^(?=.*mind)(?=.*sliver).*$/i, name : "Mind Sliver", source : [["T", 108], ["UA:SnW", 4], ["UA:FRnW", 7], ["UA:POR", 7]], list : "spell", ability : 6, type : "Cantrip", damage : ["C", 6, "psychic"], range : "60 ft", description : "1 creature Int save, success - no damage, fail - also -1d4 on first save before my next turn ends", abilitytodamage : false, dc : true }; } // dupl_end SpellsList["mind thrust-ua"] = { // rather different than later iterations in UA:POR and TCoE name : "Mind Thrust", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["UA:FRnW", 7]], level : 2, school : "Ench", time : "1 bns", range : "60 ft", components : "V,S", duration : "1 rnd", save : "Int", description : "1+1/SL crea, all max 30 ft apart, 3d6 Psychic dmg, only Dash/Diseng. next turn; save half, any action", descriptionFull : "You propel a lance of psionic disruption into the mind of one creature you can see within range. The target must make an Intelligence saving throw. On a failed save, the target takes 3d6 psychic damage, and it can use its action only to Dash or Disengage on its next turn. On a successful save, the target takes half as much damage, and this spell doesn't limit its action options." + AtHigherLevels + "When you cast this spell using a spell slot of 3rd level or higher, you can target one additional creature for each slot level above 2nd. The creatures must be within 30 feet of each other when you target them." }; SpellsList["psionic blast-ua"] = { name : "Psionic Blast", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["UA:FRnW", 8]], level : 3, school : "Evoc", time : "1 a", range : "30-ft cone", components : "V", duration : "Instantaneous", save : "Dex", description : "All crea 5d8+1d8/SL Force dmg, 20 ft pushed away, knocked prone; save half, not pushed or prone", descriptionShorter : "All 5d8+1d8/SL Force dmg, 20 ft pushed away, knocked prone; save half, not pushed or prone", descriptionFull : "You unleash a destructive wave of mental power in a 30-foot cone. Each creature in the area must make a Dexterity saving throw. On a failed save, a target takes 5d8 force damage, is pushed 20 feet directly away from you, and is knocked prone. On a successful save, a target takes half as much damage and isn't pushed or knocked prone." + AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d8 for each slot level above 3rd." }; SpellsList["psychic crush-ua"] = { name : "Psychic Crush", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["UA:FRnW", 8]], level : 6, school : "Ench", time : "1 a", range : "60 ft", components : "V,S", duration : "1 min", save : "Int", description : "1 crea 12d6 Psychic damage and stunned for 1 min; save half, not stunned; save at turn end to stop", descriptionFull : "You overload the mind of one creature you can see within range, filling its psyche with discordant emotions. The target must make an Intelligence saving throw. On a failed save, the target takes 12d6 psychic damage and is stunned for 1 minute. On a successful save, the target takes half as much damage and isn't stunned.\n The stunned target can make an Intelligence saving throw at the end of each of its turns. On a successful save, the spell ends on the target.", dynamicDamageBonus : { multipleDmgMoments : false } }; SpellsList["thought shield-ua"] = { name : "Thought Shield", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["UA:FRnW", 8]], level : 2, school : "Abjur", time : "1 a", range : "Touch", components : "V,S", duration : "8 h", description : "1 crea's mind can't be read/detected, telepathy only if wanted, adv. on saves vs. lie detecting effects", descriptionFull : "You weave a clouding veil over the mind of one creature you touch. For the duration, the target's mind can't be read or detected, creatures can't telepathically communicate with the target unless the target allows it, and the target has advantage on saving throws against any effect that would determine whether it is telling the truth." }; // Add the two psionic-themed feats FeatsList["telekinetic-ua"] = { name : "Telekinetic", source : [["UA:FRnW", 8]], descriptionFull : "You learn to move things with your mind. You gain the following benefits:\n \u2022 Increase your Intelligence score by 1, to a maximum of 20.\n \u2022 You learn the mage hand cantrip. You can cast it without verbal or somatic components, and you can make the spectral hand invisible.\n \u2022 As a bonus action, you can try to shove one creature you can see within 5 feet of the spectral hand created by your mage hand spell. When you do so, the target must succeed on a Strength saving throw (DC 8 + your proficiency bonus + your Intelligence modifier) or be pushed 5 feet away from you.", description : "I learn the Mage Hand cantrip, can cast it without components, and can make it invisible. As a bonus action, I can use it to try and shove a creature I can see within 5 ft of it. The target must make a Str save (Int based) or be shoved 5 ft away from me. [+1 Intelligence]", scores : [0, 0, 0, 1, 0, 0], spellcastingBonus : [{ name : "Telekinetic", spellcastingAbility : 4, spells : ["mage hand"], selection : ["mage hand"], firstCol : "atwill" }], spellChanges : { "mage hand" : { components : "", save : "Str", description : "Invisible hand, simple tasks, carries 10 lb; 1 a to control; not multiple; 1 bns 1 crea save or shove 5 ft", changes : "My Telekinetic feat allows me to cast Mage Hand without verbal or somatic components and I can make the spectral hand invisible." } } }; FeatsList["telepathic-ua"] = { name : "Telepathic", source : [["UA:FRnW", 8]], descriptionFull : "You awaken the ability to mentally connect with others. You gain the following benefits:\n \u2022 Increase your Intelligence score by 1, to a maximum of 20.\n \u2022 You gain proficiency in one skill of your choice from the following list: Deception, Insight, Intimidation, or Persuasion.\n \u2022 You can communicate telepathically with any creature you can see within 30 feet of you. If it understands at least one language, it can respond to you telepathically.", description : "I gain proficiency with one skill chosen from Deception, Insight, Intimidation, or Persuasion. I can communicate telepathically with any creature I can see within 30 feet of me. If it understands at least one language, it can respond to me telepathically. [+1 Intelligence]", scores : [0, 0, 0, 1, 0, 0], choices : ["Deception", "Insight", "Intimidation", "Persuasion"], "deception" : { description : "I gain proficiency with Deception. I can communicate telepathically with any creature I can see within 30 ft of me. If the creature understands at least one language, it can respond to me telepathically. [+1 Intelligence]", skills : ["Deception"] }, "insight" : { description : "I gain proficiency with Insight. I can communicate telepathically with any creature I can see within 30 ft of me. If the creature understands at least one language, it can respond to me telepathically. [+1 Intelligence]", skills : ["Insight"] }, "intimidation" : { description : "I gain proficiency with Intimidation. I can communicate telepathically with any creature I can see within 30 ft of me. If the creature understands at least one language, it can respond to me telepathically. [+1 Intelligence]", skills : ["Intimidation"] }, "persuasion" : { description : "I gain proficiency with Persuasion. I can communicate telepathically with any creature I can see within 30 ft of me. If the creature understands at least one language, it can respond to me telepathically. [+1 Intelligence]", skills : ["Persuasion"] } }; ================================================ FILE: WotC material/ua_20200114_Subclasses-Part-1.js ================================================ var iFileName = "ua_20200114_Subclasses-Part-1.js"; RequiredSheetVersion("13.1.14"); // This file adds the content from the Unearthed Arcana 2020: Subclasses, Part 1 article to MPMB's Character Record Sheet // Define the source SourceList["UA:SP1"] = { name : "Unearthed Arcana: Subclasses, Part 1", abbreviation : "UA:SP1", group : "Unearthed Arcana", url : "https://media.wizards.com/2020/dnd/downloads/UA2020-Subclasses01.pdf", date : "2020/01/14" }; // Add a subclasses for the Barbarian, Monk, Paladin, and Warlock AddSubClass("barbarian", "path of the beast-ua", { regExpSearch : /^(?=.*\bbeast\b)(?=.*(warrior|marauder|barbarian|viking|(norse|tribes?|clans?)(wo)?m(a|e)n)).*$/i, subname : "Path of the Beast", subnameShort: "Beast", source : [["UA:SP1", 1]], abilitySave : 3, features : { "subclassfeature3" : { name : "Form of the Beast", source : [["UA:SP1", 1]], minlevel : 3, description : desc([ "When I enter my rage, I can transform to gain a bite, tail, or claws attack for that rage", "The bite attack allows me to regain my Con mod in HP on a hit once on my turn", "The claws attack allows me to make one extra attack when I use it in my Attack action" ]), weaponOptions : [{ regExpSearch : /^(?=.*(bestial|beast))(?=.*bite).*$/i, name : "Bestial Bite", source : [["UA:SP1", 1]], ability : 1, type : "Natural", damage : [1, 8, "piercing"], range : "Melee", description : "Only in rage; On a hit once on my turn, regain Con mod in HP", abilitytodamage : true, bestialNaturalWeapon : true, selectNow : true }, { regExpSearch : /^(?=.*(bestial|beast))(?=.*claws?).*$/i, name : "Bestial Claws", source : [["UA:SP1", 1]], ability : 1, type : "Natural", damage : [1, 6, "slashing"], range : "Melee", description : "Only in rage; Extra attack if used as part of Attack action", abilitytodamage : true, bestialNaturalWeapon : true, selectNow : true }, { regExpSearch : /^(?=.*(bestial|beast))(?=.*tail).*$/i, name : "Bestial Tail", source : [["UA:SP1", 1]], ability : 1, type : "Natural", damage : [1, 12, "piercing"], range : "Melee", description : "Reach; Only in rage", abilitytodamage : true, bestialNaturalWeapon : true, selectNow : true }], additional : levels.map(function(n) { return n < 6 ? "" : "chosen weapon counts as magical"; }) }, "subclassfeature6" : { name : "Bestial Soul", source : [["UA:SP1", 1]], minlevel : 6, description : desc([ "When I finish a short rest, I can choose one of the following benefits until my next rest:", " \u2022 Swimming speed equal to my walking speed and I can breathe underwater", " \u2022 Climb speed (same as walking) and no check to climb difficult surfaces or upside down", " \u2022 Once per turn when I jump, I can extend it by the result of an Athletics check in feet" ]), calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.bestialNaturalWeapon && !v.thisWeapon[1] && !v.theWea.isMagicWeapon && !(/counts as( a)? magical/i).test(fields.Description)) { fields.Description += (fields.Description ? '; ' : '') + 'Counts as magical'; }; }, "The natural melee weapon that I gain from Form of the Beast count as magical for the purpose of overcoming resistance and immunity to nonmagical attacks and damage." ] } }, "subclassfeature10" : { name : "Infectious Fury", source : [["UA:SP1", 2]], minlevel : 10, description : desc([ "In rage, when I hit a creature with my natural weapon, I can have it make a Wis save", "If it fails (DC 8 + my Prof Bonus + my Con mod) it suffers one effect of my choice:", " \u2022 It uses its reaction to make a melee attack against one creature I can see of my choice", " \u2022 It takes 2d12 psychic damage" ]), usages : "Constitution modifier per ", usagescalc : "event.value = Math.max(1, What('Con Mod'));", recovery : "long rest" }, "subclassfeature14" : { name : "Call the Hunt", source : [["UA:SP1", 2]], minlevel : 14, description : desc([ "When I enter rage, I can choose my Con mod of willing creatures I can see within 30 ft", "The targets gain the Reckless Attack feature and I have adv. on saves vs. being frightened", "I also gain 5 temporary hit points per creature that accepts this benefit" ]), usages : "Constitution modifier per ", usagescalc : "event.value = Math.max(1, What('Con Mod'));", recovery : "long rest" } } }); AddSubClass("monk", "way of mercy-ua", { regExpSearch : /^(?=.*mercy)((?=.*(monk|monastic))|((?=.*martial)(?=.*(artist|arts)))|((?=.*spiritual)(?=.*warrior))).*$/i, subname : "Way of Mercy", subnameShort: "Mercy", source : [["UA:SP1", 2]], features : { "subclassfeature3" : { name : "Implements of Mercy", source : [["UA:SP1", 2]], minlevel : 3, description : desc([ "I gain proficiency with the herbalism and poisoner's kit, and either Insight or Medicine", 'Use the "Choose Feature" button above to select the skill proficiency, Insight or Medicine' ]), toolProfs : ["Herbalism kit", "Poisoner's kit"], choices : ["proficiency with Insight", "proficiency with Medicine"], "proficiency with insight" : { name : "Implements of Mercy - Insight", source : [["UA:SP1", 2]], description: desc("I gain proficiency in the Insight skill and with the herbalism kit and the poisoner's kit"), skills : ["Insight"] }, "proficiency with medicine" : { name : "Implements of Mercy - Medicine", source : [["UA:SP1", 2]], description: desc("I gain proficiency in the Medicine skill and with the herbalism kit and the poisoner's kit"), skills : ["Medicine"] }, "hands of healing" : { name : "Hands of Healing", extraname : "Way of Mercy 3", source : [["UA:SP1", 2]], description : levels.map(function (n) { var a = "As an action, I can spend 1 ki point to touch a creature and restore a number of its HP"; var b6 = "It also recovers from one disease or the blinded, deafened, paralyzed, or poisoned condition"; var c = "When I use Flurry of Blows, I can do this instead of one unarmed strike (no extra ki cost)"; return desc( n < 6 ? [a, c] : [a, b6, n < 11 ? c : c.replace("one", "each")] ); }), action : [["action", ""]], additional : levels.map(function (n) { return n < 3 ? "" : "1 ki point; heal 1d" + (n < 5 ? 4 : n < 11 ? 6 : n < 17 ? 8 : 10) + " + Wisdom modifier"; }) }, "hands of harm" : { name : "Hands of Harm", extraname : "Way of Mercy 3", source : [["UA:SP1", 3]], description : desc([ "When I hit a creature with an unarmed strike, I can spend 1 ki point to deal extra damage", "Only once per turn; If the target is incapacitated or poisoned, I roll the damage die 3 times" ]), additional : levels.map(function (n) { return n < 3 ? "" : "1 ki point; 1d" + (n < 5 ? 4 : n < 11 ? 6 : n < 17 ? 8 : 10) + " necrotic damage"; }) }, autoSelectExtrachoices : [{ extrachoice : "hands of healing" }, { extrachoice : "hands of harm" }] }, "subclassfeature6" : { name : "Noxious Aura", source : [["UA:SP1", 3]], minlevel : 6, additional: "1 ki point", description : desc([ "As a bonus action, I can spend 1 ki point to gain a 5-ft radius toxic aura for 1 minute", "While active, ranged attacks have disadv. vs. me; It ends if I'm incapacitated or dismiss it", "Others who start their turn in it must make a Con save or be poisoned and take damage", "They take my Wis mod in poison damage (min 0); Poisoned lasts until my next turn ends" ]), action : [["bonus action", ""]] }, "subclassfeature11" : { name : "Healing Technique", source : [["UA:SP1", 3]], minlevel : 11, description: desc("With hands of healing I can also end: 1 disease, blinded, deafened, paralyzed, or poisoned"), "hand of mercy" : { name : "Hand of Mercy", extraname : "Way of Mercy 17", source : [["UA:SP1", 3]], description : desc([ "As an action, I can use 4 ki to have a touched creature make a Con save (can fail willingly)", "If failed, it becomes paralyzed in a state of suspended animation for my monk level in days", "It also has immunity to all damage, and curses, diseases, poisons affecting it are suspended", "The creature appears dead to all inspection and to spells used to determine its status", "I can end the effect at will (no action required); I can have only one affected at a time" ]), action : [["action", ""]], additional : levels.map(function (n) { return n < 17 ? "" : "4 ki points; " + n + " days"; }) }, autoSelectExtrachoices : [{ extrachoice : "hand of mercy", minlevel : 17 }] } } }); AddSubClass("paladin", "oath of the watchers-ua", { regExpSearch : /^(?=.*watchers)((?=.*paladin)|((?=.*(exalted|sacred|holy|divine))(?=.*(knight|fighter|warrior|warlord|trooper)))).*$/i, subname : "Oath of the Watchers", subnameShort: "Watchers", source : [["UA:SP1", 3]], features : { "subclassfeature3" : { name : "Channel Divinity: Watcher's Will", source : [["UA:SP1", 4]], minlevel : 3, description: desc("As an action, Cha mod of creatures I see in 30 ft adv. on Int/Wis/Cha saves for 1 min"), action : [["action", ""]], spellcastingExtra : ["alarm", "chromatic orb", "augury", "moonbeam", "counterspell", "nondetection", "aura of purity", "banishment", "hold monster", "hallow"] }, "subclassfeature3.1" : { name : "Channel Divinity: Abjure the Extraplanar", source : [["UA:SP1", 4]], minlevel : 3, description : desc([ "As an action, elementals, fey, fiends, and aberrations within 30 ft must make a Wis save", "Succeeds if it can't hear me; On fail, turned for 1 minute or until it takes any damage", "Turned: move away, never within 30 ft of me, no reactions or actions other than Dash", "Turned: may Dodge instead of Dash when nowhere to move and unable to escape bonds" ]), action : [["action", ""]] }, "subclassfeature7" : { name : "Aura of the Sentinel", source : [["UA:SP1", 4]], minlevel : 7, description: desc("If I'm not incapacitated, chosen creatures in range and I add my Cha mod to Initiative"), additional : levels.map(function (n) { return n < 7 ? "" : (n < 18 ? 10 : 30) + "-foot aura"; }), addMod : [{ type : "skill", field : "Init", mod : "max(Cha|1)", text : "I can add my Charisma modifier (min +1) to initiative rolls." }] }, "subclassfeature15" : { name : "Vigilant Rebuke", source : [["UA:SP1", 4]], minlevel : 15, description : desc([ "As a reaction when I or another I can see saves against a spell, I can damage the caster", "Has to succeed save within 30 ft of me vs. unwanted spell; 2d8 + Cha mod force damage" ]), action : [["reaction", ""]] }, "subclassfeature20" : { name : "Mortal Bulwark", source : [["UA:SP1", 4]], minlevel : 20, description : desc([ "As a bonus action, I can gain the following benefits for 1 minute:", " \u2022 Truesight out to 120 ft and adv. on attacks vs. elementals, fey, fiends, and aberrations", " \u2022 I can force creatures I hit and damage with an attack to make a Charisma save", " If failed, the target is banished to its native plane of existence if it's not currently there", " If successful, the creature can't be banished by this feature for 24 hours" ]), recovery : "long rest", usages : 1, action : [["bonus action", ""]] } } }); AddSubClass("warlock", "the noble genie-ua", { regExpSearch : /^(?=.*warlock)(?=.*noble)(?=.*\b(genie|djinni|dao|efreeti)\b).*$/i, subname : "the Noble Genie", source : [["UA:SP1", 4]], spellcastingExtra : ["fog cloud", "sleep", "enlarge/reduce", "phantasmal force", "create food and water", "protection from energy", "polymorph", "phantasmal killer", "bigby's hand", "creation"], features : { "subclassfeature1" : { name : "Collector's Vessel", source : [["UA:SP1", 5]], minlevel : 1, description : desc([ "My patron gives me a magical vessel, a Tiny object which I can use as a spellcasting focus", "If I lose it, I can perform a 1-hour ceremony during a rest to receive a replacement", "As an action while holding it, I can create a tether to a willing target I can see in 100 ft", "This lasts for 1 hour, until I do this again, or the tethered target is reduced to 0 HP", "It also ends when the tethered target ends its turn further than 100 ft from me", "While the tether lasts, I add my Cha mod (min +1) to my Wis (Perception) checks", "Also, I can have spells I cast originate from the tethered creature's space" ]), action : [["action", ""]], usages : "Charisma modifier per ", usagescalc : "event.value = Math.max(1, What('Cha Mod'));", recovery : "long rest" }, "subclassfeature6" : { name : "Elemental Resistance", source : [["UA:SP1", 5]], minlevel : 6, description : desc([ "When I finish a long rest, I can gain acid, cold, fire, or lightning resistance (my choice)", "This lasts until I finish my next long rest; A creature tethered to my vessel also gains this" ]) }, "subclassfeature10" : { name : "Protective Wish", source : [["UA:SP1", 5]], minlevel : 10, description : desc([ "As a reaction when I or my tethered creature is hit by an attack, we can swap places", "As we both teleport to each others location, the one hit by the attack switches as well" ]), action : [["reaction", ""]] }, "subclassfeature10.1" : { name : "Genie's Entertainment", source : [["UA:SP1", 6]], minlevel : 10, description : desc([ "As an action, I can have a creature I can see within 90 ft make a Charisma save", "If failed, it is drawn into my vessel and teleported to my patron's court for 1 minute", "In there it is stunned but unharmed; At the end of each of its turns it can save to return" ]), recovery : "long rest", usages : 1 }, "subclassfeature14" : { name : "Collector's Call", source : [["UA:SP1", 6]], minlevel : 14, description : desc([ "As an action, I can implore my patron if I make a Persuasion check vs. my spell save DC", "If I fail, the use is wasted; If I succeed, I can choose one of the following effects:", " \u2022 A creature I can see in 60 ft heals 8d6 HP and 1 disease or condition affecting it ends", " This condition can be blinded, charmed, deafened, frightened, paralyzed, or poisoned", " \u2022 A creature I can see in 60 ft has disadv. on attacks \u0026 saves until my next turn starts", " \u2022 I can cast Legend Lore without using material components", "I can regain a use of this by sacrificing 500 gp of nonmagical treasure to my patron" ]), action : [["action", ""]], recovery : "long rest", usages : 1, spellcastingBonus : [{ name : "Collector's Call", spells : ["legend lore"], selection : ["legend lore"], firstCol : 'Sp' }], spellChanges : { "legend lore" : { components : "V,S", compMaterial : "", description : "Learn summary of lore of named or described person, place, or object", changes : "When I use my Collector's Call feature to cast Legend Lore, it doesn't require any material components." } } } } }); ================================================ FILE: WotC material/ua_20200206_Subclasses-Part-2.js ================================================ var iFileName = "ua_20200206_Subclasses-Part-2.js"; RequiredSheetVersion("13.1.14"); // This file adds the content from the Unearthed Arcana 2020: Subclasses, Part 2 article to MPMB's Character Record Sheet // Define the source SourceList["UA:SP2"] = { name : "Unearthed Arcana: Subclasses, Part 2", abbreviation : "UA:SP2", group : "Unearthed Arcana", url : "https://media.wizards.com/2020/dnd/downloads/UA2020_02_06_Subclasses2.pdf", date : "2020/02/06" }; // Add a subclass for the Bard and the functionality for its Dancing Item AddSubClass("bard", "college of creation-ua", { regExpSearch : /^(?=.*(college|bard|minstrel|troubadour|jongleur))(?=.*creation).*$/i, subname : "College of Creation", subnameShort: "Creation", source : [["UA:SP2", 1]], features : { "subclassfeature3" : { name : "Note of Potential", source : [["UA:SP2", 1]], minlevel : 3, description : desc([ "I can also grant a note of potential to whomever I give a bardic inspiration die", "This tiny, invulnerable object orbits in 5 ft; It enhances the use of the inspiration die:", "\u2022 Note of Destruction (used for attack roll): others within 5 ft must make a Con save", " If failed, they take the die roll in thunder damage; This uses my spell save DC", "\u2022 Note of Protection (used for save): Grants temp HP equal to the roll + my Cha mod", "\u2022 Note of Ingenuity (used for check): Roll the die twice and choose which result to use" ]) }, "subclassfeature6" : { name : "Animating Performance", source : [["UA:SP2", 1]], minlevel : 6, description : desc([ "As an action, I can animate a Large or smaller nonmagical item I can see within 30 ft", "It lasts for 1 hour or until it has 0 HP; I control it and it acts on my initiative, after me", "Unless I use a bonus action to command it, it only takes the Dodge action on its turn", "When I use bardic inspiration, I can command the item as part of the same bonus action", "I can't have multiple at once; Select \"Dancing Item\" on a companion page for its stats", "I can do this once per long rest, or by expending a 3rd-level or higher spell slot (SS 3+)" ]), action : [["action", ""], ["bonus action", "Command Dancing Item"]], usages : 1, recovery : "long rest", altResource : "SS 3+", creaturesAdd : [["Dancing Item"]], creatureOptions : [{ name : "Dancing Item", source : [["UA:SP2", 2]], size : 4, type : "Construct", alignment : "Neutral", ac : 16, hp : 33, hd : [], speed : "40 ft", scores : [18, 12, 16, 4, 10, 6], damage_immunities : "poison", condition_immunities : "charmed, exhaustion, poisoned, frightened", passivePerception : 10, senses : "Darkvision 60 ft", languages : "understands the languages of its creator but can't speak", challengeRating : "1", proficiencyBonus : 2, attacksAction : 1, attacks : [{ name : "Force-Empowered Slam", ability : 6, damage : [1, 10, "force"], range : "Melee (5 ft)", modifiers : ["", "oCha"], abilitytodamage : false, useSpellMod : "bard" }], features : [{ name : "Creator", description : "The item obeys the commands of its creator and uses its creator's spell attack modifier for its attack rolls. It takes its turn immediately after its creator, on the same initiative count. It can move and take reactions on its own, but only takes the Dodge action on its turn unless its creator takes a bonus action to command to do otherwise, in which case it can only take the Dash, Force-Empowered Slam (and possibly Endless Waltz), Disengage, Help, Hide, or Search action." }], actions : [{ name : "Immutable Form", description : "The item is immune to any spell or effect that would alter its form." }, { name : "Endless Waltz", description : "Immediately after the item makes a slam attack, it can take the Dodge action as a bonus action." }], header : 'Animated', calcChanges : { hp : function (totalHD, HDobj, prefix) { if (!classes.known.bard) return; var chaMod = Number(What('Cha Mod')); var brdLvl = classes.known.bard.level; var brdLvl5 = 5 * brdLvl; HDobj.alt.push(HDobj.conMod + chaMod + brdLvl5); HDobj.altStr.push(" = " + HDobj.conMod + " from its Constitution modifier\n + " + chaMod + " from its creator's Charisma modifier\n + 5 \xD7 " + brdLvl + " from five times its creator's bard level (" + brdLvl5 + ")"); }, setAltHp : true, hpForceRecalc : true } }] }, "subclassfeature14" : { name : "Performance of Creation", source : [["UA:SP2", 2]], minlevel : 14, description : levels.map(function (n) { return desc([ "As an action, I create a Large or smaller nonmagical item in an empty space in 10 ft", "Max " + (20 * n) + " gp value; I can't have multiple, creating more makes the first one vanish", "It vanishes when my next turn ends, unless I use my action to extend its life 1 extra turn", "If I sustain it for 1 minute this way, it continues to exists for my bard level in hours", "I can do this once per long rest, or by expending a 5th-level or higher spell slot (SS 5+)" ]); }), action : [["action", ""]], usages : 1, recovery : "long rest", altResource : "SS 5+" } } }); // Add a subclass for the Cleric AddSubClass("cleric", "unity domain-ua", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*unity).*$/i, subname : "Unity Domain", source : [["UA:SP2", 2]], spellcastingExtra : ["heroism", "shield of faith", "aid", "warding bond", "beacon of hope", "sending", "aura of purity", "guardian of faith", "greater restoration", "rary's telepathic bond"], features : { "subclassfeature1" : { name : "Emboldening Bond", source : [["UA:SP2", 3]], minlevel : 1, description : function () { var descr = desc([ "As an action, I can magically bond two willing targets I can see in 30 ft (can be me)", "While within 30 ft of the other, a bonded target can add +d4 to a save, attack, or check", "This can only be added once per turn; The bond lasts for 1 hour or until I use this again", "I can do this once per long rest, after which I can do so by expending a spell slot (SS 1+)" ]); var descr17 = descr.replace('While within 30 ft of the other', 'While on the same plane'); return levels.map(function (n) { return n < 17 ? descr : descr17; }); }(), action : [["action", ""]], usages : 1, recovery : "long rest", altResource : "SS 1+" }, "subclassfeature2" : { name : "Channel Divinity: Shared Burden", source : [["UA:SP2", 3]], minlevel : 2, description : desc([ "As a reaction when a creature I can see in 30 ft takes damage, I can divide that damage", "I then choose a number of willing creatures that I can see equal to my Wis mod (min 1)", "I distribute the damage over these and the original target, each taking at least 1 damage", "Damage resistances and vulnerabilities are only applied after the damage is distributed" ]), action : [["reaction", ""]] }, "subclassfeature6" : { name : "Protective Bond", source : [["UA:SP2", 3]], minlevel : 6, description : desc([ "My emboldening bond now also allows the two bonded to shield each other of damage", "When the other takes damage, one can use its reaction to give it resistance to all damage", "This resistance lasts until the end of the current turn" ]), additional : levels.map(function (n) { return n < 6 ? "" : n < 17 ? "the bonded must be within 30 ft" : "the bonded must be on the same plane"; }) }, "subclassfeature8" : { name : "Potent Spellcasting", source : [["UA:SP2", 3]], minlevel : 8, description : desc("I add my Wisdom modifier to the damage I deal with my cleric cantrips"), calcChanges : GenericClassFeatures["potent spellcasting"].calcChanges }, "subclassfeature17" : { name : "Enduring Unity", source : [["UA:SP2", 3]], minlevel : 17, description : desc([ "The 30 ft restriction no longer applies to my emboldening and protective bond features", "My emboldening bond now also empowers a bonded if the other is reduced to 0 HP", "If that happens, the bonded creature above 0 HP gains the following benefits:", " \u2022 Advantage on attack rolls, ability checks, and saving throws; Resistance to all damage", " \u2022 As an action, it can touch its bonded partner to expend and roll HD to heal", "These benefits lasts for 1 minute or until the downed creature regains at least 1 HP" ]) } } }); // Add a subclass for the Sorcerer AddSubClass("sorcerer", "clockwork soul-ua", { regExpSearch : /^((?=.*(sorcerer|witch))(?=.*mechanus)|(?=.*clockwork)(?=.*soul)).*$/i, subname : "Clockwork Soul", source : [["UA:SP2", 4]], fullname : "Clockwork Soul", spellcastingExtra : ["alarm", "protection from evil and good", "find traps", "heat metal", "counterspell", "glyph of warding", "arcane eye", "otiluke's resilient sphere", "animate objects", "wall of force"], spellcastingExtraApplyNonconform : true, features : { "subclassfeature1" : { name : "Clockwork Magic", source : [["UA:SP2", 4]], minlevel : 1, description: desc("I learn additional spells, which do not count towards the number of spell I can know") }, "subclassfeature1.1" : { name : "Restore Balance", source : [["UA:SP2", 4]], minlevel : 1, description : desc([ "As a reaction when a creature I can see in 60 ft is about to roll a d20 with adv./disadv.,", "I can prevent that roll from being affected by advantage and disadvantage." ]), usages : "Charisma modifier per ", usagescalc : "event.value = Math.max(1, What('Cha Mod'));", recovery : "long rest", action : [["reaction", ""]] }, "subclassfeature6" : { name : "Bulwark of Law", source : [["UA:SP2", 4]], minlevel : 6, description : desc([ "As an action, I can imbue a creature I can see within 30 ft with a magical ward", "I grant it a number of d8s equal to the number of sorcery points I expend when I do this", "When it takes damage, it can use its reaction to spend and roll any number of those dice", "The dice roll reduces the damage; The ward lasts until I finish a long rest or do this again" ]), additional : "1-5 sorcery points; 1d8 per point", action : [["action", ""]] }, "subclassfeature14" : { name : "Trance of Order", source : [["UA:SP2", 4]], minlevel : 14, description : desc([ "As a bonus action, I can enter a state of clockwork consciousness for 1 minute", "While in this state, attack rolls against me can't benefit from advantage", "Also, I can then treat a d20 roll below 9 as a 10 for my attack rolls, checks, and saves", "I can do this once per long rest, or by expending a 5 sorcery points (5 SP)" ]), action : [["bonus action", ""]], usages : 1, recovery : "long rest", altResource : "5 SP" }, "subclassfeature18" : { name : "Clockwork Cavalcade", source : [["UA:SP2", 5]], minlevel : 18, description : desc([ "As an action, I can call spirits to bring balance in a 30-ft cube originating from me", "Inside the cube, the intangible spirits do all the following before vanishing:", " \u2022 Restore up to 100 HP, divided among the creatures in the cube as I see fit", " \u2022 Repair all damaged objects in the cube", " \u2022 End spells of my choice of 6th-level or lower on objects or creatures in the cube", "I can do this once per long rest, or by expending a 7 sorcery points (7 SP)" ]), action : [["action", ""]], usages : 1, recovery : "long rest", altResource : "7 SP" } } }); ================================================ FILE: WotC material/ua_20200224_Subclasses-Part-3.js ================================================ var iFileName = "ua_20200206_Subclasses-Part-3.js"; RequiredSheetVersion("13.1.14", 15); // This file adds the content from the Unearthed Arcana 2020: Subclasses, Part 3 article to MPMB's Character Record Sheet // Define the source SourceList["UA:SP3"] = { name : "Unearthed Arcana: Subclasses, Part 3", abbreviation : "UA:SP3", group : "Unearthed Arcana", url : "https://media.wizards.com/2020/dnd/downloads/UA2020-Subclasses03_0224.pdf", date : "2020/02/24" }; // Add a subclass for the Artificer (but after all other scripts, so that all armour options are present) RunFunctionAtEnd(function () { if (!ClassList.artificer) { return; }; var UASP3_artificerSubclassArmorerUA = AddSubClass("artificer", "armorer-ua", { regExpSearch : /^(?=.*armou?rer)(?!.*wizard).*$/i, subname : "Armorer", fullname : "Armorer", source : [["UA:SP3", 1]], attacks : [1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], features : { "subclassfeature3" : { name : "Tools of the Trade", source : [["UA:SP3", 1]], minlevel : 3, description : " [proficient with heavy armor \u0026 smith's tools]", toolProfs : ["Smith's tools"], armorProfs : [false, false, true, false], spellcastingExtra : ["magic missile", "shield", "mirror image", "shatter", "hypnotic pattern", "lightning bolt", "fire shield", "greater invisibility", "passwall", "wall of force"] }, "subclassfeature3.1" : { name : "Power Armor", source : [["UA:SP3", 1]], minlevel : 3, description : desc([ "As an action, I can use smith's tool to turn a suit of heavy armor into power armor", "It continues to be power armor until I doff it, don another armor, or I die", "It can't be removed against my will, covers all my limbs, and even replaces missing limbs", "I ignore the Strength requirement of power armor and can use it as a spellcasting focus" ]), action : [["action", ""]] }, "subclassfeature3.2" : { name : "Armor Model", source : [["UA:SP3", 2]], minlevel : 3, description : desc([ "When I finish a rest, I can use smith's tools to change the model of my arcane armor", 'Select a model using the "Choose Feature" button; See "Notes" page for features of each' ]), additional : "also see notes page", toNotesPage : [{ name : "Power Armor Model Features", note : desc([ "I can customize my power armor to the guardian or infiltrator model whenever I finish a short or long rest, provided I have smith's tools in hand.", "Each model includes a special weapon. When I attack with that weapon, I can use my Intelligence modifier, instead of Strength or Dexterity, for the attack and damage rolls." ]) + "\n\n\u25C6 Guardian Power Armor (Armorer 3, UA:SP3 2)" + desc([ "\u2022 Thunder Gauntlets: The armored fists of the guardian power armor each count as a simple melee weapon, and each deals 1d8 thunder damage on a hit. A creature hit by the gauntlet has disadvantage on attack rolls against targets other than me until the start of me next turn, as the armor magically emits a distracting pulse when the creature attacks someone else.", "\u2022 Defensive Field: As a bonus action, I can gain temporary hit points equal to my artificer level, replacing any temporary hit points I already have. I lose these temporary hit points if I doff the armor." ]) + "\n\n\u25C6 Infiltrator Power Armor (Armorer 3, UA:SP3 2)" + desc([ "\u2022 Lightning Launcher: A gemlike node on one of the armored fists or on the chest (my choice) counts as a simple ranged weapon, with a normal range of 90 ft and a long range of 300 ft. It deals 1d6 lightning damage on a hit. Once on each of my turns when I hit a creature with it, I can deal an extra 1d6 lightning damage to that target.", "\u2022 Powered Steps: My walking speed increases by 5 feet.", "\u2022 Second Skin: The armor's weight is negligible, and it becomes formfitting and wearable under clothing. If the armor normally imposes disadvantage on Dexterity (Stealth) checks, the power armor doesn't." ]) }], choices : [], choiceDependencies : [{ feature : "subclassfeature15", choiceAttribute : true }], weaponOptions : [{ regExpSearch : /^(?=.*thunder)(?=.*gauntlet).*$/i, name : "Thunder Gauntlets", source : [["UA:SP3", 2]], ability : 4, type : "Simple", damage : [1, 8, "thunder"], range : "Melee", description : "Target hit disadv. on attacks vs. others than me until my next turn starts", abilitytodamage : true, monkweapon : true }, { regExpSearch : /^(?=.*lightning)(?=.*launcher).*$/i, name : "Lightning Launcher", source : [["UA:SP3", 2]], ability : 4, type : "Simple", damage : [1, 6, "lightning"], range : "90/300 ft", description : "Once per turn on hit, +1d6 lightning damage", abilitytodamage : true }], // Do this in the parent object, so that it is always visible and people printing the sheet can more easily switch between the two models action : [["bonus action", "Defensive Field (Guardian Model)"]] }, "subclassfeature9" : { name : "Armor Modifications", source : [["UA:SP3", 2]], minlevel : 9, description : desc([ "Power armor now counts as armor, boots, bracers, and a weapon for holding infusions", "I can infuse two of those after a rest without counting towards the number of items" ]), additional : "+2 infused items, if used on power armor" }, "subclassfeature15" : { name : "Perfected Armor", source : [["UA:SP3", 2]], minlevel : 15, description : desc([ 'My armor gets additional features, based on the model; Use "Choose Feature" to select it', "The guardian gets the ability to pull a creature closer as a reaction and make an attack", "The infiltrator gets an upgrade to its lightning launcher weapon attack" ]), toNotesPage : [{ name : "Guardian Perfected Armor Features", popupName : "Perfected Armor: Model Features", note : desc([ "Tinkering with my armor's energy system leads me to discover a powerful pulling force.", "As a reaction when a creature I can see ends its turn within 30 ft of me, I can force the creature to succeed on a Strength saving throw against my spell save DC or be pulled up to 30 ft toward me to an unoccupied space. If I pull the target to space within 5 ft of me, I can make a melee weapon attack against it as part of this reaction.", "I can use this reaction a number of times equal to my Intelligence modifier (min 1). I regain all expended uses of it when I finish a long rest." ]) + "\n\n\u25C6 Infiltrator Perfected Armor Features (Armorer 15, UA:SP3 2)" + desc([ "Any creature that takes lightning damage from my Lightning Launcher glimmers with light until the start of my next turn.", "The glimmering creature sheds dim light in a 5-ft radius, and the next attack roll against it by a creature other than me has advantage. If that attack hits, it deals an extra 1d6 lightning damage." ]), amendTo : "Power Armor Model Features" }], choices : ["guardian", "infiltrator"], choicesNotInMenu : true, "guardian" : { name : "Perfected Armor: Guardian", additional: "Intelligence modifier per long rest", description : desc([ "As a reaction when a creature I can see ends its turn in 30 ft, I have it make a Str save", "If it fails, I pull it up to 30 ft towards me to an empty space", "If I pull it within 5 ft, I can make a melee weapon attack vs. it as part of this reaction" ]) }, "infiltrator" : { name : "Perfected Armor: Infiltrator", description : desc([ "Those hit by my lightning launcher shed 5-ft radius dim light until my next turn starts", "Also, the next attack roll made by another than me vs. the target has advantage", "If that attack hits, it deals an extra 1d6 lightning damage" ]) }, // Do these in the parent object, so that they are always visible and people printing the sheet can more easily switch between the two models // Also, the armor model can be changed on a short rest, but the limited feature only resets on a long rest, so shouldn't be removed action : [["reaction", "Perfected Armor: Guardian"]], extraLimitedFeatures : [{ name : "Perfected Armor: Guardian", usages : "Intelligence modifier per ", recovery : "long rest", usagescalc : "event.value = Math.max(1, What('Int Mod'));" }] } } }); if (!UASP3_artificerSubclassArmorerUA || !ClassSubList[UASP3_artificerSubclassArmorerUA]) return; var itsFea = ClassSubList[UASP3_artificerSubclassArmorerUA].features["subclassfeature3.2"]; var guardianTxt = desc([ "Both fists are Thunder Gauntlets, simple melee weapons that distract those hit by it", "As a bonus action, I can activate a defensive shield to gain my artificer level in temp HP" ]) var guardianAdditional = levels.map(function (n) { return n + " temp HP; see notes page"; }) var infiltratorTxt = desc([ "+5 ft walking speed; Gemlike node in fist/chest is a ranged weapon, Lightning Launcher", "The power armor is formfitting, has negligible weight, and doesn't give disadv. on Stealth" ]) var prereqFunc = function(v) { var sParsed = ParseArmor(v.choice.replace(/(Guardian|Infiltrator) arcane /i, '')); return sParsed && testSource(sParsed, ArmourList[sParsed], "armorExcl") ? "skip" : true; }; for (var armor in ArmourList) { var anArm = ArmourList[armor]; if (anArm.type != "heavy" || anArm.isMagicArmor || !anArm.weight || (CurrentVars.extraArmour && CurrentVars.extraArmour[armor])) continue; // Add the Guardian variant of the armor var gArmName = "Guardian Power " + anArm.name; itsFea[gArmName.toLowerCase()] = { name : (typePF || anArm.name.length < 16 ? "Armor " : "") + "Model: Guardian " + anArm.name, submenu : "Guardian Power Armor", description : guardianTxt, additional : guardianAdditional, armorAdd : { select : gArmName, options : [gArmName] }, weaponsAdd : { select : ["Thunder Gauntlets"] }, prereqeval : prereqFunc, dependentChoices : "guardian" } // And now add the Infiltrator variant of the armor var iArm = newObj(anArm); iArm.name = "Infiltrator Power " + anArm.name; iArm.weight = 0; iArm.stealthdis = false; iArm.strReq = 0; iArm.selectNow = true; if (iArm.regExpSearch.indexOf(".*$/") == -1) { iArm.regExpSearch = iArm.regExpSearch.replace(/^/, "infiltrator.*"); } else { iArm.regExpSearch = iArm.regExpSearch.replace(/\.\*\$$/, "(?=.infiltrator).*$"); }; itsFea[iArm.name.toLowerCase()] = { name : "Armor Model: Infiltrator " + anArm.name, submenu : "Infiltrator Power Armor", description : infiltratorTxt, speed : { walk : {spd : "+5", enc : "+5" } }, weaponsAdd : { select : ["Lightning Launcher"] }, prereqeval : prereqFunc, armorOptions : [iArm], dependentChoices : "infiltrator" } // Lastly push both choices to the array itsFea.choices.push(gArmName, iArm.name); } }); // Add the new Artificer infusions if (ClassList.artificer && ClassList.artificer.features["infuse item"]) { // [dupl_start] the same as in Tasha's Cauldron of Everything if (!SourceList.T) { AddFeatureChoice(ClassList.artificer.features["infuse item"], true, "Helm of Awareness (prereq: level 10 artificer)", { name : "Helm of Awareness", source : [["T", 21], ["UA:SP3", 3]], description: desc("The wearer has advantage on Initiative rolls and can't be surprised while not incapacitated"), additional : "helmet; requires attunement", prereqeval : function(v) { return classes.known.artificer.level >= 10; }, magicitemsAdd : ["Helm of Awareness"] }); MagicItemsList["helm of awareness"] = { name : "Helm of Awareness", source : [["T", 21], ["UA:SP3", 3]], type : "wondrous item", description : "While wearing this helmet, I have advantage on initiative rolls. In addition, I can't be surprised, provided I'm not incapacitated.", descriptionFull : "While wearing this helmet, a creature has advantage on initiative rolls. In addition, the wearer can't be surprised, provided it isn't incapacitated.", attunement : true, advantages : [["Initiative", true]], savetxt : { immune : ["surprised"] } }; } // dupl_end AddFeatureChoice(ClassList.artificer.features["infuse item"], true, "Armor of Magical Strength (ua) (prereq: level 10 artificer)", { name : "Armor of Magical Strength", source : [["UA:SP3", 3]], description : desc([ "The wearer of the armor can use its Int mod instead of its Str mod for Str checks/saves", "The armor has 4 charges, regaining 1d4 expended charges daily at dawn", "As a reaction when being knocked prone, the wearer can use 1 charge to not be prone" ]), additional : "suit of armor; requires attunement", prereqeval : function(v) { return classes.known.artificer.level >= 10; }, magicitemsAdd : ["Armor of Magical Strength (UA)"] }); MagicItemsList["armor of magical strength-ua"] = { name : "Armor of Magical Strength (UA)", nameTest : "of Magical Strength (UA)", source : [["UA:SP3", 3]], type : "armor (light, medium, or heavy)", description : "This armor has 4 charges and regains 1d4 charges daily at dawn. As a reaction when I would be knocked prone, I can expend 1 charge to not be knocked prone. It allows me to use my Intelligence modifier instead of my Strength modifier when making Strength checks or Strength saves.", descriptionFull : "While wearing this armor, a creature can use its Intelligence modifier in place of its Strength modifier when making Strength checks and Strength saving throws.\n The armor has 4 charges. As a reaction when it would be knocked prone, the wearer can expend 1 charge to not be knocked prone. The armor regains 1d4 expended charges daily at dawn.", attunement : true, action : [["reaction", ""]], chooseGear : { type : "armor", prefixOrSuffix : "prefix" }, usages : 4, recovery : "dawn", additional : "regains 1d4", addMod : [{ type : "save", field : "Str", mod : "max(Int-Str|0)", text : "While attuned to the Armor of Magical Strength (UA), I can use my Intelligence modifier instead of my Strength modifier for Strength saving throws." }, { type : "skill", field : "Athletics", mod : "max(Int-Str|0)", text : "While attuned to the Armor of Magical Strength (UA), I can use my Intelligence modifier instead of my Strength modifier for Strength checks." }] }; AddFeatureChoice(ClassList.artificer.features["infuse item"], true, "Armor of Tools", { name : "Armor of Tools", source : [["UA:SP3", 3]], description : desc([ "The armor can have a set of artisan's or thieves' tools integrated into it as an action", "The tools remain integrated for 8 hours, or until removed as an action", "The wearer can add its Intelligence modifier to checks made with the integrated tools" ]), additional : "suit of armor", magicitemsAdd : ["Armor of Tools"] }); MagicItemsList["armor of tools-ua"] = { name : "Armor of Tools", source : [["UA:SP3", 3]], type : "armor (light, medium, or heavy)", description : "As an action, I can integrate a set of artisan's or thieves' tools into this magic studded leather armor, which can hold only one set at a time. The tools remain integrated for 8 hours or until I remove them as an action. I can add my Intelligence modifier as a bonus to any ability checks I make with the integrated tools.", descriptionFull : "As an action, a creature wearing this infused armor can integrate into it artisan's tools or thieves' tools. The tools remain integrated in the armor for 8 hours or until the wearer removes the tools as an action. The armor can have only one tool integrated at a time.\n The wearer can add its Intelligence modifier to any ability checks it makes with the integrated tool. The wearer must have a hand free to use the tool.", action : [["action", ""]] }; AddFeatureChoice(ClassList.artificer.features["infuse item"], true, "Mind Sharpener (ua)", { name : "Mind Sharpener", source : [["UA:SP3", 3]], description: desc("The wearer can use its reaction to ignore a failed Con save to maintain concentration"), additional : "suit of armor or robes", magicitemsAdd : ["Mind Sharpener (UA)"] }); MagicItemsList["mind sharpener-ua"] = { name : "Mind Sharpener (UA)", source : [["UA:SP3", 3]], description : "This magic armor or robes can send a jolt to refocus my mind. Whenever I fail a Constitution saving throw to maintain concentration on a spell, I can use my reaction to succeed instead.", descriptionFull : "The infused item can send a jolt to the wearer to refocus their mind. While wearing this infused item, whenever the creature fails a Constitution saving throw to maintain concentration on a spell, it can use its reaction to succeed instead.", action : [["reaction", ""]], choices : ["Mind Sharpener Armor", "Mind Sharpener Robes"], "mind sharpener armor" : { name : "Mind\u200A Sharpener (UA)", type : "armor (light, medium, or heavy)", description : "This magic armor can send a jolt to refocus my mind. Whenever I fail a Constitution saving throw to maintain concentration on a spell, I can use my reaction to succeed instead.", chooseGear : { type : "armor", prefixOrSuffix : "brackets", itemName1stPage : ["suffix", "Mind Sharpener"], descriptionChange : ["prefix", "armor"] } }, "mind sharpener robes" : { name : "Mind Sharpener (UA) (Robes)", type : "wondrous item", description : "These magic robes can send a jolt to refocus my mind. Whenever I fail a Constitution saving throw to maintain concentration on a spell, I can use my reaction to succeed instead." } }; AddFeatureChoice(ClassList.artificer.features["infuse item"], true, "Spell-Refueling Ring (ua) (prereq: level 6 artificer)", { name : "Spell-Refueling Ring", source : [["UA:SP3", 3]], description : desc([ "As an action once per dawn, the wearer of this ring can recover one expended spell slot", "The maximum level of the spell slot is equal to the number of magic items it is attuned to" ]), additional : "ring; requires attunement", prereqeval : function(v) { return classes.known.artificer.level >= 6; }, magicitemsAdd : ["Spell-Refueling Ring (UA)"] }); MagicItemsList["spell-refueling ring-ua"] = { name : "Spell-Refueling Ring (UA)", source : [["UA:SP3", 3]], type : "ring", description : "As an action, I can activate this magic ring to recover one expended spell slot. The maximum level of the recovered slot is equal to the number of magic items I am attuned to when I activate this ring. Once used, the ring can't be used again until the next dawn.", descriptionFull : "While wearing this ring, the creature can recover one expended spell slot as an action. The maximum level of the recovered slot is equal to the number of magic items the wearer is currently attuned to. Once used, the ring can't be used again until the next dawn.", attunement : true, action : [["action", ""]], usages : 1, recovery : "dawn" }; } AddSubClass("druid", "circle of the stars-ua", { regExpSearch : /^(?=.*(druid|shaman))(?=.*circle)(?=.*stars).*$/i, subname : "Circle of the Stars", subnameShort: "Stars", source : [["UA:SP3", 3]], features : { "subclassfeature2" : { name : "Star Map", source : [["UA:SP3", 3]], minlevel : 2, description : desc([ "I've created a star map, a Tiny object which I can use as my spellcasting focus", "If I lose it, I can perform a 1-hour ceremony during a rest to create a replacement", "I can use it to cast Augury or Guiding Bolt, even unprepared, without using a spell slot" ]), spellcastingBonus : [{ name : "Star Map", spells : ["guiding bolt", "augury"], selection : ["guiding bolt", "augury"], firstCol : "Sp", times : 2 }], usages : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest" }, "subclassfeature2.1" : { name : "Starry Form", source : [["UA:SP3", 3]], minlevel : 2, description : desc([ "As an action, I can expend a use of wild shape to take on a starry form for 10 minutes", "In that form I shed bright light in a 10-ft radius and dim light for an extra 10-ft radius", "When I do so, I choose one constellation below to grant me benefits in my starry form:", "\u2022 Chalice: When I use a spell slot to cast a healing spell, I also heal a creature in 30 ft", " This can be myself or the original target; I restore 1d8 + half my druid level in HP", "\u2022 Archer: As a bonus action, I can make a ranged spell attack to hurl a luminous arrow", " This has a range of 60 ft and deals radiant damage equal to 1d8 + my Wisdom mod", "\u2022 Dragon: I can treat a roll below 10 as a 10 for Int/Wis checks and concentration saves" ]), action : [["bonus action", " (Archer Constellation)"]], additional : levels.map(function (n) { return n < 2 ? "" : "Chalice: heals 1d8+" + Math.floor(n/2) + " HP"; }), weaponOptions : [{ regExpSearch : /^(?=.*luminous)(?=.*arrow).*$/i, name : "Luminous Arrow", source : [["UA:SP3", 3]], ability : 5, type : "Spell", damage : [1, 8, "radiant"], range : "60 ft", description : "Use as bonus action", abilitytodamage : true, selectNow : true }] }, "subclassfeature6" : { name : "Cosmic Omen", source : [["UA:SP3", 3]], minlevel : 6, description : desc([ "When I finish a long rest, I can roll a die to gain an omen based on the result (odd/even)", "As a reaction when a creature I can see in 30 ft makes an attack, check, or save, I can:", "\u2022 Weal (even): add 1d6 to the number rolled for the attack, check, or save", "\u2022 Woe (odd): subtract 1d6 from the number rolled for the attack, check, or save" ]), action : [["reaction", ""]], usages : "Wisdom modifier per ", usagescalc : "event.value = Math.max(1, What('Wis Mod'));", recovery : "long rest" }, "subclassfeature10" : { name : "Full of Stars", source : [["UA:SP3", 3]], minlevel : 10, description: desc("While in my starry form, I have resistance to bludgeoning, piercing, and slashing damage"), dmgres : [ ["Bludgeoning", "Bludgeon. (in form)"], ["Piercing", "Piercing (in form)"], ["Slashing", "Slashing (in form)"] ], "star flare" : { name : "Star Flare", extraname : "Circle of the Stars 14", source : [["UA:SP3", 3]], description : desc([ "As an action, I conjure a 30-ft radius sphere of light on a point within 120 ft I can see", "I then teleport each willing creature in that sphere to an empty space within 30 ft of it", "Creatures left within the sphere must make a Con save or take 4d10 radiant damage", "Those that failed the save are also blinded until the end of my next turn", "I can do this once per long rest, or by expending a 5th-level or higher spell slot (SS 5+)" ]), action : [["action", ""]], usages : 1, recovery : "long rest", altResource : "SS 5+" }, autoSelectExtrachoices : [{ extrachoice : "star flare", minlevel : 14 }] } } }); var UASP3_rangerSubclassFeyWandererUA = AddSubClass("ranger", "fey wanderer-ua", { regExpSearch : /^(?=.*fey)(?=.*wanderer).*$/i, subname : "Fey Wanderer", source : [["UA:SP3", 5]], fullname : "Fey Wanderer", features : { "subclassfeature3" : { name : "Fey Wanderer Magic", source : [["UA:SP3", 5]], minlevel : 3, description: desc("I get bonus spells known, which do not count against the number of spells I can know"), spellcastingExtra : ["charm person", "misty step", "dispel magic", "banishment", "mislead"], spellcastingExtraApplyNonconform : true }, "subclassfeature3.1" : { name : "Cunning Will", source : [["UA:SP3", 5]], minlevel : 3, description: desc("Adv. on saves vs. charm/frightened; Proficiency in Deception, Performance, or Persuasion"), skillstxt : "Choose one from: Deception, Performance, or Persuasion", savetxt : { adv_vs : ["charmed", "frightened"] } }, "subclassfeature3.2" : { name : "Dreadful Strikes", source : [["UA:SP3", 5]], minlevel : 3, description : desc([ "As a bonus action, I can imbue the weapons I'm holding with magic until my turn ends", "They count as magical and deal +1d6 psychic damage, but only once to a single creature", "I can also do this as part of the same bonus action as making an off-hand attack" ]), action : [["bonus action", ""]] }, "subclassfeature7" : { name : "Blessings of the Courts", source : [["UA:SP3", 5]], minlevel : 7, description : desc([ "Once per turn when I hit a weapon attack, I can expend a spell slot for extra damage", "The target takes +3d6 psychic damage and must make a Wis save or be frightened of me", "This lasts until the end of my next turn; In addition, I add my Wis mod to Cha checks" ]), addMod : ["Deception", "Intimidation", "Performance", "Persuasion"].map(function(skill){return {type : "skill", field : skill, mod : "Wis", text : "I add my Wisdom modifier to my Charisma checks"};}) }, "subclassfeature11" : { name : "Beguiling Twist", source : [["UA:SP3", 6]], minlevel : 11, description : desc([ "As a reaction when a creature I can see in 120 ft succeeds a save vs. charmed/frightened", "I can have another I can see in 120 ft make a Wis save or suffer one effect of my choice:", " \u2022 For 1 min, it's frightened of me or charmed; It can save again at the end of its turns", " \u2022 It takes 3d10 psychic damage" ]), action : [["reaction", ""]], "misty presence" : { name : "Misty Presence", extraname : "Fey Wanderer 15", source : [["UA:SP3", 6]], description : desc([ "As a bonus action, I can have a creature I can see within 30 ft make a Wisdom save", "On a failed save, it cannot see or hear me for 24 hours or until I use this feature again", "The target can repeat its save if I hit it with an attack, force it to save, or deal it damage", "On a successful save, the creature is immune to my use of this feature for 7 days", "I can do this once per long rest, or by expending a 4th-level or higher spell slot (SS 4+)" ]), action : [["bonus action", ""]], usages : 1, recovery : "long rest", altResource : "SS 4+" }, autoSelectExtrachoices : [{ extrachoice : "misty presence", minlevel : 15 }] } } }); if (ClassList.rangerua) { ClassList.rangerua.subclasses[1].push(UASP3_rangerSubclassFeyWandererUA); }; ================================================ FILE: WotC material/ua_20200512_Subclasses-Revisited.js ================================================ var iFileName = "ua_20200512_Subclasses-Revisited.js"; RequiredSheetVersion("13.0.8", 15); // This file adds the content from the Unearthed Arcana: Fighter, Ranger, and Rogue article to MPMB's Character Record Sheet // This file contains contributions by Undrhil and Metacomet10 SourceList["UA:SR"] = { name : "Unearthed Arcana: Subclasses Revisited", abbreviation : "UA:SR", group : "Unearthed Arcana", url : "https://media.wizards.com/2020/dnd/downloads/UA2020_SubclassesRevisited_0512.pdf", date : "2020/05/12" }; AddSubClass("rogue", "phantom-ua", { regExpSearch : /^(?!.*(barbarian|bard|cleric|druid|fighter|monk|paladin|ranger|sorcerer|warlock|wizard))(?=.*phantom).*$/i, subname : "Phantom", source : [["UA:SR", 1]], fullname : "Phantom", features : { "subclassfeature3" : { name : "Whispers of the Dead", source : [["UA:SR", 1]], minlevel : 3, description : desc([ "Whenever I finish a short or long rest, I can gain one skill or tool proficiency of my choice", "This proficiency lasts until I use this feature again to gain a different proficiency" ]), skillstxt : "Choose one skill or tool; I can change the choice whenever I finish a short or long rest" }, "subclassfeature3.1" : { name : "Wails from the Grave", source : [["UA:SR", 1]], minlevel : 3, description : levels.map(function (n) { var a = [ "Directly after I deal sneak attack damage to a creature on my turn, I " + (n < 17 ? "can" : "also") + " harm another", n < 17 ? "I then deal half my sneak attack in psychic damage to a creature I can see within 30 ft" : "I deal half my sneak attack in psychic damage to both it and another I can see in 30 ft" ]; return desc(a); }), usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", additional : levels.map(function (n) { return Math.ceil(n / 4) + "d6"; }), }, "subclassfeature9" : { name : "Tokens of the Departed", source : [["UA:SR", 2]], minlevel : 9, description : " [max Proficiency Bonus of soul trinkets]" + desc([ "As a reaction when I see a creature within 30 ft die, I can create a Tiny soul trinket", "The token of its life essence appears in my free hand; The DM determines its appearance", "While a soul trinket is on my person, I have advantage on death and Constitution saves", "As an action, I can destroy one of my soul trinkets and ask its associated spirit a question", "Its spirit appears and answers concisely in a language it knew; Trinket can be anywhere" ]), action : [ ["reaction", "Create Soul Trinket"], ["action", "Destroy Soul Trinket"] ], extraLimitedFeatures : [{ name : "Soul Trinkets (max Prof Bonus)", usages : "", recovery : "Special" }], savetxt : { text : ["While soul trinket is on me, Adv. on Con and death saves"] } }, "subclassfeature13" : { name : "Ghost Walk", source : [["UA:SR", 2]], minlevel : 13, description : desc([ "As a bonus action, I can assume a spectral form with 10 ft flying speed and can hover", "Attacks vs. me have disadv.; I can move through creatures and objects as difficult terrain", "This lasts 10 min; I take 1d10 force damage if I end my turn inside a creature or object", "I can assume this form once per long rest, or by destroying one of my soul trinkets (ST)" ]), action : [["bonus action", " (start/end)"]], usages : 1, recovery : "long rest", altResource : "ST" }, "subclassfeature17" : { name : "Death Knoll", source : [["UA:SR", 2]], minlevel : 17, description : desc([ "Wails from the Grave now also deals damage to the target of the original sneak attack" ]) } } }); // [dupl_start] the same as in Tasha's Cauldron of Everything if (!SourceList.T) { AddSubClass("warlock", "the genie", { regExpSearch : /^(?=.*warlock)(?=.*(genie|dao|djinni|efreeti|marid)).*$/i, subname : "the Genie", source : [["T", 73], ["UA:SR", 2]], features : { "subclassfeature1" : { name : "Choose Genie Kind", source : [["T", 73], ["UA:SR", 3]], minlevel : 1, description : desc('Use the "Choose Feature" button above to choose the kind of genie your patron is'), calcChanges : { spellList : [ function(spList, spName, spType) { if (spType.indexOf("bonus") !== -1 && spList.name && /mystic arcanum/i.test(spList.name) && spList.level[0] === 9) { spList.extraspells.push("wish"); } else if (spType.indexOf("bonus") === -1 && spName === "warlock") { if (!spList.notspells) spList.notspells = []; spList.notspells.push("wish"); } }, "The Genie patron adds Wish as a spell available for my 9th-level Mystic Arcanum selection." ] }, choices : ["Dao (earth)", "Djinni (air)", "Efreeti (fire)", "Marid (water)"], "dao (earth)" : { name : "Dao Genie Patron", description: desc("My genie patron is a Dao, associated with earth"), spellcastingExtra : ["detect evil and good", "sanctuary", "phantasmal force", "spike growth", "create food and water", "meld into stone", "phantasmal killer", "stone shape", "creation", "wall of stone", "wish"] }, "djinni (air)" : { name : "Djinni Genie Patron", description: desc("My genie patron is a Djinni, associated with air"), spellcastingExtra : ["detect evil and good", "thunderwave", "gust of wind", "phantasmal force", "create food and water", "wind wall", "greater invisibility", "phantasmal killer", "creation", "seeming", "wish"] }, "efreeti (fire)" : { name : "Efreeti Genie Patron", description: desc("My genie patron is an Efreeti, associated with fire"), spellcastingExtra : ["burning hands", "detect evil and good", "phantasmal force", "scorching ray", "create food and water", "fireball", "fire shield", "phantasmal killer", "creation", "flame strike", "wish"] }, "marid (water)" : { name : "Marid Genie Patron", description: desc("My genie patron is a Marid, associated with water"), spellcastingExtra : ["detect evil and good", "fog cloud", "blur", "phantasmal force", "create food and water", "sleet storm", "control water", "phantasmal killer", "cone of cold", "creation", "wish"] }, choiceDependencies : [{ feature : "subclassfeature1.3" }, { feature : "subclassfeature6" }] }, "subclassfeature1.1" : { name : "Genie's Vessel", source : [["T", 73], ["UA:SR", 3]], minlevel : 1, description : desc([ "My patron gifts me a magical vessel, a Tiny object, granting me a measure of its power", "I choose the vessel's appearance; I can use it as my spellcasting focus for warlock spells", "The vessel's AC is my spell save DC and it has my warlock level + Proficiency Bonus in HP", "If it is destroyed or lost, I can get a replacement with a 1-hour ceremony during a rest" ]) }, "subclassfeature1.2" : { name : "Genie's Vessel: Bottled Respite", source : [["T", 74], ["UA:SR", 3]], minlevel : 1, description : desc([ "As an action, I can vanish and enter the extradimensional space inside my genie's vessel", "The vessel stays in its location; The space inside is a 20-ft high, 20-ft radius cylinder", "As a bonus action, I can exit my vessel; I exit it early if I die or the vessel is destroyed", "I can remain inside for twice my Proficiency Bonus in hours; Objects can be left inside" ]), limfeaname : "Bottled Respite", action : [["action", " (enter)"], ["bonus action", " (eject)"]], usages : 1, recovery : "long rest" }, "subclassfeature1.3" : { name : "Genie's Wrath", source : [["T", 73], ["UA:SR", 3]], minlevel : 1, description : desc([ "I can deal bonus damage on my attacks, its type depending on my patron's genie kind", 'Use the "Choose Feature" button above to choose the kind of genie your patron is' ]), choices : ["dao (earth)", "djinni (air)", "efreeti (fire)", "marid (water)"], choicesNotInMenu : true, "dao (earth)" : { name : "Dao's Wrath", description : " [once on each of my turns]\n When I hit an attack, I can have it deal my Prof Bonus in extra bludgeoning damage", calcChanges : { atkAdd : [ function (fields, v) { if (!v.isDC) { fields.Description += (fields.Description ? '; ' : '') + 'Once per my turn +' + How('Proficiency Bonus') + ' bludgeoning damage'; } }, "Once on each of my turns, I can have one of my attacks that hit deal extra bludgeoning damage equal to my proficiency bonus." ] } }, "djinni (air)" : { name : "Djinni's Wrath", description : " [once on each of my turns]\n When I hit an attack, I can have it deal my Proficiency Bonus in extra thunder damage", calcChanges : { atkAdd : [ function (fields, v) { if (!v.isDC) { fields.Description += (fields.Description ? '; ' : '') + 'Once per my turn +' + How('Proficiency Bonus') + ' thunder damage'; } }, "Once on each of my turns, I can have one of my attacks that hit deal extra thunder damage equal to my proficiency bonus." ] } }, "efreeti (fire)" : { name : "Efreeti's Wrath", description : " [once on each of my turns]\n When I hit an attack, I can have it deal my Proficiency Bonus in extra fire damage", calcChanges : { atkAdd : [ function (fields, v) { if (!v.isDC) { fields.Description += (fields.Description ? '; ' : '') + 'Once per my turn +' + How('Proficiency Bonus') + ' fire damage'; } }, "Once on each of my turns, I can have one of my attacks that hit deal extra fire damage equal to my proficiency bonus." ] } }, "marid (water)" : { name : "Marid's Wrath", description : " [once on each of my turns]\n When I hit an attack, I can have it deal my Proficiency Bonus in extra cold damage", calcChanges : { atkAdd : [ function (fields, v) { if (!v.isDC) { fields.Description += (fields.Description ? '; ' : '') + 'Once per my turn +' + How('Proficiency Bonus') + ' cold damage'; } }, "Once on each of my turns, I can have one of my attacks that hit deal extra cold damage equal to my proficiency bonus." ] } } }, "subclassfeature6" : { name : "Elemental Gift", source : [["T", 75], ["UA:SR", 3]], minlevel : 6, description : desc([ "I gain resistance to a damage type depending on my patron's genie kind", 'Use the "Choose Feature" button above to choose the kind of genie your patron is', "As a bonus action, I can gain a flying speed of 30 ft and I can hover, for 10 minutes" ]), choices : ["dao (earth)", "djinni (air)", "efreeti (fire)", "marid (water)"], choicesNotInMenu : true, "dao (earth)" : { name : "Dao's Elemental Gift", description : desc([ "I gain resistance to bludgeoning damage", "As a bonus action, I can gain a flying speed of 30 ft and I can hover, for 10 minutes" ]), action : [["bonus action", " (start fly)"]], dmgres : ["Bludgeoning"] }, "djinni (air)" : { name : "Djinni's Elemental Gift", description : desc([ "I gain resistance to thunder damage", "As a bonus action, I can gain a flying speed of 30 ft and I can hover, for 10 minutes" ]), action : [["bonus action", " (start fly)"]], dmgres : ["Thunder"] }, "efreeti (fire)" : { name : "Efreeti's Elemental Gift", description : desc([ "I gain resistance to fire damage", "As a bonus action, I can gain a flying speed of 30 ft and I can hover, for 10 minutes" ]), action : [["bonus action", " (start fly)"]], dmgres : ["Fire"] }, "marid (water)" : { name : "Marid's Elemental Gift", description : desc([ "I gain resistance to cold damage", "As a bonus action, I can gain a flying speed of 30 ft and I can hover, for 10 minutes" ]), action : [["bonus action", " (start fly)"]], dmgres : ["Cold"] }, additional : "Fly 10 min", usages : "Prof Bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature10" : { name : "Sanctuary Vessel", source : [["T", 75], ["UA:SR", 3]], minlevel : 10, description : desc([ "When I enter my vessel I can have up to 5 willing creatures I can see in 30 ft join me", "As a bonus action, I can eject any number of creatures from my genie's vessel", "Everyone is ejected when I leave it or if the vessel is destroyed", "Anyone who remains in the vessel for at least 10 min gains the benefits of a short rest", "Also, HD spend as part of this short rest has my Proficiency Bonus added to the roll" ]) }, "subclassfeature14" : { name : "Limited Wish", source : [["T", 75], ["UA:SR", 3]], minlevel : 14, additional: "1\xD7 per 1d4 long rests", description : desc([ "As an action, I can cast a 6th-level or lower spell with a casting time time of one action", "This can be any spell; It doesn't require any costly components, it simply takes effect" ]), action : [["action", ""]], extraLimitedFeatures : [{ name : "Limited Wish", usages : 1, recovery : "1d4 LR" }] } } }); } // dupl_end /* This UA version of Order of Scribes is not done yet AddSubClass("wizard","order of scribes-ua", { regExpSearch : /^(?=.*wizard)(?=.*order)(?=.*scribes?).*$|scrivener/i, subname : "Order of Scribes", source : [["UA:SR", 4]], features : { "subclassfeature2" : { name : "Wizardly Quill", source : [["UA:SR", 4]], minlevel : 2, description : desc([ "As a bonus action, I can magically create a Tiny quill with the following properties:", " \u2022 It doesn't require ink and produces ink in the color of my choice when writing with it", " \u2022 The gold and time required to transcribe spells into my spellbook with it are halved", " \u2022 As a bonus action, I can use it to erase a text written with it if within 5 ft of the text", "The quill disappear if I create another or if I die" ]), action : [["bonus action", " (create/erase)"]] }, "subclassfeature2.1" : { name : "Awakened Spellbook", source : [["UA:SR", 4]], minlevel : 2, description : desc ([ "My spellbook gains sentience and grants me the following benefits while I am holding it:", " \u2022 I can use the book as a spellcasting focus for my wizard spells", " \u2022 When I cast a wizard spell using a spell slot, I can temporarily replace its damage type", " The new damage type must appear in another spell in my awakened spellbook", " \u2022 Once per long rest, I can ritual cast a wizard spell without 10 min extra casting time", "I can replace it over a short rest, transferring its spells and sentience to a blank book" ]), additional : "fast ritual cast", usages : 1, recovery : "long rest" }, "subclassfeature6" : { name : "Master Scrivener", source : [["UA:SR", 4]], minlevel : 6, description : desc([ "When I finish a long rest, I can write a spell in my awakened spellbook on a blank paper", "It must be a level 1 or 2 spell with 1 action casting time; My spellbook must be in 5 ft", "As an action, I can use this scroll to cast the spell on it at one higher level than normal", "Only I can use the scroll; The scroll turns blank again when I use it or finish a long rest", "Also, using my Wizardly Quill, the gold and time I need to craft spell scrolls is halved" ]), action : [["action", " (cast scroll)"]], usages : 1, recovery : "long rest" }, // Finished until here "subclassfeature10" : { name : "Manifest Mind", source : [["UA:SR", 5]], minlevel : 10, description : desc('As a bonus action, I can cause my Awakened Spellbook to manifest. See "Note" page'), toNotesPage : [{ name : "Manifest Mind", source : [["UA:SR", 5]], page3notes : false, note : desc (["As a bonus action with my Awakened Spellbook on my person, I can cause the mind to", "manifest as a Tiny spectral construct, hovering in an unoccupied space of my choice within", "60 ft. It is intangible and doesn't occupy its space, and it sheds dim light in a 10 ft radius.", "It looks like a ghostly tome, a cascade of text, or a scholar from the past \(my choice.\).", "\(See Companion Page for statistics for this construct.\)", "While manifested, it can hear and see and has darkvision with a range of 60 ft. As an", "action, I can hear and see using its senses instead of my own, until my concentration", "ends \(as if concentrating on a spell\).", "Whenever I cast a wizard spell on my turn, I can cast it as if I were in the spectral mind's", "space, using its senses. I can do this a number of times per day equal to my proficiency", "bonus, and I regain all uses when I finish a long rest.", "As a bonus action, I can cause it to hover up to 30 ft to an unoccupied space that I or it", "can see. It can pass through creatures but not objects. It stops manifesting if it is ever", "more than 300 ft away from me, if it drops to 0 hit points, if I die, or if I dismiss it as", "a bonus action." ]) }], eval : function() { var companionFunctions = ClassList.artificer ? ClassList.artificer.artificerCompFunc : ClassList.wizard.artificer.CompFunc; companionFunctions.add("Manifest Mind"); ClassList.wizard.wizardCompFunc.update(10, What('Int mod'),What('AC'),What('Str mod'),What('Dex mod'),What('Con mod'),What('Wis mod'),What('Cha mod')); }, removeeval : function() { var companionFunctions = ClassList.artificer ? ClassList.artificer.artificerCompFunc : ClassList.wizard.artificerCompFunc; companionFunctions.remove("Manifest Mind"); }, action : [["bonus action",""],["bonus action","Hover spellbook 30ft"],["bonus action","dismiss Manifestation"]], usages : "Prof Bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature14" : { name : "One with the Word", source : [["UA:SR", 5]], minlevel : 14, description : desc([ "While I am holding my Awakened Spellbook and it is manifest, I can take an action to", "swap places with the manifestation. I can do this a number of times equal to my", "proficiency bonus and I regain all expended uses when I finish a long rest.", "If I die but at least one spell remains in my Awakened Spellbook, I can return to", "life after 1 minute within 5 ft of the book. I revive with 1 hit point. I then roll", "3d6 and the spellbook loses spells of my choice that have a combined spell level", "equal to that roll or higher. I am incapable of casting the lost spells, even if I", "find them on a scroll or in another spellbook. I can only restore my ability to cast", "one of these spells with the wish spell, which will restore one spell per casting." ]), action : [["action","Swap places with spellbook"]], usages : "Prof Bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" } } }); */ ================================================ FILE: WotC material/ua_20200713_Feats-2020.js ================================================ var iFileName = "ua_20200713_Feats-2020.js"; RequiredSheetVersion("14.0.5-beta", 15); // This file adds the content from the Unearthed Arcana 2020: Feats article to MPMB's Character Record Sheet // All content in this file contains contributions by AelarTheElfRogue // Define the source SourceList["UA:F2"] = { name : "Unearthed Arcana: Feats 2020", abbreviation : "UA:F2", group : "Unearthed Arcana", url : "https://media.wizards.com/2020/dnd/downloads/UA2020_Feats.pdf", date : "2020/07/13" }; // [dupl_start] (mostly) the same as in Tasha's Cauldron of Everything // feats that allow a change every level in UA, but not/different in TCoE are not added again, because the difference is so small if (!SourceList.T) { FeatsList["artificer initiate"] = { name : "Artificer Initiate", source : [["T", 79], ["UA:F2", 1]], descriptionFull : "You've learned some of an artificer's inventiveness, granting you the following benefits:\n \u2022 You learn one cantrip of your choice from the artificer spell list, and you learn one 1st-level spell of your choice from that list. Intelligence is your spellcasting ability for these spells. Whenever you gain a level, you can replace one of these spells with another spell of the same level from the artificer spell list.\n \u2022 You can cast this feat's 1st-level spell without a spell slot, and you must finish a long rest before you can cast it in this way again. You can also cast the spell using any spell slots you have.\n \u2022 You gain proficiency with one type of artisan's tools of your choice, and you can use that type of tool as a spellcasting focus for any spell you cast that uses Intelligence as its spellcasting ability.", // only slightly different than TCoE: allowed to switch spells every level description : typePF ? "I learn a cantrip and a 1st-level spell from the artificer's spell list. Int is my spellcasting ability for these. Once per long rest, I can cast the 1st-level spell at its lowest level without using a spell slot. I gain proficiency in one artisan's tool, which I can use as a spellcasting focus for spells I cast with Int as spellcasting ability." : "I learn one cantrip and one 1st-level spell from the artificer's spell list. Intelligence is my spellcasting ability for these. I can cast the 1st-level spell at its lowest level once per long rest without using a spell slot. I gain proficiency in one artisan's tool, which I can use as a spellcasting focus for any spell I cast that uses Intelligence as its spellcasting ability.", spellcastingBonus : [{ name : "Artificer cantrip", spellcastingAbility : 4, "class" : 'artificer', level : [0, 0], }, { name : "1st-level artificer spell", "class" : 'artificer', level : [1, 1], firstCol : "oncelr", }], toolProfs : [ ["Artisan's tools", 1] ] }; FeatsList["chef"] = { name : "Chef", source : [["T", 79], ["UA:F2", 1]], descriptionFull : "Time spent mastering the culinary arts has paid off, granting you the following benefits:\n \u2022 Increase your Constitution or Wisdom score by 1, to a maximum of 20.\n \u2022 You gain proficiency with cook's utensils if you don't already have it.\n \u2022 As part of a short rest, you can cook special food, provided you have ingredients and cook's utensils on hand. You can prepare enough of this food for a number of creatures equal to 4 + your proficiency bonus. At the end of the short rest, any creature who eats the food and spends one or more Hit Dice to regain hit points regains an extra 1d8 hit points.\n \u2022 With one hour of work or when you finish a long rest, you can cook a number of treats equal to your proficiency bonus. These special treats last 8 hours after being made. A creature can use a bonus action to eat one of those treats to gain temporary hit points equal to your proficiency bonus.", description : "During a short rest, I can make food for 4 + my Prof" + (typePF ? "" : "iciency") + " Bonus creatures; if they eat it and spend 1" + (typePF ? "+ HD" : " or more Hit Die") + ", they regain 1d8 HP. In one hour or during a long rest, I can make treats equal to my Prof" + (typePF ? "" : "iciency") + " Bonus that last for 8 hours; As a bonus action, one can eat a treat, gaining my Prof" + (typePF ? "" : "iciency") + " Bonus in temporary HP. [+1 " + (typePF ? "Con or Wis" : "Constitution or Wisdom") + "]", action : [["bonus action", "Consume Chef's Treat"]], toolProfs : ["Cook's utensils"], scorestxt : "+1 Constitution or Wisdom" }; FeatsList["eldritch adept"] = { name : "Eldritch Adept", source : [["T", 79], ["UA:F2", 1]], descriptionFull : "Studying occult lore, you have unlocked eldritch power within yourself: you learn one Eldritch Invocation option of your choice from the warlock class. If the invocation has a prerequisite, you can choose that invocation only if you're a warlock and only if you meet the prerequisite.\n Whenever you gain a level, you can replace the invocation with another one from the warlock class.", description : 'I learn one Eldritch Invocation from the warlock class for which I meet the prerequisites (2nd page "Choose Feature" button). I can replace this invocation for another whenever I gain a level.', bonusClassExtrachoices : [{ "class" : "warlock", feature : "eldritch invocations", bonus : 1 }], prerequisite : "Spellcasting or Pact Magic feature", prereqeval : function (v) { return v.isSpellcastingClass; } }; FeatsList["fey touched"] = { name : "Fey Touched", source : [["T", 79], ["UA:F2", 2]], descriptionFull : "Your exposure to the Feywild's magic has changed you, granting you the following benefits:\n \u2022 Increase your Intelligence, Wisdom, or Charisma score by 1, to a maximum of 20.\n \u2022 You learn the misty step spell and one 1st-level spell of your choice. The 1st-level spell must be from the divination or enchantment school of magic. You can cast each of these spells without expending a spell slot. Once you cast either of these spells in this way, you can't cast that spell in this way again until you finish a long rest. You can also cast these spells using spell slots you have of the appropriate level. The spells' spellcasting ability is the ability increased by this feat.", description : "I learn Misty Step and one 1st level divination or enchantment spell. I can cast each once per long rest at their lowest level without expending a spell slot, and can cast them if I have a spell slot to do so. My spellcasting ability is the ability I choose to increase when I gain this feat. [+1 Intelligence, Wisdom, or Charisma]", spellcastingBonus : [{ name : "Misty Step", spells : ["misty step"], selection : ["misty step"], firstCol : "oncelr+markedbox" }, { name : "1st-level Ench/Div spell", 'class': "any", school : ["Ench", "Div"], level : [1, 1], firstCol : "oncelr+markedbox" }], spellcastingAbility : 4, choices : ["Intelligence", "Wisdom", "Charisma"], "intelligence" : { description : "I learn Misty Step and one 1st level divination or enchantment spell. I can cast each once per long rest at their lowest level without expending a spell slot, and can cast them " + (typePF ? "by expending" : "with") + " a spell slot as normal. Intelligence is my spellcasting ability for these spells. [+1 Intelligence]", spellcastingAbility : 4, scores : [0, 0, 0, 1, 0, 0] }, "wisdom" : { description : "I learn Misty Step and one 1st level divination or enchantment spell. I can cast each once per long rest at their lowest level without expending a spell slot, and can cast them by expending a spell slot as normal. Wisdom is my spellcasting ability for these spells. [+1 Wisdom]", spellcastingAbility : 5, scores : [0, 0, 0, 0, 1, 0] }, "charisma" : { description : "I learn Misty Step and one 1st level divination or enchantment spell. I can cast each once per long rest at their lowest level without expending a spell slot, and can cast them by expending a spell slot as normal. Charisma is my spellcasting ability for these spells. [+1 Charisma]", spellcastingAbility : 6, scores : [0, 0, 0, 0, 0, 1] } }; RunFunctionAtEnd(function() { if (!ClassList.fighter || !ClassList.fighter.features["fighting style"]) return; var FtngStyles = ClassList.fighter.features["fighting style"]; FeatsList["fighting initiate"] = { name : "Fighting Initiate", source : [["T", 80], ["UA:F2", 2]], descriptionFull : "Your martial training has helped you develop a particular style of fighting. As a result, you learn one Fighting Style option of your choice from the fighter class. If you already have a style, the one you choose must be different.\n Whenever you gain a level, you can replace this feat's fighting style with another one from the fighter class that you don't have.", // only slightly different than TCoE: allowed to switch style every level instead of only at ASI description : "I learn one Fighting Style from the fighter class, which must be one that I don't yet know. I can replace this fighting style for another whenever I gain a level.", prerequisite : "Proficiency with a martial weapon", prereqeval : function(v) { return v.martialWeaponsProf || v.otherWeaponsProf.some(function (n) { return WeaponsList[n] && (/Martial/i).test(WeaponsList[n].type); }); }, choices : [], "archery" : { description : "I gain a +2 bonus to attack rolls I make with ranged weapons. I can replace this fighting style for another whenever I gain a level.", source : FtngStyles.source }, "defense" : { description : "I gain a +1 bonus to my AC while I'm wearing armor. I can replace this fighting style for another whenever I gain a level.", source : FtngStyles.source }, "dueling" : { description : "When I wield a melee weapon in one hand and no other weapons, I gain a +2 bonus to damage rolls with that weapon. I can replace this fighting style for another whenever I gain a level.", source : FtngStyles.source }, "great weapon fighting" : { description : "When I roll a 1 or 2 on a damage die for an attack I make with a two-handed or versatile melee weapon that I'm wielding with two hands, I can reroll the die and must use the new roll, even if the new roll is a 1 or a 2. I can replace this fighting style for another whenever I gain a level.", source : FtngStyles.source }, "protection" : { description : "When a creature I can see attacks a target other than me that is within 5 ft of me, I can use my reaction to impose disadvantage on the attack roll. I must be wielding a shield to do this. I can replace this fighting style for another whenever I gain a level.", source : FtngStyles.source }, "two-weapon fighting" : { description : "When I engage in two-weapon fighting, I can add my ability modifier to the damage of the second (off-hand) attack. I can replace this fighting style for another whenever I gain a level.", source : FtngStyles.source }, "blind fighting" : { description : "I have blindsight with a range of 10 ft, wherein I can effectively see anything that isn't behind total cover, including invisible things, even if I'm blinded or in darkness. This doesn't allow me to see things hidden from me. I can replace this fighting style for another whenever I gain a level.", source : [["T", 41]] }, "interception" : { description : "As a reaction when a creature I can see hits a target, other than me, within 5 ft of me with an attack, I can reduce the damage the target takes by 1d10 + my proficiency bonus (min 0 damage). I must be wielding a shield or a simple or martial weapon to do this. I can replace this fighting style for another whenever I gain a level.", source : [["T", 41], ["UA:CFV", 12]] }, "thrown weapon fighting" : { description : "I can draw a weapon that has the thrown property as part of the attack I make with the weapon. In addition, when I hit with a ranged attack using a thrown weapon, I gain a +2 bonus to the damage roll. I can replace this fighting style for another whenever I gain a level.", source : [["T", 42]] }, "unarmed fighting" : { description : "My unarmed strikes deal 1d6 damage, or 1d8 if I'm not wielding any weapons or a shield. At the start of each of my turns, I can deal 1d4 bludgeoning damage to one creature grappled by me. I can replace this fighting style for another whenever I gain a level.", source : [["T", 42]] } }; FtngStyles.choices.forEach(function (sName) { var sNameLC = sName.toLowerCase(); if (!FtngStyles[sNameLC]) return; FeatsList["fighting initiate"].choices.push(sName); if (!FeatsList["fighting initiate"][sNameLC]) { FeatsList["fighting initiate"][sNameLC] = { description : FtngStyles[sNameLC].description.replace(/^\n /i, '').replace(/\n /g, '. ') + ". I can replace this fighting style whenever I gain a level.", source : FtngStyles[sNameLC].source ? FtngStyles[sNameLC].source : FtngStyles.source } } // Copy all attributes except name, source and description for (var attr in FtngStyles[sNameLC]) { if ((/\b(name|description|source)\b/i).test(attr)) continue; FeatsList["fighting initiate"][sNameLC][attr] = FtngStyles[sNameLC][attr]; } if (!FeatsList["fighting initiate"][sNameLC].prereqeval) { FeatsList["fighting initiate"][sNameLC].prereqeval = function(v) { var knownStyles = GetFightingStyleSelection(); return knownStyles[v.choice] ? false : true; }; if (!FeatsList["fighting initiate"][sNameLC].prerequisite) FeatsList["fighting initiate"][sNameLC].prerequisite = sName + " Fighting Style is not selected anywhere else." }; }); }); FeatsList["gunner"] = { name : "Gunner", source : [["T", 80], ["UA:F2", 2]], descriptionFull : "You have a quick hand and keen eye when employing firearms, granting you the following benefits:\n \u2022 Increase your Dexterity score by 1, to a maximum of 20.\n \u2022 You gain proficiency with firearms (see \"Firearms\" in the Dungeon Master's Guide).\n \u2022 You ignore the loading property of firearms.\n \u2022 Being within 5 feet of a hostile creature doesn't impose disadvantage on your ranged attack rolls.", description : "I gain proficiency with firearms. I ignore the loading property of firearms. I don't suffer disadvantage on ranged attack rolls for being within 5 ft of a hostile creature. [+1 Dexterity]", scores : [0, 1, 0, 0, 0, 0], weaponProfs : [false, false, ["Firearms"]], calcChanges : { atkAdd : [ function (fields, v) { if ((/firearm/i).test(v.theWea.type) || (/firearm/i).test(v.theWea.list)) { fields.Description = fields.Description.replace(/([;,]? ?loading|loading[;,]? ?)/i, ''); }; }, "I ignore the loading quality of firearms." ] } }; FeatsList["metamagic adept"] = { name : "Metamagic Adept", source : [["T", 80], ["UA:F2", 2]], descriptionFull : "You've learned how to exert your will on your spells to alter how they function. You gain the following benefits:\n \u2022 You learn two Metamagic options of your choice from the sorcerer class. You can use only one Metamagic option on a spell when you cast it, unless the option says otherwise. Whenever you gain a level, you can replace one of your Metamagic options with another one from the sorcerer class.\n \u2022 You gain 2 sorcery points to spend on Metamagic (these points are added to any sorcery points you have from another source but can be used only on Metamagic). You regain all spent sorcery points when you finish a long rest.", // only slightly different than TCoE: allowed to switch option every level instead of only at ASI description : 'I learn two Metamagic options from the sorcerer class (2nd page "Choose Feature" button). I can use only one option on a spell unless it says otherwise. I gain 2 sorcery points, which I can only use for Metamagic. I regain all expended sorcery points when I finish a long rest. I can change one ' + (typePF ? '' : 'Metamagic option ') + 'whenever I gain a level.', bonusClassExtrachoices : [{ "class" : "sorcerer", feature : "metamagic", bonus : 2 }], extraLimitedFeatures : [{ name : "Sorcery Points", usages : 2, recovery : "long rest", addToExisting : true }], prerequisite : "Spellcasting or Pact Magic feature", prereqeval : function (v) { return v.isSpellcastingClass; } }; FeatsList["piercer"] = { name : "Piercer", source : [["T", 80], ["UA:F2", 2]], descriptionFull : "You have achieved a penetrating precision in combat, granting you the following benefits:\n \u2022 Increase your Strength or Dexterity by 1, to a maximum of 20.\n \u2022 Once per turn, when you hit a creature with an attack that deals piercing damage, you can reroll one of the attack's damage dice, and you must use the new roll.\n \u2022 When you score a critical hit that deals piercing damage to a creature, you can roll one additional damage die when determining the extra piercing damage the target takes.", description : "Once per turn when I deal piercing damage to a target, I can reroll one of the damage die and use the new roll. If I deal piercing damage on a critical hit to a target I can roll one additional damage die. [+1 Strength or Dexterity]", scorestxt : "+1 Strength or Dexterity", calcChanges : { atkAdd : [ function (fields, v) { if ((/pierc(\.|ing)/i).test(fields.Damage_Type)) { var extraCritRegex = /\d+(d\d+ extra on a crit(ical)?( hit)?( in melee)?)/i; v.extraCritM = (v.extraCritM ? v.extraCritM : 0) + 1; if (extraCritRegex.test(fields.Description)) { fields.Description = fields.Description.replace(extraCritRegex, v.extraCritM + '$1'); } else if ((/d\d/).test(fields.Damage_Die)) { fields.Description += (fields.Description ? '; ' : '') + v.extraCritM + fields.Damage_Die.replace(/.*(d\d+).*/, '$1') + ' extra on a crit in melee'; } if (!(/re-?roll (one|1)? ?damage/i).test(fields.Description)) { fields.Description += '; Once per turn, re-roll one damage die'; } } }, "Once per turn when I deal piercing damage to a target, I can reroll one of the damage die and use the new roll. If I deal piercing damage on a critical hit to a target, I can roll one additional damage die.", 900 ] } }; FeatsList["poisoner"] = { name : "Poisoner", source : [["T", 80], ["UA:F2", 2]], descriptionFull : "You can prepare and deliver deadly poisons, gaining the following benefits:\n \u2022 When you make a damage roll, you ignore resistance to poison damage.\n \u2022 You can coat a weapon in poison as a bonus action, instead of an action.\n \u2022 You gain proficiency with the poisoner's kit if you don't already have it. With one hour of work using a poisoner's kit and expending 50 gp worth of materials, you can create a number of doses of potent poison equal to your proficiency bonus. Once applied, the poison retains potency for 1 minute or until you hit with the weapon. When a weapon coated in this poison deals damage to a creature, that creature must succeed on a DC 14 Constitution saving throw or take 2d8 poison damage and become poisoned until the end of your next turn.", // only slightly different than TCoE: not explicitly allowed to coat ammunition description : "My poison damage rolls ignore poison resistance. As a bonus action, I can apply poison to a weapon. I can use a poisoner's kit and 50 gp to create my Proficiency Bonus doses of poison in 1 hour. Potent 1 min after applying. DC 14 Con save or 2d8 poison damage and poisoned until the end of my next turn.", toolProfs : ["Poisoner's kit"], action : [["bonus action", "Apply poison to weapon/ammo"]] }; FeatsList["slasher"] = { name : "Slasher", source : [["T", 81], ["UA:F2", 3]], descriptionFull : "You've learned where to cut to have the greatest results, granting you the following benefits:\n \u2022 Increase your Strength or Dexterity by 1, to a maximum of 20.\n \u2022 Once per turn when you hit a creature with an attack that deals slashing damage, you can reduce the speed of the target by 10 feet until the start of your next turn.\n \u2022 When you score a critical hit that deals slashing damage to a creature, you grievously wound it. Until the start of your next turn, the target has disadvantage on all attack rolls.", description : "Once per turn when I deal slashing damage to a target, I can reduce its speed by 10 ft until the start of my next turn. When I score a critical hit that deals slashing damage to a creature, the grievous wound causes it to have disadvantage on all attack rolls until the start of my next turn. [+1 Strength or Dexterity]", scorestxt : "+1 Strength or Dexterity" }; } // dupl_end FeatsList["crusher-ua"] = { name : "Crusher", source : [["UA:F2", 1]], descriptionFull : "You are practiced in the art of crushing your enemies, granting you the following benefits:\n \u2022 Increase your Strength or Dexterity by 1, to a maximum of 20.\n \u2022 Once per turn, when you hit a creature with an attack that deals bludgeoning damage, you can move it 5 feet to an unoccupied space, provided the target is no more than one size larger than you.\n \u2022 When you score a critical hit that deals bludgeoning damage to a creature, attack rolls against that creature are made with advantage until the end of your next turn.", description : "Once per turn, when I hit a creature no more than one size larger than me with an attack that deals bludgeoning damage, I can move it 5 ft to an unoccupied space. If I score a critical hit that deals bludgeoning damage, attacks against the creature hit gain advantage until the start of my next turn. [+1 " + (typePF ? "Str or Dex" : "Strength or Dexterity") + "]", scorestxt : "+1 Strength or Dexterity" }; FeatsList["practiced expert-ua"] = { name : "Practiced Expert", source : [["UA:F2", 3]], descriptionFull : "You have honed your proficiency with particular skills or tools, gaining the following benefits:\n \u2022 Increase one ability score of your choice by 1, to a maximum of 20.\n \u2022 You gain proficiency with one skill or tool of your choice.\n \u2022 Choose one of your skill or tool proficiencies. Your proficiency bonus is doubled for any ability check you make that uses the chosen proficiency.", description : "I gain proficiency in one skill or tool, and expertise in that same skill or tool, or another skill or tool I'm proficient with. [+1 to one ability score of my choice]", skillstxt : "Proficiency with one skill or tool, and\n Expertise with one skill or tool I'm proficient with", scorestxt : "+1 to one ability score of my choice" }; FeatsList["shadow touched-ua"] = { name : "Shadow Touched", source : [["UA:F2", 3]], descriptionFull : "You learn how to bend shadows from your experience with the Shadowfell. You gain the following benefits:\n \u2022 Increase your Intelligence, Wisdom, or Charisma score by 1, to a maximum of 20.\n \u2022 You learn the darkness spell and one 1st-level spell of your choice. The 1st-level spell must be from the illusion or necromancy school of magic. You can cast each of these spells without expending a spell slot. Once you cast either of these spells in this way, you can't cast that spell in this way again until you finish a long rest. You can also cast these spells using spell slots you have of the appropriate level. The spells' spellcasting ability is the ability increased by this feat.", description : "I learn Darkness and one 1st level illusion or necromancy spell. I can cast each once per long rest at their lowest level without expending a spell slot, and can cast them if I have a spell slot to do so. My spellcasting ability is the ability I choose to increase when I gain this feat. [+1 Intelligence, Wisdom, or Charisma]", spellcastingBonus : [{ name : "Darkness", spells : ["darkness"], selection : ["darkness"], firstCol : "oncelr+markedbox" }, { name : "1st-level Illus/Necro spell", 'class' : "any", school : ["Illus", "Necro"], level : [1, 1], firstCol : "oncelr+markedbox" }], spellcastingAbility : 4, allowUpCasting : true, choices : ["Intelligence", "Wisdom", "Charisma"], "intelligence" : { description : "I learn Darkness and one 1st level illusion or necromancy spell. I can cast each once per long rest at their lowest level without expending a spell slot, and can cast them by expending a spell slot as normal. Intelligence is my spellcasting ability for these spells. [+1 Intelligence]", spellcastingAbility : 4, scores : [0, 0, 0, 1, 0, 0] }, "wisdom" : { description : "I learn Darkness and one 1st level illusion or necromancy spell. I can cast each once per long rest at their lowest level without expending a spell slot, and can cast them by expending a spell slot as normal. Wisdom is my spellcasting ability for these spells. [+1 Wisdom]", spellcastingAbility : 5, scores : [0, 0, 0, 0, 1, 0] }, "charisma" : { description : "I learn Darkness and one 1st level illusion or necromancy spell. I can cast each once per long rest at their lowest level without expending a spell slot, and can cast them by expending a spell slot as normal. Charisma is my spellcasting ability for these spells. [+1 Charisma]", spellcastingAbility : 6, scores : [0, 0, 0, 0, 0, 1] } }; FeatsList["shield training-ua"] = { name : "Shield Training", source : [["UA:F2", 3]], descriptionFull : "You've trained in the effective use of shields. You gain the following benefits:\n \u2022 Increase your Strength, Dexterity, or Constitution score by 1, to a maximum of 20.\n \u2022 You gain proficiency with shields.\n \u2022 In combat, you can don or doff a shield as the free object interaction on your turn.\n \u2022 If you have the Spellcasting or Pact Magic feature, you can use a shield as a spellcasting focus.", description : "I gain proficiency with shields. I can don or doff a shield as the free object interaction on my turn. If I have the Spellcasting or Pact Magic feature, I can use my shield as a spellcasting focus. [+1 Strength, Dexterity, or Constitution]", scorestxt : "+1 Strength, Dexterity, or Constitution", armorProfs : [false, false, false, true] }; FeatsList["tandem tactician-ua"] = { name : "Tandem Tactician", source : [["UA:F2", 3]], descriptionFull : "Your presence in a scrap tends to elevate your comrades. You gain the following benefits:\n \u2022 You can use the Help action as a bonus action.\n \u2022 When you use the Help action to aid an ally in attacking a creature, increase the range of the Help action by 10 feet. Additionally, you can help two allies targeting the same creature within range when you use the Help action this way.", description : "I can use the Help action as a bonus action. When I use the Help action to aid an ally in attacking a creature, the range of the Help action increases with 10 ft. I can help two allies targeting the same creature within range when I use the Help action this way.", action : [["bonus action", ""]] }; FeatsList["tracker-ua"] = { name : "Tracker", source : [["UA:F2", 3]], descriptionFull : "You have spent time hunting creatures and honed your skills, gaining the following benefits:\n \u2022 Increase your Wisdom score by 1, to a maximum of 20.\n \u2022 You learn the hunter's mark spell. You can cast it once without expending a spell slot, and you must finish a long rest before you can cast it in this way again. You can also cast the spell using any spell slots you have. Wisdom is your spellcasting ability for this spell.\n \u2022 You have advantage on Wisdom (Survival) checks to track creatures.", description : "I can cast Hunter's Mark once per long rest at its lowest level without expending a spell slot, and can cast it by expending a spell slot as normal. Wisdom is my spellcasting ability for this. I have advantage on Wisdom (Survival) checks to track creatures. [+1 Wisdom]", scores : [0, 0, 0, 0, 1, 0], spellcastingBonus : [{ name : "1\xD7/LR \u0026 spell slot", spellcastingAbility : 5, allowUpCasting : true, spells : ["hunter's mark"], selection : ["hunter's mark"], firstCol : "oncelr+markedbox" }] }; ================================================ FILE: WotC material/ua_20200805_Subclasses-Part-4.js ================================================ var iFileName = "ua_20200805_Subclasses-Part-4.js"; RequiredSheetVersion("13.0.8"); // This file adds the content from the Unearthed Arcana 2020: Subclasses, Part 4 article to MPMB's Character Record Sheet // This file contains contributions by AelarTheElfRogue // Define the source SourceList["UA:SP4"] = { name : "Unearthed Arcana: Subclasses, Part 4", abbreviation : "UA:SP4", group : "Unearthed Arcana", url : "https://media.wizards.com/2020/dnd/downloads/UA2020_Subclasses04.pdf", date : "2020/08/05" }; AddSubClass("bard", "college of spirits-ua",{ regExpSearch : /^(?=.*(college|bard|minstrel|troubadour|jongleur))(?=.*spirits?).*$/i, subname : "College of Spirits", subnameShort: "Spirits", source : [["UA:SP4", 1]], features : { "subclassfeature3" : { name : "Guiding Whispers", source : [["UA:SP4", 1]], minlevel : 3, description : desc([ "I learn the Guidance cantrip and can cast it with a range of 60 ft" ]), spellcastingBonus : [{ name : "Guiding Whispers", spells : ["guidance"], selection : ["guidance"], firstCol : "atwill" }], spellChanges : { "guidance" : { range : "60 ft", changes : "I can cast Guidance with a range of 60 ft." } } }, "subclassfeature3.1" : { name : "Spiritual Focus", source : [["UA:SP4", 1]], minlevel : 3, description : " [only for bard spells]" + desc([ "I can use a candle, crystal ball, skull, spirit board, or tarokka deck as a spellcasting focus" ]) }, "subclassfeature3.2" : { name : "Tales from Beyond", source : [["UA:SP4", 1]], minlevel : 3, description : desc([ "As a bonus action, I can expend a bardic inspiration die to roll on the Spirits' Tales table", "I retain the rolled tale in my mind until I bestow its effects or finish a short or long rest", "I can only retain one tale at a time; I need to hold a spiritual focus to roll on the table", "As an action, I can choose a creature I see in 30 ft or myself to bestow the tale's effect", "The tales use my spell save DC; See the Notes page for the Spirits' Tales table" ]), action : [["bonus action", " (roll on table)"], ["action", " (use effect)"]], toNotesPage : [{ name : "Spirits' Tales Table", note : desc([ "As a bonus action while I'm holding my spiritual focus, I can reach out to spirits who tell their tales through me. I expend one use of my Bardic Inspiration and roll on the table below using my Bardic Inspiration die to determine the tale. I retain the tale in mind until I bestow the tale's effect or finish a short or long rest.", "I can retain only one of these tales in mind at a time, and rolling on the table immediately ends the effect of the previous tale.", "As an action, I can choose myself or one creature I can see within 30 ft to be the target of the tale's effect. If the tale requires a saving throw, the DC equals my spell save DC.", "\nRoll " + (typePF ? "" : " ") + "Tale" ])+ desc([ " 1 Beast: I recite the tale of a clever animal. For 1 minute, the target has advantage on Wisdom (Perception) checks and advantage on attack rolls against a creature if another enemy is within 5 ft of it, and that enemy isn't incapacitated.", " 2 Warrior: I recount the story of a renowned duelist. Make a melee spell attack against the target as an attacking spectral warrior briefly appears in a unoccupied space within 5 ft of the target before vanishing. On a hit, the target takes force damage equal to two rolls of my Bardic Inspiration die + my Charisma modifier.", " 3 Friends: I recite the tale of friends who found each other in the afterlife. The target and another creature of its choice it can see within 5 ft of it regains hit points equal to a roll of my Bardic Inspiration die + my Charisma modifier.", " 4 Runaway: I tell the tale of an adventurer that could escape any confinement. The target can immediately use its reaction to teleport up to 30 ft to an unoccupied space it can see. When the target teleports, it can choose a number of creatures it can see within 30 ft of it up to my Charisma modifier (minimum of 1) to immediately use the same reaction.", " 5 Avenger: I recount the tale of an avenging knight. For 1 minute, whenever a creature the target can see within 30 ft of it is damaged by a creature, the target can use its reaction to deal force damage equal to a roll of my Bardic Inspiration die to the attacker.", " 6 Hero: I speak the tale of an epic hero. The target gains temporary hit points equal to a roll of my Bardic Inspiration die + my bard level. While it has these temporary hit points, the target's walking speed increases by 10 ft.", " 7 Fey: I recount the tale of a mischievous fey. The target must succeed on a Wisdom saving throw or become charmed by me until the end of its next turn. The charmed target must use its action to make a melee attack against a creature other than itself that I mentally choose. The target can act normally on its turn if I choose no other creature.", " 8 Dark Spirit: I speak a dreadful tale of a slayer in the dark. The target becomes invisible until the end of its next turn or until it hits a creature with an attack. If it hits a creature with an attack during this invisibility, that creature takes necrotic damage equal to a roll of my Bardic Inspiration die and is frightened of the target until the end of its next turn.", " 9 Giant: I speak of the deeds of a mighty giant. Each creature of the target's choice it can see within 30 ft of it must make a Strength saving throw, taking force damage equal to two rolls of my Bardic Inspiration die on a failed save and is knocked prone. A creature that succeeds on its saving throw takes half as much damage and isn't knocked prone.", " 10 Dragon: I breathe a poem of a wrathful dragon. The target magically spews fire from their mouth in a 30-ft cone. Each creature in that area must make a Dexterity saving throw, taking fire damage equal to three rolls of my Bardic Inspiration die on a failed save, or half as much damage on a successful one.", " 11 Celestial: I speak of the exalted deeds of a celestial. The target regains hit points equal to two rolls of my Bardic Inspiration die + my bard level, and I end one disease or a condition from the following list affecting the target: blinded, deafened, paralyzed, petrified, or poisoned.", " 12 Unknown: I utter an incomprehensible fable from a being beyond the stars. The target must succeed on an Intelligence saving throw or take psychic damage equal to three rolls of my Bardic Inspiration die, and the target is unable to speak any language for 1 minute." ], "\n") }] }, "subclassfeature6" : { name : "Spiritual Focus: Improve spells", source : [["UA:SP4", 2]], minlevel : 6, description : desc([ "While holding a spiritual focus, I can add 1d6 to one damage or healing roll of bard spells" ]), calcChanges : { atkAdd : [ function (fields, v, output) { if (v.thisWeapon[3] && SpellsList[v.thisWeapon[3]] && v.thisWeapon[4].indexOf("bard") !== -1) { // If RAW is selected, first test if this spell is eligible to use with a spellcasting focus var isRAW = GetFeatureChoice("classes", "bard", "subclassfeature6") === "raw: only +1d6 for spells with non-costly material components"; var spellObj = SpellsList[v.thisWeapon[3]]; if (isRAW && (!spellObj.components || !/\bM\b/.test(spellObj.components) || /M\u0192|M\u2020/.test(spellObj.components))) return; fields.Damage_Die = fields.Damage_Die.replace(/D/g, 'd'); var d6Regex = /(\d+)d6/; if (fields.Damage_Die.indexOf('Bd6') != -1) { fields.Damage_Die = fields.Damage_Die.replace('Bd6', 'Cd6'); } else if (fields.Damage_Die.indexOf('Cd6') != -1) { fields.Damage_Die = fields.Damage_Die.replace('Cd6', 'Qd6'); } else if (d6Regex.test(fields.Damage_Die)) { fields.Damage_Die = fields.Damage_Die.replace(d6Regex, Number(fields.Damage_Die.replace(d6Regex, '$1')) + 1 + 'd6'); } else if (v.thisWeapon[3] == "eldritch blast") { fields.Description += (fields.Description ? '; ' : '') + "One ray +1d6 dmg"; } else { fields.Damage_Die += '+1d6'; } } }, 'When I cast a bard spell, I can use my spiritual focus to add 1d6 to one damage roll or roll to restore hit points.\n Going by rules as written (RAW), the spiritual focus has to be used as a spellcasting focus for this bonus to be added. This means that it can only be used on spells with a non-costly material component. Most DMs will forgo this technicality and that is why this sheet will add the 1d6 to any damage/healing spell by default. You can enable to use the stricter rules as written with the "Choose Feature" button on the second page.' ], spellAdd : [ function (spellKey, spellObj, spName) { // Do not process if a psionic, not a bard spell, or, if RAW is selected, not eligible to use with a spellcasting focus var isRAW = GetFeatureChoice("classes", "bard", "subclassfeature6") === "raw: only +1d6 for spells with non-costly material components"; if (spellObj.psionic || spName !== "bard" || (isRAW && (!spellObj.components || !/\bM\b/.test(spellObj.components) || /M\u0192|M\u2020/.test(spellObj.components)))) return; if (genericSpellDmgEdit(spellKey, spellObj, "\\w+\\.?", "1d6", true, true) || genericSpellDmgEdit(spellKey, spellObj, "heal", "1d6", true, true)) { return true; } }, 'When I cast a bard spell, I can use my spiritual focus to add 1d6 to one damage roll or roll to restore hit points.\n Going by rules as written (RAW), the spiritual focus has to be used as a spellcasting focus for this bonus to be added. This means that it can only be used on spells with a non-costly material component. Most DMs will forgo this technicality and that is why this sheet will add the 1d6 to any damage/healing spell by default. You can enable to use the stricter rules as written with the "Choose Feature" button on the second page.' ] }, choices : ["RAW: only +1d6 for spells with non-costly material components", "Allow +1d6 for any bard spell"], "raw: only +1d6 for spells with non-costly material components" : { name : "Spiritual Focus: Improve spells", description : desc([ "If I use a spiritual focus to cast a bard spell, I can add 1d6 to one damage or healing roll" ]) }, "allow +1d6 for any bard spell" : { name : "Spiritual Focus: Improve spells", description : desc([ "While holding a spiritual focus, I can add 1d6 to one damage or healing roll of bard spells" ]) }, defaultChoice : "allow +1d6 for any bard spell" }, "subclassfeature6.1" : { name : "Spirit Session", source : [["UA:SP4", 2]], minlevel : 6, description : desc([ "Using my spiritual focus, I can conduct a hour-long ritual to channel spirit during a rest", "The number of willing participants, me included, can be up to my Proficiency Bonus", "At the end, I learn a divination or necromancy spell of my choice until I start a long rest", "The spell can't be higher level than the number of participants and of a level I can cast" ]), usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Spirit Session", school : ["Div", "Necro"], firstCol : "SS" }] }, "subclassfeature14" : { name : "Mystical Connection", source : [["UA:SP4", 3]], minlevel : 14, description : desc([ "I can roll a d6 instead of expending a bardic inspiration die when I do Tales from Beyond", "Even if I roll a d6, I still roll my bardic inspiration die for the effect, but not expend it" ]) } } }); AddSubClass("warlock", "the undead-ua",{ regExpSearch : /^(?=.*undead)(?=.*warlock).*$/i, subname : "the Undead", source : [["UA:SP4", 1]], spellcastingExtra : ["bane", "false life", "blindness/deafness", "phantasmal force", "phantom steed", "speak with dead", "death ward", "greater invisibility", "antilife shell", "cloudkill"], features : { "subclassfeature1" : { name : "Form of Dread", source : [["UA:SP4", 3]], minlevel : 1, description : desc([ "As a bonus action, I can transform for 1 minute and gain the following benefits:", " \u2022 I gain temporary hit points equal to 1d10 + my warlock level", " \u2022 I am immune to the frightened condition", " \u2022 Once per turns when I hit an attack, I can force the target to make a Wis save", " If the target fails this save, it is frightened of me until the end of my next turn" ]), additional : levels.map(function (n) { return "1d10+" + n + " temp HP"; }), usages : "Prof Bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", action : [["bonus action", ""]], savetxt : { immune : ["frightened (Form of Dread)"] } }, "subclassfeature6" : { name : "Grave Touched", source : [["UA:SP4", 3]], minlevel : 3, description : desc([ "I no longer need to eat, drink, or breathe", "When I damage a creature with an attack, I can change the damage type to necrotic", "While I'm in my Form of Dread, I can roll one extra damage die for this necrotic damage" ]) }, "subclassfeature10" : { name : "Mortal Husk", source : [["UA:SP4", 4]], minlevel : 10, description : desc([ "I have resistance to necrotic damage, or immunity while I'm in my Form of Dread", "When I'm reduced to 0 HP, I can cause my body to explode and I revive with 1 HP after", "Each creature of my choice within 30 ft takes 2d10 + my warlock level necrotic damage", "After this, I gain 1 level of exhaustion and must complete 1d4 long rests to do so again" ]), additional : levels.map(function (n) { return n < 10 ? "" : "2d10+" + n + " damage, 1\xD7 per 1d4 long rests" }), dmgres : [["Necrotic"]], savetxt : { immune : ["necrotic (Form of Dread)"] }, extraLimitedFeatures : [{ name : "Mortal Husk (revive)", usages : 1, recovery : "1d4 LR" }] }, "subclassfeature14" : { name : "Spirit Projection", source : [["UA:SP4", 4]], minlevel : 14, description : desc([ "As an action, I can project my spirit from my body, leaving it suspended and unconscious", "This lasts 1 hour or until my concentration is broken; Damage and effects affect both", "When it ends, I can have my spirit return to my body or my body teleport to my spirit", "My spirit has my abilities, but no gear; While projecting I gain the following benefits:", " \u2022 My spirit and body gain resistance to bludgeoning, piercing, and slashing damage", " \u2022 My conjuration/necromancy spells need no verbal, somatic, non-costly material comp.", " \u2022 I gain a flying speed equal to my walking speed and can hover", " \u2022 Move through creatures/objects as difficult terrain; 1d10 force damage if end turn in", " \u2022 While in my Form of Dread, once per turns when I deal necrotic damage, I can heal", " I regain hit points equal to half the amount of necrotic damage dealt" ]), usages : 1, recovery : "long rest", action : [["action", ""]] } } }); ================================================ FILE: WotC material/ua_20201026_Subclasses-Part-5.js ================================================ var iFileName = "ua_20201026_Subclasses-Part-5.js"; RequiredSheetVersion("14.0.0-beta"); // This file adds the content from the Unearthed Arcana 2020: Subclasses, Part 5 article to MPMB's Character Record Sheet // This file contains contributions by WondrousLittleWizard // Define the source SourceList["UA:SP5"] = { name : "Unearthed Arcana: Subclasses, Part 5", abbreviation : "UA:SP5", group : "Unearthed Arcana", url : "https://media.wizards.com/2020/dnd/downloads/UA2020_102620_Subclasses05.pdf", date : "2020/10/26" }; AddSubClass("monk", "ascendant dragon-ua", { regExpSearch : /^(?=.*ascendant)(?=.*(dragon|draconic))((?=.*(monk|monastic))|((?=.*martial)(?=.*(artist|arts)))|((?=.*spiritual)(?=.*warrior))).*$/i, subname : "Way of the Ascendant Dragon", subnameShort: "Ascendant Dragon", source : [["UA:SP5", 1]], features : { "subclassfeature3" : { name : "Draconic Disciple", source : [["UA:SP5", 1]], minlevel : 3, description : desc([ "I can change the damage type of my unarmed strikes to acid, cold, fire, lightning, poison", "As a reaction when I fail an Intimidation or Persuasion check, I can reroll the check", "If this turns it into a success, I can't do so again until I finish a long rest; I learn Draconic" ]), languageProfs : ["Draconic"], action : [["reaction", " (reroll check)"]], usages : 1, recovery : "long rest", additional : "reroll", calcChanges : { atkAdd : [ function (fields, v) { if (v.baseWeaponName === "unarmed strike") { fields.Description += (fields.Description ? '; ' : '') + "Change type to acid/cold/fire/lightning/poison"; }; }, "When I damage a target with an unarmed strike, I can change the damage type to acid, cold, fire, lightning or poison." ] }, "breath of the dragon" : { name : "Breath of the Dragon", extraname : "Ascendant Dragon 3", source : [["UA:SP5", 1]], description : levels.map(function (n) { var iMonkDie = n < 5 ? 4 : n < 11 ? 6 : n < 17 ? 8 : 10;; var aDesc = [ "When I take the Attack action on my turn, I can replace one attack with a breath weapon", "This deals " + (n < 11 ? 2 : 3) + "d" + iMonkDie + " acid, cold, fire, lightning, or poison (my choice) damage to all in the area", "The area can be a 20-ft cone or a 5-ft wide, 30-ft line; Dex save to halve the damage", "I can do this my Proficiency Bonus times per long rest, or by expending 1 ki point" ]; if (n < 17) return desc(aDesc); var aDesc17 = [ "From 17th-level, the energy clings to those damaged by this, hurting them every turn", "At the start of each of their turns, they take 1d" + iMonkDie + " damage of the chosen type", "At the end of each of their turns, they can repeat the save to end this effect on themselves" ]; return desc(aDesc.concat(aDesc17)); }), usages : "Prof B. per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", altResource : "1 ki", additional : levels.map(function (n) { return n < 3 ? "" : (n < 11 ? 2 : 3) + "d" + (n < 5 ? 4 : n < 11 ? 6 : n < 17 ? 8 : 10); }), weaponOptions : [{ regExpSearch : /^(?=.*breath)(?=.*dragon).*$/i, name : "Breath of the Dragon", source : [["UA:SP5", 1]], ability : 5, type : "Natural", damage : [2, 4, "My choice"], range : "5-ft \xD7 30-ft line", description : "All in area; Dex save for half damage; Alt: 20-ft cone; Type: acid/cold/fire/lightning/poison", dc : true, monkweapon : false, abilitytodamage : false, UA_WotAD_BreathWeapon : true, selectNow : true }], calcChanges : { atkAdd : [ function (fields, v) { if (classes.known.monk && classes.known.monk.level && v.theWea.UA_WotAD_BreathWeapon) { var n = classes.known.monk.level; var aMonkDie = n < 5 ? 4 : n < 11 ? 6 : n < 17 ? 8 : 10;; fields.Damage_Die = (n < 11 ? 2 : 3) + "d" + aMonkDie; if (n >= 17) fields.Description += (fields.Description ? '; ' : '') + 'Clings to targets'; }; }, "My Breath of the Dragon deals damage equal to two rolls of my Martials Arts die. At 11th level, this increases to three rolls of my Martial Arts die. At 17th level, the energy clings to the target. At the start of each of a target's turns, it takes damage of the type the breath dealt equal to one roll of my Martial Arts die. At the end of its turn, the creature can repeat the save, ending the effect on itself on a success." ] } }, autoSelectExtrachoices : [{ extrachoice : "breath of the dragon" }] }, "subclassfeature6" : { name : "Wings Unfurled", source : [["UA:SP5", 2]], minlevel : 6, additional: "Prof B. / long rest or 1 ki", description : desc([ "When I use Step of the Wind, I can gain a flying speed equal to my walking speed", "I can do this Prof Bonus per long rest, or by using 2 ki points to use Step of the Wind" ]), extraLimitedFeatures : [{ name : "Wings Unfurled", usages : "Proficiency bonus per ", recovery : "long rest", usagescalc : "event.value = How('Proficiency Bonus');", altResource : "1 ki" }], "aspect of the wyrm" : { name : "Aspect of the Wyrm", extraname : "Ascendant Dragon 11", source : [["UA:SP5", 2]], description : levels.map(function (n) { var aDesc = [ "As a bonus action, I can activate a 30 ft aura of draconic power that lasts for 1 minute", "I choose acid, cold, fire, lightning, or poison damage when I activate this aura", "From 17th-level, all creatures of my choosing in the aura take 4d10 damage of this type", "My allies in the aura and myself gain resistance to the chosen damage type", "When an attack hits one of us, the one hit can use their reaction to damage the attacker", "This damage is of the chosen damage type, equal to one roll of my martial arts", "I can activate this aura once per long rest, or by expending 4 ki points" ]; if (n < 17) aDesc.splice(2,1); return desc(aDesc); }), usages : 1, recovery : "long rest", altResource : "4 ki", additional : levels.map(function (n) { return n < 11 ? "" : "1d" + (n < 17 ? 8 : 10); }), action : [["bonus action", " (activate)"], ["reaction", " (if active)"]] }, autoSelectExtrachoices : [{ extrachoice : "aspect of the wyrm", minlevel : 11 }] }, "subclassfeature17" : { name : "Ascendant Aspect", source : [["UA:SP5", 2]], minlevel : 17, description: desc("I gain 30 ft blindsight and both Breath of the Dragon and Aspect of the Wyrm improve"), vision : [["blindsight", 30]] } } }); var UASP5_Ranger_Subclass_Drakewarden = AddSubClass("ranger", "drakewarden-ua", { regExpSearch : /^(?=.*(drake|dragon|draconic))(?=.*(warden|ranger|trainer)).*$/i, subname : "Drakewarden", source : [["UA:SP5", 2]], fullname : "Drakewarden", features : { "subclassfeature3" : { name : "Draconic Gift", source : [["UA:SP5", 3]], minlevel : 3, description : desc([ "I learn the Draconic language and the Thaumaturgy cantrip" ]), languageProfs : ["Draconic"], spellcastingBonus : [{ name : "Draconic Gift", spells : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : "atwill" }] }, "subclassfeature3.1" : { name : "Drake Companion", source : [["UA:SP5", 3]], minlevel : 3, description : desc([ "As an action, I can summon my drake to an empty space within 30 ft that I can see", 'Select a "Drake Companion" on the companion page for its stats and rules', "I can do this once per long rest, or by expending a 1st-level or higher spell slot (SS 1+)" ]), usages : 1, recovery : "long rest", altResource : "SS 1+", action : [["action", " (summon)"], ["bonus action", " (command)"]], creaturesAdd : [["Drake Companion", true]], creatureOptions : [{ name : "Drake Companion", source : [["UA:SP5", 3]], size : 4, type : "Dragon", alignment : "Unaligned", ac : "14+Prof", hp : 20, hd : [3, 10], hdLinked : ["ranger", "rangerua"], minlevelLinked : ["ranger", "rangerua"], speed : "40 ft", scores : [16, 12, 15, 8, 14, 8], saves : ["", 3, "", "", 4, ""], damage_immunities : "the chosen Draconic Essence damage type", senses : "Darkvision 60 ft", passivePerception : 12, languages : "Draconic", challengeRating : "0", proficiencyBonus : 2, proficiencyBonusLinked : true, attacksAction : 1, attacks : [{ name : "Bite", ability : 1, damage : [1, 6, "piercing"], modifiers : ["", "Prof"], range : "Melee (5 ft)", description : "Only 1d6 is piercing damage, the rest is of the chosen Draconic Essence damage type", abilitytodamage : false }], features : [{ name : "Warden", description : "The drake obeys the commands of its warden and shares its proficiency bonus. It takes its turn immediately after that of its warden, on the same initiative. It can move and take reactions on its own, but only takes the Dodge action on its turn unless its warden takes a bonus action to command it to take another action. If its warden is incapacitated, the drake can take any action, not just Dodge. The drake vanishes after a number of hours equal to its proficiency bonus, when it is reduced to 0 hit points, when its warden summons another drake, or when its warden dies." }], traits : [{ name : "Draconic Essence", description : "When the drake is summoned, choose a damage type: acid, cold, fire, lightning, or poison." }, { name : "Infused Strikes", description : "As a reaction when another creature within 30 ft of the drake that it can see hits with a weapon attack, the drake can infuse the strike with its essence, causing the attack to deal an extra 1d6 damage of its chosen Draconic Essence damage type" }, { name : "Bond of Fang and Scale (Drakewarden 7)", minlevel : 7, description : "When the drake is summoned, it gains either a 40 ft swimming speed and can breathe underwater, or a 40 ft flying speed and has wings. The drake's bite deals an extra 1d6 damage of its chosen Draconic Essence type.", addMod : [{ type : "", field : "BlueText.Comp.Use.Attack.1.Damage Die", mod : "1d6", text : "The drake's bite attack deals an extra 1d6 damage of the type chosen for its Draconic Essence." }], eval : function(prefix, lvl) { var sMoveStr = (typePF ? ",\n" : ", ") + "fly/swim 40 ft"; if (What("Unit System") === "metric") sMoveStr = ConvertToMetric(sMoveStr, 0.5); tDoc.getField(prefix + "Comp.Use.Speed").value += sMoveStr; }, removeeval : function(prefix, lvl) { var sMoveStr = (typePF ? ",\n" : ", ") + "fly/swim 40 ft"; if (What("Unit System") === "metric") sMoveStr = ConvertToMetric(sMoveStr, 0.5); Value(prefix + "Comp.Use.Speed", What(prefix + "Comp.Use.Speed").replace(sMoveStr, "")); } }, { name : "Perfected Bond (Drakewarden 15)", minlevel : 15, description : "The drake's size is now Large and its bite attack deals an extra 1d6 damage (for a total of +2d6) of its chosen Draconic Essence type.", addMod : [{ type : "", field : "BlueText.Comp.Use.Attack.1.Damage Die", mod : "1d6", text : "The drake's bite attack deals another extra 1d6 damage (for a total of +2d6) of the type chosen for its Draconic Essence." }], eval : function(prefix, lvl) { PickDropdown(prefix + "Comp.Desc.Size", 2); // Large }, removeeval : function(prefix, lvl) { PickDropdown(prefix + "Comp.Desc.Size", 4); // Small } }], calcChanges : { hp : function (totalHD, HDobj, prefix) { if (!classes.known.ranger && !classes.known.rangerua) return; var rngrLvl = classes.known.ranger ? classes.known.ranger.level : classes.known.rangerua.level; var rngrLvlM = 5 * rngrLvl; HDobj.alt.push(5 + rngrLvlM); HDobj.altStr.push(" = 5 as a base\n + 5 \xD7 " + rngrLvl + " from five times its warden's ranger level (" + rngrLvlM + ")"); }, setAltHp : true } }] }, "subclassfeature7" : { name : "Bond of Fang and Scale", source : [["UA:SP5", 4]], minlevel : 7, description : desc([ "When I summon my drake I can choose for it to have 40 ft flying or swimming speed", "If I choose swimming, it also gains the ability to breathe underwater", "The drake's bite attack deals an extra 1d6 damage chosen by its Draconic Essense", "While it is summoned, I gain resistance to the damage type of its Draconic Essense" ]), dmgres : ["(See Drake)"] }, "subclassfeature11" : { name : "Drake's Breath", source : [["UA:SP5", 4]], minlevel : 11, description : desc([ "As an action, I can cause my drake or myself to exhale a 30-ft cone breath weapon", "Its damage type is acid, cold, fire, lightning, or poison; Dex save to halve the damage", "I can do this once per long rest, or by expending a 3rd-level or higher spell slot (SS 3+)" ]), additional : levels.map(function (n) { return n < 11 ? "" : (n < 15 ? 6 : 8) + "d6 damage"; }), action : [["action", ""]], usages : 1, recovery : "long rest", altResource : "SS 3+", weaponOptions : [{ regExpSearch : /^(?=.*drake)(?=.*breath).*$/i, name : "Drake's Breath", source : [["UA:SP5", 4]], ability : 5, type : "Natural", damage : [6, 6, "My choice"], range : "30-ft cone", description : "Hits all in area; Dex save for half damage; Damage type: acid, cold, fire, lightning, or poison", abilitytodamage : false, dc : true, useSpellMod : ["ranger", "rangerua"], DrakewardenDrakeBreath : true, selectNow : true }], calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.DrakewardenDrakeBreath && (classes.known.rangerua || classes.known.ranger)) { var rngrLvl = classes.known.ranger ? classes.known.ranger.level : classes.known.rangerua.level; fields.Damage_Die = (rngrLvl < 15 ? 6 : 8) + 'd6'; }; }, "", 1 ] } }, "subclassfeature15" : { name : "Perfected Bond", source : [["UA:SP5", 4]], minlevel : 15, description : desc([ "My drake is now Large and its bite deals +1d6 damage chosen by its Draconic Essence", "As a reaction when the drake or I take damage while within 30 ft of each other,", "I can give myself or the drake resistance to that instance of damage", ]), action : [["reaction", ""]] } } }); if (ClassList.rangerua) { ClassList.rangerua.subclasses[1].push(UASP5_Ranger_Subclass_Drakewarden); }; ================================================ FILE: WotC material/ua_20210126_Gothic-Lineages.js ================================================ var iFileName = "ua_20210126_Gothic-Lineages.js"; RequiredSheetVersion("14.0.1-beta"); // This file adds the content from the Unearthed Arcana 2021: Gothic Lineages article to MPMB's Character Record Sheet // This file contains contributions by Metacomet10, MarvinTheParanoidAndroid, and CountVladmir SourceList["UA:GL"] = { name : "Unearthed Arcana: Gothic Lineages", abbreviation : "UA:GL", group : "Unearthed Arcana", campaignSetting : "Ravenloft", url : "https://media.wizards.com/2021/dnd/downloads/UA2021_GothicLineages.pdf", date : "2021/01/26" }; RaceList["dhampir-ua"] = { regExpSearch : /dhampir/i, name : "Dhampir", source : [["UA:GL", 2]], plural : "Dhampirs", size : [3, 4], speed : { walk : { spd : 35, enc : 25 }, climb : { spd : "walk", enc : "walk" } }, languageProfs : ["Common", 1], vision : [["Darkvision", 60]], weaponOptions : [{ regExpSearch : /^(?=.*vampiric)(?=.*bite).*$/i, name : "Vampiric Bite", source : [["VRGtR", 17]], ability : 3, type : "Simple", damage : [1, 4, "piercing"], range : "Melee", description : "Adv. while at or below half HP; Can empower myself on hit", isAlwaysProf : true, abilitytodamage : true, monkweapon : true, selectNow : true }], extraLimitedFeatures : [{ name : "Vampiric Bite", additional : "empower myself", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus')", recovery : "long rest" }], scorestxt : "+2 to one ability score, and +1 to a different score of my choice", trait : "Dhampir" + (typePF ? "\n " : "\t") + "\u2022 Type: My creature type is both Humanoid and Undead." + "\n \u2022 Spider Climb: Climbing speed equal to walking speed. At 3rd level, I can move up, down, and across vertical surfaces and upside down along ceilings, while leaving my hands free." + "\n \u2022 Vampiric Bite: Uses Constitution and has adv. on the attack roll if I'm at or below half HP. My Proficiency Bonus per long rest, when I hit a creature other than a construct or undead, I can empower myself. I either regain HP or gain a bonus on my next ability check or attack roll. The bonus is equal to the piercing damage dealt." }; RaceList["hexblood-ua"] = { regExpSearch : /hexblood/i, name : "Hexblood", source : [["UA:GL", 4]], plural : "Hexbloods", size : [3, 4], speed : { walk : { spd : 30, enc : 20 } }, scorestxt : "+2 to one ability score, and +1 to a different score of my choice", trait : "Hexblood" + (typePF ? "\n " : "\t") + "\u2022 Fey Resilience: I'm both Humanoid and Fey. I have adv. on saves vs. charms." + "\n \u2022 Magic Token: As an action once per long rest, I can harmlessly remove a lock of my hair, one of my nails or teeth and imbue this token with magic until I finish a long rest. While the token is imbued in this way, I can telepathically speak to a creature holding it or see and hear around it. See the Notes page for more information." + "\n \u2022 Hex Magic: I known Disguise Self and Hex. I can cast each spell once per long rest without using a spell slot, or by using a spell slot.", toNotesPage : [{ name : "Hexblood's Magic Token", note : ["As an action, I can harmlessly pull out one of my nails, a tooth, or a lock of hair. This token is imbued with magic until I finish a long rest.", "While the token is imbued in this way, I can use an action to send a telepathic message to the creature holding or carrying the token, as long as I'm on the same plane of existence and are within 10 miles of it. The message can contain up to twenty-five words.", "In addition, while I'm within 10 miles of the token, I can use an action to enter a trance for 1 minute, during which I can see and hear from the token as if I was located where it is. While I'm using my senses at the token's location, I'm blinded and deafened in regard to my own surroundings. Afterward, the token is harmlessly destroyed.", "Once I create a token using this feature, I can't do so again until I finish a long rest, at which point my missing part regrows."] }], savetxt : { adv_vs : ["charmed"] }, languageProfs : ["Common", 1], vision : [["Darkvision", 60]], action : [["action", "Magic Token"]], extraLimitedFeatures : [{ name : "Magic Token", usages : 1, recovery : "long rest" }], spellcastingAbility : [4, 5, 6], features : { "hex magic" : { name : "Hex Magic", minlevel : 1, spellcastingBonus : [{ name : "Hex Magic", spells : ["disguise self", "hex"], selection : ["disguise self", "hex"], firstCol : 'oncelr+markedbox', times : 2, allowUpCasting : true }], } } }; RaceList["reborn-ua"] = { regExpSearch : /reborn/i, name : "Reborn", source : [["UA:GL", 5]], plural : "Reborns", size : 3, speed : { walk : { spd : 30, enc : 20 } }, scoresGeneric : true, trait : "Reborn" + (typePF ? "\n " : " ") + "\u2022 Type: My creature type is Humanoid, as well as Construct or Undead (my choice)." + "\n \u2022 Deathless Nature: I don't need to sleep, eat, drink, or breathe. I have adv. on saves vs. disease, poison, and death saves. I have resistance to poison damage. Magic can't put me to sleep and I can finish a long rest in 4 hours if I spend it inactive and motionless." + "\n \u2022 Knowledge from a Past Life: When I make an ability check that uses a skill, I can add +1d6 to the roll after seeing the d20 result. I can do this a number of times equal to my Proficiency Bonus and regain all expended uses when I finish a long rest.", vision : [["Darkvision", 60]], dmgres : ["Poison"], savetxt : { text : ["Magic can't put me to sleep"], adv_vs : ["disease", "poison", "death saves"], }, extraLimitedFeatures : [{ name : "Knowledge from a Past Life", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus')", recovery : "long rest" }], useFromPreviousRace : { message : "If you replace a race with the Reborn lineage, you can keep the following elements of that race:"+ desc(["its size,", "any skill proficiencies you gained from it,", "any climbing, flying, or swimming speed you gained from it, and", "any languages it knows and gain no new languages."], "\n \u2022 ")+ "\n\nIf you don't keep any of those elements or you choose this lineage at character creation, you instead:"+ desc(["are size Medium or Small (your choice),", "gain proficiency in two skills of your choice, and", "can speak, read, and write Common and one other language that you and your DM agree is appropriate."], "\n \u2022 "), defaultTraits : { size : [3, 4], skillstxt : "Choose any two skills" }, gainTraits : ["size", "age", "height", "weight", "heightMetric", "weightMetric", "languageProfs", "skillstxt", "skills", "speed.climb", "speed.fly", "speed.swim"], updateName : "suffix" } }; AddRacialVariant("reborn-ua", "undead", { regExpSearch : /undead/i, source : [["UA:GL", 5]], trait : RaceList["reborn-ua"].trait.replace("Humanoid, as well as Construct or Undead (my choice)", "both Humanoid and Undead").replace(" ", "\t") }); AddRacialVariant("reborn-ua", "construct", { regExpSearch : /construct/i, source : [["UA:GL", 5]], trait : RaceList["reborn-ua"].trait.replace("Humanoid, as well as Construct or Undead (my choice)", "both Humanoid and Construct").replace(" ", "\t") }); ================================================ FILE: WotC material/ua_20210311_Folk-of-the-Feywild.js ================================================ var iFileName = "ua_20210311_Folk-of-the-Feywild.js"; RequiredSheetVersion("13.0.8"); // This file adds the content from the Unearthed Arcana 2021: Folk of the Feywild article to MPMB's Character Record Sheet // This file contains contributions by CountVladmir and othercrow SourceList["UA:FotF"] = { name : "Unearthed Arcana: Folk of the Feywild", abbreviation : "UA:FotF", group : "Unearthed Arcana", url : "https://media.wizards.com/2021/dnd/downloads/UA2021_FeyFolk.pdf", date : "2021/03/11" }; RaceList["fairy-ua"] = { regExpSearch : /fairy/i, name : "Fairy", source : [["UA:FotF", 2]], plural : "Fairies", size : 4, speed : { walk : { spd : 30, enc : 20 }, fly : { spd : "walk", enc : "walk" } }, languageProfs : ["Common", 1], scorestxt : "+2 to one ability score and +1 to a different score of my choice, -or- +1 to three different scores of my choice", spellcastingAbility : [4, 5, 6], spellcastingBonus : [{ name : "Fairy Magic", spells : ["druidcraft"], selection : ["druidcraft"], firstCol : "atwill" }], features : { "fairy magic" : { name : "Fairy Magic", minlevel : 1, spellcastingBonus : [{ name : "Fairy Magic", spells : ["faerie fire"], selection : ["faerie fire"], firstCol : 'oncelr', allowUpCasting : true }], extraLimitedFeatures : [{ name : "Faerie Fire", usages : 1, recovery : "long rest", altResource : "SS 1+" }] } }, trait : "Fairy"+ "\n \u2022 Fey: My creature type is fey, rather than humanoid."+ "\n \u2022 Fairy Flight: I have a magical flying speed equal to my walking speed and can hover."+ "\n \u2022 Fairy Magic: I know the Druidcraft and Faerie Fire spells, and can cast the latter without using a spell slot once per long rest, as well as using slots as normal."+ "\n \u2022 Fey Passage: I can squeeze through a space as narrow as 1 inch wide." }; RaceList["feywild hobgoblin-ua"] = { regExpSearch : /^(?=.*feywild)(?=.*hobgoblin).*$/i, name : "Feywild hobgoblin", sortname : "Hobgoblin, Feywild", source : [["UA:FotF", 2]], plural : "Feywild hobgoblins", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", 1], scorestxt : "+2 to one ability score and +1 to a different score of my choice, -or- +1 to three different scores of my choice", vision : [["Darkvision", 60]], savetxt : { adv_vs : ["charmed"] }, features : { "fey gift" : { name : "Fey Gift", minlevel : 1, usages : "Proficiency bonus per ", action : [["bonus action", " (Help action)"]], usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "fortune from the many" : { name : "Fortune from the Many", minlevel : 1, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "fey gift - additional effect" : { name : "Fey Gifts - Additional Effects", minlevel : 3, toNotesPage : [{ name : "Fey Gifts - Additional Effects", page3notes : true, note : [ "Whenever I take the Help action, I can choose one of the following effects:", " \u2022 Hospitality: The target and I each gain 1d6 + my Proficiency Bonus in temporary HP", " \u2022 Passage: The target and I gain +10 ft walking speed until my next turn starts", " \u2022 Spite: Enhances the first attack by the target or me that hits before my next turn starts", " The creature hit has disadvantage on its next attack roll it makes within the next minute" ] }] } }, trait : "Feywild hobgoblin"+ "\n \u2022 Fey Gift: I can take the Help action as a bonus action my Proficiency Bonus per long rest."+ "\n \u2022 Fortune from the Many: When I miss an attack or fail an ability check or a save, I can gain a bonus to the roll equal to the number of allies I can see within 30 ft of me (max +5). I can do this a number of times per long rest equal to my Proficiency Bonus."+ '\n \u2022 From 3rd-level onwards, whenever I take the Help action, I can choose to produce an additional effect: Hospitality, Passage, or Spite. See the 3rd page "Notes" section.' }; RaceList["owlfolk-ua"] = { regExpSearch : /owlfolk/i, name : "Owlfolk", source : [["UA:FotF", 3]], plural : "Owlfolk", size : [3, 4], speed : { walk : { spd : 30, enc : 20 }, fly : { spd : "walk", enc : "walk" } }, skills : ["Stealth"], vision : [["Darkvision", 90]], languageProfs : ["Common", 1], scorestxt : "+2 to one ability score and +1 to a different score of my choice, -or- +1 to three different scores of my choice", spellcastingAbility : [4, 5, 6], spellcastingBonus : [{ name : "Magic Sight", spells : ["detect magic"], selection : ["detect magic"] }], action : [["reaction", "Nimble Flight"]], trait : "Owlfolk"+ "\n \u2022 Magic Sight: I know the spell Detect Magic and can cast as a ritual or by using spell slots as normal."+ "\n \u2022 Nimble Flight: My wings give me a flying speed equal to my walking speed. As a reaction when I fall, I can make a Dexterity saving throw (DC 10) to stop falling and fly in place until the start of my next turn."+ "\n \u2022 Silent Feathers: I have proficiency in the Stealth skill." }; RaceList["rabbitfolk-ua"] = { regExpSearch : /rabbitfolk/i, name : "Rabbitfolk", source : [["UA:FotF", 3]], plural : "Rabbitfolk", size : [3, 4], speed : { walk : { spd : 30, enc : 20 }, }, skills : ["Perception"], addMod : [{ type : "skill", field : "Init", mod : "Prof", text : "I can add my proficiency bonus to initiative rolls." }], languageProfs : ["Common", 1], scorestxt : "+2 to one ability score and +1 to a different score of my choice, -or- +1 to three different scores of my choice", action : [["reaction", "Lucky Footwork"]], trait : "Rabbitfolk"+ "\n \u2022 Hare-Trigger: I add my proficiency bonus to initiative rolls."+ "\n \u2022 Leporine Senses: I have proficiency in the Perception skill."+ "\n \u2022 Lucky Footwork: As a reaction when I fail a Dexterity saving throw, I can add +1d4 to the result, potentially making it a success."+ "\n \u2022 Rabbit Hop: Once during each of my turns when I walk at least 5 ft, I can hop an extra 1d12 ft without it costing any extra movement. I can only do this if my speed isn't 0." }; ================================================ FILE: WotC material/ua_20210414_Draconic-Options.js ================================================ var iFileName = "ua_20210414_Draconic-Options.js"; RequiredSheetVersion("13.1.14"); // This file adds the content from the Unearthed Arcana 2021: Draconic Options article to MPMB's Character Record Sheet // Define the source SourceList["UA:DO"] = { name : "Unearthed Arcana: Draconic Options", abbreviation : "UA:DO", group : "Unearthed Arcana", url : "https://media.wizards.com/2021/downloads/Unearthed-Arcana-2021-Draconic-Options.pdf", date : "2021/04/14" }; // Draconic Races var UADO_dragonborns_add = function () { // New dragonborn variants var objDragonborns = { Chromatic : { regExpSearch : /^(?=.*chromatic)(?=.*dragonborn).*$/i, source : [["UA:DO", 2]], variants : [["Black", "Acid"], ["Blue", "Lightning"], ["Green", "Poison"], ["Red", "Fire"], ["White", "Cold"]], breathWeaponShape : "5-ft by 30-ft line", trait : desc([ ">>TYPE<< Breath Weapon: When I take the Attack action, I can replace one attack with a breath weapon that deals 2d8 >>type<< damage to all in a 5-ft by 30-ft line, Dex save halves (DC 8 + Con mod + Proficiency Bonus). I can do this my Proficiency Bonus per long rest. The damage increases to 3d8 at 5th level, 4d8 at 11th level, and 5d8 at 17th level.", "Chromatic Warding: From 3rd level, I can protect myself using my draconic energies. As an action once per long rest, I can become immune to >>type<< damage for 10 minutes." ], "\n \u2022 "), features : { "chromatic warding" : { name : "Chromatic Warding", source : [["UA:DO", 2]], minlevel : 3, usages : 1, recovery : "long rest", action : [["action", ""]] } } }, Metallic : { regExpSearch : /^(?=.*metallic)(?=.*dragonborn).*$/i, source : [["UA:DO", 2]], variants : [["Brass", "Fire"], ["Bronze", "Lightning"], ["Copper", "Acid"], ["Gold", "Fire"], ["Silver", "Cold"]], breathWeaponShape : "15-ft cone", trait : desc([ ">>TYPE<< Breath Weapon: When I take the Attack action, I can replace one attack with a breath weapon that deals 2d8 >>type<< damage to all in a 15-ft cone, Dex save halves (DC 8 + Con mod + Proficiency Bonus). I can do this my Proficiency Bonus per long rest.", "Metallic Breath Weapon: At 3rd level I gain a second breath weapon once per long rest, that works just like the first. It doesn't deal damage, but I can choose one effect: Str save or pushed 20 ft and prone, or Con save or incapacitated until my next turn starts." ], "\n \u2022 "), features : { "metallic breath weapon" : { name : "Metallic Breath Weapon", source : [["UA:DO", 3]], minlevel : 3, usages : 1, recovery : "long rest", weaponOptions : [{ regExpSearch : /^(?=.*metallic)(?=.*breath)(?=.*weapon).*$/i, name : "Metallic breath weapon", source : [["UA:DO", 3]], ability : 3, type : 'Natural', damage : ['Str save or', '', 'Con save'], range : "15-ft cone", description : "Str save or pushed 20 ft and knocked prone -or- Con save or incapacitated until my next turn starts", abilitytodamage : false, dc : true, selectNow : true }] } } }, Gem : { regExpSearch : /^(?=.*gem)(?=.*dragonborn).*$/i, source : [["UA:DO", 3]], variants : [["Amethyst", "Force"], ["Crystal", "Radiant"], ["Emerald", "Psychic"], ["Sapphire", "Thunder"], ["Topaz", "Necrotic"]], breathWeaponShape : "15-ft cone", trait : desc([ ">>TYPE<< Breath Weapon: When I take the Attack action, I can replace one attack with a breath weapon that deals 2d8 >>type<< damage to all in a 15-ft cone, Dex save halves (DC 8 + Con mod + Proficiency Bonus). I can do this my Proficiency Bonus per long rest.", "Psionic Mind: I can speak telepathically to " + (typePF ? "any creature I can see within 30 ft that understands a language but it can't respond." : "a creature with a language I can see in 30 ft."), "Gem Flight: From 3rd level, I can temporarily fly. As a bonus action once per long rest, I can gain a flying speed equal to my walking speed and can hover. This lasts for 1 minute." ], "\n \u2022 "), features : { "gem flight" : { name : "Gem Flight", source : [["UA:DO", 3]], minlevel : 3, usages : 1, recovery : "long rest" } } } } for (var sDrBrn in objDragonborns) { var sDrBrnLC = sDrBrn.toLowerCase(); var oDrBrn = objDragonborns[sDrBrn]; RaceList[sDrBrnLC + " dragonborn-ua"] = { regExpSearch : oDrBrn.regExpSearch, name : sDrBrn + " Dragonborn", sortname : "Dragonborn, " + sDrBrn, source : oDrBrn.source, plural : sDrBrn + " Dragonborn", size : 3, speed : { walk : { spd : 30, enc : 20 } }, languageProfs : ["Common", 1], weaponOptions : [{ regExpSearch : /^(?=.*breath)(?=.*weapon).*$/i, name : "Breath weapon", source : oDrBrn.source, ability : 3, type : 'Natural', damage : ['Q', 8, 'fire'], range : oDrBrn.breathWeaponShape.replace('by', '\xD7'), description : "Hits all in area; Dex save, success - half damage", abilitytodamage : false, dc : true, dbBreathWeapon : true, selectNow : true }], age : " reach adulthood by 15 and live around 80 years", height : " stand well over 6 feet tall (5'6\" + 2d8\")", weight : " weigh around 240 lb (175 + 2d8 \xD7 2d6 lb)", heightMetric : " stand well over 1,8 metres tall (170 + 5d8 cm)", weightMetric : " weigh around 110 kg (80 + 5d8 \xD7 4d6 / 10 kg)", scorestxt : "+2 to one ability score and +1 to a different score of my choice, -or- +1 to three different scores of my choice", trait : sDrBrn + " Dragonborn"+ "\n \u2022 " + sDrBrn + ' Ancestry: Choose a type of dragon using the "Racial Options" button. The damage type of my resistance and my breath weapon are determined by the dragon type chosen.'+ + oDrBrn.trait.replace(/>>type<< /ig, ""), features : { "breath weapon" : { name : "Breath Weapon", minlevel : 1, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", additional : levels.map(function (n) { return (n < 5 ? 2 : n < 11 ? 3 : n < 17 ? 4 : 5) + 'd8'; }), calcChanges : { atkAdd : [ function (fields, v) { if (v.theWea.dbBreathWeapon && (/dragonborn/i).test(CurrentRace.known) && CurrentRace.variant) { fields.Damage_Type = CurrentRace.dmgres[0]; } }, '', 1 ] } } }, variants : [] }; if (oDrBrn.features) { for (var sFea in oDrBrn.features) { RaceList[sDrBrnLC + " dragonborn-ua"].features[sFea] = oDrBrn.features[sFea]; } } for (var i = 0; i < oDrBrn.variants.length; i++) { var sDrBrnVar = oDrBrn.variants[i][0]; var sDrBrnDmg = oDrBrn.variants[i][1]; AddRacialVariant(sDrBrnLC + " dragonborn-ua", sDrBrnVar.toLowerCase(), { regExpSearch : RegExp(sDrBrnVar, "i"), name : sDrBrnVar + " " + sDrBrnLC + " dragonborn", trait : sDrBrnVar + " " + sDrBrnLC + " dragonborn"+ oDrBrn.trait.replace(/>>TYPE<>type<= 4 && CurrentFeats.known.indexOf("initiate of high sorcery-ua") !== -1 && !(/good/i).test(What("Alignment")); }, spellcastingBonus : [{ name : "2nd-level Evoc/Necro spell", "class" : "any", school : ["Evoc", "Necro"], level : [2, 2], firstCol : "oncelr+markedbox" }], spellcastingAbility : 4, allowUpCasting : true, choices : ["Intelligence", "Wisdom", "Charisma"], selfChoosing : function () { var iHghSrcyInit = CurrentFeats.known.indexOf("initiate of high sorcery-ua"); if (iHghSrcyInit !== -1 && CurrentFeats.choices[iHghSrcyInit]) { return CurrentFeats.choices[iHghSrcyInit].toString().split(" ")[0].charAt(0).toUpperCase() + CurrentFeats.choices[iHghSrcyInit].toString().split(" ")[0].slice(1); } }, "intelligence" : { description : "I learn one 2nd-level Evoc or Necro spell. I can cast this spell 1/LR w/out using a spell slot, and can cast it normally. Int is my ability for this spell. If creature I can see within 60 ft fails a save vs my spell I can spend HD equal to spell's level. I roll half that many HD and the creature takes that much additional damage.", spellcastingAbility : 4 }, "wisdom" : { description : "I learn one 2nd-level Evoc or Necro spell. I can cast this spell 1/LR w/out using a spell slot, and can cast it normally. Wis is my ability for this spell. If creature I can see within 60 ft fails a save vs my spell I can spend HD equal to spell's level. I roll half that many HD and the creature takes that much additional damage.", spellcastingAbility : 5 }, "charisma" : { description : "I learn one 2nd-level Evoc or Necro spell. I can cast this spell 1/LR w/out using a spell slot, and can cast it normally. Cha is my ability for this spell. If creature I can see within 60 ft fails a save vs my spell I can spend HD equal to spell's level. I roll half that many HD and the creature takes that much additional damage.", spellcastingAbility : 6 } }; FeatsList["adept of the red robes-ua"] = { name : "Adept of the Red Robes", source : [["UA:HoK", 5]], description : "I learn one 2nd-level Div or Trans spell. I can cast this spell 1/LR w/out using a spell slot, and can cast it normally. Int is my ability for this spell. If I roll less than a 10 on an atk, check, or save, I can use my reaction to treat it as a 10. I can do this a number of times equal to my proficiency bonus per long rest.", descriptionFull : "Your pursuit of truth and dedication to maintaining the balance between all things has been recognized by the Order of the Red Robes, granting you these benefits:\n" + toUni("Insightful Magic.") + " You learn one 2nd-level spell of your choice. The 2nd-level spell must be from the divination or transmutation school of magic. You can cast this feat's 2nd-level spell without a spell slot, and you must finish a long rest before you can cast it in this way again. You can also cast this spell using spell slots you have of the appropriate level. The spell's spellcasting ability is the one chosen when you gain the Initiate of High Sorcery feat.\n" + toUni("Magical Balance.") + " When you make an attack roll, an ability check, or a saving throw, and roll a 9 or lower on the d20, you can use your reaction to balance fate and treat the roll as a 10. you can use this reaction a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th level, Initiate of High Sorcery feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("initiate of high sorcery-ua") !== -1; }, spellcastingBonus : [{ name : "2nd-level Div/Trans spell", "class" : "any", school : ["Div", "Trans"], level : [2, 2], firstCol : "oncelr+markedbox" }], action : [["reaction", "Magical Balance"]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", spellcastingAbility : 4, allowUpCasting : true, choices : ["Intelligence", "Wisdom", "Charisma"], selfChoosing : function () { var iHghSrcyInit = CurrentFeats.known.indexOf("initiate of high sorcery-ua"); if (iHghSrcyInit !== -1 && CurrentFeats.choices[iHghSrcyInit]) { return CurrentFeats.choices[iHghSrcyInit].toString().split(" ")[0].charAt(0).toUpperCase() + CurrentFeats.choices[iHghSrcyInit].toString().split(" ")[0].slice(1); } }, "intelligence" : { description : "I learn one 2nd-level Div or Trans spell. I can cast this spell 1/LR w/out using a spell slot, and can cast it normally. Int is my ability for this spell. If I roll less than a 10 on an atk, check, or save, I can use my reaction to treat it as a 10. I can do this a number of times equal to my proficiency bonus per long rest.", spellcastingAbility : 4 }, "wisdom" : { description : "I learn one 2nd-level Div or Trans spell. I can cast this spell 1/LR w/out using a spell slot, and can cast it normally. Wis is my ability for this spell. If I roll less than a 10 on an atk, check, or save, I can use my reaction to treat it as a 10. I can do this a number of times equal to my proficiency bonus per long rest.", spellcastingAbility : 5 }, "charisma" : { description : "I learn one 2nd-level Div or Trans spell. I can cast this spell 1/LR w/out using a spell slot, and can cast it normally. Cha is my ability for this spell. If I roll less than a 10 on an atk, check, or save, I can use my reaction to treat it as a 10. I can do this a number of times equal to my proficiency bonus per long rest.", spellcastingAbility : 6 } }; FeatsList["adept of the white robes-ua"] = { name : "Adept of the White Robes", source : [["UA:HoK", 5]], description : "I learn one 2nd-level Abjur or Conj spell. I can cast this spell 1/LR w/out using a spell slot, and can cast it normally. Choose an ability for this spell. When a creature w/in 30 ft takes damage I can use a reaction to expend a spell slot and roll d4s equal to the spell's level and reduce the damage by that much + my SC ability mod.", descriptionFull : "Your oath to use magic to make the world a better place has been recognized by the Order of the White Robes, granting you these benefits:\n" + toUni("Protective Magic.") + " You learn one 2nd-level spell of you choice. The 2nd-level spell must be from the abjuration or conjuration school of magic. You can cast this feat's 2nd-level spell without a spell slot, and you must finish a long rest before you can cast it in this way again. You can also cast this spell using spell slots you have of the appropriate level. The spell's spellcasting ability is the one chosen when you gain the Initiate of High Sorcery feat.\n" + toUni("Protective Ward.") + " When you or a creature you can see within 30 feet of you takes damage, you can use your reaction to expend a spell slot and weave protective magic around the target. Roll a number of d4s equal to the level of the spell slot expended and reduce the damage the target takes by the total rolled on those dice + your spellcasting ability modifier.", prerequisite : "4th level, Initiate of High Sorcery feat, Any Non-Evil Alignment", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("initiate of high sorcery-ua") !== -1 && !(/evil/i).test(What("Alignment")); }, spellcastingBonus : [{ name : "2nd-level Abjur/Conj spell", "class" : "any", school : ["Abjur", "Conj"], level : [2, 2], firstCol : "oncelr+markedbox" }], spellcastingAbility : 4, allowUpCasting : true, choices : ["Intelligence", "Wisdom", "Charisma"], selfChoosing : function () { var iHghSrcyInit = CurrentFeats.known.indexOf("initiate of high sorcery-ua"); if (iHghSrcyInit !== -1 && CurrentFeats.choices[iHghSrcyInit]) { return CurrentFeats.choices[iHghSrcyInit].toString().split(" ")[0].charAt(0).toUpperCase() + CurrentFeats.choices[iHghSrcyInit].toString().split(" ")[0].slice(1); } }, "intelligence" : { description : "I learn one 2nd-level Abjur or Conj spell. I can cast this spell 1/LR w/out using a spell slot, and can cast it normally. Int is my ability for this spell. When a creature w/in 30 ft takes damage I can use a reaction to expend a spell slot and roll d4s equal to the spell's level and reduce the damage by that much + my SC ability mod.", spellcastingAbility : 4 }, "wisdom" : { description : "I learn one 2nd-level Abjur or Conj spell. I can cast this spell 1/LR w/out using a spell slot, and can cast it normally. Wis is my ability for this spell. When a crea w/in 30 ft takes dmg I can use a reaction to expend a spell slot and roll d4s equal to the spell's level and reduce the dmg by that much + my SC ability mod.", spellcastingAbility : 5 }, "charisma" : { description : "I learn one 2nd-level Abjur or Conj spell. I can cast this spell 1/LR w/out using a spell slot, and can cast it normally. Cha is my ability for this spell. When a crea w/in 30 ft takes dmg I can use a reaction to expend a spell slot and roll d4s equal to the spell's level and reduce the dmg by that much + my SC ability mod.", spellcastingAbility : 6 } }; // Feat tree for Divinely Favored FeatsList["divinely favored-ua"] = { name : "Divinely Favored", source : [["UA:HoK", 5]], description : "I learn Thaumaturgy and one 1st-level spell based on my alignment. I can cast the 1st level spell once per long rest without a spell slot, and I can cast it normally. I choose Int, Wis, or Cha as my spellcasting ability for this. I can use a holy symbol as a spellcasting focus for any spells that use the chosen ability.", descriptionFull : "A god has chosen you to carry a spark of their divine power.\n You learn the thaumaturgy cantrip and one 1st-level spell based on the alignment of your character, as specified in the Alignment Spells table.\n You can cast the chosen 1st-level spell without a spell slot, and you must finish a long rest before you can cast it in this way again. You can also cast the spell using any spell slots you have.\n Your spellcasting ability for this feat's spells is Intelligence, Wisdom, or Charisma (choose when you select this feat).\n\n" + toUni("Alignment Spells") + "\n" + toUni("Alignment") + " " + toUni("1st-level Spell") + "\nEvil\t Choose one 1st level warlock or wizard spell.\nGood\t Choose one 1st-level cleric or wizard spell.\nNeutral\t Choose one 1st-level druid or wizard spell.\n\n In addition, you can use a holy symbol as a spellcasting focus for any spell you cast that uses the spellcasting ability you choose when you select this feat.", choices : ["Intelligence - Good", "Intelligence - Neutral", "Intelligence - Evil", "Wisdom - Good", "Wisdom - Neutral", "Wisdom - Evil", "Charisma - Good", "Charisma - Neutral", "Charisma - Evil"], // nine choices, one for each alignment and ability pair "intelligence - good" : { description : "I learn Thaumaturgy and one 1st-level cleric or wizard spell. I can cast the 1st level spell once per long rest without a spell slot, and I can cast it normally. Intelligence is my spellcasting ability for these spells. I can use a holy symbol as a spellcasting focus for all my spells that use Intelligence.", allowUpCasting : true, spellcastingAbility : 4, spellcastingBonus : [{ name : "Thaumaturgy", spells : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : "atwill" }, { name : "1st-level Cleric/Wizard Spell", "class" : ["cleric", "wizard"], level : [1, 1], firstCol : "oncelr+markedbox" }] }, "intelligence - neutral" : { description : "I learn Thaumaturgy and one 1st-level druid or wizard spell. I can cast the 1st level spell once per long rest without a spell slot, and I can cast it normally. Intelligence is my spellcasting ability for these spells. I can use a holy symbol as a spellcasting focus for all my spells that use Intelligence.", allowUpCasting : true, spellcastingAbility : 4, spellcastingBonus : [{ name : "Thaumaturgy", spells : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : "atwill" }, { name : "1st-level Druid/Wizard Spell", "class" : ["druid", "wizard"], level : [1, 1], firstCol : "oncelr+markedbox" }] }, "intelligence - evil" : { description : "I learn Thaumaturgy and one 1st-level warlock or wizard spell. I can cast the 1st level spell once per long rest without a spell slot, and I can cast it normally. Intelligence is my spellcasting ability for these spells. I can use a holy symbol as a spellcasting focus for all my spells that use Intelligence.", allowUpCasting : true, spellcastingAbility : 4, spellcastingBonus : [{ name : "Thaumaturgy", spells : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : "atwill" }, { name : "1st-level Warlock/Wizard Spell", "class" : ["warlock", "wizard"], level : [1, 1], firstCol : "oncelr+markedbox" }] }, "wisdom - good" : { description : "I learn Thaumaturgy and one 1st-level cleric or wizard spell. I can cast the 1st level spell once per long rest without a spell slot, and I can cast it normally. Wisdom is my spellcasting ability for these spells. I can use a holy symbol as a spellcasting focus for all my spells that use Wisdom.", allowUpCasting : true, spellcastingAbility : 5, spellcastingBonus : [{ name : "Thaumaturgy", spells : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : "atwill" }, { name : "1st-level Cleric/Wizard Spell", "class" : ["cleric", "wizard"], level : [1, 1], firstCol : "oncelr+markedbox" }] }, "wisdom - neutral" : { description : "I learn Thaumaturgy and one 1st-level druid or wizard spell. I can cast the 1st level spell once per long rest without a spell slot, and I can cast it normally. Wisdom is my spellcasting ability for these spells. I can use a holy symbol as a spellcasting focus for all my spells that use Wisdom.", allowUpCasting : true, spellcastingAbility : 5, spellcastingBonus : [{ name : "Thaumaturgy", spells : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : "atwill" }, { name : "1st-level Druid/Wizard Spell", "class" : ["druid", "wizard"], level : [1, 1], firstCol : "oncelr+markedbox" }] }, "wisdom - evil" : { description : "I learn Thaumaturgy and one 1st-level warlock or wizard spell. I can cast the 1st level spell once per long rest without a spell slot, and I can cast it normally. Wisdom is my spellcasting ability for these spells. I can use a holy symbol as a spellcasting focus for all my spells that use Wisdom.", allowUpCasting : true, spellcastingAbility : 5, spellcastingBonus : [{ name : "Thaumaturgy", spells : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : "atwill" }, { name : "1st-level Warlock/Wizard Spell", "class" : ["warlock", "wizard"], level : [1, 1], firstCol : "oncelr+markedbox" }] }, "charisma - good" : { description : "I learn Thaumaturgy and one 1st-level cleric or wizard spell. I can cast the 1st level spell once per long rest without a spell slot, and I can cast it normally. Charisma is my spellcasting ability for these spells. I can use a holy symbol as a spellcasting focus for all my spells that use Charisma.", allowUpCasting : true, spellcastingAbility : 6, spellcastingBonus : [{ name : "Thaumaturgy", spells : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : "atwill" }, { name : "1st-level Cleric/Wizard Spell", "class" : ["cleric", "wizard"], level : [1, 1], firstCol : "oncelr+markedbox" }] }, "charisma - neutral" : { description : "I learn Thaumaturgy and one 1st-level druid or wizard spell. I can cast the 1st level spell once per long rest without a spell slot, and I can cast it normally. Charisma is my spellcasting ability for these spells. I can use a holy symbol as a spellcasting focus for all my spells that use Charisma.", allowUpCasting : true, spellcastingAbility : 6, spellcastingBonus : [{ name : "Thaumaturgy", spells : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : "atwill" }, { name : "1st-level Druid/Wizard Spell", "class" : ["druid", "wizard"], level : [1, 1], firstCol : "oncelr+markedbox" }] }, "charisma - evil" : { description : "I learn Thaumaturgy and one 1st-level warlock or wizard spell. I can cast the 1st level spell once per long rest without a spell slot, and I can cast it normally. Charisma is my spellcasting ability for these spells. I can use a holy symbol as a spellcasting focus for all my spells that use Charisma.", allowUpCasting : true, spellcastingAbility : 6, spellcastingBonus : [{ name : "Thaumaturgy", spells : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : "atwill" }, { name : "1st-level Warlock/Wizard Spell", "class" : ["warlock", "wizard"], level : [1, 1], firstCol : "oncelr+markedbox" }] } }; FeatsList["divine communications-ua"] = { name : "Divine Communications", source : [["UA:HoK", 5]], description : "I learn Augury and Commune. I can cast these spells without a spell slot, then must wait 1d4 long rests before doing so again, and I can cast it normally. My chosen ability from Divinely Favored is my spellcasting ability for these spells", descriptionFull : "Your connection to your god deepens, granting you these benefits:\n" + toUni("Ability Score Increase.") + " Increase the ability score of the spellcasting ability chosen when you gained the Divinely Favored feat by 1, to a maximum of 20.\n" + toUni("Celestial Tongues.") + " You learn to speak, read, and write Celestial, and two other languages of your choice.\n" + toUni("Divine Omens.") + " You can cast the augury and commune spell without a spell slot, and you must finish 1d4 long rests before you can cast it in this way again. You can also cast the spell using the spell slots you have of the appropriate level. The spell's spellcasting ability is the one chosen when you gained the Divinely Favored feat.", prerequisite : "4th level, Divinely Favored feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("divinely favored-ua") !== -1; }, languageProfs : ["Celestial", 2], spellcastingBonus : [{ name : "Augury and Commune", spells : ["augury", "commune"], selection : ["augury", "commune"], times : 2 }], choices : ["Intelligence", "Wisdom", "Charisma"], selfChoosing : function () { // extract just the ability from the divinely favored choices var iDvnFav = CurrentFeats.known.indexOf("divinely favored-ua"); if (iDvnFav !== -1 && CurrentFeats.choices[iDvnFav]) { return CurrentFeats.choices[iDvnFav].toString().split(" ")[0].charAt(0).toUpperCase() + CurrentFeats.choices[iDvnFav].toString().split(" ")[0].slice(1); } }, "intelligence" : { description : "I learn Augury and Commune. I can cast these spells without a spell slot, then must wait 1d4 long rests before doing so again, and I can cast it normally. Intelligence is my spellcasting ability for these spells", spellcastingAbility : 4, scores : [0, 0, 0, 1, 0, 0] }, "wisdom" : { description : "I learn Augury and Commune. I can cast these spells without a spell slot, then must wait 1d4 long rests before doing so again, and I can cast it normally. Wisdom is my spellcasting ability for these spells", spellcastingAbility : 5, scores : [0, 0, 0, 0, 1, 0] }, "charisma" : { description : "I learn Augury and Commune. I can cast these spells without a spell slot, then must wait 1d4 long rests before doing so again, and I can cast it normally. Charisma is my spellcasting ability for these spells", spellcastingAbility : 6, scores : [0, 0, 0, 0, 0, 1] } }; // Feats tree for Squire of Solamnia FeatsList["squire of solamnia-ua"] = { name : "Squire of Solamnia", source : [["UA:HoK", 6]], description : "As a reaction once per long rest when I see another creature 30 ft make a save, I can give them advantage if they can hear and understand me. I gain proficiency with with medium armor and martial weapons. I have advantage on saves to avoid falling off a mount.", descriptionFull : "Your training in the ways of the Knights of Solamnia grants you these benefits:\n" + toUni("Martial Training.") + " You gain proficiency with medium armor and martial weapons.\n" + toUni("Defensive Rider.") + " You have advantage on saving throws made to avoid falling off a mount.\n" + toUni("Encouraging Rally.") + " When another creature you can see within 30 feet of you makes a saving throw, you can use your reaction to inspire them. If the target can hear you and understands you, it gains advantage on the saving throw. Once you use this reaction, you can't do so again until you finish a long rest.", prerequisite : "Squireship in the Knights of Solamnia", armorProfs : [false, true, false, false], weaponProfs : [false, true], savetxt : { adv_vs : ["falling off a mount"]}, action : [["reaction", "Encouraging Rally (Squire of Solamnia)"]], extraLimitedFeatures : [{ name : "Encouraging Rally (Squire of Solamnia)", usages : 1, recovery : "long rest" }] }; FeatsList["knight of the crown-ua"] = { name : "Knight of the Crown", source : [["UA:HoK", 6]], description : "When a creature within 30 ft makes an attack roll against another creature within 5 ft, I can use my reaction to grant advantage on the attack roll. I can do this a number of times equal to my Proficiency Bonus and regain all expended uses when I finish a long rest.", descriptionFull : "You are a Knight of Solamnia aligned with the Order of the Crown, a group that extols the virtues of cooperation, loyalty, and obedience. You excel in group combat and gain these benefits:\n" + toUni("Ability Score Increase.") + " Increase your Strength or Dexterity score by 1, to a maximum of 20.\n" + toUni("Tactical Teamwork.") + " When a creature you can see within 30 feet of you makes an attack roll against another creature that is within 5 feet of you, you can use your reaction to grant advantage on the attack roll. You can use this reaction a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th level, Squire of Solamnia feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("squire of solamnia-ua") !== -1; }, scorestxt : "+1 Strength or Dexterity", action : [["reaction", "Tactical Teamwork (Knight of the Crown)"]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }; FeatsList["knight of the sword-ua"] = { name : "Knight of the Sword", source : [["UA:HoK", 6]], description : "I gain proficiency in the chosen ability saving throw. After I or a creature I can see within 30 feet fails an Int, Wis, or Cha save, I can expend a HD. I roll that die and increase the save by that much. Once I change a fail into a success, I can't do so again until a long rest.", descriptionFull : "You are a Knight of Solamnia aligned with the Order of the Sword, a group devoted to heroism and courage. Bravery steels your spirit, granting you these benefits:\n" + toUni("Disciplined Spirit.") + " You gain proficiency in Intelligence, Wisdom, or Charisma saving throws (your choice when you take this feat).\n" + toUni("Willpower.") + " Immediately after you or a creature you can see within 30 feet of you fail an Intelligence, Wisdom, or Charisma saving throw, you can expend a Hit Die. The saving throw increases by an amount equal to a roll of that Hit Die, potentially turning a failure into a success. Once you turn a failed saving throw into a successful one using this feat, you can't do so again until you finish a long rest.", prerequisite : "4th level, Squire of Solamnia feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("squire of solamnia-ua") !== -1; }, choices : ["Intelligence", "Wisdom", "Charisma"], "intelligence" : { saves : ["Int"] }, "wisdom" : { saves : ["Wis"] }, "charisma" : { saves : ["Cha"] }, usages : 1, recovery : "long rest" }; FeatsList["knight of the rose-ua"] = { name : "Knight of the Rose", source : [["UA:HoK", 6]], description : "When I roll initiative I can choose up to 3 other creatures I can see within 30 ft. They gain temp HP equal to a roll of my HD + my proficiency bonus + the modifier of the score increased by this feat. I can do this a number of times equal to my Proficiency Bonus and regain all expended uses when I finish a long rest.", descriptionFull : "You are a Knight of Solamnia aligned with the Order of the Rose, a group known for leadership, justice, and wisdom. Your resolve grants you these benefits:\n" + toUni("Ability Score Increase.") + " Increase your Constitution or Charisma score by 1, to a maximum of 20.\n" + toUni("Bolstering Rally.") + " When you roll initiative, you can choose up to three other creatures you can see within 30 feet of you. Each creature can gain temporary hit points equal to a roll of your Hit Die + your proficiency bonus + the ability modifier of the ability score increased by this feat. You can use this feature a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th level, Squire of Solamnia feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("squire of solamnia-ua") !== -1; }, scorestxt : "+1 Constitution or Charisma", choices : ["Constitution", "Charisma"], "constitution" : { description : "When I roll initiative I can choose up to 3 other creatures I can see within 30 ft. They gain temp HP equal to a roll of my HD + my proficiency bonus + my Constitution modifier. I can do this a number of times equal to my Proficiency Bonus and regain all expended uses when I finish a long rest.", scores : [0, 0, 1, 0, 0, 0] }, "charisma" : { description : "When I roll initiative I can choose up to 3 other creatures I can see within 30 ft. They gain temp HP equal to a roll of my HD + my proficiency bonus + my Charisma modifier. I can do this a number of times equal to my Proficiency Bonus and regain all expended uses when I finish a long rest.", scores : [0, 0, 0, 0, 0, 1] }, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }; ================================================ FILE: WotC material/ua_20220425_Heroes-of-Krynn-Revisited.js ================================================ // This file adds the content from the Unearthed Arcana 2022: Heroes of Krynn Revisited article to MPMB's Character Record Sheet // Contains contributions by Thravieus Windhelm / PoetOfGod (GitHub) / @PoetOfGod#6077 (Discord) var iFileName = "ua_20220425_Heroes-of-Krynn-Revisited.js"; RequiredSheetVersion("14.0.5-beta"); SourceList["UA:HoKR"] = { name : "Unearthed Arcana: Heroes of Krynn Revisited", abbreviation : "UA:HoKR", group : "Unearthed Arcana", url : "https://media.wizards.com/2022/dnd/downloads/UA2022-HeroesofKrynnRevisited.pdf", date : "2022/04/25" }; RaceList["kender-ua2"] = { regExpSearch : /kender/i, name : "Kender", source : [["UA:HoKR", 1]], plural : "Kender", size : 4, speed : { walk : { spd : 30, enc : 20 } }, scoresGeneric : true, savetxt : { immune : ["frightened"]}, skillstxt : "Choose one from Insight, Investigation, Sleight of Hand, Stealth, or Survival", abilitySave : [4, 5, 6], features : { "taunt" : { name : "Taunt", minlevel : 1, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", action : [["bonus action", ""]] } }, trait : "Kender"+ "\n \u2022 Fearless: I am immune to the frightened condition."+ "\n \u2022 Taunt: As a bonus action, I can taunt a creature within 60 ft of me that can hear and understand me. They must make a Wisdom saving throw or have disadvantage on attack rolls not made against me until the start of my next turn. I can do this a number of times per long rest equal to my proficiency bonus. The DC equals 8 + proficiency bonus + Intelligence, Wisdom, or Charisma modifier (one-time choice)." }; // [dupl_start] Backgrounds identical to Dragonlance: Shadow of the Dragon Queen if (!SourceList["D:SotDQ"]) { BackgroundList["knight of solamnia"] = { regExpSearch : /^(?=.*(knight|champion|warrior))(?=.*solamnia).*$/i, name : "Knight of Solamnia", source : [["UA:HoKR", 2]], skills : ["Athletics", "Survival"], gold : 10, languageProfs : [2], equipleft : [ ["Insignia of rank", "", ""], ["Deck of cards", "", ""] ], equipright : [ ["Common clothes", "", 3], ["Pouch (with coins)", "", 1] ], feature : "Squire of Solamnia", trait : [ "I pledge my sword to the greater good. If I must perish in pursuit of that good, so be it.", "My comrades-in-arms are my family. I'll do whatever it takes to keep them safe.", "The protection of innocent people comes first. All other concerns come second.", "I joined the knights for the free meals, but their lessons grew on me over time.", "I wish my deeds to become the stuff of legends\xD7just like those of the knighthood's heroic founders.", "A dishonorable act drove me to become a knight. I have acted with honor ever since." ] }; BackgroundFeatureList["squire of solamnia"] = { description : "I gain the Squire of Solamnia feat. In addition, the Knights of Solamnia provide me free, modest lodging and food at any of their fortresses or encampments.", source : [["UA:HoKR", 2], ["UA:HoK", 3]], featsAdd: ["Squire of Solamnia"], }; BackgroundList["mage of high sorcery"] = { regExpSearch : /^(?=.*(mage|wizard|magus))(?=.*high)(?=.*sorcery).*$/i, name : "Mage of High Sorcery", source : [["D:SotDQ", 0], ["UA:HoKR", 3], ["UA:HoK", 4]], skills : ["Arcana", "History"], gold : 10, languageProfs : [2], equipleft : [ ["Bottle of colored ink", "", ""], ["Ink pen", "", ""] ], equipright : [ ["Common clothes", "", 3], ["Pouch (with coins)", "", 1] ], feature : "Initiate of High Sorcery", trait : [ "I wish to use my knowledge of magic to better people's lives.", "My study of magic might reveal all manner of secrets.", "Magic is a means to power, and I will use it to pursue my ambitions.", "I learned magic so I'd be able to protect those I care about.", "I use my magic to maintain the balance between all things.", "Whether in the past, present, or future, I will be the greatest mage ever known." ], extra : [ "Choose a Trinket", "Silver disk, recording my heroics", "Piece of a fallen knight's armor", "Pendant with a crown/rose/sword", "Pommel of my mentor's sword", "Favor from someone I defended", "Locket with silver dragon sketch" ], extra : [ "Choose a Trinket", "Unopened letter from first teacher", "Broken black/red/white wooden wand", "Scroll with incomprehensible formula", "Stone-covered foldable device", "Pouch with triple moon symbol", "Spellbook with triple moon symbol", "Lens to see Nuitari, invisible moon" ] }; BackgroundFeatureList["initiate of high sorcery"] = { description : "I gain the Initiate of High Sorcery feat. In addition, the Mages of High Sorcery provide me with free, modest lodging and food indefinitely at any occupied Tower of High Sorcery and for one night at the home of an organization member.", source : [["D:SotDQ", 0], ["UA:HoKR", 2], ["UA:HoK", 3]], featsAdd: ["Initiate of High Sorcery"], }; // Feats tree for Initiate of High Sorcery FeatsList["initiate of high sorcery"] = { name : "Initiate of High Sorcery", source : [["D:SotDQ", 32], ["UA:HoKR", 4]], description : "I learn a wizard cantrip and two 1st-levels spell from a list depending on my chosen moon. I can cast each spell once per long rest at its lowest levels without expending a spell slot, or by using a spell slot as normal. I can choose Int, Wis, or Cha as my spellcasting ability for this.", descriptionFull : "You've received training from magic-users affiliated with the Mages of High Sorcery."+ "\n Choose one of three moons of Krynn to influence your magic: the black moon, Nuitari; the red moon, Lunitari; or the white moon, Solinari. You learn one cantrip of your choice from the wizard spell list and two 1st-level spells based on the moon you choose, as specified in the Lunar Spells table."+ "\n You can cast each of the chosen 1st-level spell without a spell slot, and you must finish a long rest before you can cast it in this way again. You can also cast the spell using any spell slots you have."+ "\n Your spellcasting ability for this feat's spells is Intelligence, Wisdom, or Charisma (choose when you select this feat)."+ "\n\n" + toUni("Lunar Spells")+ "\n" + toUni("Moon\t1st-level Spell")+ "\nNuitari\tChoose two from dissonant whispers, false life,"+ "\n\thex, and ray of sickness"+ "\nLunitari\tChoose two from color spray, disguise self,"+ "\n\tfeather fall, and longstrider"+ "\nSolinari\tChoose two from comprehend languages, detect"+ "\n\tevil and good, protection from evil and good, and"+ "\n\tshield", prerequisite : "Sorcerer or Wizard Class or Mage of High Sorcery Background", prereqeval : function (v) { return classes.known.wizard || classes.known.sorcerer || CurrentBackground.known.indexOf('mage of high sorcery') !== -1; }, choices : ["Nuitari", "Lunitari", "Solinari"], "nuitari" : { description : "I learn a wizard cantrip and two 1st-level spells (Dissonant Whispers, False Life, Hex, or Ray of Sickness). I can cast each spell once per long rest at its lowest level without expending a spell slot, or by using a spell slot as normal. I can choose Int, Wis, or Cha as my spellcasting ability for this.", spellcastingAbility : [4,5,6], allowUpCasting : true, spellcastingBonus : [{ name : "Wizard Cantrip", "class" : ["wizard"], level : [0, 0], }, { name : "Nuitari 1st-level spell", spells : ["dissonant whispers", "false life", "hex", "ray of sickness"], firstCol : "oncelr+markedbox", times : 2 }] }, "lunitari" : { description : "I learn a wizard cantrip and two 1st-level spells (Color Spray, Disguise Self, Feather Fall, Longstrider). I can cast each spell once per long rest at its lowest level without expending a spell slot, or by using a spell slot as normal. I can choose Int, Wis, or Cha as my spellcasting ability for this.", spellcastingAbility : [4,5,6], allowUpCasting : true, spellcastingBonus : [{ name : "Wizard Cantrip", "class" : ["wizard"], level : [0, 0], }, { name : "Lunitari 1st-level spell", spells : ["color spray", "disguise self", "feather fall", "longstrider"], firstCol : "oncelr+markedbox", times : 2 }] }, "solinari" : { description : "I learn a wizard cantrip and two 1st-level spells (Comprehend Languages, Detect Evil and Good, Protection from Evil and Good, Shield). I can cast each spell once per long rest at its lowest level without expending a spell slot, or by using a spell slot as normal. I can choose Int, Wis, or Cha as my spellcasting ability for this.", spellcastingAbility : [4,5,6], allowUpCasting : true, spellcastingBonus : [{ name : "Wizard Cantrip", "class" : ["wizard"], level : [0, 0], }, { name : "Solinari 1st-level spell", spells : ["comprehend languages", "detect evil and good", "protection from evil and good", "shield"], firstCol : "oncelr+markedbox", times : 2 }] } }; FeatsList["adept of the black robes"] = { name : "Adept of the Black Robes", source : [["D:SotDQ", 31], ["UA:HoKR", 4]], description : "I learn one 2nd-level Ench or Necro spell, which I can cast once per long rest at its lowest level without a spell slot, or as normal with one. When a creature I can see within 60 ft fails its save vs. my damaging spell, I can expend HD up to the spell's level and add the rolls to the damage of the spell for that one creature.", descriptionFull : "You chose the moon Nuitari to influence your magic, and your ambition and loyalty to the Order of the Black Robes has been recognized, granting you these benefits:"+ "\n " + toUni("Ambitious Magic") + ". You learn one 2nd-level spell of your choice. The 2nd-level spell must be from the evocation or necromancy school of magic. You can cast this feat's 2nd-level spell without a spell slot, and you must finish a long rest before you can cast it in this way again. You can also cast this spell using spell slots you have of the appropriate level. The spell's spellcasting ability is the one chosen when you gain the Initiate of High Sorcery feat."+ "\n " + toUni("Life Channel") + ". You can channel your lifeforce into the power of your magic. When a creature you can see within 60 feet fails on a saving throw against a spell that deals damage that you cast, you can expend a number of Hit Dice equal to the level of the spell. Roll the expended Hit Dice and add them together. The damage that the creature takes increases by an amount equal to that total.", prerequisite : "4th level, Initiate of High Sorcery (Nuitari) feat", prereqeval : function(v) { var iHghSrcyInit = CurrentFeats.known.indexOf("initiate of high sorcery"); return v.characterLevel >= 4 && iHghSrcyInit !== -1 && CurrentFeats.choices[iHghSrcyInit] === 'nuitari'; }, spellcastingBonus : [{ name : "2nd-level Evoc/Necro spell", "class" : "any", school : ["Evoc", "Necro"], level : [2, 2], firstCol : "oncelr+markedbox" }], spellcastingAbility : 'initiate of high sorcery_-_nuitari', allowUpCasting : true }; FeatsList["adept of the red robes"] = { name : "Adept of the Red Robes", source : [["D:SotDQ", 32], ["UA:HoKR", 4]], description : "I learn a 2nd-level Illusion or Transmutation spell, which I can cast once per long rest at its lowest level without a spell slot, or as normal with one. When I roll 9 or lower on the d20 for an attack or ability check, I can treat the roll as a 10. I can do this a number of times per long rest equal to my proficiency bonus.", descriptionFull : "You chose the moon Lunitari to influence your magic, and your dedication to maintaining the balance between all things has been recognized by the Order of the Red Robes, granting you these benefits:"+ "\n " + toUni("Insightful Magic") + ". You learn one 2nd-level spell of your choice. The 2nd-level spell must be from the illusion or transmutation school of magic. You can cast this feat's 2nd-level spell without a spell slot, and you must finish a long rest before you can cast it in this way again. You can also cast this spell using spell slots you have of the appropriate level. The spell's spellcasting ability is the one chosen when you gain the Initiate of High Sorcery feat."+ "\n " + toUni("Magical Balance") + ". When you make an attack roll, an ability check, or a saving throw, and roll a 9 or lower on the d20, you can use your reaction to balance fate and treat the roll as a 10. you can use this reaction a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th level, Initiate of High Sorcery (Lunitari) feat", prereqeval : function(v) { var iHghSrcyInit = CurrentFeats.known.indexOf("initiate of high sorcery"); return v.characterLevel >= 4 && iHghSrcyInit !== -1 && CurrentFeats.choices[iHghSrcyInit] === 'lunitari'; }, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", spellcastingBonus : [{ name : "2nd-level Illus/Trans spell", "class" : "any", school : ["Illus", "Trans"], level : [2, 2], firstCol : "oncelr+markedbox" }], spellcastingAbility : 'initiate of high sorcery_-_lunitari', allowUpCasting : true }; FeatsList["adept of the white robes"] = { name : "Adept of the White Robes", source : [["D:SotDQ", 32], ["UA:HoKR", 4]], description : "I learn one 2nd-level Abjur or Div spell, which I can cast once per long rest at its lowest level without a spell slot, or as normal with one. As a reaction when I or a creature I can see within 30 ft is damaged, I can expend a spell slot and roll d6s equal to its level to reduce the damage by that much + my spellcasting modifier.", descriptionFull : "You chose the moon Solinari to influence your magic, and your oath to use magic to make the world a better place has been recognized by the Order of the White Robes, granting you these benefits:"+ "\n " + toUni("Protective Magic") + ". You learn one 2nd-level spell of you choice. The 2nd-level spell must be from the abjuration or divination school of magic. You can cast this feat's 2nd-level spell without a spell slot, and you must finish a long rest before you can cast it in this way again. You can also cast this spell using spell slots you have of the appropriate level. The spell's spellcasting ability is the one chosen when you gain the Initiate of High Sorcery feat."+ "\n " + toUni("Protective Ward") + ". When you or a creature you can see within 30 feet of you takes damage, you can use your reaction to expend a spell slot and weave protective magic around the target. Roll a number of d6s equal to the level of the spell slot expended and reduce the damage the target takes by the total rolled on those dice + your spellcasting ability modifier.", prerequisite : "4th level, Initiate of High Sorcery (Solinari) feat", prereqeval : function(v) { var iHghSrcyInit = CurrentFeats.known.indexOf("initiate of high sorcery"); return v.characterLevel >= 4 && iHghSrcyInit !== -1 && CurrentFeats.choices[iHghSrcyInit] === 'solinari'; }, action : [["reaction", ""]], spellcastingBonus : [{ name : "2nd-level Abjur/Div spell", "class" : "any", school : ["Abjur", "Div"], level : [2, 2], firstCol : "oncelr+markedbox" }], spellcastingAbility : 'initiate of high sorcery_-_solinari', allowUpCasting : true }; // Feat Divinely Favored FeatsList["divinely favored"] = { name : "Divinely Favored", source : [["D:SotDQ", 32], ["UA:HoKR", 4]], description : "I learn a cleric cantrip, a 1st-level spell based on my alignment, and Augury. I can cast the spells each once per long rest at their lowest level without a spell slot, or by using a spell slot as normal. I can choose Int, Wis, or Cha as my spellcasting ability for this. I can use a holy symbol as a spellcasting focus for any spell that uses the chosen ability.", descriptionFull : "A god has chosen you to carry a spark of their divine power."+ "\n You learn one cantrip of your choice from the cleric spell list and one 1st-level spell based on the alignment of your character, as specified in the table below. You also learn the augury spell."+ "\n You can cast the chosen 1st-level spell and the augury spell without a spell slot, and you must finish a long rest before you can cast either of these spells in this way again. You can also cast these spells using spell slots you have of the appropriate level."+ "\n Your spellcasting ability for this feat's spells is Intelligence, Wisdom, or Charisma (choose when you select this feat)."+ "\n\n" + toUni("Alignment\t1st-level Spell")+ "\n Evil\t\tChoose one 1st level warlock spell"+ "\n Good\t\tChoose one 1st-level cleric spell"+ "\n Neutral\t\tChoose one 1st-level druid spell"+ "\n\n In addition, you can use a holy symbol as a spellcasting focus for any spell you cast that uses the spellcasting ability you choose when you select this feat.", choices : ["Evil (warlock spell)", "Good (cleric spell)", "Neutral (druid spell)"], "evil (warlock spell)" : { name : "Divinely Favored [Evil]", description : "I learn a cleric cantrip, a 1st-level warlock spell, and Augury. I can cast each spell once per long rest at their lowest level without a spell slot, or by using a spell slot as normal. I choose Int, Wis, or Cha as my spellcasting ability for this. I can use a holy symbol as a spellcasting focus for any spell that uses the chosen ability.", spellcastingAbility : [4,5,6], allowUpCasting : true, spellcastingBonus : [{ name : "Cleric Cantrip", "class" : ["cleric"], level : [0, 0], }, { name : "1st-level Warlock Spell", "class" : ["warlock"], level : [1, 1], firstCol : "oncelr+markedbox" }, { name : "Augury", spells : ["augury"], selection : ["augury"], firstCol : "oncelr+markedbox" }] }, "good (cleric spell)" : { name : "Divinely Favored [Good]", description : "I learn a cleric cantrip, a 1st-level cleric spell, and Augury. I can cast each spell once per long rest at their lowest level without a spell slot, or by using a spell slot as normal. I choose Int, Wis, or Cha as my spellcasting ability for this. I can use a holy symbol as a spellcasting focus for any spell that uses the chosen ability.", spellcastingAbility : [4,5,6], allowUpCasting : true, spellcastingBonus : [{ name : "Cleric Cantrip", "class" : ["cleric"], level : [0, 0], }, { name : "1st-level Cleric Spell", "class" : ["cleric"], level : [1, 1], firstCol : "oncelr+markedbox" }, { name : "Augury", spells : ["augury"], selection : ["augury"], firstCol : "oncelr+markedbox" }] }, "neutral (druid spell)" : { name : "Divinely Favored [Neutral]", description : "I learn a cleric cantrip, a 1st-level druid spell, and Augury. I can cast each spell once per long rest at their lowest level without a spell slot, or by using a spell slot as normal. I choose Int, Wis, or Cha as my spellcasting ability for this. I can use a holy symbol as a spellcasting focus for any spell that uses the chosen ability.", spellcastingAbility : [4,5,6], allowUpCasting : true, spellcastingBonus : [{ name : "Cleric Cantrip", "class" : ["cleric"], level : [0, 0], }, { name : "1st-level Druid Spell", "class" : ["druid"], level : [1, 1], firstCol : "oncelr+markedbox" }, { name : "Augury", spells : ["augury"], selection : ["augury"], firstCol : "oncelr+markedbox" }] } }; } // dupl_end // Feats tree for Squire of Solamnia var UA_HoKR_KnightlyManeuvers_Notes = function (n) { // Get the name, source, and description from the maneuver of the Battle Master subclass, if that subclass is present if (ClassSubList["fighter-battle master"] && ClassSubList["fighter-battle master"].features["subclassfeature3.1"] && ClassSubList["fighter-battle master"].features["subclassfeature3.1"][n]) { var sourceObj = ClassSubList["fighter-battle master"].features["subclassfeature3.1"][n]; } else { // Subclass or maneuver not found, thus only add the name var sourceObj = { name : n.capitalize(), source : [["P", 74]], description : "" }; } return { name : sourceObj.name, source : sourceObj.source, note : sourceObj.description, page3notes : true, additional : "Knightly Maneuver" }; }; FeatsList["squire of solamnia-ua2"] = { name : "Squire of Solamnia", source : [["UA:HoKR", 5]], description : "Mounting/dismounting costs a 5-ft move. I learn one Knightly Maneuver: Lunging Attack, Precision Attack, or Pushing Attack. I can change which I know after each long rest. The DC is 8 + Prof B + Str or Dex mod (my choice). I gain Prof Bonus of Superiority Dice (d6) to use with these, regaining them after a long rest.", calculate : "event.value = 'Mounting/dismounting costs a 5-ft move. I learn one Knightly Maneuver: Lunging Attack, Precision Attack, or Pushing Attack. DC is ' + (8 + Number(How('Proficiency Bonus')) + Math.max(Number(What('Str Mod')), Number(What('Dex Mod')))) + ' (8 + Prof Bonus + Str/Dex mod). I can change which I know after each long rest. I gain Prof Bonus of Superiority Dice (d6) to use with these, regaining them after a long rest.';", descriptionFull : "Your training in the ways of the Knights of Solamnia grants you these benefits:"+ "\n " + toUni("Mount Up") + ". Mounting or dismounting costs you only 5 feet of movement."+ "\n " + toUni("Squire Maneuvers") + ". You learn the Lunging Attack, Precision Attack, or Pushing Attack maneuver from the Battle Master subclass of the fighter in the Player's Handbook (choose the maneuver when you gain this feat). If the maneuver requires a saving throw, the save's DC equals 8 + your proficiency bonus + your Strength or Dexterity modifier (your choice). Whenever you finish a long rest, you can replace the maneuver you learned from this feat with another one from the list above."+ "\n " + toUni("Superiority Dice") + ". You gain a number of superiority dice equal to your proficiency bonus. These dice are d6s, and you can use them only with the maneuver you gain from this feat and with any maneuvers you gain from feats that have this feat as a prerequisite. A superiority die is expended when you use it, and you regain all expended superiority dice when you finish a long rest.", prerequisite : "Fighter or Paladin Class or Knight of Solamnia Background", prereqeval : function (v) { return classes.known.fighter || classes.known.paladin || CurrentBackground.known.indexOf('knight of solamnia') !== -1; }, limfeaname : "Knightly Superiority Dice", usages : "Proficiency bonus per ", usagescalc : "var total = CurrentFeats.known.indexOf('squire of solamnia-ua2') === -1 ? 0 : Number(How('Proficiency Bonus')); for (var i = 0; i < CurrentFeats.known.length; i++) { var oFeat = FeatsList[CurrentFeats.known[i]]; if (oFeat && oFeat.knightlySuperiority && oFeat.knightlySuperiority.use) { total += oFeat.knightlySuperiority.use; }; }; event.value = total;", // complex because it works for all feats recovery : "long rest", additional : 'd6', knightlySuperiority : { die : 6, prereq : true }, toNotesPage : ["lunging attack", "precision attack", "pushing attack"].map(UA_HoKR_KnightlyManeuvers_Notes) }; FeatsList["knight of the crown-ua2"] = { name : "Knight of the Crown", source : [["UA:HoKR", 5]], description : "I learn one extra Knightly Maneuver: Distracting Strike or Goading Attack. I can change which one of these I know after each long rest. I gain two extra Knightly Superiority Dice and the dice become d8s. [+1 Strength or Dexterity]", descriptionFull : "You are a Knight of Solamnia aligned with the Order of the Crown, a group that extols the virtues of cooperation, loyalty, and obedience. You excel in group combat and gain these benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase your Strength or Dexterity score by 1, to a maximum of 20."+ "\n " + toUni("Crown Maneuvers") + ". You learn the Distracting Strike or the Goading Attack maneuver from the Battle Master subclass of the fighter in the Player's Handbook (choose the maneuver when you gain this feat). If the maneuver requires a saving throw, the save's DC equals 8 + your proficiency bonus + your Strength or Dexterity modifier (your choice). Whenever you finish a long rest, you can replace the maneuver you learned from this feat with the other maneuver offered by it."+ "\n " + toUni("Superiority Dice") + ". You gain two superiority dice, which you add to the dice you have from the Squire of Solamnia feat. All the dice are now d8s.", prerequisite : "4th level, Squire of Solamnia feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("squire of solamnia-ua2") !== -1; }, scorestxt : "+1 Strength or Dexterity", knightlySuperiority : { die : 8, use : 2 }, toNotesPage : ["distracting strike", "goading attack"].map(UA_HoKR_KnightlyManeuvers_Notes) }; FeatsList["knight of the sword-ua2"] = { name : "Knight of the Sword", source : [["UA:HoKR", 5]], description : "I learn one extra Knightly Maneuver: Maneuvering Attack or Menacing Attack. I can change which one of these I know after each long rest. I gain two extra Knightly Superiority Dice and the dice become d8s. [+1 Intelligence, Wisdom, or Charisma]", descriptionFull : "You are a Knight of Solamnia aligned with the Order of the Sword, a group devoted to heroism and courage. Bravery steels your spirit, granting you these benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase your Intelligence, Wisdom, or Charisma score by 1, to a maximum of 20."+ "\n " + toUni("Sword Maneuvers") + ". You learn the Maneuvering Attack or the Menacing Attack maneuver from the Battle Master subclass of the fighter in the Player's Handbook (choose the maneuver when you gain this feat). If the maneuver requires a saving throw, the save's DC equals 8 + your proficiency bonus + your Strength or Dexterity modifier (your choice). Whenever you finish a long rest, you can replace the maneuver you learned from this feat with the other maneuver offered by it."+ "\n " + toUni("Superiority Dice") + ". You gain two superiority dice, which you add to the dice you have from the Squire of Solamnia feat. All the dice are now d8s.", prerequisite : "4th level, Squire of Solamnia feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("squire of solamnia-ua2") !== -1; }, scorestxt : "+1 Intelligence, Wisdom, or Charisma", knightlySuperiority : { die : 8, use : 2 }, toNotesPage : ["maneuvering attack", "menacing attack"].map(UA_HoKR_KnightlyManeuvers_Notes) }; FeatsList["knight of the rose-ua2"] = { name : "Knight of the Rose", source : [["UA:HoKR", 5]], description : "I learn one extra Knightly Maneuver: Commander's Strike or Rally. I can change which one of these I know after each long rest. I gain two extra Knightly Superiority Dice and the dice become d8s. [+1 Constitution or Charisma]", descriptionFull : "You are a Knight of Solamnia aligned with the Order of the Rose, a group known for leadership, justice, and wisdom. Your resolve grants you these benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase your Constitution or Charisma score by 1, to a maximum of 20."+ "\n " + toUni("Rose Maneuvers") + ". You learn the Commander's Strike or Rally maneuver from the Battle Master subclass of the fighter in the Player's Handbook (choose the maneuver when you gain this feat). Whenever you finish a long rest, you can replace the maneuver you learned from this feat with the other maneuver offered by it."+ "\n " + toUni("Superiority Dice") + ". You gain two superiority dice, which you add to the dice you have from the Squire of Solamnia feat. All the dice are now d8s.", prerequisite : "4th level, Squire of Solamnia feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("squire of solamnia-ua2") !== -1; }, scorestxt : "+1 Constitution or Charisma", knightlySuperiority : { die : 8, use : 2 }, action : [ ["bonus action", "Commander's Strike (with Attack action)"], ["bonus action", "Rally"] ], toNotesPage : ["commander's strike", "rally"].map(UA_HoKR_KnightlyManeuvers_Notes) }; ================================================ FILE: WotC material/ua_20220523_Giant-Options.js ================================================ // This file adds the content from the Unearthed Arcana 2022: Giant Options article to MPMB's Character Record Sheet // Contains contributions by Thravieus Windhelm / PoetOfGod (GitHub) / @PoetOfGod#6077 (Discord) var iFileName = "ua_20220523_Giant-Options.js"; RequiredSheetVersion("14.0.1-beta"); SourceList["UA:GO"] = { name : "Unearthed Arcana: Giant Options", abbreviation : "UA:GO", group : "Unearthed Arcana", url : "https://media.wizards.com/2022/dnd/downloads/UA2022-drjwf73f8n.pdf", date : "2022/05/23" }; AddSubClass("barbarian", "giant-ua", { regExpSearch : /^((?=.*(marauder|barbarian|viking|(norse|tribes?|clans?)(wo)?m(a|e)n))|((?=.*(warrior|fighter))(?=.*(feral|tribal))))(?=.*giant).*$/i, subname : "Path of the Giant", subnameShort: "Giant", source : [["UA:GO", 1]], abilitySave : 1, spellcastingAbility : 5, features : { "subclassfeature3" : { name : "Giant Power", source : [["UA:GO", 1]], minlevel : 3, description : desc("I learn Giant, and the Druidcraft or Thaumaturgy cantrip with Wis as spellcasting ability"), languageProfs : ["Giant"], spellcastingBonus : [{ name : "Giant Power", spells : ["druidcraft", "thaumaturgy"], firstCol : "atwill" }] }, "subclassfeature3.1" : { name : "Giant's Havoc", source : [["UA:GO", 1]], minlevel : 3, description : levels.map(function (n) { return desc([ "While raging, I add the bonus damage to ranged thrown weapon attacks that use Str,", "I gain +" + (n < 14 ? 5 : 10) + " ft reach, and I become " + (n < 14 ? 'Large' : 'Huge') + " along with what I'm wearing, if there is room" ]); }) }, "subclassfeature6" : { name : "Elemental Cleaver", source : [["UA:GO", 1]], minlevel : 6, description : levels.map(function (n) { return desc([ "When I rage, I can infuse a weapon I'm holding with acid, cold, fire, thunder, or lightning", "While raging, its damage type changes to the chosen type and it deals +" + (n < 14 ? 1 : 2) + "d6 damage,", "it gains the thrown (20/60 ft) property, and reappears instantly after a thrown attack", "As a bonus action, I can change the chosen type; The bonuses only function for me" ]); }), action : [["bonus action", " (change type)"]], calcChanges : { atkAdd : [ function (fields, v) { if ((v.isMeleeWeapon || v.isRangedWeapon) && classes.known.barbarian && classes.known.barbarian.level && /^(?=.*elemental)(?=.*cleaver).*$/i.test(v.WeaponTextName)) { fields.Damage_Type = "Varies"; var isThrownWeapon = /\bthrown\b/i.test(v.WeaponText); var extraDmg = classes.known.barbarian.level < 14 ? '+1d6 damage' : '+2d6 damage'; var extraProp = v.isRangedWeapon && !isThrownWeapon ? 'Thrown (20/60 ft), returning; ' : isThrownWeapon ? 'Returning; ' : 'Thrown, returning; '; var hasRange = /\d+ ?(f.{0,2}t|m)/i.test(fields.Range); if (!hasRange) { fields.Range += ', 20/60 ft'; } else if ((!v.isRangedWeapon || isThrownWeapon) && hasRange) { var rangeNmbr = fields.Range.match(/\d+([.,]\d+)?/g); if (rangeNmbr.length === 1) { var longRange = Number(rangeNmbr[0].replace(',', '.')); if (longRange < 60) tempRange = fields.Range.replace(longRange,"long_range"); } else { var shortRange = Number(rangeNmbr[0].replace(',', '.')); var longRange = Number(rangeNmbr[1].replace(',', '.')); tempRange = fields.Range; if (shortRange < 20) tempRange = tempRange.replace(shortRange,"short_range"); if (longRange < 60) tempRange = tempRange.replace(longRange,"long_range"); } fields.Range = tempRange.replace("short_range", 20).replace("long_range", 60); } fields.Description += (fields.Description ? '; ' : '') + extraProp + extraDmg; } }, "If I include the words 'Elemental Cleaver' in a weapon's name, the Elemental Cleaver infused weapon properties will be added to it and its damage type will be set to 'Acid'. Also, my Rage's bonus damage will be added to it if it is a melee weapon that uses Strength." ], atkCalc : [ function (fields, v, output) { if (v.isMeleeWeapon && fields.Mod === 1 && classes.known.barbarian && classes.known.barbarian.level && /^(?!.*\brage\b)(?=.*elemental)(?=.*cleaver).*$/i.test(v.WeaponTextName)) { output.extraDmg += classes.known.barbarian.level < 9 ? 2 : classes.known.barbarian.level < 16 ? 3 : 4; } }, "" ] } }, "subclassfeature10" : { name : "Mighty Impel", source : [["UA:GO", 1]], minlevel : 10, description : levels.map(function (n) { return " [DC 8 + Prof Bonus + Str mod]" + desc([ "As a bonus action while raging, I can hurl a " + (n < 14 ? 'Medium' : 'Large') + " or smaller creature within my reach", "I move it to an empty space I can see within 30 ft; Unwilling can save to avoid this", "If it doesn't end this movement on a surface that can support it, it falls and lands prone" ]); }), action : [["bonus action", ""]] }, "subclassfeature14" : { name : "Demiurgic Colossus", source : [["UA:GO", 1]], minlevel : 14, description : desc([ "While raging, my reach increases by 10 ft, and my size can increase to Huge", "Mighty Impel works on Large creatures; Elemental Cleaver increases to +2d6 damage", ]) } } }); AddSubClass("druid", "circle of the primeval-ua", { regExpSearch : /^(?=.*(druid|shaman))(?=.*(primeval|behemoth)).*$/i, subname : "Circle of the Primeval", subnameShort: "Primeval", source : [["UA:GO", 2]], features : { "subclassfeature2" : { name : "Keeper of Old", source : [["UA:GO", 2]], minlevel : 2, description : desc("I gain proficiency in History; I can add d4 to my Intelligence (History) checks"), skills : ["History"] }, "subclassfeature2.1" : { name : "Primeval Companion", source : [["UA:GO", 2]], minlevel : 2, description : desc([ "As an action, I can expend a use of wild shape to summon a primeval companion", "The companion appears in an empty spot within 30 ft with the appearance of my choice", "It vanishes when reduced to 0 hit points, when I die, and when I summon another one" ]), action : [ ["action", "Summon Primeval Companion"], ["bonus action", "Command Primeval Companion"] ], creaturesAdd : [["Primeval Companion", true]], creatureOptions : [{ name : "Primeval Companion", source : [["UA:GO", 2]], size : 3, type : "Beast", alignment : "Neutral", ac : "11+Dex+Prof", hp : 20, hd : [2, 10], hdLinked : ["druid"], minlevelLinked : ["druid"], speed : "30 ft", scores : [15, 15, 17, 6, 12, 8], saves : ["", 4, 5, "", "", ""], senses : "Darkvision 60 ft", passivePerception : 11, languages : "Understands the languages of its summoner", challengeRating : "0", proficiencyBonus : 2, proficiencyBonusLinked : true, attacksAction : 1, attacks : [{ name : "Strike", ability : 1, damage : [1, 8, "bludgeoning"], modifiers : ["", "Prof"], range : "Melee (5 ft)", description : "My choice of bludgeoning, piercing, or slashing damage", abilitytodamage : false }], features : [{ name : "Primeval Companion", description : "The primeval companion obeys the commands of its summoner and shares its proficiency bonus. It takes its turn immediately after that of its summoner, on the same initiative. It can move and take reactions on its own, but only takes the Dodge action on its turn unless its summoner takes a bonus action to command it to take another action. If its summoner is incapacitated, the companion can take any action, not just Dodge. The companion vanishes when it is reduced to 0 hit points, when its summoner summons another companion, or when its summoner dies." }], traits : [{ name : "Intercept attack", description : "As a reaction when a creature the companion can see hits a target within 5 ft of the companion with an attack, the target instead takes half the damage. The companion takes the remainder of the damage" }, { name : "Prehistoric Conduit (Circle of the Primeval 6)", minlevel : 6, description : "Spells cast by the companion's summoner with a range other than self can originate from the companion instead. Also, the companion has advantage on saving throws against spells cast by its summoner. If the companion would normally take half damage on a successful save against these spells, instead, it takes no damage on a success and half and no other effects on a fail." }, { name : "Titanic Bond (Circle of the Primeval 10)", minlevel : 10, description : "The companion's size is now Large and it gains either a swimming or climbing speed equal to its walking speed.", eval : function(prefix, lvl) { PickDropdown(prefix + "Comp.Desc.Size", 2); // Large var sMoveStr = (typePF ? ",\n" : ", ") + "swim/climb 30 ft"; if (What("Unit System") === "metric") sMoveStr = ConvertToMetric(sMoveStr, 0.5); tDoc.getField(prefix + "Comp.Use.Speed").value += sMoveStr; }, removeeval : function(prefix, lvl) { PickDropdown(prefix + "Comp.Desc.Size", 3); // Medium var sMoveStr = (typePF ? ",\n" : ", ") + "swim or climb 30 ft"; if (What("Unit System") === "metric") sMoveStr = ConvertToMetric(sMoveStr, 0.5); Value(prefix + "Comp.Use.Speed", What(prefix + "Comp.Use.Speed").replace(sMoveStr, "")); } }], calcChanges : { hp : function (totalHD, HDobj, prefix) { if (!classes.known.druid) return; var drdLvl = classes.known.druid.level; var drdLvlM = 5 * drdLvl; HDobj.alt.push(10 + drdLvlM); HDobj.altStr.push(" = 10 as a base\n + 5 \xD7 " + drdLvl + " from five times its summoner's druid level (" + drdLvlM + ")"); }, setAltHp : true } }] }, "subclassfeature6" : { name : "Prehistoric Conduit", source : [["UA:GO", 2]], minlevel : 6, description : desc([ "Spells I cast with the range of touch can originate from my primeval companion", "The primeval companion has advantage on saving throws against my spells", "If the companion would take half damage on a successful save against a spell I cast,", "it instead takes no damage on a success and half damage and no other effects on a fail" ]) }, "subclassfeature10" : { name : "Titanic Bond", source : [["UA:GO", 2]], minlevel : 10, description : desc([ "My companion grows to Large; it gains a climb or swim speed equal to its walking speed", "When I hit an attack or spell damage a creature I can see, I can have it make a Wis save", "If failed, the target is frightened of me until the end of my next turn", "I can do this only while my primeval companion is summoned, and only once per turn" ]) }, "subclassfeature14" : { name : "Scourge of the Ancients", source : [["UA:GO", 3]], minlevel : 14, description : desc([ "When I use a bonus action to command my companion, I can expend a spell slot so that:", " \u2022 It becomes Huge if there is room, and gains 10 times the spell slot level in temp HP", " \u2022 On a hit, the companion's Strike deals an extra 1d8 + the spell slot level damage", " \u2022 Its walking (and climbing or swimming) speed increases with 5 ft per spell slot level", "These benefits last for 1 hour, until the companion vanishes, or until I use this again" ]) } } }); AddSubClass("wizard", "runecrafter-ua", { regExpSearch : /runecrafting|runecrafter/i, subname : "Tradition of Runecrafting", subnameShort: "Runecrafting", fullname : "Runecrafter", source : [["UA:GO", 3]], features : { "subclassfeature2" : { name : "Runes of Understanding", source : [["UA:GO", 3]], minlevel : 2, description : desc([ "I always have Comprehend Languages prepared and can cast it without using a spell slot", "It doesn't count against the number of spells I can prepare" ]), spellcastingBonus : [{ name : "Runes of Understanding", spells : ["comprehend languages"], selection : ["comprehend languages"], firstCol : "atwill" }] }, "subclassfeature2.1" : { name : "Runic Empowerment", source : [["UA:GO", 3]], minlevel : 2, description : desc([ "When I cast a spell using a spell slot, I can invoke one of the following runes:", " \u2022 Life Rune: Me or a creature I can see within 30 ft gains 5 temp HP per spell slot level", " \u2022 War Rune: A creature I can see within 30 ft is marked until the end of my next turn", " Attack rolls against it gain a bonus equal to half the spell slot level, rounded up", " \u2022 Wind Rune: Until my next turn starts, my speed increases by 5 ft per spell slot level", " Additionally, my movement doesn't provoke opportunity attacks" ]), usages : "Prof Bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature6" : { name : "Sigils of Warding", source : [["UA:GO", 3]], minlevel : 6, description : desc([ "As a reaction when I fail a Strength, Dexterity, or Constitution save, I can call on a rune", "I expend a use of my Runic Empowerment feature and succeed on the save instead" ]), action : [["reaction", ""]] }, "subclassfeature10" : { name : "Rune Maven", source : [["UA:GO", 3]], minlevel : 10, description : desc([ "Whenever I use Arcane Recovery, I also regain uses of Runic Empowerment", "I regain a number of uses equal to half my Intelligence modifier, rounded up (min 1)" ]) }, "subclassfeature14" : { name : "Engraved Enmity", source : [["UA:GO", 3]], minlevel : 14, description : desc([ "As a bonus action, I can have a creature I can see within 60 ft make a Wisdom save", "If failed, it is marked by an enmity rune for 1 min, or until I lose my concentration", "A glowing energy mote hovers over the marked and it suffers the following effects:", " \u2022 The marked has disadvantage on saving throws against spells I cast", " \u2022 The glow makes the marked visible even if invisible, and they can't become invisible", " \u2022 When marking and as a bonus action on subsequent turns, I can curse the creature", " The next time an ally hits the cursed with an attack, it also takes 1d8 force damage", "I can do this once per long rest, or by expending a 3rd-level or higher spell slot (SS 3+)" ]), recovery : "long rest", usages : 1, altResource : "SS 3+", action : [["bonus action", ""]] } } }); /* Feats All the below feats are the work of PoetOfGod and have not been double-checked by Safety-Orange, because the "Revised" article "Wonders of the Multiverse" has already been published, superseding all these feats with newer versions. */ FeatsList["elemental touched-ua"] = { name : "Elemental Touched", source : [["UA:GO", 4]], descriptionFull : "You've been exposed to the primordial magic of the Elemental Planes, granting you a measure of control over the natural world around you. You learn either the druidcraft or thaumaturgy cantrip, using Intelligence, Wisdom, or Charisma as the spellcasting ability (choose when you gain this feat).\n Whenever you finish a long rest, you can choose which element you are attuned to: Air, Earth, Fire, or Water. Depending on your choice, you can use a bonus action to cause one of the following effects:"+ "\n\n" + toUni("Air") + ". You gain a fly speed equal to your walking speed until the end of your turn. If you are airborne at the end of your turn after using this movement and aren't held aloft by other means, you fall."+ "\n" + toUni("Earth") + ". You cause the ground within 30 feet of you to become difficult terrain for 1 minute or until you create this effect again. During that time, you can move across ground that is difficult terrain without spending extra movement."+ "\n" + toUni("Fire") + ". You surround yourself in a cloud of ash and smoke. Until the end of your turn, your movement doesn't provoke opportunity attacks."+ "\n" + toUni("Water") + ". You can create a forceful surge of water directed at a creature within 15 feet of you that you can see. The creature must succeed on a Strength saving throw (which it can choose to fail) against a DC equal to 8 + your spellcasting ability modifier + your proficiency bonus or be pushed up to 10 feet away from you. The water vanishes immediately after the creature succeeds or fails."+ "\n\nYou can create this effect a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", description : "I learn druidcraft or thaumaturgy. End of a LR pick Air, Earth, Fire, Water, as a bns action: Air. Gain fly spd = to walk spd, fall at end of turn; Earth. 30 ft rad diff terr for 1 min, move freely through diff terr; Fire. No opp atks this turn; Water. 1 visible crea w/in 15 ft Str save DC 8 + SC mod + Prof or pushed 10 ft away. Prof Uses / LR.", spellcastingAbility : [4, 5, 6], action : [["bonus action", ""]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", choices : ["Druidcraft", "Thaumaturgy"], "druidcraft" : { description : "I learn druidcraft. End of a LR pick Air, Earth, Fire, Water, as a bns action: Air. Gain fly spd = to walk spd, fall at end of turn; Earth. 30 ft rad diff terr for 1 min, move freely through diff terr; Fire. No opp atks this turn; Water. 1 visible crea w/in 15 ft Str save DC 8 + SC mod + Prof or pushed 10 ft away. Prof Uses / LR.", spellcastingBonus : [{ name : "Elemental Touched", spells : ["druidcraft"], selection : ["druidcraft"] }] }, "thaumaturgy" : { description : "I learn thaumaturgy. End of a LR pick Air, Earth, Fire, Water, as a bns action: Air. Gain fly spd = to walk spd, fall at end of turn; Earth. 30 ft rad diff terr for 1 min, move freely through diff terr; Fire. No opp atks this turn; Water. 1 visible crea w/in 15 ft Str save DC 8 + SC mod + Prof or pushed 10 ft away. Prof Uses / LR.", spellcastingBonus : [{ name : "Elemental Touched", spells : ["thaumaturgy"], selection : ["thaumaturgy"] }] } }; FeatsList["outsized might-ua"] = { name : "Outsized Might", source : [["UA:GO", 5]], descriptionFull : "You have absorbed primeval magic that allows you, despite your relatively small stature, to embody the might of titanic creatures. This grants you the following benefits:"+ "\n\n" + toUni("Little but Mighty") + ". You gain proficiency in either the Athletics or Acrobatics skill."+ "\n" + toUni("Powerful Build") + ". You count as one size larger when determining your carrying capacity and the amount you can push, drag, or lift."+ "\n" + toUni("Stalwart") + ". You have advantage on saving throws against being moved or knocked prone.", description : "I gain proficiency in Athletics or Acrobatics. I count as one size larger when determining my carrying capacity and the amount I can push, drag, or lift. I have advantage on saving throws against being moved or knocked prone.", skillstxt : "Choose Athletics or Acrobatics", carryingCapacity : 2, savetxt : { adv_vs : ["moved", "prone"]} }; // X of the X Giant feats FeatsList["ember of the fire giant-ua"] = { name : "Ember of the Fire Giant", source : [["UA:GO", 4]], prerequisite : "8th level", prereqeval : function(v) { return v.characterLevel >= 8; }, descriptionFull : "You've manifested the fiery combat emblematic of fire giants, granting you the following benefits:"+ "\n\n" + toUni("Born of Flame") + ". You have resistance to fire damage."+ "\n" + toUni("Searing Ignition") + ". When you take the Attack action on your turn, you can replace one of your attacks with a magical burst of flame. Each creature of your choice within 15 feet of you that can see you must make a Dexterity saving throw (DC equals 8 + your proficiency bonus + your Constitution modifier). On a failed save, a creature takes fire damage equal to 2d6 + your proficiency bonus and is blinded until the start of your next turn; on a successful save, the creature takes half as much damage with no additional effects. You can use your Searing Ignition a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", description : "I gain resistance to fire damage. When I take the Attack action on my turn I can use an attack to instead make each creature I choose within 15 ft roll a Dex save DC 8 + Prof + Con mod. On a fail they take 2d6 + Prof Fire dmg, blinded until the start of my next turn. Success halves and no other effect. Prof Uses / LR.", action : [["action", "Searing Ignition (as Attack action)"]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", dmgres : ["Fire"] }; FeatsList["fury of the frost giant-ua"] = { name : "Fury of the Frost Giant", source : [["UA:GO", 4]], prerequisite : "4th level", prereqeval : function(v) { return v.characterLevel >= 4; }, descriptionFull : "You've manifested the icy might emblematic of frost giants, granting you the following benefits:"+ "\n\n" + toUni("Born of Ice") + ". You have resistance to cold damage."+ "\n" + toUni("Frigid Vengeance") + ". When a creature hits you with an attack roll, you can use your reaction to retaliate with a burst of magical ire. The creature must succeed on a Wisdom saving throw (DC equals 8 + your proficiency bonus + your Consitution modifier) or be frightened of you until the start of its next turn. You can use your reaction in this way a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", description : "I gain resistance to cold damage. When I am hit with an attack roll I can use my reaction to make them roll a Wis save DC 8 + Prof + Con mod. On a failure they are frightened until the start of their next turn. Prof Uses / LR.", action : [["reaction", "Frigid Vengeance"]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", dmgres : ["Cold"] }; FeatsList["guile of the cloud giant-ua"] = { name : "Guile of the Cloud Giant", source : [["UA:GO", 4]], prerequisite : "8th level", prereqeval : function(v) { return v.characterLevel >= 8; }, descriptionFull : "You've manifested the airy speech and magic emblematic of cloud giants, granting you the following benefits:"+ "\n\n" + toUni("Misty Form") + ". You can cast the blur spell without using a spell slot or material components. When you cast the spell in this way, the spell doesn't require you to maintain concentration on it. Once you cast the spell in this way, you can't do so again until you finish a long rest. You can also cast this spell in the normal way using spell slots you have of appropriate level."+ "\nIntelligence, Wisdom, or Charisma is your spellcasting ability for this feature (choose when you gain this feat)."+ "\n" + toUni("Silver Tongue") + ". You gain proficiency in either the Deception or Persuasion skill. Your proficiency bonus is doubled for any ability check you make using this skill.", description : "I gain proficiency and expertise in Deception or Persuasion. Once per long rest I can cast Blur without using a spell slot, material components, or concentration. I can also cast it normally with spell slots.", skillstxt : "Choose Deception or Persuasion. You also gain expertise with that skill", spellcastingAbility : [4, 5, 6], spellcastingBonus : [{ name : "Guile of the Cloud Giant", spells : ["blur"], selection : ["blur"], firstCol : "oncelr+markedbox", allowUpCasting : true }] }; FeatsList["keenness of the stone giant-ua"] = { name : "Keenness of the Stone Giant", source : [["UA:GO", 5]], prerequisite : "4th level", prereqeval : function(v) { return v.characterLevel >= 4; }, descriptionFull : "You've manifested the protection and spellcasting emblematic of stone giants, granting you the following benefits:"+ "\n\n" + toUni("Dreamer's Magic") + " You learn the detect thoughts spell and one 1st-level spell of your choice. The 1st-level spell must be from the abjuration or the divination school of magic. You can cast each of these spells without expending a spell slot. Once you cast either of these spells in this way, you can't cast that spell in this way again until you finish a long rest. You can also cast these spells using spell slots you have of the appropriate level."+ "\nIntelligence, Wisdom, or Charisma is your spellcasting ability for this feature (choose when you gain this feat)."+ "\n" + toUni("Mountain Sight") + ". You gain darkvision out to a range of 60 feet. If you already have darkvision from another source, its range increases by 30 feet", description : "I learn detect thoughts and a 1st level Abjur or Div spell. I can cast these without a spell slot once per long rest, or as normal. I gain 60 ft of Darkvision or if I already have darkvision I get an extra 30 feet of Darkvision.", spellcastingAbility : [4, 5, 6], spellcastingBonus : [{ name : "Keenness of the Stone Giant", spells : ["detect thoughts"], selection : ["detect thoughts"], firstCol : "oncelr+markedbox", allowUpCasting : true }, { name : "1st-level Abjur/Div spell", "class" : "any", school : ["Abjur", "Div"], level : [1, 1], firstCol : "oncelr+markedbox", allowUpCasting : true }], vision : [["Darkvision", "fixed 60"], ["Darkvision", "+30"]] }; FeatsList["soul of the storm giant-ua"] = { name : "Soul of the Storm Giant", source : [["UA:GO", 5]], prerequisite : "8th level", prereqeval : function(v) { return v.characterLevel >= 8; }, descriptionFull : "You've manifested divination abilities and tempest magic emblematic of storm giants, granting you the following benefits:"+ "\n\n" + toUni("Maelstrom Aura") + ". As a bonus action, you surround yourself in an aura of magical wind and lightning that extends 10 feet from you in every direction but not through total cover. The aura lasts for 1 minute or until you are incapacitated. While the aura is active, attack rolls against you have disadvantage, and whenever a creature starts its turn within the sphere, you can force the creature's speed to be halved until the start of its next turn. Once you use this bonus action, you can't do so again until you finish a long rest."+ "\n" + toUni("Storm's Oracle") + ". You can cast the divination spell as a ritual, without needing amterial components.\n Intelligence, Wisdom, or Charisma is your spellcasting ability for this feature (choose when you gain this feat). Once you cast the spell in this way, you can't do so again until you finish a long rest.", description : "I learn Divination and can cast it once per long rest as a ritual without using a spell slot or materials. Once per long rest as a bonus action I create a 10 ft rad that lasts for 1 min or until I am incapacitated. Atks against me have disadv, when creas start their turn in the area I can halve their spd until their next turn.", action : [["bonus action", "Maelstrom Aura"]], usages : 1, recovery : "long rest", spellcastingAbility : [4, 5, 6], spellcastingBonus : [{ name : "Storm's Oracle", spells : ["divination"], selection : ["divination"], firstCol : "oncelr" }], spellChanges : { "divination" : { components : "V,S", compMaterial : "" } } }; FeatsList["vigor of the hill giant-ua"] = { name : "Vigor of the Hill Giant", source : [["UA:GO", 5]], prerequisite : "4th level", prereqeval : function(v) { return v.characterLevel >= 4; }, descriptionFull : "You've manifested the resilience emblematic of hill giants, granting you the following benefits:"+ "\n\n" + toUni("Bulwark") + ". When you are subjected to an effect that would move you at least 5 feet or knock you prone, you can use your reaction to steady yourself. You are then neither moved nor knocked prone."+ "\n" + toUni("Hearty Health") + ". When you are subjected to a spell that restores your hit points, you can regain additional hit points equal to your Constitution modifier. You can regain these additional hit points a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", description : "When I would be moved or knocked prone I can use my reaction to not. When I would restore hit points from a spell I can regain an additional Con mod hit points, I can regain hit points this way Prof Uses / LR.", action : [["reaction", "Bulwark"]] }; // Rune Carver Apprentice feat tree FeatsList["rune carver apprentice-ua"] = { name : "Rune Carver Apprentice", source : [["UA:GO", 5]], descriptionFull : "You've begun studying the art of runecraft, which allows you to temporarily mark your items and imbue them with magic."+ "\n Whenever you finish a long rest, you can mark one nonmagical weapon, armor, piece of clothing, or other object you can touch with a rune of your choice. You temporarily learn one 1st-level spell based on the rune you choose, as specified in the table below, and you know the spell until you finish a long rest, when the rune fades."+ "\n\n" + toUni("Rune\tSpell")+ "\nBlood\tFalse life"+ "\nCloud\tFog cloud"+ "\nDeath\tRay of sickness"+ "\nDragon\tChromatic orb"+ "\nEnemy\tBane"+ "\nFire\tBurning hands"+ "\nFriend\tBless"+ "\nFrost\tArmor of Agathys"+ "\nHill\tGoodberry"+ "\nJourney\tLongstrider"+ "\nKing\tCommand"+ "\nLight\tGuiding bolt"+ "\nLife\tCure wounds"+ "\nMountain\tJump"+ "\nShield\tShield"+ "\nStone\tSanctuary"+ "\nStorm\tThunderwave"+ "\nWar\tHeroism"+ "\nWind\tFeather fall"+ "\n\nWhile you are wearing or carrying the rune-marked object, you can cast the chosen spell associated with the rune once without using a spell slot or material components, and you can also cast the spell using any spell slots you have."+ "\n Your spellcasting ability for this feat is Intelligence, Wisdom, or Charisma (choose when you gain this feat).", description : "At the end of a long rest, I can mark a nonmagical object I can touch with a rune. I learn a 1st-level spell until I finish a long rest when the rune fades. While wearing or carrying the object I can cast the spell once without using a spell slot or material components, or as normal.", spellcastingAbility : [4, 5, 6], spellcastingBonus : [{ name : "Rune Carver", spells : ["false life", "fog cloud", "ray of sickness", "chromatic orb", "bane", "burning hands", "bless", "armor of agathys", "goodberry", "longstrider", "command", "guiding bolt", "cure wounds", "jump", "shield", "sanctuary", "thunderwave", "heroism", "feather fall"], selection : ["false life", "fog cloud", "ray of sickness", "chromatic orb", "bane", "burning hands", "bless", "armor of agathys", "goodberry", "longstrider", "command", "guiding bolt", "cure wounds", "jump", "shield", "sanctuary", "thunderwave", "heroism", "feather fall"], times : 19, firstCol : "R", allowUpCasting : true }] }; FeatsList["rune carver adept-ua"] = { name : "Rune Carver Adept", source : [["UA:GO", 5]], prerequisite : "4th level, Rune Carver Apprentice feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("rune carver apprentice") !== -1; }, descriptionFull : "Your skill with the art of runecraft has increased.\n Whenever you finish a long rest, you can now mark a number of objects equal to your proficiency bonus with a rune from the Rune Carver Apprentice feat. An object can have only one rune at a time, and you must inscribe a different rune on each object.", description : "At the end of a long rest, when using the Rune Carver apprentice feat, I can now inscribe a number of objects up to my Proficiency Bonus. Each object can only have one rune, and each rune must be different." }; ================================================ FILE: WotC material/ua_20220718_Wonders-of-the-Multiverse.js ================================================ // This file adds the content from the Unearthed Arcana 2022: Wonders of the Multiverse article to MPMB's Character Record Sheet var iFileName = "ua_20220718_Wonders-of-the-Multiverse.js"; RequiredSheetVersion("14.0.1-beta"); SourceList["UA:WotM"] = { name : "Unearthed Arcana: Wonders of the Multiverse", abbreviation : "UA:WotM", group : "Unearthed Arcana", url : "https://media.wizards.com/2022/dnd/downloads/UA2022-WondersoftheMultiverse.pdf", date : "2022/07/18" }; // Race RaceList["glitchling-ua"] = { regExpSearch : /glitchling/i, name : "Glitchling", source : [["UA:WotM", 2]], plural : "Glitchlings", size : 3, speed : { walk : { spd : 30, enc : 20 } }, scoresGeneric : true, savetxt : { adv_vs : ["charmed"] }, armorOptions : [{ regExpSearch : /^(?=.*armou?red)(?=.*plating).*$/i, name : "Armored Plating", source : [["UA:WotM", 2]], ac : 14, selectNow : true }], features : { "balance chaos" : { name : "Balance Chaos", minlevel : 1, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "vestigial wings" : { name : "Vestigial Wings", minlevel : 1, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" } }, trait : "Glitchling (my type is Construct)"+ "\n \u2022 Armored Plating: My base AC is 14 + my Dexterity modifier."+ "\n \u2022 Living Construct: Life preserving spells that normally don't affect constructs work on me." + (typePF ? " (e.g. Cure Wounds, Spare the Dying)." : "")+ "\n \u2022 Ordered Mind: I have adv. on Wis (Insight) checks and on saves against being charmed."+ "\n \u2022 Balance Chaos: " + (typePF ? "My proficiency bonus per long rest, I can treat an attack roll or save roll of 9 or lower as a 10 instead." : "Prof Bonus per long rest, I can treat a save/attack roll below 10 as a 10.")+ "\n \u2022 Vestigial Wings: Prof Bonus per long rest, I can gain a flying speed equal to my walking speed for 1 turn, but fall if I end my turn aloft." }; // Subclass AddSubClass("cleric", "fate-ua", { regExpSearch : /^(?=.*(cleric|priest|clergy|acolyte))(?=.*(fate|destiny)).*$/i, subname : "Fate Domain", source : [["UA:WotM", 2]], spellcastingExtra : ["dissonant whispers", "heroism", "see invisibility", "warding bond", "beacon of hope", "clairvoyance", "death ward", "divination", "commune", "geas"], features : { "subclassfeature1" : { name : "Omens and Portents", source : [["UA:WotM", 2]], minlevel : 1, description : desc([ "I can cast Augury once per long rest without using a spell slot or requiring components", "Once I do, my divination spells have -25% of no/random answer until I finish a long rest" ]), usages : 1, recovery : "long rest", additional : "Augury", spellcastingBonus : [{ name : "Omens and Portents", spells : ["augury"], selection : ["augury"], firstCol : 'oncelr' }], spellChanges : { "augury" : { components : "", compMaterial : "", changes : "Using Omens and Portents, I can cast Augury once per long rest without expending a spell slot or requiring components." } } }, "subclassfeature1.1" : { name : "Thies That Bind", source : [["UA:WotM", 2]], minlevel : 1, description : desc([ "As an action, I can magically tie my fate to a creature or object I touch for 1 hour", "Unwilling creatures can make a Wisdom save to resist; It ends early if I do this again", "I know the direction to a bound target's location and the direction of its movement", "Once per turn, a spell I cast on the target using a spell slot gets +1d6 damage or healing" ]), action : [["action", ""]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature2" : { name : "Channel Divinity: Strands of Fate", source : [["UA:WotM", 3]], minlevel : 2, description : desc([ "As a bonus action, I can manipulate the strands of fate for 1 minute while concentrating", "As a reaction when a creature I see makes a check or attack, I can impose adv. or disadv." ]), action : [["bonus action", " (activate)"], ["reaction", " (if active)"]] }, "subclassfeature6" : { name : "Insightful Striking", source : [["UA:WotM", 3]], minlevel : 6, description : desc([ "As a bonus action, I can gain a brief vision of the defenses of a creature I see within 30 ft", "Until the end of my next turn, I gain one of the following effects:", " \u2022 I add 1d6 to my next attack roll against the target ", " \u2022 The target subtracts 1d6 from the next saving throw it makes against a spell I cast" ]), action : [["bonus action", ""]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }, "subclassfeature8" : { name : "Potent Spellcasting", source : [["UA:WotM", 3]], minlevel : 8, description : desc("I add my Wisdom modifier to the damage I deal with my cleric cantrips"), calcChanges : GenericClassFeatures["potent spellcasting"].calcChanges }, "subclassfeature17" : { name : "Visions of the Future", source : [["UA:WotM", 3]], minlevel : 17, description : desc(["Once per long rest, I can cast Foresight without a spell slot with a duration of 1 minute"]), usages : 1, recovery : "long rest", limfeaname : "Visions of the Future (Foresight)", spellcastingBonus : [{ name : "Visions of the Future", spells : ["foresight"], selection : ["foresight"], firstCol : 'oncelr' }], spellChanges : { "foresight" : { duration : "1 min", changes : "Using Visions of the Future, I can cast Foresight once per long rest without expending a spell slot; when I cast the spell in this way, the spell's duration is 1 minute for that casting." } } } } }); // Backgrounds, first those not reprinted exactly as in this UA BackgroundList["giant foundling-ua"] = { regExpSearch : /^(?=.*giant)(?=.*foundling).*$/i, name : "Giant Foundling", source : [["UA:WotM", 4]], skills : ["Intimidation", "Survival"], gold : 10, languageProfs : [2], equipleft : [ ["Backpack", "", 5], ["Small stone/sprig reminding of home", "", ""] ], equipright : [ ["Traveler's clothes", "", 4], ["Pouch (with coins)", "", 1] ], feature : "Strike of the Giants", trait : [ "What I lack in stature, I make up for with sheer spite.", "Sometimes size does matter, okay? If I see a beast bigger than me, I'm immediately running away.", "Crowded spaces make me uncomfortable. I'd much rather be in a wide-open field than a bustling tavern.", "I like being small. It helps me stay unnoticed\u2014and underestimated.", "Size is just half the story. Every avalanche begins as a single pebble.", "The world always feels too big, and I'm afraid I'll never find my place in it." ], extra : [ "Select an Origin Story", "Found as a baby" + (typePF ? "": " by nomadic giants"), "Rescued from mountain crag" + (typePF ? "": " by stone giants"), "Found as a child lost in a jungle" + (typePF ? "": " by a frost giant"), "Home/family killed by warring giants" ] }; BackgroundList["planar philosopher-ua"] = { regExpSearch : /^(?=.*planar)(?=.*philosopher).*$/i, name : "Planar Philosopher", source : [["UA:WotM", 4]], skills : ["Arcana", "Persuasion"], gold : 10, languageProfs : [2], equipright : [ ["Common clothes", "", 3], ["Pouch (with coins from different planes)", "", 1] ], feature : "Conviction", trait : [ "I don't venerate any gods; we can be as powerful or greater than them.", "Experience is everything, live in the moment.", "When things crumble, I find meaning in the ashes.", "Life thrives through order; I won't tolerate disruptions.", "When others make plans, the multiverse laughs and so do I.", "I know what's right, and no one will stand in my way." ], extra : [ "Select a Trinket", "Inscribed locket with image of mentor", "Bleached rat skull with glass eyes", "Torn parchment with half a puzzle", "Bracelet of twisted razorvine stems", "Fragment of verdigris bronze blade", "Smooth stone with holy symbols" ] }; BackgroundList["rune carver-ua"] = { regExpSearch : /^(?=.*rune)(?=.*carver).*$/i, name : "Rune Carver", source : [["UA:WotM", 5]], skills : ["History", "Perception"], gold : 10, languageProfs : ["Giant", 1], equipleft : [ ["Set of artisan's tools", "", ""], ["Small knife", "", 0.5], ["Whetstone", "", 1] ], equipright : [ ["Common clothes", "", 3], ["Pouch (with coins)", "", 1] ], feature : "Rune Carver Apprentice", trait : [ "Is it practical to learn an ancient language that is rarely used in everyday speech? No. But is it fun? Very.", "I learned one of my ancestors was a lauded rune carver whose story was lost to time. I seek to rekindle that legacy.", "The old, traditional markings of runecraft look so boring. Why not give your runes some flair?", "In my studies of runes, I strive to understand how great civilizations of the past fell, so that I may prevent it from happening to societies of the present.", "Life may be a whirlwind of chaos around me, but whenever I create my runes, I feel at peace.", "My brain struggles to process ink words written on paper, but the tactile feeling of carved runes makes my mind sing." ], extra : [ "Select a Rune Style", "Use fine metal needle to inscribe", "On small wooden figurines", "On glass beads in necklace/bracelet", "Stitched into the hems of clothing", "Carved on set of animal bones", "Drawn into candles" ] }; BackgroundFeatureList["rune carver apprentice"] = { description : "I've dedicated my life to studying the practice of runecraft. Whether I was personally taught by a master rune carver or learned by poring over engravings in ancient ruins, I understand how to tap into the supernatural power held within runes. Also, I gain the Rune Carver Apprentice feat.", source : [["UA:WotM", 5]], featsAdd: ["Rune Carver Apprentice"], }; // Then the backgrounds that haven't been altered in the book // [dupl_start] have been reprinted in Planescape: Adventures in the Multiverse or Bigby Presents: Glory of the Giants if (!BackgroundList["gate warden"]) { BackgroundList["gate warden"] = { regExpSearch : /^(?=.*gate)(?=.*warden).*$/i, name : "Gate Warden", source : [["P:AitM", 7], ["UA:WotM", 3]], skills : ["Persuasion", "Survival"], gold : 10, languageProfs : [["Any (Abyssal, Celestial, or Infernal recommended)", 2]], equipleft : [ ["Blank book", "", 5], ["Ink, 1 ounce bottle of", 1, ""], ["Ink pen or quill", "", ""], ["Ring of keys to unknown locks", "", ""] ], equipright : [ ["Traveler's clothes", "", 4], ["Pouch (with coins)", "", 1] ], feature : "Planar Infusion", trait : [ "Strange events and otherworldly creatures don't phase me.", "I think in terms of exchange; something for something, nothing for nothing.", "I speak with an unusual cadence.", "I pepper my speech with borrowed words or curses from planar languages.", "I've seen enough to know that you can't take anyone at face value, so I scrutinize everyone I deal with.", "I have a superstitious habit I picked up, such as touching iron when I'm nervous or arranging objects in a specific order." ], extra : [ "Select a Trinket", "Vial pendant with glowing honey", "Whispering lead ingot thumbprint", "Two chiming lodestone spheres", "Skin-safe smoldering pebble of coal", "Light up white feather", "Hard to remove chain-link ring" ] }; } if (!BackgroundFeatureList["planar infusion"]) { BackgroundFeatureList["planar infusion"] = { description : "I spent a good amount of time somewhere influenced by planar forces. I'm accustomed to experiences that would leave others reeling in terror or captivated by beauty, and I'm comfortable dealing with fiends and celestials. I know where to find free, modest lodging and food in the community I grew up in. Also, I gain the Scion of the Outer Planes feat.", source : [["P:AitM", 7], ["UA:WotM", 3]], featsAdd: ["Scion of the Outer Planes"], }; } if (!BackgroundFeatureList["strike of the giants"]) { BackgroundFeatureList["strike of the giants"] = { description : "I grew up among giants, even though I'm not one. Something about this environment ensured that I grew to a remarkable size and I have learned how to embody the titanic might of giants. I'm used to moving through a world much bigger than me, and that is reflected in my skills, attitude, and perspective on life. I gain the Strike of the Giants feat.", source : [["GotG", 13], ["UA:WotM", 4]], featsAdd: ["Strike of the Giants"], }; } if (!BackgroundFeatureList["conviction"]) { BackgroundFeatureList["conviction"] = { description : "I subscribe to a distinct philosophy that seeks to understand the nature of the planes or a hidden truth of the multiverse and spread my philosophy. I am part of a network of like-minded believers who provide me free, modest lodging and food at any of their holding or the homes of other faction members. Also, I gain the Scion of the Outer Planes feat.", source : [["P:AitM", 8], ["UA:WotM", 4]], featsAdd: ["Scion of the Outer Planes"], }; } // dupl_end // Feats FeatsList["cartomancer-ua"] = { name : "Cartomancer", source : [["UA:WotM", 6]], description : 'I can use a deck of cards as a spellcasting focus. When doing so, Prof Bonus per long rest I can add +1d4 to the damage of one target of a spell I cast. I know Prestidigitation and can also cast it to do stage magic, concealing its components. When I finish a long rest, I can store a spell into a card, see "Hidden Ace" notes.', descriptionFull : "You have learned to channel your magic through a deck of playing cards, granting you these benefits:"+ "\n " + toUni("Card Focus") + ". You can use a deck of cards as your spellcasting focus. When you use the deck as a focus to cast a spell that deals damage, roll a d4. You gain a bonus to one damage roll of the spell equal to the number rolled. This bonus applies to one creature of your choice that you can see damaged by the spell; you can use this benefit a number of times equal to your proficiency bonus, and you regain all expended uses of it when you finish a long rest."+ "\n " + toUni("Card Tricks") + ". You learn the prestidigitation cantrip and can use it to create illusions that duplicate the effects of stage magic. When you use prestidigitation in this way, you can conceal the verbal and somatic components of the spell as mundane conversation and card-handling."+ "\n " + toUni("Hidden Ace") + ". When you finish a long rest, you can choose one spell you know and imbue it into a card; the chosen spell must have a casting time of 1 action, and its level must be less than or equal to your proficiency bonus. While the card is imbued with the spell, you can use your bonus action to flourish the card and cast the spell within. The card then immediately loses its magic.", prerequisite : "4th-level; Sorcerer, Warlock, or Wizard Class", prereqeval : function (v) { return v.characterLevel >= 4 && (classes.known.wizard || classes.known.warlock || classes.known.sorcerer); }, extraLimitedFeatures : [{ name : "Cartomancer (+1d4 spell damage)", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }], action : [["bonus action", "Hidden Ace (use imbued card)"]], toNotesPage : [{ name : "Hidden Ace", page3notes : true, note : [ "Whenever I finish a long rest, I can imbue a spell I know into a card until I flourish the card", "The spell must have a casting time of 1 action and a level no more than my Prof Bonus", "As a bonus action, I can flourish the card to cast the stored spell, ousting it from the card" ] }] }; // Scion of the Outer Planes feat tree FeatsList["scion of the outer planes-ua"] = { name : "Scion of the Outer Planes", source : [["UA:WotM", 9]], description : "I am adept at navigating planar pathways and the strange realities of the outer planes. I can select a plane and gain resistance to a damage type and learn a cantrip associated with that plane. I can cast the cantrip without material components. I can choose Int, Wis, or Cha as my spellcasting ability for this.", descriptionFull : "You are influenced by and adept at navigating planar pathways and the strange realities of the Outer Planes."+ "\n Whether planar essence infuses you or you have extraplanar ancestry, your connection to a plane infuses you with the energies found there. Choose a type of plane listed in the table below. Your choice gives you resistance to a damage type and the ability to cast a cantrip, as specified in the table. You can cast this cantrip without material components, and your spellcasting ability for it is Intelligence, Wisdom, or Charisma (choose when you select this feat)."+ toUni("\n\nPlane\t\tResistance\tCantrip")+ "\nAstral\t\tPsychic\t\tMessage"+ "\nChaotic Outer\tNecrotic\t\tMinor Illusion"+ "\nEvil Outer \tNecrotic\t\tChill Touch"+ "\nGood Outer \tRadiant\t\tSacred Flame"+ "\nLawful Outer\tRadiant\t\tGuidance"+ "\nThe Outlands\tPsychic\t\tMage Hand", spellcastingAbility : [4,5,6], choices : ['Astral Plane (Psychic, Message)', 'Chaotic Outer Plane (Necrotic, Minor Illusion)', 'Evil Outer Plane (Necrotic, Chill Touch)', 'Good Outer Plane (Radiant, Sacred Flame)', 'Lawful Outer Plane (Radiant, Guidance)', 'The Outlands (Psychic, Mage Hand)'], 'astral plane (psychic, message)' : { name : "Scion of the Outer Planes (Astral Plane)", description : "I am adept at navigating planar pathways and the strange realities of the outer planes. My connection to the astral plane gives me resistance to psychic damage and I know the Message cantrip, which I can cast without material components. I can choose Int, Wis, or Cha as my spellcasting ability for this.", spellcastingAbility : [4,5,6], allowUpCasting : true, spellcastingBonus : [{ name : "Astral Plane", spell : ["message"], selection : ["message"], firstCol : "atwill" }], dmgres : ["Psychic"], spellChanges : { "message" : { components : "V,S", compMaterial : "", changes : "Using Scion of the Outer Planes, I can cast Message without material components." } } }, 'chaotic outer plane (necrotic, minor illusion)' : { name : "Scion of the Outer Planes (Chaotic Outer Plane)", description : "I am adept at navigating planar pathways and the strange realities of the outer planes. My connection to a chaotic outer plane gives me resistance to necrotic damage and I know the Minor Illusion cantrip, which requires no material components. I can choose Int, Wis, or Cha as my spellcasting ability for this.", spellcastingAbility : [4,5,6], allowUpCasting : true, spellcastingBonus : [{ name : "Chaotic Outer Plane", spells : ["minor illusion"], selection : ["minor illusion"], firstCol : "atwill" }], dmgres : ["Necrotic"], spellChanges : { "minor illusion" : { components : "S", compMaterial : "", changes : "Using Scion of the Outer Planes, I can cast Minor Illusion without material components." } } }, 'evil outer plane (necrotic, chill touch)' : { name : "Scion of the Outer Planes (Evil Outer Plane)", description : "I am adept at navigating planar pathways and the strange realities of the outer planes. I'm infused with or have ancestry from an evil outer plane. This connection gives me resistance to necrotic damage and I know the Chill Touch cantrip. I can choose Int, Wis, or Cha as my spellcasting ability for this.", spellcastingAbility : [4,5,6], allowUpCasting : true, spellcastingBonus : [{ name : "Evil Outer Plane", spells : ["chill touch"], selection : ["chill touch"], firstCol : "atwill" }], dmgres : ["Necrotic"] }, 'good outer plane (radiant, sacred flame)' : { name : "Scion of the Outer Planes (Good Outer Plane)", description : "I am adept at navigating planar pathways and the strange realities of the outer planes. I'm infused with or have ancestry from an good outer plane. This connection gives me resistance to radiant damage and I know the Sacred Flame cantrip. I can choose Int, Wis, or Cha as my spellcasting ability for this.", spellcastingAbility : [4,5,6], allowUpCasting : true, spellcastingBonus : [{ name : "Good Outer Plane", spells : ["sacred flame"], selection : ["sacred flame"], firstCol : "atwill" }], dmgres : ["Radiant"] }, 'lawful outer plane (radiant, guidance)' : { name : "Scion of the Outer Planes (Lawful Outer Plane)", description : "I am adept at navigating planar pathways and the strange realities of the outer planes. I'm infused with or have ancestry from an lawful outer plane. This connection gives me resistance to radiant damage and I know the Guidance cantrip. I can choose Int, Wis, or Cha as my spellcasting ability for this.", spellcastingAbility : [4,5,6], allowUpCasting : true, spellcastingBonus : [{ name : "Lawful Outer Plane", spells : ["guidance"], selection : ["guidance"], firstCol : "atwill" }], dmgres : ["Radiant"] }, 'the outlands (psychic, mage hand)' : { name : "Scion of the Outer Planes (The Outlands)", description : "I am adept at navigating planar pathways and the strange realities of the outer planes. I'm infused with or have ancestry from a plane of the outlands. This gives me resistance to psychic damage and I know the Mage Hand cantrip. I can choose Int, Wis, or Cha as my spellcasting ability for this.", spellcastingAbility : [4,5,6], allowUpCasting : true, spellcastingBonus : [{ name : "The Outlands", spells : ["mage hand"], selection : ["mage hand"], firstCol : "atwill" }], dmgres : ["Psychic"] } }; FeatsList["agent of order-ua"] = { name : "Agent of Order", source : [["UA:WotM", 6]], description : "Once per turn when I damage a creature I see within 60 ft, I can deal +1d8 force damage to it, and it must succeed on a Wis save (DC 8 + Prof Bonus + the modifier of the ability score increased by this feat) or be restrained until my next turn starts. I can do this a number of times equal to my Prof Bonus per long rest.", descriptionFull : "You can channel cosmic forces of order that lock the multiverse into patterns. Your actions are your own to choose, but these forces grant you the following benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase an ability score of your choice by 1, to a maximum of 20."+ "\n " + toUni("Stasis Strike") + ". Once per turn when you damage a creature you can see within 60 feet of yourself, you can deal an extra 1d8 force damage to the target, and it must succeed on a Wisdom saving throw (DC equal to 8 + your proficiency bonus + the modifier of the ability score increased by this feat) or be restrained by spectral bindings until the start of your next turn. These bindings manifest as chains, gears, encasing stone, or some other symbol of stasis. You can use this benefit a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th-level, Scion of the Outer Planes (Lawful Outer Plane) feat", prereqeval : function(v) { var iParentFeat = CurrentFeats.known.indexOf("scion of the outer planes-ua"); return v.characterLevel >= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'lawful outer plane (radiant, guidance)'; }, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", choices : ["Strength", "Dexterity", "Constitution", "Intelligence", "Wisdom", "Charisma"], "strength" : { calculate : "event.value = 'Once per turn when I damage a creature I see within 60 ft, I can deal +1d8 force damage to it, and it must succeed on a Wis save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Str Mod'))) + ' (8 + Prof Bonus + Str mod) or be restrained until my next turn starts. I can do this a number of times equal to my Prof Bonus per long rest. [+1 Strength]';", scores : [1, 0, 0, 0, 0, 0] }, "dexterity" : { calculate : "event.value = 'Once per turn when I damage a creature I see within 60 ft, I can deal +1d8 force damage to it, and it must succeed on a Wis save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Dex Mod'))) + ' (8 + Prof Bonus + Dex mod) or be restrained until my next turn starts. I can do this a number of times equal to my Prof Bonus per long rest. [+1 Dexterity]';", scores : [0, 1, 0, 0, 0, 0] }, "constitution" : { calculate : "event.value = 'Once per turn when I damage a creature I see within 60 ft, I can deal +1d8 force damage to it, and it must succeed on a Wis save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Con Mod'))) + ' (8 + Prof Bonus + Con mod) or be restrained until my next turn starts. I can do this a number of times equal to my Prof Bonus per long rest. [+1 Constitution]';", scores : [0, 0, 1, 0, 0, 0] }, "intelligence" : { calculate : "event.value = 'Once per turn when I damage a creature I see within 60 ft, I can deal +1d8 force damage to it, and it must succeed on a Wis save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Int Mod'))) + ' (8 + Prof Bonus + Int mod) or be restrained until my next turn starts. I can do this a number of times equal to my Prof Bonus per long rest. [+1 Intelligence]';", scores : [0, 0, 0, 1, 0, 0] }, "wisdom" : { calculate : "event.value = 'Once per turn when I damage a creature I see within 60 ft, I can deal +1d8 force damage to it, and it must succeed on a Wis save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Wis Mod'))) + ' (8 + Prof Bonus + Wis mod) or be restrained until my next turn starts. I can do this a number of times equal to my Prof Bonus per long rest. [+1 Wisdom]';", scores : [0, 0, 0, 0, 1, 0] }, "charisma" : { calculate : "event.value = 'Once per turn when I damage a creature I see within 60 ft, I can deal +1d8 force damage to it, and it must succeed on a Wis save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Cha Mod'))) + ' (8 + Prof Bonus + Cha mod) or be restrained until my next turn starts. I can do this a number of times equal to my Prof Bonus per long rest. [+1 Charisma]';", scores : [0, 0, 0, 0, 0, 1] } }; FeatsList["baleful scion-ua"] = { name : "Baleful Scion", source : [["UA:WotM", 6]], description : "Once per turn, when I hit a creature with a melee weapon attack, I can also deal 1d6 + my Proficiency Bonus necrotic damage to it. I then regain a number of hit points equal to this necrotic damage dealt. I can do this a number of times equal to my Proficiency Bonus per long rest. [+1 to any one ability score]", descriptionFull : "You can channel cosmic forces of evil that cause pain but invigorate your being. You can choose your own actions despite this malign connection. You gain the following benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase an ability score of your choice by 1, to a maximum of 20."+ "\n " + toUni("Life-Draining Grasp") + ". Once per turn, when you hit a creature with a melee weapon attack, you can also deal necrotic damage to it. The damage equals 1d6 + your proficiency bonus, and you regain a number of hit points equal to this necrotic damage dealt. You can use this feature a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th-level, Scion of the Outer Planes (Evil Outer Plane) feat", prereqeval : function(v) { var iParentFeat = CurrentFeats.known.indexOf("scion of the outer planes-ua"); return v.characterLevel >= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'evil outer plane (necrotic, chill touch)'; }, scorestxt : "+1 to one ability score of your choice", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest" }; FeatsList["cohort of chaos-ua"] = { name : "Cohort of Chaos", source : [["UA:WotM", 6]], description : "When I roll a 1 or a 20 on an attack roll or save, a the magic of chaos flares up and I roll on the Chaotic Flare table to determine what happens (see notes for table). As a bonus action, my Proficiency Bonus per long rest, I can force a flare to happen. [+1 to any one ability score]", descriptionFull : "You can channel the cosmic forces of chaos that drive the multiverse toward both freedom and disarray. Your actions are still yours to choose, but you gain these benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase an ability score of your choice by 1, to a maximum of 20."+ "\n " + toUni("Chaotic Flare") + ". When you roll a 1 or a 20 on an attack roll or a saving throw, the magic of chaos flows through you. Roll on the table below to determine what happens. A flare lasts until the end of your next turn, and a new flare can't occur until after the first flare ends."+ toUni("\n\nd4\tFlare")+ "\n 1\tDisruption Field: Waves of energy ripple in a 10-foot sphere centered on you. Every creature other than you that starts its turn in that area, or that moves into that area for the first time on a turn, takes 1d8 force damage."+ "\n 2\tBattle Fury: A creature of your choice that you can see is filled with reckless fury. The creature has advantage on attack rolls and disadvantage on ability checks."+ "\n 3\tUnbound: When you move, you can use some or all of your walking speed to teleport once, along with any equipment you're wearing or carrying, up to the distance used to an unoccupied space that you can see."+ "\n 4\tWailing Winds: Howling winds swirl around you in a 60-foot radius. You and any creature in that radius has disadvantage on Wisdom saving throws."+ "\n\n You can also forcibly release a chaotic flare as a bonus action, rolling on the table as normal to determine the effects. You can use this bonus action a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th-level, Scion of the Outer Planes (Chaotic Outer Plane) feat", prereqeval : function(v) { var iParentFeat = CurrentFeats.known.indexOf("scion of the outer planes-ua"); return v.characterLevel >= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'chaotic outer plane (necrotic, minor illusion)'; }, scorestxt : "+1 to one ability score of your choice", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", additional : "force flare", action : [["bonus action", " (force flare)"]], toNotesPage : [{ name : "Chaotic Flare Table", note : [ "When I roll a 1 or a 20 on an attack roll or a saving throw, the magic of chaos flows through me. I roll on the table below to determine what happens. A flare lasts until the end of my next turn, and a new flare can't occur until after the first flare ends.", "As a bonus action, I can forcibly release a chaotic flare, rolling on the table as normal to determine the effects. I can use this bonus action a number of times equal to my proficiency bonus, and I regain all expended uses when you finish a long rest.", "\n d4 Flare", "1 Disruption Field: Waves of energy ripple in a 10-ft sphere centered on me. Every creature other than me that starts its turn in that area, or that moves into that area for the first time on a turn, takes 1d8 force damage.", "2 Battle Fury: A creature of my choice that I can see is filled with reckless fury. The creature has advantage on attack rolls and disadvantage on ability checks.", "3 Unbound: When I move, I can use some or all of my walking speed to teleport once, along with any equipment I'm wearing or carrying, up to the distance used to an unoccupied space that I can see.", "4 Wailing Winds: Howling winds swirl around me in a 60-ft radius. I and any creature in that radius have disadvantage on Wisdom saving throws." ] }] }; FeatsList["outlands envoy-ua"] = { name : "Outlands Envoy", source : [["UA:WotM", 7]], description : "I can cast Misty Step and Tongues each once per long rest without requiring a spell slot or material components. I can also cast them using a spell slot as normal. My spellcasting ability for these spells is the same as the one for the Scion of the Outer Planes feat. [+1 to any one ability score]", descriptionFull : "You have spent significant time in Sigil or elsewhere in the Outlands, the crossroads of the multiverse. Being steeped in converging planar energies grants you these benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase an ability score of your choice by 1, to a maximum of 20."+ "\n " + toUni("Crossroads Emissary") + ". You learn the misty step and tongues spells. You can cast each spell once using this feat without a spell slot, and you must finish a long rest before you can cast that spell in this way again. When you cast tongues using this feat, you require no material components. You can also cast these spells using spell slots you have of the appropriate level. The spell's spellcasting ability is the one chosen when you gained the Scion of the Outer Planes feat.", prerequisite : "4th-level, Scion of the Outer Planes feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("scion of the outer planes-ua") !== -1; }, scorestxt : "+1 to one ability score of your choice", spellcastingAbility : "scion of the outer planes-ua", spellcastingBonus : [{ name : "Crossroads Emissary", spells : ["misty step", "tongues"], selection : ["misty step", "tongues"], firstCol : "oncelr+markedbox", times : 2 }], spellChanges : { "tongues" : { components : SpellsList.tongues.components.replace("M", "M*"), compMaterial : "When using a spell slot: "+SpellsList.tongues.compMaterial, changes : "Using Outlands Envoy, I can cast Tongues once per long rest without expending a spell slot or requiring material components." } } }; FeatsList["planar wanderer-ua"] = { name : "Planar Wanderer", source : [["UA:WotM", 7]], description : "After each long rest, I can gain acid, cold, or fire resistance, that lasts until my next long rest ends. I know the direction to the last portal I used while on the same plane as it. As an action, I can try to open or close a portal (portal cracker). As an action once per long rest, I can detect portals (portal sense). See notes.", descriptionFull : "You can draw on the forces of the multiverse to survive cosmic extremes and to traverse its infinite realms. You gain these benefits:"+ "\n " + toUni("Planar Adaptation") + ". When you finish a long rest, you gain resistance to either acid, cold, or fire damage (your choice) until you finish your next long rest."+ "\n " + toUni("Portal Cracker") + ". Your experience with portals allows you to operate them without the proper portal key. As an action, you can concentrate on a portal you're aware of that is within 5 feet of you and make a DC 20 Wisdom (Survival) check. On a failure, you take 3d8 force damage and you can't use this feature on that portal again until you finish a long rest. On a success, you can force the portal open or closed for 1 hour. For that duration, a portal closed in this way doesn't respond to its portal key unless a creature employing the key succeeds on a DC 20 Intelligence (Arcana) check as an action."+ "\n " + toUni("Portal Sense") + ". You know the direction to the last planar portal you used while you and the portal are on the same plane. Moreover, as an action, you can detect the location of any portals within 30 feet of you that aren't behind total cover. Once you detect a portal with this action, you can't use the action again until you finish a long rest.", prerequisite : "4th-level, Scion of the Outer Planes feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("scion of the outer planes-ua") !== -1; }, dmgres : ["Acid/Cold/Fire"], action : [["action", " (Portal Cracker)"], ["action", " (Portal Sense)"]], usages : 1, recovery : "long rest", additional : "Portal Sense", toNotesPage : [{ name : "Portal Cracker", note : [ "My experience with portals allows me to operate them without the proper portal key.", "As an action, I can concentrate on a portal I'm aware of that is within 5 ft of me and make a DC 20 Wisdom (Survival) check.", "On a failure, I take 3d8 force damage and I can't use this feature on that portal again until I finish a long rest.", "On a success, I can force the portal open or closed for 1 hour. For that duration, a portal closed in this way doesn't respond to its portal key unless a creature employing the key succeeds on a DC 20 Intelligence (Arcana) check as an action." ] }, { name : "Portal Sense", additional : "1\xD7 per long rest", note : [ "I know the direction to the last planar portal I used while I and the portal are on the same plane.", "As an action, I can detect the location of any portals within 30 ft of me that aren't behind total cover.", "Once I detect a portal with this action, I can't use the action again until I finish a long rest." ], amendTo : "Portal Cracker" }] }; FeatsList["righteous heritor-ua"] = { name : "Righteous Heritor", source : [["UA:WotM", 8]], description : "As a reaction when I or a creature I can see within 30 ft takes damage, I can reduce the damage taken by 1d10 + my Proficiency Bonus. I can do this a number of times equal to my Proficiency Bonus per long rest. [+1 to any one ability score]", descriptionFull : "You can channel the cosmic forces of good that foster serenity and fellowship. You are still free to choose your own actions, but gain these benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase an ability score of your choice by 1, to a maximum of 20."+ "\n " + toUni("Soothe Pain") + ". When you or a creature you can see within 30 feet of you takes damage, you can use your reaction to dull its suffering and reduce the damage it takes by 1d10 + your proficiency bonus. You can use this benefit a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th-level, Scion of the Outer Planes (Good Outer Plane) feat", prereqeval : function(v) { var iParentFeat = CurrentFeats.known.indexOf("scion of the outer planes-ua"); return v.characterLevel >= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'good outer plane (radiant, sacred flame)'; }, scorestxt : "+1 to one ability score of your choice", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", action : [["reaction", ""]] }; // Strike of the Giants feat tree FeatsList["strike of the giants-ua"] = { name : "Strike of the Giants", source : [["UA:WotM", 9]], description : "As a bonus action, I can call on the power of my giant magic to imbue my attacks with additional power. The next time I hit a target with a melee or thrown weapon attack within the next minute, the attack has an additional effect depending on the origin of my giant magic (hill, stone, frost, fire, cloud or storm).", descriptionFull : "You have absorbed primeval magic that gives you an echo of the might of giants. Choose one of the kinds of giants listed below. As a bonus action, you can call on the power of your giant magic to imbue your attacks with additional power. The next time you hit a target with a melee or thrown weapon attack within the next minute, the attack has an additional effect depending on the origin of your giant magic:"+ desc([ toUni("Hill Giant") + ". The target takes an extra 1d6 damage of the weapon's type. If the target is a creature, it must succeed on a Strength saving throw or be knocked prone.", toUni("Stone Giant") + ". The target takes an extra 1d6 force damage. If the target is a creature, it must succeed on a Strength saving throw or be pushed 10 feet away from you in a straight line.", toUni("Frost Giant") + ". The target takes an extra 1d6 cold damage. If the target is a creature, it must succeed on a Constitution saving throw, or its speed is reduced to 0 until the start of your next turn.", toUni("Fire Giant") + ". The target takes an extra 1d8 fire damage.", toUni("Cloud Giant") + ". The target takes an extra 1d4 thunder damage. If the target is a creature, it must succeed on a Wisdom saving throw, or you become invisible to it until the start of your next turn.", toUni("Storm Giant") + ". The target takes an extra 1d6 lightning damage. If the target is a creature, it must succeed on a Constitution saving throw, or it has disadvantage on attack rolls until the start of your next turn.\n", "The saving throw DC for these effects equals 8 + your proficiency bonus + your Strength or Constitution modifier.", "You can use this bonus action a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest." ]), usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", action : [["bonus action", ""]], choices : ["Hill Giant", "Stone Giant", "Frost Giant", "Fire Giant", "Cloud Giant", "Storm Giant"], "hill giant" : { calculate : "event.value = 'As a bonus action my Prof Bonus per long rest, I can call on the might of hill giants. The next time I hit with a melee or thrown weapon attack within the next minute, it deals +1d6 damage and if the target is a creature, it must make a Strength save DC ' + (8 + Number(How('Proficiency Bonus')) + Math.max(Number(What('Str Mod')), Number(What('Con Mod')))) + ' (8 + Prof Bonus + Str/Con mod) or be knocked prone.';" }, "stone giant" : { calculate : "event.value = 'As a bonus action my Prof Bonus per long rest, I can call on the might of stone giants. My next hit in the next minute with a melee or thrown weapon attack deals +1d6 force damage and the target must make a Strength save DC ' + (8 + Number(How('Proficiency Bonus')) + Math.max(Number(What('Str Mod')), Number(What('Con Mod')))) + ' (8 + Prof Bonus + Str/Con mod) or be pushed 10 ft away from me in a straight line.';" }, "frost giant" : { calculate : "event.value = 'As a bonus action my Prof Bonus per long rest, I can call on the might of frost giants. The next hit with my melee or thrown weapon attack within 1 minute deals +1d6 cold damage, and if the target is a creature, it must make a Con save DC ' + (8 + Number(How('Proficiency Bonus')) + Math.max(Number(What('Str Mod')), Number(What('Con Mod')))) + ' (8 + Prof Bonus + Str/Con mod) or its speed is 0 until my next turn starts.';" }, "fire giant" : { description : "I have absorbed primeval magic that gives me an echo of the might of fire giants. As a bonus action, I can call on this power and the next time I hit a target with a melee or thrown weapon attack within the next minute, that attack deals +1d8 fire damage. I can do this my Proficiency Bonus per long rest." }, "cloud giant" : { calculate : "event.value = 'As a bonus action my Prof Bonus per long rest, I can call on the might of cloud giants. My next hit within 1 minute with a melee or thrown weapon attack deals +1d4 thunder damage, and the target must make a Wisdom save DC ' + (8 + Number(How('Proficiency Bonus')) + Math.max(Number(What('Str Mod')), Number(What('Con Mod')))) + ' (8 + Prof Bonus + Str/Con mod) or I become invisible to it until my next turn starts.';" }, "storm giant" : { calculate : "event.value = 'As a bonus action my Prof Bonus per long rest, I can call on the might of storm giants. My next hit within 1 minute with a melee or thrown weapon attack deals +1d6 lightning damage, and the target must make a Con save DC ' + (8 + Number(How('Proficiency Bonus')) + Math.max(Number(What('Str Mod')), Number(What('Con Mod')))) + ' (8 + Prof Bonus + Str/Con mod) or it has disadv. on attack rolls until my next turn starts.';" } }; FeatsList["ember of the fire giant-ua2"] = { name : "Fury of the Fire Giant", source : [["UA:WotM", 7]], description : "I have fire resistance. My Prof Bonus per long rest, I can replace one attack of an Attack action on my turn with Searing Ignition: Chosen creatures I can see within 15 ft take 1d8+Prof Bonus fire damage & are blinded until my next turn starts. Dex save (8 + Prof B. + Str/Con/Wis mod) for half damage & not blinded.", descriptionFull : "You've manifested the fiery combat emblematic of fire giants, granting you the following benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase your Strength, Constitution, or Wisdom score by 1, to a maximum of 20."+ "\n " + toUni("Born of Flame") + ". You have resistance to fire damage."+ "\n " + toUni("Searing Ignition") + ". When you take the Attack action on your turn, you can replace a single attack with a magical burst of flame. Each creature of your choice within 15 feet of you that can see you must make a Dexterity saving throw (DC equals 8 + your proficiency bonus + the modifier of the ability increased by this feat). On a failed save, a creature takes fire damage equal to 1d8 + your proficiency bonus, and it is blinded until the start of your next turn. On a successful save, the creature takes half as much damage and isn't blinded. You can use your Searing Ignition a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th-level, Strike of the Giants (Fire Giant) feat", prereqeval : function(v) { var iParentFeat = CurrentFeats.known.indexOf("strike of the giants-ua"); return v.characterLevel >= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'fire giant'; }, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", dmgres : ["Fire"], choices : ["Strength", "Constitution", "Wisdom"], "strength" : { calculate : "event.value = 'I have fire resistance. My Prof Bonus per long rest, I can replace one attack of an Attack action on my turn with Searing Ignition: Chosen creatures I can see within 15 ft take 1d8+' + How('Proficiency Bonus') + ' (Prof B.) fire damage \u0026 are blinded until my next turn starts. Dex save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Str Mod'))) + ' (8 + Prof B. + Str mod) for half damage \u0026 not blinded. [+1 Str]';", scores : [1, 0, 0, 0, 0, 0], weaponOptions : [{ regExpSearch : /^(?=.*searing)(?=.*ignition).*$/i, name : "Searing Ignition", source : [["UA:WotM", 7]], ability : 1, type : "Spell", damage : [1, 8, "fire"], range : "15-ft radius", description : "Hits all of my choice in range; Dex save for half damage; Failed - blinded until my next turn starts", dc : true, abilitytodamage : false, modifiers : ["", "Prof"], selectNow : true }] }, "constitution" : { calculate : "event.value = 'I have fire resistance. My Prof Bonus per long rest, I can replace one attack of an Attack action on my turn with Searing Ignition: Chosen creatures I can see within 15 ft take 1d8+' + How('Proficiency Bonus') + ' (Prof B.) fire damage \u0026 are blinded until my next turn starts. Dex save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Con Mod'))) + ' (8 + Prof B.+ Con mod) for half damage \u0026 not blinded. [+1 Con]';", scores : [0, 0, 1, 0, 0, 0], weaponOptions : [{ regExpSearch : /^(?=.*searing)(?=.*ignition).*$/i, name : "Searing Ignition", source : [["UA:WotM", 7]], ability : 3, type : "Spell", damage : [1, 8, "fire"], range : "15-ft radius", description : "Hits all of my choice in range; Dex save for half damage; Failed - blinded until my next turn starts", dc : true, abilitytodamage : false, modifiers : ["", "Prof"], selectNow : true }] }, "wisdom" : { calculate : "event.value = 'I have fire resistance. My Prof Bonus per long rest, I can replace one attack of an Attack action on my turn with Searing Ignition: Chosen creatures I can see within 15 ft take 1d8+' + How('Proficiency Bonus') + ' (Prof B.) fire damage \u0026 are blinded until my next turn starts. Dex save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Wis Mod'))) + ' (8 + Prof B. + Wis mod) for half damage \u0026 not blinded. [+1 Wis]';", scores : [0, 0, 0, 0, 1, 0], weaponOptions : [{ regExpSearch : /^(?=.*searing)(?=.*ignition).*$/i, name : "Searing Ignition", source : [["UA:WotM", 7]], ability : 5, type : "Spell", damage : [1, 8, "fire"], range : "15-ft radius", description : "Hits all of my choice in range; Dex save for half damage; Failed - blinded until my next turn starts", dc : true, abilitytodamage : false, modifiers : ["", "Prof"], selectNow : true }] } }; FeatsList["fury of the frost giant-ua2"] = { name : "Fury of the Frost Giant", source : [["UA:WotM", 7]], description : "I have cold resistance. As a reaction my Prof Bonus per long rest, when a creature I can see within 30 ft hits and deals damage with an attack, I can have it make a Con save (DC 8 + Prof B. + Str/Con/Wis mod) or take 1d8 + Prof Bonus cold damage and have its speed reduced by half until my next turn ends.", descriptionFull : "You've manifested the icy might emblematic of frost giants, granting you the following benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase your Strength, Constitution, or Wisdom score by 1, to a maximum of 20."+ "\n " + toUni("Born of Ice") + ". You have resistance to cold damage."+ "\n " + toUni("Frigid Retaliation") + ". Immediately after a creature you can see within 30 feet of you hits you with an attack roll and deals damage, you can use your reaction to retaliate with a conjured blast of ice. The creature must make a Constitution saving throw (DC equals 8 + your proficiency bonus + the modifier of the ability increased by this feat). On a failed save, it takes 1d8 + your proficiency bonus cold damage, and its speed is halved until the end of its next turn. You can use this reaction a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th-level, Strike of the Giants (Frost Giant) feat", prereqeval : function(v) { var iParentFeat = CurrentFeats.known.indexOf("strike of the giants-ua"); return v.characterLevel >= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'frost giant'; }, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", dmgres : ["Cold"], action : [["reaction", ""]], choices : ["Strength", "Constitution", "Wisdom"], "strength" : { calculate : "event.value = 'I have cold resistance. As a reaction my Prof Bonus per long rest, when a creature I can see within 30 ft hits and deals damage with an attack, I can have it make a Constitution save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Str Mod'))) + ' (8 + Prof B. + Str mod) or take 1d8+' + How('Proficiency Bonus') + ' (Prof Bonus) cold damage and have its speed reduced by half until my next turn ends. [+1 Str]';", scores : [1, 0, 0, 0, 0, 0] }, "constitution" : { calculate : "event.value = 'I have cold resistance. As a reaction my Prof Bonus per long rest, when a creature I can see within 30 ft hits and deals damage with an attack, I can have it make a Constitution save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Con Mod'))) + ' (8 + Prof B. + Con mod) or take 1d8+' + How('Proficiency Bonus') + ' (Prof B.) cold damage and have its speed reduced by half until my next turn ends. [+1 Con]';", scores : [0, 0, 1, 0, 0, 0] }, "wisdom" : { calculate : "event.value = 'I have cold resistance. As a reaction my Prof Bonus per long rest, when a creature I can see within 30 ft hits and deals damage with an attack, I can have it make a Constitution save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Wis Mod'))) + ' (8 + Prof B. + Wis mod) or take 1d8+' + How('Proficiency Bonus') + ' (Prof Bonus) cold damage and have its speed reduced by half until my next turn ends. [+1 Wis]';", scores : [0, 0, 0, 0, 1, 0] } }; FeatsList["guile of the cloud giant-ua2"] = { name : "Guile of the Cloud Giant", source : [["UA:WotM", 7]], description : "As a reaction when a creature I can see hits me with an attack roll, I can give myself resistance to that attack's damage. I then teleport to an unoccupied space that I can see within 30 ft. I can do this a number of times equal to half my Proficiency Bonus (rounded up) per long rest. [+1 Dex, Con, or Cha]", descriptionFull : "You've manifested the airy speech and magic emblematic of cloud giants, granting you the following benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase your Dexterity, Constitution, or Charisma score by 1, to a maximum of 20."+ "\n " + toUni("Cloudy Escape") + ". When a creature you can see hits you with an attack roll, you can use your reaction to give yourself resistance to that attack's damage. You then teleport to an unoccupied space that you can see within 30 feet of yourself. You can use this reaction a number of times equal to half your proficiency bonus (rounded up), and you regain all expended uses when you finish a long rest.", prerequisite : "4th-level, Strike of the Giants (Cloud Giant) feat", prereqeval : function(v) { var iParentFeat = CurrentFeats.known.indexOf("strike of the giants-ua"); return v.characterLevel >= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'cloud giant'; }, scorestxt : "+1 Dexterity, Constitution, or Charisma", usages : "Half proficiency bonus (rounded up) per ", usagescalc : "event.value = Math.ceil(Number(How('Proficiency Bonus'))/2);", recovery : "long rest", action : [["reaction", ""]] }; FeatsList["keenness of the stone giant-ua2"] = { name : "Keenness of the Stone Giant", source : [["UA:WotM", 8]], description : "I gain +60 ft darkvision. As a bonus action my Prof Bonus per long rest, I can imbue a rock with magic until I finish a long rest or hit with it. I can use it as a proficient thrown weapon, 60/180 ft, 1d10 bludgeoning damage. Target hit must make a Str save DC 10 (8 + Prof B. + Str/Con/Wis mod) or be knocked prone.", descriptionFull : "You've manifested the physical talents emblematic of stone giants, granting you the following benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase your Strength, Constitution, or Wisdom score by 1, to a maximum of 20."+ "\n " + toUni("Stone Throw") + ". As a bonus action, you can touch a rock that can fit in the palm of your hand and imbue it with magic. While the rock is imbued with magic and you are wielding it, the rock is a magic ranged weapon with which you're proficient, and it has the thrown property with a normal range of 60 feet and a long range of 180 feet. On a hit, the rock deals 1d10 bludgeoning damage, and if the target is a creature, it must succeed on a Strength saving throw (DC equals 8 + your proficiency bonus + the modifier of the ability increased by this feat) or be knocked prone. The magic remains in the rock until you hit with it or finish a long rest. You can imbue a number of rocks equal to your proficiency bonus with this bonus action, and you regain all expended uses when you finish a long rest."+ "\n " + toUni("Cavernous Sight") + ". You gain darkvision out to a range of 60 feet. If you already have darkvision from another source, its range increases by 60 feet.", prerequisite : "4th-level, Strike of the Giants (Stone Giant) feat", prereqeval : function(v) { var iParentFeat = CurrentFeats.known.indexOf("strike of the giants-ua"); return v.characterLevel >= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'stone giant'; }, vision : [["Darkvision", "fixed 60"], ["Darkvision", "+60"]], usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", additional : "Imbue Stone", action : [["bonus action", " (Imbue Stone)"]], choices : ["Strength", "Constitution", "Wisdom"], "strength" : { calculate : "event.value = 'I gain +60 ft darkvision. As a bonus action my Prof Bonus per long rest, I can imbue a rock with magic until I finish a long rest or hit with it. I can use it as a proficient thrown weapon, ' + (What('Unit System') === 'metric' ? '18/54 m' : '60/180 ft') + ', 1d10 bludgeoning damage. Target hit must make a Str save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Str Mod'))) + ' (8 + Prof B. + Str mod) or be knocked prone. [+1 Str]';", scores : [1, 0, 0, 0, 0, 0], weaponOptions : [{ regExpSearch : /^(?=.*stone)(?=.*giant)(?=.*throw).*$/i, name : "Stone Giant's Stone Throw", source : [["UA:WotM", 8]], ability : 1, type : "AlwaysProf", damage : [1, 10, "bludgeoning"], range : "60/180 ft", description : "Thrown; On hit: Str save (DC 8 + To Hit) or knocked prone; Counts as magical", abilitytodamage : true, isMagicWeapon : true, selectNow : true }] }, "constitution" : { calculate : "event.value = 'I gain +60 ft darkvision. As a bonus action my Prof Bonus per long rest, I can imbue a rock with magic until I finish a long rest or hit with it. I can use it as a proficient thrown weapon, ' + (What('Unit System') === 'metric' ? '18/54 m' : '60/180 ft') + ', 1d10 bludgeoning damage. Target hit must make a Str save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Con Mod'))) + ' (8 + Prof B. + Con mod) or be knocked prone. [+1 Con]';", scores : [0, 0, 1, 0, 0, 0], weaponOptions : [{ regExpSearch : /^(?=.*stone)(?=.*giant)(?=.*throw).*$/i, name : "Stone Giant's Stone Throw", source : [["UA:WotM", 8]], ability : 3, type : "AlwaysProf", damage : [1, 10, "bludgeoning"], range : "60/180 ft", description : "Thrown; On hit: Str save (DC 8 + To Hit) or knocked prone; Counts as magical", abilitytodamage : true, selectNow : true }] }, "wisdom" : { calculate : "event.value = 'I gain +60 ft darkvision. As a bonus action my Prof Bonus per long rest, I can imbue a rock with magic until I finish a long rest or hit with it. I can use it as a proficient thrown weapon, ' + (What('Unit System') === 'metric' ? '18/54 m' : '60/180 ft') + ', 1d10 bludgeoning damage. Target hit must make a Str save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Wis Mod'))) + ' (8 + Prof B. + Wis mod) or be knocked prone. [+1 Wis]';", scores : [0, 0, 0, 0, 1, 0], weaponOptions : [{ regExpSearch : /^(?=.*stone)(?=.*giant)(?=.*throw).*$/i, name : "Stone Giant's Stone Throw", source : [["UA:WotM", 8]], ability : 5, type : "AlwaysProf", damage : [1, 10, "bludgeoning"], range : "60/180 ft", description : "Thrown; On hit: Str save (DC 8 + To Hit) or knocked prone; Counts as magical", abilitytodamage : true, selectNow : true }] } }; FeatsList["soul of the storm giant-ua2"] = { name : "Soul of the Storm Giant", source : [["UA:WotM", 9]], description : "As an action my Prof Bonus per long rest, I can give myself a 10-ft radius magical aura until my next turn starts. This imposes disadv. on attacks against me and when a creature starts its turn within, I can have it make a Str save (DC 8 + Prof Bonus + Int/Wis/Cha mod) or halve its speed until my next turn starts.", descriptionFull : "You've manifested divination abilities and tempest magic emblematic of storm giants, granting you the following benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase your Intelligence, Wisdom, or Charisma score by 1, to a maximum of 20."+ "\n " + toUni("Maelstrom Aura") + ". As a bonus action, you surround yourself in an aura of magical wind and lightning that extends 10 feet from you in every direction but not through total cover. The aura lasts until the start of your next turn or until you are incapacitated. While the aura is active, attack rolls against you have disadvantage, and whenever a creature starts its turn within the aura, you can force the creature to make a Strength saving throw (DC equals 8 + your proficiency bonus + the ability modifier of the score increased by this feat). On a failed save, the creature's speed is halved until the start of its next turn. You can use this bonus action a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", prerequisite : "4th-level, Strike of the Giants (Storm Giant) feat", prereqeval : function(v) { var iParentFeat = CurrentFeats.known.indexOf("strike of the giants-ua"); return v.characterLevel >= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'storm giant'; }, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", action : [["action", ""]], choices : ["Intelligence", "Wisdom", "Charisma"], "intelligence" : { calculate : "event.value = 'As an action my Prof Bonus per long rest, I can give myself a 10-ft radius magical aura until my next turn starts. This imposes disadv. on attacks against me and when a creature starts its turn within, I can have it make a Str save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Int Mod'))) + ' (8 + Prof Bonus + Int mod) or halve its speed until my next turn starts. [+1 Int]';", scores : [0, 0, 0, 1, 0, 0] }, "wisdom" : { calculate : "event.value = 'As an action my Prof Bonus per long rest, I can give myself a 10-ft radius magical aura until my next turn starts. This imposes disadv. on attacks against me and when a creature starts its turn within, I can have it make a Str save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Wis Mod'))) + ' (8 + Prof Bonus + Wis mod) or halve its speed until my next turn starts. [+1 Wis]';", scores : [0, 0, 0, 0, 1, 0] }, "charisma" : { calculate : "event.value = 'As an action my Prof Bonus per long rest, I can give myself a 10-ft radius magical aura until my next turn starts. This imposes disadv. on attacks against me and when a creature starts its turn within, I can have it make a Str save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Cha Mod'))) + ' (8 + Prof Bonus + Cha mod) or halve its speed until my next turn starts. [+1 Cha]';", scores : [0, 0, 0, 0, 0, 1] } }; FeatsList["vigor of the hill giant-ua2"] = { name : "Vigor of the Hill Giant", source : [["UA:WotM", 10]], description : "When I'm subjected to an effect that would move me at least 5 ft or knock me prone, I can use my reaction to steady myself and stop this from happening. Whenever I eat food as part of a short rest and spend one or more HD to regain HP, I regain additional HP equal to my Con mod + my Proficiency Bonus. [+1 Con]", descriptionFull : "You've manifested the resilience emblematic of hill giants, granting you the following benefits:"+ "\n " + toUni("Ability Score Increase") + ". Increase your Constitution score by 1, to a maximum of 20."+ "\n " + toUni("Bulwark") + ". When you are subjected to an effect that would move you at least 5 feet or knock you prone, you can use your reaction to steady yourself. You are then neither moved nor knocked prone."+ "\n " + toUni("Iron Stomach") + ". Whenever you eat food as part of a short rest and spend one or more Hit Dice to regain hit points, you regain additional hit points equal to your Constitution modifier + your proficiency bonus.", prerequisite : "4th-level, Strike of the Giants (Hill Giant) feat", prereqeval : function(v) { var iParentFeat = CurrentFeats.known.indexOf("strike of the giants-ua"); return v.characterLevel >= 4 && iParentFeat !== -1 && CurrentFeats.choices[iParentFeat] === 'hill giant'; }, scores : [0, 0, 1, 0, 0, 0], action : [["reaction", ""]] }; // Rune Carver Apprentice feat tree FeatsList["rune carver apprentice-ua2"] = { name : "Rune Carver Apprentice", source : [["UA:WotM", 8]], description : "I know Comprehend Languages and cast it once per long rest without a spell slot. I know two runes, which I can inscribe and use to cast their associated spell once per long rest without a spell slot or material components. I can also cast all three spells with spell slots as normal. See notes page.", descriptionFull : "You've begun studying the art of runecraft." + desc([ "You learn the comprehend languages spell. You can cast this spell without expending a spell slot, and you must finish a long rest before you can cast it in this way again. You can also cast this spell using any spell slots you have.", "You know two runes of your choice from the Rune Spells table. Whenever you finish a long rest, you can mark one nonmagical weapon, armor, piece of clothing, or other object you touch with a rune you know. You temporarily learn one 1st-level spell based on the rune you inscribed, as specified in the Rune Spells table, and you know the spell until you finish a long rest, when the rune fades.\n", toUni("Rune\t\tSpell"), "Death\t\tRay of sickness", "Dragon\t\tChromatic orb", "Enemy\t\tDisguise self", "Friend\t\tSpeak with animals", "Journey \tLongstrider", "King\t\tCommand", "Mountain\tEntangle", "Sacred\t\tSanctuary\n", "While you are wearing or carrying the rune-marked object, you can cast the spell associated with the chosen rune once without using a spell slot or material components, and you can also cast the spell using any spell slots you have.", "Your spellcasting ability for this feat is Intelligence, Wisdom, or Charisma (choose when you select this feat).", "Each time you gain a level, you can replace one of the runes you know with a different one from the Rune Spells table." ]), spellcastingAbility : [4,5,6], spellcastingBonus : [{ name : "Once per long rest", spells : ["comprehend languages"], selection : ["comprehend languages"], firstCol : "oncelr+markedbox" }, { name : "Select Rune Spell", spells : ["ray of sickness", "chromatic orb", "disguise self", "speak with animals", "longstrider", "command", "entangle", "sanctuary"], firstCol : "oncelr+markedbox", times : 2, allowUpCasting : true }], calcChanges : { spellAdd : [ function (spellKey, spellObj, spName, isDuplicate) { if (spName === "rune carver apprentice-ua2" && spellKey !== "comprehend languages") { spellObj.components = spellObj.components.replace(/M(\u0192)?/, "M*"); spellObj.description = spellObj.description.replace(/(\d+) ?gp/, "$1*gp"); spellObj.ritual = false; return true; } }, "If the rune spells that I know are inscribed on something in my possession, I can cast each once per long rest without without using a spell slot or material components, or I can cast them using spell slots as normal." ] }, toNotesPage : [{ name : "Features", note : [ "I know Comprehend Languages and can cast it without expending a spell slot once per long rest. I can also cast this spell using any spell slots I have.", "I know two runes of my choice from the list below. Whenever I finish a long rest, I can mark one nonmagical weapon, armor, piece of clothing, or other object I touch with a rune I know. I temporarily learn one 1st-level spell based on the rune I inscribed and I know the spell until I finish a long rest, when the rune fades.", "While I'm wearing or carrying the rune-marked object, I can cast its associated spell once per long rest without using a spell slot or material components. I can also cast the spell using any spell slots I have.", "My spellcasting ability for this is Intelligence, Wisdom, or Charisma (choose when selecting this feat).", "Each time I gain a level, I can replace one of the runes I know with a different one from the list.\n", "RUNE\t\tSPELL\t\tSCHOOL", "Death\t\tRay of Sickness\tNecromancy", "Dragon\t\tChromatic Orb\tEvocation", "Enemy\t\tDisguise Self \tIllusion", "Friend\t\tSpeak With Animals\tDivination", "Journey\t\tLongstrider\t\tTransmutation", "King\t\tCommand\t\tEnchantment", "Mountain\t\tEntangle\t\tConjuration", "Sacred\t\tSanctuary\t\tAbjuration" ] }] }; FeatsList["rune carver adept-ua2"] = { name : "Rune Carver Adept", source : [["UA:WotM", 8]], description : "My Prof Bonus per long rest, whenever I cast a spell of a school that one of my runes belongs to, I can grant a creature I can see within 30 ft a benefit: \u2022 +10 ft walking speed and its movement provokes no opportunity attacks until its turn ends, \u2022 my level in temp HP, or \u2022 adv. on its next attack until its turn ends.", descriptionFull : "Your ability to draw out power from runes has grown." + desc([ "Increase the ability score of the spellcasting ability chosen when you gained the Rune Carver Apprentice feat by 1, to a maximum of 20.", "Whenever you cast a spell from the Rune Spells table, or a spell of a school of magic associated with the spell you marked on an object from your Rune Carver Apprentice feat, you can invoke runic power, granting you one of these benefits of your choice:", toUni("Battle Runes") + ". Choose one creature you can see within 30 feet of yourself. Until the end of that creature's next turn, it has advantage on the next attack roll it makes.", toUni("Healing Runes") + ". Choose one creature you can see within 30 feet of yourself. That creature gains temporary hit points equal to your level.", toUni("Runic Winds") + ". Choose one creature you can see within 30 feet of yourself. Until the end of that creature's turn, its movement doesn't provoke opportunity attacks, and its walking speed increases by 10 feet.", "You can invoke runic power a number of times equal to your proficiency bonus, but no more than once per spell you cast. You regain all expended uses when you finish a long rest." ]), prerequisite : "4th-level, Rune Carver Apprentice feat", prereqeval : function(v) { return v.characterLevel >= 4 && CurrentFeats.known.indexOf("rune carver apprentice-ua2") !== -1; }, usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", selfChoosing : function() { if (CurrentSpells["rune carver apprentice-ua2"] && !isNaN(CurrentSpells["rune carver apprentice-ua2"].ability)) { return AbilityScores.names[CurrentSpells["rune carver apprentice-ua2"].ability - 1].toLowerCase(); } }, choices : ["Intelligence", "Wisdom", "Charisma"], "intelligence" : { description : "My Prof Bonus per long rest, whenever I cast a spell of a school that one of my runes belongs to, I can grant a creature I can see within 30 ft a benefit: \u2022 +10 ft walking speed and its movement provokes no opportunity attacks until its turn ends, \u2022 my level in temp HP, or \u2022 adv. on its next attack until its turn ends. [+1 Int]';", scores : [0, 0, 0, 1, 0, 0], scorestxt : "+1 to the ability score of the spellcasting ability chosen for the Rune Carver Apprentice feat (Intelligence)" }, "wisdom" : { description : "My Prof Bonus per long rest, whenever I cast a spell of a school that one of my runes belongs to, I can grant a creature I can see within 30 ft a benefit: \u2022 +10 ft walking speed and its movement provokes no opportunity attacks until its turn ends, \u2022 my level in temp HP, or \u2022 adv. on its next attack until its turn ends. [+1 Wis]';", scores : [0, 0, 0, 0, 1, 0], scorestxt : "+1 to the ability score of the spellcasting ability chosen for the Rune Carver Apprentice feat (Wisdom)" }, "charisma" : { description : "My Prof Bonus per long rest, whenever I cast a spell of a school that one of my runes belongs to, I can grant a creature I can see within 30 ft a benefit: \u2022 +10 ft walking speed and its movement provokes no opportunity attacks until its turn ends, \u2022 my level in temp HP, or \u2022 adv. on its next attack until its turn ends. [+1 Cha]';", scores : [0, 0, 0, 0, 0, 1], scorestxt : "+1 to the ability score of the spellcasting ability chosen for the Rune Carver Apprentice feat (Charisma)" } }; // Scion of Elemental X FeatsList["scion of elemental air-ua"] = { name : "Scion of Elemental Air", source : [["UA:WotM", 8]], description : "I know the Minor Illusion cantrip (choice of Int, Wis, or Cha spellcasting ability). As a bonus action, I can gain a flying speed equal to my walking speed until my turn ends, but fall after this movement if I'm airborne and not held aloft by other means. I can do this bonus action my Proficiency Bonus per long rest.", descriptionFull : "You've been exposed to the primordial magic of the Elemental Plane of Air, granting you the following benefits:"+ "\n " + toUni("Elemental Magic") + ". You learn the minor illusion cantrip, using Intelligence, Wisdom, or Charisma as the spellcasting ability (choose when you select this feat)."+ "\n " + toUni("Wind's Glide") + ". You can use a bonus action to gain a flying speed equal to your walking speed until the end of your turn. If you are airborne at the end of your turn after using this movement and aren't held aloft by other means, you fall. You can use this bonus action a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", spellcastingAbility : [4,5,6], spellcastingBonus : [{ name : "Elemental Magic", spell : ["minor illusion"], selection : ["minor illusion"], firstCol : "atwill" }], action : [["bonus action", ""]] }; FeatsList["scion of elemental earth-ua"] = { name : "Scion of Elemental Earth", source : [["UA:WotM", 8]], description : "I know the Druidcraft cantrip (choice of Int, Wis, or Cha spellcasting ability). As a bonus action, I can conjure a bulwark of earth that provides half cover to me or a creature of my choice within 30 ft of myself, until the start of my next turn. I can create this bulwark my Proficiency Bonus per long rest.", descriptionFull : "You've been exposed to the primordial magic of the Elemental Plane of Earth, granting you the following benefits:"+ "\n " + toUni("Elemental Magic") + ". You learn the druidcraft cantrip, using Intelligence, Wisdom, or Charisma as the spellcasting ability (choose when you select this feat)."+ "\n " + toUni("Earthen Shield") + ". You can use a bonus action to conjure a bulwark of earth that provides half cover to you or a creature of your choice within 30 feet of yourself. The bulwark remains until the start of your next turn. You can create this bulwark a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", spellcastingAbility : [4,5,6], spellcastingBonus : [{ name : "Elemental Magic", spell : ["druidcraft"], selection : ["druidcraft"], firstCol : "atwill" }], action : [["bonus action", ""]] }; FeatsList["scion of elemental fire-ua"] = { name : "Scion of Elemental Fire", source : [["UA:WotM", 9]], description : "I know the Dancing Lights and Produce Flame cantrips. I can choose Int, Wis, or Cha as my spellcasting ability for this.. I can cast Produce Flame as normal, and I can also cast it as a bonus action a number of times equal to my Proficiency Bonus, regaining all expended uses when I finish a long rest.", descriptionFull : "You've been exposed to the primordial magic of the Elemental Plane of Fire, granting you the following benefits:"+ "\n " + toUni("Elemental Magic") + ". You learn the dancing lights cantrip, using Intelligence, Wisdom, or Charisma as the spellcasting ability (choose when you select this feat)."+ "\n " + toUni("Fervent Blaze") + ". You learn the produce flame cantrip, using the same spellcasting ability chosen for this feat's Elemental Magic benefit. You can cast produce flame as normal, and you can also cast it as a bonus action a number of times equal to your proficiency bonus, regaining all expended uses when you finish a long rest.", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", spellcastingAbility : [4,5,6], spellcastingBonus : [{ name : "Elemental Magic", spell : ["dancing lights"], selection : ["dancing lights"], firstCol : "atwill" }, { name : "Fervent Blaze", spell : ["produce flame"], selection : ["produce flame"] }, { name : "Fervent Blaze (bonus action)", spell : ["produce flame"], selection : ["produce flame"] }], calcChanges : { spellAdd : [ function (spellKey, spellObj, spName, isDuplicate) { if (spName === "scion of elemental fire-ua" && spellKey === "produce flame") { if (isDuplicate) { spellObj.firstCol = "SP"; spellObj.time = "1 bns"; return true; } else { spellObj.firstCol = "atwill"; } } }, "I can cast Produce Flame as a bonus action a number of times equal to my proficiency bonus, regaining all expended uses when I finish a long rest." ] } }; FeatsList["scion of elemental water-ua"] = { name : "Scion of Elemental Water", source : [["UA:WotM", 9]], description : "", descriptionFull : "You've been exposed to the primordial magic of the Elemental Plane of Water, granting you the following benefits:"+ "\n " + toUni("Elemental Magic") + ". You learn the thaumaturgy cantrip, using Intelligence, Wisdom, or Charisma as the spellcasting ability (choose when you select this feat)."+ "\n " + toUni("Wave Surge") + ". You can use a bonus action to create a forceful surge of water directed at a creature within 15 feet of you that you can see. The target must make a Strength saving throw; the DC for this save is equal to 8 + your proficiency bonus + the spellcasting ability modifier chosen for this feat, and a creature can choose to fail this saving throw. On a failure, the target is pushed up to 10 feet away from you or pulled up to 10 feet toward you (your choice). The water vanishes immediately after the creature succeeds or fails. You can create this effect a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest.", usages : "Proficiency bonus per ", usagescalc : "event.value = How('Proficiency Bonus');", recovery : "long rest", spellcastingBonus : [{ name : "Elemental Magic", spell : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : "atwill" }], action : [["bonus action", ""]], choices : ["Intelligence", "Wisdom", "Charisma"], "intelligence" : { calculate : "event.value = 'I know the Thaumaturgy cantrip using Int as spellcasting ability. As a bonus action my Proficiency Bonus per long rest, I can have a creature within 15 ft that I can see make a Str save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Int Mod'))) + ' (8 + Prof Bonus + Int mod) or be pushed away from me or pulled towards me for up to 10 ft (my choice). The target can opt to fail.';", spellcastingBonus : [{ name : "Elemental Magic", spell : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : "atwill" }], spellcastingAbility : 4 }, "wisdom" : { calculate : "event.value = 'I know the Thaumaturgy cantrip using Wis as spellcasting ability. As a bonus action my Proficiency Bonus per long rest, I can have a creature within 15 ft that I can see make a Str save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Wis Mod'))) + ' (8 + Prof Bonus + Wis mod) or be pushed away from me or pulled towards me for up to 10 ft (my choice). The target can opt to fail.';", spellcastingBonus : [{ name : "Elemental Magic", spell : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : "atwill" }], spellcastingAbility : 5 }, "charisma" : { calculate : "event.value = 'I know the Thaumaturgy cantrip using Cha as spellcasting ability. As a bonus action my Proficiency Bonus per long rest, I can have a creature within 15 ft that I can see make a Str save DC ' + (8 + Number(How('Proficiency Bonus')) + Number(What('Cha Mod'))) + ' (8 + Prof Bonus + Cha mod) or be pushed away from me or pulled towards me for up to 10 ft (my choice). The target can opt to fail.';", spellcastingBonus : [{ name : "Elemental Magic", spell : ["thaumaturgy"], selection : ["thaumaturgy"], firstCol : "atwill" }], spellcastingAbility : 6 } }; // Spells SpellsList["antagonize-ua"] = { name : "Antagonize", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["UA:WotM", 10]], level : 3, school : "Ench", time : "1 a", range : "30 ft", components : "V,S,M", compMaterial : "A playing card depicting a rogue", duration : "Instantaneous", save : "Wis", description : "1 crea save or 4d4+1d4/SL Psychic dmg & melee atk vs. chosen crea; if none in range, dis. on next atk", descriptionShorter : "1 crea save or 4d4+1d4/SL Psychic dmg & melee atk vs. chosen crea; if no in range, dis. next atk", descriptionFull : "You whisper magical words that antagonize one creature of your choice within range. The target must make a Wisdom saving throw. On a failed save, it takes 4d4 psychic damage and must immediately use its reaction, if available, to make a melee attack against another creature of your choice that you can see. If no other creature is within range, the target has disadvantage on the next attack roll it makes before the start of your next turn."+ AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d4 for each slot level above 4th." }; SpellsList["house of cards-ua"] = { name : "House of Cards", classes : ["artificer", "bard", "sorcerer", "wizard"], source : [["UA:WotM", 10]], level : 3, school : "Conj", time : "1 min", range : "Touch", components : "V,S,M\u0192", compMaterial : "A deck of cards", duration : "24 h", description : "30-ft high tower, lifts up; 3 floors, 10-ft sq top floor; 5\xD710 ft card: AC 10, 1 HP; all in half cover (5 sp)", descriptionMetric : "10-m high tower, lifts up; 3 floors, 3-m sq top floor; 1,5\xD73m card: AC 10, 1 HP; all in half cover (5 sp)", descriptionFull : "You touch the ground and conjure forth a defensive structure made of enormous playing cards. The structure rises with you at its center, harmlessly lifting you and any creatures in the area. The house of cards has a square base that is 30 feet on each side, and it has three floors with 10-foot-high ceilings. The second floor is 20 feet on each side, and the top floor is 10 feet on each side\u2014both centered above the bottom floor. Ramps connect the interior of each floor, and empty doorframes connect the interior and exterior of each level. Creatures inside or on top of the structure have half cover."+ "\n Each card that comprises the house is 5 feet wide and 10 feet tall and is very fragile. A card has AC 10 and 1 hit point. The cards are immune to poison and psychic damage. Reducing a card to 0 hit points destroys it. Every time a card is destroyed, roll 1d6. If you roll a 5 or a 6, the house collapses, ending the spell."+ "\n The house and all its cards vanish when the spell ends." }; SpellsList["spirit of death-ua"] = { name : "Spirit of Death", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:WotM", 10]], level : 4, school : "Necro", time : "1 a", range : "60 ft", components : "V,S,M\u0192", compMaterial : "A gilded playing card depicting an avatar of death worth at least 400 gp", duration : "Conc, 1 min", description : "Summon spirit to atk 1 crea; obeys commands; takes turn after me; ends if it or target at 0 hp (400gp)", descriptionFull : "You call forth a spirit that embodies death itself. Choose a creature you can see within range. The spirit manifests in an unoccupied space that you can see within 10 feet of the target, and the target becomes haunted by the spirit. The spirit uses the Reaper Spirit stat block. The spirit disappears when it or the haunted creature is reduced to 0 hit points, or when the spell ends."+ "\n The reaper spirit is an ally to you and your companions. In combat, the spirit shares your initiative count, but it takes its turn immediately after yours. It obeys your verbal commands (no action required by you), but it will only attack the haunted creature. If you don't issue the spirit any commands, it takes the Dodge action and uses its move to avoid danger."+ AtHigherLevels + "When you cast this spell using a spell slot of 5th level or higher, use the higher level wherever the spell's level appears in the stat block." }; SpellsList["spray of cards-ua"] = { name : "Spray of Cards", classes : ["bard", "sorcerer", "warlock", "wizard"], source : [["UA:WotM", 11]], level : 2, school : "Conj", time : "1 a", range : "15-ft cone", components : "V,S,M\u0192", compMaterial : "A deck of cards", duration : "Instantaneous", save : typePF ? "W/D" : "W/d", description : "All in area either: Wis save or blinded 1 rnd; or 2d10+1d10/2SL Force dmg, Dex save halves (5sp)", descriptionFull : "You spray spectral cards from your hands or sleeve; the cards blind or slash at your enemies, and then vanish. Choose one of the following effects for the cards."+ "\n " + toUni("Blinding Cards") + ". Each creature in a 15-foot cone must succeed on a Wisdom saving throw or be blinded until the end of their next turn."+ "\n " + toUni("Cutting Cards") + ". Each creature in a 15-foot cone must make a Dexterity saving throw. A creature takes 2d10 force damage on a failed save or half as much damage on a successful one."+ AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, the damage of cutting cards increases by 1d10 for every two slot levels above 2nd." }; SpellsList["summon warrior spirit-ua"] = { name : "Summon Warrior Spirit", classes : ["sorcerer", "warlock", "wizard"], source : [["UA:WotM", 11]], level : 3, school : "Conj", time : "1 a", range : "90 ft", components : "V,S,M\u0192", compMaterial : "A gilded playing card depicting a knight worth at least 300 gp", duration : "Conc, 1 h", description : "Summon choice of Warrior Spirit; obeys commands; takes turn after mine; disappears at 0 hp (300gp)", descriptionFull : "You call forth a warrior spirit from the legendary Deck of Many Things. It manifests in an unoccupied space that you can see within range. This corporeal form uses the Warrior Spirit stat block. When you cast the spell, choose a type of warrior: barbarian, fighter, or monk. The warrior resembles a humanoid armed appropriately to the chosen class, which determines certain traits in its stat block. The warrior disappears when it drops to 0 hit points or when the spell ends."+ "\n The warrior is an ally to you and your companions. In combat, the warrior shares your initiative count, but it takes its turn immediately after yours. It obeys your verbal commands (no action required by you). If you don't issue any, it takes the Dodge action and uses its move to avoid danger."+ AtHigherLevels + "When you cast this spell using a spell slot of 4th level or higher, the creature assumes the higher level for that casting wherever it uses the spell's level in its stat block." }; ================================================ FILE: WotC material/wip_excluded-magic-items.js ================================================ /* This file contains the magic items found in WotC publications that have been excluded from the first round of transcriptions These items include all artifacts and some intelligent items As wel as items that are not normally usable by players such as plot devices */ { // pub_20141104_RoT.js // Artifact MagicItemsList["draakhorn"] = { name : "Draakhorn", source : [["RoT", 93]], type : "wondrous item", rarity : "artifact", description : "", descriptionFull : "The Draakhorn was a gift from Tiamat in the war between dragons and giants. It was once the horn of her ancient red dragon consort, Ephelomon, that she gave to dragonkind to help them in their war against the giants. The Draakhorn is a signaling device, and it is so large that it requires two Medium creatures (or one Large or larger) to hold it while a third creature sounds it, making the earth resonate to its call. The horn has been blasted with fire into a dark ebony hue and is wrapped in bands of bronze with draconic runes that glow with purple eldritch fire.\n The low, moaning drone of the Draakhorn discomfits normal animals within a few miles, and it alerts all dragons within two thousand miles to rise and be wary, for great danger is at hand. Coded blasts were once used to signal specific messages. Knowledge of those codes has been lost to the ages.\n Those with knowledge of the Draakhorn's history know that it was first built to signal danger to chromatic dragons\u2014a purpose the Cult of the Dragon has corrupted to call chromatic dragons to the Well of Dragons from across the North.\n Within 50 feet of any enclosed space where the horn is blown, the air begins to shimmer from the sound. Any character within 20 feet of the entry to the enclosed space must succeed on a DC 12 Strength check to continue pushing against the pressure of the sound. A failure indicates the character can advance no farther toward the entry.\n For any character entering the enclosed space, the sound fades to silence\u2014because any creature that enters the enclosed space is temporarily deafened and must make a DC 12 Constitution saving throw. Success indicates the deafness ends 2 minutes after the Draakhorn ceases to sound. Failure indicates the character remains deafened for 1 hour after the Draakhorn ceases to sound.\n While the horn is sounding, a creature must make a DC 15 Constitution saving throw the first time on a turn the creature enters a 150-foot cone in front of the horn or starts its turn there. On a failed save, the creature takes 27 (6d8) thunder damage and is knocked prone. On a successful save, the creature takes half damage and isn't knocked prone." } } { // pub_20141209_DMG.js // Intelligent Items with sub-choices MagicItemsList["moonblade"] = { name : "Moonblade", source : [["D", 217]], type : "weapon (longsword)", rarity : "legendary", description : "", descriptionFull : "Of all the magic items created by the elves, one of the most prized and jealously guarded is a moon blade. In ancient times, nearly all elven noble houses claimed one such blade. Over the centuries, some blades have faded from the world, their magic lost as family lines have become extinct. Other blades have vanished with their bearers during great quests. Thus, only a few of these weapons remain.\n A moonblade passes down from parent to child. The sword chooses its bearer and remains bonded to that person for life. If the bearer dies, another heir can claim the blade. If no worthy heir exists, the sword lies dormant. It functions like a normal longsword until a worthy soul finds it and lays claim to its power.\n A moonblade serves only one master at a time. The attunement process requires a special ritual in the throne room of an elven regent or in a temple dedicated to the elven gods.\n A moonblade won't serve anyone it regards as craven, erratic, corrupt, or at odds with preserving and protecting elvenkind. If the blade rejects you, you make ability checks, attack rolls, and saving throws with disadvantage for 24 hours. If the blade accepts you, you become attuned to it and a new rune appears on the blade. You remain attuned to the weapon until you die or the weapon is destroyed.\n A moonblade has one rune on its blade for each master it has served (typically 1d6+1). The first rune always grants a +1 bonus to attack and damage rolls made with this magic weapon. Each rune beyond the first grants the moon blade an additional property. The DM chooses each property or determines it randomly on the Moon Blade Properties table.\n\n" + toUni("d100") + "\t" + toUni("Property") + "\n01-40\tIncrease the bonus to attack and damage rolls by 1, to a maximum of +3. Reroll if the moonblade already has a +3 bonus.\n41-80\tThe moonblade gains a randomly determined minor property (see \"Special Features\" DMG p143).\n81-82\tThe moonblade gains the finesse property.\n83-84\tThe moonblade gains the thrown property (range 20/60 feet).\n85-86\tThe moonblade functions as a defender.\n87-90\tThe moon blade scores a critical hit on a roll of 19 or 20.\n91-92\tWhen you hit with an attack using the moon blade, the attack deals an extra 1d6 slashing damage.\n93-94\tWhen you hit a creature of a specific type (such as dragon, fiend, or undead) with the moonblade, the target takes an extra 1d6 damage of one of these types: acid, cold, fire, lightning, or thunder.\n95-96\tYou can use a bonus action to cause the moonblade to flash brightly. Each creature that can see you and is within 30 feet of you must succeed on a DC 15 Constitution saving throw or become blinded for 1 minute. A creature can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success. This property can't be used again until you take a short rest while attuned to the weapon.\n97-98\tThe moonblade functions as a ring of spell storing.\n99\tYou can use an action to call forth an elfshadow, provided that you don't already have one serving you. The elfshadow appears in an unoccupied space within 120 feet of you. It uses the statistics for a shadow, except it is neutral, immune to effects that turn undead, and doesn't create new shadows. You control this creature, deciding how it acts and moves. It remains until it drops to 0 hit points or you dismiss it as an action.\n00\tThe moonblade functions as a vorpal sword.\n\n\n " + toUni("Sentience") + ". A moon blade is a sentient neutral good weapon with an Intelligence of 12, a Wisdom of 10, and a Charisma of 12. It has hearing and darkvision out to a range of 120 feet.\n The weapon communicates by transmitting emotions, sending a tingling sensation through the wielder's hand when it wants to communicate something it has sensed. It can communicate more explicitly, through visions or dreams, when the wielder is either in a trance or asleep.\n " + toUni("Personality") + ". Every moonblade seeks the advancement of elvenkind and elven ideals. Courage, loyalty, beauty, music, and life are all part of this purpose.\n The weapon is bonded to the family line it is meant to serve. Once it has bonded with an owner who shares its ideals, its loyalty is absolute.\n If a moon blade has a flaw, it is overconfidence. Once it has decided on an owner, it believes that only that person should wield it, even if the owner falls short of elven ideals.", attunement : true, weight : 3 } // Artifacts MagicItemsList["axe of the dwarvish lords"] = { name : "Axe of the Dwarvish Lords", source : [["D", 221]], type : "weapon (battleaxe)", rarity : "artifact", notLegalAL : true, description : "", descriptionFull : "Seeing the peril his people faced, a young dwarf prince came to believe that his people needed something to unite them. Thus, he set out to forge a weapon that would be such a symbol.\n Venturing deep under the mountains, deeper than any dwarf had ever delved, the young prince came to the blazing heart of a great volcano. With the aid of Moradin, the dwarven god of creation, he first crafted four great tools: the Brutal Pick, the Earthheart Forge, the Anvil of Songs, and the Shaping Hammer. With them, he forged the Axe of the Dwarvish Lords.\n Armed with the artifact, the prince returned to the dwarf clans and brought peace. His axe ended grudges and answered slights. The clans became allies, and they threw back their enemies and enjoyed an era of prosperity. This young dwarf is remembered as the First King. When he became old, he passed the weapon, which had become his badge of office, to his heir. The rightful inheritors passed the axe on for many generations.\n Later, in a dark era marked by treachery and wickedness, the axe was lost in a bloody civil war fomented by greed for its power and the status it bestowed. Centuries later, the dwarves still search for the axe, and many adventurers have made careers of chasing after rumors and plundering old vaults to find it.\n " + toUni("Magic Weapon") + ". The Axe of the Dwarvish Lords is a magic weapon that grants a +3 bonus to attack and damage rolls made with it. The axe also functions as a belt of dwarvenkind, a dwarven thrower, and a sword of sharpness.\n " + toUni("Random Properties") + ". The axe has the following randomly determined properties:\n \u2022 2 minor beneficial properties\n \u2022 1 major beneficial property\n \u2022 2 minor detrimental properties\n " + toUni("Blessings of Moradin") + ". If you are a dwarf attuned to the axe, you gain the following benefits:\n \u2022 You have immunity to poison damage.\n \u2022 The range of your darkvision increases by 60 feet.\n \u2022 You gain proficiency with artisan's tools related to blacksmithing, brewing, and stonemasonry.\n " + toUni("Conjure Earth Elemental") + ". If you are holding the axe, you can use your action to cast the Conjure Elemental spell from it, summoning an earth elemental. You can't use this property again until the next dawn.\n " + toUni("Travel the Depths") + ". You can use an action to touch the axe to a fixed piece of dwarven stonework and cast the Teleport spell from the axe. If your intended destination is underground, there is no chance of a mishap or arriving somewhere unexpected. You can't use this property again until 3 days have passed.\n " + toUni("Curse") + ". The axe bears a curse that affects any non-dwarf that becomes attuned to it. Even if the attunement ends, the curse remains. With each passing day, the creature's physical appearance and stature become more dwarflike. After seven days, the creature looks like a typical dwarf, but the creature neither loses its racial traits nor gains the racial traits of a dwarf. The physical changes wrought by the axe aren't considered magical in nature (and therefore can't be dispelled), but they can be undone by any effect that removes a curse, such as a Greater Restoration or Remove Curse spell.\n " + toUni("Destroying the Axe") + ". The only way to destroy the axe is to melt it down in the Earthheart Forge, where it was created. It must remain in the burning forge for fifty years before it finally succumbs to the fire and is consumed.", attunement : true, weight : 4, cursed : true } MagicItemsList["book of exalted deeds"] = { name : "Book of Exalted Deeds", source : [["D", 222]], type : "wondrous item", rarity : "artifact", notLegalAL : true, description : "", descriptionFull : "The definitive treatise on all that is good in the multiverse, the fabled Book of Exalted Deeds figures prominently in many religions. Rather than being a scripture devoted to a particular faith, the book's various authors filled the pages with their own vision of true virtue, providing guidance for defeating evil.\n The Book of Exalted Deeds rarely lingers in one place. As soon as the book is read, it vanishes to some other corner of the multiverse where its moral guidance can bring light to a darkened world. Although attempts have been made to copy the work, efforts to do so fail to capture its magical nature or translate the benefits it offers to those pure of heart and firm of purpose.\n A heavy clasp, wrought to look like angel wings, keeps the book's contents secure. Only a creature of good alignment that is attuned to the book can release the clasp that holds it shut. Once the book is opened, the attuned creature must spend 80 hours reading and studying the book to digest its contents and gain its benefits. Other creatures that peruse the book's open pages can read the text but glean no deeper meaning and reap no benefits. An evil creature that tries to read from the book takes 24d6 radiant damage. This damage ignores resistance and immunity, and can't be reduced or avoided by any means. A creature reduced to 0 hit points by this damage disappears in a blinding flash and is destroyed, leaving its possessions behind.\n Benefits granted by the Book of Exalted Deeds last only as long as you strive to do good. If you fail to perform at least one act of kindness or generosity within the span of 10 days, or if you willingly perform an evil act, you lose all the benefits granted by the book.\n " + toUni("Random Properties") + ". The Book of Exalted Deeds has the following random properties:\n \u2022 2 minor beneficial properties\n \u2022 2 major beneficial properties\n " + toUni("Increased Wisdom") + ". After you spend the requisite amount of time reading and studying the book, your Wisdom score increases by 2, to a maximum of 24. You can't gain this benefit from the book more than once.\n " + toUni("Enlightened Magic") + ". Once you've read and studied the book, any spell slot you expend to cast a cleric or paladin spell counts as a spell slot of one level higher.\n " + toUni("Halo") + ". Once you've read and studied the book, you gain a protective halo. This halo sheds bright light in a 10-foot radius and dim light for an additional 10 feet. You can dismiss or manifest the halo as a bonus action. While present, the halo gives you advantage on Charisma (Persuasion) checks made to interact with good creatures and Charisma (Intimidation) checks made to interact with evil creatures. In addition, fiends and undead within the halo's bright light make attack rolls against you with disadvantage.\n " + toUni("Destroying the Book") + ". It is rumored that the Book of Exalted Deeds can't be destroyed as long as good exists in the multiverse. However, drowning the book in the River Styx removes all writing and imagery from its pages and renders the book powerless for 1d100 years.", weight : 5, attunement : true, prerequisite : "Requires attunement by a creature of good alignment", prereqeval : function(v) { return (/good/i).test(What("Alignment")); } } MagicItemsList["book of vile darkness"] = { name : "Book of Vile Darkness", source : [["D", 222]], type : "wondrous item", rarity : "artifact", notLegalAL : true, description : "", descriptionFull : "The contents of this foul manuscript of ineffable wickedness are the meat and drink of those in evil's thrall. No mortal was meant to know the secrets it contains, knowledge so horrid that to even glimpse the scrawled pages invites madness.\n Most believe the lich-god Vecna authored the Book of Vile Darkness. He recorded in its pages every diseased idea, every unhinged thought, and every example of blackest magic he came across or devised. Vecna covered every vile topic he could, making the book a gruesome catalog of all mortal wrongs.\n Other practitioners of evil have held the book and added their own input to its catalog of vile knowledge. Their additions are clear, for the writers of later works stitched whatever they were writing into the tome or, in some cases, made notations and additions to existing text. There are places where pages are missing, torn. or covered so completely with ink, blood, and scratches that the original text can't be divined.\n Nature can't abide the book's presence. Ordinary plants wither in its presence, animals are unwilling to approach it, and the book gradually destroys whatever it touches. Even stone cracks and turns to powder if the book rests on it long enough.\n A creature attuned to the book must spend 80 hours reading and studying it to digest its contents and reap its benefits. The creature can then freely modify the book's contents, provided that those modifications advance evil and expand the lore already contained within.\n Whenever a non-evil creature attunes to the Book of Vile Darkness, that creature must make a DC 17 Charisma saving throw. On a failed save, the creature's alignment changes to neutral evil.\n The Book of Vile Darkness remains with you only as long as you strive to work evil in the world. If you fail to perform at least one evil act within the span of 10 days, or if you willingly perform a good act, the book disappears. If you die while attuned to the book, an entity of great evil claims your soul. You can't be restored to life by any means while your soul remains imprisoned.\n " + toUni("Random Properties") + ". The Book of Vile Darkness has the following random properties:\n \u2022 3 minor beneficial properties\n \u2022 1 major beneficial property\n \u2022 3 minor detrimental properties\n \u2022 2 major detrimental properties\n " + toUni("Adjusted Ability Scores") + ". After you spend the requisite amount of time reading and studying the book, one ability score of your choice increases by 2, to a maximum of 24. Another ability score of your choice decreases by 2, to a minimum of 3. The book can't adjust your ability scores again.\n " + toUni("Mark of Darkness") + ". After you spend the requisite amount of time reading and studying the book, you acquire a physical disfigurement as a hideous sign of your devotion to vile darkness. An evil rune might appear on your face, your eyes might become glossy black, or horns might sprout from your forehead. Or you might become wizened and hideous, lose all facial features, gain a forked tongue, or some other feature the DM chooses. The mark of darkness grants you advantage on Charisma (Persuasion) checks made to interact with evil creatures and Charisma (Intimidation) checks made to interact with non-evil creatures.\n " + toUni("Command Evil") + ". While you are attuned to the book and holding it, you can use an action to cast the Dominate Monster spell on an evil target (save DC 18). You can't use this property again until the next dawn.\n " + toUni("Dark Lore") + ". You can reference the Book of Vile Darkness whenever you make an Intelligence check to recall information about some aspect of evil, such as lore about demons. When you do so, double your proficiency bonus on that check.\n " + toUni("Dark Speech") + ". While you carry the Book of Vile Darkness and are attuned to it, you can use an action to recite word from its pages in a foul language known as Dark Speech. Each time you do so, you take 1d12 psychic damage, and each non-evil creature within 15 feet of you takes 3d6 psychic damage.\n " + toUni("Destroying the Book") + ". The Book of Vile Darkness allows pages to be torn from it, but any evil lore contained on those pages finds its way back into the book eventually, usually when a new author adds pages to the tome.\n If a solar tears the book in two, the book is destroyed for 1d100 years, after which it reforms in some dark corner of the multiverse.\n A creature attuned to the book for one hundred years can unearth a phrase hidden in the original text that, when translated to Celestial and spoken aloud, destroys both the speaker and the book in a blinding flash of radiance. However, as long as evil exists in the multiverse, the book reforms 1d10 \xD7 100 years later.\n If all evil in the multiverse is wiped out, the book turns to dust and is forever destroyed.", attunement : true, weight : 5 } MagicItemsList["hand of vecna"] = { name : "Hand of Vecna", source : [["D", 224]], type : "wondrous item", rarity : "artifact", notLegalAL : true, description : "", descriptionFull : "Seldom is the name of Vecna spoken except in a hushed voice. Vecna was, in his time, one of the mightiest of all wizards. Through dark magic and conquest, he forged a terrible empire. For all his power, Vecna couldn't escape his own mortality. He began to fear death and take steps to prevent his end from ever coming about.\n Orcus, the demon prince of undeath, taught Vecna a ritual that would allow him to live on as a lich. Beyond death, he became the greatest of all liches. Even though his body gradually withered and decayed, Vecna continued to expand his evil dominion. So formidable and hideous was his temper that his subjects feared to speak his name. He was the Whispered One, the Master of the Spider Throne, the Undying King, and the Lord of the Rotted Tower.\n Some say that Vecna's lieutenant Kas coveted the Spider Throne for himself, or that the sword his lord made for him seduced him into rebellion. Whatever the reason, Kas brought the Undying King's rule to an end in a terrible battle that left Vecna's tower a heap of ash. Of Vecna, all that remained were one hand and one eye, grisly artifacts that still seek to work the Whispered One's will in the world.\n The Eye of Vecna and the Hand of Vecna might be found together or separately. The eye looks like a bloodshot organ torn free from the socket. The hand is a mummified and shriveled left extremity.\n To attune to the eye, you must gouge out your own eye and press the artifact into the empty socket. The eye grafts itself to your head and remains there until you die. Once in place, the eye transforms into a golden eye with a slit for a pupil, much like that of a cat. If the eye is ever removed, you die.\n To attune to the hand, you must lop off your left hand at the wrist and the press the artifact against the stump. The hand grafts itself to your arm and becomes a functioning appendage. If the hand is ever removed, you die.\n " + toUni("Random Properties") + ". The Eye of Vecna and the Hand of Vecna each have the following random properties:\n \u2022 1 minor beneficial property\n \u2022 1 major beneficial property\n \u2022 1 minor detrimental property\n\n" + toUni("Properties of the Hand") + ". Your alignment changes neutral evil, and you gain the following benefits:\n \u2022 Your Strength score becomes 20, unless it is already 20 or higher.\n \u2022 Any melee spell attack you make with the hand, and any melee weapon attack made with a weapon held by it, deals an extra 2d8 cold damage on a hit.\n \u2022 The hand has 8 charges. You can use an action and expend 1 or more charges to cast one of the following spells (save DC 18) from it: Finger of Death (5 charges), Sleep (1 charge), Slow (2 charges), or Teleport (3 charges). The hand regains 1d4+4 expended charges daily at dawn. Each time you cast a spell from the hand, it casts the Suggestion spell on you (save DC 18), demanding that you commit an evil act. The hand might have a specific act in mind or leave it up to you.\n\n" + toUni("Properties of the Eye and Hand") + ". If you are attuned to both the hand and eye, you gain the following additional benefits:\n \u2022 You are immune to disease and poison.\n \u2022 Using the eye's X-ray vision never causes you to suffer exhaustion.\n \u2022 You experience premonitions of danger and, unless you are incapacitated, can't be surprised.\n \u2022 If you start your turn with at least 1 hit point, you regain 1d10 hit points.\n \u2022 If a creature has a skeleton, you can attempt to turn its bones to jelly with a touch of the Hand of Vecna. You can do so by using an action to make a melee attack against a creature you can reach, using your choice your melee attack bonus for weapons or spells. On a hit, the target must succeed on a DC 18 Constitution saving throw or drop to 0 hit points.\n \u2022 You can use an action to cast Wish. This property can't be used again until 30 days have passed.\n\n" + toUni("Destroying the Eye and Hand") + ". If the Eye of Vecna and the Hand of Vecna are both attached to the same creature, and that creature is slain by the Sword of Kas, both the eye and the hand burst into flame, turn to ash, and are destroyed forever. Any other attempt to destroy the eye or hand seems to work, but the artifact reappears in one of Vecna's many hidden vaults, where it waits to be rediscovered.", attunement : true } MagicItemsList["eye of vecna"] = { name : "Eye of Vecna", source : [["D", 224]], type : "wondrous item", rarity : "artifact", notLegalAL : true, description : "", descriptionFull : "Seldom is the name of Vecna spoken except in a hushed voice. Vecna was, in his time, one of the mightiest of all wizards. Through dark magic and conquest, he forged a terrible empire. For all his power, Vecna couldn't escape his own mortality. He began to fear death and take steps to prevent his end from ever coming about.\n Orcus, the demon prince of undeath, taught Vecna a ritual that would allow him to live on as a lich. Beyond death, he became the greatest of all liches. Even though his body gradually withered and decayed, Vecna continued to expand his evil dominion. So formidable and hideous was his temper that his subjects feared to speak his name. He was the Whispered One, the Master of the Spider Throne, the Undying King, and the Lord of the Rotted Tower.\n Some say that Vecna's lieutenant Kas coveted the Spider Throne for himself, or that the sword his lord made for him seduced him into rebellion. Whatever the reason, Kas brought the Undying King's rule to an end in a terrible battle that left Vecna's tower a heap of ash. Of Vecna, all that remained were one hand and one eye, grisly artifacts that still seek to work the Whispered One's will in the world.\n The Eye of Vecna and the Hand of Vecna might be found together or separately. The eye looks like a bloodshot organ torn free from the socket. The hand is a mummified and shriveled left extremity.\n To attune to the eye, you must gouge out your own eye and press the artifact into the empty socket. The eye grafts itself to your head and remains there until you die. Once in place, the eye transforms into a golden eye with a slit for a pupil, much like that of a cat. If the eye is ever removed, you die.\n To attune to the hand, you must lop off your left hand at the wrist and the press the artifact against the stump. The hand grafts itself to your arm and becomes a functioning appendage. If the hand is ever removed, you die.\n " + toUni("Random Properties") + ". The Eye of Vecna and the Hand of Vecna each have the following random properties:\n \u2022 1 minor beneficial property\n \u2022 1 major beneficial property\n \u2022 1 minor detrimental property\n\n" + toUni("Properties of the Eye") + ". Your alignment changes to neutral evil, and you gain the following benefits:\n \u2022 You have truesight.\n \u2022 You can use an action to see as if you were wearing a ring of X-ray vision. You can end this effect as a bonus action.\n \u2022 The eye has 8 charges. You can use an action and expend 1 or more charges to cast one of the following spells (save DC 18) from it: Clairvoyance (2 charges), Crown of Madness (1 charge), Disintegrate (4 charges), Dominate Monster (5 charges), or Eyebite (4 charges). The eye regains 1d4+4 expended charges daily at dawn. Each time you cast a spell from the eye, there is a 5% chance that Vecna tears your soul from your body, devours it, and then takes control of the body like a puppet. If that happens, you become an NPC under the DM's control.\n\n" + toUni("Properties of the Eye and Hand") + ". If you are attuned to both the hand and eye, you gain the following additional benefits:\n \u2022 You are immune to disease and poison.\n \u2022 Using the eye's X-ray vision never causes you to suffer exhaustion.\n \u2022 You experience premonitions of danger and, unless you are incapacitated, can't be surprised.\n \u2022 If you start your turn with at least 1 hit point, you regain 1d10 hit points.\n \u2022 If a creature has a skeleton, you can attempt to turn its bones to jelly with a touch of the Hand of Vecna. You can do so by using an action to make a melee attack against a creature you can reach, using your choice your melee attack bonus for weapons or spells. On a hit, the target must succeed on a DC 18 Constitution saving throw or drop to 0 hit points.\n \u2022 You can use an action to cast Wish. This property can't be used again until 30 days have passed.\n\n" + toUni("Destroying the Eye and Hand") + ". If the Eye of Vecna and the Hand of Vecna are both attached to the same creature, and that creature is slain by the Sword of Kas, both the eye and the hand burst into flame, turn to ash, and are destroyed forever. Any other attempt to destroy the eye or hand seems to work, but the artifact reappears in one of Vecna's many hidden vaults, where it waits to be rediscovered.", attunement : true } MagicItemsList["sword of kas"] = { name : "Sword of Kas", source : [["D", 226]], type : "weapon (longsword)", rarity : "artifact", notLegalAL : true, description : "", descriptionFull : "When Vecna grew in power, he appointed an evil and ruthless lieutenant, Kas the Bloody Handed, to act as his bodyguard and right hand. This despicable villain served as advisor, warlord, and assassin. His successes earned him Vecna's admiration and a reward: a sword with as dark a pedigree as the man who would wield it.\n For a long time, Kas faithfully served the lich but as Kas's power grew, so did his hubris. His sword urged him to supplant Vecna, so that they could rule the lich's empire in Vecna's stead. Legend says Vecna's destruction came at Kas's hand, but Vecna also wrought his rebellious lieutenant's doom, leaving only Kas's sword behind. The world was made brighter thereby.\n The Sword of Kas is a magic, sentient longsword that grants a +3 bonus to attack and damage rolls made with it. It scores a critical hit on a roll of 19 or 20, and deals an extra 2d10 slashing damage to undead.\n If the sword isn't bathed in blood within 1 minute of being drawn from its scabbard, its wielder must make a DC 15 Charisma saving throw. On a successful save, the wielder takes 3d6 psychic damage. On a failed save, the wielder is dominated by the sword, as if by the Dominate Monster spell, and the sword demands that it be bathed in blood. The spell effect ends when the sword's demand is met.\n " + toUni("Random Properties") + ". The Sword of Kas has the following random properties:\n \u2022 1 minor beneficial property\n \u2022 1 major beneficial property\n \u2022 1 minor detrimental property\n \u2022 1 major detrimental property\n\n" + toUni("Spirit of Kas") + ". While the sword is on your person, you add a d10 to your initiative at the start of every combat. In addition, when you use an action to attack with the sword, you can transfer some or all of its attack bonus to your Armor Class instead. The adjusted bonuses remain in effect until the start of your next turn.\n " + toUni("Spells") + ". While the sword is on your person, you can use an action to cast one of the following spells (save 18) from it: Call Lightning, Divine Word, or Finger of Death. Once you use the sword to cast a spell, you can't cast that spell again from it until the next dawn.\n " + toUni("Sentience") + ". The Sword of Kas is a sentient chaotic evil weapon with an Intelligence of 15, a Wisdom of 13, and a Charisma of 16. It has hearing and darkvision out to a range of 120 feet.\n The weapon communicates telepathically with its wielder and can speak, read, and understand Common\n " + toUni("Personality") + ". The sword's purpose is to bring ruin to Vecna. Killing Vecna's worshipers, destroying the lich's works, and foiling his machinations all help to fulfill this goal.\n The Sword of Kas also seeks to destroy anyone corrupted by the Eye and Hand of Vecna. The sword's obsession with those artifacts eventually becomes a fixation for its wielder.\n " + toUni("Destroying the Sword") + ". A creature attuned to both the Eye of Vecna and the Hand of Vecna can use the wish property of those combined artifacts to unmake the Sword of Kas. The creature must cast the Wish spell and make a Charisma check contested by the Charisma check of the sword. The sword must be within 30 feet of the creature, or the spell fails. If the sword wins the contest, nothing happens, and the Wish spell is wasted. If the sword loses the contest, it is destroyed.", attunement : true, weight : 3 } MagicItemsList["wand of orcus"] = { name : "Wand of Orcus", source : [["D", 227]], type : "wand", rarity : "artifact", notLegalAL : true, description : "", descriptionFull : "The ghastly Wand of Orcus rarely leaves Orcus's side. The device, as evil as its creator, shares the demon lord's aims to snuff out the lives of all living things and bind the Material Plane in the stasis of undeath. Orcus allows the wand to slip from his grasp from time to time. When it does, it magically appears wherever its master senses an opportunity to achieve some fell goal.\n Made from bones as hard as iron, the wand is topped with a magically enlarged skull that once belonged to a human hero slain by Orcus. The wand can magically change in size to better conform to the grip of its user. Plants wither, drinks spoil, flesh rots, and vermin thrive in the wand's presence.\n Any creature besides Orcus that tries to attune to the wand must make a DC 17 Constitution saving throw. On a successful save, the creature takes 10d6 necrotic damage. On a failed save, the creature dies and rises as a zombie.\n In the hands of one who is attuned to it, the wand can be wielded as a magic mace that grants a +3 bonus to attack and damage rolls made with it. The wand deals an extra 2d12 necrotic damage on a hit.\n " + toUni("Random Properties") + ". The Wand of Orcus has the following random properties:\n \u2022 2 minor beneficial properties\n \u2022 1 major beneficial property\n \u2022 2 minor detrimental properties\n \u2022 1 major detrimental property\nThe detrimental properties of the Wand of Orcus are suppressed while the wand is attuned to Orcus himself.\n\n" + toUni("Protection") + ". You gain a +3 bonus to Armor Class while holding the wand.\n " + toUni("Spells") + ". The wand has 7 charges. While holding it, you can use an action and expend 1 or more of its charges to cast one of the following spells (save DC 18) from it: Animate Dead (1 charge), Blight (2 charges), Circle of Death (3 charges), Finger of Death (3 charges), Power Word Kill (4 charges), or Speak with Dead (1 charge). The wand regains 1d4+3 expended charges daily at dawn.\n While attuned to the wand, Orcus or a follower blessed by him can cast each of the wand's spells using 2 fewer charges (minimum of 0).\n " + toUni("Call Undead") + ". While you are holding the wand, you can use an action to conjure skeleton and zombie, calling forth as many of them as you can divide 500 hit points among, each undead having average hit points. The undead magically rise up from the ground or otherwise form in unoccupied spaces within 300 feet of you and obey your commands until they are destroyed or until dawn of the next day, when they collapse into inanimate piles of bones and rotting corpses. Once you use this property of the wand, you can't use it again until the next dawn.\n While attuned to the wand, Orcus can summon any kind of undead, not just skeletons and zombies. The undead don't perish or disappear at dawn the following day, remaining until Orcus dismisses them.\n " + toUni("Sentience") + ". The Wand of Orcus is a sentient, chaotic evil item with an Intelligence of 16, a Wisdom of 12, and a Charisma of 16. It has hearing and darkvision out to a range of 120 feet.\n The wand communicates telepathically with its wielder and can speak, read, and understand Abyssal and Common.\n " + toUni("Personality") + ". The wand's purpose is to help satisfy Orcus's desire to slay everything in the multiverse. The wand is cold, cruel, nihilistic, and bereft of humor. In order to further its master's goals, the wand feigns devotion to its current user and makes grandiose promises that it has no intention of fulfilling, such as vowing to help its user overthrow Orcus.\n " + toUni("Destroying the Wand") + ". Destroying the Wand of Orcus requires that it be taken to the Positive Energy Plane by the ancient hero whose skull surmounts it. For this to happen, the long-lost hero must first be restored to life\u2014no easy task, given the fact that Orcus has imprisoned the hero's soul and keeps it hidden and well guarded.\n Bathing the wand in positive energy causes it to crack and explode, but unless the above conditions are met, the wand instantly reforms on Orcus's layer of the Abyss.", attunement : true, weight : 4 } } { // pub_20160906_SKT.js MagicItemsList["wyrmskull throne"] = { // artifact name : "Wyrmskull Throne", source : [["SKT", 237]], type : "wondrous item", rarity : "artifact", notLegalAL : true, description : "", descriptionFull : "Built by dwarven gods and entrusted to the rulers of Shanatar, an ancient dwarven empire. The Wyrmskull Throne was a symbol of dwarven power and pride for ages untold. The throne hovers a foot off the ground and is a massive thing made of polished obsidian with oversized feet\u2014the impaled skulls of four ancient blue dragons. Runes glisten in the carved obsidian winking to life with blue energy when the throne's powers are activated.\n After the fall of Shanatar, the Wyrmskull Throne fell into the clutches of less honorable creatures. A band of adventurers wrested the throne from the aquatic elf tyrant Gantar Kraok and sold it to the storm giant Neri for a considerable fortune. Neri had the throne magically enlarged and gave it to her husband, King Hekaton, as a gift, along with one of the Ruling Scepters of Shanatar, which she had found in a wreck at the bottom of the Trackless Sea. Only a creature attuned to a Ruling Scepter and in possession of it can harness the powers of the Wyrmskull Throne, which has become the centerpiece of King Hekaton's throne room in the undersea citadel of Maelstrom. Fear of the throne's power has helped prevent evil giants from challenging or threatening Hekaton's leadership.\n Any creature not attuned to a Ruling Scepter who sits on the throne is paralyzed and encased in a magical force field. While encased, the creature can't be touched or moved from the throne. Touching a Ruling Scepter to the force field dispels the field, though the creature remains paralyzed until it is separated from the throne.\n Any creature seated on the throne can hear faint Whispers in Draconic\u2014the whisperings of four blue dragons whose skulls adorn the throne. Although powerless, these spirits try to influence the decisions of the throne's master\n " + toUni("Properties of the Throne") + ". The throne has 9 charges and regains all expended charges daily at dawn. A creature that sits on the throne while attuned to a Ruling Sceptor in its possession can harness the throne's properties, which are as follows:\n The throne gains a flying speed of 30 feet and can hover and flies where the creature wills. This property doesn't expend any charges.\n Both the throne and the creature sitting on it can move through earth and stone without disturbing the material they move through. This property doesn't expend any charges.\n As an action, the creature can expend 1 charge to cast Lightning Bolt (spell save DC 19) from the throne. The spell is cast as though using a 9th-level spell slot and deals 49 (14d6) lightning damage. The bolt discharges from the mouth of one of the throne's blue dragon skulls.\n As an action, the creature can expend 2 charges to cast the Globe of Invulnerability spell from the throne. The globe encloses both the creature and the throne.\n As an action, the creature can expend 3 charges to create a spectral image of an ancient blue dragon that surrounds both it and the throne. The spectral dragon lasts for 1 minute. At the end of each of the creature's turns, the spectral dragon makes one bite attack and two claw attacks against targets of the creature's choice. These attacks have the same attack bonus, reach, and damage as an ancient blue dragon's bite and claw attacks.\n " + toUni("Destroying the Throne") + ". The Wyrmskull Throne can be destroyed by breaking at least five Ruling Scepters of Shanatar simultaneously on it. This fact has never been recorded or sung of among the dwarves or any bards or storytellers, and it can't be discovered with an ability check. Characters who want to destroy the throne must go on a quest to learn the method for doing so. The throne's destruction triggers an explosion, as shards of obsidian fly out in all directions. Each creature and object within a 30-foot-radius sphere centered on the throne must succeed on a DC 21 Dexterity saving throw, taking 70 (20d6) slashing damage on a failed save, or half as much damage on a successful one." } } { // pub_20170919_ToA.js MagicItemsList["ring of winter"] = { name : "Ring of Winter", source : [["ToA", 207]], type : "ring", rarity : "artifact", notLegalAL : true, description : "", descriptionFull : "Artus Cimber has kept this item in his possession for over a century. The Ring of Winter is a golden band that resizes to fit snugly on the finger of its wearer. A thin layer of frost coats the outside of the ring, which normal heat can't melt. The ring feels ice cold to the touch and initially numbs the hand that wears it, but this cold ceases to be felt by one who is attuned to this ring.\n The Ring of Winter is sentient and tries to take control of any creature that wears it (see \"Sentient Magic Items\" chapter 7 of the Dungeon Master's Guide). If it succeeds, the ring compels its wearer to cause undue harm to everyone and everything around it, in a cold-hearted attempt to incur the wrath of enemies and bring the wearer's doom.\n " + toUni("Sentience") + ". The Ring of Winter is a sentient chaotic evil item with an Intelligence of 14, a Wisdom of 14, and a Charisma of 17. The ring communicates by transmitting emotion to the creature carrying or wielding it, and it has hearing and normal vision out to a range of 60 feet. The ring craves destruction, and it likes inflicting indiscriminate harm on others.\n " + toUni("Nondetection") + ". The Ring of Winter defies attempts to magically locate it. Neither the ring nor its wearer can be targeted by any divination magic or perceived through magical scrying sensors.\n " + toUni("Frozen Time") + ". As long as you wear the ring, you don't age naturally. This effect is similar to suspended animation, in that your age doesn't catch up to you once the ring is removed. The ring doesn't protect its wearer from magical or supernatural aging effects, such as the Horrifying Visage of a ghost.\n " + toUni("Cold Immunity") + ". While attuned to and wearing the ring, you have immunity to cold damage and don't suffer any ill effects from extreme cold (see chapter 5 of the Dungeon's Master Guide).\n " + toUni("Magic") + ". The Ring of Winter has 12 charges and regains all its expended charges daily at dawn. While wearing the ring, you can expend the necessary number of charges to activate one of the following properties:\n \u2022 You can expend 1 charge as an action and use the ring to lower the temperature in a 120-foot-radius sphere centered on a point you can see within 300 feet of you. The temperature in that area drops 20 degrees per minute, to a minimum of -30 degrees Fahrenheit. Frost and ice begin to form on surfaces once the temperature drops below 32 degrees. This effect is permanent unless you use the ring to end it as an action, at which point the temperature in the area returns to normal at a rate of 10 degrees per minute.\n \u2022 You can cast one of the following spells from the ring (spell save DC 17) by expending the necessary number of charges: Bigby's Hand (2 charges; the hand is made of ice, is immune to cold damage, and deals bludgeoning damage instead of force damage as a clenched fist), Cone of Cold (2 charges), flesh to ice (3 charges; as Flesh to Stone except that the target turns to solid ice with the density and durability of stone), Ice Storm (2 charges), Otiluke's Freezing Sphere (3 charges), Sleet Storm (1 charge), Spike Growth (1 charge; the spikes are made of ice), or Wall of Ice (2 charges).\n \u2022 You can expend the necessary number of charges as an action and use the ring to create either an inanimate ice object (2 charges) or an animated ice creature (4 charges). The ice object can't have any moving parts, must be able to fit inside a 10-foot cube, and has the density and durability of metal or stone (your choice). The ice creature must be modeled after a beast with a challenge rating of 2 or less. The ice creature has the same statistics as the beast it models, with the following changes: the creature is a construct with vulnerability to fire damage, immunity to cold and poison damage, and immunity to the following conditions: charmed, exhaustion, frightened, paralyzed, petrified, and poisoned. The ice creature obeys only its creator's commands. The ice object or creature appears in an unoccupied space within 60 feet of you. It melts into a pool of normal water after 24 hours or when it drops to 0 hit points. In extreme heat, it loses 5 (1d10) hit points per minute as it melts. Use the guidelines in chapter 8 of the Dungeon Master's Guide to determine the hit points of an inanimate object if they become necessary.\n\n" + toUni("Other Properties") + ". The Ring of Winter is rumored to possess other properties that can be activated only by an evil being whose will the ring can't break. Frost giants have long believed that the ring can be used to freeze entire worlds, while a djinni in the service of a Calishite pasha once claimed that the ring could be used to summon and control white dragons, as well as the mighty ice primordial named Cryonax.\n " + toUni("Destroying the Ring") + ". The ring is nigh indestructible, resisting even the most intense magical heat. If it is placed on the finger of the powerful archfey known as the Summer Queen, the ring melts away and is destroyed forever.", attunement : true, weight : 1 } MagicItemsList["staff of the forgotten one"] = { name : "Staff of the Forgotten One", source : [["ToA", 208]], type : "staff", rarity : "artifact", storyItemAL : true, description : "", descriptionFull : "This crooked staff is carved from bone and topped with the skull of a forgotten archmage whom Acererak destroyed long ago. Etched into the skull's forehead is Acererak's rune, which is known on many worlds as a sign of death.\n " + toUni("Beneficial Properties") + ". While the staff is on your person, you gain the following benefits:\n \u2022 Your proficiency bonus to Intelligence (Arcana) and Intelligence (History) checks is doubled.\n \u2022 You can't be blinded, charmed, deafened, frightened, petrified, or stunned.\n \u2022 Undead with a challenge rating of 2 or lower will neither threaten nor attack you unless you harm them.\n \u2022 You can wield the staff as a +3 quarterstaff that deals an extra 10 (3d6) necrotic damage on a hit.\n\n" + toUni("Invoke Curse") + ". The Staff of the Forgotten One has 7 charges and regains 1d4+3 expended charges daily at dawn. While holding the staff, you can use an action to expend 1 charge and target one creature you can see within 60 feet of you. The target must succeed on a Constitution saving throw (using your spell save DC) or be cursed. While cursed in this way, the target can't regain hit points and has vulnerability to necrotic damage. A Greater Restoration, Remove Curse, or similar spell ends the curse on the target.\n " + toUni("The Forgotten One") + ". The bodiless life force of a dead archmage empowers the staff and is imprisoned within it. The rune carved into the staff's skull protects Acererak from this spirit's vengeance. Each time a creature other than Acererak expends any of the staff's charges, there is a 50% chance that the life force tries to possess the staff wielder. The wielder must succeed on a DC 20 Charisma saving throw or be possessed, becoming an NPC under the DM's control. If the intruding life force is targeted by magic such as a Dispel Evil and Good spell, it becomes trapped in the staff once more. Once it takes control of another creature, the insane spirit of the dead archmage attempts to destroy the staff.\n " + toUni("Destroying the Staff") + ". A creature in possession of the staff can use an action to break it over one knee or a solid surface. The staff is destroyed and releases its remaining magic in an explosion that expands to fill a 30-foot-radius sphere centered on it. Each creature in the area must make a DC 18 Dexterity saving throw, taking 132 (24d10) force damage on a failed save, or half as much damage on a successful one. When the staff is destroyed, the life force of the Forgotten One is released to the afterlife. Where it goes is anyone's guess.", attunement : true, weight : 4 } } { // pub_20180723_WGtE.js // Eldritch Machines are not portable and are plot devices // It doesn't really make sense to add them to a character sheet MagicItemsList["dimensional seal"] = { name : "Dimensional Seal", source : [["WGtE", 118]], type : "eldritch machine", rarity : "legendary", description : "", descriptionFull : "A dimensional seal is a massive stone slab covered with a complex pattern of runes and sigils. The seal projects an invisible field with a radius of two miles. This field blocks all forms of conjuration magic and any other effect that involves teleportation or planar travel. It also negates the effects of any manifest zone within the field.\n Dimensional seals are usually found in the Eldeen Reaches and the Shadow Marches, as relics of the conflict between the Gatekeeper druids and the daelkyr. The techniques used to create these seals have been long lost. It's said that as a whole, the dimensional seals keep the daelkyr bound in Khyber and prevent Xoriat from becoming coterminous with Eberron. If enough of these seals are destroyed, there could be serious consequences for the world." } MagicItemsList["mabaran resonator"] = { name : "Mabaran Resonator", source : [["WGtE", 118]], type : "eldritch machine", rarity : "legendary", description : "", descriptionFull : "This horrific device draws on the power of Mabar, infusing the dead with the malign energies of the Endless Night. While it is active, any creature that dies within two miles of the resonator reanimates in one round as a zombie under the control of creature attuned to the device. At the DM's discretion, more powerful creatures can return as other forms of undead.", attunement : true } MagicItemsList["master's call"] = { name : "Master's Call", source : [["WGtE", 119]], type : "eldritch machine", rarity : "legendary", description : "", descriptionFull : "While this looks like a scrap heap assembled from shattered constructs and wreckage from the Mournland, this eldritch machine possesses tremendous power. You gain the following benefits while you are attuned to the master's call and within one mile of the device.\n \u2022 You can sense the presence and location of all warforged within ten miles.\n \u2022 You have advantage on any Charisma-based check made against a warforged.\n \u2022 While you are in contact with the master's call, you can use an action to target a warforged within ten miles of the device. You can send a telepathic message of up to 25 words to the target. They must make a Wisdom saving throw, with a difficulty of 14 + your Intelligence modifier. On a failed save, the target is affected by a Suggestion compelling them to follow your command. This effect doesn't require concentration; it lasts for eight hours, until you choose to end it, or until the victim successfully fulfils the command, whichever comes first. You can control up to eight warforged at once using this effect." } MagicItemsList["storm sphere"] = { name : "Storm Sphere", source : [["WGtE", 119]], type : "eldritch machine", rarity : "very rare", description : "", descriptionFull : "This eldritch machine is a form of dragonmark focus item; you must have the Greater Mark of Storms to attune to this device. Storm spires allow House Lyrandar to influence the weather, which can be a boon for the local population or a curse if the Lyrandar baron chooses to demand payment for desired conditions. You gain the following benefits while you are attuned to a storm spire.\n \u2022 You can sense weather patterns within a 100-mile radius of the spire and accurately predict the weather for up to 24 hours.\n \u2022 While you are within 60 feet of the spire, you can use an action to cast any of the following spells: Call Lightning, Gust of Wind. You cast these as 5th level spells, and Intelligence is your spellcasting ability.\n \u2022 While you are within 5 feet of the spire, you can cast Control Weather as a ten-minute ritual. This allows you to pick a point within 100 miles of the spire and influence the weather within a 10-mile radius of that point. Maintaining this effect requires concentration.\n \u2022 You can also use an action to influence the weather within a ten-mile radius of the spire itself; you don't have to use concentration to maintain this effect, and you can sustain this at the same time that you're manipulating distant weather.", attunement : true } MagicItemsList["spell sink"] = { name : "Spell Sink", source : [["WGtE", 119]], type : "eldritch machine", rarity : "legendary", description : "", descriptionFull : "This device creates an Antimagic Field that covers a three-mile radius around the spell sink. The form that it takes will depend on the nature of its creator. The Ashbound druids despise unnatural magic, and if they create a spell sink it will be a living artifact\u2014a twisted tree that consumes the mystical energies around it. Conversely, a mad artificer would create a massive vessel of dragonshards and exotic metals. It might be that the sole purpose of the device is to negate magic, or it could be that it is absorbing all magical energies in the area and storing that power for a cataclysmic effect!" } } { // pub_20180918_WDH.js MagicItemsList["stone of golorr"] = { name : "Stone of Golorr", source : [["WDH", 192]], type : "wondrous item", rarity : "artifact", storyItemAL : true, description : "", descriptionFull : "The Stone of Golorr is a glossy, greenish-gray stone that fits in the palm of your hand. The stone is actually an aboleth named Golorr, transformed by magic into an object.\n " + toUni("Random Properties") + ". The Stone of Golorr has the following properties, determined by rolling on the tables in the \"Artifacts\" section in chapter 7 of the Dungeon Master's Guide:\n \u2022 1 minor beneficial property\n \u2022 1 minor detrimental property\n\n" + toUni("Legend Lore") + ". The Stone of Golorr has 3 charges and regains 1d3 expended charges daily at dawn. While holding the stone, you can expend 1 of its charges to cast the Legend Lore spell.\n By using the stone to cast legend lore, you communicate directly with the aboleth, and it shares its knowledge with you. The aboleth can't lie to you, but the information it provides is often cryptic or vague.\n The aboleth knows where Lord Neverember's secret vault is located. It also knows that three keys are needed to open the vault and that a gold dragon named Aurinax inhabits the vault and guards its treasures.\n " + toUni("Failed Memory") + ". When your attunement to the Stone of Golorr ends, you must make a DC 16 Wisdom saving throw. On a failed save, you lose all memory of the stone being in your possession and all knowledge imparted by it. A Remove Curse spell cast on you has a 20% chance of restoring the lost knowledge and memories, and a Greater Restoration spell does so automatically.\n " + toUni("Sentience") + ". The Stone of Golorr is a sentient lawful evil magic item with an Intelligence of 18, a Wisdom of 15, and a Charisma of 18. It has hearing and darkvision out to a range of 120 feet. It can communicate telepathically with the creature that is attuned to it, as long as that creature understands at least one language. In addition, the aboleth learns the greatest desires of any creature that communicates telepathically with the stone.\n The Stone of Golorr hungers for information and prefers not to remain in the clutches of any creature for too long. Whenever the stone desires a new owner, it demands to be given to another intelligent creature as quickly as possible. If its demands are ignored, it tries to take control of its owner (see \"Sentient Magic Items\" in chapter 7 of the Dungeon Master's Guide).\n " + toUni("Personality") + ". The Stone of Golorr has an alien intellect that is both domineering and hungry for knowledge. It thinks of itself as an ageless and immortal god.\n " + toUni("Destroying the Stone") + ". While in stone form, the aboleth isn't a creature and isn't subject to effects that target creatures. The Stone of Golorr is immune to all damage. Casting an Antipathy/Sympathy spell on the stone destroys it if the antipathy effect is selected and the spell is directed to repel aberrations. When the spell is cast in this way, the stone transforms into mucus and is destroyed, and Golorr the aboleth appears in an unoccupied space within 30 feet of the stone's remains. The aboleth is incensed by the stone's destruction, and it attacks all other creatures it can see.", attunement : true } } { // pub_20181107_LLoK.js MagicItemsList["deck of several things"] = { // plot device name : "Deck of Several Things", source : [["LLoK", 53]], type : "wondrous item", rarity : "legendary", storyItemAL : true, description : "", descriptionFull : "Stored in a leather pouch, this unique deck contains twenty-two colored cards made of some strong but unknown metal, each of which features a design printed as a mosaic of raised dots. Before you draw a card, you must declare how many cards you intend to draw and then draw them randomly (you can use an altered deck of playing cards to simulate the deck). Any cards drawn in excess of this number have no effect. Otherwise, as soon as you draw a card from the deck, its magic takes effect. You must draw each card no more than 1 hour after the previous draw. If you fail to draw the chosen number, the remaining number of cards fly from the deck on their own and take effect all at once.\n Once a card is drawn, it fades from existence. Unless the card is the Fool or the Jester, the card reappears in the deck, making it possible to draw the same card twice.\n\n" + toUni("1d22\tPlaying Card\tCard") + "\n1\tAce of diamonds\tVizier\n2\tKing of diamonds\tSun\n3\tQueen of diamonds\tMoon\n4\tJack of diamonds\tStar\n5\tTwo of diamonds\tComet\n6\tAce of hearts\tThe Fates\n7\tKing of hearts\tThrone\n8\tQueen of hearts\tKey\n9\tJack of hearts\tKnight\n10\tTwo of hearts\tGem\n11\tAce of clubs\tTalons\n12\tKing of clubs\tThe Void\n13\tQueen of clubs\tFlames\n14\tJack of clubs\tSkull\n15\tTwo of clubs\tIdiot\n16\tAce of spades\tDonjon\n17\tKing of spades\tRuin\n18\tQueen of spades\tEuryale\n19\tJack of spades\tRogue\n20\tTwo of spades\tBalance\n21\tJoker (with TM)\tFool\n22\tJoker (no TM)\tJester\n\n\n " + toUni("Balance") + ". Your mind suffers a wrenching alteration, causing your alignment to change for the duration of the adventure. Lawful becomes chaotic, good becomes evil, and vice versa. If you are true neutral or unaligned, this card has no effect on you.\n " + toUni("Comet") + ". If you single-handedly defeat the next hostile monster or group of monsters you encounter, you have advantage on ability checks made using one skill of your choice for the duration of the adventure. Otherwise, this card has no effect.\n " + toUni("Donjon") + ". You are instantly teleported to and confined within the prison of the Monastery of the Distressed Body (area M6). Everything you were wearing and carrying stays behind in the space you occupied when you disappeared. You draw no more cards.\n " + toUni("Euryale") + ". The card's medusa-like visage curses you. You take a -1 penalty on saving throws for the duration of the adventure.\n " + toUni("The Fates") + ". Reality's fabric unravels and spins anew, allowing you to avoid or erase one event as if it never happened. You can use the card's magic as soon as you draw the card or at any other point during the adventure.\n " + toUni("Flames") + ". The Grand Master of the Monastery of the Distressed Body becomes your enemy. The bone devil seeks your ruin, savoring your suffering before attempting to slay you. If the Grand Master has already been defeated, you gain the enmity of Garret Levistusson's patron\u2014a similarly powerful devil.\n " + toUni("Fool") + ". For the duration of the adventure, you lose proficiency with one skill or gain disadvantage on all checks made with one skill (with the skill and the penalty determined by the DM). Discard this card and draw from the deck again, counting both draws as one of your declared draws.\n " + toUni("Gem") + ". The 1,000 gp hoard of the leprechaun from the Wilderness Encounters table (see appendix A) appears at your feet. If that treasure has already been claimed, you gain an equivalent hoard.\n " + toUni("Idiot") + ". Reduce your Intelligence by 1d4 + 1 (to a minimum score of 1) for the duration of the adventure. You can draw one additional card beyond your declared draws.\n " + toUni("Jester") + ". You gain proficiency in a skill of your choice for the duration of the adventure, or you can draw two additional cards beyond your declared draws.\n " + toUni("Key") + ". A common or uncommon magic weapon with which you are proficient, or a spell scroll featuring a spell of a level you can cast, appears in your hands. The DM chooses the weapon or spell, which you possess for the duration of this adventure.\n " + toUni("Knight") + ". You gain the service of any of the NPCs in the \"Hirelings\" section not currently with the party, who appears in a space you choose within 30 feet of you. The NPC serves you loyally for the duration of the adventure, believing that the fates have drawn them to you. You control this character.\n " + toUni("Moon") + ". You are granted the ability to cast any spell of 5th level or lower, and can use that ability 1d3 times for the duration of the adventure.\n " + toUni("Rogue") + ". An NPC of the DM's choice becomes secretly hostile toward you. The identity of your new enemy isn't known until the NPC or someone else reveals it. Any enchantment spell cast on the NPC at 6th level or higher can end the NPC's hostility toward you.\n " + toUni("Ruin") + ". All forms of wealth that you carry or own, other than magic items, are lost to you. This wealth can be recovered either in the treasury of the Monastery of the Distressed Body (area M10) or Kwalish's lab in Daoine Gloine (area O7), whichever comes later in the adventure.\n " + toUni("Skull") + ". You summon an avatar of death\u2014a mechanical skeleton (use bone naga statistics) clad in a tattered black robe. It appears in a space of the DM's choice within 10 feet of you and attacks you, warning all others that you must win the battle alone. The avatar fights until you die or it drops to 0 hit points, whereupon it disappears. If anyone tries to help you, the helper summons its own avatar of death. A creature slain by an avatar of death can't be restored to life.\n " + toUni("Star") + ". Increase one of your ability scores by 1 for the duration of the adventure. The score can exceed 20 but can't exceed 24.\n " + toUni("Sun") + ". You gain proficiency in the skill of your choice for the duration of the adventure. In addition, a common or uncommon wondrous item appears in your hands. The DM chooses the item, which you possess for the duration of this adventure.\n " + toUni("Talons") + ". Every magic item you wear or carry is lost to you. These items can be recovered either in the treasury of the Monastery of the Distressed Body (area M10) or Kwalish's lab in Daoine Gloine (area O7), whichever comes later in the adventure.\n " + toUni("Throne") + ". You gain proficiency in the Persuasion skill and you double your proficiency bonus on checks made with that skill for the duration of the adventure. In addition, the Monastery of the Distressed Body's brains in jars regard you thereafter as the monastery's rightful master. You must defeat or otherwise clear out the Grand Master and its servants before you can claim the monastery as yours.\n " + toUni("Vizier") + ". At any one time you choose within the duration of the adventure, you can ask a question in meditation and mentally receive a truthful answer to that question. Besides information, the answer helps you solve a puzzling problem or other dilemma. In other words, the knowledge comes with wisdom on how to apply it.\n " + toUni("The Void") + ". This black card spells disaster. Your soul is drawn from your body and held within machinery in either the control room of the Monastery of the Distressed Body (area M8) or Kwalish's lab in Daoine Gloine (area O7), whichever comes later in the adventure. While your soul is trapped in this way, your body is incapacitated. Divination, Contact Other Plane, or a similar spell of 4th level or higher reveals the location of the machinery that holds your soul. You draw no more cards." } } { // pub_20190917_DiA.js MagicItemsList["sword of zariel"] = { name : "Sword of Zariel", source : [["DiA", 225]], type : "weapon (longsword)", rarity : "artifact", storyItemAL : true, description : "", descriptionFull : "This longsword belonged to the angel Zariel before her fall from grace. Fashioned from celestial steel, it gives off a faint glow and hum. The weapon chooses who can attune to it and who can't. It desires a wielder who embodies bravery and heroism.\n "+ toUni("Attunement") + ".The sword allows you to attune to it immediately, without having to take a short rest. The first time you attune to the sword, you are transformed into a heavenly, idealized version of yourself, blessed with otherworldly beauty and a touch of heaven in your heart. Neither magic nor divine intervention can reverse this transformation. Your alignment becomes lawful good, and you gain the following traits:\n \u2022 " + toUni("Angelic Language") + ". You can speak, read, and write Celestial.\n \u2022 " + toUni("Celestial Resistance") + ". You have resistance to necrotic and radiant damage.\n \u2022 " + toUni("Divine Presence") + ". Your Charisma score becomes 20, unless it is already 20 or higher.\n \u2022 " + toUni("Feathered Wings") + ". You sprout a beautiful pair of feathered wings that grant you a flying speed of 90 feet and the ability to hover. If you already have a different kind of wings, these new wings replace the old ones, which fall off.\n \u2022 " + toUni("Truesight") + ". Your eyes become luminous pools of silver. You can see in normal and magical darkness, see invisible creatures and objects, automatically detect visual illusions and succeed on saving throws against them, perceive the original form of a shapechanger or a creature that is transformed by magic, and see into the Ethereal Plane, all within a range of 60 feet.\n \u2022 " + toUni("New Personality") + ". You gain new personality traits, determined by rolling once on each of the following tables. These traits override any conflicting personality trait, ideal, bond, or flaw.\n\n"+ toUni("d8\tPersonality Trait")+ "\n 1\tI treat all beings, even enemies, with respect."+ "\n 2\tI won't tell a lie."+ "\n 3\tI enjoy sharing my philosophical worldview and experiences with others."+ "\n 4\tI cut right to the chase in every conversation."+ "\n 5\tI often quote (or misquote) religious texts."+ "\n 6\tI anger quickly when I witness cruelty or injustice."+ "\n 7\tMy praise and trust are earned and never given freely."+ "\n 8\tI like everything clean and organized.\n\n"+ toUni("d6\tIdeal")+ "\n 1\tCharity. I always help those in need. (Good)"+ "\n 2\tFaith. I choose to follow the tenets of a particular lawful good deity to the letter. (Lawful)"+ "\n 3\tResponsibility. It is the duty of the strong to protect the weak. (Lawful)"+ "\n 4\tRespect. All people deserve to be treated with dignity. (Good)"+ "\n 5\tHonor. The way I conduct myself determines my reward in the afterlife. (Lawful)"+ "\n 6\tRedemption. All creatures are capable of change for the better. (Good)\n\n"+ toUni("d6\tBond")+ "\n 1\tI have a favorite religious hymn that I constantly hum."+ "\n 2\tI must keep a written record of my beliefs and the sins that I witness. When finished, this book will be my gift to the multiverse."+ "\n 3\tI have cherished memories of Idyllglen, though I've only seen this bucolic town in dreams."+ "\n 4\tI would die for those who fight beside me, regardless of their faults."+ "\n 5\tI seek to honor the angel Zariel by destroying fiends and other evildoers wherever I find them."+ "\n 6\tThe Sword of Zariel has chosen me. I shall not fail to wield it justly.\n\n"+ toUni("d6\tFlaw")+ "\n 1\tI am too quick to judge others."+ "\n 2\tI offer forgiveness too readily."+ "\n 3\tI will sacrifice innocent lives for the greater good."+ "\n 4\tFlaw? What flaw? I am flawless. Utter perfection!"+ "\n 5\tI allow nothing to stand in the way of my crusade to eradicate evil from the multiverse."+ "\n 6\tI ignore those who do not support my plans, for my calling is higher than all others.\n\n"+ toUni("Holy Light") + ".The sword sheds bright light in a 5-foot radius and dim light for an additional 5 feet. Fiends find the sword's light disconcerting and painful, even if they can't see it, and have disadvantage on attack rolls made within the weapon's radius of bright light.\n As a bonus action, you can intensify the sword's light, causing it to shed bright light in a 15-foot radius and dim light for an additional 15 feet, or reduce its glow to its normal intensity.\n "+ toUni("Random Properties") + ".The sword has 2 minor minor beneficial properties.\n "+ toUni("Searing Radiance") + ".The sword deals an extra 9 (2d8) radiant damage to any creature it hits, or 16 (3d10) radiant damage if you're wielding the weapon with two hands. An evil creature that takes this radiant damage must succeed on a DC 17 Constitution saving throw or be blinded until the end of its next turn.\n "+ toUni("Sentience") + ".The Sword of Zariel is a sentient, lawful good item with an Intelligence of 10, a Wisdom of 20, and a Charisma of 18. It has hearing and normal vision out to a range of 30 feet.\n The sword communicates by transmitting emotion to the creature carrying or wielding it.\n "+ toUni("Truth Seer") + ".While holding the sword, you gain advantage on all Wisdom (Insight) checks.\n "+ toUni("Destroying the Sword") + ".\n Zariel can destroy the sword simply by grasping it. She couldn't bring herself to do so when she was an angel, but as an archdevil she has no compunction about ridding the multiverse of the weapon. The sword is also destroyed if it's used to shatter the Companion (see \"Shattering the Companion\"), unless the blade is wielded by an angel of challenge rating 15 or higher, or a good-aligned cleric or paladin of at least 10th level.\n If Zariel is killed for good (that is, if she dies in the Nine Hells), the sword becomes no harder to destroy than a normal longsword.", attunement : true, prerequisite : "Requires attunement by a creature the sword deems worthy" } } { // pub_20200915_IDRotF.js MagicItemsList["chwinga charms"] = { // contains contributions by Nod_Hero on Discord name : "Chwinga Charms", source : [["F"]], type : "wondrous item", rarity : "rare", descriptionFull : "This tiny object looks like a snowflake. Different types of chwinga charms exist, each with a different effect.", allowDuplicates : true, choices : ["Animal Conjuring", "Biting Cold", "Bounty", "Cold Resistance", "Heroism", "Snowball Strike", "The Ice Troll", "The Snow Walker", "The Traveler's Haven", "Vitality"], "animal conjuring" : { description : "This tiny object looks like a snowflake. As an action, I can cast the Conjure Animals spell (3rd-level version). The charm disappears after 3 uses.", usages : 3, recovery : "never", spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "1 charge", spells : ["conjure animals"], selection : ["conjure animals"], firstCol : 1 }] }, "biting cold" : { description : "This tiny object looks like a snowflake. As a bonus action, I can can expend 1 of the charm's charges to wreathe my weapon attacks with biting cold for 1 minute. Until this effect ends, I deal an extra 1d6 cold damage when I hit with a melee or ranged weapon attack. The charm disappears after 3 uses.", usages : 3, recovery : "never", action : [["bonus action", ""]] }, "bounty" : { description : "This tiny object looks like a snowflake. As an action, I can can expend 1 of the charm's charges to cast the Create Food And Water spell, requiring no components. The charm disappears after 3 uses.", usages : 3, recovery : "never", spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "1 charge", spells : ["create food and water"], selection : ["create food and water"], firstCol : 1 }] }, "cold resistance" : { description : "This tiny object looks like a snowflake. As an action, I can expend the charm to give myself resistance to cold damage for 24 hours.", usages : 1, recovery : "never", action : [["action", ""]] }, "heroism" : { description : "This tiny object looks like a snowflake. As an action, I can can expend the charm to give myself the benefit of a Potion of Heroism. I gain 10 temporary hit points that last for 1 hour and am under the effect of the Bless spell (no concentration required).", usages : 1, recovery : "never", action : [["action", ""]] }, "snowball strike" : { description : "As a bonus action, I can can expend 1 of the charm's charges to create a magical snowball in my hand and throw it. The snowball is a magic ranged weapon , has a 20/60 range, deals 1d4 cold damage, and scores a critical hit on a roll of 19 or 20. On a critical hit, the target is blinded until the end of its next turn", usages : 5, recovery : "never", action : [["bonus action", ""]] }, "the ice troll" : { description : "This tiny object looks like a snowflake. As a reaction when I take cold damage, I can expend the charm to reduce the damage to 0. I regain a number of hit points equal to half the cold damage I would have taken.", usages : 1, recovery : "never", action : [["reaction", ""]] }, "the snow walker" : { description : "As an action, I can expend 1 of the charm's charges to gain these 24 hour benefits: I can see 60 ft through areas heavily obscured by snow, I am immune to the effects of extreme cold (described in DMG), and I and my allies within 15 feet of me ignore snow/ice difficult terrain. The charm disappears after 3 uses.", usages : 3, recovery : "never", action : [["action", ""]] }, "the traveler's haven" : { description : "This tiny object looks like a snowflake. As an action, I can expend 1 of the charm's charges to cast the Leomund's Tiny Hut spell, no components required. The charm disappears after 3 uses.", usages : 3, recovery : "never", spellFirstColTitle : "Ch", spellcastingBonus : [{ name : "1 charge", spells : ["leomund's tiny hut"], selection : ["leomund's tiny hut"], firstCol : 1 }] }, "vitality" : { description : "As an action, I can can expend the charm to give myself the benefit of a Potion of Vitality. I remove any exhaustion I am suffering and am cured of any disease or poison affecting me. For the next 24 hours, I regain the maximum number of hit points for any Hit Die I spend.", usages : 1, recovery : "never", action : [["action", ""]] } }; } { // pub_20201117_TCoE.js MagicItemsList["baba yaga's mortar and pestle"] = { // contains contributions by lizrdgizrd name : "Baba Yaga's Mortar and Pestle", source : [["T", 121]], type : "wondrous item", rarity : "artifact", description : "I can expand the mortar to fit up to a Large creature. I can make the pestle a quarterstaff and back at will. When hitting with a melee attack I can add 1d8 force for each charge expended up to 3. Holding both, I can fill the mortar with any nonmagical plant, fluid or mineral worth 10 gp by speaking its name.", descriptionFull : "The creations of the immortal Bab Yaga defy the laws of mortal magic. Among the notorious implements that cement her legend on countless worlds are the artifacts that propel her through the planes: Baba Yaga's Mortar and Pestle. These signature tools of Baba Yaga are a single artifact for purposes of attunement. Should the two objects become separated, the pestle appears next to the mortar at the next dawn.\n Random Properties. This artifact has the following random properties, which you can determine by rolling on the teables in the \"Artifacts\" section of the Dungeon Master's Guide:\n 2 minor beneficial properties\n 1 major beneficial property\n 1 minor detrimental property\n Properties of the Mortar. The mortar is a Tiny wooden bowl. However, the mortar increases in size to accommodate anything you place inside, expanding--if there's enough space--up to Large size, meaning it can hold even a Large creature.\n Properties of the Pestle. The pestle is a 6-inch-long, worn wooden tool. Once during your turn while you are holding the pestle, you can extend it into a quarterstaff or shrink it back into a pestle (no action required). As a quarterstaff, the pestle is a magic weapon that grants a +3 bonus to attack and damage rolls made with it.\n The pestle has 12 charges. When you hit with a melee attack using the pestle, you can expend up to 3 of its charges to deal an extra 1d8 force damage for each charge expended. The pestle regains all expended charges daily at dawn.\n Perfect Tools. While holding the mortar and pestle, you can use your action to say the name of any nonmagical plant, mineral, or fluid worth 10 gp or less. The mortar instantly fills with the desired amount of that material. Once you use this action you can't do so again until you finish a short or long rest.\n You can also use the artifact as alchemist's supplies, brewer's supplies, cook's utensils, an herbalism kit, and a poisoner's kit. You have advantage on any check you make using the artifact as one of these tools.\n Primal Parts. As an action while the pestle and the mortar is within 5 geet of you, you can command the pestle to grind. For the next minute, or until you use your action to verbally command it to stop, the pestle moves on its own, grinding the contents of the mortar into a mush or fine powder that's equally useful for cooking or alchemy. At the start of each of your turns, whatever is in the mortar takes 4d10 force damage. If this reduces the target's hit points to 0, the target is reduce to powder, pulp, or paste, as appropriate. Only magic items are unaffected. If you wish, when the pestle stops, you can have the mortar separate its contents--like powdered bone, crushed herbs, pulped organs--into separate piles.\n Traverse the Night. If you are holding the pestle while you are inside the mortar, you can use your action to verbally command the mortar to travel to a specific place or creature. You don't need to know where your destination is, but it must be a specific destination--not just the nearest river or a red dragon's lair. If the stated destination is within 1,000 miles of you, the mortar lifts into the air and vanishes. You and any creatures in the mortar travel through a dreamlike sky, with hazy reflections of the world passing by below. Creatures might see images of you streaking through the sky between your point of origin and the destination. You arrive at the location 1 hour later or, if it is night, 1 minute later.\n Bones Know Their Home. When you command the mortar to travel, you can instead throw out the dust or paste of something ground by the mortar and name a location on a different plane of existence or a different world on the Material Plane. If that material came from a creature native to the named plane or world, the mortar travels through an empty night sky to an unoccupied space at that destination, arriving in 1 minute.\n Destroying the Mortar and Pestle. The mortar and pestle are destroyed if they are crushed underfoot by the Dancing Hut of Baba Yaga or by Baba Yaga herself.", attunement : true, usages : 12, recovery : "dawn", action : [ ["action", "Traverse the Night"], ["action", "Primal Parts"], ["action", "Perfect Tools"] ], weaponOptions : [{ name : "Baba Yaga's Pestle", source : [["T", 121]], regExpSearch : /^(?=.*pestle)(?=.*yaga's)(?=.*baba).*$/i, description : "Versatile (1d8); 1-3 charges per attack add 1d8 force damage per charge", modifiers : [3,3], type : "simple", ability : 1, abilitytodamage : true, damage : [1, 6, "bludgeoning"], range : "Melee", tooltip : "I have to expand Baba Yaga's Pestle into a quarterstaff before I may use it as a weapon.", defaultExcluded : true }] } MagicItemsList["crook of rao"] = { // contains contributions by lizrdgizrd name : "Crook of Rao", source : [["T", 123]], type : "wondrous item", rarity : "artifact", description : "While holding the crook, I can expend 1 or more charges to cast one of its spells. I can spend 10 minutes to banish all fiends below CR 19 within 1 mile to their home plane for 100 years.", descriptionFull : "Ages ago, the serene god Rao created a tool to shield his fledgling faithful against the evils of the Lower Planes. Yet, as eons passed, mortals developed their own methods of dealing with existential threats, and the crook was largely forgotten. In recent ages, though, the Crook of Rao was rediscovered and leveraged against the rising power of the Witch Queen Iggwilv (one of the names of the wizard Tasha). Although she was defeated, Iggwilv managed to damage the crook during the battle, infecting it with an insidious curse--and the potential for future victory. In the aftermath, the crook was again lost. Occasionally it reappears, but the famed artifact is not what it was. Whether or not the artifact's bearers realize its full threat, few risk using the Crook of Rao--potentially for the final time.\n Random Properties. The artifact has the following random properties, which you can determine by reolling on the tables in the \"Arifacts\" section of the Dungeon Master's Guide:\n 2 minor beneficial properties\n 1 major beneficial property\n 1 minor detrimental property\n Spells. The crook has 6 charges. While holding it, you can use an action to expend 1 or more of its charges to cast one of the following spells (save DC 18) from it: aura of life (2 charges), aura of purity (2 charges), banishment (1 charge), beacon of hope (1 charge), mass cure wounds (3 charges). The crook regains 1d6 expended charges daily at dawn.\n Absolute Banishment. While you are attuned to the crook and holding it, you can spend 10 minutes to banish all but the mightiest fiends within 1 mile of you. Any fiend with a challenge rating of 19 or higher is unaffected. Each banished fiend is sent back to its home plane and can't return to the plane the Crook of Rao banished it from for 100 years.\n\nSee the Notes section for further information.", toNotesPage : [{ name : "Crook of Rao", note : [ "\nFailing Matrix", "Whenvever the Crook of Rao's Absolute Banishment property is used, or when its last charge is expended, roll on the Extraplanar Reversal table. Any creature conjured as a result of this effect appear in random unoccupied spaces within 60 feet of you and are not under your control.", "\nExtraplanar Reversal", " d100 Effect", "01-25 A portal to a random plane opens. The portal closes after 5 mintues.", "26-45 2d4 imps and 2d4 quasits appear.", "46-60 1d8 succubi/incubi appear.", "61-70 1d10 barbed devils and 1d10 vrocks appear.", "71-80 1 arcanoloth, 1 night hag, and 1 rakshasa appear.", "81-85 1 ice devil and 1 marilith appear.", "86-90 1 balor and 1 pit fiend appear. At the DM's discretion, a portal opens\n into the presence of a archdevil or demon lord instead, then closes\n after 5 minutes.", "91-00 Iggwilv's Curse (see the Iggwilv's Curse property).", "\nIggwilv's Curse", "When the Crook was last used against Iggwilv, the Witch Queen lashed out at the artifact, infecting its magical matrix. Over the years, this curse has spread within the crook, threatening to violently pervert its ancient magic. If this occurs, the Crook of Rao, as it is currently known, is destroyed, its magical matrix inverting and exploding into a 50-foot diameter portal. This portal functions as a permanent gate spell cast by Iggwilv. The gate then, once per round on an initiateve count 20, audibly speaks a fiend's name in Iggwilv's voice, doing so until the gate calls on every fiend ever banished by the Crook of Rao. If the fiend still exists, it is drawn through the gate. This process takes eighteen years to complete, at the end of which the gate becomes a permanent portal to Pazunia, the first layer of the Abyss.", "\nDestroying or Repairing the Crook", "The Crook of Rao can either be destroyed or repaired by journeying to Mount Celestiaand obtaining a tear from the eternally serene god Rao. One way to make the emontionless god cry would be to reunite Rao with the spirit of his first worshipper who sought revelations byond the multiverse long ago. The Crook dissolves if immersed in teh god's tear for a year and a day. If washed in the tear daily for 30 days the Crook loses its Failing Matrix Property.", ] }], attunement : true, usages : 6, recovery : "dawn", action : [["action", "Absolute Banishment"]], spellcastingBonus : [{ name : "Aura of Life", spells : ["aura of life"], selection : ["aura of life"], firstCol : "2c", allowUpCasting : true, fixedDC : 18, },{ name : "Aura of Purity", spells : ["aura of purity"], selection : ["aura of purity"], firstCol : "2c", allowUpCasting : true, fixedDC : 18, },{ name : "Banishment", spells : ["banishment"], selection : ["banishment"], firstCol : "1c", allowUpCasting : true, fixedDC : 18, },{ name : "Beacon of Hope", spells : ["beacon of hope"], selection : ["beacon of hope"], firstCol : "1c", allowUpCasting : true, fixedDC : 18, },{ name : "Mass Cure Wounds", spells : ["mass cure wounds"], selection : ["mass cure wounds"], firstCol : "3c", allowUpCasting : true, fixedDC : 18, }] } MagicItemsList["demonomicon of iggwilv"] = { // contains contributions by lizrdgizrd name : "Demonomicon of Iggwilv", source : [["T", 125]], type : "wondrous item", rarity : "artifact", description : "While holding the Demonomicon, when I make an Intelligence check regarding demons or a Wisdom check related to the Abyss I can add double my proficiency bonus to the check. When I make a spell damage roll against a fiend I apply the maximum damage.", descriptionFull : "An expansive treatise documenting the Abyss's infinite layers and inhabitants, the Demonomicon of Iggwilv is the most thorough and blasphemous tome of demonology in the multiverse. The tome recounts both the oldest and most current profanities of the Abyss and demons. Demons have attempted to censor the text, and while sections have been ripped from the book's spine, the general chapters remain, ever revealing demonic secrets. And the book holds more than blasphemies. Caged behind lines of script roils a secret piece of the Abyss itself, which keeps the book up-to-date, no matter how many pages are removed, and it longs to be more than mere reference material.\n Random Properties. The artifact has the following random properties, which you can determine by rolling on the tables in the \"Artifacts\" section of the Dungeon Master's Guide:\n 2 minor beneficial properties\n 1 minor detrimental property\n 1 major detrimental property\n Spells. The book has 8 charges. It regains 1d8 expended charges daily at dawn. While holding it, you can use an action to cast Tasha's hideous laughter from it or to expend 1 or more of its charges to cast one of the following spells (save DC 20) from it: magic circle (1 charge), magic jar (2 charges), planar ally (3 charges), planar binding (2 charges), plane shift (to layers of the Abyss only; 3 charges), summon fiend (3 charges).\n Abyssal Reference. You can reference the Demonomicon whenever you make an Intelligence check to discern information about demons or a Wisdom (Survival) check related to the Abyss. When you do so, you can add double your proficiency bonus to the check.\n\nSee the Notes section for further information.", attunement : true, toNotesPage : [{ name : "Demonomicon of Iggwilv", note : [ "\nFiendish Scourging", "Your magic causes pain to fiends. While carrying the book, when you make a damage roll for a spell you cast against a fiend, you use the maximum possible result instead of rolling.", "\nEnsnarement", "While carrying the book, whenever you cast the magic circle spell naming only fiends, or the planar binding spell targeting a fiend, the spell is cast at 9th level, regardless of what level spell slot you used, if any. Additionally, the fiend has disadvantage on its saving throw against the spell.", "\nContainment", "The first 10 pages of the Demonomicon are blank. As an action while holding the book, you can target a fiend that you can see that is trapped within a magic circle. The fiend must succeed on a DC 20 Charisma saving throw with disadvantage or become trapped within one of the Demonomicon's empty blank pages, which fills with writing detailing the trapped creature's widely known name and depravities. Once Used, this action can't be used again until the next dawn.\n When you finish a long rest, if you and the Demonomicon are on the same plan of existence, the trapped creature of the highest challenge rating within the book can attempt to possess you. You must make a DC 20 Charisma saving throw. On a failure, you are possessed by the creature, which controls you like a puppet. The possessing creature can release you as an action, appearing in the closest unoccupied space. On a successful save, the fiend can't try to possess you again for 7 days.\n When the tome is discovered it has 1d4 fiends occupying its pages, typically an assortment of demons.", "\nDestroying the Demonomicon", "To destroy the book, six different demon lords must each tear out a sixth of the book's pages. If this occurs, the pages reappear after 24 hours. Before all those hours pass, anyone who opens the book's remaining binding is transported to a nascent layer of the Abyss that lies hidden within the book. At the heart of this dadly, semi-sentient domain lies a long-lost artifact, Fraz-Urb'luu's Staff. If the staff is dragged from the pocket plane, the tome is reduced to a mundane and quite out-of-date copy of the Tome of Zyx, the work that served as the foundation for the Demonomicon. Once the staff emerges, the demon lord Fraz-Urb'luu instantly knows.", ] }], usages : 8, recovery : "dawn", action : [["action", "Containment"]], spellcastingBonus : [{ name : "Magic Circle", spells : ["magic circle"], selection : ["magic circle"], firstCol : "1c", allowUpCasting : true, fixedDC : 20, },{ name : "Magic Jar", spells : ["magic jar"], selection : ["magic jar"], firstCol : "3c", allowUpCasting : true, fixedDC : 20, },{ name : "Planar Ally", spells : ["planar ally"], selection : ["planar ally"], firstCol : "3c", allowUpCasting : true, fixedDC : 20, },{ name : "Planar Binding", spells : ["planar binding"], selection : ["planar binding"], firstCol : "2c", allowUpCasting : true, fixedDC : 20, },{ name : "Plane Shift (Abyss)", spells : ["plane shift"], selection : ["plane shift"], firstCol : "3c", allowUpCasting : true, fixedDC : 20, },{ name : "Summon Fiend", spells : ["summon fiend"], selection : ["summon fiend"], firstCol : "3c", allowUpCasting : true, fixedDC : 20, }] } MagicItemsList["mighty servant of leuk-o"] = { // contains contributions by lizrdgizrd name : "Mighty Servant of Leuk-o", source : [["T", 131]], type : "wondrous item", rarity : "artifact", description : "While attuned to this construct, I can enter it and control it along with one other creature. See the Notes section for full information and stat block.", descriptionFull : " Named for the warlord who infamously employed it, the Mighty Servant of Leuk-o is a fantastically powerful, 10-foot-tall machine that turns into an animate construct when piloted. Crafted of a gleaming black alloy of unknown origin, the servant is often described as a combination of a disproportioned dwarf and an oversized beetle. The servant contains enough space for 1 ton of cargo and a crew compartment within, from which up to two Medium creatures can control it--and potentially execute a spree of unstoppable destruction.\n Tales of the servant's origins involve more conjecture than fact, often referring to otherworldly beings, the mysterious Barrier Peaks in Oerth, and the supposedly related device known as the Machine of Lum the Mad. The best details on the device's origins and operation can be found in the Mind of Metal, a tome of artificer's secrets that connects the device to the traditions of the lost Olman people, and which was written by Lum the Mad's several tiems over granddaughter, Lum the Maestro, while she reconstructed the long disassembled Mighty Servant of Leuk-o.\n Dangerous Attunement. Two creatures can be attuned to the servant at a time. If a third creature tries to attune to it, nothing happens.\n The servant's controls are accessed by a hatch in its upper back, which is easily opened while there are no creatures attuned to the artifact.\n Attuning to the artifact requires two hours, which can be undertaken as part of a long rest, during which time you must be inside the servant, interating with its controls. While crew memebers are attuning themselves, any creature or structure outside and within 50 feet of the servant has a 25 percent chance of being accidentally targeted by one of its Destructive Fist attacks once during the attunement. This process must be undergone every time a creature attunes itself to the artifact.\n\n See the Notes section for further information.", toNotesPage : [{ name : "Mighty Servant of Leuk-o", note : [ "\nControlling the Servant.", " While any creatures are attuned to the artifact, attuned creatures can open the hatch as easily as any other door. Other creatures can open the hatch as an action with a successful DC 25 Dexterity check using thieve's tools. A knock spell cast on the hatch also opens it until the start of the caster's next turn.\n A creature can enter or exit through the hatch by spending 10 feet of momvement. Those inside the servant have total cover from effects originating outside it. The controls within it allow creatures to see outside without obstruction.\n While you are inside the servant, you can command it by using the controls. During your turn (for either attuned creature), you can command it in the following ways:\n \u2022 Open or close the hatch (no action required, once per turn)\n \u2022 Move the servant up to its speed (no action requred)\n \u2022 As an action, you can command the servant to take one of the actions in its stat block or some other action.\n \u2022 When a creature provokes an opportunity attack from the servant, you can use your reaction to command the servant to make one Destructive Fist attack against that creature.\n While there are no attuned creatures inside the servant, it is an inert object.\n ", "\nGhost in the Machine.", " Upon his death, the soul of the mighty warlord Leuk-o was drawn into the artifact and has become its animating force. The servant has been known to attack or move of its own accord, particularly if doing so will cause destruction. Once every 24 hours, the servant, at the DM's discretion, takes one action while uncrewed.\n If the servant loses half of its hit points or more, each creature attuned to it must succeed on a DC 20 Wisdom saving throw or be charmed for 24 hours. While charmed in this way, the creature goes on a destructive spree, seeking to destroy structures and attack any unattuned creatures within sight of the servant, starting with those threatening the artifact--preferably using the servant, if possible.", "\nSelf-Destruct", " By inputting a specific series of lever pulls and button presses, the servant's two crew members can cause it to explode. The self-destruct code is not revealed to crew members when they attune to the artifact. If the code is discovered (the DM determines how), it requires two attuned crew members to be inside the servant and spend their actions on 3 consecutive rounds performing the command. Should the crew members begin the process of entering the code, though, the servant uses its Ghost in the Machine property and turns the crew memebers against each other.\n If the crew members successfully implement the code, at the end of the third round, the servant explodes. Every creature in a 100-foot-radius sphere centered on the servant must make a DC 25 Dexterity saving throw. On a failed save, a creature takes 87 (25d6) force damage, 87 (25d6) lightning damage, and 87 (25d6) thunder damage. On a successful save, a creature takes half as much damage. Objects and structures in the area take triple damage. Creatures inside the servant are slain instantly and leave behind no remains.\n This does not destroy the servant permanently. Rather, 2d6 days later, its parts--left arm, left leg, right arm, right leg, lower torso, and upper torso--drop from the sky in random places within 1,000 miles of the explosion. If brought within 5 feet of one another, the pieces reconnect and reform the servant.", "\nDestroying the Servant", " The servant can be destroyed in two ways. After it has self-destructed, its disconnected pieces can be melted down in on of the forge-temples of its ancient Olman creators. Alternatively, if the servant strikes the Machine of Lum the Mad, both artifacts explode in an erubtion that is three times the size and three times the damage as the servant's self-destruct property." ]},{ name : "Mighty Servant of Leuko-o Stat Block", note : [ "\nMighty Servant of Leuk-o", "Huge construct", "\nArmor Class: 22 (natural armor)\nHit Points: 310 (27d12 + 135)\nSpeed: 60 ft.", " STR DEX CON INT WIS CHA\n30 (+10) 14 (+2) 20 (+5) 1 (-5) 14 (+2) 10 (+0)", "\nSaving Throws: Wis +9, Cha +7\nSkills: Perception +9\nDamage Resistances: piercing, slashing\nDamage Immunities: acid, bludgeoning, cold, fire, lightning, necrotic, poison, psychic, radiant\nCondition Immunities: all conditions but invisible and prone\nSenses: blindsight 120 ft., passive Perception: 19\nLanguages: understands the languages of creatures attuned to it but can't speak\nChallenge: --\tProficiency Bonus: +7", "\nImmutable Existence. The servant is immune to any spell or effect that would alter its form or send it to another plane of existence.\nMagic Resistant Construction. The servant has advantage on saving throws against spells and other magical effects, and spell attacks made against it have disadvantage.\nRegeneration. The servant regains 10 hit points at the start of its turn. If it is reduced to 0 hit points, this trait doesn't function until an attuned creature spends 24 hours repairing the artifact or until the artifact is subjected to lightning damage.\nStanding Leap. The servant's long jump is up to 50 feet and its high jump is up to 25 feet, with or without a running start.\nUnusual Nature. The servant doesn't require air, food, drink, or sleep.", "\nActions\nDestructive Fist. Melee or Ranged Weapon Attack: +17 to hit, reach 10 ft. or range 120 ft., one target. Hit: 36 (4d12 + 10) force damage. If the target is an object, it takes triple damage.\nCrushing Leap. If the servant jumps at least 25 feet as a part of its movement, it can then use this action to land on its feet in a space that contains one or more other creatures. Each of those creatures is pushed to an unoccupied space within 5 feet of the servant and must make a DC 25 Dexterity saving throw. On a failed save, a creature takes 26 (4d12) bludgeoning damage and is knocked prone. On a successful save, a creature takes half as much damage and isn't knocked prone." ] }], attunement : true, action : [["reaction", "Destructive Fist Attack"]], } MagicItemsList["luba's tarokka of souls"] = { // contains contributions by lizrdgizrd name : "Luba's Tarokka of Souls", source : [["T", 129]], type : "wondrous item", rarity : "artifact", description : "When holding this deck, I can use an action to cast one of the spells from it. I automatically succeed on Constitution saving throws for divination spells. I can draw a card from the deck to add advantage or disadvantage for a creature I can see within 15 feet.", descriptionFull : " Not all lingering spirits are tragic souls, lost on their way to the hereafter. Some languish as prisoners, souls so wicked mortals dare not free them upon an unsuspecting afterlife.\n Created by a figure of Vistani legend, Luba's Tarokka of Souls shaped the destiny of countless heroes. The prophecies of this deck of cards also revealed great evils and guided its creator into the path of nefarious forces. Untold times the deck's creator, Mother Luba, narrowly escaped doom, spared only by her keen insigths. But even for her, not all wickedness could be escaped. In the most dire cases, Mother Luba managed to ensnare beings of pure evil amid the strands of fate, imprisoning them within her tarroka deck. There these foul spirits dwell still, trapped within a nether realm hidden amid shuffling cards, waiting for fate to turn foul--as it inevitably will.\n Like all tarokka decks, the Tarokka of Souls is a lavishly illustrated collection of fifty-four cards, comprising the fourteen cards of the high deck and forty other cards divided into four suits: coins, glyphs, stars, and swords.\n Random Properties. The artifact has the following random properties, which you can determine by rolling on the tables in the \"Artifacts\" section of the Dungeon Master's Guide:\n 2 minor detrimental properties\n 2 minor beneficial properties\n Spells. While holding the deck, you can use an action to cast one of the following spells (save DC 18) from it: comprehend languages, detect evil and good, detect magic, detect poison and disease, locate object, or scrying. Once you use the deck to cast a spell, you can't cast that spell again from it until the next dawn.\n Enduring Vision. While holding the deck, you automatically succeed on Constitution saving throws made to maintain your concentration on divination spells.\n\nSee the Notes section for further information.", toNotesPage : [{ name : "Luba's Tarokka of Souls", note : [ "\nTwist of Fate", "As an action, you can draw a card from the deck and twist the fortune of another creature you can see within 15 feet of you. Choose one of the following effects:\n", "Weal. The creature has advantage on attack rolls, ability checks, and saving throws for the next hour.", "Woe. The creature has disadvantage on attack rolls, ability checks, and saving throws for the next hour.", "\n The deck can be used in this way twice, and you regain all expended uses at the next dawn.", "\nPrisoners of Fate", "Whenever you use the Twist of Fate property, there is a chance that one of the souls trapped in the deck escapes. Roll d100 and consult the Souls of the Tarokka table. If you roll one of the high cards, the soul associated with it escapes. You can find its statistics in the Monster Manual. If you roll a soul that has already escaped, roll again.", "\nSouls of the Tarokka", "d100\tCard\t\tSoul", " 1\tArtifact\t\tFlameskull", " 2\tBeast\t\tWraith", " 3\tBroken One\tBanshee", " 4\tDarklord\t\tVampire", " 5\tDonjon\t\tMummy", " 6\tExecutioner\t\tDeath knight", " 7\tGhost\t\tGhost", " 8\tHorseman\t\tMummy lord", " 9\tInnocent\t\tGhost", " 10\tMarionette\t\tMummy", " 11\tMists\t\tWraith", " 12\tRaven\t\tVampire spawn", " 13\tSeer\t\tVampire", " 14\tTempter\t\tVampire spawn", "15-00\t--\t\t--", "\n The released soul appears at a random location within 10d10 miles of you and terrorizes the living. Until the released soul is destroyed, it gains the benefit of a weal from the deck's Twist of Fate property, and both you and the original target of Twist of Fate suffer the effect of Woe.", "\nShuffling Fate", "If you go 7 days without using the Twist of Fate property, your attunement to Luba's Tarroka of Souls ends, and you can't attune to it again until after another creature uses Twist of Fate on you.", "\nDestroying the Deck", "Luba's Tarokka of Souls can be destroyed only if all fourteen souls within are released and destroyed. This reveals a fifteenth soul, a lich, that inhabits the Nether card, which appears only when the fourteen souls are defeated. If this ancient entity is destroyed, the Nether card vanishes and the deck becomes a normal tarokka deck, with no special properties, but it inlcudes a new card of the DM's design." ] }], attunement : true, usages : 1, recovery : "dawn", action : [["action", "Cast Spell from Tarokka"]], extraLimitedFeatures : [{ name : "Twist of Fate", usages : "2", recovery : "dawn" }], spellcastingBonus : [{ name : "Comprehend Languages", spells : ["comprehend languages"], selection : ["comprehend languages"], fixedDC : 18, },{ name : "Detect Evil and Good", spells : ["detect evil and good"], selection : ["detect evil and good"], fixedDC : 18, },{ name : "Detect Magic", spells : ["detect magic"], selection : ["detect magic"], fixedDC : 18, },{ name : "Detect Poison and Disease", spells : ["detect poison and disease"], selection : ["detect poison and disease"], fixedDC : 18, },{ name : "Locate Object", spells : ["locate object"], selection : ["locate object"], fixedDC : 18, },{ name : "Scrying", spells : ["scrying"], selection : ["scrying"], fixedDC : 18, }] } MagicItemsList["teeth of dahlver-nar"] = { // contains contributions by lizrdgizrd name : "Teeth of Dahlver-nar", source : [["T", 135]], type : "wondrous item", rarity : "artifact", allowduplicates : true, description : "I can sow these teeth to summon creatures specific to each tooth that remain for 10 mintues. I can implant these teeth into my own mouth and gain effects specific to each tooth. I can only have 1 + my Charisma modifier teeth implanted at a time.", descriptionFull : " The Teeth of Dahlver-Nar are stories given form. They are a collection of teeth, each suggestive of wildly different origins and made from various materials. The collection rests within a leather pouch, stitched with images of heroes and whimsical creatures. Where the teeth fall, they bring legends to life.\n Using the Teeth. While you are holding the pouch, you can use an action to draw one tooth, Roll on the Teeth of Dahlver-Nar table to determine which tooth you draw, and you can either sow the tooth or implant it (both of which are described later).\n If you don't sow or implant the tooth, roll a die at the end of your turn. On an even number, the tooth vanishes, and creatures appear as if you sowed the tooth, but they are hostile to you and your allies. On an odd number, the tooth replaces one of your teeth as if you implanted it (potentially replacing another implanted tooth, see below).\n Each tooth can only be used once. Track which teeth have been used. If a tooth's result is rolled after it's been used, you draw the next lowest unused tooth on the table.\n Sowing Teeth. To sow the tooth, you place it on the ground in an unoccupied space within your reach, or you throw it into an unoccupied space within 10 feet of you in a body of water that is at least 50 feet wide and 50 feet long. Upon doing so, the tooth burrows into the ground and vanishes, leaving no hole behind, or it vanishes into the water. The creatures noted in the Creatures Summoned column appear in an unoccupied space as close to where the tooth was sown as possible. The creatures are allies to you, speak all languages you speak, and linger for 10 minutes before disappearing, unless otherwise noted.\n\nSee Page 3 Notes section for more information.", choices : ["pouch of teeth (add first)", "d20 1", "d20 2", "d20 3", "d20 4", "d20 5", "d20 6", "d20 7", "d20 8", "d20 9", "d20 10", "d20 11", "d20 12", "d20 13", "d20 14", "d20 15", "d20 16", "d20 17", "d20 18", "d20 19", "d20 20"], "pouch of teeth (add first)" : { name : "Pouch for Teeth of Dahlver-Nar", description : "I can sow these teeth to summon creatures specific to each tooth that remain for 10 mintues. I can implant these teeth into my own mouth and gain effects specific to each tooth. I can only have 1 + my Charisma modifier teeth implanted at a time.", attunement : true, toNotesPage : [{ name : "Teeth of Dahlver-Nar", page3notes : true, note : [ "\nImplanting Teeth.", " To implant the tooth, you place it in your mouth, whereupon one of your own teeth falls out, and the drawn tooth takes its place, resizing to fit in your mouth. Once the tooth is implanted, you gain the effect noted in the Implanted Effect column. The tooth can't be removed while you are attuned to the teeth, and you can't voluntarily end your attunement to them. If removed after your death, the tooth vanishes. You can have a maximum number of the teeth are implanted at one time equal to 1 + your Constitution modifier (mimimum of 2 teeth total). If you try to implant more teeth, the newly implanted tooth replaces one of the previous teeth, determined randomly. The replaced tooth vanishes, and you lose the implanted effect.", "\nRecovering Teeth.", " Once all the teeth have vanished, their pouch also vanishes. The pouch with all the teeth then appears in a random destination, which could be on a different world of the Material Plane.", "\nDestroying the Teeth.", " Each tooth must be destroyed individually by sowing it in the area where the tooth's story originated, with the intention to destroy it. When planted in this way, creatures summoned are not friendly to you and do not vanish. Some of the creatures summoned merely head off in search of home, while others act as their tales dictate. In either case, the tooth is gone forever.", "\nSee extra Notes page for Teeth of Dahlver-Nar table", "\nTo implant a tooth, add another instance of the Teeth of Dahlver-Nar and select the tooth rolled. If you are running out of space for magic items, move one (or more) to the overflow page and then use the Set Pages Layout function to show the overflow page." ]},{ name : "Teeth of Dahlver-Nar table", note : [ "1d20\tTale and Tooth\t\tCreatures Summoned\n Implanted Effect", " 1\tThe Staring Cats of Uldun-dar\t 9 cats\n\t(ivory cat molar)\nThe tooth has 8 charges. As an action, you can expend 1 charge to cast the revivify spell from the tooth. If you are dead at the start of your turn, the tooth expends 1 charge and casts revivify ton you.", " 2\tDuggle's Surprising Day\t 1 commoner\n\t(human molar)\nWhen you finish a long rest, the tooth casts sanctuary (DC 18) on you, and the spell lasts for 24 hours or until you break it.", " 3\tThe Golden Age of Dhakaan\t 10 goblins\n\t(golden goblin bicuspid)\t 1 goblin boss\n When you are hit by an attack and an ally is within 5 feet of you, you can use your reaction to cause them to be hit instead. You can't use this reaction again until you finish a short or long rest.", " 4\tThe Mill Road Murders\t\t 3 green hags\n\t(halfling canine)\t\t in a coven\n When you damage a target that hasn't taken a turn in this combat, the target takes an extra 3d10 slashing damage from ghostly blades.", " 5\tDooms of the Malpheggi\t 1 lizardfolk queen\n\t(emerald lizardfolk fang)\t 4 lizardfolk\n You gain reptilian scales, granting you a +2 bonus to your AC. Additionally, when you finish a long rest, you must succeed on a DC 15 Constitution saving throw or gain 1 level of exhaustion.", " 6\tThe Stable Hand's Secret\t 2 incubi\n\t(sweet-tasting human canine)\n When you make a Charisma check against a humanoid, you can roll a d10 and add the number rolled as a bonus to the result. The creature then becomes hostile to you at the next dawn.", " 7\tThe Donkey's Dream\t\t 1 unicorn\n\t(rainbow-colored donkey molar)\n The tooth has 3 charges. As an action, you can expend 1 charge to touch a creature. The target regains 2d8 + 2 hit points, and all diseases and poisons affecting it are removed. When you use this actio, a shimmering image of a unicorn's horn appears until the end of your turn, sprouting from your forehead. The tooth regains all expended charges daily at dawn. You gain the following flaw: \"When I see your wickedness in action, I must oppose it.\"", " 8\tBeyond the Rock of Bral\t 2 mind flayers\n\t(Silver mind flayer tooth)\n You gain telepathy out to 120 feet as described in the Monster Manual, and you can cast the detect thoughts spell at will, requiring no components. You also have disadvantage on Wisdom (Insight) and Wisdom (Perception) checks from constant whispers of memories and nearby minds.", " 9\tThe Disappearances of Half\t 4 giant toads\n\tHollow (vomerine tooth of a\n\tLarge toad)\n Your long jump is up to 30 feet and your high jump is up to 15 feet, with or without a running start.", "10\tLegendry of Phantoms and\t 1 giant octopus,\n\tGhosts (obsidian human molar)\t 1 mage, 1 specter\n As an action, you can use the tooth to cast the Evard's black tentacles spell (DC 18). Once this property is used, it can't be used again until the next dawn.", "11\tThe Thousand Deaths of Jander\t 1 vampire\n\tSunstar (yellowed vampire fang)\n You can make a bite attack as an unarmed strike. On a hit, it deals 1d6 piercing damage plus 3d6 necrotic damage. You regain a number of hit points equal to the necrotic damage dealt. While you are in sunlight, you can't regain hit points.", "12\tNightmares of Kaggash\t 1 beholder\n\t(twisted beholder tooth)\n As an action, you can cast the eyebite spell from the tooth. Once you use this action, it can't be used again until the next dawn. Whenever you finish a long rest, roll a d20. On a 20, an aberation chosen by the DM appears within 90 feet of you and attacks.", ]},{ name : "Teeth of Dahlver-Nar table (cont)", note : [ "13\tThree Bridges to the Sky\t 3 oni\n\t(lapis lazuli oni tooth)\n You gain a flying speed of 30 feet, and you can use the tooth to cast the detect magic spell at will. While you are attuned to fewer than 3 magic items, you gain 1 level of exhaustion that can't removed until you are attuned to 3 or more magic items.", "14\tThe Claws of Dragotha\t\t 1 adult red dracolich\n\t(broken translucent fang)\n You can use the tooth to cast the create undead spell. Once this property is used, it can't be used again until the next dawn. Each time you create an undead creature using the tooth, a skeleton, zombie, or ghoul also appears at a random location within 5 miles of you, searching for the living to kill. A humanoid killed by these undead rises as the same type of undead at the next midnight.", "15\tAshes of the Ages and Eternal\t 1 dao, 1 djinni\n\tFire (jade humanoid bicuspid)\t 1 efreeti, 1 marid\n You can use the tooth to cast counterspell at 9th level. Once you use this property, it can't be used again until the next dawn. Whenever you finish a long rest, your hit point maximum is reduced by d10. If this reduces your hit point maximum to 0, you die.", "16\tDaughters of Bel (green\t\t 1 pit fiend\n\tsteel pit fiend fang)\n You can use the tooth to cast dominate monster (DC 18). Once you use this property, it can't be used again until the next dawn. You smell strongly of burning sulfur.", "17\tWhy the Sky Screams\t\t 1 ancient blue dragon\n\t(blue dragon fang)\n You gain immunity to lightning damage and vulnerability to thunder damage.", "18\tThe Last Tarrasque (jagged\t 1 tarrasque (ignores you and\n\tsiiver of tarrasque tooth)\t your commands; appears for\n\t\t\t\t 1d4 rounds then vanishes)\n You deal double damage to objects and structures. If you take 20 or more damage in one turn, you must succeed on a DC18 Wisdom saving throw or spend your next turn in a murderous fury. During this rage, you must use your action to make an unarmed strike against a creature that damaged you, or a random creature you can see if you weren't damaged by a creature, moving as close as you can to the target if necessary.", "19\tIncendax's Tooth (ruby-veined\t 1 ancient red dragon\n\tred dragon fang)\n You gain immunity to fire damage, and as an action, you can exhale fire in a 90-foot cone. Each creature in that area must make a DC 24 Dexterity saving throw, taking 26d6 fire damage on a failed save, or half as much damage on a successful one. After using the breath weapon, you gain 2 levels of exhaustion.", "20\tDalver-Nar's Tooth\t\t 1 priest\n\t(dusty human molar)\n As an action you can call on a divine force to come to your aid. Describe the assistance you seek, and the DM decides the nature of the intervention; the effect of any cleric spell would be appropriate. Once this property is used, it can't be used again for 7 days." ] }], }, "d20 1" : { name : "Implanted ivory cat molar", description : "I have implanted the ivory cat molar from the Teeth of Dahlver-Nar. The tooth has 8 charges that I can use to cast revivify. If I am dead at the start of my turn the tooth expends 1 charge and casts revivify on me.", descriptionFull : "The tooth has 8 charges. As an action, you can expend 1 charge to cast the revivify spell from the tooth. If you are dead at the start of your turn, the tooth expends 1 charge and casts revivify ton you.", usages : 8, spellcastingBonus : [{ name : "Implanted Tooth d20 = 1", spells : ["revivify"], selection : ["revivify"] }], attunement : false }, "d20 2" : { name : "Implanted human molar", description : "I have implanted the human molar from the Teeth of Dahlver-Nar. When I finish a long rest, the tooth casts sanctuary (DC18) on me, and it last for 24 hours or until I break it.", descriptionFull : "When you finish a long rest, the tooth casts sanctuary (DC 18) on you, and the spell lasts for 24 hours or until you break it.", usages : 1, recovery : "long rest", spellcastingBonus : [{ name : "Implanted Tooth d20 = 2", spells : ["sanctuary"], selection : ["sanctuary"], fixedDC : 18 }], attunement : false, source : [["T", 136]] }, "d20 3" : { name : "Implanted golden goblin bicuspid", description : "I have implanted the golden goblin bicuspid from the Teeth of Dahlver-Nar. When I am hit by an attack I can use my reaction to cause an ally within 5 feet of me to be hit instead. I can use this again after a short or long rest.", descriptionFull : "When you are hit by an attack and an ally is within 5 feet of you, you can use your reaction to cause them to be hit instead. You can't use this reaction again until you finish a short or long rest.", usages : 1, recovery : "short/long rest", action : [["reaction", "Redirect Attack to Ally"]], attunement : false, source : [["T", 136]] }, "d20 4" : { name : "Implanted halfling canine", description : "I have implanted the halfling canine from the Teeth of Dahlver-Nar. When I damage a target that hasn't taken a turn in this combat, the target takes an extra 3d10 slashing damage.", descriptionFull : "When you damage a target that hasn't taken a turn in this combat, the target takes an extra 3d10 slashing damage from ghostly blades.", attunement : false, source : [["T", 136]] }, "d20 5" : { name : "Implanted emerald lizardfolk fang", description : "I have implanted the emerald lizardfolk fang from the Teeth of Dahlver-Nar. I gain reptilian scales that give me a +2 to my AC. When I finish a long rest I must succeed on a DC 15 Constitution save or gain 1 level of exhaustion.", descriptionFull : "You gain reptilian scales, granting you a +2 bonus to your AC. Additionally, when you finish a long rest, you must succeed on a DC 15 Constitution saving throw or gain 1 level of exhaustion.", attunement : false, source : [["T", 136]], extraAC : [{ mod : 2, name : "Teeth of Dahlver-Nar", text : "I gain reptilian scales and +2 to my AC." }] }, "d20 6" : { name : "Implanted sweet-tasting human canine", description : "I have implanted the sweet-tasting human canine from the Teeth of Dahlver-Nar. When I make a Charisma check against a humanoid, I can roll a d10 and add the result as a bonus. The creature becomes hostile to me at dawn.", descriptionFull : "When you make a Charisma check against a humanoid, you can roll a d10 and add the number rolled as a bonus to the result. The creature then becomes hostile to you at the next dawn.", attunement : false, source : [["T", 136]] }, "d20 7" : { name : "Implanted rainbow-colored donkey molar", description : "I have implanted the rainbow-colored donkey molar from the Teeth of Dahlver-Nar. As an action, I can expend 1 charge to touch a creature and give them 2d8 + 2 hit points and remove all diseases and poisons affecting it. I then have a shimmering unicorn horn until the end of my turn.", descriptionFull : "The tooth has 3 charges. As an action, you can expend 1 charge to touch a creature. The target regains 2d8 + 2 hit points, and all diseases and poisons affecting it are removed. When you use this action, a shimmering image of a unicorn's horn appears until the end of your turn, sprouting from your forehead. The tooth regains all expended charges daily at dawn. You gain the following flaw: \"When I see wickedness in action, I must oppose it.\"", attunement : false, source : [["T", 136]], action : [["action", "Add Temp HP & Cure"]], usages : 3, recovery : "dawn" }, "d20 8" : { name : "Implanted silver mind flayer tooth", description : "I have implanted the silver mind flayer tooth from the Teeth of Dahlver-Nar. I gain telepathy out to 120 ft and can cast the detect thoughts spell at will. I have disadvantage on Wisdom (Insight) and Wisdom (Perception) checks from constant whispers of memories and nearby minds.", descriptionFull : "You gain telepathy out to 120 ft as described in the Monster Manual, and you can cast the detect thoughts spell at will, requiring no components. You also have disadvantage on Wisdom (Insight) and Wisdom (Perception) checks from constant whispers of memories and nearby minds.", attunement : false, source : [["T", 136]], vision : [["telepathy", 120]], spellcastingBonus : [{ name : "Detect Thoughts", spells : ["detect thoughts"], selection : ["detect thoughts"], firstCol : "atwill" }] }, "d20 9" : { name : "Implanted vomerine tooth of a Large toad", description : "I have implanted the vomerine tooth of a Large toad from the Teeth of Dahlver-Nar. My long jump is up to 30 feet and my high jump is up to 15 feet with or without a running start.", descriptionFull : "Your long jump is up to 30 feet and your high jump is up to 15 feet with or without a running start.", attunement : false, source : [["T", 137]] }, "d20 10" : { name : "Implanted obsidian human molar", description : "I have implanted the obsidian human molar from the Teeth of Dahlver-Nar. As an action, I can use the tooth to cast Evard's black tentacles spell (DC 18). I can't use it again until the next dawn.", descriptionFull : "As an action, you can use the tooth to cast Evard's black tentacles spell (DC 18). Once this property is uesd, it can't be used again until the next dawn.", attunement : false, source : [["T", 137]], usages : 1, recovery : "dawn", action : [["action", "Cast Evard's black tentacles"]], spellcastingBonus : [{ name : "Implanted Tooth d20 = 10", spells : ["evard's black tentacles"], selection : ["evard's black tentacles"], fixedDC : 18, }] }, "d20 11" : { name : "Implanted yellowed vampire fang", description : "I have implanted the yellowed vampire fang from the Teeth of Dahlver-Nar. I can make a bite attack as an unarmed strike. On a hit I deal 1d6 piercing damage plus 3d6 necrotic damage. I regain hit points equal to the necrotic damage dealt. While in sunlight, I can't regain hit points.", descriptionFull : "You can make a bite attack as an unarmed strike. On a hit, it deals 1d6 piercing damage plus 3d6 necrotic damage. You regain a number of hit points equal to the necrotic damage dealt. While you are in sunlight, you can't regain hit points.", attunement : false, source : [["T", 137]], weaponOptions : [{ name : "Bite", source : [["T", 137]], regExpSearch : /^(?=.*bite).*$/i, description : "additional 3d6 necrotic damage, necrotic damage regained in hit points", baseWeapon : "unarmed strike", selectNow : true }] }, "d20 12" : { name : "Implanted twisted beholder tooth", description : "I have implanted the twisted beholder tooth from the Teeth of Dahlver-Nar. As an action, once per day, I can cast the eyebite spell. When I finish a long rest, roll a d20 and on a 20, an aberration the DM chooses appears within 30 feet of me and attacks.", descriptionFull : "As an action, you can cast the eyebite spell from the tooth. Once you use this action, you can't use it again until the next dawn. Whenever you finish a long rest, roll a d20. On a 20, an aberration chosen by the DM appears within 30 feet of you and attacks.", attunement : false, source : [["T", 137]], usages : 1, recovery : "dawn", action : [["action", "Cast eyebite"]], spellcastingBonus : [{ name : "Implanted Tooth d20 = 12", spells : ["eyebite"], selection : ["eyebite"] }] }, "d20 13" : { name : "Implanted lapis lazuli oni fang", description : "I have implanted the lapis lazuli oni fang from the Teeth of Dahlver-Nar. I gain a flying speed of 30 feet, and I can cast detect magic at will. While I am attuned to fewer than 3 magic items, I gain 1 level of exhaustion that can't be removed until I have attuned 3 items.", descriptionFull : "You gain a flying speed of 30 feet, and you can use the tooth to cast the detect magic spell at will. While you are attuned to fewer than 3 magic items, you gain 1 level of exhaustion that can't be removed until you are attuned to 3 or more magic items.", attunement : false, source : [["T", 137]], spellcastingBonus : [{ name : "Implanted Tooth d20 = 13", spells : ["detect magic"], selection : ["detect magic"], firstCol : "atwill" }], speed : { fly : {spd : 30, enc : 0} } }, "d20 14" : { name : "Implanted broken translucent fang", description : "I have implanted the broken translucent fang from the Teeth of Dahlver-Nar. Once per day, I can use the tooth to cast create undead. When I create an undead creature, a skeleton, zombie or ghoul also appears within 5 miles of me, searching for the living to kill.", descriptionFull : "You can use the tooth to cast the create undead spell. Once this property is used, it can't be used again until the next dawn. Each time you create an undead creature using the tooth, a skeleton, zombie or ghoul also appears at a random location within 5 miles of you, searching for the living to kill. A humanoid killed by these undead rises as the same type of undead at the next midnight.", attunement : false, source : [["T", 137]], usages : 1, recovery : "dawn", spellcastingBonus : [{ name : "Implanted Tooth d20 = 14", spells : ["create undead"], selection : ["create undead"] }] }, "d20 15" : { name : "Implanted jade humanoid bicuspid", description : "I have implanted the jade humanoid bicuspid from the Teeth of Dahlver-Nar. Once per day, I can use the tooth to cast counterspell at 9th level. Whenever I finish a long rest, if I haven't used the tooth to cast counterspell, my hit point maximum is reduced by 2d10.", descriptionFull : "You can use the tooth to cast counterspell at 9th level. Once you use this property, it can't be used again until the next dawn. Whenever you finish a long rest, if you haven't used the tooth to counter a spell since your last long rest, your hit point maximum is reduced by 2d10. If this reduces your hit point maximum to 0, you die.", attunement : false, source : [["T", 137]], usages : 1, recovery : "dawn", spellcastingBonus : [{ name : "Implanted Tooth d20 = 15", spells : ["counterspell"], selection : ["counterspell"] }] }, "d20 16" : { name : "Implanted green steel pit fiend fang", description : "I have implanted the green steel pit fiend fang from the Teeth of Dahlver-Nar. Once per day, I can use the tooth to cast dominate monster (DC 18). I smell strongly of burning sulfur.", descriptionFull : "You can use the tooth to cast dominate monster (DC 18). Once you use this property, it can't be used again until the next dawn. You smell strongly of burning sulfur.", attunement : false, source : [["T", 137]], usages : 1, recovery : "dawn", spellcastingBonus : [{ name : "Implanted Tooth d20 = 16", spells : ["dominate monster"], selection : ["dominate monster"], fixedDC : 18 }] }, "d20 17" : { name : "Implanted blue dragon fang", description : "I have implanted the blue dragon fang from the Teeth of Dahlver-Nar. I gain immunity to lightning damage and vulnerability to thunder damage.", descriptionFull : "You gain immunity to lightning damage and vulnerability to thunder damage.", attunement : false, source : [["T", 137]], savetxt : { immune : ["lightning"], text : ["Vulnerable to Thunder damage"] } }, "d20 18" : { name : "Implanted jagged sliver of tarrasque tooth", description : "I have implanted the jagged sliver of tarrasque tooth from the Teeth of Dahlver-Nar. I deal double damage to objects and structures. If I take 20 or more damage in one turn, I must succeed on a DC 18 Wisdom save or spend the next turn in a murderous rage.", descriptionFull : "You deal double damage to objects and structures. If you take 20 or more damage in one turn, you must succeed on a DC 18 Wisdom saving throw or spend your next turn in a murderous fury. During this rage, you must use your action to make an unarmed strike against a creature that damaged you, or a random creature you can see if you weren't damaged by a creature, moving as close as you can to the target if necessary.", attunement : false, }, "d20 19" : { name : "Implanted ruby-veined red dragon fang", description : "I have implanted the ruby-veined red dragon fang from the Teeth of Dahlver-Nar. I gain immunity to fire damage and I can exhale fire in a 90-foot cone. Creatures in my cone must make a DC 24 Dexterity save or take 26d6 fire damage or half on success.", descriptionFull : "You gain immunity to fire damage, and as an action, you can exhale fire in a 90-foot cone. Each creature in that area must make a DC 24 Dexterity saving throw, taking 26d6 fire damage on a failed save, or half as much damage on a successful one. After using the breath weapon, you gain 2 levels of exhaustion.", attunement : false, action : [["action", "Red Dragon fang (ToD-N)"]], savetxt : { immune : ["fire"] }, weaponOptions : [{ name : "Red Dragon fang (ToD-N)", source : [["T", 137]], type : "Natural", ability : 2, regExpSearch : /^(?=.*red)(?=.*dragon)(?=.*tod-n).*$/i, abilitytodamage : false, damage : [26, 6, "fire"], range : "90 foot cone", dc : true, description : "90 foot cone; Dexterity save DC 24, half damage on success", selectNow : true }], calcChanges : { atkAdd : [ function (fields, v) { if (v.WeaponTextName == "Red Dragon fang (ToD-N)") { fields.To_Hit_Bonus = 'DC ' + (16 - What('Dex Mod')); } } ] } }, "d20 20" : { name : "Implanted dusty human molar", description : "I have implanted the dusty human molar from the Teeth of Dahlver-Nar. As an action, I can call on a divine force for aid. Once I use this property, I can't use it again for 7 days.", descriptionFull : "As an action you can call on a divine force to come to your aid. Describe the assistance you seek, and the DM decides the nature of the intervention; the effect of any cleric spell would be appropriate. Once this property is used, it can't be used again for 7 days.", attunement : false, usages : 1, recovery : "7 days" } } } { // pub_20210921_WBtW MagicItemsList["iggwilv's cauldron"] = { name : "Iggwilv's Cauldron", source : [["WBtW", 209]], type : "wondrous item", rarity : "artifact", attunement : true, prerequisite : "Requires attunement by a spellcaster", prereqeval : function(v) { return v.isSpellcaster; }, notLegalAL : true, description : "", descriptionFull : "Iggwilv crafted this wondrous cauldron with the help of her adoptive mother, the archfey Baba Yaga. The cauldron has two forms. Only Iggwilv or Baba Yaga can change the cauldron from one form to another (by using an action to touch it), which either can do without being attuned to the item. In its first form, the cauldron is made of solid gold and embossed on the outside with images of bare-branched trees, falling leaves, and broomsticks. In its second form, the cauldron is made of iron and embossed on the outside with images of bats, toads, cats, lizards, and snakes\u2014eight of each animal. In either form, the cauldron is roughly 3 feet in diameter and has a 2-foot-wide mouth, a round lid with a molded handle at the top, and eight clawed feet for stability. The cauldron weighs 80 pounds when empty, and it can hold up to 100 gallons of liquid."+ "\n " + toUni("Attunement") + ". Any Humanoid creature that attunes to the cauldron must succeed on a DC 15 Constitution saving throw or be aged to the point of decrepitude. In this state, the creature's speed is halved, the range of its vision and hearing is reduced to 30 feet, and it has disadvantage on all ability checks, attack rolls, and saving throws. The creature will reach the end of its natural life span in 3d8 days. Only a wish spell or divine intervention can reverse this aging effect on the creature."+ "\n Three hags can attune to the cauldron simultaneously, provided they have formed a coven. If the coven disbands, the attunement ends for all three hags."+ "\n " + toUni("Random Properties") + ". Regardless of the form it takes, the cauldron has the following random properties:"+ "\n \u2022 1 minor beneficial property (determined by rolling on the Minor Beneficial Properties table in the Dungeon Master's Guide)"+ "\n \u2022 1 minor detrimental property (determined by rolling on the Minor Detrimental Properties table in the Dungeon Master's Guide)"+ "\n " + toUni("Gold Cauldron") + ". The gold cauldron has the following properties:"+ "\n \u2022 If water is poured into the cauldron and stirred for 1 minute, it transforms into a hearty, hot stew that provides one nourishing meal for up to four people per gallon of water used. The stew remains hot while in the cauldron, then cools naturally after it is removed. The outside of the cauldron remains safe to touch despite the heat of the stew."+ "\n \u2022 If wine is poured into the cauldron and stirred for 10 minutes, it transforms into a magical elixir that fortifies up to four people per gallon of wine used. Any creature that imbibes the elixir gains 10 temporary hit points. Any of the elixir that isn't consumed within 1 hour vanishes. Once used, this property of the cauldron can't be used again until the next dawn."+ "\n \u2022 When the cauldron is filled with 90 gallons of water mixed with 10 gallons of wine, it can be used as the focus for a scrying spell. When this spell is cast using the cauldron as its focus, the target of the spell fails its saving throw automatically, and the spell works even if its caster and the target are on different planes of existence. When the spell ends, all the liquid in the cauldron vanishes."+ "\n \u2022 Dipping the bristles of an ordinary broom into the water-filled cauldron transforms the broom into a broom of flying for 3 days. Once used, this property of the cauldron can't be used again until the next dawn."+ "\n " + toUni("Iron Cauldron") + ". The iron cauldron has the following properties:"+ "\n \u2022 You can use an action to scream into the empty cauldron, which magically summons a swarm of bats that flies out of the cauldron and acts immediately after you in the initiative order. The swarm obeys your commands and disappears after 1 minute if it hasn't been destroyed by then. Once used, this property of the cauldron can't be used again until the next dawn."+ "\n \u2022 If at least 1 gallon of blood is poured into the cauldron and stirred for 1 minute, it turns into a cloud of harmless black smoke that erupts from the cauldron and dissipates quickly. At the same time, all Humanoid creatures within a certain radius of the cauldron fall unconscious for 1 hour, except those that are attuned to the cauldron or immune to being charmed. The radius of the effect is 100 feet per gallon of blood used. An unconscious creature awakens if it takes damage or if someone uses an action to shake or slap it. Once used, this property of the cauldron can't be used again until the next dawn."+ "\n \u2022 Tying a dead frog or toad to the end of an ordinary branch and dipping it in the water-filled cauldron transforms the branch into a wand of polymorph with 3 charges. This wand can't recharge and crumbles to ashes when its final charge is expended. Once used, this property of the cauldron can't be used again for 8 days."+ "\n \u2022 If you spend 1 minute touching the cauldron with a unicorn's horn while reciting the poem called \"The Witch Queen's Cauldron\" (see the accompanying sidebar), all creatures within 1,000 feet of the cauldron except those that are attuned to it become frozen in time. A time-frozen creature is incapacitated, can't move or speak, doesn't age, and is unaware of its surroundings or the passage of time. Moreover, it can't be moved, harmed in any way, or affected by any other magic. All other conditions and effects on the creature are suppressed until it is no longer frozen in time. Destroying the cauldron, sending it to another plane of existence, or touching it with a unicorn's horn for 1 minute while reciting \"The Witch Queen's Cauldron\" ends the time-freezing effect on all creatures. The effect also ends on any creature that comes into contact with an antimagic field or is touched by a unicorn's horn."+ "\n " + toUni("Destroying the Cauldron") + ". The cauldron is a Medium object with AC 19, 80 hit points, and immunity to damage from any source other than a flame tongue or frost brand weapon. Reducing the cauldron to 0 hit points with such a weapon shatters the cauldron into eight pieces of roughly equal size, whereupon all ongoing effects created by the cauldron end as it loses its magic."+ "\n The destruction of Iggwilv's Cauldron causes all hags in the multiverse to lose the Shared Spellcasting trait gained by being in a coven (see the \"Hag Covens\" sidebar in the Monster Manual)."+ "\n " + toUni("Reconstructing the Cauldron") + ". If all eight pieces of the shattered cauldron are within 5 feet of one another, a wish spell can reassemble them, restoring the cauldron and all its properties. The cauldron's reconstruction also restores the Shared Spellcasting trait of hag covens throughout the multiverse." } } { // pub_20230815_GotG MagicItemsList["adze of annam"] = { name : "Adze of Annam", source : [["GotG", 110]], type : "weapon (greataxe)", rarity : "artifact", attunement : true, notLegalAL : true, description : "", descriptionFull : "This massive adze is said to have been wielded by All-Father Annam, not as a weapon but as the tool he used to shape the various worlds of the Material Plane eons ago."+ "\n " + toUni("Random Properties") + ". The adze has the following random properties, determined by rolling on the appropriate table in the Dungeon Master's Guide:"+ "\n \u2022 2 minor beneficial properties"+ "\n \u2022 1 major beneficial property"+ "\n \u2022 2 minor detrimental properties"+ "\n " + toUni("Magic Weapon") + ". When a creature attunes to the adze, the artifact magically adjusts its size so that creature can wield it as a greataxe. The adze is a magic weapon that grants a +3 bonus to attack and damage rolls made with it. On a hit, the adze deals an additional 3d12 force damage. It also deals double damage to objects and structures."+ "\n " + toUni("Divine Mattock") + ". As an action, you can call upon the might of the All-Father and use the adze to cast move earth or fabricate. Once this property is used, it can't be used again until the next dawn.", weight : 7 } MagicItemsList["bigby's beneficent bracelet"] = { name : "Bigby's Beneficent Bracelet", source : [["GotG", 111]], type : "wondrous item", rarity : "artifact", attunement : true, notLegalAL : true, description : "", descriptionFull : "This gorgeous jewelry piece, crafted by the wizard Bigby himself, consists of four gold rings attached via delicate chains to a wrist cuff studded with sapphires and diamonds."+ "\n " + toUni("Random Properties") + ". The bracelet has the following random properties, determined by rolling on the appropriate table in the Dungeon Master's Guide:"+ "\n \u2022 1 minor beneficial properties"+ "\n \u2022 1 major beneficial property"+ "\n \u2022 1 minor detrimental properties"+ "\n " + toUni("Dexterous Fingers") + ". While wearing the bracelet, you can cast mage hand."+ "\n " + toUni("Force Sculpture") + ". By focusing and channeling the bracelet's magic for 1 minute, you can create a spectral copy of a Large or smaller nonmagical object. The copy appears in an unoccupied space within 10 feet of you, and it is made of tangible but translucent force that mimics the size, weight, and other properties of the object it's copying. The copy must appear on a surface or liquid that can support it. Creatures can touch and interact with the copy as if it were a nonmagical object."+ "\n The copy is immune to all damage and can't be dispelled, but a disintegrate spell destroys it immediately. Otherwise, the copy disappears after 8 hours or when you dismiss it as an action."+ "\n The bracelet can create up to three copies and regains all expended uses at dawn."+ "\n " + toUni("Helpful Hand") + ". As an action, you can use the bracelet to cast Bigby's hand as a 9th-level spell (spell attack bonus +13). When you cast the spell this way, the spell doesn't require concentration. Once this property is used, it can't be used again until the next dawn." } MagicItemsList["helm of perfect potential"] = { name : "Helm of Perfect Potential", source : [["GotG", 112]], type : "wondrous item", rarity : "artifact", attunement : true, notLegalAL : true, description : "", descriptionFull : "This copper-hued helm contains a shard of the Elemental Chaos embedded in its forehead, surrounded by a motif of a rising sun. Legend says Annam fashioned this helm for his daughter Diancastra to hold the fragment of chaos she used to prove her worth to her father."+ "\n " + toUni("Random Properties") + ". The helm has the following random properties, determined by rolling on the appropriate table in the Dungeon Master's Guide:"+ "\n \u2022 2 minor beneficial properties"+ "\n \u2022 1 major beneficial property"+ "\n \u2022 1 minor detrimental properties"+ "\n " + toUni("Master of Guile") + ". While wearing the helm, you have advantage on Charisma (Deception) and Wisdom (Insight) checks."+ "\n " + toUni("Arrow of Elemental Havoc") + ". As a bonus action while wearing the helm, you can launch a bolt of searing elemental energy toward a creature you can see within 90 feet of yourself. The target must make a DC 20 Dexterity saving throw. On a failed save, the creature takes 4d6 acid, cold, fire, lightning, or thunder damage (your choice). On a successful save, the creature takes half as much damage."+ "\n " + toUni("Spellcasting") + ". The helm has 6 charges and regains 1d6 charges each dawn. As an action while wearing the helm, you can expend 1 or more of its charges to cast one of the following spells (save DC 20): elemental weapon (1 charge), call lightning (2 charges), wall of fire (3 charges), conjure elemental (4 charges), tsunami (5 charges)." } } ================================================ FILE: gulpfile.js ================================================ /*jshint esversion: 6 */ const { series, parallel, src, dest } = require('gulp'); const fs = require('fs'); const log = require('fancy-log'); const concat = require('gulp-concat'); const header = require('gulp-header'); const rename = require('gulp-rename'); const replace = require('gulp-replace'); const uglify = require('gulp-uglify'); const stableVersion = '"14.0.6-beta"'; const stableMaxVers = '"15.0.0"'; const betaVersion = '"24.0.6-beta"'; const betaMaxVers = false; const betaFolder = "/v24"; const parentFolder = "WotC material"; const hasBetaFolder = fs.existsSync(`${parentFolder}${betaFolder}`); function getTooOldCheck(requiredVersion, maxVersion) { if (!requiredVersion) return ''; const aVer = requiredVersion.match(/\d+/g); const verNo = aVer[0] + aVer[1].padStart(3, '0') + aVer[2].padStart(3, '0'); const latest = !maxVersion ? 'the latest version' : `this required version or a later version (but lower than v${maxVersion.replace(/"/g, '')})`; return `if (sheetVersion < ${verNo}) { throw "This add-on script was made for a newer version of the sheet (v${requiredVersion.replace(/"/g, '')}). Please use ${latest} and try again.\\n\\nYou can get the different versions at www.flapkan.com.\\n\\nFrom v24.0.0 onwards, the sheet uses the 2024 (5.5e) rules, while lower versions use the 5e (2014) rules."; };`; } function getTooNewCheck(requiredVersion, maxVersion) { if (!maxVersion) return ''; const aVer = maxVersion.match(/\d+/g); const verNo = aVer[0] + aVer[1].padStart(3, '0') + aVer[2].padStart(3, '0'); return `if (sheetVersion >= ${verNo}) { throw "This add-on script was made for a lower version of the sheet (one before v${maxVersion.replace(/"/g, '')}). Please use the required version (v${requiredVersion.replace(/"/g, '')}) or a later version and try again.\\n\\nYou can get the different versions at www.flapkan.com.\\n\\nFrom v24.0.0 onwards, the sheet uses the 2024 (5.5e) rules, while lower versions use the 5e (2014) rules."; };`; } function concatAndMin(glob, fileName, beta) { log.info(`Minifying and concatenating type '${glob}' for ${beta ? `beta (${betaVersion})` : `stable (${stableVersion})`} version`); const folder = `${parentFolder}${beta ? betaFolder : ''}`; const requiredVersion = beta ? betaVersion : stableVersion; const maxVersion = beta ? betaMaxVers : stableMaxVers; const tooOldCheck = getTooOldCheck(requiredVersion, maxVersion); const tooNewCheck = getTooNewCheck(requiredVersion, maxVersion); return src([`${folder}/${glob}_*.js`, `!${folder}/${glob}_*_dupl.js`, `!${folder}/${glob}_*_wip.js`]) .pipe(replace(/var iFileName ?= ?['"](.*?)['"];/g,"// $1")) .pipe(replace(/RequiredSheetVersion\(.*?\)[,;][\r\n]*/g, "")) .pipe(replace(/\/\/.*?dupl_start[\s\S]*?dupl_end.*?[\r\n]*/ig,"")) .pipe(concat(`${fileName}.js`, {newLine: '\n'})) .pipe(header(`${tooOldCheck}\n${tooNewCheck}\nvar iFileName = "${fileName}.js";\nRequiredSheetVersion(${requiredVersion}${maxVersion ? ', ' + maxVersion : ''});\n\n`)) .pipe(dest(folder)) .pipe(uglify()) .pipe(replace(`${fileName}.js`, `${fileName}.min.js`)) .pipe(rename({extname: '.min.js'})) .pipe(dest(folder)); } function combine(minified, beta) { const folder = `WotC material${beta ? betaFolder : ''}`; const fileHead = 'all_WotC_'; const path = `${folder}/${fileHead}`; const ext = minified ? '.min.js' : '.js'; const newLine = minified ? '' : '\n'; const fileName = `${fileHead}pub+UA${ext}`; const requiredVersion = beta ? betaVersion : stableVersion; const maxVersion = beta ? betaMaxVers : stableMaxVers; const tooOldCheck = getTooOldCheck(requiredVersion, maxVersion); const tooNewCheck = getTooNewCheck(requiredVersion, maxVersion); const replaceStartRx = minified ? /if ?\(sheetVersion ?< ?\d+\.?\d*e?\d*\)[ {]*?throw[\s\S]*?(var)|()RequiredSheetVersion\(.*?\)[,;]|()iFileName ?= ?['"].*?['"][,;]/g : /if ?\(sheetVersion ?< ?\d+\.?\d*e?\d*\)[ {]*?throw[\s\S]*?RequiredSheetVersion\(.*?\)[,;][\r\n]*/; const replaceStartWith = minified ? '$1' : ''; let headerChecks = [tooOldCheck]; if (tooNewCheck) headerChecks.push(tooNewCheck); headerChecks = headerChecks.concat([ `var iFileName = "${fileName}";`, `RequiredSheetVersion(${requiredVersion}${maxVersion ? ', ' + maxVersion : ''});`, '', '', ]); return src([`${path}published${ext}`, `${path}unearthed_arcana${ext}`]) .pipe(replace(replaceStartRx, replaceStartWith)) .pipe(concat(fileName, {newLine})) .pipe(header(headerChecks.join(newLine))) .pipe(dest(folder)); } const combineUnminifiedBuilder = (beta) => { const combineUnminified = () => { log.info(`Combining Unminified Published and UA for ${beta ? `beta (${betaVersion})` : `stable (${stableVersion})`} version`); return combine(false, beta); } return combineUnminified; }; const combineMinifiedBuilder = (beta) => { const combineMinified = () => { log.info(`Combining Minified Published and UA for ${beta ? `beta (${betaVersion})` : `stable (${stableVersion})`} version`); return combine(true, beta); } return combineMinified; }; const combineAllBuilder = (beta) => { const combineAll = parallel(combineUnminifiedBuilder(beta), combineMinifiedBuilder(beta)); return combineAll; }; function concatAndMinPub() { return concatAndMin("pub", "all_WotC_published"); } function concatAndMinUA() { return concatAndMin("ua", "all_WotC_unearthed_arcana"); } const combineStable = combineAllBuilder(); function concatAndMinPubBeta() { return concatAndMin("pub", "all_WotC_published", true); } function concatAndMinUABeta() { return concatAndMin("ua", "all_WotC_unearthed_arcana", true); } const minifyStable = series( parallel( concatAndMinPub, concatAndMinUA ), combineStable ); let minify; if ( hasBetaFolder ) { const combineBeta = combineAllBuilder(true); const minifyBeta = series( parallel( concatAndMinPubBeta, concatAndMinUABeta ), combineBeta ); exports.minifyBeta = minifyBeta; minify = parallel( minifyStable, minifyBeta ); } else { minify = minifyStable; } exports.minifyStable = minifyStable; exports.minify = minify; exports.default = minify; ================================================ FILE: package.json ================================================ { "name": "imports-for-mpmb-s-character-sheet", "version": "1.0.0", "description": "This git repository holds different fan-created materials that can be used with the popular MorePurpleMoreBetter's Character Record Sheet. The repository for the sheet is [found here](https://github.com/morepurplemorebetter/MPMBs-Character-Record-Sheet).", "repository": { "type": "git", "url": "git+https://github.com/safety-orange/Imports-for-MPMB-s-Character-Sheet.git" }, "scripts": { "minify": "gulp", "minifyStable": "gulp minifyStable", "minifyBeta": "gulp minifyBeta" }, "private": true, "author": "safety-orange", "bugs": { "url": "https://github.com/safety-orange/Imports-for-MPMB-s-Character-Sheet/issues" }, "homepage": "https://github.com/safety-orange/Imports-for-MPMB-s-Character-Sheet#readme", "devDependencies": { "fancy-log": "^2.0.0", "gulp": "^5.0.0", "gulp-concat": "^2.6.1", "gulp-header": "^2.0.9", "gulp-rename": "^2.0.0", "gulp-replace": "^1.1.4", "gulp-uglify": "^3.0.2" } }