Module:A: Difference between revisions
From Teriock
More actions
// via Wikitext Extension for VSCode |
// via Wikitext Extension for VSCode |
||
| (250 intermediate revisions by the same user not shown) | |||
| Line 38: | Line 38: | ||
}, | }, | ||
executionTime = { | executionTime = { | ||
'executionTime', | 'executionTime', | ||
'et', | 'et', | ||
| Line 56: | Line 55: | ||
-- 'fr' | -- 'fr' | ||
-- }, | -- }, | ||
flaw = { | |||
'flaw', | |||
'fl', | |||
'f' | |||
}, | |||
special = { | |||
'special', | |||
'sp', | |||
's' | |||
}, | |||
range = { | range = { | ||
'range', | 'range', | ||
| Line 73: | Line 82: | ||
'expansionRange', | 'expansionRange', | ||
'er' | 'er' | ||
}, | |||
expansionCount = { | |||
'expansionCount', | |||
'ec' | |||
}, | |||
expansionAttribute = { | |||
'expansionAttribute', | |||
'ea' | |||
}, | }, | ||
sustained = { | sustained = { | ||
| Line 138: | Line 155: | ||
'magick pointsx', | 'magick pointsx', | ||
'magik pointsx', | 'magik pointsx', | ||
}, | |||
gp = { | |||
'gp', | |||
'gold', | |||
'goldPieces', | |||
'gold pieces', | |||
}, | |||
gpx = { | |||
'gpx', | |||
'goldx', | |||
'goldPiecesx', | |||
'gold piecesx', | |||
}, | }, | ||
matx = { | matx = { | ||
'matx', | 'matx', | ||
'materialx', | 'materialx', | ||
}, | |||
class = { | |||
'class', | |||
}, | }, | ||
}, | }, | ||
| Line 310: | Line 342: | ||
'armor', | 'armor', | ||
'r' | 'r' | ||
}, | |||
ship = { | |||
'ship', | |||
}, | }, | ||
attack = { | attack = { | ||
| Line 315: | Line 350: | ||
'attack', | 'attack', | ||
'a' | 'a' | ||
}, | |||
ability = { | |||
'ab', | |||
'ability' | |||
}, | |||
spell = { | |||
'spl', | |||
'spell', | |||
}, | }, | ||
other = { | other = { | ||
| Line 320: | Line 363: | ||
'other', | 'other', | ||
'o' | 'o' | ||
}, | |||
ci = { | |||
'ci', | |||
'creatureItem', | |||
'itemCreature', | |||
'ic' | |||
}, | |||
ai = { | |||
'ai', | |||
'attackItem', | |||
'itemAttack', | |||
'ia' | |||
}, | |||
area = { | |||
'area', | |||
'ar' | |||
}, | |||
as = { | |||
'areaSpell' | |||
}, | |||
aci = { | |||
'cia', | |||
'iac', | |||
'aci', | |||
'ica', | |||
'cai', | |||
'aic', | |||
'creatureItemArea', | |||
'itemCreatureArea', | |||
'AreaCreatureItem', | |||
'itemAreaCreature', | |||
'creatureAreaItem', | |||
'AreaItemCreature', | |||
}, | |||
ac = { | |||
'ac', | |||
'ca', | |||
'areaCreature', | |||
'creatureArea', | |||
}, | |||
al = { | |||
'al', | |||
'la', | |||
'armLeg', | |||
'legArm', | |||
}, | |||
cs = { | |||
'cs', | |||
'sc', | |||
'creatureSelf', | |||
'selfCreature', | |||
}, | |||
ari = { | |||
'ari', | |||
'areaItem', | |||
'itemArea', | |||
}, | |||
arse = { | |||
'areaSelf' | |||
}, | |||
si = { | |||
'selfItem', | |||
'itemSelf' | |||
} | } | ||
}, | }, | ||
| Line 330: | Line 436: | ||
}, | }, | ||
always = { | always = { | ||
'always', | 'always', | ||
' | 'forever', | ||
'4', | |||
'inf', | |||
}, | |||
noLimit = { | |||
'noLimit', | |||
'1', | |||
'nl', | |||
}, | }, | ||
whileUp = { | whileUp = { | ||
| Line 387: | Line 499: | ||
}, | }, | ||
timeParse = { | timeParse = { | ||
'^%d+[ | '^%d+[mhdwys]$' | ||
} | } | ||
}, | }, | ||
| Line 536: | Line 648: | ||
'SNK', | 'SNK', | ||
's' | 's' | ||
} | }, | ||
unp = { | |||
'unp', | |||
'UNP', | |||
'u' | |||
}, | |||
}, | |||
expansionAttribute = { | |||
int = { | |||
'int', | |||
'INT', | |||
'i' | |||
}, | |||
str = { | |||
'str', | |||
'STR', | |||
's' | |||
}, | |||
mov = { | |||
'mov', | |||
'MOV', | |||
'm' | |||
}, | |||
per = { | |||
'per', | |||
'PER', | |||
'p' | |||
}, | |||
snk = { | |||
'snk', | |||
'SNK', | |||
's' | |||
}, | |||
unp = { | |||
'unp', | |||
'UNP', | |||
'u' | |||
}, | |||
}, | }, | ||
expansion = { | expansion = { | ||
| Line 563: | Line 712: | ||
distParse = { | distParse = { | ||
'^%d+[fm]$' | '^%d+[fm]$' | ||
} | |||
}, | |||
expansionCount = { | |||
expansionCount = { | |||
'expansionCount', | |||
'ec', | |||
} | } | ||
}, | }, | ||
| Line 612: | Line 767: | ||
'1', | '1', | ||
} | } | ||
}, | |||
class = { | |||
ber = { | |||
'ber', | |||
}, | |||
due = { | |||
'due', | |||
}, | |||
vet = { | |||
'vet', | |||
}, | |||
kni = { | |||
'kni', | |||
}, | |||
pal = { | |||
'pal', | |||
}, | |||
ass = { | |||
'ass', | |||
}, | |||
cor = { | |||
'cor', | |||
}, | |||
arc = { | |||
'arc', | |||
}, | |||
thi = { | |||
'thi', | |||
}, | |||
ran = { | |||
'ran', | |||
}, | |||
fla = { | |||
'fla', | |||
}, | |||
sto = { | |||
'sto', | |||
}, | |||
lif = { | |||
'lif', | |||
}, | |||
nec = { | |||
'nec', | |||
}, | |||
nat = { | |||
'nat', | |||
}, | |||
} | } | ||
} | } | ||
| Line 622: | Line 824: | ||
link = 'Verbal component abilities', | link = 'Verbal component abilities', | ||
symbol = '🗣️', | symbol = '🗣️', | ||
color = '#f9f06b' | color = '#f9f06b', | ||
class = 'component-tagged verbal' | |||
}, | }, | ||
}, | }, | ||
| Line 630: | Line 833: | ||
link = 'Somatic component abilities', | link = 'Somatic component abilities', | ||
symbol = '👐', | symbol = '👐', | ||
color = '#f9f06b' | color = '#f9f06b', | ||
class = 'component-tagged somatic' | |||
}, | }, | ||
}, | }, | ||
| Line 637: | Line 841: | ||
text = 'Material', | text = 'Material', | ||
link = 'Material component abilities', | link = 'Material component abilities', | ||
symbol = ' | symbol = '💎', | ||
color = '#ff7800' | color = '#ff7800', | ||
class = 'component-tagged material' | |||
}, | }, | ||
}, | }, | ||
| Line 646: | Line 851: | ||
link = 'Magelore component abilities', | link = 'Magelore component abilities', | ||
symbol = '🔮', | symbol = '🔮', | ||
color = '#f9f06b' | color = '#f9f06b', | ||
class = 'component-tagged magelore' | |||
}, | }, | ||
}, | }, | ||
| Line 652: | Line 858: | ||
invoked = { | invoked = { | ||
text = 'Invoked', | text = 'Invoked', | ||
link = 'Invoked | link = 'Invoked abilities', | ||
symbol = '🪄', | symbol = '🪄', | ||
color = '#f9f06b' | color = '#f9f06b', | ||
class = 'component-tagged invoked' | |||
}, | |||
}, | |||
flaw = { | |||
flaw = { | |||
text = 'Flaw', | |||
link = 'Flaw abilities', | |||
symbol = '❌', | |||
color = '#e01b24', | |||
class = 'flaw-tagged flaw' | |||
}, | |||
}, | |||
special = { | |||
special = { | |||
text = 'Special', | |||
link = 'Special abilities', | |||
symbol = '✴️', | |||
color = '#9141AC', | |||
class = 'special-tagged special' | |||
}, | |||
}, | |||
es = { | |||
es = { | |||
text = 'Elder Sorcery', | |||
link = 'Elder Sorcery abilities', | |||
symbol = '🌌', | |||
color = '#9141AC', | |||
class = 'elderSorcery-tagged elderSorcery' | |||
}, | |||
}, | |||
warded = { | |||
warded = { | |||
text = 'Warded', | |||
link = 'Warded abilities', | |||
symbol = '🏮', | |||
color = '#f9f06b', | |||
class = 'warded-tagged warded' | |||
}, | }, | ||
}, | }, | ||
| Line 662: | Line 905: | ||
link = 'Life element abilities', | link = 'Life element abilities', | ||
symbol = '☀️', | symbol = '☀️', | ||
color = '#ffffff' | color = '#ffffff', | ||
class = 'element-tagged life' | |||
}, | }, | ||
storm = { | storm = { | ||
| Line 668: | Line 912: | ||
link = 'Storm element abilities', | link = 'Storm element abilities', | ||
symbol = '💧', | symbol = '💧', | ||
color = '#3584e4' | color = '#3584e4', | ||
class = 'element-tagged storm' | |||
}, | }, | ||
necromancy = { | |||
text = ' | text = 'Necromancy', | ||
link = 'Necromancy element abilities', | link = 'Necromancy element abilities', | ||
symbol = '💀', | symbol = '💀', | ||
color = '#3d3846' | color = '#3d3846', | ||
class = 'element-tagged necromancy' | |||
}, | |||
necro = { | |||
text = 'Necromancy', | |||
link = 'Necromancy element abilities', | |||
symbol = '💀', | |||
color = '#3d3846', | |||
class = 'element-tagged necromancy' | |||
}, | }, | ||
flame = { | flame = { | ||
| Line 680: | Line 933: | ||
link = 'Flame element abilities', | link = 'Flame element abilities', | ||
symbol = '🔥', | symbol = '🔥', | ||
color = '#e01b24' | color = '#e01b24', | ||
class = 'element-tagged flame' | |||
}, | }, | ||
nature = { | nature = { | ||
| Line 686: | Line 940: | ||
link = 'Nature element abilities', | link = 'Nature element abilities', | ||
symbol = '🌱', | symbol = '🌱', | ||
color = '#33d17a' | color = '#33d17a', | ||
class = 'element-tagged nature' | |||
}, | |||
}, | |||
class = { | |||
ber = { | |||
text = 'Berserker', | |||
link = 'Berserker class abilities', | |||
symbol = '🪓', | |||
class = 'class-tagged berserker' | |||
}, | |||
due = { | |||
text = 'Duelist', | |||
link = 'Duelist class abilities', | |||
symbol = '🤺', | |||
class = 'class-tagged duelist' | |||
}, | |||
vet = { | |||
text = 'Veteran', | |||
link = 'Veteran class abilities', | |||
symbol = '🪖', | |||
class = 'class-tagged veteran' | |||
}, | |||
kni = { | |||
text = 'Knight', | |||
link = 'Knight class abilities', | |||
symbol = '⚔️', | |||
class = 'class-tagged knight' | |||
}, | |||
pal = { | |||
text = 'Paladin', | |||
link = 'Paladin class abilities', | |||
symbol = '🛡️', | |||
class = 'class-tagged paladin' | |||
}, | |||
ass = { | |||
text = 'Assassin', | |||
link = 'Assassin class abilities', | |||
symbol = '🗡️', | |||
class = 'class-tagged assassin' | |||
}, | |||
cor = { | |||
text = 'Corsair', | |||
link = 'Corsair class abilities', | |||
symbol = '🏴☠️', | |||
class = 'class-tagged corsair' | |||
}, | |||
arc = { | |||
text = 'Archer', | |||
link = 'Archer class abilities', | |||
symbol = '🏹', | |||
class = 'class-tagged archer' | |||
}, | |||
thi = { | |||
text = 'Thief', | |||
link = 'Thief class abilities', | |||
symbol = '💰️', | |||
class = 'class-tagged thief' | |||
}, | |||
ran = { | |||
text = 'Ranger', | |||
link = 'Ranger class abilities', | |||
symbol = '🐾', | |||
class = 'class-tagged ranger' | |||
}, | |||
fla = { | |||
text = 'Flame Mage', | |||
link = 'Flame Mage class abilities', | |||
symbol = '🧙', | |||
class = 'class-tagged flameMage' | |||
}, | |||
sto = { | |||
text = 'Storm Mage', | |||
link = 'Storm Mage class abilities', | |||
symbol = '🧙', | |||
class = 'class-tagged stormMage' | |||
}, | |||
lif = { | |||
text = 'Life Mage', | |||
link = 'Life Mage class abilities', | |||
symbol = '🧙', | |||
class = 'class-tagged lifeMage' | |||
}, | |||
nec = { | |||
text = 'Necromancer', | |||
link = 'Necromancer class abilities', | |||
symbol = '🧙', | |||
class = 'class-tagged necromancer' | |||
}, | |||
nat = { | |||
text = 'Nature Mage', | |||
link = 'Nature Mage class abilities', | |||
symbol = '🧙', | |||
class = 'class-tagged natureMage' | |||
}, | }, | ||
}, | |||
gm = { | |||
warr = { | |||
text = 'Warrior', | |||
link = 'Warrior guildmaster abilities', | |||
symbol = '⚔️', | |||
class = 'archetype-tagged warrior' | |||
}, | |||
semi = { | |||
text = 'Semi', | |||
link = 'Semi guildmaster abilities', | |||
symbol = '🤹', | |||
class = 'archetype-tagged semi' | |||
} | |||
}, | }, | ||
power = { | power = { | ||
| Line 694: | Line 1,055: | ||
link = 'Divinely powered abilities', | link = 'Divinely powered abilities', | ||
symbol = '🪽', | symbol = '🪽', | ||
color = '#f9f06b' | color = '#f9f06b', | ||
class = 'power-tagged divine' | |||
}, | }, | ||
magic = { | magic = { | ||
| Line 700: | Line 1,062: | ||
link = 'Magically powered abilities', | link = 'Magically powered abilities', | ||
symbol = '✨', | symbol = '✨', | ||
color = '#9141ac' | color = '#9141ac', | ||
class = 'power-tagged magical' | |||
}, | }, | ||
spirit = { | spirit = { | ||
text = ' | text = 'Spiritual', | ||
link = 'Spiritually powered abilities', | link = 'Spiritually powered abilities', | ||
symbol = '🪭', | symbol = '🪭', | ||
color = '#9a9996' | color = '#9a9996', | ||
class = 'power-tagged spiritual' | |||
}, | }, | ||
martial = { | martial = { | ||
| Line 712: | Line 1,076: | ||
link = 'Martially powered abilities', | link = 'Martially powered abilities', | ||
symbol = '💪', | symbol = '💪', | ||
color = '#ff7800' | color = '#ff7800', | ||
class = 'power-tagged martial' | |||
}, | }, | ||
psionic = { | psionic = { | ||
| Line 718: | Line 1,083: | ||
link = 'Psionically powered abilities', | link = 'Psionically powered abilities', | ||
symbol = '🤯', | symbol = '🤯', | ||
color = '#3584e4' | color = '#3584e4', | ||
class = 'power-tagged psionic' | |||
}, | }, | ||
primal = { | primal = { | ||
| Line 724: | Line 1,090: | ||
link = 'Primally powered abilities', | link = 'Primally powered abilities', | ||
symbol = '⛰️', | symbol = '⛰️', | ||
color = '#986a44' | color = '#986a44', | ||
class = 'power-tagged primal' | |||
}, | }, | ||
techno = { | |||
text = ' | text = 'Technological', | ||
link = 'Technologically powered abilities', | link = 'Technologically powered abilities', | ||
symbol = '⚙️', | symbol = '⚙️', | ||
color = '#e01b24' | color = '#e01b24', | ||
class = 'power-tagged technological' | |||
}, | |||
finance = { | |||
text = 'Financial', | |||
link = 'Financially powered abilities', | |||
symbol = '🪙', | |||
color = '#fcc200', | |||
class = 'power-tagged financial' | |||
}, | |||
alchemy = { | |||
text = 'Alchemical', | |||
link = 'Alchemically powered abilities', | |||
symbol = '🧪', | |||
color = '#33d17a', | |||
class = 'power-tagged alchemical' | |||
}, | |||
unknown = { | |||
text = 'Unknown', | |||
link = 'Unknown powered abilities', | |||
symbol = '❓', | |||
color = '#77767b', | |||
class = 'power-tagged unknown' | |||
}, | }, | ||
}, | }, | ||
| Line 737: | Line 1,126: | ||
text = 'Skill', | text = 'Skill', | ||
link = 'Skills', | link = 'Skills', | ||
symbol = '🤹' | symbol = '🤹', | ||
class = 'skill' | |||
}, | }, | ||
spell = { | spell = { | ||
text = 'Spell', | text = 'Spell', | ||
link = 'Spells', | link = 'Spells', | ||
symbol = '✨' | symbol = '✨', | ||
class = 'spell' | |||
}, | }, | ||
semblant = { | semblant = { | ||
text = 'Semblant', | text = 'Semblant', | ||
link = 'Semblant skills', | link = 'Semblant skills', | ||
symbol = '🎭' | symbol = '🎭', | ||
class = 'standard-tagged semblant' | |||
}, | }, | ||
conjure = { | conjure = { | ||
text = ' | text = 'Conjured', | ||
link = 'Conjured spells', | link = 'Conjured spells', | ||
symbol = '🔮' | symbol = '🔮', | ||
class = 'standard-tagged conjure' | |||
}, | }, | ||
standard = { | standard = { | ||
text = 'Standard', | text = 'Standard', | ||
link = 'Standard abilities', | link = 'Standard abilities', | ||
symbol = '🏁' | symbol = '🏁', | ||
class = 'standard-tagged normal' | |||
}, | |||
rotator = { | |||
text = 'Rotator', | |||
link = 'Rotator abilities', | |||
symbol = '🔄', | |||
class = 'rotator' | |||
}, | }, | ||
guildmaster = { | |||
text = 'Guildmaster', | |||
link = 'Guildmaster abilities', | |||
symbol = '🏅', | |||
class = 'guildmaster' | |||
} | |||
}, | }, | ||
effects = { | effects = { | ||
| Line 764: | Line 1,170: | ||
text = 'Mental', | text = 'Mental', | ||
link = 'Mental effects', | link = 'Mental effects', | ||
symbol = '🧠' | symbol = '🧠', | ||
class = 'effect-tagged mental' | |||
}, | }, | ||
truth = { | truth = { | ||
text = 'Truth', | text = 'Truth detecting', | ||
link = 'Truth detecting effects', | link = 'Truth detecting effects', | ||
symbol = '⚖️' | symbol = '⚖️', | ||
class = 'effect-tagged truthDetecting' | |||
}, | }, | ||
duelModifying = { | |||
text = 'Duel', | text = 'Duel modifying', | ||
link = 'Duel modifying effects', | link = 'Duel modifying effects', | ||
symbol = '🤺' | symbol = '🤺', | ||
class = 'effect-tagged duelModifying' | |||
}, | }, | ||
movement = { | movement = { | ||
text = 'Movement', | text = 'Movement', | ||
link = 'Movement effects', | link = 'Movement effects', | ||
symbol = '👣' | symbol = '👣', | ||
class = 'effect-tagged movement' | |||
}, | |||
poison = { | |||
text = 'Poison', | |||
link = 'Poison effects', | |||
symbol = '☠️', | |||
class = 'effect-tagged poison' | |||
}, | }, | ||
displacement = { | displacement = { | ||
text = 'Displacement', | text = 'Displacement', | ||
link = 'Displacement effects', | link = 'Displacement effects', | ||
symbol = '🌀' | symbol = '🌀', | ||
class = 'effect-tagged displacement' | |||
}, | }, | ||
transformation = { | transformation = { | ||
text = 'Transformation', | text = 'Transformation', | ||
link = 'Transformation effects', | link = 'Transformation effects', | ||
symbol = '🌳' | symbol = '🌳', | ||
class = 'effect-tagged transformation' | |||
}, | |||
illusion = { | |||
text = 'Illusion', | |||
link = 'Illusion effects', | |||
symbol = '', | |||
class = 'effect-tagged illusion' | |||
}, | }, | ||
control = { | control = { | ||
text = 'Control', | text = 'Control', | ||
link = 'Control effects', | link = 'Control effects', | ||
symbol = '⛓️' | symbol = '⛓️', | ||
class = 'effect-tagged control' | |||
}, | }, | ||
resist = { | resist = { | ||
text = 'Resistance', | text = 'Resistance', | ||
link = 'Resistance effects', | link = 'Resistance effects', | ||
symbol = '🚫' | symbol = '🚫', | ||
class = 'effect-tagged resistance' | |||
}, | |||
hexproof = { | |||
text = 'Hexproof', | |||
link = 'Hexproof effects', | |||
symbol = '🚫', | |||
class = 'effect-tagged hexproof' | |||
}, | |||
awaken = { | |||
text = 'Awakening', | |||
link = 'Awakening effects', | |||
symbol = '🌞', | |||
class = 'effect-tagged awakening' | |||
}, | }, | ||
immune = { | immune = { | ||
text = 'Immunity', | text = 'Immunity', | ||
link = 'Immunity effects', | link = 'Immunity effects', | ||
symbol = '🚫' | symbol = '🚫', | ||
class = 'effect-tagged immunity' | |||
}, | |||
hexseal = { | |||
text = 'Hexseal', | |||
link = 'Hexseal effects', | |||
symbol = '🚫', | |||
class = 'effect-tagged hexseal' | |||
}, | }, | ||
long = { | long = { | ||
text = 'Long range', | text = 'Long range', | ||
link = 'Long range effects', | link = 'Long range effects', | ||
symbol = '📏' | symbol = '📏', | ||
class = 'effect-tagged longRange' | |||
}, | }, | ||
sense = { | sense = { | ||
text = 'Sensory', | text = 'Sensory', | ||
link = 'Sensory effects', | link = 'Sensory effects', | ||
symbol = '👁️' | symbol = '👁️', | ||
class = 'effect-tagged sensory' | |||
}, | }, | ||
revive = { | revive = { | ||
text = 'Revival', | text = 'Revival', | ||
link = 'Revival effects', | link = 'Revival effects', | ||
symbol = '🤍' | symbol = '🤍', | ||
class = 'effect-tagged revival' | |||
}, | }, | ||
summon = { | summon = { | ||
text = 'Summoning', | text = 'Summoning', | ||
link = 'Summoning effects', | link = 'Summoning effects', | ||
symbol = '🖤' | symbol = '🖤', | ||
class = 'effect-tagged summoning' | |||
}, | }, | ||
heal = { | heal = { | ||
text = 'Healing', | text = 'Healing', | ||
link = 'Healing effects', | link = 'Healing effects', | ||
symbol = '❤️' | symbol = '❤️', | ||
class = 'effect-tagged healing' | |||
}, | |||
reanimate = { | |||
text = 'Reanimation', | |||
text = ' | link = 'Reanimation effects', | ||
link = ' | symbol = '🩶', | ||
symbol = ' | class = 'effect-tagged reanimation' | ||
}, | }, | ||
regenerate = { | |||
text = ' | text = 'Regeneration', | ||
link = ' | link = 'Regeneration effects', | ||
symbol = ' | symbol = '💚', | ||
class = 'effect-tagged regeneration' | |||
}, | }, | ||
revitalize = { | |||
text = ' | text = 'Revitalization', | ||
link = ' | link = 'Revitalization effects', | ||
symbol = ' | symbol = '🩵', | ||
class = 'effect-tagged revitalization' | |||
}, | }, | ||
kill = { | |||
text = ' | text = 'Killing', | ||
link = ' | link = 'Killing effects', | ||
symbol = ' | symbol = '☠️', | ||
class = 'effect-tagged killing' | |||
}, | }, | ||
damage = { | |||
text = ' | text = 'Damaging', | ||
link = ' | link = 'Damaging effects', | ||
symbol = ' | symbol = '💢', | ||
class = 'effect-tagged damaging' | |||
}, | |||
drain = { | |||
text = 'Draining', | |||
link = 'Draining effects', | |||
symbol = '🩸', | |||
class = 'effect-tagged draining' | |||
}, | |||
destroy = { | |||
text = 'Destruction', | |||
link = 'Destruction effects', | |||
symbol = '💥', | |||
class = 'effect-tagged destruction' | |||
}, | }, | ||
contract = { | |||
text = ' | text = 'Contract', | ||
link = ' | link = 'Contract effects', | ||
symbol = ' | symbol = '🤝', | ||
class = 'effect-tagged contract' | |||
}, | }, | ||
steal = { | |||
text = 'Stealing', | |||
link = 'Stealing effects', | |||
text = ' | symbol = '💰', | ||
link = ' | class = 'effect-tagged stealing' | ||
symbol = ' | |||
}, | }, | ||
loud = { | |||
text = ' | text = 'Loud', | ||
link = ' | link = 'Loud effects', | ||
symbol = ' | symbol = '🔊', | ||
class = 'effect-tagged loud' | |||
}, | }, | ||
knockout = { | |||
text = ' | text = 'Knockout', | ||
link = ' | link = 'Knockout effects', | ||
symbol = ' | symbol = '💤', | ||
class = 'effect-tagged knockout' | |||
}, | }, | ||
time = { | |||
text = ' | text = 'Temporal', | ||
link = ' | link = 'Temporal effects', | ||
symbol = ' | symbol = '🕰️', | ||
class = 'effect-tagged temporal' | |||
}, | }, | ||
auto = { | |||
text = 'Automatic', | |||
link = 'Automatic effects', | |||
text = ' | symbol = '❗️', | ||
link = ' | class = 'effect-tagged automatic' | ||
symbol = ' | |||
}, | }, | ||
lightning = { | |||
text = ' | text = 'Lightning', | ||
link = ' | link = 'Lightning effects', | ||
symbol = ' | symbol = '⚡️', | ||
class = 'effect-tagged lightning' | |||
}, | |||
disease = { | |||
text = 'Disease', | |||
link = 'Disease effects', | |||
symbol = '🦠', | |||
class = 'effect-tagged disease' | |||
}, | |||
vision = { | |||
text = 'Vision', | |||
link = 'Vision effects', | |||
symbol = '🥠', | |||
class = 'effect-tagged vision' | |||
}, | |||
morganti = { | |||
text = 'Morganti', | |||
link = 'Morganti effects', | |||
symbol = '⚫️', | |||
class = 'effect-tagged morganti' | |||
}, | }, | ||
construction = { | |||
text = ' | text = 'Construction', | ||
link = ' | link = 'Construction effects', | ||
symbol = ' | symbol = '🔧', | ||
class = 'effect-tagged construction' | |||
}, | }, | ||
weather = { | |||
text = ' | text = 'Weather', | ||
link = ' | link = 'Weather effects', | ||
symbol = ' | symbol = '🌧️', | ||
class = 'effect-tagged weather' | |||
} | } | ||
}, | }, | ||
pre = { | |||
strike = { | |||
text = ' | text = 'Strike', | ||
link = ' | link = 'Strike delivery abilities', | ||
symbol = ' | symbol = '⚔️', | ||
class = 'deliveryPackage-tagged strike' | |||
}, | }, | ||
ray = { | |||
text = ' | text = 'Ray', | ||
link = ' | link = 'Ray delivery abilities', | ||
symbol = ' | symbol = '⚡️', | ||
class = 'deliveryPackage-tagged ray' | |||
}, | }, | ||
ball = { | |||
text = ' | text = 'Ball', | ||
link = ' | link = 'Ball delivery abilities', | ||
symbol = ' | symbol = '🔥', | ||
class = 'deliveryPackage-tagged ball' | |||
}, | }, | ||
aura = { | |||
text = ' | text = 'Aura', | ||
link = ' | link = 'Aura delivery abilities', | ||
symbol = ' | symbol = '🌟', | ||
class = 'deliveryPackage-tagged aura' | |||
}, | }, | ||
ritual = { | |||
text = ' | text = 'Ritual', | ||
link = ' | link = 'Ritual delivery abilities', | ||
symbol = ' | symbol = '🕯️', | ||
class = 'deliveryPackage-tagged ritual' | |||
}, | }, | ||
touch = { | |||
text = ' | text = 'Touch', | ||
link = ' | link = 'Touch delivery abilities', | ||
symbol = ' | symbol = '👉️', | ||
class = 'deliveryPackage-tagged touch' | |||
}, | }, | ||
}, | |||
text = ' | maneuver = { | ||
link = ' | active = { | ||
symbol = ' | text = 'Active', | ||
link = 'Active abilities', | |||
symbol = '➡️', | |||
class = 'maneuver-tagged active' | |||
}, | }, | ||
reactive = { | |||
text = ' | text = 'Reactive', | ||
link = ' | link = 'Reactive abilities', | ||
symbol = ' | symbol = '↩️', | ||
class = 'maneuver-tagged reactive' | |||
}, | }, | ||
passive = { | |||
text = ' | text = 'Passive', | ||
link = ' | link = 'Passive abilities', | ||
symbol = ' | symbol = '🔁', | ||
class = 'maneuver-tagged passive' | |||
}, | }, | ||
slow = { | |||
text = ' | text = 'Slow', | ||
link = ' | link = 'Slow abilities', | ||
symbol = ' | symbol = '🐢', | ||
class = 'maneuver-tagged slow' | |||
}, | }, | ||
}, | |||
text = ' | interaction = { | ||
link = ' | attack = { | ||
symbol = ' | text = 'Attack', | ||
color = '# | link = 'Attack abilities', | ||
symbol = '⚔️', | |||
color = '#ff7800', | |||
class = 'interaction-tagged attack' | |||
}, | }, | ||
block = { | |||
text = ' | text = 'Block', | ||
link = ' | link = 'Block abilities', | ||
symbol = ' | symbol = '🛡️', | ||
color = '# | color = '#ff7800', | ||
class = 'interaction-tagged block' | |||
}, | }, | ||
manifest = { | |||
text = ' | text = 'Manifest', | ||
link = ' | link = 'Manifest abilities', | ||
symbol = ' | symbol = '✳️', | ||
color = '# | color = '#ff7800', | ||
} | class = 'interaction-tagged manifest' | ||
}, | }, | ||
feat = { | |||
text = 'Feat', | |||
link = 'Feat abilities', | |||
symbol = '🎖️', | |||
color = '#ff7800', | |||
class = 'interaction-tagged feat' | |||
} | |||
}, | |||
delivery = { | |||
self = { | self = { | ||
text = 'Self', | text = 'Self', | ||
link = 'Self | link = 'Self delivery abilities', | ||
symbol = '🤲', | symbol = '🤲', | ||
color = '#f6d32d' | color = '#f6d32d', | ||
class = 'delivery-tagged self' | |||
}, | }, | ||
missile = { | |||
text = ' | text = 'Missile', | ||
link = ' | link = 'Missile delivery abilities', | ||
symbol = ' | symbol = '🏹', | ||
color = '#f6d32d' | color = '#f6d32d', | ||
class = 'delivery-tagged missile' | |||
}, | }, | ||
hand = { | |||
text = ' | text = 'Hand', | ||
link = ' | link = 'Hand delivery abilities', | ||
symbol = ' | symbol = '🤚', | ||
color = '#f6d32d' | color = '#f6d32d', | ||
class = 'delivery-tagged hand' | |||
}, | }, | ||
bite = { | |||
text = ' | text = 'Bite', | ||
link = ' | link = 'Bite delivery abilities', | ||
symbol = ' | symbol = '🦷', | ||
color = '#f6d32d | color = '#f6d32d', | ||
class = 'delivery-tagged bite' | |||
}, | }, | ||
item = { | item = { | ||
text = 'Item', | text = 'Item', | ||
link = 'Item | link = 'Item delivery abilities', | ||
symbol = '📦', | symbol = '📦', | ||
color = '#f6d32d' | color = '#f6d32d', | ||
class = 'delivery-tagged item' | |||
}, | |||
magelore = { | |||
text = 'Magelore', | |||
link = 'Magelore delivery abilities', | |||
symbol = '🔮', | |||
color = '#f6d32d', | |||
class = 'delivery-tagged magelore' | |||
}, | }, | ||
weapon = { | weapon = { | ||
text = 'Weapon', | text = 'Weapon', | ||
link = 'Weapon | link = 'Weapon delivery abilities', | ||
symbol = '🗡️', | symbol = '🗡️', | ||
color = '#f6d32d' | color = '#f6d32d', | ||
class = 'delivery-tagged weapon' | |||
}, | }, | ||
shield = { | shield = { | ||
text = 'Shield', | text = 'Shield', | ||
link = 'Shield | link = 'Shield delivery abilities', | ||
symbol = '🛡️', | symbol = '🛡️', | ||
color = '#f6d32d' | color = '#f6d32d', | ||
class = 'delivery-tagged shield' | |||
}, | }, | ||
armor = { | armor = { | ||
text = 'Armor', | text = 'Armor', | ||
link = 'Armor | link = 'Armor delivery abilities', | ||
symbol = '🪖', | symbol = '🪖', | ||
color = '#f6d32d' | color = '#f6d32d', | ||
class = 'delivery-tagged armor' | |||
}, | }, | ||
sight = { | |||
text = ' | text = 'Sight', | ||
link = ' | link = 'Sight delivery abilities', | ||
symbol = ' | symbol = '👁️', | ||
color = '#f6d32d' | color = '#f6d32d', | ||
class = 'delivery-tagged sight' | |||
}, | |||
aura = { | |||
text = 'Aura', | |||
link = 'Aura delivery abilities', | |||
symbol = '🌟', | |||
color = '#f6d32d', | |||
class = 'delivery-tagged aura' | |||
}, | |||
cone = { | |||
text = 'Cone', | |||
link = 'Cone delivery abilities', | |||
symbol = '🐲', | |||
color = '#f6d32d', | |||
class = 'delivery-tagged cone' | |||
}, | }, | ||
other = { | other = { | ||
text = 'Other', | text = 'Other', | ||
link = 'Other | link = 'Other delivery abilities', | ||
symbol = '❓', | symbol = '❓', | ||
color = '#f6d32d' | color = '#f6d32d', | ||
class = 'delivery-tagged other' | |||
} | } | ||
}, | }, | ||
target = { | |||
self = { | |||
text = ' | text = 'Self', | ||
link = ' | link = 'Self target abilities', | ||
symbol = '🤲', | |||
color = '#f6d32d', | |||
class = 'target-tagged self' | |||
}, | }, | ||
creature = { | |||
text = ' | text = 'Creature', | ||
link = ' | link = 'Creature target abilities', | ||
symbol = '👤', | |||
color = '#f6d32d', | |||
class = 'target-tagged creature' | |||
}, | }, | ||
body = { | |||
text = ' | text = 'Body', | ||
symbol = ' | link = 'Body target abilities', | ||
symbol = '🧍', | |||
color = '#f6d32d', | |||
class = 'target-tagged body' | |||
}, | }, | ||
vitals = { | |||
text = ' | text = 'Vitals', | ||
symbol = ' | link = 'Vitals target abilities', | ||
symbol = '🫀', | |||
color = '#f6d32d', | |||
class = 'target-tagged vitals' | |||
}, | }, | ||
limb = { | |||
text = ' | text = 'Limb', | ||
symbol = ' | link = 'Limb target abilities', | ||
symbol = '🦾', | |||
color = '#f6d32d', | |||
class = 'target-tagged limb' | |||
}, | }, | ||
arm = { | |||
text = ' | text = 'Arm', | ||
symbol = ' | link = 'Arm target abilities', | ||
symbol = '💪', | |||
color = '#f6d32d', | |||
class = 'target-tagged arm' | |||
}, | }, | ||
leg = { | |||
text = ' | text = 'Leg', | ||
symbol = ' | link = 'Leg target abilities', | ||
symbol = '🦵', | |||
color = '#f6d32d', | |||
class = 'target-tagged leg' | |||
}, | }, | ||
item = { | |||
text = ' | text = 'Item', | ||
symbol = ' | link = 'Item target abilities', | ||
link = ' | symbol = '📦', | ||
color = '#f6d32d', | |||
class = 'target-tagged item' | |||
}, | |||
weapon = { | |||
text = 'Weapon', | |||
link = 'Weapon target abilities', | |||
symbol = '🗡️', | |||
color = '#f6d32d', | |||
class = 'target-tagged weapon' | |||
}, | }, | ||
shield = { | |||
text = ' | text = 'Shield', | ||
link = 'Shield target abilities', | |||
link = ' | symbol = '🛡️', | ||
color = '#f6d32d', | |||
class = 'target-tagged shield' | |||
symbol = ' | |||
}, | }, | ||
armor = { | |||
text = ' | text = 'Armor', | ||
link = 'Armor target abilities', | |||
symbol = '🪖', | |||
color = '# | color = '#f6d32d', | ||
class = 'target-tagged armor' | |||
}, | }, | ||
ship = { | |||
text = ' | text = 'Ship', | ||
link = ' | link = 'Ship target abilities', | ||
symbol = '⛵️', | |||
color = '#f6d32d', | |||
class = 'target-tagged ship' | |||
}, | }, | ||
attack = { | |||
text = ' | text = 'Attack', | ||
link = ' | link = 'Attack target abilities', | ||
symbol = '⚔️', | |||
color = '#f6d32d', | |||
class = 'target-tagged attack' | |||
}, | }, | ||
ability = { | |||
text = 'Ability', | |||
link = 'Ability target abilities', | |||
symbol = '🅰', | |||
color = '#f6d32d', | |||
class = 'target-tagged ability' | |||
}, | }, | ||
spell = { | |||
text = ' | text = 'Spell', | ||
link = ' | link = 'Spell target abilities', | ||
symbol = '💫', | |||
color = '#f6d32d', | |||
class = 'target-tagged spell' | |||
}, | }, | ||
other = { | |||
text = ' | text = 'Other', | ||
link = ' | link = 'Other target abilities', | ||
symbol = '❓', | |||
color = '#f6d32d', | |||
class = 'target-tagged other' | |||
}, | |||
area = { | |||
text = 'Area', | |||
link = 'Area target abilities', | |||
symbol = '🏕️', | |||
color = '#f6d32d', | |||
class = 'target-tagged area' | |||
}, | }, | ||
ci = { | |||
tags = { | |||
'creature', | |||
'item' | |||
} | |||
}, | }, | ||
ai = { | |||
tags = { | |||
'attack', | |||
'item' | |||
} | |||
}, | }, | ||
ari = { | |||
tags = { | |||
'area', | |||
'item' | |||
} | |||
}, | }, | ||
as = { | |||
tags = { | |||
'area', | |||
'spell', | |||
} | |||
}, | }, | ||
arse = { | |||
tags = { | |||
'area', | |||
'self', | |||
} | |||
}, | }, | ||
si = { | |||
tags = { | |||
'item', | |||
'self' | |||
} | |||
}, | }, | ||
aci = { | |||
tags = { | |||
'area', | |||
'creature', | |||
'item', | |||
} | |||
}, | }, | ||
ac = { | |||
tags = { | |||
'area', | |||
'creature', | |||
} | |||
}, | }, | ||
al = { | |||
tags = { | |||
'arm', | |||
'leg', | |||
} | |||
}, | }, | ||
cs = { | |||
tags = { | |||
'creature', | |||
'self', | |||
} | |||
}, | }, | ||
}, | |||
text = ' | upgrade = { | ||
warded = { | |||
text = 'Warded', | |||
link = 'Warded abilities', | |||
class = 'upgrade-tagged warded' | |||
}, | }, | ||
absolute = { | |||
text = ' | text = 'Absolute', | ||
- | link = 'Absolute abilities', | ||
class = 'upgrade-tagged absolute' | |||
} | |||
}, | |||
executionTime = { | |||
freeAction = { | |||
text = 'Free action', | |||
symbol = '0️⃣', | |||
link = 'Free action abilities', | |||
class = 'executionTime-tagged a0' | |||
}, | }, | ||
singleAction = { | |||
text = ' | text = 'Single action', | ||
symbol = '1️⃣', | |||
link = 'Single action abilities', | |||
class = 'executionTime-tagged a1' | |||
}, | }, | ||
doubleAction = { | |||
text = 'Double action', | |||
symbol = '2️⃣', | |||
text = ' | link = 'Double action abilities', | ||
symbol = ' | class = 'executionTime-tagged a2' | ||
link = ' | |||
}, | }, | ||
tripleAction = { | |||
text = ' | text = 'Triple action', | ||
symbol = ' | symbol = '3️⃣', | ||
link = ' | link = 'Triple action abilities', | ||
class = 'executionTime-tagged a3' | |||
}, | }, | ||
freeReaction = { | |||
text = ' | text = 'Free reaction', | ||
symbol = ' | symbol = '0️⃣', | ||
link = ' | link = 'Free reaction abilities', | ||
class = 'executionTime-tagged r0' | |||
}, | |||
reaction = { | |||
text = 'Reaction', | |||
symbol = '1️⃣', | |||
link = 'Reaction abilities', | |||
class = 'executionTime-tagged r1' | |||
}, | }, | ||
shortRest = { | |||
text = ' | text = 'Short rest', | ||
symbol = ' | symbol = '🌙', | ||
link = ' | link = 'Short rest abilities', | ||
class = 'executionTime-tagged shortRest' | |||
}, | |||
longRest = { | |||
text = 'Long rest', | |||
symbol = '🌙', | |||
link = 'Long rest abilities', | |||
class = 'executionTime-tagged longRest' | |||
}, | }, | ||
}, | }, | ||
piercing = { | |||
av0 = { | |||
text = ' | text = 'AV0', | ||
symbol = ' | symbol = '🎯', | ||
link = ' | link = 'AV0 abilities', | ||
color = '#33d17a', | |||
class = 'piercing-tagged av0' | |||
}, | }, | ||
unblockable = { | |||
text = ' | text = 'UB', | ||
symbol = ' | symbol = '🪨', | ||
link = ' | link = 'UB abilities', | ||
color = '#33d17a', | |||
class = 'piercing-tagged ub' | |||
} | } | ||
}, | }, | ||
duration = { | |||
instant = { | |||
text = ' | text = 'Instant', | ||
link = 'Instant duration abilities', | |||
no = true | |||
} | }, | ||
always = { | |||
text = 'Always active', | |||
link = 'Always active duration abilities', | |||
no = true | |||
}, | |||
noLimit = { | |||
text = 'No limit', | |||
link = 'No limit duration abilities', | |||
no = true | |||
}, | |||
whileUp = { | |||
text = 'While up', | |||
link = 'While up duration abilities', | |||
no = true | |||
}, | |||
whileDown = { | |||
text = 'While down', | |||
link = 'While down duration abilities', | |||
no = true | |||
}, | |||
whileAlive = { | |||
text = 'While alive', | |||
link = 'While alive duration abilities', | |||
no = true | |||
}, | |||
whileDead = { | |||
text = 'While dead', | |||
link = 'While dead duration abilities', | |||
no = true | |||
}, | |||
endOfTurn = { | |||
text = 'Until the end of the turn', | |||
link = 'Until end of turn duration abilities', | |||
no = true | |||
}, | |||
dawn = { | |||
text = 'Until dawn', | |||
link = 'Until dawn duration abilities', | |||
no = true | |||
}, | |||
startOfTargetNextTurn = { | |||
text = 'Until the start of target\'s next turn', | |||
link = 'Until start of target\'s next turn duration abilities', | |||
no = true | |||
}, | |||
endOfTargetNextTurn = { | |||
text = 'Until the end of target\'s next turn', | |||
link = 'Until end of target\'s next turn duration abilities', | |||
no = true | |||
}, | |||
startOfYourNextTurn = { | |||
text = 'Until the start of your next turn', | |||
link = 'Until start of your next turn duration abilities', | |||
no = true | |||
}, | |||
endOfYourNextTurn = { | |||
text = 'Until the end of your next turn', | |||
link = 'Until end of your next turn duration abilities', | |||
no = true | |||
}, | |||
endOfCombat = { | |||
text = 'Until the end of combat', | |||
link = 'Until end of combat duration abilities', | |||
no = true | |||
} | |||
}, | }, | ||
range = { | |||
melee = { | |||
text = 'Your melee range', | |||
-- link = 'Melee abilities', | |||
no = true | |||
}, | |||
weapon = { | |||
range = ' | text = 'Your [[:Category:Weapons|weapon\'s]] range', | ||
-- link = 'Weapon range abilities', | |||
no = true | |||
}, | |||
hand = { | |||
text = 'Your [[:Category:Handy equipment|hand\'s]] range', | |||
-- link = 'Hand range abilities', | |||
no = true | |||
}, | |||
bite = { | |||
text = 'Your [[:Category:Biting equipment|bite\'s]] range', | |||
-- link = 'Bite range abilities', | |||
no = true | |||
}, | |||
item = { | |||
text = 'Your [[:Category:Items|item\'s]] range', | |||
-- link = 'Item range abilities', | |||
no = true | |||
}, | |||
shield = { | |||
text = 'Your [[:Category:Shields|shield\'s]] range', | |||
-- link = 'Shield range abilities', | |||
no = true | |||
}, | |||
armor = { | |||
text = 'Your [[:Category:Armor|armor\'s]] range', | |||
-- link = 'Armor range abilities', | |||
no = true | |||
}, | |||
}, | }, | ||
attribute = { | |||
int = { | |||
text = 'Intelligence', | |||
symbol = 'INT', | |||
link = 'INT save abilities', | |||
class = 'saveAttribute-tagged int' | |||
}, | |||
str = { | |||
text = 'Strength', | |||
symbol = 'STR', | |||
link = 'STR save abilities', | |||
class = 'saveAttribute-tagged str' | |||
}, | |||
mov = { | |||
text = 'Movement', | |||
symbol = 'MOV', | |||
link = 'MOV save abilities', | |||
class = 'saveAttribute-tagged mov' | |||
}, | |||
per = { | |||
text = 'Perception', | |||
symbol = 'PER', | |||
link = 'PER save abilities', | |||
class = 'saveAttribute-tagged per' | |||
}, | |||
snk = { | |||
text = 'Sneak', | |||
symbol = 'SNK', | |||
link = 'SNK save abilities', | |||
class = 'saveAttribute-tagged snk' | |||
}, | |||
unp = { | |||
text = 'Unused Presence', | |||
symbol = 'UNP', | |||
link = 'UNP save abilities', | |||
class = 'saveAttribute-tagged unp' | |||
}, | |||
}, | }, | ||
expansionAttribute = { | |||
int = { | |||
text = 'Intelligence', | |||
symbol = 'INT', | |||
link = 'INT save abilities', | |||
class = 'expansionAttribute-tagged int' | |||
}, | |||
str = { | |||
text = 'Strength', | |||
symbol = 'STR', | |||
link = 'STR save abilities', | |||
class = 'expansionAttribute-tagged str' | |||
}, | |||
mov = { | |||
text = 'Movement', | |||
symbol = 'MOV', | |||
link = 'MOV save abilities', | |||
class = 'expansionAttribute-tagged mov' | |||
}, | |||
per = { | |||
text = 'Perception', | |||
symbol = 'PER', | |||
link = 'PER save abilities', | |||
class = 'expansionAttribute-tagged per' | |||
}, | |||
snk = { | |||
text = 'Sneak', | |||
symbol = 'SNK', | |||
link = 'SNK save abilities', | |||
class = 'expansionAttribute-tagged snk' | |||
}, | |||
unp = { | |||
text = 'Unused Presence', | |||
symbol = 'UNP', | |||
link = 'UNP save abilities', | |||
class = 'expansionAttribute-tagged unp' | |||
}, | |||
}, | }, | ||
expansion = { | |||
detonate = { | |||
text = 'Detonate', | |||
symbol = '💥', | |||
link = 'Detonate expansion abilities', | |||
class = 'expansion-tagged detonate' | |||
}, | |||
ripple = { | |||
text = 'Ripple', | |||
symbol = '🌊', | |||
link = 'Ripple expansion abilities', | |||
class = 'expansion-tagged ripple' | |||
}, | |||
cascade = { | |||
text = 'Cascade', | |||
symbol = '➰', | |||
link = 'Cascade expansion abilities', | |||
class = 'expansion-tagged cascade' | |||
}, | |||
fork = { | |||
text = 'Fork', | |||
symbol = '🔱', | |||
link = 'Fork expansion abilities', | |||
class = 'expansion-tagged fork' | |||
} | |||
}, | |||
sustained = { | |||
sustained = { | |||
text = 'Sustained', | |||
symbol = '⏳️', | |||
link = 'Sustained abilities', | |||
class = 'sustained' | |||
} | |||
} | } | ||
} | } | ||
local | local premades = { | ||
strike = { | |||
maneuver = 'active', | |||
executionTime = '1a', | |||
interaction = 'attack', | |||
delivery = 'weapon', | |||
target = 'creature', | |||
duration = 'instant', | |||
range = 'weapon', | |||
}, | |||
ray = { | |||
maneuver = 'active', | |||
executionTime = '1a', | |||
interaction = 'attack', | |||
delivery = 'missile', | |||
target = 'creature', | |||
duration = 'instant', | |||
range = '60f', | |||
piercing = 'av0', | |||
}, | |||
ball = { | |||
maneuver = 'active', | |||
executionTime = '1a', | |||
interaction = 'attack', | |||
delivery = 'missile', | |||
target = 'creature', | |||
duration = 'instant', | |||
range = '30f', | |||
piercing = 'ub', | |||
}, | |||
aura = { | |||
skip = true, | |||
maneuver = 'active', | |||
executionTime = '1a', | |||
interaction = 'feat', | |||
delivery = 'aura', | |||
target = 'creature', | |||
duration = 'instant', | |||
range = '10f', | |||
attribute = 'mov', | |||
}, | |||
ritual = { | |||
maneuver = 'slow', | |||
executionTime = '10m', | |||
interaction = 'manifest', | |||
delivery = 'sight', | |||
target = 'creature', | |||
duration = 'instant', | |||
range = '5f', | |||
}, | |||
touch = { | |||
maneuver = 'active', | |||
executionTime = '1a', | |||
interaction = 'attack', | |||
delivery = 'hand', | |||
target = 'creature', | |||
duration = 'instant', | |||
range = 'hand', | |||
piercing = 'ub', | |||
}, | |||
triumph = { | |||
skip = true, | |||
maneuver = 'reactive', | |||
executionTime = '0r', | |||
interaction = 'manifest', | |||
delivery = 'self', | |||
target = 'self', | |||
duration = 'instant', | |||
range = 'self', | |||
}, | |||
self = { | |||
skip = true, | |||
maneuver = 'active', | |||
executionTime = '1a', | |||
interaction = 'man', | |||
delivery = 'self', | |||
target = 'self', | |||
duration = 'instant', | |||
range = 'self', | |||
}, | |||
passive = { | |||
skip = true, | |||
maneuver = 'passive', | |||
interaction = 'man', | |||
delivery = 'self', | |||
target = 'self', | |||
duration = '4', | |||
range = 'self', | |||
}, | |||
crown = { | |||
skip = true, | |||
maneuver = 'active', | |||
executionTime = '1a', | |||
interaction = 'man', | |||
delivery = 'self', | |||
target = 'self', | |||
duration = '8h', | |||
range = 'self', | |||
sustained = 'sus', | |||
} | |||
} | |||
function noPlural(word) | |||
-- Common irregular plural forms | |||
local irregulars = { | |||
["children"] = "child", | |||
["men"] = "man", | |||
["women"] = "woman", | |||
["feet"] = "foot", | |||
["teeth"] = "tooth", | |||
["mice"] = "mouse", | |||
["geese"] = "goose" | |||
} | |||
-- Check for irregular forms | |||
if irregulars[word] then | |||
return irregulars[word] | |||
end | end | ||
if | |||
-- Regular pluralization rules | |||
-- | if word:match("ies$") then | ||
-- Change words ending in 'ies' to 'y' (e.g., "parties" -> "party") | |||
return word:sub(1, -4) .. "y" | |||
elseif word:match("ves$") then | |||
-- Change words ending in 'ves' to 'f' or 'fe' (e.g., "wolves" -> "wolf") | |||
return word:sub(1, -4) .. "f" | |||
elseif word:match("s$") and not word:match("ss$") then | |||
-- Remove trailing 's' (e.g., "cats" -> "cat", but keep "boss") | |||
return word:sub(1, -2) | |||
else | |||
-- Return the word unchanged if no pluralization rule applies | |||
return word | |||
end | end | ||
if | end | ||
if | local function addCategory(category, key, val, skill, spell, addCats, noLower) | ||
if addCats then | |||
if not noLower then | |||
category = category:lower() | |||
end | |||
if tags[key] and tags[key][val] then | |||
if tags[key][val].tags then | |||
out = '' | |||
for _, t in ipairs(tags[key][val].tags) do | |||
out = out .. addCategory(category, key, t, skill, spell, addCats, true) | |||
end | |||
return out | |||
else | |||
category = tags[key][val].link | |||
end | end | ||
end | end | ||
if skill then | |||
skillCategory = category:gsub('ability', 'skill'):gsub('abilities', 'skills') | |||
skillCategory = skillCategory:gsub("^%l", string.upper) | |||
end | |||
if spell then | |||
spellCategory = category:gsub('ability', 'spell'):gsub('abilities', 'spells') | |||
spellCategory = spellCategory:gsub("^%l", string.upper) | |||
end | |||
category = category:gsub("^%l", string.upper) | |||
local c = '[[Category:' .. tostring(category) .. ']]' | |||
if skill then | |||
: | c = c .. '[[Category:' .. tostring(skillCategory) .. ']]' | ||
end | |||
if spell then | |||
c = c .. '[[Category:' .. tostring(spellCategory) .. ']]' | |||
: | end | ||
: | return c | ||
else | |||
return '' | |||
: | end | ||
return | |||
end | end | ||
local function | local function makeTag(frame, key, value, makeCat, transparent) | ||
local | if not tags[key] or not tags[key][value] then | ||
if value then | |||
local out = frame:preprocess("{{ucfirst:" .. tostring(value) .. "}}") | |||
if not ('.' == out:sub(-1)) then | |||
out = out .. '.' | |||
end | end | ||
return out | |||
else | |||
return '' | |||
end | end | ||
end | end | ||
local tag = tags[key][value] | |||
if tag.no then | |||
local out = frame:preprocess("{{ucfirst:" .. tag.text .. "}}") | |||
if not ('.' == out:sub(-1)) then | |||
out = out .. '.' | |||
end | |||
return out | |||
end | |||
if tag.tags then | |||
local out = '' | |||
for _, t in ipairs(tag.tags) do | |||
out = out .. makeTag(frame, key, t, makeCat, transparent) | |||
end | end | ||
return out | |||
end | end | ||
local tagText = "{{Tag|{{ucfirst:" .. tag.text .. "}}" | |||
if tag.symbol then | |||
tagText = tagText .. "|" .. tag.symbol | |||
end | |||
if tag.link then | |||
tagText = tagText .. "|l=:Category:{{ucfirst:" .. tag.link .. "}}" | |||
end | |||
if tag.color then | |||
tagText = tagText .. "|c=" .. tag.color | |||
end | |||
if tag.class then | |||
tagText = tagText .. "|class=" .. tag.class | |||
end | |||
if transparent then | |||
tagText = tagText .. "|o=1" | |||
end | |||
tagText = tagText .. "}}" | |||
-- out = frame:preprocess(tagText) | |||
out = tagText | |||
return out | |||
end | |||
local function makeContent(frame, table, keys, makeCat) | |||
local content = '' | |||
local subContent = '' | |||
local | local hasPre = false | ||
for _, key in ipairs(keys) do | |||
if ('pre' == key and table['pre']) or ('executionTime' == key and table['executionTime']) or ('target' == key) or ('duration' == key) or ('invoked' == key and table['invoked']) then | |||
hasPre = true | |||
content = content .. frame:preprocess(makeTag(frame, key, table[key], makeCat)) | |||
else | |||
local | if hasPre then | ||
subContent = subContent .. makeTag(frame, key, table[key], makeCat) | |||
else | |||
content = content .. frame:preprocess(makeTag(frame, key, table[key], makeCat)) | |||
end | |||
end | |||
end | |||
if hasPre then | |||
content = content .. frame:preprocess('{{TagSub|' .. subContent .. '}}') | |||
-- content = content .. '{{TagSub|' .. subContent .. '}}' | |||
end | |||
if content == '' then | |||
for _, key in ipairs(keys) do | |||
if table[key] then | |||
content = frame:preprocess('{{ucfirst:' .. content .. table[key] .. '}}') | |||
end | |||
end | |||
end | |||
return content | |||
end | |||
local | local function makeBar(frame, title, content, link, flags, bottom) | ||
if content == '' then | |||
return '' | |||
end | |||
local barSpace = mw.html.create('span') | |||
barSpace | |||
:wikitext(frame:preprocess(' ')) | |||
:css('display', 'none') | |||
local barTitle = mw.html.create('span') | |||
local barTitleClass = title:lower() | |||
- | barTitleClass = barTitleClass:gsub(' ', '-') | ||
barTitleClass = barTitleClass:gsub('\'', '') | |||
local | barTitleClass = barTitleClass:gsub('\"', '') | ||
if | local barText = "{{ucfirst:" .. title .. "}}" | ||
if link then | |||
barText = "[[" .. link .. "|" .. barText .. "]]" | |||
end | end | ||
local | barText = barText .. ":" | ||
barTitle | |||
:addClass('ability-bar-title') | |||
:wikitext(frame:preprocess(barText)) | |||
:css('font-weight', 'bold') | |||
:css('margin-right', '0.5em') | |||
local barContent = mw.html.create('span') | |||
barContent | |||
:addClass('ability-bar-content') | |||
:wikitext(content) | |||
local output = mw.html.create('div') | |||
if bottom then | |||
output = mw.html.create('span') | |||
end | end | ||
if | if not flags then | ||
flags = {} | |||
end | end | ||
for k, v in pairs(flags) do | |||
if type(v) == 'string' then | |||
output:addClass('flag-' .. k .. '-' .. v) | |||
end | |||
end | |||
output | |||
:addClass('ability-bar') | |||
:addClass('ability-bar-' .. barTitleClass) | |||
:attr(flags) | |||
:attr('test', 'out') | |||
:node(barSpace) | |||
:node(barTitle) | |||
:node(barSpace) | |||
:node(barContent) | |||
:css('display', 'block') | |||
-- if flags then | |||
-- for k, v in ipairs(flags) do | |||
-- output:attr(k, v) | |||
-- end | |||
-- end | |||
return tostring(output) | |||
end | |||
local function resolveAlias(args, aliases) | |||
local resolved = {} | |||
-- Resolve keys | |||
for canonicalKey, keyAliasList in pairs(aliases.keys) do | |||
for _, alias in ipairs(keyAliasList) do | |||
if args[alias] then | |||
resolved[canonicalKey] = args[alias] | |||
break | |||
end | |||
end | end | ||
end | |||
-- Resolve values | |||
for canonicalKey, canonicalValueTable in pairs(aliases.values) do | |||
local rawValue = resolved[canonicalKey] | |||
if rawValue then | |||
for canonicalValue, valueAliasList in pairs(canonicalValueTable) do | |||
for _, alias in ipairs(valueAliasList) do | |||
if rawValue == '' then | |||
resolved[canonicalKey] = false | |||
break | |||
elseif rawValue == alias then | |||
resolved[canonicalKey] = canonicalValue | |||
break | |||
-- Handle patterns like timeParse or distParse | |||
elseif rawValue and type(valueAliasList) == "table" and valueAliasList[1] and rawValue:match(valueAliasList[1]) then | |||
if canonicalKey == "duration" or canonicalKey == "executionTime" then | |||
-- Parse time duration (e.g., 5d -> "5 days") | |||
local num = tonumber(rawValue:match("^(%d+)")) | |||
local unit = rawValue:match("[%a]+$") | |||
local unitMap = {m = "minute", h = "hour", d = "day", w = "week", y = "year", r = "round", s = "second"} | |||
if unitMap[unit] then | |||
local parsedValue = num .. " " .. unitMap[unit] .. (num > 1 and "s" or "") | |||
resolved[canonicalKey] = parsedValue | |||
else | |||
resolved[canonicalKey] = rawValue | |||
end | |||
elseif canonicalKey == "range" or canonicalKey == "expansionRange" then | |||
-- Parse distance (e.g., 30f -> "30 feet") | |||
local num = tonumber(rawValue:match("^(%d+)")) | |||
local unit = rawValue:match("[%a]+$") | |||
local unitMap = {f = "feet", m = "miles"} | |||
if unitMap[unit] then | |||
local parsedValue = num .. " " .. unitMap[unit] | |||
resolved[canonicalKey] = parsedValue | |||
else | |||
resolved[canonicalKey] = rawValue | |||
end | |||
end | |||
end | |||
end | |||
end | |||
end | end | ||
end | end | ||
return resolved | |||
end | |||
local function exists(arg) | |||
return arg ~= nil and arg ~= '' and arg ~= false | |||
end | |||
local classFixes = { | |||
bar = 'ber', | |||
sam = 'due', | |||
ama = 'cor' | |||
} | |||
local classArchetypes = { | |||
ber = 'warr', | |||
due = 'warr', | |||
vet = 'warr', | |||
kni = 'warr', | |||
pal = 'warr', | |||
ass = 'semi', | |||
cor = 'semi', | |||
arc = 'semi', | |||
thi = 'semi', | |||
ran = 'semi', | |||
fla = 'mage', | |||
sto = 'mage', | |||
lif = 'mage', | |||
nec = 'mage', | |||
nat = 'mage' | |||
} | |||
local className = { | |||
ber = 'Berserker', | |||
due = 'Duelist', | |||
vet = 'Veteran', | |||
kni = 'Knight', | |||
pal = 'Paladin', | |||
ass = 'Assassin', | |||
cor = 'Corsair', | |||
arc = 'Archer', | |||
thi = 'Thief', | |||
ran = 'Ranger', | |||
fla = 'Flame Mage', | |||
sto = 'Storm Mage', | |||
lif = 'Life Mage', | |||
nec = 'Necromancer', | |||
nat = 'Nature Mage', | |||
} | |||
local archetypeName = { | |||
warr = 'Warrior', | |||
semi = 'Semi', | |||
mage = 'Mage', | |||
} | |||
local | function p.a ( frame ) | ||
local | |||
if args[' | makeCat = true | ||
-- Figure out all the default values | |||
local args = frame.args | |||
local resolved = {} | |||
if args['pre'] then | |||
local toResolve = resolveAlias(premades[args['pre']], aliases) | |||
for k, v in pairs(toResolve) do | |||
resolved[k] = v | |||
end | end | ||
end | end | ||
local userResolve = resolveAlias(args, aliases) | |||
for k, v in pairs(userResolve) do | |||
resolved[k] = v | |||
end | end | ||
if | if resolved['pre'] and premades[args['pre']]['skip'] then | ||
resolved['pre'] = nil | |||
end | end | ||
if | if not resolved['duration'] then | ||
resolved['duration'] = 'instant' | |||
end | end | ||
local | if resolved['interaction'] == 'attack' then | ||
local dc = "Hit target's {{AC}}" | |||
if resolved['target'] == 'limb' then | |||
dc = "Hit target's {{Var:ACLimb}}" | |||
end | |||
if resolved['target'] == 'al' then | |||
dc = "Hit target's {{Var:ACLimb}}" | |||
end | |||
if resolved['target'] == 'arm' then | |||
dc = "Hit target's {{Var:ACLimb}}" | |||
end | |||
if resolved['target'] == 'leg' then | |||
dc = "Hit target's {{Var:ACLimb}}" | |||
end | |||
if resolved['target'] == 'vitals' then | |||
dc = "Hit target's {{Var:ACVitals}}" | |||
end | |||
if resolved['target'] == 'item' or resolved['target'] == 'ari' then | |||
dc = "Hit {{DC}} [[Core:Item Target|depends on item]]" | |||
end | |||
if resolved['target'] == 'shield' then | |||
dc = "Hit user's {{Var:ACWielded}}" | |||
end | |||
if resolved['target'] == 'armor' then | |||
dc = "Hit user's {{Var:ACWorn}}" | |||
end | |||
if resolved['target'] == 'weapon' then | |||
dc = "Hit user's {{Var:ACWielded}}" | |||
end | |||
resolved['hitDC'] = dc | |||
end | end | ||
if | |||
if resolved['expansionCount'] then | |||
if resolved['expansionCount'] == '1' then | |||
resolved['expansionCount'] = '{{Space}}' .. resolved['expansionCount'] .. ' extra execution.' | |||
else | |||
resolved['expansionCount'] = '{{Space}}' .. resolved['expansionCount'] .. ' extra executions.' | |||
end | |||
end | end | ||
if resolved['invoked'] then | |||
local | resolved['verbal'] = 'verbal' | ||
resolved['somatic'] = 'somatic' | |||
resolved['mage'] = 'magelore' | |||
end | |||
local skill = false | |||
local spell = false | |||
local standard = false | |||
local | local class = nil | ||
local | local classFull = nil | ||
local | local archetype = nil | ||
local | local archetypeFull = nil | ||
local rank = nil | |||
if | if args['class'] then | ||
class = args['class'] | |||
if classFixes[class] then | |||
class = classFixes[class] | |||
end | |||
end | end | ||
if | if args['class'] or args['arch'] then | ||
archetype = classArchetypes[class] | |||
if args['arch'] then | |||
archetype = args['arch'] | |||
end | |||
classFull = className[class] | |||
archetypeFull = archetypeName[archetype] | |||
standard = true | |||
if archetype == 'warr' or archetype == 'semi' then | |||
skill = true | |||
end | end | ||
if | if archetype == 'mage' then | ||
spell = true | |||
end | end | ||
end | end | ||
if | local costMP = nil | ||
local costHP = nil | |||
local costGP = nil | |||
if args['pre'] == 'crown' then | |||
spell = true | |||
costMP = '1' | |||
rank = '2' | |||
end | end | ||
if | if args['rank'] then | ||
rank = args['rank'] | |||
end | end | ||
if args['skill'] then | |||
skill = true | |||
if args['skill'] == '0' or args['skill'] == 'false' then | |||
skill = false | |||
end | |||
end | end | ||
if | if args['spell'] then | ||
spell = true | |||
if args['spell'] == '0' or args['spell'] == 'false' then | |||
spell = false | |||
end | |||
end | end | ||
if | if args['standard'] then | ||
standard = true | |||
if args['standard'] == '0' or args['standard'] == 'false' then | |||
standard = false | |||
end | |||
end | end | ||
if | if args['mp'] and args['mp']:len() > 0 then | ||
costMP = args['mp'] | |||
end | end | ||
if | if args['hp'] and args['hp']:len() > 0 then | ||
costHP = args['hp'] | |||
end | end | ||
if | if args['gp'] and args['gp']:len() > 0 then | ||
costGP = args['gp'] | |||
end | end | ||
if exists(args['shatter']) then | |||
costShatter = args['shatter'] | |||
end | end | ||
local basic = false | |||
local journeyman = false | |||
if | if args['basic'] then | ||
basic = true | |||
end | end | ||
if | if args['journeyman'] or args['jm'] then | ||
journeyman = true | |||
end | end | ||
c = c .. addCategory(' | -- Category string | ||
local c = '' | |||
local name = args['name'] | |||
local page = mw.title.getCurrentTitle().text | |||
local namespace = frame:preprocess('{{NAMESPACE}}') | |||
local addCats = ((namespace == 'Ability') and (page == name)) | |||
c = c .. addCategory('Abilities', nil, nil, skill, spell, addCats) | |||
if basic then | |||
c = c .. addCategory('Basic abilities', 'basic', nil, skill, spell, addCats) | |||
end | end | ||
if | if journeyman then | ||
c = c .. addCategory( | c = c .. addCategory('Journeyman abilities', 'journeyman', nil, skill, spell, addCats) | ||
end | end | ||
if | local esContent = '' | ||
if args['es'] and args['es']:len() > 0 then | |||
esContent = esContent .. makeTag(frame, 'es', 'es', makeCat) | |||
c = c .. addCategory('Elder Sorcery abilities', 'es', 'es', skill, spell, addCats) | |||
else | |||
if spell then | |||
standard = '1' | |||
end | |||
end | end | ||
if | if standard then | ||
c = c .. addCategory( | c = c .. addCategory('Standard abilities', nil, nil, false, false, addCats) | ||
if skill then | |||
c = c .. addCategory('Semblant skills', nil, nil, skill, spell, addCats) | |||
c = c .. addCategory(' | end | ||
if spell then | |||
c = c .. addCategory('Conjured spells', nil, nil, skill, spell, addCats) | |||
end | |||
else | |||
c = c .. addCategory('Nonstandard abilities', nil, nil, skill, spell, addCats) | |||
end | end | ||
if | if args['ethereal'] then | ||
c = c .. addCategory(' | c = c .. addCategory('Ethereal abilities', nil, nil, skill, spell, addCats) | ||
end | end | ||
if | if args['av'] then | ||
c = c .. addCategory('AV granting abilities', nil, nil, skill, spell, addCats, true) | |||
c = c .. addCategory('AV' .. args['av'] .. ' granting abilities', nil, nil, skill, spell, addCats, true) | |||
end | end | ||
if | if (archetype and archetypeFull) then | ||
c = c .. addCategory(' | c = c .. addCategory(archetypeFull .. ' archetype abilities', 'archetype', archetype, skill, spell, addCats) | ||
end | end | ||
if | if (class and classFull) then | ||
c = c .. addCategory(' | c = c .. addCategory(classFull .. ' class abilities', 'class', class, skill, spell, addCats, true) | ||
end | end | ||
if (rank and (class and classFull)) then | |||
if rank == '3' then | |||
rank = '3+' | |||
end | |||
c = c .. addCategory('Rank ' .. rank .. ' ' .. classFull .. ' abilities', 'rank', rank, skill, spell, addCats, true) | |||
end | end | ||
if | if resolved['pre'] then | ||
c = c .. addCategory(resolved['pre'] .. 'abilities', 'pre', resolved['pre'], skill, spell, addCats) | |||
end | end | ||
if | if resolved['interaction'] then | ||
c = c .. addCategory(resolved['interaction'] .. ' interaction abilities', 'interaction', resolved['interaction'], skill, spell, addCats) | |||
end | end | ||
if | if resolved['delivery'] then | ||
c = c .. addCategory(resolved['delivery'] .. ' delivery abilities', 'delivery', resolved['delivery'], skill, spell, addCats) | |||
end | end | ||
if | if resolved['target'] then | ||
c = c .. addCategory(resolved['target'] .. ' target abilities', 'target', resolved['target'], skill, spell, addCats) | |||
end | end | ||
if resolved['duration'] then | |||
c = c .. addCategory(noPlural(resolved['duration']) .. ' duration abilities', 'duration', resolved['duration'], skill, spell, addCats) | |||
if | |||
end | end | ||
if | -- if resolved['range'] then | ||
-- c = c .. addCategory(resolved['range'] .. ' range abilities', 'range', resolved['range'], skill, spell, addCats) | |||
c = c .. addCategory(' | -- end | ||
if resolved['expansion'] then | |||
c = c .. addCategory(resolved['expansion'] .. ' expansion abilities', 'expansion', resolved['expansion'], skill, spell, addCats) | |||
end | end | ||
if | -- if resolved['expansionRange'] then | ||
-- c = c .. addCategory(resolved['expansionRange'] .. ' expansion range abilities', 'expansionRange', resolved['expansionRange'], skill, spell, addCats) | |||
c = c .. addCategory(' | -- end | ||
if resolved['attribute'] then | |||
c = c .. addCategory(resolved['attribute'] .. ' save abilities', 'attribute', resolved['attribute'], skill, spell, addCats) | |||
end | end | ||
if | if resolved['piercing'] then | ||
c = c .. addCategory(resolved['piercing'] .. ' abilities', 'piercing', resolved['piercing'], skill, spell, addCats) | |||
end | end | ||
if | if resolved['sustained'] then | ||
c = c .. addCategory('Sustained abilities', 'sustained', resolved['sustained'], skill, spell, addCats) | |||
c = c .. addCategory(' | |||
end | end | ||
if | if resolved['upgrade'] then | ||
c = c .. addCategory(resolved['upgrade'] .. ' abilities', 'upgrade', resolved['upgrade'], skill, spell, addCats) | |||
end | end | ||
if | if resolved['executionTime'] then | ||
c = c .. addCategory(noPlural(resolved['executionTime']) .. ' execution time abilities', 'executionTime', resolved['executionTime'], skill, spell, addCats) | |||
end | end | ||
if resolved['maneuver'] then | |||
c = c .. addCategory(resolved['maneuver'] .. ' abilities', 'maneuver', resolved['maneuver'], skill, spell, addCats) | |||
if | |||
end | end | ||
if | if resolved['verbal'] then | ||
c = c .. addCategory('Verbal component abilities', 'verbal', resolved['verbal'], skill, spell, addCats) | |||
c = c .. addCategory(' | |||
end | end | ||
if | if resolved['somatic'] then | ||
c = c .. addCategory('Somatic component abilities', 'somatic', resolved['somatic'], skill, spell, addCats) | |||
c = c .. addCategory(' | |||
end | end | ||
if | if resolved['material'] then | ||
c = c .. addCategory('Material component abilities', 'material', resolved['material'], skill, spell, addCats) | |||
c = c .. addCategory(' | |||
end | end | ||
if | if resolved['magelore'] then | ||
c = c .. addCategory('Magelore component abilities', 'magelore', resolved['magelore'], skill, spell, addCats) | |||
c = c .. addCategory(' | |||
end | end | ||
if | if resolved['invoked'] then | ||
c = c .. addCategory('Invoke abilities', 'invoked', resolved['invoked'], skill, spell, addCats) | |||
c = c .. addCategory(' | |||
end | end | ||
if args[' | |||
local flawContent = '' | |||
c = c .. addCategory(' | if args['flaw'] or args['f'] or args['fl'] then | ||
flawContent = flawContent .. makeTag(frame, 'flaw', 'flaw', makeCat) | |||
c = c .. addCategory('Flaw abilities', 'flaw', 'flaw', skill, spell, addCats) | |||
end | end | ||
if args[' | local specialContent = '' | ||
if args['special'] or args['s'] or args['sp'] and ((args['special']:len() > 0) or (args['s']:len() > 0) or (args['sp']:len() > 0)) then | |||
c = c .. addCategory(' | specialContent = specialContent .. makeTag(frame, 'special', 'special', makeCat) | ||
c = c .. addCategory('Special abilities', 'special', 'special', skill, spell, addCats) | |||
end | end | ||
if args[' | local wardedContent = '' | ||
if args['warded'] and args['warded']:len() > 0 then | |||
c = c .. addCategory(' | wardedContent = wardedContent .. makeTag(frame, 'warded', 'warded', makeCat) | ||
c = c .. addCategory('Warded abilities', 'warded', 'warded', skill, spell, addCats) | |||
end | end | ||
if args[' | |||
local elementContent = '' | |||
c = c .. addCategory(' | if args['life'] and args['life']:len() > 0 then | ||
elementContent = elementContent .. makeTag(frame, 'elements', 'life', makeCat) | |||
c = c .. addCategory('Life element abilities', 'elements', 'life', skill, spell, addCats) | |||
end | end | ||
if args[' | if args['storm'] and args['storm']:len() > 0 then | ||
elementContent = elementContent .. makeTag(frame, 'elements', 'storm', makeCat) | |||
c = c .. addCategory(' | c = c .. addCategory('Storm element abilities', 'elements', 'storm', skill, spell, addCats) | ||
end | end | ||
if args[' | if (args['necro'] and args['necro']:len() > 0) or (args['necromancy'] and args['necromancy']:len() > 0) then | ||
elementContent = elementContent .. makeTag(frame, 'elements', 'necro', makeCat) | |||
c = c .. addCategory(' | c = c .. addCategory('Necromancy element abilities', 'elements', 'necro', skill, spell, addCats) | ||
end | end | ||
if args[' | if args['flame'] and args['flame']:len() > 0 then | ||
elementContent = elementContent .. makeTag(frame, 'elements', 'flame', makeCat) | |||
c = c .. addCategory(' | c = c .. addCategory('Flame element abilities', 'elements', 'flame', skill, spell, addCats) | ||
end | end | ||
if args[' | if args['nature'] and args['nature']:len() > 0 then | ||
elementContent = elementContent .. makeTag(frame, 'elements', 'nature', makeCat) | |||
c = c .. addCategory(' | c = c .. addCategory('Nature element abilities', 'elements', 'nature', skill, spell, addCats) | ||
end | end | ||
local | local powerContent = '' | ||
if | local martial = true | ||
if args['magic'] and args['magic']:len() > 0 then | |||
martial = false | |||
powerContent = powerContent .. makeTag(frame, 'power', 'magic', makeCat) | |||
c = c .. addCategory('Magically powered abilities', 'power', 'magic', skill, spell, addCats) .. addCategory('Magical effects', nil, nil, false, false, addCats) | |||
end | end | ||
if | if args['divine'] and args['divine']:len() > 0 then | ||
c = c .. addCategory(' | martial = false | ||
if | powerContent = powerContent .. makeTag(frame, 'power', 'divine', makeCat) | ||
c = c .. addCategory('Divinely powered abilities', 'power', 'divine', skill, spell, addCats) .. addCategory('Divine effects', nil, nil, false, false, addCats) | |||
end | |||
if args['spirit'] and args['spirit']:len() > 0 then | |||
martial = false | |||
powerContent = powerContent .. makeTag(frame, 'power', 'spirit', makeCat) | |||
end | c = c .. addCategory('Spiritually powered abilities', 'power', 'spirit', skill, spell, addCats) .. addCategory('Spiritual effects', nil, nil, false, false, addCats) | ||
end | |||
if args['primal'] and args['primal']:len() > 0 then | |||
martial = false | |||
powerContent = powerContent .. makeTag(frame, 'power', 'primal', makeCat) | |||
c = c .. addCategory('Primally powered abilities', 'power', 'primal', skill, spell, addCats) .. addCategory('Primal effects', nil, nil, false, false, addCats) | |||
end | |||
if args['psionic'] and args['psionic']:len() > 0 then | |||
martial = false | |||
powerContent = powerContent .. makeTag(frame, 'power', 'psionic', makeCat) | |||
c = c .. addCategory('Psionically powered abilities', 'power', 'psionic', skill, spell, addCats) .. addCategory('Mental effects', nil, nil, false, false, addCats) | |||
end | |||
if args['techo'] and args['techo']:len() > 0 then | |||
martial = false | |||
powerContent = powerContent .. makeTag(frame, 'power', 'techo', makeCat) | |||
c = c .. addCategory('Technologically powered abilities', 'power', 'techo', skill, spell, addCats) .. addCategory('Technological effects', nil, nil, false, false, addCats) | |||
end | |||
if args['finance'] and args['finance']:len() > 0 then | |||
martial = false | |||
powerContent = powerContent .. makeTag(frame, 'power', 'finance', makeCat) | |||
c = c .. addCategory('Financially powered abilities', 'power', 'finance', skill, spell, addCats) .. addCategory('Financial effects', nil, nil, false, false, addCats) | |||
end | |||
if args['alchemy'] and args['alchemy']:len() > 0 then | |||
martial = false | |||
powerContent = powerContent .. makeTag(frame, 'power', 'alchemy', makeCat) | |||
c = c .. addCategory('Alchemically powered abilities', 'power', 'alchemy', skill, spell, addCats) .. addCategory('Alchemical effects', nil, nil, false, false, addCats) | |||
end | |||
if args['unknown'] and args['unknown']:len() > 0 then | |||
martial = false | |||
powerContent = powerContent .. makeTag(frame, 'power', 'unknown', makeCat) | |||
c = c .. addCategory('Unknown powered abilities', 'power', 'unknown', skill, spell, addCats) | |||
end | |||
if args['martial'] and args['martial']:len() > 0 then | |||
martial = true | |||
end | |||
if martial then | |||
powerContent = powerContent .. makeTag(frame, 'power', 'martial', makeCat) | |||
c = c .. addCategory('Martially powered abilities', 'power', 'martial', skill, spell, addCats) | |||
end | |||
if class then | |||
classContent = makeContent(frame, resolved, {'class'}, makeCat) | |||
powerContent = powerContent .. classContent | |||
end | |||
if args['rotator'] and args['rotator']:len() > 0 then | |||
powerContent = powerContent .. makeTag(frame, 'category', 'rotator', makeCat) | |||
end | |||
if args['gm'] and args['gm']:len() > 0 then | |||
powerContent = powerContent .. makeTag(frame, 'gm', args['gm'], makeCat) | |||
end | |||
if args['guildmaster'] and args['guildmaster']:len() > 0 then | |||
powerContent = powerContent .. makeTag(frame, 'category', 'guildmaster', makeCat) | |||
end | |||
powerContent = powerContent .. elementContent | |||
if skill then | |||
powerContent = powerContent .. makeTag(frame, 'category', 'skill', makeCat) | |||
end | end | ||
if spell then | if spell then | ||
powerContent = powerContent .. makeTag(frame, 'category', 'spell', makeCat) | |||
end | end | ||
local | local deliveryContent = '' | ||
if standard and skill then | |||
if | deliveryContent = deliveryContent .. makeTag(frame, 'category', 'semblant', makeCat) | ||
end | end | ||
if | if standard and spell then | ||
deliveryContent = deliveryContent .. makeTag(frame, 'category', 'conjure', makeCat) | |||
end | end | ||
local | local effectContent = '' | ||
if exists(args['mental']) then | |||
effectContent = effectContent .. makeTag(frame, 'effects', 'mental', makeCat) | |||
c = c .. addCategory('Mental effects', 'effect', 'mental', skill, spell, addCats) | |||
end | |||
if exists(args['truth']) then | |||
effectContent = effectContent .. makeTag(frame, 'effects', 'truth', makeCat) | |||
c = c .. addCategory('Truth detecting effects', 'effect', 'truthDetecting', skill, spell, addCats) | |||
end | |||
if exists(args['duelMod']) then | |||
effectContent = effectContent .. makeTag(frame, 'effects', 'duelModifying', makeCat) | |||
c = c .. addCategory('Duel modifying effects', 'effect', 'duelModifying', skill, spell, addCats) | |||
end | |||
if exists(args['movement']) then | |||
effectContent = effectContent .. makeTag(frame, 'effects', 'movement', makeCat) | |||
c = c .. addCategory('Movement effects', 'effect', 'movement', skill, spell, addCats) | |||
end | |||
if exists(args['poison']) then | |||
effectContent = effectContent .. makeTag(frame, 'effects', 'poison', makeCat) | |||
c = c .. addCategory('Poison effects', 'effect', 'poison', skill, spell, addCats) | |||
end | |||
if exists(args['illusion']) then | |||
effectContent = effectContent .. makeTag(frame, 'effects', 'illusion', makeCat) | |||
c = c .. addCategory('Illusion effects', 'effect', 'illusion', skill, spell, addCats) | |||
end | |||
if exists(args['displacement']) then | |||
effectContent = effectContent .. makeTag(frame, 'effects', 'displacement', makeCat) | |||
c = c .. addCategory('Displacement effects', 'effect', 'displacement', skill, spell, addCats) | |||
end | |||
if exists(args['transformation']) then | |||
effectContent = effectContent .. makeTag(frame, 'effects', 'transformation', makeCat) | |||
c = c .. addCategory('Transformation effects', 'effect', 'transformation', skill, spell, addCats) | |||
end | |||
if exists(args['control']) then | |||
effectContent = effectContent .. makeTag(frame, 'effects', 'control', makeCat) | |||
c = c .. addCategory('Control effects', 'effect', 'control', skill, spell, addCats) | |||
end | |||
if exists(args['resist']) then | |||
effectContent = effectContent .. makeTag(frame, 'effects', 'resist', makeCat) | |||
c = c .. addCategory('Resistance effects', 'effect', 'resist', skill, spell, addCats) | |||
end | |||
if exists(args['hexproof']) then | |||
effectContent = effectContent .. makeTag(frame, 'effects', 'hexproof', makeCat) | |||
c = c .. addCategory('Hexproof effects', 'effect', 'hexproof', skill, spell, addCats) | |||
end | |||
if exists(args['awaken']) then | |||
effectContent = effectContent .. makeTag(frame, 'effects', 'awaken', makeCat) | |||
c = c .. addCategory('Awakening effects', 'effect', 'awaken', skill, spell, addCats) | |||
end | |||
if exists(args['immune']) then | |||
effectContent = effectContent .. makeTag(frame, 'effects', 'immune', makeCat) | |||
c = c .. addCategory('Immunity effects', 'effect', 'immune', skill, spell, addCats) | |||
end | |||
if exists(args['hexseal']) then | |||
effectContent = effectContent .. makeTag(frame, 'effects', 'hexseal', makeCat) | |||
c = c .. addCategory('Hexseal effects', 'effect', 'hexseal', skill, spell, addCats) | |||
end | |||
if exists(args['long']) then | |||
effectContent = effectContent .. makeTag(frame, 'effects', 'long', makeCat) | |||
c = c .. addCategory('Long range effects', 'effect', 'long', skill, spell, addCats) | |||
end | |||
if exists(args['sense']) then | |||
effectContent = effectContent .. makeTag(frame, 'effects', 'sense', makeCat) | |||
c = c .. addCategory('Sensory effects', 'effect', 'sense', skill, spell, addCats) | |||
end | |||
if exists(args['revive'] or args['rev']) then | |||
effectContent = effectContent .. makeTag(frame, 'effects', 'revive', makeCat) | |||
c = c .. addCategory('Revival effects', 'effect', 'revive', skill, spell, addCats) | |||
end | |||
if exists(args['summon']) then | |||
effectContent = effectContent .. makeTag(frame, 'effects', 'summon', makeCat) | |||
c = c .. addCategory('Summoning effects', 'effect', 'summon', skill, spell, addCats) | |||
end | |||
if exists(args['heal']) then | |||
effectContent = effectContent .. makeTag(frame, 'effects', 'heal', makeCat) | |||
c = c .. addCategory('Healing effects', 'effect', 'heal', skill, spell, addCats) | |||
end | |||
if exists(args['reanimate'] or args['rean']) then | |||
effectContent = effectContent .. makeTag(frame, 'effects', 'reanimate', makeCat) | |||
c = c .. addCategory('Reanimation effects', 'effect', 'reanimate', skill, spell, addCats) | |||
end | |||
if exists(args['regenerate'] or args['regen']) then | |||
effectContent = effectContent .. makeTag(frame, 'effects', 'regenerate', makeCat) | |||
c = c .. addCategory('Regeneration effects', 'effect', 'regenerate', skill, spell, addCats) | |||
end | |||
if exists(args['revitalize'] or args['revit']) then | |||
effectContent = effectContent .. makeTag(frame, 'effects', 'revitalize', makeCat) | |||
c = c .. addCategory('Revitalization effects', 'effect', 'revitalize', skill, spell, addCats) | |||
end | |||
if exists(args['kill']) then | |||
effectContent = effectContent .. makeTag(frame, 'effects', 'kill', makeCat) | |||
c = c .. addCategory('Killing effects', 'effect', 'kill', skill, spell, addCats) | |||
end | |||
if exists(args['damage']) then | |||
effectContent = effectContent .. makeTag(frame, 'effects', 'damage', makeCat) | |||
c = c .. addCategory('Damaging effects', 'effect', 'damage', skill, spell, addCats) | |||
end | |||
if exists(args['drain']) then | |||
effectContent = effectContent .. makeTag(frame, 'effects', 'drain', makeCat) | |||
c = c .. addCategory('Draining effects', 'effect', 'drain', skill, spell, addCats) | |||
end | |||
if exists(args['destroy']) then | |||
effectContent = effectContent .. makeTag(frame, 'effects', 'destroy', makeCat) | |||
c = c .. addCategory('Destruction effects', 'effect', 'destroy', skill, spell, addCats) | |||
end | |||
if exists(args['contract']) then | |||
effectContent = effectContent .. makeTag(frame, 'effects', 'contract', makeCat) | |||
c = c .. addCategory('Contract effects', 'effect', 'contract', skill, spell, addCats) | |||
end | |||
if exists(args['steal']) then | |||
effectContent = effectContent .. makeTag(frame, 'effects', 'steal', makeCat) | |||
c = c .. addCategory('Stealing effects', 'effect', 'steal', skill, spell, addCats) | |||
end | |||
if exists(args['loud']) then | |||
effectContent = effectContent .. makeTag(frame, 'effects', 'loud', makeCat) | |||
c = c .. addCategory('Loud effects', 'effect', 'loud', skill, spell, addCats) | |||
end | |||
if exists(args['knockout']) then | |||
effectContent = effectContent .. makeTag(frame, 'effects', 'knockout', makeCat) | |||
c = c .. addCategory('Knockout effects', 'effect', 'knockout', skill, spell, addCats) | |||
end | |||
if exists(args['time']) then | |||
effectContent = effectContent .. makeTag(frame, 'effects', 'time', makeCat) | |||
c = c .. addCategory('Temporal effects', 'effect', 'time', skill, spell, addCats) | |||
end | |||
if exists(args['lightning']) then | |||
effectContent = effectContent .. makeTag(frame, 'effects', 'lightning', makeCat) | |||
c = c .. addCategory('Lightning effects', 'effect', 'lightning', skill, spell, addCats) | |||
end | |||
if exists(args['disease']) then | |||
effectContent = effectContent .. makeTag(frame, 'effects', 'disease', makeCat) | |||
c = c .. addCategory('Disease effects', 'effect', 'disease', skill, spell, addCats) | |||
end | |||
if exists(args['vision']) then | |||
effectContent = effectContent .. makeTag(frame, 'effects', 'vision', makeCat) | |||
c = c .. addCategory('Vision effects', 'effect', 'vision', skill, spell, addCats) | |||
end | |||
if exists(args['morganti']) then | |||
effectContent = effectContent .. makeTag(frame, 'effects', 'morganti', makeCat) | |||
c = c .. addCategory('Morganti effects', 'effect', 'morganti', skill, spell, addCats) | |||
end | |||
if exists(args['construction']) then | |||
effectContent = effectContent .. makeTag(frame, 'effects', 'construction', makeCat) | |||
c = c .. addCategory('Construction effects', 'effect', 'construction', skill, spell, addCats) | |||
end | |||
if exists(args['weather']) then | |||
effectContent = effectContent .. makeTag(frame, 'effects', 'weather', makeCat) | |||
c = c .. addCategory('Weather effects', 'effect', 'weather', skill, spell, addCats) | |||
end | |||
local autoContent = '' | |||
if exists(args['auto']) then | |||
effectContent = effectContent .. makeTag(frame, 'effects', 'auto', makeCat) | |||
c = c .. addCategory('Automatic effects', 'effect', 'auto', skill, spell, addCats) | |||
autoContent = autoContent .. ' This triggers automatically. You cannot choose to not use it if you are able to.' | |||
end | |||
local | local costContent = '' | ||
{ | if costMP then | ||
c = c .. addCategory('MP cost abilities', 'costMP', costMP, skill, spell, addCats, true) | |||
if costMP == 'x' then | |||
}, | costContent = costContent .. frame:preprocess("{{Tag|X MP|🩵|l=:Category:MP cost abilities|c=#3584e4|class=cost-tagged mpx}}") | ||
{ | c = c .. addCategory('Variable MP cost abilities', 'costMP', 'x', skill, spell, addCats, true) | ||
else | |||
costContent = costContent .. frame:preprocess("{{Tag|" .. costMP .. " MP|🩵|l=:Category:MP cost abilities|c=#3584e4|class=cost-tagged mp" .. costMP .. "}}") | |||
}, | c = c .. addCategory(costMP .. ' MP cost abilities', 'costMP', costMP, skill, spell, addCats, true) | ||
end | |||
end | |||
if costHP then | |||
}, | c = c .. addCategory('HP cost abilities', 'costHP', costHP, skill, spell, addCats, true) | ||
{ | if costHP == 'x' then | ||
title = ' | costContent = costContent .. frame:preprocess("{{Tag|X HP|❤️|l=:Category:HP cost abilities|c=#e01b24|class=cost-tagged hpx}}") | ||
content = | c = c .. addCategory('Variable HP cost abilities', 'costHP', 'x', skill, spell, addCats, true) | ||
}, | else | ||
{ | costContent = costContent .. frame:preprocess("{{Tag|" .. costHP .. " HP|❤️|l=:Category:HP cost abilities|c=#e01b24|class=cost-tagged hp" .. costHP .. "}}") | ||
title = ' | c = c .. addCategory(costHP .. ' HP cost abilities', 'costHP', costHP, skill, spell, addCats, true) | ||
content = | end | ||
}, | end | ||
{ | if costGP then | ||
title = ' | c = c .. addCategory('GP cost abilities', 'costGP', costGP, skill, spell, addCats, true) | ||
content = | if costGP == 'x' then | ||
costContent = costContent .. frame:preprocess("{{Tag|X GP|🪙|l=:Category:GP cost abilities|c=#F6D32D|class=cost-tagged gpx}}") | |||
c = c .. addCategory('Variable GP cost abilities', 'costGP', 'x', skill, spell, addCats, true) | |||
else | |||
costContent = costContent .. frame:preprocess("{{Tag|" .. costGP .. " GP|🪙|l=:Category:GP cost abilities|c=#F6D32D|class=cost-tagged gp" .. costGP .. "}}") | |||
c = c .. addCategory(costGP .. ' GP cost abilities', 'costGP', costGP, skill, spell, addCats, true) | |||
end | |||
end | |||
if costShatter then | |||
c = c .. addCategory('Shatter cost abilities', 'costShatter', costShatter, skill, spell, addCats) | |||
costContent = costContent .. frame:preprocess("{{Tag|Shatter|💥|l=:Category:Shatter cost abilities|class=cost-tagged shatter}}") | |||
end | |||
if args['cost'] then | |||
costContent = costContent .. frame:preprocess(args['cost']) | |||
end | |||
local executionTimeTitle = 'Execution time' | |||
if spell then | |||
executionTimeTitle = 'Casting time' | |||
end | |||
local expansionContent = 'TEST' | |||
-- if args['ec'] or args['expCount'] or args['expansionCount'] then | |||
-- -- local ec = args['ec'] or args['expCount'] or args['expansionCount'] | |||
-- -- ec = tostring(ec) | |||
-- local ec = '1' | |||
-- expansionContent = 'This ability expands ' .. ec .. ' time' .. (tonumber(ec) > 1 and 's' or '') .. '.' | |||
-- end | |||
local heightenedContent = '' | |||
if args['heightened'] and args['heightened']:len() > 0 then | |||
heightenedContent = heightenedContent .. 'For each additional {{MP}} spent, ' .. args['heightened'] | |||
-- heightenedContent = heightenedContent .. ' You can only {{L|Core|Heightening|Heighten}} if you are {{L|Core|Proficiency Bonus|Proficient}} or {{L|Core|Fluency Bonus|Fluent}} in ' .. args['name'] .. ' and only up to the corresponding bonus.' | |||
c = c .. addCategory('Heightened abilities', 'heightened', args['heightened'], skill, spell, addCats, true) | |||
end | |||
local proficiencyContent = '' | |||
if args['pro'] then | |||
proficiencyContent = proficiencyContent .. frame:preprocess(args['pro']) | |||
end | |||
local fluencyContent = '' | |||
if args['flu'] then | |||
fluencyContent = fluencyContent .. frame:preprocess(args['flu']) | |||
end | |||
local restrictionContent = '' | |||
if args['restrict'] then | |||
restrictionContent = restrictionContent .. frame:preprocess(args['restrict']) | |||
end | |||
local statValContent = '' | |||
local statFeatContent = '' | |||
if args['vstat'] and args['val'] then | |||
local vstat = frame:preprocess("{{uc:" .. args['vstat'] .. "}}") | |||
statValContent = 'This ability sets your {{L|Core|' .. vstat .. '}}' .. ' score to a minimum of ' .. args['val'] .. '.' | |||
c = c .. addCategory('Attribute setting abilities', 'val', args['val'], skill, spell, addCats, true) | |||
c = c .. addCategory(vstat .. ' setting abilities', 'vstat', args['vstat'], skill, spell, addCats, true) | |||
c = c .. addCategory(vstat .. ' value of ' .. args['val'] .. ' setting abilities', 'val', args['val'], skill, spell, addCats, true) | |||
end | |||
local f = 'proficiency' | |||
if args['fflu'] then | |||
f = 'fluency' | |||
end | |||
if args['fstat'] and (args['fflu'] or args['fpro']) then | |||
local fstat = frame:preprocess("{{uc:" .. args['fstat'] .. "}}") | |||
statFeatContent = 'This ability gives {{L|Core|' .. f .. ' Bonus|' .. f .. '}} in {{L|Core|' .. fstat .. '}} {{L|Core|Feat Interaction|Feat Saves}}.' | |||
c = c .. addCategory('Feat save improvement abilities', 'flu', args['fflu'], skill, spell, addCats) | |||
c = c .. addCategory('Feat save ' .. f .. ' granting abilities', 'fstat', args['fstat'], skill, spell, addCats, true) | |||
c = c .. addCategory(fstat .. ' feat save ' .. f .. ' granting abilities', 'fstat', args['fstat'], skill, spell, addCats, true) | |||
end | |||
if args['rotator'] and args['rotator']:len() > 0 then | |||
c = c .. addCategory('Rotator abilities', 'rotator', args['rotator'], skill, spell, addCats) | |||
end | |||
if args['gm'] then | |||
c = c .. addCategory(tags['gm'][args['gm']]['link'], 'gm', args['gm'], skill, spell, addCats) | |||
end | |||
if args['guildmaster'] then | |||
c = c .. addCategory('Guildmaster abilities', 'guildmaster', args['guildmaster'], skill, spell, addCats) | |||
end | |||
if args['style'] then | |||
c = c .. addCategory('Casting style abilities', 'style', args['style'], skill, spell, addCats) | |||
end | |||
if args['weapon'] then | |||
c = c .. addCategory('Weapon fighting style abilities', 'weapon', args['weapon'], skill, spell, addCats) | |||
end | |||
-- Remove range from self targeted abilities | |||
if resolved['target'] == 'self' or resolved['range'] == 'self' then | |||
resolved['range'] = nil | |||
end | |||
local barsTop = { | |||
-- { | |||
-- title = 'elements', | |||
-- content = frame:preprocess(elementContent) | |||
-- }, | |||
{ | |||
title = 'power sources', | |||
content = frame:preprocess(esContent .. powerContent), | |||
link = ':Category:Powered abilities' | |||
}, | |||
{ | |||
title = 'effect types', | |||
content = frame:preprocess(flawContent .. specialContent .. effectContent), | |||
link = ':Category:Effects' | |||
}, | |||
{ | |||
title = 'delivery', | |||
content = frame:preprocess(wardedContent .. deliveryContent) .. makeContent(frame, resolved, {'expansion', 'pre', 'upgrade', 'piercing', 'delivery', 'interaction'}, makeCat), | |||
link = ':Category:Delivery abilities' | |||
}, | |||
{ | |||
title = 'save attribute', | |||
content = makeContent(frame, resolved, {'attribute'}, makeCat), | |||
link = 'Core:Feat Interaction' | |||
}, | |||
{ | |||
title = 'expansion save attribute', | |||
content = makeContent(frame, resolved, {'expansionAttribute'}, makeCat), | |||
}, | }, | ||
{ | { | ||
title = ' | title = 'target', | ||
content = | content = makeContent(frame, resolved, {'target', 'hitDC'}, makeCat), | ||
link = ':Category:Target abilities' | |||
}, | }, | ||
{ | { | ||
title = 'On fail', | title = executionTimeTitle, | ||
content = args['fail'] or '' | content = makeContent(frame, resolved, {'executionTime', 'maneuver'}, makeCat), | ||
}, | link = 'Core:Maneuvers' | ||
{ | }, | ||
title = 'On | { | ||
content = args[' | title = 'trigger', | ||
}, | content = (args['trigger'] or '') .. autoContent, | ||
{ | link = 'Core:Reactive Maneuvers' | ||
title = 'On critical | }, | ||
content = args[' | { | ||
}, | title = 'cost and components', | ||
{ | content = frame:preprocess(costContent) .. makeContent(frame, resolved, {'material', 'invoked', 'verbal', 'somatic', 'magelore'}, makeCat), | ||
title = 'Attribute improvement', | link = ':Category:Cost abilities' | ||
content = frame:preprocess(statValContent) | }, | ||
}, | { | ||
{ | title = 'Mana cost', | ||
title = 'Feat save improvement', | content = args['mpx'] or '', | ||
content = frame:preprocess(statFeatContent) | link = ':Category:MP cost abilities' | ||
} | }, | ||
} | { | ||
title = 'Hit cost', | |||
local outputTop = '' | content = args['hpx'] or '', | ||
for _, bar in ipairs(barsTop) do | link = ':Category:HP cost abilities' | ||
outputTop = outputTop .. makeBar(frame, bar['title'], bar['content']) | }, | ||
end | { | ||
local outputBottom = '' | title = 'Gold cost', | ||
content = args['gpx'] or '', | |||
for _, bar in ipairs(barsBottom) do | link = ':Category:GP cost abilities' | ||
outputBottom = outputBottom .. makeBar(frame, bar['title'], bar['content']) | }, | ||
{ | |||
title = 'Material cost', | |||
content = makeContent(frame, resolved, {'matx'}, makeCat), | |||
link = ':Category:Material component abilities' | |||
}, | |||
{ | |||
title = 'duration', | |||
content = makeContent(frame, resolved, {'duration', 'sustained'}, makeCat), | |||
link = ':Category:Duration abilities' | |||
}, | |||
{ | |||
title = 'range', | |||
content = makeContent(frame, resolved, {'range'}, makeCat), | |||
link = 'Core:Range' | |||
}, | |||
-- { | |||
-- title = 'expansion', | |||
-- content = makeContent(frame, resolved, {'expansion'}, makeCat) | |||
-- }, | |||
{ | |||
title = 'expansion range', | |||
content = makeContent(frame, resolved, {'expansionRange'}, makeCat), | |||
link = 'Core:Expansions' | |||
}, | |||
{ | |||
title = 'expansion cap', | |||
content = makeContent(frame, resolved, {'expansionCount'}, makeCat), | |||
link = 'Core:Expansions' | |||
}, | |||
{ | |||
title = 'Requirements', | |||
content = makeContent(frame, resolved, {'requirement'}, makeCat) | |||
}, | |||
} | |||
local barsBottom = { | |||
{ | |||
title = 'End condition', | |||
content = args['end'] or '' | |||
}, | |||
{ | |||
title = 'On critical hit', | |||
content = args['crithit'] or '' | |||
}, | |||
{ | |||
title = 'On hit', | |||
content = args['hit'] or '' | |||
}, | |||
{ | |||
title = 'On miss', | |||
content = args['miss'] or '' | |||
}, | |||
{ | |||
title = 'On critically miss', | |||
content = args['critmiss'] or '' | |||
}, | |||
{ | |||
title = 'On critical fail', | |||
content = args['critfail'] or '' | |||
}, | |||
{ | |||
title = 'On fail', | |||
content = args['fail'] or '' | |||
}, | |||
{ | |||
title = 'On success', | |||
content = args['success'] or '' | |||
}, | |||
{ | |||
title = 'On critical success', | |||
content = args['critsuccess'] or '' | |||
}, | |||
{ | |||
title = 'Heightened', | |||
content = frame:preprocess(heightenedContent), | |||
link = ':Category:Heightened abilities' | |||
}, | |||
{ | |||
title = 'If proficient', | |||
content = proficiencyContent, | |||
link = 'Core:Proficiency Bonus' | |||
}, | |||
{ | |||
title = 'If fluent', | |||
content = fluencyContent, | |||
link = 'Core:Fluency Bonus' | |||
}, | |||
{ | |||
title = 'Attribute improvement', | |||
content = frame:preprocess(statValContent), | |||
link = 'Core:Attributes', | |||
flags = { | |||
attribute = args['vstat'] and frame:preprocess('{{lc:' .. args['vstat'] .. '}}') or "", | |||
value = args['val'] | |||
} | |||
}, | |||
{ | |||
title = 'Feat save improvement', | |||
content = frame:preprocess(statFeatContent), | |||
link = 'Core:Feat Interaction', | |||
flags = { | |||
attribute = args['fstat'] and frame:preprocess('{{lc:' .. args['fstat'] .. '}}'), | |||
value = f | |||
} | |||
}, | |||
} | |||
local outputTop = '' | |||
for _, bar in ipairs(barsTop) do | |||
outputTop = outputTop .. makeBar(frame, bar['title'], bar['content'], bar['link'], bar['flags'], false) | |||
end | |||
local outputBottom = '' | |||
for _, bar in ipairs(barsBottom) do | |||
outputBottom = outputBottom .. makeBar(frame, bar['title'], bar['content'], bar['link'], bar['flags'], true) | |||
end | |||
local outputMiddle = '' | |||
if args['e'] then | |||
outputMiddle = frame:preprocess(args['e']) | |||
end | |||
local output = mw.html.create('span') | |||
output | |||
:addClass('ability-variables') | |||
if args['basic'] then | |||
output | |||
:addClass('ability-basic') | |||
end | end | ||
output:wikitext(outputTop) | |||
output | |||
if outputMiddle ~= '' then | if outputMiddle ~= '' then | ||
output | output | ||
:wikitext('<hr>') | :wikitext('<hr>') | ||
:wikitext(outputMiddle) | :wikitext('<span class="ability-overview-base">' .. outputMiddle .. '</span>') | ||
end | end | ||
| Line 2,126: | Line 3,350: | ||
output = tostring(output) .. c | output = tostring(output) .. c | ||
output = output .. frame:preprocess('<templatestyles src="Template:Ability/styles.css" />') | |||
if not name then | if not name then | ||
output = output .. '<span style="color: red;>NO NAME PROVIDED VERY BAD EVERY ABILITY NEEDS A NAME OKAY</span>' | output = output .. '<span style="color: red;>NO NAME PROVIDED VERY BAD EVERY ABILITY NEEDS A NAME OKAY</span>' | ||
Latest revision as of 00:13, 8 August 2026
Module:A Parameter Documentation
This page details all the parameters and their aliases accepted by the Module:A Scribunto module for formatting TTRPG abilities. Call the module using:
{{#invoke:A|a|name=Example Ability|<other parameters>}}
Core Parameters
Basic Information
name- The name of the ability (required)e- The effect/description of the abilitytrigger- What triggers the ability to activate
Type Flags
skill- Flag to mark this as a skill ability- Setting a warrior or semi class will automatically set this flag to
true. This can be overridden by setting it to0orfalse.
- Setting a warrior or semi class will automatically set this flag to
spell- Flag to mark this as a spell ability- Setting a mage class will automatically set this flag to
true. This can be overridden by setting it to0orfalse.
- Setting a mage class will automatically set this flag to
standard- Flag to mark this as a standard ability- Setting a class will automatically set this flag to
true. This can be overridden by setting it to0orfalse. - Note that abilities that are provided by other class abilities are not always considered standard abilities nor abilities of that class. The main exceptions are crowns and other mage rotators.
- Setting a class will automatically set this flag to
Class Information
class- The class this ability belongs to
Supported values:bar/ber(Berserker)sam/due(Duelist)vet(Veteran)kni(Knight)pal(Paladin)ass(Assassin)ama/cor(Corsair)arc(Archer)thi(Thief)ran(Ranger)fla(Flame Mage)sto(Storm Mage)lif(Life Mage)nec(Necromancer)nat(Nature Mage)
arch- Override the default archetype for a class
Supported values:warr(Warrior)semi(Semi)mage(Mage)
rank- The rank requirement for the ability
Supported values:1(Rank 1)2(Rank 2)3(Rank 3+)
Ability Properties
Maneuver Type (maneuver/man/m)
active/ac/a- Active maneuverreactive/re/r- Reactive maneuverpassive/ps/p- Passive maneuverslow/sl/s- Slow maneuver
Execution Time (executionTime/time/et/x)
0a/freeAction/fa- Free action1a/a/singleAction/sa- Single action2a/doubleAction/da- Double action3a/tripleAction/ta- Triple action0r/freeReaction/fr- Free reaction1r/reaction/r- Reactionsr/shortRest/s- Short restlr/longRest/l- Long rest- Time duration format:
XmXhXdXwXy(minutes, hours, days, weeks, years)
Interaction Type (interaction/int/i)
attack/atk/a- Attack interactionblock/blk/b- Block interactionmanifest/man/m- Manifest interactionfeat/fea/f- Feat interaction
Delivery Method (delivery/del/d)
self/sel/s- Self deliverymissile/mis/m- Missile deliveryhand/han/h/claw- Hand deliverybite/bit/b/mouth- Bite deliveryitem/itm/i- Item deliverymagelore/mag/ml- Magelore deliveryweapon/wep/w- Weapon deliveryshield/shl/sh- Shield deliveryarmor/rmr/r- Armor deliverysight/sit/eye/e- Sight deliveryaura/aur/a- Aura deliverycone/con/c- Cone deliveryother/oth/o- Other delivery
Target Type (target/tar/t)
self/sel/s- Self targetcreature/cre/c- Creature targetbody/bod/b- Body targetvitals/vit/v- Vitals targetlimb/lim/l- Limb targetarm- Arm targetleg- Leg targetitem/itm/i- Item targetweapon/wep/w- Weapon targetshield/shl/sh- Shield targetarmor/rmr/r- Armor targetattack/atk/a- Attack targetother/oth/o- Other target
Duration (duration/dur/dr)
instant/in/i/0- Instant durationalways/forever/4/inf- Always active- Note: Use one of the aliases. Entering
alwaysis currently bugged.
- Note: Use one of the aliases. Entering
whileUp/up/u- While upwhileDown/dn/d- While downwhileAlive/al/a- While alivewhileDead/dd- While deadendOfTurn/end/e- Until end of turndawn/d- Until dawnstartOfTargetNextTurn/tStart/ts- Until start of target's next turnendOfTargetNextTurn/tEnd/te- Until end of target's next turnstartOfYourNextTurn/uStart/us- Until start of your next turnendOfYourNextTurn/uEnd/ue- Until end of your next turnendOfCombat/ec- Until end of combat- Time duration format:
XmXhXdXwXy(minutes, hours, days, weeks, years)
Sustained Flag
sustained/sus/s- Ability is sustained
Range (range/rng/r)
melee/m- Melee rangeweapon/w- Weapon rangehand/h- Hand rangebite/b- Bite rangeitem/i- Item rangeshield/sh- Shield rangearmor/a- Armor rangesight/eye/e- Sight rangeself/s- Self range- Distance format:
XforXm(feet or miles)
Attribute Saves (attribute/attr/a)
int/INT/i- Intelligence savestr/STR/s- Strength savemov/MOV/m- Movement saveper/PER/p- Perception savesnk/SNK/s- Sneak save
Expansion Type (expansion/exp)
detonate/det/d- Detonate expansionripple/rip/r- Ripple expansioncascade/cas/c- Cascade expansionfork/for/f- Fork expansion
Piercing (piercing/prc/p)
av0/a- AV0 piercingunblockable/ub/u- Unblockable
Component Flags
verbal/ver/v- Verbal componentsomatic/som/s- Somatic componentmaterial/mat/m- Material componentmagelore/mag/ml- Magelore componentinvoked/inv/i- Invoked component
Resource Costs
mp- Mana point costmpx- Variable mana point cost descriptionhp- Hit point costhpx- Variable hit point cost descriptionmatx- Material component cost description
Element Flags
life- Life elementstorm- Storm elementnecro- Necro elementflame- Flame elementnature- Nature element
Power Source Flags
magic- Magical power sourcedivine- Divine power sourcespirit- Spirit power sourceprimal- Primal power sourcemartial- Martial power sourcepsionic- Psionic power sourcetecho- Techno power source
Effect Type Flags
mental- Mental effecttruth- Truth detection effectduelMod- Duel modification effectmovement- Movement effectdisplacement- Displacement effecttransformation- Transformation effectcontrol- Control effectresist- Resistance effectimmune- Immunity effectlong- Long range effectsense- Sensory effectrevive- Revival effectsummon- Summoning effectheal- Healing effect
State Parameters
end- The condition under which the ability ends
Results Parameters
crithit- Critical hit effecthit- Hit effectmiss- Miss effectcritmiss- Critical miss effectcritfail- Critical fail effectfail- Fail effectsave- Save effectcritsave- Critical save effect
Attribute Modification
vstat- Attribute to modifyval- New minimum value for the attributefstat- Feat save attribute to modifyflu- Flag for fluency in feat savepro- Flag for proficiency in feat save
Premade Templates
The module includes several premade templates that can be used as a base for abilities:
Strike Template (pre=strike)
{
maneuver = 'active',
executionTime = '1a',
interaction = 'attack',
delivery = 'weapon',
target = 'creature',
duration = 'instant',
range = 'weapon',
}
Ray Template (pre=ray)
{
maneuver = 'active',
executionTime = '1a',
interaction = 'attack',
delivery = 'missile',
target = 'creature',
duration = 'instant',
range = '60f',
piercing = 'av0',
}
Ball Template (pre=ball)
{
maneuver = 'active',
executionTime = '1a',
interaction = 'attack',
delivery = 'missile',
target = 'creature',
duration = 'instant',
range = '30f',
piercing = 'ub',
}
Touch Template (pre=touch)
{
maneuver = 'active',
executionTime = '1a',
interaction = 'attack',
delivery = 'hand',
target = 'creature',
duration = 'instant',
range = 'hand',
piercing = 'ub',
}
Ritual Template (pre=ritual)
{
maneuver = 'slow',
executionTime = '10m',
interaction = 'manifest',
delivery = 'sight',
target = 'creature',
duration = 'instant',
range = '5f',
}
Additional Features
The module automatically handles:
- Adding AC modifiers for limb (+2), vitals (+5), and other specific targets
- Managing item interaction DCs
- Handling class archetypes and their hierarchies
- Processing time and distance formats
- Managing component requirements for invoked abilities
local p = {}
local aliases = {
keys = {
pre = {
'pre',
'premade',
},
maneuver = {
'man',
'maneuver',
'm'
},
interaction = {
'int',
'interaction',
'i'
},
delivery = {
'del',
'delivery',
'd'
},
target = {
'tar',
'target',
't'
},
duration = {
'dur',
'duration',
'dr'
},
upgrade = {
'upg',
'upgrade',
'u'
},
executionTime = {
'executionTime',
'et',
'x'
},
piercing = {
'prc',
'piercing',
'p'
},
-- nearRange = {
-- 'nearRange',
-- 'nr'
-- },
-- farRange = {
-- 'farRange',
-- 'fr'
-- },
flaw = {
'flaw',
'fl',
'f'
},
special = {
'special',
'sp',
's'
},
range = {
'range',
'rng',
'r'
},
attribute = {
'attribute',
'attr',
'a'
},
expansion = {
'expansion',
'exp',
},
expansionRange = {
'expansionRange',
'er'
},
expansionCount = {
'expansionCount',
'ec'
},
expansionAttribute = {
'expansionAttribute',
'ea'
},
sustained = {
'sustained',
'sus'
},
requirement = {
'req',
'requirement',
'rq'
},
verbal = {
'ver',
'verbal',
},
somatic = {
'som',
'somatic',
},
material = {
'mat',
'material',
},
magelore = {
'mag',
'magelore',
'ml'
},
invoked = {
'inv',
'invoked',
'invoke',
},
hp = {
'hp',
'health',
'hitpoints',
'hitPoints',
'hit points',
},
hpx = {
'hpx',
'healthx',
'hitpointsx',
'hitPointsx',
'hit pointsx',
},
mp = {
'mp',
'mana',
'magic',
'magick',
'magik',
'mana points',
'magic points',
'magick points',
'magik points',
},
mpx = {
'mpx',
'manax',
'manapointsx',
'mana pointsx',
'magic pointsx',
'magick pointsx',
'magik pointsx',
},
gp = {
'gp',
'gold',
'goldPieces',
'gold pieces',
},
gpx = {
'gpx',
'goldx',
'goldPiecesx',
'gold piecesx',
},
matx = {
'matx',
'materialx',
},
class = {
'class',
},
},
values = {
maneuver = {
active = {
'ac',
'active',
'a'
},
reactive = {
're',
'reaction',
'r'
},
passive = {
'ps',
'passive',
'p'
},
slow = {
'sl',
'slow',
's'
}
},
interaction = {
attack = {
'atk',
'attack',
'a'
},
block = {
'blk',
'block',
'b'
},
manifest = {
'man',
'manifest',
'm'
},
feat = {
'fea',
'feat',
'f'
}
},
delivery = {
self = {
'sel',
'self',
's'
},
missile = {
'mis',
'missile',
'm'
},
hand = {
'han',
'hand',
'h',
'claw'
},
bite = {
'bit',
'bite',
'b',
'mouth'
},
item = {
'itm',
'item',
'i'
},
magelore = {
'mag',
'magelore',
'ml'
},
weapon = {
'wep',
'weapon',
'w'
},
shield = {
'shl',
'shield',
'sh'
},
armor = {
'rmr',
'armor',
'r'
},
sight = {
'sit',
'sight',
'eye',
'e'
},
aura = {
'aur',
'aura',
'a'
},
cone = {
'con',
'cone',
'c'
},
other = {
'oth',
'other',
'o'
}
},
target = {
self = {
'sel',
'self',
's'
},
creature = {
'cre',
'creature',
'c'
},
body = {
'bod',
'body',
'b'
},
vitals = {
'vit',
'vitals',
'v'
},
limb = {
'lim',
'limb',
'l'
},
arm = {
'arm',
},
leg = {
'leg',
},
item = {
'itm',
'item',
'i'
},
weapon = {
'wep',
'weapon',
'w'
},
shield = {
'shl',
'shield',
'sh'
},
armor = {
'rmr',
'armor',
'r'
},
ship = {
'ship',
},
attack = {
'atk',
'attack',
'a'
},
ability = {
'ab',
'ability'
},
spell = {
'spl',
'spell',
},
other = {
'oth',
'other',
'o'
},
ci = {
'ci',
'creatureItem',
'itemCreature',
'ic'
},
ai = {
'ai',
'attackItem',
'itemAttack',
'ia'
},
area = {
'area',
'ar'
},
as = {
'areaSpell'
},
aci = {
'cia',
'iac',
'aci',
'ica',
'cai',
'aic',
'creatureItemArea',
'itemCreatureArea',
'AreaCreatureItem',
'itemAreaCreature',
'creatureAreaItem',
'AreaItemCreature',
},
ac = {
'ac',
'ca',
'areaCreature',
'creatureArea',
},
al = {
'al',
'la',
'armLeg',
'legArm',
},
cs = {
'cs',
'sc',
'creatureSelf',
'selfCreature',
},
ari = {
'ari',
'areaItem',
'itemArea',
},
arse = {
'areaSelf'
},
si = {
'selfItem',
'itemSelf'
}
},
duration = {
instant = {
'0',
'in',
'instant',
'i'
},
always = {
'always',
'forever',
'4',
'inf',
},
noLimit = {
'noLimit',
'1',
'nl',
},
whileUp = {
'up',
'whileUp',
'u'
},
whileDown = {
'dn',
'whileDown',
'd'
},
whileAlive = {
'al',
'whileAlive',
'a'
},
whileDead = {
'dd',
'whileDead',
},
endOfTurn = {
'end',
'endOfTurn',
'e'
},
dawn = {
'dawn',
'd'
},
startOfTargetNextTurn = {
'tStart',
'startOfTargetNextTurn',
'ts'
},
endOfTargetNextTurn = {
'tEnd',
'endOfTargetNextTurn',
'te'
},
startOfYourNextTurn = {
'uStart',
'startOfYourNextTurn',
'us'
},
endOfYourNextTurn = {
'uEnd',
'endOfYourNextTurn',
'ue'
},
endOfCombat = {
'endOfCombat',
'ec'
},
timeParse = {
'^%d+[mhdwys]$'
}
},
upgrade = {
warded = {
'wrd',
'warded',
'w'
},
absolute = {
'abs',
'absolute',
'a'
}
},
executionTime = {
freeAction = {
'0a',
'freeAction',
'fa'
},
singleAction = {
'1a',
'a',
'singleAction',
'sa',
},
doubleAction = {
'2a',
'doubleAction',
'da'
},
tripleAction = {
'3a',
'tripleAction',
'ta'
},
freeReaction = {
'0r',
'freeReaction',
'fr'
},
reaction = {
'1r',
'reaction',
'r'
},
shortRest = {
'sr',
'shortRest',
's'
},
longRest = {
'lr',
'longRest',
'l'
},
timeParse = {
'^%d+[mhdwy]$'
}
},
piercing = {
av0 = {
'av0',
'a'
},
unblockable = {
'ub',
'u'
}
},
range = {
melee = {
'melee',
'm'
},
weapon = {
'weapon',
'weaponReach',
'w'
},
hand = {
'hand',
'handReach',
'h'
},
bite = {
'bite',
'biteReach',
'b'
},
item = {
'item',
'itemReach',
'i'
},
shield = {
'shield',
'shieldReach',
'sh'
},
armor = {
'armor',
'armorReach',
'r'
},
sight = {
'sight',
'sightReach',
'eye',
'e'
},
self = {
'self',
's'
},
distParse = {
'^%d+[fm]$'
},
other = {
'other',
'o'
}
},
attribute = {
int = {
'int',
'INT',
'i'
},
str = {
'str',
'STR',
's'
},
mov = {
'mov',
'MOV',
'm'
},
per = {
'per',
'PER',
'p'
},
snk = {
'snk',
'SNK',
's'
},
unp = {
'unp',
'UNP',
'u'
},
},
expansionAttribute = {
int = {
'int',
'INT',
'i'
},
str = {
'str',
'STR',
's'
},
mov = {
'mov',
'MOV',
'm'
},
per = {
'per',
'PER',
'p'
},
snk = {
'snk',
'SNK',
's'
},
unp = {
'unp',
'UNP',
'u'
},
},
expansion = {
detonate = {
'det',
'detonate',
'd'
},
ripple = {
'rip',
'ripple',
'r'
},
cascade = {
'cas',
'cascade',
'c'
},
fork = {
'for',
'fork',
'f'
}
},
expansionRange = {
distParse = {
'^%d+[fm]$'
}
},
expansionCount = {
expansionCount = {
'expansionCount',
'ec',
}
},
sustained = {
sustained = {
'sus',
'sustained',
's',
'1',
}
},
verbal = {
verbal = {
'ver',
'verbal',
'v',
'1',
}
},
somatic = {
somatic = {
'som',
'somatic',
's',
'1',
}
},
material = {
material = {
'mat',
'material',
'm',
'1',
}
},
magelore = {
magelore = {
'mag',
'magelore',
'ml',
'1',
}
},
invoked = {
invoked = {
'inv',
'invoked',
'i',
'1',
}
},
class = {
ber = {
'ber',
},
due = {
'due',
},
vet = {
'vet',
},
kni = {
'kni',
},
pal = {
'pal',
},
ass = {
'ass',
},
cor = {
'cor',
},
arc = {
'arc',
},
thi = {
'thi',
},
ran = {
'ran',
},
fla = {
'fla',
},
sto = {
'sto',
},
lif = {
'lif',
},
nec = {
'nec',
},
nat = {
'nat',
},
}
}
}
local tags = {
verbal = {
verbal = {
text = 'Verbal',
link = 'Verbal component abilities',
symbol = '🗣️',
color = '#f9f06b',
class = 'component-tagged verbal'
},
},
somatic = {
somatic = {
text = 'Somatic',
link = 'Somatic component abilities',
symbol = '👐',
color = '#f9f06b',
class = 'component-tagged somatic'
},
},
material = {
material = {
text = 'Material',
link = 'Material component abilities',
symbol = '💎',
color = '#ff7800',
class = 'component-tagged material'
},
},
magelore = {
magelore = {
text = 'Magelore',
link = 'Magelore component abilities',
symbol = '🔮',
color = '#f9f06b',
class = 'component-tagged magelore'
},
},
invoked = {
invoked = {
text = 'Invoked',
link = 'Invoked abilities',
symbol = '🪄',
color = '#f9f06b',
class = 'component-tagged invoked'
},
},
flaw = {
flaw = {
text = 'Flaw',
link = 'Flaw abilities',
symbol = '❌',
color = '#e01b24',
class = 'flaw-tagged flaw'
},
},
special = {
special = {
text = 'Special',
link = 'Special abilities',
symbol = '✴️',
color = '#9141AC',
class = 'special-tagged special'
},
},
es = {
es = {
text = 'Elder Sorcery',
link = 'Elder Sorcery abilities',
symbol = '🌌',
color = '#9141AC',
class = 'elderSorcery-tagged elderSorcery'
},
},
warded = {
warded = {
text = 'Warded',
link = 'Warded abilities',
symbol = '🏮',
color = '#f9f06b',
class = 'warded-tagged warded'
},
},
elements = {
life = {
text = 'Life',
link = 'Life element abilities',
symbol = '☀️',
color = '#ffffff',
class = 'element-tagged life'
},
storm = {
text = 'Storm',
link = 'Storm element abilities',
symbol = '💧',
color = '#3584e4',
class = 'element-tagged storm'
},
necromancy = {
text = 'Necromancy',
link = 'Necromancy element abilities',
symbol = '💀',
color = '#3d3846',
class = 'element-tagged necromancy'
},
necro = {
text = 'Necromancy',
link = 'Necromancy element abilities',
symbol = '💀',
color = '#3d3846',
class = 'element-tagged necromancy'
},
flame = {
text = 'Flame',
link = 'Flame element abilities',
symbol = '🔥',
color = '#e01b24',
class = 'element-tagged flame'
},
nature = {
text = 'Nature',
link = 'Nature element abilities',
symbol = '🌱',
color = '#33d17a',
class = 'element-tagged nature'
},
},
class = {
ber = {
text = 'Berserker',
link = 'Berserker class abilities',
symbol = '🪓',
class = 'class-tagged berserker'
},
due = {
text = 'Duelist',
link = 'Duelist class abilities',
symbol = '🤺',
class = 'class-tagged duelist'
},
vet = {
text = 'Veteran',
link = 'Veteran class abilities',
symbol = '🪖',
class = 'class-tagged veteran'
},
kni = {
text = 'Knight',
link = 'Knight class abilities',
symbol = '⚔️',
class = 'class-tagged knight'
},
pal = {
text = 'Paladin',
link = 'Paladin class abilities',
symbol = '🛡️',
class = 'class-tagged paladin'
},
ass = {
text = 'Assassin',
link = 'Assassin class abilities',
symbol = '🗡️',
class = 'class-tagged assassin'
},
cor = {
text = 'Corsair',
link = 'Corsair class abilities',
symbol = '🏴☠️',
class = 'class-tagged corsair'
},
arc = {
text = 'Archer',
link = 'Archer class abilities',
symbol = '🏹',
class = 'class-tagged archer'
},
thi = {
text = 'Thief',
link = 'Thief class abilities',
symbol = '💰️',
class = 'class-tagged thief'
},
ran = {
text = 'Ranger',
link = 'Ranger class abilities',
symbol = '🐾',
class = 'class-tagged ranger'
},
fla = {
text = 'Flame Mage',
link = 'Flame Mage class abilities',
symbol = '🧙',
class = 'class-tagged flameMage'
},
sto = {
text = 'Storm Mage',
link = 'Storm Mage class abilities',
symbol = '🧙',
class = 'class-tagged stormMage'
},
lif = {
text = 'Life Mage',
link = 'Life Mage class abilities',
symbol = '🧙',
class = 'class-tagged lifeMage'
},
nec = {
text = 'Necromancer',
link = 'Necromancer class abilities',
symbol = '🧙',
class = 'class-tagged necromancer'
},
nat = {
text = 'Nature Mage',
link = 'Nature Mage class abilities',
symbol = '🧙',
class = 'class-tagged natureMage'
},
},
gm = {
warr = {
text = 'Warrior',
link = 'Warrior guildmaster abilities',
symbol = '⚔️',
class = 'archetype-tagged warrior'
},
semi = {
text = 'Semi',
link = 'Semi guildmaster abilities',
symbol = '🤹',
class = 'archetype-tagged semi'
}
},
power = {
divine = {
text = 'Divine',
link = 'Divinely powered abilities',
symbol = '🪽',
color = '#f9f06b',
class = 'power-tagged divine'
},
magic = {
text = 'Magical',
link = 'Magically powered abilities',
symbol = '✨',
color = '#9141ac',
class = 'power-tagged magical'
},
spirit = {
text = 'Spiritual',
link = 'Spiritually powered abilities',
symbol = '🪭',
color = '#9a9996',
class = 'power-tagged spiritual'
},
martial = {
text = 'Martial',
link = 'Martially powered abilities',
symbol = '💪',
color = '#ff7800',
class = 'power-tagged martial'
},
psionic = {
text = 'Psionic',
link = 'Psionically powered abilities',
symbol = '🤯',
color = '#3584e4',
class = 'power-tagged psionic'
},
primal = {
text = 'Primal',
link = 'Primally powered abilities',
symbol = '⛰️',
color = '#986a44',
class = 'power-tagged primal'
},
techno = {
text = 'Technological',
link = 'Technologically powered abilities',
symbol = '⚙️',
color = '#e01b24',
class = 'power-tagged technological'
},
finance = {
text = 'Financial',
link = 'Financially powered abilities',
symbol = '🪙',
color = '#fcc200',
class = 'power-tagged financial'
},
alchemy = {
text = 'Alchemical',
link = 'Alchemically powered abilities',
symbol = '🧪',
color = '#33d17a',
class = 'power-tagged alchemical'
},
unknown = {
text = 'Unknown',
link = 'Unknown powered abilities',
symbol = '❓',
color = '#77767b',
class = 'power-tagged unknown'
},
},
category = {
skill = {
text = 'Skill',
link = 'Skills',
symbol = '🤹',
class = 'skill'
},
spell = {
text = 'Spell',
link = 'Spells',
symbol = '✨',
class = 'spell'
},
semblant = {
text = 'Semblant',
link = 'Semblant skills',
symbol = '🎭',
class = 'standard-tagged semblant'
},
conjure = {
text = 'Conjured',
link = 'Conjured spells',
symbol = '🔮',
class = 'standard-tagged conjure'
},
standard = {
text = 'Standard',
link = 'Standard abilities',
symbol = '🏁',
class = 'standard-tagged normal'
},
rotator = {
text = 'Rotator',
link = 'Rotator abilities',
symbol = '🔄',
class = 'rotator'
},
guildmaster = {
text = 'Guildmaster',
link = 'Guildmaster abilities',
symbol = '🏅',
class = 'guildmaster'
}
},
effects = {
mental = {
text = 'Mental',
link = 'Mental effects',
symbol = '🧠',
class = 'effect-tagged mental'
},
truth = {
text = 'Truth detecting',
link = 'Truth detecting effects',
symbol = '⚖️',
class = 'effect-tagged truthDetecting'
},
duelModifying = {
text = 'Duel modifying',
link = 'Duel modifying effects',
symbol = '🤺',
class = 'effect-tagged duelModifying'
},
movement = {
text = 'Movement',
link = 'Movement effects',
symbol = '👣',
class = 'effect-tagged movement'
},
poison = {
text = 'Poison',
link = 'Poison effects',
symbol = '☠️',
class = 'effect-tagged poison'
},
displacement = {
text = 'Displacement',
link = 'Displacement effects',
symbol = '🌀',
class = 'effect-tagged displacement'
},
transformation = {
text = 'Transformation',
link = 'Transformation effects',
symbol = '🌳',
class = 'effect-tagged transformation'
},
illusion = {
text = 'Illusion',
link = 'Illusion effects',
symbol = '',
class = 'effect-tagged illusion'
},
control = {
text = 'Control',
link = 'Control effects',
symbol = '⛓️',
class = 'effect-tagged control'
},
resist = {
text = 'Resistance',
link = 'Resistance effects',
symbol = '🚫',
class = 'effect-tagged resistance'
},
hexproof = {
text = 'Hexproof',
link = 'Hexproof effects',
symbol = '🚫',
class = 'effect-tagged hexproof'
},
awaken = {
text = 'Awakening',
link = 'Awakening effects',
symbol = '🌞',
class = 'effect-tagged awakening'
},
immune = {
text = 'Immunity',
link = 'Immunity effects',
symbol = '🚫',
class = 'effect-tagged immunity'
},
hexseal = {
text = 'Hexseal',
link = 'Hexseal effects',
symbol = '🚫',
class = 'effect-tagged hexseal'
},
long = {
text = 'Long range',
link = 'Long range effects',
symbol = '📏',
class = 'effect-tagged longRange'
},
sense = {
text = 'Sensory',
link = 'Sensory effects',
symbol = '👁️',
class = 'effect-tagged sensory'
},
revive = {
text = 'Revival',
link = 'Revival effects',
symbol = '🤍',
class = 'effect-tagged revival'
},
summon = {
text = 'Summoning',
link = 'Summoning effects',
symbol = '🖤',
class = 'effect-tagged summoning'
},
heal = {
text = 'Healing',
link = 'Healing effects',
symbol = '❤️',
class = 'effect-tagged healing'
},
reanimate = {
text = 'Reanimation',
link = 'Reanimation effects',
symbol = '🩶',
class = 'effect-tagged reanimation'
},
regenerate = {
text = 'Regeneration',
link = 'Regeneration effects',
symbol = '💚',
class = 'effect-tagged regeneration'
},
revitalize = {
text = 'Revitalization',
link = 'Revitalization effects',
symbol = '🩵',
class = 'effect-tagged revitalization'
},
kill = {
text = 'Killing',
link = 'Killing effects',
symbol = '☠️',
class = 'effect-tagged killing'
},
damage = {
text = 'Damaging',
link = 'Damaging effects',
symbol = '💢',
class = 'effect-tagged damaging'
},
drain = {
text = 'Draining',
link = 'Draining effects',
symbol = '🩸',
class = 'effect-tagged draining'
},
destroy = {
text = 'Destruction',
link = 'Destruction effects',
symbol = '💥',
class = 'effect-tagged destruction'
},
contract = {
text = 'Contract',
link = 'Contract effects',
symbol = '🤝',
class = 'effect-tagged contract'
},
steal = {
text = 'Stealing',
link = 'Stealing effects',
symbol = '💰',
class = 'effect-tagged stealing'
},
loud = {
text = 'Loud',
link = 'Loud effects',
symbol = '🔊',
class = 'effect-tagged loud'
},
knockout = {
text = 'Knockout',
link = 'Knockout effects',
symbol = '💤',
class = 'effect-tagged knockout'
},
time = {
text = 'Temporal',
link = 'Temporal effects',
symbol = '🕰️',
class = 'effect-tagged temporal'
},
auto = {
text = 'Automatic',
link = 'Automatic effects',
symbol = '❗️',
class = 'effect-tagged automatic'
},
lightning = {
text = 'Lightning',
link = 'Lightning effects',
symbol = '⚡️',
class = 'effect-tagged lightning'
},
disease = {
text = 'Disease',
link = 'Disease effects',
symbol = '🦠',
class = 'effect-tagged disease'
},
vision = {
text = 'Vision',
link = 'Vision effects',
symbol = '🥠',
class = 'effect-tagged vision'
},
morganti = {
text = 'Morganti',
link = 'Morganti effects',
symbol = '⚫️',
class = 'effect-tagged morganti'
},
construction = {
text = 'Construction',
link = 'Construction effects',
symbol = '🔧',
class = 'effect-tagged construction'
},
weather = {
text = 'Weather',
link = 'Weather effects',
symbol = '🌧️',
class = 'effect-tagged weather'
}
},
pre = {
strike = {
text = 'Strike',
link = 'Strike delivery abilities',
symbol = '⚔️',
class = 'deliveryPackage-tagged strike'
},
ray = {
text = 'Ray',
link = 'Ray delivery abilities',
symbol = '⚡️',
class = 'deliveryPackage-tagged ray'
},
ball = {
text = 'Ball',
link = 'Ball delivery abilities',
symbol = '🔥',
class = 'deliveryPackage-tagged ball'
},
aura = {
text = 'Aura',
link = 'Aura delivery abilities',
symbol = '🌟',
class = 'deliveryPackage-tagged aura'
},
ritual = {
text = 'Ritual',
link = 'Ritual delivery abilities',
symbol = '🕯️',
class = 'deliveryPackage-tagged ritual'
},
touch = {
text = 'Touch',
link = 'Touch delivery abilities',
symbol = '👉️',
class = 'deliveryPackage-tagged touch'
},
},
maneuver = {
active = {
text = 'Active',
link = 'Active abilities',
symbol = '➡️',
class = 'maneuver-tagged active'
},
reactive = {
text = 'Reactive',
link = 'Reactive abilities',
symbol = '↩️',
class = 'maneuver-tagged reactive'
},
passive = {
text = 'Passive',
link = 'Passive abilities',
symbol = '🔁',
class = 'maneuver-tagged passive'
},
slow = {
text = 'Slow',
link = 'Slow abilities',
symbol = '🐢',
class = 'maneuver-tagged slow'
},
},
interaction = {
attack = {
text = 'Attack',
link = 'Attack abilities',
symbol = '⚔️',
color = '#ff7800',
class = 'interaction-tagged attack'
},
block = {
text = 'Block',
link = 'Block abilities',
symbol = '🛡️',
color = '#ff7800',
class = 'interaction-tagged block'
},
manifest = {
text = 'Manifest',
link = 'Manifest abilities',
symbol = '✳️',
color = '#ff7800',
class = 'interaction-tagged manifest'
},
feat = {
text = 'Feat',
link = 'Feat abilities',
symbol = '🎖️',
color = '#ff7800',
class = 'interaction-tagged feat'
}
},
delivery = {
self = {
text = 'Self',
link = 'Self delivery abilities',
symbol = '🤲',
color = '#f6d32d',
class = 'delivery-tagged self'
},
missile = {
text = 'Missile',
link = 'Missile delivery abilities',
symbol = '🏹',
color = '#f6d32d',
class = 'delivery-tagged missile'
},
hand = {
text = 'Hand',
link = 'Hand delivery abilities',
symbol = '🤚',
color = '#f6d32d',
class = 'delivery-tagged hand'
},
bite = {
text = 'Bite',
link = 'Bite delivery abilities',
symbol = '🦷',
color = '#f6d32d',
class = 'delivery-tagged bite'
},
item = {
text = 'Item',
link = 'Item delivery abilities',
symbol = '📦',
color = '#f6d32d',
class = 'delivery-tagged item'
},
magelore = {
text = 'Magelore',
link = 'Magelore delivery abilities',
symbol = '🔮',
color = '#f6d32d',
class = 'delivery-tagged magelore'
},
weapon = {
text = 'Weapon',
link = 'Weapon delivery abilities',
symbol = '🗡️',
color = '#f6d32d',
class = 'delivery-tagged weapon'
},
shield = {
text = 'Shield',
link = 'Shield delivery abilities',
symbol = '🛡️',
color = '#f6d32d',
class = 'delivery-tagged shield'
},
armor = {
text = 'Armor',
link = 'Armor delivery abilities',
symbol = '🪖',
color = '#f6d32d',
class = 'delivery-tagged armor'
},
sight = {
text = 'Sight',
link = 'Sight delivery abilities',
symbol = '👁️',
color = '#f6d32d',
class = 'delivery-tagged sight'
},
aura = {
text = 'Aura',
link = 'Aura delivery abilities',
symbol = '🌟',
color = '#f6d32d',
class = 'delivery-tagged aura'
},
cone = {
text = 'Cone',
link = 'Cone delivery abilities',
symbol = '🐲',
color = '#f6d32d',
class = 'delivery-tagged cone'
},
other = {
text = 'Other',
link = 'Other delivery abilities',
symbol = '❓',
color = '#f6d32d',
class = 'delivery-tagged other'
}
},
target = {
self = {
text = 'Self',
link = 'Self target abilities',
symbol = '🤲',
color = '#f6d32d',
class = 'target-tagged self'
},
creature = {
text = 'Creature',
link = 'Creature target abilities',
symbol = '👤',
color = '#f6d32d',
class = 'target-tagged creature'
},
body = {
text = 'Body',
link = 'Body target abilities',
symbol = '🧍',
color = '#f6d32d',
class = 'target-tagged body'
},
vitals = {
text = 'Vitals',
link = 'Vitals target abilities',
symbol = '🫀',
color = '#f6d32d',
class = 'target-tagged vitals'
},
limb = {
text = 'Limb',
link = 'Limb target abilities',
symbol = '🦾',
color = '#f6d32d',
class = 'target-tagged limb'
},
arm = {
text = 'Arm',
link = 'Arm target abilities',
symbol = '💪',
color = '#f6d32d',
class = 'target-tagged arm'
},
leg = {
text = 'Leg',
link = 'Leg target abilities',
symbol = '🦵',
color = '#f6d32d',
class = 'target-tagged leg'
},
item = {
text = 'Item',
link = 'Item target abilities',
symbol = '📦',
color = '#f6d32d',
class = 'target-tagged item'
},
weapon = {
text = 'Weapon',
link = 'Weapon target abilities',
symbol = '🗡️',
color = '#f6d32d',
class = 'target-tagged weapon'
},
shield = {
text = 'Shield',
link = 'Shield target abilities',
symbol = '🛡️',
color = '#f6d32d',
class = 'target-tagged shield'
},
armor = {
text = 'Armor',
link = 'Armor target abilities',
symbol = '🪖',
color = '#f6d32d',
class = 'target-tagged armor'
},
ship = {
text = 'Ship',
link = 'Ship target abilities',
symbol = '⛵️',
color = '#f6d32d',
class = 'target-tagged ship'
},
attack = {
text = 'Attack',
link = 'Attack target abilities',
symbol = '⚔️',
color = '#f6d32d',
class = 'target-tagged attack'
},
ability = {
text = 'Ability',
link = 'Ability target abilities',
symbol = '🅰',
color = '#f6d32d',
class = 'target-tagged ability'
},
spell = {
text = 'Spell',
link = 'Spell target abilities',
symbol = '💫',
color = '#f6d32d',
class = 'target-tagged spell'
},
other = {
text = 'Other',
link = 'Other target abilities',
symbol = '❓',
color = '#f6d32d',
class = 'target-tagged other'
},
area = {
text = 'Area',
link = 'Area target abilities',
symbol = '🏕️',
color = '#f6d32d',
class = 'target-tagged area'
},
ci = {
tags = {
'creature',
'item'
}
},
ai = {
tags = {
'attack',
'item'
}
},
ari = {
tags = {
'area',
'item'
}
},
as = {
tags = {
'area',
'spell',
}
},
arse = {
tags = {
'area',
'self',
}
},
si = {
tags = {
'item',
'self'
}
},
aci = {
tags = {
'area',
'creature',
'item',
}
},
ac = {
tags = {
'area',
'creature',
}
},
al = {
tags = {
'arm',
'leg',
}
},
cs = {
tags = {
'creature',
'self',
}
},
},
upgrade = {
warded = {
text = 'Warded',
link = 'Warded abilities',
class = 'upgrade-tagged warded'
},
absolute = {
text = 'Absolute',
link = 'Absolute abilities',
class = 'upgrade-tagged absolute'
}
},
executionTime = {
freeAction = {
text = 'Free action',
symbol = '0️⃣',
link = 'Free action abilities',
class = 'executionTime-tagged a0'
},
singleAction = {
text = 'Single action',
symbol = '1️⃣',
link = 'Single action abilities',
class = 'executionTime-tagged a1'
},
doubleAction = {
text = 'Double action',
symbol = '2️⃣',
link = 'Double action abilities',
class = 'executionTime-tagged a2'
},
tripleAction = {
text = 'Triple action',
symbol = '3️⃣',
link = 'Triple action abilities',
class = 'executionTime-tagged a3'
},
freeReaction = {
text = 'Free reaction',
symbol = '0️⃣',
link = 'Free reaction abilities',
class = 'executionTime-tagged r0'
},
reaction = {
text = 'Reaction',
symbol = '1️⃣',
link = 'Reaction abilities',
class = 'executionTime-tagged r1'
},
shortRest = {
text = 'Short rest',
symbol = '🌙',
link = 'Short rest abilities',
class = 'executionTime-tagged shortRest'
},
longRest = {
text = 'Long rest',
symbol = '🌙',
link = 'Long rest abilities',
class = 'executionTime-tagged longRest'
},
},
piercing = {
av0 = {
text = 'AV0',
symbol = '🎯',
link = 'AV0 abilities',
color = '#33d17a',
class = 'piercing-tagged av0'
},
unblockable = {
text = 'UB',
symbol = '🪨',
link = 'UB abilities',
color = '#33d17a',
class = 'piercing-tagged ub'
}
},
duration = {
instant = {
text = 'Instant',
link = 'Instant duration abilities',
no = true
},
always = {
text = 'Always active',
link = 'Always active duration abilities',
no = true
},
noLimit = {
text = 'No limit',
link = 'No limit duration abilities',
no = true
},
whileUp = {
text = 'While up',
link = 'While up duration abilities',
no = true
},
whileDown = {
text = 'While down',
link = 'While down duration abilities',
no = true
},
whileAlive = {
text = 'While alive',
link = 'While alive duration abilities',
no = true
},
whileDead = {
text = 'While dead',
link = 'While dead duration abilities',
no = true
},
endOfTurn = {
text = 'Until the end of the turn',
link = 'Until end of turn duration abilities',
no = true
},
dawn = {
text = 'Until dawn',
link = 'Until dawn duration abilities',
no = true
},
startOfTargetNextTurn = {
text = 'Until the start of target\'s next turn',
link = 'Until start of target\'s next turn duration abilities',
no = true
},
endOfTargetNextTurn = {
text = 'Until the end of target\'s next turn',
link = 'Until end of target\'s next turn duration abilities',
no = true
},
startOfYourNextTurn = {
text = 'Until the start of your next turn',
link = 'Until start of your next turn duration abilities',
no = true
},
endOfYourNextTurn = {
text = 'Until the end of your next turn',
link = 'Until end of your next turn duration abilities',
no = true
},
endOfCombat = {
text = 'Until the end of combat',
link = 'Until end of combat duration abilities',
no = true
}
},
range = {
melee = {
text = 'Your melee range',
-- link = 'Melee abilities',
no = true
},
weapon = {
text = 'Your [[:Category:Weapons|weapon\'s]] range',
-- link = 'Weapon range abilities',
no = true
},
hand = {
text = 'Your [[:Category:Handy equipment|hand\'s]] range',
-- link = 'Hand range abilities',
no = true
},
bite = {
text = 'Your [[:Category:Biting equipment|bite\'s]] range',
-- link = 'Bite range abilities',
no = true
},
item = {
text = 'Your [[:Category:Items|item\'s]] range',
-- link = 'Item range abilities',
no = true
},
shield = {
text = 'Your [[:Category:Shields|shield\'s]] range',
-- link = 'Shield range abilities',
no = true
},
armor = {
text = 'Your [[:Category:Armor|armor\'s]] range',
-- link = 'Armor range abilities',
no = true
},
},
attribute = {
int = {
text = 'Intelligence',
symbol = 'INT',
link = 'INT save abilities',
class = 'saveAttribute-tagged int'
},
str = {
text = 'Strength',
symbol = 'STR',
link = 'STR save abilities',
class = 'saveAttribute-tagged str'
},
mov = {
text = 'Movement',
symbol = 'MOV',
link = 'MOV save abilities',
class = 'saveAttribute-tagged mov'
},
per = {
text = 'Perception',
symbol = 'PER',
link = 'PER save abilities',
class = 'saveAttribute-tagged per'
},
snk = {
text = 'Sneak',
symbol = 'SNK',
link = 'SNK save abilities',
class = 'saveAttribute-tagged snk'
},
unp = {
text = 'Unused Presence',
symbol = 'UNP',
link = 'UNP save abilities',
class = 'saveAttribute-tagged unp'
},
},
expansionAttribute = {
int = {
text = 'Intelligence',
symbol = 'INT',
link = 'INT save abilities',
class = 'expansionAttribute-tagged int'
},
str = {
text = 'Strength',
symbol = 'STR',
link = 'STR save abilities',
class = 'expansionAttribute-tagged str'
},
mov = {
text = 'Movement',
symbol = 'MOV',
link = 'MOV save abilities',
class = 'expansionAttribute-tagged mov'
},
per = {
text = 'Perception',
symbol = 'PER',
link = 'PER save abilities',
class = 'expansionAttribute-tagged per'
},
snk = {
text = 'Sneak',
symbol = 'SNK',
link = 'SNK save abilities',
class = 'expansionAttribute-tagged snk'
},
unp = {
text = 'Unused Presence',
symbol = 'UNP',
link = 'UNP save abilities',
class = 'expansionAttribute-tagged unp'
},
},
expansion = {
detonate = {
text = 'Detonate',
symbol = '💥',
link = 'Detonate expansion abilities',
class = 'expansion-tagged detonate'
},
ripple = {
text = 'Ripple',
symbol = '🌊',
link = 'Ripple expansion abilities',
class = 'expansion-tagged ripple'
},
cascade = {
text = 'Cascade',
symbol = '➰',
link = 'Cascade expansion abilities',
class = 'expansion-tagged cascade'
},
fork = {
text = 'Fork',
symbol = '🔱',
link = 'Fork expansion abilities',
class = 'expansion-tagged fork'
}
},
sustained = {
sustained = {
text = 'Sustained',
symbol = '⏳️',
link = 'Sustained abilities',
class = 'sustained'
}
}
}
local premades = {
strike = {
maneuver = 'active',
executionTime = '1a',
interaction = 'attack',
delivery = 'weapon',
target = 'creature',
duration = 'instant',
range = 'weapon',
},
ray = {
maneuver = 'active',
executionTime = '1a',
interaction = 'attack',
delivery = 'missile',
target = 'creature',
duration = 'instant',
range = '60f',
piercing = 'av0',
},
ball = {
maneuver = 'active',
executionTime = '1a',
interaction = 'attack',
delivery = 'missile',
target = 'creature',
duration = 'instant',
range = '30f',
piercing = 'ub',
},
aura = {
skip = true,
maneuver = 'active',
executionTime = '1a',
interaction = 'feat',
delivery = 'aura',
target = 'creature',
duration = 'instant',
range = '10f',
attribute = 'mov',
},
ritual = {
maneuver = 'slow',
executionTime = '10m',
interaction = 'manifest',
delivery = 'sight',
target = 'creature',
duration = 'instant',
range = '5f',
},
touch = {
maneuver = 'active',
executionTime = '1a',
interaction = 'attack',
delivery = 'hand',
target = 'creature',
duration = 'instant',
range = 'hand',
piercing = 'ub',
},
triumph = {
skip = true,
maneuver = 'reactive',
executionTime = '0r',
interaction = 'manifest',
delivery = 'self',
target = 'self',
duration = 'instant',
range = 'self',
},
self = {
skip = true,
maneuver = 'active',
executionTime = '1a',
interaction = 'man',
delivery = 'self',
target = 'self',
duration = 'instant',
range = 'self',
},
passive = {
skip = true,
maneuver = 'passive',
interaction = 'man',
delivery = 'self',
target = 'self',
duration = '4',
range = 'self',
},
crown = {
skip = true,
maneuver = 'active',
executionTime = '1a',
interaction = 'man',
delivery = 'self',
target = 'self',
duration = '8h',
range = 'self',
sustained = 'sus',
}
}
function noPlural(word)
-- Common irregular plural forms
local irregulars = {
["children"] = "child",
["men"] = "man",
["women"] = "woman",
["feet"] = "foot",
["teeth"] = "tooth",
["mice"] = "mouse",
["geese"] = "goose"
}
-- Check for irregular forms
if irregulars[word] then
return irregulars[word]
end
-- Regular pluralization rules
if word:match("ies$") then
-- Change words ending in 'ies' to 'y' (e.g., "parties" -> "party")
return word:sub(1, -4) .. "y"
elseif word:match("ves$") then
-- Change words ending in 'ves' to 'f' or 'fe' (e.g., "wolves" -> "wolf")
return word:sub(1, -4) .. "f"
elseif word:match("s$") and not word:match("ss$") then
-- Remove trailing 's' (e.g., "cats" -> "cat", but keep "boss")
return word:sub(1, -2)
else
-- Return the word unchanged if no pluralization rule applies
return word
end
end
local function addCategory(category, key, val, skill, spell, addCats, noLower)
if addCats then
if not noLower then
category = category:lower()
end
if tags[key] and tags[key][val] then
if tags[key][val].tags then
out = ''
for _, t in ipairs(tags[key][val].tags) do
out = out .. addCategory(category, key, t, skill, spell, addCats, true)
end
return out
else
category = tags[key][val].link
end
end
if skill then
skillCategory = category:gsub('ability', 'skill'):gsub('abilities', 'skills')
skillCategory = skillCategory:gsub("^%l", string.upper)
end
if spell then
spellCategory = category:gsub('ability', 'spell'):gsub('abilities', 'spells')
spellCategory = spellCategory:gsub("^%l", string.upper)
end
category = category:gsub("^%l", string.upper)
local c = '[[Category:' .. tostring(category) .. ']]'
if skill then
c = c .. '[[Category:' .. tostring(skillCategory) .. ']]'
end
if spell then
c = c .. '[[Category:' .. tostring(spellCategory) .. ']]'
end
return c
else
return ''
end
end
local function makeTag(frame, key, value, makeCat, transparent)
if not tags[key] or not tags[key][value] then
if value then
local out = frame:preprocess("{{ucfirst:" .. tostring(value) .. "}}")
if not ('.' == out:sub(-1)) then
out = out .. '.'
end
return out
else
return ''
end
end
local tag = tags[key][value]
if tag.no then
local out = frame:preprocess("{{ucfirst:" .. tag.text .. "}}")
if not ('.' == out:sub(-1)) then
out = out .. '.'
end
return out
end
if tag.tags then
local out = ''
for _, t in ipairs(tag.tags) do
out = out .. makeTag(frame, key, t, makeCat, transparent)
end
return out
end
local tagText = "{{Tag|{{ucfirst:" .. tag.text .. "}}"
if tag.symbol then
tagText = tagText .. "|" .. tag.symbol
end
if tag.link then
tagText = tagText .. "|l=:Category:{{ucfirst:" .. tag.link .. "}}"
end
if tag.color then
tagText = tagText .. "|c=" .. tag.color
end
if tag.class then
tagText = tagText .. "|class=" .. tag.class
end
if transparent then
tagText = tagText .. "|o=1"
end
tagText = tagText .. "}}"
-- out = frame:preprocess(tagText)
out = tagText
return out
end
local function makeContent(frame, table, keys, makeCat)
local content = ''
local subContent = ''
local hasPre = false
for _, key in ipairs(keys) do
if ('pre' == key and table['pre']) or ('executionTime' == key and table['executionTime']) or ('target' == key) or ('duration' == key) or ('invoked' == key and table['invoked']) then
hasPre = true
content = content .. frame:preprocess(makeTag(frame, key, table[key], makeCat))
else
if hasPre then
subContent = subContent .. makeTag(frame, key, table[key], makeCat)
else
content = content .. frame:preprocess(makeTag(frame, key, table[key], makeCat))
end
end
end
if hasPre then
content = content .. frame:preprocess('{{TagSub|' .. subContent .. '}}')
-- content = content .. '{{TagSub|' .. subContent .. '}}'
end
if content == '' then
for _, key in ipairs(keys) do
if table[key] then
content = frame:preprocess('{{ucfirst:' .. content .. table[key] .. '}}')
end
end
end
return content
end
local function makeBar(frame, title, content, link, flags, bottom)
if content == '' then
return ''
end
local barSpace = mw.html.create('span')
barSpace
:wikitext(frame:preprocess(' '))
:css('display', 'none')
local barTitle = mw.html.create('span')
local barTitleClass = title:lower()
barTitleClass = barTitleClass:gsub(' ', '-')
barTitleClass = barTitleClass:gsub('\'', '')
barTitleClass = barTitleClass:gsub('\"', '')
local barText = "{{ucfirst:" .. title .. "}}"
if link then
barText = "[[" .. link .. "|" .. barText .. "]]"
end
barText = barText .. ":"
barTitle
:addClass('ability-bar-title')
:wikitext(frame:preprocess(barText))
:css('font-weight', 'bold')
:css('margin-right', '0.5em')
local barContent = mw.html.create('span')
barContent
:addClass('ability-bar-content')
:wikitext(content)
local output = mw.html.create('div')
if bottom then
output = mw.html.create('span')
end
if not flags then
flags = {}
end
for k, v in pairs(flags) do
if type(v) == 'string' then
output:addClass('flag-' .. k .. '-' .. v)
end
end
output
:addClass('ability-bar')
:addClass('ability-bar-' .. barTitleClass)
:attr(flags)
:attr('test', 'out')
:node(barSpace)
:node(barTitle)
:node(barSpace)
:node(barContent)
:css('display', 'block')
-- if flags then
-- for k, v in ipairs(flags) do
-- output:attr(k, v)
-- end
-- end
return tostring(output)
end
local function resolveAlias(args, aliases)
local resolved = {}
-- Resolve keys
for canonicalKey, keyAliasList in pairs(aliases.keys) do
for _, alias in ipairs(keyAliasList) do
if args[alias] then
resolved[canonicalKey] = args[alias]
break
end
end
end
-- Resolve values
for canonicalKey, canonicalValueTable in pairs(aliases.values) do
local rawValue = resolved[canonicalKey]
if rawValue then
for canonicalValue, valueAliasList in pairs(canonicalValueTable) do
for _, alias in ipairs(valueAliasList) do
if rawValue == '' then
resolved[canonicalKey] = false
break
elseif rawValue == alias then
resolved[canonicalKey] = canonicalValue
break
-- Handle patterns like timeParse or distParse
elseif rawValue and type(valueAliasList) == "table" and valueAliasList[1] and rawValue:match(valueAliasList[1]) then
if canonicalKey == "duration" or canonicalKey == "executionTime" then
-- Parse time duration (e.g., 5d -> "5 days")
local num = tonumber(rawValue:match("^(%d+)"))
local unit = rawValue:match("[%a]+$")
local unitMap = {m = "minute", h = "hour", d = "day", w = "week", y = "year", r = "round", s = "second"}
if unitMap[unit] then
local parsedValue = num .. " " .. unitMap[unit] .. (num > 1 and "s" or "")
resolved[canonicalKey] = parsedValue
else
resolved[canonicalKey] = rawValue
end
elseif canonicalKey == "range" or canonicalKey == "expansionRange" then
-- Parse distance (e.g., 30f -> "30 feet")
local num = tonumber(rawValue:match("^(%d+)"))
local unit = rawValue:match("[%a]+$")
local unitMap = {f = "feet", m = "miles"}
if unitMap[unit] then
local parsedValue = num .. " " .. unitMap[unit]
resolved[canonicalKey] = parsedValue
else
resolved[canonicalKey] = rawValue
end
end
end
end
end
end
end
return resolved
end
local function exists(arg)
return arg ~= nil and arg ~= '' and arg ~= false
end
local classFixes = {
bar = 'ber',
sam = 'due',
ama = 'cor'
}
local classArchetypes = {
ber = 'warr',
due = 'warr',
vet = 'warr',
kni = 'warr',
pal = 'warr',
ass = 'semi',
cor = 'semi',
arc = 'semi',
thi = 'semi',
ran = 'semi',
fla = 'mage',
sto = 'mage',
lif = 'mage',
nec = 'mage',
nat = 'mage'
}
local className = {
ber = 'Berserker',
due = 'Duelist',
vet = 'Veteran',
kni = 'Knight',
pal = 'Paladin',
ass = 'Assassin',
cor = 'Corsair',
arc = 'Archer',
thi = 'Thief',
ran = 'Ranger',
fla = 'Flame Mage',
sto = 'Storm Mage',
lif = 'Life Mage',
nec = 'Necromancer',
nat = 'Nature Mage',
}
local archetypeName = {
warr = 'Warrior',
semi = 'Semi',
mage = 'Mage',
}
function p.a ( frame )
makeCat = true
-- Figure out all the default values
local args = frame.args
local resolved = {}
if args['pre'] then
local toResolve = resolveAlias(premades[args['pre']], aliases)
for k, v in pairs(toResolve) do
resolved[k] = v
end
end
local userResolve = resolveAlias(args, aliases)
for k, v in pairs(userResolve) do
resolved[k] = v
end
if resolved['pre'] and premades[args['pre']]['skip'] then
resolved['pre'] = nil
end
if not resolved['duration'] then
resolved['duration'] = 'instant'
end
if resolved['interaction'] == 'attack' then
local dc = "Hit target's {{AC}}"
if resolved['target'] == 'limb' then
dc = "Hit target's {{Var:ACLimb}}"
end
if resolved['target'] == 'al' then
dc = "Hit target's {{Var:ACLimb}}"
end
if resolved['target'] == 'arm' then
dc = "Hit target's {{Var:ACLimb}}"
end
if resolved['target'] == 'leg' then
dc = "Hit target's {{Var:ACLimb}}"
end
if resolved['target'] == 'vitals' then
dc = "Hit target's {{Var:ACVitals}}"
end
if resolved['target'] == 'item' or resolved['target'] == 'ari' then
dc = "Hit {{DC}} [[Core:Item Target|depends on item]]"
end
if resolved['target'] == 'shield' then
dc = "Hit user's {{Var:ACWielded}}"
end
if resolved['target'] == 'armor' then
dc = "Hit user's {{Var:ACWorn}}"
end
if resolved['target'] == 'weapon' then
dc = "Hit user's {{Var:ACWielded}}"
end
resolved['hitDC'] = dc
end
if resolved['expansionCount'] then
if resolved['expansionCount'] == '1' then
resolved['expansionCount'] = '{{Space}}' .. resolved['expansionCount'] .. ' extra execution.'
else
resolved['expansionCount'] = '{{Space}}' .. resolved['expansionCount'] .. ' extra executions.'
end
end
if resolved['invoked'] then
resolved['verbal'] = 'verbal'
resolved['somatic'] = 'somatic'
resolved['mage'] = 'magelore'
end
local skill = false
local spell = false
local standard = false
local class = nil
local classFull = nil
local archetype = nil
local archetypeFull = nil
local rank = nil
if args['class'] then
class = args['class']
if classFixes[class] then
class = classFixes[class]
end
end
if args['class'] or args['arch'] then
archetype = classArchetypes[class]
if args['arch'] then
archetype = args['arch']
end
classFull = className[class]
archetypeFull = archetypeName[archetype]
standard = true
if archetype == 'warr' or archetype == 'semi' then
skill = true
end
if archetype == 'mage' then
spell = true
end
end
local costMP = nil
local costHP = nil
local costGP = nil
if args['pre'] == 'crown' then
spell = true
costMP = '1'
rank = '2'
end
if args['rank'] then
rank = args['rank']
end
if args['skill'] then
skill = true
if args['skill'] == '0' or args['skill'] == 'false' then
skill = false
end
end
if args['spell'] then
spell = true
if args['spell'] == '0' or args['spell'] == 'false' then
spell = false
end
end
if args['standard'] then
standard = true
if args['standard'] == '0' or args['standard'] == 'false' then
standard = false
end
end
if args['mp'] and args['mp']:len() > 0 then
costMP = args['mp']
end
if args['hp'] and args['hp']:len() > 0 then
costHP = args['hp']
end
if args['gp'] and args['gp']:len() > 0 then
costGP = args['gp']
end
if exists(args['shatter']) then
costShatter = args['shatter']
end
local basic = false
local journeyman = false
if args['basic'] then
basic = true
end
if args['journeyman'] or args['jm'] then
journeyman = true
end
-- Category string
local c = ''
local name = args['name']
local page = mw.title.getCurrentTitle().text
local namespace = frame:preprocess('{{NAMESPACE}}')
local addCats = ((namespace == 'Ability') and (page == name))
c = c .. addCategory('Abilities', nil, nil, skill, spell, addCats)
if basic then
c = c .. addCategory('Basic abilities', 'basic', nil, skill, spell, addCats)
end
if journeyman then
c = c .. addCategory('Journeyman abilities', 'journeyman', nil, skill, spell, addCats)
end
local esContent = ''
if args['es'] and args['es']:len() > 0 then
esContent = esContent .. makeTag(frame, 'es', 'es', makeCat)
c = c .. addCategory('Elder Sorcery abilities', 'es', 'es', skill, spell, addCats)
else
if spell then
standard = '1'
end
end
if standard then
c = c .. addCategory('Standard abilities', nil, nil, false, false, addCats)
if skill then
c = c .. addCategory('Semblant skills', nil, nil, skill, spell, addCats)
end
if spell then
c = c .. addCategory('Conjured spells', nil, nil, skill, spell, addCats)
end
else
c = c .. addCategory('Nonstandard abilities', nil, nil, skill, spell, addCats)
end
if args['ethereal'] then
c = c .. addCategory('Ethereal abilities', nil, nil, skill, spell, addCats)
end
if args['av'] then
c = c .. addCategory('AV granting abilities', nil, nil, skill, spell, addCats, true)
c = c .. addCategory('AV' .. args['av'] .. ' granting abilities', nil, nil, skill, spell, addCats, true)
end
if (archetype and archetypeFull) then
c = c .. addCategory(archetypeFull .. ' archetype abilities', 'archetype', archetype, skill, spell, addCats)
end
if (class and classFull) then
c = c .. addCategory(classFull .. ' class abilities', 'class', class, skill, spell, addCats, true)
end
if (rank and (class and classFull)) then
if rank == '3' then
rank = '3+'
end
c = c .. addCategory('Rank ' .. rank .. ' ' .. classFull .. ' abilities', 'rank', rank, skill, spell, addCats, true)
end
if resolved['pre'] then
c = c .. addCategory(resolved['pre'] .. 'abilities', 'pre', resolved['pre'], skill, spell, addCats)
end
if resolved['interaction'] then
c = c .. addCategory(resolved['interaction'] .. ' interaction abilities', 'interaction', resolved['interaction'], skill, spell, addCats)
end
if resolved['delivery'] then
c = c .. addCategory(resolved['delivery'] .. ' delivery abilities', 'delivery', resolved['delivery'], skill, spell, addCats)
end
if resolved['target'] then
c = c .. addCategory(resolved['target'] .. ' target abilities', 'target', resolved['target'], skill, spell, addCats)
end
if resolved['duration'] then
c = c .. addCategory(noPlural(resolved['duration']) .. ' duration abilities', 'duration', resolved['duration'], skill, spell, addCats)
end
-- if resolved['range'] then
-- c = c .. addCategory(resolved['range'] .. ' range abilities', 'range', resolved['range'], skill, spell, addCats)
-- end
if resolved['expansion'] then
c = c .. addCategory(resolved['expansion'] .. ' expansion abilities', 'expansion', resolved['expansion'], skill, spell, addCats)
end
-- if resolved['expansionRange'] then
-- c = c .. addCategory(resolved['expansionRange'] .. ' expansion range abilities', 'expansionRange', resolved['expansionRange'], skill, spell, addCats)
-- end
if resolved['attribute'] then
c = c .. addCategory(resolved['attribute'] .. ' save abilities', 'attribute', resolved['attribute'], skill, spell, addCats)
end
if resolved['piercing'] then
c = c .. addCategory(resolved['piercing'] .. ' abilities', 'piercing', resolved['piercing'], skill, spell, addCats)
end
if resolved['sustained'] then
c = c .. addCategory('Sustained abilities', 'sustained', resolved['sustained'], skill, spell, addCats)
end
if resolved['upgrade'] then
c = c .. addCategory(resolved['upgrade'] .. ' abilities', 'upgrade', resolved['upgrade'], skill, spell, addCats)
end
if resolved['executionTime'] then
c = c .. addCategory(noPlural(resolved['executionTime']) .. ' execution time abilities', 'executionTime', resolved['executionTime'], skill, spell, addCats)
end
if resolved['maneuver'] then
c = c .. addCategory(resolved['maneuver'] .. ' abilities', 'maneuver', resolved['maneuver'], skill, spell, addCats)
end
if resolved['verbal'] then
c = c .. addCategory('Verbal component abilities', 'verbal', resolved['verbal'], skill, spell, addCats)
end
if resolved['somatic'] then
c = c .. addCategory('Somatic component abilities', 'somatic', resolved['somatic'], skill, spell, addCats)
end
if resolved['material'] then
c = c .. addCategory('Material component abilities', 'material', resolved['material'], skill, spell, addCats)
end
if resolved['magelore'] then
c = c .. addCategory('Magelore component abilities', 'magelore', resolved['magelore'], skill, spell, addCats)
end
if resolved['invoked'] then
c = c .. addCategory('Invoke abilities', 'invoked', resolved['invoked'], skill, spell, addCats)
end
local flawContent = ''
if args['flaw'] or args['f'] or args['fl'] then
flawContent = flawContent .. makeTag(frame, 'flaw', 'flaw', makeCat)
c = c .. addCategory('Flaw abilities', 'flaw', 'flaw', skill, spell, addCats)
end
local specialContent = ''
if args['special'] or args['s'] or args['sp'] and ((args['special']:len() > 0) or (args['s']:len() > 0) or (args['sp']:len() > 0)) then
specialContent = specialContent .. makeTag(frame, 'special', 'special', makeCat)
c = c .. addCategory('Special abilities', 'special', 'special', skill, spell, addCats)
end
local wardedContent = ''
if args['warded'] and args['warded']:len() > 0 then
wardedContent = wardedContent .. makeTag(frame, 'warded', 'warded', makeCat)
c = c .. addCategory('Warded abilities', 'warded', 'warded', skill, spell, addCats)
end
local elementContent = ''
if args['life'] and args['life']:len() > 0 then
elementContent = elementContent .. makeTag(frame, 'elements', 'life', makeCat)
c = c .. addCategory('Life element abilities', 'elements', 'life', skill, spell, addCats)
end
if args['storm'] and args['storm']:len() > 0 then
elementContent = elementContent .. makeTag(frame, 'elements', 'storm', makeCat)
c = c .. addCategory('Storm element abilities', 'elements', 'storm', skill, spell, addCats)
end
if (args['necro'] and args['necro']:len() > 0) or (args['necromancy'] and args['necromancy']:len() > 0) then
elementContent = elementContent .. makeTag(frame, 'elements', 'necro', makeCat)
c = c .. addCategory('Necromancy element abilities', 'elements', 'necro', skill, spell, addCats)
end
if args['flame'] and args['flame']:len() > 0 then
elementContent = elementContent .. makeTag(frame, 'elements', 'flame', makeCat)
c = c .. addCategory('Flame element abilities', 'elements', 'flame', skill, spell, addCats)
end
if args['nature'] and args['nature']:len() > 0 then
elementContent = elementContent .. makeTag(frame, 'elements', 'nature', makeCat)
c = c .. addCategory('Nature element abilities', 'elements', 'nature', skill, spell, addCats)
end
local powerContent = ''
local martial = true
if args['magic'] and args['magic']:len() > 0 then
martial = false
powerContent = powerContent .. makeTag(frame, 'power', 'magic', makeCat)
c = c .. addCategory('Magically powered abilities', 'power', 'magic', skill, spell, addCats) .. addCategory('Magical effects', nil, nil, false, false, addCats)
end
if args['divine'] and args['divine']:len() > 0 then
martial = false
powerContent = powerContent .. makeTag(frame, 'power', 'divine', makeCat)
c = c .. addCategory('Divinely powered abilities', 'power', 'divine', skill, spell, addCats) .. addCategory('Divine effects', nil, nil, false, false, addCats)
end
if args['spirit'] and args['spirit']:len() > 0 then
martial = false
powerContent = powerContent .. makeTag(frame, 'power', 'spirit', makeCat)
c = c .. addCategory('Spiritually powered abilities', 'power', 'spirit', skill, spell, addCats) .. addCategory('Spiritual effects', nil, nil, false, false, addCats)
end
if args['primal'] and args['primal']:len() > 0 then
martial = false
powerContent = powerContent .. makeTag(frame, 'power', 'primal', makeCat)
c = c .. addCategory('Primally powered abilities', 'power', 'primal', skill, spell, addCats) .. addCategory('Primal effects', nil, nil, false, false, addCats)
end
if args['psionic'] and args['psionic']:len() > 0 then
martial = false
powerContent = powerContent .. makeTag(frame, 'power', 'psionic', makeCat)
c = c .. addCategory('Psionically powered abilities', 'power', 'psionic', skill, spell, addCats) .. addCategory('Mental effects', nil, nil, false, false, addCats)
end
if args['techo'] and args['techo']:len() > 0 then
martial = false
powerContent = powerContent .. makeTag(frame, 'power', 'techo', makeCat)
c = c .. addCategory('Technologically powered abilities', 'power', 'techo', skill, spell, addCats) .. addCategory('Technological effects', nil, nil, false, false, addCats)
end
if args['finance'] and args['finance']:len() > 0 then
martial = false
powerContent = powerContent .. makeTag(frame, 'power', 'finance', makeCat)
c = c .. addCategory('Financially powered abilities', 'power', 'finance', skill, spell, addCats) .. addCategory('Financial effects', nil, nil, false, false, addCats)
end
if args['alchemy'] and args['alchemy']:len() > 0 then
martial = false
powerContent = powerContent .. makeTag(frame, 'power', 'alchemy', makeCat)
c = c .. addCategory('Alchemically powered abilities', 'power', 'alchemy', skill, spell, addCats) .. addCategory('Alchemical effects', nil, nil, false, false, addCats)
end
if args['unknown'] and args['unknown']:len() > 0 then
martial = false
powerContent = powerContent .. makeTag(frame, 'power', 'unknown', makeCat)
c = c .. addCategory('Unknown powered abilities', 'power', 'unknown', skill, spell, addCats)
end
if args['martial'] and args['martial']:len() > 0 then
martial = true
end
if martial then
powerContent = powerContent .. makeTag(frame, 'power', 'martial', makeCat)
c = c .. addCategory('Martially powered abilities', 'power', 'martial', skill, spell, addCats)
end
if class then
classContent = makeContent(frame, resolved, {'class'}, makeCat)
powerContent = powerContent .. classContent
end
if args['rotator'] and args['rotator']:len() > 0 then
powerContent = powerContent .. makeTag(frame, 'category', 'rotator', makeCat)
end
if args['gm'] and args['gm']:len() > 0 then
powerContent = powerContent .. makeTag(frame, 'gm', args['gm'], makeCat)
end
if args['guildmaster'] and args['guildmaster']:len() > 0 then
powerContent = powerContent .. makeTag(frame, 'category', 'guildmaster', makeCat)
end
powerContent = powerContent .. elementContent
if skill then
powerContent = powerContent .. makeTag(frame, 'category', 'skill', makeCat)
end
if spell then
powerContent = powerContent .. makeTag(frame, 'category', 'spell', makeCat)
end
local deliveryContent = ''
if standard and skill then
deliveryContent = deliveryContent .. makeTag(frame, 'category', 'semblant', makeCat)
end
if standard and spell then
deliveryContent = deliveryContent .. makeTag(frame, 'category', 'conjure', makeCat)
end
local effectContent = ''
if exists(args['mental']) then
effectContent = effectContent .. makeTag(frame, 'effects', 'mental', makeCat)
c = c .. addCategory('Mental effects', 'effect', 'mental', skill, spell, addCats)
end
if exists(args['truth']) then
effectContent = effectContent .. makeTag(frame, 'effects', 'truth', makeCat)
c = c .. addCategory('Truth detecting effects', 'effect', 'truthDetecting', skill, spell, addCats)
end
if exists(args['duelMod']) then
effectContent = effectContent .. makeTag(frame, 'effects', 'duelModifying', makeCat)
c = c .. addCategory('Duel modifying effects', 'effect', 'duelModifying', skill, spell, addCats)
end
if exists(args['movement']) then
effectContent = effectContent .. makeTag(frame, 'effects', 'movement', makeCat)
c = c .. addCategory('Movement effects', 'effect', 'movement', skill, spell, addCats)
end
if exists(args['poison']) then
effectContent = effectContent .. makeTag(frame, 'effects', 'poison', makeCat)
c = c .. addCategory('Poison effects', 'effect', 'poison', skill, spell, addCats)
end
if exists(args['illusion']) then
effectContent = effectContent .. makeTag(frame, 'effects', 'illusion', makeCat)
c = c .. addCategory('Illusion effects', 'effect', 'illusion', skill, spell, addCats)
end
if exists(args['displacement']) then
effectContent = effectContent .. makeTag(frame, 'effects', 'displacement', makeCat)
c = c .. addCategory('Displacement effects', 'effect', 'displacement', skill, spell, addCats)
end
if exists(args['transformation']) then
effectContent = effectContent .. makeTag(frame, 'effects', 'transformation', makeCat)
c = c .. addCategory('Transformation effects', 'effect', 'transformation', skill, spell, addCats)
end
if exists(args['control']) then
effectContent = effectContent .. makeTag(frame, 'effects', 'control', makeCat)
c = c .. addCategory('Control effects', 'effect', 'control', skill, spell, addCats)
end
if exists(args['resist']) then
effectContent = effectContent .. makeTag(frame, 'effects', 'resist', makeCat)
c = c .. addCategory('Resistance effects', 'effect', 'resist', skill, spell, addCats)
end
if exists(args['hexproof']) then
effectContent = effectContent .. makeTag(frame, 'effects', 'hexproof', makeCat)
c = c .. addCategory('Hexproof effects', 'effect', 'hexproof', skill, spell, addCats)
end
if exists(args['awaken']) then
effectContent = effectContent .. makeTag(frame, 'effects', 'awaken', makeCat)
c = c .. addCategory('Awakening effects', 'effect', 'awaken', skill, spell, addCats)
end
if exists(args['immune']) then
effectContent = effectContent .. makeTag(frame, 'effects', 'immune', makeCat)
c = c .. addCategory('Immunity effects', 'effect', 'immune', skill, spell, addCats)
end
if exists(args['hexseal']) then
effectContent = effectContent .. makeTag(frame, 'effects', 'hexseal', makeCat)
c = c .. addCategory('Hexseal effects', 'effect', 'hexseal', skill, spell, addCats)
end
if exists(args['long']) then
effectContent = effectContent .. makeTag(frame, 'effects', 'long', makeCat)
c = c .. addCategory('Long range effects', 'effect', 'long', skill, spell, addCats)
end
if exists(args['sense']) then
effectContent = effectContent .. makeTag(frame, 'effects', 'sense', makeCat)
c = c .. addCategory('Sensory effects', 'effect', 'sense', skill, spell, addCats)
end
if exists(args['revive'] or args['rev']) then
effectContent = effectContent .. makeTag(frame, 'effects', 'revive', makeCat)
c = c .. addCategory('Revival effects', 'effect', 'revive', skill, spell, addCats)
end
if exists(args['summon']) then
effectContent = effectContent .. makeTag(frame, 'effects', 'summon', makeCat)
c = c .. addCategory('Summoning effects', 'effect', 'summon', skill, spell, addCats)
end
if exists(args['heal']) then
effectContent = effectContent .. makeTag(frame, 'effects', 'heal', makeCat)
c = c .. addCategory('Healing effects', 'effect', 'heal', skill, spell, addCats)
end
if exists(args['reanimate'] or args['rean']) then
effectContent = effectContent .. makeTag(frame, 'effects', 'reanimate', makeCat)
c = c .. addCategory('Reanimation effects', 'effect', 'reanimate', skill, spell, addCats)
end
if exists(args['regenerate'] or args['regen']) then
effectContent = effectContent .. makeTag(frame, 'effects', 'regenerate', makeCat)
c = c .. addCategory('Regeneration effects', 'effect', 'regenerate', skill, spell, addCats)
end
if exists(args['revitalize'] or args['revit']) then
effectContent = effectContent .. makeTag(frame, 'effects', 'revitalize', makeCat)
c = c .. addCategory('Revitalization effects', 'effect', 'revitalize', skill, spell, addCats)
end
if exists(args['kill']) then
effectContent = effectContent .. makeTag(frame, 'effects', 'kill', makeCat)
c = c .. addCategory('Killing effects', 'effect', 'kill', skill, spell, addCats)
end
if exists(args['damage']) then
effectContent = effectContent .. makeTag(frame, 'effects', 'damage', makeCat)
c = c .. addCategory('Damaging effects', 'effect', 'damage', skill, spell, addCats)
end
if exists(args['drain']) then
effectContent = effectContent .. makeTag(frame, 'effects', 'drain', makeCat)
c = c .. addCategory('Draining effects', 'effect', 'drain', skill, spell, addCats)
end
if exists(args['destroy']) then
effectContent = effectContent .. makeTag(frame, 'effects', 'destroy', makeCat)
c = c .. addCategory('Destruction effects', 'effect', 'destroy', skill, spell, addCats)
end
if exists(args['contract']) then
effectContent = effectContent .. makeTag(frame, 'effects', 'contract', makeCat)
c = c .. addCategory('Contract effects', 'effect', 'contract', skill, spell, addCats)
end
if exists(args['steal']) then
effectContent = effectContent .. makeTag(frame, 'effects', 'steal', makeCat)
c = c .. addCategory('Stealing effects', 'effect', 'steal', skill, spell, addCats)
end
if exists(args['loud']) then
effectContent = effectContent .. makeTag(frame, 'effects', 'loud', makeCat)
c = c .. addCategory('Loud effects', 'effect', 'loud', skill, spell, addCats)
end
if exists(args['knockout']) then
effectContent = effectContent .. makeTag(frame, 'effects', 'knockout', makeCat)
c = c .. addCategory('Knockout effects', 'effect', 'knockout', skill, spell, addCats)
end
if exists(args['time']) then
effectContent = effectContent .. makeTag(frame, 'effects', 'time', makeCat)
c = c .. addCategory('Temporal effects', 'effect', 'time', skill, spell, addCats)
end
if exists(args['lightning']) then
effectContent = effectContent .. makeTag(frame, 'effects', 'lightning', makeCat)
c = c .. addCategory('Lightning effects', 'effect', 'lightning', skill, spell, addCats)
end
if exists(args['disease']) then
effectContent = effectContent .. makeTag(frame, 'effects', 'disease', makeCat)
c = c .. addCategory('Disease effects', 'effect', 'disease', skill, spell, addCats)
end
if exists(args['vision']) then
effectContent = effectContent .. makeTag(frame, 'effects', 'vision', makeCat)
c = c .. addCategory('Vision effects', 'effect', 'vision', skill, spell, addCats)
end
if exists(args['morganti']) then
effectContent = effectContent .. makeTag(frame, 'effects', 'morganti', makeCat)
c = c .. addCategory('Morganti effects', 'effect', 'morganti', skill, spell, addCats)
end
if exists(args['construction']) then
effectContent = effectContent .. makeTag(frame, 'effects', 'construction', makeCat)
c = c .. addCategory('Construction effects', 'effect', 'construction', skill, spell, addCats)
end
if exists(args['weather']) then
effectContent = effectContent .. makeTag(frame, 'effects', 'weather', makeCat)
c = c .. addCategory('Weather effects', 'effect', 'weather', skill, spell, addCats)
end
local autoContent = ''
if exists(args['auto']) then
effectContent = effectContent .. makeTag(frame, 'effects', 'auto', makeCat)
c = c .. addCategory('Automatic effects', 'effect', 'auto', skill, spell, addCats)
autoContent = autoContent .. ' This triggers automatically. You cannot choose to not use it if you are able to.'
end
local costContent = ''
if costMP then
c = c .. addCategory('MP cost abilities', 'costMP', costMP, skill, spell, addCats, true)
if costMP == 'x' then
costContent = costContent .. frame:preprocess("{{Tag|X MP|🩵|l=:Category:MP cost abilities|c=#3584e4|class=cost-tagged mpx}}")
c = c .. addCategory('Variable MP cost abilities', 'costMP', 'x', skill, spell, addCats, true)
else
costContent = costContent .. frame:preprocess("{{Tag|" .. costMP .. " MP|🩵|l=:Category:MP cost abilities|c=#3584e4|class=cost-tagged mp" .. costMP .. "}}")
c = c .. addCategory(costMP .. ' MP cost abilities', 'costMP', costMP, skill, spell, addCats, true)
end
end
if costHP then
c = c .. addCategory('HP cost abilities', 'costHP', costHP, skill, spell, addCats, true)
if costHP == 'x' then
costContent = costContent .. frame:preprocess("{{Tag|X HP|❤️|l=:Category:HP cost abilities|c=#e01b24|class=cost-tagged hpx}}")
c = c .. addCategory('Variable HP cost abilities', 'costHP', 'x', skill, spell, addCats, true)
else
costContent = costContent .. frame:preprocess("{{Tag|" .. costHP .. " HP|❤️|l=:Category:HP cost abilities|c=#e01b24|class=cost-tagged hp" .. costHP .. "}}")
c = c .. addCategory(costHP .. ' HP cost abilities', 'costHP', costHP, skill, spell, addCats, true)
end
end
if costGP then
c = c .. addCategory('GP cost abilities', 'costGP', costGP, skill, spell, addCats, true)
if costGP == 'x' then
costContent = costContent .. frame:preprocess("{{Tag|X GP|🪙|l=:Category:GP cost abilities|c=#F6D32D|class=cost-tagged gpx}}")
c = c .. addCategory('Variable GP cost abilities', 'costGP', 'x', skill, spell, addCats, true)
else
costContent = costContent .. frame:preprocess("{{Tag|" .. costGP .. " GP|🪙|l=:Category:GP cost abilities|c=#F6D32D|class=cost-tagged gp" .. costGP .. "}}")
c = c .. addCategory(costGP .. ' GP cost abilities', 'costGP', costGP, skill, spell, addCats, true)
end
end
if costShatter then
c = c .. addCategory('Shatter cost abilities', 'costShatter', costShatter, skill, spell, addCats)
costContent = costContent .. frame:preprocess("{{Tag|Shatter|💥|l=:Category:Shatter cost abilities|class=cost-tagged shatter}}")
end
if args['cost'] then
costContent = costContent .. frame:preprocess(args['cost'])
end
local executionTimeTitle = 'Execution time'
if spell then
executionTimeTitle = 'Casting time'
end
local expansionContent = 'TEST'
-- if args['ec'] or args['expCount'] or args['expansionCount'] then
-- -- local ec = args['ec'] or args['expCount'] or args['expansionCount']
-- -- ec = tostring(ec)
-- local ec = '1'
-- expansionContent = 'This ability expands ' .. ec .. ' time' .. (tonumber(ec) > 1 and 's' or '') .. '.'
-- end
local heightenedContent = ''
if args['heightened'] and args['heightened']:len() > 0 then
heightenedContent = heightenedContent .. 'For each additional {{MP}} spent, ' .. args['heightened']
-- heightenedContent = heightenedContent .. ' You can only {{L|Core|Heightening|Heighten}} if you are {{L|Core|Proficiency Bonus|Proficient}} or {{L|Core|Fluency Bonus|Fluent}} in ' .. args['name'] .. ' and only up to the corresponding bonus.'
c = c .. addCategory('Heightened abilities', 'heightened', args['heightened'], skill, spell, addCats, true)
end
local proficiencyContent = ''
if args['pro'] then
proficiencyContent = proficiencyContent .. frame:preprocess(args['pro'])
end
local fluencyContent = ''
if args['flu'] then
fluencyContent = fluencyContent .. frame:preprocess(args['flu'])
end
local restrictionContent = ''
if args['restrict'] then
restrictionContent = restrictionContent .. frame:preprocess(args['restrict'])
end
local statValContent = ''
local statFeatContent = ''
if args['vstat'] and args['val'] then
local vstat = frame:preprocess("{{uc:" .. args['vstat'] .. "}}")
statValContent = 'This ability sets your {{L|Core|' .. vstat .. '}}' .. ' score to a minimum of ' .. args['val'] .. '.'
c = c .. addCategory('Attribute setting abilities', 'val', args['val'], skill, spell, addCats, true)
c = c .. addCategory(vstat .. ' setting abilities', 'vstat', args['vstat'], skill, spell, addCats, true)
c = c .. addCategory(vstat .. ' value of ' .. args['val'] .. ' setting abilities', 'val', args['val'], skill, spell, addCats, true)
end
local f = 'proficiency'
if args['fflu'] then
f = 'fluency'
end
if args['fstat'] and (args['fflu'] or args['fpro']) then
local fstat = frame:preprocess("{{uc:" .. args['fstat'] .. "}}")
statFeatContent = 'This ability gives {{L|Core|' .. f .. ' Bonus|' .. f .. '}} in {{L|Core|' .. fstat .. '}} {{L|Core|Feat Interaction|Feat Saves}}.'
c = c .. addCategory('Feat save improvement abilities', 'flu', args['fflu'], skill, spell, addCats)
c = c .. addCategory('Feat save ' .. f .. ' granting abilities', 'fstat', args['fstat'], skill, spell, addCats, true)
c = c .. addCategory(fstat .. ' feat save ' .. f .. ' granting abilities', 'fstat', args['fstat'], skill, spell, addCats, true)
end
if args['rotator'] and args['rotator']:len() > 0 then
c = c .. addCategory('Rotator abilities', 'rotator', args['rotator'], skill, spell, addCats)
end
if args['gm'] then
c = c .. addCategory(tags['gm'][args['gm']]['link'], 'gm', args['gm'], skill, spell, addCats)
end
if args['guildmaster'] then
c = c .. addCategory('Guildmaster abilities', 'guildmaster', args['guildmaster'], skill, spell, addCats)
end
if args['style'] then
c = c .. addCategory('Casting style abilities', 'style', args['style'], skill, spell, addCats)
end
if args['weapon'] then
c = c .. addCategory('Weapon fighting style abilities', 'weapon', args['weapon'], skill, spell, addCats)
end
-- Remove range from self targeted abilities
if resolved['target'] == 'self' or resolved['range'] == 'self' then
resolved['range'] = nil
end
local barsTop = {
-- {
-- title = 'elements',
-- content = frame:preprocess(elementContent)
-- },
{
title = 'power sources',
content = frame:preprocess(esContent .. powerContent),
link = ':Category:Powered abilities'
},
{
title = 'effect types',
content = frame:preprocess(flawContent .. specialContent .. effectContent),
link = ':Category:Effects'
},
{
title = 'delivery',
content = frame:preprocess(wardedContent .. deliveryContent) .. makeContent(frame, resolved, {'expansion', 'pre', 'upgrade', 'piercing', 'delivery', 'interaction'}, makeCat),
link = ':Category:Delivery abilities'
},
{
title = 'save attribute',
content = makeContent(frame, resolved, {'attribute'}, makeCat),
link = 'Core:Feat Interaction'
},
{
title = 'expansion save attribute',
content = makeContent(frame, resolved, {'expansionAttribute'}, makeCat),
},
{
title = 'target',
content = makeContent(frame, resolved, {'target', 'hitDC'}, makeCat),
link = ':Category:Target abilities'
},
{
title = executionTimeTitle,
content = makeContent(frame, resolved, {'executionTime', 'maneuver'}, makeCat),
link = 'Core:Maneuvers'
},
{
title = 'trigger',
content = (args['trigger'] or '') .. autoContent,
link = 'Core:Reactive Maneuvers'
},
{
title = 'cost and components',
content = frame:preprocess(costContent) .. makeContent(frame, resolved, {'material', 'invoked', 'verbal', 'somatic', 'magelore'}, makeCat),
link = ':Category:Cost abilities'
},
{
title = 'Mana cost',
content = args['mpx'] or '',
link = ':Category:MP cost abilities'
},
{
title = 'Hit cost',
content = args['hpx'] or '',
link = ':Category:HP cost abilities'
},
{
title = 'Gold cost',
content = args['gpx'] or '',
link = ':Category:GP cost abilities'
},
{
title = 'Material cost',
content = makeContent(frame, resolved, {'matx'}, makeCat),
link = ':Category:Material component abilities'
},
{
title = 'duration',
content = makeContent(frame, resolved, {'duration', 'sustained'}, makeCat),
link = ':Category:Duration abilities'
},
{
title = 'range',
content = makeContent(frame, resolved, {'range'}, makeCat),
link = 'Core:Range'
},
-- {
-- title = 'expansion',
-- content = makeContent(frame, resolved, {'expansion'}, makeCat)
-- },
{
title = 'expansion range',
content = makeContent(frame, resolved, {'expansionRange'}, makeCat),
link = 'Core:Expansions'
},
{
title = 'expansion cap',
content = makeContent(frame, resolved, {'expansionCount'}, makeCat),
link = 'Core:Expansions'
},
{
title = 'Requirements',
content = makeContent(frame, resolved, {'requirement'}, makeCat)
},
}
local barsBottom = {
{
title = 'End condition',
content = args['end'] or ''
},
{
title = 'On critical hit',
content = args['crithit'] or ''
},
{
title = 'On hit',
content = args['hit'] or ''
},
{
title = 'On miss',
content = args['miss'] or ''
},
{
title = 'On critically miss',
content = args['critmiss'] or ''
},
{
title = 'On critical fail',
content = args['critfail'] or ''
},
{
title = 'On fail',
content = args['fail'] or ''
},
{
title = 'On success',
content = args['success'] or ''
},
{
title = 'On critical success',
content = args['critsuccess'] or ''
},
{
title = 'Heightened',
content = frame:preprocess(heightenedContent),
link = ':Category:Heightened abilities'
},
{
title = 'If proficient',
content = proficiencyContent,
link = 'Core:Proficiency Bonus'
},
{
title = 'If fluent',
content = fluencyContent,
link = 'Core:Fluency Bonus'
},
{
title = 'Attribute improvement',
content = frame:preprocess(statValContent),
link = 'Core:Attributes',
flags = {
attribute = args['vstat'] and frame:preprocess('{{lc:' .. args['vstat'] .. '}}') or "",
value = args['val']
}
},
{
title = 'Feat save improvement',
content = frame:preprocess(statFeatContent),
link = 'Core:Feat Interaction',
flags = {
attribute = args['fstat'] and frame:preprocess('{{lc:' .. args['fstat'] .. '}}'),
value = f
}
},
}
local outputTop = ''
for _, bar in ipairs(barsTop) do
outputTop = outputTop .. makeBar(frame, bar['title'], bar['content'], bar['link'], bar['flags'], false)
end
local outputBottom = ''
for _, bar in ipairs(barsBottom) do
outputBottom = outputBottom .. makeBar(frame, bar['title'], bar['content'], bar['link'], bar['flags'], true)
end
local outputMiddle = ''
if args['e'] then
outputMiddle = frame:preprocess(args['e'])
end
local output = mw.html.create('span')
output
:addClass('ability-variables')
if args['basic'] then
output
:addClass('ability-basic')
end
output:wikitext(outputTop)
if outputMiddle ~= '' then
output
:wikitext('<hr>')
:wikitext('<span class="ability-overview-base">' .. outputMiddle .. '</span>')
end
if outputBottom ~= '' then
output
:wikitext('<hr>')
:wikitext(outputBottom)
end
output = tostring(output) .. c
output = output .. frame:preprocess('<templatestyles src="Template:Ability/styles.css" />')
if not name then
output = output .. '<span style="color: red;>NO NAME PROVIDED VERY BAD EVERY ABILITY NEEDS A NAME OKAY</span>'
end
return output
end
return p