diff --git a/_transformers/helpers/traittrees.js b/_transformers/helpers/traittrees.js new file mode 100644 index 00000000..7787590d --- /dev/null +++ b/_transformers/helpers/traittrees.js @@ -0,0 +1,76 @@ +const fs = require("fs"); + +module.exports.handleTraitTrees = function handleTraitTrees(traitTrees) { + const coreTree = traitTrees.find((t) => t.name === "Core"); + const ancientTree = traitTrees.find((t) => t.name === "Ancient"); + + const newCore = () => structuredClone(coreTree.data); + const newAncient = () => structuredClone(ancientTree.data); + + // set treeName and requiredLevel for each trait entry + traitTrees.forEach((tree) => { + tree.data.treeOrder.forEach((treeName) => { + tree.data.trees[treeName].tree + .map((t) => t.traits) + .flat() + .forEach((t) => { + t.name ??= ""; + + if (!t.name) { + delete t.maxLevel; + delete t.requires; + delete t.isAncient; + return; + } + + t.treeName = treeName; + }); + + tree.data.trees[treeName].name = treeName; + tree.data.trees[treeName].tree.forEach((row, rowIndex) => { + row.requiredLevel = rowIndex * 10; + }); + }); + }); + + const allTraitTrees = { + Ancient: newAncient(), + Core: newCore(), + }; + + traitTrees.forEach((tree) => { + allTraitTrees[tree.name] = tree.data; + }); + + // merge everything + traitTrees.forEach((tree) => { + if (tree.name === "Core" || tree.name === "Ancient") return; + + tree.data.treeOrder = ["Core", ...tree.data.treeOrder, "Ancient"]; + tree.data.trees.Ancient = newAncient().trees.Ancient; + tree.data.trees.Core = newCore().trees.Core; + + tree.data.allTreeTraits = {}; + tree.data.treeOrder.forEach((treeName) => { + tree.data.trees[treeName].tree.forEach((row) => { + row.traits.forEach((t) => { + if (!t.name) return; + + if (!t.isAncient) delete t.isAncient; + if (!t.requires) delete t.requires; + if (!t.maxLevel) t.maxLevel = 1; + + tree.data.allTreeTraits[t.name] = { + ...t, + requiredLevel: row.requiredLevel, + }; + }); + }); + }); + }); + + fs.writeFileSync( + "_output/trait-trees.json", + JSON.stringify(allTraitTrees, null, 4) + ); +}; diff --git a/_transformers/modimport.js b/_transformers/modimport.js index 90adaade..5848b2a3 100644 --- a/_transformers/modimport.js +++ b/_transformers/modimport.js @@ -3,6 +3,7 @@ const fs = require("fs-extra"); const { handleRNGDungeonConfig } = require("./helpers/rngdungeon"); const { handleDoors } = require("./helpers/doors"); const { handleSTEMs } = require("./helpers/stems"); +const { handleTraitTrees } = require("./helpers/traittrees"); const OUTPUT_DIR = "_output"; @@ -69,6 +70,7 @@ fs.readdirSync("mods").forEach((mod) => { handleCoreFiles(modFile.cores); handleSTEMs(modFile.stems); + handleTraitTrees(modFile.traitTrees); modFile.maps.forEach((mapData) => { const { name, map } = mapData; diff --git a/_transformers/trait-tree.js b/_transformers/trait-tree.js deleted file mode 100644 index be06ad1e..00000000 --- a/_transformers/trait-tree.js +++ /dev/null @@ -1,59 +0,0 @@ - -const YAML = require('js-yaml'); -const fs = require('fs'); - -const merge = async () => { - try { - - const files = fs.readdirSync('./traitTrees').map(f => YAML.load(fs.readFileSync(`./traitTrees/${f}`))); - const file = Object.assign({}, ...files); - - const coreTree = file.Core; - coreTree.trees.Core.tree[0].traits.forEach(t => t.treeName = 'Core'); - - const ancientTree = file.Ancient; - ancientTree.trees.Ancient.tree[0].traits.forEach(t => t.treeName = 'Ancient'); - - Object.keys(file).forEach(treeName => { - if(treeName === 'Core' || treeName === 'Ancient') return; - - file[treeName].trees.Core = JSON.parse(JSON.stringify(coreTree.trees.Core)); - file[treeName].trees.Ancient = JSON.parse(JSON.stringify(ancientTree.trees.Ancient)); - file[treeName].treeOrder.unshift('Core'); - file[treeName].treeOrder.push('Ancient'); - - Object.keys(file[treeName].trees).forEach(subtreeName => { - const treeData = file[treeName].trees[subtreeName]; - treeData.name = subtreeName; - - treeData.tree.forEach((treeLevel, i) => { - treeLevel.requiredLevel = i * 10; - }); - }); - - file[treeName].allTreeTraits = {}; - Object.values(file[treeName].trees).forEach(treeData => { - treeData.tree.forEach((treeLevel) => { - treeLevel.traits.forEach(trait => { - if(!trait.name) return; - trait.treeName = treeData.name; - trait.maxLevel = trait.maxLevel || 1; - file[treeName].allTreeTraits[trait.name] = Object.assign({}, trait, { requiredLevel: treeLevel.requiredLevel }); - }); - }); - }); - }); - - if(!fs.existsSync('_output')) fs.mkdirSync('_output'); - fs.writeFileSync('_output/trait-trees.json', JSON.stringify(file, null, 4)); - - console.log(`Loading ${Object.values(file).length} trait trees...`); - - } catch(e) { - console.error(e); - process.exit(-1); - } - -}; - -merge(); \ No newline at end of file diff --git a/mods/BaseGameContent.rairmod b/mods/BaseGameContent.rairmod index ae2ea95b..afacf28b 100644 --- a/mods/BaseGameContent.rairmod +++ b/mods/BaseGameContent.rairmod @@ -3,7 +3,7 @@ "name": "BaseGameContent", "author": "Seiyria", "version": 1, - "savedAt": 1724359759095 + "savedAt": 1724443498631 }, "npcs": [ { @@ -526931,6 +526931,7 @@ "_id": "01916bde-d3d8-7cc5-816f-c0c2b1535995" }, { + "name": "Yzalt", "map": { "compressionlevel": -1, "height": 183, @@ -623434,7 +623435,7 @@ "id": 1412, "name": "Ranata Spawner", "properties": { - "lairName": "Ranata", + "lairName": "Ranata2", "randomWalkRadius": 10, "respawnRate": 1800, "shouldStrip": true, @@ -625478,7 +625479,7 @@ "region": "Antania", "respawnX": 71, "respawnY": 175, - "creator": "Seiyria" + "creator": "Anonymous" }, "propertytypes": { "itemExpirationHours": "int", @@ -631103,8 +631104,7 @@ "version": 1.1, "width": 98 }, - "name": "Yzalt", - "_id": "01916bde-d3d8-7cc5-816f-cd23505bf54d" + "_id": "01917ff1-8ccf-7882-af43-da4195ca2e26" }, { "map": { @@ -2165287,5 +2165287,2241 @@ }, "_id": "01917b2f-3ecb-7bbd-a9b9-18bae57279a1" } + ], + "traitTrees": [ + { + "_id": "01918053-797b-744b-a8f7-3239ecc54b42", + "name": "Core", + "data": { + "treeOrder": [ + "Core" + ], + "trees": { + "Core": { + "desc": "The Core tree", + "tree": [ + { + "traits": [ + { + "maxLevel": 5, + "name": "DeathGrip" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 5, + "name": "NaturalArmor" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 5, + "name": "CarefulTouch" + } + ] + }, + { + "traits": [ + { + "maxLevel": 1 + }, + { + "maxLevel": 5, + "name": "EffectivePotions" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 5, + "name": "EtherRecombobulation" + }, + { + "maxLevel": 1 + } + ] + }, + { + "traits": [ + { + "maxLevel": 5, + "name": "InternalFortitude" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 5, + "name": "CarrotVision" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1, + "name": "BigBelt" + } + ] + }, + { + "traits": [ + { + "maxLevel": 1 + }, + { + "maxLevel": 5, + "name": "AngryFace" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 5, + "name": "SilentStrikes" + }, + { + "maxLevel": 1 + } + ] + }, + { + "traits": [ + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 5, + "name": "RecombobulativeBarrier" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + } + ] + } + ] + } + } + } + }, + { + "_id": "01918073-b0c1-7221-825c-2c6a3608dbf7", + "name": "Mage", + "data": { + "treeOrder": [ + "Mage", + "Elementalist", + "Evoker", + "Battlemage" + ], + "trees": { + "Mage": { + "desc": "The Mage tree", + "tree": [ + { + "traits": [ + { + "maxLevel": 1, + "name": "MagicMissile" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 5, + "name": "CalmMind" + }, + { + "maxLevel": 5, + "name": "ManaPool" + }, + { + "maxLevel": 1, + "name": null + } + ] + }, + { + "traits": [ + { + "maxLevel": 1, + "name": "BouncingMissiles", + "requires": "MagicMissile" + }, + { + "maxLevel": 5, + "name": "EnergyFocus" + }, + { + "maxLevel": 1, + "name": "Push" + }, + { + "maxLevel": 1, + "name": null + }, + { + "maxLevel": 1, + "name": "ConjureHealing" + } + ] + }, + { + "traits": [ + { + "maxLevel": 1, + "name": "MissileBarrage", + "requires": "MagicMissile" + }, + { + "maxLevel": 1, + "name": "MagicBolt", + "requires": null + }, + { + "maxLevel": 1, + "name": "EnergyWave", + "requires": null + }, + { + "maxLevel": 1, + "name": "Teleport" + }, + { + "maxLevel": 5, + "name": "WandSpecialty", + "requires": null + } + ] + }, + { + "traits": [ + { + "maxLevel": 1 + }, + { + "maxLevel": 5, + "name": "ConcussiveBolt", + "requires": "MagicBolt" + }, + { + "maxLevel": 1, + "name": "EnergyWaveWiden", + "requires": "EnergyWave" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1, + "name": "BiggerBottles", + "requires": "ConjureHealing" + } + ] + }, + { + "traits": [ + { + "maxLevel": 1, + "name": "Clearcasting" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 5, + "name": "ExpandedMemory", + "requires": "Teleport" + }, + { + "maxLevel": 1, + "name": "MassTeleport", + "requires": "Teleport" + } + ] + } + ] + }, + "Elementalist": { + "desc": "The Elementalist tree", + "tree": [ + { + "traits": [ + { + "maxLevel": 1, + "name": "Combust" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1, + "name": "Hail" + } + ] + }, + { + "traits": [ + { + "maxLevel": 1, + "name": "FireMist" + }, + { + "maxLevel": 5, + "name": "FireFocus" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 5, + "name": "IceFocus" + }, + { + "maxLevel": 1, + "name": "IceMist" + } + ] + }, + { + "traits": [ + { + "maxLevel": 5, + "name": "ForgedFire" + }, + { + "maxLevel": 1, + "name": "FirethornsAura" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1, + "name": "FrostspikesAura" + }, + { + "maxLevel": 5, + "name": "ChilledCore" + } + ] + }, + { + "traits": [ + { + "maxLevel": 1, + "name": "FireMistWiden", + "requires": "FireMist" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1, + "name": "IceMistWiden", + "requires": "IceMist" + } + ] + }, + { + "traits": [ + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1, + "name": "Antipode" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + } + ] + } + ] + }, + "Evoker": { + "desc": "The Evoker tree", + "tree": [ + { + "traits": [ + { + "maxLevel": 1, + "name": "Identify" + }, + { + "maxLevel": 1, + "name": "TrueSight" + }, + { + "maxLevel": 1, + "name": "BarFire" + }, + { + "maxLevel": 1, + "name": "BarFrost" + }, + { + "maxLevel": 1, + "name": "BarWater" + } + ] + }, + { + "traits": [ + { + "maxLevel": 1, + "name": "Protection" + }, + { + "maxLevel": 1, + "name": "Absorption" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1, + "name": "DarkVision" + }, + { + "maxLevel": 1 + } + ] + }, + { + "traits": [ + { + "maxLevel": 1, + "name": "ExpansiveKnowledge" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 5, + "name": "ThermalBarrier" + }, + { + "maxLevel": 1, + "name": "Darkness" + }, + { + "maxLevel": 1, + "name": "FleetOfFoot" + } + ] + }, + { + "traits": [ + { + "maxLevel": 1, + "name": "Haste" + }, + { + "maxLevel": 1, + "name": "MagicMirror" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + } + ] + }, + { + "traits": [ + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1, + "name": "Invisibility" + } + ] + } + ] + }, + "Battlemage": { + "desc": "The Battlemage tree", + "tree": [ + { + "traits": [ + { + "maxLevel": 1, + "name": "ConjureSword" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1, + "name": "VolcanoStance" + }, + { + "maxLevel": 1, + "name": "ImbueFlame" + }, + { + "maxLevel": 1, + "name": "FindFamiliarBear" + } + ] + }, + { + "traits": [ + { + "maxLevel": 1, + "name": "ConjureShield" + }, + { + "maxLevel": 1, + "name": "MagicalStrikes" + }, + { + "maxLevel": 1, + "name": "GlacierStance" + }, + { + "maxLevel": 1, + "name": "ImbueFrost" + }, + { + "maxLevel": 1, + "name": "FindFamiliarWolf" + } + ] + }, + { + "traits": [ + { + "maxLevel": 1, + "name": "Drain" + }, + { + "maxLevel": 1, + "name": "RiftSlash" + }, + { + "maxLevel": 1, + "name": "WizardStance" + }, + { + "maxLevel": 1, + "name": "ImbueEnergy" + }, + { + "maxLevel": 1, + "name": "FindFamiliarSpider" + } + ] + }, + { + "traits": [ + { + "maxLevel": 5, + "name": "DrainSlash", + "requires": "Drain" + }, + { + "maxLevel": 1, + "name": "Asper" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1, + "name": "FindFamiliarSalamander" + } + ] + }, + { + "traits": [ + { + "maxLevel": 1, + "name": "LightenArmor" + }, + { + "maxLevel": 5, + "name": "AsperSlash", + "requires": "Asper" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 5, + "name": "StrongMind" + }, + { + "maxLevel": 1 + } + ] + } + ] + } + } + } + }, + { + "_id": "01918084-8b17-7eed-b3fa-fb99df3d10f0", + "name": "Ancient", + "data": { + "treeOrder": [ + "Ancient" + ], + "trees": { + "Ancient": { + "desc": "The Ancient tree", + "tree": [ + { + "traits": [ + { + "maxLevel": 5, + "name": "AncientAnger", + "isAncient": true + }, + { + "maxLevel": 5, + "name": "AncientPotions", + "isAncient": true + }, + { + "maxLevel": 5, + "name": "AncientFortitude", + "isAncient": true + }, + { + "maxLevel": 5, + "name": "AncientGrip", + "isAncient": true + }, + { + "maxLevel": 5, + "name": "AncientSilence", + "isAncient": true + } + ] + }, + { + "traits": [ + { + "maxLevel": 5, + "name": "AbsorptiveArmor", + "isAncient": true + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 5, + "name": "CommandingPower", + "isAncient": true + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 5, + "name": "QuickRecovery", + "isAncient": true + } + ] + }, + { + "traits": [ + { + "maxLevel": 10, + "name": "ArmorManifestation", + "isAncient": true + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 10, + "name": "OffensiveManifestation", + "isAncient": true + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 10, + "name": "DefensiveManifestation", + "isAncient": true + } + ] + }, + { + "traits": [ + { + "maxLevel": 20, + "name": "EnergyManifestation", + "isAncient": true + }, + { + "maxLevel": 20, + "name": "FireManifestation", + "isAncient": true + }, + { + "maxLevel": 20, + "name": "IceManifestation", + "isAncient": true + }, + { + "maxLevel": 20, + "name": "NecroticManifestation", + "isAncient": true + }, + { + "maxLevel": 20, + "name": "PoisonManifestation", + "isAncient": true + } + ] + }, + { + "traits": [ + { + "maxLevel": 20, + "name": "MachleumSkin", + "isAncient": true + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 100, + "name": "SurvivalTechniques", + "isAncient": true + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 20, + "name": "MachleumAura", + "isAncient": true + } + ] + } + ] + } + } + } + }, + { + "_id": "01918086-71dd-7eed-b3fb-01e36f6aaf3c", + "name": "Healer", + "data": { + "treeOrder": [ + "Healer", + "Diviner", + "Druid", + "Oracle" + ], + "trees": { + "Healer": { + "desc": "The Healer tree", + "tree": [ + { + "traits": [ + { + "maxLevel": 1, + "name": "Cure" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 5, + "name": "CalmMind" + }, + { + "maxLevel": 5, + "name": "ManaPool" + }, + { + "maxLevel": 1, + "name": null + } + ] + }, + { + "traits": [ + { + "maxLevel": 5, + "name": "HealingFocus", + "requires": "Cure" + }, + { + "maxLevel": 1, + "name": "Revive", + "requires": "Cure" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1, + "name": "Wellspring" + }, + { + "maxLevel": 1, + "name": "Succor" + } + ] + }, + { + "traits": [ + { + "maxLevel": 1, + "name": "PowerwordHeal", + "requires": "Cure" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1, + "name": "Regen" + }, + { + "maxLevel": 1 + } + ] + }, + { + "traits": [ + { + "maxLevel": 1 + }, + { + "maxLevel": 1, + "name": "SnapHeal", + "requires": "Revive" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1, + "name": "SecondWind" + }, + { + "maxLevel": 1 + } + ] + }, + { + "traits": [ + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1, + "name": "Clearcasting" + } + ] + } + ] + }, + "Diviner": { + "desc": "The Diviner tree", + "tree": [ + { + "traits": [ + { + "maxLevel": 1, + "name": "Afflict" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1, + "name": "Light" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1, + "name": "Foodsense" + } + ] + }, + { + "traits": [ + { + "maxLevel": 5, + "name": "NecroticFocus" + }, + { + "maxLevel": 1, + "name": "HolyFire" + }, + { + "maxLevel": 1, + "name": "Spellshield" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1, + "name": "Push" + } + ] + }, + { + "traits": [ + { + "maxLevel": 1, + "name": "HolyAura" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 5, + "name": "TotemSpecialty" + }, + { + "maxLevel": 1, + "name": null + } + ] + }, + { + "traits": [ + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 5, + "name": "HolyAffliction" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + } + ] + }, + { + "traits": [ + { + "maxLevel": 1, + "name": "Dispel" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + } + ] + } + ] + }, + "Druid": { + "desc": "The Druid tree", + "tree": [ + { + "traits": [ + { + "maxLevel": 1, + "name": "Plague" + }, + { + "maxLevel": 1, + "name": "Antidote" + }, + { + "maxLevel": 1, + "name": "Stun" + }, + { + "maxLevel": 1, + "name": "Blind" + }, + { + "maxLevel": 1, + "name": "Vision" + } + ] + }, + { + "traits": [ + { + "maxLevel": 5, + "name": "DiseaseFocus" + }, + { + "maxLevel": 1, + "name": "Disease" + }, + { + "maxLevel": 1, + "name": "Daze" + }, + { + "maxLevel": 1, + "name": "Snare" + }, + { + "maxLevel": 1, + "name": "FindFamiliarLight" + } + ] + }, + { + "traits": [ + { + "maxLevel": 1, + "name": "ContagiousPlague", + "requires": "Plague" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 5, + "name": "IrresistibleStun", + "requires": "Stun" + }, + { + "maxLevel": 5, + "name": "BlindingLight", + "requires": "Blind" + }, + { + "maxLevel": 1, + "name": "FindFamiliarWater" + } + ] + }, + { + "traits": [ + { + "maxLevel": 1 + }, + { + "maxLevel": 1, + "name": "DebilitatingDisease", + "requires": "Disease" + }, + { + "maxLevel": 5, + "name": "DazingOutlook", + "requires": "Daze" + }, + { + "maxLevel": 1, + "name": "Roots", + "requires": "Snare" + }, + { + "maxLevel": 1, + "name": "FindFamiliarNature" + } + ] + }, + { + "traits": [ + { + "maxLevel": 5, + "name": "Pandemic" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + } + ] + } + ] + }, + "Oracle": { + "desc": "The Oracle tree", + "tree": [ + { + "traits": [ + { + "maxLevel": 1, + "name": "TrueSight" + }, + { + "maxLevel": 1, + "name": "BarFire" + }, + { + "maxLevel": 1, + "name": "BarFrost" + }, + { + "maxLevel": 1, + "name": "BarNecro" + }, + { + "maxLevel": 1 + } + ] + }, + { + "traits": [ + { + "maxLevel": 1, + "name": "VitalEssence" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 5, + "name": "NecroticWard", + "requires": "BarNecro" + }, + { + "maxLevel": 1, + "name": "Augury" + } + ] + }, + { + "traits": [ + { + "maxLevel": 1, + "name": "Aid" + }, + { + "maxLevel": 1, + "name": "PowerwordBarFire", + "requires": "BarFire" + }, + { + "maxLevel": 1, + "name": "PowerwordBarFrost", + "requires": "BarFrost" + }, + { + "maxLevel": 1, + "name": "PowerwordBarNecro", + "requires": "BarNecro" + }, + { + "maxLevel": 1 + } + ] + }, + { + "traits": [ + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 5, + "name": "EffectiveSupporter" + } + ] + }, + { + "traits": [ + { + "maxLevel": 1, + "name": "Autoheal" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + } + ] + } + ] + } + } + } + }, + { + "_id": "0191808f-bbbb-7eed-b3fb-15f720150416", + "name": "Thief", + "data": { + "treeOrder": [ + "Thief", + "Rogue", + "Shadowsong", + "Assassin" + ], + "trees": { + "Thief": { + "desc": "The Thief tree", + "tree": [ + { + "traits": [ + { + "maxLevel": 5, + "name": "DarkerShadows" + }, + { + "maxLevel": 1, + "name": "ImprovedHide" + }, + { + "maxLevel": 1, + "name": "ThiefGrip" + }, + { + "maxLevel": 1, + "name": "Identify" + }, + { + "maxLevel": 1, + "name": "Gemsense" + } + ] + }, + { + "traits": [ + { + "maxLevel": 5, + "name": "BouncingThrows" + }, + { + "maxLevel": 1, + "name": "Darkness" + }, + { + "maxLevel": 1, + "name": "DarkVision" + }, + { + "maxLevel": 5, + "name": "HiddenHealing" + }, + { + "maxLevel": 5, + "name": "ReplenishingShadows" + } + ] + }, + { + "traits": [ + { + "maxLevel": 1 + }, + { + "maxLevel": 1, + "name": "Multithrow" + }, + { + "maxLevel": 1, + "name": "Disguise" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1, + "name": "Appraise", + "requires": "Identify" + } + ] + }, + { + "traits": [ + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1, + "name": "DarknessWiden", + "requires": "Darkness" + }, + { + "maxLevel": 1, + "name": "ChainKunai" + }, + { + "maxLevel": 1 + } + ] + }, + { + "traits": [ + { + "maxLevel": 1 + }, + { + "maxLevel": 1, + "name": "BoomerangArm" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + } + ] + } + ] + }, + "Rogue": { + "desc": "The Rogue tree", + "tree": [ + { + "traits": [ + { + "maxLevel": 1, + "name": "ImprovedSteal" + }, + { + "maxLevel": 1, + "name": "TrueSight" + }, + { + "maxLevel": 1, + "name": "GentleStep" + }, + { + "maxLevel": 1, + "name": "Set" + }, + { + "maxLevel": 1, + "name": "Disarm", + "requires": "Set" + } + ] + }, + { + "traits": [ + { + "maxLevel": 1, + "name": "Mug", + "requires": "ImprovedSteal" + }, + { + "maxLevel": 5, + "name": "OffhandFinesse" + }, + { + "maxLevel": 5, + "name": "LockpickSpecialty" + }, + { + "maxLevel": 1, + "name": "ThrownTraps", + "requires": "Set" + }, + { + "maxLevel": 1 + } + ] + }, + { + "traits": [ + { + "maxLevel": 5, + "name": "NimbleFingers", + "requires": "ImprovedSteal" + }, + { + "maxLevel": 1, + "name": "EagleEye" + }, + { + "maxLevel": 1, + "name": "Transmute" + }, + { + "maxLevel": 5, + "name": "StrongerTraps", + "requires": "Set" + }, + { + "maxLevel": 1 + } + ] + }, + { + "traits": [ + { + "maxLevel": 1 + }, + { + "maxLevel": 1, + "name": "Vortex" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1, + "name": "WiderTraps", + "requires": "Set" + }, + { + "maxLevel": 1 + } + ] + }, + { + "traits": [ + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 5, + "name": "PhilosophersStone", + "requires": "Transmute" + }, + { + "maxLevel": 5, + "name": "ReusableTraps", + "requires": "Set" + }, + { + "maxLevel": 1 + } + ] + } + ] + }, + "Shadowsong": { + "desc": "The Shadowsong tree", + "tree": [ + { + "traits": [ + { + "maxLevel": 5, + "name": "BouncingArrows" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1, + "name": "DeadlyDirgeSong" + }, + { + "maxLevel": 5, + "name": "OffensiveEncore" + }, + { + "maxLevel": 5, + "name": "DefensiveVoice" + } + ] + }, + { + "traits": [ + { + "maxLevel": 1, + "name": "MultiShot" + }, + { + "maxLevel": 1, + "name": "NightmareSerenadeSong" + }, + { + "maxLevel": 5, + "name": "DirgeOfCerberus", + "requires": "DeadlyDirgeSong" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + } + ] + }, + { + "traits": [ + { + "maxLevel": 5, + "name": "EndlessQuiver" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 5, + "name": "ShieldingVoice" + }, + { + "maxLevel": 1, + "name": "TranquilTrillSong" + }, + { + "maxLevel": 1, + "name": "PowerBalladSong" + } + ] + }, + { + "traits": [ + { + "maxLevel": 1, + "name": "TripleShot" + }, + { + "maxLevel": 1, + "name": "AriaOfRefugeSong" + }, + { + "maxLevel": 1, + "name": "WistfulFugueSong" + }, + { + "maxLevel": 5, + "name": "SoothingTranquility", + "requires": "TranquilTrillSong" + }, + { + "maxLevel": 1 + } + ] + }, + { + "traits": [ + { + "maxLevel": 5, + "name": "StrongShots" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 5, + "name": "ReflectingVoice" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1, + "name": "Shadowsong" + } + ] + } + ] + }, + "Assassin": { + "desc": "The Assassin tree", + "tree": [ + { + "traits": [ + { + "maxLevel": 1 + }, + { + "maxLevel": 1, + "name": "Poison" + }, + { + "maxLevel": 1, + "name": "Backstab" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1, + "name": "Apply" + } + ] + }, + { + "traits": [ + { + "maxLevel": 1, + "name": "Venom" + }, + { + "maxLevel": 5, + "name": "PoisonFocus", + "requires": "Poison" + }, + { + "maxLevel": 5, + "name": "BetterBackstab", + "requires": "Backstab" + }, + { + "maxLevel": 5, + "name": "ShadowDaggers" + }, + { + "maxLevel": 1 + } + ] + }, + { + "traits": [ + { + "maxLevel": 1 + }, + { + "maxLevel": 1, + "name": "CorrosivePoison", + "requires": "Poison" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 5, + "name": "ShadowSheath" + }, + { + "maxLevel": 5, + "name": "EnhancedApplications", + "requires": "Apply" + } + ] + }, + { + "traits": [ + { + "maxLevel": 1, + "name": "DegenerativeVenom", + "requires": "Venom" + }, + { + "maxLevel": 1, + "name": "FindFamiliarShadowClones" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1, + "name": "Shadowmeld" + } + ] + }, + { + "traits": [ + { + "maxLevel": 1 + }, + { + "maxLevel": 5, + "name": "ShadowSwap" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1, + "name": "Debilitate" + }, + { + "maxLevel": 1 + } + ] + } + ] + } + } + } + }, + { + "_id": "01918097-1121-7eed-b3fb-19e077941e4f", + "name": "Warrior", + "data": { + "treeOrder": [ + "Warrior", + "Paladin", + "Duelist", + "Monk" + ], + "trees": { + "Warrior": { + "desc": "The Warrior tree", + "tree": [ + { + "traits": [ + { + "maxLevel": 1, + "name": "Cleave" + }, + { + "maxLevel": 5, + "name": "SharpVision" + }, + { + "maxLevel": 5, + "name": "SwordTricks" + }, + { + "maxLevel": 5, + "name": "FunkyMoves" + }, + { + "maxLevel": 1 + } + ] + }, + { + "traits": [ + { + "maxLevel": 1, + "name": "ConsumingRage" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 5, + "name": "Swashbuckler", + "requires": "SwordTricks" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + } + ] + }, + { + "traits": [ + { + "maxLevel": 5, + "name": "DeepCuts", + "requires": "Cleave" + }, + { + "maxLevel": 1, + "name": "Ragerang" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1, + "name": "MadDash" + }, + { + "maxLevel": 1 + } + ] + }, + { + "traits": [ + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1, + "name": "TitanGrip" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + } + ] + }, + { + "traits": [ + { + "maxLevel": 1, + "name": "MagicalSpecialty" + }, + { + "maxLevel": 1, + "name": "StaffSpecialty" + }, + { + "maxLevel": 1, + "name": "BowSpecialty" + }, + { + "maxLevel": 1, + "name": "ThrowingSpecialty" + }, + { + "maxLevel": 1, + "name": "ShortswordSpecialty" + } + ] + } + ] + }, + "Paladin": { + "desc": "The Paladin tree", + "tree": [ + { + "traits": [ + { + "maxLevel": 1, + "name": "Provoke" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 5, + "name": "SterlingArmor" + } + ] + }, + { + "traits": [ + { + "maxLevel": 1 + }, + { + "maxLevel": 5, + "name": "HolyProtection" + }, + { + "maxLevel": 5, + "name": "SilverSkin" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1, + "name": "Multistrike" + } + ] + }, + { + "traits": [ + { + "maxLevel": 1, + "name": "MockingShout", + "requires": "Provoke" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1, + "name": "Blindstrike" + }, + { + "maxLevel": 1, + "name": "Thruststrike" + }, + { + "maxLevel": 1, + "name": "Multitarget", + "requires": "Multistrike" + } + ] + }, + { + "traits": [ + { + "maxLevel": 5, + "name": "ReflectiveCoating" + }, + { + "maxLevel": 1, + "name": "Shieldbearer" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 5, + "name": "Multifocus", + "requires": "Multistrike" + } + ] + }, + { + "traits": [ + { + "maxLevel": 1, + "name": "MaceSpecialty" + }, + { + "maxLevel": 1, + "name": "TwohandedSpecialty" + }, + { + "maxLevel": 1, + "name": "PolearmSpecialty" + }, + { + "maxLevel": 1, + "name": "DoubleThrust", + "requires": "Thruststrike" + }, + { + "maxLevel": 1 + } + ] + } + ] + }, + "Duelist": { + "desc": "The Duelist tree", + "tree": [ + { + "traits": [ + { + "maxLevel": 1, + "name": "RageStance" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 5, + "name": "ForcefulStrike" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1, + "name": "ParryStance" + } + ] + }, + { + "traits": [ + { + "maxLevel": 1 + }, + { + "maxLevel": 5, + "name": "OffhandFinesse" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 5, + "name": "Riposte", + "requires": "ParryStance" + } + ] + }, + { + "traits": [ + { + "maxLevel": 5, + "name": "ViciousAssault", + "requires": "RageStance" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 5, + "name": "GlowingWeapon", + "requires": "ParryStance" + } + ] + }, + { + "traits": [ + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1, + "name": "BalancedGrip" + }, + { + "maxLevel": 1, + "name": "Boost" + }, + { + "maxLevel": 1 + } + ] + }, + { + "traits": [ + { + "maxLevel": 1, + "name": "SwordSpecialty" + }, + { + "maxLevel": 1, + "name": "AxeSpecialty" + }, + { + "maxLevel": 1, + "name": "DaggerSpecialty" + }, + { + "maxLevel": 1, + "name": "BoostedBoost", + "requires": "Boost" + }, + { + "maxLevel": 1 + } + ] + } + ] + }, + "Monk": { + "desc": "The Monk tree", + "tree": [ + { + "traits": [ + { + "maxLevel": 1, + "name": "Jumpkick" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1, + "name": "TurtleStance" + }, + { + "maxLevel": 5, + "name": "MartialAcuity" + }, + { + "maxLevel": 1, + "name": "TigerStance" + } + ] + }, + { + "traits": [ + { + "maxLevel": 1, + "name": "Punchkick", + "requires": "Jumpkick" + }, + { + "maxLevel": 1, + "name": "Sweep" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1, + "name": "UnarmoredSavant" + }, + { + "maxLevel": 1, + "name": "Shield" + } + ] + }, + { + "traits": [ + { + "maxLevel": 1 + }, + { + "maxLevel": 5, + "name": "StrongSweep", + "requires": "Sweep" + }, + { + "maxLevel": 1, + "name": "BrassKnuckles" + }, + { + "maxLevel": 5, + "name": "MartialAgility" + }, + { + "maxLevel": 1 + } + ] + }, + { + "traits": [ + { + "maxLevel": 1, + "name": "Rapidpunch" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 5, + "name": "StunningFist" + } + ] + }, + { + "traits": [ + { + "maxLevel": 5, + "name": "ImprovedRapidpunch" + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1 + }, + { + "maxLevel": 1, + "name": "MartialSpecialty" + } + ] + } + ] + } + } + } + } ] } diff --git a/package.json b/package.json index e43cbae2..90d1279b 100644 --- a/package.json +++ b/package.json @@ -3,18 +3,15 @@ "version": "0.0.0", "description": "Content scripts for LotR", "scripts": { - "build:all": "npm run build:mods && npm run build:trait-trees && npm run generate:meta", - "build:trait-trees": "node _transformers/trait-tree.js", + "build:all": "npm run build:mods && npm run generate:meta", "build:mods": "node _transformers/modimport.js", - "watch:trait-trees": "nodemon --ext yml --watch traitTrees --exec \"npm run build:trait-trees\"", "watch:mods": "nodemon --ext rairmod --watch mods --exec \"npm run build:mods\"", "generate:meta": "node _tasks/generate-meta.js", "fix:spawnersandmaps": "node _tasks/convert-spawners-and-maps", "dump:props": "node _tasks/dump-props", "test": "npm run build:all", "postinstall": "npm run build:all", - "watch:all": "nodemon --ext yml --watch traitTrees --exec \"npm run build:all\"", - "watch": "concurrently \"npm run watch:trait-trees\"" + "watch": "concurrently \"npm run watch:mods\"" }, "repository": { "type": "git", diff --git a/traitTrees/ancient.yml b/traitTrees/ancient.yml deleted file mode 100644 index d0350ccb..00000000 --- a/traitTrees/ancient.yml +++ /dev/null @@ -1,104 +0,0 @@ - -Ancient: - - trees: - Ancient: - desc: The Ancient tree - - tree: - - - traits: - - - name: AncientAnger - isAncient: true - maxLevel: 5 - - - name: AncientPotions - isAncient: true - maxLevel: 5 - - - name: AncientFortitude - isAncient: true - maxLevel: 5 - - - name: AncientGrip - isAncient: true - maxLevel: 5 - - - name: AncientSilence - isAncient: true - maxLevel: 5 - - - traits: - - - name: AbsorptiveArmor - isAncient: true - maxLevel: 5 - - - name: '' - - - name: CommandingPower - isAncient: true - maxLevel: 5 - - - name: '' - - - name: QuickRecovery - isAncient: true - maxLevel: 5 - - - traits: - - name: ArmorManifestation - isAncient: true - maxLevel: 10 - - - name: '' - - - name: OffensiveManifestation - isAncient: true - maxLevel: 10 - - - name: '' - - - name: DefensiveManifestation - isAncient: true - maxLevel: 10 - - - traits: - - - name: EnergyManifestation - isAncient: true - maxLevel: 20 - - - name: FireManifestation - isAncient: true - maxLevel: 20 - - - name: IceManifestation - isAncient: true - maxLevel: 20 - - - name: NecroticManifestation - isAncient: true - maxLevel: 20 - - - name: PoisonManifestation - isAncient: true - maxLevel: 20 - - - traits: - - name: MachleumSkin - isAncient: true - maxLevel: 20 - - - name: '' - - - name: SurvivalTechniques - isAncient: true - maxLevel: 100 - - - name: '' - - - name: MachleumAura - isAncient: true - maxLevel: 20 \ No newline at end of file diff --git a/traitTrees/everyone.yml b/traitTrees/everyone.yml deleted file mode 100644 index 3956642c..00000000 --- a/traitTrees/everyone.yml +++ /dev/null @@ -1,73 +0,0 @@ - -Core: - - trees: - Core: - desc: The Core tree - - tree: - - traits: - - name: DeathGrip - maxLevel: 5 - - - name: '' - - - name: NaturalArmor - maxLevel: 5 - - - name: '' - - - name: CarefulTouch - maxLevel: 5 - - - traits: - - name: '' - - - name: EffectivePotions - maxLevel: 5 - - - name: '' - - - name: EtherRecombobulation - maxLevel: 5 - - - name: '' - - - traits: - - name: InternalFortitude - maxLevel: 5 - - - name: '' - - - name: CarrotVision - maxLevel: 5 - - - name: '' - - - name: BigBelt - maxLevel: 1 - - - traits: - - name: '' - - - name: AngryFace - maxLevel: 5 - - - name: '' - - - name: SilentStrikes - maxLevel: 5 - - - name: '' - - - traits: - - name: '' - - - name: '' - - - name: RecombobulativeBarrier - maxLevel: 5 - - - name: '' - - - name: '' \ No newline at end of file diff --git a/traitTrees/healer.yml b/traitTrees/healer.yml deleted file mode 100644 index c456d6a4..00000000 --- a/traitTrees/healer.yml +++ /dev/null @@ -1,295 +0,0 @@ - -Healer: - - treeOrder: ['Healer', 'Diviner', 'Druid', 'Oracle'] - - trees: - Healer: - desc: The Healer tree - - tree: - - traits: - - name: Cure - maxLevel: 1 - - - name: '' - - - name: CalmMind - maxLevel: 5 - - - name: ManaPool - maxLevel: 5 - - - name: '' - - - traits: - - name: HealingFocus - maxLevel: 5 - requires: Cure - - - name: Revive - maxLevel: 1 - requires: Cure - - - name: '' - - - name: Wellspring - maxLevel: 1 - - - name: Succor - maxLevel: 1 - - - traits: - - name: PowerwordHeal - maxLevel: 1 - requires: Cure - - - name: '' - - - name: '' - - - name: Regen - maxLevel: 1 - - - name: '' - - - traits: - - - name: '' - - - name: SnapHeal - maxLevel: 1 - requires: Revive - - - name: '' - - - name: SecondWind - maxLevel: 1 - - - name: '' - - - traits: - - - name: '' - - name: '' - - name: '' - - name: '' - - - name: Clearcasting - maxLevel: 1 - - Diviner: - desc: The Diviner tree - - tree: - - traits: - - name: Afflict - maxLevel: 1 - - - name: '' - - - name: Light - maxLevel: 1 - - - name: '' - - - name: Foodsense - maxLevel: 1 - - - traits: - - name: NecroticFocus - maxLevel: 5 - - - name: HolyFire - maxLevel: 1 - - - name: Spellshield - maxLevel: 1 - - - name: '' - - name: Push - maxLevel: 1 - - - traits: - - name: HolyAura - maxLevel: 1 - - - name: '' - - - name: '' - - - name: TotemSpecialty - maxLevel: 5 - - - name: '' - - - traits: - - name: '' - - name: '' - - - name: HolyAffliction - maxLevel: 5 - - - name: '' - - name: '' - - - traits: - - name: Dispel - maxLevel: 1 - - - name: '' - - name: '' - - name: '' - - name: '' - - Druid: - desc: The Druid tree - - tree: - - traits: - - name: Plague - maxLevel: 1 - - - name: Antidote - maxLevel: 1 - - - name: Stun - maxLevel: 1 - - - name: Blind - maxLevel: 1 - - - name: Vision - maxLevel: 1 - - - traits: - - name: DiseaseFocus - maxLevel: 5 - - - name: Disease - maxLevel: 1 - - - name: Daze - maxLevel: 1 - - - name: Snare - maxLevel: 1 - - - name: FindFamiliarLight - maxLevel: 1 - - - traits: - - name: ContagiousPlague - maxLevel: 1 - requires: Plague - - - name: '' - - - name: IrresistibleStun - maxLevel: 5 - requires: Stun - - - name: BlindingLight - maxLevel: 5 - requires: Blind - - - - name: FindFamiliarWater - maxLevel: 1 - - - traits: - - - name: '' - - - name: DebilitatingDisease - maxLevel: 1 - requires: Disease - - - name: DazingOutlook - maxLevel: 5 - requires: Daze - - - name: Roots - maxLevel: 1 - requires: Snare - - - name: FindFamiliarNature - maxLevel: 1 - - - traits: - - - name: Pandemic - maxLevel: 5 - - - name: '' - - name: '' - - name: '' - - name: '' - - Oracle: - desc: The Oracle tree - - tree: - - traits: - - - name: TrueSight - maxLevel: 1 - - - name: BarFire - maxLevel: 1 - - - name: BarFrost - maxLevel: 1 - - - name: BarNecro - maxLevel: 1 - - - name: '' - - - traits: - - name: VitalEssence - maxLevel: 1 - - - name: '' - - name: '' - - name: NecroticWard - maxLevel: 5 - requires: BarNecro - - - name: Augury - maxLevel: 1 - - - traits: - - name: Aid - maxLevel: 1 - - - name: PowerwordBarFire - maxLevel: 1 - requires: BarFire - - - name: PowerwordBarFrost - maxLevel: 1 - requires: BarFrost - - - name: PowerwordBarNecro - maxLevel: 1 - requires: BarNecro - - - name: '' - - - traits: - - name: '' - - name: '' - - name: '' - - name: '' - - name: EffectiveSupporter - maxLevel: 5 - - - traits: - - name: Autoheal - maxLevel: 1 - - - name: '' - - name: '' - - name: '' - - name: '' \ No newline at end of file diff --git a/traitTrees/mage.yml b/traitTrees/mage.yml deleted file mode 100644 index 18f475da..00000000 --- a/traitTrees/mage.yml +++ /dev/null @@ -1,307 +0,0 @@ - -Mage: - - treeOrder: ['Mage', 'Elementalist', 'Evoker', 'Battlemage'] - - trees: - Mage: - desc: The Mage tree - - tree: - - traits: - - name: MagicMissile - maxLevel: 1 - - - name: '' - - - name: CalmMind - maxLevel: 5 - - - name: ManaPool - maxLevel: 5 - - - name: '' - - - traits: - - - name: BouncingMissiles - maxLevel: 1 - requires: MagicMissile - - - name: EnergyFocus - maxLevel: 5 - - - name: Push - maxLevel: 1 - - - name: '' - - - name: ConjureHealing - maxLevel: 1 - - - traits: - - - name: MissileBarrage - maxLevel: 1 - requires: MagicMissile - - - name: MagicBolt - maxLevel: 1 - - - name: EnergyWave - maxLevel: 1 - - - name: Teleport - maxLevel: 1 - - - name: WandSpecialty - maxLevel: 5 - - - traits: - - - name: '' - - - name: ConcussiveBolt - maxLevel: 5 - - - name: EnergyWaveWiden - maxLevel: 1 - - - name: '' - - - name: BiggerBottles - maxLevel: 1 - requires: ConjureHealing - - - traits: - - - name: Clearcasting - maxLevel: 1 - - - name: '' - - name: '' - - - name: ExpandedMemory - maxLevel: 5 - - - name: MassTeleport - maxLevel: 1 - requires: Teleport - - Evoker: - desc: The Evoker tree - - tree: - - traits: - - name: Identify - maxLevel: 1 - - - name: TrueSight - maxLevel: 1 - - - name: BarFire - maxLevel: 1 - - - name: BarFrost - maxLevel: 1 - - - name: BarWater - maxLevel: 1 - - - traits: - - name: Protection - maxLevel: 1 - - - name: Absorption - maxLevel: 1 - - - name: '' - - - name: DarkVision - maxLevel: 1 - - - name: '' - - - traits: - - name: ExpansiveKnowledge - maxLevel: 1 - - - name: '' - - - name: ThermalBarrier - maxLevel: 5 - - - name: Darkness - maxLevel: 1 - - - name: FleetOfFoot - maxLevel: 1 - - - traits: - - name: Haste - maxLevel: 1 - - - name: MagicMirror - maxLevel: 1 - - - name: '' - - name: '' - - name: '' - - - traits: - - name: '' - - name: '' - - name: '' - - name: '' - - - name: Invisibility - maxLevel: 1 - - Elementalist: - desc: The Elementalist tree - - tree: - - traits: - - name: Combust - maxLevel: 1 - - - name: '' - - name: '' - - name: '' - - - name: Hail - maxLevel: 1 - - - traits: - - name: FireMist - maxLevel: 1 - - - name: FireFocus - maxLevel: 5 - - - name: '' - - - name: IceFocus - maxLevel: 5 - - - name: IceMist - maxLevel: 1 - - - traits: - - - name: ForgedFire - maxLevel: 5 - - - name: FirethornsAura - maxLevel: 1 - - - name: '' - - - name: FrostspikesAura - maxLevel: 1 - - - name: ChilledCore - maxLevel: 5 - - - traits: - - name: FireMistWiden - maxLevel: 1 - - - name: '' - - name: '' - - name: '' - - - name: IceMistWiden - maxLevel: 1 - - - traits: - - name: '' - - name: '' - - - name: Antipode - maxLevel: 1 - - - name: '' - - name: '' - - Battlemage: - desc: The Battlemage tree - - tree: - - traits: - - name: ConjureSword - maxLevel: 1 - - - name: '' - - - name: VolcanoStance - maxLevel: 1 - - - name: ImbueFlame - maxLevel: 1 - - - name: FindFamiliarBear - maxLevel: 1 - - - traits: - - - name: ConjureShield - maxLevel: 1 - - - name: MagicalStrikes - maxLevel: 1 - - - name: GlacierStance - maxLevel: 1 - - - name: ImbueFrost - maxLevel: 1 - - - name: FindFamiliarWolf - maxLevel: 1 - - - traits: - - name: Drain - maxLevel: 1 - - - name: RiftSlash - maxLevel: 1 - - - name: WizardStance - maxLevel: 1 - - - name: ImbueEnergy - maxLevel: 1 - - - name: FindFamiliarSpider - maxLevel: 1 - - - traits: - - name: DrainSlash - maxLevel: 5 - requires: Drain - - - name: Asper - maxLevel: 1 - - - name: '' - - - name: '' - - - name: FindFamiliarSalamander - maxLevel: 1 - - - traits: - - name: LightenArmor - maxLevel: 1 - - - name: AsperSlash - maxLevel: 5 - requires: Asper - - - name: '' - - - name: StrongMind - maxLevel: 5 - - - name: '' \ No newline at end of file diff --git a/traitTrees/thief.yml b/traitTrees/thief.yml deleted file mode 100644 index 9d810186..00000000 --- a/traitTrees/thief.yml +++ /dev/null @@ -1,322 +0,0 @@ - -Thief: - - treeOrder: ['Thief', 'Rogue', 'Shadowsong', 'Assassin'] - - trees: - Thief: - desc: The Thief tree - - tree: - - traits: - - name: DarkerShadows - maxLevel: 5 - - - name: ImprovedHide - maxLevel: 1 - - - name: ThiefGrip - maxLevel: 1 - - - name: Identify - maxLevel: 1 - - - name: Gemsense - maxLevel: 1 - - - traits: - - name: BouncingThrows - maxLevel: 5 - - - name: Darkness - maxLevel: 1 - - - name: DarkVision - maxLevel: 1 - - - name: HiddenHealing - maxLevel: 5 - - - name: ReplenishingShadows - maxLevel: 5 - - - traits: - - name: '' - - - name: Multithrow - maxLevel: 1 - - - name: Disguise - maxLevel: 1 - - - name: '' - - - name: Appraise - maxLevel: 1 - requires: Identify - - - traits: - - - name: '' - - - name: '' - - - name: DarknessWiden - maxLevel: 1 - requires: Darkness - - - name: ChainKunai - maxLevel: 1 - - - name: '' - - - traits: - - name: '' - - - name: BoomerangArm - maxLevel: 1 - - - name: '' - - name: '' - - name: '' - - Shadowsong: - desc: The Shadowsong tree - - tree: - - traits: - - name: BouncingArrows - maxLevel: 5 - - - name: '' - - - name: DeadlyDirgeSong - maxLevel: 1 - - - name: OffensiveEncore - maxLevel: 5 - - - name: DefensiveVoice - maxLevel: 5 - - - traits: - - name: MultiShot - maxLevel: 1 - - - name: NightmareSerenadeSong - maxLevel: 1 - - - name: DirgeOfCerberus - maxLevel: 5 - requires: DeadlyDirgeSong - - - name: '' - - - name: '' - - - traits: - - name: EndlessQuiver - maxLevel: 5 - - - name: '' - - - name: ShieldingVoice - maxLevel: 5 - - - name: TranquilTrillSong - maxLevel: 1 - - - name: PowerBalladSong - maxLevel: 1 - - - traits: - - name: TripleShot - maxLevel: 1 - - - name: AriaOfRefugeSong - maxLevel: 1 - - - name: WistfulFugueSong - maxLevel: 1 - - - name: SoothingTranquility - maxLevel: 5 - - - name: '' - - - traits: - - name: StrongShots - maxLevel: 5 - - - name: '' - - - name: ReflectingVoice - maxLevel: 5 - - - name: '' - - - name: Shadowsong - maxLevel: 1 - - Rogue: - desc: The Rogue tree - - tree: - - traits: - - name: ImprovedSteal - maxLevel: 1 - - - name: 'TrueSight' - maxLevel: 1 - - - name: GentleStep - maxLevel: 1 - - - name: Set - maxLevel: 1 - - - name: Disarm - maxLevel: 1 - requires: Set - - - traits: - - name: Mug - maxLevel: 1 - requires: ImprovedSteal - - - name: OffhandFinesse - maxLevel: 5 - - - name: LockpickSpecialty - maxLevel: 5 - - - name: ThrownTraps - maxLevel: 1 - requires: Set - - - name: '' - - - traits: - - name: NimbleFingers - maxLevel: 5 - requires: ImprovedSteal - - - name: EagleEye - maxLevel: 1 - - - name: Transmute - maxLevel: 1 - - - name: StrongerTraps - maxLevel: 5 - requires: Set - - - name: '' - - - traits: - - name: '' - - - name: Vortex - maxLevel: 1 - - - name: '' - - - name: WiderTraps - maxLevel: 1 - requires: Set - - - name: '' - - - traits: - - name: '' - - name: '' - - - name: PhilosophersStone - maxLevel: 5 - requires: Transmute - - - name: ReusableTraps - maxLevel: 5 - requires: Set - - - name: '' - - Assassin: - desc: The Assassin tree - - tree: - - traits: - - - name: '' - - - name: Poison - maxLevel: 1 - - - name: Backstab - maxLevel: 1 - - - name: '' - - - name: Apply - maxLevel: 1 - - - traits: - - name: Venom - maxLevel: 1 - - - name: PoisonFocus - maxLevel: 5 - requires: Poison - - - name: BetterBackstab - maxLevel: 5 - requires: Backstab - - - name: ShadowDaggers - maxLevel: 5 - - - name: '' - - - traits: - - name: '' - - - name: CorrosivePoison - maxLevel: 1 - requires: Poison - - - name: '' - - - name: ShadowSheath - maxLevel: 5 - - - name: EnhancedApplications - maxLevel: 5 - requires: Apply - - - traits: - - name: DegenerativeVenom - maxLevel: 1 - requires: Venom - - - name: FindFamiliarShadowClones - maxLevel: 1 - - - name: '' - - - name: '' - - - name: Shadowmeld - maxLevel: 1 - - - traits: - - name: '' - - - name: ShadowSwap - maxLevel: 5 - - - name: '' - - - name: Debilitate - maxLevel: 1 - - - name: '' \ No newline at end of file diff --git a/traitTrees/warrior.yml b/traitTrees/warrior.yml deleted file mode 100644 index 802cd758..00000000 --- a/traitTrees/warrior.yml +++ /dev/null @@ -1,304 +0,0 @@ - -Warrior: - - treeOrder: ['Warrior', 'Paladin', 'Duelist', 'Monk'] - - trees: - Warrior: - desc: The Warrior tree - - tree: - - traits: - - name: Cleave - maxLevel: 1 - - - name: SharpVision - maxLevel: 5 - - - name: SwordTricks - maxLevel: 5 - - - name: FunkyMoves - maxLevel: 5 - - - name: '' - - - traits: - - - name: ConsumingRage - maxLevel: 1 - - - name: '' - - - name: Swashbuckler - maxLevel: 5 - requires: SwordTricks - - - name: '' - - - name: '' - - - traits: - - - name: DeepCuts - maxLevel: 5 - requires: Cleave - - - name: Ragerang - maxLevel: 1 - - - name: '' - - - name: MadDash - maxLevel: 1 - - - name: '' - - - traits: - - name: '' - - name: '' - - - name: TitanGrip - maxLevel: 1 - - - name: '' - - name: '' - - - traits: - - name: MagicalSpecialty - maxLevel: 1 - - - name: StaffSpecialty - maxLevel: 1 - - - name: BowSpecialty - maxLevel: 1 - - - name: ThrowingSpecialty - maxLevel: 1 - - - name: ShortswordSpecialty - maxLevel: 1 - - Paladin: - desc: The Paladin tree - - tree: - - traits: - - name: Provoke - maxLevel: 1 - - - name: '' - - name: '' - - name: '' - - - name: SterlingArmor - maxLevel: 5 - - - traits: - - - name: '' - - - name: HolyProtection - maxLevel: 5 - - - name: SilverSkin - maxLevel: 5 - - - name: '' - - - name: Multistrike - maxLevel: 1 - - - traits: - - name: MockingShout - maxLevel: 1 - requires: Provoke - - - name: '' - - - name: Blindstrike - maxLevel: 1 - - - name: Thruststrike - maxLevel: 1 - - - name: Multitarget - maxLevel: 1 - requires: Multistrike - - - traits: - - - name: ReflectiveCoating - maxLevel: 5 - - - name: Shieldbearer - maxLevel: 1 - - - name: '' - - name: '' - - - name: Multifocus - maxLevel: 5 - requires: Multistrike - - - traits: - - name: MaceSpecialty - maxLevel: 1 - - - name: TwohandedSpecialty - maxLevel: 1 - - - name: PolearmSpecialty - maxLevel: 1 - - - name: DoubleThrust - maxLevel: 1 - requires: Thruststrike - - - name: '' - - Duelist: - desc: The Duelist tree - - tree: - - traits: - - name: RageStance - maxLevel: 1 - - - name: '' - - - name: ForcefulStrike - maxLevel: 5 - - - name: '' - - - name: ParryStance - maxLevel: 1 - - - traits: - - name: '' - - - name: OffhandFinesse - maxLevel: 5 - - - name: '' - - name: '' - - - name: Riposte - maxLevel: 5 - requires: ParryStance - - - traits: - - name: ViciousAssault - maxLevel: 5 - requires: RageStance - - - name: '' - - name: '' - - name: '' - - - name: GlowingWeapon - maxLevel: 5 - requires: ParryStance - - - traits: - - name: '' - - name: '' - - - name: BalancedGrip - maxLevel: 1 - - - name: Boost - maxLevel: 1 - - - name: '' - - - traits: - - name: SwordSpecialty - maxLevel: 1 - - - name: AxeSpecialty - maxLevel: 1 - - - name: DaggerSpecialty - maxLevel: 1 - - - name: BoostedBoost - maxLevel: 1 - requires: Boost - - - name: '' - - Monk: - desc: The Monk tree - - tree: - - traits: - - name: Jumpkick - maxLevel: 1 - - - name: '' - - - name: TurtleStance - maxLevel: 1 - - - name: MartialAcuity - maxLevel: 5 - - - name: TigerStance - maxLevel: 1 - - - traits: - - name: Punchkick - maxLevel: 1 - requires: Jumpkick - - - name: Sweep - maxLevel: 1 - - - name: '' - - - name: UnarmoredSavant - maxLevel: 1 - - - name: Shield - maxLevel: 1 - - - traits: - - name: '' - - - name: StrongSweep - maxLevel: 5 - - - name: BrassKnuckles - maxLevel: 1 - - - name: MartialAgility - maxLevel: 5 - - - name: '' - - - traits: - - name: Rapidpunch - maxLevel: 1 - - - name: '' - - name: '' - - name: '' - - - name: StunningFist - maxLevel: 5 - - - traits: - - name: ImprovedRapidpunch - maxLevel: 5 - - - name: '' - - - name: '' - - - name: '' - - - name: MartialSpecialty - maxLevel: 1 \ No newline at end of file