From 58383ef193a7ffc4fe694f058bbf2b9db183f98d Mon Sep 17 00:00:00 2001 From: Blitz54 Date: Thu, 12 Mar 2026 23:17:43 -0500 Subject: [PATCH 1/4] Flavour text on support gems --- src/Classes/GemSelectControl.lua | 6 + src/Data/Gems.lua | 194 +++++++++++++++++++++++++++++++ src/Data/Skills/act_str.lua | 2 +- src/Data/Skills/other.lua | 4 +- src/Data/Skills/sup_int.lua | 2 +- src/Export/Scripts/bases.lua | 2 +- src/Export/Scripts/skills.lua | 51 ++++++++ 7 files changed, 256 insertions(+), 5 deletions(-) diff --git a/src/Classes/GemSelectControl.lua b/src/Classes/GemSelectControl.lua index ac19f68414..b63675c3fe 100644 --- a/src/Classes/GemSelectControl.lua +++ b/src/Classes/GemSelectControl.lua @@ -618,6 +618,12 @@ function GemSelectClass:AddGemTooltip(gemInstance) self.tooltip:AddLine(fontSizeBig, "^x7F7F7F" .. gemInstance.gemData.tagString, "FONTIN SC") self:AddCommonGemInfo(gemInstance, grantedEffect, true, secondary and secondary.support and secondary) end + if gemInstance.gemData.flavourText then + self.tooltip:AddSeparator(10) + for _, line in ipairs(gemInstance.gemData.flavourText) do + self.tooltip:AddLine(fontSizeBig, colorCodes.UNIQUE .. line, "FONTIN SC ITALIC") + end + end end function GemSelectClass:AddCommonGemInfo(gemInstance, grantedEffect, addReq, mergeStatsFrom) diff --git a/src/Data/Gems.lua b/src/Data/Gems.lua index e3b0e26da3..3eca49c1d9 100644 --- a/src/Data/Gems.lua +++ b/src/Data/Gems.lua @@ -6347,6 +6347,9 @@ return { reqDex = 0, reqInt = 100, naturalMaxLevel = 1, + flavourText = { + "Work in progress", + }, }, ["Metadata/Items/Gems/SkillGemKineticBlast"] = { name = "Kinetic Blast", @@ -15039,6 +15042,10 @@ return { reqDex = 0, reqInt = 100, naturalMaxLevel = 3, + flavourText = { + "The echoes of lost loved ones surrounded her,", + "maddeningly close, but forever out of reach.", + }, }, ["Metadata/Items/Gems/SkillGemSupportEclipse"] = { name = "Eclipse", @@ -15055,6 +15062,11 @@ return { reqDex = 250, reqInt = 250, naturalMaxLevel = 3, + flavourText = { + "\"Although we are two bodies, we are of one mind, one heart, drifting", + "through the cosmos, in search of purpose. The moment we cross paths,", + "both fleeting and eternal, our eyes are opened to our potential.\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportInvertTheRules"] = { name = "Invert the Rules", @@ -15072,6 +15084,12 @@ return { reqDex = 0, reqInt = 100, naturalMaxLevel = 3, + flavourText = { + "\"She fled from the prison of her birth, drawn by the breaking", + "of that great Silence. At that moment, the universe was changed,", + "and walls that were once impenetrable became brittle.", + "A fortress became a shell, and she alone escaped.\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportCastOnWardBreak"] = { name = "Cast on Ward Break", @@ -15091,6 +15109,10 @@ return { reqDex = 60, reqInt = 40, naturalMaxLevel = 3, + flavourText = { + "\"Prove yourself! Are you a knave, or a knight?", + "I shall know by the strength of your blows!\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportVaalSacrifice"] = { name = "Vaal Sacrifice", @@ -15110,6 +15132,10 @@ return { reqDex = 0, reqInt = 60, naturalMaxLevel = 3, + flavourText = { + "Under Atziri, sacrifice was a ruthless and efficient science.", + "Her people were willing to give everything... and they did.", + }, }, ["Metadata/Items/Gems/SkillGemSupportGreaterSpellEcho"] = { name = "Greater Spell Echo", @@ -15129,6 +15155,10 @@ return { reqDex = 0, reqInt = 100, naturalMaxLevel = 3, + flavourText = { + "She gazed into the mirror...", + "and the mirror gazed back.", + }, }, ["Metadata/Items/Gems/SkillGemSupportVaalTemptation"] = { name = "Vaal Temptation", @@ -15147,6 +15177,10 @@ return { reqDex = 0, reqInt = 40, naturalMaxLevel = 3, + flavourText = { + "\"If Chaos offers you a deal, challenger,", + "think deeply before you accept.\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportMachinations"] = { name = "Machinations", @@ -15166,6 +15200,10 @@ return { reqDex = 60, reqInt = 40, naturalMaxLevel = 3, + flavourText = { + "\"My master enjoys the strange, and the unexpected.", + "I'm sure you can think of a few ways to entertain them.\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportPyre"] = { name = "Pyre", @@ -15190,6 +15228,10 @@ return { reqDex = 0, reqInt = 0, naturalMaxLevel = 3, + flavourText = { + "A vast pillar of hands embraces a charred sky.", + "Within burns a beam of purest heat.", + }, }, ["Metadata/Items/Gems/SkillGemSupportBonespire"] = { name = "Bonespire", @@ -15215,6 +15257,9 @@ return { reqDex = 0, reqInt = 0, naturalMaxLevel = 3, + flavourText = { + "In its madness, Xesht desperately seeks communion.", + }, }, ["Metadata/Items/Gems/SkillGemSupportFoulgrasp"] = { name = "Foulgrasp", @@ -15239,6 +15284,11 @@ return { reqDex = 40, reqInt = 60, naturalMaxLevel = 3, + flavourText = { + "\"Words without thought drive us", + "to claw and scrabble in the dirt,", + "seeking respite found only in pain.\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportHiveborn"] = { name = "Hiveborn", @@ -15262,6 +15312,10 @@ return { reqDex = 0, reqInt = 100, naturalMaxLevel = 3, + flavourText = { + "\"We spill forth, cleaving our flesh", + "to theirs, until we become one.\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportScornfulHerald"] = { name = "Scornful Herald", @@ -15281,6 +15335,11 @@ return { reqDex = 0, reqInt = 60, naturalMaxLevel = 3, + flavourText = { + "Her bitterness blinded her to the true price of immortality.", + "Let Wraeclast burn and be devoured, she told herself...", + "and only herself, for centuries without end.", + }, }, ["Metadata/Items/Gems/SkillGemSupportCullTheWeak"] = { name = "Cull the Weak", @@ -15298,6 +15357,11 @@ return { reqDex = 100, reqInt = 0, naturalMaxLevel = 3, + flavourText = { + "\"Beidat is the lesser of three evils. The other two desire only", + "to consume us, but under him, there is a chance to survive...", + "a chance to serve... if you can prove yourself useful.\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportGreaterAncestralCall"] = { name = "Greater Ancestral Call", @@ -15318,6 +15382,11 @@ return { reqDex = 0, reqInt = 0, naturalMaxLevel = 3, + flavourText = { + "\"I believe the Halls of the Dead are secretly a", + "training ground. One day, we will be called", + "forth to stand and fight against a great tide.\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportFissure"] = { name = "Fissure", @@ -15343,6 +15412,11 @@ return { reqDex = 0, reqInt = 0, naturalMaxLevel = 3, + flavourText = { + "\"Oh yes, K'Tash understands you. It has a keen swarm-mind", + "somewhere within its multitudes. It hears your pleas, but", + "ignores them... because it hates you with a burning fury.\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportHextoad"] = { name = "Hextoad", @@ -15367,6 +15441,11 @@ return { reqDex = 0, reqInt = 100, naturalMaxLevel = 3, + flavourText = { + "\"A warlock like myself knows that even the most abominable", + "plagues are part of the cycle of life and death. From that ruination,", + "new life will emerge, and that life will kill, and so on...\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportHexpass"] = { name = "Hexpass", @@ -15385,6 +15464,10 @@ return { reqDex = 0, reqInt = 100, naturalMaxLevel = 3, + flavourText = { + "\"Your wards and your charms are meaningless", + "to one who knows your true name.\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportGreaterFork"] = { name = "Greater Fork", @@ -15403,6 +15486,10 @@ return { reqDex = 100, reqInt = 0, naturalMaxLevel = 3, + flavourText = { + "Lioneye earned his moniker by killing", + "three men with a single arrow.", + }, }, ["Metadata/Items/Gems/SkillGemSupportGreaterChain"] = { name = "Greater Chain", @@ -15422,6 +15509,11 @@ return { reqDex = 100, reqInt = 0, naturalMaxLevel = 3, + flavourText = { + "\"We are all connected. Each of us burns with the same fire.", + "Queen Hyrri knew that... she chooses to battle still, somewhere", + "beyond Hinekora's sight. There must be a very good reason.\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportLethalDose"] = { name = "Lethal Dose", @@ -15440,6 +15532,10 @@ return { reqDex = 100, reqInt = 0, naturalMaxLevel = 3, + flavourText = { + "\"They cast me into a pit of vipers, and", + "that is where I found my true self.\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportCompanionship"] = { name = "Companionship", @@ -15458,6 +15554,11 @@ return { reqDex = 60, reqInt = 40, naturalMaxLevel = 3, + flavourText = { + "The Black Sekhema was a formidable fighter", + "alongside her dekhara, but she was unstoppable", + "when she fought atop her trusted mount, Shiyo.", + }, }, ["Metadata/Items/Gems/SkillGemSupportDivineSentinel"] = { name = "Divine Sentinel", @@ -15477,6 +15578,10 @@ return { reqDex = 0, reqInt = 40, naturalMaxLevel = 3, + flavourText = { + "\"The world will never know our sacrifice, but", + "we will stand and fight for as long as it takes!\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportAnnhilation"] = { name = "Annihilation", @@ -15495,6 +15600,10 @@ return { reqDex = 0, reqInt = 40, naturalMaxLevel = 3, + flavourText = { + "Those citizens of Oriath touched by the", + "roving storms died most horrible deaths.", + }, }, ["Metadata/Items/Gems/SkillGemSupportInvention"] = { name = "Invention", @@ -15514,6 +15623,10 @@ return { reqDex = 60, reqInt = 40, naturalMaxLevel = 3, + flavourText = { + "\"The direct approach failed. So be it. In my crusade", + "to protect Wraeclast, I must take... a longer view.\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportGreaterKineticInstability"] = { name = "Greater Kinetic Instability", @@ -15538,6 +15651,11 @@ return { reqDex = 0, reqInt = 100, naturalMaxLevel = 3, + flavourText = { + "\"Accusations fly. Sinner! Heretic! I am but an initiate, and my patron urges", + "silence. We will keep our heads down while one High Templar supplants", + "another. It's all about power, my patron whispers, and we have none...\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportCooldownRecovery"] = { name = "Cooldown Recovery", @@ -15555,6 +15673,11 @@ return { reqDex = 40, reqInt = 60, naturalMaxLevel = 3, + flavourText = { + "\"The science is... incomprehensible at best. Nearest I can tell, the Arcana exhibits", + "a blast of wrath once it has been fully charged, and when directed at the Elder", + "will force it to take on the form it held before it entered our dimension.\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportVoidstorm"] = { name = "Voidstorm", @@ -15578,6 +15701,11 @@ return { reqDex = 100, reqInt = 0, naturalMaxLevel = 3, + flavourText = { + "\"Not even stopping to look behind, I dove through the shimmering window...", + "With not a minute to waste, I took a nearby tool and jammed it into the infernal", + "device, where it hummed, ominously entrenched in my laboratory floor.\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportVoidShockwave"] = { name = "Void Shockwave", @@ -15600,6 +15728,10 @@ return { reqDex = 0, reqInt = 0, naturalMaxLevel = 3, + flavourText = { + "The Elder's influence yet lingers", + "in the darkest corners of Wraeclast.", + }, }, ["Metadata/Items/Gems/SkillGemSupportEldritchBlasphemy"] = { name = "Eldritch Blasphemy", @@ -15619,6 +15751,10 @@ return { reqDex = 0, reqInt = 100, naturalMaxLevel = 3, + flavourText = { + "Even trapped in stone, the Elder's shadow lingered", + "in their hearts and coiled around their dreams.", + }, }, ["Metadata/Items/Gems/SkillGemSupportGluttony"] = { name = "Gluttony", @@ -15639,6 +15775,11 @@ return { reqDex = 40, reqInt = 60, naturalMaxLevel = 3, + flavourText = { + "Champions of the Tangle are driven to seek", + "sustenance for their master; should they fall", + "behind, they would soon be consumed as well.", + }, }, ["Metadata/Items/Gems/SkillGemSupportOverheat"] = { name = "Overheat", @@ -15658,6 +15799,10 @@ return { reqDex = 0, reqInt = 0, naturalMaxLevel = 3, + flavourText = { + "No walls can stand against its gaze. No fortress,", + "no cave, no mountain. Better to die fighting.", + }, }, ["Metadata/Items/Gems/SkillGemSupportGreaterMultistrike"] = { name = "Greater Multistrike", @@ -15677,6 +15822,11 @@ return { reqDex = 40, reqInt = 0, naturalMaxLevel = 3, + flavourText = { + "Zana watched in awe as her father spoke. With each word,", + "he seemed to grow larger and more frightening, drawing", + "increasingly fervorous responses from his rapt audience.", + }, }, ["Metadata/Items/Gems/SkillGemSupportCongregation"] = { name = "Congregation", @@ -15695,6 +15845,10 @@ return { reqDex = 0, reqInt = 100, naturalMaxLevel = 3, + flavourText = { + "\"I have a recurring nightmare... I run...", + "I scream... but only the dead hear me...\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportFrostmage"] = { name = "Frostmage", @@ -15715,6 +15869,11 @@ return { reqDex = 0, reqInt = 100, naturalMaxLevel = 3, + flavourText = { + "Her understanding of the Atlas was not innate. The", + "more committed she became to understanding it,", + "the more the knowledge weighed on her.", + }, }, ["Metadata/Items/Gems/SkillGemSupportGreaterDevour"] = { name = "Greater Devour", @@ -15732,6 +15891,10 @@ return { reqDex = 40, reqInt = 60, naturalMaxLevel = 3, + flavourText = { + "A High Templar's fear consumed her entire life,", + "so she cast aside her own, to do what must be done.", + }, }, ["Metadata/Items/Gems/SkillGemSupportGreaterUnleash"] = { name = "Greater Unleash", @@ -15750,6 +15913,11 @@ return { reqDex = 0, reqInt = 100, naturalMaxLevel = 3, + flavourText = { + "\"True power grows with patience. You must nurture it.", + "You learn what it needs. You provide. You wait. Only", + "then, when it is ripe, does it yield its fruits.\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportPacifism"] = { name = "Pacifism", @@ -15767,6 +15935,11 @@ return { reqDex = 100, reqInt = 0, naturalMaxLevel = 3, + flavourText = { + "\"My people refused to take part in the ills of Wraeclast.", + "They were called primitives by some, and cowards by", + "others... but they are gone, and we still remain.\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportBloodsoakedBanner"] = { name = "Bloodsoaked Banner", @@ -15787,6 +15960,11 @@ return { reqDex = 40, reqInt = 0, naturalMaxLevel = 3, + flavourText = { + "\"The history of Wraeclast is marked by bloody conflicts. The rise", + "and fall of empires. Man slaughtered man, never suspecting the", + "madness lurking under the surface might not have been innate.\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportMinionPact"] = { name = "Minion Pact", @@ -15807,6 +15985,11 @@ return { reqDex = 0, reqInt = 100, naturalMaxLevel = 3, + flavourText = { + "Immortality could grant Catarina the time necessary to shape", + "a better world... but building requires sacrifice, and the useless", + "would be crushed into the foundation of her new utopia.", + }, }, ["Metadata/Items/Gems/SkillGemSupportUnholyTrinity"] = { name = "Unholy Trinity", @@ -15827,6 +16010,10 @@ return { reqDex = 60, reqInt = 40, naturalMaxLevel = 3, + flavourText = { + "It was a delicate balancing act for Malachai to ensure the loyalty", + "of his three students - each as ambitious as they were depraved.", + }, }, ["Metadata/Items/Gems/SkillGemSupportOverloadedIntensity"] = { name = "Overloaded Intensity", @@ -15846,6 +16033,9 @@ return { reqDex = 0, reqInt = 100, naturalMaxLevel = 3, + flavourText = { + "\"I didn't design it to overload... let's call it a happy little accident!\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportTransfusion"] = { name = "Transfusion", @@ -15865,6 +16055,10 @@ return { reqDex = 0, reqInt = 40, naturalMaxLevel = 3, + flavourText = { + "Let the eternal scream within", + "flow from your weeping blood.", + }, }, ["Metadata/Items/Gems/SkillGemSupportFocusedChannelling"] = { name = "Focused Channelling", diff --git a/src/Data/Skills/act_str.lua b/src/Data/Skills/act_str.lua index eab74f6c55..087792501c 100644 --- a/src/Data/Skills/act_str.lua +++ b/src/Data/Skills/act_str.lua @@ -6174,7 +6174,7 @@ skills["HolyStrike"] = { ["Staff"] = true, ["Two Handed Mace"] = true, }, - statDescriptionScope = "minion_attack_skill_stat_descriptions", + statDescriptionScope = "skill_stat_descriptions", castTime = 1, minionList = { "HolyStrikeMinion", diff --git a/src/Data/Skills/other.lua b/src/Data/Skills/other.lua index a357c6dc91..ecbfa079bd 100644 --- a/src/Data/Skills/other.lua +++ b/src/Data/Skills/other.lua @@ -678,7 +678,7 @@ skills["CeaselessFleshUnique"] = { description = "Once per second, raise a nearby corpse as a shambling undead. This minion will follow you and attack your enemies with melee strikes, but quickly falls apart. These minions have significantly increased attack speed while on low life.", skillTypes = { [SkillType.Spell] = true, [SkillType.Minion] = true, [SkillType.MinionsCanExplode] = true, [SkillType.Triggerable] = true, [SkillType.CreatesMinion] = true, [SkillType.Triggered] = true, [SkillType.InbuiltTrigger] = true, [SkillType.Duration] = true, }, minionSkillTypes = { [SkillType.Attack] = true, [SkillType.Melee] = true, [SkillType.MeleeSingleTarget] = true, [SkillType.Multistrikeable] = true, }, - statDescriptionScope = "minion_spell_skill_stat_descriptions", + statDescriptionScope = "skill_stat_descriptions", castTime = 1, fromItem = true, minionList = { @@ -4488,7 +4488,7 @@ skills["AnimosityUniqueSkill"] = { color = 2, description = "While active, this skill inflicts the Weeping Black debuff on impaled enemies you hit with bow attacks. Weeping Black deals physical damage over time, and can stack up to five times. This skill cannot be cast by Totems.", skillTypes = { [SkillType.Spell] = true, [SkillType.Buff] = true, [SkillType.Duration] = true, [SkillType.Triggerable] = true, [SkillType.Triggered] = true, [SkillType.Instant] = true, [SkillType.Cooldown] = true, [SkillType.DamageOverTime] = true, [SkillType.Physical] = true, }, - statDescriptionScope = "debuff_skill_stat_descriptions", + statDescriptionScope = "skill_stat_descriptions", castTime = 0, fromItem = true, statMap = { diff --git a/src/Data/Skills/sup_int.lua b/src/Data/Skills/sup_int.lua index 577248b22f..41b84b6120 100644 --- a/src/Data/Skills/sup_int.lua +++ b/src/Data/Skills/sup_int.lua @@ -3326,7 +3326,7 @@ skills["TriggeredSupportHiveborn"] = { description = "Summons a horde of Hiveborn Breach monsters to do your bidding. These summoned monsters have all their physical damage converted to cold.", skillTypes = { [SkillType.Cooldown] = true, [SkillType.Minion] = true, [SkillType.Spell] = true, [SkillType.Triggerable] = true, [SkillType.Triggered] = true, [SkillType.InbuiltTrigger] = true, [SkillType.SkillGrantedBySupport] = true, [SkillType.CreatesMinion] = true, }, minionSkillTypes = { [SkillType.Attack] = true, [SkillType.Cold] = true, [SkillType.Melee] = true, [SkillType.MeleeSingleTarget] = true, [SkillType.Multistrikeable] = true, }, - statDescriptionScope = "minion_spell_skill_stat_descriptions", + statDescriptionScope = "skill_stat_descriptions", castTime = 1, minionList = { "Hiveborn", diff --git a/src/Export/Scripts/bases.lua b/src/Export/Scripts/bases.lua index 4126ae570c..8511c271b7 100644 --- a/src/Export/Scripts/bases.lua +++ b/src/Export/Scripts/bases.lua @@ -267,7 +267,7 @@ directiveTable.base = function(state, args, out) end end out:write('},\n') - if baseItemType.FlavourTextKey and baseItemType.FlavourTextKey.Text then + if baseItemType.FlavourTextKey and baseItemType.FlavourTextKey.Text then local cleanedLines = cleanAndSplit(baseItemType.FlavourTextKey.Text) if #cleanedLines > 0 then out:write('\tflavourText = {\n') diff --git a/src/Export/Scripts/skills.lua b/src/Export/Scripts/skills.lua index dc793d934f..ed9ea6ebe2 100644 --- a/src/Export/Scripts/skills.lua +++ b/src/Export/Scripts/skills.lua @@ -8,6 +8,47 @@ local fullNameGems = { ["Metadata/Items/Gems/SupportGemBarrage"] = true, } +local function cleanAndSplit(str) + -- Normalize newlines + str = str:gsub("\r\n", "\n") + + -- Replace with a newline and ^8 + str = str:gsub("", "\n^8") + + local lines = {} + for line in str:gmatch("[^\n]+") do + -- trim + line = line:match("^%s*(.-)%s*$") + + if line ~= "" then + -- Remove braces but keep contents + line = line:gsub("%{(.-)%}", "%1") + + -- Remove any <<...>> sequences (non-greedy) + line = line:gsub("<<(.-)>>", "") + + -- trim again in case removal left surrounding spaces + line = line:match("^%s*(.-)%s*$") + + -- Escape quotes + line = line:gsub('"', '\\"') + + -- Insert a blank line before any ^8 line + if line:match("^%^8") and (#lines == 0 or lines[#lines] ~= "") then + table.insert(lines, "") + end + + -- Only add non-empty lines + if line ~= "" then + table.insert(lines, line) + end + end + end + + return lines +end + + local function mapAST(ast) return "SkillType."..(skillTypeMap[ast._rowIndex] or ("Unknown"..ast._rowIndex)) end @@ -567,6 +608,16 @@ for skillGem in dat("SkillGems"):Rows() do out:write('\t\treqInt = ', skillGem.Int, ',\n') local naturalMaxLevel = #dat("ItemExperiencePerLevel"):GetRowList("ItemExperienceType", skillGem.GemLevelProgression) out:write('\t\tnaturalMaxLevel = ', naturalMaxLevel > 0 and naturalMaxLevel or 1, ',\n') + if skillGem.BaseItemType.FlavourTextKey and skillGem.BaseItemType.FlavourTextKey.Text then + local cleanedLines = cleanAndSplit(skillGem.BaseItemType.FlavourTextKey.Text) + if #cleanedLines > 0 then + out:write('\t\tflavourText = {\n') + for _, line in ipairs(cleanedLines) do + out:write('\t\t\t"', line, '",\n') + end + out:write('\t\t},\n') + end + end out:write('\t},\n') end end From 7b04116e409655c366c58150e81304582420c2a1 Mon Sep 17 00:00:00 2001 From: Blitz54 Date: Sat, 16 May 2026 23:38:26 -0500 Subject: [PATCH 2/4] Remove WIP text --- src/Data/Gems.lua | 215 ---------------------------------- src/Data/Skills/act_str.lua | 2 +- src/Data/Skills/other.lua | 4 +- src/Data/Skills/sup_int.lua | 2 +- src/Export/Scripts/skills.lua | 16 +-- 5 files changed, 13 insertions(+), 226 deletions(-) diff --git a/src/Data/Gems.lua b/src/Data/Gems.lua index 4c6e229e32..b57cf3d684 100644 --- a/src/Data/Gems.lua +++ b/src/Data/Gems.lua @@ -6287,30 +6287,6 @@ return { reqInt = 100, naturalMaxLevel = 20, }, - ["Metadata/Items/Gems/SkillGemLightningTendrils"] = { - name = "Lightning Tendrils", - baseTypeName = "Lightning Tendrils", - gameId = "Metadata/Items/Gems/SkillGemLightningTendrilsChannelled", - variantId = "LightningTendrils", - grantedEffectId = "LightningTendrils", - tags = { - critical = true, - intelligence = true, - grants_active_skill = true, - spell = true, - area = true, - lightning = true, - channelling = true, - }, - tagString = "Critical, Spell, AoE, Lightning, Channelling", - reqStr = 0, - reqDex = 0, - reqInt = 100, - naturalMaxLevel = 1, - flavourText = { - "Work in progress", - }, - }, ["Metadata/Items/Gems/SkillGemKineticBlast"] = { name = "Kinetic Blast", baseTypeName = "Kinetic Blast", @@ -15002,10 +14978,6 @@ return { reqDex = 0, reqInt = 100, naturalMaxLevel = 3, - flavourText = { - "The echoes of lost loved ones surrounded her,", - "maddeningly close, but forever out of reach.", - }, }, ["Metadata/Items/Gems/SkillGemSupportEclipse"] = { name = "Eclipse", @@ -15022,11 +14994,6 @@ return { reqDex = 250, reqInt = 250, naturalMaxLevel = 3, - flavourText = { - "\"Although we are two bodies, we are of one mind, one heart, drifting", - "through the cosmos, in search of purpose. The moment we cross paths,", - "both fleeting and eternal, our eyes are opened to our potential.\"", - }, }, ["Metadata/Items/Gems/SkillGemSupportInvertTheRules"] = { name = "Invert the Rules", @@ -15044,12 +15011,6 @@ return { reqDex = 0, reqInt = 100, naturalMaxLevel = 3, - flavourText = { - "\"She fled from the prison of her birth, drawn by the breaking", - "of that great Silence. At that moment, the universe was changed,", - "and walls that were once impenetrable became brittle.", - "A fortress became a shell, and she alone escaped.\"", - }, }, ["Metadata/Items/Gems/SkillGemSupportCastOnWardBreak"] = { name = "Cast on Ward Break", @@ -15069,10 +15030,6 @@ return { reqDex = 60, reqInt = 40, naturalMaxLevel = 3, - flavourText = { - "\"Prove yourself! Are you a knave, or a knight?", - "I shall know by the strength of your blows!\"", - }, }, ["Metadata/Items/Gems/SkillGemSupportVaalSacrifice"] = { name = "Vaal Sacrifice", @@ -15092,10 +15049,6 @@ return { reqDex = 0, reqInt = 60, naturalMaxLevel = 3, - flavourText = { - "Under Atziri, sacrifice was a ruthless and efficient science.", - "Her people were willing to give everything... and they did.", - }, }, ["Metadata/Items/Gems/SkillGemSupportGreaterSpellEcho"] = { name = "Greater Spell Echo", @@ -15115,10 +15068,6 @@ return { reqDex = 0, reqInt = 100, naturalMaxLevel = 3, - flavourText = { - "She gazed into the mirror...", - "and the mirror gazed back.", - }, }, ["Metadata/Items/Gems/SkillGemSupportVaalTemptation"] = { name = "Vaal Temptation", @@ -15137,10 +15086,6 @@ return { reqDex = 0, reqInt = 40, naturalMaxLevel = 3, - flavourText = { - "\"If Chaos offers you a deal, challenger,", - "think deeply before you accept.\"", - }, }, ["Metadata/Items/Gems/SkillGemSupportMachinations"] = { name = "Machinations", @@ -15160,10 +15105,6 @@ return { reqDex = 60, reqInt = 40, naturalMaxLevel = 3, - flavourText = { - "\"My master enjoys the strange, and the unexpected.", - "I'm sure you can think of a few ways to entertain them.\"", - }, }, ["Metadata/Items/Gems/SkillGemSupportPyre"] = { name = "Pyre", @@ -15188,10 +15129,6 @@ return { reqDex = 0, reqInt = 0, naturalMaxLevel = 3, - flavourText = { - "A vast pillar of hands embraces a charred sky.", - "Within burns a beam of purest heat.", - }, }, ["Metadata/Items/Gems/SkillGemSupportBonespire"] = { name = "Bonespire", @@ -15217,9 +15154,6 @@ return { reqDex = 0, reqInt = 0, naturalMaxLevel = 3, - flavourText = { - "In its madness, Xesht desperately seeks communion.", - }, }, ["Metadata/Items/Gems/SkillGemSupportFoulgrasp"] = { name = "Foulgrasp", @@ -15244,11 +15178,6 @@ return { reqDex = 40, reqInt = 60, naturalMaxLevel = 3, - flavourText = { - "\"Words without thought drive us", - "to claw and scrabble in the dirt,", - "seeking respite found only in pain.\"", - }, }, ["Metadata/Items/Gems/SkillGemSupportHiveborn"] = { name = "Hiveborn", @@ -15272,10 +15201,6 @@ return { reqDex = 0, reqInt = 100, naturalMaxLevel = 3, - flavourText = { - "\"We spill forth, cleaving our flesh", - "to theirs, until we become one.\"", - }, }, ["Metadata/Items/Gems/SkillGemSupportScornfulHerald"] = { name = "Scornful Herald", @@ -15295,11 +15220,6 @@ return { reqDex = 0, reqInt = 60, naturalMaxLevel = 3, - flavourText = { - "Her bitterness blinded her to the true price of immortality.", - "Let Wraeclast burn and be devoured, she told herself...", - "and only herself, for centuries without end.", - }, }, ["Metadata/Items/Gems/SkillGemSupportCullTheWeak"] = { name = "Cull the Weak", @@ -15317,11 +15237,6 @@ return { reqDex = 100, reqInt = 0, naturalMaxLevel = 3, - flavourText = { - "\"Beidat is the lesser of three evils. The other two desire only", - "to consume us, but under him, there is a chance to survive...", - "a chance to serve... if you can prove yourself useful.\"", - }, }, ["Metadata/Items/Gems/SkillGemSupportGreaterAncestralCall"] = { name = "Greater Ancestral Call", @@ -15342,11 +15257,6 @@ return { reqDex = 0, reqInt = 0, naturalMaxLevel = 3, - flavourText = { - "\"I believe the Halls of the Dead are secretly a", - "training ground. One day, we will be called", - "forth to stand and fight against a great tide.\"", - }, }, ["Metadata/Items/Gems/SkillGemSupportFissure"] = { name = "Fissure", @@ -15372,11 +15282,6 @@ return { reqDex = 0, reqInt = 0, naturalMaxLevel = 3, - flavourText = { - "\"Oh yes, K'Tash understands you. It has a keen swarm-mind", - "somewhere within its multitudes. It hears your pleas, but", - "ignores them... because it hates you with a burning fury.\"", - }, }, ["Metadata/Items/Gems/SkillGemSupportHextoad"] = { name = "Hextoad", @@ -15401,11 +15306,6 @@ return { reqDex = 0, reqInt = 100, naturalMaxLevel = 3, - flavourText = { - "\"A warlock like myself knows that even the most abominable", - "plagues are part of the cycle of life and death. From that ruination,", - "new life will emerge, and that life will kill, and so on...\"", - }, }, ["Metadata/Items/Gems/SkillGemSupportHexpass"] = { name = "Hexpass", @@ -15424,10 +15324,6 @@ return { reqDex = 0, reqInt = 100, naturalMaxLevel = 3, - flavourText = { - "\"Your wards and your charms are meaningless", - "to one who knows your true name.\"", - }, }, ["Metadata/Items/Gems/SkillGemSupportGreaterFork"] = { name = "Greater Fork", @@ -15446,10 +15342,6 @@ return { reqDex = 100, reqInt = 0, naturalMaxLevel = 3, - flavourText = { - "Lioneye earned his moniker by killing", - "three men with a single arrow.", - }, }, ["Metadata/Items/Gems/SkillGemSupportGreaterChain"] = { name = "Greater Chain", @@ -15469,11 +15361,6 @@ return { reqDex = 100, reqInt = 0, naturalMaxLevel = 3, - flavourText = { - "\"We are all connected. Each of us burns with the same fire.", - "Queen Hyrri knew that... she chooses to battle still, somewhere", - "beyond Hinekora's sight. There must be a very good reason.\"", - }, }, ["Metadata/Items/Gems/SkillGemSupportLethalDose"] = { name = "Lethal Dose", @@ -15492,10 +15379,6 @@ return { reqDex = 100, reqInt = 0, naturalMaxLevel = 3, - flavourText = { - "\"They cast me into a pit of vipers, and", - "that is where I found my true self.\"", - }, }, ["Metadata/Items/Gems/SkillGemSupportCompanionship"] = { name = "Companionship", @@ -15514,11 +15397,6 @@ return { reqDex = 60, reqInt = 40, naturalMaxLevel = 3, - flavourText = { - "The Black Sekhema was a formidable fighter", - "alongside her dekhara, but she was unstoppable", - "when she fought atop her trusted mount, Shiyo.", - }, }, ["Metadata/Items/Gems/SkillGemSupportDivineSentinel"] = { name = "Divine Sentinel", @@ -15538,10 +15416,6 @@ return { reqDex = 0, reqInt = 40, naturalMaxLevel = 3, - flavourText = { - "\"The world will never know our sacrifice, but", - "we will stand and fight for as long as it takes!\"", - }, }, ["Metadata/Items/Gems/SkillGemSupportAnnhilation"] = { name = "Annihilation", @@ -15560,10 +15434,6 @@ return { reqDex = 0, reqInt = 40, naturalMaxLevel = 3, - flavourText = { - "Those citizens of Oriath touched by the", - "roving storms died most horrible deaths.", - }, }, ["Metadata/Items/Gems/SkillGemSupportInvention"] = { name = "Invention", @@ -15583,10 +15453,6 @@ return { reqDex = 60, reqInt = 40, naturalMaxLevel = 3, - flavourText = { - "\"The direct approach failed. So be it. In my crusade", - "to protect Wraeclast, I must take... a longer view.\"", - }, }, ["Metadata/Items/Gems/SkillGemSupportGreaterKineticInstability"] = { name = "Greater Kinetic Instability", @@ -15611,11 +15477,6 @@ return { reqDex = 0, reqInt = 100, naturalMaxLevel = 3, - flavourText = { - "\"Accusations fly. Sinner! Heretic! I am but an initiate, and my patron urges", - "silence. We will keep our heads down while one High Templar supplants", - "another. It's all about power, my patron whispers, and we have none...\"", - }, }, ["Metadata/Items/Gems/SkillGemSupportCooldownRecovery"] = { name = "Cooldown Recovery", @@ -15633,11 +15494,6 @@ return { reqDex = 40, reqInt = 60, naturalMaxLevel = 3, - flavourText = { - "\"The science is... incomprehensible at best. Nearest I can tell, the Arcana exhibits", - "a blast of wrath once it has been fully charged, and when directed at the Elder", - "will force it to take on the form it held before it entered our dimension.\"", - }, }, ["Metadata/Items/Gems/SkillGemSupportVoidstorm"] = { name = "Voidstorm", @@ -15661,11 +15517,6 @@ return { reqDex = 100, reqInt = 0, naturalMaxLevel = 3, - flavourText = { - "\"Not even stopping to look behind, I dove through the shimmering window...", - "With not a minute to waste, I took a nearby tool and jammed it into the infernal", - "device, where it hummed, ominously entrenched in my laboratory floor.\"", - }, }, ["Metadata/Items/Gems/SkillGemSupportVoidShockwave"] = { name = "Void Shockwave", @@ -15688,10 +15539,6 @@ return { reqDex = 0, reqInt = 0, naturalMaxLevel = 3, - flavourText = { - "The Elder's influence yet lingers", - "in the darkest corners of Wraeclast.", - }, }, ["Metadata/Items/Gems/SkillGemSupportEldritchBlasphemy"] = { name = "Eldritch Blasphemy", @@ -15711,10 +15558,6 @@ return { reqDex = 0, reqInt = 100, naturalMaxLevel = 3, - flavourText = { - "Even trapped in stone, the Elder's shadow lingered", - "in their hearts and coiled around their dreams.", - }, }, ["Metadata/Items/Gems/SkillGemSupportGluttony"] = { name = "Gluttony", @@ -15735,11 +15578,6 @@ return { reqDex = 40, reqInt = 60, naturalMaxLevel = 3, - flavourText = { - "Champions of the Tangle are driven to seek", - "sustenance for their master; should they fall", - "behind, they would soon be consumed as well.", - }, }, ["Metadata/Items/Gems/SkillGemSupportOverheat"] = { name = "Overheat", @@ -15759,10 +15597,6 @@ return { reqDex = 0, reqInt = 0, naturalMaxLevel = 3, - flavourText = { - "No walls can stand against its gaze. No fortress,", - "no cave, no mountain. Better to die fighting.", - }, }, ["Metadata/Items/Gems/SkillGemSupportGreaterMultistrike"] = { name = "Greater Multistrike", @@ -15782,11 +15616,6 @@ return { reqDex = 40, reqInt = 0, naturalMaxLevel = 3, - flavourText = { - "Zana watched in awe as her father spoke. With each word,", - "he seemed to grow larger and more frightening, drawing", - "increasingly fervorous responses from his rapt audience.", - }, }, ["Metadata/Items/Gems/SkillGemSupportCongregation"] = { name = "Congregation", @@ -15805,10 +15634,6 @@ return { reqDex = 0, reqInt = 100, naturalMaxLevel = 3, - flavourText = { - "\"I have a recurring nightmare... I run...", - "I scream... but only the dead hear me...\"", - }, }, ["Metadata/Items/Gems/SkillGemSupportFrostmage"] = { name = "Frostmage", @@ -15829,11 +15654,6 @@ return { reqDex = 0, reqInt = 100, naturalMaxLevel = 3, - flavourText = { - "Her understanding of the Atlas was not innate. The", - "more committed she became to understanding it,", - "the more the knowledge weighed on her.", - }, }, ["Metadata/Items/Gems/SkillGemSupportGreaterDevour"] = { name = "Greater Devour", @@ -15851,10 +15671,6 @@ return { reqDex = 40, reqInt = 60, naturalMaxLevel = 3, - flavourText = { - "A High Templar's fear consumed her entire life,", - "so she cast aside her own, to do what must be done.", - }, }, ["Metadata/Items/Gems/SkillGemSupportGreaterUnleash"] = { name = "Greater Unleash", @@ -15873,11 +15689,6 @@ return { reqDex = 0, reqInt = 100, naturalMaxLevel = 3, - flavourText = { - "\"True power grows with patience. You must nurture it.", - "You learn what it needs. You provide. You wait. Only", - "then, when it is ripe, does it yield its fruits.\"", - }, }, ["Metadata/Items/Gems/SkillGemSupportPacifism"] = { name = "Pacifism", @@ -15895,11 +15706,6 @@ return { reqDex = 100, reqInt = 0, naturalMaxLevel = 3, - flavourText = { - "\"My people refused to take part in the ills of Wraeclast.", - "They were called primitives by some, and cowards by", - "others... but they are gone, and we still remain.\"", - }, }, ["Metadata/Items/Gems/SkillGemSupportBloodsoakedBanner"] = { name = "Bloodsoaked Banner", @@ -15920,11 +15726,6 @@ return { reqDex = 40, reqInt = 0, naturalMaxLevel = 3, - flavourText = { - "\"The history of Wraeclast is marked by bloody conflicts. The rise", - "and fall of empires. Man slaughtered man, never suspecting the", - "madness lurking under the surface might not have been innate.\"", - }, }, ["Metadata/Items/Gems/SkillGemSupportMinionPact"] = { name = "Minion Pact", @@ -15945,11 +15746,6 @@ return { reqDex = 0, reqInt = 100, naturalMaxLevel = 3, - flavourText = { - "Immortality could grant Catarina the time necessary to shape", - "a better world... but building requires sacrifice, and the useless", - "would be crushed into the foundation of her new utopia.", - }, }, ["Metadata/Items/Gems/SkillGemSupportUnholyTrinity"] = { name = "Unholy Trinity", @@ -15970,10 +15766,6 @@ return { reqDex = 60, reqInt = 40, naturalMaxLevel = 3, - flavourText = { - "It was a delicate balancing act for Malachai to ensure the loyalty", - "of his three students - each as ambitious as they were depraved.", - }, }, ["Metadata/Items/Gems/SkillGemSupportOverloadedIntensity"] = { name = "Overloaded Intensity", @@ -15993,9 +15785,6 @@ return { reqDex = 0, reqInt = 100, naturalMaxLevel = 3, - flavourText = { - "\"I didn't design it to overload... let's call it a happy little accident!\"", - }, }, ["Metadata/Items/Gems/SkillGemSupportTransfusion"] = { name = "Transfusion", @@ -16015,10 +15804,6 @@ return { reqDex = 0, reqInt = 40, naturalMaxLevel = 3, - flavourText = { - "Let the eternal scream within", - "flow from your weeping blood.", - }, }, ["Metadata/Items/Gems/SkillGemSupportFocusedChannelling"] = { name = "Focused Channelling", diff --git a/src/Data/Skills/act_str.lua b/src/Data/Skills/act_str.lua index 42827a61b5..b56fd04c71 100644 --- a/src/Data/Skills/act_str.lua +++ b/src/Data/Skills/act_str.lua @@ -6037,7 +6037,7 @@ skills["HolyStrike"] = { ["Staff"] = true, ["Two Handed Mace"] = true, }, - statDescriptionScope = "skill_stat_descriptions", + statDescriptionScope = "minion_attack_skill_stat_descriptions", castTime = 1, minionList = { "HolyStrikeMinion", diff --git a/src/Data/Skills/other.lua b/src/Data/Skills/other.lua index 8560be3a4f..a8fc196fb8 100644 --- a/src/Data/Skills/other.lua +++ b/src/Data/Skills/other.lua @@ -678,7 +678,7 @@ skills["CeaselessFleshUnique"] = { description = "Once per second, raise a nearby corpse as a shambling undead. This minion will follow you and attack your enemies with melee strikes, but quickly falls apart. These minions have significantly increased attack speed while on low life.", skillTypes = { [SkillType.Spell] = true, [SkillType.Minion] = true, [SkillType.MinionsCanExplode] = true, [SkillType.Triggerable] = true, [SkillType.CreatesMinion] = true, [SkillType.Triggered] = true, [SkillType.InbuiltTrigger] = true, [SkillType.Duration] = true, }, minionSkillTypes = { [SkillType.Attack] = true, [SkillType.Melee] = true, [SkillType.MeleeSingleTarget] = true, [SkillType.Multistrikeable] = true, }, - statDescriptionScope = "skill_stat_descriptions", + statDescriptionScope = "minion_spell_skill_stat_descriptions", castTime = 1, fromItem = true, minionList = { @@ -4505,7 +4505,7 @@ skills["AnimosityUniqueSkill"] = { color = 2, description = "While active, this skill inflicts the Weeping Black debuff on impaled enemies you hit with bow attacks. Weeping Black deals physical damage over time, and can stack up to five times. This skill cannot be cast by Totems.", skillTypes = { [SkillType.Spell] = true, [SkillType.Buff] = true, [SkillType.Duration] = true, [SkillType.Triggerable] = true, [SkillType.Triggered] = true, [SkillType.Instant] = true, [SkillType.Cooldown] = true, [SkillType.DamageOverTime] = true, [SkillType.Physical] = true, }, - statDescriptionScope = "skill_stat_descriptions", + statDescriptionScope = "debuff_skill_stat_descriptions", castTime = 0, fromItem = true, statMap = { diff --git a/src/Data/Skills/sup_int.lua b/src/Data/Skills/sup_int.lua index 7b6ecb8c3e..b6111ab449 100644 --- a/src/Data/Skills/sup_int.lua +++ b/src/Data/Skills/sup_int.lua @@ -3225,7 +3225,7 @@ skills["TriggeredSupportHiveborn"] = { description = "Summons a horde of Hiveborn Breach monsters to do your bidding. These summoned monsters have all their physical damage converted to cold.", skillTypes = { [SkillType.Cooldown] = true, [SkillType.Minion] = true, [SkillType.Spell] = true, [SkillType.Triggerable] = true, [SkillType.Triggered] = true, [SkillType.InbuiltTrigger] = true, [SkillType.SkillGrantedBySupport] = true, [SkillType.CreatesMinion] = true, }, minionSkillTypes = { [SkillType.Attack] = true, [SkillType.Cold] = true, [SkillType.Melee] = true, [SkillType.MeleeSingleTarget] = true, [SkillType.Multistrikeable] = true, }, - statDescriptionScope = "skill_stat_descriptions", + statDescriptionScope = "minion_spell_skill_stat_descriptions", castTime = 1, minionList = { "Hiveborn", diff --git a/src/Export/Scripts/skills.lua b/src/Export/Scripts/skills.lua index 8f2ffedca4..0d226f63d1 100644 --- a/src/Export/Scripts/skills.lua +++ b/src/Export/Scripts/skills.lua @@ -120,7 +120,7 @@ directiveTable.skill = function(state, args, out) local secondaryEffect if not gemEffect then gemEffect = dat("GemEffects"):GetRow("GrantedEffect2", granted) - if gemEffect then + if gemEffect then secondaryEffect = true end end @@ -602,13 +602,15 @@ for skillGem in dat("SkillGems"):Rows() do local naturalMaxLevel = #dat("ItemExperiencePerLevel"):GetRowList("ItemExperienceType", skillGem.GemLevelProgression) out:write('\t\tnaturalMaxLevel = ', naturalMaxLevel > 0 and naturalMaxLevel or 1, ',\n') if skillGem.BaseItemType.FlavourTextKey and skillGem.BaseItemType.FlavourTextKey.Text then - local cleanedLines = cleanAndSplit(skillGem.BaseItemType.FlavourTextKey.Text) - if #cleanedLines > 0 then - out:write('\t\tflavourText = {\n') - for _, line in ipairs(cleanedLines) do - out:write('\t\t\t"', line, '",\n') + if skillGem.BaseItemType.FlavourTextKey ~= "Work in progress" then + local cleanedLines = cleanAndSplit(skillGem.BaseItemType.FlavourTextKey.Text) + if #cleanedLines > 0 then + out:write('\t\tflavourText = {\n') + for _, line in ipairs(cleanedLines) do + out:write('\t\t\t"', line, '",\n') + end + out:write('\t\t},\n') end - out:write('\t\t},\n') end end out:write('\t},\n') From b373fee3ef0bacc3a5007a0fdda7870202fe8e7b Mon Sep 17 00:00:00 2001 From: Blitz54 Date: Sat, 16 May 2026 23:44:17 -0500 Subject: [PATCH 3/4] Only show with option enabled --- src/Classes/GemSelectControl.lua | 6 +- src/Data/Gems.lua | 191 +++++++++++++++++++++++++++++++ 2 files changed, 194 insertions(+), 3 deletions(-) diff --git a/src/Classes/GemSelectControl.lua b/src/Classes/GemSelectControl.lua index 7f36d2b69a..f7d2bf0d29 100644 --- a/src/Classes/GemSelectControl.lua +++ b/src/Classes/GemSelectControl.lua @@ -94,9 +94,9 @@ function GemSelectClass:CalcOutputWithThisGem(calcFunc, gemData, useFullDPS) else gemList[self.index] = nil end - + self.skillsTab.displayGroup.displayGemList = displayGemList - + return output, gemInstance end @@ -625,7 +625,7 @@ function GemSelectClass:AddGemTooltip(gemInstance) self.tooltip:AddLine(fontSizeBig, "^x7F7F7F" .. gemInstance.gemData.tagString, "FONTIN SC") self:AddCommonGemInfo(gemInstance, grantedEffect, true, secondary and secondary.support and secondary) end - if gemInstance.gemData.flavourText then + if gemInstance.gemData.flavourText and main.showFlavourText then self.tooltip:AddSeparator(10) for _, line in ipairs(gemInstance.gemData.flavourText) do self.tooltip:AddLine(fontSizeBig, colorCodes.UNIQUE .. line, "FONTIN SC ITALIC") diff --git a/src/Data/Gems.lua b/src/Data/Gems.lua index b57cf3d684..4e8c842a1d 100644 --- a/src/Data/Gems.lua +++ b/src/Data/Gems.lua @@ -14978,6 +14978,10 @@ return { reqDex = 0, reqInt = 100, naturalMaxLevel = 3, + flavourText = { + "The echoes of lost loved ones surrounded her,", + "maddeningly close, but forever out of reach.", + }, }, ["Metadata/Items/Gems/SkillGemSupportEclipse"] = { name = "Eclipse", @@ -14994,6 +14998,11 @@ return { reqDex = 250, reqInt = 250, naturalMaxLevel = 3, + flavourText = { + "\"Although we are two bodies, we are of one mind, one heart, drifting", + "through the cosmos, in search of purpose. The moment we cross paths,", + "both fleeting and eternal, our eyes are opened to our potential.\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportInvertTheRules"] = { name = "Invert the Rules", @@ -15011,6 +15020,12 @@ return { reqDex = 0, reqInt = 100, naturalMaxLevel = 3, + flavourText = { + "\"She fled from the prison of her birth, drawn by the breaking", + "of that great Silence. At that moment, the universe was changed,", + "and walls that were once impenetrable became brittle.", + "A fortress became a shell, and she alone escaped.\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportCastOnWardBreak"] = { name = "Cast on Ward Break", @@ -15030,6 +15045,10 @@ return { reqDex = 60, reqInt = 40, naturalMaxLevel = 3, + flavourText = { + "\"Prove yourself! Are you a knave, or a knight?", + "I shall know by the strength of your blows!\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportVaalSacrifice"] = { name = "Vaal Sacrifice", @@ -15049,6 +15068,10 @@ return { reqDex = 0, reqInt = 60, naturalMaxLevel = 3, + flavourText = { + "Under Atziri, sacrifice was a ruthless and efficient science.", + "Her people were willing to give everything... and they did.", + }, }, ["Metadata/Items/Gems/SkillGemSupportGreaterSpellEcho"] = { name = "Greater Spell Echo", @@ -15068,6 +15091,10 @@ return { reqDex = 0, reqInt = 100, naturalMaxLevel = 3, + flavourText = { + "She gazed into the mirror...", + "and the mirror gazed back.", + }, }, ["Metadata/Items/Gems/SkillGemSupportVaalTemptation"] = { name = "Vaal Temptation", @@ -15086,6 +15113,10 @@ return { reqDex = 0, reqInt = 40, naturalMaxLevel = 3, + flavourText = { + "\"If Chaos offers you a deal, challenger,", + "think deeply before you accept.\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportMachinations"] = { name = "Machinations", @@ -15105,6 +15136,10 @@ return { reqDex = 60, reqInt = 40, naturalMaxLevel = 3, + flavourText = { + "\"My master enjoys the strange, and the unexpected.", + "I'm sure you can think of a few ways to entertain them.\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportPyre"] = { name = "Pyre", @@ -15129,6 +15164,10 @@ return { reqDex = 0, reqInt = 0, naturalMaxLevel = 3, + flavourText = { + "A vast pillar of hands embraces a charred sky.", + "Within burns a beam of purest heat.", + }, }, ["Metadata/Items/Gems/SkillGemSupportBonespire"] = { name = "Bonespire", @@ -15154,6 +15193,9 @@ return { reqDex = 0, reqInt = 0, naturalMaxLevel = 3, + flavourText = { + "In its madness, Xesht desperately seeks communion.", + }, }, ["Metadata/Items/Gems/SkillGemSupportFoulgrasp"] = { name = "Foulgrasp", @@ -15178,6 +15220,11 @@ return { reqDex = 40, reqInt = 60, naturalMaxLevel = 3, + flavourText = { + "\"Words without thought drive us", + "to claw and scrabble in the dirt,", + "seeking respite found only in pain.\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportHiveborn"] = { name = "Hiveborn", @@ -15201,6 +15248,10 @@ return { reqDex = 0, reqInt = 100, naturalMaxLevel = 3, + flavourText = { + "\"We spill forth, cleaving our flesh", + "to theirs, until we become one.\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportScornfulHerald"] = { name = "Scornful Herald", @@ -15220,6 +15271,11 @@ return { reqDex = 0, reqInt = 60, naturalMaxLevel = 3, + flavourText = { + "Her bitterness blinded her to the true price of immortality.", + "Let Wraeclast burn and be devoured, she told herself...", + "and only herself, for centuries without end.", + }, }, ["Metadata/Items/Gems/SkillGemSupportCullTheWeak"] = { name = "Cull the Weak", @@ -15237,6 +15293,11 @@ return { reqDex = 100, reqInt = 0, naturalMaxLevel = 3, + flavourText = { + "\"Beidat is the lesser of three evils. The other two desire only", + "to consume us, but under him, there is a chance to survive...", + "a chance to serve... if you can prove yourself useful.\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportGreaterAncestralCall"] = { name = "Greater Ancestral Call", @@ -15257,6 +15318,11 @@ return { reqDex = 0, reqInt = 0, naturalMaxLevel = 3, + flavourText = { + "\"I believe the Halls of the Dead are secretly a", + "training ground. One day, we will be called", + "forth to stand and fight against a great tide.\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportFissure"] = { name = "Fissure", @@ -15282,6 +15348,11 @@ return { reqDex = 0, reqInt = 0, naturalMaxLevel = 3, + flavourText = { + "\"Oh yes, K'Tash understands you. It has a keen swarm-mind", + "somewhere within its multitudes. It hears your pleas, but", + "ignores them... because it hates you with a burning fury.\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportHextoad"] = { name = "Hextoad", @@ -15306,6 +15377,11 @@ return { reqDex = 0, reqInt = 100, naturalMaxLevel = 3, + flavourText = { + "\"A warlock like myself knows that even the most abominable", + "plagues are part of the cycle of life and death. From that ruination,", + "new life will emerge, and that life will kill, and so on...\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportHexpass"] = { name = "Hexpass", @@ -15324,6 +15400,10 @@ return { reqDex = 0, reqInt = 100, naturalMaxLevel = 3, + flavourText = { + "\"Your wards and your charms are meaningless", + "to one who knows your true name.\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportGreaterFork"] = { name = "Greater Fork", @@ -15342,6 +15422,10 @@ return { reqDex = 100, reqInt = 0, naturalMaxLevel = 3, + flavourText = { + "Lioneye earned his moniker by killing", + "three men with a single arrow.", + }, }, ["Metadata/Items/Gems/SkillGemSupportGreaterChain"] = { name = "Greater Chain", @@ -15361,6 +15445,11 @@ return { reqDex = 100, reqInt = 0, naturalMaxLevel = 3, + flavourText = { + "\"We are all connected. Each of us burns with the same fire.", + "Queen Hyrri knew that... she chooses to battle still, somewhere", + "beyond Hinekora's sight. There must be a very good reason.\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportLethalDose"] = { name = "Lethal Dose", @@ -15379,6 +15468,10 @@ return { reqDex = 100, reqInt = 0, naturalMaxLevel = 3, + flavourText = { + "\"They cast me into a pit of vipers, and", + "that is where I found my true self.\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportCompanionship"] = { name = "Companionship", @@ -15397,6 +15490,11 @@ return { reqDex = 60, reqInt = 40, naturalMaxLevel = 3, + flavourText = { + "The Black Sekhema was a formidable fighter", + "alongside her dekhara, but she was unstoppable", + "when she fought atop her trusted mount, Shiyo.", + }, }, ["Metadata/Items/Gems/SkillGemSupportDivineSentinel"] = { name = "Divine Sentinel", @@ -15416,6 +15514,10 @@ return { reqDex = 0, reqInt = 40, naturalMaxLevel = 3, + flavourText = { + "\"The world will never know our sacrifice, but", + "we will stand and fight for as long as it takes!\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportAnnhilation"] = { name = "Annihilation", @@ -15434,6 +15536,10 @@ return { reqDex = 0, reqInt = 40, naturalMaxLevel = 3, + flavourText = { + "Those citizens of Oriath touched by the", + "roving storms died most horrible deaths.", + }, }, ["Metadata/Items/Gems/SkillGemSupportInvention"] = { name = "Invention", @@ -15453,6 +15559,10 @@ return { reqDex = 60, reqInt = 40, naturalMaxLevel = 3, + flavourText = { + "\"The direct approach failed. So be it. In my crusade", + "to protect Wraeclast, I must take... a longer view.\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportGreaterKineticInstability"] = { name = "Greater Kinetic Instability", @@ -15477,6 +15587,11 @@ return { reqDex = 0, reqInt = 100, naturalMaxLevel = 3, + flavourText = { + "\"Accusations fly. Sinner! Heretic! I am but an initiate, and my patron urges", + "silence. We will keep our heads down while one High Templar supplants", + "another. It's all about power, my patron whispers, and we have none...\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportCooldownRecovery"] = { name = "Cooldown Recovery", @@ -15494,6 +15609,11 @@ return { reqDex = 40, reqInt = 60, naturalMaxLevel = 3, + flavourText = { + "\"The science is... incomprehensible at best. Nearest I can tell, the Arcana exhibits", + "a blast of wrath once it has been fully charged, and when directed at the Elder", + "will force it to take on the form it held before it entered our dimension.\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportVoidstorm"] = { name = "Voidstorm", @@ -15517,6 +15637,11 @@ return { reqDex = 100, reqInt = 0, naturalMaxLevel = 3, + flavourText = { + "\"Not even stopping to look behind, I dove through the shimmering window...", + "With not a minute to waste, I took a nearby tool and jammed it into the infernal", + "device, where it hummed, ominously entrenched in my laboratory floor.\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportVoidShockwave"] = { name = "Void Shockwave", @@ -15539,6 +15664,10 @@ return { reqDex = 0, reqInt = 0, naturalMaxLevel = 3, + flavourText = { + "The Elder's influence yet lingers", + "in the darkest corners of Wraeclast.", + }, }, ["Metadata/Items/Gems/SkillGemSupportEldritchBlasphemy"] = { name = "Eldritch Blasphemy", @@ -15558,6 +15687,10 @@ return { reqDex = 0, reqInt = 100, naturalMaxLevel = 3, + flavourText = { + "Even trapped in stone, the Elder's shadow lingered", + "in their hearts and coiled around their dreams.", + }, }, ["Metadata/Items/Gems/SkillGemSupportGluttony"] = { name = "Gluttony", @@ -15578,6 +15711,11 @@ return { reqDex = 40, reqInt = 60, naturalMaxLevel = 3, + flavourText = { + "Champions of the Tangle are driven to seek", + "sustenance for their master; should they fall", + "behind, they would soon be consumed as well.", + }, }, ["Metadata/Items/Gems/SkillGemSupportOverheat"] = { name = "Overheat", @@ -15597,6 +15735,10 @@ return { reqDex = 0, reqInt = 0, naturalMaxLevel = 3, + flavourText = { + "No walls can stand against its gaze. No fortress,", + "no cave, no mountain. Better to die fighting.", + }, }, ["Metadata/Items/Gems/SkillGemSupportGreaterMultistrike"] = { name = "Greater Multistrike", @@ -15616,6 +15758,11 @@ return { reqDex = 40, reqInt = 0, naturalMaxLevel = 3, + flavourText = { + "Zana watched in awe as her father spoke. With each word,", + "he seemed to grow larger and more frightening, drawing", + "increasingly fervorous responses from his rapt audience.", + }, }, ["Metadata/Items/Gems/SkillGemSupportCongregation"] = { name = "Congregation", @@ -15634,6 +15781,10 @@ return { reqDex = 0, reqInt = 100, naturalMaxLevel = 3, + flavourText = { + "\"I have a recurring nightmare... I run...", + "I scream... but only the dead hear me...\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportFrostmage"] = { name = "Frostmage", @@ -15654,6 +15805,11 @@ return { reqDex = 0, reqInt = 100, naturalMaxLevel = 3, + flavourText = { + "Her understanding of the Atlas was not innate. The", + "more committed she became to understanding it,", + "the more the knowledge weighed on her.", + }, }, ["Metadata/Items/Gems/SkillGemSupportGreaterDevour"] = { name = "Greater Devour", @@ -15671,6 +15827,10 @@ return { reqDex = 40, reqInt = 60, naturalMaxLevel = 3, + flavourText = { + "A High Templar's fear consumed her entire life,", + "so she cast aside her own, to do what must be done.", + }, }, ["Metadata/Items/Gems/SkillGemSupportGreaterUnleash"] = { name = "Greater Unleash", @@ -15689,6 +15849,11 @@ return { reqDex = 0, reqInt = 100, naturalMaxLevel = 3, + flavourText = { + "\"True power grows with patience. You must nurture it.", + "You learn what it needs. You provide. You wait. Only", + "then, when it is ripe, does it yield its fruits.\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportPacifism"] = { name = "Pacifism", @@ -15706,6 +15871,11 @@ return { reqDex = 100, reqInt = 0, naturalMaxLevel = 3, + flavourText = { + "\"My people refused to take part in the ills of Wraeclast.", + "They were called primitives by some, and cowards by", + "others... but they are gone, and we still remain.\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportBloodsoakedBanner"] = { name = "Bloodsoaked Banner", @@ -15726,6 +15896,11 @@ return { reqDex = 40, reqInt = 0, naturalMaxLevel = 3, + flavourText = { + "\"The history of Wraeclast is marked by bloody conflicts. The rise", + "and fall of empires. Man slaughtered man, never suspecting the", + "madness lurking under the surface might not have been innate.\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportMinionPact"] = { name = "Minion Pact", @@ -15746,6 +15921,11 @@ return { reqDex = 0, reqInt = 100, naturalMaxLevel = 3, + flavourText = { + "Immortality could grant Catarina the time necessary to shape", + "a better world... but building requires sacrifice, and the useless", + "would be crushed into the foundation of her new utopia.", + }, }, ["Metadata/Items/Gems/SkillGemSupportUnholyTrinity"] = { name = "Unholy Trinity", @@ -15766,6 +15946,10 @@ return { reqDex = 60, reqInt = 40, naturalMaxLevel = 3, + flavourText = { + "It was a delicate balancing act for Malachai to ensure the loyalty", + "of his three students - each as ambitious as they were depraved.", + }, }, ["Metadata/Items/Gems/SkillGemSupportOverloadedIntensity"] = { name = "Overloaded Intensity", @@ -15785,6 +15969,9 @@ return { reqDex = 0, reqInt = 100, naturalMaxLevel = 3, + flavourText = { + "\"I didn't design it to overload... let's call it a happy little accident!\"", + }, }, ["Metadata/Items/Gems/SkillGemSupportTransfusion"] = { name = "Transfusion", @@ -15804,6 +15991,10 @@ return { reqDex = 0, reqInt = 40, naturalMaxLevel = 3, + flavourText = { + "Let the eternal scream within", + "flow from your weeping blood.", + }, }, ["Metadata/Items/Gems/SkillGemSupportFocusedChannelling"] = { name = "Focused Channelling", From a36a93ece1c54ff55792fe7e62bb497e7631f591 Mon Sep 17 00:00:00 2001 From: Blitz54 Date: Sun, 17 May 2026 00:59:48 -0500 Subject: [PATCH 4/4] Fix spaces --- src/Export/Scripts/bases.lua | 56 +++++++++++++++++----------------- src/Export/Scripts/skills.lua | 57 +++++++++++++++++------------------ 2 files changed, 56 insertions(+), 57 deletions(-) diff --git a/src/Export/Scripts/bases.lua b/src/Export/Scripts/bases.lua index 8511c271b7..31dfa459c9 100644 --- a/src/Export/Scripts/bases.lua +++ b/src/Export/Scripts/bases.lua @@ -7,43 +7,43 @@ local s_format = string.format -- Add cleanAndSplit function local function cleanAndSplit(str) - -- Normalize newlines - str = str:gsub("\r\n", "\n") + -- Normalize newlines + str = str:gsub("\r\n", "\n") - -- Replace with a newline and ^8 - str = str:gsub("", "\n^8") + -- Replace with a newline and ^8 + str = str:gsub("", "\n^8") - local lines = {} - for line in str:gmatch("[^\n]+") do - -- trim - line = line:match("^%s*(.-)%s*$") + local lines = {} + for line in str:gmatch("[^\n]+") do + -- trim + line = line:match("^%s*(.-)%s*$") - if line ~= "" then - -- Remove braces but keep contents - line = line:gsub("%{(.-)%}", "%1") + if line ~= "" then + -- Remove braces but keep contents + line = line:gsub("%{(.-)%}", "%1") - -- Remove any <<...>> sequences (non-greedy) - line = line:gsub("<<(.-)>>", "") + -- Remove any <<...>> sequences (non-greedy) + line = line:gsub("<<(.-)>>", "") - -- trim again in case removal left surrounding spaces - line = line:match("^%s*(.-)%s*$") + -- trim again in case removal left surrounding spaces + line = line:match("^%s*(.-)%s*$") - -- Escape quotes - line = line:gsub('"', '\\"') + -- Escape quotes + line = line:gsub('"', '\\"') - -- Insert a blank line before any ^8 line - if line:match("^%^8") and (#lines == 0 or lines[#lines] ~= "") then - table.insert(lines, "") - end + -- Insert a blank line before any ^8 line + if line:match("^%^8") and (#lines == 0 or lines[#lines] ~= "") then + table.insert(lines, "") + end - -- Only add non-empty lines - if line ~= "" then - table.insert(lines, line) - end - end - end + -- Only add non-empty lines + if line ~= "" then + table.insert(lines, line) + end + end + end - return lines + return lines end local directiveTable = { } diff --git a/src/Export/Scripts/skills.lua b/src/Export/Scripts/skills.lua index 0d226f63d1..0643955fa5 100644 --- a/src/Export/Scripts/skills.lua +++ b/src/Export/Scripts/skills.lua @@ -9,46 +9,45 @@ local fullNameGems = { } local function cleanAndSplit(str) - -- Normalize newlines - str = str:gsub("\r\n", "\n") + -- Normalize newlines + str = str:gsub("\r\n", "\n") - -- Replace with a newline and ^8 - str = str:gsub("", "\n^8") + -- Replace with a newline and ^8 + str = str:gsub("", "\n^8") - local lines = {} - for line in str:gmatch("[^\n]+") do - -- trim - line = line:match("^%s*(.-)%s*$") + local lines = {} + for line in str:gmatch("[^\n]+") do + -- trim + line = line:match("^%s*(.-)%s*$") - if line ~= "" then - -- Remove braces but keep contents - line = line:gsub("%{(.-)%}", "%1") + if line ~= "" then + -- Remove braces but keep contents + line = line:gsub("%{(.-)%}", "%1") - -- Remove any <<...>> sequences (non-greedy) - line = line:gsub("<<(.-)>>", "") + -- Remove any <<...>> sequences (non-greedy) + line = line:gsub("<<(.-)>>", "") - -- trim again in case removal left surrounding spaces - line = line:match("^%s*(.-)%s*$") + -- trim again in case removal left surrounding spaces + line = line:match("^%s*(.-)%s*$") - -- Escape quotes - line = line:gsub('"', '\\"') + -- Escape quotes + line = line:gsub('"', '\\"') - -- Insert a blank line before any ^8 line - if line:match("^%^8") and (#lines == 0 or lines[#lines] ~= "") then - table.insert(lines, "") - end + -- Insert a blank line before any ^8 line + if line:match("^%^8") and (#lines == 0 or lines[#lines] ~= "") then + table.insert(lines, "") + end - -- Only add non-empty lines - if line ~= "" then - table.insert(lines, line) - end - end - end + -- Only add non-empty lines + if line ~= "" then + table.insert(lines, line) + end + end + end - return lines + return lines end - local function mapAST(ast) return "SkillType."..(skillTypeMap[ast._rowIndex] or ("Unknown"..ast._rowIndex)) end