feat: NTE gear optimizer web app
Client-side optimizer for Neverness to Everness console builds. Imports a gear export from nte-history-exporter, keeps it in IndexedDB, and solves for the best module placement per character or across a team. - domain/: pure ports of the Python research scripts (shapes, cartridges, board tiling, stats, scoring, set bonuses, Arc effects, sheet prediction). No DOM, no storage imports, so they stay worker-safe and Node-testable. - solver/: single-character solve with branch and bound, plus a three-phase team solve (portfolio, leximin, column generation) over disjoint item sets. Runs in a Worker when one can be constructed, inline otherwise. - db/: three storage tiers selected by use rather than feature detection, fail-closed import validation, and undo that restores both sides of a steal. - ui/: React 19 views for items, characters and teams; the board is drawn as the deliverable rather than a score. - Two build targets: a hosted bundle and a single self-contained nte.html with no external requests. Values the model cannot measure are reported as unavailable rather than guessed: cartridge set bonuses, the level 80 base-stat multiplier, and the distinction between "optimal for this packing" and globally optimal. 145 tests, tsc clean, both build targets clean. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
commit
5ce255fa6f
157 changed files with 92600 additions and 0 deletions
51
data-src/arc_effects.json
Normal file
51
data-src/arc_effects.json
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
{
|
||||
"fork_appliance": {"name": "Real Music", "effects": [{"placeholder": 0, "stat": null, "mode": "unmodellable", "why": "Redirect Skill DMG is named ability damage, not a sheet stat."}]},
|
||||
"fork_vine": {"name": "Be Happy", "effects": [{"placeholder": 0, "stat": "HP", "percent": true, "mode": "toggle", "default": false, "why": "Heal-on-kill is conditional HP recovery for wearer."}, {"placeholder": 1, "stat": null, "mode": "duration", "why": "Cooldown in seconds, not a stat."}]},
|
||||
"fork_dustbin": {"name": "Dangerous Game", "effects": [{"placeholder": 0, "stat": "Break Intensity", "mode": "toggle", "default": false, "why": "Conditional Break Intensity while reducing Break."}, {"placeholder": 1, "stat": null, "mode": "duration", "why": "Buff duration in seconds, not a stat."}, {"placeholder": 2, "stat": null, "mode": "duration", "why": "Cooldown in seconds, not a stat."}]},
|
||||
"fork_nonos": {"name": "First Step to Success", "effects": [{"placeholder": 0, "stat": "ATK", "percent": true, "mode": "toggle", "default": false, "why": "Conditional ATK buff after Redirect Skill."}, {"placeholder": 1, "stat": null, "mode": "duration", "why": "Buff duration in seconds, not a stat."}, {"placeholder": 2, "stat": null, "mode": "duration", "why": "Cooldown in seconds, not a stat."}]},
|
||||
"fork_Prokaryon": {"name": "Us.", "effects": [{"placeholder": 0, "stat": null, "mode": "unmodellable", "why": "Basic Attack damage is named ability damage, not a sheet stat."}]},
|
||||
"fork_BitGame": {"name": "Blow up the Crowd", "effects": [{"placeholder": 0, "stat": "ATK", "percent": true, "mode": "toggle", "default": false, "why": "Off-field ATK buff is conditional."}, {"placeholder": 1, "stat": "ATK", "percent": true, "mode": "stacks", "max_stacks": 4, "default_stacks": 0, "why": "ATK gained per damage trigger stacks to 4."}, {"placeholder": 2, "stat": null, "mode": "duration", "why": "Trigger interval in seconds, not a stat."}, {"placeholder": 3, "stat": null, "mode": "toggle", "default": false, "why": "Psyche DMG is ability/element damage, not a sheet stat."}, {"placeholder": 4, "stat": null, "mode": "stacks", "max_stacks": 10, "default_stacks": 0, "why": "Named ability damage stacker; not modelled as sheet stat."}]},
|
||||
"fork_LunarPhase": {"name": "Blushing Mirage", "effects": [{"placeholder": 0, "stat": "ATK", "percent": true, "mode": "always", "why": "Flat ATK always active."}, {"placeholder": 1, "stat": null, "mode": "toggle", "default": false, "why": "Cosmos DMG is element damage, not unconditional sheet stat."}, {"placeholder": 2, "stat": "DEF", "percent": true, "mode": "toggle", "default": false, "why": "DEF ignore is a conditional defensive modifier."}, {"placeholder": 3, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}]},
|
||||
"fork_jingmotingyuan": {"name": "Camellia Society", "effects": [{"placeholder": 0, "stat": "CRIT DMG", "percent": true, "mode": "stacks", "max_stacks": 4, "default_stacks": 0, "why": "Crit DMG stacks when HP is reduced without damage."}, {"placeholder": 1, "stat": null, "mode": "duration", "why": "Stack duration in seconds, not a stat."}, {"placeholder": 2, "stat": null, "mode": "duration", "why": "Self-HP cost, not a stat."}, {"placeholder": 3, "stat": null, "mode": "duration", "why": "Cooldown in seconds, not a stat."}, {"placeholder": 4, "stat": null, "mode": "unmodellable", "why": "Incantation DMG is named attack damage, not a sheet stat."}, {"placeholder": 5, "stat": null, "mode": "unmodellable", "why": "Incantation DMG is named attack damage, not a sheet stat."}]},
|
||||
"fork_mamen": {"name": "Contemplative Cat", "effects": [{"placeholder": 0, "stat": null, "mode": "unmodellable", "why": "Fons threshold only gates the effect; not a sheet stat."}, {"placeholder": 1, "stat": null, "mode": "stacks", "max_stacks": 10, "default_stacks": 0, "why": "Cosmos DMG is element damage, stacked per Fons threshold."}]},
|
||||
"fork_rishi": {"name": "Day Off", "effects": [{"placeholder": 0, "stat": "Charge Efficiency", "percent": true, "mode": "always", "why": "Flat Charge Efficiency bonus while equipped."}, {"placeholder": 1, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}, {"placeholder": 2, "stat": null, "mode": "duration", "why": "Ultimate Energy restore amount is not a sheet stat."}, {"placeholder": 3, "stat": null, "mode": "stacks", "max_stacks": 5, "default_stacks": 0, "why": "Count of restores, not a sheet stat."}, {"placeholder": 4, "stat": null, "mode": "duration", "why": "Cooldown in seconds, not a stat."}]},
|
||||
"fork_Arachne": {"name": "Eternal Waltz", "effects": [{"placeholder": 0, "stat": "HP", "percent": true, "mode": "always", "why": "Flat Max HP bonus while equipped."}, {"placeholder": 1, "stat": null, "mode": "toggle", "default": false, "why": "Mental DMG is element/ability damage, not a sheet stat."}, {"placeholder": 2, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}]},
|
||||
"fork_BlastCandy": {"name": "Fluff of Fearlessness", "effects": [{"placeholder": 0, "stat": "ATK", "percent": true, "mode": "toggle", "default": false, "why": "ATK buff after Ultimate, conditional."}, {"placeholder": 1, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}]},
|
||||
"fork_KnightCandy": {"name": "Fluff of Ferocity", "effects": [{"placeholder": 0, "stat": "CRIT DMG", "percent": true, "mode": "stacks", "max_stacks": 10, "default_stacks": 0, "why": "Crit DMG stacks on crit hits."}, {"placeholder": 1, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}]},
|
||||
"fork_ThiefCandy": {"name": "Fluff of Finesse", "effects": [{"placeholder": 0, "stat": "Universal DMG%", "percent": true, "mode": "stacks", "max_stacks": 3, "default_stacks": 0, "why": "Damage bonus is universal and stacks on Critical Dodge."}, {"placeholder": 1, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}]},
|
||||
"fork_MotorCandy": {"name": "Fluff of Fleetness", "effects": [{"placeholder": 0, "stat": null, "mode": "duration", "why": "1s tick interval, not a stat."}, {"placeholder": 1, "stat": "ATK", "percent": true, "mode": "stacks", "max_stacks": 5, "default_stacks": 0, "why": "ATK stacks while active up to 5."}]},
|
||||
"fork_BoxingCandy": {"name": "Fluff of Fortitude", "effects": [{"placeholder": 0, "stat": "Universal DMG%", "percent": true, "mode": "toggle", "default": false, "why": "DMG bonus is universal and conditionally higher below 50% HP."}, {"placeholder": 1, "stat": "Universal DMG%", "percent": true, "mode": "toggle", "default": false, "why": "Higher conditional tier of same DMG bonus."}]},
|
||||
"fork_mofeikesi": {"name": "Good Boy's Grand Adventure", "effects": [{"placeholder": 0, "stat": "Charge Efficiency", "percent": true, "mode": "always", "why": "Flat Charge Efficiency bonus while equipped."}, {"placeholder": 1, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}, {"placeholder": 2, "stat": "ATK", "percent": true, "mode": "toggle", "default": false, "why": "Team ATK buff after Ultimate."}, {"placeholder": 3, "stat": "ATK", "percent": true, "mode": "toggle", "default": false, "why": "Extra team ATK bonus if Ultimate controls enemies."}]},
|
||||
"fork_PoliceRat": {"name": "Hethereau's Keeper", "effects": [{"placeholder": 0, "stat": "ATK", "percent": true, "mode": "always", "why": "Flat ATK bonus while equipped."}, {"placeholder": 1, "stat": null, "mode": "unmodellable", "why": "Boss damage is target-specific damage, not a sheet stat."}, {"placeholder": 2, "stat": null, "mode": "unmodellable", "why": "Summon damage based on ATK is not a sheet stat."}, {"placeholder": 3, "stat": null, "mode": "duration", "why": "Cooldown in seconds, not a stat."}]},
|
||||
"fork_Time": {"name": "Marching Beyond Time", "effects": [{"placeholder": 0, "stat": "ATK", "percent": true, "mode": "always", "why": "Flat ATK bonus while equipped."}, {"placeholder": 1, "stat": "Ultimate Crit DMG", "percent": true, "mode": "stacks", "max_stacks": 3, "default_stacks": 0, "why": "Ultimate Crit DMG consumes Wastetime stacks."}, {"placeholder": 2, "stat": null, "mode": "stacks", "max_stacks": 3, "default_stacks": 0, "why": "Wastetime count is a trigger resource, not a sheet stat."}, {"placeholder": 3, "stat": "DEF", "percent": true, "mode": "toggle", "default": false, "why": "DEF ignore is conditional on consuming 3 stacks."}, {"placeholder": 4, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}]},
|
||||
"fork_wushoutieyu": {"name": "Raging Flames", "effects": [{"placeholder": 0, "stat": null, "mode": "toggle", "default": false, "why": "Redirect Skill/Ultimate DMG is named ability damage, not a sheet stat."}, {"placeholder": 1, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}, {"placeholder": 2, "stat": null, "mode": "stacks", "max_stacks": 2, "default_stacks": 0, "why": "Stack count for named ability damage, not a sheet stat."}, {"placeholder": 3, "stat": null, "mode": "toggle", "default": false, "why": "Lakshana DMG is element damage, not always-on sheet stat."}]},
|
||||
"fork_DemonBlade": {"name": "Ravenous Blade", "effects": [{"placeholder": 0, "stat": "CRIT Rate", "percent": true, "mode": "always", "why": "Flat Crit Rate while equipped."}, {"placeholder": 1, "stat": "CRIT DMG", "percent": true, "mode": "stacks", "max_stacks": 7, "default_stacks": 0, "why": "Crit DMG stacks when dealing Incantation DMG."}, {"placeholder": 2, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}]},
|
||||
"fork_TigerTally": {"name": "Ready-Ready", "effects": [{"placeholder": 0, "stat": "ATK", "percent": true, "mode": "always", "why": "Flat ATK bonus while equipped."}, {"placeholder": 1, "stat": null, "mode": "unmodellable", "why": "Basic Attack/Critical Riposte damage is named ability damage."}, {"placeholder": 2, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}, {"placeholder": 3, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}, {"placeholder": 4, "stat": null, "mode": "unmodellable", "why": "Boss damage is target-specific damage, not a sheet stat."}, {"placeholder": 5, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}]},
|
||||
"fork_Butterfly": {"name": "Reality Refuge", "effects": [{"placeholder": 0, "stat": null, "mode": "toggle", "default": false, "why": "Anima DMG is element damage, not a sheet stat."}, {"placeholder": 1, "stat": null, "mode": "toggle", "default": false, "why": "Attachment DMG is named ability damage, not a sheet stat."}, {"placeholder": 2, "stat": null, "mode": "toggle", "default": false, "why": "Higher conditional tier of same named ability damage."}, {"placeholder": 3, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}]},
|
||||
"fork_Whale": {"name": "Song of the Whale", "effects": [{"placeholder": 0, "stat": "ATK", "percent": true, "mode": "always", "why": "Flat ATK bonus while equipped."}, {"placeholder": 1, "stat": null, "mode": "toggle", "default": false, "why": "Damage to Broken enemies is conditional target damage."}, {"placeholder": 2, "stat": "HP", "percent": true, "mode": "toggle", "default": false, "why": "HP recovery on Broken enemy defeat."}, {"placeholder": 3, "stat": null, "mode": "duration", "why": "Cooldown in seconds, not a stat."}]},
|
||||
"fork_moon": {"name": "Stellar Veil", "effects": [{"placeholder": 0, "stat": null, "mode": "toggle", "default": false, "why": "Psyche DMG is element damage, not a sheet stat."}, {"placeholder": 1, "stat": "CRIT DMG", "percent": true, "mode": "stacks", "max_stacks": 10, "default_stacks": 0, "why": "Crit DMG stacks on Psyche DMG hits."}, {"placeholder": 2, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}]},
|
||||
"fork_NestBird": {"name": "Tears Beneath the Mask", "effects": [{"placeholder": 0, "stat": null, "mode": "unmodellable", "why": "Damage reduction on marked enemies is not a wearer sheet stat."}]},
|
||||
"fork_Rose": {"name": "The Last Rose", "effects": [{"placeholder": 0, "stat": "ATK", "percent": true, "mode": "always", "why": "Flat ATK bonus while equipped."}, {"placeholder": 1, "stat": "CRIT DMG", "percent": true, "mode": "stacks", "max_stacks": 10, "default_stacks": 0, "why": "Crit DMG stacks from Chaos Thorn."}, {"placeholder": 2, "stat": null, "mode": "duration", "why": "Stack duration in seconds, not a stat."}, {"placeholder": 3, "stat": null, "mode": "duration", "why": "Duration of immediate stack grant, not a stat."}]},
|
||||
"fork_worldrain": {"name": "The Rain That Shook the World", "effects": [{"placeholder": 0, "stat": null, "mode": "toggle", "default": false, "why": "Cosmos DMG is element damage, not a sheet stat."}, {"placeholder": 1, "stat": "Cycle Intensity", "mode": "toggle", "default": false, "why": "Flat Cycle Intensity bonus after Redirect Skill."}, {"placeholder": 2, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}]},
|
||||
"fork_Door": {"name": "The Wrong Gate", "effects": [{"placeholder": 0, "stat": "ATK", "percent": true, "mode": "always", "why": "Flat ATK bonus while equipped."}, {"placeholder": 1, "stat": null, "mode": "toggle", "default": false, "why": "Anima DMG is element damage, not a sheet stat."}, {"placeholder": 2, "stat": "Universal DMG%", "percent": true, "mode": "toggle", "default": false, "why": "All allies' DMG is a universal damage buff."}, {"placeholder": 3, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}]},
|
||||
"fork_GoldRecord": {"name": "Voice of the Voyager", "effects": [{"placeholder": 0, "stat": "ATK", "percent": true, "mode": "always", "why": "Flat ATK bonus while equipped."}, {"placeholder": 1, "stat": null, "mode": "unmodellable", "why": "Support Skill Crit DMG is named ability damage."}, {"placeholder": 2, "stat": null, "mode": "stacks", "max_stacks": 3, "default_stacks": 0, "why": "Ultimate Crit DMG stacks from Support Skill damage."}, {"placeholder": 3, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}]},
|
||||
"fork_GoldWool": {"name": "What's Desired", "effects": [{"placeholder": 0, "stat": null, "mode": "toggle", "default": false, "why": "Lakshana DMG is element damage, not a sheet stat."}, {"placeholder": 1, "stat": "CRIT DMG", "percent": true, "mode": "toggle", "default": false, "why": "Conditional Crit DMG buff after Redirect Skill or Ultimate."}, {"placeholder": 2, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}]},
|
||||
"fork_Nakupeda": {"name": "Your Happiness is Priceless", "effects": [{"placeholder": 0, "stat": "HP", "percent": true, "mode": "always", "why": "Flat HP bonus while equipped."}, {"placeholder": 1, "stat": null, "mode": "toggle", "default": false, "why": "Team healing/Shield/HP effects are not wearer sheet stats."}, {"placeholder": 2, "stat": null, "mode": "toggle", "default": false, "why": "Shield amount is not a wearer sheet stat."}, {"placeholder": 3, "stat": null, "mode": "duration", "why": "Shield duration in seconds, not a stat."}, {"placeholder": 4, "stat": null, "mode": "toggle", "default": false, "why": "Team HP recovery is not a wearer sheet stat."}, {"placeholder": 5, "stat": null, "mode": "duration", "why": "Cooldown in seconds, not a stat."}]},
|
||||
"fork_BlackBook": {"name": "Youthful Fantasy", "effects": [{"placeholder": 0, "stat": "Break Intensity", "mode": "always", "why": "Flat Break Intensity bonus while equipped."}, {"placeholder": 1, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}, {"placeholder": 2, "stat": null, "mode": "duration", "why": "Chain count is a trigger resource, not a stat."}, {"placeholder": 3, "stat": null, "mode": "toggle", "default": false, "why": "Chaos DMG is element damage, not a sheet stat."}, {"placeholder": 4, "stat": null, "mode": "unmodellable", "why": "Break Damage scaling is not a wearer sheet stat."}]},
|
||||
"fork_koinobori": {"name": "A Time Will Come", "effects": [{"placeholder": 0, "stat": "ATK", "percent": true, "mode": "toggle", "default": false, "why": "Conditional team ATK bonus when team comp requirement is met."}, {"placeholder": 1, "stat": "DEF", "percent": true, "mode": "toggle", "default": false, "why": "Conditional team DEF bonus when team comp requirement is met."}, {"placeholder": 2, "stat": "HP", "percent": true, "mode": "toggle", "default": false, "why": "Conditional team HP bonus when team comp requirement is met."}]},
|
||||
"fork_Castle": {"name": "Call of the Twisted City", "effects": [{"placeholder": 0, "stat": "Healing Bonus", "percent": true, "mode": "toggle", "default": false, "why": "Conditional Healing Bonus after Redirect Skill."}, {"placeholder": 1, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}]},
|
||||
"fork_PaperPlane": {"name": "Clear Skies", "effects": [{"placeholder": 0, "stat": null, "mode": "unmodellable", "why": "Redirect Skill/Ultimate DMG is named ability damage, not a sheet stat."}]},
|
||||
"fork_bopu": {"name": "Cosmos Daze, Wild Reverie", "effects": [{"placeholder": 0, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}, {"placeholder": 1, "stat": "Universal DMG%", "percent": true, "mode": "toggle", "default": false, "why": "Damage dealt bonus is universal and conditional after Support Skill."}, {"placeholder": 2, "stat": null, "mode": "duration", "why": "Cooldown in seconds, not a stat."}]},
|
||||
"fork_yaodao": {"name": "Drawn Blade", "effects": [{"placeholder": 0, "stat": null, "mode": "unmodellable", "why": "Incantation DMG based on ATK is named ability damage."}]},
|
||||
"fork_spider": {"name": "Failing You, Heavy in My Heart", "effects": [{"placeholder": 0, "stat": null, "mode": "stacks", "max_stacks": 8, "default_stacks": 0, "why": "Stack count for Spider Knowledge resource, not a sheet stat."}, {"placeholder": 1, "stat": "ATK", "percent": true, "mode": "stacks", "max_stacks": 8, "default_stacks": 0, "why": "Team ATK buff per stack consumed on Ultimate."}, {"placeholder": 2, "stat": "ATK", "percent": true, "mode": "toggle", "default": false, "why": "Conditional extra ATK when 8 stacks are consumed."}]},
|
||||
"fork_lingganzhongjiezhe": {"name": "Mind Royale", "effects": [{"placeholder": 0, "stat": null, "mode": "duration", "why": "Ultimate Energy amount is not a sheet stat."}, {"placeholder": 1, "stat": null, "mode": "duration", "why": "Cooldown in seconds, not a stat."}]},
|
||||
"fork_oulaquantao": {"name": "Oraora!", "effects": [{"placeholder": 0, "stat": null, "mode": "duration", "why": "Stack duration in seconds, not a stat."}, {"placeholder": 1, "stat": null, "mode": "stacks", "max_stacks": 10, "default_stacks": 0, "why": "Basic Attack DMG is named ability damage, not a sheet stat."}]},
|
||||
"fork_jiaojuan": {"name": "Shiny Days", "effects": [{"placeholder": 0, "stat": "Break Intensity", "mode": "always", "why": "Flat Break Intensity bonus while equipped."}, {"placeholder": 1, "stat": null, "mode": "toggle", "default": false, "why": "Damage against Broken units is target-specific damage, not a sheet stat."}]},
|
||||
"fork_snowman": {"name": "The Fools' Spring", "effects": [{"placeholder": 0, "stat": "ATK", "percent": true, "mode": "toggle", "default": false, "why": "Conditional ATK buff while shielded."}]},
|
||||
"fork_wuhuakuang": {"name": "The Forgotten", "effects": [{"placeholder": 0, "stat": "ATK", "percent": true, "mode": "toggle", "default": false, "why": "Conditional ATK buff above 50% HP."}, {"placeholder": 1, "stat": "DEF", "percent": true, "mode": "toggle", "default": false, "why": "Conditional DEF buff below 50% HP."}]},
|
||||
"fork_BitterCake": {"name": "The Good, The Bad, The Bitter", "effects": [{"placeholder": 0, "stat": "DEF", "percent": true, "mode": "toggle", "default": false, "why": "Conditional DEF buff when taking damage."}, {"placeholder": 1, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}, {"placeholder": 2, "stat": null, "mode": "duration", "why": "Cooldown in seconds, not a stat."}]},
|
||||
"fork_tuansanlang": {"name": "The Great Thief", "effects": [{"placeholder": 0, "stat": "Break Intensity", "mode": "toggle", "default": false, "why": "Conditional team Break Intensity buff for same Esper Type."}]},
|
||||
"fork_Crowbar": {"name": "Time Bandit", "effects": [{"placeholder": 0, "stat": "Break Intensity", "mode": "toggle", "default": false, "why": "Conditional Break Intensity buff after Redirect Skill."}, {"placeholder": 1, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}]},
|
||||
"fork_yuren": {"name": "Umbrella", "effects": [{"placeholder": 0, "stat": "HP", "percent": true, "mode": "always", "why": "Flat HP bonus while equipped."}, {"placeholder": 1, "stat": null, "mode": "toggle", "default": false, "why": "Shield strength is not a wearer sheet stat."}]},
|
||||
"fork_Kite": {"name": "Watch Your Heads!", "effects": [{"placeholder": 0, "stat": "ATK", "percent": true, "mode": "toggle", "default": false, "why": "Conditional ATK buff after Redirect Skill."}, {"placeholder": 1, "stat": null, "mode": "toggle", "default": false, "why": "Lakshana DMG is element damage, not a sheet stat."}, {"placeholder": 2, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}]}
|
||||
}
|
||||
14708
data-src/arcs.json
Normal file
14708
data-src/arcs.json
Normal file
File diff suppressed because it is too large
Load diff
66951
data-src/espers.json
Normal file
66951
data-src/espers.json
Normal file
File diff suppressed because it is too large
Load diff
13
data-src/guides.json
Normal file
13
data-src/guides.json
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
"format": "nte-guides",
|
||||
"format_version": 1,
|
||||
"_source": "Prydwen build guides, entered by hand and reviewed before committing.",
|
||||
"_why_not_scraped": "Prydwen's character pages are client-rendered, so a plain fetch returns only navigation chrome, and their Gatsby /page-data/ endpoint answers 410 Gone. Their robots.txt does allow content pages with a 10 second crawl-delay, so a headless render would be permitted - it is just not something the build can do unattended. Entries below are typed in from the published guide.",
|
||||
"_shape": {
|
||||
"key": "the GA_<key>_* ability key, so it joins to a capture directly",
|
||||
"variants": "one per published priority set (Main DPS, SubDPS, Break, DoT)",
|
||||
"targets": "recommended endgame stats, raw stat ids, percentages as fractions",
|
||||
"priority": "substat ranking, best first; weights are derived from position"
|
||||
},
|
||||
"characters": []
|
||||
}
|
||||
127
data-src/set-bonuses.json
Normal file
127
data-src/set-bonuses.json
Normal file
|
|
@ -0,0 +1,127 @@
|
|||
{
|
||||
"format": "nte-set-bonuses",
|
||||
"format_version": 1,
|
||||
"note": "Bonus VALUES are not in any capture and not on everness: items.json carries only the cartridge boxes. Each tier stays unknown until read in game or scraped, and an unknown tier contributes nothing rather than a guessed number.",
|
||||
"sets": {
|
||||
"Crimson: Twin Butterflies": {
|
||||
"2": {
|
||||
"unknown": true,
|
||||
"stats": []
|
||||
},
|
||||
"4": {
|
||||
"unknown": true,
|
||||
"stats": []
|
||||
}
|
||||
},
|
||||
"Devil's Blood: Curse": {
|
||||
"2": {
|
||||
"unknown": true,
|
||||
"stats": []
|
||||
},
|
||||
"4": {
|
||||
"unknown": true,
|
||||
"stats": []
|
||||
}
|
||||
},
|
||||
"Diabolos": {
|
||||
"2": {
|
||||
"unknown": true,
|
||||
"stats": []
|
||||
},
|
||||
"4": {
|
||||
"unknown": true,
|
||||
"stats": []
|
||||
}
|
||||
},
|
||||
"Fireflies and the Forest": {
|
||||
"2": {
|
||||
"unknown": true,
|
||||
"stats": []
|
||||
},
|
||||
"4": {
|
||||
"unknown": true,
|
||||
"stats": []
|
||||
}
|
||||
},
|
||||
"Kingdom's Guard": {
|
||||
"2": {
|
||||
"unknown": true,
|
||||
"stats": []
|
||||
},
|
||||
"4": {
|
||||
"unknown": true,
|
||||
"stats": []
|
||||
}
|
||||
},
|
||||
"Lost Radiance": {
|
||||
"2": {
|
||||
"unknown": true,
|
||||
"stats": []
|
||||
},
|
||||
"4": {
|
||||
"unknown": true,
|
||||
"stats": []
|
||||
}
|
||||
},
|
||||
"Quiet Manor": {
|
||||
"2": {
|
||||
"unknown": true,
|
||||
"stats": []
|
||||
},
|
||||
"4": {
|
||||
"unknown": true,
|
||||
"stats": []
|
||||
}
|
||||
},
|
||||
"Shadow Creed": {
|
||||
"2": {
|
||||
"unknown": true,
|
||||
"stats": []
|
||||
},
|
||||
"4": {
|
||||
"unknown": true,
|
||||
"stats": []
|
||||
}
|
||||
},
|
||||
"Speedy Hedgehog": {
|
||||
"2": {
|
||||
"unknown": true,
|
||||
"stats": []
|
||||
},
|
||||
"4": {
|
||||
"unknown": true,
|
||||
"stats": []
|
||||
}
|
||||
},
|
||||
"Street Boxer": {
|
||||
"2": {
|
||||
"unknown": true,
|
||||
"stats": []
|
||||
},
|
||||
"4": {
|
||||
"unknown": true,
|
||||
"stats": []
|
||||
}
|
||||
},
|
||||
"Thea's Night Tavern": {
|
||||
"2": {
|
||||
"unknown": true,
|
||||
"stats": []
|
||||
},
|
||||
"4": {
|
||||
"unknown": true,
|
||||
"stats": []
|
||||
}
|
||||
},
|
||||
"Tiny Big Adventure": {
|
||||
"2": {
|
||||
"unknown": true,
|
||||
"stats": []
|
||||
},
|
||||
"4": {
|
||||
"unknown": true,
|
||||
"stats": []
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue